Aller au contenu

Sélectionne un texte par son Handle


Messages recommandés

Posté(e)

Bonsoir à tous,

 

J'arrive à modifier les attributs de blocs depuis Excel vers AutoCad, mais est-il possible de modifier des textes dans AutoCad de la même manière, c'est à dire en les sélectionnant par le Handle ?

 

Un p'tit bout de code VB serait le bien venu. ;)

 

Merci et bon week-end à tous.

Curt

 

Posté(e)
Bonsoir à tous,

 

J'arrive à modifier les attributs de blocs depuis Excel vers AutoCad, mais est-il possible de modifier des textes dans AutoCad de la même manière, c'est à dire en les sélectionnant par le Handle depuis Excel ?

 

Un p'tit bout de code VB serait le bien venu. ;)

 

Merci et bon week-end à tous.

Curt

Posté(e)

 

Hello

 

Je ne sais pas si cela poura t'aider, mais voici un programme (en Lisp/VLisp) developpe par notre "indispensable" Gilles suite a ma demande :

( Cette routine zoome sur les objets correspondants aux handles saisis par l'operateur )

 

Le Decapode

 

 


;;
;; ZH par GC
;; Sélectionne les objets présents dans l'espace courant d'après leurs "handle"
;;

(defun c:zh (/ space ss obj hlst olst kw i l)
(vl-load-com)
(or *acdoc*
(setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
)
(setq space (vla-get-Block (vla-get-ActiveLayout *acdoc*))
ss (ssadd)
)
(sssetfirst nil nil)
(initget 1)
(setq hlst
(getstring
"\nEntrez les handles à sélectionner séparés par des virgules: "
)
hlst (str2lst hlst ",")
)
(foreach h hlst
(if
(and
(not (vl-catch-all-error-p
(setq obj (vl-catch-all-apply
'vla-HandleToObject
(list *acdoc* h)
)
)
)
)
(equal (vla-ObjectIdToObject *acdoc* (vla-get-OwnerId obj))
space
)
)
(progn
(setq olst (cons obj olst))
(ssadd (vlax-vla-object->ename obj) ss)
)
)
)
(if ss
(progn
(sssetfirst nil nil)
(sssetfirst nil ss)
(setq i -1
l (length olst)
)
(while
(and
(not (initget "Suivant Précédent Tous"))
(or (setq
kw (getkword "Zoom sur [suivant/Précédent/Tous] : ")
)
(setq kw "Suivant")
)
)
(if (= kw "Suivant")
(setq i (rem (1+ i) l))
(setq i (if (minusp (1- i))
(1- l)
(1- i)
)
)
)
(if (= kw "Tous")
(ZoomObject olst)
(ZoomObject (list (nth i olst)))
)
)
)
)
(princ)
)

;; ZoomObject Effectue un zoom sur les objets contenus dans la liste
;;
;; Argument
;; objlst : une liste de vla-object
;;
;; Variables
;; dir : normale du plan de la vue courante
;; ang : angle de la vue courante
;; 3x3 : matrice de transformation du SCG vers la vue courante (dimension 3)
;; 4x4 : matrice de transformation du SCG vers la vue courante (dimension 4)
;; ptlst : liste des points minimum et maximum des bounding-boxes des objets sélectionnés (SCG)

(defun ZoomObject (objlst / dir ang 3x3 4x4 ptlst)
(vl-load-com)
(setq dir (trans '(0 0 1) 2 0 T)
ang (- (getvar "viewtwist"))
3x3 (mxm (mapcar '(lambda (x) (trans x 0 dir))
'((1 0 0) (0 1 0) (0 0 1))
)
(list (list (cos ang) (- (sin ang)) 0)
(list (sin ang) (cos ang) 0)
'(0 0 1)
)
)
4x4 (append
(mapcar
'(lambda (v o)
(append v (list o))
)
3x3
'(0 0 0)
)
(list '(0 0 0 1))
)
)
(foreach obj objlst
(vla-TransformBy obj (vlax-tmatrix (trp 4x4)))
(vla-getBoundingBox obj 'minpt 'maxpt)
(vla-TransformBy obj (vlax-tmatrix 4x4))
(setq ptlst (cons (vlax-safearray->list minpt)
(cons (vlax-safearray->list maxpt) ptlst)
)
)
)
(vla-ZoomWindow
(vlax-get-acad-object)
(vlax-3d-point (mxv 3x3 (apply 'mapcar (cons 'min ptlst))))
(vlax-3d-point (mxv 3x3 (apply 'mapcar (cons 'max ptlst))))
)
)

;; str2lst
;; Transforme un chaine avec séparateur en liste de chaines
;;
;; Arguments
;; str : la chaine à transformer en liste
;; sep : le séparateur

(defun str2lst (str sep / pos)
(if (setq pos (vl-string-search sep str))
(cons (substr str 1 pos)
(str2lst (substr str (+ (strlen sep) pos 1)) sep)
)
(list str)
)
) 



;; transpose une matrice Doug Wilson

(defun trp (m)
(apply 'mapcar (cons 'list m))
)

;; Apply a transformation matrix to a vector by Vladimir Nesterovsky

(defun mxv (m v)
(mapcar '(lambda (r) (apply '+ (mapcar '* r v))) m)
)

;; Multiply two matrices by Vladimir Nesterovsky

(defun mxm (m q)
(mapcar '(lambda (r) (mxv (trp q) r)) m)
) 

 

 

Autodesk Expert Elite Team

Posté(e)

Salut,

 

Un Handle étant un identifiant unique et persistant, il est possible de retrouver n'importe quel type d'objet avec cet identifiant.

Par contre, on ne peut pas l'utiliser directement dans un filtre de sélection, il faut faire la recherche dans le jeu de sélection par programmation.

 

Un p'tit bout de code VB serait le bien venu.

Désolé, je ne pratique pas le VB(A), et ce n'est sûrement pas aujourd'hui que je vais m'y mettre...

 

PS : si c'était pour avoir une aide en VB(A), tu aurais dû poster dans le forum adéquat.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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é