somar length de pls

Dúvidas sobre o AutoCAD...

Moderador: Moderadores

Responder
Avatar do usuário
cris_arq
Concreto
Concreto
Mensagens: 49
Registrado em: Qua 22 Jun 2005 12:00:00 am

somar length de pls

Mensagem por cris_arq »

alguem onhece um lisp que some comprimentos(lengths) de pls, por ex. seleciono 50 pls, e o lisp retorna o valor total das 50pls, eu ja vi um que soma lines, cujo nome era linesum, porem pls, eu nunca vi???
Avatar do usuário
ehscad
Concreto
Concreto
Mensagens: 28
Registrado em: Ter 27 Jul 2004 12:00:00 am

Mensagem por ehscad »

Cris_arq

está abaixo um comando muito legal, ele mede o comprimento de todas as polylines de um layer selecionado, só não pode haver polylines desse layer no paper.

espero que ajude.

Edmundo.


; CÁLCULA O COMPRIMENTO DE TODAS AS POLYLINES DE UM LAYER


;;(Autor - MARCOS MENDES)

(defun c:comp (/ conta layer item grupo item1 comprimento var2 var1
tabcad combo)
(setq conta 0)
(setq var1 (getvar "cmdecho"))
(setq var2 (getvar "menuecho"))
(setvar "menuecho" 0)
(setvar "cmdecho" 0)
(defun TABCAD (TABLE / TMP RET)
(setq TMP (tblnext TABLE 'T))
(while TMP
(setq RET (cons (cdr (assoc 2 TMP)) RET)
TMP (tblnext TABLE)
)
)
(reverse RET)
)
(defun combo (title combo_list / arq_tmp combo_id)
(defun gravar (arq / arq1)
(setq arq1 (open arq "w"))
(write-line
(strcat
"combo \: dialog \{label \= \""
title
"\" \; \: row \{ \: boxed_column \{ alignment \= centered \;"
)
arq1
)
(close arq1)
(setq arq1 (open arq "a"))
(write-line
" \: text \{ key \= \"c_ed\" \; width \= 15 \; edit_width \= 20 \; edit_limit \= 50 \; fixed_width \= true \; \}"
arq1
)
(write-line " spacer_1\;" arq1)
(write-line
" \: list_box \{ key \= \"c_list\" \; height \= 6 \; fixed_height \= true \; edit_width \= 15\; \} \}"
arq1
)
(write-line
" \: boxed_column \{ alignment \= centered \;"
arq1
)
(write-line
" \: button \{ key \= \"close\" \; label \= \"&Ok\" \; is_default \= true \; is_cancel \= true \; \}"
arq1
)
(write-line
" \: button \{ key \= \"close1\" \; label \= \"&Cancel\" \; is_default \= false \; is_cancel \= true \; \} spacer_1\; spacer_1\; \} \}\}"
arq1
)
(close arq1)
)
(setq arq_tmp (strcat (getenv "temp") "\\_.dcl"))
(gravar arq_tmp)
(setq combo_id (load_dialog arq_tmp))
(if (not (new_dialog "combo" combo_id))
(exit)
)
(start_list "c_list")
(mapcar 'add_list combo_list)
(end_list)
(action_tile
"c_list"
"(setq combo_ed
(set_tile \"c_ed\"
(nth (atoi $value) combo_list)))"
)
(action_tile "c_ed" "(setq combo_ed $value)")
(action_tile
"close"
"(setq item (get_tile \"c_ed\"))(done_dialog)"
)
(action_tile "close1" "(setq item nil)(done_dialog 0)")
(action_tile "add2list" "(ad_list)")
(action_tile "rem2list" "(rm_list)")
(mode_tile "c_ed" 2)
(set_tile "c_ed" (nth 0 combo_list))
(start_dialog)
(unload_dialog combo_id)
(setq item item)
)
(Setq layer (tabcad "LAYER"))
(setq item (combo "Selecione um LAYER" layer))
(if item
(progn
(setq grupo (ssget "X"
(list (cons -4 "<OR")
(cons -4 "<AND")
(cons 0 "POLYLINE")
(cons -4 "AND>")
(cons -4 "<AND")
(cons 0 "LWPOLYLINE")
(cons -4 "AND>")
(cons -4 "OR>")
(cons 8 item)
)
)
)
(if grupo
(progn
(if (= 0 (sslength grupo))
(alert "Não há Polilynes neste Layer")
(progn
(repeat (sslength grupo)
(progn (setq item1 (ssname grupo 0))
(setq grupo (ssdel item1 grupo))
(COMMAND "_.AREA" "E" item1)
(SETQ COMPRIMENTO (getvar "PERIMETER"))
(setq conta (+ conta comprimento))
)
)
(alert
(strcat
"Comprimento da Tubulação \nde Diâmetro \""
item
"\":\n\n"
(rtos conta 2 (getvar "luprec"))
)
)
)
)
)
(alert "Não há Polilynes neste Layer")
)
)
(alert "Aplicativo cancelado")
)
(setvar "menuecho" var2)
(setvar "cmdecho" var1)
(princ)
)

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Avatar do usuário
arq_smf
Madeira
Madeira
Mensagens: 15
Registrado em: Seg 16 Fev 2009 12:00:00 am

Mensagem por arq_smf »

Bom dia,
teria como criar uma rotina autolisp, com as mesmas funções acima e ele gerasse um texto com essas informações em .txt ???
:lol:

Aguardo resposta.... :P
Responder