Programa que Define sus Propios Bloques.


Las funciones de usuario col_def, niv_def y alt_def utilizan la funcionentmake para generar bloques que incluyen entidades de dibujo y atributos detexto, tanto visibles como invisibles. Para utilizar este programa descárguelo desde el enlace al archivo adjunto en la parte inferior de esta página. Guarde el fichero con el nombre BLK-DEF.LSP en el subdirectorio SUPPORT . Paracargarlo teclee (load "blk-def")

Reinaldo Togores. Profesor Asociado.
Departamento de Ingeniería Geográfica y Técnicas deExpresión Gráfica
Universidad de Cantabria.Diciembre de 1996.
Se autoriza la utilización delcodigo de estos programas, mencionando siempre su origen.

Definición del Bloque NIV_ID

Este bloque incluye una marca de punto y un atributo de texto para representar la cota de nivel compuesto por una marca de PUNTO y un atributo de texto visible:



(defun niv_def ()

;Definición de la cabecera de bloque:

(entmake '((0 . "BLOCK")(2 . "NIV_ID")(70 . 2)(10 0.0 0.0 0.0)))

;Definición de la entidad PUNTO:

(entmake '((0 . "POINT")(8 . "0")(10 0.0 0.0 0.0)(210 0.0 0.0 1.0)
(50 . 0.0)))


;Definición del atributo de texto:

(entmake
'((0 . "ATTDEF")(8 . "0")(10 4.0 -2.0 0.0)(1 . "")(2 . "COT_NIV")
(3 . "Cota de Nivel")(40 . 4.0)(41 . 1.0)(50 . 0.0)(70 . 0)(71 . 0)
(72 . 0)(73 . 2))

)

;Definición de FIN del Bloque:

(entmake '((0 . "ENDBLK")))

)

Definición del Bloque ALT_ID

Este bloque contiene solamente un atributo de texto para representar las alturas de edificación en un plano catastral.


(defun alt_def ()

;Definición de la cabecera de bloque:
;El código 70 indica que siguen atributos.El código 10 contiene el
;punto de inserción.

(entmake '((0 . "BLOCK")(2 . "ALT_ID")(70 . 2)(10 0.0 0.0 0.0)))

;Definición del atributo de texto:

(entmake
'((0 . "ATTDEF")(8 . "0")(10 0.0 0.0 0.0)(1 . "I")(2 . "NUM_ALT")
(3 . "Alturas")(40 . 2.0)(41 . 1.0)(50 . 0.0)(70 . 0)(71 . 0)(72 . 4)
(73 . 2))

)

;Definición de FIN del Bloque:

(entmake '((0 . "ENDBLK")))
)

Definición del Bloque COL_SIM.

Este bloque se utilizará para representar torres portantes de una linea de alta tensión. Esta funcion es invocada desde el programa C:COL, que realiza la insercion, en el caso de que dicho programa detecte que no existe dicho bloque en el dibujo actual.


(defun col_def ()

;Definición de la cabecera de bloque:

(entmake '((0 . "BLOCK")(2 . "COL_SIM")(70 . 2)(10 0.0 0.0 0.0)))

;Definición de la cabecera de la entidad POLILINEA:
;Observe que se trata de una polilinea cerrada (codigo 70=1)

(entmake
'((0 . "POLYLINE")(8 . "0")(66 . 1)(10 0.0 0.0 0.0)(70 . 1)(40 . 0.0)
(41 . 0.0)(210 0.0 0.0 1.0)(71 . 0)(72 . 0)(73 . 0)(74 . 0)(75 . 0))
)

;Definición de cada uno de los vertices:

(entmake
'((0 . "VERTEX")(8 . "0")(10 -2.0 -2.0 0.0)(40 . 0.0)(41 . 0.0)
(42 . 0.0)(70 . 0)(50 . 0.0)(71 . 0)(72 . 0)(73 . 0)(74 . 0))
)

(entmake
'((0 . "VERTEX")(8 . "0")(10 -2.0 2.0 0.0)(40 . 0.0)(41 . 0.0)
(42 . 0.0)(70 . 0)(50 . 0.0)(71 . 0)(72 . 0)(73 . 0)(74 . 0))
)

(entmake
'((0 . "VERTEX")(8 . "0")(10 2.0 2.0 0.0)(40 . 0.0)(41 . 0.0)
(42 . 0.0)(70 . 0)(50 . 0.0)(71 . 0)(72 . 0)(73 . 0)(74 . 0))
)

(entmake
'((0 . "VERTEX")(8 . "0")(10 2.0 -2.0 0.0)(40 . 0.0)(41 . 0.0)
(42 . 0.0)(70 . 0)(50 . 0.0)(71 . 0)(72 . 0)(73 . 0)(74 . 0))
)

;Definición del fin de secuencia para la Polilinea

(entmake '((0 . "SEQEND")))

;Definición de una línea diagonal

(entmake
'((0 . "LINE")(8 . "0")(10 -2.0 2.0 0.0)(11 2.0 -2.0 0.0)
(210 0.0 0.0 1.0))

)

;Definición de la otra linea diagonal

