Programs that draw it for you!






24 November 2017

Welcome, Visitor

Powered By

lusovps.com
Visitor Access





Contagem de blocos


fr3d1

(defun c:cb()
(setvar "luprec" 0)
(setq nome_bloco (cdr (assoc 2 (entget (car (entsel "\nSelecione o Bloco :"))))));
(setq listss (ssget "x" (list (cons 0 "INSERT")(CONS 2 nome_bloco)))) ;
(setq qtblk (sslength listss))
(princ (strcat "Existem " (rtos qtblk) " blocos com nome : " nome_bloco ))
(prompt "\nInsira o ponto de inserção para atualização de valor...")
(setvar "cmdecho" 0)
(setq a (ssget))
(setq ht (rtos qtblk ))
(setq i 0)
(setq b1 (entget (ssname a i)))
(setq c (assoc 1 b1))
(setq d (cons (car c) ht))
(setq b2 (subst d c b1))
(entmod b2)

(princ)
)
(princ)






Tenho esse programa mas a rotina esta trabalhando no desenho todo, há a possibilidade de limitar a area da rotina, como por exemplo pedindo para selecionar os objetos que eu queira?

att.

frederico.arqest@gmail.com qualquer coisa

fr3d1

O bom é que ninguem ajuda!

Dude

Alterando o menos possível o teu código e contando que é para fazer medições de uma selecção, mais vale prepara já para correr todos os elementos, neste caso apenas conta os blocos escolhidos...


(vl-load-com); para usar activex

(defun c:cb()
(setvar \"luprec\" 0)
(setq nome_bloco (cdr (assoc 2 (entget (car (entsel \"\\nSelecione o Bloco :\"))))));
(setq listss (ssget \"x\" (list (cons 0 \"INSERT\")(CONS 2 nome_bloco)))) ;


(princ \"\\n Escolha os elementos a medir ...\")
(setq ss_obj (ssget )); grupo de elementos a medir...


(setq ss_bloco (ssadd)); zerar nova selecção
(setq contox 0)
(while (< contox (sslength ss_obj)); correr todos os elementos do grupo

(setq vlaxobj (vlax-ename->vla-object (ssname ss_obj contox))) ; converter em objecto activex

(if (= (vlax-get-property vlaxobj \"ObjectName\") \"AcDbBlockReference\")(progn ; confirmar que é um bloco
(if (= (vlax-get-property vlaxobj \"EffectiveName\") nome_bloco)(progn ; confirmar que é o bloco que queremos

(ssadd (ssname ss_obj contox) ss_bloco) ;adicionar a nova selecção
))
))
(setq contox (+ contox 1)))


(setq qtblk (sslength ss_bloco))
(princ (strcat \"Existem \" (rtos qtblk) \" blocos com nome : \" nome_bloco ))
(prompt \"\\nInsira o ponto de inserção para atualização de valor...\")
(setvar \"cmdecho\" 0)
(setq a (ssget))
(setq ht (rtos qtblk ))
(setq i 0)
(setq b1 (entget (ssname a i)))
(setq c (assoc 1 b1))
(setq d (cons (car c) ht))
(setq b2 (subst d c b1))
(entmod b2)

(princ)
)
(princ)


Espero que ajude!

Abraço

fr3d1

Para usar o activeX preciso instalar alguma programa?

Dude

Não, apenas é necessário declarar (vl-load-com)no inicio para carregar todas as funções necessárias.

ActiveX é a "linguagem" que os próprios comandos do cad usam.

Em vez de lhe dar comandos a dizer, por exemplo, constrói uma linha vermelha de x a y, o que faço é acrescentar logo a linha na base de dados do desenho, usando os comandos que o próprio programa ia usar para criar essa linha....

É muito mais rápida a execução... mas muito diferente do autolisp puro e duro....

fr3d1

Command: ; error: malformed string on input

Nessa rotina que voce me passou, está dando esse erro. Não consegui identificar o erro. Poderia me ajudar?

fr3d1

ja identifiquei o erro.

obrigado

... AutolisPro 2014



You must be registered to leave posts.


... AutolisPro is a project still under construction, we will try to implement as soon as possible all the missing features ! ...


At this starting fase, we are recruiting new programmers, if you are interested in investing in our project please contact us!


We want the site to be the most practical and functional. Your ideas and opinions are very important to us, please share them with us!


If you find any problem contact... webmaster Time to buil: 0 ... site online since October 2008... ... last update at 09/12/2014...