Titifonky Posté(e) le 29 juin 2005 Posté(e) le 29 juin 2005 Bonjour, J'ai remarqué dans les nouvelles versions d'autocad que l'on pouvait utiliser l'accrochage au objet nommé "Milieu entre 2 points" dans le menu contextuel. Il y a quelques post qui en parle mais pas d'integration dans le menu. Je propose cette solution : Rajoutez cette ligne dans le menu ***POP0 **SNAP des fichiers AutoCAD.mnu et AutoCAD.mns "ID_MidPoints [Milieu en&tre 2 points]_non ^P(list (/ (+ (car (setq p1 (getpoint))) (car (setq p2 (getpoint)))) 2.0) (/ (+ (cadr p1) (cadr p2)) 2.0) (/ (+ (caddr p1) (caddr p2)) 2.0))" A+ [Edité le 29/6/2005 par Titifonky] www.le-metal.net, sur la métallerie
Tramber Posté(e) le 29 juin 2005 Posté(e) le 29 juin 2005 Tout ca me parait bien compliqué pour un accorchage que l'on peut émuler avec la fonction CAL ! Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Titifonky Posté(e) le 29 juin 2005 Auteur Posté(e) le 29 juin 2005 Bonjour Tramber, le seul intêret de passer par du Lisp c'est la transparence de la commande. En passant par la fonction CAL il y a toujours des lignes qui s'affiche comme>> Expression: (cur+cur)/2>> Entrez un point:>> Entrez un point: A+ www.le-metal.net, sur la métallerie
didier Posté(e) le 29 juin 2005 Posté(e) le 29 juin 2005 hello, dire qu'on s'était moqué de moi à l'époque voir ce Retour amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
xl05 Posté(e) le 7 juillet 2005 Posté(e) le 7 juillet 2005 N'empèche Titifonky que ta commande lisp ne fonctionne pas sur acad2002, alors que (cur + cur + cur + cur)/3 que j'ai mis dans mon menu marche niquel.Parfois les choses les plus simples sont les meilleurs! XXL XXL
bonuscad Posté(e) le 7 juillet 2005 Posté(e) le 7 juillet 2005 La ligne de Titifonky est bonne, du moins je l'ai testée d'un un bouton avec ceci: _non ^P(list (/ (+ (car (setq p1 (getpoint))) (car (setq p2 (getpoint)))) 2.0) (/ (+ (cadr p1) (cadr p2)) 2.0) (/ (+ (caddr p1) (caddr p2)) 2.0)) Par contre la tienne, je serais surpris qu'elle retourne le milieu de 2 pts.Tu as 4 points / 3 ?!?!? encore que 3 pts/3 pourait te donner le barycentre d'un triangle Autre remarque, ta procédure ne vérifie pas l'accroche-objet, si par malchanche le point retourner se trouve sur un objet, il sera faux suivant le mode actif. Titifonky a utilisé "_non" (aucun) pour palier a ce problème. Quoiqu'il en soit les 2 méthode sont bonnes. Personellement j'utilise le lisp dans un bouton comme ceci ((lambda ( / p1 p2 p) (prompt "\nPoint milieu entre ") (setq p1 (getpoint "premier point : ")) (setq p2 (getpoint p1 "\nsecond point : ")) (setvar "osmode" (+ 16384 (rem (getvar "osmode") 16384))) (setq p (list (/ (+ (car p1) (car p2)) 2) (/ (+ (cadr p1) (cadr p2)) 2) (/ (+ (caddr p1) (caddr p2)) 2) ) ) (setvar "lastpoint" p) )) J'ai choisi cette méthode car si je n'ai pas une commande en cours le point est stoké dans "LASTPOINT" et je peux m'en servir dans la commande suivante à l'aide "@"Mais on pourrait faire la même chose avec (cur + cur)/2 aussi. ;) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
xl05 Posté(e) le 7 juillet 2005 Posté(e) le 7 juillet 2005 La ligne que j'ai affichée me donne effectivement le barycentre pour trois points et tu fais la même chose pour 4 points.En fait j'ai affiché ceci dans mon menu:ID_Mid3Points [Milieu entre 3 points]_non;'cal (cur + cur + cur)/3;ID_Mid4Points [Milieu entre 4 points]_non;'cal (cur + cur + cur + cur)/4;Mais merci pour l'astuce en lisp XXL XXL
gile Posté(e) le 8 juillet 2005 Posté(e) le 8 juillet 2005 Salut à tous, Je me permet une petite précision de géométrie euclidienne pour éviter certaines confusions: Le barycentre (ou plus exactement l'équibarycentre) renvoyé par (cur+cur+cur+cur)/4 ne correspond au centre de gravité que dans le cas de quadrilatères réguliers. Le dessin ci-desssous illustre une méthode graphique de détermination du centre de gravité d'un quadrilatère irrégulier par sa décomposition en triangles : le centre de gravité du quadrilatère est situé sur la droite définie par les centres de gravité des triangles qui le compose. http://img158.imageshack.us/img158/8571/centredegravit9wr.jpg Le lisp suivant place un point sur le centre de gravité d'un solide ou d'une région : ;;; c:pt_cen Crée un point sur le centre de gravité d'une région ou d'un solide (vl-load-com) (defun c:pt_cen (/ AcDoc ModSp reg cen) (setq AcDoc (vla-get-activedocument (vlax-get-acad-object)) ModSp (vla-get-ModelSpace AcDoc) ) (vla-startundomark AcDoc) (while (not (member (cdr (assoc 0 (entget (setq reg (car (entsel "\nSélectionnez la région ou le solide: "))) ) ) ) '("REGION" "3DSOLID") ) ) (princ "\nEntité non valide.") ) (setq reg (vlax-ename->vla-object reg) cen (vlax-safearray->list (vlax-variant-value (vla-get-Centroid reg)) ) ) (if (= (vla-get-ObjectName reg) "AcDbRegion") (setq cen (trans cen 1 0)) ) (vla-addPoint ModSp (vlax-3D-point cen)) (vla-endundomark AcDoc) (princ) )
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