IPB IPB
Проектирование, монтаж, наладка, сервис

Здравствуйте, гость ( Вход | Регистрация )

- Рекомендации АВОК 5.5.1-2023
«Системы противодымной вентиляции жилых и общественный зданий»

- Рекомендации АВОК 7.8.3-2023
«Проектирование инженерных систем лабораторий»

- Рекомендации АВОК 7.10-2023
«Здания жилые и общественные. Защита от шума и вибрации инженерного оборудования»

АВОК в соц. сетях
ИНН: 7714824045
 
Добавить ответ в эту темуОткрыть тему
> Макрос Magicad --> Autocad, Как написать
yegres
сообщение 22.9.2016, 10:44
Сообщение #1





Группа: Участники форума
Сообщений: 202
Регистрация: 27.10.2010
Из: Спб
Пользователь №: 78359



Хочется написать команду:
1. Magiexplode
2. Выделить всё
3. Enter
4. Взорвать
5. Выделить всё
6. Enter
7. Enter
8. Отсоединить проект

Где почитать о том как это сделать? Может быть кто-то уже делал?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Composter
сообщение 22.9.2016, 10:50
Сообщение #2





Группа: Участники форума
Сообщений: 3494
Регистрация: 5.3.2009
Из: Газ-Ачака
Пользователь №: 30120



ну самое простое что то вроде
Код
(VL-CMDF "._Magiexplode" "_select" "_all" "_explode" "_select" "_all" "" "" "_Отсоединить проект" )
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zhenekk
сообщение 22.9.2016, 10:55
Сообщение #3





Группа: Участники форума
Сообщений: 96
Регистрация: 18.4.2006
Из: СПб
Пользователь №: 2670



Только бы вот ещё чтобы взрывалось (выделялось для взрыва) не всё, а именно магикадовские элементы.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Composter
сообщение 22.9.2016, 11:03
Сообщение #4





Группа: Участники форума
Сообщений: 3494
Регистрация: 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)
)
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zhenekk
сообщение 22.9.2016, 11:23
Сообщение #5





Группа: Участники форума
Сообщений: 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")
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Composter
сообщение 22.9.2016, 11:30
Сообщение #6





Группа: Участники форума
Сообщений: 3494
Регистрация: 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-примитивов не уверен откуда они, но лучше их взорвать ph34r.gif

Сообщение отредактировал Composter - 22.9.2016, 11:30
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
yegres
сообщение 22.9.2016, 11:44
Сообщение #7





Группа: Участники форума
Сообщений: 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-примитивов не уверен откуда они, но лучше их взорвать ph34r.gif

Только у меня вылетает по фатальной ошибке?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zhenekk
сообщение 22.9.2016, 11:49
Сообщение #8





Группа: Участники форума
Сообщений: 96
Регистрация: 18.4.2006
Из: СПб
Пользователь №: 2670



Ошибка приложения: Неверный список объектов/точек.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Composter
сообщение 22.9.2016, 13:13
Сообщение #9





Группа: Участники форума
Сообщений: 3494
Регистрация: 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)  )


ну вот вроде должно взрывать
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zhenekk
сообщение 22.9.2016, 13:49
Сообщение #10





Группа: Участники форума
Сообщений: 96
Регистрация: 18.4.2006
Из: СПб
Пользователь №: 2670



