Реализация небольшого плагина WPF.Как организовать изменение свойств примитивов?

Автор Тема: Реализация небольшого плагина WPF.Как организовать изменение свойств примитивов?  (Прочитано 8017 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн maximum62Автор темы

  • ADN OPEN
  • Сообщений: 4
  • Карма: 0
 Добрый день. Я пытаюсь написать небольшой плагин который позволяет изменять некоторые свойства объектов на чертеже, проблема в том что я пытаюсь найти наиболее правильный способ реализации.  В качестве отображения информации пытаюсь использовать WPF , и если я правильно понимаю, то все нужно сделать по паттерну MVVM. С данным паттерном только только начал знакомится, так что не судите строго. Как я понял то нужно описать класс оболочку для обеспечения доступности к свойствам объекта автокада, может кто нибудь подсказать как это правильно сделать?
« Последнее редактирование: 30-11-2014, 02:16:45 от maximum62 »

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Реализация небольшого плагина
« Ответ #1 : 28-11-2014, 16:18:03 »
Т.е. вопрос о получении всех графических примитивов, расположенных в определённом слое уже отвалился?  ;D По поводу MVVM, простым языком, в общих чертах можно прочитать тут.


Оффлайн maximum62Автор темы

  • ADN OPEN
  • Сообщений: 4
  • Карма: 0
Re: Реализация небольшого плагина
« Ответ #2 : 28-11-2014, 16:35:42 »
Ну тут, да, отвалился со временем) этот пример то я разбирал, просто там по сути класс в модели уже готовый для работы, мне же нужно подготовить классы примитивов для их обработки, и вот тут как раз начинаются проблемы и вопросы, каким образом можно это можно реализовать ? опять же есть предположение сделать дополнительный класс в котором в качестве свойств будет список объектов чертежа, и соответственно установлены get и set для необходимых свойств, но вот реализовать не получается это, да и кажется что подход не верный

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Реализация небольшого плагина
« Ответ #3 : 28-11-2014, 16:44:59 »
Ну тут, да, отвалился со временем)
В том смысле, что отпала надобность? Или всё же был написан код получения идентификаторов всех примитивов, находящемся на некотором слое? Если второй вариант, то любопытно было бы глянуть для сравнения.

эту шпаргалку то я читал, просто там по сути класс в модели уже готовый для работы, мне же нужно подготовить классы примитивов для их обработки, и вот тут как раз начинаются проблемы и вопросы, каким образом можно это можно реализовать ?
Я не понял вопроса. Что именно не ясно из материала, обозначенного по ссылке? Кроме того, никто ведь силком не заставляет использовать именно MVVM. Кстати, очень хорошая книжка по паттернам указана здесь в п.17.

Какие свойства каких объектов планируется изменять и как это ожидаемо должно выглядеть? Смотрели PropertyGrid, может это похоже на ожидаемое?

Оффлайн maximum62Автор темы

  • ADN OPEN
  • Сообщений: 4
  • Карма: 0
Re: Реализация небольшого плагина
« Ответ #4 : 28-11-2014, 16:55:02 »
Получилось сгруппировать в словарь по ключу - слой, но код получился корявенький, в более читаемый вид приведу, выложу. Для той задачи которую я сейчас пытаюсь выполнить, это уже как второстепенный подпункт. Сначала я пытаюсь просто реализовать  изменение свойств объектов. В качестве первого свойства пытаюсь изменить цвет объекта. Из материала то все ясно, просто у меня пока что не получается адаптировать всю информацию под данную реализацию. Если я правильно понимаю то MVVM наиболее "правильный" если использовать WPF. Не смотрел, сейчас посмотрю.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Реализация небольшого плагина
« Ответ #5 : 28-11-2014, 16:57:12 »
Всё, я домой. Если интересно, то для сравнения вот код получения всех примитивов, находящихся в базе данных чертежа на конкретном слое:
Код - C# [Выбрать]
  1. // © Andrey Bushman, 2014
  2.  
  3. /// <summary>
  4. /// Sample: get all ids of entities which are located on some layer
  5. /// (0 for example).
  6. /// </summary>
  7. [Rt.CommandMethod("Test", Rt.CommandFlags.Modal)]
  8. public void Command_Test() {
  9.     Ap.Document doc = cad.DocumentManager.MdiActiveDocument;
  10.  
  11.     if (null == doc) {
  12.         return;
  13.     }
  14.  
  15.     Db.Database db = doc.Database;
  16.     Ed.Editor ed = doc.Editor;
  17.  
  18.     Rt.RXClass entityRXType = Rt.RXClass.GetClass(typeof(Db.Entity));
  19.  
  20.     using (doc.LockDocument()) {
  21.         // Ids of all entities
  22.         // Code of the GetDBObjectIds method look here:
  23.         // http://adn-cis.org/forum/index.php?topic=1060.msg5315#msg5315
  24.         Db.ObjectId[] entityIds = db.GetDBObjectIds(n => !n.IsErased &&
  25.             !n.IsEffectivelyErased && n.ObjectClass.IsDerivedFrom(
  26.             entityRXType));
  27.  
  28.         // target layer
  29.         Db.ObjectId layerId = db.LayerZero; // for example
  30.         // result what you need
  31.         List<Db.ObjectId> resultIds = new List<Db.ObjectId>();
  32.  
  33.         using (Db.Transaction tr = db.TransactionManager
  34.             .StartTransaction()) {
  35.             foreach (Db.ObjectId id in entityIds) {
  36.                 Db.Entity entity = tr.GetObject(id, Db.OpenMode
  37.                     .ForRead, false, true) as Db.Entity;
  38.  
  39.                 if (entity.LayerId == layerId) {
  40.                     resultIds.Add(id);
  41.                 }
  42.             }
  43.             tr.Commit();
  44.         }
  45.     }
  46. }

Отмечено как Решение maximum62 07-12-2014, 23:46:15

Оффлайн German

  • ADN Club
  • **
  • Сообщений: 84
  • Карма: 13
Re: Реализация небольшого плагина
« Ответ #6 : 28-11-2014, 18:02:29 »
maximum62, может полезно будет, если не читал еще http://adn-cis.org/forum/index.php?topic=804.msg3134#msg3134

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Re: Реализация небольшого плагина
« Ответ #7 : 28-11-2014, 22:12:27 »
maximum62, настоятельно советую изменить название темы в соответствии с правилами форума!
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн maximum62Автор темы

  • ADN OPEN
  • Сообщений: 4
  • Карма: 0
German,  действительно оказалось полезно. Решил так же организовать структуру по шаблону mvvm.