Esses tempos atráz, me pediram um programa que criasse uma tabela com as coordenadas dos pontos de um desenho... Bem aí está:
Para usar é simples, carrega a lisp, desenha alguns pontos ( comando POINT ) e chama a lisp na linha de comando: TABELAR
Será pedido um ponto de inserção e será criada uma TABLE do autocad com as coordenadas X e Y desses pontos.
Bem bobinho este programa, eu sei, mas servirá de exemplo para quem quer saber como usar FIELD e desenhar TABLE com lisp.
ver isso!!!
(vl-load-com)
(defun c:tabelar (/ ss NumRows InsertionPoint NumColumns RowHeight ColWidth
model table nRow id ent vla)
(setq ss (ssget ":S" '((0 . "POINT")))
NumRows (sslength ss)
InsertionPoint (vlax-3d-point
(getpoint "\nEntre com um ponto"))
NumColumns 3 ;nome, x, y -> 3
RowHeight 2
ColWidth 10
model (vla-get-modelspace
(vla-get-activedocument (vlax-get-acad-object)))
table (vla-addtable model InsertionPoint
(1+ NumRows) ;uma linha pro titulo...
;ou vai depender do estilo da tabela
NumColumns RowHeight ColWidth)
nRow 0)
(repeat NumRows
(setq ent (ssname ss nRow)
vla (vlax-ename->vla-object ent)
id (vla-get-ObjectID vla)
nRow (1+ nRow))
;escreve o nº do ponto na coluna 1
(vla-Settextstring
table ;a tabela em si
nRow ;linha
0 ;coluna
(* nRow 3) ;"id" da celula
(itoa nRow) ;conteudo da celula
)
;escreve o X na coluna 2:
(vla-Setformula
table ;a tabela em si
nRow ;linha
1 ;coluna
(+ 1 (* nRow 3)) ;"id" da celula
(strcat ;cria uma "field" q mostra o X
"%<\\AcObjProp Object(%<\\_ObjId "
(itoa id)
">%).Coordinates \\f \"%pt1\">%"))
;escreve o Y na coluna 3:
(vla-Setformula table nRow 2 (+ 2 (* nRow 3))
(strcat ;cria uma "field" q mostra o Y
"%<\\AcObjProp Object(%<\\_ObjId "
(itoa id)
">%).Coordinates \\f \"%pt2\">%")))
;atualiza a tabela:
(vla-GenerateLayout table))
(vl-load-com)
(defun c:tabelar (/ ss NumRows InsertionPoint NumColumns RowHeight ColWidth
model table nRow id ent vla)
(setq ss (ssget ":S" '((0 . "POINT")))
NumRows (sslength ss)
InsertionPoint (vlax-3d-point
(getpoint "\nEntre com um ponto"))
NumColumns 3 ;nome, x, y -> 3
RowHeight 2
ColWidth 10
model (vla-get-modelspace
(vla-get-activedocument (vlax-get-acad-object)))
table (vla-addtable model InsertionPoint
(1+ NumRows) ;uma linha pro titulo...
;ou vai depender do estilo da tabela
NumColumns RowHeight ColWidth)
nRow 0)
(repeat NumRows
(setq ent (ssname ss nRow)
vla (vlax-ename->vla-object ent)
id (vla-get-ObjectID vla)
nRow (1+ nRow))
;escreve o nº do ponto na coluna 1
(vla-Settextstring
table ;a tabela em si
nRow ;linha
0 ;coluna
(* nRow 3) ;"id" da celula
(itoa nRow) ;conteudo da celula
)
;escreve o X na coluna 2:
(vla-Setformula
table ;a tabela em si
nRow ;linha
1 ;coluna
(+ 1 (* nRow 3)) ;"id" da celula
(strcat ;cria uma "field" q mostra o X
"%<\\AcObjProp Object(%<\\_ObjId "
(itoa id)
">%).Coordinates \\f \"%pt1\">%"))
;escreve o Y na coluna 3:
(vla-Setformula table nRow 2 (+ 2 (* nRow 3))
(strcat ;cria uma "field" q mostra o Y
"%<\\AcObjProp Object(%<\\_ObjId "
(itoa id)
">%).Coordinates \\f \"%pt2\">%")))
;atualiza a tabela:
(vla-GenerateLayout table))
Para usar é simples, carrega a lisp, desenha alguns pontos ( comando POINT ) e chama a lisp na linha de comando: TABELAR
Será pedido um ponto de inserção e será criada uma TABLE do autocad com as coordenadas X e Y desses pontos.
Bem bobinho este programa, eu sei, mas servirá de exemplo para quem quer saber como usar FIELD e desenhar TABLE com lisp.