(entmake
'((0 . "LINE")(8 . "0")(10 -2.0 -2.0 0.0)(11 2.0 2.0 0.0)
(210 0.0 0.0 1.0))

)

;Definición del atributo de texto:
;Observe que se trata de un atributo invisible (codigo 70=1)

(entmake
'((0 . "ATTDEF")(8 . "0")(10 -2.0 -8.0 0.0)(1 . "00")(2 . "COL_ID")
(3 . "Columna Num.")(40 . 4.0)(41 . 1.0)(50 . 0.0)(70 . 1)(71 . 0)
(72 . 0)(73 . 0))

)

;Definición de FIN del Bloque:

(entmake '((0 . "ENDBLK")))
)

PROGRAMAS DE INSERCIÓN

Programa para insertar las cotas de nivel:


(defun C:NIV ()
(setq oce (getvar "cmdecho"))(setvar "cmdecho" 0)
(setq oad (getvar "attdia"))(setvar "attdia" 0)
(setvar "luprec" 2)(setvar "pdmode" 0)

;Si NO existe el bloque NIV_ID, crearlo:
(if (null (tblsearch "BLOCK" "NIV_ID"))(niv_def))

(command "_layer" "_make" "nivel" "_color" "7" "nivel" "")

; Inicio del ciclo de inserción de niveles. Se conserva el valor anterior
; como
valor por defecto (variable OLDNIV)

(if (null oldniv)(setq oldniv "0.0"))
(while (setq ptniv (getpoint "\nSituar NIVEL: "))
(setq txniv (getstring (strcat "\nCota <" oldniv "> : ")))
(if (= txniv "")(setq txniv oldniv)(setq oldniv txniv))
(command "insert" "niv_id" ptniv 1 1 0 txniv)
)
(setvar "attdia" oad)(setvar "cmdecho" 1)
)

Programa para insertar el codigo identificador de alturas:


(defun C:ALT ( / oce oad ptalt txalt )
(setq oce (getvar "cmdecho"))(setvar "cmdecho" 0)
(setq oad (getvar "attdia"))(setvar "attdia" 0)
(setvar "luprec" 2)(setvar "pdmode" 0)
(if (null (tblsearch "BLOCK" "ALT_ID"))(alt_def))
(command "_layer" "_make" "alturas" "_color" "1" "alturas" "")
(if (null oldalt)(setq oldalt "I"))
(while (setq ptalt (getpoint "\nAlturas: "))
(setq txalt (getstring (strcat "\nNúmero <" oldalt ">: ")))
(if (= txalt "")(setq txalt oldalt)(setq oldalt txalt))
(command "insert" "alt_id" ptalt 1 1 0 txalt)
)(setvar "attdia" oad)(setvar "cmdecho" oce)
)

Programa de inserción de COLUMNAS (bloque COL_ID)

Rutina para determinar el inicio de la numeracion:


(defun nxtcol ( / )
(if
(null (setq cnt_col (getint "\nPróximo Num. COLUMNA: ")))
(setq cnt_col 0)
)
)

Programa Principal:



(defun C:COL ( / oce col1 col2 prang)
(setq oce (getvar "cmdecho"))(setvar "cmdecho" 0)

; Si no existe el bloque, lo crea:

(if (null (tblsearch "BLOCK" "COL_SIM"))(col_def))
(if (null cnt_col)(nxtcol)(setq cnt_col (1+ cnt_col)))

; Las siguientes lineas permiten seleccionar un color si el que hubiera
; establecido
para la creacion de entidades fuera PORCAPA o PORBLOQUE.
; Este color se
utiliza en la creación de una capa para la inserción de
; las columnas.


(setq ncolor
(if (=(type (read (getvar "cecolor"))) 'INT)
(getvar "cecolor")
(acad_colordlg 1 nil)
)
)

; Aquí se inicia el ciclo de inserción de columnas, que se numeran
; secuencialmente y se
giran de acuerdo al angulo con las columnas
; anterior y posterior:


(if (setq col1
(getpoint
(strcat "\nSituar COLUMNA "
(itoa (setq cnt_col (1+ cnt_col)))
": ")))

(progn
(command "_layer" "_make" "columnas" "_color" ncolor "columnas" "")
(initget 33)
(while (setq col2
(getpoint col1
(strcat "\nSituar COLUMNA " (itoa (1+ cnt_col)) ": ")))

(command "insert" "col_sim" col1 1 1
(if prang
(/ (* (/ (+ prang (angle col1 col2)) 2) 180.0) pi)
(/ (* (setq prang (angle col1 col2)) 180.0) pi)
)
(itoa cnt_col)
)
(setq prang (angle col1 col2)
col1 col2
cnt_col (1+ cnt_col))
(initget 32)

)
(command "insert"
"col_sim" col1 1 1 (/ (* prang 180.0) pi)(itoa (1+ cnt_col)))

)
)
(redraw)(setvar "cmdecho" oce)
)

;;Diálogo que visualiza los programas cargados:


(alert
(strcat
"PROGRAMAS CARGADOS:"
"\nCOL=Inserta COLUMNAS"
"\nNIV=Cotas de Niveles"
"\nALT=Indica Alturas"
)
)


Reinaldo Togores Fernández,
20 feb 2011, 18:52
v.7