Aller au contenu

Messages recommandés

Posté(e)

HELLO

 

je teste le visual lisp grace au bout de lisp recupere sur le forum

ceux a qui ca appartient reconnaitront

 

ca doit etre de (gile)

 

ce code permet de selectionner UN bloc

 

(IF 
   (AND (SETQ source (CAR (ENTSEL "\nCLIQUER SUR LE BLOC DE REFERENCE 2 : ")))
        (SETQ source (VLAX-ENAME->VLA-OBJECT source))
        (= (VLA-GET-OBJECTNAME source) "AcDbBlockReference")
;;;           (= (VLA-GET-LAYER source) layerbloc)
   )
 (PROGN (SETQ layerbloc (VLA-GET-LAYER source )
              namebloc  (VLA-GET-EffectiveName source )
        )
 )
)

 

 

mais si on veux apres en selectionner plusieur en visual lisp, comment ecrit on ca ???

j'ai testé ca mais bien sur ca ne marche pas

 

(IF       (AND (SETQ source (CAR (ENTSEL "\nSELECTIONNER LES BLOCS A COTER PAR LE METHODE DU TRAJET:")))
          (SETQ source (VLAX-ENAME->VLA-OBJECT source))
          (= (VLA-GET-EffectiveName source) namebloc)
          (= (VLA-GET-LAYER source) layerbloc)
     )
   (PROGN ..... )
)

 

bonne soirée

 

phil

FREELANCE

Autodesk Architecture 2025 sous windows 11 64

REVIT

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Posté(e)

Salut,

 

Si on est bien d'accord à propos de ce qu'on appelle Visual LISP, à savoir les fonctions LISP utilisant l'interface COM/ActiveX (fonctions vla-* et vlax-*) entsel que tu utilises pour sélectionner un objet n'en fait pas parti, pas plus que ssget qu'on utilise pour sélectionner plusieurs objets (avec un filtre de sélection si nécessaire).

Il existe bien des fonctions Visual LISP pour sélectionner un objet ou plusieurs, mais elles sont moins simple à utiliser tout en apportant rien de plus. En LISP on ne les utilise donc pas à moins de vouloir singer la verbosité du VBA.

 

Si tu veux utiliser Visual LISP pour traiter les objets d'un jeu de sélection, tu fais comme avec entsel : tu fais ta sélection avec ssget et tu convertis les noms d'entités (ename) en vla-object.

 

En utilisant vlax-ename->vla-object

(if (setq ss (ssget (list '(0 . "INSERT") (cons 8 layerblock))))
 (repeat (setq n (sslength ss))
   (setq obj (vlax-ename->vla-object (ssname ss (setq n (1- n)))))
   ;; ici le code pour traiter les vla-objects
 ) ;_ fin de repeat
) ;_ fin de if

 

En utilisant vla-get-ActiveSelectionSet

(if (ssget (list '(0 . "INSERT") (cons 8 layerblock)))
 (progn
   (vlax-for obj (setq ss (vla-get-ActiveSelectionSet
                            (vla-get-ActiveDocument
                              (vlax-get-acad-object)
                            )
                          )
                 )
     ;; ici le code pour traiter les vla-objects
   ) ;_ fin de vlax-for
   (vla-delete ss)
 ) ;_ fin de progn
) ;_ fin de if

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

Posté(e)

hello gile

 

donc un bon SSGEt suffira je pense

 

merci

 

a+

phil

FREELANCE

Autodesk Architecture 2025 sous windows 11 64

REVIT

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

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é