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

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

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

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

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

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

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

Привязка Nurbs

Автор urbaraban, 04.08.20, 09:11:35

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

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

urbaraban

Компас 16

Есть код:
      private void MakeCurveBtn_Click(object sender, RoutedEventArgs e)
        {
            INurbses nurbses = this.CeilingDoc.Doc.GetDrawingContainer().NurbsesByPoints;
            INurbsByPoints nurbsByPoints = nurbses.Add() as INurbsByPoints;
            IDrawingObject1 drawingObject1 = (IDrawingObject1)nurbsByPoints;

            for (int i = 0; i < this.CeilingDoc.Doc.SelectedObjects.Count; i += 1)
            {
                if (this.CeilingDoc.Doc.SelectedObjects[i] is ILineSegment lineSegment)
                {
                    if (i == 0)
                    {
                        nurbsByPoints.AddPoint(1, lineSegment.X1, lineSegment.Y1, 1);
                        Console.WriteLine(SizeTool.SetConstraintMergePoint(drawingObject1, lineSegment, 1, 0));
                    }
                    Console.WriteLine($"ind: {i + 2} X:{lineSegment.X2} Y:{lineSegment.Y2}");
                    nurbsByPoints.AddPoint(i + 2, lineSegment.X2, lineSegment.Y2, 1);
                    Console.WriteLine(
                        SizeTool.SetConstraintMergePoint(drawingObject1, lineSegment, i + 2, 1));

                    lineSegment.Delete();
                }
            }
            nurbsByPoints.Update();
        }
Ну и функция:

       
public static bool SetConstraintMergePoint(object Obj1, object Obj2, int Index1, int Index2)
        {
            IDrawingObject1 obj1_1= (IDrawingObject1)Obj1;

            //Накладываем на объект ограничение совпадение точек 1
            ParametriticConstraint FixPoint1 = obj1_1.NewConstraint();
            if (FixPoint1 != null)
            {
                FixPoint1.Comment = "FixPoint1";
                FixPoint1.ConstraintType = ksConstraintTypeEnum.ksCMergePoints;
                FixPoint1.Partner = Obj2;
                FixPoint1.Index = Index1;
                FixPoint1.PartnerIndex = Index2;
                if (FixPoint1.Create())
                {
                    return true;
                }
                else
                {
                    FixPoint1.Delete();
                    return false;
                }
            }
            return false;

        }

Попытка описания:
1) Берем генерированные подряд прямые, связанные друг с другом и параметрическими размерами через MergePoint.
2) Создаем Nurbs и добавляем в нее точки прямых и пытаемся привязать ее к размерам через функцию SetConstraintMergePoint по средствам ksConstraintTypeEnum.ksCMergePoints. Где и терпим неудачу.
3)Настораживает тот момент, что точки в Nurbs нужно задавать с индексом 1,2,3..., а индекс для Constrati должен начинаться с 0 (согласно мануала).
Если все делать ручками в параметрическом режиме, то ок и создается то же самое ограничение, что пытаюсь сделать и я.

Короче, может кто сталкивался с этим. Буду рад подсказке.