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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > C# Программное выделение и подсветка объектов

C# Программное выделение и подсветка объектов

Ответ
Поиск в этой теме
Непрочитано 29.12.2009, 15:41 #1
C# Программное выделение и подсветка объектов
hwd
 
C, C++, C#
 
С-Пб.
Регистрация: 07.10.2009
Сообщений: 2,762

Вопросы в комментариях кода:
Код:
[Выделить все]
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                BlockTable blockTable = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
                BlockTableRecord modelSpace = trans.GetObject(blockTable[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

                List<ObjectId> objects = new List<ObjectId>();                
                foreach (ObjectId asObjId in modelSpace)
                {
                    ed.WriteMessage("\nDXF name: " + asObjId.ObjectClass.DxfName);
                    ed.WriteMessage("\nObjectID: " + asObjId.ToString());
                    ed.WriteMessage("\nHandle: " + asObjId.Handle.ToString());                    
                    ed.WriteMessage("\n");
                    objects.Add(asObjId);
                }             
                //Вопросы:
                //1.Как программно подсветить (не путать с выделением ручками) все объекты, входящие в коллекцию objects?
                //2.Как программно выделить ручками все объекты, входящие в коллекцию objects?

                //Пытался так:
                SelectionSet selection = SelectionSet.FromObjectIds(objects.ToArray());//А дальше застопорился...
            }
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось Кулик Алексей aka kpblc, 29.12.2009 в 16:05.
Просмотров: 11848
 
Непрочитано 29.12.2009, 16:05
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Подсветка - это не Highlight часом?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 29.12.2009, 16:06
#3
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Подсветка - это не Highlight часом?
она родимая.

п.с. подсветить/снять подсветку удалось:

Код:
[Выделить все]
Entity ent = trans.GetObject(asObjId, OpenMode.ForRead) as Entity;
                    ent.Highlight();
//ent.Unhighlight();
перелопачиваю мануал, но там всё не то... я же не из командной строки запрашиваю выбор...
как выделить ручками и снять выделение?

и можно ли как-то быстро переводить режим подсветки в режим выделения ручками и наоборот без необходимости повторно прокручивать всё в цикле?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 29.12.2009 в 16:24.
hwd вне форума  
 
Непрочитано 29.12.2009, 16:28
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


По логике - получить указатель на объект и подсвечивать его... С конкретным кодом я пас
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 29.12.2009, 16:31
#5
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
По логике - получить указатель на объект и подсвечивать его... С конкретным кодом я пас
я же говорю, что с подсветкой и её снятием вопрос отпал. )))
с выделением ручками никак не разберусь.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 29.12.2009, 17:50
#6
Олег (jr.)

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


Цитата:
Сообщение от hwd Посмотреть сообщение
я же говорю, что с подсветкой и её снятием вопрос отпал. )))
с выделением ручками никак не разберусь.
Пробуй
(Подсвеченное красным - обязательно;
синим у меня не работает - пользую А2008)


Код:
[Выделить все]
using System;
using System.Collections.Generic;
using System.Text;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.DatabaseServices;
using AcDb = Autodesk.AutoCAD.DatabaseServices;
using acadApp = Autodesk.AutoCAD.ApplicationServices.Application;
using Autodesk.AutoCAD.ApplicationServices;

[assembly: CommandClass(typeof(SelectionUtils.Selections))]

namespace SelectionUtils
{

    public class Selections
    {
        [CommandMethod("grips", CommandFlags.Redraw)]
        public void tryit()
        {
            Document doc = acadApp.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;
            try
            {
                using (Transaction trans = db.TransactionManager.StartTransaction())
                {
                    BlockTable blockTable = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
                    BlockTableRecord modelSpace = trans.GetObject(blockTable[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
                    List<ObjectId> objects = new List<ObjectId>();

                    foreach (ObjectId asObjId in modelSpace)
                    {
                     ed.WriteMessage("\nDXF name: " + asObjId.ObjectClass.DxfName);
                    ed.WriteMessage("\nObjectID: " + asObjId.ToString());
                    ed.WriteMessage("\nHandle: " + asObjId.Handle.ToString());                    
                    ed.WriteMessage("\n");
                    objects.Add(asObjId);

                    }


                    ed.SetImpliedSelection(objects.ToArray());
                    trans.Commit();//Это обязательно даже если ничего не меняешь в рисунке
                }
            }
            catch (Autodesk.AutoCAD.Runtime.Exception ex)
            {
                acadApp.ShowAlertDialog(ex.Message);
            }
        }
    }
ЗЫ
С Новым Годом и удачи

~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 29.12.2009, 18:01
#7
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
С Новым Годом и удачи
~'J'~
взаимно.

Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
синим у меня не работает - пользую А2008
Код ориентирован на AutoCAD 2009/2010.

Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
Подсвеченное красным - обязательно;
Не верно.
Цитата:
Перед закрытием транзакции, вы должны зафиксировать все сделанные изменения командой Commit. Если изменения не будут зафиксированы (Commit) до закрытия транзакции, произойдет откат (Rollback) всех сделанных изменений в объектах до состояния предшествующего открытию транзакции.
Как видим, никаких "обязательно" нет. Ну произойдёт откат и что с того? Я же не менял ничего. )))
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 29.12.2009, 18:06
#8
Олег (jr.)

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


Цитата:
Сообщение от hwd Посмотреть сообщение
взаимно.


Код ориентирован на AutoCAD 2009/2010.


