Somar length de pls e gerar texto

Dúvidas sobre o AutoCAD...

Moderador: Moderadores

Avatar do usuário
cracksther
Diamante
Diamante
Mensagens: 1063
Registrado em: Seg 13 Dez 2004 11:00:00 pm

Mensagem por cracksther »

arq_smf... Eu quero, eu quero, ... , eu quero!, isso é chato.

Mas de qualquer forma segue união das duas rotinas, veja como é super simples uni-las:

[lsp];;;Versão usando rotina do marcos
;Está primeira parte é adpatação da minha rotina,
;Embora a função (comp-write-file) seja capaz gravar os comprimentos de vários layers
;na mesma execução; separando por layer, a rotina do marcos trabalha apenas com um layer.
;seria necessário uma adaptação na rotina dele, pois esta é encarregada de fazer a seleção dos objetos
;e enviar para a função (comp-write-file)
(defun comp-write-file (sel / item layer simbName listLayer vlaItem layer text fileName fileID)
;Soma o comprimentos de todas dos objetos selecionados
(while (setq item (ssname sel 0))
(setq layer (cdr (assoc 8 (entget item))))
(setq simbName (strcat "_" layer))
;cria uma variavel com o nome do layer
(if (not (eval (read simbName)))
(progn
(set (read simbName) 0)
(setq listLayer (vl-list* simbName listLayer))
)
)
;convert par VLA Object
(setq vlaItem (vlax-ename->vla-object item))
;Soma o comprimento
(set (read simbName) (+ (eval (read simbName)) (vlax-get-property vlaItem "length")))
;Remove o item da seleção
(ssdel item sel)
)

;Escolha do arquivo
(setq fileName (getfiled "Selecione um arquivo" "" "txt" 32))
(setq fileID (open fileName "a"))
;Grava no arquivo
(foreach n listLayer
;Texto a gravar no arquivo
(setq layer (substr n 2 (strlen n)))
(setq text (strcat layer " - " (rtos (eval (read n)))))
(write-line text fileID)
(set (read n) nil); como as variáveis são dinâmicas é necessário atribuir nil á elas após utilizadas
)

;fecha o arquivo
(close fileID)

(princ)
)[/lsp]
[lsp]
;Rotina do 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")
;;;aqui está a chamada a minha função.
(comp-write-file grupo)
;;;o bloco comentado abaixo foi substituído pela função (comp-write-file)
;;; (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)
)[/lsp]

Até mais!
Marcelo Silva - Cascavel - PR
cracksther@gmail.com
Avatar do usuário
arq_smf
Madeira
Madeira
Mensagens: 15
Registrado em: Seg 16 Fev 2009 12:00:00 am

Mensagem por arq_smf »

Muito Obrigada, Marcelo... vc é mto gentil !!! :lol:

Prometo q não vou mais te encher !!!!

Até mais....
Avatar do usuário
cracksther
Diamante
Diamante
Mensagens: 1063
Registrado em: Seg 13 Dez 2004 11:00:00 pm

Mensagem por cracksther »

arq_smf... Não se trata de "encher", portanto sempre que tiver dúvida pode perguntar, no entanto quando se pede um favor que ninguém de obrigação de fazer, seria razoável ter calma e aguardar a resposta...

Até mais!
Marcelo Silva - Cascavel - PR
cracksther@gmail.com
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, Marcelo... !
Sei q vc está com a razão, por isso peço desculpas.
Eu tenho paciência, até demais.... mas meus chefes não tem...

Realmente eu tentei adaptar os códigos, mas não deu certo. Então recorri a vcs.

Peço desculpas mais uma vez pelo incômodo.

Até mais...
Um ótimo carnaval p/ vc! 8)
Avatar do usuário
hugopaulo
Master
Master
Mensagens: 1873
Registrado em: Dom 29 Fev 2004 12:00:00 am

Mensagem por hugopaulo »

arq_smf escreveu:Muito Obrigada, Marcelo... vc é mto gentil !!! :lol:

Prometo q não vou mais te encher !!!!

Até mais....
arq_smf

Com o devido respeito ao seu grande coração não entendi muito bem esse "mto gentil" na sua mensagem.

Da mesma forma não encontrei "arq_smf... Eu quero, eu quero, ... , eu quero!, isso é chato" citado pelo "cracksther".

O mais próximo foi "queria" citado por vc.

Complicado !
hugopaulo
AutoLISP Não É LISP ==> VISUAL LISP não é Linguagem
Avatar do usuário
cracksther
Diamante
Diamante
Mensagens: 1063
Registrado em: Seg 13 Dez 2004 11:00:00 pm

Mensagem por cracksther »

arq_smf... Por favor responda á duas perguntas:
1° - A minha resposta foi útil para você?

2° - A resposta do hugopaulo foi útil para você?

Até mais!
Marcelo Silva - Cascavel - PR
cracksther@gmail.com
Avatar do usuário
arq_smf
Madeira
Madeira
Mensagens: 15
Registrado em: Seg 16 Fev 2009 12:00:00 am

Mensagem por arq_smf »

Olá Hugo... bom dia !

Pois é, eu estava tentando pedir a ajuda de vcs na forma mais educada e gentil possivel. Realmente, em momento algum eu cheguei e disse "eu quero...". Mas, como não queria gerar conflitos e precisava da rotina, preferi me contrer.
Vcs foram minha salvação !!!! rsrs...

Um grande abraço... :lol:
Arq_smf
Avatar do usuário
arq_smf
Madeira
Madeira
Mensagens: 15
Registrado em: Seg 16 Fev 2009 12:00:00 am

Mensagem por arq_smf »

Olá, Marcelo....

Bom, respondendo as suas perguntas:

1º - Sim, sua resposta foi MUITO útil p/ mim.

2º - A resposta do HugoPaulo, não se trata de ser útil ou não. Pelo q eu entendi ele apenas quis se sentiu incomodado com sua resposta e quis se expressar.

Sem mais,
arq_smf
Responder