Aller au contenu

SELETION BLOC DYNAMIC!!!!!!!!


ludo07

Messages recommandés

  • Réponses 57
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Salut,

 

Pour que ceux que ça intéresse puissent profiter de la discussion, je poste ton ébauche de LISP.

Si ça te pose problème, fais moi le savoir, je supprimerais ce message.

 

; *******************************************************************
;                     essai champs.LSP
;

  

  ;(modes '("CMDECHO" "ATTDIA" "ATTREQ" "GRIDMODE" "UCSFOLLOW"))
  ;(setvar "cmdecho" 0)               ; turn cmdecho off
  ;(setvar "attdia" 0)                ; turn attdia off
  ;(setvar "attreq" 1)                ; turn attreq on
  ;(setvar "gridmode" 0)              ; turn gridmode off
  ;(setvar "ucsfollow" 0)             ; turn ucsfollow off

(defun C:aaa ()

(vl-load-com)


(setq blk (car (entsel "\nSélectionnez le bloc dynamique")))
(setq blk (vlax-ename->vla-object blk))
(setq prop-lst (vlax-invoke blk 'getDynamicBlockProperties))

(setq ech (car (mapcar 'vla-get-value prop-lst)))
(setq ech1 (getint "entrer l'echelle 1/:  20 , 50 , 75 , 100 , 200 :"))
(list ech)

;;;;a partir de la, je ne sais pas comment recuperer que la valeur 1/50 dans (#)  , et la remplacer
avec la commande  vla-put-value  par la valeur ech1 , saisie au clavier a l'insertion du bloc .;;;

;(vla-put-value ech1 ech)

) 

 

Certaines Données Visual LISP sont sous forme de variant dont certains sont du type safearray ces données ne sont pas facilement exploitables en LISP, il faut les transformer.

 

Par exemple :

(vla-getDynamicBlockProperties blk) retourne un variant : #

Pour récupérer la valeur de ce variant on peut utiliser la fonction vlax-variant-value :

(vlax-variant-value (vla-getDynamicBlockProperties blk)) retourne : #

On peut transformer ce safearray en liste AUTOLISP avec la fonction vlax-safearray->list

(vlax-safearray->list (vlax-variant-value (vla-getDynamicBlockProperties blk))) retourne une liste de vla-object.

 

Pour éviter ceci on peut parfois utiliser les fonctions vlax-get, vlax-put et vlax-invoke qui retournent des données directement exploitables avec AutoLISP, comme le fait l'expression :

(vlax-invoke blk 'getDynamicBlockProperties) qui retourne la même liste de vla-object.

 

De la même façon, pour avoir la valeur de la première proprièté de la liste, on peut faire soit :

(vlax-variant-value (vla-get-value (car prop-lst)))

soit

(vlax-get (car prop-lst) 'Value)

 

Pour changer la propriété :

 

(vla-put-Value (car prop-lst) (vlax-make-variant "1/100" vlax-vbString))

ou

(vlax-put (car prop-lst) 'Value "1/100")

 

Attention toutefois, pour que ça fonctionne, la valeur entrée doit faire parti des valeurs autorisées dans le paramètre de visibilité.

On obtient cette liste en faisant :

(mapcar 'vlax-variant-value (vlax-safearray->list (vlax-variant-value (vla-get-AllowedValues (car prop-lst)))))

ou, plus simplement :

(vlax-get (car prop-lst) 'AllowedValues)

 

Je vous laisse digérer tout ça, vous devriez avoir les moyens de finir votre routine, maintenant.

 

[Edité le 18/7/2008 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à toutes et tous,

 

Si ça te pose problème, fais moi le savoir, je supprimerais ce message.

 

Il est clair que c'est cet esprit qui me plait sur ce site et tu as bien fait! :P

 

Nous allons essayer de "digérer" tout ça dans le Week-End et il est clair que nous te remercions déjà pour ta précieuse aide.

 

Pas de connexion possible pour moi ce WE donc, je donnerai des nouvelles sur notre travail dés Lundi,..

 

Merci encore (gile)

 

Bon WE à tous,

Civil 3D 2025 - COVADIS_18.3a

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à toutes et tous,

 

Super !!!!, après plusieurs centaines de test (je rigole mais on en est pas loin !!!), nous avons pu concrétiser sur un BD simple ce que nous cherchions à faire. Nous allons maintenant nous "attaquer" à un bloc beaucoup plus complexe...

 

Je donnerai alors suite aux recherches.

 

Merci encore (gile) pour tes précieux conseils . :P

Civil 3D 2025 - COVADIS_18.3a

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

  • 2 ans après...

Bonjour Gile,

J’ai un problème avec ton lisp Spécial sélection : SSD

Je voudrais l’utiliser sur des blocs dynamique (+paramétrique) pour filtrer et modifier un paramètre identique à plusieurs blocs. Je suis sur Autocad 2011.

Je lance le lisp, sélectionne un bloc, et la fenêtre de filtre s’ouvre avec mon nom de bloc et tous les paramètres de mon bloc. (Il n’y a pas de valeur dans les cases, c’est normal ?)

Sinon dans une des cases, je rentre une valeur de filtre, fait OK, mais aucune sélection sur l’écran ?

Fausse manipe ?

 

Lien vers le commentaire
Partager sur d’autres sites

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant



×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité