Bom dia,
Gostaria de saber se existe alguma maneira de somar automaticamente comprimentos de várias linhas.
Até ao AutoCad 2014, usava uma rotina LISP que fazia o pretendido (SOMAPER), mas no AutoCad 2015 não funciona.
O programa devolve-me a seguinte mensagem de erro:
Requires numeric distance, two points, or option keyword.
; error: Function cancelled
Desde já agradeço a ajuda
Solucionado! Ir para Solução.
Solucionado por hmsilva. Ir para Solução.
Olá FilRib,
não conheço a SOMAPER, nem tenho o 2015 neste PC, mas tenta esta rotina (minimamente testada) e vê se funciona bem,
Se não der, anexa a outra rotina, que é mais fácil entender o erro.
(defun c:compt (/ comp compt ent i ss) (vl-load-com) (if (setq ss (ssget '((0 . "ELLIPSE,LWPOLYLINE,POLYLINE,SPLINE,LINE,ARC,CIRCLE")))) (progn (setq compt 0.0) (repeat (setq i (sslength ss)) (setq ent (ssname ss (setq i (1- i))) comp (vlax-curve-getDistAtParam ent (vlax-curve-getEndParam ent)) compt (+ comp compt) ) ) (princ (strcat "\nComprimento total: " (rtos compt))) ) ) (princ) )
Espero que ajude
Henrique
Olá Henrique. Estou com o mesmo problema que FilRib. Acabei de baixar o Mac Yosemite e o AutoCad 2015 diz que não é possível carregar a rotina porque ele não é compatível com o Yosemite:
; error: vl-load-com not supported on "Mac OS X Version 10.10 (x86_64)"
Há alguma forma de modificar essa linha de comando por alguma que funcione no Yosemite?
Olá Cesar, bem vindo aos forums da Autodesk!
Infelizmente o 'AutoCAD for mac' não suporta Vlisp, portanto todos os códigos para 'mac' não podem recorrer a funções 'vl*'...
Para recorrer a AutoLISP e reescrever esta rotina, seria necessário muito mais código.
Não sei se ainda tenho algo parecido que tenha escrito em vanila autolisp, vou procurar nos meus ficheiros mais antigos e se encontrar posto.
Entretanto, tenta fazer um google que pode ser que encontres algo.
Henrique
Cezar,
tenta esta rotina, deve funcionar como esperado...
(Não testada, não tenho AutoCAD neste laptop)
(defun c:compt (/ comp compt ent enttp hnd i ss) (if (setq ss (ssget '((0 . "ELLIPSE,LWPOLYLINE,POLYLINE,SPLINE,LINE,ARC,CIRCLE")))) (progn (setq compt 0.0) (repeat (setq i (sslength ss)) (setq hnd (ssname ss (setq i (1- i))) ent (entget hnd) enttp (cdr (assoc 0 ent)) ) (cond ((wcmatch enttp "LINE") (setq comp (distance (cdr (assoc 10 ent)) (cdr (assoc 11 ent)))) ) ((wcmatch enttp "ARC") (setq comp (* (cdr (assoc 40 ent)) (if (minusp (setq l (- (cdr (assoc 51 ent)) (cdr (assoc 50 ent)) ) ) ) (+ pi pi l) l ) ) ) ) ((wcmatch enttp "ELLIPSE,LWPOLYLINE,POLYLINE,SPLINE,CIRCLE") (command "_.area" "_O" hnd) (setq comp (getvar 'PERIMETER)) ) (T (setq comp 0.0) ) ) (setq compt (+ comp compt)) ) (princ (strcat "\nComprimento total: " (rtos compt))) ) ) (princ) )
Espero que ajude
Henrique
rodrigo escreveu:
Bom dia.
Depois de criar esta rotina como faço para usala? Qual comando?
Olá Rodrigo e bem vindo à Comunidade Autodesk.
As rotinas de Auto/Visual LISP, são ficheiros ASCII, portanto seleciona-a toda, e cola-a num ficheiro de texto, por exemplo 'notepad', e salva-o como 'xxx.lsp' (eu normalmente salvo-o com o nome do comando) numa pasta nas 'trusted Locations'.
Para carregares um 'lisp' tens o comando '_appload' e selecionas o ficheiro que queres carregar.
Neste caso o nome do comando é compt
Numa rotina de 'lisp' o nome do comando está escrito na função 'defun'
(defun c:compt (.....
0 c: é apenas a definir uma função que o AutoCAD vai reconhecer como comando, o que vem depois dos dois pontos ":" é o nome do comando...
Espero que ajude
Henrique
Olá,
Abri um notepad e colei:
(defun c:compt (/ comp compt ent i ss)
(vl-load-com)
(if (setq ss (ssget '((0 . "ELLIPSE,LWPOLYLINE,POLYLINE,SPLINE,LINE,ARC,CIRCLE"))))
(progn
(setq compt 0.0)
(repeat (setq i (sslength ss))
(setq ent (ssname ss (setq i (1- i)))
comp (vlax-curve-getDistAtParam ent (vlax-curve-getEndParam ent))
compt (+ comp compt)
)
)
(princ (strcat "\nComprimento total: " (rtos compt)))
)
)
(princ)
)
após isso, salvei como compt.lsp na pasta: arquivos de programas/autodesk/autocad english 2016/support/compt.lsp.
Reiniciei o CAD e não apareceu o comando.
O que seria uma pasta trusted locations? Qual foi meu erro?
renanmgU2EXQ escreveu:
...
salvei como compt.lsp na pasta: arquivos de programas/autodesk/autocad english 2016/support/compt.lsp.
Reiniciei o CAD e não apareceu o comando.
O que seria uma pasta trusted locations? Qual foi meu erro?
Olá renanmgU2EXQ e bem vindo à Comunidade Autodesk.
Para carregar uma rotina no AutoCAD, tenta o comando AppLoad, procura o ficheiro compt.lsp, e arrasta-o para dentro da Startup Suite, assim o ficheiro será carregado em todos os dwg's.
Espero que ajude
Henrique
Parabéns amigo, já faz mais de um ano que vc postou essa ajuda, testei e funcionou muito bem!!
trabalho projetando tesouras metálicas e esse teu comando vai me ajudar muito para quantificar o material a ser utilizado,
PARABÉNS E OBRIGADO!
vinopinheiro escreveu:
Parabéns amigo, já faz mais de um ano que vc postou essa ajuda, testei e funcionou muito bem!!
trabalho projetando tesouras metálicas e esse teu comando vai me ajudar muito para quantificar o material a ser utilizado,
PARABÉNS E OBRIGADO!
Olá vinopinheiro e bem vindo à Comunidade Autodesk!
Fico feliz por ter podido ajudar!
Henrique
Boa tarde,
Utilizo o CAD 2017 full, carreguei o comando conforme citado nas citações anteriores, porem ao chamar o comando compt ele solicita que selecione os itens, assim que clico uma a uma das polilineas que desejo medir, não tem nenhum resultado.
Alguém poderia ajudar?
trevisan83 escreveu:
Boa tarde,
Utilizo o CAD 2017 full, carreguei o comando conforme citado nas citações anteriores, porem ao chamar o comando compt ele solicita que selecione os itens, assim que clico uma a uma das polilineas que desejo medir, não tem nenhum resultado.
Alguém poderia ajudar?
Olá trevisan83 e bem vindo à Comunidade Autodesk!
Não tenho AC2017 comigo, mas deveria funcionar como esperado...
Tenta carregar em F2 depois de correr o LISP.
Aparece o resultado?
Espero que ajude
Henrique
Bom dia Pessoal
Estou tentando pegar no setq o valor do length da lwp
Pelo list aparece
Open
Constant width 0.2000
area 0.0000
length 24.5582
Pelo entget aparece
((-1 . <Entity name: -26dd40>) (0 . "LWPOLYLINE") (330 . <Entity name:
-270308>) (5 . "850") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 .
"FIBRA_216") (100 . "AcDbPolyline") (90 . 2) (70 . 0) (43 . 0.2) (38 . 0.0) (39
. 0.0) (10 1865.69 214.407) (40 . 0.2) (41 . 0.2) (42 . 0.0) (10 1890.25
214.407) (40 . 0.2) (41 . 0.2) (42 . 0.0) (210 0.0 0.0 1.0))
Onde acho o valor de 24.5582 ??
Desde ja agradeco.
Sunao
asunao escreveu:
Bom dia Pessoal
Estou tentando pegar no setq o valor do length da lwp
Pelo list aparece
Open
Constant width 0.2000
area 0.0000
length 24.5582
Pelo entget aparece
((-1 . <Entity name: -26dd40>) (0 . "LWPOLYLINE") (330 . <Entity name:
-270308>) (5 . "850") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 .
"FIBRA_216") (100 . "AcDbPolyline") (90 . 2) (70 . 0) (43 . 0.2) (38 . 0.0) (39
. 0.0) (10 1865.69 214.407) (40 . 0.2) (41 . 0.2) (42 . 0.0) (10 1890.25
214.407) (40 . 0.2) (41 . 0.2) (42 . 0.0) (210 0.0 0.0 1.0))
Onde acho o valor de 24.5582 ??
Desde ja agradeco.
Sunao
Olá asunaoe bem vindo à Comunidade Autodesk!
Para sabermos o comprimento total de uma 'LWPOLYLINE' utilizando AUTOLISP, dá muito trabalho... :))
Teriamos que correr todos os DXF's 10 (os vertices) e encontrar a distancia entre os pontos e ter em atenção se são curvas e calcular o arco da curva.... e somar tudo...
Será mais fácil recorrer ao VisualLISP, transformando a entidade em VLA Object e vêr a Propriedade 'Length'...
Exemplo:
(vl-load-com) (defun c:demo ( / sel vlaobj) (if (and (setq sel (car (entsel "\nSeleciona uma LwPolyline : "))) (setq VlaObj (vlax-ename->vla-object sel)) (= (vla-get-ObjectName VlaObj) "AcDbPolyline") ) (princ (strcat "\n O comprimento da LwPolyline é : " (rtos (vla-get-length VlaObj) 2 3))) (princ "\n A entidade selecionada não é uma LwPolyline ou nada foi celecionado.... ") ) (princ) )
Espero que ajude
Henrique
asunao escreveu:
Henrique boa tarde
Vc é monstro, resolveu meu problemas aqui.
Obrigado
Sunao, fico feliz por ter podido ajudar!
Henrique
Não encontrou o que está procurando? Pergunte à comunidade ou compartilhe seu conhecimento.