PHILPHIL Posté(e) le 23 septembre 2008 Posté(e) le 23 septembre 2008 Bonjour je voudrais pouvoir en Vl-lisp récuperer toutes les données personnaliséesd'un bloc parametrique préalablement inserer dans un fichierpour les réinjecter dans un autre bloc que j'insers comment savoir ou sont planques les infos ( données personnalisées) ??? MR AUTODESK est ce que l'on pourrait avoir une arborescence pour les données VLpour que ce soit plus lisibles que ca et avoir tous en UNE seule fois ou Mme DESk : ok je vois l'image est trop grande sinon on vois rienje l'effacerais plus tard ok bonne journée phil [Edité le 24/9/2008 par PHILPHIL] FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
(gile) Posté(e) le 24 septembre 2008 Posté(e) le 24 septembre 2008 Salut, Je ne suis pas sûr d'avoir compris exactement la demande, si tu veux copier les propriétés dynamiques pour les attribuer à un un bloc lors de son insertion, autant copier le bloc, non ? Ceci dit, voici un LISP (commenté) dont tu peux t'inspirer.Il copie les propriétés dynamique d'un bloc source vers les blocs sélectionné (un peu comme la commande CORRESPROP ou MATCHPROP). ;;; MatchDynProp (gile) ;;; Copie les propriétés dynamiques d'un bloc source vers les blocs sélectionnés (defun c:MatchDynProp (/ source name dynprop dynval target) (vl-load-com) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))) ) (if ;; on sélectionne le bloc source et on contrôle sa validité (bloc dynamique) (and (setq source (car (entsel "\nSélectionnez le bloc source: "))) (setq source (vlax-ename->vla-object source)) (= (vla-get-ObjectName source) "AcDbBlockReference") (= (vla-get-IsDynamicBlock source) :vlax-true) (setq name (vla-get-EffectiveName source)) ) ;; on sélectionne les blocs cible (if (ssget (list '(0 . "INSERT") (cons 2 (strcat name ",`*U*")))) (progn (vla-StartUndoMark *acdoc*) ;; on récupère la liste des propriétés dynamiques du bloc source (vla-objects) (setq dynprop (vlax-invoke source 'GetDynamicBlockProperties)) ;; on récupère la valeur de chaque propriété dynamique (setq dynval (mapcar (function (lambda (p) (vla-get-Value p))) dynprop ) ) ;; on traite le jeu de sélection (vlax-for b (setq target (vla-get-ActiveSelectionSet *acdoc*)) ;; contrôle du nom de bloc (blocs anonymes non filtrés) (if (= (vla-get-Effectivename b) name) ;; on attribue les valeurs des propriétés dynamiques du bloc source ;; aux propriétés des blocs cible (sauf pour les propriétés "Origin") (mapcar (function (lambda (p v) (or (= (vla-get-PropertyName p) "Origin") (vla-put-Value p v) ) ) ) (vlax-invoke b 'GetDynamicBlockProperties) dynval ) ) ) (vla-delete target) (vla-EndUndoMark *acdoc*) ) ) (princ "\nEntité non valide") ) (princ) ) [Edité le 24/9/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
zebulon_ Posté(e) le 24 septembre 2008 Posté(e) le 24 septembre 2008 Bonjour, Pour moi, le plus difficile avec les blocs dynamiques était de trouver la commande(vla-getdynamicblockproperties source) ou (vlax-invoke source 'GetDynamicBlockProperties)qui nous ouvrent la porte sur les données qui correspondent aux paramètres dynamiques d'un bloc. C'est vrai que ce n'est pas beaucoup expliqué dans l'aide et il m'a fallu un peu de temps pour trouver.Pour mémoire, voilà ce qu'on trouve dans l'aide GetDynamicBlockProperties Method Gets the properties of the dynamic block. Signature object.GetDynamicBlockProperties object BlockRef, MInsertBlockThe object or objects this method applies to. Remarks BlockRef.GetDynamicBlockProperties returns a collection of DynamicBlockReferenceProperty objects if the block reference is a dynamic block containing custom properties. Note To access this method, use the IAcadBlockReference2 or IAcadMInsertBlock2 interface. On en avait parlé ici AmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
(gile) Posté(e) le 24 septembre 2008 Posté(e) le 24 septembre 2008 Re, L'avntage de de (vlax-invoke source 'GetDynamicBlockProperties) sur (vla-GetDynamicBlockProperties source) est que le premier retourne une liste AutoLISP directement exploitable, le second un variant contenant un safearray. Voir ce sujet. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
zebulon_ Posté(e) le 24 septembre 2008 Posté(e) le 24 septembre 2008 ReRe, http://web.univ-pau.fr/~puiseux/enseignement/Recreation/img014.jpeg AmicalementLe Shadock C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
PHILPHIL Posté(e) le 24 septembre 2008 Auteur Posté(e) le 24 septembre 2008 hello pourquoi faire simple quand on peut faire compliqué ?? soit cette réponse s'adresse a AUTODESK ? la désolé je ne peux pas répondre a sa place soit elle est pour moi , la je peux répondre je m'explique je dessine des logements avec , des portes ( avec texte de largeur ), amenagement de placard, amenagement de SdB et cuisine plein de petits blocs qui font un beau plan d'archi ( j'entend déja dire les bureaux d'étude béton dire que ca sert a rien si les murs ne sont pas bien déssinés ) détrompez vous 18cm de béton font bien 180mm déssiné parfois il arrive qu'il y est des symetriquedonc les bloc se retrouvent a etre a échelle x=-1, y=1, z=1 et ca je deteste comme bcp d'autre je pense passe par la mon petit LISP qui en cliquant sur le(s) dit bloc(s) incriminé(s) à la volée remet au meme endroit un nouveau bloc x=1,y=1,z=1 et ainsi les textes des portes se retrouve dans le bon sens de lecture , ce qui me prend 1minutes par appartement plutot que 10 minutes multiplier par le nb d'apparte et le fait que ce devienne Ch... ca parrait compliquer mais tres simple d'utilisation en gros mon lisp recupere le nom du BLOC et le rappelle, le réinsert au meme point et le tourne à 180degres ( un bloc pour gauche, un bloc pour droit ) ca marche tres bien pour les blocs simples ca se complique pour les paramétriques pour retrouver les données je vais tester/ fouiller/ aprivoiser ce que vous m'avez donner GILLES et ZEBULON, je vous en remercie phil FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
zebulon_ Posté(e) le 25 septembre 2008 Posté(e) le 25 septembre 2008 Bonjour, soit cette réponse s'adresse a AUTODESK ? la désolé je ne peux pas répondre a sa placesoit elle est pour moi , la je peux répondre Je ne me serais pas permis d'adresser cette réponse ni à Autodesk ni à toi. En fait, la réponse s'adressait à moi, puisque dans mon exemple, j'utilise vla--GetDynamicBlockProperties qui renvoie variant qu'il faut encore transformer en liste pour l'exploiter avec lisp, alors que (Gile) utilise (vlax-invoke source 'GetDynamicBlockProperties) qui renvoie directement une liste. Désolé pour le malentendu AmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
PHILPHIL Posté(e) le 25 septembre 2008 Auteur Posté(e) le 25 septembre 2008 hello zebulon t'inquiete pas y'a pas de souci :) je n'y vois rien de grave a+ :D phil FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
Oli553 Posté(e) le 26 septembre 2008 Posté(e) le 26 septembre 2008 parfois il arrive qu'il y est des symétriquedonc les bloc se retrouvent a être a échelle x=-1, y=1, z=1 et ça je déteste comme bcp d'autre je pense Tout à fait, faisant des plans d'implantation électrique, il m'arrive, comme en ce moment, d'avoir des logements (110... :P ) symétriques d'où des blocs inversé comme toi. Et le client aime bien avoir les hauteurs ou les désignations à l'endroit :) . Et je pense que nous ne sommes pas seul et que ce genre de lisp va en intéresser beaucoup. Bon courage Olivier L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai. "Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok. "ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana Ma bibliothèque de blocs électrique :symbole elec.dwg
PHILPHIL Posté(e) le 26 septembre 2008 Auteur Posté(e) le 26 septembre 2008 hello vue que je pensais etre le seul ok voila le LISP ( merci gille pour les premiere partie du lisp ) il faut le relancer pour chaque bloc, mais le pouce sur" barre espace" ou le doigt sur "bouton droit" ca va tres vite quand j'aurais decortique ce que gille m'a envoyerje ferais la mise a jour pour les blocs parametriques, et aussi pour d'abord tout selectionner et que ensuite le LISP fasse la manip par contre tu dois avoir deux blocs un pour gauche et un pour droit, apres tu peux aussi avoir des blocs parametrique avec dedans un parametre d'inversion au point de base phil ;; GETATT ;; Retourne une liste d'association des attribut du bloc ;; ;; Argument ;; bl : la référence de bloc (ename ou vla-object) ;; ;; Retour ;; une liste d'association du type : ((etiquette . valeur) ...) (defun GETATT (BL) (vl-load-com) (or (= (type BL) 'VLA-OBJECT) (setq BL (vlax-ename->vla-object BL)) ) (if (and (= (vla-get-objectname BL) "AcDbBlockReference") (= (vla-get-hasattributes BL) :vlax-true) ) (mapcar (function (lambda (X) (cons (vla-get-tagstring X) (vla-get-textstring X)) ) ) (vlax-invoke BL 'GETATTRIBUTES) ) ) ) ;; PUTATT ;; Donne les valeurs de la liste aux attributs du bloc ;; ;; Arguments ;; bl : la référence de bloc (ename ou vla-object) ;; lst : une liste d'association du type : ((etiquette . valeur) ...) ;; ;; Retour ;; une liste d'association du type des attributs traités (defun PUTATT (BL LST / ATT RET) (vl-load-com) (or (= (type BL) 'VLA-OBJECT) (setq BL (vlax-ename->vla-object BL)) ) (if (and (= (vla-get-objectname BL) "AcDbBlockReference") (= (vla-get-hasattributes BL) :vlax-true) ) (mapcar (function (lambda (X) (if (setq ATT (assoc (vla-get-tagstring X) LST)) (progn (vla-put-textstring X (cdr ATT)) (setq RET (cons ATT RET)) ) ) ) ) (vlax-invoke BL 'GETATTRIBUTES) ) ) RET ) (defun C: DG (/ LST ;;; / P1 LST ANGLES ECHLX ;;; NOMENTS NOMENTC ) (setq SOURCE (car (entsel "\nBloc source: "))) (command "scu" "") (setq LST (GETATT SOURCE)) (setq P1 (cdr (assoc 10 (entget SOURCE))) NOMENTS (vla-get-effectivename (vlax-ename->vla-object SOURCE)) CALQ (cdr (assoc 8 (entget SOURCE))) ANGLES (cdr (assoc 50 (entget SOURCE))) ECHLX (cdr (assoc 41 (entget SOURCE))) ) (setq CAV (getvar "clayer")) (command "-calque" "ch" CALQ "") ;;bloc de base créer symetriquement par rapport a l'axe Y (if (= NOMENTS "COTNIVD") (setq NOMENTC "c:/PERSO/bibliotheque/SYMBOLE/COTNIVG" ANGLEC (angtos ANGLES 0 8) ) ) (if (= NOMENTS "COTNIVG") (setq NOMENTC "c:/PERSO/bibliotheque/SYMBOLE/COTNIVD" ANGLEC (angtos [surligneur] ANGLES[/surligneur] 0 8) ) ) ;;fin bloc de base créer symetriquement par rapport a l'axe Y ;;porte 90 ;;bloc de base créer symetriquement par rapport a l'axe X (if (= NOMENTS " [surligneur] P90D 50 50[/surligneur]") (setq NOMENTC " [surligneur] c:/PERSO/bibliotheque/MENINT/DESSUS/P90G 50 50[/surligneur]" ANGLEC (angtos (- ANGLES pi) 0 8) ) ) (if (= NOMENTS [surligneur]"P90G 50 50[/surligneur]") (setq NOMENTC " [surligneur] c:/PERSO/bibliotheque/MENINT/DESSUS/P90D 50 50[/surligneur]" ANGLEC (angtos [surligneur] (- ANGLES pi)[/surligneur] 0 8) ) ) ;;fin porte 90 (command "INSERER" NOMENTC P1 (abs ECHLX) "" ANGLEC) (setq CIBLE (entlast)) (PUTATT CIBLE LST) (command "effacer" SOURCE "") (command "scu" "P") (setvar "clayer" CAV) (princ) ) [Edité le 26/9/2008 par PHILPHIL] [Edité le 26/9/2008 par PHILPHIL] FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
Oli553 Posté(e) le 29 septembre 2008 Posté(e) le 29 septembre 2008 :D Merci beaucoupJe test dés que j'ai 5 minute ( ou plutôt dés que le client m'auras envoyer les fonds de plans à jours) L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai. "Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok. "ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana Ma bibliothèque de blocs électrique :symbole elec.dwg
Oli553 Posté(e) le 20 octobre 2008 Posté(e) le 20 octobre 2008 Il y a une erreur de syntaxe avec : (defun C: DG (/LST;;; / P1 LST ANGLES ECHLX;;; NOMENTS NOMENTC... Et de manière plus générale, le lisp ce charge bien mais quand je tape GETATT, il me met commande inconnue :?: L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai. "Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok. "ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana Ma bibliothèque de blocs électrique :symbole elec.dwg
(gile) Posté(e) le 20 octobre 2008 Posté(e) le 20 octobre 2008 Salut Oli553, Et de manière plus générale, le lisp ce charge bien mais quand je tape GETATT, il me met commande inconnue :?: GETATT (comme PUTATT) sont des "sous-routines", c'est à dire des fonctions LISP définies par l'utilisateur qui s'utilisent comme les fonctions LISP natives (prédéfinies).on reconnaît ces fonctions par leur nom qui ne commence pas par c: (defun getatt (bl) ...) Ces fonctions sont appelées par la commande définie en LISP DG qu'on reconnaît, elle, à son préfixe c:(defun C:DG ...) C'est donc DG qu'il faut entrer à la ligne de commande pour lancer la commande. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Oli553 Posté(e) le 20 octobre 2008 Posté(e) le 20 octobre 2008 oups, et en plus je le savait.......je suis impardonnable. :( Merci (gile) L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai. "Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok. "ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana Ma bibliothèque de blocs électrique :symbole elec.dwg
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