• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Сборка деталей

Автор djmaks@, 01.04.15, 17:46:10

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

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

djmaks@

01.04.15, 17:46:10 Последнее редактирование: 01.04.15, 17:58:39 от djmaks@
Проблема с соосностью в сборке, подскажите в чем проблема? Хотя по рисунку видно, что она встала на место.

procedure TForm1.Button3Click(Sender: TObject);
var
  iPart               : ksPart;
  PartPlac            : ksPlacement;
  EntityCollection    : ksEntityCollection;
  Entity1,Entity2     : ksEntity;
  EntityAxis          : ksEntity;
  iCircularCopy       : ksEntity;
  AxisOperation       : ksAxis2PlanesDefinition;
  iCircularCopyDef    : ksCircularPartArrayDefinition;
  iCircularCopyColl   : ksPartCollection;
  iProjectionColl     : ksViewProjectionCollection;
  iProjection         : ksViewProjection;
  iKompasObject: KompasObject;
  iDocument3D: ksDocument3D;
  iDocument2D: ksDocument2D;
begin
  iKompasObject := KompasObject(CreateKompasObject);
  iDocument3D := ksDocument3D(iKompasObject.ActiveDocument3D);
  iDocument3D := ksDocument3D( iKompasObject.Document3D() );
    if iDocument3D.Create(false, false) then
  // Äîáàâëÿåì ïåðâóþ äåòàëü
  iPart:=ksPart(iDocument3D.GetPart(pTop_Part));
// çàäàòü ñâîé ïóòü ê ôàéëó Äåòàëè 1
iDocument3D.SetPartFromFile('F:\ñàïð\Êóðñîâàÿ\Arka1.m3d',iPart,false);
  iPart.name := 'Äåòàëü1';
  iPart.Update;
  // Äîáàâëÿåì âòîðóþ äåòàëü
  iPart:=ksPart(iDocument3D.GetPart(pNew_Part));
  iDocument3D.SetPartFromFile('F:\ñàïð\Êóðñîâàÿ\Svistok1.m3d',iPart,false);
  iPart.name := 'Äåòàëü2';
  iPart.Update;
  // Äîáàâèòü ñîïðÿæåíèå ñîâïàäåíèå
  iPart:=ksPart(iDocument3D.GetPart(0));     // Ïåðâûé îáúåêò
  EntityCollection:=ksEntityCollection(iPart.EntityCollection(o3d_face));
  EntityCollection.SelectByPoint(0,10,0); //çàäàòü íóæíûå êîîðäèíàòû!
//Äîáàâëÿåì â èòîãîâóþ êîëëåêöèþ îòôèëüòðîâàííóþ òî÷êó
  EntityCollection.Add(ksEntity(EntityCollection.First));
  Entity1:=ksEntity(EntityCollection.GetByIndex(0));
  iPart:=ksPart(iDocument3D.GetPart(1));     // Âòîðîé îáúåêò
  EntityCollection:=ksEntityCollection(iPart.EntityCollection(o3d_planeXOY));//o3d_pointCS));
  Entity2:=ksEntity(EntityCollection.GetByIndex(0));
  // Äîáàâëÿåì ñîïðÿæåíèå
  iDocument3D.AddMateConstraint(mc_Coincidence,Entity1,Entity2,0,1,0);
// Äîáàâèòü ñîïðÿæåíèå  êîíöåíòðè÷íîñòü
  iPart:=ksPart(iDocument3D.GetPart(0));     // Ïåðâûé îáúåêò
  EntityCollection:=ksEntityCollection(iPart.EntityCollection(o3d_face));
  EntityCollection.SelectByPoint(0,70/2,10);
//Äîáàâëÿåì â èòîãîâóþ êîëëåêöèþ îòôèëüòðîâàííóþ òî÷êó
  EntityCollection.Add(ksEntity(EntityCollection.First));
  Entity1:=ksEntity(EntityCollection.GetByIndex(0));
  iPart:=ksPart(iDocument3D.GetPart(1));     // Âòîðîé îáúåêò
  EntityCollection:=ksEntityCollection(iPart.EntityCollection(o3d_face));
  EntityCollection.SelectByPoint(0,70/2,10);
//Äîáàâëÿåì â èòîãîâóþ êîëëåêöèþ îòôèëüòðîâàííóþ òî÷êó
  EntityCollection.Add(ksEntity(EntityCollection.First));
  Entity2:=ksEntity(EntityCollection.GetByIndex(0));
  // Äîáàâëÿåì ñîïðÿæåíèå
  iDocument3D.AddMateConstraint(mc_Concentric,Entity1,Entity2,0,1,0);
  iDocument3D.RebuildDocument;


djmaks@

Вот

По индексам привязки делать бесполезно, Вам нужно идентифицировать поверхности по ихним индивидуальным свойствам.

djmaks@

Подскажите как это сделать, пожалуйста.

Поиск по форуму, это уже есть, я искать не хочу, времени на это нет.

djmaks@

Ну подскажите, а то уже неделю мучаюсь, все нервы вынесла уже мне  :`(


djmaks@


djmaks@

Хотя скорей всего не правильно.

djmaks@

Может еще кто-нибудь что-то посоветует?

Точка по которой Вы ищите грань, должна находиться так, чтобы только одна грань попадала в коллекцию, если точка будет на ребре, то будет больше чем одна грань и последующие вытягивание по индексу при каждом новом запуске будет превращаться в лотерею СпортЛото.

djmaks@

Может напишите код для моего случая? Если можно.


djmaks@

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

А я думаю, что да.
Для окружающих неизвестны габариты и взаимное расположение искомых поверхностей и их систем координат.
+ Благодарностей: 1

djmaks@

04.04.15, 09:30:17 #16 Последнее редактирование: 04.04.15, 10:23:45 от djmaks@
Хотел еще исходники кинуть, но много весят