Архитектурные решения различных форм и помещений

Новый взгляд на работу с базой данных файла автокада…

Итак, вступление:

Каждый из нас мечтает, чтобы в автокаде была возможность легкого и удобного оперирования объектами с целью получения нужных отчетов. Но реализовывать это зачастую сложно (разве что в ADT проще с этим делом, но и то не во всех случаях). Размышляя над этой темой, я родил следующее:

Код:
static void Main(string[] args)
{
var a = new { ID = 1, Name = «Вася», Town = «СПб» };
var b = new { ID = 2, Name = «Коля», Town = «Москва» };
var c = new { ID = 3, Name = «Петя», Town = «СПб» };

var list = MakeList(a);
list.Add(a);
list.Add(b);
list.Add(c);

var t = list.Where(n => n.Town == «СПб»);
foreach (var item in t)
{
Console.WriteLine(item);
}
Console.Read();
}

public static List<T> MakeList<T>(T itemOftype)
{
List<T> newList = new List<T>();
return newList;
}

Что означает возможность, приведенная в качестве примера мною в выше указанном коде?
Кому-то может показаться топик бессмысленным, однако – сие не так! Я инженер-строитель, и мыслю кирпичами, да керамзитобетоном :))). Поясняю на конкретном примере (ради чего всё и замышлялось):

Все объекты файла автокада хранятся в словаре, в виде экземпляров класса object. Для того, чтобы юзать нормально объект, его нужно вытащить и явно привести к нужному типу.

У меня есть генератор отчетов, который я с легкостью могу внедрить в автокад (уже пробовал – получалось на раз!!!!). Генератор имеет так же встроенный, гибкий и интуитивный дизайнер и экспортирует данные в более чем 20 форматов + позволяет прямо в нем писать программный код как на C#, так и на VB.NET, с использованием диалоговых форм и т.п. – мощнейшая штука!!!.
Теоретически, теперь я могу создать любой LINQ-запрос, который мне моментально выдаст ЛЮБОЙ отчет касательно инфы, хранящейся в файле автокада (какой мне только заблагорассудится)!!!! Делается это элементарно:
Запускаю команду, которая пробегает по всем экземплярам файла базы данных автокада, считывая GetType каждого экземпляра и добавляя их в некий IEnumerable<Type>. затем делаю LINQ-запрос, удаляющий из этого списка дубликаты.
После чего запускаю команду, которая для каждого экземпляра, лежащего в IEnumerable<Type> создавала свой IEnumerable<КОНКРЕТНЫЙ_ТИП>.
После чего снова пробежавшись по базе объектов автокада, раскидывает копии (а по сути -ссылки на оригиналы) в соответствующие типу объекта его IEnumerable<КОНКРЕТНЫЙ_ТИП>. Т.о. через AsEnumerable<T> мы можем теперь оперировать данными как угодно!!!! Издавна генерация отчетов, оперирование информацией – было огромным гемором в Автокаде, а теперь – все решается на раз!!!! )))))

Кому-то может показаться, что все это сканирование очень долгим…….дерево в файле очень глубокое и узлов там очень много… Однако, позвольте не согласиться =))))
Это решается на раз: нужно поставить обработчики событий на добавление/удаление/изменение объектов из базы данных автокада. И при срабатывании события – сразу же добавлять инфу в нужный IEnumerable<КОНКРЕТНЫЙ_ТИП>. И всех делов-то!!!!

Мне могут возразить, мол автокадосвкий файл – это же не просто словарь…это дерево словарей…

Но!!! Дело в том, что имея на руках наборы IEnumerable<T>, нам будет побоку как глубоко и в какой ветви лежит объект. в нашем IEnumerable<T> (для каждого типа свой) имеется линк на нужный нам объект (как бы глубоко он не был зарыт в запутанных словарях автокада).
Наборы созданных нами IEnumerable<T> – то что-то вроде содержания в книге!
ВИВАТ LINQ!!!
ИМХО

на форум




Комментарии (3) »

  1. Подсчет объемов земляных масс- как можно пристроить к вышенаписанному?

    Comment by евгений — 24.01.2010 @ 20:29

  2. на данный момент разрабатываю плагин на озвученную тему, так что через пару месяцев, надеюсь, что и земляные массы можно будет прикручивать. Прикручивать можно всё, что содержит информацию, необходимую для получения отчёта. правда опубликовываться это будет на др. сайте.

    Comment by Compositum — 27.01.2010 @ 16:26

  3. если сделаешь плагин для подсчета земляных масс будь другом скинь мне на и-мэйл eug3@rambler.ru
    заранее премного благодарен. Вообще я слежу за твоими публикациями. Одно слово-молодец.Удачи!!!

    Comment by евгений — 30.01.2010 @ 16:37

RSS-лента комментариев к этой записи. TrackBack URL

Оставить комментарий