Соосность (Delphi)

Автор eugen47, 12.12.14, 03:14:03

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

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

eugen47

Доброй ночи!
Подскажите, пожалуйста.
Не получается провести сопряжение деталей в сборке, а именно соосность, совпадение работает.
Заранее благодарю за помощь!
unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ksTLB, ksConstTLB, math, ComObj;

type
  TForm4 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

       const
   pTop_Part = -1;
   o3d_face =  6;
   mc_Concentric = 4;
   mc_Distance = 5;
   mc_Concidence = 0;
   vm_Shaded = 3;
var
Form4: TForm4;
   kompas: KompasObject;
   Document3D: ksDocument3D;
   Part: ksPart;
   EntityCollection: ksEntityCollection;
   EntityFaceConcentric1, EntityFaceConcentric2: ksEntity;
   EntityFaceDistance1, EntityFaceDistance2: ksEntity;
   EntityFaceConcidence1, EntityFaceConcidence2: ksEntity;
   Placement: ksPlacement;
   path: string;

implementation

{$R *.dfm}

procedure TForm4.Button1Click(Sender: TObject);
begin
   kompas:=KompasObject(CreateOleObject('Kompas.Application.5'));
   Document3D:=ksDocument3D(kompas.Document3D());
   Document3D.Create(FALSE,FALSE);
   Part:=ksPart(Document3D.GetPart(pTop_Part));

   path:='C:\Documents and Settings\Àäìèíèñòðàòîð\Ìîè äîêóìåíòû\Äåòàëü3.m3d';
   Document3D.SetPartFromFile(path,Part,TRUE);

   path:='C:\Documents and Settings\Àäìèíèñòðàòîð\Ìîè äîêóìåíòû\Äåòàëü4.m3d';
   Document3D.SetPartFromFile(path,Part,TRUE);

   Part:=ksPart(Document3D.GetPart(0));

EntityCollection:=ksEntityCollection(Part.EntityCollection(o3d_face));
  EntityFaceConcidence1:=ksEntity(EntityCollection.GetByIndex(3));
EntityFaceConcentric1:=ksEntity(EntityCollection.GetByIndex(3));

   Part:=ksPart(Document3D.GetPart(1));

EntityCollection:=ksEntityCollection(Part.EntityCollection(o3d_face));
  EntityFaceConcidence2:=ksEntity(EntityCollection.GetByIndex(2));
  EntityFaceConcentric2:=ksEntity(EntityCollection.GetByIndex(2));

Document3D.AddMateConstraint(mc_Concentric,EntityFaceConcentric1,EntityFaceConcentric2,0,1,0);
Document3D.AddMateConstraint(mc_Concidence,EntityFaceConcidence1,EntityFaceConcidence2,0,1,0);

   Document3D.RebuildDocument();

   Document3D.drawMode:=vm_Shaded;
   Document3D.shadedWireframe:=TRUE;
   kompas.Visible:=true;
end;

end.



На картинке можете показать, что Вы сопрягаете? Получается, что Вы налаживаете сопряжения соосность и совпадение на одни и те же грани, но я не уверен, что грани соответствуют для проведения сопряжения, Вы их по индексу просто вытянули.

eugen47

Скрины

Так найдите цилиндрические грани для соосности, а плоские хороши для совпадения.

eugen47

Подскажите, пожалуйста, как это можно реализовать в моём случае?

// Добавить сопряжение соосность
PartCollection1:=ksPart(iDoc3DSborka.GetPart(0));
EntityCollection:=ksEntityCollection(PartCollection1.EntityCollection(o3d_face));
EntityCollection.SelectByPoint(0,DN/2,0);
Entity1:=ksEntity(EntityCollection.First);
PartCollection1:=ksPart(iDoc3DSborka.GetPart(1));
EntityCollection:=ksEntityCollection(PartCollection1.EntityCollection(o3d_face));
EntityCollection.SelectByPoint(0,DV/2,0);
Entity2:=ksEntity(EntityCollection.First);
iDoc3DSborka.AddMateConstraint(mc_Concentric,Entity1,Entity2,0,0,0);
+ Благодарностей: 1

eugen47