home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
BUG 15
/
BUGCD1998_06.ISO
/
aplic
/
felixcad
/
fcaddata.z
/
FLX_XPLD.LSP
< prev
next >
Wrap
Lisp/Scheme
|
1996-09-30
|
6KB
|
142 lines
;;; FLX_XPLD.LSP
;;; ==============================================================================
;;; (C)opyright Felix Computer Aided Technologies GmbH 1995-96
;;; ==============================================================================
;;; Created: Feb 26, 1996 vp
;;; Updated: Sep 29, 1996 vp
;;; ==============================================================================
;;; XPLODE: Filtered Explode Dialog
;;; The command is located in the pull-down menu EDIT of fcad.mnu
;;; ==============================================================================
;;; This file is called by FLX_MAIN.LSP
;;; Global Variables:
;;; - Check Box Settings are stored in the variable FLX$EXPLODELIST
;;; ==============================================================================
(defun FLX_XPLODE( / prt_list FLX_XPLD DlgInit
cmde ss1 dialog_ok s1 s2 s3 s4 tmp el l1)
;;; Prompt List:
(setq prt_list (list
"Cannot explode parts with different XYZ scale!"
"entities exploded."
"No entities exploded."
"No entity in current drawing!"
"Alert"
))
(if FLX_XLANGUAGE (FLX_XLANGUAGE "_xpld" nil))
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(defun FLX_XPLD (s1 ss1 / s1 ss1 ss2 i1 i2 f3 f4 el1) ;;; s1 = xplode mode
(setq i1 (sslength ss1)
i2 0
f4 T ;;; f4 = flag to display message ...
ss2 (ssadd)
)
(while (< i2 i1)
(setq el1 (entget (setq e1 (ssname ss1 i2)))
i2 (1+ i2) f3 nil
)
(if (member "D" s1)
(if (= (cdr (assoc 0 el1)) "DIMENSION")(setq f3 T))
)
(if (member "B" s1)
(if (and (= (cdr (assoc 0 el1)) "INSERT")
(/= (substr (cdr (assoc 2 el1)) 1 2) "*X")
)
(setq f3 T)
)
)
(if (member "H" s1)
(if (and (= (cdr (assoc 0 el1)) "INSERT")
(= (substr (cdr (assoc 2 el1)) 1 2) "*X")
)
(setq f3 T)
)
)
(if (member "P" s1)
(if (= (cdr (assoc 0 el1)) "POLYLINE")
(setq f3 T)
)
)
(if (= (cdr (assoc 0 el1)) "INSERT")
(if (or
(/= (cdr (assoc 41 el1)) (cdr (assoc 42 el1)))
(/= (cdr (assoc 41 el1)) (cdr (assoc 43 el1)))
(/= (cdr (assoc 42 el1)) (cdr (assoc 43 el1)))
)
(progn
(setq f3 nil)
(if f4 (progn
(setq f4 nil)
(princ (nth 0 prt_list)) ;;;@Cannot explode parts with different XYZ scale!
))
)
)
)
(if f3 (ssadd e1 ss2))
) ; while
(setvar "CMDECHO" 0)
(if (and ss2 (> (sslength ss2) 0) )
(progn
(command ".EXPLODE" ss2 "")
(princ (strcat
(symbtos (sslength ss2)) " " (nth 1 prt_list)
)) ;;;@entities exploded.
)
(princ (nth 2 prt_list) ) ;;;@No entities exploded.
)
)
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(defun DlgInit ( / n)
(if FLX$WIN95 (foreach n
'("IDCANCEL" "IDOK" "IDHELP"
"Check1" "Check2" "Check3" "Check4" "Button1" "GroupBox1")
(Dlg_TileSetFont n 2)
))
(if (member "B" FLX$EXPLODELIST) (progn (setq s1 T)(Dlg_TileSet "Check1" "1")))
(if (member "P" FLX$EXPLODELIST) (progn (setq s2 T)(Dlg_TileSet "Check2" "1")))
(if (member "H" FLX$EXPLODELIST) (progn (setq s3 T)(Dlg_TileSet "Check3" "1")))
(if (member "D" FLX$EXPLODELIST) (progn (setq s4 T)(Dlg_TileSet "Check4" "1")))
(Dlg_TileAction "Check1" "(setq s1 (if (= $value \"1\") T nil))") ;;; Part/Block
(Dlg_TileAction "Check2" "(setq s2 (if (= $value \"1\") T nil))") ;;; Polylines
(Dlg_TileAction "Check3" "(setq s3 (if (= $value \"1\") T nil))") ;;; Cross-Hatching
(Dlg_TileAction "Check4" "(setq s4 (if (= $value \"1\") T nil))") ;;; Dimension
(setq tmp '("Check1" "Check2" "Check3" "Check4"))
(Dlg_TileAction "Button1"
"(foreach el tmp (Dlg_TileSet el \"1\"))(setq s1 T s2 T s3 T s4 T)" ;;; All Types
)
(Dlg_TileAction "IDOK" "(setq dialog_ok T)(Dlg_DialogDone)")
(Dlg_TileAction "IDCANCEL" "(setq dialog_ok nil)(Dlg_DialogDone)")
)
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;;; Main
(FLX_FUNC_INIT) ;;; Global Init Function and Error Handler
(if (not entlast) (progn
(alert (nth 3 prt_list)(nth 4 prt_list) "EXCLAMATION")
(exit)
))
(if (not FLX$EXPLODELIST) (setq FLX$EXPLODELIST (list "B"))) ;;; "P" "H" "D"
(if (FLX_DLGDSP "flx_dlg" "EXPLODE" "(princ)" "(DlgInit)") (princ) (exit) )
(if dialog_ok (progn
(setq l1 nil)
(if s1 (setq l1 (cons "B" l1)))
(if s2 (setq l1 (cons "P" l1)))
(if s3 (setq l1 (cons "H" l1)))
(if s4 (setq l1 (cons "D" l1)))
(setq FLX$EXPLODELIST l1)
;;; if xplode mode has been specified:
(if (> (length l1) 0) (progn
(setq ss1 (ssget))
(if ss1 (FLX_XPLD l1 ss1) )
))
))
(FLX_FUNC_EXIT)
(princ)
)
(princ)