Библиотека для деталей БЧ

Автор Вират Лакх, 19.08.17, 07:32:57

« назад - далее »

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

Вират Лакх

Это запрос на создание библиотеки.
Как мы знаем, Аскон упорно не хочет проработать запись деталей без чертежа в спецификацию.
На форуме мы с вами можем встретить кучу одинаковых тем, посвященных тому, как люди напрягаются от отсутствия этой функции.
Кто из программистов может заняться написанием библиотеки?
Руководство и вознаграждение сообразим.
В 3D это пока представляется одним описанным на форуме способом: создать линию-выноску (потом скрыть её, чтобы не мешалась), в нее напихать информацию и создать ссылку в свойствах модели на неё. Вручную это делать очень долго.
+ Благодарностей: 2

СВ

 Если К17 действительно это не может, то
+5 (из 5)
Но скорее, начинать нужно с вопроса к Аскону в лице В.В. Никонова.
-  -  -
А я, дурачок, только что спрашивал http://forum.ascon.ru/index.php/topic,9150.msg241749/topicseen.html#msg241749:
Цитата: Студент 2015 от 19.08.17, 10:06:38
Я хочу чтобы детали БЧ вот так определялись и читались в спецификации. ...
- А вообще, автоматическая спецификация так умеет, автоматически?

Вират Лакх

19.08.17, 11:11:31 #2 Последнее редактирование: 19.08.17, 13:16:14 от Вират Лакх
Ничо она не умеет... Пока сами не сделаем, так и не будет уметь. Ну может в какой-нибудь V18 или дальше, но точно скорее всего наверно по-любому не в V16.х версиях. Очередной раз поднялась тема с БЧ в соседней ветке, вот я и создал эту.
UPD. И даже более того, лучше, чтобы это сделали мы сами, чем аскон. Они сделают не более чем по ГОСТу и еще неизвестно, как это у них получится. А некоторым надо по-всякому, чтобы было еще наплевательски на ГОСТ :)

chelkar

Цитата: Вират Лакх от 19.08.17, 07:32:57
Это запрос на создание библиотеки.
А что должна уметь делать эта библиотека?

ТрындецЪ

Цитата: chelkar от 24.08.17, 14:33:18
А что должна уметь делать эта библиотека?
Мне вот тоже интересно. Уважаемый, Вират Лакх, сформируйте ТЗ пожалуйста!
Например, я детали БЧ в сборке делаю локальными, чтобы они не потерялись. В спецификацию приходит обозначение и наименование этих деталей. Вы хотите внесение наименования упростить, чтобы имелась возможность вносить туда дроби, шероховатость и  прочие знаки?
Чтоб ещё в графе Формат спецификации прописывалось "БЧ", чтоб масса в примечании проставлялась или ещё чего?
+ Благодарностей: 1

Вират Лакх

В двух словах ТЗ я написал в первом сообщении. Пока её задача сделать так, чтобы в свойствах модели в Наименовании прописать то, что нужно для деталей БЧ:
1) Наименование детали @/ - эта строка может отсутствовать.
2) Материал @/ - эта строка тоже может отсутствовать.
3) Размеры вида "L = <ссылка>±<допуск> мм", "<ссылка>±<допуск>х<ссылка>±<допуск> мм" и даже "D = <ссылка>±<допуск> мм" вплоть до "D = <ссылка>±<допуск> мм, d = <ссылка>±<допуск> мм" с возможностью отсутствия допусков.
Попробовать обойтись программно без создания этой промежуточной линии-выноски, т.к. опыты с ссылками на линию-выноску показывают, что оно там не всегда толком обновляются.
Материалы в виде ссылки тоже коряво получаются.
Так что, видимо, это будет лучше не набор ссылок, а просто вручную быстро обновляемый набор.
Библиотека берет имя (если задано) делает как-нибудь конкатенацию с материалом в виде "Лист$d4 ГОСТ 19903-74;09Г2С-12 ГОСТ 5520-79$" (если нужно) + размеры, которые берутся из переменных. А каких переменных - может это будут заранее созданные библиотечные переменные вида wodL, bchA, которые можно создать в детали-шаблоне. Пользователь сам уж впишет переменную вида v155. А можно еще круче, чтобы пользователь библиотеке указал ребро, и она бы поняла, что L = ..., или два ребра - значит АхВ, или диаметр - значит D = мм, два диаметра - значит D = мм, d = мм. Про обозначение детали БЧ в виде диаметра не комментируем :) И параметрически еще привязалась бы, вообще была бы круть.
Чтобы в Формат вписывалось БЧ и в примечание масса - с этим уже хорошо справляется библиотека Авторедактор от ув. Дмитрия22. Так что это уже сделано и не требуется.
+ Благодарностей: 3

