Aller au contenu

Messages recommandés

Posté(e)

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>

Posté(e)

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

Posté(e)

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>

Posté(e)

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

Posté(e)

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>

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é