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

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

« предыдущая - следующая »

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

Вират Лакх

Само по себе print(ObjSpc) не поможет. Для начала нам этой инструкцией надо увидеть, что прога получает объект спецификации. Черное окно будет, когда вы переименуете расширение .pyw на .py и запустите через python.exe.
Еще раз, о каком добавлении мы говорим. Как такового добавления ОС теперь давно нет в программе. В 18 версии у деталей внутри теперь нельзя добавить ОС. У старых версий (< 18) можно, но нафиг надо. Есть и должно быть одно место, где находится описание модели, - это свойства. Объект спецификации может переопределять их ("Шурик, вы комсомолец? Это же не наш метод!"). Сейчас вписывается "БЧ" и масса в объект спецификации компонента в сборке (вам нужно находится в сборке и в ней на любой глубине раздавать обозначения и прочее деталям и подсборкам), если описание СП есть в этой сборке или подсборке, если ОС компонента есть, если включена галка БЧ, если в габарите есть данные или материал включен в наименование.
Вы хотите, чтобы в источнике детали создался ОС? Или чтобы прописались в ОС детали в сборке БЧ и кг?

Умка

Нужно чтобы в детали внутри создавался объект спецификации с БЧ и кг

Вират Лакх

Зачем? Чем не устраивает вписать бч в ос компонента сборки? Я это делать не буду. Это пережиток прошлого и в принципе ерунда.

Вират Лакх

Новая версия программы - Обозначение компонентов и тел v3.6:
1) Доработано окно программы в части подгонки ширины полей ввода для названия и материала после команд через ПКМ;
2) В кнопке '≠' добавлена проверка на наличие компонентов, файлы которых расположены вне каталога или подкаталогов текущей сборки.
Если такие компоненты будут найдены, то выдаётся список этих объектов в виде кнопок, нажатие на которые копирует файл выбранного компонента в каталог сборки и заменяет (или компас выдаёт запрос на изменение ссылок, если файл был изменен и не сохранен) файл-источник данного компонента на созданную копию.

Вират Лакх

Специально для Kilia :)
Вот макрос, создающий не привязанную к геометрии позицию (с запросом текста), на которую в наименование вставляется ссылка.
Есть ограничение - если в модельке не будет геометрии и позиция не будет скрыта или исключена из расчета, то компас может падать при смене ориентации вида (спереди, диметрия и т.д.).
Прошу испытать надежность работы ссылки в деталях, которые расположены в сборках-подсборках, т.к. думаю включить в функционал новой версии программы ОКТ.

matb

Специально для работы в 18.1.5 с  Обозначение компонентов и тел v3.6.pyw будут специальные рекомендации/ограничения?

Вират Лакх

У меня нет и не будет компаса 17 или 18, поэтому какие-то тонкости в работе программы я не могу сказать. Теоретически всё должно быть нормально. Если бы были специальные рекомендации/ограничения, я бы сказал.

Вират Лакх

Крупное и финальное обновление программы до версии v3.7.
1) Добавлена замена остальных компонентов текущей сборки в проверке путей (ранее заменялся только первый).
2) Добавилась проверка материала в наименовании у компонентов и тел текущей сборки (актуально для деталей без чертежей).
3) Добавлена функция копирования материала в буфер через ПКМ и на горячую клавишу (удобно для создания ссылок у деталей БЧ).
4) Добавлена функция вставки ссылки в наименование через обозначение позиции (работает на Компас v16.1; на тех компасах, где не работает, доделывать ссылки придется самостоятельно).
5) Изменилось главное окно программы (функции, которые были спрятаны на некоторых кнопках через ПКМ и/или СКМ, выведены на отдельные кнопки; остались только ПКМ на кнопках '▲' и '▼').
6) Небольшая оптимизация кода (получение свойств Масса, Раздел спецификации и прочее).
7) Проработано перемещение между элементами окна по клавише Tab (сначала последовательно по полям ввода-вывода, затем всё остальное).
8) Добавлен вызов всплывающего меню на кнопку между правыми win и ctrl (а вот у компаса 16.1 этого нет для дерева модели).
9) Изменены некоторые горячие клавиши (указаны во всплывающих меню).

