28/09/2016
Пример использования метода Curve.Extend
Вопрос:
Не нашел примера использования метода Curve.Extend. Подскажите, пожалуйста, как этот метод можно использовать для удлинения кривой.
Ответ:
Ниже приводится пример кода, который позволяет выбрать кривую для удлинения и граничную кривую, до которой будет выполнено удлинение:
Код - C#: [Выделить]
- using System;
- using Autodesk.AutoCAD.Runtime;
- using Autodesk.AutoCAD.ApplicationServices;
- using Autodesk.AutoCAD.DatabaseServices;
- using Autodesk.AutoCAD.Geometry;
- using Autodesk.AutoCAD.EditorInput;
- #pragma warning disable 0618
- [assembly: CommandClass(typeof(ExtendLine.MyCommands))]
- namespace ExtendLine
- {
- public class MyCommands
- {
- [CommandMethod("ExtendLine")]
- public void MyCommand()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- if (doc == null) return;
- Editor ed = doc.Editor;
- PromptEntityResult rs1 =
- ed.GetEntity("\nВыберите кривую, которая будет продолжена: ");
- if (rs1.Status != PromptStatus.OK) return;
- if (!rs1.ObjectId.ObjectClass.IsDerivedFrom(RXClass.GetClass(typeof(Curve)))) {
- ed.WriteMessage("\nЭто не кривая!");
- return;
- }
- PromptEntityResult rs2 =
- ed.GetEntity("\nВыберите граничную кривую: ");
- if (rs2.Status != PromptStatus.OK) return;
- if (!rs2.ObjectId.ObjectClass.IsDerivedFrom(RXClass.GetClass(typeof(Curve)))) {
- ed.WriteMessage("\nIt is not a Curve");
- return;
- }
- using (Curve cv1 = rs1.ObjectId.Open(OpenMode.ForWrite) as Curve)
- using (Curve cv2 = rs2.ObjectId.Open(OpenMode.ForRead) as Curve) {
- Point3dCollection pts = new Point3dCollection();
- cv1.IntersectWith(cv2, Intersect.ExtendThis, pts, IntPtr.Zero, IntPtr.Zero);
- if (pts.Count > 0) {
- Point3d pStart = cv1.StartPoint;
- Point3d pEnd = cv1.EndPoint;
- Point3d p = pts[0];
- double dist = Math.Min(p.DistanceTo(pStart), p.DistanceTo(pEnd));
- bool bStart = (p.DistanceTo(pStart) < p.DistanceTo(pEnd));
- for (int i = 1; i < pts.Count; i++) {
- if (pts[i].DistanceTo(pStart) < dist) {
- p = pts[i]; bStart = true;
- dist = p.DistanceTo(pStart);
- } else if (pts[i].DistanceTo(pEnd) < dist) {
- p = pts[i]; bStart = false;
- dist = p.DistanceTo(pEnd);
- }
- }
- try {
- cv1.Extend(bStart, p);
- }
- catch (Autodesk.AutoCAD.Runtime.Exception ex) {
- ed.WriteMessage(ex.ToString());
- }
- }
- }
- }
- }
- }
Видео использования команды EXTENDLINE:
Автор: Александр Ривилис
Обсуждение: http://adn-cis.org/forum/index.php?topic=7360
Опубликовано 28.09.2016