Aller au contenu

C# - Sens d'un arc


Gardy

Messages recommandés

Bonsoir,

 

Petit nouveau !

 

J'ai besoin d'un coup de pouce car je bloque sur ce problème

Je cherche à faire un cercle avec comme centre le point de départ d'un arc.

 

Pas de problème quand l'arc est dans le sens anti-horaire. par contre dans l'autre ce n'est pas le cas.

 

Le cercle se trouve au point de fin (le point départ devient le point fin et vice versa)

 

 

Je ne sais pas vraiment par ou commencer...

 

Voici un exemple du code que j'utilise

 

    	[CommandMethod("TEST")]
   	public void CerleArc()
   	{
       	var doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
       	var db = doc.Database;
       	var ed = doc.Editor;

       	var options = new PromptEntityOptions("\nSélectionner un arc");
       	options.SetRejectMessage("\nL'objet séléctionné n'est pas un arc");
       	options.AddAllowedClass(typeof(Arc), false);
       	var result = ed.GetEntity(options);

       	if (result.Status != PromptStatus.OK) return;

       	Arc tube = null;
       	Circle c = null;

       	using (var tr = db.TransactionManager.StartTransaction())
       	{
           	tube = tr.GetObject(result.ObjectId, OpenMode.ForWrite) as Arc;
           	BlockTableRecord acBlkTblRec;
           	acBlkTblRec = tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
           	
           	using (Circle acCirc = new Circle())
           	{
      			
               	acCirc.Center = new Point3d(tube.StartPoint.X, tube.StartPoint.Y, 0);
               	acCirc.Radius = 7;
               	acBlkTblRec.UpgradeOpen();

               	acBlkTblRec.AppendEntity(acCirc);
               	tr.AddNewlyCreatedDBObject(acCirc, true);
               	c = new Circle(acCirc.Center, acCirc.Normal, acCirc.Radius);
           	}
           	tr.Commit();
       	}
   	}

 

Je vous remercie pour votre aide

 

 

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Un arc est toujours en sens anti-horaire.

 

Sans savoir exactement ce que tu souhaites faire, une façon serait de reproduire ce que font certaines commande AutoCAD pour déterminer l'extrémité d"un objet curviligne en fonction du point cliqué (PickedPoint). Dans ce cas, on choisirait l'extrémité la plus proche du point cliqué.

 

        [CommandMethod("TEST")]
       public void CerleArc()
       {
           var doc = Application.DocumentManager.MdiActiveDocument;
           var db = doc.Database;
           var ed = doc.Editor;

           var options = new PromptEntityOptions("\nSélectionner un arc");
           options.SetRejectMessage("\nL'objet séléctionné n'est pas un arc");
           options.AddAllowedClass(typeof(Arc), false);
           var result = ed.GetEntity(options);
           if (result.Status != PromptStatus.OK)
               return;

           using (var tr = db.TransactionManager.StartTransaction())
           {
               var arc = (Arc)tr.GetObject(result.ObjectId, OpenMode.ForRead);
               var point = result.PickedPoint.TransformBy(ed.CurrentUserCoordinateSystem);
               var center = arc.EndPoint.DistanceTo(point) < arc.StartPoint.DistanceTo(point) ?
                   arc.EndPoint : arc.StartPoint;
               var cSpace  = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
               var circle = new Circle(center, Vector3d.ZAxis, 7.0);
               cSpace.AppendEntity(circle);
               tr.AddNewlyCreatedDBObject(circle, true);
               tr.Commit();
           }
       }

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Bonjour.

 

Merci Gile pour ton aide. Effectivement cela peut être une solution.

 

Pour expliquer au mieux ce que je souhaite faire:

 

J'ai plusieurs arc de tracé. je souhaite en cliquant sur l'un deux avoir un cercle au point départ.

 

La suite c'est de connaitre le nombre d'arc qui passe dans ce cercle à l'aide de la méthode IntersectWith.

 

arc.jpg arc2.png

Lien vers le commentaire
Partager sur d’autres sites

Qu'appelles tu "point de départ" ?

 

 

Les étapes sont les suivante:

 

L'utilisateur trace des arc 3 points avec l'outil ARC en partant toujours du même point de départ (Voir exemple 1er capture de mon post précédant).

 

Ce que je souhaite c'est que l'utilisateur lance ma commande pour sélectionner un arc quelconque et placer un cercle dont le point de centre serait celui du départ de l'arc (Voir résultat 2eme capture).

 

Pour les arc en sens anti-horaire cela fonctionne bien mais pas dans l'autre.Je cherchais à trouver une manière de détecter si l'arc était du sens"clockwise" est si c'était le cas j'aurai modifié le point de centre du cercle par celui du EndStart de l'arc.

 

Pour le moment Je vais partir sur ton idée. Merci encore ;)

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

OK, la confusion vient de ce qu'on entend par : "point de départ".

Le "point de départ" spécifié par l'utilisateur lors de l'exécution de la commande ARC ne correspond pas forcément à la valeur de la propriété StartPoint.

Celle-ci est déterminée par AutoCAD lors de l'ajout de l'entité Arc dans la base données en fonction de la géométrie de l'arc : StartPoint est toujours le point de départ de l'arc en sens anti-horaire (trigonométrique) en fonction de la normale de l'arc quel que soit l'ordre dans lequel les points ont été spécifiés par l'utilisateur.

 

Donc pour ton problème, il s'agit de trouver un moyen non-équivoque de déterminer l'extrémité de l'arc qui t'intéresse, c'est pourquoi je proposais d'utiliser la méthode de la position du point cliqué, utilisée par de nombreuses commandes AutoCAD (PROLONGER, AJUSTER, MODIFLONG, etc...)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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é