Hydro8 Posté(e) le 5 mars 2019 Auteur Posté(e) le 5 mars 2019 Bonjour, Je suis bloqué pour la répétition de la commande en cas de mauvais sélection. J'ai essayé de réutiliser le code fournis précédemment par didier mais cela ne fonctionne pas entièrement. Le code actuel : (defun c:MSPk (/ option base coeff) (setq base (vlax-ldata-get "MSPK" "Base" 11.5)) (setq coeff (vlax-ldata-get "MSPK" "Coeff" 0.35)) (if (= base nil) (setq base 11.5)) (if (= coeff nil) (setq coeff 0.35)) (initget "Paramètres Continuer") (setq option (getkword (strcat "\nOptions [Paramètres/Continuer] Données actuelles : " (rtos base) " | " (rtos coeff) " <Continuer> : " ) ;_ Fin de strcat ) ;_ Fin de getkword ) ;_ Fin de setq (if (= option "Paramètres") (setq base (getreal "\nChoisissez la base <11.5> (par défaut) : ") coeff (getreal "\nChoisissez le coefficient <0.35> (par défaut) : ")) ) (if (= base nil) (setq base 11.5)) (if (= coeff nil) (setq coeff 0.35)) (vlax-ldata-put "MSPK" "Base" base) (vlax-ldata-put "MSPK" "Coeff" coeff) (while (while (not (setq poly (car (entsel "\nChoix de la polyligne\n"))))) (redraw poly 3) (setq polyvla (vlax-ename->vla-object poly)) (setq surf (vlax-get-property polyvla 'area)) (setq dec 1) (cond ((< surf base) (setq surf1 surf surf2 0.0)) ((> surf base) (setq surf1 base surf2 (- surf surf1))) ((/= coeff 0.35)(setq surf1 base surf2 (- surf surf1))) ) (setq pins (getpoint"\nPoint d'insertion du bloc ?\n")) (command "_insert" "SurfPk" pins "1" "" "" (rtos surf1 2 dec) (rtos coeff 2 2) (rtos surf2 2 dec)) ) (princ) ) ;_ Fin de defun Quand je dois sélectionner la polyligne et que je clique sur un endroit vide, il continue de me demander une polyligne, niquel.Par contre quand je sélectionne une polyligne il se passe rien après. J'ai essayé de mettre un "princ 'test'" après la boucle de sélection, mais rien n'apparaît dans les logs. Question bonus, c'est possible de continuer à demander une polyligne même si un autre objet est sélectionné ? (hachure, block...) Merci pour votre aide.
Olivier Eckmann Posté(e) le 5 mars 2019 Posté(e) le 5 mars 2019 Bonjour, dans la boucle while, il faut supprimer le (not car tel que c'est écrit ça demande à la machine de boucler TANT QUE RIEN n'est sélectionné. Olivier
Hydro8 Posté(e) le 5 mars 2019 Auteur Posté(e) le 5 mars 2019 Merci pour ta réponse. Si j'enlève le (not, il n'arrête plus la fonction si je sélectionne autre chose qu'une polyligne. Cependant quand j'en choisi une, il continue à demander une polyligne. (while (while (setq poly (car (entsel "\nChoix de la polyligne\n")))) (setq polyvla (vlax-ename->vla-object poly)) (setq surf (vlax-get-property polyvla 'area)) (setq dec 1) (cond ((< surf base) (setq surf1 surf surf2 0.0)) ((> surf base) (setq surf1 base surf2 (- surf surf1))) ((/= coeff 0.35)(setq surf1 base surf2 (- surf surf1))) ) (setq pins (getpoint"\nPoint d'insertion du bloc ?\n")) (command "_insert" "SurfPk" pins "1" "" "" (rtos surf1 2 dec) (rtos coeff 2 2) (rtos surf2 2 dec)) )
didier Posté(e) le 5 mars 2019 Posté(e) le 5 mars 2019 Coucou Je me demandais ce que ça devenait, visiblement tu as encore besoin d'aide...Je ne comprends pas avoir laissé passer un tel choix car je crois que ça vient de chez moiJe te prie de m'excuserJe te propose ça en retour : Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
didier Posté(e) le 5 mars 2019 Posté(e) le 5 mars 2019 (while (/= "LWPOLYLINE" (cdr (assoc 0 (entget (setq poly (car (entsel "\nChoix de la polyligne\n"))) ) ) ) ) ) Éternel débutant... Mon site perso : Programmer dans AutoCAD
Hydro8 Posté(e) le 7 mars 2019 Auteur Posté(e) le 7 mars 2019 Salut Je te remercie pour ton aide et pas de problème pour la première version ! Alors pour ce code : quand je clique sur autre chose qu'une polyligne, il continue à me demander une polyligne donc niquel. quand je clique sur rien (souvent des espaces vides autour des places de parking), il met "type d'argument incorrect lentityp nil", est-ce possible de là encore boucler sur la demande de polyligne ? quand je clique sur une polyligne, la fonction s'arrête et ne propose pas d'insérer le block ou de sélectionner une autre polyligne. Pour info, le code actuel : (defun c:MSPk (/ option base coeff) (setq base (vlax-ldata-get "MSPK" "Base" 11.5)) (setq coeff (vlax-ldata-get "MSPK" "Coeff" 0.35)) (if (= base nil) (setq base 11.5)) (if (= coeff nil) (setq coeff 0.35)) (initget "Paramètres Continuer") (setq option (getkword (strcat "\nOptions [Paramètres/Continuer] Données actuelles : " (rtos base) " | " (rtos coeff) " <Continuer> : " ) ;_ Fin de strcat ) ;_ Fin de getkword ) ;_ Fin de setq (if (= option "Paramètres") (setq base (getreal "\nChoisissez la base <11.5> (par défaut) : ") coeff (getreal "\nChoisissez le coefficient <0.35> (par défaut) : ")) ) (if (= base nil) (setq base 11.5)) (if (= coeff nil) (setq coeff 0.35)) (vlax-ldata-put "MSPK" "Base" base) (vlax-ldata-put "MSPK" "Coeff" coeff) (while (while (/= "LWPOLYLINE" (cdr (assoc 0 (entget (setq poly (car (entsel "\nChoix de la polyligne\n"))) ) ) ) ) ) (setq polyvla (vlax-ename->vla-object poly)) (setq surf (vlax-get-property polyvla 'area)) (setq dec 1) (cond ((< surf base) (setq surf1 surf surf2 0.0)) ((> surf base) (setq surf1 base surf2 (- surf surf1))) ((/= coeff 0.35)(setq surf1 base surf2 (- surf surf1))) ) (setq pins (getpoint"\nPoint d'insertion du bloc ?\n")) (command "_insert" "SurfPk" pins "1" "" "" (rtos surf1 2 dec) (rtos coeff 2 2) (rtos surf2 2 dec)) ) (princ) ) ;_ Fin de defun
Olivier Eckmann Posté(e) le 7 mars 2019 Posté(e) le 7 mars 2019 Bonjour, ci-joint le code modifié (defun c:MSPk (/ option base coeff) (setq base (vlax-ldata-get "MSPK" "Base" 11.5)) (setq coeff (vlax-ldata-get "MSPK" "Coeff" 0.35)) (if (= base nil) (setq base 11.5)) (if (= coeff nil) (setq coeff 0.35)) (initget "Paramètres Continuer") (setq option (getkword (strcat "\nOptions [Paramètres/Continuer] Données actuelles : " (rtos base) " | " (rtos coeff) " <Continuer> : " ) ;_ Fin de strcat ) ;_ Fin de getkword ) ;_ Fin de setq (if (= option "Paramètres") (setq base (getreal "\nChoisissez la base <11.5> (par défaut) : ") coeff (getreal "\nChoisissez le coefficient <0.35> (par défaut) : ")) ) (if (= base nil) (setq base 11.5)) (if (= coeff nil) (setq coeff 0.35)) (vlax-ldata-put "MSPK" "Base" base) (vlax-ldata-put "MSPK" "Coeff" coeff) (while T (if (and (setq poly (car (entsel "\nChoix de la polyligne\n"))) (= "LWPOLYLINE" (cdr (assoc 0 (entget poly)))) ) (progn (setq polyvla (vlax-ename->vla-object poly)) (setq surf (vlax-get-property polyvla 'area)) (setq dec 1) (cond ((< surf base) (setq surf1 surf surf2 0.0)) ((> surf base) (setq surf1 base surf2 (- surf surf1))) ((/= coeff 0.35)(setq surf1 base surf2 (- surf surf1))) ) (setq pins (getpoint"\nPoint d'insertion du bloc ?\n")) (setq oldATTDIA (getvar "ATTDIA")) (setvar "ATTDIA" 0) (setq oldATTREQ (getvar "ATTREQ")) (setvar "ATTREQ" 1) (command "_insert" "SurfPk" pins "1" "" "" (rtos surf1 2 dec) (rtos coeff 2 2) (rtos surf2 2 dec)) (setvar "ATTDIA" oldATTDIA) (setvar "ATTREQ" oldATTREQ) ) ) ) (princ) ) ;_ Fin de defun Olivier
Hydro8 Posté(e) le 8 mars 2019 Auteur Posté(e) le 8 mars 2019 Merci beaucoup cela fonctionne parfaitement ! :D
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