pr0100

25.08.17, 09:45:10 #6 Последнее редактирование: 25.08.17, 10:03:34 от pr0100
Присоединяюсь к теме, потребность этого тоже имеется.
Заполнять наименование можно программно, используя данные переменных. А параметры материала это константы.


Вот кусок кода на python, его просто нужно причесать под переменные.




#########################################

# -*- coding: cp1251 -*-
#Заполнение наименование модели
import pythoncom
from win32com.client import Dispatch, gencache


import LDefin2D
import MiscellaneousHelpers as MH
name = 'тут пишем наименование'
#  Подключим константы API Компас
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants


#  Подключим описание интерфейсов API5
kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
kompas_object = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch))
MH.iKompasObject  = kompas_object


#  Подключим описание интерфейсов API7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
application = kompas_api7_module.IApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IApplication.CLSID, pythoncom.IID_IDispatch))
MH.iApplication  = application




Documents = application.Documents
#  Получим активный документ
kompas_document = application.ActiveDocument
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
iDocument3D = kompas_object.ActiveDocument3D()


iPart7 = kompas_document_3d.TopPart
iPart = iDocument3D.GetPart(kompas6_constants_3d.pTop_Part)




iPart.name = name
iPart.Update()

+ Благодарностей: 1

Вират Лакх

Цитата: pr0100 от 25.08.17, 09:45:10
... А параметры материала это константы.
Можно не совсем константы, а типа Лист$ds ГОСТ 19903-74;09Г2С-12 ГОСТ 5520-79$, где s - тоже переменная.
+ Благодарностей: 1

pr0100

25.08.17, 10:05:58 #8 Последнее редактирование: 25.08.17, 10:17:23 от pr0100
Цитата: Вират Лакх от 25.08.17, 10:01:56
Можно не совсем константы, а типа Лист$ds ГОСТ 19903-74;09Г2С-12 ГОСТ 5520-79$, где s - тоже переменная.


Ну так это я имею в виду.
Здесь три переменных.
1 Толщина
2 Ширина
3 Длина


Весь остальной текст, это константы.
В группе вк это обсуждалось, там есть готовый макрос. Который по параметрам детали вносит данные в свойства.
https://vk.com/topic-29994774_26653498?post=63195

ТрындецЪ

25.08.17, 11:55:35 #9 Последнее редактирование: 25.08.17, 15:49:28 от ТрындецЪ
Задачу можно решить созданием объекта спецификации детали. Даже КОМПАС-МАКРО это записывает. Останется только допилить и унифицировать код. Будем пробовать.

Upd:
Вот для начала код, заполняющий объект спецификации текущей детали.
# -*- coding: utf-8 -*-
# БЧ

oboznachenie = u"АБВ.123456"
naimenovanie = u"Пластина"

import pythoncom
from win32com.client import Dispatch, gencache
import MiscellaneousHelpers as MH

#  Подключим константы API Компас
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants

#  Подключим описание интерфейсов API5
kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
kompas_object = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch))
MH.iKompasObject  = kompas_object

#  Подключим описание интерфейсов API7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
application = kompas_api7_module.IApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IApplication.CLSID, pythoncom.IID_IDispatch))
MH.iApplication  = application

iDocument3D = kompas_object.ActiveDocument3D()

iDocument = application.ActiveDocument
iKompasDocument3D = kompas_api7_module.IKompasDocument3D(iDocument)
iPart7 = iKompasDocument3D.TopPart

# Получаем материал детали
material =  iPart7.Material
# Получаем массу детали
mass = iPart7.Mass

# Получим интерфейс для работы с объектами спецификации
iSpc = iDocument3D.GetSpecification()

SpecificationDescriptions = iDocument.SpecificationDescriptions

# Если имеются объекты спецификации, удаляем их
if SpecificationDescriptions.Active:
    Description = SpecificationDescriptions.Active
    Objects = Description.Objects
    while Objects:
        for i in range(len(Objects)):
            Objects[i].Delete()
        Objects = Description.Objects


# Создаём базовый объект спецификации в разделе Детали
iSpc.ksSpcObjectCreate("", 0, 20, 0, 0, 0)

