winfield Posté(e) le 31 décembre 2005 Posté(e) le 31 décembre 2005 Bonsoir, bonne et heureuse année à toutes et à tous.(Encore avec une heure d'avance environ ;) ) Mon problème est le suivant :Comment en sélectionnant une polyligne (via GetEntity) qui a au minimum 3 sommets, connaitre les n° de sommets qui correspondent aux extrémités du segment de droite de l'endroit cliqué ? Ex :Une figure en forme de "V", sommet A,B et C. Le sommet B étant celui qui se trouve en bas. AB=100 : BC=10.Je clique sur le segment AB mais proche du sommet B. Si je demande les 2 sommets les plus proches pour avoir les extrémités du segment, ce sera faux car le sommet C est plus proche que le sommet B, et il ne fait pas partie de mon segment :( . Comment puis-je faire ?Merci de votre aide Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.
didier Posté(e) le 1 janvier 2006 Posté(e) le 1 janvier 2006 Hello, je viens chercher des informations complémentaires,que souhaites tu faire ? en cliquant sur un segment de polyligne,selectionner le point amont et le point aval,ou du moins les identifier, c'est bien ça ? amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
nazemrap Posté(e) le 1 janvier 2006 Posté(e) le 1 janvier 2006 Bonsoir. Pour ma part je pense qu'il s'agit de situer le sommet le plus proche du point de sélection de la polyligne.J'ai tenté une bidouille que voici : Public Sub bidouille() Dim objetselection As AcadEntity Dim polyligne As AcadLWPolyline Dim pointdeselection As Variant Dim coordodeselection(0 To 2) As Double Dim sommets As Variant Dim coordosommet(0 To 2) As Double Dim distance As Double Dim cercle() As AcadCircle 'Récupère la polyligne ThisDrawing.Utility.GetEntity objetselection, pointdeselection, "Sélectionnez la polyligne !" Set polyligne = objetselection 'Récupère les coordonnées du point de sélection coordodeselection(0) = pointdeselection(0): coordodeselection(1) = pointdeselection(1) 'Récupère les sommets de la polyligne sommets = polyligne.Coordinates 'Crée un tableau pour un nombre de cercles correspondant ReDim cercle(UBound(sommets)) 'Calcule pour chaque sommet la distance par rapport au point de sélection 'basé sur le carré de l'hypothénus! For tour = LBound(sommets) To UBound(sommets) coordosommet(0) = sommets(tour): coordosommet(1) = sommets(tour + 1) distance = Abs((coordodeselection(0) - coordosommet(0)) * (coordodeselection(0) - coordosommet(0))) _ + Abs((coordodeselection(1) - coordosommet(1)) * (coordodeselection(1) - coordosommet(1))) distance = Sqr(distance) 'crée un cercle de centre point de sélection, et rayon valant le vecteur Set cercle(tour) = ThisDrawing.ModelSpace.AddCircle(pointdeselection, distance) cercle(tour).color = acRed tour = tour + 1 Next 'Le plus petit cercle passe par le sommet le plus près du point de sélection 'partant de la, le sommet est récupérable... End Sub J'espère ne pas être trop à côté... nazemrap
winfield Posté(e) le 1 janvier 2006 Auteur Posté(e) le 1 janvier 2006 Bonsoir, Tu as tout compris Didier :D Merci nazemrap, vais étudier ton code Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.
nazemrap Posté(e) le 1 janvier 2006 Posté(e) le 1 janvier 2006 Re. Mille excuses , j'étais effectivement à côté. nazemrap
nazemrap Posté(e) le 1 janvier 2006 Posté(e) le 1 janvier 2006 Re Re J'ai décidé de retenter ma chance.Cette fois j'insère un point aux extrémités du segment concerné.Je veux bien qu'on me donne une correction sur mes tentatives. Public Sub bidouille2() Dim objetselection As AcadEntity Dim polyligne As AcadLWPolyline Dim pointdeselection As Variant Dim coordodeselection(0 To 2) As Double Dim explosepoly As Variant Dim point, point1, point2 As AcadPoint Dim intpoints As Variant Dim ligne As AcadLine 'Met les points en croix ThisDrawing.SetVariable "pdmode", 3 'NB l'accrochage "proche" doit être utilisé pendant la sélection 'Récupère la polyligne ThisDrawing.Utility.GetEntity objetselection, pointdeselection, "Sélectionnez la polyligne !" Set polyligne = objetselection 'Récupère les coordonnées du point de sélection coordodeselection(0) = pointdeselection(0): coordodeselection(1) = pointdeselection(1) 'Insère un point Set point = ThisDrawing.ModelSpace.AddPoint(pointdeselection) explosepoly = polyligne.Explode 'Boucle sur les objets résultants Dim I As Integer For I = 0 To UBound(explosepoly) If explosepoly(I).ObjectName = "AcDbLine" Then Set ligne = explosepoly(I) 'Teste l'intersection avec le point intpoints = ligne.IntersectWith(point, acExtendNone) If VarType(intpoints) <> vbEmpty Then If UBound(intpoints) = 2 Then 'met les points aux extrémités Set point1 = ThisDrawing.ModelSpace.AddPoint(ligne.StartPoint) Set point2 = ThisDrawing.ModelSpace.AddPoint(ligne.EndPoint) End If End If End If ligne.Delete Next End Sub nazemrap [Edité le 2/1/2006 par nazemrap]
winfield Posté(e) le 1 janvier 2006 Auteur Posté(e) le 1 janvier 2006 Rebonsoir nazemrap, D'abord, merci de m'aider, ça fait chaud au coeur en ces temps où on se gèle ...tout :P Un truc qui cloche enfin.......à mon avis.On peux pas demander l'intersection d'un nodal avec la ligne, vu que le nodal ne croise pas la ligne.Je pensais passer par un chemin similaire au tien mais, mais.. le prob c'est que j'ai pas réussi à faire un double GetEntity, je m'explique :1er GetEntity = Selection de la polyon l'explosesecond GetEntity mais automatique, l'utilisateur n'a pas à "bosser" (normalement ça va selectionner la ligne qui est la plus proche)on demande le StartPoint et EndPoint de la ligne Et le tour est joué :D Mais malheureusement, soit je m'y prend mal ou cette solution ne marche pô :( .......second GetEntity="" apparemmentJe continu mes recherches :cool: Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.
nazemrap Posté(e) le 2 janvier 2006 Posté(e) le 2 janvier 2006 Bonjour. Si si, j'insiste, le point crée une intersection avec la ligne.Dans la mesure ou la sélection de la polyligne a été faite avec un accrochage actif "proche", le point est sur la polyligne. nazemrap.
winfield Posté(e) le 2 janvier 2006 Auteur Posté(e) le 2 janvier 2006 Je suis vraiment désolé, accrochage actif avec proche, mais ça m'insère qu'un nodal au point cliqué :( Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.
winfield Posté(e) le 2 janvier 2006 Auteur Posté(e) le 2 janvier 2006 Oups ! Désolé, j'avais mal compris le accrochage actif "proche" . Effectivement ça marche. Bon ben vu que t'as fais le plus gros du taf (pour pas dire tout), vais quand même tenter de faire en sorte qu'on ait pas à déclenché le " proche" ;) En tout cas merci, mais je comprends toujours pas comment on peut trouver une intersection dans un cas comme celui-là :casstet: Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.
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