CADxp: Modifier le paramètres d\'un BLOC DYNAMIQUE - CADxp

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Modifier le paramètres d\'un BLOC DYNAMIQUE

#1 L'utilisateur est hors-ligne   rebcao 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 7045
  • Inscrit(e) : 25-août 04
  • LocationSELESTAT

Posté 12 juillet 2011 - 06:10

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 Supports de Cours AutoCAD, des Outils AutoCAD...
cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
0

#2 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11181
  • Inscrit(e) : 02-septembre 05

Posté 12 juillet 2011 - 07:17

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 -
Développements sur mesure pour AutoCAD
Image IPB
0

#3 L'utilisateur est hors-ligne   rebcao 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 7045
  • Inscrit(e) : 25-août 04
  • LocationSELESTAT

Posté 12 juillet 2011 - 10:09

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 :

distance1
distance2


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 Supports de Cours AutoCAD, des Outils AutoCAD...
cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
0

#4 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11181
  • Inscrit(e) : 02-septembre 05

Posté 12 juillet 2011 - 11:48

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 -
Développements sur mesure pour AutoCAD
Image IPB
0

#5 L'utilisateur est hors-ligne   rebcao 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 7045
  • Inscrit(e) : 25-août 04
  • LocationSELESTAT

Posté 12 juillet 2011 - 12:07

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 Supports de Cours AutoCAD, des Outils AutoCAD...
cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
0

#6 L'utilisateur est hors-ligne   rebcao 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 7045
  • Inscrit(e) : 25-août 04
  • LocationSELESTAT

Posté 12 juillet 2011 - 13:50

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 Supports de Cours AutoCAD, des Outils AutoCAD...
cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
0

#7 L'utilisateur est hors-ligne   kentin789 

  • ceinture blanche
  • Groupe : Membres
  • Messages : 4
  • Inscrit(e) : 13-décembre 18

Posté 14 décembre 2018 - 09:23

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
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

2 utilisateur(s) en train de lire ce sujet
0 membre(s), 2 invité(s), 0 utilisateur(s) anonyme(s)