система координатчертеже delphi

Автор Игорь Кулакевич, 26.09.11, 19:52:41

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Игорь Кулакевич

такая задача.
вот текст создания открытия компаса и создания в нем чертежа.

procedure TForm1.Button1Click(Sender: TObject);
var
  doc     : ksDocument2D;
  buf     : string;
  docPar  : ksDocumentParam;
  docPar1 : ksDocumentParam;
  shPar   : ksSheetPar;
  stPar   : ksStandartSheet;
  par     : ksViewParam;
  number  : Integer;
  shPar1  : ksSheetPar;
  stPar1  : ksStandartSheet;
  direct  : SmallInt;
begin
// Создать объект автоматизации KOMPAS_Graphic
  if Kompas = nil then
  begin
{$IFDEF __LIGHT_VERSION__}
    Kompas:= KompasObject( CreateOleObject('KompasLT.Application.5') );
{$ELSE}
    Kompas:= KompasObject( CreateOleObject('Kompas.Application.5') );
{$ENDIF}
    if Kompas <> nil then   begin
  Kompas.Visible := true;
         doc     := ksDocument2D( kompas.Document2D );
         docPar  := ksDocumentParam( kompas.GetParamStruct(ko_DocumentParam) );
         docPar1 := ksDocumentParam( kompas.GetParamStruct(ko_DocumentParam) );
   if ( (docPar <> nil) And (docPar1 <> nil) ) then begin
      docPar.fileName := 'c:\2.cdw';
      docPar.comment  := 'create document';
      docPar.author   := 'user';
      docPar.regime   := 0;
      docPar.type_    := lt_DocSheetStandart;
      shPar           := ksSheetPar( docPar.GetLayoutParam() );
      if ( shPar <> nil ) then begin
         shPar.shtType    := 1;
         shPar.layoutName := '';
         stPar            := ksStandartSheet( shPar.GetSheetParam() );
         if ( stPar <> nil ) then begin
            stPar.format   := 1;
            stPar.multiply := 1;
            stPar.direct   := true;
         end;
      end;
      // создали документ: лист, формат А3, горизонтально расположенный
      // и с системным штампом 1
      doc.ksCreateDocument( docPar );
              // сохраним документ
         doc.ksSaveDocument('c:/Documents and Settings/mcool/Рабочий стол/Project201/beta 0.1/1.cdw' );
      end;
      end;
        end;
end;

как сделать чтоб начало координат было в другой точке? это нужно вид новый создавать.
пример с СДК пробовал, что-то не помогло.
помогите пожалуйста.

Bordes

В текущем виде можно создавать локальные системы координат  - см. ILocalCoordinateSystem2D.
Так же, при создании нового вида, будет создана новая система координат - система координат вида.


Игорь Кулакевич

я добавил вот этот кусок, по примеру step33.pas с SDK, но ничего не происходит, и самое печальное что и ошибку не выдает:

doc.ksCreateDocument( docPar );
    FillChar( par, SizeOf(par), 0 );
  par.x     := 100;                            // Точка привязки вида
  par.y     := 100;
  par.scale_ := 0.5;                           // Масштаб вида
  par.angle  := 45;                            // Угол поворота вида
  par.color := RGB( 10, 20, 10 );             // Цвет вида в активном состоянии
  par.state := stACTIVE;                      // Состояние вида
  par.name:='main';             // Имя вида

Bordes

Если вы хотели с помощью этого "куска" создать вид, то надо было еще вызвать CreateSheetView()

Игорь Кулакевич

не могли бы Вы написать как и куда добавить.
Есть верхний кусок и этот, нужно. чтоб при нажатии на кнопку открывался компас(это работает), создавался лист А1(это работает) и система координат становилась в точку 100:100.

Bordes

эээ, все таки надо определится сначала, что вам надо:
- создать новый вид с точкой вставки в т. 100, 100 (относительно системы координат листа)
- создать в текущем виде локальную систему координат в т. 100, 100 (относительно системы координат вида)

Игорь Кулакевич

смотрите, когда я создаю новый лист(А1) там система координат в точке 0:0 (левый нижний угол).
мне нужно чтоб система координат была в точке 100 100. не важно что для этого нужно сделать.
я так понимая что систему координат листа нельзя менять? если нет тогда создать новый вид с системой в точке 100 100 относительно системы координат листа.
как-то так.

chelkar

Вот код, полученый через запись макроса в КОМПАС-Макро.
Создает вид в точке с координатами х = 100, y = 100.

# -*- coding: cp1251 -*-
#|CreateView100_100

import Kompas10API5 as KAPI
import Kompas10API7 as KAPI7
import pythoncom
from win32com.client import Dispatch
import LDefin2D
import LDefin3D
import ksConstants as CONST2D7
import ksConstants3D as CONST3D7
import MiscellaneousHelpers as MH

iKompasObject = Dispatch('KOMPAS.Application.5')
iKompasObject = KAPI.KompasObject(iKompasObject)
MH.iKompasObject = iKompasObject

iApplication = Dispatch('KOMPAS.Application.7')
iApplication = KAPI7.IApplication(iApplication)
MH.iApplication = iApplication

iDocument2D = iKompasObject.ActiveDocument2D()
iDocument = iApplication.ActiveDocument
iKompasDocument2D = KAPI7.IKompasDocument2D(iDocument)


iViewParam = KAPI.ksViewParam(iKompasObject.GetParamStruct(LDefin2D.ko_ViewParam))
iViewParam.Init()
iViewParam.angle = 0.0
iViewParam.color = 0
iViewParam.name = "Вид 1"
iViewParam.scale_ = 1.0
iViewParam.state = 3
iViewParam.x = 100.0
iViewParam.y = 100.0
obj = iDocument2D.ksCreateSheetView(iViewParam, 0)

Игорь Кулакевич

это конечно здорово. спасибо большое.
не понятно одно, этот ваш Компас-макро на каком языке код выдал?

Poltava

Python версия вероятнее всего 2.6 но не факт

chelkar

Язык - Python. Но это не принципиально. Чтобы создать новый вид, как и большинство объектов в 2D через API, необходимо:
- создать структуру параметров, для вида это LDefin2D.ko_ViewParam
- заполнить ее
- создать объект с нужной структурой параметров.
В макросе это последняя строка.
В step33.pas из SDK создание вида идет сразу за заполнением структуры параметров. Добавьте ее в свой код и все получится!