Cotar curvas de nivel

Você ainda não usa o civil 3d? ok, tudo bem, hehehe
E quando você quer cotar curvas de nível, como você faz? Usa o comando "text"?
aff... que tal agilizar isso um pouco?
Só pra exercitar um pouco:
mais...
(setq dc1:altura 1.0
      dc1:estilo "ARIAL"
      dc1:alin "mc"
      dc1:layer "S-CURVA_TXT")

(
defun c:dc1 (/ tmp pt rot lst pt)
  (
tbn:error-init  nil)
  (
if (progn
      (initget  0 "S N")
      (
= "S" (getkword "\nQuer formatar o texto antes? <Sim, Não> [Não]")))
    (
setq tmp (getreal (strcat "\nQual a altua do texto? <" (rtos dc1:altura) ">"))
      dc1:altura (if tmp tmp dc1:altura)
          

      tmp (getstring (strcat "\nQual o estilo do texto? <" dc1:estilo ">") t)
      dc1:estilo  (if (= tmp "") dc1:estilo tmp )
          

      tmp (initget 0 "L C R A M F TL TC TR ML MC MR BL BC BR")
      tmp (getkword (strcat "\nAplicar o alinhamneto [L,C,R,A,M,F,TL,TC,TR,ML,MC,MR,BL,BC,BR] <" dc1:alin ">"))
      dc1:alin (if tmp tmp dc1:alin)
          

      tmp (getstring (strcat "\nQual o layer do texto? <" dc1:layer ">") t)
      dc1:layer (if (= "" tmp) dc1:layer tmp)))
  
  (
while (progn (if lst (initget 128 "U"))
       (
if (setq tmp (entsel (strcat "\nClique a linha no ponto onde a cota deve aparecer" (if lst " [Undo]" ""))))
             t
             (= 7 (getvar "errno"))))
    (
if (null tmp)
      (
prompt "\nOps!")
      (
if  (listp tmp)
        (
if (member (dxf 0 (car tmp)) '("LINE""POLYLINE""LWPOLYLINE""SPLINE"))
          (
setq pt (trans (cadr tmp) 1 0)
                pt (vlax-curve-getClosestPointTo (car tmp) pt)
                tmp (draw-text (itoa (fix (arred (caddr pt) 0)))
                      pt
                      dc1:layer

                      (rot-of-ucs (get-tan-of-pt (car tmp) pt))
                      dc1:altura
                      dc1:estilo
                      dc1:alin
)
                lst (cons tmp lst))
          (
prompt "\nEste elemento é inválido..."))
        (
if (= tmp "U") (progn (del-ent (car lst)) (setq lst (cdr lst)))))))
  (
tbn:error-restore))


(defun arred (num dec /)
  (
atof (rtos num 2 dec)))
(
defun rot-of-ucs (rot / rucs)
  (
setq rucs (angle '(0 0) ;ucs
         (trans
           (polar (trans '(0 0) 1 0) rot 1) ;vetor wcs
           0 1 ;WCS -> UCS
           )))
  (
if (and (>= rucs (/ pi 2)) (< rucs (* 3 (/ pi 2))))
    (
+ rot pi)
    rot))


Link(s) da(s) subrotina(s) usada(s):
tbn:error-init, dxf, draw-text, arred, rot-of-ucs, get-tan-of-pt, del-ent, tbn:error-restore

Pra usar é simples, tenhas as curvas de nível, claro, em 3d, senão nem adianta
e carrega esta lisp (e as demais dos com os links) e use, é bem simples!!

Tem preguiça de baixar cada lispezinha?, pegue logo o programa compilado, é só baixar e usar!!

11 comentários:

  1. "arred"
    "rot-of-ucs"
    o link pra essas sub-rotinas não estão funcionando...
    e buscando pelo site não encontrei o post de referência...

    ResponderExcluir
  2. estes links não funcionam porque as subrotinas ja estão inseridas no programa...

    minha duvida é: eu salver os arquivos mas durante a execução eu tive o seguinte erro:

    Clique a linha no ponto onde a cota deve aparecer
    Error: no function definition: ENAME-OF

    (não sei o que isso significa...)

    ResponderExcluir
  3. estas sub-rotinas não tem link porque elas ja estão inseridas no texto da rotina principal...

    apos criar um arquivo .lsp com as rotinas citadas, eu tentei rodar a lisp e obtive o seguinte bug:

    Clique a linha no ponto onde a cota deve aparecer
    Error: no function definition: ENAME-OF

    o que será isso?

    ResponderExcluir
  4. desculpe neyton... não vi que as sub-rotinas tinham sub-sub-rotinas... desatenção minha!
    foi mal!

    ResponderExcluir
  5. Rafael Nascimento18/8/11 09:10

    Nao Consigo achar a sub-rotina: VLAX-CURVE-CLOSESTPOINTTO
    que pede depois de selecionar a curva..

    ResponderExcluir
  6. coloque um

    (vl-load-com)

    no inicio do programa que funciona

    ResponderExcluir
  7. Rafael Nascimento25/8/11 13:52

    Vlw, funcionou..
    Abrcs

    ResponderExcluir
  8. Fera ta dando o seguinte erro...
    Error: no function definition: vlax-curve-getClosestPointTo

    não sei o q significa,....

    ResponderExcluir
  9. copiei tudo isso ai coloquei num txt depois salvei como .lsp e dei load no autocad, carrega porem nao sei os comandos me expliquem como usar isso estou precisando muito pois o software q uso nao quer cotar as polylines aqui.

    ResponderExcluir
  10. baixe o programa já compilado e use. é mais fácil

    ResponderExcluir