Проблема с проецированием в эскиз.

Автор Тема: Проблема с проецированием в эскиз.  (Прочитано 6675 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Доброго времени суток, уважаемые форумчане! Столкнулся с проблемой при проецировании в эскиз. Буду рад любому совету.
Суть такова: проецирую начало координат в эскиз с помощью метода PlanarSketch.AddByProjectingEntity(). В пустом эскизе все работает, но если в нем начертить окружность с центром в точке с координатами (0,0) программа выдает ошибку. Причем если сначала спроецировать точку, а потом начертить окружность то все норм. Есть идеи, в чем может быть причина?

П.С. Я проецирую точку AssemblyComponentDefinition.WorkPoints(1), считая, что это начало координат... а сейчас вот подумал, может быть тут я ошибаюсь?
В программировании я новичок...но ненадолго! ;)

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Проблема с проецированием в эскиз.
« Ответ #1 : 05-11-2019, 20:58:33 »
В пустом эскизе все работает
Я проецирую точку AssemblyComponentDefinition.WorkPoints(1)
Что хоть за эскиз то? В сборке или в детали, проецирование из сборки в деталь или как?
Тут много входных неизвестных.

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: Проблема с проецированием в эскиз.
« Ответ #2 : 05-11-2019, 21:18:26 »
Я не провожу код, потому как пользуюсь кучей собственноручно написанных методов для ускорения работы, и превратить их обратно в что-то читабельное достаточно сложно. А там  во всей куче лишь 2 ключевых строки, их я и озвучиваю.

Еще раз сначала: пишу метод, который будет строить цилиндр выдавливанием. Сначала создается деталь, затем в ней эскиз на плоскости XY,в эскизе строится окружность, следом должно быть спроецировано начало координат, затем создание профиля и, непосредственно, выдавливание. Вот окружность в эскизе построил с центром (0,0), следом проецирую точку AssemblyComponentDefinition.WorkPoints(1) и тут возникает ошибка. Если окружность построить с  центром в (5,0) ошибки не будет.
В программировании я новичок...но ненадолго! ;)

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: Проблема с проецированием в эскиз.
« Ответ #3 : 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.         }
В программировании я новичок...но ненадолго! ;)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Проблема с проецированием в эскиз.
« Ответ #4 : 05-11-2019, 22:51:07 »
R.I.Chernov,
А сколько элементов в oCD.WorkPoints ? И какая ошибка возникает?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: Проблема с проецированием в эскиз.
« Ответ #5 : 06-11-2019, 14:45:39 »
А сколько элементов в oCD.WorkPoints ? И какая ошибка возникает?
В коллекции одна точка, если в ее свойство "Name" залезть, то пишет что "Начало координат". Что-то я прям в тупике. Разумеется я мог бы поменять последовательность и точку проецировать первой, но это же не нормально: тут так получится, а где-то в другом месте может и не выйти.
В программировании я новичок...но ненадолго! ;)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: Проблема с проецированием в эскиз.
« Ответ #7 : 06-11-2019, 15:27:06 »
Спасибо, Александр, за совет. Правда я там не смог найти вдохновения (
В программировании я новичок...но ненадолго! ;)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Проблема с проецированием в эскиз.
« Ответ #8 : 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
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: Проблема с проецированием в эскиз.
« Ответ #9 : 06-11-2019, 16:46:42 »
нужно вызывать SetIncludeStatus для WorkPoint
Мне кажется вы не совсем поняли мою задачу. Вся ваша статья посвящена проецированию на вид чертежа, SetIncludeStatus является методом DrawingView. У меня же проблема при проецировании точки на рабочий эскиз в детали. Ну или я вообще потерялся и не вижу чего-то очевидного (( В любом случае большое спасибо!
В программировании я новичок...но ненадолго! ;)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Проблема с проецированием в эскиз.
« Ответ #10 : 06-11-2019, 17:14:44 »
R.I.Chernov,
Из тех примеров, которые я нашёл, из  PlanarSketch делается прокси (метод CreateGeometryProxy), а затем проекция делается на неё.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: Проблема с проецированием в эскиз.
« Ответ #11 : 06-11-2019, 17:34:57 »
Из тех примеров, которые я нашёл, из  PlanarSketch делается прокси (метод CreateGeometryProxy), а затем проекция делается на неё.
Да, тоже видел в примерах подобный код. Дело в том, что , например, в "Projection - project across parts API Sample" проецирование делается в сборку и какраз используется CreateGeometryProxy. Ну то есть, как я понимаю, само понятие прокси в большинстве случаев относится именно к вопросам, когда из сборки надо достучаться до детали. Потому и CreateGeometryProxy является методом ComponentOccurence, то есть его можно вызвать только в контексте сборки, у меня же обычная деталь.
"
В программировании я новичок...но ненадолго! ;)

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: Проблема с проецированием в эскиз.
« Ответ #12 : 06-11-2019, 17:38:27 »
Мне кажется, что проблемой является то, что при попытке проецирования, точка создается в том месте, где уже существует центр окружности. И тогда как в пользовательском интерфейсе с этим нет никаких проблем, в API они возникают. Возможно в таком случае нужно проводить какие-то дополнительные манипуляции или проверки, которые и делает программа в пользовательском интерфейсе, просто невидимо для нас.
В программировании я новичок...но ненадолго! ;)

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: Проблема с проецированием в эскиз.
« Ответ #13 : 06-11-2019, 17:53:54 »
Заметил, что, прежде чем программа перестает работать, начало координат таки проецируется на эскиз. Центр окружности объединяется с ней (кстати вот вообще ни разу не понятно почему), ведь факт совпадения координат двух точек эскиза не подразумевает их объединения, пока не используется SketchPoint.Merge.
В программировании я новичок...но ненадолго! ;)

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Проблема с проецированием в эскиз.
« Ответ #14 : 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 пусть разбираются

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: Проблема с проецированием в эскиз.
« Ответ #15 : 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.         }
В программировании я новичок...но ненадолго! ;)

Отмечено как Решение R.I.Chernov 28-11-2019, 03:09:08

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Проблема с проецированием в эскиз.
« Ответ #16 : 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"


В общем, признаются что это баг

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Re: Проблема с проецированием в эскиз.
« Ответ #17 : 28-11-2019, 03:09:27 »
Спасибо за помощь!
В программировании я новичок...но ненадолго! ;)