# Заполняем ячейки
iSpc.ksSetSpcObjectColumnText(1, 1, 0, u"БЧ") # Формат
iSpc.ksSetSpcObjectColumnText(4, 1, 0, oboznachenie) # Обозначение
iSpc.ksSetSpcObjectColumnText(5, 1, 0, naimenovanie + "@/" + material) # Наименование
iSpc.ksSetSpcObjectColumnText(7, 1, 0, str(round(mass*0.001, 2)).replace(".", ",") + u" кг") # Примечание
iSpc.ksSpcObjectEnd()

# Заполняем свойства детали Обозначение и Наименование
iPart7.Marking = oboznachenie
iPart7.Name = naimenovanie

iModelObject = kompas_api7_module.IModelObject(iPart7)
iModelObject.Update()

iDocument.Save()

Upd2: Добавлено получение материала детали

Вират Лакх

Как говорит Сандор Клиган "В пекло Свойства модели - Наименование".
Но нет. У этого пути есть недостаток. Какого-то ляда при удалении объектов спецификации в сборке, куда входит эта деталь, в детали удаляется её собственный ОС. И надо снова создавать ОС в деталях.
А удалять объекты спецификации приходится, чтобы глюки всякие убрались и с нуля создавать спецификацию.
Если в спецификации будет 45 деталей бч, то после удаления ОС в сборке придется повторить во всех 45-ти деталях создание объекта спецификации.
Кто справку к компасу читает, такая пропажа ОС в деталях должна быть?

ТрындецЪ

25.08.17, 19:44:27 #11 Последнее редактирование: 25.08.17, 23:21:53 от ТрындецЪ
Цитата: Вират Лакх от 25.08.17, 18:37:52
У этого пути есть недостаток. Какого-то ляда при удалении объектов спецификации в сборке, куда входит эта деталь, в детали удаляется её собственный ОС. И надо снова создавать ОС в деталях.
А удалять объекты спецификации приходится, чтобы глюки всякие убрались и с нуля создавать спецификацию.
Хорошее замечание!
Выходит, что при повторном создании  объектов спецификации через сборку в них передаются только наименования и обозначения из свойств модели. Если это так, то я пока не знаю каким образом восстанавливать надпись "БЧ" и массу в примечании.
Заполнить свойства наименование и обозначение это не проблема.
И еще попутный вопрос: начал было разрабатывать код, который сам определял бы тип детали(пластина или цилиндр, для начала) и вычислял бы габариты деталей (длину, ширину или диаметр и длину). Вот только с алгоритмом определения пока трудности. Прямоугольный параллелепипед (пластина) можно отличить по 6 плоским граням и трем вариантам длины 12 ребер. Но косоугольный параллепипед имеет те же признаки. Короче, нужны идеи.

Upd:
Цитата: Справка КОМПАС-3D 6.2.3.4.2. Внутренние объекты
3. Автоматическое формирование объектов спецификации,
соответствующих компонентам

Автоматическое создание объектов спецификации в компонентах текущей сборки про­изводится с помощью команды Спецификация — Создать объекты специфика­ции....
При этом создаются объекты спецификации во всех компонентах, где их не было. В де­талях создаются обычные объекты спецификации, в сборках — внешние объекты спе­цификации. Обозначение и наименование берутся из свойств компонентов, заполняется дополнительная колонка Масса; документы-модели подключаются к созданным внутри них объектам спецификации.
Подробно команда автоматического создания объектов спецификации описана в разде­ле 6.2.3.7.1.
Для использования данного способа создания объектов спецификации необходимо, чтобы в файлах всех компонентов сборки были заданы их обозначения и наименования.

Вират Лакх

Цитата: ТрындецЪ от 25.08.17, 19:44:27
... я пока не знаю каким образом восстанавливать надпись "БЧ" и массу в примечании.
И еще попутный вопрос: начал было разрабатывать код, который сам определял бы тип детали(пластина или цилиндр, для начала) и вычислял бы габариты деталей (длину, ширину или диаметр и длину). Вот только с алгоритмом определения пока трудности. Прямоугольный параллелепипед (пластина) можно отличить по 6 плоским граням и трем вариантам длины 12 ребер. Но косоугольный параллепипед имеет те же признаки. Короче, нужны идеи.
"Восстанавливать надпись "БЧ" и массу в примечании" - на ряду с простановкой форматов А4, А3 и т.д. чертежей это была одна из первых функций библиотеки Авторедактор, и она с этим справляется. Так что теперь смело и легко можно грохнуть спецификацию и создать заново.
А попутный вопрос слишком неопределенный и сложный. И вроде большой необходимости в нем нет. Однажды созданная деталь БЧ скорее всего так и останется: швеллер - швеллером, а лист - листом.
В цитате из справки ничего нового: наименование, обозначение и масса в доп.колонку.

