Como você faz para inserir um formato no desenho? você tem os blocos de A0 ao A4 já desenhados, certo? e insere eles normalmente como blocos… ok, eu também… mas e quando você precisa dum formato de dimensões fora do padrão? as veze acontece, não é? e aí? explode um formato parecido, etc…
mais…
(defun c:prancha (/ dx dy pt dt conv ndh sobr nde ndd
dxd n ndv flag l1 l2 x y d qtd
dq lays this)
(tbn:error-init (list (list “cmdecho” 0) t))
(setq pt (getpoint “nPonto de inserção ?”)
dx (initget “A0 A1 A2 A3 A4” 0)
dx (getcorner pt
“nClique o Canto superior Direito ou [A0, A1, A2, A3, A4]“ )
dx (if dx dx “A1”)
dt 1.5
dq 50.0)
;escolhe as medidas da prancha:
(if (= (type dx) ‘str)
(mapcar
‘set
‘(dx dy)
(nth (vl-position dx ‘(“A0” “A1” “A2” “A3” “A4”))
‘((1188 840) (840 594) (594 420) (420 297) (210 297))))
(mapcar ‘(lambda (k a b) (set k (fix (abs (– a b)))))
‘(dx dy)
dx pt))
;calcula o nome da prancha:
(setq str (strcat “F” (itoa dx) “x” (itoa dy)))
;se o bloco ainda nao existe:
(if (not (tblsearch “block” str))
;cria:
(progn
;1º cria os layers e os estilos caso nao existam
(setq lays (vla-get-layers thisdrawing))
(if (not (tblsearch “layer” “MG-EXTERNA”))
(vla-put-color (vla-add lays “MG-EXTERNA”) 4))
(if (not (tblsearch “layer” “MG-INTERNA”))
(vla-put-color (vla-add lays “MG-INTERNA”) 9))
(if (not (tblsearch “LTYPE” “HIDDEN2”))
(vla-load (vla-get-linetypes thisdrawing) “HIDDEN2” “acad”))
(if (not (tblsearch “layer” “MG-TRACEJADO”))
(vla-put-linetype (vla-add lays “MG-TRACEJADO”) “HIDDEN2”))
;inicia a construção do bloco:
(entmake (list ‘(0 . “BLOCK”) (cons 2 str) ‘(8 . “0”)
‘(10 0.0 0.0 0.0) ‘(70 . 2)))
;desenha o nome do bloco na margem esquerda:
(draw-text str (list dt (* dt 3))
“MG-EXTERNA” (/ pi 2) 2 “ISOCP” “tl”)
;desenha a margem externa, linha fina
(draw-pline2
(list ‘(0 0) (list dx 0) (list dx dy) (list 0 dy))
“MG-EXTERNA” t)
;desenha a margem interna com offsets 25 a esquerda e 10 no resto:
(draw-pline2 (list ‘(25 10) (list (– dx 10) 10)
(list (– dx 10) (– dy 10))
(list 25 (– dy 10)))
“MG-INTERNA” t)
;desenha a linha de corte, offset da margem externa:
(draw-pline2 (list (list (– dt) (– dt))
(list (+ dt dx) (– dt))
(list (+ dt dx) (+ dt dy))
(list (– dt) (+ dy dt)))
“MG-TRACEJADO” t)
; a pedidos, desenha uma numeração nas margens:
; se vc quiser desabilitar isso, elimine <----------------daqui
(setq qtd (fix (/ (– dx 35) dq))
d (/ (– dx 35.0) qtd)
n 0)
(repeat qtd
(setq x (+ 25 (* (+ n 0.5) d))
n (1+ n))
;textos da margem superior:
(draw-text (itoa n) (list x 7.5) “MG-EXTERNA”
0 4 “ISOCP” “mc”)
;textos da margem inferior:
(draw-text (itoa n) (list x (– dy 7.5))
“MG-EXTERNA” 0 4 “ISOCP” “mc”)
;linhas das margens direita e esquerda:
(setq x (+ 25 (* n d)))
(if (/= n qtd)
(progn
(draw-line (list x 10) (list x (+ 5 dt)) “MG-EXTERNA”)
(draw-line (list x (– dy 10))
(list x (– dy 5))
“MG-EXTERNA”))))
;agora textos e linhas nas margens superior e inferior:
(setq qtd (fix (/ (– dy 20.0) dq))
d (/ (– dy 20.0) qtd)
n 0)
(repeat qtd
(setq y (+ 10 (* (– qtd 0.5) d))
qtd (1- qtd)
n (1+ n))
;textos na margem inferior:
(draw-text (i2b26 n) (list 22.5 y)
“MG-EXTERNA” 0 4 “ISOCP” “mc”)
;textos na margem superior:
(draw-text (i2b26 n) (list (– dx 7.5) y)
“MG-EXTERNA” 0 4 “ISOCP” “mc”)
;linhas:
(setq y (+ 10 (* qtd d)))
(if (/= 0 qtd)
(progn
(draw-line (list 20 y) (list 25 y) “MG-EXTERNA”)
(draw-line (list (– dx 10) y)
(list (– dx 5) y)
“MG-EXTERNA”))))
; se vc quiser desabilitar isso, elimine <---------------ate aqui ;agora as marcas de dobra… sim tem isso tambem!!!
;o processo de cálculo das marcas de dobra é beta…. blz?
;não vou me ater muito nele….
(setq ndh (fix (/ (– dx 25) 185)) ;nº de divisoes inteiras
sobr (rem (– dx 25) 185) ;sobra medida?
nde (if (zerop (rem ndh 2.0)) ;se for par
(if (> sobr 1) ;sobra medida?
(if (> sobr 92.5) ;sobra > 185/2?
ndh ;a sobra é a divisao impar
(1- ndh)) ;divide
(if ;nao sobra? uma vai para a direita
(= 2 ndh) ;so deu 2?
1 ;1 a esquerda 2 a direita
(– ndh 2)))
(if ;impar?
(> sobr 1) ;tem sobra?
(– ndh 2) ;separa pra lado direito
ndh))
sobr (– dx 25 (* 185 nde))
ndd (– ndh nde)
ndd (if (= (zerop (rem ndd 2)) (zerop (rem nde 2)))
ndd
(1+ ndd))
dxd (if ndd
(/ (– dx (* nde 185) 25) (1+ ndd)))
n 1
flag (not (equal 0.0 dxd 0.001)))
;as divisoes que começam pela esquerda da prancha:
(if (> nde 0)
(repeat (if flag
nde
(1- nde))
(setq x (– dx (* n 185))
n (1+ n))
(draw-line (list x 0) (list x 5) “MG-TRACEJADO”)
(draw-line (list x dy) (list x (– dy 5)) “MG-TRACEJADO”)))
;divisoes que começam pelo lado direito da prancha
(setq n 1)
(if flag
(repeat ndd
(setq x (+ 25 (* n dxd))
n (1+ n))
(draw-line (list x 0) (list x 5) “MG-TRACEJADO”)
(draw-line (list x dy) (list x (– dy 5)) “MG-TRACEJADO”)))
;divisoes de dobras verticais, multiplos do A4(h=297)
(setq y 297)
(while (< y dy)
(draw-line (list 0 y) (list 25 y) “MG-TRACEJADO”)
(draw-line (list (– dx 10) y) (list dx y) “MG-TRACEJADO”)
(setq y (+ y 297)))
;e fim:
(entmake ‘((0 . “ENDBLK”)))))
; AGORA insere a prancha como bloco:
(draw-insert str (trans pt 1 0) “MG-INTERNA”
(angle (trans ‘(0 0) 1 0) (trans ‘(1 0) 1 0)) 1 nil)
(tbn:error-restore ))
dxd n ndv flag l1 l2 x y d qtd
dq lays this)
(tbn:error-init (list (list “cmdecho” 0) t))
(setq pt (getpoint “nPonto de inserção ?”)
dx (initget “A0 A1 A2 A3 A4” 0)
dx (getcorner pt
“nClique o Canto superior Direito ou [A0, A1, A2, A3, A4]
dx (if dx dx “A1”)
dt 1.5
dq 50.0)
;escolhe as medidas da prancha:
(if (= (type dx) ‘str)
(mapcar
‘set
‘(dx dy)
(nth (vl-position dx ‘(“A0” “A1” “A2” “A3” “A4”))
‘((1188 840) (840 594) (594 420) (420 297) (210 297))))
(mapcar ‘(lambda (k a b) (set k (fix (abs (– a b)))))
‘(dx dy)
dx pt))
;calcula o nome da prancha:
(setq str (strcat “F” (itoa dx) “x” (itoa dy)))
;se o bloco ainda nao existe:
(if (not (tblsearch “block” str))
;cria:
(progn
;1º cria os layers e os estilos caso nao existam
(setq lays (vla-get-layers thisdrawing))
(if (not (tblsearch “layer” “MG-EXTERNA”))
(vla-put-color (vla-add lays “MG-EXTERNA”) 4))
(if (not (tblsearch “layer” “MG-INTERNA”))
(vla-put-color (vla-add lays “MG-INTERNA”) 9))
(if (not (tblsearch “LTYPE” “HIDDEN2”))
(vla-load (vla-get-linetypes thisdrawing) “HIDDEN2” “acad”))
(if (not (tblsearch “layer” “MG-TRACEJADO”))
(vla-put-linetype (vla-add lays “MG-TRACEJADO”) “HIDDEN2”))
;inicia a construção do bloco:
(entmake (list ‘(0 . “BLOCK”) (cons 2 str) ‘(8 . “0”)
‘(10 0.0 0.0 0.0) ‘(70 . 2)))
;desenha o nome do bloco na margem esquerda:
(draw-text str (list dt (* dt 3))
“MG-EXTERNA” (/ pi 2) 2 “ISOCP” “tl”)
;desenha a margem externa, linha fina
(draw-pline2
(list ‘(0 0) (list dx 0) (list dx dy) (list 0 dy))
“MG-EXTERNA” t)
;desenha a margem interna com offsets 25 a esquerda e 10 no resto:
(draw-pline2 (list ‘(25 10) (list (– dx 10) 10)
(list (– dx 10) (– dy 10))
(list 25 (– dy 10)))
“MG-INTERNA” t)
;desenha a linha de corte, offset da margem externa:
(draw-pline2 (list (list (– dt) (– dt))
(list (+ dt dx) (– dt))
(list (+ dt dx) (+ dt dy))
(list (– dt) (+ dy dt)))
“MG-TRACEJADO” t)
; a pedidos, desenha uma numeração nas margens:
; se vc quiser desabilitar isso, elimine <----------------daqui
(setq qtd (fix (/ (– dx 35) dq))
d (/ (– dx 35.0) qtd)
n 0)
(repeat qtd
(setq x (+ 25 (* (+ n 0.5) d))
n (1+ n))
;textos da margem superior:
(draw-text (itoa n) (list x 7.5) “MG-EXTERNA”
0 4 “ISOCP” “mc”)
;textos da margem inferior:
(draw-text (itoa n) (list x (– dy 7.5))
“MG-EXTERNA” 0 4 “ISOCP” “mc”)
;linhas das margens direita e esquerda:
(setq x (+ 25 (* n d)))
(if (/= n qtd)
(progn
(draw-line (list x 10) (list x (+ 5 dt)) “MG-EXTERNA”)
(draw-line (list x (– dy 10))
(list x (– dy 5))
“MG-EXTERNA”))))
;agora textos e linhas nas margens superior e inferior:
(setq qtd (fix (/ (– dy 20.0) dq))
d (/ (– dy 20.0) qtd)
n 0)
(repeat qtd
(setq y (+ 10 (* (– qtd 0.5) d))
qtd (1- qtd)
n (1+ n))
;textos na margem inferior:
(draw-text (i2b26 n) (list 22.5 y)
“MG-EXTERNA” 0 4 “ISOCP” “mc”)
;textos na margem superior:
(draw-text (i2b26 n) (list (– dx 7.5) y)
“MG-EXTERNA” 0 4 “ISOCP” “mc”)
;linhas:
(setq y (+ 10 (* qtd d)))
(if (/= 0 qtd)
(progn
(draw-line (list 20 y) (list 25 y) “MG-EXTERNA”)
(draw-line (list (– dx 10) y)
(list (– dx 5) y)
“MG-EXTERNA”))))
; se vc quiser desabilitar isso, elimine <---------------ate aqui ;agora as marcas de dobra… sim tem isso tambem!!!
;o processo de cálculo das marcas de dobra é beta…. blz?
;não vou me ater muito nele….
(setq ndh (fix (/ (– dx 25) 185)) ;nº de divisoes inteiras
sobr (rem (– dx 25) 185) ;sobra medida?
nde (if (zerop (rem ndh 2.0)) ;se for par
(if (> sobr 1) ;sobra medida?
(if (> sobr 92.5) ;sobra > 185/2?
ndh ;a sobra é a divisao impar
(1- ndh)) ;divide
(if ;nao sobra? uma vai para a direita
(= 2 ndh) ;so deu 2?
1 ;1 a esquerda 2 a direita
(– ndh 2)))
(if ;impar?
(> sobr 1) ;tem sobra?
(– ndh 2) ;separa pra lado direito
ndh))
sobr (– dx 25 (* 185 nde))
ndd (– ndh nde)
ndd (if (= (zerop (rem ndd 2)) (zerop (rem nde 2)))
ndd
(1+ ndd))
dxd (if ndd
(/ (– dx (* nde 185) 25) (1+ ndd)))
n 1
flag (not (equal 0.0 dxd 0.001)))
;as divisoes que começam pela esquerda da prancha:
(if (> nde 0)
(repeat (if flag
nde
(1- nde))
(setq x (– dx (* n 185))
n (1+ n))
(draw-line (list x 0) (list x 5) “MG-TRACEJADO”)
(draw-line (list x dy) (list x (– dy 5)) “MG-TRACEJADO”)))
;divisoes que começam pelo lado direito da prancha
(setq n 1)
(if flag
(repeat ndd
(setq x (+ 25 (* n dxd))
n (1+ n))
(draw-line (list x 0) (list x 5) “MG-TRACEJADO”)
(draw-line (list x dy) (list x (– dy 5)) “MG-TRACEJADO”)))
;divisoes de dobras verticais, multiplos do A4(h=297)
(setq y 297)
(while (< y dy)
(draw-line (list 0 y) (list 25 y) “MG-TRACEJADO”)
(draw-line (list (– dx 10) y) (list dx y) “MG-TRACEJADO”)
(setq y (+ y 297)))
;e fim:
(entmake ‘((0 . “ENDBLK”)))))
; AGORA insere a prancha como bloco:
(draw-insert str (trans pt 1 0) “MG-INTERNA”
(angle (trans ‘(0 0) 1 0) (trans ‘(1 0) 1 0)) 1 nil)
(tbn:error-restore ))
Link(s) da(s) subrotina(s) usada(s):
tbn:error-init, draw-text, draw-pline2, draw-line, i2b26, draw-insert, tbn:error-restore