Макрос перемещения заливки на задний план

Автор Pokemon, 08.11.23, 09:56:15

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

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

Pokemon

Всем доброго времени суток!

Попытался стандартными средствами записать макрос в Компасе.
Одна из моих первых попыток подружиться с макросами и записать их.

Задача:
Выделить все заливки на чертеже, нажать правой кнопке над одной из областей с заливкой и выбрать меню «Позади всех».

Что я попытался сделать:
КОМПАС-макро -> начать запись -> совершение действий, которые описал выше (скриншоты прикладываю) -> остановить запись, сохранение макроса.
01.png

02.png

03.png


Но после попытки запустить сохраненный макрос заливка на задний план не переместилась.
Что я мог сделать не так?
Один из вариантов проблемы, со своего понимания, вижу в том, что правой кнопкой мыши надо нажимать над выделенной областью заливки, а не над произвольным местом чертежа. Возможно, что макрос обрабатывает нажатие правой кнопки мыши над произвольным местом чертежа.
Кто-нибудь может подсказать, где "копать"?

Для чего это нужно:
У некоторых областей с заливкой обычно выставляю прозрачность, чтобы за ней был видна другая геометрия.
Но при печати через PDF принтер иногда даже прозрачная заливка на чертеже почему-то получается на переднем плане и непрозрачной.

Сравнение заливок.png

После переноса на задний план проблема исчезает.

Михаил88

КОМПАС-макро не умеет это делать. Откройте на редактирование полученный макрос. Там можно посмотреть, макро записал.

Pokemon

"
# -*- coding: utf-8 -*-
#|Заливка на задний план 2

import pythoncom
from win32com.client import Dispatch, gencache

import LDefin2D
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


Documents = application.Documents
#  Получим активный документ
kompas_document = application.ActiveDocument
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
iDocument2D = kompas_object.ActiveDocument2D()
"

Pokemon

Т.е. Компас похоже только получил активный документ, а действия никакие не записались, правильно я понял?

Михаил88


Pokemon

Михаил88, а можете подсказать, чего именно КОМПАС-Макро не умеет делать?
Смотрел на Ютюбе видео, вроде у ребят получалось какие-то действия выполнять с помощью этого приложения.

Михаил88

Только самые простые, я его не использую пишу сам.
Есть еще PyKompasMacro, который может делать намного больше.
На форуме есть тема посвященная PyKompasMacro. Почитайте.
+ Благодарностей: 1

Михаил88

#7
Цитата: Pokemon от 08.11.23, 09:56:15Для чего это нужно:
У некоторых областей с заливкой обычно выставляю прозрачность, чтобы за ней был видна другая геометрия.
Но при печати через PDF принтер иногда даже прозрачная заливка на чертеже почему-то получается на переднем плане и непрозрачной.

Макрос запускать на активном чертеже или фрагменте.
+ Благодарностей: 1

Pokemon

Создал новый чертеж, добавил пять прямоугольников с заливкой, у которой выставлена прозрачность 54%.
Вручную разместил заливку на задний план, распечатал через PDF принтер:
Вручную.png

Потом для проверки переместил заливку на передний план:
До макроса.png

После этого (чертеж оставался активным) двойным щелчком щелкнул по макросу и распечатал файл снова через PDF-принтер:
После макроса.png

Не заметил, чтобы что-то изменилось... возможно что-то не так сделал.

Pokemon

#9
Цитата: Михаил88 от 08.11.23, 11:50:12Есть еще PyKompasMacro, который может делать намного больше.

Ранее своими силами пытался записать макрос используя PyKompasMacro.
Что сделал:
Подготовил чертеж с несколькими прямоугольниками и заливками, часть заливок перенес на передний план.
Пробный чертеж.png

Затем нажал кнопку "Запись" (на новой панели приложения PyKompasMacro) и проделал действия, аналогичные перечисленным в первом сообщении темы.
После записи получился макрос, который мне с нуля создает такой же чертеж, о чем я его не просил (чертеж с геометрией был создан перед началом записи макроса), соответственно результат меня пока не устроил.
Написал разработчику приложения в личку вопрос, но пока не получил ответа.
Полученный макрос в архиве прикладываю.
Новый макрос со штриховкой 2.zip

Михаил88, если подскажете, буду благодарен: что-нибудь нужное из перечисленных действий из первого сообщения темы записалось в такой макрос?

Михаил88

Цитата: Pokemon от 05.12.23, 09:28:15Михаил88, если подскажете, буду благодарен: что-нибудь нужное из перечисленных действий из первого сообщения темы записалось в такой макрос?
Нет.

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

Макрос, который я Вам выслал работает по крайней мере у меня нормально. Но у меня и не воспроизводится ваша проблема на к18,1. Если я выставляю прозрачность 54% то у меня распечатывает через PDF принтер нормально в обоих случаях и когда заливка на переднем плане и когда на заднем. Результат одинаковый.

Screenshot_1.bmp

Попробуйте выставить прозрачность заливки на 0. И запустить макрос через PyScripter. Если будет ошибка то на какой строчке.

Михаил88

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

Pokemon

Цитата: Михаил88 от 05.12.23, 13:48:15Но у меня и не воспроизводится ваша проблема на к18,1
В 16-ой версии такого не припомню. Потом перешел сразу на 21-ую версию и столкнулся с тем, что заливка иногда перекрывает объекты. Возможно, что в 18-ой версии этот механизм реализован лучше.

Цитата: Михаил88 от 05.12.23, 13:48:15Попробуйте выставить прозрачность заливки на 0
С нулевой прозрачностью мне не очень нравится результат.
А с частичной прозрачностью результат мне больше понравился, но иногда заливка почему-то не показывает геометрию расположенную за ней, хотя прозрачность есть.
Но ради проверки макроса можно попробовать и вариант с нулевой прозрачностью.

Pokemon

Цитата: Михаил88 от 05.12.23, 13:48:15И запустить макрос через PyScripter.
Понял, не уверен, что успею это проверить сегодня. Взял себе на заметку.

Pokemon

Цитата: Михаил88 от 05.12.23, 13:59:37Результат работы.
На вашей "гифке" видно сообщение, что работа макроса завершена, у меня такого сообщения не выходило.

Михаил88

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

Pokemon

Цитата: Михаил88 от 05.12.23, 13:48:15И запустить макрос через PyScripter. Если будет ошибка то на какой строчке.
Запустил макрос через через PyScripter. Появилось сообщение про строчку 4:
2023-12-06_10-21-25.png

Михаил88

Цитата: Pokemon от 06.12.23, 08:25:39Запустил макрос через через PyScripter. Появилось сообщение про строчку 4:

У Вас установлен КОМПАС-Макро?

Screenshot_3.png

Можно пойти 2 путями.
1 - Вам нужно все до настроить.
2 - Я могу изменить макрос так, чтобы он у Вас работал и без дополнительных телодвижений с Вашей стороны.


Михаил88

Попробуйте теперь должно работать.

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

Pokemon

Цитата: Михаил88 от 06.12.23, 08:32:59У Вас установлен КОМПАС-Макро?
Я КОМПАС-Макро'сом уже пытался даже макрос записать.  :shu:
2023-12-06_10-58-54.png