dfbiagio Posté(e) le 28 juillet 2005 Partager Posté(e) le 28 juillet 2005 Bonsoir à tous,Depuis peu j'utilise (à temps partiel) autocad2006. J'ai même modifié quelques blocks pour les étirer et pour les faire pivoter en un clin d’œil. C'est vraiment génial. :D Mais, j'ai créé un petit lisp qui me permet de calculer la longueur d'un réseau d'égouttage. En effet j'ai un bloc, que j'ai appelé tuyau, de largeur et de longueur variable. Ce qui me permet avec mon lisp d'en extraire les échelles d'insertions X et Y que j'additionne pour en obtenir la longueur totale suivant leur diamètres. Lorsque j'insère le bloc avec un delta Y de 1.75 et je fait appelle à la fonction (setq a (cdr (assoc 42 (entget (car (entsel)))))) elle donne comme réponse "1.75". Je prends le même bloc, que j'étire façon autocad 2006, jusqu'a obtenir la longueur de 1.75 m. Et lorsque je fait appelle à la fonction (setq a (cdr (assoc 42 (entget (car (entsel)))))) elle donne comme réponse "1.0" ce qui ne m'arrange pas du tout.:casstet: Comment puis-je faire pour en extraire sa nouvelle longueur. En fait c'est la propriété distance dans la fenêtre des propriétés.Je ne suis pas un expert de la langue française, mais j'espère que vous avez pigé.Merci de pouvoir m'aider pour modifier mon lisp.A+ Lien vers le commentaire Partager sur d’autres sites More sharing options...
didier Posté(e) le 30 juillet 2005 Partager Posté(e) le 30 juillet 2005 Bonjour La technologie des blocs dynamiques n'est pas à appliquer dans ton cas,en effet elle devient utile dès qu'il faut déplacer une entité du blocsans toucher à son intégrité.si tu ne touches qu'au facteur d'insertion en X, Y ou Z,continue avec les blocs non dynamiques.ne perds pas de vue que le mieux est l'ennemi du bien Toujours est il qu'il est vrai que je n'ai pas encore vu comment, en Lispfaire varier un paramètre de bloc dynamique.Dès que j'ai un moment, je regarderai avec le VBA. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
dfbiagio Posté(e) le 30 juillet 2005 Auteur Partager Posté(e) le 30 juillet 2005 Salut,enfin quelqu'un au bout du fil.C'est dommage car au niveau du dessin proprement dit cela va nettement plus vite. Mais pour mes métrés cela pose un problème.J'espe qu'en VBA tu trouveras une solution. En tout cas, je pense qu'il suffirait d'extraire la valeur distance dans la fenêtre des propriétés. Mais comment faire? En lisp, malheureseusement je vois pas.Si tu as quoi que ce soit tiens moi au courant, merci A+ Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tramber Posté(e) le 30 juillet 2005 Partager Posté(e) le 30 juillet 2005 En VBA il y a la piste : BlockRef.GetDynamicBlockProperties(entre 2004 et 2006 il y 13 et 20 "properties", dont certaines semblent avoir rapport avec les blocs dynamiques). En lisp, il n'y a rien, de mémoire, juste un nouveau code DXF qui indique si le block est dynamique ou non. J'ajoute que -BEDIT est possible à la ligne de commande suivi de _BActionTool ou _BParameter, on peut au moins programmer dans ce sens. [Edité le 30/7/2005 par Tramber] Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tramber Posté(e) le 30 juillet 2005 Partager Posté(e) le 30 juillet 2005 (defun c:tdb () (setq obj (vlax-ename->vla-object (car (entsel)))) (setq v (vla-getdynamicblockproperties obj)) (setq vval (vlax-variant-value v)) (setq sal (vlax-safearray->list vval)) (setq salnth (length sal)) (setq count 0) (while (/= count salnth) (vlax-dump-object (nth count sal)) (setq count (+ count 1)) ) (setq count nil) (princ) ) ; ; alteration code, to change a given variable in your block (defun c:sdb (/ esb v vval sal salnth count) (vl-load-com) (setq esb nil) (while (= esb nil) (setq esb (entsel)) (if (/= (vlax-get-property (vlax-ename->vla-object (car esb)) "effectivename") "YOUR BLOCK NAME HERE") (setq esb nil) ) ) (setq obj (vlax-ename->vla-object (car esb))) (setq v (vla-getdynamicblockproperties obj)) (setq vval (vlax-variant-value v)) (setq sal (vlax-safearray->list vval)) (setq salnth (length sal)) (setq count 0) (while ( (if (= (vlax-get-property (nth count sal) "PropertyName") "YOUR VARIABLE NAME HERE") (progn (vlax-put-property (nth count sal) "Value" "YOUR SETTING HERE")(princ) (setq count salnth) ) (setq count (+ count 1)) ) ) (princ) ) Je l'ai trouvé là Et je regarde tout de suite. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tramber Posté(e) le 30 juillet 2005 Partager Posté(e) le 30 juillet 2005 Cool, c'est faisable. J'ai honteusement détourné ce lisp pour faire celui-ci : (defun c:gdb (/ esb v vval sal salnth count result) (vl-load-com) (setq esb nil) (while (= esb nil) (setq esb (entsel)) (if (/= (vlax-get-property (vlax-ename->vla-object (car esb)) "effectivename") "Fenêtre - Métrique") (setq esb nil) ) ) (setq obj (vlax-ename->vla-object (car esb))) (setq v (vla-getdynamicblockproperties obj)) (setq vval (vlax-variant-value v)) (setq sal (vlax-safearray->list vval)) (setq salnth (length sal)) (setq count 0) (while ( (if (= (vlax-get-property (nth count sal) "PropertyName") "Largeur") (progn (setq result(vlax-get-property (nth count sal) "Value")) (setq count salnth) ) (setq count (+ count 1)) ) ) (princ(strcat"\nLe valeur de votre paramètre est : "(vl-princ-to-string(vlax-variant-value result)))) ) Celui-ci est basé sur le bloc "Fenêtre - Métrique" que l'on trouve dans les Sample du design center dans le bloc "Architectural - Métrique" qu'il faut exploser. Remplacer par tes valeurs comme dans le lisp sdb pour ton cas perso mais attention aux majuscules, les chaines sont sensibles à la casse. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tramber Posté(e) le 30 juillet 2005 Partager Posté(e) le 30 juillet 2005 Tiens, j'avais même pas fait gaffe, il s'appelle "Fenêtre - Métrique" mais a plutôt l'allure d'un profil IPE :D Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.) Lien vers le commentaire Partager sur d’autres sites More sharing options...
dfbiagio Posté(e) le 31 juillet 2005 Auteur Partager Posté(e) le 31 juillet 2005 Merci Tramber,j'ai essayé ton lisp et voilà le résultat Command:GDBSelect object:Select object:Select object:Select object:; error: bad argument type: lentityp nil Command: Merci de m'aider A+ Lien vers le commentaire Partager sur d’autres sites More sharing options...
dfbiagio Posté(e) le 31 juillet 2005 Auteur Partager Posté(e) le 31 juillet 2005 Voilà j'ai essayé ton lisp pas à pas Command: !a Command: (vlax-get-property (vlax-ename->vla-object a) 'effectivename)"tuyau-100" Command: (setq obj (vlax-ename->vla-object a))# Command: (setq v (vla-getdynamicblockproperties obj))# Command: (setq vval (vlax-variant-value v))# Command: (setq sal (vlax-safearray->list vval))(# #IAcadDynamicBlockReferenceProperty 0e5ef784>) Command: (setq salnth (length sal))2 Command: (vlax-get-property (nth 0 sal) 'propertyname)"Distance" Command: (setq result (vlax-get-property (nth 0 sal) 'value))# Command: !result# Command: (vlax-variant-value result)117.885 <----- VOILA MA DISTANCE RECHERCHEE Je vais l'adapter à mon lisp, mais si tu savais me renseigner au sujet du visuallisp cela m'aiderai à comprendre. Encore merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tramber Posté(e) le 31 juillet 2005 Partager Posté(e) le 31 juillet 2005 mais si tu savais me renseigner au sujet du visuallisp cela m'aiderai à comprendre. Encore merci Ben faut que t'achètes l'excellent ouvrage de Serge, à vendre sur ebay par Patrick J'ai commancé le Vlisp et l'utilise. Je comprends bien le code dont je parle mais ne serais te l'apprendre comme ca. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.) Lien vers le commentaire Partager sur d’autres sites More sharing options...
dfbiagio Posté(e) le 2 août 2005 Auteur Partager Posté(e) le 2 août 2005 Salut,Grâce à Tramber mon problème de recherche des distances est résolu.Mais, j'ai un autre petit souci. C'est lorsque j'interrogeais mon dessin avec la fonction (setq Objets (ssget (list (cons 2 “tuyau-100”)))) Il mettait tous les blocs dans la variable ObjetsMaintenant ce n'est plus possible car il renomme tous les blocs qui ont été modifiés, du type *U199 *U200 etc... :mad: J'ai déjà ma petite idée pour contourner ce problème, mais ce n'est pas très académique.D'avance merci pour votre précieuse collaboration. A+ Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tramber Posté(e) le 2 août 2005 Partager Posté(e) le 2 août 2005 C'est l'astuce des blocs dynamiques, ils sont dessinés dans le dessin avec des noms de blocs anonymes. C'est pour ca qu'on va recherche la propriété "effectivename" Il faut mieux faire (setq Objets (ssget (list (cons 0 “INSERT”))))et parcourir en boucle pour filtrer sur effectivename Je sais, c'est galère Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant