ADN Club > Civil 3D API

Выделение и отображение примитива Civil

<< < (2/2)

alz:
В общем немного непонятно что же надо, код выше прекрасно выделяет и фокусирует на объекте

Остальные вопросы к этой теме не относятся, по правилам нужно создавать отдельные темы, но просто советую изучить информацию отсюда
http://docs.autodesk.com/CIV3D/2018/ENU/API_Reference_Guide/index.html  вот тут я нашел больше всего полезной информации
Autodesk.Civil.DatabaseServices Namespace в этом разделе по элементам(колодцы трубы сети поверхности)
Autodesk.Civil.DatabaseServices.Styles Namespace тут по стилям отображения всего что было выше указано

D_TRex:
Видео с ограниченным доступом - в общем мне не доступно.
У меня почему то код только фокусирует экран, но не выделяет, может быть огрехи конвертации - буду пробовать.
За ссылку отдельное спасибо.
Вопросов больше не было, просто Вы спросили что это, я в двух словах описал.

Хотя возможно вот тут недопонимание

--- Код - vb.net [Выбрать] ---using (Pipe pipe = tr.GetObject(obid, OpenMode.ForRead, false, true) as Pipe)
--- Код - vb.net [Выбрать] ---obid я беру из списка труб, у Вас я может не заметил где объявлен

alz:
Видео давно не выкладывал, там теперь доступ открывать, возрастные ограничения тд, вроде открыл. По поводу obid - это был кусок кода с конкретно этим функционалом obid это ObjectId трубы, каким образом его получать это другой вопрос, я получал из формы, вот полный код немного причесанный


--- Код - C# [Выбрать] ---using Autodesk.AutoCAD.ApplicationServices;using Autodesk.AutoCAD.DatabaseServices;using Autodesk.AutoCAD.EditorInput;using Autodesk.AutoCAD.Geometry;using Autodesk.AutoCAD.Runtime;using System.Collections.Generic;  namespace test2{    public class Test99     {        //переменная для принятия Id трубы с формы        public static ObjectId part_id = ObjectId.Null;             [CommandMethod("p_view")]        public void start10012()        {            //обнуляем переменную            part_id = ObjectId.Null;            //создаем форму            get_part get_Part = new get_part();            get_Part.ShowDialog();            //если с формы ObjectId не пришло то прекращаем            if (part_id == ObjectId.Null) return;            Document aDoc = Application.DocumentManager.MdiActiveDocument;            Editor ed = aDoc.Editor;            Database db = aDoc.Database;                       using (Transaction tr = db.TransactionManager.StartTransaction())            {                //получаем объект, решил сделать через entyty что бы по отдельности трубы колодцы не обрабатывать                using (Entity ent = tr.GetObject(part_id, OpenMode.ForRead, false, true) as Entity)                {                    if (!ent.OwnerId.Equals(db.CurrentSpaceId))                    {                        tr.Commit();                        return;                    }                     //если есть границы, фиг знает в каких случаях их нет но походу это возможно                    if (ent.Bounds.HasValue)                    {                                               Extents3d extents = ent.Bounds.Value;                        //получаем текущий вид                        using (ViewTableRecord view = ed.GetCurrentView())                        {                            // Translate WCS coordinates to DCS                            // кусок кода из интернета, получает матрицу для перевода координат мировой системы                             // в систему координат экрана и переводит координаты границ трубы в координаты экрана                             // как работает хз, разбираться надо                            Matrix3d matWCS2DCS;                                                       matWCS2DCS = Matrix3d.PlaneToWorld(view.ViewDirection);                                                                   matWCS2DCS = Matrix3d.Displacement(view.Target - Point3d.Origin) * matWCS2DCS;                                                     matWCS2DCS = Matrix3d.Rotation(-view.ViewTwist, view.ViewDirection, view.Target) * matWCS2DCS;                                                      matWCS2DCS = matWCS2DCS.Inverse();                            extents.TransformBy(matWCS2DCS);                            //устанавливаем центральную точку на центр объекта и габариты экрана на габариты объекта                            view.CenterPoint = new Point2d((extents.MinPoint.X + extents.MaxPoint.X)/2, (extents.MinPoint.Y + extents.MaxPoint.Y) / 2);                            view.Height = extents.MaxPoint.Y - extents.MinPoint.Y;                            view.Width = extents.MaxPoint.X - extents.MinPoint.X;                                                        //устанавливаем вид по исправленному                            ed.SetCurrentView(view);                                                }                    }                   }                   ed.SetImpliedSelection(new List<ObjectId> { part_id } .ToArray());                tr.Commit();            }        }     }}


--- Код - C# [Выбрать] ---ed.SetImpliedSelection(new List<ObjectId> { part_id } .ToArray());здесь нужно передать массив с ObjectId элементов и они будут выделены, как создать массив элементов со значениями напрямую фиг знает поэтому использую список, вот все по шагам

--- Код - C# [Выбрать] ---List<ObjectId> list = new List<ObjectId>();list.Add(part_id);и передаю этот список в виде массива

--- Код - C# [Выбрать] ---ed.SetImpliedSelection(list.ToArray())




D_TRex:

--- Код - vb.net [Выбрать] ---        Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor        Dim selectP(0 To grdPipe.RowCount - 1) As ObjectId        For i = 0 To grdPipe.RowCount - 1            ' grdPipe.Item(colPIds.Index, i).Value тут я записал все элементы коллекции            selectP(i) = grdPipe.Item(colPIds.Index, i).Value        Next        ed.SetImpliedSelection(selectP)Всё разобрался, может кому пригодится, просто идея была выбирать элемент без фокусировки внимания, ну и фокусировка тоже нужна. В общем там нужна по любому коллекция, в Вашем случае это был один элемент, в моем случае был только ObjectId, но надо что бы это была коллекция пусть даже с одним элементом.  Теперь сделаю выбор в таблице строк и выделенные строки буду помещать в массив

Навигация

[0] Главная страница сообщений

[*] Предыдущая страница

Перейти к полной версии