rebcao Posté(e) le 12 juillet 2011 Posté(e) le 12 juillet 2011 Bonjour, Existe-t-il une commande STANDARD (CHANGER) ou un LISP, en ligne de commande qui permette de modifier la valeur d'un paramètre d'un BLOC DYNAMIQUE. :( Valeur que l'on peut modifier via la commande PROPRIETES... :P ce que je veux éviter ! Merci pour votre aide. Christian Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
(gile) Posté(e) le 12 juillet 2011 Posté(e) le 12 juillet 2011 Salut, Je ne connais pas de commande native qui fasse ça.C'est possible en LISP, mais il faut connaitre, par avance ou renseigné par l'utilisateur :- la ou les références de bloc à traiter- le nom du paramètre- la nouvelle valeur pour ce paramètre Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
rebcao Posté(e) le 12 juillet 2011 Auteur Posté(e) le 12 juillet 2011 Bonjour Gilles, Merci pour ta réponse. Le bloc va changer à chaque fois mais ça on va dire que c'est pas un problème ! Le/les paramètres sont toujours de paramètres linéaires de nom : distance1distance2 ce serait quoi la syntaxe qui permet d'accéder aux données étendues d'un tel bloc ? Merci. Christian Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
(gile) Posté(e) le 12 juillet 2011 Posté(e) le 12 juillet 2011 On accède aux propriétés d'un bloc dynamique avec Visual LISP. La fonction vla-GetDynamicBlockProperties retourne un collection de vla-objets représentant les propriétés dynamiques (cette collection est un 'Safearray' contenu dans un variant).Chaque propriété dynamique a elle même des propriétés (Name et Value pour ce qui nous intéresse). Je te propose trois petites routines qui facilitent la tache. La première requiert un bloc comme argument (sous forme ENAME ou VLA-OBJECT) et retourne une liste de paire pointées contenant toutes les propriétés dynamiques du bloc sous la forme :(nom_de_la_propriété . vla-object_propriété) La seconde (qui appelle la première) requiert comme arguments un bloc (ename ou vla-object) et un nom de propriété (sensible à la casse). Elle retourne la valeur de cette propriété. La troisième (qui appelle la première) requiert comme arguments un bloc (ename ou vla-object), un nom de propriété (sensible à la casse) et une valeur pour cette propriété. Elle attribue la nouvelle valeur à la propriété et retourne T si l'opération s'est bien passée. Les deux dernières routines peuvent donc être utilisées en 'pur AutoLISP'. ;; gc:GetDynProps ;; Retourne la liste des propriétés dynamiques de la référence de bloc ;; sous forme d'une liste de paires pointées : (nom_propriété . propriété) ;; ;; Argument ;; blk : le bloc (ename ou vla-object) (defun gc:GetDynProps (blk / lst) (vl-load-com) (and (= (type blk) 'ENAME) (setq blk (vlax-ename->vla-object blk))) (if (and (= (vla-get-ObjectName blk) "AcDbBlockReference") (= (vla-get-IsDynamicBlock blk) :vlax-true) ) (foreach p (vlax-safearray->list (vlax-variant-value (vla-GetDynamicBlockProperties blk))) (setq lst (cons (cons (vla-get-PropertyName p) p) lst)) ) ) (reverse lst) ) ;; gc:GetDynPropValue ;; Retourne la valeur d'une propriété dynamique ;; ;; Arguments ;; blk : la référence de bloc (ename ou vla-object) ;; name : le nom de la propriété (sensible à la casse) (defun gc:GetDynPropValue (blk name / val) (vl-load-com) (if (setq prop (assoc name (gc:GetDynProps blk))) (vlax-variant-value (vla-get-Value (cdr prop))) ) ) ;; gc:SetDynPropValue ;; Attribue la valeur à une propriété dynamique ;; Retourne T si l'opération a réussi, nil sinon ;; ;; Arguments ;; blk : la référence de bloc (ename ou vla-object) ;; name : le nom de la propriété (sensible à la casse) ;; val : la valeur de la propriété (defun gc:SetDynPropValue (blk name val / prop) (vl-load-com) (and (numberp val) (setq val (float val))) (if (setq prop (assoc name (gc:GetDynProps blk))) (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-Value (list (cdr prop) val)) ) ) ) ) Exemple d'utilisation pour tester :(gc:SetDynPropValue (car (entsel)) "distance1" 500) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
rebcao Posté(e) le 12 juillet 2011 Auteur Posté(e) le 12 juillet 2011 Re, Merci beaucoup Gilles et même mille fois... ;) Je teste tout ça... Christian Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
rebcao Posté(e) le 12 juillet 2011 Auteur Posté(e) le 12 juillet 2011 Re, SUPER, ça marche nickel... exactement ce qu'il fallait ! ;) Merci Gilles Christian PS : c'est pas la peine que je te demande de m'envoyer la note ! ;) [Edité le 12/7/2011 par rebcao] Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
kentin789 Posté(e) le 14 décembre 2018 Posté(e) le 14 décembre 2018 Bonjour, je me permet de commenter ce poste car je pense qu'il correspond aux attentes que j'ai besoins mais je dois avouer que je n'arrive pas a mettre cette routine lisp en application pour mon cas. Voila dans l'idéal, je souhaiterais pouvoir créer un lisp qui me permette d'aller chercher un bloc dynamique dans une bibliothèque et lors de l'insertion de ce bloc, j'aimerais pouvoir définir les paramètres dynamique de mon bloc ( les différentes longueurs ) mais également pouvoir l’insérer avec des coordonnés bien précise ( en X et Y). Voila j'espère que vous allez pouvoir m'aider. je suis preneur de toutes les idées possibles pour arriver ce résultat. Merci
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