Aller au contenu

Creer un Arc tangent à deux Elements et qui passe par un point donne


lecrabe

Messages recommandés

Hello

 

TOUT est dans le titre !

 

Cela est facile avec MicroStation ! ... Et donc comment faire VITE sous AutoCAD ??

 

J'aimerais montrer un segment ou arc (eventuellement de Polyligne)

montrer un AUTRE segment ou arc (eventuellement de Polyligne)

et monter un point precis (avec accrochage si possible)

 

L'ordre des parametres n'a pas d'importance !

 

MERCI de vos lumieres, Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

YES l'ideal serait d'avoir les accrochages d'AutoCAD (proche par exemple, !?)

Mais bon parfois (plus rarement) j'aurais peut envie d'accrocher un point particulier sur le segment/arc (Extremite ou milieu par exemple)

quand on glisse sur les 2 arcs/segments voulus ...

 

Ca m'enerve grave car AutoCAD est capable de faire un cercle avec 3 tangences ou 2 tangences avec rayon impose !

 

Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

BOF c long !!

 

Car apres il faut construire une ligne 2 points avec uniquement les accrochages INTersection

pour avoir la ligne "entre" les 2 points de tangence

puis AJUSTER : CLIC sur la ligne et CLIC sur le cote du cercle a supprimer ...

 

De plus si j'accroche un point precis (par INT/EXT/MIL/etc) je perds la tangence !!

 

Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Voici un jet, vite fait, sans contrôle de cmdecho ni gestion d'erreur.En espérant que les options des commandes cercle et ajuster sont les mêmes sur autocad que sur bricscad.

