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

KFF (Все сообщения пользователя)

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

Страницы: Пред. 1 ... 317 318 319 320 321 322 323 324 325 326 327
цвет условного знака
 
По поводу общего алгоритма - вопрос к модераторам ФОРУМА.

Цвета в данном класификаторе меняються не из-за семантики а из-за того что каждый объект был создан редактором объектов классификатора, и одним из элементов объекта - субобъект с конкретной раскраской. При смене палитры идет замена цветов не по коду классификатора (потому-что Вы писали что семантика "обязательная", не влияющая на вид), а коду цвета этого конкретного субобъекта.
Кстати при смене палитры классификатора (даже при смене типа палитры 16 цветов-256, RGB - CMYK ) меняеется расцветка ВСЕХ без исключения объектов. Как см.1-е предложение ответа.
Параллельные потоки
 
В добавок !
Все таки стало интересно и решила проверить господина Козлова.
Как говороит один мой знакомый молотком можно не только забить гвоздь но и ....
(не буду продолжать)
-----------------------
"НЕРЕШАЕМАЯ ЗАДАЧА"  - многопотоковый модуль работающий с библиотекой "mapacces.dll" (из состава ГИС Панорама)
который должен отображать участок карты на разные КЕНВЕС-ы
----------------
РЕЗУЛЬТАТ НИЖЕ(код - правда на Паскале, Си недолюбливаю):
если интересует рабочий модуль (скинь свои координаты мне на мыло uuof@mail.ru)
перекину КОД и ЕХЕ
PS: (программа запускается любое количество раз, в ней по 3-потока.ВРОДЕ ПРОБЛЕМ НЕТ, и exception-ов тоже)
КОД:

____________________________________________________________­_____
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls;

type
 // КЛАСС: стандартный поток Винды (Мой потомок)
 //
 TMyThread = class(TThread)
  protected
    IsDraw : boolean;
  public
    FDC     : Cardinal;
    ViewMap : boolean;
    FMap    : integer;
    sName   : string;
    procedure Execute; override;
 end;

 // КЛАСС: стандартная форма
 TForm1 = class(TForm)
   Panel1: TPanel;
   Button1: TButton; // кнопка "Создать 3 потока"
   Button2: TButton; // кнопка "Активировать прорисовку в потоках"
   p1: TPanel; // будем использовать панель 1 как Кенвес для потока 1
   p3: TPanel; // будем использовать панель 2 как Кенвес для потока 2
   p2: TPanel; // будем использовать панель 3 как Кенвес для потока 3
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   Threads : array[0..2]of TMyThread;
 public
   FMap : integer;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

 // ОПИСЫВАЕМ САМЫЕ НЕОБХОДИМЫЕ ФУНКЦИИ mapacces.dll ДЛЯ ПРИМЕРА

 function mapOpenMap(Map: Pchar; mode: integer): integer; stdcall;
  external 'mapacces.dll' name 'mapOpenMap';

 procedure mapCloseMap(Map: integer); stdcall;
  external 'mapacces.dll' name 'mapCloseMap';

 // ... И ФУНКЦИЯ - "ПАРАЗИТ", КОТОРАЯ НЕ РИСУЕТ В НЕСКОЛЬКИХ ПОТОКАХ
 procedure mapPaint95(Map: integer; DC : HDC;Erase:integer;var R : TRect); stdcall;
  external 'mapacces.dll' name 'mapPaint95';


{ TMyThread }
// Запуск потока
procedure TMyThread.Execute;
var R : TRect;
begin
 inherited FreeOnTerminate := TRUE;
 FillChar(R,SizeOf(TRect),0);
 R.Top    :=100;
 R.Left   :=100;
 R.Right  :=300;
 R.Bottom :=300;
 try

  while (not Terminated) do
  try
    // если еще не нарисовано И активировано -"НАРИСОВАТЬ"  то:
    if not IsDraw and ViewMap then
    begin
     // Рисуем по законам описанными в mapapi.h
     SetViewportOrgEx(FDC,0,0,nil);
     mapPaint95(FMap,FDC,1,R);
     // устанавливаем флажек НАРИСОВАНО
     IsDraw:=true;
    end;

  except
   Terminate;
  end;

 finally
   Terminate;
 end;
end;


// КЛИК -  зоздаються 3 потока
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin

