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

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

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

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

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

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

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

Оффлайн mikazakov

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 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 пусть разбираются