Сообщество программистов Autodesk в СНГ

ADN Club => Inventor API => Тема начата: R.I.Chernov от 01-07-2021, 06:26:45

Название: Ошибка совмещения точек в эскизе.
Отправлено: R.I.Chernov от 01-07-2021, 06:26:45
Доброго времени суток, уважаемые форумчане. Помогите пожалуйста разобраться в вопросе! Пытаюсь наложить совмещение на две точки, концы двух линий. Выдает ошибку.
Код - C# [Выбрать]
  1. public void Error()
  2. {
  3.     PartDocument oDoc = (PartDocument)oApp.Documents.Add(DocumentTypeEnum.kPartDocumentObject);
  4.     PartComponentDefinition oCD = oDoc.ComponentDefinition;
  5.     PlanarSketch sketch = oCD.Sketches.Add(oCD.WorkPlanes[1]);
  6.     TransientGeometry oTG = oApp.TransientGeometry;
  7.     SketchLine line1 =  sketch.SketchLines.AddByTwoPoints(oTG.CreatePoint2d(1, 1), oTG.CreatePoint2d(2, 2));
  8.     SketchLine line2 = sketch.SketchLines.AddByTwoPoints(oTG.CreatePoint2d(-1, -1), oTG.CreatePoint2d(-2, 2));
  9.  
  10.     sketch.GeometricConstraints.AddCoincident((SketchEntity)line1.StartSketchPoint, (SketchEntity)line2.StartSketchPoint);
  11.  
  12.     // можно, конечно, вот так заморочиться
  13.     // sketch.GeometricConstraints.AddCoincident((SketchEntity)line1.StartSketchPoint, (SketchEntity)line2);
  14.     // sketch.GeometricConstraints.AddCoincident((SketchEntity)line1, (SketchEntity)line2.StartSketchPoint);
  15. }

Единственная возможность выполнить задачу, которую я отыскал, попарно совместить концы отрезков с линиями (см. закомментированный код).
И вроде бы кучу времени уже потратил, и вроде как можно на одну строку больше писать, или обернуть во что-то и дальше двигаться! Но не могу успокоиться, вот прям разобраться хочу: это я что-то не так делаю? Или все-таки под капотом пользовательского интерфейса происходит именно совмещение точек с отрезками, когда мы как бы "совмещаем две точки"? Есть идеи?
Название: Re: Ошибка совмещения точек в эскизе.
Отправлено: R.I.Chernov от 01-07-2021, 18:47:17
Походу нужный метод SketchPoint.Merge(), графика немного глючит до обновления модели, но в целом работает.

Код - C# [Выбрать]
  1. public void Error()
  2. {
  3.     PartDocument oDoc = (PartDocument)oApp.Documents.Add(DocumentTypeEnum.kPartDocumentObject);
  4.     PartComponentDefinition oCD = oDoc.ComponentDefinition;
  5.     PlanarSketch sketch = oCD.Sketches.Add(oCD.WorkPlanes[1]);
  6.     TransientGeometry oTG = oApp.TransientGeometry;
  7.     SketchLine line1 = sketch.SketchLines.AddByTwoPoints(oTG.CreatePoint2d(1, 1), oTG.CreatePoint2d(2, 2));
  8.     SketchLine line2 = sketch.SketchLines.AddByTwoPoints(oTG.CreatePoint2d(-1, -1), oTG.CreatePoint2d(-2, 2));
  9.  
  10.     line1.StartSketchPoint.Merge(line2.StartSketchPoint);
  11. }
Название: Re: Ошибка совмещения точек в эскизе.
Отправлено: mikazakov от 02-07-2021, 21:14:53
Оно и в пользовательском интерфейсе происходит слияние двух точек эскиза в одну точку.
В этом не трудно убедится если сначала изучить коллекцию точек в эскизе для двух не соединённых отрезков, затем через пользовательский интерфейс их соединить и снова посмотреть коллекцию точек и будет видно что точек стало на одну меньше, потому что две из них слились в одну.
Название: Re: Ошибка совмещения точек в эскизе.
Отправлено: R.I.Chernov от 02-07-2021, 22:34:28
Спасибо, Михаил. Но правильно ли я понимаю, что если я хочу наложить зависимость совмещениях конца линии эскиза, и конца линии внутри блока, то в таком случае «слияния точек» невозможно, и тогда требуется наложить именно зависимость методом GeometricConstraints.AddCoincident()?
Название: Re: Ошибка совмещения точек в эскизе.
Отправлено: mikazakov от 03-07-2021, 18:38:41
то в таком случае «слияния точек» невозможно, и тогда требуется наложить именно зависимость методом GeometricConstraints.AddCoincident()?
Ну раз пользовательский интерфейс в данном случае "не сливает" точки в одну, да в случае работы с блоком нужно геометрическую зависимость накладывать через GeometricConstraints.AddCoincident()
Название: Re: Ошибка совмещения точек в эскизе.
Отправлено: R.I.Chernov от 04-07-2021, 19:27:55
Ок, спасибо.