for i:=0 to 2 do
begin
 Threads[i]:=TMyThread.Create(true);
 Threads[i].sName := 'THREAD:'+IntToStr(i+1);
 Threads[i].FMap := FMap;
 Threads[i].ViewMap := false;
 Threads[i].IsDraw := false;
end;

Threads[0].FDC:=GetDC(P1.Handle);
Threads[1].FDC:=GetDC(P2.Handle);
Threads[2].FDC:=GetDC(P3.Handle);

for i:=0 to 2 do
Threads[i].Resume;

Button1.Enabled:=false;
end;

// активация приложения (создание Формы)
procedure TForm1.FormCreate(Sender: TObject);
begin
// открываем карту
FMap:=mapOpenMap('C:\Panorama10\Data\Podolsk\PODOLSK.MAP', GENERIC_READ);
end;

// деактивация (разрушение) формы
procedure TForm1.FormDestroy(Sender: TObject);
var i : integer;
begin
for i:=0 to 2 do
begin
 if Assigned(Threads[i]) then
 Threads[i].terminate;

end;
ReleaseDC(P1.Handle,Threads[0].FDC); // каждому потоку вешается свой индивидуальный Кенвес
ReleaseDC(P2.Handle,Threads[1].FDC); // каждому потоку вешается свой индивидуальный Кенвес
ReleaseDC(P3.Handle,Threads[2].FDC); // каждому потоку вешается свой индивидуальный Кенвес
mapCloseMap(FMap);
end;

// клик другой кнопкой - выставляем флажки нарисавть карту на прикрепленный к потоку Кенвес
//
procedure TForm1.Button2Click(Sender: TObject);
var i : integer;
begin
  for i:=0 to 2 do
  begin
   Threads[i].ViewMap:=true;
   Sleep(1000); // обязательно должно успеть отработать !
  end;
end;

end.
_______________________________

В директории с ЕХЕ-шником должны находиться:
mapacces.dll и CW3230.DLL
Изменено: KFF - 18.11.2015 15:21:35
Параллельные потоки
 
ОТВЕТ АНДРЕЮ КОЗЛОВУ!
НЕПРАВДА!
Показываю НАГЛЯДНО работу библиотеки mapacces.dll
в трех потоках (различных программах) одновременно
1. ГИС Панорама
2. Задача PanTask
3. Задача MapTask
http://img229.imageshack.us/img229/1689/33438260zj2.th.jpg
цвет условного знака
 
Здравствуйте коллега!
Ответы;
Вопрос 1 (связь) - в данном классификаторе НИКАК
Вопрос 2 (выбор цвета) - ВЫБИРАЕТСЯ ЦВЕТ С КОДОМ "0" если таков отсутсвует с наименьшим кодом
Вопрос 3 НИЧЕГО (если этим цветам не соответсвует Цветной объект у которого семантика влияет на ВИД)

С Уважением XENA!
Функция mapPlaneToGeo() для проекции Меркатора
 
Доброго времени суток господин Bolotoff !
Судя по всему наши модераторы еще не прочитали Ваш вопрос, и я приняла инициативу на себя.
Отсылаю Ван на ящик карту с Вашими параметрами и код (на Паскале) с функцией которая Вас беспокоит.
Я не знаю что у Вас с библиотеками GisTool, но мой Вам совет - обновите.
В центре карты с параметрами которые Вы указали выше
для точки  X=(4373129.8+3719858.8)/2       Y=0  
получается B=50.094318, L=87.00000 см.код.
Космолнавигационные карты
 
Но это единый тип карты который, по моему мнению, позволяет наносить объекты по всей территории мира одновременно. Цилиндрические проекции почему-то при копировании на них объектов с других карт (через буфер) или при присоединении пользовательской карты (с дальнейшей ее трансформацией) превращает объекты южнее экватора в месиво:
Отсылаю на тот-же ящик пример месива (001.zip) + исходную карту (002.zip)+ сит который нужно на нее посадить(003.zip).

Космонавигационная карта (обзорная мировая) которая Вами создана этот сит в месиво не превращает
Изменено: XENA - 28.12.2008 19:36:52
Космолнавигационные карты
 
Доброго времени дня!
Почему во всех версих ГИС Панорама от 7.0 до 10.2 отсутсвтует возможность создания Космонавигацинных карт. И каким образом их создавать ?
Страницы: Пред. 1 ... 317 318 319 320 321 322 323 324 325 326 327



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

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