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.
O AutoCAD já possui há algum tempo recursos para inserir tabelas de dados do desenho (por exemplo blocos atributados) por comandos tipo "field", com isso, podemos criar uma tabela com as coordenadas dos blocos e ao mover estes blocos podemos pedir para atualizar as coordenadas.
ResponderExcluirSe quiser posso te passar um exemplo.
er... bem, é isso que a lisp faz, em fim, se quiser que eu coloque o seu método aqui, mande-me um email, ou poste aqui nos comentários
ResponderExcluiré sempre bom ver as outras idéias!!!
como faço para baixar o lisp?
ResponderExcluir