Estaqueamento

No forum autolisp, postei esta rotinazinha:
(defun c:est (/ ss dist ent comp compt
                pt1 pt2 lay offset ang angp
)
  (
tbn:error-init  (list (list "cmdecho" 0) T))
  (
vl-load-com)
  (
prompt "\nSelecione os objetos...\n")
  (
setq    ss   (ssget '( (0 . "*LINE,~MLINE;ARC")))
    dist (getdist "Distância entre os pontos <20>:\n")
    offset (getdist "\nEntre com o tamanho da marca <1>")
    offset (if offset offset 1)
    dist (if dist dist 20)
    lay  (getstring "qual o nome do layer? <0>" t)
    lay  (if (/= lay "") lay "0")
    )

  (
repeat (if ss (sslength ss) 0)
    (
setq ent  (ssname ss 0)
      compt(vlax-curve-getDistAtParam ent
         (vlax-curve-getEndParam ent))
      pts nil
      comp 0)
    (
ssdel ent ss)
    (
while (<= comp compt)
      (
setq pt1 (vlax-curve-getPointAtDist ent comp)
        ang (vlax-curve-getfirstderiv ent
          (vlax-curve-getparamatdist ent comp))
        ang  (angle '(0 0) ang)
        angp (+ ang (/ pi 2))
        pt2  (polar pt1 angp offset))
      (
entmake (list '(0 . "LINE")
             (
cons 8 lay)
             (
cons 10 pt1)
             (
cons 11 pt2)))
      (
entmake (list '(0 . "TEXT")
             (
cons 8 lay)
             '(10 0 0 0)
             (
cons 40 offset)
             (
cons 1 (rtos comp 2 2))
             (
cons 50 ang)
             '(72 . 1)
             (
cons 11 pt2)
             '(73 . 1)))
      (
setq  comp (if (and (< comp compt)
               (
> (+ comp dist) compt))
            compt
            (+ comp dist)))))
  (
tbn:error-restore ))

Ela desenha linhas e textos marcando a extensão percorrida em uma linha qualquer... tipo um estaqueamento, saca?
o Civil 3d faz isso muito melhor, claro, mas fica um exemplo... próximos passos: aplicar reactors às entidades para que, ao alterar a linha do eixo, as escatas mudem de lugar e marcar pontos notaveis, tipo, tangencia, curva...

3 comentários:

  1. Ola Neyton, gostaria de saber se vc sabe como modificar o estaqueamento do civil... para o padrão q utilizamos no brasil... estacas de 20 em 20 metros numeradas por eixos?

    ResponderExcluir
  2. até onde eu sei, só é possível determinar a distância entre as estacas, isto é, fazê-lo marcar de 20 em 20 metros... já fazê-lo numerar 1+19.20 por exemplo.... não consegui...

    para nós isto significaria 39.20m ( com estaqueamento de 20 em 20 ) e para o civil 3d isso significa 119.20 metros..., percebe o que eu quero dizer?

    ResponderExcluir
  3. olha só... é possível sim...
    é só buscar nos tutoriais que tem...

    ResponderExcluir