ADN Club > Inventor API
Ошибка совмещения точек в эскизе.
R.I.Chernov:
Доброго времени суток, уважаемые форумчане. Помогите пожалуйста разобраться в вопросе! Пытаюсь наложить совмещение на две точки, концы двух линий. Выдает ошибку.
--- Код - C# [Выбрать] ---public void Error(){ PartDocument oDoc = (PartDocument)oApp.Documents.Add(DocumentTypeEnum.kPartDocumentObject); PartComponentDefinition oCD = oDoc.ComponentDefinition; PlanarSketch sketch = oCD.Sketches.Add(oCD.WorkPlanes[1]); TransientGeometry oTG = oApp.TransientGeometry; SketchLine line1 = sketch.SketchLines.AddByTwoPoints(oTG.CreatePoint2d(1, 1), oTG.CreatePoint2d(2, 2)); SketchLine line2 = sketch.SketchLines.AddByTwoPoints(oTG.CreatePoint2d(-1, -1), oTG.CreatePoint2d(-2, 2)); sketch.GeometricConstraints.AddCoincident((SketchEntity)line1.StartSketchPoint, (SketchEntity)line2.StartSketchPoint); // можно, конечно, вот так заморочиться // sketch.GeometricConstraints.AddCoincident((SketchEntity)line1.StartSketchPoint, (SketchEntity)line2); // sketch.GeometricConstraints.AddCoincident((SketchEntity)line1, (SketchEntity)line2.StartSketchPoint);}
Единственная возможность выполнить задачу, которую я отыскал, попарно совместить концы отрезков с линиями (см. закомментированный код).
И вроде бы кучу времени уже потратил, и вроде как можно на одну строку больше писать, или обернуть во что-то и дальше двигаться! Но не могу успокоиться, вот прям разобраться хочу: это я что-то не так делаю? Или все-таки под капотом пользовательского интерфейса происходит именно совмещение точек с отрезками, когда мы как бы "совмещаем две точки"? Есть идеи?
R.I.Chernov:
Походу нужный метод SketchPoint.Merge(), графика немного глючит до обновления модели, но в целом работает.
--- Код - C# [Выбрать] ---public void Error(){ PartDocument oDoc = (PartDocument)oApp.Documents.Add(DocumentTypeEnum.kPartDocumentObject); PartComponentDefinition oCD = oDoc.ComponentDefinition; PlanarSketch sketch = oCD.Sketches.Add(oCD.WorkPlanes[1]); TransientGeometry oTG = oApp.TransientGeometry; SketchLine line1 = sketch.SketchLines.AddByTwoPoints(oTG.CreatePoint2d(1, 1), oTG.CreatePoint2d(2, 2)); SketchLine line2 = sketch.SketchLines.AddByTwoPoints(oTG.CreatePoint2d(-1, -1), oTG.CreatePoint2d(-2, 2)); line1.StartSketchPoint.Merge(line2.StartSketchPoint);}
mikazakov:
Оно и в пользовательском интерфейсе происходит слияние двух точек эскиза в одну точку.
В этом не трудно убедится если сначала изучить коллекцию точек в эскизе для двух не соединённых отрезков, затем через пользовательский интерфейс их соединить и снова посмотреть коллекцию точек и будет видно что точек стало на одну меньше, потому что две из них слились в одну.
R.I.Chernov:
Спасибо, Михаил. Но правильно ли я понимаю, что если я хочу наложить зависимость совмещениях конца линии эскиза, и конца линии внутри блока, то в таком случае «слияния точек» невозможно, и тогда требуется наложить именно зависимость методом GeometricConstraints.AddCoincident()?
mikazakov:
--- Цитата: R.I.Chernov от 02-07-2021, 22:34:28 ---то в таком случае «слияния точек» невозможно, и тогда требуется наложить именно зависимость методом GeometricConstraints.AddCoincident()?
--- Конец цитаты ---
Ну раз пользовательский интерфейс в данном случае "не сливает" точки в одну, да в случае работы с блоком нужно геометрическую зависимость накладывать через GeometricConstraints.AddCoincident()
Навигация
Перейти к полной версии