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

ADN Club => Inventor API => Тема начата: Сергей SSS от 05-04-2016, 14:09:38

Название: Перебор деталей в сборке с возможностью назначения обозначения
Отправлено: Сергей SSS от 05-04-2016, 14:09:38
1. doc = ThisDoc.Document
2. sBOM = doc.ComponentDefinition.BOM
3. sBOM.PartsOnlyViewEnabled = True
4. sBOMView = sBOM.BOMViews.Item("Только детали")
5. For Each comp In sBOMView.BOMRows
6. ddd_0 = InputBox(comp.TotalQuantity & " штук", "Обозначение", iProperties.Value(modelName, "Project", "Part Number"))
7. Next


Почему то не получается. Перебор осуществляется с количеством вхождения, но обозначение из деталей при переборе вытащить не могу. Как решить проблему? Может знает кто.  iProperties.Value(modelName, "Project", "Part Number") постоянно с одним значением, значением текущей сборки

Название: Re: Перебор деталей в сборке с возможностью назначения обозначения
Отправлено: Александр Ривилис от 05-04-2016, 15:58:01
П. 4.5 Правил форума гласит:
Цитировать
4.5. Обязательно выполняйте форматирование предоставляемого кода. Как это сделать - см. видео (http://adn-cis.org/forum/index.php?topic=1829.msg7154#msg7154)
Название: Re: Перебор деталей в сборке с возможностью назначения обозначения
Отправлено: mikazakov от 05-04-2016, 20:05:41
Почему то не получается.
Ну потому что весь этот iLogic дурь не сусветная. Он изначально позиционировался как конфигуратор для сборок.
Отладка в нем "производится методом медитации", больше 20 строк уже начинается программный апокалипсис.
Я не плохо знаю инвенторовский API и то мне в этом чуде, под название iLogic, тяжело.

Код - vb.net [Выбрать]
  1. doc = ThisDoc.Document
  2. sBOM = doc.ComponentDefinition.BOM
  3. sBOM.PartsOnlyViewEnabled = True
  4. sBOMView = sBOM.BOMViews.Item(2)
  5. For Each comp In sBOMView.BOMRows
  6.   OccurDoc=comp.ComponentDefinitions(1).Document
  7.          PartNumberProp=OccurDoc.PropertySets("{32853F0F-3444-11D1-9E93-0060B03C1CA6}").Item("Part Number")
  8.          PartNumberProp.Value =  InputBox(comp.TotalQuantity & " штук", "Обозначение")
  9. Next

P.S. мой совет лучше не заниматься этим мазохизмом а юзать нормальное API на бесплатном и очень функциональном Visual Studio Community
Название: Re: Перебор деталей в сборке с возможностью назначения обозначения
Отправлено: mikazakov от 05-04-2016, 20:06:22
Обязательно выполняйте форматирование предоставляемого кода
А там нет iLogic :))))
Название: Re: Перебор деталей в сборке с возможностью назначения обозначения
Отправлено: Александр Ривилис от 05-04-2016, 20:11:05
А там нет iLogic :))))
Зато есть VBA/VB.NET
Название: Re: Перебор деталей в сборке с возможностью назначения обозначения
Отправлено: R.I.Chernov от 06-04-2016, 14:58:10
P.S. мой совет лучше не заниматься этим мазохизмом а юзать нормальное API на бесплатном и очень функциональном Visual Studio Community
iLogic, конечно вещь дурная, но, на мой взгляд, слишком сложно с нуля начинать в Visual Studio. Я бы посоветовал попробовать силы во встроенном VBA.  Для решения задач, для которых обычно используют iLogic, VBA хватит выше крыши!
Название: Re: Перебор деталей в сборке с возможностью назначения обозначения
Отправлено: Сергей SSS от 08-04-2016, 13:42:27
    doc = ThisDoc.Document
    sBOM = doc.ComponentDefinition.BOM
    sBOM.PartsOnlyViewEnabled = True
    sBOMView = sBOM.BOMViews.Item(2)
    For Each comp In sBOMView.BOMRows
      OccurDoc=comp.ComponentDefinitions(1).Document
             PartNumberProp=OccurDoc.PropertySets("{32853F0F-3444-11D1-9E93-0060B03C1CA6}").Item("Part Number")
             PartNumberProp.Value =  InputBox(comp.TotalQuantity & " штук", "Обозначение")
    Next
