Не могу изменить положение вставляемых в сборку деталей в 7 компасе

Автор MMaX, 21.08.05, 00:09:47

« предыдущая - следующая »

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

MMaX

При создании сборки через API функции в системе КОМПАС-3D V7 (библиотека rtw) не работает установка координат для каждой детали: все детали устанавливаются в нулевые координаты сборки. Система не выдает никаких ошибок.   Проблема возникает в 7 версии Компаса (проверялись два РАЗНЫХ дистрибутива  и несколько машин, среда разработки: Delphi7 (дистрибутивы тоже разные)), в 5.11 она точно не существует: там все работает нормально.
Существует предположение, что  корнем проблемы является отсутствие какого-то куска кода в используемых процедурах, который не являлся необходимым в 5.11, а в 7 версии его применение обязательно.
Аналогичный результат получается при использовании прмеров из папки SDK в комплекте Компас. Есть подозрение, что данные примеры унаследованы от предшедствующих версий без внесения требуемых изменений.
 Ниже приведена процедура с некоторыми сокращениями . Просьба указать на ошибку в применяемой программной конструкции. Если с нахождением ошибки будут большие сложности, то, пожалуйста, киньте пример маленькой библиотеки, которая устанавливает деталь (из файла)  в задаваемые координаты сборки.

procedure CreateA3D;
var
iPart1 : ksPart;
iPart2 : ksPart;
plac : ksPlacement;
plac2 : ksPlacement;

begin

iKompasObject := KompasObject(CreateKompasObject);

if iKompasObject  nil then
  begin
  iDocument3D := ksDocument3D(iKompasObject.Document3D);
  if  idocument3d.Create(false,false) then
    begin
    if (iDocument3D  nil) then
      begin
      iDocument3D.fileName := ’Sborka.a3d’;    
      iDocument3D.UpdateDocumentParam();          
      iPart1 := ksPart(iDocument3D.GetPart(pNew_Part));
      iPart2 := ksPart(iDocument3D.GetPart(pNew_Part));

      iDocument3D.SetPartFromFile(’Vtulka.m3d’,ipart1,false);
      iPart1 := ksPart( iDocument3D.GetPart(0) );
      plac := ksPlacement( ipart1.GetPlacement() );
      plac.SetOrigin( 100, 100, 0);
      iPart1.SetPlacement(plac);
      iPart1.UpdatePlacement();
      iPart1.Update();
      iPart1.RebuildModel();

      end;
    end;
  end;
end;



    Также хотелось бы посмотреть дополнительные (кроме стандартной поставки дистрибутива) примеры исходников прикладных билиотек (rtw) для работы с 3D под 7 версию Компас, написанных на Delphi. Особый интерес представляет создание сборок.

Sabahs

Можете посмотреть пример анимации на сайте http://mariupolsapr.4ertim.com пример для компас 5.11.

Ниже код для версии К7:

unit animaciq;

interface

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

type
  TForm1 = class(TForm)
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure StopKompas(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
 Form1:TForm1;
 Kompas:KompasObject;
 J:Integer;
 
implementation

{$R *.dfm}
//==============================================================================
procedure TForm1.Button2Click(Sender: TObject);
var
 I:Integer;
 Doc3D:ksDocument3D;
 Part:ksPart;
 Placement:ksPlacement;
 X,Y,Z:Double;
begin
  Doc3D:=nil;
  Doc3D:=ksDocument3D(Kompas.ActiveDocument3D);
  if Doc3Dnil then
   begin
     if not Doc3D.IsDetail then
      begin
        Part:=nil;
        Part:=ksPart(Doc3D.GetPart(J)); // Íîìåð äåòàëè â äåðåâå ïîñòðîåíèÿ íà÷èíàÿ ñ íóëÿ
        if Partnil then
         begin
           for I:=0 to 20 do
            begin
              Part.BeginEdit;
              Placement:=ksPlacement(Part.GetPlacement);
              Placement.GetOrigin(X,Y,Z);
              Placement.SetOrigin(X+5,Y+5,Z+5); // Íîâîå ïîëîæåíèå
              Part.UpdatePlacement;
              Part.Update;
              Part.EndEdit(False);
            end;
         end else J:=-1;
        Inc(J);
      end else Application.MessageBox(’Äîêóìåíò 3D íå ÿâëÿåòñÿ ñáîðêîé’,’Ñîîáùåíèå’,0);
   end else Application.MessageBox(’Äîêóìåíò 3D íå àêòèâèçèðîâàí’,’Ñîîáùåíèå’,0);
end;
//==============================================================================
procedure TForm1.StopKompas(Sender: TObject; var Action: TCloseAction);
begin
  Kompas.ksSystemControlStop;
end;



end.

MMaX

СПАСИБО! Заработало!
Кстати, подскажите, люди добрые, где еще можно примеров под 7 версию найти?

MMaX

В догонку: хотелось бы посмотреть пример изменения цвета детали в сборке под 7 версию компаса. Есть под 5.11, но с ним те же проблемы: в 7 версии такая конструкция не функционирует.

Sabahs

iPart:=ksPart(iDoc3DSborka.GetPart(0));
     iPart.useColor:=0;
     ColorParam:=ksColorParam(iPart.ColorParam);
     ColorParam.color:=Color;
     iPart.SetAdvancedColor(ColorParam.color,ColorParam.ambient,
      ColorParam.diffuse,ColorParam.specularity,ColorParam.shininess,
      ColorParam.transparency,ColorParam.emission);
     iPart.Update;

MMaX