| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > .Net C# z-координата для Aligned Dimension

.Net C# z-координата для Aligned Dimension

Ответ
Поиск в этой теме
Непрочитано 05.05.2017, 22:50 #1
.Net C# z-координата для Aligned Dimension
AYulia
 
Программист
 
Санкт-Петербург
Регистрация: 05.05.2017
Сообщений: 1

Как можно привязать Aligned Dimension у нужной точке на Polyline в трехмерной системе координат? Polyline с некой глубиной, и при установке Aligned Dimension к верхней точке, он устанавливается в любом случае в нуле. UPD: Прилагаю вложения, на первом то что получается, на втором - то что должно быть.
Я еще только начала разбираться с программированием по автокад. Попробовала сделать через Leader, но в нужное место крепится только блок с текстом.
Код:
[Выделить все]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;

namespace DimFinal
{
    public class Class1
    {


        [CommandMethod("GetPointsFromUser")]
        public static void GetPointsFromUser()
        {
            // Get the current database and start the Transaction Manager
            Document acDoc = Application.DocumentManager.MdiActiveDocument;
            Database acCurDb = acDoc.Database;
            Editor ed = acDoc.Editor;

            PromptPointResult pPtRes;
            PromptPointOptions pPtOpts = new PromptPointOptions("")
            {

                // Prompt for the start point
                Message = "\nEnter the start point of the line: "
            };
            pPtRes = ed.GetPoint(pPtOpts);


            // Exit if the user presses ESC or cancels the command
            if (pPtRes.Status != PromptStatus.OK)
            {
                if (pPtRes.Status == PromptStatus.Cancel)
                {
                    ed.WriteMessage("\nInterrupted by user"); return;
                }
                else
                {
                    ed.WriteMessage("\nError on specifying a point"); return;
                }
            }
            Point3d ptStart = pPtRes.Value;

            // Prompt for the end point
            pPtOpts.Message = "\nEnter the end point of the line: ";
            pPtOpts.UseBasePoint = true;
            pPtOpts.BasePoint = ptStart;
            pPtRes = ed.GetPoint(pPtOpts);
            if (pPtRes.Status != PromptStatus.OK)
            {
                if (pPtRes.Status == PromptStatus.Cancel)
                {
                    ed.WriteMessage("\nInterrupted by user"); return;
                }
                else
                {
                    ed.WriteMessage("\nError on specifying a point"); return;
                }
            }
            Point3d ptEnd = pPtRes.Value;

            // Prompt for the 3d point
            pPtOpts.Message = "\nEnter the 3d point of the line: ";
            pPtRes = ed.GetPoint(pPtOpts);
            Point3d pt3 = pPtRes.Value;
            if (pPtRes.Status == PromptStatus.Cancel) return;

            // Start a transaction
            using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
            {
                BlockTable acBlkTbl;
                BlockTableRecord acBlkTblRec, acBlkTblRec1;
                // Open Model space for write
                acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable;
                acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
                acBlkTblRec1 = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForRead) as BlockTableRecord;
                AlignedDimension alDim = new AlignedDimension();
                using (alDim)
                {
                    alDim.XLine1Point = ptStart;
                    alDim.XLine2Point = ptEnd;
                    alDim.DimLinePoint = pt3;
                    alDim.DimensionStyle = acCurDb.Dimstyle;
                    
                    // Add the line to the block table
                    acBlkTblRec1.AppendEntity(alDim);
                    string text = alDim.DimensionText;
                    acTrans.AddNewlyCreatedDBObject(alDim, false);

                    ObjectId mtextId = ObjectId.Null;
                    MText mtx = new MText()
                    {
                        //mtx.SetDatabaseDefaults();
                        Contents = text,
                        Location = ptStart
                    };
                    mtextId = acBlkTblRec.AppendEntity(mtx);
                    acTrans.AddNewlyCreatedDBObject(mtx, true);
                    
                     ObjectId leaderId = ObjectId.Null;
                     Leader ld = new Leader();
                     ld.AppendVertex(ptStart);
                     ld.AppendVertex(pt3);
                     ld.SetDatabaseDefaults();
                     leaderId = acBlkTblRec.AppendEntity(ld);
                     ld.Annotation = mtextId;
                     ld.EvaluateLeader();
                    acTrans.AddNewlyCreatedDBObject(ld, true);

                 }

                // Commit the changes and dispose of the transaction
                acTrans.Commit();
            }
        }
    }
}

Миниатюры
Нажмите на изображение для увеличения
Название: dim1.jpg
Просмотров: 16
Размер:	11.9 Кб
ID:	187576  Нажмите на изображение для увеличения
Название: dim2.jpg
Просмотров: 20
Размер:	20.3 Кб
ID:	187577  


Последний раз редактировалось AYulia, 06.05.2017 в 19:17.
Просмотров: 6716
 
Непрочитано 06.05.2017, 00:34
#2
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


У меня две рекомендации.
1. Задать этот вопрос здесь: http://adn-cis.org/forum/index.php?board=4.0
2. Уточнить что нужно получить. Для этой цели нарисовать это в AutoCAD вручную и выложить чертеж.
Александр Ривилис вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > .Net C# z-координата для Aligned Dimension

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с расчетом Ж/Б каркаса в ANSYS derik ANSYS 457 04.07.2017 16:16
C++ to С++ CLI. Миграция на .NET. Rizling .NET 21 10.07.2013 13:15
реализация задачи visual studio2012 (visual basic .net) autocad 2012, oracle11g Anta .NET 32 31.12.2012 07:35
.Net событие double-click как поймать dvim .NET 7 04.04.2010 15:13
Как изменить aligned dimension на rotated dimension или наоборот? Bull AutoCAD 5 20.05.2008 14:28