;; wrote by Eduardo Fernal
;; target (generat a fas file to create a block, with or not attritubes)
;; fas files are VERYYYY SMALLER than DWG files...
;; As a developer, I must be fast...
;; So, I allways write routines to 'make' routines...
(DEFUN c:ssdxf (/ ent x s1 sn cn arq ent flag bloco linha1 linha2)
(SETVAR "CMDECHO" 0)
(SETQ s1 (SSGET))
(IF s1
(PROGN (SETQ sn (SSLENGTH s1)
cn 0
flag 0
)
(REPEAT sn
(SETQ ent (SSNAME s1 cn)
cn (1+ cn)
)
(IF (= (CDR (ASSOC 0 (ENTGET ent))) "ATTDEF")
(SETQ flag 2)
)
)
(SETQ cn 0
flag (ITOA flag)
)
(INITGET "Sim Não Nao")
;; ask for saving in a file or not...
(SETQ arq (GETKWORD "\n-> Salvar em Arquivo ou Não ? < Sim Não > : "))
(IF (= arq "Sim")
(PROGN (INITGET "Bloco Nao Não")
;; want to generate a block, yes or no?
(SETQ bloco (GETKWORD "\n-> Deseja para Bloco? < Bloco Não > : "))
(IF (= bloco "Bloco")
;; change SUBSTITUA (subst) at lsp created file...
(SETQ linha1 (STRCAT
"(IF (NULL (TBLSEARCH \"BLOCK\" \"SUBSTITUA\"))"
" (PROGN\n" ;
" (ENTMAKE \n" ;
" '((0 . \"BLOCK\")\n"
" (2 . \"SUBSTITUA\")\n (70 . " flag
")\n" " (10 0.0 0.0 0.0)\n" ;
" )\n" " )\n"
)
linha2 (STRCAT " (ENTMAKE '((0 . \"ENDBLK\")))" " )\nnil)")
)
(SETQ linha1 nil
linha2 nil
)
)
;; change the paths here (LIXO = GARBAGE)
(SETQ arq (OPEN "c:\\LIXO\\Dxf.lsp" "w"))
(IF linha1
(WRITE-LINE linha1 arq)
)
(ALERT "Salvo em C:\\LIXO\\DXF.LSP")
)
(SETQ arq nil)
)
(REPEAT sn
(SETQ ent (SSNAME s1 cn)
cn (1+ cn)
ent (ENTGET ent '("*"))
)
(IF (AND (/= (CDR (ASSOC 0 ent)) "3DSOLID") (/= (CDR (ASSOC 0 ent)) "HATCH"))
(IF arq
(PROGN (IF (> cn 1)
(WRITE-LINE "\n))" arq)
)
(WRITE-LINE "(ENTMAKE '(" arq)
(FOREACH x ent
(IF (AND (/= (CAR x) -1)
(/= (CAR x) 5)
(/= (CAR x) 67)
(/= (CAR x) 102)
(/= (CAR x) 210)
(/= (CAR x) 330)
(/= (CAR x) 410)
)
(PRINT x arq)
)
)
)
(PROGN (PRINC "\n*****************************************************")
(FOREACH x ent (PRINT x))
)
)
)
)
(IF arq
(PROGN (WRITE-LINE "\n))" arq)
(IF linha1
(WRITE-LINE linha2 arq)
)
(CLOSE arq)
)
)
)
(PRINC "\n-> Nada selecionado...")
)
(PRINC)
)