Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
IvanIvan
Зарегистрирован: 14.07.2017 Сообщения: 4
|
Добавлено: Ср 19 Июл 2017 12:28 Заголовок сообщения: Вопрос об Application.ActiveProjectView.MakeImageFile |
|
|
Здравствуйте!
Вопрос в следующем.
Я в модуле программно рисую в окне ИнГЕО с помощью метода PaintContour какого-либо метода отображения. После отрисовки я вызываю Application.ActiveProjectView.MakeImageFile().
Однако в полученном файле нарисованное мною отсутствует (то есть присутствуют все объекты, кроме нарисованных мной), хотя в главном окне ИнГЕО все еще присутствует.
Подскажите, как решить эту проблему? |
|
Вернуться к началу |
|
 |
Азаматов Азамат Хадисович
Зарегистрирован: 17.02.2005 Сообщения: 100 Откуда: г. Учалы, Респ. Башкортостан
|
Добавлено: Чт 20 Июл 2017 02:53 Заголовок сообщения: |
|
|
если вы рисуете по какому то событию "рисования БД", то MakeImageFile это покажет. |
|
Вернуться к началу |
|
 |
IvanIvan
Зарегистрирован: 14.07.2017 Сообщения: 4
|
Добавлено: Чт 20 Июл 2017 10:23 Заголовок сообщения: |
|
|
Рисование происходит по нажатию кнопки меню. В DbPaint_PaintComplete я продублировал вызов моей функции рисования, но MakeImageFile так и не сохраняет мои рисования |
|
Вернуться к началу |
|
 |
Азаматов Азамат Хадисович
Зарегистрирован: 17.02.2005 Сообщения: 100 Откуда: г. Учалы, Респ. Башкортостан
|
Добавлено: Вс 23 Июл 2017 00:57 Заголовок сообщения: |
|
|
IvanIvan писал(а): | Рисование происходит по нажатию кнопки меню. В DbPaint_PaintComplete я продублировал вызов моей функции рисования, но MakeImageFile так и не сохраняет мои рисования |
В DbPaint_PaintComplete рисуете через surface переданный в DbPaint_PaintComplete? или взятый из MapWindow? |
|
Вернуться к началу |
|
 |
IvanIvan
Зарегистрирован: 14.07.2017 Сообщения: 4
|
Добавлено: Пн 24 Июл 2017 15:56 Заголовок сообщения: |
|
|
Пробовал и на том, и на другом. |
|
Вернуться к началу |
|
 |
Азаматов Азамат Хадисович
Зарегистрирован: 17.02.2005 Сообщения: 100 Откуда: г. Учалы, Респ. Башкортостан
|
Добавлено: Вт 25 Июл 2017 09:58 Заголовок сообщения: |
|
|
IvanIvan писал(а): | Пробовал и на том, и на другом. |
работающий код
фрагмент c# обрабатывающий события из ингео
Код: |
public class MainClass
{
Ingeo.IIngeoApplication app;
DrawSystem drs;
int lastx, lasty, mx,my;
long lastclick;
public void Init(Ingeo.IIngeoApplication app)
{
this.app = app;
drs = new DrawSystem(app);
}
public void ShowPanel()
{
drs.ShowPanel();
}
public void Stop()
{
drs.Stop();
}
public void BaseOpened()
{
drs.BaseOpened();
}
public void BaseClosing()
{
drs.BaseClosed();
}
public void BaseDrawed(object surface)
{
drs.Draw(surface as Ingeo.IIngeoPaintSurface);
}
....
|
код скрипта передающий событие
Код: |
option explicit
dim drobj
....
' Вызывается после рисования содержимого базы данных
sub DbPaint_PaintComplete(aSurface)
drobj.BaseDrawed( aSurface)
end sub
....
|
фрагмент кода непосредственно начинающий рисование
Код: |
....
internal void StartDraw(Ingeo.IIngeoPaintSurface surf)
{
currentsurface = surf;
currentgr = Graphics.FromHdc( (IntPtr)currentsurface.DC);
....
}
....
|
далее рисуем в этом graphics все что хотим, с учетом что рисуем мы
в системе координат окна
хотя местами рисуем и через ингео
Код: |
....
internal void DrawPolyLine(List<PointFD> points)
{
Ingeo.IIngeoContour cntr = app.CreateObject(Ingeo.TIngeoObjectClass.inocContour, 0) as Ingeo.IIngeoContour;
Ingeo.IIngeoContourPart cntp = cntr.Insert(-1);
currentsurface.Pen.Style = InScripting.TInPenStyle.inpsSolid;
currentsurface.Pen.WidthInMM = 0;
currentsurface.Pen.ForZoomScale = 0;
currentsurface.Pen.Mode = InScripting.TInPenMode.inpmCopy;
currentsurface.Pen.Color = 0xFF0000;
foreach (PointFD p in points)
{
double c = 0;
if (p is PointFDC)
{
c = (p as PointFDC).c;
}
cntp.InsertVertex(-1, p.X, p.Y, c);
}
currentsurface.PaintContour(cntr, true); ;
}
....
|
|
|
Вернуться к началу |
|
 |
Азаматов Азамат Хадисович
Зарегистрирован: 17.02.2005 Сообщения: 100 Откуда: г. Учалы, Респ. Башкортостан
|
Добавлено: Вт 25 Июл 2017 10:24 Заголовок сообщения: |
|
|
если надо есть и Delphi пример
сгенерированный код activex
Код: |
...
type
TINReliefObject = class(TAutoObject, IINReliefObject)
protected
procedure FastWork; safecall;
procedure MouseDown(button, shift: LongWord; aX, aY: Integer); safecall;
procedure Done; safecall;
procedure Draw(const asurf: IUnknown); safecall;
procedure Init(const app: IUnknown); safecall;
procedure ShowSetup; safecall;
end;
...
|
реализация
Код: |
...
procedure TINReliefObject.Draw(const asurf: IUnknown);
begin
nrprojectlist.DrawAll(asurf as IIngeoPaintSurface);
end;
...
|
непосредственно рисующий фрагмент
Код: |
....
procedure TNRProject.DrawPoints(surf: IIngeoPaintSurface);
var cntr:IIngeoContour;
stl:IIngeoStyle;
pntr,tpntr,upnt:IIngeoPainter;
pntr2,pntr2a:IIngeoStdPainter;
cntp:IIngeoContourPart;
i:integer;
pp:TNRPoint;
begin
if not pshow then
exit;
pntr2:=globalapp.CreateObject(inocPainter,inptStd) as IIngeoStdPainter;
pntr2.Pen.Style:=inpsSolid;
pntr2.Pen.Color:=clRed;
pntr2.Pen.WidthInMM:=0.1;
pntr2.Pen.ForZoomScale:=1/500;
pntr2.Brush.Style:=inbsClear;
pntr2a:=globalapp.CreateObject(inocPainter,inptStd) as IIngeoStdPainter;
pntr2a.Pen.Style:=inpsSolid;
pntr2a.Pen.Color:=clYellow;
pntr2a.Pen.WidthInMM:=0.1;
pntr2a.Pen.ForZoomScale:=1/500;
pntr2a.Brush.Style:=inbsClear;
for i:=0 to pnts.Count-1 do
begin
pp:=pnts.GetPoint(i);
if incntrs.IsPointIn(pp.x,pp.y) then
pntr:=pntr2 else pntr:=pntr2a;
cntr:=globalapp.CreateObject(inocContour,0) as IIngeoContour;
cntp:=cntr.Insert(-1);
cntp.InsertVertex(-1,pp.x-1,pp.y-1,0);
cntp.InsertVertex(-1,pp.x+1,pp.y-1,0);
cntp.InsertVertex(-1,pp.x+1,pp.y+1,0);
cntp.InsertVertex(-1,pp.x-1,pp.y+1,0);
cntp.Closed:=True;
pntr.PaintContour(surf,cntr,'');
end;
end;
...
|
|
|
Вернуться к началу |
|
 |
IvanIvan
Зарегистрирован: 14.07.2017 Сообщения: 4
|
Добавлено: Ср 26 Июл 2017 15:42 Заголовок сообщения: |
|
|
Большое спасибо за такой развернутый ответ!
Позже проверю его на себе. |
|
Вернуться к началу |
|
 |
|