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

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

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

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

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

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

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

Создать контрольную и присоединительную точки

Автор Prog2, 08.12.10, 14:24:04

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

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

Prog2

Здравствуйте! Возникла проблема с созданием этих самых точек на детали.

//Вначале рисуем саму точку
double Xc = 0, Yc = 0;
ksEntity iSketch1Entity = (ksEntity)iPart.NewEntity((short)Obj3dType.o3d_sketch);  // интерфейс эскиза
if (iSketch1Entity !=null)
{
   ksSketchDefinition iSketch1Def = (ksSketchDefinition)iSketch1Entity.GetDefinition();
   if (iSketch1Def !=null)
   {
     ksEntity PlaneXOY = (ksEntity)iPart.GetDefaultEntity((short)Obj3dType.o3d_planeXOY);
     if (PlaneXOY != null)
     {
       // размещаем эскиз на плоскости XOY
       iSketch1Def.SetPlane(PlaneXOY);
       iSketch1Entity.Create();
       ksDocument2D doc = (ksDocument2D)iSketch1Def.BeginEdit();
       if (doc !=null)
       {
         doc.ksPoint(Xc, Yc, 1);
       }
       iSketch1Def.EndEdit();
     }
   }
}

Этот кусок отрабатывает нормально - получили точку в пространстве. Дальше нужно "назначить" её присоединительной или контрольной...
Дальше делаю так:

ksEntityCollection entityCollection = (ksEntityCollection)iPart.EntityCollection((short)Obj3dType.o3d_vertex); //Получили набор вершин
entityCollection.SelectByPoint(Xc, Yc, 0); //Выбрали вершины с нужными координатами
if (entityCollection.GetCount() > 0)
{
   ksEntity iCuonjEntity = (ksEntity)entityCollection.GetByIndex(0);   // Берём вершину из полученного массива
   ksEntity entityCPoint = (ksEntity)iPart.NewEntity((short)Obj3dType.o3d_controlPoint);   //Получаем интерфейс контрольной точки
   ksControlPointDefinition controlDef = (ksControlPointDefinition)entityCPoint.GetDefinition();   //Получаем интерфейс параметров
   controlDef.SetVertex(iCuonjEntity);   //"Назначаем" контрольной точке выбранную вершину
   entityCPoint.Create();   //Создаём её
}

В результате контрольная точка создаётся, но с ошибкой "Контрольная (присоединительная) потеряла опорный объект".
...Что я делаю не так?

Пытаюсь по аналогии создать точку присоединения:
   ksEntity entityConjPoint = (ksEntity)iPart.NewEntity((short)Obj3dType.o3d_conjunctivePoint);
   ksConjunctivePointDefinition conjDef = (ksConjunctivePointDefinition)entityConjPoint.GetDefinition();  //На этой строке вылет
Но вылетает ошибка: "...интерфейс не поддерживается".

Кто знает, как сделать правильно?

ЗЫ: Kompas-3D V9

Slaviation

ЦитироватьКто знает, как сделать правильно?
В прицепе макрос , записанный с помощью КОМПАС-Макро в КОМПАС-3D V12. В нем создается кубик, а на нем контрольная и присоединительная точки. Может он поможет разобраться.

Prog2

Благодарю, помогло сориентироваться)

Контрольная точка в V12 создаётся без проблем. ...А в девятке на этом же коде возникает ошибка (ХЗ, почему)

ksDocument3D doc3D;
...

ksPart iPart1 = (ksPart)doc3D.GetPart((int)Part_Type.pTop_Part);
ksEntity obj = (ksEntity)iPart1.NewEntity((short)Obj3dType.o3d_controlPoint);
ksControlPointDefinition iDefinition = (ksControlPointDefinition)obj.GetDefinition();
ksEntityCollection iCollection = (ksEntityCollection)iPart.EntityCollection((short)Obj3dType.o3d_vertex);

iCollection.SelectByPoint(Xc, Yc, Zc);
ksEntity iPoint = (ksEntity)iCollection.GetByIndex(0);
iDefinition.SetVertex(iPoint);

obj.name = "Контрольная точка";
ksColorParam iColorParam = (ksColorParam)obj.ColorParam();
iColorParam.color = 16711808;

obj.Create();


А с присоединительной точкой проблема осталась...

ksDocument3D doc3D;
...

ksPart iPart1 = doc3D.GetPart((int)Part_Type.pTop_Part) as ksPart;
ksEntity obj = iPart1.NewEntity((short)Obj3dType.o3d_conjunctivePoint) as ksEntity;
if (obj != null)
{
   ksConjunctivePointDefinition iDefinition = obj.GetDefinition() as ksConjunctivePointDefinition;
   //
   // По факту получаю, что iDefinition = null
   //
   if (iDefinition != null)
   {
      // ...тут код по настройке и созданию точки
   }
}

Т.е. не могу получить интерфейс параметров ksConjunctivePointDefinition...