Создание dll-библиотек для построения ассоциативного чертежа на Delphi

Автор Ирина111, 17.06.14, 13:52:12

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

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


Ирина111

disp := kompas.ksGetApplication7;
   newKompasAPI := disp As IApplication;
   pDocuments := newKompasAPI.Documents;

   pDocument := pDocuments.Add(1,true);//(doc tupe,visible-regim)
   pDocument.LayoutSheets.ItemByNumber[1].Format.Format := ksFormatA0;
   pDocument.LayoutSheets.ItemByNumber[1].Update;

   pKompasDocument2D :=  pDocument as iKompasDocument2D;

   pViewsAndLayersManager := pKompasDocument2D.ViewsAndLayersManager;
   pViews := pViewsAndLayersManager.Views;




   Air:= VarArrayCreate([0,3],varInteger);
   Air[1]:= vp_Front;
   Air[2]:= vp_Up;
   //Air[3]:= vp_Right;
   pViews.AddStandartViews(OpenFile,'ff',Air,650,400,1,10,10);

   pView1 := pViews.ViewByNumber[0];
    pView2 := pViews.Add(4);/
    pCutViewParam := pView2 as ICutViewParam;
    pCutViewParam.AddCut('A',1,100,0,true,nil,pView1);



не получается сделать разрез

pView2 := pViews.Add(4); ??? - vt_Section 7 Вид разрез\сечение
Посмотрите в справке, там много свойств и их нужно тоже заполнить, что не равно нулю.
В примечании данный пункт читали?
3. Для отображения вида в документе нужно задать его параметры и вызвать метод IDrawingObject::Update.


Ирина111

а сам порядок действий верный?

pView1 := pViews.ViewByNumber[0]; //??????? ????????? ?? ??????? ???
    pView2 := pViews.Add(7);//??????? ??? ??????
    pCutViewParam := pView2 as ICutViewParam; //????????? ???????
    pCutViewParam.AddCut('A',1,100,0,true,nil,pView1);
    pViews.Item[0].Update;


что нужно еще поменять кроме контура(nil)?

Нулевой вид - системный, т.е. не убиваемый.
pView2.Update;


Вы создавали pView2, так и работайте с ним.
PS. Он у Вас, как минимум четвёртый.

Ирина111

  pView1 := pViews.ViewByNumber[1]; //??????? ????????? ?? ??????? ???
    pView2 := pViews.Add(7);//??????? ??? ??????
    pCutViewParam := pView2 as ICutViewParam; //????????? ???????
    pCutViewParam.AddCut('A',1,100,0,true,nil,pView1);
    pView2.Update;

вот так. и ничего не меняется

Сделайте разрез в Компасе в ручную и посмотрите, что нужно.
Смотрите свойства вида, у Вас не все параметры заданны.
Обратите внимание на интерфейс IAssociationView.

Ирина111

я запуталась.
понимаю, что чтобы сделать разрез мне нужен вид сверху. поставить линии разреза и сместить разрезанный вид, в Компасе при чертеже я делаю именно так.

у Вас нет примера кода?
не получается сделать.

Примера не было, сел написал, остальное допилите сами.
//==============================================================================
procedure TForm1.ErrorKompas(Sender: TObject);
var
Disp:IDispatch;
KompasAPI:IApplication;
CutDocuments:IDocuments;
Document:IKompasDocument;
Symbols2DContainer:ISymbols2DContainer;
ViewPointers:IViewPointers;
ViewPointer:IViewPointer;
Doc2D:IKompasDocument2D;
ViewsAndLayersManager:IViewsAndLayersManager;
Views:IViews;
View,View1:IView;
pCutLines:ICutLines;
pCutLine:ICutLine;
Points:OleVariant;
pDrawingObject:IDrawingObject;
pAssociationView:IAssociationView;
begin
  Disp:=IDispatch(CreateKompasApplication);
  KompasAPI:=Disp as IApplication;
  Document:=KompasAPI.ActiveDocument;
  if Document<>nil then
   begin
     Doc2D:=Document as IKompasDocument2D;
     if Doc2D<>nil then
      begin
        ViewsAndLayersManager:=Doc2D.ViewsAndLayersManager;
        if ViewsAndLayersManager<>nil then
         begin
           Views:=ViewsAndLayersManager.Views;
           if Views<>nil then
            begin
              View:=Views.View[1];
              if View<>nil then
               begin
                 Symbols2DContainer:=View as ISymbols2DContainer;
                 if Symbols2DContainer<>nil then
                  begin
                    pCutLines:=Symbols2DContainer.CutLines;
                    if pCutLines<>nil then pCutLine:=pCutLines.Add;
                    if pCutLine<>nil then
                     begin
                       // Расположение стрелок - справа по направлению ломаной
                       pCutLine.ArrowPos:=False;
                       // Расположение дополнительного текста - у второй стрелки
                       pCutLine.AdditionalTextPos:=False;
                       // Отключить автосортировку
                       pCutLine.AutoSorted:=False;
                       // Создать массив точек линии разреза
                       Points:=VarArrayCreate([0,3],varDouble);
                       Points[0]:=0;
                       Points[1]:=500;
                       Points[2]:=0;
                       Points[3]:=-500;
                       // Задать массив точек линии разреза
                       pCutLine.Points:=Points;
                       // Применить изменения
                       pCutLine.Update;
                       pDrawingObject:=pCutLine as IDrawingObject;
                       View1:=Views.Add(7);
                       View1.X:=1000;
                       View1.Y:=0;
                       pAssociationView:=View1 as IAssociationView;
                       if pAssociationView<>nil then
                        begin
                           pAssociationView.BaseView:=View;
                           if pDrawingObject<>nil then pAssociationView.BaseObject:=pDrawingObject;
                           View1.Update;
                        end;
                     end;
                    Symbols2DContainer:=nil;
                  end;
                 View:=nil;
               end;
              Views:=nil;
            end;
           ViewsAndLayersManager:=nil;
         end;
        Doc2D:=nil;
      end;
     Document:=nil;
   end;
  KompasAPI:=nil;
  Disp:=nil;
end;
//==============================================================================
+ Благодарностей: 1

Ирина111

Спасибо! получилось построить разрез, но как теперь программно записать, что некоторые детали резать не надо? например верх этого вида

Ирина111

Вопрос создания библиотеки закрыт. Спасибо Sabahs за помощь
+ Благодарностей: 1