|
|
Макрос Magicad --> Autocad, Как написать |
|
|
|
22.9.2016, 10:44
|
Группа: Участники форума
Сообщений: 202
Регистрация: 27.10.2010
Из: Спб
Пользователь №: 78359
|
Хочется написать команду: 1. Magiexplode 2. Выделить всё 3. Enter 4. Взорвать 5. Выделить всё 6. Enter 7. Enter 8. Отсоединить проект
Где почитать о том как это сделать? Может быть кто-то уже делал?
|
|
|
|
|
22.9.2016, 10:50
|
Группа: Участники форума
Сообщений: 3508
Регистрация: 5.3.2009
Из: Газ-Ачака
Пользователь №: 30120
|
ну самое простое что то вроде Код (VL-CMDF "._Magiexplode" "_select" "_all" "_explode" "_select" "_all" "" "" "_Отсоединить проект" )
|
|
|
|
|
22.9.2016, 10:55
|
Группа: Участники форума
Сообщений: 96
Регистрация: 18.4.2006
Из: СПб
Пользователь №: 2670
|
Только бы вот ещё чтобы взрывалось (выделялось для взрыва) не всё, а именно магикадовские элементы.
|
|
|
|
|
22.9.2016, 11:03
|
Группа: Участники форума
Сообщений: 3508
Регистрация: 5.3.2009
Из: Газ-Ачака
Пользователь №: 30120
|
Цитата(zhenekk @ 22.9.2016, 10:55) Только бы вот ещё чтобы взрывалось (выделялось для взрыва) не всё, а именно магикадовские элементы. запутите этот лисп у себя на чертеже и скопируте сюда то что он выдаст в командной строке Код (defun c:zod37 ( / i ss1 lst) (vl-load-com) (princ "\nСписок примитивов на чертеже") (setq i 0 ss1 (ssget "_X") ) (repeat (sslength ss1) (if (not(member (cdr(assoc 0(entget(ssname ss1 i)))) lst)) (setq lst (append lst(list(cdr(assoc 0(entget(ssname ss1 i))))))) ) (setq i (1+ i)) ) (print (acad_strlsort lst))(princ) )
|
|
|
|
|
22.9.2016, 11:23
|
Группа: Участники форума
Сообщений: 96
Регистрация: 18.4.2006
Из: СПб
Пользователь №: 2670
|
Если я всё сделал правильно, то Код Список примитивов на чертеже ("3DSOLID" "ACAD_PROXY_ENTITY" "ARC" "CIRCLE" "DIMENSION" "ELLIPSE" "HATCH" "IMAGE" "INSERT" "LINE" "LWPOLYLINE" "MAGIACCESSORY" "MAGIDIMLINE" "MAGIFLOORORIGO" "MAGIPATHWAYBOX" "MAGIPATHWAYCOMPONENT" "MAGIPATHWAYCONNECTOR" "MAGIPATHWAYSEGMENT" "mcsPseudoCircle" "mcsPseudoHatch" "mcsPseudoLine" "mcsPseudoPolyline" "MTEXT" "SPDSBREAK" "SPDSCONSTRUCTIONLINE" "SPDSGRADIENTMARKER" "SPDSNODEMARK" "SPDSNOTEPOSITION" "SPDSPLANELEVELMARK" "SPDSPOLYMORPHMARK" "SPDSSECTION" "SPDSVSDESCRIPTION" "SPLINE" "TEXT" "VIEWPORT")
|
|
|
|
|
22.9.2016, 11:30
|
Группа: Участники форума
Сообщений: 3508
Регистрация: 5.3.2009
Из: Газ-Ачака
Пользователь №: 30120
|
все верно сделали вот новая версия макроса Код (VL-CMDF "._Magiexplode" (sssetfirst nil(ssget "_X" '((0 . "ACAD_PROXY_ENTITY,MAGIACCESSORY,MAGIDIMLINE,MAGIFLOORORIGO,MAGIPATHWAYBOX,MA GIPATHWAYCOMPONENT,MAGIPATHWAYCONNECTOR,MAGIPATHWAYSEGMENT,mcsPseudoCircle,mcsPs e udoHatch,mcsPseudoLine,mcsPseudoPolyline")))) "_explode" "_select" "_all" "" "" "_Отсоединить проект" ) на счет mcsPseudo-примитивов не уверен откуда они, но лучше их взорвать
Сообщение отредактировал Composter - 22.9.2016, 11:30
|
|
|
|
|
22.9.2016, 11:44
|
Группа: Участники форума
Сообщений: 202
Регистрация: 27.10.2010
Из: Спб
Пользователь №: 78359
|
Цитата(Composter @ 22.9.2016, 11:30) все верно сделали вот новая версия макроса Код (VL-CMDF "._Magiexplode" (sssetfirst nil(ssget "_X" '((0 . "ACAD_PROXY_ENTITY,MAGIACCESSORY,MAGIDIMLINE,MAGIFLOORORIGO,MAGIPATHWAYBOX,MA GIPATHWAYCOMPONENT,MAGIPATHWAYCONNECTOR,MAGIPATHWAYSEGMENT,mcsPseudoCircle,mcsPs e udoHatch,mcsPseudoLine,mcsPseudoPolyline")))) "_explode" "_select" "_all" "" "" "_Отсоединить проект" ) на счет mcsPseudo-примитивов не уверен откуда они, но лучше их взорвать Только у меня вылетает по фатальной ошибке?
|
|
|
|
|
22.9.2016, 11:49
|
Группа: Участники форума
Сообщений: 96
Регистрация: 18.4.2006
Из: СПб
Пользователь №: 2670
|
Ошибка приложения: Неверный список объектов/точек.
|
|
|
|
|
22.9.2016, 13:13
|
Группа: Участники форума
Сообщений: 3508
Регистрация: 5.3.2009
Из: Газ-Ачака
Пользователь №: 30120
|
Код (VL-CMDF "._Magiexplode" (setq zflag (getvar "qaflags"))(setvar "qaflags" 5) "_explode" (ssget "_X" '((0 . "ACAD_PROXY_ENTITY,MAGIACCESSORY,MAGIDIMLINE,MAGIFLOORORIGO,MAGIPATHWAYBOX,MA GIPATHWAYCOMPONENT,MAGIPATHWAYCONNECTOR,MAGIPATHWAYSEGMENT,mcsPseudoCircle,mcsPse udoHatch,mcsPseudoLine,mcsPseudoPolyline"))) "" (setvar "qaflags" zflag) ) ну вот вроде должно взрывать
|
|
|
|
|
22.9.2016, 13:49
|
Группа: Участники форума
Сообщений: 96
Регистрация: 18.4.2006
Из: СПб
Пользователь №: 2670
|
Не-а( Второго "взрыва" не было. Объекты магика остались блоками. Плюс дроссель-клапаны совсем удалились о__О
|
|
|
|
|
22.9.2016, 14:58
|
Группа: Участники форума
Сообщений: 3508
Регистрация: 5.3.2009
Из: Газ-Ачака
Пользователь №: 30120
|
да, мы бы так могли очень долго вести переписку не будь у соседа меджика Код (defun zd141 ( / ) (VL-CMDF "._Magiexplode" (ssget "_X" ) "" ) (VL-CMDF "_explode" (ssget "_X" '((0 . "INSERT") (2 . "`*U*,TITLEBLOCK"))) "") (princ) ) (defun C:zd141()(zd141)) команду отстоединения проекта не знаю запсукать коммандой zd141 з.ы. Взорвать меджиковские объекты и взорвать автокадовские блоки ,которые получились после меджикадовской команды взрыва - это очень-очень-очень большая разница !!!
Сообщение отредактировал Composter - 22.9.2016, 15:01
|
|
|
|
|
22.9.2016, 15:45
|
Группа: Участники форума
Сообщений: 96
Регистрация: 18.4.2006
Из: СПб
Пользователь №: 2670
|
Composter, спасибо за труды! Но вот без полного взрыва блоков не то(
|
|
|
|
|
22.9.2016, 16:43
|
Группа: Участники форума
Сообщений: 3508
Регистрация: 5.3.2009
Из: Газ-Ачака
Пользователь №: 30120
|
он взырвает блоки котрые остаются после взрывов воздуховодов и труб. зачем все блоки взрывать то (на архитектуре то тоже есть блоки)?
|
|
|
|
|
23.9.2016, 8:57
|
Группа: Участники форума
Сообщений: 96
Регистрация: 18.4.2006
Из: СПб
Пользователь №: 2670
|
Так вот воздуховоды блоками и остались(
|
|
|
|
|
23.9.2016, 9:55
|
Группа: Участники форума
Сообщений: 3508
Регистрация: 5.3.2009
Из: Газ-Ачака
Пользователь №: 30120
|
ну тогда давайте файлы (с файлом проекта) до взрыва и после взрыва(их нужно заархивировать чтобы выложить ). жедательно чтобы версия не более 2014. потому что у меня меджикадовские блоки все взорвались
|
|
|
|
|
23.9.2016, 10:34
|
Группа: Участники форума
Сообщений: 3508
Регистрация: 5.3.2009
Из: Газ-Ачака
Пользователь №: 30120
|
а если так Код (defun zd141 ( / zflag) (setq zflag (getvar "qaflags")) (setvar "qaflags" 5) (VL-CMDF "._Magiexplode" (ssget "_X" ) "" ) (VL-CMDF "_explode" (ssget "_X" '((0 . "INSERT") (2 . "`*U*,TITLEBLOCK"))) "") (setvar "qaflags" zflag) (princ) ) (defun C:zd141()(zd141)) если не получится то запустите и посмотрите выделется ли все блоки Код (sssetfirst nil(ssget "_X" '((0 . "INSERT") (2 . "`*U*,TITLEBLOCK"))))
|
|
|
|
|
23.9.2016, 11:00
|
Группа: Участники форума
Сообщений: 202
Регистрация: 27.10.2010
Из: Спб
Пользователь №: 78359
|
Цитата(Composter @ 23.9.2016, 10:34) а если так Код (defun zd141 ( / zflag) (setq zflag (getvar "qaflags")) (setvar "qaflags" 5) (VL-CMDF "._Magiexplode" (ssget "_X" ) "" ) (VL-CMDF "_explode" (ssget "_X" '((0 . "INSERT") (2 . "`*U*,TITLEBLOCK"))) "") (setvar "qaflags" zflag) (princ) ) (defun C:zd141()(zd141)) Работает! Спасибо! А можно ещё сделать так чтобы не было предупреждения: "Предупреждение: после расчленения объекты потеряют свойства объектов Magicad"? И автоматизировать отсоединение проекта?
Сообщение отредактировал yegres - 23.9.2016, 11:01
|
|
|
|
|
23.9.2016, 11:06
|
Группа: Участники форума
Сообщений: 3508
Регистрация: 5.3.2009
Из: Газ-Ачака
Пользователь №: 30120
|
я ж писал, что команды отсоединения проекта я не знаю, если вы скажите то можно добавить. на счет всплывающих окон , эти окна всплывают при выполнении стороних программ и на них повлиять нельзя.
|
|
|
|
|
23.9.2016, 11:10
|
Группа: Участники форума
Сообщений: 96
Регистрация: 18.4.2006
Из: СПб
Пользователь №: 2670
|
Пока не могу. В другом офисе сегодня.
|
|
|
|
|
28.9.2016, 10:18
|
Группа: Участники форума
Сообщений: 96
Регистрация: 18.4.2006
Из: СПб
Пользователь №: 2670
|
Работает! Но разбивает один блок, который не хотелось бы трогать. Вот его свойства (это из шпротовских дин. блоков):
|
|
|
|
|
28.9.2016, 11:50
|
Группа: Участники форума
Сообщений: 3508
Регистрация: 5.3.2009
Из: Газ-Ачака
Пользователь №: 30120
|
это конечно странно что вы используете динамические блоки в меджиковских чертежах . ну да ладно... теперь zd141 - взрыв меджикадоский с выделением всего чертежа zd142 - взрыв получившихся блоков (кроме динамических) zd143 - все вместе Код (vl-load-com)
(defun zd141 ( / ) (VL-CMDF "._Magiexplode" (ssget "_X" ) "" ) (princ) ) (defun C:zd141()(zd141))
(defun zd142 ( / zflag ss1 ss2) (if (setq ss1 (ssget "_X" '((0 . "INSERT") (2 . "`*U*,TITLEBLOCK")))) (progn (setq ss2 (ssadd)) (mapcar '(lambda (xx) (if (equal (vla-get-effectivename(vlax-ename->vla-object xx)) (vla-get-name(vlax-ename->vla-object xx)) ) (setq ss2 (ssadd xx ss2)) ) ) (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss1))) ) (if (> (sslength ss2) 0) (progn (setq zflag (getvar "qaflags")) (setvar "qaflags" 5) (VL-CMDF "_explode" ss2 "" "") (setvar "qaflags" zflag) ) ) ) ) (princ) ) (defun C:zd142()(zd142))
(defun zd143 ( / )(zd141)(zd142)(princ)) (defun C:zd143()(zd143))
|
|
|
|
|
28.9.2016, 13:35
|
Группа: Участники форума
Сообщений: 96
Регистрация: 18.4.2006
Из: СПб
Пользователь №: 2670
|
Цитата(Composter @ 28.9.2016, 11:50) это конечно странно что вы используете динамические блоки в меджиковских чертежах . ну да ладно...
теперь zd141 - взрыв меджикадоский с выделением всего чертежа zd142 - взрыв получившихся блоков (кроме динамических) zd143 - все вместе Ну дин.блоки как вспомогательный элемент. Отметки, разрывы, уклоны.... А вот про команды не понял. 141 и 142 надо последовательно выполнять?
|
|
|
|
|
28.9.2016, 14:14
|
Группа: Участники форума
Сообщений: 3508
Регистрация: 5.3.2009
Из: Газ-Ачака
Пользователь №: 30120
|
Цитата(zhenekk @ 28.9.2016, 13:35) А вот про команды не понял. 141 и 142 надо последовательно выполнять? нет, если хотите чтобы все сразу дела то zd143 если только меджиком взорвать - zd141, либо блоки после меджкиовского взырва zd142 еще рекомендую лиспт от сюда flatten1 http://forum.dwg.ru/showpost.php?p=294435&postcount=2 чтобы сделать полностью плоским чертеж.
|
|
|
|
|
28.9.2016, 14:24
|
Группа: Участники форума
Сообщений: 96
Регистрация: 18.4.2006
Из: СПб
Пользователь №: 2670
|
Composter Разобрался! Спасибо!!!
Flatten1 юзаю часто. А можешь "утюг" в свой код вшить? Было бы вообще здорово)
|
|
|
|
|
28.9.2016, 18:26
|
Группа: Участники форума
Сообщений: 3508
Регистрация: 5.3.2009
Из: Газ-Ачака
Пользователь №: 30120
|
Код (defun FLATTEN1 () (command "_.UCS" "") (command "_.move" "_all" "" '(0 0 1e99) "" "_.move" "_p" "" '(0 0 -1e99) "") (princ) ) (defun C:FLATTEN1()(FLATTEN1))
(defun zd143 ( / )(zd141)(zd142)(FLATTEN1)(princ)) (defun C:zd143()(zd143)) сооветсвенно заменить строки Код (defun zd143 ( / )(zd141)(zd142)(princ)) (defun C:zd143()(zd143))
Сообщение отредактировал Composter - 28.9.2016, 18:26
|
|
|
|
|
28.9.2016, 20:23
|
Группа: Участники форума
Сообщений: 678
Регистрация: 14.4.2008
Из: Minsk
Пользователь №: 17754
|
я ж уже лет 5 назад такое написал. только на VBA.
|
|
|
|
|
29.9.2016, 9:00
|
Группа: Участники форума
Сообщений: 96
Регистрация: 18.4.2006
Из: СПб
Пользователь №: 2670
|
Composter, спасибо большое! Всё работает отлично!
Roma а ссылку?
|
|
|
|
|
6.3.2018, 13:21
|
Группа: Участники форума
Сообщений: 96
Регистрация: 18.4.2006
Из: СПб
Пользователь №: 2670
|
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
Реклама
ООО «Арктика групп» ИНН: 7713634274
ООО «УНИСПЛИТ» ИНН: 6453155081 erid:2Vtzqx6MLPt
Последние сообщения Форума
|