студент

Цитата: Вират Лакх от 28.08.17, 04:21:27
"Восстанавливать надпись "БЧ" и массу в примечании" - на ряду с простановкой форматов А4, А3 и т.д. чертежей это была одна из первых функций библиотеки Авторедактор, и она с этим справляется. Так что теперь смело и легко можно грохнуть спецификацию и создать заново.
А попутный вопрос слишком неопределенный и сложный. И вроде большой необходимости в нем нет. Однажды созданная деталь БЧ скорее всего так и останется: швеллер - швеллером, а лист - листом.
В цитате из справки ничего нового: наименование, обозначение и масса в доп.колонку.
Это что за библиотека такая?


ТрындецЪ

Цитата: Вират Лакх от 28.08.17, 04:21:27
А попутный вопрос слишком неопределенный и сложный. И вроде большой необходимости в нем нет. Однажды созданная деталь БЧ скорее всего так и останется: швеллер - швеллером, а лист - листом.
Основная цель идентификации типа детали - это автоматическое определение ее габаритов. Если лист, то получим длины рёбер, если круг то его диаметр и высоту цилиндра.

Вират Лакх

Ну успехов ) Как определить запись такой детали: круг диаметром 100 и вытянутый на 20. То ли это лист 20 с размером D=100, то ли круг 100 с длиной L = 20.
Разве что анализировать строку Материал. Если есть слово лист, то выбрать два наибольших из трех габаритов...

ТрындецЪ

Вот что получилось.
При запуске производится считывание свойств Обозначение, Наименование а также Материала текущей детали. Этими данными заполняются окна программы для дальнейшего ручного редактирования.

Для последнего поля ввода:
буквы "Ф" и "ф" переводятся в спецсимвол диаметра;
"+-"  переводятся  в спецсимвол "плюс-минус";
"+" перед числом переводится вместе с числом в верхний индекс средней высоты;
"-"  перед числом переводится вместе с числом в нижний индекс средней высоты.

F5 - считывает свойства текущей детали и обновляет данные в окнах;
Enter - считываются данные из окон и вносятся в свойства текущей детали;
ESC - закрывает программу.

Создание объекта спецификации отключаемая опция.

Работоспособность проверялась на КОМПАС-3D V16.0, Python  2.6.6

+ Благодарностей: 1

Вират Лакх

29.08.17, 09:52:02 #18 Последнее редактирование: 29.08.17, 10:11:02 от Вират Лакх
Цитата: ТрындецЪ от 29.08.17, 02:29:39
Вот что получилось. ...
А как-то по-другому её оформить можно? В виде библиотеки. Что-то у меня макросы из компаса хромают.
По скриншоту чего я бы хотел сделать:
1) У наименования и материала поставить рядом галочки. Если галка включена, то включить это поле в обозначение, если нет - не включать и убрать @/, которые идут за этим полем.
2) Зачем эта галочка Создавать объект спецификации?
3) А ссылки или переменные пробовали вставлять?

ТрындецЪ

29.08.17, 10:10:38 #19 Последнее редактирование: 29.08.17, 10:23:17 от ТрындецЪ
Цитата: Вират Лакх от 29.08.17, 09:52:02
Что-то у меня макросы из компаса хромают.
Компас какой версии? Хромают это как понимать?
Вообще запускается программа двойным кликом на ней, если питон установлен корректно. Если при запуске ничего не происходит, то можно попробовать обновить/поставить питон 2.х версии, возможно и на 3.х будет работать.
Сергей (pr0100), у тебя же 17 компас и питон 3. Работает эта программа?

Upd:Я не волшебник, я только учусь (с)
1) А как-то по-другому её оформить можно? В виде библиотеки. -  Этого я пока не умею делать.
2) У наименования и материала поставить рядом галочки. - Это можно.
3) Зачем эта галочка Создавать объект спецификации? - От объекта спецификации хуже никому не будет. Если кто-то не использует библиотеку "Авторедактор", то ему эта функция будет полезна. И не всегда приходится удалять объекты спецификации в сборке.
4) А ссылки или переменные пробовали вставлять? - Не пробовал, но у меня такое подозрение, что свойство может принять либо ссылку, либо текст. Как ссылка на переменную другого документа, к которой нельзя что-то добавить. Можно программно попробовать воспроизвести "костыль" с линией выноской.