Вират Лакх

27.05.19, 05:32:00 #368 Последнее редактирование: 27.05.19, 07:53:14 от Вират Лакх
Вместо FAQ:

1) "Нажал ≠" - это вы запустили проверку текущей сборки по 13-ти различным пунктам.

2) "Пощёлкал всё что вылезло." - появившиеся окна - это списки кнопок по каждому пункту, где есть подозрения на ошибку. В заголовке каждого окна написано, про что этот список и что совершает с указанным компонентом или телом нажатие на кнопку (что-то, например, включает или просто выделяет, чтобы можно было легко добить руками и не искать самому).

3) "(почему-то "первые 20 из...")" - списки ограничены 20-ю пунктами для того, чтобы окно с кнопками не было слишком длинным для окна монитора. Длинный список, как правило, результат массива "проблемного" компонента или тела. Если мы видим, что они повторяются, то должно быть достаточно нажать только первый из них. А затем провести повторную проверку, чтобы убедиться в полном исправлении всех замечаний.

4) "Создались объекты спецификации." - библиотека металлоконструкций (по крайней мере v16.1) топорово создает объекты спецификации. Лучше на них забить, библиотекой МК не создавать, а потом кнопками ОСт и ≠ навести порядок.

5) "Вручную присвоил недостающие Обозначения и они сгруппировались в СП. :o" - тут ничего удивительного нет; в компасе по умолчанию сортировка по обозначению (пока обозначения нет, объекты не группируются). Хотя может вру, у меня сортировка расширена давно.

6) "... жму ≠ и о чудо! Всё верно! Что я сделал и какие настройки программы мне нужны я так и не понял... Но получилось то что хотел!" - программа выполнила свою миссию - помогла неопытному в компасных заморочках человеку ) У '≠' настроек практически нет, разве что, возможно, обращается к галочкам БЧ и 0,0 с задвигалкой 0000 кг.

7) "Где почитать инструкцию к этому скрипту?" - у программы есть кнопка "?" - это вызов окна со справкой по программе. Можно вместо "?" традиционно нажать на клавиатуре F1. Кроме этого, можно прочитать всю тему
'Библиотека для деталей БЧ' https://forum.ascon.ru/index.php/topic,30640.0.html - тут вся история развития её функционала в течение 1 года и 9 месяцев. Ну или первую и последние страницы.

8) "Можно ли с помощью этого скрипта, автоматически присваивать Обозначения или Наименования деталям?" - автоматически нет. Как можно автоматизировать присвоение Обозначения? У всех свой подход к обозначениям: по классификатору или по последовательному изменению последних цифр. Наименования - тем более. Но программа облегчает раздачу Обозначений и Наименований с Материалом (в обычном виде или БЧ) деталям и телам текущей сборки, её подсборкам и компонентам и телам этих подсборок и т.д. на любую глубину. И, конечно, самим текущим документам: детальке или сборке.

9) Напомню основное про программу ОКТ:
- Выделить тот объект, который мы читаем или прописываем, можно как в дереве модели, так и геометрию в окне (поверхность, ребро, точку).
- Есть функционал по измерению геометрии для деталей БЧ.
- Материал можно выбрать из трех мест: МиС, graphic.dns и Текстовые шаблоны.
- Недавно добавилось создание ссылок для наименования.
- Можно работать из окна объектов спецификации текущей сборки.

Ещё раз благодарю ув. ТрындецЪ за то, что он заложил основу этой программы и научил меня Python и API Компас.
P.S. Donate приветствуется.

Вират Лакх

