30 de Junho de 2011

ZPTEXT.lsp - Rotina AutoLISP

 

autolisp_image_08

Descrição: Esta rotina permite a selecção de entidades de texto numérico e desenhar entidades pontos elevadas na cota Z correspondentes ao valor do respectivo texto. Simultaneamente cria as correspondentes anotações de texto também elevadas no seu valor. Tantos os pontos criados como as anotações correspondentes são encaminhadas para layers próprias criadas automaticamente. Esta rotina mostra-se deveras útil para operações de transformação de topografia de 2D para 3D.

Description: This routine allows the selection of entities from text andnumeric entities draw high points in the Z coordinate corresponding to the value of the text. At the same time creates the corresponding text annotations also high in value. Both the points raised as the notes are forwarded to corresponding layers themselves automatically created.This routine appears to be very useful for operations transformationfrom 2D to 3D topography.

Comando: ZPTEXT

;;
;;rotina desenvolvida por Rotinas AutoLIsp - 2008
(defun c:zptext ()
  (setvar "CMDECHO" 0)
  (setvar "FLATLAND" 0)
  (setvar "OSMODE" 0)
  (setvar "ORTHOMODE" 0)
  (setvar "PLINETYPE" 2)
  (setvar "AUPREC" 0)
  (setvar "PDMODE" 3)
(setvar "PDSIZE" 0.15)
  (command "layer" "make" "3d-pontos" "color" "1" "" "")
  (command "layer" "make" "3d-altimetria" "color" "103" "" "")
  (setq f_pt (open "c:\\coordenadastxt.tmp" "w"))
;;cria um ficheiro temporário no disco C:
  (vl-load-com)
  (setq    *modelspace*
     (vla-get-modelspace
       (vla-get-activedocument (vlax-get-acad-object))
     )
  )
  (princ "\n<P>Seleccionar o texto a transformar em 3D: <E>Select Text:")
;;seleccionar os textos a transformar
  (setq txt1 (ssget '((0 . "text"))))
  (if (= txt1 nil)
    (close f_pt)
  )
  (setq txt2 (sslength txt1))
  (setq counter 0);;contador
  (while (< counter txt2)
    (progn
      (setq txtent (entget (ssname txt1 counter)))
      (setq cotax (car (cdr (assoc 10 txtent))))
;;extrai coordena x
      (setq cotay (cadr (cdr (assoc 10 txtent))))
;;extrai coordenada y
      (setq cotaz (atof (cdr (assoc 1 txtent))))
;;extrai coordenada z
      (setq xyz (list cotax cotay cotaz))
;;define a coordenada xyz de cada ponto a alterar
      (command "layer" "set" "3d-pontos" "")
;;passa para layer corrente
      (command "point" xyz)
;; insere o ponto na elevação correspondente à anotação
      (command "layer" "set" "3d-altimetria" "")
;;passa para layer corrente
      (command "text" xyz 0.20 0 (rtos cotaz 2 2))
;;escreve as anotações com a respectiva elevação do ponto
    )
    (setq counter (1+ counter))
;;incrementa o valor 1 à variável do contador
  )
;;;
  (command "zoom" "e")
  (command "layer" "set" "0" "")
;;retoma como corrente a layer zero
  (princ)
)
;;

- Como instalar a rotina

0 comentários:

 
Powered by Blogger