Olá a todos.
Há já uns anos longos que programo em Lisp, e apesar se enterder alguns comandos de visual lisp, estou a tentar agora aprofundar os meus conhecimentos de visual lisp. De livro que tenho (The Visual LISP Developers Bible - 2011 Edition.pdf) copiei este código.
Estou a usar o Acad 2012, e tento correr o código com 2 desenhos abertos.
Nada acontece a não ser o erro que ele devolve.
error: ActiveX Server returned the error: unknown name: ActiveDocument
Alguem me sabe dizer/ajudar a saber o porquê do erro ? E como dar a volta ao mesmo ?
Obrigado desde já.
Vasco Tavares
(defun C:ZOOMALL (/ $acad docs dnum this)
(vl-load-com)
(setq $acad (vlax-get-acad-object)
docs (vla-get-documents $acad)
this (vla-get-activedocument $acad)
dnum (vla-get-count docs)
)
(vlax-for each docs
(vla-put-ActiveDocument each)
(vla-ZoomExtents $acad)
(vla-save each)
)
(vla-put-activedocument this)
(vlax-release-object docs)
(vlax-release-object this)
(vlax-release-object $acad)
(princ (strcat "\nProcessed " (itoa dnum) " drawings."))
(princ)
)
Vxc escreveu:
Olá a todos.
Há já uns anos longos que programo em Lisp
...
Olá Vxc,
Se és o mesmo Vxc, já lá vão muitos anos...
Tenta utilizar antes vla-activate penso que não vai ser possivel a utilização do método do ZoomExtent, mas tenta.
Henrique
Oi hmsilva 🙂
Sim sou o mesmo :D. Quando "postei" aqui a minha dúvida reparei no teu user e lembrei-me que com sorte ainda eras tu a responder 🙂
Tudo bem por ai ?
Ok vou ver isso.
Estava a tentar ver se recorrendo ao visual conseguiria usar lisps minhas em vários desenhos ao mesmo tempo.
E este era um pequeno exemplo que vi no livro. Pensei que resultasse mas nada 😞
Ainda hei de ver através do visual como é que ei de entrar em blocos dinamicos.
Vou já ver se me safo com esse comando.
Obrigado.
O método ZoomExtents, só é válido para o currente documento... por isso este código não funciona, é pena...
Dá uma olhadela em http://www.lee-mac.com/ que tens muito código que o Lee disponibiliza, vale a pena ver.
Henrique
Estive nesse site ainda hoje de manhã :).
Estive a ver o comando que me enviaste mas não me safo na mesma.
Ou não dá ou sou eu que estou a ser nabo tb.
Vou ver se me safo lá.
Acho que a última vez que tinha posto uma pergunta a um forum ainda era no tempo dos newsgroups do Outlook.
Vou lá ver, obrigado de novo.
Vxc escreveu:
...
Acho que a última vez que tinha posto uma pergunta a um forum ainda era no tempo dos newsgroups do Outlook.
...
Que saudades desse tempo... éra muito mais rápido e eu éra muito mais novo...
Henrique
Eu estive afastado do CAD durante usn 2 anos aqui na minha empresa.
Estive num departamento de GIS.
E quando voltei procurei o newsgroup.
Quando descobri que tinha desaparecido fiquei "Então e agora ??".
Vá-la que depois descobri este forum. 🙂
Como falaste em DynBlocks, dá uma olhadela neste post,
podes tirar algumas ideias...
Henrique
Vasco
o codigo que voce esta escrevendo esta com muitas funções desnecessarias
olha o que eu retirei do seu codigo
(defun C:ZOOMALL (/)
(vl-load-com)
(setq $acad (vlax-get-acad-object)
;;;docs (vla-get-documents $acad)
;;;this (vla-get-activedocument $acad)
;;;dnum (vla-get-count docs)
)
;;;(vlax-for each docs
;;;(vla-put-ActiveDocument each)
(vla-ZoomExtents $acad)
;;;(vla-save each)
;;;)
;;;(vla-put-activedocument this)
;;;(vlax-release-object docs)
;;;(vlax-release-object this)
(vlax-release-object $acad)
(princ (strcat "\nProcessed " (itoa dnum) " drawings."))
(princ)
)
no caso expecifico do comando ZOOM, voce só precisa determinar os objetos e o tipo de zoom que vai viasualizar eles
eu só entro capturo o documento ativo, quando repeciso fazer alguma pesquisa na suas bibliotecas
o que não é o seu caso
Você achou uma postagem útil? Então fique à vontade para curtir essas postagens!
Sua pergunta obteve uma resposta que resolveu a duvida? Então clique no botão Aceitar Solução.
Fábio Santana
Architect | CAD/BIM Manager
Não encontrou o que está procurando? Pergunte à comunidade ou compartilhe seu conhecimento.