Gardy Posté(e) le 25 avril 2019 Posté(e) le 25 avril 2019 Bonsoir, Petit nouveau ! J'ai besoin d'un coup de pouce car je bloque sur ce problèmeJe 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
(gile) Posté(e) le 25 avril 2019 Posté(e) le 25 avril 2019 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
Gardy Posté(e) le 26 avril 2019 Auteur Posté(e) le 26 avril 2019 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.
(gile) Posté(e) le 26 avril 2019 Posté(e) le 26 avril 2019 Qu'appelles tu "point de départ" ? Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Gardy Posté(e) le 26 avril 2019 Auteur Posté(e) le 26 avril 2019 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 ;)
(gile) Posté(e) le 26 avril 2019 Posté(e) le 26 avril 2019 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
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