Сборка

Автор Voland1402, 27.04.11, 20:38:11

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

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

IgorRUtver

Что то не пойму чего не так делаю.
Алгоритм такой.

1. Создал деталь с интерфейсом iPart_pl1 -> Сохранил.
2. Создал деталь с интерфейсом iPart_rod1 -> Сохранил

3.//Теперь создаю сборку

      doc3_a1 := ksDocument3D(ks.Document3D());
      doc3_a1.Create(false, false);
      iPart_a1 := ksPart(doc3_a1.GetPart(pNew_Part));
      //Вставляю детали
        doc3_a1.SetPartFromFile('c:\PUK4.m3d',iPart_pl1,true);
        doc3_a1.SetPartFromFile('c:\PUK5.m3d',iPart_rod1,true);

      //Создаю сопряжение "совпадение"

        //Добавляю в коллекцию плоскость первой детали
        iEntityCollection_1 := ksEntityCollection(iPart_pl1.EntityCollection( o3d_face ));
        iEntityCollection_1.SelectByPoint(115, 0, 40)

         //Добавляю в коллекцию плоскость второй детали
         iEntityCollection_2 := ksEntityCollection(iPart_rod1.EntityCollection( o3d_face ));
         iEntityCollection_2.SelectByPoint(1542, 0, 5)

        //Создаю сопряжение
          If doc3_a1.AddMateConstraint(mc_Distance,iEntityCollection_1.First,iEntityCollection_2.First,0,0,20) then
           begin
            ks.ksMessage('true')
           end else ks.ksMessage('false');

       Получаю false
    Подскажите в чем может быть ошибка?

Попробуйте так If doc3_a1.AddMateConstraint(mc_Distance,ksEntity(iEntityCollection_1.First),ksEntity(iEntityCollection_2.First),0,0,20) then
Хотя я бы получил сначала ksEntity и проверил, что они не равны nil, а затем вызвал функцию AddMateConstraint.
+ Благодарностей: 2

IgorRUtver

Ураа! Догадался, у меня ошибочка была! Вот рабочий код


var
doc3_a1  : ksDocument3D;
iPart_a1_1 : ksPart;
iPart_a1_2 : ksPart;

begin
     doc3_a1 := ksDocument3D(ks.Document3D());
     doc3_a1.Create(false, false);
     doc3_a1.SetPartFromFile('c:\PUK4.m3d',iPart_pl1,true);//Добавляю деталь из файла ,iPart_pl1-указатель на интерфейс детали
     iPart_a1_1 := ksPart(doc3_a1.GetPart(0));//Получаю указатель на интерфейс первой детали в сборке
                                                                     а я использовал указатель на собственно деталь
     doc3_a1.SetPartFromFile('c:\PUK5.m3d',iPart_rod1,true);
     iPart_a1_2 := ksPart(doc3_a1.GetPart(1));   //Аналогично для 2й детали

     iEntityCollection_1 := ksEntityCollection(iPart_a1_1.EntityCollection( o3d_face ));
     iEntityCollection_1.SelectByPoint(115, 2, 2);//Создал коллекцию с плоскостью первой детали

     iEntityCollection_2 := ksEntityCollection(iPart_a1_2.EntityCollection( o3d_face ));
     iEntityCollection_2.SelectByPoint(1542, 5, 5);//Создал коллекцию с плоскостью второй детали

     doc3_a1.AddMateConstraint(mc_Distance,iEntityCollection_1.First,iEntityCollection_2.First,0,0,20)//Создал сопряжение

Спасибо большое за помощь и потраченное на меня время!
+ Благодарностей: 1