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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Подскажите в .net api Автокада аналог (ssname a n)

Подскажите в .net api Автокада аналог (ssname a n)

Ответ
Поиск в этой теме
Непрочитано 18.02.2014, 22:38 #1
Подскажите в .net api Автокада аналог (ssname a n)
лузер
 
Изучение .NET ACAD2010/BRICS14
 
Москва
Регистрация: 26.01.2014
Сообщений: 30

Подскажите, как сделать набор объектов (как в автолиспе (ssget)) и как потом докопаться в этом наборе до объекта с номером n (как в автолиспе (ssname a n), a - набор). Тыкаюсь тыкаюсь , не понимаю. Вот тут начал писать тестовый пример, см. приложение. Это пробую в методе vybor(). Вроде по смыслу TypedValue[] dxfs - это массив значений для фильтра, какие типы примитивов должны быть выбраны. Далее меня смущает слово Prompt в названиях типов, как будто это некое сообщение а не набор. А где тут сам набор с примитивами я так и не понял

Вложения
Тип файла: zip Class1.zip (1.1 Кб, 26 просмотров)

Просмотров: 2802
 
Непрочитано 18.02.2014, 22:46
#2
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


https://sites.google.com/site/bushma...nnymi-naborami
Тут ответ на твой вопрос
Boxa вне форума  
 
Непрочитано 18.02.2014, 23:14
#3
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от лузер Посмотреть сообщение
Далее меня смущает слово Prompt в названиях типов, как будто это некое сообщение а не набор.
В данном случае это можно перевести как "запрос": PromptEntityOption - опции запроса вхождения, PromptEntityResult - результат запроса вхождения и т.п.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 19.02.2014, 16:18
#4
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Цитата:
Сообщение от лузер Посмотреть сообщение
А где тут сам набор с примитивами я так и не понял
Для расширения кругозора:
Код:
[Выделить все]
        [CommandMethod("f2")]
        public static void vybor()
        {
            // ставим метку:
            bool isOk = false;
            _AcEd.Editor editor = _AcAp.Application.DocumentManager.MdiActiveDocument.Editor;
            _AcDb.TypedValue[] dxfs = new _AcDb.TypedValue[] { new _AcDb.TypedValue((int)_AcDb.DxfCode.Start, "POINT") };
            _AcEd.SelectionFilter sfilter = new _AcEd.SelectionFilter(dxfs);
            _AcEd.PromptSelectionOptions pso = new _AcEd.PromptSelectionOptions();
            try
            {
                _AcEd.PromptSelectionResult res = editor.GetSelection();
                // проверять результат обязательно: 
                if (res.Status != PromptStatus.OK) { return; }
                _AcEd.SelectionSet sset = res.Value;
                //подсвечиваем выбор;
                editor.SetImpliedSelection(res.Value.GetObjectIds());
                int i = sset.Count;
                StringBuilder sb = new StringBuilder();
                Transaction tr = _AcAp.Application.DocumentManager.MdiActiveDocument.TransactionManager.StartTransaction();
                using (tr)
                {
                    //ставим счётчик:
                    int num = 0;
                // цикл по выбранным примитивам:
                foreach (SelectedObject selObj in sset)
                {
                    Entity ent = tr.GetObject(selObj.ObjectId,OpenMode.ForRead) as Entity;
                    // проверять валидность примитива (если доступен) обязательно:
                    if (ent != null)
                    {
                        // проверять кастинг примитива как определенного типа (в твоем примере - DBPoint) обязательно:
                        DBPoint pt = ent as DBPoint;
                        if (pt != null)
                        {
                            Point3d pp = pt.Position;
                            string ls = string.Format("{0:f6};{1:f6};{2:f6}", pp.X, pp.Y, pp.Z);// <--- точность 6 знаков
                            sb.AppendLine(ls);
                            // добавляешь другие свойства если нужно напр. слой и т.д.:
                            sb.AppendLine(string.Format("Слой точки номер {0}: {1}", num, pt.Layer));
                            // для примитива под определенным номером записывай так:
                             if (num == 10)
                             {
                                 ls = string.Format("Точка номер {0}:\t{1:f6};{2:f6};{3:f6}", num,pp.X, pp.Y, pp.Z);// <--- точность 6 знаков
                                 sb.AppendLine(ls);
                             }
                        }
                    }
                    num += 1;//  приращиваем счётчик
                }
                }
                using (StreamWriter f1 = new StreamWriter("C:/test/форумсампле.txt"))
                //Используй символ @ для указания пути файла (не обязательно, можешь оставить ка было)
                // using (StreamWriter f1 = new StreamWriter(@"C:\Users\Public\Documents\file1.txt"))
                {
                    f1.WriteLine("Выбрано точек: " + i.ToString());
                    f1.Write(sb.ToString());

                    // f1.Close(); // не надо закрывать ,using закрывает сам
                }
                isOk = true;
             
            }
            catch (Autodesk.AutoCAD.Runtime.Exception ex)
            {
                isOk = false;
                _AcAp.Application.ShowAlertDialog(ex.ToString());
            }
            finally
            {
                //здесьсообщение о завершении команды или другое пользовательское сообщение, напр.:
                if (isOk)
                    _AcAp.Application.ShowAlertDialog("Всё пучком.");
            }
        }
Олег (jr.) вне форума  
 
Непрочитано 20.02.2014, 17:52
#5
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Удалил
Boxa вне форума  
 
Автор темы   Непрочитано 20.02.2014, 18:01
#6
лузер

Изучение .NET ACAD2010/BRICS14
 
Регистрация: 26.01.2014
Москва
Сообщений: 30


Что значит удалил?

----- добавлено через ~4 ч. -----
Похоже я догадался как работать с 3д полилинией. Вот так:
Polyline3d pt2 = ent as Polyline3d;
if (pt2 != null)
{
Point3dCollection pp2 = new Point3dCollection();
IntegerCollection snapModes = new IntegerCollection();
IntegerCollection geometryIds = new IntegerCollection();
pt2.GetGripPoints(pp2, snapModes, geometryIds);
int i2 = pp2.Count;
int i3;
Point3d[] p3d = new Point3d[i2];
pp2.CopyTo(p3d, 0);
for (i3 = 0; i3 < i2; i3++)
{
f2.WriteLine(p3d[i3].X + ", " + p3d[i3].Y + ", " + p3d[i3].Z);
}
f2.WriteLine(i2.ToString());
}
лузер вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Подскажите в .net api Автокада аналог (ssname a n)

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пользователи Автокада, подскажите. Slavik01 Прочее. Архитектура и строительство 11 15.10.2013 12:46
Существует ли аналог (findfile) в .NET? Кулик Алексей aka kpblc .NET 16 13.08.2010 00:11
Подскажите, гуру! Можно ли в разделенном на 2 части окне автокада открыть два разных чертежа? Или это возможно только в 2 запущенных копиях АВТОКАДА? Ridder AutoCAD 5 22.07.2010 06:02
Нужен аналог Автокада Ganzil Прочее. Программное обеспечение 9 25.11.2009 07:15
Подскажите как открыть *.exe файл из автокада. Александер Программирование 6 24.06.2005 09:27