А что означает каждая строчка. Я вставляю все в Sub www() модуля. Ошибка сразу в первой строчке. Или это вставлять в другое место?
Название: Re: Перебор деталей в сборке с возможностью назначения обозначения
Отправлено: mikazakov от 09-04-2016, 13:32:47
Я вставляю все в Sub www() модуля. Ошибка сразу в первой строчке.
Ну iLogic же пишет что ему не нравится, в этом случае пишет как раз полностью.
Это потому, что точка входа в программу всегда определяется процедурой с именем Main. Эта традиция идет из С++.
Если шибко уж нужно вызывать что то в виде процедуры, то обязательно нужно определение процедуры Main:
Код - vb.net [Выбрать]
  1. Sub Main()
  2. www()
  3. End Sub
  4.  
  5. Sub www()
  6.   doc = ThisDoc.Document
  7.     sBOM = doc.ComponentDefinition.BOM
  8.     sBOM.PartsOnlyViewEnabled = True
  9.     sBOMView = sBOM.BOMViews.Item(2)
  10.     For Each comp In sBOMView.BOMRows
  11.       OccurDoc=comp.ComponentDefinitions(1).Document
  12.              PartNumberProp=OccurDoc.PropertySets("{32853F0F-3444-11D1-9E93-0060B03C1CA6}").Item("Part Number")
  13.              PartNumberProp.Value =  InputBox(comp.TotalQuantity & " штук", "Обозначение")
  14.     Next
  15.        
  16. End Sub

Если же просто вставить текст программы из моего прошлого поста то объявлять Main не обязательно, iLogic автоматически заворачивает текст в Main.  Ну раз уж появляются другие процедуры то Main должна быть определена.


    doc = ThisDoc.Document
Доступ к текущему документы которому принадлежит правило.

  sBOM = doc.ComponentDefinition.BOM
Доступ к спецификации.

  sBOM.PartsOnlyViewEnabled = True
 sBOMView = sBOM.BOMViews.Item(2)
Этот тип спецификации не содержит подсборок, а только детали, которые в него входят. Причем детали будут вытащены из самой глубины подсборок на обозрение.


OccurDoc=comp.ComponentDefinitions(1).Document
Получение доступа к документу который входит в сборку.


 PartNumberProp=OccurDoc.PropertySets("{32853F0F-3444-11D1-9E93-0060B03C1CA6}").Item("Part Number")
Получение свойства. Вещи типа "{32853F0F-3444-11D1-9E93-0060B03C1CA6}" определяют категорию свойств. Существует 4 предопределенных категории свойств. Эти константанты можно найти в хэлпе. Но для этого нужно некоторое понимание, которое с iLogic получить трудно.

P.S.
iLogic, конечно вещь дурная
Я бы сказал бы, что полный фуфел, его кто то создал под себя, а затем кто то из менеджеров (видимо высокопоставленных) автодеска просто пропихнул iLogic через покупку. И теперь это iLogic как "чемодан без ручки".
Название: Re: Перебор деталей в сборке с возможностью назначения обозначения
Отправлено: Сергей SSS от 11-04-2016, 12:03:56
      sBOM = doc.ComponentDefinition.BOM

