|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Создание и редактирование 3Д объектов с использованием .NET
Регистрация: 06.01.2010
Сообщений: 17
|
||
Просмотров: 9510
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Сугубо ИМХО.
Программировать на VBA сейчас уже по меньшей мере опасно - в 2010 версии AutoCAD соответствующий модуль надо специально загружать с сайта Autodesk. А это позволяет сделать предположение, что в ближайшие пару-тройку лет на VBA можно будет поставить крест. Проекты придется переписывать на .NET / ObjectARX (в некоторых случаях и lisp подойдет). Что значит "сохранять координаты в файл"? Координаты чего? Вхождений блоков? Вершин (кстати, вершин чего - граней? Поверхностей? Твердых тел? Отрезков? Полилиний?)? Я бы не задумываясь послал этого кхм... спеца куда подальше и работал на знакомом языке. Цитата:
Скажем так - это один из вариантов. Точнее - один из как минимум 2 вариантов.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
насчёт блоков: пока что мыслю не по-автокадовски) блоком назвал параллелепипед. в идеале модуль должен разбивать модель на параллелепипеды (пока разговоры про аппроксимации, сглаживании кривых и сплайнов опустим, положим, что вся модель состоит из сочетаний параллелепиподов). модуль определяет количество трёхмерных объектов на чертеже и создаёт файл (со структурой файла пока не определился) вида:
<block id=block1> <point id=p1 x=0 y=10 z=10/> <point id=p2 x=0 y=10 z=20/> ... <point id=pi x=x1 y=y1 z=z1/> </block> <block id=block2> ... </block> ... к синтаксису выходного файла не придираться, это только набросок! хотя, предложения по оптимизации вывода только приветствуются.) почему параллелепипеды? потом файлик, пройдя обработку, поступит в одну полусапровскую программку которая кушает только параллелепипеды. насчёт быстродействия и возможностей: С#, как я понимаю, будет побыстрей и повозможностней? насчёт второго способа кроме netload: а что за способ? |
||||
![]() |
|
||||
Еще можно через реестр (так называемый demandload).
Цитата:
Определись что такое "трёхмерная модель помещения/этажа/здания" (какими примитивами AutoCAD это сделано) - тогда будет ясно что и как из чертежа можно получить. |
||||
![]() |
|
||||
интересный вопрос... положим, что параллелепипедами и выдавливаниями/merge'ами (в данный момент нету под рукой автокада, не могу сказать точное название этих инструментов).
что это меняет, для трёхмерных объектов автокад использует принципиально разные объектные модели? |
||||
![]() |
|
||||
Что такое "параллелепипед"? Такого примитива в AutoCAD нет. Есть 3DSOLID. Кроме того параллелепипед можно нарисовать примитивами 3DFACE, можно POLYLINE и т.д. и т.п. У каждого из этих примитивов свои методы получения граничных точек (вершин).
|
||||
![]() |
|
||||
А не .Net 3.0 - 3.5? Я на работе в свойствах своих Acad-проектов (версия акада 2009) юзаю версию фрэймворка 3.5 (если мне не изменяет память, причем, скорее всего не изменяет, т.к. в коде я использовал LINQ, а он появился лишь в версии 3.0)... Интерфейс 2009-го акада использует WPF, а данная технология появилась только в версии .Net 3.0.
Или я чего упустил?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Охотно верю. Но проблема в том, что в 2009 я уже очень давно не эскпериментировал (балуюсь на 2008 и 2010). Учитывая, что 2008 и 2009 (по крайней мере в части ObjectARX) - одного поколения, а также то, что в 2008 используется .NET 2.0, я и предположил, что под 2009 используется 2-я версия.
Конечно, это по идее надо проверить и перепроверить...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
Хотелось бы написать что-то универсальное, но изначально ориентироваться буду на объекты, созданные Extrude'ами и Presspool'ами из контуров с прямыми углами. Вся эта совокупность объектов по легенде будет представлять собой трёхмерную схему помещения. |
||||
![]() |
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811
|
Цитата:
А то звучит навроде как программироание через @$$ Аж мурашки по коже... ~'J'~ |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Олег (jr.), с тебя новое название (можно в личку)
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
![]()
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Проектирование заборов уже в прошлом Регистрация: 29.10.2009
Рязань
Сообщений: 2,089
|
Я бы смотрел в сторону .NET, что C#, что VB.NET
"Охват" этих языков пошире, соответственно литературы больше (в т.ч. профессиональной для "настоящих" программистов), и проживут они явно дольше. Последний раз редактировалось Meknotek, 01.02.2010 в 19:16. |
|||
![]() |
|
||||
Цитата:
Если бы еще и ObjectARX был полностью на .Net - вообще бы малина была... )))
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
BREP тебе в руки. Поиск по файлу справки ObjectARX SDK тебе должен помочь. Ну и эта ссылка тоже: http://through-the-interface.typepad...sing-a-3d.html
P.S.: А тему бы я поменял, на "Как получить информацию о 3DSOLID (вершины, грани) с помощь ObjectARX .NET (C#) ?" Последний раз редактировалось Александр Ривилис, 01.02.2010 в 21:19. |
||||
![]() |
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
А почему нельзя просто explod'ом разбивать 3DSOLID и последовательно получать грани, и вершины?
__________________
...в шее моей жилы железные, и лоб мой - медный... Последний раз редактировалось Pastor, 01.02.2010 в 23:16. |
|||
![]() |
|
||||
Это ты о Kean Walmsley?
![]() Цитата:
Последний раз редактировалось Александр Ривилис, 01.02.2010 в 23:18. |
||||
![]() |
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
А я про чёрта уже удалил. Сам испугался.
![]() Хорошо бы ещё, чтоб он на русском писал, а то непонятно почти ничего.
__________________
...в шее моей жилы железные, и лоб мой - медный... Последний раз редактировалось Pastor, 01.02.2010 в 23:28. |
|||
![]() |
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
Судя по переписке с обозначенного форума Сеньор Менеджер там поначалу накосячил с освобождением объектов. Потом исправлял. Видать это больное место .NET, а .NET под автокад - в особенности. Микрософт велит для детерминированного освобождения native-ресурсов, стоящих за .NET классами-оболочками юзать паттерн Dispose. Применительно к автокаду - это если ума хватит. Где, например, в документации ObjectArx AutoCAD Managed Class Reference сказано, что класс Transaction реализует IDisposable. Я не нашел. Поправьте, если ошибаюсь. Фраза, типа "you must actively call Dispose on the managed wrappers" меня в принципе не устраивает. Что, я должен ко всему подряд применять Dispose() или хватит через раз. Ладно, с Transaction - кто то первый догадался и рассказал всем. А как быть с морем других классов. В конце концов есть же MSDN - образец того, как подобает документировать библиотеки классов. Что, автодеску западло было сделать нормальную документацию по образу и подобию.
Не знаю, "на каком языке удобнее всего" , но надежнее и естественнее всего писать на С++. ObjectARX мощное и хорошо изученное "средство доступа" к AutoCAD. А ежели чего, то всегда есть у кого спросить ![]() ИМХО.
__________________
...в шее моей жилы железные, и лоб мой - медный... |
|||
![]() |
|
|||||
Dispose - это не паттерн, а метод в составе интерфейса IDisposable.
Цитата:
Цитата:
В .Net API AutoCAD полно примеров, в которых класс Transaction инициализируется в блоке using. Учитывая это, любому программирующему на .Net даже без проверки становится ясно, что Transaction реализует IDisposable. То, что для неуправляемых объектов нужно вызывать Dispose - требование, о котором программисты .Net так же знают. Нужно только не забывать, что Dispose() следует вызывать только для тех объектов, которые ты создал сам и НЕ вызывать его для объектов, созданных самим AutoCAD, а не твоим плагином (и это логично). В том же MSDN на эту тему полно информации, так что незачем воду мутить. "Нормальной" (в смысле такой же детальной как ObjectARX) документации по .Net пока нет, однако при желании можно читать ObjectARX - проблем в понимании не возникает. В случае отсутствия управляемой оболочки под тот или иной класс всегда можно самому её написать - тоже не проблема. Цитата:
Эта библиотека собственно и является самим AutoCAD, его ядром, а не просто "средством". Цитата:
_____________________________________________________ п.с. ИМХО .Net давно рулит (за счет удобства, скорости разработки, богатого набора библиотек и наличия новых современных технологий таких как ADO.NET, WPF, LINQ) и будет рулить впредь. AutoCAD написан на неуправляемом С++ ранее, чем появился .Net Framework. У текущей реализации ядра AutoCAD есть такой минус, как отсутствие поддержки многопоточности, что является весьма неприятным моментом реализации ObjectARX. п.с.2 Я не знаю ни одного программиста, перешедшего с C# на С++, но я регулярно вижу на форумах людей, переходящих с С++ на C#. Это о чём-то говорит... п.с.3 Касательно "надёжности" - надёжней .Net,-язык т.к. его код полностью управляемый.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: Последний раз редактировалось hwd, 02.02.2010 в 16:08. |
|||||
![]() |
|
||||
напомню, про UI речь не идёт, планирую разработать плагин, подгружаемый netload'ом. про создания и редактирование 3D-объектов также речь не идёт.
вопрос на данный момент состоит в следующем: по какому закону хранятся в памяти координаты вершин трёхмерных объектов, созданных Extrude'ами и Presspool'ами из контуров с прямыми углами и как наиболее эффективно и безошибочно собрать координаты вершин в удобоваримую структуру а-ля xml? Последний раз редактировалось NR4TR, 02.02.2010 в 20:34. |
||||
![]() |
|
||||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
1. По поводу паттерна, выдержка из MSDN:
Цитата:
Цитата:
3. Цитата:
4. Цитата:
5. По поводу многопоточности. Хотелось бы пример увидеть, как именно однопоточность автокада доставляет неприятности. 6. Цитата:
И еще. Уважаемый гуру Kean Walmsley сделал таки ошибку, связянную с Dispose. Программируя на С++ тоже можно забыть вызвать delete. И чем одно лучше другого? И где тут ".NET надежней"?
__________________
...в шее моей жилы железные, и лоб мой - медный... |
|||||
![]() |
|
||||
Цитата:
Pastor и hwd - кончайте холивар. Предлагаю вопрос о том, что круче C++ или .NET вынести в отдельную тему. Возможно в контексте работы с AutoCAD. По большому счету я согласен с Pastor. В данном же конкретном случае работа с 3DSOLID в .NET (BREP .NET) появилась то ли в AutoCAD 2009, то ли в 2010, а в чистом ObjectARX она была как минимум с AutoCAD R14, т.е. уже 13 лет и "вычищена" в значительно большей степени. Если же автор темы не знает C++, но знает C# и собирается работать только с последними версиями AutoCAD, то можно и на C#. Последний раз редактировалось Александр Ривилис, 02.02.2010 в 22:32. |
||||
![]() |
|
||||
в AutoCAD доступно автоматическое разбиение solid-объектов на элементы?
конечные элементы, конечно, хорошо, но в данном конкретном случае это сродни забиванию гвоздей микроскопом. интересует разбиение сложного солида с прямыми углами на параллелепипеды. |
||||
![]() |
|
||||
|
||||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа со словарями AutoCAD через .Net API | hwd | .NET | 3 | 02.02.2018 15:55 |
Программирование под вертикальные решения автокада | Mazai | Программирование | 11 | 26.06.2008 14:55 |
Программирование в VBA. Не AutoCAD. | mmax | Программирование | 1 | 14.03.2007 08:30 |
Постановка задачи и программирование под AutoCAD | kos | Программирование | 11 | 20.12.2004 13:44 |