Aller au contenu

LISP Selection automatique d'objet à déplacer


Messages recommandés

Posté(e)

Bonjour,

Je rencontre un problème avec le LISP.

Je voudrais déplacer ma fenetre de presentation dans mon espace PAPIER sans avoir à saisir manuellement les objects à déplacer. J'ai donc directement fait la manipulation sur Autocad qui a bien fonctionné avec DEPLACER --> TOUT --> Entrer --> D --> puis j'ai spécifié ma distance.
Cependant impossible de réaliser la manipulation avec LISP, autocad me redemande à chaque fois de saisir l'object à déplacer alors que je veux que cela soit automatisé puis par la suite le logiciel se met à bugger une fois le programme lisp lancé.

Merci d'avance.

PFE mail.PNG

Posté(e)

Bonjour @L88

Pourriez-vous nous donner le code de votre routine pour voir où le bât blesse ?

Suivant ce que vous avez utilisé comme mode de sélection, il faut quelquefois valiser avec une chaine vide.
Mais comme vous ne nous dîtes pas comment vous avez opéré, on ne peut pas vous aider.

Amicalement

Éternel débutant…
Mon site perso : Programmer dans AutoCAD

 

Posté(e)

En effet j'ai oublié de le préciser autant pour moi :

 
Lisp :
(command "deplacer" "tout" "" "D"  distance-deplacement)
 
 
J'ai trouvé une alternative en utilsant la commande move mais avec le VLA, cependant celle ci est beaucoup plus encombrante. J'aurai preferé rester sur la première option plus courte.
 
La voici :
 

(defun c:testd ()
  ;; Définir les coins du rectangle de sélection
  (setq point_sup_droit (list 300 400 0))   ;; Coin supérieur droit
  (setq point_inf_gauche (list -420 -80 0))   ;; Coin inférieur gauche

  (setq point_deplac (list 200 0 0))      ;; Vecteur de déplacement (200 unités en X)

  ;; Sélectionner tous les objets dans la zone délimitée par les deux points
  (setq ss (ssget "C" point_inf_gauche point_sup_droit)) ; "C" pour la sélection par fenêtre

  ;; Vérifier si des objets ont été sélectionnés
  (if ss
    (progn
      ;; Afficher un message pour savoir si des objets ont été sélectionnés
      (princ (strcat "\n" (itoa (sslength ss)) " objets sélectionnés."))

      ;; Déplacer les objets avec la méthode "Move"
      (setq i 0) ;; Initialisation de l'index de la sélection
      (while (< i (sslength ss))  ;; Parcourir les objets sélectionnés
        (setq obj (ssname ss i))  ;; Récupérer l'objet à l'index i
        (setq vlaObj (vlax-ename->vla-object obj))  ;; Convertir l'objet en objet VLA
        
        ;; Utiliser la méthode Move de VLA pour déplacer l'objet
        (vla-move vlaObj (vlax-3d-point 0 0 0) (vlax-3d-point (car point_deplac) (cadr point_deplac) (caddr point_deplac)))
        
        (setq i (1+ i))  ;; Passer à l'objet suivant
      )
      (princ "\nLes objets ont été déplacés.")  ;; Message de confirmation
    )
    (princ "\nAucun objet sélectionné.")  ;; Message si aucun objet n'a été sélectionné
  )

  (princ)  ;; Pour ne pas afficher de message supplémentaire après l'exécution
)

 

 
 
Posté(e)

Bonjour @L88

Je le dis souvent lorsque je dois conseiller des gens qui commencent avec le Lisp :
Il est primordial de savoir (parfaitement) comment fonctionne AutoCAD avant de penser vouloir le programmer.

Pour faire ce que vous demandez avec un simple jeu de sélection que je vous laisse peaufiner s'il faut des filtres, ces deux lignes de code feront le job.
Pas besoin de parcourir le jeu de sélection ou de tester le nombre d'objets !

Snag_75bf05f3.png.d5241d1a983fe2188b2108660669ba19.png
Amicalement

 

Éternel débutant…
Mon site perso : Programmer dans AutoCAD

 

Posté(e)

Hélas, meme avec cette méthode (ssget) autocad me demande une saisie manuelle des objets c'est ça que je ne trouve pas normal

Posté(e)

Bonjour @L88

Que voulez-vous dire par une saisie manuelle ?, que signifie "saisie" dans votre vocabulaire ?

Je vous ai mis un ssget sans filtre, si vous avez besoin d'autre chose, expliquez-le s'il vous plaît.
Vous voulez sélectionner quoi comme objets ? mettez-les dans le filtre et il n'y aura pas de confirmation.

Amicalement

Éternel débutant…
Mon site perso : Programmer dans AutoCAD

 

Posté(e)

Excusez moi pour l'imprécision, je souhaite que la selection de l'objet se fasse automatiquement c'est à dire que je n'ai pas a venir cliquer pour selectionner l'object. Et je souhaite selectionner la fenetre de presentation ainsi que l'objet dans cette fenetre.
J'avais donc fait ceci dans un premier temps :

(setq ss (ssget "C" point_inf_gauche point_sup_droit) mais une fois de plus autocad m'invite à saisir avec la souris des objects, moi je veux que le programme se fasse d'un coup sans être interrompu

Posté(e)

Bonjour @L88

Vous mettez le mot "objet" au singulier, est-ce une faute de frappe ou bien, il y a réellement qu'une seule entité à sélectionner ?

Merci de faire passer le DWG en expliquant où se trouve l'objet à déplacer, avec un filtre, on devrait d'en sortir sans intervention utilisateur.

Amicalement

Éternel débutant…
Mon site perso : Programmer dans AutoCAD

 

Posté(e)

En effet, il y a plusieurs objets. Et pour ce qui est du DWG c'est juste un fichier vierge dans lequel j'ai juste fait un rectangle pour tester mon pogramme Lisp. J'ai donc ensuite centré la page de presentation sur le rectangle rien de plus.

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é