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

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

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

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

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

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

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

Проблема при создании дуги IArc3D

Автор ural_su, 31.10.13, 16:50:42

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

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

ural_su

изменил код на
IArc3DPtr Create3DArc(IKompasDocumentPtr & doc, IPoint3DPtr point_1,IPoint3DPtr point_2, double radius, IModelObjectPtr plane_ent)
{
   
   IArc3DPtr arc3D = NULL;
   // Получаем 3D документ
   IKompasDocument3DPtr doc3D(doc);
   IPart7Ptr part ( doc3D->TopPart );
   if (part)
   {
      IAuxiliaryGeomContainerPtr auxCont(GetAuxiliaryGeomContainer(doc));
      if (auxCont)
      {
         
         IArcs3DPtr arcsCol(auxCont->GetArcs3D());
         arc3D = arcsCol->Add();
         if (arc3D)
         {   
            if(point_1 && point_2 && plane_ent)
            {
               arc3D->PutBuildingType( ksArc3DByCentre);
               arc3D->PutBuildingObject(plane_ent);
               arc3D->PutAssociationObject(ksArc3DCenter, part->GetDefaultObject(o3d_pointCS));
               IModelObjectPtr obj_1(point_1);
               IModelObjectPtr obj_2(point_2);
               arc3D->PutAssociationObject(ksArc3DAngle1, obj_1);
               arc3D->PutAssociationObject(ksArc3DAngle2, obj_2);
               //arc3D->PutClosed(TRUE);
               arc3D->PutDirection(false);
               arc3D->PutRadius(radius);
               arc3D->Update();
            }
         }
      }
   }
   return arc3D;
}
та же фигня


ural_su

01.11.13, 18:36:24 #22 Последнее редактирование: 01.11.13, 22:31:01 от ural_su
строит дугу неправильно

ural_su

дебаг случайно прикрепил

Радиус соответствует, радиусу сферы?
P.S. Если картинки прикрепляете, то не уменьшайте пожалуйста, я глаза ломать не буду.

ural_su


ural_su

 максимальный размер одного файла — 200 Кбайт больше не прикрепляются, поэтому и приходится уменьшать

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

ural_su

прошу прощения

Вы меня извините тоже, я разбираюсь в форматах, но зачем мне адреса Ваших переменных, если я к ним обращусь, то даже подумать боюсь, куда меня Windows пошлёт.
Радиус Вашей дуги 11 мм, а радиус сферы, явно больше и он у Вас не показан.

ural_su

радиус сферы тоже 11
ISketchPtr sketch( CreateSketch(doc, 0, 0, 11, 90) );

ural_su

ISketchPtr CreateSketch( IKompasDocumentPtr & doc, double x, double y, double r, double angle )
{
   ISketchPtr new_sketch = NULL;
   if ( doc )
   {
      IModelContainerPtr modelCont( GetModelContainer(doc) );

      if ( modelCont )
      {
         // Получаем коллекцию эскзиов
         ISketchsPtr sketchs( modelCont->GetSketchs() );
         if ( sketchs )
         {
            // Добавляем новый эскиз
            new_sketch = sketchs->Add();
            if (new_sketch)
            {
               // Получаем 3D документ
               IKompasDocument3DPtr doc3D(doc);
               if (doc3D)
               {
                  // Получаем верхнюю деталь
                  IPart7Ptr part ( doc3D->TopPart );
                  if ( part )
                  {
                     // Получаем плоскость XY
                     IModelObjectPtr planeXY ( part->GetDefaultObject(o3d_planeXOY) );
                     // Задаем базовую плоскость для эскиза
                     new_sketch->Plane = planeXY;
                     // Редактируем эскиз
                     new_sketch->BeginEdit();
                     ArcByAngle(x, y, r, 180, 0, 1, 1);
                     LineSeg( -r, 0, r, 0, 3 );
                     new_sketch->EndEdit();
                  }
               }
               new_sketch->Update();
            }
         }
      }
   }
   return new_sketch;
}

ural_su

при построении дуги по двум точкам и направлению по моему радиус вообще не задается

Цитироватьпри построении дуги по двум точкам и направлению по моему радиус вообще не задается
Дуга превращается в отрезок, если радиус не задаётся, мне сейчас Вашим вопросом заниматься некогда, так, что спокойной ночи, а у меня ещё есть работа. 

ural_su

01.11.13, 20:59:38 #34 Последнее редактирование: 01.11.13, 21:21:27 от ural_su
так даже средствами Компас при построении такого типа дуги радиус не задается, а задаются только две точки и направление касательного вектора в точке дуги. Так что я подозреваю что радиус который я передаю при таком типе построения не используется.

ural_su

если только как вариант строить две плоскости:
1. Через две точки  и начало координат
2. Касательную к сфере в одной из точек
3. И ось по пересечению плоскостей
А  затем указывать эту ось в качестве направляющей.
Но хотелось б именно строить через центр и радиус

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

ural_su

При попытке строить дугу ksArc3DByCentre без указания радиуса получаем вот такое сообщение;


ural_su

да все то же самое что и было только без радиуса
arc3D->PutBuildingType( ksArc3DByCentre);
arc3D->PutBuildingObject(plane_ent);
arc3D->PutAssociationObject(ksArc3DCenter, part->GetDefaultObject(o3d_pointCS));
IModelObjectPtr obj_1 = point_1;
IModelObjectPtr obj_2 = point_2;
arc3D->PutAssociationObject(ksArc3DAngle1, obj_1);
arc3D->PutAssociationObject(ksArc3DAngle2, obj_2);
//arc3D->PutClosed(TRUE);
arc3D->PutDirection(false);
//arc3D->PutRadius(radius);
arc3D->Update();