(defun c:ttp ( / e1 e2 pt elast)
(if 
	(and
		(setq e1 (entsel "\n1ère entité de tangeance : "))
		(setq e2 (entsel "\n2nde entité de tangeance : "))
		(setq pt (getpoint "\nPoint d'intersection : "))
	)
	(progn
		;(setvar 'cmdecho 0)
		(command "_.circle" "_3P" "_tan" (cdr e1) "_tan" (cdr e2) pt)
		(setq 
			elast (entlast)
			ctr (cdr (assoc 10 (entget elast)))
		)
		(command "_trim" e1 e2 "" "_E" "_E" (polar ctr (angle pt ctr) (distance pt ctr)) "")
	)
)
(princ)
)

 

"Chacun compte pour un, et nul ne compte pour plus d'un."

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

J'interviens juste pour indiquer un avis

à partir du moment où l'on ajoute un arc de tangence , ça va être compliqué car 4 solutions , PCC et PDC .

Voir sur ce site ,

 

J'applaudis des deux mains celui qui saura résoudre intégralement ce problème

Bon week-end à tous

ffi7.jpg

cyrb.jpg

 

 

write a book about what ??

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

Je ne cherche pas les applaudissements, des deux mains ou dès demain mais j'ai commencé à travailler sur le sujet

J'ai atteint la vitesse fulgurante de l'escargot un jour de canicule donc les applaudissements risquent d'attendre...

J'ai bien l'intention d'y arriver, mais je manque de temps libre...

Par contre je veux bien que Lecrabe, puisqu'il est l'auteur de la question, nous fasse un gif ou un film ou une image de ce que MicroStation fait et comment il le fait, des fois que ça aide aux recherches...

 

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Desole mais la routine se casse la figure sur cette ligne :

(command "_trim" e1 e2 "" "_E" "_E" (polar ctr (angle pt ctr) (distance pt ctr)) "")

 

Au fait c quoi l'option "_E" sur Briscad !?

 

Je n'ai pas Microstation ... Je vais essayer d'avoir plus d'Infos ...

 

Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Pourrais-tu me donner ton message d'erreur ?

La 1ere commande "_E" au sein de la commande "_trim" sert à sélectionner l'option "_EDGE"

 

La 2ème sert à sélectionner l'option "_EXTEND"

Cette option étend les "limites" à partir desquelles ajuster.

EN attendant, essaie de remplacer la ligne de commande "_trim" par celle ci :

 

(command "_trim" e1 e2 "" "_Edge" "_Extend" (polar ctr (angle pt ctr) (distance pt ctr)) "")

"Chacun compte pour un, et nul ne compte pour plus d'un."

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

C'est sans doute que suivant la distance par rapport au point 0 (zéro) l'ajustement d'un cercle tangent sur une droite pose des soucis de précision de décimales.

C'est pas un programme, c'est plus une association de commandes, je en manque de respect à personne en disant çà, je pense par contre qu'il est tout à fait possible de "programmer" cette commande, si on a le temps, de mon côté j'avance mais je viens de me faire doubler par une limace...

 

Amicalement

 

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

----------------------------------------------------------------------

MERCI pour la Video MicroStation qui est DEMONSTRATIVE !

Je "pleure" en voyant le Dynamisme et l'Efficacite de MicroStation !

----------------------------------------------------------------------

 

Voici ce que donne la derniere version du LSP ...

je clique sur un segment ou un arc/cercle

puis je clique sur un segment ou arc/cercle

puis Clic sur le point voulu ...

 

Bye, lecrabe

 

 

Commande: TTP

 

1ere entite de tangeance :

2nde entite de tangeance :

Point d'intersection/passage : _.circle

Spécifiez le centre du cercle ou [3P/2P/Ttr (tangente tangente rayon)]: _3P Spécifiez un premier point sur le cercle: _tan à

Commande: _tan Commande inconnue "TAN". Appuyez sur F1 pour obtenir de l'aide.

 

Commande:

Commande:

Commande: _trim

Paramètres courants: Projection=SCU, Côté=Prolongement

Sélectionnez les arêtes sécantes...

Sélectionnez les objets ou : 1 trouvé(s)

 

Sélectionner des objets: 1 trouvé(s), 2 au total

 

Sélectionner des objets:

Sélectionnez l'objet à ajuster ou utilisez la touche Maj pour le prolonger ou

[Trajet/cApture/Projection/Côté/eFfacer/annUler]: _Edge

Entrez un mode de prolongement du côté implicite [PRolongement/PAs de prolongement] : _Extend

Sélectionnez l'objet à ajuster ou utilisez la touche Maj pour le prolonger ou

[Trajet/cApture/Projection/Côté/eFfacer/annUler]: Spécifiez le coin opposé: Spécifiez le coin opposé:

Spécification de fenêtre non valable.

; erreur: Fonction annulée

Spécifiez le coin opposé: Spécifiez le coin opposé:

Ne coupe pas l'arête sécante.

Spécifiez le coin opposé: *Annuler*

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Je vais tenter une approche avec cercle et 3 points et automatiser le reste....

(vl-load-com)(defun C:Arc-TT-PT ( / p1 e1 t1 p2 e2 t2 px cx)
 (setvar "cmdecho" 0)
 (while (not (setq e1 (nentsel "\n1er point de tangence: "))))
 (setq p1 (cadr e1))
 (setq t1 (osnap p1 "_near"))
 (while (not (setq e2 (nentsel "\n2ème point de tangence: "))))
 (setq p2 (cadr e2))
 (setq t2 (osnap p2 "_near"))
 (cond
((and t1 t2)
 	(initget 9)
 	(setq px (getpoint "\nPoint passage obligé: "))
 	(command "_.circle" "_3p" "_tan" t1 "_tan" t2 "_none" px)
 	(setq cx (entlast))
 	(setq t1
   	(vlax-invoke
     	(vlax-ename->vla-object cx)
     	'IntersectWith
     	(vlax-ename->vla-object (car e1))
     	acextendotherentity
   	)
 	)
 	(setq t2
   	(vlax-invoke
   	(vlax-ename->vla-object cx)
     	'IntersectWith
     	(vlax-ename->vla-object (car e2))
     	acextendotherentity
   	)
 	)
 	(entdel (entlast))
 	(if (and t1 t2)
   	(command "_.arc" "_none" (trans t1 0 1) "_none" px "_none" (trans t2 0 1))
   	(princ "\nPas de solution")
 	)
)
 )
 (setvar "cmdecho" 1)
 (prin1)
)

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

Hello

 

WAOUH cela marche !

 

Bien sur on ne voit pas en temps reel LES solutions comme sur MicroStation (Voir la Video de lrdb@home) !

MAIS au moins un arc correct se dessine !!

 

Peut etre y aura t-il d'autres propositions ...

 

MERCI Bruno, Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

T'emballe pas, d'après mes tests, des soucis avec des grandes coordonnées (problème récurent: comme la commande raccord par exemple) les intersections ne sont pas calculées avec assez de précision pour faire l'ajustement...

Si on utilisait pas de nom d'entité, on pourrait soustraire la partie entière (arrondie) aux coordonnés, faire les calculs, puis à la fin restituer les coordonnées originales en rajouter la partie soustraite pour obtenir une précision correcte.

 

Ou alors en prenant cette technique de soustraction, appliquer par un (entmod) aux entités (ce qui revient au déplacement provisoire proche du zéro) faire le raccord et faire un (entmod) inverse après les calculs.

C'est dans ma tête, mais je n'ai pas encore expérimenté si c'est possible de l'appliquer relativement simplement sans couac et sans trop de lourdeur de code !...ohmy.gif

NB: J'ai simplifier un peu le code précédent (sélection des tangentes qui était un peux tortueux), cela ne change rien au fonctionnements qui reste identique.

 

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

Hello

 

Suggestion d une Truffe en Lisp/VLisp:

- Marquer le Undo

- Si X ou Y > 100000 ou meme 10000 !? alors ...

- Déplacer les 2 entités accrochées (si entités accrochees) en Zéro Zéro... et se déplacer...

- Traitement...

- Renvoyer les Entités et Arc(s) au bon endroit

- Marquer le Undo

 

D ailleurs il pourrait être intéressant de dessiner 2 arcs (si possible) !?

L opérateur choisira après...

 

Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Bonuscad, déjà bravo pour le Lisp, et aussi saurais tu me dire ce que ne va pas dans mon Lisp, par hasard ? Sur bricscad ça fonctionne très bien, alors peut être l'histoire de manque de précisions évoqué plus Haut ? J'ai aussi remarqué un pb d'accroche sur le cdr du entsel (il manque juste un osnap je pense) potentiellement déclencheur d'erreur.

 

Merci.

"Chacun compte pour un, et nul ne compte pour plus d'un."

Lien vers le commentaire
Partager sur d’autres sites

saurais tu me dire ce que ne va pas dans mon Lisp

 

En restant dans un exemple "bateau", ce qui ne vas pas est cette ligne:

(command "_.circle" "_3P" "_tan" (cdr e1) "_tan" (cdr e2) pt)

au lieu du (cdr) il faut prendre le (cadr): le retour de (entsel) n'est pas une paire pointée.

Après _trim peut être hasardeux: le cercle peut être tangent sans pour autant couper celle-ci -> l'ajustement échoue, ou aussi si l'utilisateur est dans un SCU, ce que tu ne gère pas.Mais la la grosse erreur reste le CDR ou lieu du CADR, je me demande d'ailleurs comment cela pouvait fonctionner sous bricscad ?!?!

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

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é