Перебор деталей в сборке с возможностью назначения обозначения

Автор Тема: Перебор деталей в сборке с возможностью назначения обозначения  (Прочитано 13928 раз)

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

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

Оффлайн Сергей SSSАвтор темы

  • ADN OPEN
  • Сообщений: 36
  • Карма: 0
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") постоянно с одним значением, значением текущей сборки


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

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

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Почему то не получается.
Ну потому что весь этот 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

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Обязательно выполняйте форматирование предоставляемого кода
А там нет iLogic :))))

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

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

Оффлайн R.I.Chernov

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
P.S. мой совет лучше не заниматься этим мазохизмом а юзать нормальное API на бесплатном и очень функциональном Visual Studio Community
iLogic, конечно вещь дурная, но, на мой взгляд, слишком сложно с нуля начинать в Visual Studio. Я бы посоветовал попробовать силы во встроенном VBA.  Для решения задач, для которых обычно используют iLogic, VBA хватит выше крыши!
В программировании я новичок...но ненадолго! ;)

Оффлайн Сергей SSSАвтор темы

  • ADN OPEN
  • Сообщений: 36
  • Карма: 0
    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() модуля. Ошибка сразу в первой строчке. Или это вставлять в другое место?

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Я вставляю все в 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 как "чемодан без ручки".

Оффлайн Сергей SSSАвтор темы

  • ADN OPEN
  • Сообщений: 36
  • Карма: 0
      sBOM = doc.ComponentDefinition.BOM

Доступ к спецификации.
Что то не получается:
Общий член "ComponentDefinition" для типа "_DocumentClass" не найден.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Общий член "ComponentDefinition" для типа "_DocumentClass" не найден.
Я чувствую, что вы батенька, уже иЛоджиком перестали забавляться. Что бы получилось нужно приведение типов делать. Без причесанного примера я не смогу помочь.

Оффлайн Сергей SSSАвтор темы

  • ADN OPEN
  • Сообщений: 36
  • Карма: 0
Упсссс
это я в чертеже уже пытался запустить, прошу прощения- перепутал

Оффлайн Сергей SSSАвтор темы

  • ADN OPEN
  • Сообщений: 36
  • Карма: 0
Код - 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
Получилось так, только сборки тоже появляются. Хотелось бы, чтобы сборки игнорировались, а детали брались только из текущей сборки
« Последнее редактирование: 11-04-2016, 16:38:50 от Александр Ривилис »

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

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

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Хотелось бы, чтобы сборки игнорировались, а детали брались только из текущей сборки
Нужно внятнее спрашивать с самого начала:

Код - 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

Оффлайн Сергей SSSАвтор темы

  • ADN OPEN
  • Сообщений: 36
  • Карма: 0
Хотелось бы, чтобы сборки игнорировались
К сожалению появляется запрос на изменение и подсборок тоже. А нельзя ли, чтобы сборки все игнорировалисть, а запрос на изменение свойства появлялся только для деталей, а еще лучше для деталей, которые не являются стандартными изделиями, те приобретенными.              Итогом всего этого я хочу сделать так, или по крайней мере попытаюсь, чтобы номера обозначений сами генерировались в зависимости от номера самой верхней сборки и вхождениями. Поэтому мне наверное нужно первоначально получить только детали, чтобы потом объединить их в зависимости от вхождений.
« Последнее редактирование: 12-04-2016, 08:32:15 от Сергей SSS »