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

ADN Club => Inventor API => Тема начата: R.I.Chernov от 05-11-2019, 19:48:41

Название: Проблема с проецированием в эскиз.
Отправлено: R.I.Chernov от 05-11-2019, 19:48:41
Доброго времени суток, уважаемые форумчане! Столкнулся с проблемой при проецировании в эскиз. Буду рад любому совету.
Суть такова: проецирую начало координат в эскиз с помощью метода PlanarSketch.AddByProjectingEntity(). В пустом эскизе все работает, но если в нем начертить окружность с центром в точке с координатами (0,0) программа выдает ошибку. Причем если сначала спроецировать точку, а потом начертить окружность то все норм. Есть идеи, в чем может быть причина?

П.С. Я проецирую точку AssemblyComponentDefinition.WorkPoints(1), считая, что это начало координат... а сейчас вот подумал, может быть тут я ошибаюсь?
Название: Re: Проблема с проецированием в эскиз.
Отправлено: mikazakov от 05-11-2019, 20:58:33
В пустом эскизе все работает
Я проецирую точку AssemblyComponentDefinition.WorkPoints(1)
Что хоть за эскиз то? В сборке или в детали, проецирование из сборки в деталь или как?
Тут много входных неизвестных.
Название: Re: Проблема с проецированием в эскиз.
Отправлено: R.I.Chernov от 05-11-2019, 21:18:26
Я не провожу код, потому как пользуюсь кучей собственноручно написанных методов для ускорения работы, и превратить их обратно в что-то читабельное достаточно сложно. А там  во всей куче лишь 2 ключевых строки, их я и озвучиваю.

Еще раз сначала: пишу метод, который будет строить цилиндр выдавливанием. Сначала создается деталь, затем в ней эскиз на плоскости XY,в эскизе строится окружность, следом должно быть спроецировано начало координат, затем создание профиля и, непосредственно, выдавливание. Вот окружность в эскизе построил с центром (0,0), следом проецирую точку AssemblyComponentDefinition.WorkPoints(1) и тут возникает ошибка. Если окружность построить с  центром в (5,0) ошибки не будет.
Название: Re: Проблема с проецированием в эскиз.
Отправлено: R.I.Chernov от 05-11-2019, 21:32:34
Все-таки наверно проще код скинуть. Ошибка во второй строке снизу:

Код - C# [Выбрать]
  1. private void projection_test()
  2.         {
  3.             string TemplName = "C:/Users/Public/Documents/Autodesk/Inventor 2017/Templates/Обычный.ipt";
  4.             Inventor.PartDocument oDoc = (Inventor.PartDocument)oApp.Documents.
  5.                                             Add(Inventor.DocumentTypeEnum.kPartDocumentObject, TemplName);
  6.  
  7.             Inventor.PartComponentDefinition oCD = oDoc.ComponentDefinition;
  8.  
  9.             Inventor.TransientGeometry oTG = oApp.TransientGeometry;
  10.             Inventor.PlanarSketch oSketch = oCD.Sketches.Add(oCD.WorkPlanes[3]);
  11.  
  12.             Inventor.SketchCircle oSk_circle = oSketch.SketchCircles.AddByCenterRadius
  13.                                             (oTG.CreatePoint2d(0, 0), 100 / 20);
  14.  
  15.             oSketch.DimensionConstraints.AddDiameter(oSk_circle as ii.SketchEntity, oTG.CreatePoint2d(10, 10), true);
  16.  
  17.             // в этой строке ошибка
  18.             Inventor.SketchPoint oSkPoint = (Inventor.SketchPoint)oSketch.AddByProjectingEntity(oCD.WorkPoints[1]);
  19.  
  20.             oSkPoint.HoleCenter = true;
  21.         }
Название: Re: Проблема с проецированием в эскиз.
Отправлено: Александр Ривилис от 05-11-2019, 22:51:07
R.I.Chernov,
А сколько элементов в oCD.WorkPoints ? И какая ошибка возникает?
Название: Re: Проблема с проецированием в эскиз.
Отправлено: R.I.Chernov от 06-11-2019, 14:45:39
А сколько элементов в oCD.WorkPoints ? И какая ошибка возникает?
В коллекции одна точка, если в ее свойство "Name" залезть, то пишет что "Начало координат". Что-то я прям в тупике. Разумеется я мог бы поменять последовательность и точку проецировать первой, но это же не нормально: тут так получится, а где-то в другом месте может и не выйти.
Название: Re: Проблема с проецированием в эскиз.
Отправлено: Александр Ривилис от 06-11-2019, 15:08:56
R.I.Chernov,
Глянь эту тему: https://forums.autodesk.com/t5/inventor-forum/drawing-sketch-project-geometry-using-api/td-p/6010285
Название: Re: Проблема с проецированием в эскиз.
Отправлено: R.I.Chernov от 06-11-2019, 15:27:06
Спасибо, Александр, за совет. Правда я там не смог найти вдохновения (
Название: Re: Проблема с проецированием в эскиз.
Отправлено: Александр Ривилис от 06-11-2019, 15:33:51
Спасибо, Александр, за совет. Правда я там не смог найти вдохновения (
Решение там в этом посте: https://forums.autodesk.com/t5/inventor-forum/drawing-sketch-project-geometry-using-api/m-p/6012033#M590384
Если в общих чертах, то нужно вызывать SetIncludeStatus для WorkPoint - это приводит к появлению CenterMark, которую уже и нужно проецировать при помощи AddByProjectingEntity
Название: Re: Проблема с проецированием в эскиз.
Отправлено: R.I.Chernov от 06-11-2019, 16:46:42
нужно вызывать SetIncludeStatus для WorkPoint
Мне кажется вы не совсем поняли мою задачу. Вся ваша статья посвящена проецированию на вид чертежа, SetIncludeStatus является методом DrawingView. У меня же проблема при проецировании точки на рабочий эскиз в детали. Ну или я вообще потерялся и не вижу чего-то очевидного (( В любом случае большое спасибо!
Название: Re: Проблема с проецированием в эскиз.
Отправлено: Александр Ривилис от 06-11-2019, 17:14:44
R.I.Chernov,
Из тех примеров, которые я нашёл, из  PlanarSketch делается прокси (метод CreateGeometryProxy), а затем проекция делается на неё.
Название: Re: Проблема с проецированием в эскиз.
Отправлено: R.I.Chernov от 06-11-2019, 17:34:57
Из тех примеров, которые я нашёл, из  PlanarSketch делается прокси (метод CreateGeometryProxy), а затем проекция делается на неё.
Да, тоже видел в примерах подобный код. Дело в том, что , например, в "Projection - project across parts API Sample" проецирование делается в сборку и какраз используется CreateGeometryProxy. Ну то есть, как я понимаю, само понятие прокси в большинстве случаев относится именно к вопросам, когда из сборки надо достучаться до детали. Потому и CreateGeometryProxy является методом ComponentOccurence, то есть его можно вызвать только в контексте сборки, у меня же обычная деталь.
"
Название: Re: Проблема с проецированием в эскиз.
Отправлено: R.I.Chernov от 06-11-2019, 17:38:27
Мне кажется, что проблемой является то, что при попытке проецирования, точка создается в том месте, где уже существует центр окружности. И тогда как в пользовательском интерфейсе с этим нет никаких проблем, в API они возникают. Возможно в таком случае нужно проводить какие-то дополнительные манипуляции или проверки, которые и делает программа в пользовательском интерфейсе, просто невидимо для нас.
Название: Re: Проблема с проецированием в эскиз.
Отправлено: R.I.Chernov от 06-11-2019, 17:53:54
Заметил, что, прежде чем программа перестает работать, начало координат таки проецируется на эскиз. Центр окружности объединяется с ней (кстати вот вообще ни разу не понятно почему), ведь факт совпадения координат двух точек эскиза не подразумевает их объединения, пока не используется SketchPoint.Merge.
Название: Re: Проблема с проецированием в эскиз.
Отправлено: mikazakov от 06-11-2019, 18:24:32
Ну я немного припозднился  :P
Очевидно это глючара потому как если сменить последовательность создания точек то все работает, т.е. сначала проецируем потом строим
Код - Visual Basic [Выбрать]
  1. Sub CreatePoints()
  2.   Dim doc As PartDocument
  3.   Set doc = ThisApplication.ActiveDocument
  4.  
  5.   Dim pcd As PartComponentDefinition: Set pcd = doc.ComponentDefinition
  6.   Dim s As PlanarSketch: Set s = pcd.Sketches.Add(pcd.WorkPlanes(3))
  7.  
  8.  
  9.   Dim tg As TransientGeometry: Set tg = ThisApplication.TransientGeometry
  10.    
  11.   Dim sp As SketchEntity: Set sp = s.AddByProjectingEntity(pcd.WorkPoints(1))
  12.  
  13.   Dim p As SketchPoint: Set p = s.SketchPoints.Add(tg.CreatePoint2d(0, 0))
  14.  
  15. End Sub
  16.  

Но я отправлю вопрос в ADN пусть разбираются
Название: Re: Проблема с проецированием в эскиз.
Отправлено: R.I.Chernov от 06-11-2019, 18:42:39
т.е. сначала проецируем потом строим
Да в том то и дело, что при любом другом проецировании все работает, только при проецировании начала координат такая клоака. Реально похоже на глюк! Ниже пример, когда на эскиз проецируется (все в координаты 0,0) сначала начало координат, потом точка другого эскиза, потом из этого же места строится отрезок, и нет никаких проблем. Причем если сначала построить отрезок, а котом спроецировать точку эскиза - тоже проблем нет. Но если начало координат проецируется после построения отрезка, или после проецирования (короче когда в этой точке уже что-то начерчено), тогда тупо все зависает (короче последовательностью трех последних строк можно поиграться кому интересно).

       
Код - C# [Выбрать]
  1. private void projection_test_2()
  2.         {
  3.             string TemplName = "C:/Users/Public/Documents/Autodesk/Inventor 2017/Templates/Обычный.ipt";
  4.             Inventor.PartDocument oDoc = (Inventor.PartDocument)oApp.Documents.
  5.                                             Add(Inventor.DocumentTypeEnum.kPartDocumentObject, TemplName);
  6.  
  7.             Inventor.PartComponentDefinition oCD = oDoc.ComponentDefinition;
  8.  
  9.             Inventor.TransientGeometry oTG = oApp.TransientGeometry;
  10.             Inventor.PlanarSketch oSketch = oCD.Sketches.Add(oCD.WorkPlanes[3]);
  11.  
  12.             ii.SketchLine sl= oSketch.SketchLines.AddByTwoPoints(create.tg.point2D(0, 0), create.tg.point2D(50, 0));
  13.  
  14.             Inventor.PlanarSketch oSketch_2 = oCD.Sketches.Add(oCD.WorkPlanes[3]);
  15.  
  16.              // эта строка всегда должна быть первой (или отсутствовать), последовательность двух других не важна
  17.             oSketch_2.AddByProjectingEntity(oCD.WorkPoints[1]);
  18.             oSketch_2.AddByProjectingEntity(sl.StartSketchPoint);
  19.             ii.SketchLine sl_2 = oSketch_2.SketchLines.AddByTwoPoints(create.tg.point2D(0, 0), create.tg.point2D(0, 50));
  20.  
  21.         }
Название: Re: Проблема с проецированием в эскиз.
Отправлено: mikazakov от 08-11-2019, 13:03:54
R.I.Chernov,
Пришел ответ из ADN

Issue can be reproducible. For further investigation, a change request is created with engineering team on this and details are given below.
The Change Request for this is: ID:INVGEN - 35009 - "Error on projecting work point after point creation via Inventor API"


В общем, признаются что это баг
Название: Re: Проблема с проецированием в эскиз.
Отправлено: R.I.Chernov от 28-11-2019, 03:09:27
Спасибо за помощь!