Это запрос на создание библиотеки.
Как мы знаем, Аскон упорно не хочет проработать запись деталей без чертежа в спецификацию.
На форуме мы с вами можем встретить кучу одинаковых тем, посвященных тому, как люди напрягаются от отсутствия этой функции.
Кто из программистов может заняться написанием библиотеки?
Руководство и вознаграждение сообразим.
В 3D это пока представляется одним описанным на форуме способом: создать линию-выноску (потом скрыть её, чтобы не мешалась), в нее напихать информацию и создать ссылку в свойствах модели на неё. Вручную это делать очень долго.
Если К17 действительно это не может, то
+5 (из 5)
Но скорее, начинать нужно с вопроса к Аскону в лице В.В. Никонова.
- - -
А я, дурачок, только что спрашивал http://forum.ascon.ru/index.php/topic,9150.msg241749/topicseen.html#msg241749:
Цитата: Студент 2015 от 19.08.17, 10:06:38
Я хочу чтобы детали БЧ вот так определялись и читались в спецификации. ...
- А вообще, автоматическая спецификация так умеет, автоматически?
Ничо она не умеет... Пока сами не сделаем, так и не будет уметь. Ну может в какой-нибудь V18 или дальше, но точно скорее всего наверно по-любому не в V16.х версиях. Очередной раз поднялась тема с БЧ в соседней ветке, вот я и создал эту.
UPD. И даже более того, лучше, чтобы это сделали мы сами, чем аскон. Они сделают не более чем по ГОСТу и еще неизвестно, как это у них получится. А некоторым надо по-всякому, чтобы было еще наплевательски на ГОСТ :)
Цитата: Вират Лакх от 19.08.17, 07:32:57
Это запрос на создание библиотеки.
А что должна уметь делать эта библиотека?
Цитата: chelkar от 24.08.17, 14:33:18
А что должна уметь делать эта библиотека?
Мне вот тоже интересно. Уважаемый, Вират Лакх, сформируйте ТЗ пожалуйста!
Например, я детали БЧ в сборке делаю локальными, чтобы они не потерялись. В спецификацию приходит обозначение и наименование этих деталей. Вы хотите внесение наименования упростить, чтобы имелась возможность вносить туда дроби, шероховатость и прочие знаки?
Чтоб ещё в графе Формат спецификации прописывалось "БЧ", чтоб масса в примечании проставлялась или ещё чего?
В двух словах ТЗ я написал в первом сообщении. Пока её задача сделать так, чтобы в свойствах модели в Наименовании прописать то, что нужно для деталей БЧ:
1) Наименование детали @/ - эта строка может отсутствовать.
2) Материал @/ - эта строка тоже может отсутствовать.
3) Размеры вида "L = <ссылка>±<допуск> мм", "<ссылка>±<допуск>х<ссылка>±<допуск> мм" и даже "D = <ссылка>±<допуск> мм" вплоть до "D = <ссылка>±<допуск> мм, d = <ссылка>±<допуск> мм" с возможностью отсутствия допусков.
Попробовать обойтись программно без создания этой промежуточной линии-выноски, т.к. опыты с ссылками на линию-выноску показывают, что оно там не всегда толком обновляются.
Материалы в виде ссылки тоже коряво получаются.
Так что, видимо, это будет лучше не набор ссылок, а просто вручную быстро обновляемый набор.
Библиотека берет имя (если задано) делает как-нибудь конкатенацию с материалом в виде "Лист$d4 ГОСТ 19903-74;09Г2С-12 ГОСТ 5520-79$" (если нужно) + размеры, которые берутся из переменных. А каких переменных - может это будут заранее созданные библиотечные переменные вида wodL, bchA, которые можно создать в детали-шаблоне. Пользователь сам уж впишет переменную вида v155. А можно еще круче, чтобы пользователь библиотеке указал ребро, и она бы поняла, что L = ..., или два ребра - значит АхВ, или диаметр - значит D = мм, два диаметра - значит D = мм, d = мм. Про обозначение детали БЧ в виде диаметра не комментируем :) И параметрически еще привязалась бы, вообще была бы круть.
Чтобы в Формат вписывалось БЧ и в примечание масса - с этим уже хорошо справляется библиотека Авторедактор от ув. Дмитрия22. Так что это уже сделано и не требуется.
Присоединяюсь к теме, потребность этого тоже имеется.
Заполнять наименование можно программно, используя данные переменных. А параметры материала это константы.
Вот кусок кода на 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()
Цитата: pr0100 от 25.08.17, 09:45:10
... А параметры материала это константы.
Можно не совсем константы, а типа Лист$d
s ГОСТ 19903-74;09Г2С-12 ГОСТ 5520-79$, где s - тоже переменная.
Цитата: Вират Лакх от 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
Задачу можно решить созданием объекта спецификации детали. Даже КОМПАС-МАКРО это записывает. Останется только допилить и унифицировать код. Будем пробовать.
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, 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 и т.д. чертежей это была одна из первых функций библиотеки Авторедактор, и она с этим справляется. Так что теперь смело и легко можно грохнуть спецификацию и создать заново.
А попутный вопрос слишком неопределенный и сложный. И вроде большой необходимости в нем нет. Однажды созданная деталь БЧ скорее всего так и останется: швеллер - швеллером, а лист - листом.
В цитате из справки ничего нового: наименование, обозначение и масса в доп.колонку.
Это что за библиотека такая?
Всё, в этой же ветке http://forum.ascon.ru/index.php/topic,29908.0.html (http://forum.ascon.ru/index.php/topic,29908.0.html).
Цитата: Вират Лакх от 28.08.17, 04:21:27
А попутный вопрос слишком неопределенный и сложный. И вроде большой необходимости в нем нет. Однажды созданная деталь БЧ скорее всего так и останется: швеллер - швеллером, а лист - листом.
Основная цель идентификации типа детали - это автоматическое определение ее габаритов. Если лист, то получим длины рёбер, если круг то его диаметр и высоту цилиндра.
Ну успехов ) Как определить запись такой детали: круг диаметром 100 и вытянутый на 20. То ли это лист 20 с размером D=100, то ли круг 100 с длиной L = 20.
Разве что анализировать строку Материал. Если есть слово лист, то выбрать два наибольших из трех габаритов...
Вот что получилось.
При запуске производится считывание свойств Обозначение, Наименование а также Материала текущей детали. Этими данными заполняются окна программы для дальнейшего ручного редактирования.
Для последнего поля ввода:
буквы "Ф" и "ф" переводятся в спецсимвол диаметра;
"+-" переводятся в спецсимвол "плюс-минус";
"+" перед числом переводится вместе с числом в верхний индекс средней высоты;
"-" перед числом переводится вместе с числом в нижний индекс средней высоты.
F5 - считывает свойства текущей детали и обновляет данные в окнах;
Enter - считываются данные из окон и вносятся в свойства текущей детали;
ESC - закрывает программу.
Создание объекта спецификации отключаемая опция.
Работоспособность проверялась на КОМПАС-3D V16.0, Python 2.6.6
Цитата: ТрындецЪ от 29.08.17, 02:29:39
Вот что получилось. ...
А как-то по-другому её оформить можно? В виде библиотеки. Что-то у меня макросы из компаса хромают.
По скриншоту чего я бы хотел сделать:
1) У наименования и материала поставить рядом галочки. Если галка включена, то включить это поле в обозначение, если нет - не включать и убрать @/, которые идут за этим полем.
2) Зачем эта галочка Создавать объект спецификации?
3) А ссылки или переменные пробовали вставлять?
Цитата: Вират Лакх от 29.08.17, 09:52:02
Что-то у меня макросы из компаса хромают.
Компас какой версии? Хромают это как понимать?
Вообще запускается программа двойным кликом на ней, если питон установлен корректно. Если при запуске ничего не происходит, то можно попробовать обновить/поставить питон 2.х версии, возможно и на 3.х будет работать.
Сергей (pr0100), у тебя же 17 компас и питон 3. Работает эта программа?
Upd:Я не волшебник, я только учусь (с)
1) А как-то по-другому её оформить можно? В виде библиотеки. - Этого я пока не умею делать.
2) У наименования и материала поставить рядом галочки. - Это можно.
3) Зачем эта галочка Создавать объект спецификации? - От объекта спецификации хуже никому не будет. Если кто-то не использует библиотеку "Авторедактор", то ему эта функция будет полезна. И не всегда приходится удалять объекты спецификации в сборке.
4) А ссылки или переменные пробовали вставлять? - Не пробовал, но у меня такое подозрение, что свойство может принять либо ссылку, либо текст. Как ссылка на переменную другого документа, к которой нельзя что-то добавить. Можно программно попробовать воспроизвести "костыль" с линией выноской.
Как хромает тут: http://forum.ascon.ru/index.php/topic,30133.new.html#new
Теперь 16.1.12х64. Двойной клик - ничего не происходит.
UPD:
У меня так ругается красным цветом в питонвине:
Traceback (most recent call last):
File "C:\Python26\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py", line 325, in RunScript
exec codeObject in __main__.__dict__
File "D:\2.pyw", line 11, in <module>
from tkinter import *
ImportError: No module named tkinter
Я его 2.pyw обозвал на случай глюков.
Этот пакет Tkinter должен быть у меня установлен, чтобы окно ввода данных работало?
Цитата: Вират Лакх от 29.08.17, 10:15:51
У меня так ругается красным цветом в питонвине:
Traceback (most recent call last):
File "C:\Python26\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py", line 325, in RunScript
exec codeObject in __main__.__dict__
File "D:\2.pyw", line 11, in <module>
from tkinter import *
ImportError: No module named tkinter
Я его 2.pyw обозвал на случай глюков.
Этот пакет Tkinter должен быть у меня установлен, чтобы окно ввода данных работало?
Tkinter - это стандартная библиотека для вывода графического окна.
Судя по ошибке, она не установлена. Советую снести питон и поставить заново благо он бесплатный.
По поводу переменных в наименовании тоже заметил такой косяк. Взято из группы в vk.com
ЦитироватьПрошу помощи. Помогите написать макрос, который бы в сборке делал следующее:
1)открывал деталь для редактирования на месте
2) имитация нажатия F5
3) Выйти из редактирования с сохранением изменений
Эти действия необходимо проделать со всеми деталями сборки. Для чего это нужно: Есть сборка в которой есть переменные. В сборке вставлены детали с переменными взятыми из этой сборки с помощью "Вставить ссылку". Эти переменные выведены в свойства детали. Теперь можно получать отчет о длине детали например. Но проблема в том что при изменении переменных в сборке данные в свойствах детали не обновляются. Чтобы отчет был актуальным необходимо открыть каждую деталь для редактирования после чего закрыть с сохранением изменений. Буду очень признателен. Готов оплатить труды.
Снёс и поставил python-2.6.6.amd64 заново. Заработало. Спасибо.
UPD:
Цитировать
2) У наименования и материала поставить рядом галочки. - Это можно.
3) Зачем эта галочка Создавать объект спецификации? - От объекта спецификации хуже никому не будет. Если кто-то не использует библиотеку "Авторедактор", то ему эта функция будет полезна. И не всегда приходится удалять объекты спецификации в сборке.
4) А ссылки или переменные пробовали вставлять? - Не пробовал, но у меня такое подозрение, что свойство может принять либо ссылку, либо текст. Как ссылка на переменную другого документа, к которой нельзя что-то добавить. Можно программно попробовать воспроизвести "костыль" с линией выноской.
2) ждем-с :)
3) объект спецификации создается, не все колонки прописывая. Доп.колонки пустые. Хотя бы массу и обозначение материала надо.
4) если делать костыль с выноской, то полюбас придется делать дополнительный костыльный макрос по проблеме обновления ссылок. Или наехать на аскон, чтобы недоделку доделали. Эти ссылки будут постоянно обманывать...
5) желательно иметь возможность запустить макрос в режиме редактирования на месте. пока облом с этим. А то и еще круче - просто выделив компонент в сборке. Библа заходит внутрь, делаем свои дела и выходим.
6) можно "х" русскую и английскую менять на специальный символ умножить.
7) окошку бы следовало закрываться сразу после внесения изменения в модель. можно, например, сделать энтер - внести и не закрываться, а ctrl+enter - внести и закрыться.
8) можно для "мм" еще отдельную галочку сделать. Когда она включена, то в конец строки добавляется " мм".
9) сейчас галочка не запоминается.
а когда их станет больше ей и будущим следовало бы запоминать свое положение.
10) Не люблю я этот наклонный шрифт, которым у вас сделано в окне Обозначение и наименование. Шрифт в полях ввода тоже прямой что ли сделать, а то не сочетается с прямым курсором. Или курсор наклонить.
ну и т.д. Большое поле для критикантства.
Но уже веет от такого окошка удобством. Можно уже сейчас измерить деталь и, не закрывая информационное окно, списать в окно библиотеки цифры даже путем копи-пасте. Удобно тем, что не нужно мозг использовать как буфер обмена. Так можно дорасти до вполне приличной библиотеки.
Первую версию выложил, как раз, чтобы критику и предложения послушать. Одной парой глаз за всеми нюансами не углядишь. По мере возможности доработаю.
Upd: Мелкие экспресс-обновления.
1) Исправлен баг с индексами у которых более одного знака после запятой;
2) Добавлена замена "х" на соответствующий спецсимвол;
3) Добавлено заполнение доп.колонок объекта спецификации Масса и Материал
4) Ctrl + Enter вносит данные в модель и закрывает программу
5) Убран наклон шрифта
Цитата: ТрындецЪ от 29.08.17, 10:10:38
Сергей (pr0100), у тебя же 17 компас и питон 3. Работает эта программа?
Не верный синтаксис. Не работает. Ошибка на запуске.
Там перевод в юникод u'Теxt', если везде убрать "u", то запускается.
Мысль вслух. Вообще, эта библиотека (ну библиотекой её не назовешь) посвящена наименованию детали БЧ. Тому функционалу, которого нет в компасе. В текущей версии скрипта есть обозначение. Это повторение функционала компаса. На суд общественности - может выкинуть? Вроде бы и пригодится, но тогда можно и присвоение материала сделать в тут, и раздел спецификации, и еще какие-нибудь свойства модели...
Можно ли задать окну свойство всегда поверх всех окон?
Как-то повелось, что нажатие на среднюю кнопку мыши на полях ввода - это очистить содержимое. Вместо того, чтобы даблкликом выделять и нажимать del, мы просто на поле жмем СКМ. Получается быстрее. Это чтобы имя детали или содержимое последней строки стирать быстро.
Так как имя не всегда нужно, то второе считывание будет происходить так: скрипт считает первое стоящее до @/ - это будет материалом. В окне программы в имя забьется материал. Его, получается, надо быстро стереть.
Тут напрашивается настройка - та самая галочка участия имени детали. Когда она будет постоянно выключена, то второе считывание будет верным.
Лучше зеленую кнопку сделать контрол+энтером. И вообще от простого Энтера отказаться?
Можно ли для последней строки сделать на даблклик вызов текстовых шаблонов?
Если у меня масса 1,411, то программа в доп. колонку записывает 1,41. Т.е. по-своему округляет. Но ладно для колонки примечание, а в доп.колонку надо вносить точное значение.
По присвоению материала. Да, работает, но для стиля по умолчанию. А я у себя сделал не Пользовательская 3, а материал 3. Странно, что аскон по умолчанию сделали не то.
А вообще интересно наблюдать программу и к ней исходный код. Всегда можно подправить что-нибудь под себя на сколько мозгов хватит.
UPD:
Лично мне больше нравятся сообщения от компаса или библиотек в виде балуна в нижнем правом углу, чем окно с кнопкой OK, чтобы не тыкать лишний раз. Поэтому предлагаю для сообщения "Активный документ не является деталью!" изменить вид сообщения.
Тестируем 0.3 версию библиотеки оформления деталей БЧ!
Чему мы научились:
1) Работать с выделенной деталью сборки (с локальными пока не работает);
2) Находиться поверх всех окон;
3) Нажатие на среднюю кнопку мыши на полях ввода очищает содержимое;
4) Появились долгожданные галочки у названия и материала, исключающие их;
5) Запуск внесения изменений Ctrl+Enter;
6) Вместо информационных окон всплывающие сообщения;
7) Масса в доп.колонке спецификации без округления;
8) Галочка добавляющая в конец наименования надпись " мм"
До чего мы ещё не доросли:
1) Даблкликом в окнах ввода вызывать текстовые шаблоны;
2) Сохранять настройки галок;
3) Делать непонятную вещь описанную Вират Лакх'ом, как:
ЦитироватьПо присвоению материала. Да, работает, но для стиля по умолчанию. А я у себя сделал не Пользовательская 3, а материал 3. Странно, что аскон по умолчанию сделали не то.
Если кто-то натолкнет на решение задачи вставки текстовых шаблонов, буду признателен.
Хм. Не запускается. v0.2 работает, v0.3 - нет.
UPD:
Непонятная вещь поясняется картинкой и "исправляется" с 10 на 9 в строке iSpc.ksSetSpcObjectColumnText(9, 3, 0, material) # Доп.колонка Материал.
Цитата: Вират Лакх от 31.08.17, 16:36:59
Хм. Не запускается. v0.2 работает, v0.3 - нет.
Перезалил. Проблема была в наличии print'ов в коде.
1) Работать с выделенной деталью сборки (с локальными пока не работает) - закрывает открытую в окне деталь.
5) Запуск внесения изменений Ctrl+Enter - не закрывает за собой своё окошко.
*) в доп.колонку Материал затолкал вместе с собакойдробью Лист$d5,0 ГОСТ 19903-74;Ст3сп ГОСТ 14637-89$@/
Цитата: Вират Лакх от 31.08.17, 17:35:46
1) Работать с выделенной деталью сборки (с локальными пока не работает) - закрывает открытую в окне деталь.
5) Запуск внесения изменений Ctrl+Enter - не закрывает за собой своё окошко.
*) в доп.колонку Материал затолкал вместе с собакойдробью Лист$d5,0 ГОСТ 19903-74;Ст3сп ГОСТ 14637-89$@/
1) Не учел, того что деталь может быть уже открыта. Доработаем в следующей версии.
2) Вроде, работало, перепроверю.
3) Можете решить самостоятельно срезом, добавив в строку, где вставляется материал в доп.колонку, после переменной material[:-2]
2) Вы внесение и закрытие сделали почему-то на альт+энтер. По крайней мере в горячих клавишах.
3) Да лично мне особо не надо, я спецификацию делаю авторедактором. Для других пользователей в след. версии подправьте, плиз.
Как сделать, чтобы галочка была по умолчанию выключена?
На меня тут на ночь глядя снизошло озарение.
Чтобы части наименования почти всегда вставали на свои места, надо заполнять эти три части не так, как сейчас.
Когда наименование детали состоит без имени из материала и размеров, то при повторном вызове БЧ в первую строку Имя вписывается материал, а строка с размерами остается пустой.
Давайте так: заполнять будем с конца. Сначала вписываются размеры. Если "старое" имя не содержит собакидроби или содержит одну @/, то впишутся размеры (берем или всю строку, или после собаки соответственно), обновится материал, а имя останется пустое. Считаем, что имя+размеры без материала никто не пишет. Если собак две и более, то текст до первой @/ поместить в имя. Только тут косяк может быть в том, если материал будет содержать собаку, а имя не предусмотрено. Но это редкое явление. Галочку вырубил и всё.
Галочку "мм" надо поумнее. Если в конце строки уже есть мм, то не добавляться. Сейчас она тупо наращивается одна за другой.
Еще по очистке на СКМ. В библиотеке сварных соединений сделано, что скм МЕЖДУ полями в пространстве окна в диалоге очищает все поля. И тут можно так же. Если все три поля переписывать заново надо, то будет удобно.
Ладно, хватит на сегодня.
Библиотека стремительно развивается. Скоро нашей всеобщей проблеме записи деталей БЧ придет трындец :)
Цитата: ТрындецЪ от 31.08.17, 16:23:48
Тестируем 0.3 версию библиотеки оформления деталей БЧ!
До чего мы ещё не доросли:
1) Даблкликом в окнах ввода вызывать текстовые шаблоны;
Если кто-то натолкнет на решение задачи вставки текстовых шаблонов, буду признателен.
У меня такое предложение завести сторонний файл, который будет лежать рядом с макросом. И который будет сам обновляться в окне. В прикрепе пример списка. Я правда не знаю как вызвать событие при нажатии из цикла.
Ну и так же соответственно с сохранением галок, какой то файл.
Цитата: Вират Лакх от 31.08.17, 19:31:04
2) Вы внесение и закрытие сделали почему-то на альт+энтер. По крайней мере в горячих клавишах.
Да, точно я и забыл. Ctrl+Enter просто вносит изменения, Alt+Enter вносит изменения и закрывает программу. Если нужно оформить несколько БЧ деталей, то первый вариант предпочтительней. Ещё можно с одной детали считывать инфу, в другую заносить(без материала).
Кому не нравится, поправите под себя, там функции поменять у событий.
root.bind("<Control-Return>",lambda event:
Start())
root.bind("<Alt-Return>",lambda event:
Start2())
ЦитироватьКак сделать, чтобы галочка была по умолчанию выключена?
Вместо:
check.select()
написать:
check.deselect()
Цитата: pr0100 от 31.08.17, 20:38:24
У меня такое предложение завести сторонний файл, который будет лежать рядом с макросом. И который будет сам обновляться в окне.
Ну и так же соответственно с сохранением галок, какой то файл.
Не хотелось бы изобретать велосипед. Удобнее, на мой взгляд, будет с компасовскими текстовыми шаблоны работать. А для конфига без стороннего файла не обойтись. Ввести функцию, которая собирает состояния галок перед закрытием и устанавливает при открытии. Хотя, как по мне, из-за четырех галок конфиг вводить излишне.
Цитата: ТрындецЪ от 31.08.17, 23:53:08
Да, точно я и забыл. Ctrl+Enter просто вносит изменения, Alt+Enter вносит изменения и закрывает программу. Если нужно оформить несколько БЧ деталей, то первый вариант предпочтительней. Ещё можно с одной детали считывать инфу, в другую заносить(без материала).
Ну это что-то уж слишком на мой взгляд. Чем не устраивало Enter - ввод без закрытия, Ctrl+enter - ввод с закрытием? То же самое, только в одном случае не надо нажимать комбинацию.
Чем хорош этот питон, каждый сам легко поменяет как ему надо. Я у себя так кнопки сделал. И галки на имя и ОС вырубил.
С велосипедом согласен.
UPD:
ЦитироватьА для конфига без стороннего файла не обойтись.
В реестр можно :) В принципе можно и не заниматься сохранением галок. Их, действительно, мало и, как правило, они в каком-то одном состоянии будут большую часть времени. В коде выставил deselect где надо и усё...
Еще предложение. Если постулат о том, что деталь БЧ не прописывается в виде имя+размеры (без материала), принимается общественностью, то можно сделать, чтобы галочка материал за собой выключала (когда её убирают) галку имя.
Вопрос. Галочку имя сделал выключенной по умолчанию. Но при запуске проги поле для ввода имени активно. Если галку включить-выключить, то поле становится как надо - неактивным. Может чего подшаманить, чтобы сразу поле было неактивным?
upd:
А может звездочку * тоже будем на знак умножить заменять? Чтобы на цифровом блоке клавиатуры в одном месте набирать.
upd2:
еще фишку надо, прям надо! чтобы можно было вызвать это окно из спецификации / объектов спецификации сборки! Чтобы можно было прям из спецификации присваивать обозначения и наименования для деталей бч и обычных. А то эти кнопочки компасные по синхронизации дебильно работают, никакой возможности работать с объектами-источниками из спецификации. У меня стоит сортировка сначала по обозначению, потом материалу (материал в доп колонке работает в отличие от настройки по умолчанию), потом по наименованию. Так что мне легко будет работать по присвоению обозначения и наименования прямо в спецификации. А не тыкаться по каждой детали, прописывая это "как положено".
upd3
А если научимся вызывать текстовые шаблоны, то может и материалы тоже сможем, чтобы в макросе можно было менять, а не только считывать. Тогда возможности в спецификации расширятся. И вообще, это будет хорошая альтернатива компасным свойствам модели.
Еще. Если в сборке деталь редактируется на месте, то макрос должен понимать это, что мы уже в детали, и не просить указать её в дереве сборки.
Цитата: Вират Лакх от 01.09.17, 04:55:01
Чем не устраивало Enter - ввод без закрытия, Ctrl+enter - ввод с закрытием? То же самое, только в одном случае не надо нажимать комбинацию.
Видимо, я не правильно понял Ваше предыдущее пожелание:
Цитата: Вират Лакх от 30.08.17, 05:47:58
Лучше зеленую кнопку сделать контрол+энтером. И вообще от простого Энтера отказаться?
Ну так я и отказался от Enter и сделал зелёную кнопку Ctrl + Enter. :)
Цитировать
Вопрос. Галочку имя сделал выключенной по умолчанию. Но при запуске проги поле для ввода имени активно. Если галку включить-выключить, то поле становится как надо - неактивным. Может чего подшаманить, чтобы сразу поле было неактивным?
Nazvanie["state"] = 'disabled' #делает виджет неактивным
Nazvanie["state"] = 'normal' #снова делает его активным
Да, зеленым сделать ctrl+enter. И чтобы эта зеленая кнопка закрывала. И простой enter на тот момент вроде как оказался не у дел. Но с вашей идеей обработать несколько деталей, не закрывая окно, ему будет применение: вносить данные в модель, не закрывая окно. Я сейчас так сделал у себя и вроде удобно. Просто в компасе ctrl+enter всегда завершает команду.
Нашел Nazvanie["state"], а что сделать, чтобы при запуске виджет был неактивным, не догоняю. Галку отключил, а поле ввода - нет.
Цитата: Вират Лакх от 01.09.17, 11:37:29
Нашел Nazvanie["state"], а что сделать, чтобы при запуске виджет был неактивным, не догоняю. Галку отключил, а поле ввода - нет.
См. скрин.
Еще на тему редактирования детали из сборки.
Выделили деталь, запустили макрос. Чтобы записать данные, измеряем деталь, т.е. выделение её снимается. Когда дело доходит до ввода значений в модель, программа говорит "Выделите деталь". Предлагаю ей запоминать, с какой деталью она работает.
Я же раньше не писал про контекстное меню в окне? Просто хотя бы копировать, вставить, вырезать.
А у вас не возникал вопрос ко мне "А харя не треснет?" :)
Наконец-то созрел очередной многострадальный релиз программы для оформления деталей БЧ.
Встречаем версию 0.4!
Особых новшеств нет.
Основной упор был сделан на унификацию работы: с файлом-деталью, с деталью сборки (локальной, внешней, находящейся в режиме редактирования "на месте", выделенной пользователем).
1) Добавлено "запоминание" программой последней детали, с которой она работала.
2) Даблклик ЛКМ в поле ввода вызывает окно выбора компасовских текстовых шаблонов. Вставляемый шаблон заменяет имеющийся текст целиком( т.к. я не нашёл пока рабочего способа считывать текущую позицию курсора)
3) Клик правой кнопкой мыши очищает окно ввода (от нажатия колеса пришлось отказаться, т.к. это событие вызывает баг, вставляющий в окно часть текста из предыдущей вставки).
4) "Умная" опция "мм": если введенный текст заканчивается на мм, то не дублирует "мм" и снимает галку с себя.
Горячие клавиши:
Enter - вставка данных; Ctrl + Enter - вставка данных и выход; Esc - выход; F5 - считать данные.
Не реализовано:
1) Создание объекта спецификации локальной детали(не знаю, как получить у неё интерфейс iDocument3D, через который создаю объекты спецификации iDocument3D.GetSpecification() )
2) Работа со свойствами из спецификации.
3) Контекстное меню (вырезать, копировать, вставить). По причине того, что не смог, как уже было сказано, получать текущую позицию курсора, да и возиться с этим было некогда. В коде есть зачатки этой функции с комментариями, на случай если кто-то захочет развить эту тему самостоятельно.
P.S.: Чем длиннее становится код, тем тоскливее его редактировать :%:
как подключать библиотеку?
Цитата: NikoNLay от 05.09.17, 20:44:08
как подключать библиотеку?
При корректно установленном Python версии 2.х, она запускается двойным кликом по файлу.
Это - макрос, но не библиотека.
1) Надо написать "Выделите деталь и нажмите F5", а лучше после выделения самой сделать F5.
2) Для локальной детали ctrl+enter не закрывает окно.
3) У меня почему-то ЛКМх2 не вызывает шаблоны, а закрывает окно.
4) что-то с "мм" не то. Не надо "мм" выключаться / переключаться, делаться активной / неактивной. Пользователь сам выставит в коде галку по умолчанию. Просто она умная, когда включена. Суть галочки звучит так: если я включена, то буду добавлять мм, если её не хватает; если я выключена, то ничего не делаю. Перемудрили малость.
5) Со средней кнопкой печалька...
6) Вы не смотрели по заполнению частей наименования с конца, которое я описывал ранее?
Вы скиньте куда-нибудь (сюда или в личку) номер телефона или карты, попробую хоть как-то возместить "аморальный" ущерб.
Экспресс-обновление v0.4.1
Цитата: Вират Лакх от 06.09.17, 05:25:08
1) Надо написать "Выделите деталь и нажмите F5", а лучше после выделения самой сделать F5.
Не всегда нужно считывать данные. Например, введу данные, выделю деталь и внесу изменения. Изменю данные, выделю другую деталь и внесу в неё изменения. И к тому же, чтобы вводить проверку на выделение, нужно включать бесконечный цикл с периодическим опросом КОМПАСа (раз в секунду, например) на предмет наличия выделенной делали. Этот вариант мне не нравится.
Цитировать2) Для локальной детали ctrl+enter не закрывает окно.
Поправил.
Цитировать3) У меня почему-то ЛКМх2 не вызывает шаблоны, а закрывает окно.
Проверял на двух машинах - работает.
Цитировать4) Что-то с "мм" не то. Не надо "мм" выключаться / переключаться, делаться активной / неактивной.
Убрал самодеактивацию. "мм" ещё не ставится, если последняя строка пуста.
Цитировать6) Вы не смотрели по заполнению частей наименования с конца, которое я описывал ранее?
Я не вижу в этом необходимости. Если какое-то поле не заполнено, то оно игнорируется
Все пробелы в начале и конце во всех полях удаляются при вставке свойств.
Например, если наименование состоит из метериала и габарита, то при считывании материал не попадёт в название, а габарит попадёт на своё место.
Если наименование состоит только из имени (или габарита), то при считывании, если поле "название" активно, то всё вносится в него, если неактивно, то всё вносится в габарит.
Материал всегда вносится на своё место. При считывании наименования материал "вырезается" из него. Всё что до первой @/ считается названием, всё что после последней @/ считается габаритом. Не помню в какой версии это сделал.
Цитата: ТрындецЪ от 05.09.17, 21:25:59
При корректно установленном Python версии 2.х, она запускается двойным кликом по файлу.
Я полный нуб в программировании. Скачал библиотеку. Скопировал на рабочий стол файл. По двойному клику просто ничего не происходит. Питон 2.6.6 установлен и х32, и х64. Компас х64 15.2.20. Что не так делаю?
Цитата: KiDim от 06.09.17, 09:54:13
Я полный нуб в программировании. Скачал библиотеку. Скопировал на рабочий стол файл. По двойному клику просто ничего не происходит. Питон 2.6.6 установлен и х32, и х64. Компас х64 15.2.20. Что не так делаю?
Должен ещё быть запущен КОМПАС и открыта либо деталь, либо сборка.
Подумываю над тем, чтобы убрать это ограничение и позволять запускаться в любой момент.
Запустил Компас, создал файл детали, запустил библиотеку. Опять ничего. Тоже попробовал для файла сборки. Результат идентичный. Либо версия Компаса не подходящая, либо кривой Питон. Может переустановить его?
На сайте у них уже 3.4.7 лежит дистриб.
Цитата: KiDim от 06.09.17, 10:15:13
Запустил Компас, создал файл детали, запустил библиотеку. Опять ничего. Тоже попробовал для файла сборки. Результат идентичный. Либо версия Компаса не подходящая, либо кривой Питон. Может переустановить его?
На сайте у них уже 3.4.7 лежит дистриб.
Можно и переустановить, но под питоном 3.х не запустится без доработок кода (pr0100 уже писал об этом).
Можно ещё попробовать запустить через библиотеку КОМПАС МАКРО, изменив расширение файлу на a3m для сборки, m3m для детали.
Upd: Вообще, научите кто-нибудь, как код питона в *.rtw перегнать!
1) Точно!
3) У меня окно уходит, а на его место шаблоны не приходят. Макрос так и остается висеть в диспетчере задач. И не только у меня. Но в то же время на другой точиле попробовал - работает. Что бы это могло быть... Что-то с настройками.
Цитировать
6) Если наименование состоит только из имени (или габарита), то при считывании, если поле "название" активно, то всё вносится в него, если неактивно, то всё вносится в габарит.
Я вырубил по умолчанию название: Nazvanie["state"] = 'disabled' и check1.deselect()
Деталь называется просто L = 100 мм. При вызове макроса текст все равно заносится в название, а не в габарит. Если потом нажать обновить, то перескакивает вниз, как вы описали сейчас. Где бубном постучать, чтобы при запуске понимал вырубленность названия?
ЦитироватьВообще, научите кто-нибудь, как код питона в *.rtw перегнать!
Или в DLL. Мне вот нравится, как Дмитрий22 делает.
upd
Попробуйте у себя в шаблонах добавить свой файл tdp (см. картинку). Может это каким-то боком влияет.
Компас v13 sp2 работает в любом окне 3D и в объектах спецификации без ошибок. Питон 2.6.2.2. Спасибо за скриптик, очень не хватало такой.
Переустановил Петон. Теперь Python 2.7.13. Картина таже. Куда еще копать можно? Может еще какие компоненты в системе нужны?
Цитата: Умка от 06.09.17, 11:04:24
Компас v13 sp2 работает в любом окне 3D и в объектах спецификации без ошибок. Питон 2.6.2.2. Спасибо за скриптик, очень не хватало такой.
В объектах спецификации окно запускается, но сами объекты макрос еще не понимает.
Присоединяйтесь к вознаграждению автора. Он уже устает от этой программы.
KiDim, я этот ставил: https://www.python.org/ftp/python/2.6.6/python-2.6.6.amd64.msi (https://www.python.org/download/releases/2.6.6/)
Там на сайте было написано: The last binary release of Python 2.6 was 2.6.6. Может нужна именно версия 2.6? Прошлый удаляли?
Цитата: KiDim от 06.09.17, 11:09:17
Переустановил Петон. Теперь Python 2.7.13. Картина таже. Куда еще копать можно? Может еще какие компоненты в системе нужны?
Скорее всего не в питоне дела, а в библиотеке компаса
Цитата: ТрындецЪ от 06.09.17, 10:35:18
Можно и переустановить, но под питоном 3.х не запустится без доработок кода (pr0100 уже писал об этом).
Здесь уже что-то другое, операции по изменению синтаксиса не проходят. Видимо в коде появились, имеются какие-то функции по различию версий.
И видимо они где-то в "PartAPI5"
Цитата: KiDim от 06.09.17, 11:09:17
Переустановил Петон. Теперь Python 2.7.13. Картина таже. Куда еще копать можно? Может еще какие компоненты в системе нужны?
Через КОМПАС МАКРО тоже не работает?
Попробуйте открыть и запустить через отладчик IDLE (Python GUI), который в комплекте с питоном идёт. И посмотрите какую ошибку он напишет.
Значит сначала опишу ситуевину. Мало ли чего важного упустил.
Стоял Компас 15.2.20 х64. Стоял Питон 2.6.6 х32 и х64 (думаю с дистриба Компаса, т.к. сам не помню чтобы ставил).
1) Компас Макро установлен не был. Поставил на прошлой неделе через обновление Компаса.
2) Сегодня удалил Питон (оба через установку Винды).
3) Скачал дистриб с сайта изготовителя 2.7.13 (написано что самый стабильный и т.д. и т.п.)
4) Поставил оба дистриба х32 и х64 в разные папки.
Запускаю Компас. Создаю файл детали. Создаю новый объект специи. Запускаю библиотеку. Ничего не происходит (визуально).
Запустил Компас Макро. Открываю объекты специи. Жму кнопку Макросы. Там выбираю Добавить. Выбираю библиотеку, которую ранее переименовал для детали m3m. Выбираю и жму Ок. В поле Макрос пусто и кнопка выполнить не активна.
Вот такая вот печалька...
Цитата: ТрындецЪ от 06.09.17, 11:24:38
Попробуйте открыть и запустить через отладчик IDLE (Python GUI), который в комплекте с питоном идёт. И посмотрите какую ошибку он напишет.
Запускаю через Edit with IDLE. На курсоре появляется колесико секунды на 2 и все.
Цитата: ТрындецЪ от 06.09.17, 10:35:18
...
Upd: Вообще, научите кто-нибудь, как код питона в *.rtw перегнать!
Наверно, лучше перейти на, что нибудь из этого списка:
Цитата: KiDim от 06.09.17, 11:40:49
Запускаю через Edit with IDLE. На курсоре появляется колесико секунды на 2 и все.
Попробуйте запустить сначала IDLE из ПУСКа, в ней открыть макрос и запустить на выполнение. Перед этим в диспетчере убейте все висящие процессы называющиеся "pythonw".
Цитата: KiDim от 06.09.17, 11:39:24
Создаю файл детали. Создаю новый объект специи. Запускаю библиотеку. Ничего не происходит (визуально).
Объект спецификации программа сама создаст для детали.
Цитата: ТрындецЪ от 06.09.17, 12:27:41
Попробуйте запустить сначала IDLE из ПУСКа, в ней открыть макрос и запустить на выполнение. Перед этим в диспетчере убейте все висящие процессы называющиеся "pythonw".
Запускаю из Пуск. Колесико на курсоре пару секунд и все. Процессов в памяти с названием "pythonw" не нашел. Стоит корпоративный Каспер. Не может он банить Питон? Обычно, если блокирует, то вываливается окошко от него, а тут просто ничего. Но мало ли...
Цитата: KiDim от 06.09.17, 12:35:38
Запускаю из Пуск. Колесико на курсоре пару секунд и все. Процессов в памяти с названием "pythonw" не нашел. Стоит корпоративный Каспер. Не может он банить Питон? Обычно, если блокирует, то вываливается окошко от него, а тут просто ничего. Но мало ли...
Даже не знаю, что еще предложить. Обычно все мои проблемы с питоном решались его переустановкой.
Помучаю еще админов. Может они еще чего скажут... Спасибо за помощь!
Цитата: Вират Лакх от 06.09.17, 10:40:57
Попробуйте у себя в шаблонах добавить свой файл tdp (см. картинку). Может это каким-то боком влияет.
Т.е. у Вас свой файл? А где вы к нему путь прописали для КОМПАСа? Что-то в *.ini не нахожу.
Есть свой и стандартный. Они оба в окне шаблонов есть. Оттуда же и открывается свой. Путь никакой не прописывается. Поэтому и влиять не должно, но мало ли. Я свой убрал, оставив стандартный, - эффекта ноль.
Судя по коду, шаблоны как-то мутно вызываются.
Цитата: Вират Лакх от 06.09.17, 14:21:06
Судя по коду, шаблоны как-то мутно вызываются.
Вызывается оно так:
ksDynamicArray = kompas_object.ksExecDialPredefinedTextEx (float(str(win)[1:]))
Вызываем шаблоны указывая функции дискриптор (номер) дочернего окна, которое в начале было создано и спрятано от глаз:
win = tk.Toplevel(root)
win.withdraw())
Эту запись
float(str(win)[1:]я вывел опытным путём.
print win выдавало строку вида ".456786"
Я удалил из нее точку и поменял тип на "действительное число"
После этого заработало.
Возможно Ваша система как-то по другому задаёт дискрипторы.
Нужно смотреть в отладчике что выдаст "print win"
Цитата: Вират Лакх от 06.09.17, 10:40:57
Я вырубил по умолчанию название: Nazvanie["state"] = 'disabled' и check1.deselect()
Деталь называется просто L = 100 мм. При вызове макроса текст все равно заносится в название, а не в габарит. Если потом нажать обновить, то перескакивает вниз, как вы описали сейчас. Где бубном постучать, чтобы при запуске понимал вырубленность названия?
Удалите строку 548
in_Nazvanie.set(naimenovanie)и замените в строке 578
in_Gabarit.set("") на
in_Gabarit.set(naimenovanie)Цитата: pr0100 от 06.09.17, 11:23:17
Здесь уже что-то другое, операции по изменению синтаксиса не проходят. Видимо в коде появились, имеются какие-то функции по различию версий.
И видимо они где-то в "PartAPI5"
Я ещё изменил способ вызова модуля Tkinter для 2.х питона с
from Tkinter import * на
import Tkinter as tk, а для третьего питона не поменял.
Попробуй заменить с
from tkinter import * на
import tkinter as tk.
запустил в отладчике при включенном компасе с открытой деталью. не увидел включенный компас?
Экспресс-обновление v0.4.2
1) Теперь запустится и не только в детали или сборке,
2) Добавлена нормальная вставка текстовых шаблонов (вместо выделения или на текущую позицию курсора)
3) Шаблоны вызываются одним нажатием ПКМ, очищение даблкликом ЛКМ.
Цитата: Вират Лакх от 06.09.17, 15:58:48
запустил в отладчике при включенном компасе с открытой деталью. не увидел включенный компас?
Что-то в системе заглючило. Раньше же без проблем запускался. Перезагрузка!
ЦитироватьУдалите строку 548
in_Nazvanie.set(naimenovanie)
и замените в строке 578
in_Gabarit.set("") на in_Gabarit.set(naimenovanie)
А можно в код в нужных местах сделать if else в зависимости от одного check1.select() или deselect. Т.е. тут меняю, а остальное "переделывается само", т.е. идет по условию.
Цитировать3) Шаблоны вызываются одним нажатием ПКМ, очищение даблкликом ЛКМ.
Испокон веков было шаблоны на ЛКМх2. Может поменяем местами, раз СКМ не работает?
ЦитироватьЧто-то в системе заглючило. Раньше же без проблем запускался. Перезагрузка!
После перезагрузки то же самое, что и до нее: pyw запускается, а в отладчике - нет.
ЦитироватьЭту запись float(str(win)[1:]я вывел опытным путём.
А почему к коде версии 0.4.2 без флоата? ksDynamicArray = kompas_object.ksExecDialPredefinedTextEx (str(win)[1:])
Цитата: Вират Лакх от 06.09.17, 17:49:53
А можно в код в нужных местах сделать if else в зависимости от одного check1.select() или deselect. Т.е. тут меняю, а остальное "переделывается само", т.е. идет по условию.
Тут снова *.cfg файл напрашивается. Кроме Вас вряд ли кто будет код править под себя.
ЦитироватьИспокон веков было шаблоны на ЛКМх2. Может поменяем местами, раз СКМ не работает?
Не припомню, где такое есть. Вообще все эти удобства чисто субъективны, кто к чему привык, тому так и удобно.
В любом случае, при острой нетерпимости каждый под себя поправить может.
ЦитироватьПосле перезагрузки то же самое, что и до нее: pyw запускается, а в отладчике - нет.
Черт его знает, что ему не нравится. Могу только посоветовать скачать другую программу для отладки. PyScripter бесплатный, например.
ЦитироватьА почему к коде версии 0.4.2 без флоата? ksDynamicArray = kompas_object.ksExecDialPredefinedTextEx (str(win)[1:])
Потыкал сегодня, оказалось и срез строки принимает.
Из-за меня одного не надо пока cfg.
В той же основной надписи, в таблице на чертеже, в спецификации, еще где-нибудь - везде ЛКМх2 вызов шаблонов.
Отсюда и привычка. Тут будет неудобно, если не поменять.
Задрал этот питон. PyScripter сказал, что ему надо х32. Я поставил. В итоге опять не работают макросы.
В этом PyScripter запускаться не стало: на эту u, которая перед текстом ругался.
upd:
На другом компе попробовал.
Вот что он говорит на запуск шаблонов:
>>>
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__
return self.func(*args)
File "D:\!Компас\Макро\БЧ.pyw", line 582, in <lambda>
Gabarit.bind("<Button-3>", lambda event: Text_shablon(Gabarit))
File "D:\!Компас\Макро\БЧ.pyw", line 450, in Text_shablon
ksDynamicArray = kompas_object.ksExecDialPredefinedTextEx (str(win)[1:])
File "C:\Python26\lib\site-packages\win32com\gen_py\0422828C-F174-495E-AC5D-D31014DBBE87x0x1x0.py", line 352, in ksExecDialPredefinedTextEx
ret = self._oleobj_.InvokeTypes(93, LCID, 1, (9, 0), ((3, 0),),HWindow
ValueError: invalid literal for int() with base 10: '93116360L'
Не вникая в китайскую грамоту выше, выдвину версию, что у вас все эти дела х32-битные, а на х64 - не канает.
Или у вас тоже 64-битность?
При последующих попытках запуска изменяет номер, который в кавычках в конце: Валуев Еррор: инвалид литерал ... '90707912L' или 91621320L и т.д.
Этот print win затолкал в код после win = tk.Toplevel(root) и win.withdraw()
Он написал .91109320L
Потом этот же номер в валуеве пишет после нажатия на правую кнопку.
Ошибка: При редактировании детали на месте в сборке убиваются ВСЕ объекты спецификации.
Пожелание: В колонке Примечание в массе нужны незначащие ноли после запятой.
Цитата: Вират Лакх от 07.09.17, 02:50:23
В той же основной надписи, в таблице на чертеже, в спецификации, еще где-нибудь - везде ЛКМх2 вызов шаблонов.
Отсюда и привычка. Тут будет неудобно, если не поменять.
Не замечал, спасибо! Поменял. Но этот вариант плох тем, что нельзя выделить фрагмент текста и вызвать шаблон который этот фрагмент заменит, т.к. двойной клик ЛКМ снимает выделение. Это не знаю где прописано, видимо, в самой Windows.
ЦитироватьValueError: invalid literal for int() with base 10: '93116360L'
Не вникая в китайскую грамоту выше, выдвину версию, что у вас все эти дела х32-битные, а на х64 - не канает.
Или у вас тоже 64-битность
У меня Win7 х32, проверял ещё на х64 Win8 с х32 Компасом 16.0 тоже работало.
По поводу
.93116360L могу сказать, что у меня в конце буквы не выдавало, возможно в них и проблема.
Попробуйте с разными вариантами:
просто (win);
(str(win)[1:-1])
(int(str(win)[1:-1]))
(float(str(win)[1:-1]))
Думаю, что второй вариант должен сработать.
Цитата: Умка от 07.09.17, 07:46:17
Ошибка: При редактировании детали на месте в сборке убиваются ВСЕ объекты спецификации.
Не замечал и не смог воспроизвести. И локальные пробовал и внешние. Может поподробнее опишите или эту сборку скините, если не выше v16.0.
ЦитироватьПожелание: В колонке Примечание в массе нужны незначащие ноли после запятой.
Строка 104
iSpc.ksSetSpcObjectColumnText(7, 1, 0, str(round(mass*0.001, 2)).replace(".", ",").rstrip("0").rstrip(",") + u" кг") # Примечание
Тут:
round(mass*0.001, 2)2 - это число знаков после запятой.
Чтобы незначащие нули показывались нужно вырезать
.rstrip("0").rstrip(",")В итоге для трех знаков с незначащими нулями получим:
iSpc.ksSetSpcObjectColumnText(7, 1, 0, str(round(mass*0.001, 3)).replace(".", ",") + u" кг") # Примечание
Пардонте-с, ошибка при редактировании детали на месте в сборке не повторилась.
На обычный (win) вместо валуева выругался AttributeError: Toplevel instance has no attribute '__trunc__'
(str(win)[1:-1]) - заработало! Вот замуты такие приходится преодолевать...
С заменой фрагмента текста можно или обломиться, или продублировать на СКМ или ПКМ...
Что-то я так не догнал, что там с очисткой на СКМ? Я переставил на буттон-2 - вроде работает.
Уф-ф... Так, над чем дольше работаем?
Цитата: Вират Лакх от 07.09.17, 12:48:19
Что-то я так не догнал, что там с очисткой на СКМ? Я переставил на буттон-2 - вроде работает.
Я вставлял шаблон в одно поле,переходил в другое поле, нажимал СКМ и у меня самопроизвольно вставлялся текст из предыдущего поля.
С утра включил комп и снова попробовал библу. Через IDLE запустилась и выдала след. текст.
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
============== RESTART: C:\Users\kiselev\Desktop\БЧ_v0.4.2.pyw ==============
Traceback (most recent call last):
File "C:\Users\kiselev\Desktop\БЧ_v0.4.2.pyw", line 5, in <module>
import pythoncom, re, sys
ImportError: No module named pythoncom
>>>
Что скажете?
Цитата: KiDim от 07.09.17, 13:22:06
ImportError: No module named pythoncom
Что скажете?
Может быть не видит модуль из-за того, что две версии питона поставили (х32 и х64). Снесите обе и поставьте ту, на которую давал ссылку Вират Лакх.
По поводу проблемы с вызовом шаблонов:
Унифицировал запись. В следующих версиях будет так:
(re.findall(r'\d+', str(win))[0]) - будет вытаскивать только цифры.
На том компе, где запортачилось, та же песня. Ни перестановка, ни отключение контроля учетных записей, ни чистка реестра от старого питона не помогают. Тот же ImportError: No module named pythoncom
Цитата: Вират Лакх от 07.09.17, 18:18:41
На том компе, где запортачилось, та же песня. Ни перестановка, ни отключение контроля учетных записей, ни чистка реестра от старого питона не помогают. Тот же ImportError: No module named pythoncom
Погуглил. Пишут, что pythoncom - это модуль для работы с Windows API.
Если нет его, можно тут (https://translate.googleusercontent.com/translate_c?depth=1&hl=ru&prev=search&rurl=translate.google.ru&sl=en&sp=nmt4&u=https://sourceforge.net/projects/pywin32/files/pywin32/Build%2520221/&usg=ALkJrhjX4zux5TqMUnkYPjwWhEOKTTS_fw) скачать, насколько я понял.
# Надмись "мм" - в коде м на п поменяйте. Пусть это комментарий, но тем не менее.
Этот pythoncom с компасовским питоном приходит, а чистый с сайта без него. Попробуем по вашей ссылке поставить. Надо, видимо, чтобы еще версии совпадали.
Сейчас в текущей версии СКМ так себя ведет. Выделяем текст и нажимаем СКМ. Вставляется копия. Откуда она берется?? Содержимое буфера обмена совсем другое. Можно в другие поля это выделенное вставлять... Переставил на СКМ очистку. Если текст не выделять и потом в другом поле не нажимать СКМ, то все нормально. А если так сделать, то сотрет и сразу вставит. И будет так делать до тех пор, пока не очищу на СКМ исходник. Можно этот баг использовать как копирование текста одним нажатием из одного поля в другое :)
Предлагаю сделать все же СКМ очистку, а третью кнопку зарезервируем на меню.
По поводу вставки шаблона. Вот как лучше, чтобы он сам сразу замещал весь текст или вставлялся в текущую позицию курсора?
Мне кажется, что лучше сразу замещать весь. Создал шаблон вида 'L = +-' или '+-*+-' и вставляй его поверх того, что там устаревшее/ненужное есть. А сейчас получается надо сначала удалить содержимое самому, а потом шаблон. Может вернем замещение?
Вот как я под себя макрос делаю: без Названия по умолчанию, с ОС в 9-й тип колонки, без создания объекта спецификации по умолчанию, с очисткой на СКМ. См. архив.
На локальной детали, когда галочка создавать ОС выключена, ошибочно пишет, что не удалось создать объект спецификации. Я его и не просил создавать.
Ну и хотелось бы подвести итог на сегодня.
Было бы интересно, чтобы макрос понимал объекты спецификации.
А еще интереснее - это более продвинутый путь ввода габаритов. Как я писал в ТЗ, или это специальные переменные в детали-заготовке, или указание ребер.
Как видится указание ребер. Нажимаем некую новую кнопку. Она работает типа как "Длина ребра". Если указали одно ребро, то макрос автоматом вставляет L = <измеренная длина>. Если указали второе ребро, то убирает L и пишет <измеренная длина>х<измеренная длина>. Может даже с тремя ребрами так сделать. И с диаметрами так же: D = , d =. Может, чтобы не выдумывать свои команды пользоваться компасными, просто считывать у них данные.
А по переменным так. Если они отличны от нуля, то вписать при запуске макроса их в габарит. С условиями, конечно. Например, есть переменные bchl, bcha, bchb, bchs, bchd1, bchd2. Если все по нулям, кроме bchd1, то вписать D = <bchd1>. Если бардак в переменных или все по нулям, то как сейчас есть: считать старые габариты.
Или какие ваши идеи?
Цитата: Вират Лакх от 08.09.17, 07:44:22
... Можно этот баг использовать как копирование текста одним нажатием из одного поля в другое :)
Предлагаю сделать все же СКМ очистку, а третью кнопку зарезервируем на меню.
У меня СКМ вставляет не весь текст, а часть его. Поэтому, от нее хочу отказаться вообще. На ПКМ у нас есть 1 клик, 2 клика и даже 3 клика, есть где разгуляться.
Цитировать
По поводу вставки шаблона. Вот как лучше, чтобы он сам сразу замещал весь текст или вставлялся в текущую позицию курсора?
Мне кажется, что лучше сразу замещать весь. Создал шаблон вида 'L = +-' или '+-*+-' и вставляй его поверх того, что там устаревшее/ненужное есть. А сейчас получается надо сначала удалить содержимое самому, а потом шаблон. Может вернем замещение?
Не нравится мне лично вызов шаблонов даблкликом ЛКМ, т.к. теряем возможность выделения, которую лучше иметь. Поэтому полное замещение считаю не нужным. Полное удаление в любом случае забиндим куда-то. +-1 нажатие погоды не сделает.
Upd: Сейчас ещё один вариант на ум пришел: по даблклику ЛКМ заменяем целиком а в контекстном меню (ПКМ) добавим пункт
Вставить текст и можно будет выделять и через меню заменять часть текста.
ЦитироватьНа локальной детали, когда галочка создавать ОС выключена, ошибочно пишет, что не удалось создать объект спецификации. Я его и не просил создавать.
Косяк исправлю к следующей версии.
ЦитироватьБыло бы интересно, чтобы макрос понимал объекты спецификации.
Имеются в виду объекты спецификации сборки или отдельного документа спецификации, где они связаны с деталями?
ЦитироватьА еще интереснее - это более продвинутый путь ввода габаритов. Как я писал в ТЗ, или это специальные переменные в детали-заготовке, или указание ребер.
....
Или какие ваши идеи?
Я свой вариант раньше выдвигал, чтобы автоопределение типа детали было.
Например, при нажатии ПКМ в поле ввода габариты выпадет менюшка, где помимо
Вырезать,
Копировать,
Вставить будет пункт
Автогабарит. Нажимаем на него и программа пытается определить тип детали (вот над алгоритмом надо подумать).
Нужно сначала определиться с типами БЧ деталей.
1) Прямоугольная пластина (3 измерения: толщина в материале должна быть заложена, получаем длину и ширину)
2) Круглая пластина(2 измерения: толщина в материале должна быть заложена, получаем диаметр)
3) Сортовой прокат [трубы, уголки, швеллеры и т.п.](все параметры в материале, получаем только длину)
Вы ещё писали о двух диаметрах, это деталь типа шайбы что ли? Я не сталкивался с такими.
А вариант с чтением переменных неуниверсален. Сомневаюсь, что кто-то будет заморачиваться с созданием спец.переменных для примитивных деталей.
Ещё как вариант добавить пункт
Снять размеры, это когда, как Вы писали, предлагается пользователю ткнуть в ребро или грань и получить их размеры. Этот вариант, наверное, проще в реализации, поэтому начать с него можно.
Но меня больше тревожит сейчас невозможность создавать объекты спецификации локальных деталей.
ЦитироватьУ меня СКМ вставляет не весь текст, а часть его.
Да, ту часть которую выделили.
ЦитироватьСейчас ещё один вариант на ум пришел: по даблклику ЛКМ заменяем целиком, а в контекстном меню (ПКМ) добавим пункт Вставить текст и можно будет выделять и через меню заменять часть текста.
Пусть так.
ЦитироватьИмеются в виду объекты спецификации сборки или отдельного документа спецификации, где они связаны с деталями?
Пока объекты спецификации сборки. Это всё происходит в рамках одного документа, поэтому проще должно быть. Посмотрим от этого пользу.
ЦитироватьНапример, при нажатии ПКМ в поле ввода габариты выпадет менюшка, где помимо Вырезать, Копировать, Вставить будет пункт Автогабарит.
Получается, назревает меню ПКМ, в котором будут операции с буфером, вставка шаблонов без очистки, автогабарит, снять размеры вручную (как у трубы указать ребро?). Если всплывающее меню хз как делать, можно и применить все ПКМ: одинарное, двойное и тройное.
ЦитироватьВы ещё писали о двух диаметрах, это деталь типа шайбы что ли? Я не сталкивался с такими.
Это из области беспредела, когда деталь по-хорошему чертить надо. Это круглая пластина с отверстием в центре такого-то диаметра.
ЦитироватьА вариант с чтением переменных неуниверсален. Сомневаюсь, что кто-то будет заморачиваться с созданием спец.переменных для примитивных деталей.
Согласен. Так себе затея, конечно. Не рассматриваем.
ЦитироватьНо меня больше тревожит сейчас невозможность создавать объекты спецификации локальных деталей.
А меня и других пользователей Авторедактора не тревожит :)
Таки про не работу Питона. Пошерстил форум. Нашел полезную инфу:
Цитата:
Другое дело отладка макросов - т.е запуск макросов не из под библиотеки КОМПАС-Макро.
Для этого в каталоге расширения питона PyWin32 - \Lib\site-packages\pythonwin\ должны лежать модули
Kompas6API5.py
Kompas10API5.py
Kompas10API7.py
ksConstants.py
ksConstants3D.py
LDefin2D.py
LDefin3D.py
MiscellaneousHelpers.py
piksupport.py
+ в каталоге питона \Lib\site-packages\pythonwin\pywin модули pik.cfc и pik.cfg.
Переустановил Питон и модуль PyWin32. Перечисленных выше файлов там не оказалось. Нашел их на другом компе (почему их нет на моем - не знаю). Переписал файлы и перезагрузил комп (это обязательно). Все работает! Присоединяюсь к освоению модуля!
Цитата: KiDim от 08.09.17, 13:31:22
Kompas6API5.py
Kompas10API5.py
Kompas10API7.py
ksConstants.py
ksConstants3D.py
LDefin2D.py
LDefin3D.py
MiscellaneousHelpers.py
piksupport.py
Эти модули устанавливает вместе с собой библиотека КОМПАС МАКРО, это от АСКОНа.
До 17 версии КОМПАСа макросы при записи ссылались на эти модули и работали через них.
В 17 версии макросы сделали более универсальными.
Цитата: Умка от 07.09.17, 07:46:17
Ошибка: При редактировании детали на месте в сборке убиваются ВСЕ объекты спецификации.
...
Пардонте-с, ошибка при редактировании детали на месте в сборке не повторилась.
Вы просто перепутали немного. Все объекты спецификации убиваются при редактировании БЧ из сборки, не заходя в редактирование на месте, т.к. макрос вычищает ОС там, где находится. В этом случае он находится в сборке. Видно, как макрос заходит в редактирование на месте и сразу выходит. Так может пусть не выходит сразу, а после ctrl+enter или Esc ?
Еще:
После применения макроса в редактировании на месте слетают галочки Наименование и Обозначение в свойствах измененного компонента. Ух, как я это не люблю! Зачем их Аскон вообще придумал?! Как они задолбали!
Цитата: Вират Лакх от 09.09.17, 16:19:59
После применения макроса в редактировании на месте слетают галочки Наименование и Обозначение в свойствах измененного компонента. Ух, как я это не люблю! Зачем их Аскон вообще придумал?! Как они задолбали!
Макрос меняет свойства детали в сборке и в источнике, поэтому галка погоды не делает. Я не нашел, как программно ее ставить.
Делает она погоду. Потом, если надо будет поменять обозначение или наименование, бегай за этими галочками. Особенно, когда одна деталь входит несколько раз или в разных сборках, и обозначение или наименование меняются в самой детали. Так что пока приемлемый способ редактировать только открытую в окне деталь.
UPD
Так не надо её менять в сборке! Только в источнике. Это необходимо и достаточно. И не испортится галочка, и не надо искать, как её возвращать. Можно попробовать включить в макрос после редактирования источника перестройку модели, чтобы пользователю самому не нажимать F5.
Представляю очередную версию библиотеки оформления деталей БЧ!
Что нового:
Появилось контекстное меню у полей ввода(вызывается кликом ПКМ).
Через контекстное меню можно снять измерения с детали:
принимает прямое ребро, окружность, четырехугольную грань, цилиндрическую грань.
Изменения:
В свойства компонентов сборки больше не вносятся изменения, только в источник.
Текстовый шаблон, вставленный по даблклику ЛКМ, заменяет имеющийся текст целиком.
Изменение горячих клавиш:
СКМ - очистка.
1) Окно появляется без фокуса на себе.
2) Надо бы ограничить возможности макроса в отношении стандартных изделий.
3) если мы, вызвав на лкмх2 шаблоны, ничего не вставили и вышли из шаблонов, то макрос все равно стирает содержимое поля.
4) Самое главное - не исправлено "Все объекты спецификации убиваются при редактировании БЧ из сборки, не заходя в редактирование на месте"
5) Если стоит галочка создавать объект спецификации, то при редактировании детали из сборки и редактировании на месте дублируется её объект спецификации.
6) Чтобы добраться до Измерить, нужно два раза нажать: ПКМ и выбор его в меню. Надо сократить одно нажатие, сделав кнопку рядом (перед) полем габарит.
7) Точность (кол-во знаков после запятой) ввода цифр от команды измерить, я так понимаю, регулируется в коде макроса.
8) Я бы пробелы не ставил до и после знака умножить.
9) Т.к. команда измерить вставляет готовый текст вида 55х66, то она должна перед вставкой очистить строку от старого. Или другой подход? Просто цифру/ы вставлять как сейчас сделано для длины, а остальное юзер допишет или повставляет столько измерений, сколько хочет? Я бы для длины сделал сразу запись L = , стерев перед этим содержимое строки. Если полностью стирать, то не одно выделение надо допустить... А может лучше для ПКМ оставить такое единичное выделение без очистки аля вставки шаблона без очистки, а на будущую кнопку (см. п.6) сделать вставку готовых текстов вида L = ... с очисткой. Над работой чудо-кнопки придется хорошенько подумать.
10) если я вместо грани выделил, например, эскиз в дереве построения, то он почему-то говорит, что "выделите только один объект".
11) В режиме выбора для команды Измерить нельзя отказаться от этого на Esc. Обязательно вынь да подай "грань или ребро"
12) Я бы написал "поверхность или ребро". "Цилиндрическая грань" как-то в голове не укладывается.
13) "Грань не является четырехугольником" лучше заменить на "прямоугольником".
Пока хватит. Хорошего по-маленьку :)
Библиотека оформления деталей БЧ v0.6
Учтены по возможности почти все пожелания Вират Лакх'а из предыдущего сообщения, кроме:
Цитировать12) Я бы написал "поверхность или ребро". "Цилиндрическая грань" как-то в голове не укладывается.
При вызове КОМПАС'овской команды "Информация об объекте и указании цилиндрической грани в информационном окне выводится сообщение"Грань тип: цилиндрическая". Ничего ужасного в этой записи не вижу.
Цитировать13) "Грань не является четырехугольником" лучше заменить на "прямоугольником".
Не могу заменить, т.к. в программе не заложена проверка перпендикулярности сторон, и она не отличает прямоугольник от параллелограмма, квадрат от ромба.
Отдельная кнопка "Измерить" заменяет в окне "Габарит" имеющийся текст целиком.
Отказ от измерений -> Esc (срабатывает не чётко, может потребоваться неоднократное нажатие)
1) Если в сборке запустить макрос и потом указать деталь, то уже не хочет так работать. Говорит "выделите деталь", а дальше ничего.
2) Ох уж эта галочка создания объекта спецификации... Без неё всё хорошо. С ней (см.рис.):
а) Если стоит галочка создавать объект спецификации, то при редактировании детали из сборки и/или редактировании на месте дублируется её объект спецификации - не исправлено. У меня, чтобы это проявилось, я сначала удаляю объекты спецификации и делаю редактирование, как говорится, с чистого листа. Тут, возможно, опять из-за разницы стилей СП - у меня пользовательская, а не которая по умолчанию.
б) у меня стоит сортировка деталей в СП в том числе и по наименованию. После создания объекта спецификации макросом сортировка нарушается: если деталь стояла последней, то потом уходит наверх.
в) изменяется номер позиции. Т.е. у нас на лицо удаление старого объекта спецификации и создание нового.
г) это удаление несет за собой множество проблем. Например, еще удаляется привязанный к основному объекту спецификации вспомогательный ОС. Или, вернее, несоздание его с новым объектом.
Короче, нельзя ли обойтись именно редактированием существующего объекта, а не удалением-созданием?
3) Измерить ни через правую кнопку, ни на новую кнопку не работает. Говорит "Теперь укажите грань или ребро", при этом окно исчезает и сразу появляется. Не может ли это опять связано с битностью? В IDLE (Python GUI) ничего не говорит.
12) Компас - не истина в высшей инстанции. Согласно интернету, грань - это "Плоскость, образующая часть ломаной поверхности тела, сторона геометрической фигуры." или "плоская поверхность предмета, составляющая угол с другой такой же поверхностью" и т.д. Если не хотите писать " "поверхность или ребро", то можно "грань, цилиндрическую поверхность или ребро". Ужасного, действительно, нет ничего, просто неграмотно.
Цитата: Вират Лакх от 19.09.17, 05:09:11
1) Если в сборке запустить макрос и потом указать деталь, то уже не хочет так работать. Говорит "выделите деталь", а дальше ничего.
У меня нормально работает.
Цитировать2) Ох уж эта галочка создания объекта спецификации... Без неё всё хорошо. С ней (см.рис.):
...
Короче, нельзя ли обойтись именно редактированием существующего объекта, а не удалением-созданием?
Попробую через редактирование организовать.
Цитировать3) Измерить ни через правую кнопку, ни на новую кнопку не работает. Говорит "Теперь укажите грань или ребро", при этом окно исчезает и сразу появляется. Не может ли это опять связано с битностью? В IDLE (Python GUI) ничего не говорит.
Все признаки того, что программа считает клавишу ESC нажатой (ctypes.windll.user32.GetAsyncKeyState(0x1b) == True). С чем это связано, не знаю. Видимо, другой способ отмены искать надо. Возможно, отдельное окно с кнопкой "Отмена".
ЦитироватьУ меня нормально работает.
Еще у кого как работает?
ЦитироватьВсе признаки того, что программа считает клавишу ESC нажатой (ctypes.windll.user32.GetAsyncKeyState(0x1b) == True). С чем это связано, не знаю. Видимо, другой способ отмены искать надо. Возможно, отдельное окно с кнопкой "Отмена".
С кнопкой Esc печалька... А если не отдельное окно, а в том же самом окне? Кнопку с линейкой заменять на Стоп.
Только сейчас заметил, что кнопки в коде одинаково назывались. Может от этого проблема.
Поправил и текст сообщений заодно.
Тексты поменялись, но измерения не заработали.
Компас V13 измерения не работают
Давайте тогда отменим проверку нажатия ESC и оставим как было, пока не найдётся рабочий метод прерывания.
Во вложении.
Офигенно! Аскон, наверное, никогда бы нам так не сделал.
3) Надо будет все-таки порешать с выходом из измерения. Может правда миниокном? И наглядно видно, что макрос работает, и кнопка стоп будет.
4) Мысли вслух по "мм". Мы мм вынесли в отдельную галочку. Тогда может при считывании габарита из свойства детали, если будет в конце мм, то мм не писать в поле габарита, а включить галку мм (если она была выключена). Я имею ввиду, что мм в строке габарита не должна маячить, т.к. её обрабатывает галочка. Непервостепенно, от нечего делать можно этим заняться.
5) Сделайте, пожалуйста, одну переменную округления измеренных габаритов. Чтобы пользователь не шарил по всему коду, а в одном месте поменял и всё. Это по п.7 ответа 88.
6) Через ПКМ вставляет текст вида L=69 или Ф30. Я предлагаю, чтобы ПКМ в отношении ребер вставляла только число, а поверхности вставлять так же. Это типа для самостоятельного формирования поля габарит. Это еще одна разница между кнопкой и ПКМ.
7) В компасах версии < 17 иконки балунных сообщений различаются на информационные синие и предупреждающие желтые. Надо бы расставить их по макросу в зависимости от характера сообщения.
8) Знак равно предлагаю по умолчанию разделять пробелами: не L=69, а L = 69
p.s. Кнопка с линейкой - это так называемая текстовая кнопка? Как их делают?
Цитата: Вират Лакх от 19.09.17, 12:22:53
4) Мысли вслух по "мм". Мы мм вынесли в отдельную галочку. Тогда может при считывании габарита из свойства детали, если будет в конце мм, то мм не писать в поле габарита, а включить галку мм (если она была выключена). Я имею ввиду, что мм в строке габарита не должна маячить, т.к. её обрабатывает галочка. Непервостепенно, от нечего делать можно этим заняться.
Я изначально так и делал, но Вы же сами забраковали. Галка включалась/отключалась в зависимости от наличия/отсутствия "мм" в конце.
Если Вы хотите, чтобы галка
только включалась, то начнется путаница:
Например, галка включена, и я считываю данные у которых нет "мм" в конце. Если галка не отключается сама, то я не пойму было ли "мм" в данных или нет. И если "мм" мне нужно, то мне придётся вносить изменения, чтобы точно знать что "мм" попадёт в свойства. Короче, вернул автовключение/отключение "мм".
Цитировать5) Сделайте, пожалуйста, одну переменную округления измеренных габаритов. Чтобы пользователь не шарил по всему коду, а в одном месте поменял и всё. Это по п.7 ответа 88.
Сделал. Ввёл две константы в начале кода
Цитировать6) Через ПКМ вставляет текст вида L=69 или Ф30. Я предлагаю, чтобы ПКМ в отношении ребер вставляла только число, а поверхности вставлять так же. Это типа для самостоятельного формирования поля габарит. Это еще одна разница между кнопкой и ПКМ.
8) Знак равно предлагаю по умолчанию разделять пробелами: не L=69, а L = 69
Реализовано.
Цитироватьp.s. Кнопка с линейкой - это так называемая текстовая кнопка? Как их делают?
Почему это кнопка текстовая? Просто кнопка. Линейка - это gif картинка преобразованная в Base64 и установленная на кнопку. Вот сайт для онлайн-преобразования (https://www.base64-image.de/)
а) "запятой для полученных измерений детали вставляемых в окно ввода "Габарит"" - лишний пробел и запятую после слова деталей.
б) таким же образом еще хотелось бы три настройки сделать (значения переменной типа булеан: true/false):
I) создавать объект спецификации,
II) Использование названия детали по умолчанию,
III) добавлять мм в габарит по умолчанию.
Тогда мне или кому-то еще не нужно будет переписывать программу под себя.
в) И сейчас бракую такое поведение галочки "мм". Знаете, что мне хочется от этих "мм"? Забыть о них! Есть у пользователя два подхода: или не писать везде мм, или писать везде. Вот этот выбор пользователь и отразит в настройке III. Давайте будем по умолчанию писать мм. Как вы сейчас вернули - это постоянное включение галки для новых деталей БЧ тем, кому нужно мм везде. Как было: не нужно постоянно включать галочку для новых деталей. Последняя моя мысль была - оставить как есть работу галки, но скрыть мм, чтобы они не маячили. В итоге формулировка такая: галка носит типа информационный характер с возможностью изменения. Выставляется по умолчанию в настройках / константах макроса. Она у меня, например, будет всегда включена. В поле габарит "мм" никогда не пишутся, т.е. удаляются, если есть. А потом включенная галка добавляет обратно. Выключенная - не добавляет. По-моему зашибись.
г) Предлагаю перекомпоновку окна как на рисунке ниже. "мм" будут непосредственно стоять после габарита, типа дописываются к нему. Кнопки все в одном месте, т.е. блок управления. Я бы даже разделил кнопку Вставить [enter] на две кнопки: "вставить" и "вставить и закрыть". Получаются три квадратные кнопки. Я бы, наверное, хотел пользоваться обеими кнопками "вставить".
UPD.
Из тех трех кнопок, которые будут рядом стоять, первая должна идти "Обновить", потом "вставить", потом "вставить и закрыть".
UPD2
А-а-а, я затупил! "1) Если в сборке запустить макрос и потом указать деталь, то уже не хочет так работать. Говорит "выделите деталь", а дальше ничего." - работает она. Просто я опять забыл про этот F5. Вот её надо сделать с подписью там и так, как я показал, может она лучше будет восприниматься.
UPD3
Давайте выберем один какой-нибудь шрифт. А то Наименование и Обозначение - гостовский, остальные тексты - обычный...
Что значит, когда вот так пишет? На том компе, где запортачилось раньше, теперь не вставляет на Enter или Ctrl+enter.
ЦитироватьTraceback (most recent call last):
File "C:\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__
return self.func(*args)
File "D:\bch.pyw", line 128, in Start
Past_prop_detal() # Вставляем свойства
File "D:\bch.pyw", line 71, in Past_prop_detal
iPart7.Marking = oboznachenie
File "C:\Python26\lib\site-packages\win32com\client\__init__.py", line 471, in __setattr__
self._oleobj_.Invoke(*(args + (value,) + defArgs))
AttributeError: 'module' object has no attribute 'VARIANT'
Еще по команде Измерить. Когда измеряем цилиндрическую поверхность, то не надо её прописывать как ф30х1000. Это, конечно, интересно, но диаметр трубы или круга будет записан в материале, и "ф30х" придется вручную стирать и писать "L = ".
Или на выбор пользователя. В блоке настроек/констант выбор варианта записи цилиндрической поверхности.
UPD
Усё, переставил наконец-то питон до полностью рабочего состояния. Вычистил папку с реестром на всякий случай. В дистрибутиве компаса есть эти питоны в \Base\Support. Вот их поставил и файлы *.py и *.pyc с другого компа \Lib\site-packages\pythonwin. Есть подозрение, что *.pyc не нужны, они то ли сами появляются при установке pywin. Что-то он там компилирует, когда ставится.
Давайте напишем в сообщении "Выделите деталь" типа того "Выделите деталь и при необходимости обновите окно" или "... нажмите F5". Непосвященному может быть непонятен этот тонкий момент в условиях, когда макрос говорит, что надо просто выделить деталь.
Ну и про необходимость восклицательных знаков подумайте. В синих информационных сообщениях лишние эмоции ни к чему. Я бы нигде их не писал.
Объекты спецификации добавляет, не удаляя старые. Измерения не выполняются, окно закрывается и питон висит в процессе.
Умка, я бы галкой создавать объекты спецификации пока не пользовался.
По измерениям указываете ребро, грань или цилиндр? - и ничего?
Измерения не выполняются. Стабильная версия 0.4.4
Запустите макрос через IDLE (Python GUI) или через змейку. См. картинку. И сделайте измерения. Будет ли ругаться в окошке или нет.
Кто такая стабильная 0.4.4? Используйте всегда последнюю версию макроса. Нет сейчас никаких стабильных версий.
Я с питоном не дружу. Мне это долго нужно объяснять... БЧ V 0.4.4 действительно удачная версия. Спасибо разработчику. Замеры выполняю компасом. Часто приходится выполнять замеры длины прутков и труб.
Я тоже не дружу. Но запустить окно IDLE (Python GUI), там нажать ctrl+O, открыть БЧ.pyw и нажать F5 (при включенном компасе с активной деталью или сборкой) под силу каждому.
Текущая версия умеет измерять цилиндры.
Кстати, Трындец, если макрос запустить без компаса, то выдает сообщение Запустите компас и повторите попытку.
Заголовок к этому окну-сообщению сделаем?
У меня только одна версия КОМПАСа в наличии и комп одной конфигурации. Я не имею возможности тестировать работоспособность на другом КОМПАСе и с другим железом/системой. На моём ПК всё работает (КОМПАС 16.0 x32, Win7 x32).
И сообщения типа:
Цитата: Умка от 20.09.17, 06:14:50
Объекты спецификации добавляет, не удаляя старые. Измерения не выполняются, окно закрывается и питон висит в процессе.
мне не дают никакой полезной информации. Только запуск через отладчик и его сообщение об ошибке может что-то прояснить, да и то не всегда.
А вообще макрос очень сырой и вы все его используете, как говорится, на свой страх и риск :)
версия КОМПАС V13 + Windows XP отсюда видимо ошибки.
Цитата: Умка от 20.09.17, 08:39:15
версия КОМПАС V13 + Windows XP отсюда видимо ошибки.
На будущее указывайте разрядность винды и Компаса. Разрабам это иногда очень важно!
Представляю очередную версию программы оформления деталей БЧ.
1) Реализовано прерывание измерений. Окно программы теперь не сворачивается. На месте кнопки с линейкой появляется кнопка с иконкой "Stop", так же, если окно активно, прервать команду можно, нажав <Esc>. В связи с этим пришлось заменить горячую клавишу выхода из программы на двойное нажатие <Esc>.
2) В блок констант добавлены константы, активирующие/деактивирующие при запуске "Создание объекта спецификации", поле ввода "Названия" и "Материал".
3) Надпись "мм" из чекбокса превратилась в текстовую метку с сохранением своего функционала (активация/деактивация производится кликом мыши).
4) Изменён графический интерфейс, шрифты, всплывающие сообщения разделены на 2 типа. Всё в соответствии с пожеланиями Вират Лакх'а.
Цитата: ТрындецЪ от 21.09.17, 12:09:20
Представляю очередную версию программы оформления деталей БЧ.
Всё в соответствии с пожеланиями Вират Лакх'а.
Рыжий любого уболтает :)
За программу - спасибо.
Ха-ха, "рыжий" )
Я не убалтываю, а руковожу разработкой )
Обалденная версия. Мечты сбываются!
1) Как насчет проверки запущенной копии макроса? Это возможно? Замечал неоднократно у себя, что второй открыт оказывался.
2) Без особого восторга встречаю двойное нажатие на Esc. Думается, что выход из программы - событие гораздо более частое, чем прерывание выбора. "Измерить" же надо прервать только в случае, когда нечего предложить из того, что понимает макрос. Выключить команду теперь можно стопом, крестиком по окошку программы или выделить хоть что-нибудь, что понимает программа. Я бы не портил одинарный esc для выхода из программы, имея столько вариантов.
Кстати, так гораздо нагляднее, когда окно не уходит для измерения.
3) При измерении цилиндра линейкой (кнопкой) перед числом не пишет L =
4) Еще одно сомнительное изменение - нажимать на сами "мм", а не на галку рядом. Это как в библиотеке МиС кнопка для редактирования - это текст внизу в углу. Кто не знает про это, никогда не догадается.
Все-таки предлагаю сделать как на моей картинке.
5) Сформулировал окончательно работу "мм". Я так понимаю вам моё видение не очень нравится.
Итак, в настройках делаем переменную логического типа, которая, естественно, принимает значения true/false. Настройка называется аля "Автоматическое добавление мм". Если true, значит галка мм всегда включена после F5 и добавляет мм, если их нет. Если false, то поведение по вашей версии: не добавляет мм, если их нет и галочка включается, если были найдены мм в конце наименования в "области" габарита.
2') Еще вариант для выключения команды измерить. Какая самая популярная кнопка наряду с Esc? Конечно Enter. Если нужна именно клавиша для прерывания, то будет нечто типа пустой ввод. См. UPD ниже.
6) По измерениям:
а) Можно ли сделать выбор круглой грани, а не только ребра, чтобы получить диаметр?
б) Предлагаю настройку записи диаметра. В соответствии с ТЗ диаметр должен записываться в виде D =
Мне значок диаметра что-то не очень. Как-то привык считать, что этот значок привилегия размеров на чертеже. Там еще есть другие значки типа квадрата. Мы же не пишем в спецификации квадратный лист "квадрат50", а пишем 50х50. Тут текстовой документ, во-первых. Во-вторых, D = будет аналогично L =.
в) По измерениям вроде все варианты разобрали, кроме моей экзотики вида D= d= для шайбы с отверстием?
Был бы полный фарш, если можно было указать при измерении поверхность этой шайбы и получить D= d=
7) Дробь материала возможно оформлять покомпактнее? А то "числитель" и "знаменатель" как-то далеко от черты.
UPD
- Попробовал Enter для остановки Измерить. Получается, нельзя в двух местах (процедурах) использовать одну клавишу. Тогда можно сделать but4.bind("<Key>", lambda event: Stop()) и нехай. На любую кнопку отключать можно измерялку (кроме занятых). Только это как-то не по-людски. Будет каждый раз вызываться процедура Стоп.
<Pause> - работает на Pause/Break. Может её? Со времен MS-DOS забыли про break.
Плюс к этому еще работает Пробел = нажатие на кнопку Стоп. Но это всё только при активном окне макроса.
- Кстати!!! А на вызов линейки-то у нас нет горячей клавиши?! Усиленно предлагаю левый Ctrl Alt. Я написал "root.bind("<Alt_L>",lambda event: Izmerit(event))", но там мутить дальше надо с процедурой.
- А еще с появлением горячей клавиши для линейки, кнопку лучше перерисовать, добавив в нее Alt, аналогично трем кнопкам слева от нее. Место там есть. Может даже той же высоты её сделать.
- А ещё мне не нравятся квадратные скобки ни в файловых менеджерах, ни тут. Убал в обоих местах.
- Допустим, я для замера свернул окно макроса в панель задач. Можно ли организовать так, чтобы после получения макросом замера, окно восстановилось?
Экспресс-обновление v0.7.1
Что нового:
Перед запуском ищет ранее открытые свои копии и, если находит, разворачивает окно.
Научились измерять круглую грань и круглую грань с круглым отверстием (шайбу).
Если окно было свёрнуто для измерения, то снова разворачивается со вставленными значениями.
Добавил константу для подписи "мм" (чекбокс не верну, даже не просите! Могу я, хоть что-то от себя оставить!?)
Горячие клавиши:
Левый Alt - вызов измерений,
Пробел - отмена измерений.
Esc - вернулся на закрытие программы.
Линейку менять не буду, мне нравится и так. Лишняя суета с заменой.
В остальном, вроде бы, все пожелания учтены.
Лучше упор делать на функциональность программы, а не на красочность окна.
Upd: К вопросу о "дроби" в материале.
По сути там не дробь, а три строки:
mat2['text'] = material2 + "\n" + "-"*max([len(material2), len(material3)])
mat3['text'] = material3
Черта получается из набора символов "-". Менять это на что-то другое, так же, особого желания нет. Снова всё окно переворошить придётся.
1) Свернутое (на левую кнопку и трех в верхнем правом углу) окно макроса пропускает и все равно открывает дубль.
2) После выбора геометрии для команды Измерить стало "окно" макроса, которое в панели задач, мигать. Мол, на меня переключись! Причем не всегда. Но особенно проявляется на шайбах. Не нравится мне так, раздражает. Это наверно из-за разворачивания со вставленными параметрами. Ему надо еще фокус отдать, да? А то я не могу сделать замер и сразу ctrl+enter.
3) Запятую перед " d = " для шайбы.
4) На кнопке Ctrl + Enter предлагаю писать без пробелов до и после +. Эстетика тоже важна :)
5) Пробел - отмена измерений - и так работала с другой клавишей. Может поставим все-таки <Pause> или <Up> (см. п.6)? С пробелом как сейчас при записи габаритов вручную эта команда стоп будет выполняться же. Пусть это не видно будет, но как-то это нелогично.
6) Тоже самое с альтом я поторопился. Решил язык ввода поменять для записи габарита, а линейка запустилась. Сюда предлагаю Down. Поставил себе вверх и вниз. Попробую, на сколько это удобно будет.
Еще думаю отрегулировать появление окна чтобы не в центре, а где-нибудь в углу экрана... Потом отпишусь. Видел, где это в коде написано.
UPD
Думаю, может командам Измерить все же сворачивать окно в панель задач? В прошлый раз-то оно просто исчезало, а тут можно будет развернуть самому, если надо. Тут еще логично получается, что кнопка Down, которая вызывает Измерить, уносит окно вниз.
Или стрелке Up отдать сворачивание окна в панель задач. Получится быстрая комбинация вниз-вверх. Кому не надо сворачивать, вверх не нажимать.
Давайте первый вариант все-таки попробуем?
Потом еще одну мысль напишу.
Что смог, поправил в v0.7.2.
Возможно, не находит свои дубли из-за разрядности системы. Там снова дескриптор окна фигурирует. Внёс изменения по аналогии с шаблонами, может, заработает. На моём ПК нормально вычисляет копии.
Решил попутно проблему с дублированием объектов спецификаций документа-детали (не работало удаление старых объектов). Пока, до редактирования объектов, не дошёл.
Горячие клавиши:
Стрелка вниз - "Измерить" (сворачивается окно).
Стрелка вверх - "Стоп".
После разворачивания так и не смог установить фокус на окно.
1) Не заработала. Все равно дубль открывает. Как этот дескриптор посмотреть в отладчиках?
2) Отсутствие фокуса после измерения всю малину портит... А если не сворачивать для измерения, то тоже не ставится фокус?
3) Во всплывающем меню вставку шаблона лучше так и назвать "Вставить шаблон", а не текст.
4) Небольшая фишка еще. У меня материал по умолчанию удален, т.е. пустая строка. Если пустой материал, то умная галочка должна отключиться или, оставаясь включенной, не прописывать @/.
5) А вот та самая еще одна мысль. Еще один путь для замеров. Сейчас мы запускаем линейку, а потом указываем. Но возможен путь такой: я выделяю грань, запускаю макрос и линейку. Линейка понимает, что что-то выделено и вставляет, если выделено правильное.
6) Что вы думаете насчет автозапуска линейки и/или автоctrl+enter после линейки? Второе особенно может быть интересно в условиях неработающего фокуса на окне макроса после измерений. Давайте сделаем еще пару настроек для этих двух авто. Просто обозначение детали я могу сделать в другое время, Название отключено. И мне, кроме линейки, делать-то в макросе нечего.
Цитата: Вират Лакх от 23.09.17, 05:44:50
1) Не заработала. Все равно дубль открывает. Как этот дескриптор посмотреть в отладчиках?
Вот тут его получаем (44 строка):
hwnd = win32gui.FindWindow(None, buff.value)
А вот тут я пытался получать из него только цифры, хотя, у меня он и без того только из цифр состоял:
hwnd = int(re.findall(r'\d+', str(hwnd))[0])
Возможно, затык где-то раньше в этой функции. Тогда, после каждого определения переменной, нужно print c именем переменной вводить и смотреть какая переменная не получает значения (она будет равна None), значит проблема в этом месте.
По поводу фокуса:
Метод root.focus_force() должен давать фокус окну, но что-то не работает.
Попробовал print переменную написать в разных местах - отзывается компилировать...
вот тут https://stackoverflow.com/questions/22751100/tkinter-main-window-focus пишут:
If focus_force() is not working you can try doing:
window.after(1, lambda: window.focus_force())
It's essentially the same thing, just written differently. I just tested it on python 2.7.
root.focus_force() wouldn't work but the above method did.
Кнопочки работают корректно все, кроме измерений. Прошу подсказки как это выполнить на КОМПАС V 13
Написали же раньше, вы предоставьте сообщения отладчика.
Это или я ошибся?
com_error: (-2147352571, '\xcd\xe5\xf1\xee\xe2\xef\xe0\xe4\xe5\xed\xe8\xe5 \xf2\xe8\xef\xee\xe2.', None, 1)
Цитата: Умка от 25.09.17, 07:20:21
Это или я ошибся?
com_error: (-2147352571, '\xcd\xe5\xf1\xee\xe2\xef\xe0\xe4\xe5\xed\xe8\xe5 \xf2\xe8\xef\xee\xe2.', None, 1)
Нужно сообщение целиком, там будет указана строчка в коде, где ошибка произошла.
Тут пишет "Несовпадение типов".
Цитата: Вират Лакх от 23.09.17, 21:06:53
window.after(1, lambda: window.focus_force())
Это тоже не даёт результата.
Traceback (most recent call last):
File "C:\Program Files\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__
return self.func(*args)
File "C:\Program Files\ASCON\Á×_v0.7.2.pyw", line 987, in <lambda>
but3 = tk.Button(frame, image = img, command = lambda event = None: Izmerit(event))
File "C:\Program Files\ASCON\Á×_v0.7.2.pyw", line 755, in Izmerit
application.MessageBoxEx( u"УкажиÑ,е грань, цилиндричеÑкую поверÑ...ноÑÑ,ÑŒ или ребро", u"Сообщение библиоÑ,еки", 64)
File "C:\Program Files\Python26\lib\site-packages\win32com\gen_py\69AC2981-37C0-4379-84FD-5DD2F3C0A520x0x1x0.py", line 703, in MessageBoxEx
, Caption, Flags)
com_error: (-2147352571, '\xcd\xe5\xf1\xee\xe2\xef\xe0\xe4\xe5\xed\xe8\xe5 \xf2\xe8\xef\xee\xe2.', None, 1)
Цитата: Вират Лакх от 23.09.17, 21:06:53
Попробовал print переменную написать в разных местах - отзывается компилировать...
Тут, оказывается, выравнивание в коде важно. Не следует писать в РАЗНЫХ местах :)
По копиям:
def Copy_program():
"""
Ищет ранее запущенные свои копии
"""
EnumWindows = ctypes.windll.user32.EnumWindows
print EnumWindows
EnumWindowsProc = ctypes.WINFUNCTYPE(ctypes.c_bool, ctypes.POINTER(ctypes.c_int), ctypes.POINTER(ctypes.c_int))
print EnumWindowsProc
GetWindowText = ctypes.windll.user32.GetWindowTextW
print GetWindowText
GetWindowTextLength = ctypes.windll.user32.GetWindowTextLengthW
print GetWindowTextLength
IsWindowVisible = ctypes.windll.user32.IsWindowVisible
print IsWindowVisible
def foreach_window(hwnd, lParam):
print foreach_window
print IsWindowVisible(hwnd)
if IsWindowVisible(hwnd):
length = GetWindowTextLength(hwnd)
buff = ctypes.create_unicode_buffer(length + 1)
GetWindowText(hwnd, buff, length + 1)
print length
print buff
print hwnd
if buff.value.find(u"Оформление детали БЧ") != -1:
hwnd = win32gui.FindWindow(None, buff.value)
hwnd = int(re.findall(r'\d+', str(hwnd))[0])
win32gui.ShowWindow(hwnd, win32con.SW_RESTORE) # разворачивает окно
sys.exit()
Выдает:
<_FuncPtr object at 0x000000000330B1E8>
<class 'ctypes.WinFunctionType'>
<_FuncPtr object at 0x000000000330B2B8>
<_FuncPtr object at 0x000000000330B388>
<_FuncPtr object at 0x000000000330B458>
<function foreach_window at 0x00000000036FA278>
0
Получается, первые 7 принтов выдает, а дальше IsWindowVisible(hwnd) фалит (= 0) и по if, соответственно, ничего не делает.
По фокусу: ХЗ.
Зачем в таких местах (см. ниже) писать "нажали""отпустили", когда хватает только "отпустили"?
Gabarit.bind("<ButtonRelease-2>", clear)
Gabarit.bind("<ButtonRelease-3>", activate_flash_menu)
Цитата: Умка от 25.09.17, 09:31:48
File "C:\Program Files\ASCON\Á×_v0.7.2.pyw", line 755, in Izmerit
application.MessageBoxEx( u"УкажиÑ,е грань, цилиндричеÑкую поверÑ...ноÑÑ,ÑŒ или ребро", u"Сообщение библиоÑ,еки", 64)
У Вас вообще всплывающие сообщения появляются?
Закомментируйте 755 строку (см. скрин.)
Цитата: Вират Лакх от 25.09.17, 09:34:33
Получается, первые 7 принтов выдает, а дальше IsWindowVisible(hwnd) фалит (= 0) и по if, соответственно, ничего не делает.
Попробуйте удалить это условие
if IsWindowVisible(hwnd):
или сделать его всегда истинным: if True:
ЦитироватьЗачем в таких местах (см. ниже) писать "нажали""отпустили", когда хватает только "отпустили"?
Потому что, можно нажать кнопку в одном поле, а отпустить в другом.
Всплывающих сообщений нет! Никаких.
Цитата: Умка от 25.09.17, 09:54:53
Всплывающих сообщений нет! Никаких.
Видимо, они у Вас отключены в настройках (Сервис — Параметры... — Система — Общие — Всплывающие сообщения), отсюда все проблемы.
def foreach_window(hwnd, lParam):
print IsWindowVisible(hwnd)
if True:
length = GetWindowTextLength(hwnd)
buff = ctypes.create_unicode_buffer(length + 1)
GetWindowText(hwnd, buff, length + 1)
print length
print buff
print hwnd
print buff.value.find(u"Оформление детали БЧ")
if buff.value.find(u"Оформление детали БЧ") != -1:
hwnd = win32gui.FindWindow(None, buff.value)
hwnd = int(re.findall(r'\d+', str(hwnd))[0])
win32gui.ShowWindow(hwnd, win32con.SW_RESTORE) # разворачивает окно
sys.exit()
Выдает:
0
0
<ctypes.c_wchar_Array_1 object at 0x0000000003390CC8>
<__main__.LP_c_long object at 0x0000000003390748>
-1
Цитата: Вират Лакх от 25.09.17, 10:31:40
Выдает:
0
0
<ctypes.c_wchar_Array_1 object at 0x0000000003390CC8>
<__main__.LP_c_long object at 0x0000000003390748>
-1
Там функция есть EnumWindows(EnumWindowsProc(foreach_window), 0), которая перебирает все окна.
То что у Вас выдало, это для одного окна. Для других ничего не выдаёт?
Upd: Вообще, решение взято отсюда (https://sjohannes.wordpress.com/2012/03/23/win32-python-getting-all-window-titles/) и немного переделано.
Её как писать? Так?
EnumWindows(EnumWindowsProc(foreach_window), 0)
print EnumWindows
print EnumWindows(EnumWindowsProc(foreach_window), 0)
print EnumWindowsProc(foreach_window)
Ответы:
<_FuncPtr object at 0x00000000033D01E8>
0
<WinFunctionType object at 0x00000000033D0528>
Сообщения в настройках не отключены, но нет всплывающих сообщений для Библиотеки для деталей БЧ.
Цитата: Умка от 25.09.17, 11:13:34
Сообщения в настройках не отключены, но нет всплывающих сообщений для Библиотеки для деталей БЧ.
Попробуйте вот эту версию.
Upd:
Цитата: Вират Лакх от 25.09.17, 10:54:39
Её как писать?
Попробуйте как на скрине. В отладчике должен список заголовков окон появиться.
Спасибо, измерения, всплывающие сообщения и прочие фишки выполняются корректно! Особо любо замеры длины прутка!
Цитата: Умка от 25.09.17, 12:32:43
Спасибо, измерения, всплывающие сообщения и прочие фишки выполняются корректно! Особо любо замеры длины прутка!
Вероятно, метода MessageBoxEx не было ещё в 13 версии.Хотя, был метод. Ошибка в несоответствии типов всплывала... Я хз, короче)
#if True:
length = GetWindowTextLength(hwnd)
buff = ctypes.create_unicode_buffer(length + 1)
print buff
GetWindowText(hwnd, buff, length + 1)
print "Hello"
print buff.value
if buff.value.find(u"Оформление детали БЧ") != -1:
hwnd = win32gui.FindWindow(None, buff.value)
hwnd = int(re.findall(r'\d+', str(hwnd))[0])
win32gui.ShowWindow(hwnd, win32con.SW_RESTORE) # разворачивает окно
#sys.exit()
Ответ:
<ctypes.c_wchar_Array_1 object at 0x000000000325FCC8>
Hello
Буфф валуев пустой получается.
Цитата: Вират Лакх от 25.09.17, 13:01:24
Буфф валуев пустой получается.
Я больше не знаю, чем помочь.
ТрындецЪ, вы из оригинала зря убрали return True
Сейчас такой код
EnumWindows = ctypes.windll.user32.EnumWindows
EnumWindowsProc = ctypes.WINFUNCTYPE(ctypes.c_bool, ctypes.POINTER(ctypes.c_int), ctypes.POINTER(ctypes.c_int))
GetWindowText = ctypes.windll.user32.GetWindowTextW
GetWindowTextLength = ctypes.windll.user32.GetWindowTextLengthW
IsWindowVisible = ctypes.windll.user32.IsWindowVisible
def foreach_window(hwnd, lParam):
if IsWindowVisible(hwnd):
length = GetWindowTextLength(hwnd)
buff = ctypes.create_unicode_buffer(length + 1)
GetWindowText(hwnd, buff, length + 1)
print buff.value
print buff.value.find(u"Оформление детали БЧ")
if buff.value.find(u"Оформление детали БЧ") != -1:
hwnd = win32gui.FindWindow(None, buff.value)
print hwnd
win32gui.ShowWindow(hwnd, win32con.SW_RESTORE) # разворачивает окно
sys.exit()
return True
EnumWindows(EnumWindowsProc(foreach_window), 0)
выдает:
Пуск
-1
-1
Оформление детали БЧ v0.7.2
0
3083502
и работает, т.е. раскрывает ранее открытое из коммандера окно макроса. Но работает только если я запускаю "вторую копию" через IDLE (Python GUI). Если второе из коммандера запустить, то все равно копия получается, блин :( Приложил файл.
UPD:
Хорошо, что вы исходник дали. Я добавил titles = [] и print titles. Оно выдает типа того: [u'\u041f\u0443\u0441\u043a', u'', u'*Python Shell*', u'\u0411\u0427.pyw ... Т.е. русские буквы заменены их кодами. Я название окна заменил на root.title (u"VVV") - заработало без отладчика! :j:
Как-то понимание русского языка можно включить? Если код вписать в название окна, то опять не работает.
Цитата: Вират Лакх от 26.09.17, 08:33:04
ТрындецЪ, вы из оригинала зря убрали return True
Сейчас такой код
...
и работает, т.е. раскрывает ранее открытое из коммандера окно макроса. Но работает только если я запускаю "вторую копию" через IDLE (Python GUI). Если второе из коммандера запустить, то все равно копия получается, блин :(
Принты закомментируйте.
Цитата: ТрындецЪ от 26.09.17, 09:32:29
Принты закомментируйте.
Я в шоке :) Работает теперь и с русскими буквами! Теперь разобраться бы с фокусом...
Умка, лучше такие сообщения в виде отдельного окна удалить, чем их иметь в этом виде.
Сообщения как доп информация на компе с тормозами не помешает. Всегда понятно когда операция выполнена.
1) hwnd = int(re.findall(r'\d+', str(hwnd))[0]) - это теперь можно удалить.
2) Еще в коде есть # Метериал - надо исправить опечатку чисто из уважения к великому могучему.
Вот тут https://mail.python.org/pipermail/python-win32/2006-May/004678.html рассказывают, как сделать фокус путем Tkinter и win32.
Оттуда я понял, что лучше написать root.focus() при появлении окна при запуске, т.к. _force - это, видите ли, impolite.
В проблемной строчке фокус такой не канает. Попробовал путем винды и понял, что я до этого не дорос. Может у Вас получится?
А вот тут https://stackoverflow.com/questions/3842220/make-tkinter-widget-take-focus посоветовали задержку.
В итоге, если путь винды не получится, то я предлагаю root.after(70, lambda: Gabarit.focus_force())
Фокус на габарите для того, чтобы сразу можно было вводить данные. Минус один клик. Задержку может подлиннее сделать, чтобы хватало времени.
Цитата: Вират Лакх от 26.09.17, 12:58:53
В итоге, если путь винды не получится, то я предлагаю root.after(70, lambda: Gabarit.focus_force())
Фокус на габарите для того, чтобы сразу можно было вводить данные. Минус один клик. Задержку может подлиннее сделать, чтобы хватало времени.
Вот это:
root.deiconify()
time.sleep(0.05)
Gabarit.focus_force()
иногда даёт фокус развернутому окну и виджету, но редко. Манипуляции со временем задержки эффекта не дают. С win32gui не разобрался ещё.
root.after(70, lambda: Gabarit.focus_force()) - это я, видимо, фигню написал. Надо поди уж или оба рут писать, или оба габарит? Gabarit.after(300, lambda: Gabarit.focus_force()).
Манипуляции со временем задержки эффекта не дают - это где: в слипе или афтер? В афтере я видел, как фокус отдавался макросному окну после этой задержки. Просто я хочу минимальную задержку сделать.
Получается то же, что и в Ответ #119, только задержку больше надо.
Я так понял, макрос с компасом этот фокус делят между собой.
Экспериментально 400 мс вроде хватает: root.after(400, lambda: Gabarit.focus_force())
Если практика покажет, что мало, тогда добавим 50 или 100 мс. В общем, не более 500 мс, чтобы не успела второй раз мигнуть в панели задач.
Предлагаю на win32gui на тратить время и двигаться дальше по пп. 3-6 ответа #117 и пп.1-2 ответа #142.
upd
Еще из нового функционала для сборок: деталь выделять не только в дереве или с shift+ЛКМ на поверхность, но и попробовать научить макрос определять чья (какой детали принадлежит) выделенная поверхность.
Как подправить, чтобы при снятии галки "Создать объекты спецификации" объекты спецификации не удалялись и не создавались новые при этом изменялись в свойствах модели только обозначения, наименования не изменялись? В массе не хватает незначащих нолей после запятой.
Цитата: Умка от 27.09.17, 06:22:16
Как подправить, чтобы при снятии галки "Создать объекты спецификации" объекты спецификации не удалялись и не создавались новые при этом изменялись в свойствах модели только обозначения, наименования не изменялись? В массе не хватает незначащих нолей после запятой.
Про то, как вернуть незначащие нули, я писал ранее. А по первому вопросу ответ на скрине.
При снятии галки "Создать объекты спецификации" объекты спецификации удаляются
Цитата: Умка от 27.09.17, 08:57:26
При снятии галки "Создать объекты спецификации" объекты спецификации удаляются
Ну, я же показал, что удаление надо закомментировать.
подправил удалением строк
iSourcePart7Params.SourceName = naimenovanie
iPart7.Name = naimenovanie
заработало!
Сейчас как сделать чтобы при снятии галки "Создать объекты спецификации" объекты спецификации не удалялись, изменялись только свойства детали.
Цитата: Умка от 27.09.17, 08:57:26
При снятии галки "Создать объекты спецификации" объекты спецификации удаляются
Да, непорядок. Если галки нет, то и не надо никаких операций с ОС проводить. В будущих версиях исправить надо.
upd
По незначащим нулям можно настройку в константах сделать.
Цитата: Вират Лакх от 27.09.17, 09:40:17
Да, непорядок. Если галки нет, то и не надо никаких операций с ОС проводить. В будущих версиях исправить надо.
Удаление введено для того, чтобы не было рассогласования между данными в свойствах и данными в объекте спецификации.
Цитата: ТрындецЪ от 27.09.17, 09:42:01
Удаление введено для того, чтобы не было рассогласования между данными в свойствах и данными в объекте спецификации.
Пардон, логично. Зачем тогда это Умке? upd: Умка, вы хотите макрос использовать просто для задания обозначений обычным деталям? Какова ваша конечная цель?
Для чего нужно:
Библиотекой для деталей БЧ я редактирую каждый файл, ввожу наименование. Файлов много. Затем в объектах спецификации сборки сортирую по наименованию и присваиваю порядковое обозначение. В КОМПАСе V13 при этом свойства деталей не изменяются!!!! Нужно изменить свойства детали по его объекту спецификации.
Цитата: Умка от 27.09.17, 10:01:57
Для чего нужно:
Библиотекой для деталей БЧ я редактирую каждый файл, ввожу наименование. Файлов много. Затем в объектах спецификации сборки сортирую по наименованию и присваиваю порядковое обозначение. В КОМПАСе V13 при этом свойства деталей не изменяются!!!! Нужно изменить свойства детали по его объекту спецификации.
Ну, это уже отдельная тема. Тут добавлением/удалением пары строк не отделаешься.
Хотелось бы одной галочкой только заблокировать вставку объекта спецификации с разрешением вставки в свойства детали
Позволю себе оффтоп. Значит вы присвоили в наименовании размеры деталей бч, потом в СП у отсортированных по наименованию расставили обозначения типа АБВГ.000.001 2 3 и т.д. Чтобы эти обозначения вписались в источник-деталь, надо включить кнопку Синхронизировать с документом-владельцем объекта (возможно, лучше при этом отключить Синхронизировать со свойствами компонента, чтобы не снималась галочка, а то всяко бывает). Чтобы кнопка у всех ОС сразу была включена попробуйте разные пути создания ОС в сборке. В одном из них у всех ОС она включена. Но и глюки разные бывают в разных версиях. Не помню, как там в 13-й. В 14-й и дальше переделали сортировку деталей. Чтобы этими муторными кнопочками не заниматься, в новой версии Авторедактора, о котором упоминали в начале темы, разрабатывается команда Переименовать все экземпляры выбранного ОС, она еще должна будет уметь вносить в источник данные Наименования и Обозначения. Пока новый Авторедактор в стадии тестирования.
upd
ЦитироватьХотелось бы одной галочкой только заблокировать вставку объекта спецификации с разрешением вставки в свойства детали
Не совсем догоняю. Разве это не равно просто отключенной галочке?
При отключенной галке объекты спецификации удаляются
Если две ранее описанные желаемые фишки реализуются, то их можно будет объединить в один это путь. Выделяем в сборке ребро, грань или цилиндр и запускаем макрос. Макрос определил, какой детали выделенное принадлежит, обновил содержимое полей у себя в окне по этой детали. Потом пользователю можно сразу запускать линейку, а она сразу берет выделенную геометрию и вставляет в поле Габарит.
Для измеренного габарита вида "D = 55, d = 66" при включенных " мм" хорошо бы добавить " мм" перед запятой, чтобы в итоге стало: D = 55 мм, d = 66 мм
Для чего задержка root.after(500, Selection) ?
Задержка перед передачей фокуса на Gabarit не везде дает переключение на окно макроса.
Мои поиски привели меня к тому же, что у нас уже есть! Процедура Copy_program нормально же открывала окно!
Отсюда предлагаю сделать так:
Цитировать
def Copy_program(exit):
"""
Ищет ранее запущенные свои копии
"""
EnumWindows = ctypes.windll.user32.EnumWindows
EnumWindowsProc = ctypes.WINFUNCTYPE(ctypes.c_bool, ctypes.POINTER(ctypes.c_int), ctypes.POINTER(ctypes.c_int))
GetWindowText = ctypes.windll.user32.GetWindowTextW
GetWindowTextLength = ctypes.windll.user32.GetWindowTextLengthW
IsWindowVisible = ctypes.windll.user32.IsWindowVisible
def foreach_window(hwnd, lParam):
if IsWindowVisible(hwnd):
length = GetWindowTextLength(hwnd)
buff = ctypes.create_unicode_buffer(length + 1)
GetWindowText(hwnd, buff, length + 1)
if buff.value.find(u"Оформление детали БЧ") != -1:
hwnd = win32gui.FindWindow(None, buff.value)
win32gui.ShowWindow(hwnd, win32con.SW_RESTORE) # разворачивает окно
if exit:
sys.exit()
return True
EnumWindows(EnumWindowsProc(foreach_window), 0)
Цитировать
"""_____________________НАЧАЛО ПРОГРАММЫ___________________________________"""
Copy_program(True)
Цитировать
if root.state() != "normal":
Copy_program(False)
Gabarit.focus()
Только вопрос маленький в том, что при проверке копии программы перестает перебирать окна sys.exit(), а как остановить перебирание окон после того, как нужное нашлось, в случае, когда надо просто развернуть окно?
Проверьте у себя, работает ли таким образом передача фокуса макросному окну после измерения.
Цитата: Вират Лакх от 04.10.17, 08:07:09
Только вопрос маленький в том, что при проверке копии программы перестает перебирать окна sys.exit(), а как остановить перебирание окон после того, как нужное нашлось, в случае, когда надо просто развернуть окно?
Проверьте у себя, работает ли таким образом передача фокуса макросному окну после измерения.
Отлично работает! Молодец!
Я особо не вникал в функцию, пусть себе перебирает все окна, на результате работы не отражается и ладно.
ЦитироватьДля чего задержка root.after(500, Selection) ?
Это пауза в зацикливании. Программа проверяет не выделено ли что-нибудь с периодичностью в 0,5 сек.
Тут правильнее было бы подписаться на событие окна документа, но с этим я пока не дружу.
Новая версия 0.7.3. Пока основной программист занят, ребенок балуется с питоном :) Вроде ничего не испортил.
За исходник взят макрос версии 0.7.2 из Ответа #116 : 22.09.17, 18:15:54
* Исправлено появление копии программы.
* Исправлен фокус на окно макроса после измерения.
* Изменен текст во всплывающем меню для шаблонов на "Вставить шаблон".
* Добавлена настройка в константах по отображению незначащего нуля после запятой. По той рекомендации <Чтобы незначащие нули показывались, нужно вырезать .rstrip("0").rstrip(",")> показывается только один нуль, который после запятой. В остальном толку нет. Или я не догнал что к чему. Возможно, тут зависимость от единиц измерения в модели: граммы или килограммы...
* Попробовал для отображения дроби использовать вместо минуса знак подчеркивания. Вроде красивее стало.
* Доделана приписка мм для шайб: "D = 55 мм, d = 66 мм", когда activ_mm = True.
* Добавлена настройка для типа доп. колонки Обозначение материала (по сути для себя сделал, чтобы новые версии легче настраивать было).
* Добавлена экспериментальная опция автозапуска Измерения. Только её допилить надо в зависимости от ситуации. В деталях сойдет, а в сборочниках, где еще не выбрана деталь или не реализован п.8 (см. ниже), неуместно пока.
Итоги. Из ранее написанного варианты развития:
4) Небольшая фишка еще. У меня материал по умолчанию удален, т.е. пустая строка. Если пустой материал, то умная галочка должна отключиться или, оставаясь включенной, не прописывать @/.
5) Еще один путь для замеров. Сейчас мы запускаем линейку, а потом указываем. Но возможен путь такой: я выделяю грань, запускаю макрос и линейку. Линейка понимает, что что-то выделено и вставляет, если выделено правильное.
6) Что вы думаете насчет автозапуска линейки и/или автоctrl+enter после линейки? Давайте сделаем еще пару настроек для этих двух авто. Просто обозначение детали я могу сделать в другое время, Название отключено. И мне, кроме линейки, делать-то в макросе нечего.
7) Еще из нового функционала для сборок: деталь выделять не только в дереве или с shift+ЛКМ на поверхность, но и попробовать научить макрос определять чья (какой детали принадлежит) выделенная поверхность.
8) п.7 + п.5 = Выделяем в сборке ребро, грань или цилиндр и запускаем макрос. Макрос определил, какой детали выделенное принадлежит, обновил содержимое полей у себя в окне по этой детали. Потом пользователю можно сразу запускать линейку, а она сразу берет выделенную геометрию и вставляет в поле Габарит.
Цитата: Вират Лакх от 05.10.17, 09:27:02
Новая версия 0.7.3. Пока основной программист занят, ребенок балуется с питоном :) Вроде ничего не испортил.
За исходник взят макрос версии 0.7.2 из Ответа #116 : 22.09.17, 18:15:54
Давно бы так))) Я вас всех научу Python любить :-)))
Замечание по коду: переменную exit лучше переименовать, т.к. это имя уже зарезервировано за системной функцией exit().
перестало выполнять замеры, однако
Микрообновление v0.7.4, чтобы тема не забывалась.
* сделал п.4: про пустой материал и @/
Цитировать# Получаем материал
if mat_var.get() and iPart7.Material != "":
* доделал п.6: добавил настройку "автоctrl+enter после линейки". Но мне не нравится, что при нажатии на Стоп тоже вносятся изменения и закрывается программа. А должно прерваться измерение и ждать следующих действий пользователя. Значит не туда вставил и/или какие-то условия надо добавить. Ув. ТрындецЪ, добейте, плиз :)
Цитироватьif auto_close:
Start_2()
Умка, про замеры. Вам надо поудалять или закомментировать сообщения в этой процедуре, если я правильно понимаю.
Цитата: Вират Лакх от 18.10.17, 09:03:40
доделал п.6: добавил настройку "автоctrl+enter после линейки". Но мне не нравится, что при нажатии на Стоп тоже вносятся изменения и закрывается программа. А должно прерваться измерение и ждать следующих действий пользователя.
Нужно было ещё отступов добавить, чтобы попало в условие, вставляющее текст в габарит.
Попутно добавил обработку предварительного выделения перед вызовом замеров (п.5). Давно реализовал в черновой версии.
Классно! Осталось только п.8 сделать, но это точно мне как до луны раком.
И всё, у меня идей нет больше для того варианта программы, как сейчас.
Остается только пробовать полный автомат определения габаритов и ссылки через линию-выноску.
Немного смущает способ чтения свойств источника. Сейчас макрос заходит в редактирование на месте и сразу выходит, видимо, считав оттуда обозначение, наименование и материал. Но компасная команда Информация об объекте может считать свойства источника без входа/выхода в компонент. Может наведем эстетику и пересмотрим чтение свойств? Кто знает, как прочитать свойства источника, не заходя в редактирование на месте?
БЧ_v0.7.4.1.7: application.MessageBoxEx заменил на kompas_object.ksMessage и если я указываю где выполнить замер, а потом запускаю линейку, то получаю размер. Если запускаю линейку, то получаю зависание.
Цитата: Умка от 27.10.17, 11:07:41
БЧ_v0.7.4.1.7: application.MessageBoxEx заменил на kompas_object.ksMessage и если я указываю где выполнить замер, а потом запускаю линейку, то получаю размер. Если запускаю линейку, то получаю зависание.
Выложите свой код. Похоже, где-то пропустили сообщение.
Испытания макроса в боевых условиях привели к желанию иметь комбинацию ctrl+a для выделения всего текста в полях ввода.
Еще есть мысли по последовательности записи размеров листа. Как оно сейчас происходит? Видимо так: XxY. Может записывать сначала меньший размер, а потом больший типа не 260х80, а 80х260? Это я к тому, если будут несколько одинаковых, но по-разному созданных листов одной ширины и длины. Тогда объекты спецификации станут разными из-за разных наименований. И для вообще разных листов тоже неплохо бы однообразную запись. Если группировать БЧ в спецификации под один материал, то эти детали по правилам должны быть отсортированы от меньшего к большему. И внутри габаритов ту же сортировку от меньшего к большему. Тогда группа будет такой: 80х260 мм, 80х300 мм, 100х500 мм и т.д.
UPD
Если макрос был запущен в детали, а потом я пошел в сборку выяснить некоторые подробности и в ней вношу данные, то макрос говорит "Выделите деталь". Можно как-то запоминать, с чем имеем дело?
Цитата: Вират Лакх от 02.11.17, 06:22:34
Испытания макроса в боевых условиях привели к желанию иметь комбинацию ctrl+a для выделения всего текста в полях ввода.
... Может записывать сначала меньший размер, а потом больший типа не 260х80, а 80х260?
Реализовано в v0.8.
1) добавил применение title (давно хотел это вам предложить, смотрю в других макросах title используете, значит и тут сделаете в новых версиях) тут: root.title(title + " v0.8") и if buff.value.find(title) != -1
2) Если стандартным путем идти в сборочнике: выделить деталь и потом измерить, то макрос на меня говорит желтым знаком "выделите грань...". Но я же ничего плохого не сделал :) Макрос смотрит при измерении, что что-то выделено, а выделено не то: деталь вместо геометрии. Вот и ругается. Поменял 48 на 64.
3) Хотел объединить start и start2 типа так: def Start(exitprog), но, видимо, в кнопках нельзя писать "command = Start(True)". Напортачил в коде :)
А объединить хотел для того, чтобы ввести в процедуре локальную переменную activedoc, значение которой меняется на False после application.MessageBoxEx( u"Активный документ не является деталью или сборкой!", title, 48). Потом этот фолс не дал бы выйти из программы: if exitprog and activedoc: sys.exit().
Всё это для того, чтобы макрос не отключался при ctrl+enter на 2D чертеже. А то функция внесения изменений и закрытия закрывает, а вносит или нет - сразу непонятно.
Придется тогда глобальную переменную создавать и передавать её в start2, да?
4) а) ocircumflex - это какая кнопка? б) И не могу найти в коде, где в габарите сначала ставится меньшая цифра, потом большая (для общего развития).
5) С включенным capslock ctrl+A не работает.
6) А еще хотел добавить в контекстном меню строчку "Выделить всё" и подписи: Ctrl+X, Ctrl+C, Ctrl+V, Ctrl+A, ↓
Как, интересно, их по правому краю сделать. Просто пробелами - не вариант.
Сам делаю свои хотелки, часть вторая. Версия 0.8.1. Сделал п. 1, 2, 3, 6.
ТрындецЪ, ответьте по п. 4, плиз.
upd: Если вызвать контекстное меню без мигающего курсора на поле ввода, то Выделить всё не срабатывает. Надо как-то фокус передавать при ПКМ на поле или при команде "выделить всё".
Ошибка при замере
Traceback (most recent call last):
File "C:\Program Files\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__
return self.func(*args)
File "C:\Program Files\ASCON\Á× v0.8.1.pyw", line 990, in <lambda>
but3 = tk.Button(frame, image = img, command = lambda event = None: Izmerit(event))
File "C:\Program Files\ASCON\Á× v0.8.1.pyw", line 743, in Izmerit
kompas_object.ksMessage( u"УкажиÑ,е грань, цилиндричеÑкую поверÑ...ноÑÑ,ÑŒ или ребро", title, 64)
TypeError: ksMessage() takes at most 2 arguments (4 given)
Это всё та же тема с сообщениями в вашем компасе. Поставьте # перед kompas_object.ksMessage на 743 строке.
И во всех остальных местах, где есть такая ошибка.
upd: А, вообще, TypeError нерусским по белому говорит, что якобы ksMessage() берет не больше чем два аргумента, а дали 4. Где он там четыре насчитал - хз, но попробуйте удалить ", title, 64" из команды.
upd2: У вас точно включено "Сервис->Параметры->Система->Общее->Всплывающие сообщения->Использовать всплывающие сообщения вместо информационных диалогов" и вторая рядом галка?
Вам бы все-таки порешить со всплывающими сообщениями.
", title, 64" в строке удалил и заработало! Спасибо.
Цитата: Вират Лакх от 03.11.17, 07:44:06
4) а) ocircumflex - это какая кнопка? б) И не могу найти в коде, где в габарите сначала ставится меньшая цифра, потом большая (для общего
a) Это для "Ф" русской раскладки мне такое выдало, когда я коды клавиш "пробивал".
б) Строка 628 в версии 0.8.1
text = (str(round(min(ab),n_izm))).replace(".",",").rstrip("0").rstrip(",") + u"х" + (str(round(max(ab),n_izm))).replace(".",",").rstrip("0").rstrip(",")
Спасибо, ясно. А как вы пробиваете? Это вы пробили для маленькой "ф". Я для "Caps Lock + a" добавил, но еще "Caps Lock + ф" осталось.
Что скажете по upd из Ответ #174? Есть быстрое решение?
UPD
И еще мысль: а не научить ли нам макрос присваивать материал? У нас, например, есть считанный материал от первой детали и есть еще детали, которые должны быть из этого же материала, но материал не указан или стоит неправильный. Можно было бы этот считанный материал присваивать другим деталям.
Сейчас нет времени разбираться со всем этим. Как-нибудь вернусь к этой теме.
Сам делаю свои хотелки, часть третья. Версия 0.8.2. Сделал:
* п. 4+5 (caps lock для A и Ф)
* upd из Ответ #174 (не срабатывала "Выделить всё" через меню на нефокусном поле).
* дописал в контекстном меню комбинацию клавиш для вызова шаблонов.
* добавил фокус для нефокусного поля после "Удалить всё" через контекстное меню.
UPD: Заметил, что у полей ввода есть свои стандартные комбинации, например, Выделить всё ctrl+/ или переместить курсор в конец строки ctrl+e, а в начало строки как раз-таки ctrl+a (я думал, чего он курсор дергает в начало при Выделить всё).
Цитата: Вират Лакх от 09.11.17, 06:35:00
Сам делаю свои хотелки, часть третья.
(https://forum.ascon.ru/proxy.php?request=http%3A%2F%2Fi.smiles2k.net%2Flol_smiles%2Fthumbsup.gif&hash=742df420383070ff943be136708c706dd5878de6)
Цитата: Фердинанд ПоршеЕсли хочешь сделать что-то хорошо, сделай это сам.
Наткнулся ещё на проблему с зацикливанием, если выделены грань или ребро не подходящие по параметрам. Решил введением отмены выделения.
Upd: Пора справку к программе писать.
Upd-2: Ещё термин "константы", как я считаю, не подходит для переменных в настройках. Суть константы в том, что она никогда не изменяется, а у нас как раз наоборот.
"Если хочешь сделать что-то хорошо, сделай это сам." Это не полная истина. Расширенный вариант фразы звучит так: "... сделай это сам или попроси ТрындецЪ'а" :)
Закцикливание я видел давно. Видно было, как шапка окна компаса мигала. Думал это то самое "Программа проверяет не выделено ли что-нибудь с периодичностью в 0,5 сек. Тут правильнее было бы подписаться на событие окна документа, но с этим я пока не дружу." Сейчас без зацикливания приятнее стало.
Когда будет версия 1.0, тогда тов. Vin попросим написать справку )
Я бы хотел к версии 1.0 иметь еще п.8 из Ответ #162.
"Константы" в новой версии кто-нибудь из нас переименует в "Настройки".
Еще вы забыли в шапке окна версию изменить на root.title (title + " v0.8.3"). Я подумывал переменную ввести наряду с title для версии...
UPD: Кстати, в "боевых" условиях макрос помогает в преодолении глюков спецификации быстрым созданием объекта спецификации.
На скорую руку реализовал п.8 из ответа #162 - перед запуском теперь достаточно выделить элемент нужной детали (грань, ребро или вершину), чтобы программа поняла с чем работать.
По хорошему, конечно, надо свойства считывать, а не в режим редактирования на месте заходить, но лень код ворошить, там уже столько нагорожено, что я уже забывать стал что к чему.
при замерах зависает, ошибок нет
Вооот. Макрос поднялся еще на уровень. Спасибо.
Сейчас выделение элемента детали работает на чтение, а на запись - нет.
Макросом же можно считанные данные записывать в другие детали. Его можно использовать не только для БЧ, но и при присвоении обозначений и наименований обычным деталям. Вместо того, чтобы долбаться со свойствами-источниками компонентов, можно этим макросом легко расставить всем деталям обозначение и наименование. А для этого тоже элементы хорошо бы выделять, а не в дереве или с шифтом.
Таким образом макрос может к версии 1.0 стать (фактически уже почти стал) не "Оформление деталей БЧ", а "Обозначение компонентов" или типа того.
В новом на сегодняшний день Авторедакторе 1.30 появилась отличная команда Переименовать, которая делает типа того же, но из объектов спецификации. Кстати, от нас с Дмитрием22 тебе, ТрындецЪ, спасибо, мы использовали часть кода этого макроса для присвоения данных в источник. Две программы отлично дополняют друг друга. Но из объектов СП не очень удобно расставлять обозначения и наименования, можно, но надо переключаться между окнами, включать постоянно подсветку геометрии...
По считыванию свойств не через редактирование на месте я может попробую пораскинуть мозгами. За полгода поди справлюсь ) Но в v1.0 не хочется её пропускать, иначе будет "качество не моей мануфактуры".
И еще момент, который надо будет нам сделать в версиях 0.9.х. Это в продолжение темы нефокусных полей и всплывающего меню. Если ПКМ на нефокусном поле вызвать меню и выбрать Вырезать, Копировать или Вставить, то команды должны работать для всего содержимого поля. Т.е. Вырезать должна поместить в буфер весь текст и сделать Удалить всё. Копировать - аналогично, но без удалить. Вставить сначала удалить всё, потом вставить содержимое буфера. Компасу тоже неплохо бы взять это на заметку.
Ну и потом уже от нечего делать можно внесение считанного материала в другие компоненты сделать. Кстати, это же не долго делать? Просто, что считали, то и записали на то же место. Может я сам попробую сделать.
Умка, сдались вам эти сообщения? Закомментируйте их в процедуре def Izmerit(event)
мда...Это как?
Цитата: Умка от 10.11.17, 06:19:00
мда...Это как?
См. начало Ответа #176. Вроде и ТрындецЪ писал раньше. Решетка # перед текстом кода - это комментарий, который не используется в работе программы. Будет типа удалил в корзину, из которой можно достать, если вдруг понадобится.
Удалил все ", title, 64", сейчас всё работает
Цитата: Умка от 10.11.17, 07:26:13
Удалил все ", title, 64", сейчас всё работает
Так проблема была только в титлах 64 и 48? Тип сообщения не меняли, остались всплывающие сообщения в углу?
Если да, то как сообщение выглядит?
тип сообщения не менял, сообщения в центре экрана
Версия 0.9.1.
Из Ответ #186 сделал работу Вырезать, Копировать, Вставить для нефокусных полей ввода. Т.е. если курсор стоит на одном поле или нигде не стоит, а пользователь нажимает сразу ПКМ на другом поле, то указанные команды будут работать для всего текста в указанном поле.
Попробовал присвоить считанный материал обратно в Материал типа iPart7.Material = material. А не тут-то было. Оно якобы для чтения и надо это делать по-другому.
iPart7.SetMaterial
Цитата: Вират Лакх от 13.11.17, 12:23:48
Попробовал присвоить считанный материал обратно в Материал типа iPart7.Material = material. А не тут-то было. Оно якобы для чтения и надо это делать по-другому.
Если материал задавать, тогда и плотность надо с детали-прототипа считывать.
Цитата: Sabahs от 13.11.17, 12:27:51
iPart7.SetMaterial
Цитата: ТрындецЪ от 13.11.17, 12:31:20
Если материал задавать, тогда и плотность надо с детали-прототипа считывать.
Ага, видел её. Это и имел ввиду, что там плотность еще участвует... Просто тут написал по-простому, дабы не вдаваться в подробности. На сегодняшний момент понял, что это делается по-другому. Дальше вникать тоже нет времени. И без того много уходит времени на простейшее.
UPD Еще пытаюсь вычислить это "ненужное" редактирование на месте...
Цитата: Вират Лакх от 13.11.17, 12:33:48
Еще пытаюсь вычислить это "ненужное" редактирование на месте...
PartAPI5.BeginEdit () # начать редактирования на месте
Read_prop_detal() # Считываем инфу
PartAPI5.EndEdit (0) # завершить редактирование на месте без перестроения
ТрындецЪ, заметил кАсяк в версии 0.9. От него и в 0.9.1. После измерения не восстанавливает окно макроса обратно :( Как так случилось? Из-за title? Нет, не из-за него. Копия нормально отрабатывает. Что-то Вы там в процедуре def Izmerit(event) сделали не то... В v0.8.3 работало.
Цитата: Вират Лакх от 13.11.17, 12:53:11
ТрындецЪ, заметил кАсяк в версии 0.9. От него и в 0.9.1. После измерения не восстанавливает окно макроса обратно :( Как так случилось? Из-за title? Нет, не из-за него. Копия нормально отрабатывает. Что-то Вы там в процедуре def Izmerit(event) сделали не то... В v0.8.3 работало.
Сам не понимаю. Почему-то функция Copy_program не восстанавливает окно.
Upd: Починил. Не работало, потому что я версию в title загнал. Вернул обратно. Так и не понял, чем версия не угодила... Лень сейчас разбираться, работает и ладно.
Это у вас 0.9.1.1 работает, а у меня нет. Зачем опять return True удалили?
А проблема тут не в версии, а в том, что мы имеем два окна, содержащих title, одно из которых балун. Вот на нем и останавливается перебирание окон. Надо разделить названия этих окон. Что я и сделал в версии 0.9.1.2.
Попробовал PartAPI5.BeginEdit и PartAPI5.EndEdit убрать, а чтение разделить на два варианта: def Read_prop_detal(component), где component = True, если считываем у компонента сборки. И обозначение написать так:
# Получаем свойство Обозначение
if component:
iSourcePart7Params =kompas_api7_module.ISourcePart7Params(iPart7)
oboznachenie = iSourcePart7Params.SourceMarking
else:
oboznachenie = iPart7.Marking
Но не работает. Короче, далеко мне еще до этого. И SourceMaterial не существует...
Цитата: Вират Лакх от 13.11.17, 21:43:25
Это у вас 0.9.1.1 работает, а у меня нет. Зачем опять return True удалили?
А проблема тут не в версии, а в том, что мы имеем два окна, содержащих title, одно из которых балун. Вот на нем и останавливается перебирание окон.
А я и не сообразил. Так вот почему мне несколько одноименных окон "принтил", когда я ошибку искал. Теперь всё понятно стало.
Со свойствами работать надо через IPropertyKeeper.
v0.9.2 alpha - недоделанная.
* Переделал этот title немного по-другому и применил его между делом для tkMessageBox.showwarning(title_version, u"Запустите КОМПАС-3D и повторите попытку")
* В Gabarit.grid сделал sticky= W + E для растягивания при длинных материалах.
* Сделал присвоение материала и плотности для обычных компонентов. Галка справа от материала. Для локальных не знаю как. Опять через редактирование на месте?
* Надо еще прочитанную штриховку переносить на другую деталь. Написал # Получаем свойство Штриховка hatch = iPart7.HatchParam
Но это пальцем в небо. Там опять всякие интерфейсы и только для чтения.
Нид хэлп.
Как штриховку назначать, я тоже не нашёл.
В чем отличие редактировать на месте от открыть в невидимом режиме? Второе неприменимо для локальных деталей? Почему оба способа используются в программе? Реально в локальность прописать материал+плотность каким-нибудь путем? Насколько я помню, компасная команда присвоения материала скопом компонентам сборки в локальные материал прописывает не в источник.
Для локальных в режиме редактирования на месте свойства записывались/считывались, для обычных в режиме скрытого их открытия, если уже не открыты. Другого способа я не придумал тогда. Как локальным присваивать материал пока ответить не могу.
Присваивать материал скопом никогда не пробовал и не знаю, как это делается в программе.
Цитата: ТрындецЪ от 14.11.17, 15:14:52
Присваивать материал скопом никогда не пробовал и не знаю, как это делается в программе.
Пооффтопим малость. Вот тут в источник локальным не прописывается материал.
Версия 0.9.3
* Похозяйничал в коде. Переставил кое-что местами для лучшего мне восприятия.
* Не нравилось разное заполнение поля Габарит при запуске макроса и при обновлении в случае отключенной галки Название для двухстрочного наименования. Не бралась первая строка. Сделал при запуске однообразно с обновлением.
* Слегка изменил в окне выделение текста жирным. Типа жирность - это то, на что нажимать. Чтобы мм заметнее стали, а то проскакивают куда не надо.
* Раньше при измерении шайбы с отверстием после первого диаметра мм ставилось по настройке, а теперь в зависимости от включенности жирных мм справа.
* Перенос штриховки и присвоение материала в локальную деталь для себя считаю невозможной. Равно как и считывание свойств не через редактирование на месте.
* Еще хочу узнать, где в коде определение компонента по его выделенной геометрии. Вдруг смогу повторить аналогично для записи свойств.
SelectedObjects.Part - вот так получаем интерфейс компонента iPart7 от выделенного объекта.
По хорошему, тут нужно ещё проверку вводить, как в функции с измерением: является ли выделенный объект модельным (if SelectedObjects.Type == 11001:), и не выделено ли несколько объектов (if type(SelectedObjects) == tuple:).
Лучше в отдельную функцию это вынести: передаём ей выделение, а она возвращает iPart7, или окно с текстом ошибки.
Вот v0.9.4. Дел по программе еще полным-полно, оказывается 88))
1) По процедуре опознания компонента по его выделенной геометрии в общих чертах я понимаю, а что писать в части взаимодействия с компасом - туплю. У меня в вам предложение написать напротив таких строк комментарии побольше в выложенной последней версии. Для новичков эта программа будет нехилым учебником. И заодно напишите процедуру :) Её надо будет вставить в запись и заменить в чтении тамошний код на процедуру. И предупреждайте меня в ЛС, что принимаетесь за редактирование макроса, чтобы мы параллельные версии не делали. А я потестирую )
*) В этой версии оптимизировал код в части заполнения виджетов при запуске и обновлении. Плюс сделал, чтобы текст вида "L = 100 мм" записывался не в название, а в габарит. Теперь можно галку названия в настройках не отключать тем, кто названием для БЧ не пользуется. Может в будущем эту галку совсем убрать... Это нацелено на универсальность будущего макроса аля "Обозначение компонентов 1.0".
*) Для спортивного интереса сделал для шайб вида D=,d= при включении и отключении жирных мм в поле Габарит убирается и появляется мм между D= и запятой.
2) Как можно сделать проверку концентричности отверстия в шайбе D=d= ?
*) Привел к общей концепции название галки "Создавать объекты спецификации" (убрал жирность и изменил высоту шрифта).
3) Обработку данных в def Read_prop_detal() надо переделывать. Я давно вроде писал, что надо начинать с конца. Выделить габарит по признакам х, =, мм до первой с конца собакидроби. Если таковых не будет, то это всё - название.
4) Для сборок, чтобы зря пустое окно не отображать при запуске без выделенного компонента, предлагаю .TopPart вписывать в виджеты. Будет аналогично с запуском в обычной детали. В рамках универсальности макроса. При этом сообщение Выделите деталь... можно оставить.
5) Вернемся к проблеме галочек Источник у компонентов. См. рисунок. Можно вот так отображать отключенность галочки Источник. Или хотя бы несовпадение данных в источнике от данных в компоненте. Так вот, сейчас макрос считывает данные источника только при редактировании на месте нелокального компонента. Остальное - это информация компонента.
Крупное обновление программы. Переработан и оптимизирован код, добавлены новые функции и настройки.
В связи с расширением возможностей программа получила новое название "Обозначение компонентов".
Описание - см. прилагаемый файл ReadMe.pdf
Две версии: для python 2.6 (v??.? <= Компас <= v16.x) и 3.0 (Компас 17.x).
Работоспособность программы проверялась только на Компас версии 16.x.
В архиве одна и та же программа в исходном виде и виде байт-кода (сохранение байт-кода позволяет интерпретатору не тратить лишнее время на перекомпиляцию кода модулей при каждом запуске).
Ошибка Кv13, WXPsp3
File "C:\Program Files\ASCON\Обозначение компонентов.pyw", line 148, in read_prop
hatchstyle = iPart7.HatchParam.Style # Получаем ÑÑ,иль шÑ,риÑ...овки
File "C:\Program Files\Python26\lib\site-packages\win32com\client\__init__.py", line 454, in __getattr__
raise AttributeError, "'%s' object has no attribute '%s'" % (repr(self), attr)
AttributeError: '<win32com.gen_py.69AC2981-37C0-4379-84FD-5DD2F3C0A520x0x1x0.IPart7 instance at 0x24949504>' object has no attribute 'HatchParam'
Оказывается, в то время еще не было параметров штриховки у 3D моделей. Ладно, допилим. А пока строку 148 сделайте: hatchstyle = -1 и строку 399 с решеткой: # iPart7doc.HatchParam.Style = hatchstyle
Спасибо! :)
А можно сделать так, что бы программа запускалась по нажатию кнопочки в Компасе?
Тут http://forum.ascon.ru/index.php/topic,28546.40.html я Вам рассказывал, как делать макрос на кнопку.
upd. Может до конца не рассказал. Потом - см. картинку - взять в этом окне команду и вынести её на панельку.
Потом через ПКМ можно настроить иконку кнопки.
При замере активируется команда "Усечение кривой", отключается через Esc или Stop, при этом программа "Обозначение компонентов" свёрнута. Замер выполняется корректно.
Цитата: Вират Лакх от 05.02.18, 11:57:14
Тут http://forum.ascon.ru/index.php/topic,28546.40.html я Вам рассказывал, как делать макрос на кнопку.
upd. Может до конца не рассказал. Потом - см. картинку - взять в этом окне команду и вынести её на панельку.
Потом через ПКМ можно настроить иконку кнопки.
Спасибо! :) Всё получилось!
Цитата: Умка от 05.02.18, 12:14:21
При замере активируется команда "Усечение кривой", отключается через Esc или Stop, при этом программа "Обозначение компонентов" свёрнута. Замер выполняется корректно.
Поищите в своем SDK.chm вот это "40524". У меня оно - Команды 3D документа, ksCMViewFeatureInTree 40524 Показать в дереве.
А как у Вас?
строка 670: application.ExecuteKompasCommand(40524, 1) - попробуйте 1 на 0 изменить или как всегда # перед командой.
аналогично строка 103.
40524 в SDK.chm не нашёл. Поставил решётки и заработало нормально! Не хватает кнопочки "Не менять наименование в свойствах"
Цитата: Умка от 05.02.18, 13:17:27
Не хватает кнопочки "Не менять наименование в свойствах"
Так у наименования есть "галочка", которая за это отвечает.
Цитата: Умка от 05.02.18, 13:17:27
40524 в SDK.chm не нашёл. Поставил решётки и заработало нормально! Не хватает кнопочки "Не менять наименование в свойствах"
Сделайте архив с максимальным сжатием и томами 1Мб своей сдк. Почитаю.
А можно помечтать о знаке позиции на сборке, который сам связывался бы с номером позиции из спецификации. ::)
Куда индивид поставил знак в чертеже, с той геометрии знак взял бы инфу о компоненте сборки и получил его номер из специи... :shu:
И что бы если поставил на линию - то позиция со стрелкой. Если на тело - то точка у знака. :)
С самого начала не заметил ошибку: не записывает данные в объекты спецификации. Не могу отправить файлы, даже архивы по одному. Что-то слишком большое!
Цитата: IgorT от 05.02.18, 14:12:29
А можно помечтать о знаке позиции на сборке, который сам связывался бы с номером позиции из спецификации. ::)
Куда индивид поставил знак в чертеже, с той геометрии знак взял бы инфу о компоненте сборки и получил его номер из специи... :shu:
И что бы если поставил на линию - то позиция со стрелкой. Если на тело - то точка у знака. :)
Задача этой программы - менять свойства. Ваше предложение-это уже совсем другая история.
Цитата: Умка от 05.02.18, 14:26:50
С самого начала не заметил ошибку: не записывает данные в объекты спецификации. Не могу отправить файлы, даже архивы по одному. Что-то слишком большое!
ОС создаются только из сборки и только для БЧ нелокальных деталей.
А архив можно через файлообменник перекинуть.
Чтобы почитать SDK, достаточно два файла прикрепить, правда их уже бесполезно упаковывать.
Цитата: ТрындецЪ от 05.02.18, 15:00:17
Задача этой программы - менять свойства. Ваше предложение-это уже совсем другая история.
....
Так предлагал уже ...
Похоже идея мало кого греет.
Неужели не интересно?
Цитата: ТрындецЪ от 05.02.18, 15:00:17
ОС создаются только из сборки и только для БЧ нелокальных деталей.
Не совсем так. Программа теперь не создает объекты спецификации, ибо это противоречит философии Источника.
Объекты спецификации вы создаете сами стандартными средствами или компас сам это делает. Программа только пишет/удаляет БЧ и кг в уже созданных ранее объектах спецификации деталей локальных и нелокальных, у которых в макросе при вставке включен был материал в наименование или в поле размеров был текст. Если у сборки, куда входит компонент, нет объектов спецификации, то ничего не произойдет.
Цитата: IgorT от 05.02.18, 15:16:43
Так предлагал уже ...
Похоже идея мало кого греет.
Неужели не интересно?
Создайте отдельную тему, сформулируйте ТЗ, авось когда-нибудь и получите. Только непонятно мне, зачем в сборке нужны позиции?...
Цитата: ТрындецЪ от 05.02.18, 15:21:10
Создайте отдельную тему, сформулируйте ТЗ, авось когда-нибудь и получите. Только непонятно мне, зачем в сборке нужны позиции?...
:?:
Похоже я не очень удачно оформил пост. Позиции в сборочном чертеже и их связь с СП. Сейчас то руками часто проходится делать. Автопозиции очень часто требуют корректировки, а это ИМХО не удобно.
Интересно, API Компаса в принципе позволяет сделать подобное?
Обновление v1.1. Всё в одном архиве.
Исправлена ошибка получения стиля штриховки для старых версий компаса. Если не удалось прочитать стиль, отобразится "-1".
В сообщение при измерении детали добавлено в перечисление геометрии "круг без отверстия или с отверстием в центре".
В API КОМПАС-3D V13 SP1 написано то же самое: ksCMViewFeatureInTree 40524 Показать в дереве.
Кv13 WXPsp3 свойства не изменяет и не вставляет, замеры выполняет только после указания на объекте.
Для Умки и у кого старые компасы.
По команде Показать в дереве - скорее всего ошибка этой версии Компас.
Удалить или закомментировать application.ExecuteKompasCommand(40524, 1)
По сообщениям - аналогично. Придется их все заменить на kompas_object.ksMessage(u"бла-бла-бла") или pass
"не записывает данные в объекты спецификации" - может и не записывает. Придется самостоятельно или пробовать библиотеку Авторедактор.
Остальное должно работать, а может и не должно...
Будем считать, что данная программа не поддерживает старые версии компас.
Для Кv13 не подходит, пользуюсь версией 0,9.
Проект развивайте дальше, в нём очень нужные функции. Постоянные функции лучше вывести в отдельное меню чтоб "с глаз долой".
Микрообновление v1.2 без изменения функционала.
Немного скорректирована функция Проверка (проверка наличия компонентов в сборке, поведение кнопки и вид стрелки мыши во время работы команды, выдача пары сообщений одним сообщением) и заменено окно сообщения о присвоении материала локальному компоненту.
P.S. Владельцы старых версий компаса могут заменить application.MessageBoxEx на WindowsBalloonTip (если надо будет, скину код класса). Тогда всё должно работать.
Еще вариант можно подумать такой, что заменить глючные питоновские файлы (Kompas10API5.py, Kompas10API7.py и т.д.) v13 и какие еще версии не работают на файлы от 16.1 версии, если аскон разрешает такое.
Цитата: Умка от 06.02.18, 10:31:51
Проект развивайте дальше, в нём очень нужные функции.
Мне не понятно в какую сторону ещё развивать эту программу. Все задуманные Вират Лакхом задачи реализованы, а что не реализовано (работа с локальными деталями) - так это из за отсутствия необходимых функций в API, тут мы бессильны.
Если есть какие-то конкретные пожелания для развития функционала, то предлагайте. Обраще не только к Умке, но и ко всем "неравнодушным".
Не совсем все задачи реализованы. В первых сообщениях темы говорили о редактировании материала. Можно было бы сделать отображаемый материал редактируемым на даблклик, чтобы померить толщину листа или стенки трубы и вписать их в материал. Но это так, от совсем нечего делать.
А можно мне сказать?
ИМХО было бы не плохо, если бы программа имела фейс типа таблицы а-ля Редактора объектов СП или Редактора свойств, который из Отчетов. При этом использовался бы функционал ОК.
Лично мне удобнее видеть как можно больше строк компонентов сборки.
И ещё. Если бы Редактор свойств Компаса позволял бы передавать введённые пользователем данные, в том числе и материал, в модели компонентов сборки, было бы замечательно. Но он в отличии от ОК этого не делает. Но фейс его боле информативен. Всё ИМХО.
ОК работает из объектов спецификации сборки. В описании я про это писал. Это про фейс объектов СП.
Если вы хотите видеть много строк, то уменьшайте масштаб в объектах спецификации :)
То есть ловчее использовать ОК, работая с таблицей ОС? Я правильно понял?
Да. В объектах спецификации сборки типа можно и без ОК работать, там есть пара кнопок синхронизации с источником и с компонентом. Но я давно пришел к выводу, что их лучше не трогать. В разных версиях компаса какие я только глюки не видел с ними... Короче говоря, Вы можете попробовать самостоятельно работу по переименованию ОС штатными средствами и с помощью ОК. Макрос работает только с источником.
Заметил, что Ctrl-C и проч. работают с клавиатуры только на импортной раскладке.
Не плохо бы иметь возможность копировать-вставлять-вырезать клавишами не переключаясь с русского языка.
Это возможно сделать?
Возможно. Сделаем попозже.
Заметил, что если обозначение вида АБВГ-1,0.04.00.702, то нажатие стрелок не меняют циферки в группах.
Это никак не исправить?
Сейчас все, что после "-" считается исполнением. Возможно криво будет не только со стрелками, но и вставляться в исполнения. Не по-людски это АБВГ-1. Если придумаете алгоритм обработки, то сделать можно будет.
Цитата: Вират Лакх от 14.02.18, 11:43:18
..... Не по-людски это АБВГ-1. Если придумаете алгоритм обработки, то сделать можно будет.
Сиё: "АБВГ-1" данность сверху....
Полагаю, сейчас поиск "-" начинается с начала строки.
Может быть отлавливать знак "-" двигаясь по строке с конца?
Да тут, видимо, без разницы с какой стороны. Придется поле обозначения разбивать на две части, где первая часть - базовое обозначение, вторая - номер исполнения...
Цитата: Вират Лакх от 14.02.18, 11:51:11
Да тут, видимо, без разницы с какой стороны. Придется поле обозначения разбивать на две части, где первая часть - базовое обозначение, вторая - номер исполнения...
Нужно на деталь ориентироваться - если у модели есть исполнение, то его брать, если нет, то всё в обозначение.
Подумалось, может есть смысл дополнить кнопки получения и вставки свойств? Предлагаю организовать кнопки:
"Получить обозначение", "Получить Наименование",
"Получить Обозначение и наименование"
аналогично для вставки:
"Вставить Обозначение", "Вставить Наименование"
"Вставить Обозначение и Наименование"
А вот прямо сейчас получилось, что Вставил по всему дереву сборки Наименование "Кронштейн". :bang:
Так как брал свойства предыдущую детали и менял только последние цифры в Обозначения... 8-)
Сам виноват, но всё-таки :)
Цитата: IgorT от 14.02.18, 15:46:06
А вот прямо сейчас получилось, что Вставил по всему дереву сборки Наименование "Кронштейн". :bang:
Так как брал свойства предыдущую детали и менял только последние цифры в Обозначения... 8-)
Сам виноват, но всё-таки :)
Там же галки есть специально для таких случаев. Если у наименования галку отключить, то оно не будет записываться в деталь.
Точно! Теперь осознал. :) Спасибо!
Версия 1.3
1) Добавлены crtl+ч, crtl+с, crtl+м для вырезать, копировать, вставить (спасибо мне).
2) Переделана логика отделения номера исполнения от базового обозначения (спасибо ТрындецЪу). Теперь последовательное изменение номера базового обозначения стрелками работать будет и с дефисом. Аналогично и с разделением обозначения во время вставки в свойства источника компонента. Теперь -01.01 не считается исполнением с доп.номером, а рассматривается как часть базового обозначения. Ну и ладно )
P.S. Отдельные кнопки делать не будем. Места для них нет и времени свободного. Черезчур много кнопок будет.
З.Ы. Читайте ReadMe v1.1 внимательно (выложен ранее).
Первый пункт как добавить в раннюю версию (0.9) ?
Цитата: Умка от 15.02.18, 10:38:52
Первый пункт как добавить в раннюю версию (0.9) ?
После widget.bind('<Control-KeyRelease-Ocircumflex>', select_all) в трех местах добавить:
widget.bind('<Control-KeyRelease-division>', pkmcut)
widget.bind('<Control-KeyRelease-multiply>', pkmcut)
widget.bind('<Control-KeyRelease-ntilde>', pkmcopy)
widget.bind('<Control-KeyRelease-Ntilde>', pkmcopy)
widget.bind('<Control-KeyRelease-igrave>', pkmpaste)
widget.bind('<Control-KeyRelease-Igrave>', pkmpaste)
а лучше сделать как в новой версии процедурой.
а еще лучше Вам переделать балунные неработающие сообщения компаса на балуны винды (см. вложение) и пользоваться модифицированной таким образом новой версией (с удалением команды показать в дереве).
upd. Еще вынести процедуры pkmcut pkmcopy pkmpaste из def activate_flash_menu(e) в глобальность.
Замечено, что первый старт макроса тормозит компас на более-менее тяжелых сборках. Скажем, компас что-то усиленно делает около минуты, потом всё нормально. Что бы это могло значить?
Цитата: Вират Лакх от 15.02.18, 10:16:35
Версия 1.3
...
Что-то не вижу компилированных файлов? Плохо смотрю?
да я не положил. сами сделайте python -m py_compile %1, где %1 - это макрос .pyw (если название с пробелами, то имя файла в кавычках).
Интересная особенность Питона...
Пытался делать так: python -m py_compile "Обозначение компонентов v1.3.pyw"
Файл компилировался, но в Компасе ничего не запускалось. То есть команда при нажатии кнопки запуска в Компасе срабатывала, но окно программы "ОК v1.3" не появлялось.
Что оказалось. У меня на машине присутствует Питон 2.6 и Питон 2.7. Получается так, что при компиляции файл обрабатывал Питон 2.7.
И полученный скомпилированный файл не работал как надо. Но после компиляции Питоном 2.6 всё стало работать!
Может быть кому пригодится.
Спасибо Вират Лакх и ТрындецЪ! Очень удобная программа!
Революционная версия 1.4 :)
1) Отказались от балунных сообщений компаса, которые не работают на старых компасах и выглядят по-другому в 17-й версии.
Теперь все сообщения в строке сообщений внизу главного окна.
Умка, тестируй ) Должно все работать, кроме команд "показать в дереве". Остальные люди, тоже посмотрите внимательно, может добавить каких-то сообщений, чтобы старые стерлись и информативнее было.
2) В связи с п.1 убрал автоматическое скрытие окна программы при измерении. Если кому надо, то скроет самостоятельно. После получения правильной геометрии окно восстановится. У меня давно эта фишка вызывала сомнения. Как теперь сделано как-то нагляднее получается.
3) Исправлен косяк с циклом процедуры Измерения. Ошибка должна быть в версиях с 1.0 до 1.3. После команды Стоп цикл не останавливался.
Замечено, что если взять свойства детали, у которой было установлено Б/Ч, то галка на материале не наблюдается.
ИМХО она должна приезжать с модели, если она была раньше там установлена.
Сейчас получается, что галка улетает и материал не прописывается в СП :(
Косяки:
1.При команде "Измерить" выползает функция "Команда Усечение кривой".
2. Прямоугольники не измеряются.
3. Не создаются объекты спецификации.
4. Команды "показать в дереве" не вижу.
Кv13 WXPsp3
Цитата: IgorT от 16.02.18, 13:06:54
Замечено, что если взять свойства детали, у которой было установлено Б/Ч, то галка на материале не наблюдается.
ИМХО она должна приезжать с модели, если она была раньше там установлена.
Сейчас получается, что галка улетает и материал не прописывается в СП :(
Я не смог воспроизвести проблемы. Как вы добились того, чтобы галка материала сама пропала? Её отключить может только юзер.
Цитата: ТрындецЪ от 16.02.18, 13:46:01
Я не смог воспроизвести проблемы. Как вы добились того, чтобы галка материала сама пропала? Её отключить может только юзер.
Дело было так ....
ОК была запущена при выделенной модели всей сборки. Галки б/ч у меня там обычно нет.
Далее выделяю нужную мне деталь, которой присвоено Б/Ч. После нажатия кнопки "Получит свойства" в программе ОК свойства детали попадают в окно программы. Но галка от туда не приезжает. Попробуйте у себя.
Цитата: IgorT от 16.02.18, 13:57:43
Дело было так ....
ОК была запущена при выделенной модели всей сборки. Галки б/ч у меня там обычно нет.
Далее выделяю нужную мне деталь, которой присвоено Б/Ч. После нажатия кнопки "Получит свойства" в программе ОК свойства детали попадают в окно программы. Но галка от туда не приезжает. Попробуйте у себя.
Всё дело в том, что по умолчанию (при запуске) галка отключена и не включится сама, пока юзер этого не сделает.
Вират Лакх сделал это для того, как мне кажется, чтобы ненароком не поменять материал по невнимательности.
Upd: Галка не кочует от детали к детали, а живет самостоятельной жизнью.
Повторил опыт ещё раз.
Выбрал деталь без б/ч с модели сборки .
Полeчил свойства детали в ОК. Галки нет. Всё хорошо.
Теперь не закрывая ОК выбираю в дереве сборки деталь со свойством б/ч.
Получаю её свойства в ОК. Галки на материале нет. И если теперь нажать "Передать свойства" мы получим с СП эту деталь без материала.
Не понятно, почему ОК не прочитала, что у детали уже была галка на материале?
Цитата: IgorT от 16.02.18, 14:15:47
Не понятно, почему ОК не прочитала, что у детали уже была галка на материале?
ОК прочитала, что в наименовании был материал, но никак это не отразила.
Нужно поработать ещё над этим моментом, теперь я понял что Вы хотите от неё.
Нужно, чтобы при считывании, если у детали в наименовании есть материал, то поле "материал" становилось активным и галка появлялась. Обсудим и доработаем.
Здесь ещё такой момент присутствует.
Если запускать ОК по детали, у которой уже есть галка на материале, то она успешно появляется в окне ОК.
Но если с начала выбрать деталь без Б/Ч и получит её свойства, а потом взять свойства у детали Б/Ч, то галка материала не попадает в ОК.
Цитата: IgorT от 16.02.18, 14:37:46
Здесь ещё такой момент присутствует.
Если запускать ОК по детали, у которой уже есть галка на материале, то она успешно появляется в окне ОК.
Но если с начала выбрать деталь без Б/Ч и получит её свойства, а потом взять свойства у детали Б/Ч, то галка материала не попадает в ОК.
Да, для первого запуска была такая фишка, а для последующих считываний нет. Поправил. Тестируйте.
P.S: Только правильнее выражаться не "детали, у которой уже есть галка на материале", а "детали, у которой есть материал в наименованиии",т.к. именно строку с материалом ищет программа в наименовании.
У меня что-то случилось с Питоном 2.6 :(
Не желает компилировать "Обозначение компонентов v1.4.1" :`(
Может быть вложите компилированный файл (Питон 2.6)?
ругается вот так:
Цитата: IgorT от 16.02.18, 15:57:24
У меня что-то случилось с Питоном 2.6 :(
Не желает компилировать "Обозначение компонентов v1.4.1" :`(
Накой вам его компилировать? Запускайте так.
:o
Я прошлые версии на кнопочку назначал :shu:
Хотелось бы и сейчас.
Но "что-то пошло не так".... Питон дурит.
Цитата: IgorT от 16.02.18, 16:15:23
Я прошлые версии на кнопочку назначал
Хотелось бы и сейчас.
Но "что-то пошло не так".... Питон дурит.
Расширение .*pyw никак не мешает добавить макрос в утилиты.
И как это сделать?
Назначил на кнопку Утилит файл "Обозначение компонентов .pyw"
Нажимаю кнопку - ничего не происходит.
Если на такую же конопку в утилитах назначен "Обозначение компонентов .pywc" , программа ОК запускается.
Цитата: IgorT от 16.02.18, 16:31:16
Назначил на кнопку Утилит файл "Обозначение компонентов .pyw"
Нажимаю кнопку - ничего не происходит..
Скорее всего у Вас в системе расширение pyw не ассоциировано с программой pythonw.exe
У меня вот наоборот: pywc не знает какой программой выполняться.
Версия 1.5.
Цитата: Умка от 16.02.18, 13:24:07
Косяки:
1. При команде "Измерить" выползает функция "Команда Усечение кривой".
2. Прямоугольники не измеряются.
3. Не создаются объекты спецификации.
4. Команды "показать в дереве" не вижу.
Кv13 WXPsp3
1. и 4. - это одно и то же. Вы забыли, как перед application.ExecuteKompasCommand(40524, 1) ставили # ? Убрал эту фишку.
2. С версии 1.0 введена проверка прямоугольности. Сейчас вместо == поставил <= 1e–6. Теперь должно работать всегда и везде.
3. Объекты спецификации в деталях не создаются. Если есть в сборке объекты спецификации и деталь признана БЧ, то в формат и примечание вписываются или удаляются БЧ и кг. Видимо, опять у вас недоразвитость API сказывается. Могу пока посоветовать Авторедактор. В отладчике какие-то ошибки пишет?
---------------
IgorT, вам зачем два питона на компе? Теперь путаетесь. Переводите в байт-код на одном, запускаете на другом... Так как вы 2.7 ставили позже (?), то pyw, видимо, хочет запуститься на нем. Но, значит, программа не подходит для него в изначальном виде. Свяжите pyw с pythonw.exe версии 2.6.
5. Исправлено поведение галочки внесения материала в наименование при получении свойств.
6. Подправлен вывод строки сообщений.
7. Исправлена мелкая ошибка в анализе четырехугольника при измерении.
Цитата: Вират Лакх от 16.02.18, 21:29:54
....
---------------
IgorT, вам зачем два питона на компе? Теперь путаетесь. Переводите в байт-код на одном, запускаете на другом... Так как вы 2.7 ставили позже (?), то pyw, видимо, хочет запуститься на нем. Но, значит, программа не подходит для него в изначальном виде. Свяжите pyw с pythonw.exe версии 2.6.
5. Исправлено поведение галочки внесения материала в наименование при получении свойств.
6. Подправлен вывод строки сообщений.
7. Исправлена мелкая ошибка в анализе четырехугольника при измерении.
Я сам не помню как они два у меня на компе оказались. Комп служебный и прав админских у меня нет. Так в конторе принято.
Так что почему два - загадка великая есть.
Сейчас вот на домашнем компе экспериментирую.
Прекрасно запускается компилированный файл ОК 1.5 :) ("Обозначение компонентов v1.5.pywc")
Точно так же прекрасно запускается файл "Обозначение компонентов v1.5.pyw" по нажатию организованной кнопки утилит.
Осталось разобраться, что предпочтительней "*.pyw" или "*.pywc"?
И понять, почему на служебном не работает :?:
Вообще, ребята, огромное спасибо за ваш труд! Эта программа очень полезна в каждодневной будничной работе конструктора!
Вот бы ещё волшебный "Знак позиции" создали!!!
Цитата: IgorT от 16.02.18, 22:14:52
Осталось разобраться, что предпочтительней "*.pyw" или "*.pywc"?
Вообще, ребята, огромное спасибо за ваш труд! Эта программа очень полезна в каждодневной будничной работе конструктора!
Что предпочтительней - по большому счету без разницы, как Вы сами и ощутили.
Если у кого-то есть благодарность не только словами, то я могу дать реквизиты ТрындецЪа. Он создал эту программу, а я только причесал. Чтобы ему веселее работалось над остальными интересными и полезными программами.
Цитата: Вират Лакх link=topic=30640.msg247899#msg247899 date=1518843244
Он создал эту программу, а я только причесал.
/quote]
Ты слишком принижаешь объем проделанной тобой работы. Там половина кода твоя и лучше тебя в ней сейчас никто не разбирается. Для человека, который до этого не программировал, ты очень быстро научился всему.
Можно кнопку проверки синхронизации выделить в отдельный скрипт?
Проверка синхронизации компонентов v1.0 - см. архив.
Замечена особенность OK v1.5 :(
Вот так программа получает свойства детали, у которой уже был прописан материал как у Б/Ч.
Можно исправить?
Не там .replace("@/","") поставил.
Версия 1.6:
1) Исправлен описанный выше косяк.
2) Немного переделан вывод окон при проверке компонентов и объектов спецификации (шрифт в кнопках и убрал возможность менять размеры окон).
Цитата: IgorT от 16.02.18, 22:14:52
Вообще, ребята, огромное спасибо за ваш труд! Эта программа очень полезна в каждодневной будничной работе конструктора!
IgorT, спасибо за денежное вознаграждение! Перевод получен и поделён "по братски" между создателями (мной и Вират Лакхом)!
Версия 2.0. Описание программы ReadMe будет позже.
1) Оптимизация кода.
2) Возможность редактировать материал, включая измерение геометрии (например, толщины листа).
3) Вызов файла graphic.dns и выбор материала (с плотностью и штриховкой) или только значение плотности (для соответствующего поля).
4) Вызов списка кнопок выбора стилей штриховки с номерами от 0 до 14.
5) Фон поля стиля штриховки для локальных компонентов меняется и выдается сообщение, что стиль штриховки может быть прочитан неправильно (из-за ошибки API + Компас)
6) При чтении свойств модели проверяется синхронизация МЦХ с источником компонента и выдается сообщение. И добавлено в процедуру Проверки по всем компонентам.
7) Теперь производится чтение материала ИСТОЧНИКА компонента (кроме локальных компонентов при отключенной синхронизации МЦХ).
8) Расширены возможности измерений геометрии (длина любого ребра, диаметры неконцентрических окружностей для "шайб" с отверстием, получение габаритного прямоугольника). Габариты определяются в системе координат плоскости, то есть, если прямоугольник изначально изобразить в эскизе повернутым, то габариты выдаст вдоль осей X и Y, и они не будут соответствовать размерам этого прямоугольника.
9) Снятие цвета фона полей ввода-вывода "неправильных" компонентов при нажатии на клавиатуру в этом поле.
10) Добавлен пункт в контекстном меню "Вставить имя файла".
11) Добавлено сообщение при чтении свойств: "Использование кода документа в моделях может вызвать ошибки с многострочным наименованием" (ошибка Компас).
12) Исправлено неправильное чтение стиля штриховки исполнений компонента.
13) Устранение других мелких недостатков.
Стоп! Ахтунг! Версия 2.0 кривая. Вот версия 2.1 вроде нормально должна работать :shu:
Эксплуатация в боевых условиях выявила два недостатка версии 2.1, которые исправлены в версии 2.2:
1) Не к месту срабатывал запрос на изменение материала локального компонента пользователем вручную. Решилось округлением получаемой плотности: round(iPart7.Density, 3)
2) Компас по-разному ведет себя с массой компонента, у которого вырезали в сборке отверстие и он стал из-за этого легче. Если включена синхронизация МЦХ с источником, то показывает массу источника без выреза; если установлен в МЦХ компонента расчет по плотности, то при той же плотности компас дает массу уже с вырезом, т.е. которая легче. Нам масса нужна для БЧ исходная при записи её в примечание в спецификации. И это еще не всё. Даже при включенной синхронизации МЦХ с источником, когда мы видим в свойствах модели и в информации об объекте массу источника, IPart7.Mass, IMassInertiaParam7.Mass и IPart.GetMass() (через IEmbodiment не пробовал) выдавали тоже резаную массу. Помог способ через IPropertyKeeper.
Версия 2.3. Исправлены две ошибки в работе программы.
Версия 2.4. Небольшое обновление:
1) Добавлены сообщения в нижней части окна программы для функции вставки имени файла в название. И теперь еще имя файла вставляется, удаляя в поле старое значение.
2) Для функции чтения свойств компонента добавлен возврат к объектам спецификации. Если открыта сборка, её объекты спецификации и ассоциативный чертеж сборки, то при чтении свойств объекта спецификации компас перекидывает с окна ОС на окно сборки. При записи свойств этот возврат был сделан, теперь похожая ситуёвина для чтения.
Версия 2.5 (описание потом когда-нибудь):
1) Переработано окно программы: стало компактнее за счет удаления лишних текстов и кнопки Вставить и закрыть.
2) Исправлена давняя ошибка с очисткой на СКМ полей ввода.
3) Для полей ввода добавлены команды Удалить слева и Удалить справа (см. контекстное меню на ПКМ). Удаление от мигающего курсора.
4) Измерения геометрии теперь на клавиши F11 и F12.
5) Добавлена новая функция получения материала из библиотеки МиС. При вызове команды на соответствующую кнопку вызывается основное окно справочника с разделом Сортаменты для выбора материала. Если материал будет выбран, то включается (если была выключена) галочка Материал, изменяющая материал в источнике. Цвет материала не учитывается. Вызов команды на клавиатуре - F10.
*) И немного подправлена работа команд Ctrl+X, Ctrl+C, Ctrl+V.
при вызове измерения ошибка:
Traceback (most recent call last):
File "C:\Program Files\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__
return self.func(*args)
File "C:\Program Files\Python26\lib\lib-tk\Tkinter.py", line 495, in callit
func(*args)
File "C:\Program Files\ASCON\Îáîçíà÷åíèå êîìïîíåíòîâ v2.5.pyw", line 878, in <lambda>
root.after(200, lambda: selection()) # поÑле задержки Ð¼Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€Ð¸Ñ,ÑŒ выделенноÑÑ,ÑŒ объекÑ,а
File "C:\Program Files\ASCON\Îáîçíà÷åíèå êîìïîíåíòîâ v2.5.pyw", line 793, in selection
xyzA = ksLineSeg3dParam.GetPointFirst() # КоординаÑ,Ñ‹ первой Ñ,очки ребра
File "C:\Program Files\Python26\lib\site-packages\win32com\gen_py\0422828C-F174-495E-AC5D-D31014DBBE87x0x1x0.py", line 8792, in GetPointFirst
, y, z)
com_error: (-2147352571, '\xcd\xe5\xf1\xee\xe2\xef\xe0\xe4\xe5\xed\xe8\xe5 \xf2\xe8\xef\xee\xe2.', None, 1)
Цитата: Умка от 29.10.18, 10:38:53
при вызове измерения ошибка:
Что пытаетесь мерить? Длину отрезка?
Отрезок/объект предварительно выделен или нет?
данные в объекты спецификации при редактировании в окне не вставляются и не удаляются
прямоугольники не измеряются и вылет через 1-2 раза.
К13WXPsp3
1) Скиньте свой прямоугольник, напишите, как указываете.
2) В файле SDK.chm поищите GetPointFirst. Есть ли он там вообще. Если есть, то скиньте сюда описание.
upd
3) Попробуйте пару вариантов. Найдите xyzA и xyzB и впишите в скобки (0, 0, 0) или (0.0, 0.0, 0.0) типа того:
xyzA = ksLineSeg3dParam.GetPointFirst(0, 0, 0)
xyzB = ksLineSeg3dParam.GetPointLast(0.0, 0.0, 0.0)
Отпишитесь мне, какой вариант будет работать. Сейчас делаю версию 2.6, внесу туда исправление.
ksLineSeg3dParam::GetPointFirst
ILineSeg3dParam::GetPointFirst
Интерфейс...
Получить координаты первой точки отрезка.
Синтаксис Automation:
BOOL GetPointFirst (double * x, double *y, double *z);
Синтаксис COM:
BOOL GetPointFirst (double * x, double *y, double *z);
Выходные параметры:
x, y, z
- координаты первой точки отрезка.
Возвращаемое значение:
TRUE
- в случае успешного завершения,
FALSE
- в случае неудачи.
Примечание:
Значения x, y, z возвращаются в системе координат компонента.
3) оба варианта работают
Измерения стали выполнятся, за исключением высоты цилиндра.
данные в объекты спецификации при редактировании в окне не вставляются и не удаляются
По цилиндру замените две строки point_1 и point_2 на эти:
point_1 = ksSurface.GetPoint(0, ksSurface.GetParamVMin(), 0, 0, 0)
point_2 = ksSurface.GetPoint(0, ksSurface.GetParamVMax(), 0, 0, 0)
Добавилась vmin, т.к. скругление у основания цилиндра не учитывалось.
И отпишитесь о результате.
"данные в объекты спецификации при редактировании в окне не вставляются и не удаляются" - в каком окне? В объектах спецификации? Тоже текст ошибки сюда скидывайте.
замеры выполняются все без вылетов, скругления и фаски не учитываются (это правильно).
данные в объекты спецификации не вставляются и не удаляются во всех случаях сборки и в деталях. Пайтон ошибки не показывает.
Эти скругления учитывались бы как-то однообразно, а то с одной стороны берется, с другой - нет... Поэкспериментируйте, если хотите. Я оставил так, как надежно показывает. То есть с фасками/скруглениями "короче" цилиндр получается.
Ошибки не показывает, т.к. там try стоит на строках с 419 до 458.
Иначе на этой функции косяки в неподходящих случаях вылазят:
ObjectSpc = Description.BaseObjects.GetSpecificationObjectsForGeom(pe[i], False, 20, 0)[0]
Вот ОК2.5 без try. Пробуйте.
Traceback (most recent call last):
File "C:\Program Files\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__
return self.func(*args)
File "C:\Program Files\Python26\lib\lib-tk\Tkinter.py", line 495, in callit
func(*args)
File "C:\Program Files\ASCON\Îáîçíà÷åíèå êîìïîíåíòîâ v2.5 wo try.pyw", line 878, in <lambda>
root.after(200, lambda: selection()) # поÑле задержки Ð¼Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€Ð¸Ñ,ÑŒ выделенноÑÑ,ÑŒ объекÑ,а
File "C:\Program Files\ASCON\Îáîçíà÷åíèå êîìïîíåíòîâ v2.5 wo try.pyw", line 793, in selection
xyzA = ksLineSeg3dParam.GetPointFirst() # КоординаÑ,Ñ‹ первой Ñ,очки ребра
File "C:\Program Files\Python26\lib\site-packages\win32com\gen_py\0422828C-F174-495E-AC5D-D31014DBBE87x0x1x0.py", line 8792, in GetPointFirst
, y, z)
com_error: (-2147352571, '\xcd\xe5\xf1\xee\xe2\xef\xe0\xe4\xe5\xed\xe8\xe5 \xf2\xe8\xef\xee\xe2.', None, 1)
Измерения не выполняются
Ну так поставьте нули, где нужно. Вы же знаете. Я скинул версию 2.5 без каких-либо изменений, кроме try, для испытания вами объектов спецификации. Всё новое и исправленное будет в версии 2.6.
при редактировании отдельной детали БЧ данные в объект спецификации не вставляются,
при редактировании детали в контексте сборки вставка ОС выполняется
в остальном все измерения выполняются , без учёта фасок и скруглений.
Объект спецификации в отдельном документе m3d - это рудимент, который отпал в 18-й версии. В силу того, что информация в ОС детали может отличаться от свойств этой же детали, считаю ОС в m3d потенциальным злом, которое может всплыть когда угодно. Поэтому уже давно в этой программе БЧ и кг прописываются только в сборках. Кроме этого, у редактируемой на месте детали, имеющей в сборке ОС, тоже не прописываются БЧ и кг, т.к. хз, как до них добраться при включенном режиме редактирования на месте.
Try надо оставить, с ним тоже должно работать. Он защищает от ошибок при получении ОС, из-за которых программа дальше не работает. В новой версии добавлю сообщение в строке информации программы, которое будет сигнализировать о таком событии. Версия 2.6 не за горами.
БЧ и кг в сборке не прописываются при любом методе редактирования!
Расположение окна программы заморожено на одном месте, при перезапуске место не запоминает.
Цитата: Умка от 30.10.18, 10:30:59
при редактировании детали в контексте сборки вставка ОС выполняется
А это вы про что? Про то, что меняется Обозначение и Наименование? Тогда это не вставка ОС, а изменение свойств источника, затем компонента, потом объекта спецификации сборки.
Чтобы прописались БЧ и кг должно выполняться несколько условий:
1) это не верхний компонент (сам документ);
2) не редактирование на месте;
3) есть в сборке текущее описание спецификации (есть объекты СП);
4) нужный ОС и компонент связаны (у ОС есть геометрия);
5) деталь считается БЧ: включена галочка вставки материала в наименование или поле габаритов не пустое;
Еще берется первая копия данного компонента, чтобы прописалось в первую копию ОС, а не в скрытую. Возможно, тут криво работает. Попробуйте Показать все объекты в СП после вставки. Может оно прописывает не в первую копию.
Переименуйте расширение pyw на py.
После ObjectSpc = Description.BaseObjects.GetSpecificationObjectsForGeom... на новой строке напишите:
print "ObjectSpc: ", ObjectSpc
Будет ли там в черном окне при вставке отображаться типа того <win32com.gen_py.69AC2981-37C0-4379-84FD-5DD2F3C0A520x0x1x0.ISpecificationBaseObject instance at 0x80881544>
Спасибо за проделанную работу. С К13+WXPsp3 думаю не стоит продолжать! ОС вставляются с переменным успехом/неудачей. Испортилась структура файлов, открытых в другом окне! Пора бы переходить на новую версию К..., но политика организации всегда верна! (
Версия 2.6. Исправление ошибок и дальнейшее развитие программы.
Что изменилось - рассказывать долго и нет времени вспоминать. Короче говоря, эта версия лучше предыдущих.
Цитата: Вират Лакх от 07.11.18, 09:53:44
Что изменилось - рассказывать долго и нет времени вспоминать. Короче говоря, эта версия лучше предыдущих.
От себя и от всех пользователей прошу освежить справку о программе :writer:. Даже я уже не знаю, как с ней работать, и что она умеет :cl:, хоть я и сам начинал писать этот код. :bang:
Для начала сделал встроенную справку под кнопкой "?" и горячей клавишей F1. Там плотным текстом написано, для чего каждый элемент окна программы. Плюс читайте меню на ПКМ на полях ввода-вывода (и горячие клавиши оттуда).
Одно из изменений: шаблоны пришлось всё-таки переставить с двойного клика левой кнопкой мыши на двойной клик средней кнопкой мыши. Тем самым мы получили выделение текста на ЛКМх2 и ЛКМх3 с его последующим копированием на СКМ на другом поле и отсутствие глюков из-за этого встроенного функционала полей ткинтера.
Позже когда-нибудь думаю поразбираться с телами в сборке. Во-первых, в 18-м компасе по ним создаются объекты спецификации; во-вторых, всякие металлоконструкции делают свои объекты телами, а ОС создают не так, как хотелось бы. С удалением описаний СП эти объекты удаляются... Надо бы включить в проверку наличие в сборке тел и их ОС. Тогда справку пошире допишу, горячие клавиши, еще что-нибудь типа порядка работы. А пока общий принцип можно почитать в справке от версии 1.1: http://forum.ascon.ru/index.php?action=dlattach;topic=30640.0;attach=76926
Отличие данного старого описания от современной работы программы:
1) Теперь материал можно по-всякому менять.
2) Проверяется синхронизация МЦХ (в том числе материал) с источником.
3) Масса деталей БЧ с вырезами в сборке не должна быть меньше.
4) Измерения с выдачей только значения перемещено с F10 на F11.
5) Окно программы теперь не прячется при измерении.
6) Вызов шаблонов на ЛКМх2 -> СКМх2.
7) Остальные горячие клавиши пока можно почитать в тексте кода в конце программы и в процедуре entry_bind(wiget). Но опыт использования программы говорит, что клавиатурные клавиши особо не нужны.
---------------
Интересно узнать, как прога работает на к17 и к18.
Для Умки и у кого 13-й (sp1 ?) компас: если не включать галочку БЧ (редактирование объектов спецификации деталей без чертежа - запись в формат БЧ и массы в Примечание), то спецификацию программа не трогает, и глюков быть не должно.
У меня вопрос к владельцам старых компасов типа v13. Как выглядит graphic.dns внутри?
Типа того: Материал = 7.85|0 ? Или нет штриховки, указанной после символа "|"?
upd. Вопрос снят.
Версия 2.7:
0. Объем кода :w: 1500 строк плотным текстом :cl: :o :%:
1. Новая функция: открытие на кнопку 'М' нажатием на СКМ, на свободном поле через ПКМ и F4 файла graphic.dns в привязанной к нему программе или блокноте.
2. Новая функция: добавление в файл graphic.dns материала из окна программы через ПКМ и F2.
3. Теперь не будет разделения версий программы для питона 2.х и 3.х - один универсальный код.
4. Прописаны разные меню на ПКМ для полей ввода-вывода и остального пространства окна. Весь функционал теперь виден на ПКМ-менюшках.
5. Оптимизация кода и добавление сообщений в нижней строке окна.
6. Проверка перенесена с ctrl+= на F6.
7. Остановка Измерения на клавиши F11 и F12. Получается удобство и исключение ситуации множественного запуска Измерения.
Спасибо ТрындецЪ за участие!
Кто в работе использует эту программу? В какой версии КОМПАСа Вы работаете с ней?
Известна ошибка с измерениями в новых версиях, но никто о ней ещё не заявил. Складывается впечатление, что программой пользуются 2-3 человека, включая Вират Лакха.
Вообще, ветка сейчас неправильно называется. Программа уже давно переросла это название "Библиотека для деталей БЧ". Видимо, мало кому нужны детали без чертежа в 3D. А проходящие мимо ненужного названия в разделе "Биржа прикладных разработок" не знают о сегодняшних её способностях. Возможности переименовать всю тему нет. Или можно новую создать, или я сам буду пользоваться программой с удовольствием )
я пользовался, потом получил новый пк и забыл про нее, так много моделирую и мало черчу... но она реально спасет в скорости.. принимаются ли предложения по улучшению?
Принимаются. Сейчас пишется обработка тел в сборке, проверка тел со спецификацией. Была мысль автоматической расстановки обозначений по компонентам.
как это работает?
"БЧ" и масса в СП заносится автоматически?
Если включить эту галочку, то при наличии в сборке описания спецификации, наличии в нем у выбранного компонента объекта спецификации ему в колонки формат и примечание пропишутся БЧ и кг в момент нажатия кнопки Вставить или Enter. Но не всегда. Компонент должен считаться деталью без чертежа:
1. Компонент - это деталь, а не сборка.
2. В окне программы в момент вставки в поле габаритов (самое нижнее) есть текст или включена галочка добавления в наименование материала.
Почитайте ответ #300 - там условия подробнее.
То есть вы можете включить эту галку, а программа сама будет ставить и убирать БЧ и кг там, где нужно.
Без нее вставка происходит несколько легче, т.к. мельше дел нужно сделать. Тем, кто пользуется Авторедактором, она не нужна, ибо лучше из него сразу всем расставить в конце оформления.
Вот в этих таблицах
https://ssopromat.ru/sortament
Как-то не внимательно, не увидел длины, для составления групповых чертежей с массой изделия и может быть 3D моделью....
Этой группы сортаментов...
Вместо Б/Ч библиотек для снятия проблем со спецификацией....
А, вот термин Компонент Конструкторской - проектной документации, ну не нашел в ЕСКД...
Прошу прощения если что не так...
Цитата: Вират Лакх от 20.11.18, 03:37:45
Тем, кто пользуется Авторедактором, она не нужна, ибо лучше из него сразу всем расставить в конце оформления.
это как, не совсем понял? это при использовании автоматической спецификации, можно всем поставить бч, если к ним не привязан чертеж?
Не совсем так. При использовании спецификации любой - ручной или по модели - можно расставить БЧ и кг тем объектам спецификации, которые попадают под настроенные критерии БЧ (условия, при которых программа считает ос бч деталью). В ручной СП надо массу внести в доп.колонку самому предварительно. Авторедактор изначально создавался не для привязки чертежей к ос. Но у него есть недописанная функция автоматической привязки чертежей.
Здравствуйте.
Хочу попросить - подытожте возможности библиотеки.
Надоело бороться со спецификацией.
В двух словах так: (еще читаем содержимое окна на кнопку ? или F1 и ответ #304)
1) а) Когда у нас новая сборка или из старой надо переделать на новую сборку, нужно всем составляющим изменить обозначения и наименования. Особенно при системе обозначений вида абвг.000000.000, абвг.000000.001 это легко сделать с помощью программы. В любом случае программа записывает в источник компонента данные. То есть без этой программы нам приходится запускать редактирование на месте или открывать в окне подсборку или деталь, вызывать свойства, вносить данные может набирать, может из буфера обмена, закрывать свойства и окно или редактирование на месте. Слишком много дел для того, чтобы внести данные в компонент. Особенно это чувствуется, когда прописка данных идет друг за другом на готовой сборке. Программа же позволяет, находясь в сборке, легко, просто выделив компонент (а в новой версии будет еще тело) в дереве, в объектах спецификации или геометрию, нажатием на одну кнопку внести данные: обозначение, наименование и материал, кроме цвета.
б) Для чего программа создавалась. Легко можно оформить запись детали без чертежа. Без программы нам приходится копипастить материал и вставлять его в наименование, прописывать там собаки-дроби, потом измерять, запоминать, вызывать свойства, вспоминать длину или другой размер детали, туда его вписывать, добавляя в конце мм, плюсом (что еще хлеще) допуски к размерам. Из свойств это сделать очень трудно. Из объектов спецификации - косяки с рассинхронизацией, в каких-то версиях и путях создания спецификации кракозябры и прочее обеспечены. Легко можно создать и сохранить свой материал, внести его компонентам.
2) Отдельной темой программы является проверка у модели всех этих синхронизаций: галочки обозначение и наименование у компонентов, синхронизация мцх компонентов с источником, синхронизация объекта спецификации с компонентом, есть ли у объекта спецификации подключенная геометрия или это возможно левый объект, например, пришедший из плоского чертежа при вставке СИ и сохранении 2D, включена ли галочка у компонентов и тел на создание объекта сп (а то вдруг у компонента отключил и забыл или созданным металлоконструкциями телам после пересоздания с нуля СП не создал объекты спецификации).
Короче говоря, проверка узких мест, где невнимательность юзера или кривота компаса может навредить. Описанная расширенная проверка будет в версии 2.8. Вернее, она уже есть. Сейчас пишется чтение и запись свойств тел в сборках.
В чем заключается ваша борьба со спецификацией? У меня все отлично, особенно с оформлением её в файле cdw рядом со сборочником. Единственно, напрягает раздел Материалы с как попало работающей шизонутой галочкой синхронизации наименования с материалом. И то, это решаемо нашей программой.
"В чем заключается ваша борьба со спецификацией?" СП 10 листов + 4 исполнения как правило. У нас наработки в 16 версии и при создании объектов СП -
1. много лишних строк и
2. кол-во деталей может не совпадать (больше).
3. Пропадают "галочки включить СБ/деталь в СП.
4. БЧ переносится в примечание, а
5. масса с актуальной ссылкой и кг заданной точности не прописывается автоматически в примечании.
6. Дополнительное требование фирменное (стандарт предприятия) прописывать мелко в правом углу номер страницы ККД.
7. Перенос строки в наименовании @/ не всегда срабатывает.
Цитата: Вират Лакх от 21.11.18, 08:03:37
... напрягает раздел Материалы с как попало работающей шизонутой галочкой синхронизации наименования с материалом.
8. Да, и с этим сталкиваемся.
1. Запуск программы pyw - библиотеки.png Повторение.
2. Спасибо ТрындецЪ за PortablePython_3.2.5.1.exe http://forum.ascon.ru/index.php/topic,31668.msg258317.html#msg258317
и наставления по запуску.
Обозначение компонентов и тел v3.0
1. Чтение и запись свойств тел в сборках и подсборках аналогично работе с компонентами. Тела в деталях не обрабатываются.
2. Расширена проверка сборки и её объектов спецификации, улучшено включение синхронизации объектов спецификации с их геометрией.
3. Новая кнопка "S" включает всем базовым объектам спецификации Синхронизацию с документом-владельцем.
4. Теперь измерения геометрии в Компас v18 работают.
5. Добавлена отмена измерения геометрии на Esc и через ПКМ.
6. Меню материала на ПКМ со свободного пространства окна переставлено на поля материал.
7. Добавлено в меню на ПКМ: "Добавить в буфер" и "Удалить".
8. Теперь меню на ПКМ адаптивное.
9. Улучшено получение нужного экземпляра компонента для записи "БЧ" и "кг" в первый из его копий объект спецификации.
10. Исправлены другие некоторые ошибки (в т.ч. совместимость программы для python 2.x и 3.x), оптимизирован код программы.
Коллеги, поздравляю Вас с Новым годом и дарю Вам свеженаписанные 1800 строк кода этой программы.
Это финальная версия. Нового функционала скорее всего не будет, а только незначительные улучшения, исправление ошибок и совместимость с различными версиями Компас-3D и Python.
На написание программы было потрачено очень много личного (вечернего, ночного, утреннего) и рабочего времени. Поэтому, если кому-то программа нравится, приму благодарность не только кнопкой на форуме, чтобы хоть как-то компенсировать семье занятое время.
данная версия не запускается (Компас V16.1.4х64, Python2.6)
Цитироватьданная версия не запускается (Компас V16.1.4х64, Python2.6)
Если поподробнее то как-то так
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
RESTART: C:\Users\USER\Desktop\Обозначение компонентов и тел v3.0\Обозначение компонентов и тел v3.0.pyw
Traceback (most recent call last):
File "C:\Users\USER\Desktop\Обозначение компонентов и тел v3.0\Обозначение компонентов и тел v3.0.pyw", line 1547, in <module>
import pythoncom, re, sys, math, win32gui, ctypes, win32con, os, subprocess
ImportError: No module named pythoncom
Бывает, что установленная с Компасом связка Python + pywin32 не работает или перестает в какой-то момент работать. Проблема pythoncom - это ошибка в pywin32. Нужно переустановить его.
Вот сайт, откуда брать дистрибутивы pywin32: https://github.com/mhammond/pywin32/releases
Для питон 2.6 последняя версия pywin32 на сегодня (не забываем про разрядность x32 или x64):
https://github.com/mhammond/pywin32/releases/download/b221/pywin32-221.win-amd64-py2.6.exe
А лучше деинсталлировать весь питон 2.6 с его pywin32, удалить папку C:\Python26 и поставить с нуля последние на сегодняшний день питон + пивин32. Если Вы используете макросы, написанные для версии 2.x, то это будет (устанавливать в этой последовательности):
1) Python 2.7.15 для x64: по этому адресу https://www.python.org/downloads/release/python-2715/
берем ссылку https://www.python.org/ftp/python/2.7.15/python-2.7.15.amd64.msi
2) pywin32 для x64:
https://github.com/mhammond/pywin32/releases/download/b224/pywin32-224.win-amd64-py2.7.exe
Если макрос не будет запускаться обычным двойным кликом, то укажите windows, что файлы .pyw нужно запускать программой pythonw.exe
"Обозначение компонентов и тел v3.0" должен работать на любом питоне, начиная с 2.6, заканчивая актуальным 3.7.2. Если Вам кажется, что программа где-то работает неправильно, то у файла макроса измените расширение .pyw -> .py Тогда при запуске двойным кликом будет еще чёрное окно. В нём будут отображаться ошибки.
Цитироватьу файла макроса измените расширение .pyw -> .py Тогда при запуске двойным кликом будет еще чёрное окно. В нём будут отображаться ошибки.
черное окно запускается на несколько секунд и закрывается... ошибок не вижу.
Предыдущие версии библиотеки для деталей БЧ запускались и работали
Цитата: Вират Лакх от 30.12.18, 20:12:54
А лучше деинсталлировать весь питон 2.6 с его pywin32, удалить папку C:\Python26 и поставить с нуля последние на сегодняшний день питон + пивин32. Если Вы используете макросы, написанные для версии 2.x, то это будет (устанавливать в этой последовательности):
1) Python 2.7.15 для x64: по этому адресу https://www.python.org/downloads/release/python-2715/
берем ссылку https://www.python.org/ftp/python/2.7.15/python-2.7.15.amd64.msi
2) pywin32 для x64:
https://github.com/mhammond/pywin32/releases/download/b224/pywin32-224.win-amd64-py2.7.exe
Если макрос не будет запускаться обычным двойным кликом, то укажите windows, что файлы .pyw нужно запускать программой pythonw.exe
снес Python 2.6 и переустановил Python 2.7 - не помогло, программа Обозначение компонентов и тел v3.0 - не запускается. Версия программы Обозначение компонентов v2.7 - запускается и работает
Интересный случай. Я вам подготовлю другую версию макроса с выводом сообщений на черный экран. Напишите мне свою почту, давайте в диалоге выясним, почему не работает. Это где-то в начале кода при подключении компаса...
Обозначение компонентов и тел v3.1
1) Исправлен запуск макроса на некоторых компьютерах.
2) Добавлена проверка наличия стиля штриховки у материала в graphic.dns.
3) Новая функция - через нажатие на правую кнопку мыши на кнопку S создаются объекты спецификации для всех тел текущей сборки, у которых ОС не было (в справке отражено).
4) Оптимизация кода.
5) Количество строк - 1900. Завершение разработки этой программы.
Рекомендую PortablePython 3.2.5.1 - админа на предприятии просить не пришлось.
От ТрындецЪ
Освоение спецификации в 18м компасе.
Ответ #114
"...Вот ссылка на самораспаковывающийся архив с портативным питоном
http://ftp.nluug.nl/languages/python/portablepython/v3.2/PortablePython_3.2.5.1.exe
В распакованной папке будет отладчик IDLE, запустите его, откройте в нём файл "Обозначение компонентов и тел v3.0 alpha.pyw" и запустите на выполнение (F5)."
1. Справка Обозначение компонентов и тел v3.1.xls
2. Запускал IDLE-Portable.exe, открывал через него ... v3.1.pyw,
нажимал F5 - но запуск ... v3.1.pyw не стабилен (иногда.. запускается со второго раза по F5)
matb, чтобы запустить макрос, не надо идти в соседнюю калитку через Владивосток.
То, что вы изобразили, - это для отладки и написания кода.
Для запуска программы достаточно нажать двойным кликом левой кнопкой мыши по файлу .pyw
Если не работает, то сказать винде, что pyw надо открывать с помощью pythonw.exe (см. картинку).
UPD.
Написанное выше справедливо для установленного питона.
В портативном питоне открывать нужно через Python-Portable.exe, иначе возникает ошибка при загрузке модулей.
Цитата: Вират Лакх от 11.01.19, 10:43:17
В портативном питоне открывать нужно через Python-Portable.exe, иначе возникает ошибка при загрузке модулей.
1) Кстати, не всегда возникает такая ошибка импорта модулей.
2) Если у кого-то макрос не запускается (
matb, например), то возможно мешает отсутствие прав на запись для подобной папки:
c:\Python27\Lib\site-packages\win32com\gen_py\
В таком случае заменяем две строки в макросе на эти:
import KompasAPI5 # = gencache.EnsureModule('{0422828C-F174-495E-AC5D-D31014DBBE87}', 0, 1, 0)
import KompasAPI7 # = gencache.EnsureModule('{69AC2981-37C0-4379-84FD-5DD2F3C0A520}', 0, 1, 0)
Тогда рядом с макросом или рядом с pythonw.exe должны лежать эти два модуля: KompasAPI5.pyc и KompasAPI7.pyc, которые питон сам генерирует из соответствующих файлов .py
а) Во вложении версия v3.1 с таким импортом и модулями от компас 16.1 (Обозначение компонентов и тел v3.1 import.7z). Программа должна запускаться. При использовании этого варианта макроса с компас 18 и выше нужно заменить эти модули на его модули (от 18-й версии), иначе местами будут ошибки при обработке тел. Скорее всего имена модулей будут отличаться. Значит надо записать так:
import имя_вашего_модуля_компас_апи_5 as KompasAPI5
import имя_вашего_модуля_компас_апи_7 as KompasAPI7
б) Еще в "обычной" версии с KompasAPI5 = gencache.EnsureModule... поменял местами строки (импорт этих двух модулей поставил в начало кода) - см. вложение: Обозначение компонентов и тел v3.1.7z. При исправлении запуска версии 3.0 была какая-то проблема в последовательности. Может эта версия будет работать лучше.
в) Еще я сделал Обозначение компонентов и тел v3.1.exe. Но у него размер в запакованном виде 9 Мб. И модули API от 16.1 - для 18-й не пойдет.
Ох уж этот питон - у одних работает, у других по-разному: то работает, то нет, у третьих - вообще не работает.
ЦитироватьТогда рядом с макросом или рядом с pythonw.exe должны лежать эти два модуля: KompasAPI5.pyc и KompasAPI7.pyc, которые питон сам генерирует из соответствующих файлов .py
Оказывается, байт-коды .pyc для каждой версии питона разные. Поэтому вместо .pyc надо в указанных местах иметь исходники модулей .py, а каждый интерпретатор сам при первом обращении сделает себе байт-коды. Для варианта с импортом вида import KompasAPI5, а не KompasAPI5 = gencache.EnsureModule вот во вложении новый комплект с апи от 18 версии и без импорта gencache на всякий случай. Теперь должно работать везде и всюду на любом компасе и любом питоне, у которого есть PyWin32. Просто распаковываем и запускаем с помощью pythonw.exe
upd.
Эти модули .py идут с библиотекой Компас-макро и у 18-й версии расположены тут:
C:\ProgramData\ASCON\KOMPAS-3D\18\Python 3\App\Lib\site-packages\pythonwin
У старых версий компаса типа того, только в начале c:\Python26\Lib\site-packages\ ...
Для особо тяжелых случаев сделал из скрипта программу с помощью py2exe. В файле ReadMe.txt перечислено то, что должно быть в операционной системе (как правило, это уже должно у всех быть). Через PyInstaller по меркам форума слишком большой объем - в архиве 9 Мб. Эта сборка весит примерно 5 Мб.
Продолжение.
Конец архива.
Очередная последняя версия.
В Обозначение компонентов v3.2 следующие изменения:
1) кое-что убрано
2) кое-что добавлено
3) кое-что исправлено
4) кое-что оптимизировано
5) расширены возможности программы по локальным компонентам: теперь можно присваивать материал и номер исполнения в обозначение в источник компонента и теперь читается материал у источника локальных деталей; в основу положен этот способ http://forum.ascon.ru/index.php/topic,31982.msg259086.html#msg259086
В архиве API от Компас v18, эти файлы должны лежать или рядом с программой, или рядом с pythonw.exe, или в папке питона site-packages
У меня OK32 не запускается с файлами API из данного архива...
Цитата: Вират Лакх от 24.01.19, 12:00:22
... в архиве API от Компас v18...
заменил файлами их архива "Обозначение компонентов и тел v3.1 import.7z" (от сюда - http://forum.ascon.ru/index.php?action=dlattach;topic=30640.0;attach=81767) - версия OK32 - ЗАПУСТИЛАСЬ :um:
Забыл еще написать в описании версии v3.2:
6) кое-что поменяно местами, а именно на кнопке S действие ЛКМ и ПКМ, т.к. функция создания тел более частая и интересная, чем синхронизация с источником объектов спецификации, тем более, что в к18 теперь вообще нет такой кнопки-функции как синхронизация ОС с источником компонента.
vasurnik, у вас запустилось, потому что к16.1 и питон такой же 2.7.15.
7) Во вложении более универсально: pyc для к18, которые пойдут на всех версиях компаса и на питонах 2.7.15 и 3.2.5 (который портативный).
Должны лежать рядом с моей программой pyw. Когда мы рядом ставим модули в формате py, то это не решает проблему запуска у тех пользователей, у которых запрет на запись, т.к. при компиляции все равно там должны создаваться файлы.
все равно не запускается с файлами API из данного архива...
Дарю вам 2000 строк кода версии 3.3 (теперь скорее всего точно наверно по-любому может быть наверняка последняя):
1) Исправлена куча ошибок и недоработок, в том числе работа на новых версиях компаса и чтение и запись источника локальной детали. Вот эта работа с локальностью здорово кровушки попила. В итоге код по универсальности и надежности сильно отличается от этого http://forum.ascon.ru/index.php/topic,31982.msg259086.html#msg259086
Чуть не в такой последовательности запишешь инструкции - зависание или падение компаса, особенно, если на локальном компоненте в сборке есть отверстие. Настоятельно не рекомендую использовать версию v3.2 во избежание проблем.
2) Добавлены проверки сборки:
а) проверка синхронизации материала (МЦХ) тела с его сборкой-владельцем (если стоит по источнику, то у тела будет свойства МЦХ от его сборки; если мы телу присваиваем материал из программы ОКТ, то синхронизация отключается - так же поступает библиотека металлоконструкций, которая телами создает объекты).
б) по просьбе трудящихся - отсутствие Раздела спецификации при включенной галочке Создавать объекты спецификации и наличии описания спецификации (т.е. отсутствие объекта спецификации, когда он должен быть).
3) Добавлена галочка получения материала ("П.М."). Вставка материала теперь называется "В.М.". Если П.М. выключена, получение обозначения и наименования без материала будет быстрее (особенно для локальных компонентов).
4) Добавил выдачу сообщения при ошибке импорта необходимых модулей. Теперь программа пытается создать необходимые модули. Если не получается из-за защиты записи, то пытается импортировать готовые py/pyc-файлы (они должны называться KompasAPI5 и KompasAPI7, иначе нужно в 30-й строке кода записать так: import ... as KompasAPI5, ... as KompasAPI7), где ... - название ваших модулей API Компас. Ранее я готовые модули уже выкладывал: https://forum.ascon.ru/index.php/topic,30640.msg259406.html#msg259406
5) Добавил возможность закрывать дочерние окна на Esc (которые с кнопками появляются при проверки модели).
P.S. Donate приветствуется.
:(
>>>
Traceback (most recent call last):
File "D:\БЧ Вират Лакх\Обозначение компонентов и тел v3.3.pyw", line 7, in <module>
if sys.version_info.major < 3:
AttributeError: 'tuple' object has no attribute 'major'
>>>
:?:
Прикольно. У вас какая версия питон?
В седьмой строке sys.version_info.major замените на sys.version_info[0] или int(sys.version[0])
2.6
заменил
получил
sys.version_info[0] - не стала работать?
IEmbodiment::Part – Компонент исполнения появился только в 16 версии оказывается. Думаю, можно это порешать.
... не могу скачать...
Цитата: Вират Лакх от 01.02.19, 10:56:32
sys.version_info[0] - не стала работать?
...
нет.
Цитата: vasurnik от 01.02.19, 10:58:37
... не могу скачать...
странно... у меня и ещё у людей скачивается. Может быть у Вас что-то не так с Инетом?
Эка диво! Компас v 13 Windows 10 библиотека магически работает, все кнопочки нереально выполняют свои задания! Кроме добавления объекта спецификации. Можно это дополнить с ранних версий?
прошу прощения, скачал...
Цитироватьsys.version_info[0] - не стала работать?
Цитата: IgorT от 01.02.19, 11:01:49
нет.
IgorT, интересно, что тогда выдаст sys.version_info без квадратных скобок. Она же 'tuple' object, должна что-то выдать.
1) Запустите python.exe
2) Введите import sys
3) Введите sys.version_info
Цитата: Вират Лакх от 01.02.19, 11:19:14
IgorT, интересно, что тогда выдаст sys.version_info без квадратных скобок. Она же 'tuple' object, должна что-то выдать.
1) Запустите python.exe
2) Введите import sys
3) Введите sys.version_info
вот
4) А теперь введите sys.version_info[0] должно выдать 2
Вы наверно что-то не так сделали.
да.
выдаёт 2.
Цитата: Вират Лакх от 01.02.19, 11:45:20
...
Вы наверно что-то не так сделали.
Понять бы, что я делаю не так.
Версия 3.4:
1)
IgorT, проверьте на 15-й версии компаса чтение и запись свойств во всякие разные исполнения, еще чтобы текущее исполнение в читаемой или записываемой сборке не сбивалось.
2) Сделал пока что sys.version_info[0], если с какой-то стати не будет работать, то поставьте int(sys.version[0])
3)
Исправил заодно ошибку при работе с локальными деталями в сборке без имени.Цитата: Умка от 01.02.19, 11:10:18
Кроме добавления объекта спецификации. Можно это дополнить с ранних версий?
4)
Умка, тут https://forum.ascon.ru/index.php/topic,30640.msg256091.html#msg256091 я вам писал, что можно попробовать и что должно соблюдаться (еще пункт: должна быть включена галка БЧ).
Между строками 495 и 496 напишите:
ObjSpc = SpecificationObjects[0]
print(ObjSpc)if mat_var.get() or in_gabarit.get().strip(): # Если деталь БЧ
Дополнять из ранних версий не буду. Если что, пользуйтесь Авторедактором.
Да. Работает. Спасибо!
С исполнениями потренируюсь :)
Версия 3.5:
1) Окончательно добил работу с локальными деталями. Могло зависать окно модели. Просто поменял пары строк местами:
Doc3D.windowNeedRebuild = False # Сначала должно идти окно, а потом дерево
Doc3D.treeNeedRebuild = False
2) Для Компас 14 и 15 при чтении компонента сделал, чтобы не сбрасывалось его выделение, когда текущее исполнение в источнике отличается от текущего исполнения в сборке.
Вират Лакх, print(ObjSpc) не помогло. Чёрного окна нет. При вставке отображения типа <win32com.gen_py.69AC2981-37C0-4379-84FD-5DD2F3C0A520x0x1x0.ISpecificationBaseObject instance at 0x80881544> также нет.
Программа запускается, свойства заполняются правильно. Кнопочки работают корректно. Добавления объекта спецификации не происходит.
Последняя версия с правильным добавлением объектов спецификации БЧ v0.9.
К13W10.
Само по себе print(ObjSpc) не поможет. Для начала нам этой инструкцией надо увидеть, что прога получает объект спецификации. Черное окно будет, когда вы переименуете расширение .pyw на .py и запустите через python.exe.
Еще раз, о каком добавлении мы говорим. Как такового добавления ОС теперь давно нет в программе. В 18 версии у деталей внутри теперь нельзя добавить ОС. У старых версий (< 18) можно, но нафиг надо. Есть и должно быть одно место, где находится описание модели, - это свойства. Объект спецификации может переопределять их ("Шурик, вы комсомолец? Это же не наш метод!"). Сейчас вписывается "БЧ" и масса в объект спецификации компонента в сборке (вам нужно находится в сборке и в ней на любой глубине раздавать обозначения и прочее деталям и подсборкам), если описание СП есть в этой сборке или подсборке, если ОС компонента есть, если включена галка БЧ, если в габарите есть данные или материал включен в наименование.
Вы хотите, чтобы в источнике детали создался ОС? Или чтобы прописались в ОС детали в сборке БЧ и кг?
Нужно чтобы в детали внутри создавался объект спецификации с БЧ и кг
Зачем? Чем не устраивает вписать бч в ос компонента сборки? Я это делать не буду. Это пережиток прошлого и в принципе ерунда.
Новая версия программы - Обозначение компонентов и тел v3.6:
1) Доработано окно программы в части подгонки ширины полей ввода для названия и материала после команд через ПКМ;
2) В кнопке '≠' добавлена проверка на наличие компонентов, файлы которых расположены вне каталога или подкаталогов текущей сборки.
Если такие компоненты будут найдены, то выдаётся список этих объектов в виде кнопок, нажатие на которые копирует файл выбранного компонента в каталог сборки и заменяет (или компас выдаёт запрос на изменение ссылок, если файл был изменен и не сохранен) файл-источник данного компонента на созданную копию.
Специально для Kilia :)
Вот макрос, создающий не привязанную к геометрии позицию (с запросом текста), на которую в наименование вставляется ссылка.
Есть ограничение - если в модельке не будет геометрии и позиция не будет скрыта или исключена из расчета, то компас может падать при смене ориентации вида (спереди, диметрия и т.д.).
Прошу испытать надежность работы ссылки в деталях, которые расположены в сборках-подсборках, т.к. думаю включить в функционал новой версии программы ОКТ.
Специально для работы в 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) Изменены некоторые горячие клавиши (указаны во всплывающих меню).
Вместо 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: Я даже ссылку (https://ru.stackoverflow.com/questions/807269/%D0%9A%D0%B0%D0%BA-%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%83%D1%8E-%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8E-%D0%BF%D1%80%D0%B8-%D0%BD%D0%B0%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BC%D1%8B%D1%88%D0%BA%D0%B8-%D0%BD%D0%B0-%D0%BA%D0%BD%D0%BE%D0%BF%D0%BA%D1%83-%D0%B2-tkinte) нашёл, как это реализовывается.
Потом эти подсказки маячить будут. И тут гораздо меньше кнопок, чем в компасе :)
В справку лазить придется первое время. Потом не будешь пользоваться лишними кнопками и запомнишь нужные. И подсказки написать - это опять же время, которое и так было потрачено на программу в огромном количестве.
Так что извиняйте :)
Просьба запоковать в exe, не работает не последняя не предпоследнии версии
pr0100, у меня к вам ответная просьба. Мне эти exe не очень нравятся. Давайте разберемся, почему у вас не работает. Я старался написать универсальный код, который бы работал на 2.х и 3.х питонах и со всеми компасами. Всяких попыток импорта внешних модулей сделал... Можем для разборок перейти с форума в другое место.
Или тут выложите, что показывает программа. Если не показывает, то запустите через IDLE (Python GUI) или чем вы пользуетесь для написания и отладки скриптов.
Ошибка в модуле 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. Исправление ошибки, возникающей на новых питонах (теперь нельзя делить строку пустым разделителем).
Цитата: Вират Лакх от 27.06.19, 04:39:40
Версия 3.10. Исправление ошибки, возникающей на новых питонах (теперь нельзя делить строку пустым разделителем).
Работает
Версия 3.11. На этом развитие программы закрываем. Итак уже 2400 строк кода.
1) Исправление ошибок в функции сохранения файла компонента в папку сборки.
2) Навел порядок в работе дочерних окон проверки, справки и штриховки: фокусировка и закрытие на Esc.
3) Специально для ТрындецЪ добавлены всплывающие подсказки.
У меня в 2-х последних версиях не вносятся изменения в "свойства текущего документа", если хочу изменить обозначение, наименование сборки или детали. После нажатия на "Вставить", внизу пишется, что данные внесены, но нечего не меняется. В v3.0 все работало. v16.1.
---------------------------
Обозначение компонентов и тел v3.11
---------------------------
Traceback (most recent call last):
File "C:\Users\User\Desktop\Обозначение компонентов и тел v3.11.pyw", line 25, in <module>
from win32gui import FindWindow, ShowWindow
ImportError: No module named win32gui
---------------------------
ОК
---------------------------
Цитата: andrei260 от 01.07.19, 08:29:29
ImportError: No module named win32gui
Не установлен пакет pywin32. Ищите ответ тут: https://forum.ascon.ru/index.php/topic,30856 (https://forum.ascon.ru/index.php/topic,30856)
Цитироватьв 2-х последних версиях не вносятся изменения в "свойства текущего документа"
Это тот случай, когда лучшее - враг хорошего. Данная ошибка - результат очередной оптимизации. Когда меняешь давно написанный код, есть шанс не вспомнить все нюансы. В новой версии будет работать лучше прежнего. Особенно должно заметно на тяжелых моделях.
ЦитироватьImportError: No module named win32gui
ТрындецЪ правильно говорит, нужно установить соответствующий вашему питону pywin32: https://github.com/mhammond/pywin32/releases
Новая версия будет позже. Нужно разобраться еще с одной ошибкой с подсказками.
Версия 3.12.
1) Исправлена вставка свойств в верхний компонент (сам документ).
2) Оптимизирована функция вставки свойств для лучшего быстродействия.
3) Улучшено чтение верхнего компонента.
4) Добавлено сообщение при чтении свойств тел о синхронизации МЦХ со сборкой-источником.
5) Переделаны подсказки на class.
_____________________________
Эх еще бы видео как работать с библиотекой (для примера)
А вы читайте справку, всплывающие подсказки, сообщения внизу окна и эту тему. Можете протыкать прогу на ненужных сборках и детальках. Всякие защиты на неправильные действия стоят. Если снимать видео, то оно долгое получится, чтобы показать работу всего функционала. На форум такое видео не влезет, а на обменники-ютубы выкладывать не охота. И, чтобы нормальный видос снять, надо время потратить. Предлагаю тем, кто использует программу, при желании записать видео. Мне будет интересно посмотреть программу в работе у других.
Ставлю жирную точку в разработке этой программы на версии 3.13:
1) Всё тайное становится явным, или вынесены команды создания и удаления внешних объектов спецификации с кнопки ОСТ на свои отдельные СВО и УВО.
2) Давно мне не нравилось то, что в функции проверки остаются дочерние окна без кнопок, которые приходилось закрывать самому. Решил положить конец этому безобразию и сделал так, что последний вор закрывает двор последняя исчезающая кнопка закрывает свое окно.
У кого компас 17 и 18, проверьте у себя следующее.
Если в к16 в обозначении модели указать код документа, например, МД, то в спецификации такая моделька, имеющая в наименовании перенос строки @/, пишется в одну строку.
Вопрос: в какой-то из новых версий это вроде исправили, но не помню точно, в 17 или 18.
Владельцы 14 и 15 могут тоже проверить, вдруг у них нет такого.
Пожалуйста:
Перенос работает
Скачал OKTv313. Что делать с содержимым ( файл с расширением PYW) ? Извините за смешной вопрос. :shu:
Версия Пи (3.14). Дальнейшая полировка. Это, видимо, бесконечный процесс. Количество строк осталось прежним 2500.
1) Кое-какая оптимизация кода.
2) Изменено разделение наименования на название, материал и габарит. Теперь, если убрана галочка Получать материал, материал в названии не будет портиться, а останется как есть, чтобы потом правильно вставиться обратно.
3) Предупреждение "Использование кода документа в моделях может вызвать ошибки с многострочным наименованием" выдается только для версий компаса с 14 по 16.
4) Раньше при чтении наименование и обозначение компонентов просто сравнивались с их источниками. Отсюда предупреждение могло появиться только при их различии с источником. Т.е. могли быть сняты галочки Источник, а программа при этом промолчать. Теперь проверяется сама галочка Источник. При равных значениях при снятой галке теперь программа выдаст предупреждение об отсутствии синхронизации.
5) При отсутствии галочки ПМ чтение тел сделал аналогично компонентам (раньше материал всё равно вырезался из наименования).
6) Если в размерах допуск стоит вида 100+3-2, то высоту индексов теперь используем малую. Для допусков типа 100+3 остается средней высоты.
7) Раньше при создании объекта спецификации тела менялись точки на запятые у всего наименования. Эта замена для тел библиотеки металлоконструкций, где размеры пишутся зачем-то через точку. Эта замена могла испортить название или материал, если они содержали точки. Теперь программа старается сделать замену только в габаритах.
8) В проверке сборки теперь тоже проверяются сами галочки Источник, а не равенство свойства источнику.
9) В проверке сборки соответствие МЦХ источнику теперь происходит сразу при получении материала. Тем самым хоть чуточку еще увеличить скорость обработки.
Цитата: Andrei 72 от 18.07.19, 12:12:51
Что делать с содержимым ( файл с расширением PYW) ?
С содержимым ничего лучше не делать. Файлик нужно запускать через pythonw.exe. Для этого должны быть в наличии и в рабочем состоянии python и дополнение к нему pywin32. Некоторые подробности тут: https://forum.ascon.ru/index.php/topic,30856.0.html
Если что-то не работает, то установить снова https://www.python.org/downloads/ и соответствующий ему https://github.com/mhammond/pywin32/releases
Здравствуйте, подскажите как с помощью этой чудесной библиотеки вставлять размеры детали как во вложении?
Что-то я вопрос не понял. Одна картинка соответствует другой. Данные внесены из программы в деталь.
Вопрос в том, как получить сами размеры 750 и 50?
Как вариант, выделяете грань и нажимаете кнопку с линейкой, или по горячей клавише, или через меню на ПКМ.
Или сначала кнопку с линейкой (клавишу или через ПКМ), а потом грань. Или можно отдельно ребра измерить.
Точность измерения настраивается задвигалкой 0 мм. Можно дописать допуски типа 750-3х50+3.
p.s. Любой, кто считает программу чудесной, может совершить donate :)
Сформулирую по другому вопрос, по нажатию на линейку программа измеряет размер грани и проставляет его в окно, а хотелось бы чтобы она , при необходимости формировала надпись формата 100х200.
PS Донатить куда?
Убери галку "мм". Можно ещё драйвер для коврика под мышь установить ::) :-)))...
ЦитироватьУбери галку "мм"
А вот и не так, чтобы проставить габариты детали на ЛКМ нажать на поверхность детали было
ЦитироватьМожно ещё драйвер для коврика под мышь установить
ну не надо ля ля
Вы о какой "необходимости" говорите? Умка правильно догадался? Вы о добавлении "мм" к размерам? Так и говорите :)
Можно еще коврик для мыши совсем удалить. Я, например, без ковра.
Если нужно эту галочку "мм" совсем отключить, чтобы она при повторном запуске не была включена опять, то в строке 2408 кода замените True на False, соблюдая регистр:
mm_var.set(True) -> mm_var.set(False)
или просто удалите эту строку.
p.s. Про донателло напишу в лс. Сразу скажу, что часть сразу отправится основателю программы ув. ТрындецЪ. Тем более, эту функцию измерений он заложил.
-------------------------
"Или сначала кнопку с линейкой (горячую клавишу или через ПКМ), а потом грань" - я так и говорил.
В итоге Вы вроде получили что хотели.
Программа все правильно делает, просто я еще в ней не до конца разобрался и некоторых функциях приходится догадываться методом научного тыка.
Если мерить длину ребра, то программа пропишет L=100 мм, а если нужны габариты детали то нужно нажать на поверхность детали и она проставит габариты 100х200, причем не добавляя ММ, не зависимо от того стоит галка в мм или нет
"мм" в поле размеров прога никогда не пишет, чтобы не мешались. Она их только добавляет при вставке, если есть галка. Должно работать одинаково: что для 100, что для 100х200. Есть другая разница в работе измерений. Через кнопку Линейка или на клавиатуре PageDown она прописывает всегда в поле размеров и добавляет текст типа 'D = ' или 'L = '. Через меню на ПКМ или кнопкой PageUp она добавляет в то поле, которое указано, без дополнительного текста, только одно число (нужно, например, для измерения толщины листа для вставки её в поле материал). Возможно стоит сделать, чтобы не добавляла, а вставляла в текущую позицию курсора...
габариты 100х200 не добавляя ММ это есть универсально для многих пожеланий от многоуважаемых юзеров, п.м.м. это правильно. Догадываться не стоит, есть кей "?" с описаниями, можно так-же анализировать эту тему форума с самого начала. Ну пардоньте-с ежеле не так-с!
Глюк, баг или фича? Если в обозначении детали БЧ присутсвует дефис "-" то программа делает эту деталь исполнением. Например 12345-01, 12345-02, то это будет деталь 1235-01 и 2-я исполнение 2
"Глюк, баг или фича?" - фича. Исполнением не делает, а вносит текст после последнего дефиса в часть обозначения, которое номер исполнения. Это поведение не привязано к БЧ-шности детали. С любым компонентом так поступит. По ескд дефис - это разделитель исполнения. Возможно, стоит выделить для номера исполнения отдельное поле.
Все! Разобрался!))
Уважаемый Вират Лакх, возможно ли добавить для деталей БЧ возможность сразу ставить ± после размеров?
Т.е. не 100х200, а сразу 100±х200±. У нас нормоконтроль требует ставить допуски в СП.
Попробовал что то поменять в коде, но для меня мудрено это. ))
Получилось поменять D на знак диаметра, и знак х на /.
Но плюс-минус никак не выходит...
Как понял для окружностей тут меняется:
text = "⌀" + text1 + "/⌀" + text2
Но как не меняю, ошибку выдает синтаксическую.
Цитата: FR347 от 28.08.19, 07:59:16
Уважаемый Вират Лакх, возможно ли добавить для деталей БЧ возможность сразу ставить ± после размеров?
Т.е. не 100х200, а сразу 100±х200±. У нас нормоконтроль требует ставить допуски в СП.
Попробовал что то поменять в коде, но для меня мудрено это. ))
Получилось поменять D на знак диаметра, и знак х на /.
Но плюс-минус никак не выходит...
Как понял для окружностей тут меняется:
text = "⌀" + text1 + "/⌀" + text2
Но как не меняю, ошибку выдает синтаксическую.
Для этого не надо править код. Всё уже реализовано: (https://forum.ascon.ru/index.php/topic,30640.msg242148.html#msg242148)
ЦитироватьБуквы "Ф" и "ф" переводятся в спецсимвол диаметра;
"+-" переводятся в спецсимвол "плюс-минус";
"+" перед числом переводится вместе с числом в верхний индекс средней высоты;
"-" перед числом переводится вместе с числом в нижний индекс средней высоты.
Цитата: Вират Лакх от 16.08.19, 04:10:03
"Глюк, баг или фича?" - фича. Исполнением не делает, а вносит текст после последнего дефиса в часть обозначения, которое номер исполнения. Это поведение не привязано к БЧ-шности детали. С любым компонентом так поступит. По ескд дефис - это разделитель исполнения. Возможно, стоит выделить для номера исполнения отдельное поле.
А что - БЧ-детали бывают с исполнениями?
- - - - - - -
К автору темы:
тема стала такой старой и большой, что для понимания возможностей Библиотеки понадобится много времени на изучение всех этих страниц.
Нельзя ли по-новой дать, так сказать, АННОТАЦИЮ Библиотеки? Это здорово поможет ... всем, в общем.
Цитата: ТрындецЪ от 28.08.19, 11:28:33
Для этого не надо править код. Всё уже реализовано: (https://forum.ascon.ru/index.php/topic,30640.msg242148.html#msg242148)
Я правильно понимаю, что надо вводить +- и ф в ячейку с размерами?
Цитата: FR347 от 28.08.19, 15:34:57
Я правильно понимаю, что надо вводить +- и ф в ячейку с размерами?
Да.
Например: ф10+-2, Ф15+1
Рекомендую использовать последнюю версию программы 3.14. В ней были кое-какие изменения на тему обработки названия и габаритов (см. https://forum.ascon.ru/index.php/topic,30640.msg264438.html#msg264438).
Перед тем, как что-то менять в программе, лучше спросить авторов. Скорее всего желаемое уже реализовано.
За 1 год и 11 месяцев разработки программа многому научилась в области обозначения и наименования объектов.
Кроме ф и +- еще заменяется -+ и * на знаки "минус-плюс" и "х" соответственно.
"А что - БЧ-детали бывают с исполнениями?" - кто его знает, у кого-то может и бывают.
Чтобы составить представление о программе, почитайте встроенную в программу справку ("?" или "F1").
Добрый день всем!
Во первых огромное спасибо автору за данную библиотеку.
Пользуюсь из сторонних программ больше всего ей.
Еще компас-тулбаром (очень не хватает настраиваемой горячей панели из 16 Компаса).
Расстановкой еще... Но из-за СП компаса, скорее всего буду пользоваться генератором (автору спасибо!), а потом все в ручную (достали глюки СП).
Во вторых я сделал так, что бы сразу вводились +-.. Согласитесь, что бы ввести +-, надо тоже немного времени).
А ф и Ф вводить тоже время, плюс может раскладка быть английская.
К тому же у нас на круглые БЧ знак ∅, а не D. Например: ∅50±1∅40±1.
И для прямоугольных деталей, большую сторону нормоконтроль рекомендует ставить первой (ну что бы знать больший габарит необходимой заготовки). Поэтому тоже в коде для себя подправил.
Решил не тревожить автора, не просить готовый код под себя, а сам подправить ))
К тому же мне интересно просто поизучать такие темы (хотя и не сильно силен в программировании))
""+" перед числом переводится вместе с числом в верхний индекс средней высоты;
"-" перед числом переводится вместе с числом в нижний индекс средней высот"
А вот это пропустил (хотя мониторю тему).
Спасибо за программу!!!
В итоге вы решили проблему с плюс-минус? Может быть в будущем расширим возможности по настройке по себя.
По большей стороне первой - мы тут руководствовались по сортировке в спецификации от меньшего к большему как между деталями, так и размеры одной детали. Для листов вида 40х500, 40х600, 50х300 так вроде лучше...
Повторюсь, любой пользователь может выразить благодарность в форме donate :)
1 - Ну это не проблема была. Просто не хочется тратить время на замену D на ф, вставку +-, замену х на /, в круглых деталях БЧ.
Да нашел где поменять ) Заодно немного поизучал код)))
2 - а сортировка же не по наименованию, а по обозначению деталей идет.
Я понимаю, что имелось ввиду сначала дать обозначения по возрастанию, а потом уже номера.
Но у нас это бесполезно, все меняется многократно))
3 - donate где находится?) В профиле Вашем нет вроде...
Вот чего не хватает так это кнопки реверса в размере плиты, т.е. иногда надо вместо например 1000х500 писать 500х1000, это надо для использования в мебели, там первый размер всегда указывает направление текстуры
Никак не пойму, некоторым деталям приписывает БЧ и масса, а некоторым нет. Куда смотреть?
Чтобы прописались БЧ и масса:
- должна стоять галочка БЧ;
- компонент должен быть деталью;
- компонент должен быть не верхний, т.е. не активный документ-деталь или сборка, а деталь в сборке;
- редактирование объекта спецификации в локальной подсборке не делает;
- при редактировании детали на месте не будет изменен её объект спецификации;
- в сборке должно быть описание спецификации (внутренние объекты спецификации);
- изменение объекта спецификации происходит всегда у первого вставленного компонента из нескольких копий, чтобы БЧ и кг прописывалось не у скрытых объектов спецификации (может тут какой-то промах идет?);
- раздел спецификации должен быть Детали;
- должна быть включена галочка вставки материала в наименование или должны быть указаны размеры габаритов.
Версия 3.15
1) Неправильно работало чтение плотности при запуске через Питон 3. Например, у 7850 кг/м3 откидывался нуль.
Вставка плотности из graphic.dns - аналогично.
2) Исправлена работа округления и отображения незначащих нулей при записи массы в колонку Примечание.
3) После вставки имени файла добавился автоподбор ширины окна.
4) Через меню на ПКМ или кнопкой PageUp функция Измерить раньше добавляла значение в конец строки.
Теперь не добавляет, а вставляет в текущую позицию курсора.
5) Добавлена функция реверса размеров листа через меню на ПКМ. Например: 500х1000 -> 1000х500
Пункт меню появляется при условии наличия х или *, по обе стороны от которых есть цифры.
[attach id=undefined]OKTv315.zip[/attach]
6) Внесены исправления в функцию создания внешних объектов спецификации (кнопка СВО).
См. вложение.
Коллеги, у кого компас версии ниже 16.1, проверьте, пожалуйста, у себя на тестовой сборке с одной простой (нелокальной) деталью этот макрос.
Есть случай, когда присвоение IsLocal = True не работает на v16.0.
Или по-другому. Взять ОКТ v3.15 и прочитать локальный компонент с включенной галочкой ПМ. Он в случае ошибки должен стать нелокальным.
Версия 3.16
1) Включение галочек Источник на Обозначении и Наименовании в функции проверки текущей сборки. Раньше на кнопку вызывались свойства компонента.
2) Улучшение функции вставки материала из graphic.dns:
а) Исправлена ошибка при работе в Python 3
б) Сделано корректное чтение материала, записанного через $b (привет библиотеке металлоконструкций). Раньше читался только через $d.
3) Улучшение функции создания внешних объектов спецификации текущей сборки (копирование всех внутренних ОС во внешние).
4) Для облегчения кода и уменьшения времени запуска программы убрана проверка запущенного компаса. Теперь, если его нет, то будет запущен в видимом режиме.
5) На компасах версии меньше 16.1 не работало чтение и запись свойств в локальные компоненты из-за ошибки API. Кое-как нашелся обходной путь.
Теперь существует новая версия программы v4.0, которая умеет вносить свойства в одно нажатие на кнопку "Вставить" в несколько выбранных компонентов и тел.
Функция хорошо пригодится, например, для импортированных моделей, где элементы массивов становятся разными файлами.
Напомню, что свойства вносятся в источник компонента и можно выделять грани, ребра и вершины (чтобы не искать в дереве, но тогда будет медленнее вставка).
При этом, как и раньше, выбирать объект можно на любой глубине текущей сборки.
Новую версию программы меняю на вознаграждение.
Полную версию темы не читал (много) но суть понял.
Идеально было бы в свойствах модели добавить разделы спецификации прямо в главном окне- такие как Б/ч, детали,и др, вообще взять или не взять в спецификацию. А стандартные изделия я думаю по умолчанию должны заносится в СП с вставкой Б/ч. :um:
Цитата: Grinka от 06.12.19, 08:17:36... стандартные изделия я думаю по умолчанию должны заносится в СП с вставкой Б/ч. :um:
На каком основании?
Требования ГОСТ 2.106 (п. 3.17) Вам не указ?
ЦитироватьТеперь существует новая версия программы v4.0, которая умеет вносить свойства в одно нажатие на кнопку "Вставить" в несколько выбранных компонентов и тел.
А где она? 3.16 последняя или уже нет?
Она пока только у меня. Ждет, когда найдется кто-то, кому будет сильно нужна такая функция на столько, что готов будет приобрести её за вознаграждение. Тратится уйма времени (в основном вечернего-ночного-утреннего), чтобы прописать алгоритм. Хочется хоть какую-то печеньку за труды. Версии 3.16 и 4.0 обе последние на сегодня.
Думаю оптимальным будет озвучить цену и разделить на страждущих. Этот вариант более реализуем на мой взгляд.
Цитата: Warlock-72 от 06.12.19, 09:51:16На каком основании?
Требования ГОСТ 2.106 (п. 3.17) Вам не указ?
Извиняюсь. Конечно указ. Просто по привычке приходилось вписывать БЧ! А теперь все конечно упростится.
Уважаемые коллеги, оказывается, тема неактивна больше года. Поздравляю Вас с наступающим Новым годом!
Во вложении программа версии 4.0, которая умеет вносить свойства в одно нажатие на кнопку "Вставить" в несколько выбранных компонентов и тел. Это может занять длительное время, поэтому напоминаю, что любой питоновский макрос можно на порядок ускорить, зажав кнопку на мышке для вращения модели в окне (среднюю - для старых версий компаса, правую - для новых).
Это как Новогодний подарок? Спасибо, если так, протестируем. Всех с наступившим Новым Годом, отдельно поздравляю разработчика сей чудно программы!
Не мойму, каким образом в К20 задействовать ОК4.0?
Как вообще использовать *.pyw?
Программа запускается через PyScripter, но это не очень удобно. Можно как-то кнопочку назначить на запуск OK4.0?
нужно просто через Открыть с помощью указать, чтобы такие файлы открывались через python.exe
Назначить на кнопку в к20 уже можно смотрите справку
Вот почему, до сих пор, никто (в том числе и сами АСКОН-овцы) не написал "крутилку" для скриптов под Компас?
Проблема часто всплывает на форуме...
По версии 4.0. Включение источника у компонента в функции проверки в новых компасах не работает. Для старых - этот способ, для новых - другой в версии 4.1, которая ждёт своего часа.
Цитата: Вират Лакх от 26.12.20, 06:18:20любой питоновский макрос можно на порядок ускорить, зажав кнопку на мышке для вращения модели в окне (среднюю - для старых версий компаса, правую - для новых).
Это справедливо только для старых компасов. В новых питон и так хорошо летает, поэтому ПКМ не даст эффекта.
Цитата: IgorT от 31.03.22, 15:37:37Не мойму, каким образом в К20 задействовать ОК4.0?
Как вообще использовать *.pyw?
Программа запускается через PyScripter, но это не очень удобно. Можно как-то кнопочку назначить на запуск OK4.0?
Если двойным кликом на файл pyw ничего не происходит, то нужно в винде ассоциировать это расширение с исполняемым файлом pythonw.exe (без консоли), в то время как py связан с python.exe (консольный). А ещё лучше удалить компасный старый питон и поставить новое с сайта https://www.python.org/downloads/ и https://github.com/mhammond/pywin32/releases Установщики все ассоциации сделают как надо.
Можно макросы через утилиты в конфигураторе запускать (см. картинку).
конфигуратор.jpg
Цитата: Михаил88 от 31.03.22, 16:53:23Назначить на кнопку в к20 уже можно смотрите справку
Или я не знал, или забыл, как можно макрос сделать с кнопкой в интерфейсе К20. Кто в курсе, подскажите. В старом компасе макрос сделать на кнопку - проще простого.
Цитата: p3452 от 31.03.22, 18:01:57Вот почему, до сих пор, никто (в том числе и сами АСКОН-овцы) не написал "крутилку" для скриптов под Компас?
Может эта панель поможет? https://forum.ascon.ru/index.php?topic=31913.120
Цитата: Вират Лакх от 31.03.22, 19:18:08Или я не знал, или забыл, как можно макрос сделать с кнопкой в интерфейсе К20. Кто в курсе, подскажите. В старом компасе макрос сделать на кнопку - проще простого.
https://www.youtube.com/watch?v=b7FCTwJc0i0&list=PLb7fMw7ZZbFgp9E7Lj84Y1FP3tEvknYLX&index=3
начиная с 31 минуты.
А, точно. За год подзабылось уже. Только иконку свою там не сделать. Или, опять же, можно как-то?
этого не знаю. У меня к сожалению нет к20
Цитата: Вират Лакх от 31.03.22, 19:18:08Может эта панель поможет?
Ну кому-то, на старых версиях и поможет, но:
1. В v20 можно макросы навесит на кнопки.
2. "Панель" и "кнопки" это, всего лишь, полумера...
3. Любая "крутилка" имеет ряд дополнительных опций, как минимум:
- выполнение (созданного самим пользователем) списка макросов,
- ветвление выполнения, в зависимости от заданных (самим пользователем) условий,
- "список" и "условия" выполнения может менять сам пользователь (без переделки исполняемого файла самой "крутилки").
Что такое "крутилка"? Поведайте.
"Крутилка" это "движок" то, что выполняет скрипты.
На примере 3D игр:
- Есть "игровой движок (https://ru.wikipedia.org/wiki/%D0%98%D0%B3%D1%80%D0%BE%D0%B2%D0%BE%D0%B9_%D0%B4%D0%B2%D0%B8%D0%B6%D0%BE%D0%BA)"
- Есть "скрипты" (сценарий игры, поведение "героев игры", погода и т.п.).
Что-то отстал в этих терминах. Не догоняю.
И как это должно быть представлено в Компасе?
Пробовал ли кто-то работоспособность макроса на Компас-3D V21?
Перешли на Компас v22 библиотека не работает. Со скриптами вообще непонятки....
Что конкретно не работает? Наверное справочник СИ? Если он, то это надо дописывать под новую версию.
Цитата: Вират Лакх от 19.12.23, 12:49:36Что конкретно не работает? Наверное справочник СИ? Если он, то это надо дописывать под новую версию.
Не прописывается формат БЧ и не добавляется масса в примечании. (v.21)
Цитата: zhykas от 22.12.23, 18:29:02Не прописывается формат БЧ и не добавляется масса в примечании. (v.21)
Галочку БЧ включали? Программа предназначена не только для БЧ, поэтому она отключена по умолчанию.
Цитата: Вират Лакх от 23.12.23, 12:20:21Галочку БЧ включали? Программа предназначена не только для БЧ, поэтому она отключена по умолчанию.
Включал. Да, но пользуюсь ей для БЧ.
Делал по методике:
Цитата: Вират Лакх от 12.09.19, 04:28:40Чтобы прописались БЧ и масса:
- должна стоять галочка БЧ;
- компонент должен быть деталью;
- компонент должен быть не верхний, т.е. не активный документ-деталь или сборка, а деталь в сборке;
- редактирование объекта спецификации в локальной подсборке не делает;
- при редактировании детали на месте не будет изменен её объект спецификации;
- в сборке должно быть описание спецификации (внутренние объекты спецификации);
- изменение объекта спецификации происходит всегда у первого вставленного компонента из нескольких копий, чтобы БЧ и кг прописывалось не у скрытых объектов спецификации (может тут какой-то промах идет?);
- раздел спецификации должен быть Детали;
- должна быть включена галочка вставки материала в наименование или должны быть указаны размеры габаритов.
Пробовал и так и сяк. Не помогает. Приходится после вручную дописовать формат, массу и допуск габаритов с нижним индексом с помощью спецзнаков.
Цитата: Умка от 19.12.23, 08:45:48Перешли на Компас v22 библиотека не работает. Со скриптами вообще непонятки....
В v21.0.24 не работает SelectedObjects на примитивах (гранях, ребрах). Поэтому не работает функция Измерить (линейка).
Вместо нормального интерфейса объекта мы получаем <COMObject SelectedObjects>
После приведения к типу API7.IKompasAPIObject(SelectedObjects) попытка получения любого свойства выдаёт ошибку.
Но, например, с телом или компонентом работает. Похоже, API закосячили. Надо пробовать через API5. Там стабильнее.
Цитата: zhykas от 22.12.23, 18:29:02Не прописывается формат БЧ и не добавляется масса в примечании. (v.21)
Да, формат не прописывается. Масса в Примечание вписалась. При этом сбивает связь с источником у Обозначения и Наименования.
Короче говоря, для новых компасов программа нерабочая.
Цитата: vasurnik от 05.08.22, 10:15:35Пробовал ли кто-то работоспособность макроса на Компас-3D V21?
Цитата: Умка от 19.12.23, 08:45:48Перешли на Компас v22 библиотека не работает. Со скриптами вообще непонятки....
Цитата: zhykas от 22.12.23, 18:29:02Не прописывается формат БЧ и не добавляется масса в примечании. (v.21)
До v20 основной функционал ещё более-менее работает. Вспомогательные функции, такие как работа с файлом DNS (штриховка), синхронизация объектов спецификации с документом-владельцем, вставка ссылки в наименование через выноску, создание и удаление внешних объектов спецификации, возможно что-то в проверке сборки, отпали где-то на версиях, начиная с v17. Особо не следил. Внесение в формат БЧ и в примечание массы могло перестать работать с появлением свойства Формат, но может оно и в v20 работает. В v21 появились групповые объекты спецификации, что сильно подкосило функционал программы. В v22 на смену МиС пришел Полином. Какой-то затык с измерением линейкой возник на этих версиях или раньше...
На дворе актуальная версия компаса 22, но программа свою значимость не потеряла до сих пор. Особенно полезна будет при (не) работе с тяжелым Полиномом (МиС, СИ).
По просьбам трудящихся я восстановил работоспособность программы до v22 включительно, кроме кнопок СВО и УВО. Кроме этого исправил кое-какие недочеты и добавил функцию разделения наименования по первому пробелу на обозначение и остальную часть наименования (кнопка О_Н, F8 и в меню на ПКМ).
Эта версия 5.0 точно продажная и выкладываться здесь не будет. Цена 1000 р. Обращаться в ЛС.
Пока пользуюсь "Обозначение компонентов и тел v4.0". Не работают МиС и измерения. При вставке step файлов, создании их симметричных деталей и сборок и изменении их свойств "Обозначение" и "Наименование" происходит вылет КОМПАС-22. Что с этой операцией происходит в версии 5.0?
Не знаю, надо пробовать. Присылайте набор файлов.