Тема: LISP. Построение проекций 3D тел в пространстве модели

;|====================================================
Построение проекций 3D тел в пространстве модели
Программа Дениса Флюстикова "Solprof_Den" от 07.11.06
Макрос для кнопки: ^C^C^P(load "Solprof_Den");Solprof_Den
Замечания и предложения по адресу fd-@mail.ru
Осознаю, что код корявый, но программа рабочая и надеюсь, что она может пригодиться тем,
кто предпочитает работать в пространстве модели
====================================================|;
(defun C:Solprof_Den (/ aa0 aa1 aa2 osmode *error*)
(setq aa0 nil
      aa1 nil
      osmode (getvar "OSMODE"))
(princ "\nВыбор 3М тел <3М виды>")
(setq aa0 (ssget '((0 . "3DSOLID"))))
(if (null aa0)(progn
(initget "С Л П В Н")
(setq aa1 (getkword "\n3М вид [Спереди/сЛева/сПрава/сВерху/сНизу]<Спереди>:"))
(setq aa0 (ssget '((0 . "3DSOLID"))))
))
(if aa0 (progn
(if (null aa1)(setq aa1 "С"))
(setq aa1 (vl-position aa1 '("С" "Л" "П" "В" "Н")))
(vl-load-com)
(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
(setvar "CMDECHO" 0)
(setvar "tilemode" 0)
(princ "\nПодождите, выполняется обработка данных...\n")
(defun *error* (msg)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
(setvar "cmdecho" 1)
(princ "\nВыход во время обработки данных\n")
)
(if (getcname "т-профиль")
(setq aa2 ".т-профиль")
(setq aa2 "_.solprof"))
(command "_.mspace"
     "_-view" (nth aa1 '("_top" "_left" "_right" "_back" "_front"))
     aa2)
(if (/= (getvar 'cmdactive) 1)
(command "_-vports" ""
     "_.mspace"
     "_-view" (nth aa1 '("_top" "_left" "_right" "_back" "_front"))
     aa2))
(command aa0 "" "" "" ""
     "'_zoom" "_p")
(setvar "tilemode" 1)
(command "_erase"  (entlast) "")
(setvar "OSMODE" 0)
(if (> aa1 0)
(command "_rotate3d"  (entlast) "" '(0 0 0)
     (nth aa1 (list '(0 0 0) '(0 1 0) '(0 -1 0) '(1 0 0) '(-1 0 0))) 90
     "_move"  (entlast) "" '(0 0 0)
     (mapcar '* (getvar "VIEWCTR") (nth aa1 (list '(0 0 0) '(1 0 0) '(1 0 0) '(0 1 0) '(0 1 0)))))
)
(setq aa1 (cadr (grread 1 1)))
(vl-cmdf "_move"  (entlast) "" aa1)
(setvar "OSMODE" osmode)
(setq aa2 (vl-cmdf pause))
(if (and aa2 (equal aa1 (getvar "lastpoint") 0.000001))
(command "_.undo" 1))
(setvar "CMDECHO" 1)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
))
(princ)
)

Re: LISP. Построение проекций 3D тел в пространстве модели

;|====================================================
"Solprof_Den" от 08.11.06
Был замечен отказ работы программы, если в ACAD’е еще не был загружен "AcSolids.arx". Исправил.
====================================================|;
(defun C:Solprof_Den (/ aa0 aa1 aa2 osmode *error*)
(setq aa0 nil
      aa1 nil
      osmode (getvar "OSMODE"))
(princ "\nВыбор 3М тел <3М виды>")
(setq aa0 (ssget '((0 . "3DSOLID"))))
(if (null aa0)(progn
(initget "С Л П В Н")
(setq aa1 (getkword "\n3М вид [Спереди/сЛева/сПрава/сВерху/сНизу]<Спереди>:"))
(setq aa0 (ssget '((0 . "3DSOLID"))))
))
(if aa0 (progn
(if (null aa1)(setq aa1 "С"))
(setq aa1 (vl-position aa1 '("С" "Л" "П" "В" "Н")))
(vl-load-com)
(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
(setvar "CMDECHO" 0)
(setvar "tilemode" 0)
(defun *error* (msg)
(setvar "OSMODE" osmode)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
(setvar "cmdecho" 1)
(princ "\nВыход во время обработки данных\n")
)
(arxload "AcSolids.arx")
(command "_.mspace"
     "_-view" (nth aa1 '("_top" "_left" "_right" "_back" "_front")))
(princ "\nПодождите, выполняется обработка данных...\n")
(setq aa2 (vl-catch-all-apply 'c:solprof (list aa0 "" "")))
(if (/= (type aa2) 'PICKSET)(progn
(command "_-vports" ""
     "_.mspace"
     "_-view" (nth aa1 '("_top" "_left" "_right" "_back" "_front")))
(princ "\nПодождите, выполняется обработка данных...\n")
(c:solprof aa0 "" "" "")
))
(command "'_zoom" "_p")
(setvar "tilemode" 1)
(command "_erase"  (entlast) "")
(setvar "OSMODE" 0)
(if (> aa1 0)
(command "_rotate3d"  (entlast) "" '(0 0 0)
     (nth aa1 (list '(0 0 0) '(0 1 0) '(0 -1 0) '(1 0 0) '(-1 0 0))) 90
     "_move"  (entlast) "" '(0 0 0)
     (mapcar '* (getvar "VIEWCTR") (nth aa1 (list '(0 0 0) '(1 0 0) '(1 0 0) '(0 1 0)
'(0 1 0)))))
)
(setq aa1 (cadr (grread 1 1)))
(vl-cmdf "_move"  (entlast) "" aa1)
(setvar "OSMODE" osmode)
(princ "\nУкажите положение проекции:")
(setq aa2 (vl-cmdf pause))
(if (and aa2 (equal aa1 (getvar "lastpoint") 0.000001))
(command "_.undo" 1))
(setvar "CMDECHO" 1)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
))
(princ)
)

Re: LISP. Построение проекций 3D тел в пространстве модели

;|====================================================
"Solprof_Den" от 18.11.06
Новое:
Возможность построения проекции на заданном слое
====================================================|;
(defun C:Solprof_Den (/ layer aa0 aa1 aa2 osmode *error*)
(setq layer "Основной" ;Слой построения проекции
      aa0 nil
      aa1 nil
      osmode (getvar "OSMODE"))
(princ "\nВыбор 3М тел <3М виды>")
(setq aa0 (ssget '((0 . "3DSOLID"))))
(if (null aa0)(progn
(initget "С Л П В Н")
(setq aa1 (getkword "\n3М вид [Спереди/сЛева/сПрава/сВерху/сНизу]<Спереди>:"))
(setq aa0 (ssget '((0 . "3DSOLID"))))
))
(if aa0 (progn
(if (null aa1)(setq aa1 "С"))
(setq aa1 (vl-position aa1 '("С" "Л" "П" "В" "Н")))
(vl-load-com)
(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
(setvar "CMDECHO" 0)
(setvar "tilemode" 0)
(defun *error* (msg)
(setvar "OSMODE" osmode)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
(setvar "cmdecho" 1)
(princ "\nВыход во время обработки данных\n")
)
(arxload "AcSolids.arx")
(command "_.mspace"
     "_-view" (nth aa1 '("_top" "_left" "_right" "_back" "_front")))
(princ "\nПодождите, выполняется обработка данных...\n")
(setq aa2 (vl-catch-all-apply 'c:solprof (list aa0 "" "")))
(if (/= (type aa2) 'PICKSET)(progn
(command "_-vports" ""
     "_.mspace"
     "_-view" (nth aa1 '("_top" "_left" "_right" "_back" "_front")))
(princ "\nПодождите, выполняется обработка данных...\n")
(c:solprof aa0 "" "" "")
))
(command "'_.zoom" "_p"
     "_.erase"  (entlast) "")
(setq aa0 (entlast)
      aa2 (vlax-ename->vla-object aa0))
(if (tblsearch "Layer" layer)(progn
(vlax-for x (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
              (vla-get-name aa2))
(vla-put-layer x layer)
(vla-put-lineweight x -1)
)
(vlax-put-property aa2 'layer layer)
(vlax-put-property aa2 'lineweight -1)
))
(setvar "tilemode" 1)
(setvar "OSMODE" 0)
(if (> aa1 0)
(command "_.rotate3d"  aa0 "" '(0 0 0)
     (nth aa1 (list 0 '(0 1 0) '(0 -1 0) '(1 0 0) '(-1 0 0))) 90
     "_.move"  aa0 "" '(0 0 0)
     (mapcar '* (getvar "VIEWCTR") (nth aa1 (list 0 '(1 0 0) '(1 0 0) '(0 1 0) '(0 1 0)))))
)
(setq aa1 (cadr (grread 1 1)))
(vl-cmdf "_move"  aa0 "" aa1)
(setvar "OSMODE" osmode)
(princ "\nУкажите положение проекции:")
(setq aa2 (vl-cmdf pause))
(if (and aa2 (equal aa1 (getvar "lastpoint") 0.000001))
(command "_.undo" 1))
(setvar "CMDECHO" 1)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
))
(princ)
)

Re: LISP. Построение проекций 3D тел в пространстве модели

;|====================================================
Построение проекций 3D тел из пространства модели
"Solprof_Den" от 24.12.06
Новое:
Возможность построения проекции на заданном слое, без создания дополнительных слоев.
Выбор типа проекции (блоком или примитивами).
====================================================|;
(defun C:Solprof_Den (/ layer aa0 aa1 aa2 aa3 osmode cvport *error*)
(setq layer "Основной" ;Слой построения проекции
      aa0 nil
      aa1 nil
      osmode (getvar "OSMODE"))
(princ "\nВыбор 3М тел <3М виды>")
(setq aa0 (ssget '((0 . "3DSOLID"))))
(if (null aa0)(progn
(initget "Г Л П В Н")
(setq aa1 (getkword "\n3М вид [Главный вид/сЛева/сПрава/сВерху/сНизу]<Главный>:"))
(setq aa0 (ssget '((0 . "3DSOLID"))))
))
(if aa0 (progn
(if (null aa1)(setq aa1 "Г"))
(setq aa1 (vl-position aa1 '("Г" "Л" "П" "В" "Н")))
(vl-load-com)
(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
(setvar "CMDECHO" 0)
(setvar "tilemode" 0)
(defun *error* (msg)
(setvar "OSMODE" osmode)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
(setvar "cmdecho" 1)
(princ "\nВыход во время обработки данных\n")
)
(arxload "AcSolids.arx")
(setq cvport (getvar "CVPORT"))
(command "_.mspace"
     "_.vpoint" "_r" (nth aa1 '(0 180 0 90 270)) (if (zerop aa1) 90 0))
(princ "\nПодождите, выполняется обработка данных...\n")
(setq aa2 (vl-catch-all-apply 'c:solprof (list aa0 "" "")))
(if (/= (type aa2) 'PICKSET)(progn
(command "_-vports" ""
     "_.mspace"
     "_.vpoint" "_r" (nth aa1 '(0 0 180 90 270)) (if (zerop aa1) 90 0))
(princ "\nПодождите, выполняется обработка данных...\n")
(c:solprof aa0 "" "" "")
))
(setq aa0 (entlast)
      aa2 (cdr (assoc 8 (entget aa0)))
      aa3 (cdr (assoc 2 (entget aa0))))
(vla-delete (vlax-ename->vla-object aa0))
(vla-Delete (vla-Item (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object))) aa3))
(setq aa0 (vla-get-Layers (vla-get-activedocument (vlax-get-acad-object))))
(if (eq (type (vl-catch-all-apply 'vla-Item (list aa0 aa2))) 'VLA-OBJECT)
(vl-catch-all-apply 'vla-Delete (list (vla-Item aa0 aa2))))
(setq aa0 (entlast)
      aa3 (cdr (assoc 8 (entget aa0)))
      aa2 (vlax-ename->vla-object aa0))
(if (not (tblsearch "Layer" layer))
(setq layer (getvar "CLAYER")))
(if (= (cdr (assoc 70 (tblsearch "Layer" layer))) 4)
(princ (strcat "\nСлой " layer " заблокирован\n"))(progn
(vlax-for x (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
              (vla-get-name aa2))
(vla-put-layer x layer)
(vla-put-lineweight x -1)
)
(vlax-put-property aa2 'layer layer)
(vlax-put-property aa2 'lineweight -1)
(setq aa2 (vla-get-Layers (vla-get-activedocument (vlax-get-acad-object))))
(if (eq (type (vl-catch-all-apply 'vla-Item (list aa2 aa3))) 'VLA-OBJECT)
(vl-catch-all-apply 'vla-Delete (list (vla-Item aa2 aa3))))
))
(command "'_.zoom" "_p")
(if (= cvport 1)(command "_.pspace"))
(setvar "tilemode" 1)
(setvar "OSMODE" 0)
(if (> aa1 0)
(command "_.rotate3d"  aa0 "" '(0 0 0)
     (nth aa1 (list 0 '(0 1 0) '(0 -1 0) '(1 0 0) '(-1 0 0))) 90
     "_.move"  aa0 "" '(0 0 0)
     (mapcar '* (getvar "VIEWCTR") (nth aa1 (list 0 '(1 0 0) '(1 0 0) '(0 1 0) '(0 1 0)))))
)
(setq aa1 (cadr (grread 1 1))
      aa3 1); Проекция: 0 - Блоком, 1 - Примитивами
(while aa1
(vl-cmdf "_move"  aa0 "" aa1)
(setvar "OSMODE" osmode)
(princ (strcat "\nУкажите положение проекции <" (nth aa3 '("Примитивами>:" "Блоком>:"))))
(setq aa2 (vl-cmdf pause))
(if (and aa2 (equal aa1 (getvar "lastpoint") 0.000001))(progn
(setq aa2 (getvar 'lastprompt)
      aa2 (substr aa2 (+ (vl-string-search ">:" aa2) 3)))
(if (= aa2 "0")
(setq aa1 nil)(progn
(command "_.undo" 1)
(setvar "OSMODE" 0)
(setq aa3 (abs (1- aa3)))
)))
(setq aa1 nil)
)
)
(if aa2
(if (= aa3 1)(progn
(setq aa3 (cdr (assoc 2 (entget aa0))))
(command "_.explode" aa0)
(vla-Delete (vla-Item (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object))) aa3))
))
(command "_.erase" aa0 "")
)
(setvar "CMDECHO" 1)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
))
(princ)
)

Re: LISP. Построение проекций 3D тел в пространстве модели

;|=============================================
Внимание!
Ввел DCL-диалог, поэтому в файл "Solprof_Den.lsp" вставить текст
только до строчки:
; Конец файла "Solprof_Den.lsp"
далее текст для файла "Solprof_Den.dcl"
Построение проекций 3D тел из пространства модели
Программа Дениса Флюстикова "Solprof_Den" от 05.03.07
Новое:
Введение DCL-диалога уменьшило диалог выбора 3М вида на один клик
Макрос для кнопки:
^C^C^P(load "Solprof_Den");Solprof_Den
Замечания и предложения по адресу fd-@mail.ru
=============================================|;

(defun C:Solprof_Den (/ layer aa0 aa1 aa2 aa3 osmode cvport *error* dcl_id)
(setq layer "Основной" ;Слой построения проекции
      osmode (getvar "OSMODE"))
(princ "\nВыбор 3М тел <3М виды>")
(if (setq aa0 (ssget '((0 . "3DSOLID"))))
(setq aa1 0)
(progn
(setq aa0 (getvar "VIEWCTR")
      aa1 (cadr (grread 1 1))
      aa2 (angle aa0 aa1)
      aa3 (distance aa0 aa1)
      aa0 (getvar "SCREENSIZE")
      aa1 (/ (cadr aa0)(getvar "VIEWSIZE"))
      aa0 (mapcar '/ aa0 '(2 2))
      aa1 (polar aa0 (- aa2) (* aa3 aa1))
      aa1 (mapcar '(lambda (q) (fix q)) aa1)
      aa0 nil
      dcl_id (load_dialog "Solprof_Den"))
(if (not (new_dialog "Solprof_Den" dcl_id "" aa1))(exit))
(mode_tile "aa1" 0)
(set_tile  "aa1" "0")
(action_tile "aa1" "(setq aa1 (read $value))(done_dialog)")
(action_tile "cancel" "(setq aa1 nil)(done_dialog)")
(start_dialog)
(unload_dialog dcl_id)
(if aa1
(setq aa0 (ssget '((0 . "3DSOLID")))))
))
(if aa0 (progn
(vl-load-com)
(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
(setvar "CMDECHO" 0)
(setvar "tilemode" 0)
(defun *error* (msg)
(setvar "OSMODE" osmode)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
(setvar "cmdecho" 1)
(princ "\nВыход во время обработки данных\n")
)
(arxload "AcSolids.arx")
(setq cvport (getvar "CVPORT"))
(command "_.mspace"
     "_.vpoint" "_r" (nth aa1 '(0 180 0 90 270)) (if (zerop aa1) 90 0))
(princ "\nПодождите, выполняется обработка данных...\n")
(setq aa2 (vl-catch-all-apply 'c:solprof (list aa0 "" "")))
(if (/= (type aa2) 'PICKSET)(progn
(command "_-vports" ""
     "_.mspace"
     "_.vpoint" "_r" (nth aa1 '(0 0 180 90 270)) (if (zerop aa1) 90 0))
(princ "\nПодождите, выполняется обработка данных...\n")
(c:solprof aa0 "" "" "")
))
(setq aa0 (entlast)
      aa2 (cdr (assoc 8 (entget aa0)))
      aa3 (cdr (assoc 2 (entget aa0))))
(vla-delete (vlax-ename->vla-object aa0))
(vla-Delete (vla-Item (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object))) aa3))
(setq aa0 (vla-get-Layers (vla-get-activedocument (vlax-get-acad-object))))
(if (eq (type (vl-catch-all-apply 'vla-Item (list aa0 aa2))) 'VLA-OBJECT)
(vl-catch-all-apply 'vla-Delete (list (vla-Item aa0 aa2))))
(setq aa0 (entlast)
      aa3 (cdr (assoc 8 (entget aa0)))
      aa2 (vlax-ename->vla-object aa0))
(if (not (tblsearch "Layer" layer)); Если нет заданного слоя, то построение в текущем
(setq layer (getvar "CLAYER")))
(if (= (cdr (assoc 70 (tblsearch "Layer" layer))) 4)
(princ (strcat "\nСлой " layer " заблокирован\n"))(progn
(vlax-for x (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
              (vla-get-name aa2))
(vla-put-layer x layer)
(vla-put-lineweight x -1)
)
(vlax-put-property aa2 'layer layer)
(vlax-put-property aa2 'lineweight -1)
(setq aa2 (vla-get-Layers (vla-get-activedocument (vlax-get-acad-object))))
(if (eq (type (vl-catch-all-apply 'vla-Item (list aa2 aa3))) 'VLA-OBJECT)
(vl-catch-all-apply 'vla-Delete (list (vla-Item aa2 aa3))))
))
(command "'_.zoom" "_p")
(if (= cvport 1)(command "_.pspace"))
(setvar "tilemode" 1)
(setvar "OSMODE" 0)
(if (> aa1 0)
(command "_.rotate3d"  aa0 "" '(0 0 0)
     (nth aa1 (list 0 '(0 1 0) '(0 -1 0) '(1 0 0) '(-1 0 0))) 90
     "_.move"  aa0 "" '(0 0 0)
     (mapcar '* (getvar "VIEWCTR") (nth aa1 (list 0 '(1 0 0) '(1 0 0) '(0 1 0) '(0 1 0)))))
)
(setq aa1 (cadr (grread 1 1))
      aa3 1); Проекция: 0 - Блоком, 1 - Примитивами
(while aa1
(vl-cmdf "_move"  aa0 "" aa1)
(setvar "OSMODE" osmode)
(princ (strcat "\nУкажите положение проекции <" (nth aa3 '("Примитивами>:" "Блоком>:"))))
(setq aa2 (vl-cmdf pause))
(if (and aa2 (equal aa1 (getvar "lastpoint") 0.000001))(progn
(setq aa2 (getvar 'lastprompt)
      aa2 (substr aa2 (+ (vl-string-search ">:" aa2) 3)))
(if (= aa2 "0")
(setq aa1 nil)(progn
(command "_.undo" 1)
(setvar "OSMODE" 0)
(setq aa3 (abs (1- aa3)))
)))
(setq aa1 nil)
)
)
(if aa2
(if (= aa3 1)(progn
(setq aa3 (cdr (assoc 2 (entget aa0))))
(command "_.explode" aa0)
(vla-Delete (vla-Item (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object))) aa3))
))
(command "_.erase" aa0 "")
)
(setvar "CMDECHO" 1)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
))
(princ)
)

; Конец файла "Solprof_Den.lsp"
// Начало файла Solprof_Den.dcl

Solprof_Den:dialog {
label = "3М вид";
fixed_width = true;
:list_box {
key = "aa1";
list ="  Главный вид\n  Слева\n  Справа\n  Сверху\n  Снизу";
height = 7;
}
: cancel_button {
label="Отмена";
width = 12;
}
}

Re: LISP. Построение проекций 3D тел в пространстве модели

Попробуем програмки, поковыряем.
Но всё равно, большое при большое СПАСИБО!!!!

Re: LISP. Построение проекций 3D тел в пространстве модели

Так ли задуманно?
"Команда:
C:SOLPROF_DEN
Команда:
Выбор 3М тел <3М виды>
Выберите объекты:"
Далее если выбирать объекты то сразу строиться фронтальный вид.
Если Enter то открывается диалог выбора вида.
По логике должен сразу быть диалог а затем выбор объекта.
Если я не прав то в чем?
А программа нужная и очень удобная! Спасибо!

Re: LISP. Построение проекций 3D тел в пространстве модели

> jonas
Действительно, так, наверное, будет поудобнее
(просто программа стала развитием макроса для построения фронтальной проекции из модели).
Исправленный код сейчас выкладывать не буду, а пока можно сделать так:
Замени строчку:
(if (setq aa0 (ssget '((0 . "3DSOLID"))))
на:
(if nil
и удали строчку:
(princ "\nВыбор 3М тел <3М виды>")

Re: LISP. Построение проекций 3D тел в пространстве модели

Спасибо.

Re: LISP. Построение проекций 3D тел в пространстве модели

;|==============================================
Построение проекций 3D тел из пространства модели
Программа Дениса Флюстикова "Solprof_Den" от 16.07.07
Новое:
Возможность построения проекций разреза при выборе верхнего,
нижнего или боковых видов (правый клик при запросе выбора 3D тел и
указать точку разреза)
Макрос для кнопки:
^C^C^P(load "Solprof_Den");Solprof_Den
В файл "Solprof_Den.lsp" вставить текст только до строчки:
; Конец файла "Solprof_Den.lsp"
далее текст для файла "Solprof_Den.dcl"
=============================================|;

(defun C:Solprof_Den (/ layer aa0 aa1 aa2 aa3 aa4 aa5 aa6 osmode *error* dcl_id)
(setq layer "Основной" ;Слой построения проекции
      osmode (getvar "OSMODE")
      aa0 (getvar "VIEWCTR")
      aa1 (cadr (grread 1 1))
      aa2 (angle aa0 aa1)
      aa3 (distance aa0 aa1)
      aa0 (getvar "SCREENSIZE")
      aa1 (/ (cadr aa0)(getvar "VIEWSIZE"))
      aa0 (mapcar '/ aa0 '(2 2))
      aa1 (polar aa0 (- aa2) (* aa3 aa1))
      aa1 (mapcar '(lambda (q) (fix q)) aa1)
      aa0 nil
      dcl_id (load_dialog "Solprof_Den")
      aa4 nil)
;Для расположения диалог.окна у курсора при вызове программы, удалить строчку:
(setq aa1 '(-1 -1))
(if (not (new_dialog "Solprof_Den" dcl_id "" aa1))(exit))
(mode_tile "aa1" 0)
(set_tile  "aa1" "0")
(action_tile "aa1" "(setq aa1 (read $value))(done_dialog)")
(action_tile "cancel" "(setq aa1 nil)(done_dialog)")
(start_dialog)
(unload_dialog dcl_id)
(if aa1 (progn
(if (and (> aa1 0)(< aa1 5))(progn
(princ "\nВыбор 3М тел или <проекция разреза>")
(if (null (setq aa0 (ssget '((0 . "3DSOLID")))))(progn
(setq aa3 (getpoint "\nУкажите точку на разрезе:")
      aa0 (ssget '((0 . "3DSOLID"))))
(cond
((= aa1 1)(setq aa3 (list (car aa3)(cadr (getvar "EXTMIN")))
        aa2 (getvar "EXTMAX")))
((= aa1 2)(setq aa3 (list (car aa3)(cadr (getvar "EXTMAX")))
        aa2 (getvar "EXTMIN")))
((= aa1 3)(setq aa3 (list (car (getvar "EXTMAX"))(cadr aa3))
        aa2 (getvar "EXTMIN")))
((= aa1 4)(setq aa3 (list (car (getvar "EXTMIN"))(cadr aa3))
        aa2 (getvar "EXTMAX")))
)
(setq aa3 (trans aa3 0 1)
      aa2 (trans aa2 0 1)
      aa4 (ssget "_C" aa3 aa2 '((0 . "3DSOLID")))
      aa5 (sslength aa0))
)))
(setq aa0 (ssget '((0 . "3DSOLID"))))
)
))
(if aa0 (progn
(vl-load-com)
(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
(setvar "CMDECHO" 0)
(command "_.undo" "_m")
(if aa4 (progn
(repeat aa5
(setq aa5 (1- aa5)
      aa6 (ssname aa0 aa5))
(if (ssmemb aa6 aa4)
(command "_.layer" "_u" (cdr (assoc 8 (entget aa6))) "")
(setq aa0 (ssdel aa6 aa0)))
)
(if (> aa1 2)(setq aa4 "@1,0,0")(setq aa4 "@0,1,0"))
(setq aa3 (trans aa3 1 0)
      aa2 (trans aa2 1 0))
(command "_.slice" aa0 "" "_none" aa3 "_none" aa4 "_none" "@0,0,1" aa2)
))
(setq aa5 (sslength aa0)
      aa4 0
      aa6 '(0 0 0))
(repeat aa5
(vla-GetBoundingBox (vlax-ename->vla-object (ssname aa0 aa4)) 'aa2 'aa3)
(setq aa2 (vlax-safearray->list aa2)
      aa3 (vlax-safearray->list aa3)
      aa2 (mapcar '+ aa2 aa3)
      aa2 (mapcar '/ aa2 '(2 2 2))
      aa6 (mapcar '+ aa2 aa6)
      aa4 (1+ aa4))
)
(setq aa6 (mapcar '/ aa6 (list aa5 aa5 aa5))
      aa6 (trans aa6 0 1)
      aa3 "Solprof_Den")
(defun *error* (msg)
(setvar "OSMODE" osmode)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
(setvar "cmdecho" 1)
(princ "\nВыход во время обработки данных\n")
)
(arxload "AcSolids.arx")
(while (member aa3 (layoutlist))
(setq aa3 (strcat aa3 "1"))
)
(if (zerop aa1)
(setq aa4 90)
(if (= aa1 5)
(setq aa4 270)
(setq aa4 0)))
(princ "\nПодождите, выполняется обработка данных...\n")
(command "_.-layout" "_n" aa3
     "_.-layout" "_s" aa3
     "_.-vports" ""
     "_.mspace"
     "_.vpoint" "_r" (nth aa1 '(0 180 0 90 270 0)) aa4)
(princ "\nПодождите, выполняется обработка данных...\n")
(c:solprof aa0 "" "" "")
(setq aa0 (entlast)
      aa2 (cdr (assoc 8 (entget aa0)))
      aa3 (cdr (assoc 2 (entget aa0))))
(vla-delete (vlax-ename->vla-object aa0))
(vla-Delete (vla-Item (vla-get-Blocks (vla-get-activedocument
                    (vlax-get-acad-object))) aa3))
(setq aa0 (vla-get-Layers (vla-get-activedocument (vlax-get-acad-object))))
(if (eq (type (vl-catch-all-apply 'vla-Item (list aa0 aa2))) 'VLA-OBJECT)
(vl-catch-all-apply 'vla-Delete (list (vla-Item aa0 aa2))))
(setq aa0 (entlast)
      aa3 (cdr (assoc 8 (entget aa0)))
      aa2 (vlax-ename->vla-object aa0))
(if (not (tblsearch "Layer" layer)); Если нет заданного слоя, то построение в текущем
(setq layer (getvar "CLAYER")))
(if (= (cdr (assoc 70 (tblsearch "Layer" layer))) 4)
(princ (strcat "\nСлой " layer " заблокирован\n"))(progn
(vlax-for x (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
              (vla-get-name aa2))
(vla-put-layer x layer)
(vla-put-lineweight x -1)
)
(vlax-put-property aa2 'layer layer)
(vlax-put-property aa2 'lineweight -1)
(setq aa2 (vla-get-Layers (vla-get-activedocument (vlax-get-acad-object))))
(if (eq (type (vl-catch-all-apply 'vla-Item (list aa2 aa3))) 'VLA-OBJECT)
(vl-catch-all-apply 'vla-Delete (list (vla-Item aa2 aa3))))
))
(setvar "OSMODE" 0)
(if (> aa1 0)
(command "_.rotate3d" aa0 "" aa6
     (nth aa1 (list 0 "@0,1,0" "@0,-1,0" "@1,0,0" "@-1,0,0" "@1,0,0"))(if (= aa1 5) 180 90)
))
(setq aa2 (car aa6)
      aa4 (cadr aa6)
      aa3 (caddr aa6)
      aa6 (nth aa1 (list 0 (+ aa3 aa2)(- aa3 aa2)(- aa3 aa4)(+ aa3 aa4)(* 2 aa3)))
      aa2 (getvar "tempprefix")
      aa3 "Solprof_Den")
(while aa1
(if (or (tblsearch "block" aa3)
    (findfile (strcat aa2 aa3 ".dwg")))
(setq aa3 (strcat aa3 "1"))
(setq aa1 nil))
)
(command "_.-wblock" (strcat aa2 aa3) "" (list 0 0 aa6) aa0 ""
     "_.undo" "_b"
     "_.-insert" (strcat aa2 aa3) "_none" '(0 0 0))
(while (= (getvar 'cmdactive) 1)(command ""))
(command "_.explode" (entlast))
(vl-file-delete (strcat aa2 aa3 ".dwg"))
(vla-delete (vla-Item (vla-get-Blocks (vla-get-activedocument
                    (vlax-get-acad-object))) aa3))
(setq aa0 (entlast)
      aa1 (cadr (grread 1 1))
      aa3 1); Проекция: 0 - Блоком, 1 - Примитивами
(while aa1
(vl-cmdf "_.move"  aa0 "" aa1)
(setvar "OSMODE" osmode)
(princ (strcat "\nУкажите положение проекции или <" (nth aa3 '("Примитивами>:" "Блоком>:"))))
(setq aa2 (vl-cmdf pause))
(if (and aa2 (equal aa1 (getvar "lastpoint") 0.000001))(progn
(setq aa2 (getvar 'lastprompt)
      aa2 (substr aa2 (+ (vl-string-search ">:" aa2) 3)))
(if (= aa2 "0")
(setq aa1 nil)(progn
(command "_.undo" 1)
(setvar "OSMODE" 0)
(setq aa3 (abs (1- aa3)))
)))
(setq aa1 nil)
)
)
(if aa2
(if (= aa3 1)(progn
(setq aa3 (cdr (assoc 2 (entget aa0))))
(command "_.explode" aa0)
(command "_-purge" "_b" aa3 "_n");Пока так, через vla-delete у меня решения нет
))
(command "_.erase" aa0 "")
)
(setvar "CMDECHO" 1)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
))
(princ)
)
; Конец файла "Solprof_Den.lsp"
// Начало файла Solprof_Den.dcl
Solprof_Den:dialog {
label = "3М вид";
fixed_width = true;
:list_box {
key = "aa1";
list ="  Главный вид\n  Слева\n  Справа\n  Сверху\n  Снизу\n  Сзади";
height = 7;
}
: cancel_button {
label="Отмена";
width = 12;
}
}

Re: LISP. Построение проекций 3D тел в пространстве модели

Наверное, лучше все-таки перезадать *error* как:

(defun *error* (msg)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
(if (>= (atof (getvar "ACADVER")) 16.2)
(vla-sendcommand (vla-get-activedocument
(vlax-get-acad-object)) "_.undo 1 ")
(command nil nil nil nil "_.undo" 1))
(princ "\nВыход во время обработки данных\n")
)

Re: LISP. Построение проекций 3D тел в пространстве модели

Внимание! Замечен баг в последней версии (https://www.caduser.ru/forum/topic37160.html), быстрого решения у меня нет, к сожалению и времени сейчас тоже. Надеюсь на совет.

Re: LISP. Построение проекций 3D тел в пространстве модели

;|===============================================
Построение проекций 3D тел из пространства модели
Программа Дениса Флюстикова "Solprof_Den" от 18.07.07
Исправил, погонял, вроде все OK.
Макрос для кнопки:
^C^C^P(load "Solprof_Den");Solprof_Den
В файл "Solprof_Den.lsp" вставить текст только до строчки:
; Конец файла "Solprof_Den.lsp"
далее текст для файла "Solprof_Den.dcl"
===============================================|;

(defun C:Solprof_Den (/ layer aa0 aa1 aa2 aa3 aa4 aa5 aa6 osmode *error* dcl_id)
(setq layer "Основной" ;Слой построения проекции
      osmode (getvar "OSMODE")
      aa0 (getvar "VIEWCTR")
      aa1 (cadr (grread 1 1))
      aa2 (angle aa0 aa1)
      aa3 (distance aa0 aa1)
      aa0 (getvar "SCREENSIZE")
      aa1 (/ (cadr aa0)(getvar "VIEWSIZE"))
      aa0 (mapcar '/ aa0 '(2 2))
      aa1 (polar aa0 (- aa2) (* aa3 aa1))
      aa1 (mapcar '(lambda (q) (fix q)) aa1)
      aa0 nil
      dcl_id (load_dialog "Solprof_Den")
      aa4 nil)
;Для расположения диалог.окна у курсора при вызове программы, удалить строчку:
(setq aa1 '(-1 -1))
(if (not (new_dialog "Solprof_Den" dcl_id "" aa1))(exit))
(mode_tile "aa1" 0)
(set_tile  "aa1" "0")
(action_tile "aa1" "(setq aa1 (read $value))(done_dialog)")
(action_tile "cancel" "(setq aa1 nil)(done_dialog)")
(start_dialog)
(unload_dialog dcl_id)
(if aa1 (progn
(if (and (> aa1 0)(< aa1 5))(progn
(princ "\nВыбор 3М тел или <проекция разреза>")
(if (null (setq aa0 (ssget '((0 . "3DSOLID")))))(progn
(setq aa3 (getpoint "\nУкажите точку на разрезе:")
      aa0 (ssget '((0 . "3DSOLID"))))
(cond
((= aa1 1)(setq aa3 (list (car aa3)(cadr (getvar "EXTMIN")))
        aa2 (getvar "EXTMAX")))
((= aa1 2)(setq aa3 (list (car aa3)(cadr (getvar "EXTMAX")))
        aa2 (getvar "EXTMIN")))
((= aa1 3)(setq aa3 (list (car (getvar "EXTMAX"))(cadr aa3))
        aa2 (getvar "EXTMIN")))
((= aa1 4)(setq aa3 (list (car (getvar "EXTMIN"))(cadr aa3))
        aa2 (getvar "EXTMAX")))
)
(setq aa3 (trans aa3 0 1)
      aa2 (trans aa2 0 1)
      aa4 (ssget "_C" aa3 aa2 '((0 . "3DSOLID")))
      aa5 (sslength aa0))
)))
(setq aa0 (ssget '((0 . "3DSOLID"))))
)
))
(if (= (getvar "TILEMODE") 1)
(if aa0 (progn
(vl-load-com)
(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
(setvar "CMDECHO" 0)
(defun *error* (msg)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
(if (>= (atof (getvar "ACADVER")) 16.2)
(vla-sendcommand (vla-get-activedocument
(vlax-get-acad-object)) "_.undo 1 ")
(command nil nil nil nil "_.undo" 1))
(princ "\nВыход во время обработки данных\n")
)
(princ "\nПодождите, выполняется обработка данных...\n")
(setvar "tilemode" 0)
(command "_.undo" "_m"
     "_.-vports" ""
     "_.mspace")
(if aa4 (progn
(repeat aa5
(setq aa5 (1- aa5)
      aa6 (ssname aa0 aa5))
(if (ssmemb aa6 aa4)
(command "_.layer" "_u" (cdr (assoc 8 (entget aa6))) "")
(setq aa0 (ssdel aa6 aa0)))
)
(if (> aa1 2)(setq aa4 "@1,0,0")(setq aa4 "@0,1,0"))
(setq aa3 (trans aa3 1 0)
      aa2 (trans aa2 1 0))
(command "_.slice" aa0 "" "_none" aa3 "_none" aa4 "_none" "@0,0,1" aa2)
))
(setq aa5 (sslength aa0)
      aa4 0
      aa6 '(0 0 0))
(repeat aa5
(vla-GetBoundingBox (vlax-ename->vla-object (ssname aa0 aa4)) 'aa2 'aa3)
(setq aa2 (vlax-safearray->list aa2)
      aa3 (vlax-safearray->list aa3)
      aa2 (mapcar '+ aa2 aa3)
      aa2 (mapcar '/ aa2 '(2 2 2))
      aa6 (mapcar '+ aa2 aa6)
      aa4 (1+ aa4))
)
(setq aa6 (mapcar '/ aa6 (list aa5 aa5 aa5))
      aa6 (trans aa6 0 1))
(arxload "AcSolids.arx")
(if (zerop aa1)
(setq aa4 90)
(if (= aa1 5)
(setq aa4 270)
(setq aa4 0)))
(command "_.vpoint" "_r" (nth aa1 '(0 180 0 90 270 0)) aa4)
(princ "\nПодождите, выполняется обработка данных...\n")
(c:solprof aa0 "" "" "")
(setq aa0 (entlast)
      aa2 (cdr (assoc 8 (entget aa0)))
      aa3 (cdr (assoc 2 (entget aa0))))
(vla-delete (vlax-ename->vla-object aa0))
(vla-Delete (vla-Item (vla-get-Blocks (vla-get-activedocument
                    (vlax-get-acad-object))) aa3))
(setq aa0 (vla-get-Layers (vla-get-activedocument (vlax-get-acad-object))))
(if (eq (type (vl-catch-all-apply 'vla-Item (list aa0 aa2))) 'VLA-OBJECT)
(vl-catch-all-apply 'vla-Delete (list (vla-Item aa0 aa2))))
(setq aa0 (entlast)
      aa3 (cdr (assoc 8 (entget aa0)))
      aa2 (vlax-ename->vla-object aa0))
(if (not (tblsearch "Layer" layer)); Если нет заданного слоя, то построение в текущем
(setq layer (getvar "CLAYER")))
(if (= (cdr (assoc 70 (tblsearch "Layer" layer))) 4)
(princ (strcat "\nСлой " layer " заблокирован\n"))(progn
(vlax-for x (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
              (vla-get-name aa2))
(vla-put-layer x layer)
(vla-put-lineweight x -1)
)
(vlax-put-property aa2 'layer layer)
(vlax-put-property aa2 'lineweight -1)
(setq aa2 (vla-get-Layers (vla-get-activedocument (vlax-get-acad-object))))
(if (eq (type (vl-catch-all-apply 'vla-Item (list aa2 aa3))) 'VLA-OBJECT)
(vl-catch-all-apply 'vla-Delete (list (vla-Item aa2 aa3))))
))
(setvar "OSMODE" 0)
(if (> aa1 0)
(command "_.rotate3d" aa0 "" aa6
     (nth aa1 (list 0 "@0,1,0" "@0,-1,0" "@1,0,0" "@-1,0,0" "@1,0,0"))(if (= aa1 5) 180 90)
))
(setq aa2 (car aa6)
      aa4 (cadr aa6)
      aa3 (caddr aa6)
      aa6 (nth aa1 (list 0 (+ aa3 aa2)(- aa3 aa2)(- aa3 aa4)(+ aa3 aa4)(* 2 aa3)))
      aa2 (getvar "tempprefix")
      aa3 "Solprof_Den")
(while aa1
(if (or (tblsearch "block" aa3)
    (findfile (strcat aa2 aa3 ".dwg")))
(setq aa3 (strcat aa3 "1"))
(setq aa1 nil))
)
(command "_.-wblock" (strcat aa2 aa3) "" (list 0 0 aa6) aa0 ""
     "_.undo" "_b")
(setvar "tilemode" 1)
(command "_.-insert" (strcat aa2 aa3) "_none" '(0 0 0))
(while (= (getvar 'cmdactive) 1)(command ""))
(command "_.explode" (entlast))
(vl-file-delete (strcat aa2 aa3 ".dwg"))
(vla-delete (vla-Item (vla-get-Blocks (vla-get-activedocument
                    (vlax-get-acad-object))) aa3))
(setq aa0 (entlast)
      aa1 (cadr (grread 1 1))
      aa3 1); Проекция: 0 - Блоком, 1 - Примитивами
(while aa1
(vl-cmdf "_.move"  aa0 "" aa1)
(setvar "OSMODE" osmode)
(princ (strcat "\nУкажите положение проекции или <" (nth aa3 '("Примитивами>:" "Блоком>:"))))
(setq aa2 (vl-cmdf pause))
(if (and aa2 (equal aa1 (getvar "lastpoint") 0.000001))(progn
(setq aa2 (getvar 'lastprompt)
      aa2 (substr aa2 (+ (vl-string-search ">:" aa2) 3)))
(if (= aa2 "0")
(setq aa1 nil)(progn
(command "_.undo" 1)
(setvar "OSMODE" 0)
(setq aa3 (abs (1- aa3)))
)))
(setq aa1 nil)
)
)
(if aa2
(if (= aa3 1)(progn
(setq aa3 (cdr (assoc 2 (entget aa0))))
(command "_.explode" aa0)
(command "_-purge" "_b" aa3 "_n");Пока так, т.к. через vla-delete у меня решения нет
))
(command "_.erase" aa0 "")
)
(setvar "CMDECHO" 1)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
))
(princ "\nНеобходимо перейти в модель")
)
(princ)
)
; Конец файла "Solprof_Den.lsp"
// Начало файла Solprof_Den.dcl
Solprof_Den:dialog {
label = "3М вид";
fixed_width = true;
:list_box {
key = "aa1";
list ="  Главный вид\n  Слева\n  Справа\n  Сверху\n  Снизу\n  Сзади";
height = 7;
}
: cancel_button {
label="Отмена";
width = 12;
}
}

Re: LISP. Построение проекций 3D тел в пространстве модели

Спасибо за программу! Вовремя.
Денис, а можно ли к основным проекциям добавить изометрические? Или произвольную по виду?
Нужно было получить проекцию изометрическую, так я модель сначала в пространстве повернул, а потом Вашу программу запустил.

Re: LISP. Построение проекций 3D тел в пространстве модели

> wo!
Есть вариант программы с возможностью создавать проекции не только по осям, но и указанием направления в плоскости XY. Не хватает только времени объединить оба ядра. Если есть необходимость в изометриях, то можно попробовать ввести и эту функцию, думаю больших проблем не должно быть.

Re: LISP. Построение проекций 3D тел в пространстве модели

> Денис Флюстиков
Необходимость в изометриях есть. И многие были бы рады такой функции. Спасибо за программу!

Re: LISP. Построение проекций 3D тел в пространстве модели

;|===============================================
Построение проекций 3D тел из пространства модели
Программа Дениса Флюстикова "Solprof_Den" от 23.07.07
Новое:
Более удобное диалоговое окно
Построение изометрий
Возможностью создавать проекции не только по осям, но
и указанием направления в плоскости XY
Правый клик при выборе 3D тел:
- режим "Главный вид" - "Вид сзади"
- режим "Изометрия" -   "Изометрия сзади"
- режимы "Сверху", "Снизу", "Справа",
  "Слева", "Направление взгляда" - "Проекция разреза"
Макрос для кнопки:
^C^C^P(load "Solprof_Den");Solprof_Den
В файл "Solprof_Den.lsp" вставить текст только до строчки:
; Конец файла "Solprof_Den.lsp"
далее текст для файла "Solprof_Den.dcl"
Тестировать программу сейчас времени нет,
будут замечания, пишите.
===============================================|;

(defun C:Solprof_Den (/ aa0 aa1 aa2 aa3 aa4 aa5 aa6 aa7
              layer osmode *error* dcl_id)
(setq layer "Основной" ;Слой построения проекции
      osmode (getvar "OSMODE")
      aa0 (getvar "VIEWCTR")
      aa1 (cadr (grread 1 1))
      aa2 (angle aa0 aa1)
      aa3 (distance aa0 aa1)
      aa0 (getvar "SCREENSIZE")
      aa1 (/ (cadr aa0)(getvar "VIEWSIZE"))
      aa0 (mapcar '/ aa0 '(2 2))
      aa1 (polar aa0 (- aa2) (* aa3 aa1))
      aa1 (mapcar '(lambda (q) (fix q)) aa1)
      dcl_id (load_dialog "Solprof_Den")
      aa0 '("lt" "l" "lb" "t" "c" "b" "rt" "r" "rb")
      aa2 (list (list '(-6 -6) '(4 4) '(-6 6) '(6 6) '(6 -6) '(4 4))
        (list '(-8 0) '(5 0) '(0 8) '(8 0) '(0 -8) '(5 0))
        (list '(-6 6) '(4 -4) '(-6 -6) '(6 -6) '(6 6) '(4 -4))
        (list '(0 -8) '(0 5) '(8 0) '(0 8) '(-8 0) '(0 5))
        (list '(0 -8) '(-8 -8) '(-8 8) '(8 8) '(8 -8) '(0 -8))
        (list '(0 8) '(0 -5) '(8 0) '(0 -8) '(-8 0) '(0 -5))
        (list '(6 -6) '(-4 4) '(6 6) '(-6 6) '(-6 -6) '(-4 4))
        (list '(8 0) '(-5 0) '(0 8) '(-8 0) '(0 -8) '(-5 0))
        (list '(6 6) '(-4 -4) '(6 -6) '(-6 -6) '(-6 6) '(-4 -4))))
;Для расположения диалог.окна у курсора при вызове программы, удалить строчку:
(setq aa1 '(-1 -1))
(if (not (new_dialog "Solprof_Den" dcl_id "" aa1))(exit))
(repeat 9
(setq aa1 (car aa0)
      aa0 (vl-remove aa1 aa0)
      aa3 (car aa2)
      aa2 (vl-remove aa3 aa2)
      aa7 (1- (dimx_tile aa1)))
(start_image aa1)
(fill_image 0 0 aa7 aa7 9)
(setq aa6 0
      aa7 (/ aa7 2))
(repeat 5
(vector_image
  (setq aa5 (nth aa6 aa3)
    aa4 (+ aa7 (cadr aa5))
    aa5 (+ aa7 (car aa5))) aa4
  (setq aa6 (1+ aa6)
    aa5 (nth aa6 aa3)
    aa4 (+ aa7 (cadr aa5))
    aa5 (+ aa7 (car aa5))) aa4 18)
)
(end_image)
)
(action_tile "lt" "(setq aa1 21)(done_dialog)")
(action_tile "l" "(setq aa1 0)(done_dialog)")
(action_tile "lb" "(setq aa1 22)(done_dialog)")
(action_tile "t" "(setq aa1 (/ pi -2))(done_dialog)")
(action_tile "c" "(setq aa1 10)(done_dialog)")
(action_tile "b" "(setq aa1 (/ pi 2))(done_dialog)")
(action_tile "rt" "(setq aa1 23)(done_dialog)")
(action_tile "r" "(setq aa1 pi)(done_dialog)")
(action_tile "rb" "(setq aa1 24)(done_dialog)")
(action_tile "ang" "(setq aa5 nil)(done_dialog)")
(action_tile "cancel" "(setq aa1 nil)(done_dialog)")
(mode_tile "c" 2)
(start_dialog)
(unload_dialog dcl_id)
(setq aa0 nil
      aa4 nil)
(if (null aa5)
(setq aa1 (getangle "\nУкажите направление взгляда:")))
(if aa1
(if (> aa1 20)(progn
(princ "\nВыбор 3М тел или <Изометрия сзади>")
(if (null (setq aa0 (ssget '((0 . "3DSOLID")))))
(setq aa1 (+ aa1 10)
      aa0 (ssget '((0 . "3DSOLID"))))
))
(if (< (abs aa1) 10)(progn
(princ "\nВыбор 3М тел или <проекция разреза>")
(if (null (setq aa0 (ssget '((0 . "3DSOLID")))))(progn
(setq aa3 (getpoint "\nУкажите точку на разрезе:")
      aa0 (ssget '((0 . "3DSOLID")))
      aa4 (distance (getvar "EXTMIN")(getvar "EXTMAX"))
      aa2 (+ (/ pi 2) aa1)
      aa3 (trans aa3 1 0)
      aa4 (ssget "_CP" (list (trans aa3 0 1)
                 (trans (setq aa3 (polar aa3 aa2 aa4)) 0 1)
                 (trans (setq aa3 (polar aa3 aa1 aa4)) 0 1)
                 (trans (setq aa3 (polar aa3 aa2 (* aa4 -2))) 0 1)
                 (trans (setq aa3 (polar aa3 aa1 (- aa4))) 0 1)
                 (trans (setq aa3 (polar aa3 aa2 aa4)) 0 1))
         '((0 . "3DSOLID")))
      aa5 (sslength aa0))
)))
(if (= aa1 10)(progn
(princ "\nВыбор 3М тел или <Вид сзади>")
(if (null (setq aa0 (ssget '((0 . "3DSOLID")))))
(setq aa1 -10
      aa0 (ssget '((0 . "3DSOLID"))))
)))
)))
(if (= (getvar "TILEMODE") 1)
(if aa0 (progn
(vl-load-com)
(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
(setvar "CMDECHO" 0)
(defun *error* (msg)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
(if (>= (atof (getvar "ACADVER")) 16.2)
(vla-sendcommand (vla-get-activedocument
(vlax-get-acad-object)) "_.undo 1 ")
(command nil nil nil nil "_.undo" 1))
(princ "\nВыход во время обработки данных\n")
)
(princ "\nПодождите, выполняется обработка данных...\n")
(setvar "tilemode" 0)
(command "_.undo" "_m"
     "_.-vports" ""
     "_.mspace")
(if aa4 (progn
(repeat aa5
(setq aa5 (1- aa5)
      aa6 (ssname aa0 aa5))
(if (ssmemb aa6 aa4)
(command "_.layer" "_u" (cdr (assoc 8 (entget aa6))) "")
(setq aa0 (ssdel aa6 aa0)))
)
(setq aa4 (polar aa3 aa2 1)
      aa2 (polar aa3 aa1 1)
      aa3 (trans aa3 0 1)
      aa4 (trans aa4 0 1)
      aa2 (trans aa2 0 1))
(command "_.slice" aa0 "" "_none" aa3 "_none" aa4
     "_none" "@0,0,1" "_none" aa2)
))
(setq aa5 (sslength aa0)
      aa4 0
      aa6 '(0 0 0))
(repeat aa5
(vla-GetBoundingBox (vlax-ename->vla-object (ssname aa0 aa4)) 'aa2 'aa3)
(setq aa2 (vlax-safearray->list aa2)
      aa3 (vlax-safearray->list aa3)
      aa2 (mapcar '+ aa2 aa3)
      aa2 (mapcar '/ aa2 '(2 2 2))
      aa6 (mapcar '+ aa2 aa6)
      aa4 (1+ aa4))
)
(setq aa6 (mapcar '/ aa6 (list aa5 aa5 aa5))
      aa6 (trans aa6 0 1))
(arxload "AcSolids.arx")
(if (= aa1 10)
(setq aa2 90
      aa7 0)
(if (= aa1 -10)
(setq aa2 270
      aa7 0)
(if (< (abs aa1) 10)
(setq aa2 0
      aa1 (+ pi aa1)
      aa7 (* 180 (/ aa1 pi)))(progn
(setq aa5 (/ 1 (sqrt 3))
      aa5 (atan (/ (sqrt (- 1 (* aa5 aa5))) aa5))
      aa5 (* 180 (/ aa5 pi)))
(if (> aa1 30)
(setq aa4 (- aa1 31)
      aa7 (nth aa4 '(135 -135 45 -45))
      aa5 (- 180 aa5))
(if (> aa1 20)
(setq aa4 (- aa1 21)
      aa7 (nth aa4 '(135 -135 45 -45)))
))
(setq aa2 (- 90 aa5))
))))
(command "_.vpoint" "_r" aa7 aa2)
(princ "\nПодождите, выполняется обработка данных...\n")
(c:solprof aa0 "" "" "")
(setq aa0 (entlast)
      aa2 (cdr (assoc 8 (entget aa0)))
      aa3 (cdr (assoc 2 (entget aa0))))
(vla-delete (vlax-ename->vla-object aa0))
(vla-Delete (vla-Item (vla-get-Blocks (vla-get-activedocument
                    (vlax-get-acad-object))) aa3))
(setq aa0 (vla-get-Layers (vla-get-activedocument (vlax-get-acad-object))))
(if (eq (type (vl-catch-all-apply 'vla-Item (list aa0 aa2))) 'VLA-OBJECT)
(vl-catch-all-apply 'vla-Delete (list (vla-Item aa0 aa2))))
(setq aa0 (entlast)
      aa3 (cdr (assoc 8 (entget aa0)))
      aa2 (vlax-ename->vla-object aa0))
(if (not (tblsearch "Layer" layer)); Если нет заданного слоя, то построение в текущем
(setq layer (getvar "CLAYER")))
(if (= (cdr (assoc 70 (tblsearch "Layer" layer))) 4)
(princ (strcat "\nСлой " layer " заблокирован\n"))(progn
(vlax-for x (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
              (vla-get-name aa2))
(vla-put-layer x layer)
(vla-put-lineweight x -1)
)
(vlax-put-property aa2 'layer layer)
(vlax-put-property aa2 'lineweight -1)
(setq aa2 (vla-get-Layers (vla-get-activedocument (vlax-get-acad-object))))
(if (eq (type (vl-catch-all-apply 'vla-Item (list aa2 aa3))) 'VLA-OBJECT)
(vl-catch-all-apply 'vla-Delete (list (vla-Item aa2 aa3))))
))
(setvar "OSMODE" 0)
(if (/= aa1 10)(progn
(if (< (abs aa1) 10)
(setq aa7 (- aa1 (/ pi 2))
      aa2 90)
(if (= aa1 -10)
(setq aa7 0
      aa2 180)
(setq aa2 (/ pi 4)
      aa7 (+ (/ pi 2) aa2)
      aa7 (nth aa4 (list aa2 aa7 aa7 aa2))
      aa2 (nth aa4 (list aa5 aa5 (- aa5) (- aa5))))
))
(setq aa7 (list (cos aa7)(sin aa7) 0)
      aa7 (mapcar '+ aa6 aa7))
(command "_.rotate3d" aa0 "" aa6 aa7 aa2)
(if (> aa1 30)
(command "_.rotate" aa0 "" aa6 (nth aa4 '(75 -75 -75 75)))
(if (> aa1 20)
(command "_.rotate" aa0 "" aa6 (nth aa4 '(15 -15 -15 15)))))
))
(setq aa5 (car aa6)
      aa2 (cadr aa6)
      aa7 (caddr aa6))
(if (> aa1 20)(progn
(if (= aa4 0)
(setq aa2 (- aa2))
(if (= aa4 2)
(setq aa5 (- aa5)
      aa2 (- aa2))
(if (= aa4 3)
(setq aa5 (- aa5))
)))
(setq aa4 (/ pi 6)
      aa4 (/ (sin aa4)(cos aa4))
      aa2 (* aa4 (+ aa5 aa2)))
(if (> aa1 30)
(setq aa6 (+ aa2 aa7 (* aa7 aa4)))
(setq aa6 (- aa2 (- aa7) (* aa7 aa4)))
)
)
(if (= aa1 -10)
(setq aa6 (* 2 aa7))
(if (= aa1 10)
(setq aa6 0)
(setq aa1 (- aa1 pi)
      aa6 (+ (* (cos aa1) aa5)(* (sin aa1) aa2) aa7)
))))
(setq aa2 (getvar "tempprefix")
      aa3 "Solprof_Den")
(while aa4
(if (or (tblsearch "block" aa3)
    (findfile (strcat aa2 aa3 ".dwg")))
(setq aa3 (strcat aa3 "1"))
(setq aa4 nil))
)
(command "_.-wblock" (strcat aa2 aa3) "" (trans (list 0 0 aa6) 1 0) aa0 ""
     "_.undo" "_b")
(setvar "tilemode" 1)
(command "_.-insert" (strcat aa2 aa3) "_none" '(0 0 0))
(while (= (getvar 'cmdactive) 1)(command ""))
(command "_.explode" (entlast))
(vl-file-delete (strcat aa2 aa3 ".dwg"))
(vla-delete (vla-Item (vla-get-Blocks (vla-get-activedocument
                    (vlax-get-acad-object))) aa3))
(setq aa0 (entlast)
      aa1 (cadr (grread 1 1))
      aa3 1); Проекция: 0 - Блоком, 1 - Примитивами
(while aa1
(vl-cmdf "_.move"  aa0 "" aa1)
(setvar "OSMODE" osmode)
(princ (strcat "\nУкажите положение проекции или <" (nth aa3 '("Примитивами>:" "Блоком>:"))))
(setq aa2 (vl-cmdf pause))
(if (and aa2 (equal aa1 (getvar "lastpoint") 0.000001))(progn
(setq aa2 (getvar 'lastprompt)
      aa2 (substr aa2 (+ (vl-string-search ">:" aa2) 3)))
(if (= aa2 "0")
(setq aa1 nil)(progn
(command "_.undo" 1)
(setvar "OSMODE" 0)
(setq aa3 (abs (1- aa3)))
)))
(setq aa1 nil)
)
)
(if aa2
(if (= aa3 1)(progn
(setq aa3 (cdr (assoc 2 (entget aa0))))
(command "_.explode" aa0)
(command "_-purge" "_b" aa3 "_n");Пока так
))
(command "_.erase" aa0 "")
)
(setvar "CMDECHO" 1)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
))
(princ "\nНеобходимо перейти в модель")
)
(princ)
)
; Конец файла "Solprof_Den.lsp"
// Начало файла Solprof_Den.dcl
Solprof_Den:dialog {
label = " Solprof_Den";
:boxed_column {
label = "3М вид";
:row {
:column {
: image_button {
key = "lt" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
: image_button {
key = "l" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
: image_button {
key = "lb" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
}
:column {
: image_button {
key = "t" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
: image_button {
key = "c" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
: image_button {
key = "b" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
}
:column {
: image_button {
key = "rt" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
: image_button {
key = "r" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
: image_button {
key = "rb" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
}
}
: button {
label = "Направление";
key = "ang";
}
}
: cancel_button {
label="Отмена";
fixed_width = true;
}
}

Re: LISP. Построение проекций 3D тел в пространстве модели

Замечательно работает в 2008 а главное быстро.

Re: LISP. Построение проекций 3D тел в пространстве модели

Денис, повертел несколько объёмов. Полет нормальный. АСАD 2006.

Re: LISP. Построение проекций 3D тел в пространстве модели

;|===============================================
Построение проекций 3D тел из пространства модели
Программа Дениса Флюстикова "Solprof_Den" от 29.07.07
Новое:
построение прямоугольной диметрической проекции
Правый клик при выборе 3D тел:
- режим "Главный вид" - "Вид сзади"
- режим "Аксонометрия" - "Аксонометрия сзади"
- режимы "Сверху", "Снизу", "Справа",
  "Слева", "Направление взгляда" - "Проекция разреза"
Макрос для кнопки:
^C^C^P(load "Solprof_Den");Solprof_Den
В файл "Solprof_Den.lsp" вставить текст только до строчки:
; Конец файла "Solprof_Den.lsp"
далее текст для файла "Solprof_Den.dcl"
===============================================|;

(defun C:Solprof_Den (/ aa0 aa1 aa2 aa3 aa4 aa5 aa6 aa7
              aks layer osmode *error* dcl_id)
(setq layer "Основной" ;Слой построения проекции
      aks 0            ; 0-Изометрия, 1-Диметрия
      osmode (getvar "OSMODE")
      aa0 (getvar "VIEWCTR")
      aa1 (cadr (grread 1 1))
      aa2 (angle aa0 aa1)
      aa3 (distance aa0 aa1)
      aa0 (getvar "SCREENSIZE")
      aa1 (/ (cadr aa0)(getvar "VIEWSIZE"))
      aa0 (mapcar '/ aa0 '(2 2))
      aa1 (polar aa0 (- aa2) (* aa3 aa1))
      aa1 (mapcar '(lambda (q) (fix q)) aa1)
      dcl_id (load_dialog "Solprof_Den")
      aa0 '("lt" "l" "lb" "t" "c" "b" "rt" "r" "rb")
      aa2 (list (list '(-6 -6) '(4 4) '(-6 6) '(6 6) '(6 -6) '(4 4))
        (list '(-8 0) '(5 0) '(0 8) '(8 0) '(0 -8) '(5 0))
        (list '(-6 6) '(4 -4) '(-6 -6) '(6 -6) '(6 6) '(4 -4))
        (list '(0 -8) '(0 5) '(8 0) '(0 8) '(-8 0) '(0 5))
        (list '(0 -8) '(-8 -8) '(-8 8) '(8 8) '(8 -8) '(0 -8))
        (list '(0 8) '(0 -5) '(8 0) '(0 -8) '(-8 0) '(0 -5))
        (list '(6 -6) '(-4 4) '(6 6) '(-6 6) '(-6 -6) '(-4 4))
        (list '(8 0) '(-5 0) '(0 8) '(-8 0) '(0 -8) '(-5 0))
        (list '(6 6) '(-4 -4) '(6 -6) '(-6 -6) '(-6 6) '(-4 -4))))
;Для расположения диалог.окна у курсора при вызове программы, удалить строчку:
(setq aa1 '(-1 -1))
(if (not (new_dialog "Solprof_Den" dcl_id "" aa1))(exit))
(repeat 9
(setq aa1 (car aa0)
      aa0 (vl-remove aa1 aa0)
      aa3 (car aa2)
      aa2 (vl-remove aa3 aa2)
      aa7 (1- (dimx_tile aa1)))
(start_image aa1)
(fill_image 0 0 aa7 aa7 9)
(setq aa6 0
      aa7 (/ aa7 2))
(repeat 5
(vector_image
  (setq aa5 (nth aa6 aa3)
    aa4 (+ aa7 (cadr aa5))
    aa5 (+ aa7 (car aa5))) aa4
  (setq aa6 (1+ aa6)
    aa5 (nth aa6 aa3)
    aa4 (+ aa7 (cadr aa5))
    aa5 (+ aa7 (car aa5))) aa4 18)
)
(end_image)
)
(if (= aks 0)(set_tile "izom" "1")(set_tile "dim" "1"))
(action_tile "lt" "(setq aa1 21)(done_dialog)")
(action_tile "l" "(setq aa1 0)(done_dialog)")
(action_tile "lb" "(setq aa1 22)(done_dialog)")
(action_tile "t" "(setq aa1 (/ pi -2))(done_dialog)")
(action_tile "c" "(setq aa1 10)(done_dialog)")
(action_tile "b" "(setq aa1 (/ pi 2))(done_dialog)")
(action_tile "rt" "(setq aa1 23)(done_dialog)")
(action_tile "r" "(setq aa1 pi)(done_dialog)")
(action_tile "rb" "(setq aa1 24)(done_dialog)")
(action_tile "ang" "(setq aa5 nil)(done_dialog)")
(action_tile "izom" "(setq aks 0)(set_tile \"izom\" \"1\")(set_tile \"dim\" \"0\")")
(action_tile "dim" "(setq aks 1)(set_tile \"izom\" \"0\")(set_tile \"dim\" \"1\")")
(action_tile "cancel" "(setq aa1 nil)(done_dialog)")
(mode_tile "c" 2)
(start_dialog)
(unload_dialog dcl_id)
(setq aa0 nil
      aa4 nil)
(if (null aa5)
(setq aa1 (getangle "\nУкажите направление взгляда:")))
(if aa1
(if (> aa1 20)(progn
(princ "\nВыбор 3М тел или <Аксонометрия сзади>")
(if (null (setq aa0 (ssget '((0 . "3DSOLID")))))
(setq aa1 (+ aa1 10)
      aa0 (ssget '((0 . "3DSOLID"))))
))
(if (< (abs aa1) 10)(progn
(princ "\nВыбор 3М тел или <проекция разреза>")
(if (null (setq aa0 (ssget '((0 . "3DSOLID")))))(progn
(setq aa3 (getpoint "\nУкажите точку на разрезе:")
      aa0 (ssget '((0 . "3DSOLID")))
      aa4 (distance (getvar "EXTMIN")(getvar "EXTMAX"))
      aa2 (+ (/ pi 2) aa1)
      aa3 (trans aa3 1 0)
      aa4 (ssget "_CP" (list (trans aa3 0 1)
                 (trans (setq aa3 (polar aa3 aa2 aa4)) 0 1)
                 (trans (setq aa3 (polar aa3 aa1 aa4)) 0 1)
                 (trans (setq aa3 (polar aa3 aa2 (* aa4 -2))) 0 1)
                 (trans (setq aa3 (polar aa3 aa1 (- aa4))) 0 1)
                 (trans (setq aa3 (polar aa3 aa2 aa4)) 0 1))
         '((0 . "3DSOLID")))
      aa5 (sslength aa0))
)))
(if (= aa1 10)(progn
(princ "\nВыбор 3М тел или <Вид сзади>")
(if (null (setq aa0 (ssget '((0 . "3DSOLID")))))
(setq aa1 -10
      aa0 (ssget '((0 . "3DSOLID"))))
)))
)))
(if (= (getvar "TILEMODE") 1)
(if aa0 (progn
(vl-load-com)
(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
(setvar "CMDECHO" 0)
(defun *error* (msg)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
(if (>= (atof (getvar "ACADVER")) 16.2)
(vla-sendcommand (vla-get-activedocument
(vlax-get-acad-object)) "_.undo 1 ")
(command nil nil nil nil "_.undo" 1))
(princ "\nВыход во время обработки данных\n")
)
(princ "\nПодождите, выполняется обработка данных...\n")
(setvar "tilemode" 0)
(command "_.undo" "_m"
     "_.-vports" ""
     "_.mspace")
(if aa4 (progn
(repeat aa5
(setq aa5 (1- aa5)
      aa6 (ssname aa0 aa5))
(if (ssmemb aa6 aa4)
(command "_.layer" "_u" (cdr (assoc 8 (entget aa6))) "")
(setq aa0 (ssdel aa6 aa0)))
)
(setq aa4 (polar aa3 aa2 1)
      aa2 (polar aa3 aa1 1)
      aa3 (trans aa3 0 1)
      aa4 (trans aa4 0 1)
      aa2 (trans aa2 0 1))
(command "_.slice" aa0 "" "_none" aa3 "_none" aa4
     "_none" "@0,0,1" "_none" aa2)
))
(setq aa5 (sslength aa0)
      aa4 0
      aa6 '(0 0 0))
(repeat aa5
(vla-GetBoundingBox (vlax-ename->vla-object (ssname aa0 aa4)) 'aa2 'aa3)
(setq aa2 (vlax-safearray->list aa2)
      aa3 (vlax-safearray->list aa3)
      aa2 (mapcar '+ aa2 aa3)
      aa2 (mapcar '/ aa2 '(2 2 2))
      aa6 (mapcar '+ aa2 aa6)
      aa4 (1+ aa4))
)
(setq aa6 (mapcar '/ aa6 (list aa5 aa5 aa5))
      aa6 (trans aa6 0 1))
(arxload "AcSolids.arx")
(if (= aa1 10)
(setq aa2 90
      aa7 0)
(if (= aa1 -10)
(setq aa2 270
      aa7 0)
(if (< (abs aa1) 10)
(setq aa2 0
      aa1 (+ pi aa1)
      aa7 (* 180 (/ aa1 pi)))(progn
(if (= aks 0)
(setq aa5 (atan (sqrt 2)))
(setq aa5 (sqrt (/ 2.0 9))
      aa5 (atan aa5 (/ (sqrt (- 1 (* aa5 aa5))))))
)
(setq aa5 (* 180 (/ aa5 pi)))
(if (> aa1 30)
(setq aa4 (- aa1 31)
      aa7 (nth aa4 '(135 -135 45 -45))
      aa5 (- 180 aa5))
(if (> aa1 20)
(setq aa4 (- aa1 21)
      aa7 (nth aa4 '(135 -135 45 -45)))
))
(setq aa2 (- 90 aa5))
))))
(command "_.vpoint" "_r" aa7 aa2)
(princ "\nПодождите, выполняется обработка данных...\n")
(c:solprof aa0 "" "" "")
(setq aa0 (entlast)
      aa2 (cdr (assoc 8 (entget aa0)))
      aa3 (cdr (assoc 2 (entget aa0))))
(vla-delete (vlax-ename->vla-object aa0))
(vla-Delete (vla-Item (vla-get-Blocks (vla-get-activedocument
                    (vlax-get-acad-object))) aa3))
(setq aa0 (vla-get-Layers (vla-get-activedocument (vlax-get-acad-object))))
(if (eq (type (vl-catch-all-apply 'vla-Item (list aa0 aa2))) 'VLA-OBJECT)
(vl-catch-all-apply 'vla-Delete (list (vla-Item aa0 aa2))))
(setq aa0 (entlast)
      aa3 (cdr (assoc 8 (entget aa0)))
      aa2 (vlax-ename->vla-object aa0))
(if (not (tblsearch "Layer" layer))
(setq layer (getvar "CLAYER")))
(if (= (cdr (assoc 70 (tblsearch "Layer" layer))) 4)
(princ (strcat "\nСлой " layer " заблокирован\n"))(progn
(vlax-for x (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
              (vla-get-name aa2))
(vla-put-layer x layer)
(vla-put-lineweight x -1)
)
(vlax-put-property aa2 'layer layer)
(vlax-put-property aa2 'lineweight -1)
(setq aa2 (vla-get-Layers (vla-get-activedocument (vlax-get-acad-object))))
(if (eq (type (vl-catch-all-apply 'vla-Item (list aa2 aa3))) 'VLA-OBJECT)
(vl-catch-all-apply 'vla-Delete (list (vla-Item aa2 aa3))))
))
(setvar "OSMODE" 0)
(if (/= aa1 10)(progn
(if (< (abs aa1) 10)
(setq aa7 (- aa1 (/ pi 2))
      aa2 90)
(if (= aa1 -10)
(setq aa7 0
      aa2 180)
(setq aa2 (/ pi 4)
      aa7 (+ (/ pi 2) aa2)
      aa7 (nth aa4 (list aa2 aa7 aa7 aa2))
      aa2 (nth aa4 (list aa5 aa5 (- aa5) (- aa5))))
))
(setq aa7 (list (cos aa7)(sin aa7) 0)
      aa7 (mapcar '+ aa6 aa7))
(command "_.rotate3d" aa0 "" aa6 aa7 aa2)
(if (> aa1 20)(progn
(if (= aks 0)
(setq aa5 15)
(setq aa5 (- (* 180 (/ (atan 0.75 (sqrt 0.4375)) pi)) 45))
)
(if (> aa1 30)(setq aa5 (- 90 aa5)))
(setq aa5 (list aa5 (- aa5) (- aa5) aa5))
(command "_.rotate" aa0 "" aa6 (nth aa4 aa5))
))))
(setq aa5 (car aa6)
      aa2 (cadr aa6)
      aa7 (caddr aa6))
(if (> aa1 20)(progn
(if (= aa4 0)
(setq aa2 (- aa2))
(if (= aa4 2)
(setq aa5 (- aa5)
      aa2 (- aa2))
(if (= aa4 3)
(setq aa5 (- aa5))
)))
(if (= aks 1)
(setq aa2 (/ (+ aa2 aa5) 3.0)
      aa4 (atan 0.75 (/ (sqrt 0.4375)))
      aa4 (- (/ pi 2) aa4)
      aa4 (/ (sin aa4)(cos aa4)))
(setq aa4 (/ pi 6)
      aa4 (/ 0.5 (cos aa4))
      aa2 (* aa4 (+ aa5 aa2)))
)
(if (> aa1 30)
(setq aa6 (+ aa2 aa7 (* aa7 aa4)))
(setq aa6 (- aa2 (- aa7) (* aa7 aa4)))
)
)
(if (= aa1 -10)
(setq aa6 (* 2 aa7))
(if (= aa1 10)
(setq aa6 0)
(setq aa1 (- aa1 pi)
      aa6 (+ (* (cos aa1) aa5)(* (sin aa1) aa2) aa7)
))))
(setq aa2 (getvar "tempprefix")
      aa3 "Solprof_Den")
(while aa4
(if (or (tblsearch "block" aa3)
    (findfile (strcat aa2 aa3 ".dwg")))
(setq aa3 (strcat aa3 "1"))
(setq aa4 nil))
)
(command "_.-wblock" (strcat aa2 aa3) "" (trans (list 0 0 aa6) 1 0) aa0 ""
     "_.undo" "_b")
(setvar "tilemode" 1)
(command "_.-insert" (strcat aa2 aa3) "_none" '(0 0 0))
(while (= (getvar 'cmdactive) 1)(command ""))
(command "_.explode" (entlast))
(vl-file-delete (strcat aa2 aa3 ".dwg"))
(vla-delete (vla-Item (vla-get-Blocks (vla-get-activedocument
                    (vlax-get-acad-object))) aa3))
(setq aa0 (entlast)
      aa1 (cadr (grread 1 1))
      aa3 1); Проекция: 0 - Блоком, 1 - Примитивами
(while aa1
(vl-cmdf "_.move"  aa0 "" aa1)
(setvar "OSMODE" osmode)
(princ (strcat "\nУкажите положение проекции или <" (nth aa3 '("Примитивами>:" "Блоком>:"))))
(setq aa2 (vl-cmdf pause))
(if (and aa2 (equal aa1 (getvar "lastpoint") 0.000001))(progn
(setq aa2 (getvar 'lastprompt)
      aa2 (substr aa2 (+ (vl-string-search ">:" aa2) 3)))
(if (= aa2 "0")
(setq aa1 nil)(progn
(command "_.undo" 1)
(setvar "OSMODE" 0)
(setq aa3 (abs (1- aa3)))
)))
(setq aa1 nil)
)
)
(if aa2
(if (= aa3 1)(progn
(setq aa3 (cdr (assoc 2 (entget aa0))))
(command "_.explode" aa0)
(command "_-purge" "_b" aa3 "_n");Пока
))
(command "_.erase" aa0 "")
)
(setvar "CMDECHO" 1)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
))
(princ "\nНеобходимо перейти в модель")
)
(princ)
)
; Конец файла "Solprof_Den.lsp"
// Начало файла Solprof_Den.dcl
Solprof_Den:dialog {
label = " Построение проекций 3D тел";
:row {
:boxed_column {
label = "3М вид";
:row {
:column {
: image_button {
key = "lt" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
: image_button {
key = "l" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
: image_button {
key = "lb" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
}
:column {
: image_button {
key = "t" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
: image_button {
key = "c" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
: image_button {
key = "b" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
}
:column {
: image_button {
key = "rt" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
: image_button {
key = "r" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
: image_button {
key = "rb" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
}
}
}
:column {
:boxed_column {
label = "Аксонометрия";
:toggle {
key="izom";
label = "Изометрия";
}
:toggle {
key="dim";
label = "Диметрия";
}
}
: button {
label = "Направление";
key = "ang";
}
: cancel_button {
label="Отмена";
fixed_width = true;
}
}
}
}

Re: LISP. Построение проекций 3D тел в пространстве модели

Еще замечательнее!
Вот только не понял насчет "Проекции разреза"?

Re: LISP. Построение проекций 3D тел в пространстве модели

> jonas
В режиме "Проекция разреза" строится проекция того (выбранных объектов), что находится за секущей плоскостью, которая в свою очередь проходит через указанную точку и перпендикулярна направлению взгляда. Может быть и сумбурное объяснение, но удалось только сейчас заглянуть сюда и снова убегаю.

Re: LISP. Построение проекций 3D тел в пространстве модели

Вообще то у меня непоявился режим "Проекция разреза" ни в диалоге ни в панели, поэтому и не понял.

Re: LISP. Построение проекций 3D тел в пространстве модели

Прошу прощения, разобрался.

Re: LISP. Построение проекций 3D тел в пространстве модели

;|===============================================
Построение проекций 3D тел из пространства модели
Программа Дениса Флюстикова "Solprof_Den" от 11.08.07
Новое:
Построение штриховки сечения в режиме "Проекция разреза"
Исправлена работа в ПСК
Исправлен замеченый отказ построения проекции разреза
Правый клик при выборе 3D тел:
- режим "Главный вид" - "Вид сзади"
- режим "Аксонометрия" - "Аксонометрия сзади"
- режимы "Сверху", "Снизу", "Справа",
  "Слева", "Направление взгляда" - "Проекция разреза"
Правый клик при указании положения проекции -
выбор построения проеции блоком или примитивами
Макрос для кнопки:
^C^C^P(load "Solprof_Den");Solprof_Den
В файл "Solprof_Den.lsp" вставить текст только до строчки:
; Конец файла "Solprof_Den.lsp"
далее текст для файла "Solprof_Den.dcl"
===============================================|;

(defun C:Solprof_Den (/ aa0 aa1 aa2 aa3 aa4 aa5 aa6 aa7 aa8
              aks layer bh_layer *error* dcl_id)
(setq layer "Основной"   ; Слой построения проекции
      bh_layer "Размер"  ; Слой построения шриховки, если без, то NIL
      aks 0              ; 0-Изометрия, 1-Диметрия
      aa0 (getvar "VIEWCTR")
      aa1 (cadr (grread 1 1))
      aa2 (angle aa0 aa1)
      aa3 (distance aa0 aa1)
      aa0 (getvar "SCREENSIZE")
      aa1 (/ (cadr aa0)(getvar "VIEWSIZE"))
      aa0 (mapcar '/ aa0 '(2 2))
      aa1 (polar aa0 (- aa2) (* aa3 aa1))
      aa1 (mapcar '(lambda (q) (fix q)) aa1)
      dcl_id (load_dialog "Solprof_Den")
      aa0 '("lt" "l" "lb" "t" "c" "b" "rt" "r" "rb")
      aa2 (list (list '(-6 -6) '(4 4) '(-6 6) '(6 6) '(6 -6) '(4 4))
        (list '(-8 0) '(5 0) '(0 8) '(8 0) '(0 -8) '(5 0))
        (list '(-6 6) '(4 -4) '(-6 -6) '(6 -6) '(6 6) '(4 -4))
        (list '(0 -8) '(0 5) '(8 0) '(0 8) '(-8 0) '(0 5))
        (list '(0 -8) '(-8 -8) '(-8 8) '(8 8) '(8 -8) '(0 -8))
        (list '(0 8) '(0 -5) '(8 0) '(0 -8) '(-8 0) '(0 -5))
        (list '(6 -6) '(-4 4) '(6 6) '(-6 6) '(-6 -6) '(-4 4))
        (list '(8 0) '(-5 0) '(0 8) '(-8 0) '(0 -8) '(-5 0))
        (list '(6 6) '(-4 -4) '(6 -6) '(-6 -6) '(-6 6) '(-4 -4))))
; Для расположения диалог.окна у курсора при
; вызове программы, удалить строчку:
(setq aa1 '(-1 -1))
(if (not (new_dialog "Solprof_Den" dcl_id "" aa1))(exit))
(repeat 9
(setq aa1 (car aa0)
      aa0 (vl-remove aa1 aa0)
      aa3 (car aa2)
      aa2 (vl-remove aa3 aa2)
      aa7 (1- (dimx_tile aa1)))
(start_image aa1)
(fill_image 0 0 (1- aa7) (1- aa7) 9)
(setq aa6 0
      aa7 (/ aa7 2))
(repeat 5
(vector_image
  (setq aa5 (nth aa6 aa3)
    aa4 (+ aa7 (cadr aa5))
    aa5 (+ aa7 (car aa5))) aa4
  (setq aa6 (1+ aa6)
    aa5 (nth aa6 aa3)
    aa4 (+ aa7 (cadr aa5))
    aa5 (+ aa7 (car aa5))) aa4 18)
)
(end_image)
)
(if (= aks 0)(set_tile "izom" "1")(set_tile "dim" "1"))
(action_tile "lt" "(setq aa1 21)(done_dialog)")
(action_tile "l" "(setq aa1 0)(done_dialog)")
(action_tile "lb" "(setq aa1 22)(done_dialog)")
(action_tile "t" "(setq aa1 (/ pi -2))(done_dialog)")
(action_tile "c" "(setq aa1 10)(done_dialog)")
(action_tile "b" "(setq aa1 (/ pi 2))(done_dialog)")
(action_tile "rt" "(setq aa1 23)(done_dialog)")
(action_tile "r" "(setq aa1 pi)(done_dialog)")
(action_tile "rb" "(setq aa1 24)(done_dialog)")
(action_tile "ang" "(setq aa5 nil)(done_dialog)")
(action_tile "izom" "(setq aks 0)(set_tile \"izom\" \"1\")
(set_tile \"dim\" \"0\")(mode_tile \"lt\" 2)")
(action_tile "dim" "(setq aks 1)(set_tile \"izom\" \"0\")
(set_tile \"dim\" \"1\")(mode_tile \"lt\" 2)")
(action_tile "cancel" "(setq aa1 nil)(done_dialog)")
(mode_tile "c" 2)
(start_dialog)
(unload_dialog dcl_id)
(setq aa0 nil
      aa4 nil)
(if (null aa5)
(setq aa1 (getangle "\nУкажите направление взгляда:")))
(if aa1
(if (> aa1 20)(progn
(princ "\nВыбор 3М тел или <Аксонометрия сзади>")
(if (null (setq aa0 (ssget '((0 . "3DSOLID")))))
(setq aa1 (+ aa1 10)
      aa0 (ssget '((0 . "3DSOLID"))))
))
(if (< (abs aa1) 10)(progn
(princ "\nВыбор 3М тел или <Проекция разреза>")
(if (null (setq aa0 (ssget '((0 . "3DSOLID")))))(progn
(setq aa3 (getpoint "\nУкажите точку на разрезе:")
      aa0 (ssget '((0 . "3DSOLID")))
      aa4 (distance (getvar "EXTMIN")(getvar "EXTMAX"))
      aa2 (+ (/ pi 2) aa1)
      aa3 (trans aa3 1 0))
)))
(if (= aa1 10)(progn
(princ "\nВыбор 3М тел или <Вид сзади>")
(if (null (setq aa0 (ssget '((0 . "3DSOLID")))))
(setq aa1 -10
      aa0 (ssget '((0 . "3DSOLID"))))
)))
)))
(if (= (getvar "TILEMODE") 1)
(if aa0 (progn
(vl-load-com)
(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
(setvar "CMDECHO" 0)
(defun *error* (msg)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
(if (>= (atof (getvar "ACADVER")) 16.2)
(vla-sendcommand (vla-get-activedocument
(vlax-get-acad-object)) "_.undo 1 ")
(command nil nil nil nil "_.undo" 1))
(princ "\nВыход во время обработки данных\n")
)
(princ "\nПодождите, выполняется обработка данных...\n")
(command "_.layout" "" ""
     "_.undo" "_m"
     "_.-vports" ""
     "_.mspace"
     "_.ucs" "_w")
(setvar "OSMODE" 0)
(if aa4 (progn
(setq aa5 1
      aa8 (list aa3
        (setq aa8 (polar aa3 aa2 aa4))
        (setq aa8 (polar aa8 aa1 aa4))
        (setq aa8 (polar aa8 aa2 (* aa4 -2)))
        (polar aa8 aa1 (- aa4))
        ))
(repeat 4
(command "_.point" (nth aa5 aa8))
(setq aa5 (1+ aa5))
)
(command "_-view" "_t")
(setq aa8 (ssget "_CP" aa8 '((0 . "3DSOLID")))
      aa5 (sslength aa0))
))
(if aa8 (progn
(repeat aa5
(setq aa5 (1- aa5)
      aa6 (ssname aa0 aa5))
(if (not (ssmemb aa6 aa8))
(setq aa0 (ssdel aa6 aa0)))
)
(setq aa7 (polar aa3 aa2 aa4)
      aa4 (ssget "_F" (list aa7 (polar aa3 aa2 (- aa4)))
         '((0 . "3DSOLID")))
      aa5 (sslength aa0)
      aa8 (ssadd))
(if aa4 (progn
(repeat aa5
(setq aa5 (1- aa5)
      aa6 (ssname aa0 aa5))
(if (ssmemb aa6 aa4)(progn
(command "_.layer" "_u" (cdr (assoc 8 (entget aa6))) "")
(setq aa8 (ssadd aa6 aa8))
))
)
(setq aa4 (entlast))
(while (entnext aa4)
(setq aa4 (entnext aa4)))
))
))
(if (or (null aa4)(= (sslength aa8) 0))
(setq aa8 nil)(progn
(command "_.section" aa8 "" aa3 aa7 "@0,0,1"
     "_.slice" aa8 "" aa3 aa7 "@0,0,1" (polar aa3 aa1 1))
(setq aa8 (ssadd))
(while (entnext aa4)
(setq aa4 (entnext aa4)
      aa8 (ssadd aa4 aa8))
)
))
(setq aa5 (sslength aa0)
      aa4 0
      aa6 '(0 0 0))
(repeat aa5
(vla-GetBoundingBox
  (vlax-ename->vla-object (ssname aa0 aa4)) 'aa7 'aa3)
(setq aa7 (vlax-safearray->list aa7)
      aa3 (vlax-safearray->list aa3)
      aa7 (mapcar '+ aa7 aa3)
      aa7 (mapcar '/ aa7 '(2 2 2))
      aa6 (mapcar '+ aa7 aa6)
      aa4 (1+ aa4))
)
(setq aa6 (mapcar '/ aa6 (list aa5 aa5 aa5)))
(if aa8
(command "_.rotate3d" aa8 "" aa6 (polar aa6 aa2 1) 90)
)
(arxload "AcSolids.arx")
(if (= aa1 10)
(setq aa2 90
      aa7 0)
(if (= aa1 -10)
(setq aa2 270
      aa7 0)
(if (< (abs aa1) 10)
(setq aa2 0
      aa1 (+ pi aa1)
      aa7 (* 180 (/ aa1 pi)))(progn
(if (= aks 0)
(setq aa5 (atan (sqrt 2)))
(setq aa5 (sqrt (/ 2.0 9))
      aa5 (atan aa5 (/ (sqrt (- 1 (* aa5 aa5))))))
)
(setq aa5 (* 180 (/ aa5 pi)))
(if (> aa1 30)
(setq aa4 (- aa1 31)
      aa7 (nth aa4 '(135 -135 45 -45))
      aa5 (- 180 aa5))
(if (> aa1 20)
(setq aa4 (- aa1 21)
      aa7 (nth aa4 '(135 -135 45 -45)))
))
(setq aa2 (- 90 aa5))
))))
(command "_.vpoint" "_r" aa7 aa2)
(c:solprof aa0 "" "" "")
(setq aa0 (entlast)
      aa2 (cdr (assoc 8 (entget aa0)))
      aa3 (cdr (assoc 2 (entget aa0))))
(vla-delete (vlax-ename->vla-object aa0))
(vla-Delete (vla-Item
          (vla-get-Blocks (vla-get-activedocument
                (vlax-get-acad-object))) aa3))
(setq aa0 (vla-get-Layers (vla-get-activedocument (vlax-get-acad-object))))
(if (eq (type (vl-catch-all-apply 'vla-Item (list aa0 aa2))) 'VLA-OBJECT)
(vl-catch-all-apply 'vla-Delete (list (vla-Item aa0 aa2))))
(setq aa0 (entlast)
      aa3 (cdr (assoc 8 (entget aa0)))
      aa2 (vlax-ename->vla-object aa0))
(if (not (tblsearch "Layer" layer))
(setq layer (getvar "CLAYER")))
(if (= (cdr (assoc 70 (tblsearch "Layer" layer))) 4)
(princ (strcat "\nСлой " layer " заблокирован\n"))(progn
(vlax-for x (vla-item (vla-get-blocks
            (vla-get-activedocument (vlax-get-acad-object)))
              (vla-get-name aa2))
(vla-put-layer x layer)
(vla-put-lineweight x -1)
)
(vlax-put-property aa2 'layer layer)
(vlax-put-property aa2 'lineweight -1)
(setq aa2 (vla-get-Layers (vla-get-activedocument (vlax-get-acad-object))))
(if (eq (type (vl-catch-all-apply 'vla-Item (list aa2 aa3))) 'VLA-OBJECT)
(vl-catch-all-apply 'vla-Delete (list (vla-Item aa2 aa3))))
))
(if (/= aa1 10)(progn
(if (< (abs aa1) 10)
(setq aa7 (- aa1 (/ pi 2))
      aa2 90)
(if (= aa1 -10)
(setq aa7 (/ pi 2)
      aa2 180)
(setq aa2 (/ pi 4)
      aa7 (+ (/ pi 2) aa2)
      aa7 (nth aa4 (list aa2 aa7 aa7 aa2))
      aa2 (nth aa4 (list aa5 aa5 (- aa5) (- aa5))))
))
(setq aa7 (list (cos aa7)(sin aa7) 0)
      aa7 (mapcar '+ aa6 aa7))
(command "_.rotate3d" aa0 "" aa6 aa7 aa2)
(if (> aa1 20)(progn
(if (= aks 0)
(setq aa5 15)
(setq aa5 (- (* 180 (/ (atan 0.75 (sqrt 0.4375)) pi)) 45))
)
(if (> aa1 30)(setq aa5 (- 90 aa5)))
(setq aa5 (list aa5 (- aa5) (- aa5) aa5))
(command "_.rotate" aa0 "" aa6 (nth aa4 aa5))
))))
(setq aa5 (car aa6)
      aa2 (cadr aa6)
      aa7 (caddr aa6))
(if (> aa1 20)(progn
(if (= aa4 0)
(setq aa2 (- aa2))
(if (= aa4 2)
(setq aa5 (- aa5)
      aa2 (- aa2))
(if (= aa4 3)
(setq aa5 (- aa5))
)))
(if (= aks 1)
(setq aa2 (/ (+ aa2 aa5) 3.0)
      aa4 (atan 0.75 (/ (sqrt 0.4375)))
      aa4 (- (/ pi 2) aa4)
      aa4 (/ (sin aa4)(cos aa4)))
(setq aa4 (/ pi 6)
      aa4 (/ 0.5 (cos aa4))
      aa2 (* aa4 (+ aa5 aa2)))
)
(if (> aa1 30)
(setq aa6 (+ aa2 aa7 (* aa7 aa4)))
(setq aa6 (- aa2 (- aa7) (* aa7 aa4)))
)
)
(if (= aa1 -10)
(setq aa6 (* 2 aa7))
(if (= aa1 10)
(setq aa6 0)
(setq aa1 (- aa1 pi)
      aa6 (+ (* (cos aa1) aa5)(* (sin aa1) aa2) aa7)
))))
(setq aa2 (getvar "tempprefix")
      aa3 "Solprof_Den")
(while aa4
(if (or (tblsearch "block" aa3)
    (findfile (strcat aa2 aa3 ".dwg")))
(setq aa3 (strcat aa3 "1"))
(setq aa4 nil))
)
(command "_.move" aa0 "" (list 0 0 aa6) '(0 0 0)
     "_.-wblock" (strcat aa2 aa3) "" '(0 0 0) aa0)
(if aa8 (command aa8))
(command ""
     "_.undo" "_b"
     "_.model"
     "_.-insert" (strcat aa2 aa3) "_none" (trans  '(0 0 0) 0 1))
(while (= (getvar 'cmdactive) 1)(command ""))
(setq aa6 (entlast)
      aa7 (ssadd)
      aa5 (ssadd)
      aa4 0)
(command "_.explode" aa6)
(vl-file-delete (strcat aa2 aa3 ".dwg"))
(vla-delete (vla-Item (vla-get-Blocks (vla-get-activedocument
                    (vlax-get-acad-object))) aa3))
(setq aa1 (getvar "CLAYER")
      aa2 (getvar "DIMSCALE")
      aa3 (getvar "HPSCALE"))
(if (eq 0 aa2)(setq aa2 1))
(while (entnext aa6)
(setq aa6 (entnext aa6)
      aa7 (ssadd aa6 aa7))
)
(if bh_layer
(if (tblsearch "Layer" bh_layer)
(setvar "CLAYER" bh_layer)
))
(repeat (sslength aa7)
(setq aa6 (ssname aa7 0)
      aa7 (ssdel aa6 aa7))
(if (= (cdr (assoc 0 (entget aa6))) "REGION")
(if bh_layer (progn
(command "_.bhatch" "_p" "_ansi31" (* 0.3 aa2) aa4 "_s" aa6 "" ""
     "_.erase" aa6 "")
(setq aa5 (ssadd (entlast) aa5)
      aa4 (+ aa4 90))
)
(command "_.erase" aa6 "")
)
(setq aa0 aa6)
)
)
(setvar "CLAYER" aa1)
(setvar "HPSCALE" aa3)
(setq aa1 (cadr (grread 1 1))
      aa3 1) ; Проекция: 0 - Блоком, 1 - Примитивами
(while aa1
(vl-cmdf "_.move"  aa0 aa5 "" "_none" aa1)
(princ (strcat "\nУкажите положение проекции или <"
           (nth aa3 '("Примитивами>:" "Блоком>:"))))
(setq aa2 (vl-cmdf pause))
(if (and aa2 (equal aa1 (getvar "lastpoint") 0.000001))(progn
(setq aa2 (getvar 'lastprompt)
      aa2 (substr aa2 (+ (vl-string-search ">:" aa2) 3)))
(if (= aa2 "0")
(setq aa1 nil)(progn
(command "_.undo" 1)
(setq aa3 (abs (1- aa3)))
)))
(setq aa1 nil)
)
)
(if aa2
(if (= aa3 1)(progn
(setq aa3 (cdr (assoc 2 (entget aa0))))
(command "_.explode" aa0)
(command "_.-purge" "_b" aa3 "_n");П
))
(command "_.erase" aa0 "")
)
(setvar "CMDECHO" 1)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
))
(princ "\nНеобходимо перейти в модель")
)
(princ)
)
; Конец файла "Solprof_Den.lsp"
// Начало файла Solprof_Den.dcl
Solprof_Den:dialog {
label = " Построение проекций 3D тел";
:row {
:boxed_column {
label = "3М вид";
:row {
:column {
: image_button {
key = "lt" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
: image_button {
key = "l" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
: image_button {
key = "lb" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
}
:column {
: image_button {
key = "t" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
: image_button {
key = "c" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
: image_button {
key = "b" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
}
:column {
: image_button {
key = "rt" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
: image_button {
key = "r" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
: image_button {
key = "rb" ;
aspect_ratio = 1 ;
width = 5 ;
fixed_width = true ;
}
}
}
}
:column {
:boxed_column {
label = "Аксонометрия";
: radio_button {
key="izom";
label = "Изометрия";
}
: radio_button {
key="dim";
label = "Диметрия";
}
}
: button {
label = "Направление";
key = "ang";
}
: cancel_button {
label="Отмена";
fixed_width = true;
}
}
}
}