PHILPHIL Posté(e) le 9 novembre 2007 Posté(e) le 9 novembre 2007 bonjour sujet surement deja evoqué ici mais OU ?? mystere je voudrais récuperer toutes les valeurs des attributs d'un bloc( ils seront surement récuper dans une liste et tjrs rangés dans le meme ordres , je ferais le tri ) pour les réinjecter dans un autre bloc meme nom d'attributs voir pour inserer un nouveau bloc avec les valeurs d'attributs recuperer car probleme d'orientation des texte avec les symetries et bloc parametriques merci phil FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
(gile) Posté(e) le 9 novembre 2007 Posté(e) le 9 novembre 2007 Salut, Deux petites routines :- getAtt pour récupérer les attributs d'un bloc, pas besoin de se soucier de l'ordre, la liste retournée est une liste d'association du type :((etiquette1 . valeur1) (etiquette2 . valeur2) ...)- putAtt pour donner ou changer leurs valeurs aux attributs d'un bloc, utilise aussi une liste d'association. ;; 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 ) Un exemple pour tester : (defun c:test (/ lst) (and (setq source (car (entsel "\nBloc source: "))) (setq lst (getatt source)) (setq cible (car (entsel "\nBloc cible: "))) (putatt cible lst) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 9 novembre 2007 Posté(e) le 9 novembre 2007 Salut Pour aller à l'essentiel (setq bl (vlax-ename->vla-object (car (entsel)))) ; choix du bloc (mapcar 'vla-get-textstring (vlax-invoke bl 'getattributes)) ; valeur des attributs @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
PHILPHIL Posté(e) le 9 novembre 2007 Auteur Posté(e) le 9 novembre 2007 merci beaucoup pour les LISP il me reste juste a les comprendre mais ca marche d'enfermanipuler les deux lisp pour en faire un autre selection du bloc1recuperations des attributs bloc1point dinsertion bloc1 insetion bloc2 au meme point que bloc1suppression bloc1 remplacement des atributs de bloc2 par la liste de attributs bloc1 ni vu ni connu on ne clique que une fois ha si souci les blocs on un fonction de visibilite car blocs parametrique vla-get-textstring ou trouve t'on l'aide pour cette fonction ???elle n'est pas dans "ACAD_ALR.CHM si je comprend bien il y un "vla-get... " et un vla-put" pour chaque sous entite "vla-get-layer" ...... oui ? voir fichier aide ok j'irais voir PHIL [surligneur] SELECTIONNER UNE ENTITE POUR INFO1.; IAcadLine: Interface AutoCAD Line; Valeurs de propriétés:; Angle (RO) = 0.0; Application (RO) = #; Delta (RO) = (100.0 0.0 0.0); Document (RO) = #; EndPoint = (50.0 0.0 0.0); Handle (RO) = "11D8F"; HasExtensionDictionary (RO) = 0; Hyperlinks (RO) = #; Layer = "C_AXES"; Length (RO) = 100.0; Linetype = "ByLayer"; LinetypeScale = 1.0; Lineweight = -1; Material = "ByLayer"; Normal = (0.0 0.0 1.0); ObjectID (RO) = 2126492024; ObjectName (RO) = "AcDbLine"; OwnerID (RO) = 2126491688; PlotStyleName = "ByLayer"; StartPoint = (-50.0 0.0 0.0); Thickness = 0.0; TrueColor = #type d'argument incorrect: VLA-OBJECT nilColor 20319680>; Visible = -1[/surligneur] FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
(gile) Posté(e) le 9 novembre 2007 Posté(e) le 9 novembre 2007 vla-get-textstring ou trouve t'on l'aide pour cette fonction ??? Les fonctions vla-* sont des transpositions des méthodes et propriétés utilisées en VBA. Elle sont renseignées dans l'aide aux développeurs > ActiveX and VBA Reference.Mais on y accède directement depuis l'éditeur Visual LISP par le bouton [?] soit après avoir sélectionné la fonction dans la routine soit en entrant son nom dans la petite boite de dialogue. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 9 novembre 2007 Posté(e) le 9 novembre 2007 Salut Tu souhaites remplacer un bloc pas un autre tout en conservant les propriètées du premier ainsi que la valeur des attributs ?Dans ce cas, utilise Rbloc @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
PHILPHIL Posté(e) le 9 novembre 2007 Auteur Posté(e) le 9 novembre 2007 SALUT patrick je viens de tester ton lisp RBLOC pas mal si on reste tjrs dans le meme scu mon souci est que je fais des miroir des blocs possedant des attributsaussi bien miroir par rapport a l'axe X que Y donc je me retrouve avec des blocsechx = 1, echy =1et d'autre x=-1 , y=1 je voudrais tout remettre x=1, y=1 j'ai essayer avec MIRRTEXT = 0 ou = 1 les attributs sont soit tournés soit refltés et ne sont donc plus lisible en tournant le scu le but serait non pas de remplacer l'atome N°2 ( nom du bloc) du bloc par un nouveau nom d'atome mais bien de replacer un nouveau bloc tourner convenablement par rapport au scu choisi a l'origine de l'ancien bloc récuperer les attributs et les réinjecter dans le nouveau pour etre sur que les textes soit lisible pas sur que j'ai été comprehensible la je peux envoyer un fichier pour etre plus clair phil FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
(gile) Posté(e) le 10 novembre 2007 Posté(e) le 10 novembre 2007 pas sur que j'ai été comprehensible la Pas vraiment, non. Je te propose quelque chose, peut-être y verra-t-on plus clair après tes essais. Ce LISP appelle les deux petites routines (getAtt et PutAtt) données plus haut, elles doivent donc être chargées.De plus si getblock est chargé, le choix du bloc (pour le filtre de sélection) se fait par boite de dialogue, sinon il faut entrer son nom à la ligne de commande. (defun c:b2b (/ name) (vl-load-com) (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)) space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace acdoc) (vla-get-ModelSpace acdoc) ) ) (if (member (type getblock) '(SUBR USUBR)) (setq name (getblock nil)) (while (not (and (setq name (getstring "\nEntrez le nom du bloc: ")) (tblsearch "BLOCK" name) ) ) (princ (strcat "\nLe bloc \"" name "\" est introuvable.")) ) ) (princ "\nSélectionnez les blocs (ou Entré, Espace ou clic droit pour Tous)." ) (if (or (ssget (list '(0 . "INSERT") (cons 2 name))) (ssget "_X" (list '(0 . "INSERT") (cons 2 name))) ) (progn (vla-StartUndoMark acdoc) (vlax-for b (vla-get-ActiveSelectionSet acdoc) (setq att (getAtt b)) (setq new (vla-InsertBlock space (vla-get-InsertionPoint b) name 1.0 1.0 1.0 0.0 ) ) (vla-delete b) (putAtt new att) ) (vla-EndUndoMark acdoc) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
PHILPHIL Posté(e) le 10 novembre 2007 Auteur Posté(e) le 10 novembre 2007 salut gile merci pour le lispj'ai charge "getblock" aussi ca ne marche pas je peux t'envoyer un fichier ca sera nettement plus clair phil FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
(gile) Posté(e) le 10 novembre 2007 Posté(e) le 10 novembre 2007 ca ne marche pas Qu'estce qui ne marche pas ? je peux t'envoyer un fichier ca sera nettement plus clair Je crains que le fichier ne me dise pas ce que tu veux faire, mais si tu veux : gilecantel(a)wanadoo.fr Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 10 novembre 2007 Posté(e) le 10 novembre 2007 Salut (gile) Je pense que PHILPHIL à des blocs avec un facteur d'échellle de 1, et d'autres, un facteur d'échelle de -1 à cause des miroirs. Du coup, l'affichage des attributs liés aux blocs sont à l'envers. Il souhaiterait, si j'ai bien compris, que tout soit à l'endroit, donc de mettre un facteur d'échelle positif à ses blocs. Je me demande si ton lisp edit_bloc avec son facteur d'échelle le permet ? @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 10 novembre 2007 Posté(e) le 10 novembre 2007 Je me demande si ton lisp edit_bloc avec son facteur d'échelle le permet ? Je ne pense pas, Edit_bloc agit sur les définitions de blocs, le facteur d'echelle permet de modifier l'échelle globale de toutes les entités composant le boc. S'il s'agit juste de rendre positifs les facteurs d'échelle : (defun c:b2b (/ name) (vl-load-com) (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)) space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace acdoc) (vla-get-ModelSpace acdoc) ) ) (if (member (type getblock) '(SUBR USUBR)) (setq name (getblock nil)) (while (not (and (setq name (getstring "\nEntrez le nom du bloc: ")) (tblsearch "BLOCK" name) ) ) (princ (strcat "\nLe bloc \"" name "\" est introuvable.")) ) ) (princ "\nSélectionnez les blocs (ou Entré, Espace ou clic droit pour Tous)." ) (if (or (ssget (list '(0 . "INSERT") (cons 2 name))) (ssget "_X" (list '(0 . "INSERT") (cons 2 name))) ) (progn (vla-StartUndoMark acdoc) (vlax-for b (vla-get-ActiveSelectionSet acdoc) (cond ((minusp (setq xsc (vla-get-XScaleFactor b))) (vla-put-XScaleFactor b (* -1 xsc)) ) ((minusp (setq ysc (vla-get-YScaleFactor b))) (vla-put-YScaleFactor b (* -1 ysc)) ) ((minusp (setq zsc (vla-get-ZScaleFactor b))) (vla-put-ZScaleFactor b (* -1 zsc)) ) ) ) (vla-EndUndoMark acdoc) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 12 novembre 2007 Posté(e) le 12 novembre 2007 Salut, Il aurait été plus simple que tu demandes tout de suite de remplacer les blocs "cotnivD" par des nlocs "cotnivG" avec les mêmes valeurs d'attibuts et une rotation de 180°. Les routines getAtt et PutAtt doivent être chargés (defun c:d2g (/ name) (vl-load-com) (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)) space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace acdoc) (vla-get-ModelSpace acdoc) ) ) (princ "\nSélectionnez les blocs (ou Entré, Espace ou clic droit pour Tous)." ) (if (or (ssget '((0 . "INSERT") (2 . "cotnivD"))) (ssget "_X" (list '(0 . "INSERT"))) ) (progn (vla-StartUndoMark acdoc) (vlax-for b (vla-get-ActiveSelectionSet acdoc) (setq att (getAtt b)) (setq new (vla-InsertBlock space (vla-get-InsertionPoint b) "cotnivG" 1.0 1.0 1.0 0.0 ) ) (vla-delete b) (putAtt new att) (vla-put-rotation new pi) ) (vla-EndUndoMark acdoc) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
PHILPHIL Posté(e) le 12 novembre 2007 Auteur Posté(e) le 12 novembre 2007 SALUT GILE appareemnt ca ne devait pas etre plus simple de l'exprimer ainsi car ca ne marche pas les 3 attrubuts se retrouve sous la ligne d'axe dsl je trouve pas le moyen de mettre une image pour te montrer icije viens de te l'envoyer par mail mettre le nouveau bloc a 180 degre par raport au scu ne reglera pas le problemepour des blocs dont la symetrie a été faite par rapport a un autre axe non parrallele a X bonne soirée phil FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
PHILPHIL Posté(e) le 12 novembre 2007 Auteur Posté(e) le 12 novembre 2007 salut gile ne cherche plus j'ai trouvéc'est nettement moins pointu que les vlax vla vlx mais ca marche dans tous les sens et apres remaniment on doit surement pouvoir faire une boucle pour plusieurs bloc a la fois merci a toi pour les bouts de LISP phil (defun C:GAP2 (/ LST);;; (and (setq SOURCE (car (entsel "\nBloc source: "))) (command "scu" "") (setq LST (GETATT SOURCE)) (setq P1 (cdr (assoc 10 (entget SOURCE)))) (setq ANGLE1 (cdr (assoc 50 (entget SOURCE)))) (command "INSERER" "c:/program files/AA2008/PERSO/bibliotheque/SYMBOLE/ [surligneur] cotnivG[/surligneur]" P1 (rtos (/ (* 0.01 TXTECH) TECHL) 2 8) "" (angtos ANGLE1 0 8) ) (setq CIBLE (entlast)) (PUTATT CIBLE LST) (command "effacer" SOURCE) (princ)) ;; 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) FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
pascool Posté(e) le 13 avril 2008 Posté(e) le 13 avril 2008 ok je viens apres les reponses lips mais si il y en a qui cherche avec autres choses!c'est un petit script fait sur excel et pour moi c'est tellement plus simple open d:\0_CovBib_1000.Dwt -->nom du fichier où ce trouve les nouveaux blocs-INSERER EP1 948296.806,109775.801,1012.181 1 0Regard -->pas oublier le saut de ligneDFe.1001012,181Ø4001010,7651,416 -INSERER EP2 948333.667,109800.752,1013.207 1 0RegardDFe.1011013,207Ø4001010,4682,739Ø3001012,0821,125 dons si ton "gabarit" ou neo "dessin.dwg" qui comprend les nouveaux blocs est chargé au départ tu va tout faire automatiquement sur excel , faut pas oublier de le renommer en .scrle fichier ascii-inserer Nom de commandeep2 nom du bloc948***** x1******* y1013*** z1 echelle uniforme pour le cas de mon bloc ou tu peut avoir echx 1 et ech y 10 rotationregard & jusqu'a la fin ->remplissage attribut du bloc
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