На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

KFF (Автор тем)

Поиск  Пользователи  Правила  Войти
Форум » Пользователи » KFF
Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 ... 38 39 40 41 42 43 44 45 46 47 48 След.
Технология IMLAPI, работа с контекстом отрисовки TImgContext
 
Здравствуйте господа раздаботчики !
Решил в свободное время смоделировать [URL=http://www.gistoolkit.com/forum/messages/forum2/topic1746/message9533/#message9533]знак градиентой заливкой[/URL]
Так как рисовать используя объекты нереентабельно всвязи с длительным временем отрисовки (знак получается "тяжёлым") решил воспользоватся  этим параметром:
[CODE] PImgContext = ^TImgContext;
  TImgContext = packed record
   Length      : Integer;      // Длина структуры для контроля (64 байт)
   DC : THandle; // Контекст устройства вывода (для памяти в UNIX = 0)
   View : Integer; // Тип отображения VT_SCREEN, VT_PRINT (maptype.h)
   HView : THandle; // Идентификатор параметров устройства (не изменять)
   Size : TSize; // Размер области отображения
   Scale : Single; // Масштаб отображения относительно базового масштаба карты (для немасштабируемых объектов при увеличении карты всегда равен 1)
   ScaleMethod : Integer; // Способ масштабирования (0 - картографический, 1 - чертежный, метод "лупы")
   PixelX : Double; // Коэффициент пересчета микрон в пикселы устройства по горизонтали
   PixelY : Double; // Коэффициент пересчета микрон в пикселы устройства по вертикали
   SinAngle : Double; // Sin угла поворота карты       // 19/09/01
   CosAngle : Double; // Cos угла поворота карты
   Angle : Double; // Угол поворота карты (против часовой стрелки)
   Reserv1 : Integer; // Резерв = 0
   Reserv2 : Integer;      // Резерв = 0
  end;[/CODE]
В частности:
DC : THandle; // Контекст устройства вывода (для памяти в UNIX = 0)
Всё работает отлично:
КОД:
[CODE]procedure DrawEllipse(DC : TCanvas; cPos : TImlPoint; Ra,Rb,Angle,offset : double;
InColor, OutColor : TColor);
var bc, pc : TColor;
   i : integer;
   dRx, dRY : double;
   O : double;
begin
 //RotateCanvas(DC.Handle, cPos, -angle);
 pc:=DC.Pen.Color;
 bc:=DC.Brush.Color;
 dRx:= 0.1*Ra/2; dRy:= 0.1*Rb/2;
 O:=(offset-50)/12;
 for i:=10 downto 1 do
 begin
  DC.Brush.Color := SelectColor(InColor,OutColor,i,10);
  DC.Pen.Color   := DC.Brush.Color;
  DC.Ellipse(Rect(Round(cPos.X-dRx*i+o*i),Round(cPos.Y-dRy*i),
   Round(cPos.X+dRx*i+o*i),Round(cPos.Y+dRy*i)));
 end;
// RotateCanvas(DC.Handle, cPos, angle);
 DC.Brush.Color:=bc;
 DC.Pen.Color := pc;
end;[/CODE]
НО функция RotateCanvas - закоментирована по причине:
Если я, начинаю вращать Канву, хендл которой передаётся мне структурой TImgContext вот таким вот образом:
[CODE]procedure RotateCanvas(DC : HDC; Center: TImlPoint; Angle : double);
var xForm  : TXForm;
   C   : TPoint;
   R,A : double;
begin
 R := sqrt(sqr(Center.X)+sqr(Center.Y));
 A := imlGetAngle(0,0, Center.X,Center.Y);
 xForm.eM11 := cos(angle);
 xForm.eM12 := sin(angle);
 xForm.eM21 := -xForm.eM12;
 xForm.eM22 := xForm.eM11;
 xForm.eDx  := -(R*cos(A+angle)-Center.X);
 xForm.eDy  := -(R*sin(A+angle)-Center.Y);
 SetGraphicsMode(DC,GM_ADVANCED);
 SetWorldTransform(DC, xForm);
end;[/CODE]
Всё окно карты становится чёрным.
Причина в строке кода [B]SetGraphicsMode(DC,GM_ADVANCED);[/B]
Вопрос, как выйти с ситуации?
П.С. При прорисовке на всех контекстах графики (HDC) подобного эффекта не наблюдается (даже если контексты сторонние и находятся в других приложениях)
Технология ImlApi, Передаваемые параметры
 
Здравствуйте господа разработчики !
Для прорисовки и подготовительных операций, с ядра ГИС Карта библиотеке IML через её экпортные функции передаються параметры примитивов указанных пользователем в редакторе классфикатора:
[code] function imlPaintImage(usrObjFunc:Integer; const Vertex : TPolyDataEx;
    parm : PIMGDRAW; context : PIMGCONTEXT):integer; stdcall;
 function imlPaintExample(usrObjFunc:Integer; parm : PIMGDRAW;
    context : PImgContext):integer; stdcall;
 function  imlGetImageBorder(usrObjFunc: Integer; const Vertex: TPolyDataEx;
   const parm : PIMGDRAW; context: PImgContext; var Bound: TRect): Integer; stdcall;
 function imlTestVisible(usrObjFunc: integer; const Vertex : TPOLYDATAEX;
   parm : PIMGDRAW; context: PImgContext) : integer; stdcall;[/code]
----------------------
[b]parm : PIMGDRAW[/b] - этот параметр
структура:
[code] PImgDraw = ^TImgDraw;
  TImgDraw = packed record
   Ident       : Cardinal;    // Идентификатор записи 0x7FFF7FFFE
   Length : Cardinal;    // Полная длина записи описания объекта
   Count : Word;            // Количество примитивов
   Flags : Word;    // Должен быть 0
   Image : TImgDecor;        // Заголовок первого примитива
   pValue : PChar;    // Параметры примитива по типу.
 // Далее заголовок и параметры следующих примитивов.
end;[/code]

Вопрос следующий:
как мне использовать примитивы передаваемые дампом :
[code]....
pValue : PChar;    // Параметры примитива по типу.[/code]
в контексте изменения параметров примитивов.
------------
Ситуация следующая:
Имеется векторный знак частью которого является ПОСТОЯННЫЙ ТЕКСТ
при расшифровке принятых параметров векторного знака и изменении значения постоянного текста внутри iml библиотеки , значение постоянного текста изменяется в виде созданного по шаблону объекта.
ТО ЕСТЬ ИМЕЕТСЯ ЗНАК:
[img]http://delphi-gis.ucoz.ua/Images/ForForum/2010/img0017.JPG[/img]
Если внутри iml библиотеки добраться до 2-го элемента (TImgVectorEx) и изменить значение постоянного текста в субпримитиве "текст постоянный" (см.рисунок) например на "ВЫСОТА" то, в редакторе классфикатора (см.рисунок) значение "123" принимает вид "ВЫСОТА".
Изменено: KFF - 01.01.2014 13:41:18
Технология PanTask, параметры методов работы с "мышью"
 
Здравствуйте господа разработчики !
Имеются некоторые вопросы по принимаемым параметрам некоторых экпортных функций.
С целью наглядности привожу описания в С++
[U][B]ВОПРОС 1: [/B][/U]
[CODE] long int _USERTASK utsKeyDown(HPANACTION hact,long int key,long int repeatCount, long int flags)[/CODE]
Какие значение принимает крайний параметр цепочки [B]flags[/B] ?
Как отловить удержание Alt и Shift ? Ctrl по ходу - значение [B]flags=2[/B]

[U][B]ВОПРОС 2: [/B][/U]
Набор:
[code] long int _USERTASK utsLeftDown(HPANACTION hact,long int modKeys, POINT * point)
 long int _USERTASK utsLeftUp(HPANACTION hact,long int modKeys, POINT * point)
 long int _USERTASK utsMove(HPANACTION hact,long int modKeys, POINT * point)
 long int _USERTASK utsRightDown(HPANACTION hact,long int modKeys,POINT * point)
 long int _USERTASK utsRightUp(HPANACTION hact,long int modKeys, POINT * point)[/code]
Что представлает собой параметр [B]modKeys[/B], какие значения принимает и что они обозначают.

------------
Буду благодарен за ответ
Технология PanTask, Активация и деактивация "акций"
 
Здравствуйте господа разработчики !
Вопрос такого рода:
Возможно ли запустить ОДНОВРЕМЕННО две различные акции в пределах одной задачи?
СИТУАЦИЯ:
Имеется древовидно развёрнутая струкутра панелей такого вида
[IMG]http://delphi-gis.ucoz.ua/Images/ForForum/2010/img0015.JPG[/IMG]
Две кнопки повешаны на акции работак которых зависит друг от друга.
При нажатии на кнопку 1 - активируется акция 1 которая выполняет подготовительные работы
Теперь мне нужно при нажатии на кнопку 2 (акция 2), используя результат акции 1
сформировать конечный результат работы НО
КНОПКА 1 автоматически отжимается (с удалением акции 1) при нажатии на конпку 2 и наоборот.
----------------
Какой ВЫХОД с ситуации ?

П.С:
Наверное виновен этот кусень кода который прописан в методе
CheckAction задачи ?
[CODE]try
      {
        TPanAction * act =                     \
             new actiontype(this,comid);       \
        if (act->GetActionHandle() == 0)       \
          {delete act;return (HMAPACTION)0;}   \
        return act->GetActionHandle();         \
      }
     catch(...)
      {[/CODE]
Особенно строка
if (act->GetActionHandle() == 0)      
{[B]delete act[/B];return (HMAPACTION)0;}
Изменено: KFF - 01.01.2014 13:39:15
Технология PanTask, предназначение "мёртвого" объекта
 
Здравствуйте господа разработчики !
Вопрос прост : ЦЕЛЬ И НАЗНАЧЕНИЕ СУЩЕСТВОВАНИЯ класса TPanWindow ?
----------
Начал глубже копать технологию с целью создания приемлемого и понятливого набора компонент.
Проанализировав свойства и методы TPanWindow пришёл обнаружил следующее:
1. Методы и свойства, а также сам объект класса TPanWindow не опрашивается и не передаеётся в ГИС Карту
в отличии от TPanTask и TPanAction (указателями htask, haction)
2. Все внутренние методы (кроме некоторых касающихся прорисовки) продублированны в TPanTask
(некоторые методы продублированы и в TPanAction)
3. Большинство методов класса TPanWindow вызываются через привязанный TPanTask.
--------------
Переделав немного структуру классов и "уничтожив" класс TPanWindow (перенеся все уникальные методы и свойства в TPanTask) - НИКАКОГО отличия в работе задаче не ОБНАРУЖИЛ
--------------
Зачем же тогда TPanWindow вообще нужен?
Технология PanTask, Определение ориентации заранее созданной панели
 
Здравствуйте господа разработчики !
СИТУАЦИЯ (очень распространённая)
Имеется задача состоящая с нескольких панелей.
Одна панель - БАЗОВАЯ
Вторая панель - дочерняя и вызывается (создаётся) при клике на одну из кнопок первой панели
Как мне правильно разместить дочерную панель относительно БАЗОВОЙ ?
----------------
Взять область TRect физического размещения панели я могу, а взять ОРИЕНТАЦИЮ её относительно "бордюра ГИС Карта" нет.
Если использовать ориентацию заданную при создании базаовой панели то алгоритм можно написать до того момента,
пока пользователь не смести ПАНЕЛЬ в другое место (где ему удобней)

САМ ВОПРОС:
Как получить значение (ppTop,ppLeft,....) уже созданной в ГИС Карте Панели ???
Технология PanTask общие вопросы
 
Здравствуйте господа разработчики
ВОПРОС 1:
Какой минимальный набор свойств и методов класса TPanTask нужно передавать в ЯДРО ГИС КАРТЫ
для идентификации его как ЗАДАЧИ?
-----------
К примеру с тела класса:

TPanTask = class(TObject)
protected
 FMapTask     : HMAPTASK;                    // Идентификатор задачи
 FHinstance   : HMODULE;                     // Подключенная библиотека MAPTASK
 FTaskPath    : array[0..MAX_PATH] of char; // Путь к MAPTASK
 function  CheckAction(aRun, aComid : integer; aActionType : TCommandActionClass; aTopic : integer) : integer;
public
[S] FMapList : TMAPTASKLIST; // Список функций управления задачей[/S]
  FActList     : TMAPACTLIST;                 // Список функций управления обработчиком
  FMapWindow   : TPanWindow;                  // Окно электронной карты
  FHMap        : HMAP;                        // Документ : "электронная карта"
  FHMapDoc     : HMAPDOC;
[S] FAppHelpName : array[0..MAX_PATH] of char; // Имя файла Help приложения (полный путь).Если у задачи свой Help - заменить имя !
  FAppIniName  : array[0..MAX_PATH] of char; // Имя файла Ini приложения. Если у задачи свой Ini - заменить имя !
  FAppPathName : array[0..MAX_PATH] of char; // Путь к файлам DLL/EXE приложения[/S]
  FLanguage    : integer;                     // Код языка диалогов и меню
  FHMainWindow : HWND;                        // Идентификатор главного окна приложения
  FAction      : TPanAction;                  // Указатель на текущий обработчик
[S]  FDoupoint    : TDOUBLEPOINT;
  FPicpoint    : TPOINT;
[/S]
  constructor CreatePanTask(mapdoc : HMAPDOC; var parm : TTASKPARM ; const pathname : PChar); virtual;
  destructor  Destroy; override;
  function IsActive : integer;
  function  GetTaskIdent : HMAPTASK;
  procedure Quit;
[S] procedure CallHelp(comid : integer); virtual;
  procedure ViewHelp(topic : integer; helpname : PChar); virtual;
  procedure CloseAction(comid : integer); virtual;
  procedure DestroyAction(comid : integer); virtual;
  function  GetAction(comid : integer; run : integer) : HMAPACTION;  virtual;
  function EnableAction( var ce : TCommandEnabler): integer;  virtual;[/S]
  function PrepareMessage(amessage : integer; awparam : WPARAM;alparam : LPARAM; var retcode : integer) :integer;  virtual;
 [S] function IsMultiDocTask : integer; virtual;
  procedure RestartAction(comid : integer); virtual;[/S]
  procedure SetFocus(ahwnd : HWND); virtual;
  function KeyDown(key : UINT;repeatCount : UINT ;flags : UINT) : integer;  virtual;
 [S] procedure ChangeData; virtual;
  procedure AdjustData; virtual;
  procedure ChangeObject(var achangeinfo : TCHANGEINFO); virtual;
  function IsChangeObjectActive : integer; virtual;
  procedure ChangeLanguage(code : integer); virtual;[/S]
  function GetMapWindow : TPanWindow;
  function GetLanguage : integer;
[S] function Name : PChar; virtual;[/S]
  function GetMainHandle : HWND;
  function MainMessage(amessage : integer; awparam : integer;alparam : integer) :integer;
[B][S] function PanelIdent : integer; virtual;[/S][/B]
 [S] function GetPicturePoint : PTPOINT ;
  function GetMapPoint : PDOUBLEPOINT ;
  function GetPlanePoint : PDOUBLEPOINT ;
  function GetGeoPoint : PDOUBLEPOINT ;
  function IsGeoSupported : integer;[/S]

  function LoadFunction(const name : PChar) : pointer;
  [S]function CreateTaskPanel: integer; virtual;
  function CreatePanel(hInst : HMODULE ; const name : PChar; panelId : integer ): integer; virtual;
  function InsertButton(panelId : integer ;  bmpIndex : integer; bmpName : TImageList; command : integer; after : integer): integer; virtual;
  function MovePanel(panelId : integer ; var rect : TRECT; position : integer; layout : integer): integer;
  function DeleteButton(panelId : integer; command : integer): integer;virtual;
  function SetButtonFace(panelId : integer; command : integer; bmpFace : HBITMAP): integer;
  function GetPanelHandle(panelId : integer): HWND;
  function ShowPanel(panelId : integer; show : integer): integer;
  function PanelCanClose(panelId : integer): integer;   virtual;
  procedure PanelClosed(panelId : integer); virtual;
  function PanelRightUp(panelId : integer; point : PTPOINT): integer;   virtual;[/S]
end;
процентов 80% функций, я обрабатываю непосредственно при запросе от ядра в ЭКСПОРТНЫХ ФУНКЦИЯХ
(перечёркнутые)
Красные вообще не нужны, так как обработка координат происходит по алгоритму указанному пользователем и выполняется напрямую нужными АПИ функциями.
Технология PanTask, Ошибка в примере на Паскале
 
Здравствуйте господа Разработчики !
Найдена ошибка в описании экспортной функции на ПАСКАЛЕ
Путь к файлу
...ГИС КАРТА\Sdk\PanTask\Delphi\usertask.pas
ОШИБКА:
// Извещение об изменени языка диалогов и меню
[B]procedure[/B] utsChangeLanguage(htask : HPANTASK; [S]aparm : TTASKPARM[/S]);  [B]stdcall[/B];
ДОЛЖНО БЫТЬ
[B]procedure[/B] utsChangeLanguage(htask : HPANTASK; aparm : PTASKPARM); [B]stdcall[/B];
-----------------
Все заранее скомпилированные приложения-задачи на Паскале, работают нормально до тех пор
пока не происходит смена языка в ГИС КАРТЕ
П.С. Для достоверности, скомпилируйте пример по указанному пути и провертье
Изменено: KFF (Фёдор) - 25.03.2010 19:28:04 (убрал дублирующийся коментарий)
предназначение и результат функции
 
Здравствуйте !
Объясните мне пожалуйста УКАЗАТЕЛЬ на что, возвращает указанная функция ?
[CODE] // Запросить параметры отображения объекта по внутреннему коду
 // (порядковому номеру) объекта (с 1)
 // hRsc - идентификатор классификатора карты
 // incode - внутренний код объекта (номер по порядку)
 // При ошибке возвращает 0

function mapGetRscObjectParameters(Rsc : HRsc; incode : integer) : PChar;
{$IFNDEF LINUXAPI} stdcall {$ELSE} cdecl {$ENDIF}
external sGisAcces;[/CODE]
Изменено: KFF (Фёдор) - 23.03.2010 20:58:57
Технология ImlApi
 
Здравствуйте господа разработчики !
Вопрос следующего плана:
Имеется некий пользовательский объект состоящий из примитивов.
Один из примитивов - векторный знак, одним из элементов которого является "Постоянный текст"
Вопрос:
Каким образом, используя структуру TIMGVECTOREX в частности запись TIMGPOLYDESC
динамически менять указанный текст.
---------------
Попытка достучатся до (Parm  : Cardinal) структуры TIMGPOLYDESC ни к чему не приводит
При приведении Parm до PIMGVECTORTEXT получаю:
-------------
изменяемое поле (цвет и параметры шрифта меняются)
Text  : TIMGTEXT ;             // Параметры шрифта

поле 0 (постоянный текст)
Code  : integer  ;             // Код семантики объекта, для выбора переменного текста или 0 для постоянного текста

проблемное поле
Title : array[0..31]of char; // Постоянный текст
-----------
Что бы я не передавал в  Title (StrCopy, StrPCopy, Move и.т.п)
Постоянный текст в векторном знаке остаётся неизменным.

П.С. Пишу знак в котором некоторые элементы (в частности векторный знак) прорисовываются несколько раз
в зависимости от заданных семантик (указатель с числом - один векторный знак) красный текст другой
[IMG]http://delphi-gis.ucoz.ua/Images/ForForum/2009/MSA.JPG[/IMG]
Изменено: KFF - 01.01.2014 13:28:36
Страницы: Пред. 1 ... 38 39 40 41 42 43 44 45 46 47 48 След.



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности