Como tabelar pontos

Esses tempos atráz, me pediram um programa que criasse uma tabela com as coordenadas dos pontos de um desenho... Bem aí está:
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))


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.

3 comentários:

  1. 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.

    Se quiser posso te passar um exemplo.

    ResponderExcluir
  2. 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

    é sempre bom ver as outras idéias!!!

    ResponderExcluir
  3. como faço para baixar o lisp?

    ResponderExcluir