Home
Membro VIP
Usuários
News
Downloads
Informações
Links
Utilitários
Equipe
Comunidade
Faça parte de nossa lista de discussão no Yahoogrupos, Grupo CADKLEIN . Simplesmente digite o seu email no campo abaixo:
CADKLEIN :: Exibir tópico - Autolisp para somar linhas
Autor
Mensagem
Silaspr Ferro Registro: Mar 29, 2011 Mensagens: 10 Localização: São Paulo Status: Offline
Enviada: Qui 10 Nov 2011 10:37:57 am Assunto: Autolisp para somar linhas
Olá pessoal, estou precisando de uma Ajuda.
Preciso de uma Autolisp que some a distancia de um ponto a outro e que vá acumulando a somatoria dos pontos Clicados.
Eu consegui a Lisp - DISTAC, mas ela quando clica num ponto vc não pode clicar em pontos distintos pois ela funciona como uma polyline.
A lisp q eu preciso por exemplo se eu tiver 10 linhas em paralelo clico no ponto inicial da primeira linha e no fim da mesma ele acumula uma distância na segunda a mesma coisa e no fim dou enter e ela da a distância total das linhas.
Voltar ao Topo
Autor
Mensagem
CarlosAbreu Bronze Registro: May 08, 2009 Mensagens: 56 Status: Offline
Enviada: Qui 10 Nov 2011 2:04:07 pm Assunto:
bom... tem esse lisp q soma as distancias das linhas selecionando elas
(defun c:ctotal (/ n ss soma ent)
(tbn:error-init nil)
(setq ss (ssget '((0 . "LINE,SPLINE,ARC,LWPOLYLINE,POLYLINE,ELLIPSE")))
n 0
soma 0.0)
(repeat (sslength ss)
(setq ent (ssname ss n)
n (1+ n)
soma (+ soma (vlax-curve-getdistatparam ent
(vlax-curve-getendparam ent)) ))
)
(prompt (fnum soma 3))
(tbn:error-restore))
;;;;;;;;;;;;;;;;;;;;;;;
(defun tbn:error-init (sys / tmp ss cmd)
(defun-q-list-set 'tbn:error_exe (list nil (cadr sys)))
(setq tbn:olderr *error*
*error* (lambda (s)
(setq yy s)
(if (/= s "Function cancelled")
(prompt (strcat "\nError: " s)))
(if (/= (getvar "cmdnames") "")
(command))
(tbn:error_exe)
(tbn:error-restore))
sys (car sys)
tbn:sysvars nil
tbn:error-undo (getvar "undoctl")
ss (ssgetfirst)
cmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(cond ((= 2 (logand tbn:error-undo 2))
(command "_.undo" "_control" "_all"
"_.undo" "_auto" "_off"))
((/= 1 (logand tbn:error-undo 1))
(command "_.undo" "_all"
"_.undo" "_auto" "_off")))
(command "_.UNDO" "_group")
(setvar "cmdecho" cmd)
(repeat (/ (length sys) 2)
(setq tmp (car sys)
tbn:sysvars (cons (list tmp (getvar tmp))
tbn:sysvars)
tmp (setvar tmp (cadr sys))
sys (cddr sys)))
(sssetfirst (car ss) (cadr ss)))
(defun tbn:error-restore (/ cmd)
(setq *error* tbn:olderr)
(foreach x tbn:sysvars (setvar (car x) (cadr x)))
(redraw)
(setq cmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(command "_.UNDO" "_e")
(cond ((/= 1 (logand tbn:error-undo 1))
(command "_.undo" "_control" "_none"))
((= 2 (logand tbn:error-undo 2))
(command "_.undo" "_control" "_one")))
(setvar "cmdecho" cmd)
(princ))
;|formata um numero real em uma string com f casas decimais
e com separador de milhar, exemplo:
(fnum 123456789.123456789 3)|;
(defun fnum (num f / int pos fp)
(setq int (rtos num 2 f)
pos (vl-string-search "." int)
pos (if pos pos (strlen int))
fp (substr int (+ pos 2) (strlen int))
int (substr int 1 pos))
(while (< (strlen fp) f) (setq fp (strcat fp "0")))
(repeat (/ pos 3)
(setq int (strcat (substr int 1 (- pos 3))
"."
(substr int (- pos 2) (strlen int)))
pos (- pos 3)))
(vl-string-left-trim "."
(if (zerop f) int (strcat int "," fp))))
(defun tbn:error-init (sys / tmp ss cmd)
(defun-q-list-set 'tbn:error_exe (list nil (cadr sys)))
(setq tbn:olderr *error*
*error* (lambda (s)
(setq yy s)
(if (/= s "Function cancelled")
(prompt (strcat "\nError: " s)))
(if (/= (getvar "cmdnames") "")
(command))
(tbn:error_exe)
(tbn:error-restore))
sys (car sys)
tbn:sysvars nil
tbn:error-undo (getvar "undoctl")
ss (ssgetfirst)
cmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(cond ((= 2 (logand tbn:error-undo 2))
(command "_.undo" "_control" "_all"
"_.undo" "_auto" "_off"))
((/= 1 (logand tbn:error-undo 1))
(command "_.undo" "_all"
"_.undo" "_auto" "_off")))
(command "_.UNDO" "_group")
(setvar "cmdecho" cmd)
(repeat (/ (length sys) 2)
(setq tmp (car sys)
tbn:sysvars (cons (list tmp (getvar tmp))
tbn:sysvars)
tmp (setvar tmp (cadr sys))
sys (cddr sys)))
(sssetfirst (car ss) (cadr ss)))
(defun tbn:error-restore (/ cmd)
(setq *error* tbn:olderr)
(foreach x tbn:sysvars (setvar (car x) (cadr x)))
(redraw)
(setq cmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(command "_.UNDO" "_e")
(cond ((/= 1 (logand tbn:error-undo 1))
(command "_.undo" "_control" "_none"))
((= 2 (logand tbn:error-undo 2))
(command "_.undo" "_control" "_one")))
(setvar "cmdecho" cmd)
;;;;;;;;;;;;;;;;;;
(princ))
Voltar ao Topo
Autor
Mensagem
Silaspr Ferro Registro: Mar 29, 2011 Mensagens: 10 Localização: São Paulo Status: Offline
Enviada: Qui 10 Nov 2011 4:47:28 pm Assunto:
Sim essa eu tenho, mas qual eu quero é um pouco diferente dessa. Obrigado
Voltar ao Topo
Autor
Mensagem
luislhss Ouro Registro: Mar 10, 2006 Mensagens: 655 Localização: Salvador Status: Offline
Autor
Mensagem
luislhss Ouro Registro: Mar 10, 2006 Mensagens: 655 Localização: Salvador Status: Offline
Autor
Mensagem
Silaspr Ferro Registro: Mar 29, 2011 Mensagens: 10 Localização: São Paulo Status: Offline
Enviada: Qui 17 Nov 2011 3:26:38 pm Assunto:
Luislhss o DISTAC é um lisp que fica proximo do que eu preciso, mas ao invés dele funcionar como se fosse uma polyline pra acumular, a lisp que eu busco tem que somar dois pontos distintos e ir acumulando de dois em dois pontos.
Alguém consegue editar a Lisp Distac?
Voltar ao Topo
Autor
Mensagem
LuKlein Equipe CADKLEIN Registro: Feb 27, 2003 Mensagens: 2647 Localização: Brasil Status: Offline
Enviada: Sex 18 Nov 2011 12:21:14 pm Assunto:
Eu fiz essa há alguns anos quando comecei a brincar com lisp:
Código:
(defun C:dac ()
(alert "Esta funcao se repetira por 20 vezes.")
(setvar "cmdecho" 0)
(setq p1 (getdist "\nPrimeira distancia: "))
(print p1) ;1
(setq p2 (getdist "\nProxima distancia: "))
(setq p2t (+ p1 p2))
(print p2t) ;2
(setq p3 (getdist "\nProxima distancia: "))
(setq p3t (+ p3 p2t))
(print p3t) ;3
(setq p4 (getdist "\nProxima distancia: "))
(setq p4t (+ p3t p4))
(print p4t) ;4
(setq p5 (getdist "\nProxima distancia: "))
(setq p5t (+ p4t p5))
(print p5t) ;5
(setq p6 (getdist "\nProxima distancia: "))
(setq p6t (+ p6 p5t))
(print p6t) ;6
(setq p7 (getdist "\nProxima distancia: "))
(setq p7t (+ p7 p6t))
(print p7t) ;7
(setq p8 (getdist "\nProxima distancia: "))
(setq p8t (+ p8 p7t))
(print p8t) ;8
(setq p9 (getdist "\nProxima distancia: "))
(setq p9t (+ p8t p9))
(print p9t) ;9
(setq p10 (getdist "\nProxima distancia: "))
(setq p10t (+ p10 p9t))
(print p10t) ;10
(setq p11 (getdist "\nPrimeira distancia: "))
(setq p11t (+ p11 p10t))
(print p11t) ;11
(setq p12 (getdist "\nProxima distancia: "))
(setq p12t (+ p11t p12))
(print p12t) ;12
(setq p13 (getdist "\nProxima distancia: "))
(setq p13t (+ p13 p12t))
(print p13t) ;13
(setq p14 (getdist "\nProxima distancia: "))
(setq p14t (+ p13t p14))
(print p14t) ;14
(setq p15 (getdist "\nProxima distancia: "))
(setq p15t (+ p14t p15))
(print p15t) ;15
(setq p16 (getdist "\nProxima distancia: "))
(setq p16t (+ p16 p15t))
(print p16t) ;16
(setq p17 (getdist "\nProxima distancia: "))
(setq p17t (+ p17 p16t))
(print p17t) ;17
(setq p18 (getdist "\nProxima distancia: "))
(setq p18t (+ p18 p17t))
(print p18t) ;18
(setq p19 (getdist "\nProxima distancia: "))
(setq p19t (+ p18t p19))
(print p19t) ;19
(setq p20 (getdist "\nProxima distancia: "))
(setq p20t (+ p20 p19t))
(print p20t) ;20
(setvar "cmdecho" 1)
(princ)
)
Eu não programo em lisp, parei faz tempo... espero que essa rotina possa ajudar em algo.
____________ Abraços,
Luciana Klein
Sócia-Fundadora CADKlein
Diretora AUGIbr
Autora Livro AutoCAD 2006 2D
Autora Livro AutoCAD 2008 2D/3D
Autora Livro AutoCAD 2010 2D/3D
AutoCAD 2009/10/11/2012 Certified Professional/Associate
www.lucianaklein.com/loja
Voltar ao Topo
Autor
Mensagem
Silaspr Ferro Registro: Mar 29, 2011 Mensagens: 10 Localização: São Paulo Status: Offline
Enviada: Seg 21 Nov 2011 3:27:27 pm Assunto:
Obrigado Lú
É dessa que estava precisando, só que preciso que se repita mais vezes.
Mas mesmo assim obrigado.
Voltar ao Topo
Autor
Mensagem
neyton Ouro Registro: May 28, 2006 Mensagens: 383 Status: Offline
Autor
Mensagem
CarlosAbreu Bronze Registro: May 08, 2009 Mensagens: 56 Status: Offline
Enviada: Qui 24 Nov 2011 2:52:55 pm Assunto:
ohh neyton... desculpa.... esqueci mesmo de botar os creditos
foi mal
Voltar ao Topo
Enviar Mensagens Novas: Proibido . Responder Tópicos Proibido Editar Mensagens: Proibido . Excluir Mensagens: Proibido . Votar em Enquetes: Proibido .
Powered by phpBB 2.0.10 © 2001-2003 phpBB Group
T-Platinum v.2.0.0 © TechGFX.com