Aller au contenu

Sélection alternative par déplacement de la souris


bonuscad

Messages recommandés

Suite à la diccussion concernant la construction d'un cercle par 2 points et de rayon ou diamètre connu, voir:

http://www.cadxp.com/sujetXForum-2488.htm

 

Je vous propose d'examiner le code si-dessous. C'est un programme court, et facile à décortiquer.

Vous pourrez vous attarder sur l'emploi de la fonction (grread) qui est un peu plus complexe, mais pouvant vous servir d'exemple pour une autre fonction écrite par vos soins. (Sélection alternative par déplacement de la souris)

 

E allant voir la dicussion, vous pourrez voir l'évolution de ce code en plusieurs étapes, et les différentes solutions apportées. (Il y a tellement de façons de faire)

 

(defun c:CD2P ( / p1 p2 pc1 pc2 rad ss1 ss2 s_osm key)

(initget 1)

(setq p1 (getpoint "\n1er point obligé: "))

(initget 33)

(setq p2 (getpoint p1 "\n2eme point obligé: ") rad "Radius")

(initget 3 "Diametre Rayon _Diameter Radius")

(setq rad (getdist (strcat "\n[Diamètre/Rayon]<" rad "> ?: ")))

(while (or (eq (type rad) 'STR) (< (* rad 2.0) (distance p1 p2)))

(cond

((eq (type rad) 'STR)

(initget 3 "Diametre Rayon _Diameter Radius")

(setq rad

(if(eq rad "Diameter")

(eval '(/ (getdist (strcat "\n[Diamètre/Rayon]<" rad "> ?: ")) 2.0))

(eval '(getdist (strcat "\n[Diamètre/Rayon]<" rad "> ?: ")))

)

)

)

(T

(princ " **Incorrect** Valeur du rayon trop faible !")

(initget 3 "Diametre Rayon _Diameter Radius")

(setq rad (getdist (strcat "\n[Diamètre/Rayon]<" (rtos rad) "> ?: ")))

)

)

)

(setvar "CMDECHO" 0)

(setq s_osm (getvar "OSMODE"))

(setvar "OSMODE" 0)

(if (zerop (getvar "PICKFIRST")) (setvar "PICKFIRST" 1))

(command "_.arc" p1 "_en" p2 "_radius" rad)

(setq ss1 (ssget "_L"))

(command "_.arc" p2 "_en" p1 "_radius" (- rad))

(ssadd (entlast) ss1)

(setq pc1 (cdr (assoc 10 (entget (entlast)))))

(command "_.arc" p1 "_en" p2 "_radius" (- rad))

(setq ss2 (ssget "_L"))

(command "_.arc" p2 "_en" p1 "_radius" rad)

(ssadd (entlast) ss2)

(setq pc2 (cdr (assoc 10 (entget (entlast)))))

(setvar "OSMODE" s_osm)

(if (and ss1 ss2 (= 0 (getvar "CMDACTIVE")))

(progn

(sssetfirst nil ss2)

(princ "\n pour choix; /[Espace]/Click+droit pour finir!.")

(while (and (not (member (setq key (grread T 4 2)) '((2 13) (2 32)))) (/= (car key) 25))

(cond

((eq (car key) 5)

(if (< (distance pc1 (cadr key)) (distance pc2 (cadr key)))

(sssetfirst nil ss1)

(sssetfirst nil ss2)

)

)

)

)

)

)

(command "_.erase")

(setvar "CMDECHO" 1)

(princ "\n*Cercle coupé aux points obligés* by me!!\n")

(princ)

)

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Très intéressant. Vraiment.

 

Je découvre aussi "sssetfirst"

 

Dans l'aide à propos de "grread", ils disent que c'est à réserver aux fonctions trés spécialisées.

 

En effet.

 

Remarquez le "_.arc", on dirait que tu as pris peur et que tu as pensé qu'on ait pu redéfinir la commande (raison pour laquelle tu as mis le "." !)

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

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é