Aller au contenu

copier données du jeu de propriété


PHILPHIL

Messages recommandés

bonjour

 

grace aux Lispeurs de CADXP (ils reconnaitront leur code )

j'avais modifié un lisp ( ci dessous ) qui me permettait de copier les attributs et / ou les propriétés dynamique d'un bloc vers un autre bloc

 

je travaille avec autocad architecture, et les objets AEC "space" surtout

 

j'aimerai faire la meme chose mais pour les données d'un jeu de propriétés d'objet aec.

en modifiant mon lisp ( ci dessous )

 

ces données doivent etre dans un dictionnaire je suppose.

 

comment y acceder en lisp ?

avoir la liste des données liées a un objet AEC? ( vla ??? ou get??? )

comment remplacer la donnée ensuite ?

 

si ca marche pour un objet AEC "space" ca devrait aussi etre utile pour les autres objets AEC ( architecture, MEP, ... )

 

merci

 

a+

 

Phil

 

 

 

(defun c:mdpa (/)
 (setvar "cmdecho" 0)
 (setvar "CURSORSIZE" 10)
 (setq osm (getvar "osmode"))
 (if (and (setq source (car (entsel "\nCLIQUER SUR LE BLOC DE REFERENCE : ")))
          (setq source (vlax-ename->vla-object source))
          (= (vla-get-objectname source) "AcDbBlockReference")
     )
   (progn (setq layerbloc (vla-get-layer source)
                namebloc  (vla-get-effectivename source)
          )
   )
 )
 (setq compt 0
       propdynnom nil
       propdynnom2 nil
       propdynnom3 nil
       attributnom nil
       attributnom2 nil
       attributnom3 nil
 )
 (foreach att (vlax-invoke source 'getdynamicblockproperties)
   (if (/= (vlax-variant-type (vla-get-value att)) 8197)
     (setq propdynnom2 (cons (cons (vla-get-propertyname att) (vlax-variant-value (vla-get-value att))) propdynnom2))
   )
 )
 (setq propdynnom (vl-sort propdynnom2 (function (lambda (p1 p2) (< (car p1) (car p2))))))
 (foreach att (vlax-invoke source 'getattributes)
   (setq attributnom2 (cons (cons (vla-get-tagstring att) (vla-get-textstring att)) attributnom2))
 )
 (setq attributnom (vl-sort attributnom2 (function (lambda (p1 p2) (< (car p1) (car p2))))))
 (prompt "\nSELECTIONNER LES BLOCS A MODIFIER:")
 (setq selinsert (ssget (list (cons 0 "INSERT") (cons 8 layerbloc))))
 (setq com (sslength selinsert))
 (boitepropdynattribut)
 (foreach att (vlax-invoke source 'getdynamicblockproperties)
   (progn (if (member (vla-get-propertyname att) listeparam)
            (setq propdynnom3 (cons (cons (vla-get-propertyname att) (vla-get-value att)) propdynnom3))
          )
   )
 )
 (foreach att (vlax-invoke source 'getattributes)
   (progn
     (if (member (vla-get-tagstring att) listeattrib)
       (setq attributnom3 (cons (cons (vla-get-tagstring att) (vla-get-textstring att)) attributnom3))
     )
   )
 )
 (setvar "CURSORSIZE" 100)
 (setq compt 0)
;;;  (acet-ui-progress-init "Avancement" com)
 (while (< compt com)
   (if (= (vla-get-effectivename (vlax-ename->vla-object (cdr (assoc -1 (entget (ssname selinsert compt))))))
          namebloc
       )
     (progn (foreach bidyn propdynnom3
              (progn (setq nomprop (car bidyn)
                           valprop (cdr bidyn)
                     )
                     (foreach prop (vlax-invoke (vlax-ename->vla-object (cdr (assoc -1 (entget (ssname selinsert compt)))))
                                                'getdynamicblockproperties
                                   )
                       (if (= (vla-get-propertyname prop) nomprop)
                         (vla-put-value prop valprop)
                       )
                     )
              )
            )
            (foreach bidyn attributnom3
              (progn (setq nomattrib (car bidyn)
                           valattrib (cdr bidyn)
                     )
                     (foreach prop (vlax-invoke (vlax-ename->vla-object (cdr (assoc -1 (entget (ssname selinsert compt)))))
                                                'getattributes
                                   )
                       (if (= (vla-get-tagstring prop) nomattrib)
                         (vla-put-textstring prop valattrib)
                       )
                     )
              )
            )
     )
   )
   (acet-ui-progress-init (strcat "Avancement " (rtos (/ (* compt 100) (float com )) 2 2 ) " %") com)
   (acet-ui-progress-safe compt)
   (setq compt (1+ compt))
 )
 (acet-ui-progress-done)
 (setvar "osmode" osm)
 (princ)
)

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

Hello Phil

 

Je suppose que tu es l'auteur de CE sujet :

http://forums.autodesk.com/t5/autocad-francais/recuperer-et-modifier-les-donnees-d-un-jeu-de-propriete-d-une/m-p/6643771/highlight/false#M47653

 

SVP il serait SYMPA de signaler les liens croises dans le cas d'un Multi-Post !

 

Merci, Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

hello lecrabe

 

 

oui je suis l'auteur de l'autre sujet mais j'y vais rarement sur le forum autodesk

j'ai pas fait le lien entre les deux forums désolé

 

bon je vais laisser tomber mon idée de manipuler les données d'un jeu de propriété.je suis pas tres doué en visual lisp et j'y connais rien en dotnet.

 

j'ai bien vue qu'il y avait des fonctions "ARX" "aec....." dans autocad

mais comment passer du résultats de ses fonction a du lisp ??

 

merci

 

Phil

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

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é