Теперь точно последняя версия v3.8 (2350 строк кода):
1) Вернул определение раздела спецификации у тел при создании им объектов спецификации и кое-что ещё переделал.
2) Улучшил работу с телами металлоконструкций (у неё материал и наименование тел зачем-то сделали через ' $b ').
3) Изменено расположение кнопок и галочек в главном окне программы.
4) Добавлена на кнопку '12' расстановка номеров позиций в объектах спецификации сборки (еще вызывается на клавиатуре кнопкой Pause и через всплывающее меню). При нажатии на эту кнопку в сборочном чертеже или спецификации запускается штатная расстановка позиций + сохранение документа (если файл создан), чтобы изменения передались в модель.
5) Новая секретная функция. На правую кнопку мыши кнопка 'ОСТ' копирует внутренние объекты спецификации текущей сборки во внешние. Созданные внешние объекты спецификации никак ни с чем не связаны, просто копии. Одинаковые базовые объекты складываются и записываются одной строкой. Это нужно для тех случаев, когда нужно подсборку вставить одним компонентом, а её внутренние объекты спецификации перешли в сборку, как будто вставлена россыпью или разрушена. Проверка на такую вставку будет ругаться. Эта команда особенно актуальна для подсборок, которые выполнены телами, например, библиотекой металлоконструкций. В этом случае разрушение подсборки приводит к исчезновению тел.
6) Дополнительная секретная функция. На среднюю кнопку мыши кнопка 'ОСТ' удаляет все внешние объекты спецификации текущей сборки.
7) Ещё какая-то оптимизация кода местами.
0) Про объекты спецификации в детальке.
Цитата: Умка от 04.02.19, 14:38:09
Нужно чтобы в детали внутри создавался объект спецификации с БЧ и кг

Цитата: Вират Лакх от 04.02.19, 14:47:17
Зачем? Чем не устраивает вписать бч в ос компонента сборки? Я это делать не буду. Это пережиток прошлого и в принципе ерунда.

Не такая уж ерунда эти ОС в детальке. Оказывается, можно выделить корень дерева детали и добавить объект спецификации с геометрией. Тогда ОС будет завязан со свойствами детали. Можно будет в таком случае в ОС прописать многострочное наименование (добавить материал через библиотеку, вставить шаблонный текст, спецсимволы и т.д.), что трудно или невозможно сделать через свойства. В новых компасах убрали же ОС в деталях? Значит, ушла такая возможность прописывать сложные тексты в наименовании? Плохо, что при удалении объектов спецификации сборки эти объекты внутри деталей тоже удаляются...

Умка

Аналогично работаю! Выделяю корень дерева детали и добавляю объект спец. вместе с геометрией, БЧ и примечания ручками.

Вират Лакх

Версия v3.9. Шлифовка программы:
1) Проверка обращала внимание на компоновочную геометрию, теперь игнорирует. И обращала внимание на разницу $d и $b в наименовании и материале тел, созданных библиотекой металлоконструкций.
2) Некоторая оптимизация кода в плане быстродействия при проверке сборки и вставке свойств в компоненты.
3) Еще какие-то внутренние дела.

ТрындецЪ

Хорошо было бы, если бы были реализованы всплывающие подсказки при наведении указателя мыши на кнопку, как в КОМПАСе. Там столько кнопок, что запутаешься, а справку лень лазить каждый раз.
Upd: Я даже ссылку нашёл, как это реализовывается.

Вират Лакх

Потом эти подсказки маячить будут. И тут гораздо меньше кнопок, чем в компасе :)
В справку лазить придется первое время. Потом не будешь пользоваться лишними кнопками и запомнишь нужные. И подсказки написать - это опять же время, которое и так было потрачено на программу в огромном количестве.
Так что извиняйте :)

pr0100

Просьба запоковать в exe, не работает не последняя не предпоследнии версии

Вират Лакх

pr0100, у меня к вам ответная просьба. Мне эти exe не очень нравятся. Давайте разберемся, почему у вас не работает. Я старался написать универсальный код, который бы работал на 2.х и 3.х питонах и со всеми компасами. Всяких попыток импорта внешних модулей сделал... Можем для разборок перейти с форума в другое место.
Или тут выложите, что показывает программа. Если не показывает, то запустите через IDLE (Python GUI) или чем вы пользуетесь для написания и отладки скриптов.

pr0100

Ошибка в модуле re
*** Удаленный интерпретатор инициализирован повторно***
Traceback (most recent call last):
  File "Z:КД_StandartProducts.01_МакросыОбозначение компонентов и тел v3.9.pyw", line 2348, in <module>
    read_prop()                                                      # Считываем свойства компонента или тела
  File "Z:КД_StandartProducts.01_МакросыОбозначение компонентов и тел v3.9.pyw", line 262, in read_prop
    oboznachenie = re.split(oboznCode+'$', oboznachenie)[0]
  File "C:UserskAppDataLocalProgramsPythonPython36-32lib e.py", line 212, in split
    return _compile(pattern, flags).split(string, maxsplit)
ValueError: split() requires a non-empty pattern match.
>>>


Странно, что не работает через среду разработки. PyScripter. Через стандартное IDLE запускается

ТрындецЪ

Цитата: Вират Лакх от 26.06.19, 11:11:20
Потом эти подсказки маячить будут. И тут гораздо меньше кнопок, чем в компасе :)
В справку лазить придется первое время. Потом не будешь пользоваться лишними кнопками и запомнишь нужные. И подсказки написать - это опять же время, которое и так было потрачено на программу в огромном количестве.
Так что извиняйте :)

В КОМПАСе подсказки же не маячат, там пауза есть до появления (1 сек. наверное)
Вот нарыл код, который класс подсказок создаёт. Останется только для каждого виджета написать следующее:
CreateToolTip(имя_виджета, 'Текст подсказки')
У кого со временем посвободнее, реализуйте. У меня тоже со временем напряг.

class CreateToolTip(object):
    """
    create a tooltip for a given widget
    """
    def __init__(self, widget, text='widget info'):
        self.waittime = 1000     #пауза перед появлением подсказки (в микросекундах)
        self.wraplength = 180   #pixels
        self.widget = widget
        self.text = text
        self.widget.bind("<Enter>", self.enter)
        self.widget.bind("<Leave>", self.leave)
        self.widget.bind("<ButtonPress>", self.leave)
        self.id = None
        self.tw = None

    def enter(self, event=None):
        self.schedule()

    def leave(self, event=None):
        self.unschedule()
        self.hidetip()

    def schedule(self):
        self.unschedule()
        self.id = self.widget.after(self.waittime, self.showtip)

    def unschedule(self):
        id = self.id
        self.id = None
        if id:
            self.widget.after_cancel(id)

    def showtip(self, event=None):
        x = y = 0
        x, y, cx, cy = self.widget.bbox("insert")
        x += self.widget.winfo_rootx() + 25
        y += self.widget.winfo_rooty() + 20
        # creates a toplevel window
        self.tw = tk.Toplevel(self.widget)
        # Leaves only the label and removes the app window
        self.tw.wm_overrideredirect(True)
        self.tw.wm_geometry("+%d+%d" % (x, y))
        self.tw.wm_attributes('-topmost', 1)
        label = tk.Label(self.tw, text=self.text, justify='left',
                       background="#ffffff", relief='solid', borderwidth=1,
                       wraplength = self.wraplength)
        label.pack(ipadx=1)

    def hidetip(self):
        tw = self.tw
        self.tw= None
        if tw:
            tw.destroy()

Вират Лакх

Версия 3.10. Исправление ошибки, возникающей на новых питонах (теперь нельзя делить строку пустым разделителем).

pr0100

Цитата: Вират Лакх от 27.06.19, 04:39:40
Версия 3.10. Исправление ошибки, возникающей на новых питонах (теперь нельзя делить строку пустым разделителем).



Работает