Pranchas

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 ))

Link(s) da(s) subrotina(s) usada(s):
tbn:error-init, draw-text, draw-pline2, draw-line, i2b26, draw-insert, tbn:error-restore

Nenhum comentário:

Postar um comentário