Iu63 Posté(e) le 9 janvier Posté(e) le 9 janvier 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.
didier Posté(e) le 9 janvier Posté(e) le 9 janvier 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
Iu63 Posté(e) le 9 janvier Auteur Posté(e) le 9 janvier 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 )
didier Posté(e) le 9 janvier Posté(e) le 9 janvier 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 ! Amicalement Éternel débutant… Mon site perso : Programmer dans AutoCAD
Iu63 Posté(e) le 9 janvier Auteur Posté(e) le 9 janvier 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
didier Posté(e) le 9 janvier Posté(e) le 9 janvier 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
Iu63 Posté(e) le 9 janvier Auteur Posté(e) le 9 janvier 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
didier Posté(e) le 9 janvier Posté(e) le 9 janvier 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
Iu63 Posté(e) le 9 janvier Auteur Posté(e) le 9 janvier 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.
didier Posté(e) le 9 janvier Posté(e) le 9 janvier Bonjour @L88 Je veux bien vous aider, mais il faut que les deux parties s'y mettent. Je viens vous poser une dernière une question d'après ce que je comprends : Faut-il sélectionner tout ce qui est visible dans une présentation donnée ? Éternel débutant… Mon site perso : Programmer dans AutoCAD
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