public static void RRR() { TypeViewerForm tvf = new TypeViewerForm(); //Autodesk.AutoCAD.ApplicationServices.Application.ShowModelessDialog(tvf); open_project dia = new open_project(); Application.ShowModelessDialog(null, dia, false); }
public static void RRR() { TypeViewerForm tvf = new TypeViewerForm(); //Application.ShowModalDialog(null, tvf, false); //Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog(tvf); Autodesk.AutoCAD.ApplicationServices.Application.ShowModelessDialog(tvf); Point3d pnt1 = new Point3d(0, 0, 0); Point3d pnt2 = new Point3d(100, 100, 0); Circle cir = new Circle(pnt1, Vector3d.ZAxis, 50); Line lin = new Line(pnt1, pnt2); BlockTableRecord btr; BlockTable bt; Database wbd = HostApplicationServices.WorkingDatabase; Transaction trans; trans = wbd.TransactionManager.StartTransaction(); bt = (BlockTable)trans.GetObject(wbd.BlockTableId, OpenMode.ForRead); btr = (BlockTableRecord)trans.GetObject(wbd.CurrentSpaceId, OpenMode.ForWrite); btr.AppendEntity(cir); btr.AppendEntity(lin); trans.AddNewlyCreatedDBObject(cir, true); trans.AddNewlyCreatedDBObject(lin, true); trans.Commit(); trans.Dispose(); }
public static void processPoints() { // Получение текущего документа и базы данных Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; TypeViewerForm tvf = new TypeViewerForm(); int numberOfPoints; // Старт транзакции using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { // Запрос выбора объектов в области чертежа PromptSelectionResult acSSPrompt = acDoc.Editor.GetSelection(); //List<Point3d> pathPoints = new List<Point3d>(); // Если статус запроса равен OK, объекты выбраны if (acSSPrompt.Status == PromptStatus.OK) { SelectionSet acSSet = acSSPrompt.Value; numberOfPoints = Data.pathPoints.Count; // + Data.floorPointsStart.Count Data.arrayFloidD = new double[numberOfPoints, numberOfPoints]; Data.arrayFloidS = new int[numberOfPoints, numberOfPoints]; Data.descentPoints = new double[numberOfPoints]; Data.descent = 0; for (int i = 0; i < numberOfPoints; i++) { for (int j = 0; j < numberOfPoints; j++) { Data.arrayFloidD[i, j] = Double.PositiveInfinity; Data.arrayFloidS[i, j] = j; if (i == j) Data.arrayFloidD[i, j] = 0; } Data.descentPoints[i] = 0; } // Перебор объектов в наборе foreach (SelectedObject acSSObj in acSSet) { // Проверка, нужно убедиться в правильности полученного объекта if (acSSObj != null) { // Открытие объекта для чтения Line acEnt = acTrans.GetObject(acSSObj.ObjectId, OpenMode.ForRead) as Line; if (acEnt != null) { int indX = Data.pathPoints.FindIndex(item => item == acEnt.StartPoint); int indY = Data.pathPoints.FindIndex(item => item == acEnt.EndPoint); Data.arrayFloidD[indX, indY] = acEnt.StartPoint.DistanceTo(acEnt.EndPoint) + Data.deltaPoints[indX]; ; Data.arrayFloidD[indY, indX] = Data.arrayFloidD[indX, indY]; } } } for (int i = 0; i < Data.floorPointsStart.Count; i++) { int indX = Data.pathPoints.FindIndex(item => item == Data.floorPointsStart[i]); int indY = Data.pathPoints.FindIndex(item => item == Data.floorPointsEnd[i]); Data.arrayFloidD[indX, indY] = Data.floorPointsDistance[i]; Data.arrayFloidD[indY, indX] = Data.arrayFloidD[indX, indY]; } //Алгоритм Флойда — Уоршелла for (int k = 0; k < numberOfPoints; k++) for (int i = 0; i < numberOfPoints; i++) for (int j = 0; j < numberOfPoints; j++) if (i != j) if (Data.arrayFloidD[i, j] > Data.arrayFloidD[i, k] + Data.arrayFloidD[k, j]) { Data.arrayFloidD[i, j] = Data.arrayFloidD[i, k] + Data.arrayFloidD[k, j]; Data.arrayFloidS[i, j] = k; } /*string test=""; for (int i = 0; i < numberOfPoints; i++) { //test = ""; for (int j = 0; j < numberOfPoints; j++) { test = test + arrayFloidS[i, j].ToString() + " "; } test = test + "\n"; } Application.ShowAlertDialog(test); test = ""; for (int i = 0; i < numberOfPoints; i++) { //test = ""; for (int j = 0; j < numberOfPoints; j++) { test = test + arrayFloidD[i, j].ToString() + " "; } test = test + "\n"; } Application.ShowAlertDialog(test); test = ""; for (int j = 0; j < numberOfPoints; j++) test = test + pathPoints[j].ToString() + " "; Application.ShowAlertDialog(test);*/ // Autodesk.AutoCAD.ApplicationServices.Application.ShowModelessDialog(tvf); // tvf.writeText(arrayFloidD[indStart, indEnd]); } // Очистка транзакции // Сохранение нового объекта в базе данных acTrans.Commit(); } }
public static void getYourPath() { // Получение текущего документа и базы данных Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; TypeViewerForm tvf = new TypeViewerForm(); double delta = 0; int indStart, indEnd = 0; List<int> colorPath = new List<int>(); List<int> path = new List<int>(); using (DocumentLock doclock = acDoc.LockDocument()) { // Старт транзакции using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { PromptPointResult pPtRes; PromptPointOptions pPtOpts = new PromptPointOptions(""); PromptDoubleResult psoRes; PromptDoubleOptions psoOpt = new PromptDoubleOptions(""); // Prompt for the start point pPtOpts.Message = "\nВведи начало пути: "; pPtRes = acDoc.Editor.GetPoint(pPtOpts); indStart = Data.pathPoints.FindIndex(item => item == pPtRes.Value); psoOpt.Message = "\nВведите длину спуска: "; if (Data.descentPoints[indStart] == 0) psoOpt.DefaultValue = Data.descent; else psoOpt.DefaultValue = Data.descentPoints[indStart]; psoRes = acDoc.Editor.GetDouble(psoOpt); if (Data.descentPoints[indStart] == 0) { Data.descentPoints[indStart] = psoRes.Value; Data.descent = psoRes.Value; } delta = delta + psoRes.Value; path.Add(indStart); while (true) { pPtOpts.Message = "\nВведи следующую точку пути: "; pPtRes = acDoc.Editor.GetPoint(pPtOpts); indEnd = Data.pathPoints.FindIndex(item => item == pPtRes.Value); if (indEnd == -1) break; path.Add(indEnd); //Application.ShowAlertDialog("Тут все хорошо 1"); colorPath = Class4.setPath(Data.arrayFloidS, path, indStart, indEnd, Data.arrayFloidS[indStart, indEnd]); //Application.ShowAlertDialog("Тут все хорошо 2"); Data.dlina = Data.arrayFloidD[indStart, indEnd] + delta; indStart = indEnd; } psoOpt.Message = "\nВведите длину спуска: "; if (Data.descentPoints[indStart] == 0) psoOpt.DefaultValue = Data.descent; else psoOpt.DefaultValue = Data.descentPoints[indStart]; psoRes = acDoc.Editor.GetDouble(psoOpt); if (Data.descentPoints[indStart] == 0) { Data.descentPoints[indStart] = psoRes.Value; Data.descent = psoRes.Value; } delta = delta + psoRes.Value; Data.dlina = Data.dlina + delta; PromptSelectionResult acSSPrompt1 = acDoc.Editor.GetSelection(); // Если статус запроса равен OK, объекты выбраны if (acSSPrompt1.Status == PromptStatus.OK) { SelectionSet acSSet1 = acSSPrompt1.Value; for (int i = 0; i < colorPath.Count - 1; i++) { //Application.ShowAlertDialog("Путь: " + colorPath[i].ToString()); foreach (SelectedObject acSSObj in acSSet1) { // Проверка, нужно убедиться в правильности полученного объекта if (acSSObj != null) { // Открытие объекта для чтения Line acEnt = acTrans.GetObject(acSSObj.ObjectId, OpenMode.ForWrite) as Line; //Application.ShowAlertDialog("Тут все хорошо 3"); if (acEnt != null) { int indS = Data.pathPoints.FindIndex(item => item == acEnt.StartPoint); int indE = Data.pathPoints.FindIndex(item => item == acEnt.EndPoint); if (((colorPath[i] == indS) && ((colorPath[i + 1] == indE))) || ((colorPath[i + 1] == indS) && ((colorPath[i] == indE)))) { acEnt.ColorIndex = 3; if (!Data.pathName[indS].Contains(DataCabel.t_oboznach1)) { Data.pathName[indS].Add(DataCabel.t_oboznach1); // Application.ShowAlertDialog("Тут все хорошо 1" + indS.ToString() + " " + DataCabel.t_oboznach1); } if (!Data.pathName[indE].Contains(DataCabel.t_oboznach1)) { Data.pathName[indE].Add(DataCabel.t_oboznach1); // Application.ShowAlertDialog("Тут все хорошо 2" + indE.ToString() + " " + DataCabel.t_oboznach1); } } } } } } } //Application.ShowAlertDialog((Data.arrayFloidD[indStart, indEnd] + delta).ToString()); показывает длину // Autodesk.AutoCAD.ApplicationServices.Application.ShowModelessDialog(tvf); // tvf.writeText(arrayFloidD[indStart, indEnd]); // Очистка транзакции // Сохранение нового объекта в базе данных acTrans.Commit(); } } }
public static void getPointsFloor() { // Получение текущего документа и базы данных Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; TypeViewerForm tvf = new TypeViewerForm(); // Старт транзакции using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { PromptPointResult pPtRes; PromptPointOptions pPtOpts = new PromptPointOptions(""); // Prompt for the start point pPtOpts.Message = "\nВведи начало на одном этаже: "; pPtRes = acDoc.Editor.GetPoint(pPtOpts); Data.floorPointsStart.Add(pPtRes.Value); if (!Data.pathPoints.Contains(pPtRes.Value)) Data.pathPoints.Add(pPtRes.Value); pPtOpts.Message = "\nВведи конец на другом этаже: "; pPtRes = acDoc.Editor.GetPoint(pPtOpts); Data.floorPointsEnd.Add(pPtRes.Value); if (!Data.pathPoints.Contains(pPtRes.Value)) Data.pathPoints.Add(pPtRes.Value); //PromptStringOptions psoOpt = new PromptStringOptions("nВведите имя блока: "); PromptDoubleResult psoRes; PromptDoubleOptions psoOpt = new PromptDoubleOptions(""); psoOpt.Message = "\nВведите длину перехода: "; psoRes = acDoc.Editor.GetDouble(psoOpt); Data.floorPointsDistance.Add(psoRes.Value); // Сохранение нового объекта в базе данных acTrans.Commit(); } }
public static void getPointsDelta() { // Получение текущего документа и базы данных Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; TypeViewerForm tvf = new TypeViewerForm(); // Старт транзакции using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { PromptPointResult pPtRes; PromptPointOptions pPtOpts = new PromptPointOptions(""); // Prompt for the start point pPtOpts.Message = "\nВведи точку перехода: "; pPtRes = acDoc.Editor.GetPoint(pPtOpts); int indX = Data.pathPoints.FindIndex(item => item == pPtRes.Value); //PromptStringOptions psoOpt = new PromptStringOptions("nВведите имя блока: "); PromptDoubleResult psoRes; PromptDoubleOptions psoOpt = new PromptDoubleOptions(""); psoOpt.Message = "\nВведите длину перехода: "; psoRes = acDoc.Editor.GetDouble(psoOpt); Data.deltaPoints[indX] = psoRes.Value; // Сохранение нового объекта в базе данных acTrans.Commit(); } }
public static void getPoints() { // Получение текущего документа и базы данных Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; TypeViewerForm tvf = new TypeViewerForm(); // Старт транзакции using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { // Запрос выбора объектов в области чертежа PromptSelectionResult acSSPrompt = acDoc.Editor.GetSelection(); //List<Point3d> pathPoints = new List<Point3d>(); // Если статус запроса равен OK, объекты выбраны if (acSSPrompt.Status == PromptStatus.OK) { SelectionSet acSSet = acSSPrompt.Value; // Перебор объектов в наборе foreach (SelectedObject acSSObj in acSSet) { // Проверка, нужно убедиться в правильности полученного объекта if (acSSObj != null) { // Открытие объекта для чтения Line acEnt = acTrans.GetObject(acSSObj.ObjectId, OpenMode.ForRead) as Line; if (acEnt != null) { if (!Data.pathPoints.Contains(acEnt.StartPoint)) Data.pathPoints.Add(acEnt.StartPoint); if (!Data.pathPoints.Contains(acEnt.EndPoint)) Data.pathPoints.Add(acEnt.EndPoint); //получаем координаты и кидаем их в функцию окошечка //tvf.writeText(acEnt.StartPoint.X, acEnt.StartPoint.Y, acEnt.EndPoint.X, acEnt.EndPoint.Y); // Изменение цвета объекта на Зеленый //acEnt.ColorIndex = 3; } } } } } int numberOfPoints; numberOfPoints = Data.pathPoints.Count; Data.deltaPoints = new double[numberOfPoints]; Data.pathName = new List<string>[numberOfPoints]; for (int i = 0; i < numberOfPoints; i++) { Data.pathName[i] = new List<string>(); } for (int i = 0; i < numberOfPoints; i++) Data.deltaPoints[i] = 0; }