Mostrando postagens com marcador Tables. Mostrar todas as postagens
Mostrando postagens com marcador Tables. Mostrar todas as postagens

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.