Доступ к спецификации.
Что то не получается:
Общий член "ComponentDefinition" для типа "_DocumentClass" не найден.
Название: Re: Перебор деталей в сборке с возможностью назначения обозначения
Отправлено: mikazakov от 11-04-2016, 12:08:59
Общий член "ComponentDefinition" для типа "_DocumentClass" не найден.
Я чувствую, что вы батенька, уже иЛоджиком перестали забавляться. Что бы получилось нужно приведение типов делать. Без причесанного примера я не смогу помочь.
Название: Re: Перебор деталей в сборке с возможностью назначения обозначения
Отправлено: Сергей SSS от 11-04-2016, 12:44:41
Упсссс
это я в чертеже уже пытался запустить, прошу прощения- перепутал
Название: Re: Перебор деталей в сборке с возможностью назначения обозначения
Отправлено: Сергей SSS от 11-04-2016, 15:04:59
Код - vb.net [Выбрать]
  1.         doc = ThisDoc.Document
  2.         sBOM = doc.ComponentDefinition.BOM
  3.         sBOM.PartsOnlyViewEnabled = True
  4.         sBOMView = sBOM.BOMViews.Item(1)
  5.         For Each comp In sBOMView.BOMRows
  6.           OccurDoc=comp.ComponentDefinitions(1).Document
  7.           PartNumberProp=OccurDoc.PropertySets("{32853F0F-3444-11D1-9E93-0060B03C1CA6}").Item("Part Number")
  8.           PartDescProp=OccurDoc.PropertySets("{32853F0F-3444-11D1-9E93-0060B03C1CA6}").Item("Description")
  9.           PartNumberProp.Value =  InputBox(comp.TotalQuantity & " штук", PartDescProp.Value, PartNumberProp.Value)
  10.         Next
Получилось так, только сборки тоже появляются. Хотелось бы, чтобы сборки игнорировались, а детали брались только из текущей сборки
Название: Re: Перебор деталей в сборке с возможностью назначения обозначения
Отправлено: Александр Ривилис от 11-04-2016, 16:37:34
Сергей SSS
В очередной раз напоминаю про правило форматирования кода на форуме!
Название: Re: Перебор деталей в сборке с возможностью назначения обозначения
Отправлено: mikazakov от 11-04-2016, 17:55:15
Хотелось бы, чтобы сборки игнорировались, а детали брались только из текущей сборки
Нужно внятнее спрашивать с самого начала:

Код - vb.net [Выбрать]
  1. Sub www()
  2.   doc = ThisDoc.Document
  3.     CompOccurs = doc.ComponentDefinition.Occurrences
  4.    
  5.     For Each Occur In CompOccurs
  6.       OccurDoc=Occur.Definition.Document
  7.              PartNumberProp=OccurDoc.PropertySets("{32853F0F-3444-11D1-9E93-0060B03C1CA6}").Item("Part Number")
  8.              PartNumberProp.Value =  InputBox(Occur.Name, "Обозначение")
  9.     Next
  10.        
  11. End Sub
Название: Re: Перебор деталей в сборке с возможностью назначения обозначения
Отправлено: Сергей SSS от 11-04-2016, 22:09:42
Хотелось бы, чтобы сборки игнорировались
К сожалению появляется запрос на изменение и подсборок тоже. А нельзя ли, чтобы сборки все игнорировалисть, а запрос на изменение свойства появлялся только для деталей, а еще лучше для деталей, которые не являются стандартными изделиями, те приобретенными.              Итогом всего этого я хочу сделать так, или по крайней мере попытаюсь, чтобы номера обозначений сами генерировались в зависимости от номера самой верхней сборки и вхождениями. Поэтому мне наверное нужно первоначально получить только детали, чтобы потом объединить их в зависимости от вхождений.
Название: Re: Перебор деталей в сборке с возможностью назначения обозначения
Отправлено: mikazakov от 12-04-2016, 07:01:29
Код - vb.net [Выбрать]
  1. Sub Main()
  2.   doc = ThisDoc.Document
  3.     CompOccurs = doc.ComponentDefinition.Occurrences
  4.    
  5.     For Each Occur In CompOccurs
  6.       OccurDoc=Occur.Definition.Document
  7.           If OccurDoc.DocumentType<>kPartDocumentObject Then Continue For
  8.            If Occur.BOMStructure=BOMStructureEnum.kPurchasedBOMStructure Then Continue For
  9.            
  10.             PartNumberProp=OccurDoc.PropertySets("{32853F0F-3444-11D1-9E93-0060B03C1CA6}").Item("Part Number")
  11.         PartNumberProp.Value =  InputBox(Occur.Name, "Обозначение")
  12.          
  13.     Next
  14. End Sub
  15.  
Название: Re: Перебор деталей в сборке с возможностью назначения обозначения
Отправлено: Сергей SSS от 12-04-2016, 10:11:38
Спасибо