Не-а(
Второго "взрыва" не было. Объекты магика остались блоками.
Плюс дроссель-клапаны совсем удалились о__О
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Composter
сообщение 22.9.2016, 14:58
Сообщение #11





Группа: Участники форума
Сообщений: 3494
Регистрация: 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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zhenekk
сообщение 22.9.2016, 15:45
Сообщение #12





Группа: Участники форума
Сообщений: 96
Регистрация: 18.4.2006
Из: СПб
Пользователь №: 2670



Composter, спасибо за труды!
Но вот без полного взрыва блоков не то(
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Composter
сообщение 22.9.2016, 16:43
Сообщение #13





Группа: Участники форума
Сообщений: 3494
Регистрация: 5.3.2009
Из: Газ-Ачака
Пользователь №: 30120



он взырвает блоки котрые остаются после взрывов воздуховодов и труб. зачем все блоки взрывать то (на архитектуре то тоже есть блоки)?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zhenekk
сообщение 23.9.2016, 8:57
Сообщение #14





Группа: Участники форума
Сообщений: 96
Регистрация: 18.4.2006
Из: СПб
Пользователь №: 2670



Так вот воздуховоды блоками и остались(
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Composter
сообщение 23.9.2016, 9:55
Сообщение #15





Группа: Участники форума
Сообщений: 3494
Регистрация: 5.3.2009
Из: Газ-Ачака
Пользователь №: 30120



ну тогда давайте файлы (с файлом проекта) до взрыва и после взрыва(их нужно заархивировать чтобы выложить ). жедательно чтобы версия не более 2014. потому что у меня меджикадовские блоки все взорвались
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Composter
сообщение 23.9.2016, 10:34
Сообщение #16





Группа: Участники форума
Сообщений: 3494
Регистрация: 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"))))
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
yegres
сообщение 23.9.2016, 11:00
Сообщение #17





Группа: Участники форума
Сообщений: 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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Composter
сообщение 23.9.2016, 11:06
Сообщение #18





Группа: Участники форума
Сообщений: 3494
Регистрация: 5.3.2009
Из: Газ-Ачака
Пользователь №: 30120



я ж писал, что команды отсоединения проекта я не знаю, если вы скажите то можно добавить.
на счет всплывающих окон , эти окна всплывают при выполнении стороних программ и на них повлиять нельзя.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zhenekk
сообщение 23.9.2016, 11:10
Сообщение #19





Группа: Участники форума
Сообщений: 96
Регистрация: 18.4.2006
Из: СПб
Пользователь №: 2670



Пока не могу. В другом офисе сегодня.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zhenekk
сообщение 28.9.2016, 10:18
Сообщение #20





Группа: Участники форума
Сообщений: 96
Регистрация: 18.4.2006
Из: СПб
Пользователь №: 2670



Работает!
Но разбивает один блок, который не хотелось бы трогать.
Вот его свойства (это из шпротовских дин. блоков):
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Composter
сообщение 28.9.2016, 11:50
Сообщение #21





Группа: Участники форума
Сообщений: 3494
Регистрация: 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))
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zhenekk
сообщение 28.9.2016, 13:35
Сообщение #22





Группа: Участники форума
Сообщений: 96
Регистрация: 18.4.2006
Из: СПб
Пользователь №: 2670



Цитата(Composter @ 28.9.2016, 11:50) *
это конечно странно что вы используете динамические блоки в меджиковских чертежах . ну да ладно...

теперь zd141 - взрыв меджикадоский с выделением всего чертежа
zd142 - взрыв получившихся блоков (кроме динамических)
zd143 - все вместе


Ну дин.блоки как вспомогательный элемент. Отметки, разрывы, уклоны....

А вот про команды не понял. 141 и 142 надо последовательно выполнять?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Composter
сообщение 28.9.2016, 14:14
Сообщение #23





Группа: Участники форума
Сообщений: 3494
Регистрация: 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 чтобы сделать полностью плоским чертеж.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zhenekk
сообщение 28.9.2016, 14:24
Сообщение #24





Группа: Участники форума
Сообщений: 96
Регистрация: 18.4.2006
Из: СПб
Пользователь №: 2670



Composter
Разобрался! Спасибо!!!

Flatten1 юзаю часто.
А можешь "утюг" в свой код вшить? Было бы вообще здорово)
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Composter
сообщение 28.9.2016, 18:26
Сообщение #25





Группа: Участники форума
Сообщений: 3494
Регистрация: 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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Roma
сообщение 28.9.2016, 20:23
Сообщение #26





Группа: Участники форума
Сообщений: 678
Регистрация: 14.4.2008
Из: Minsk
Пользователь №: 17754



я ж уже лет 5 назад такое написал. только на VBA.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zhenekk
сообщение 29.9.2016, 9:00
Сообщение #27





Группа: Участники форума
Сообщений: 96
Регистрация: 18.4.2006
Из: СПб
Пользователь №: 2670



Composter, спасибо большое! Всё работает отлично!

Roma а ссылку?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zhenekk
сообщение 6.3.2018, 13:21
Сообщение #28





Группа: Участники форума
Сообщений: 96
Регистрация: 18.4.2006
Из: СПб
Пользователь №: 2670



http://forum.abok.ru/index.php?showtopic=4...p;#entry1358233
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Добавить ответ в эту темуОткрыть тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

Реклама
ООО «Арктика групп» ИНН: 7713634274


ООО «УНИСПЛИТ» ИНН: 6453155081 erid:2VtzquYEfbY

Последние сообщения Форума





Rambler's Top100 Rambler's Top100

RSS Текстовая версия Сейчас: 19.3.2024, 9:37