Arcasdk Posté(e) le 18 mars 2009 Posté(e) le 18 mars 2009 Bonjour, Pour pouvoir faire une petite routine avec les champs dynamiques, j'ai besoin de savoir comment on récupère de genre d'information.. %<\AcObjProp Object[b](%<\_ObjId 2120014704>%)[/b].TextString>% Merci bcp. [Edité le 18/3/2009 par Arcasdk] <IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG> <a href=www.formu-lan.net>www.FormuLan.net</a>
(gile) Posté(e) le 18 mars 2009 Posté(e) le 18 mars 2009 Salut, (vla-get-ObjectId (vlax-ename->vla-object (car (entsel)))) ou encore avec ces routines : ;; ENAME->OBJECTID ;; Retourne l'ObjectID correspondant à un ename ;; ;; Argument : un ename (defun ename->objectID (ename) ((lambda (str) (dec (vl-string-right-trim ">" (substr str (+ 3 (vl-string-search ":" str))) ) ) ) (vl-princ-to-string ename) ) ) ;; conversion hexadécimal -> décimal (patrick_35) (defun dec (n / r s) (if (= (type n) 'INT) (setq n (itoa n)) ) (setq r 0) (foreach s (vl-string->list (strcase n)) (setq r (+ (lsh r 4) (- s (if ( 48 55 ) ) ) ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Arcasdk Posté(e) le 19 mars 2009 Auteur Posté(e) le 19 mars 2009 Merci Gile Ben voilà mon code. Ça tourne mais il semblerait que le numéro objid ne soit pas le bon. Il me donne ça -> 1903203888 Alors qu'il me faut ça -> 1903203968 (defun c:coto (/ ent2 ename prop final) (vl-load-com) ;; conversion hexadécimal -> décimal (patrick_35) (defun dec (n / r s) (if (= (type n) 'INT) (setq n (itoa n)) ) (setq r 0) (foreach s (vl-string->list (strcase n)) (setq r (+ (lsh r 4)(- s (if (<= s 57) 48 55)))) ) ) ;; Argument : un ename (defun ename->objectID (ename) ((lambda (str) (dec (vl-string-right-trim ">" (substr str (+ 3 (vl-string-search ":" str))) ) ) ) (vl-princ-to-string ename) ) ) ;SELECTION DU PERMIER ATTRIBUT (setq ename (vla-get-ObjectId (vlax-ename->vla-object (car (entsel))))) (setq ename (rtos ename)) ;SELECTION DU DEUXIEME ATTRIBUT (while (not (setq ent2 (nentsel "\nEt automatiser lequel ??")))) ;SUBSTITUTION (setq final (strcat "%<\\AcObjProp Object(%<\\_ObjId " ename ">%).TextString>%")) (setq paire (cons 1 final)) (setq ent2 (car ent2)) (setq prop (entget ent2)) (setq ent2 (subst paire (assoc 1 prop) prop)) (entmod ent2) ) ;%<\AcObjProp Object(%<\_ObjId 1903203968>%).textstring>% <IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG> <a href=www.formu-lan.net>www.FormuLan.net</a>
(gile) Posté(e) le 19 mars 2009 Posté(e) le 19 mars 2009 Salut, Plusieurs choses, - si tu utilises vla-get-ObjectId, tu n'a pas besoin des fonctions dec et Ename->ObjectId - quand tu fais (setq ename (vla-get-ObjectId (vlax-ename->vla-object (car (entsel))))) sur un attribut, tu récupères l'id du bloc, pas de l'attribut. Il faut utiliser nentsel. - quand tu fais (setq ename (rtos ename)) tu convertit un entier en une chaîne qui représente un réel. Il faut utiliser itoa. - à la fin, la variable ent2 contient un ENAME et la variable prop la liste DXF. C'est sur cette dernière qu'il faudrait faire le subst et le entmod. Mais puisque tu as commencé en vlisp avec vla-get-ObjectName, pourquoi ne pas continuer pour modifier l'autre attribut ? (while (not (setq ent2 (car (nentsel "\nEt automatiser lequel ??"))))) (setq ent2 (vlax-ename->vla-object ent2)) (vla-put-TextString ent2 final) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Arcasdk Posté(e) le 25 mars 2009 Auteur Posté(e) le 25 mars 2009 Merci (Gile) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; Substituer deux valeurs d'attributs ; ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun c:coto (/ ent ename objid) (vl-load-com) ;SELECTION DU PERMIER ATTRIBUT (setq ename (vla-get-ObjectId (vlax-ename->vla-object (car (nentsel))))) (setq ename (itoa ename)) ;SELECTION DU DEUXIEME ATTRIBUT (while (not (setq ent (car (nentsel "\nEt automatiser lequel ??"))))) (setq ent (vlax-ename->vla-object ent)) ;SUBSTITUTION (setq objid (strcat "%<\\AcObjProp Object(%<\\_ObjId " ename ">%).TextString>%")) (setq paire (cons 1 objid)) (vla-put-TextString ent objid) (command "regen") ) <IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG> <a href=www.formu-lan.net>www.FormuLan.net</a>
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