Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Макрос Magicad --> Autocad
Диалог специалистов АВОК > ФАЙЛОТЕКА СПЕЦИАЛИСТА > Программы, расчеты > MagiCAD (Магикад)
yegres
Хочется написать команду:
1. Magiexplode
2. Выделить всё
3. Enter
4. Взорвать
5. Выделить всё
6. Enter
7. Enter
8. Отсоединить проект

Где почитать о том как это сделать? Может быть кто-то уже делал?
Composter
ну самое простое что то вроде
Код
(VL-CMDF "._Magiexplode" "_select" "_all" "_explode" "_select" "_all" "" "" "_Отсоединить проект" )
zhenekk
Только бы вот ещё чтобы взрывалось (выделялось для взрыва) не всё, а именно магикадовские элементы.
Composter
Цитата(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
Если я всё сделал правильно, то

Код
Список примитивов на чертеже
("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
все верно сделали вот новая версия макроса
Код
(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
yegres
Цитата(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
Ошибка приложения: Неверный список объектов/точек.
Composter
Код
(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
Не-а(
Второго "взрыва" не было. Объекты магика остались блоками.
Плюс дроссель-клапаны совсем удалились о__О
Composter
да, мы бы так могли очень долго вести переписку не будь у соседа меджика
Код
(defun zd141 (  / )
(VL-CMDF "._Magiexplode"  (ssget "_X" ) "" )
(VL-CMDF "_explode" (ssget "_X" '((0 . "INSERT") (2 . "`*U*,TITLEBLOCK"))) "")
(princ)
)
(defun C:zd141()(zd141))

команду отстоединения проекта не знаю

запсукать коммандой zd141

з.ы. Взорвать меджиковские объекты и взорвать автокадовские блоки ,которые получились после меджикадовской команды взрыва - это очень-очень-очень большая разница !!!
zhenekk
Composter, спасибо за труды!
Но вот без полного взрыва блоков не то(
Composter
он взырвает блоки котрые остаются после взрывов воздуховодов и труб. зачем все блоки взрывать то (на архитектуре то тоже есть блоки)?
zhenekk
Так вот воздуховоды блоками и остались(
Composter
ну тогда давайте файлы (с файлом проекта) до взрыва и после взрыва(их нужно заархивировать чтобы выложить ). жедательно чтобы версия не более 2014. потому что у меня меджикадовские блоки все взорвались
Composter
а если так
Код
(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
Цитата(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"?
И автоматизировать отсоединение проекта?
Composter
я ж писал, что команды отсоединения проекта я не знаю, если вы скажите то можно добавить.
на счет всплывающих окон , эти окна всплывают при выполнении стороних программ и на них повлиять нельзя.
zhenekk
Пока не могу. В другом офисе сегодня.
zhenekk
Работает!
Но разбивает один блок, который не хотелось бы трогать.
Вот его свойства (это из шпротовских дин. блоков):
Composter
это конечно странно что вы используете динамические блоки в меджиковских чертежах . ну да ладно...

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

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


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

А вот про команды не понял. 141 и 142 надо последовательно выполнять?
Composter
Цитата(zhenekk @ 28.9.2016, 13:35) *
А вот про команды не понял. 141 и 142 надо последовательно выполнять?

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

еще рекомендую лиспт от сюда flatten1 http://forum.dwg.ru/showpost.php?p=294435&postcount=2 чтобы сделать полностью плоским чертеж.
zhenekk
Composter
Разобрался! Спасибо!!!

Flatten1 юзаю часто.
А можешь "утюг" в свой код вшить? Было бы вообще здорово)
Composter
Код
(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))
Roma
я ж уже лет 5 назад такое написал. только на VBA.
zhenekk
Composter, спасибо большое! Всё работает отлично!

Roma а ссылку?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.