Не верно.
Как видим, никаких "обязательно" нет. Ну произойдёт откат и что с того? Я же не менял ничего. )))
Мне насчет этого посоветовал ТТ
Я ему верю больше и тебе советую

~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 29.12.2009, 18:10
#9
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
Мне насчет этого посоветовал ТТ
Я ему верю больше и тебе советую
~'J'~
ТТ не знаю. Приведённая мною цитата взята из официального мануала по .NET API AutoCAD 2010 (предполагаю, что это имеет некоторый вес).
Верить хочется аргументированно. )))
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 29.12.2009, 18:18
#10
Олег (jr.)

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


Цитата:
Сообщение от hwd Посмотреть сообщение
ТТ не знаю. Приведённая мною цитата взята из официального мануала по .NET API AutoCAD 2010 (предполагаю, что это имеет некоторый вес).
Верить хочется аргументированно. )))
А он там нашел столько багов что вес как-то уже и не очень...
Просто зарабатывают бабки и игнорируют баги от версии к версии
Подумай хорошо - ты его знаешь (полистай форум
http://discussion.autodesk.com/forum...pa?forumID=152)
много полезного найдешь из его комментариев - тебе-то аглицкий как родной

~'J'~
Олег (jr.) вне форума  
 
Непрочитано 29.12.2009, 18:25
#11
Pum-purum

PHP-разработчик
 
Регистрация: 12.05.2008
Ижевск
Сообщений: 1,166


Ребята, вы вообще о чем? Че-то флудите тут по своей теме, остальным форумчанам ведь тоже интересно!
Pum-purum вне форума  
 
Автор темы   Непрочитано 29.12.2009, 18:25
#12
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
тебе-то аглицкий как родной
К сожалению это не так.

Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
столько багов...
Просто зарабатывают бабки и игнорируют баги от версии к версии...
С этим не спорю

Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
ты его знаешь
нет, мы не знакомы )))

Касательно закрепления/отката транзакции - не вижу никаких подводных камней в данном примере.

Но вопрос был всё же не про транзакцию, а про выделение ручками - это меня сейчас интересует больше )))
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 29.12.2009, 18:41
#13
Олег (jr.)

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


Цитата:
Сообщение от hwd Посмотреть сообщение

Но вопрос был всё же не про транзакцию, а про выделение ручками - это меня сейчас интересует больше )))
Мой пример разве не работает?

Я проверял у меня ручки подсвечиваются

~'J'~
Олег (jr.) вне форума  
 
Непрочитано 29.12.2009, 18:42
#14
Александр Ривилис

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


Олег же тебе написал как это сделать. Ключевая фраза:
Код:
[Выделить все]
ed.SetImpliedSelection(objects.ToArray());
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 29.12.2009, 18:50
#15
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Олег же тебе написал как это сделать. Ключевая фраза:
Код:
[Выделить все]
ed.SetImpliedSelection(objects.ToArray());
я её прозевал - она же не красным цветом )))) щас попробую...
Да, так заработало.

Олег (jr.) Спасибо! Я млин с этим полдня копался )))))
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 29.12.2009, 18:59
#16
Олег (jr.)

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


Цитата:
Сообщение от hwd Посмотреть сообщение
я её прозевал - она же не красным цветом )))) щас попробую...
Да, так заработало.

Олег (jr.) Спасибо! Я млин с этим полдня копался )))))
Рад помочь

Успехов

~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 29.12.2009, 19:16
#17
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Олег, а снять выделение ручками как правильно?

я пробовал так:

Код:
[Выделить все]
ed.SetImpliedSelection(null);
и
Код:
[Выделить все]
ed.SetImpliedSelection(new ObjectId[1]);
оба варианта не рабочих...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 29.12.2009, 20:09
#18
Олег (jr.)

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


Цитата:
Сообщение от hwd Посмотреть сообщение
Олег, а снять выделение ручками как правильно?

я пробовал так:

Код:
[Выделить все]
ed.SetImpliedSelection(null);
и
Код:
[Выделить все]
ed.SetImpliedSelection(new ObjectId[1]);
оба варианта не рабочих...
Андрей,

На моем работает:

Код:
[Выделить все]
                    ed.SetImpliedSelection(null);
   
                    trans.Commit();
Может глаз замылился - где-то еще чего упустил?

~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 30.12.2009, 10:40
#19
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
Андрей,

На моем работает:

Код:
[Выделить все]
                    ed.SetImpliedSelection(null);
   
                    trans.Commit();
Может глаз замылился - где-то еще чего упустил?

~'J'~
Работает? Странно... У меня это:



не ест null в качестве параметра...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 30.12.2009, 12:00
#20
Олег (jr.)

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


У меня такого нет - смотри рисунок

~'J'~
Миниатюры
Нажмите на изображение для увеличения
Название: Noerrors.JPG
Просмотров: 145
Размер:	32.9 Кб
ID:	31335  
Олег (jr.) вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > C# Программное выделение и подсветка объектов

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
выделение объектов с помощью клавиатуры phantom_l AutoCAD 6 24.02.2011 13:56
Обрезка объектов по принципу программы КРЕДО, Выделение объектов находящихся внутри заданного контура (автоматическая обрезка чертежа по кнтуру) МишаИнженер AutoCAD 6 25.08.2009 16:17
Выделение одинаковых объектов. Timofeeve AutoCAD 11 06.03.2009 09:59
Выделение объектов мышью из под макроса на VBA Автон Программирование 2 30.03.2006 06:45