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

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

Можно ли прорисовывать блоки в AutoCAD2007 через C#

Ответ
Поиск в этой теме
Непрочитано 19.12.2011, 13:31
Можно ли прорисовывать блоки в AutoCAD2007 через C#
ghost
 
Регистрация: 19.12.2011
Сообщений: 35

Добрый день! Уважаемые участники форума!
Я начинающий программист , хорошо знаю AutoCAD. Хотел узнать, можно ли готовые блоки которые хранятся в *.dwg файле, вставлять и прорисовывать к примеру в ряд, в новом документе AutoCAD ???
И если это возможно, может быть есть у кого нибудь какой нибудь исходник..... или ссылка на инфу об этом!
На сколько знаю Autodesk-ом выпускаются библиотека ObjectARX для С++ в которой я описания подобных манипуляций не нашел, но я так понял что с AutoCAD можно работать через NET и библиотеки есть в самом AutoCAD-е ,вот только инфы по ним нет.....
Просмотров: 15123
 
Непрочитано 12.01.2012, 11:20
#21
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от hwd Посмотреть сообщение
Может конечно в Lisp'е это и проще/короче делается, прописывая все параметры сразу в виде списка, но ведь C# это не Lisp
Да тут беда не в С# (в AutoLispe например задать все параметры списком, можно только при создании через DXF - а через DXF далеко не все примитивы разумно создавать, через ActiveX все параметры все равно надо так-же прописывать "врукопашную"), в F# например, тоже можно задать все параметры (мутабельные свойства объекта) сразу при создании, беда в .NetAcad что требуется описывать много "дополнительных" (по отношению к лиспу, либо-же объектной модели) действий - что в общем расширяет возможности - но существенно прибавляет кода - а именно транзакции, открытия для записи, создание объектов точка (Point3D)... Вот например официальная документация - снизу "свернутый" пример на VBA - он в 3 раза короче, а если на конкретно этот пример еще и лиспом написать - еще меньше будет.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 12.01.2012, 11:24
#22
hwd

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


Лично для меня читабельность важнее краткости, поэтому данное обстоятельство меня не смущает. Кроме того, в .Net-коде можно управлять транзакцией (код увеличивается в том числе и из-за этого, но оно того стоит), а в VBA, насколько я вижу - нет. VBA в AutoCAD мне чем-то напомнил VBA в MS Access (чёрный ящик).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 12.01.2012, 11:36
#23
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


То hwd - а Вы лисп читать умеете? Вопрос серьезный - ибо с моей точки зрения (хоть он действительно и непривычный) формат лиспа один из самых читабельных - чего точно не скажешь про любой диалект С (про конкурсы не читаемости, либо "спрятанности" пасхального яйца в коде на С я думаю Вы знаете).
з.ы. любой лисп код можно автоматически сделать читаемым в смыле отсупов и фрагментов кода.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 12.01.2012, 11:48
#24
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Может конечно в Lisp'е это и проще/короче делается, прописывая все параметры сразу в виде списка,
Не "может", а точно. Проще и короче во много раз. И не "это не будет 2-3 строчки", а будет одна строчка.
И не "все сразу в виде списка", а как удобнее - и по отдельности, и списком.

И можно функцию с аргументами выполнять любым способом - хоть из командной строки, хоть из меню, хоть из внешних файлов. Заодно в виде аргументов можно и символьное имя какой-то другой функции передать.

Цитата:
но ведь C# это не Lisp
То-то и оно. Это гораздо хуже для таких задач. Хотя, конечно, в каких-то случаях (не столь их много), конечно надо .NET использовать (коль ничего лучше не дали). Но вам "соверен" сказал - а вассалы бросились исполнять. Он и VBA уже давал.

А ну-ка, сделайте функцию или команду для множественной вставки любого блока, которой передается имя блока, масштабы вставки и, факультативно, угол поворота.

1. Во время процесса вставки до указания точки изображение блока висит на курсоре в отмасштабированном виде.

2. После указания точки - визуальный (или клавиатурный) поворот.

3. Блок может иметь (а может не иметь) атрибуты любых типов.

4. Вставка (с висящим блоком) запрашивается, пока не будет пустой ввод или нажатие ESC.

5. И работать должно в любой системе координат.

6. Да чтобы можно было в меню записать.

Цитата:
Оно того стоит
Вот и посмотрим, чего "оно" стоит. И хто оно такое.
ShaggyDoc вне форума  
 
Непрочитано 12.01.2012, 11:58
#25
hwd

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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
То hwd - а Вы лисп читать умеете? Вопрос серьезный - ибо с моей точки зрения (хоть он действительно и непривычный) формат лиспа один из самых читабельных - чего точно не скажешь про любой диалект С
Пожалуй я не правильно выразился...
Простые вещи читать могу, в рамках функций AutoLisp, которые ещё помню. А поскольку помню я не так уж и много (например тот же VisualLisp я вовсе не знаю), то... Мне привычней синтаксис Си, чем Лиспа. Вполне допускаю, что для кого-то лисп более читабелен (имхо - это зависит от того, какие языки знает программер). Если бы я знал лисп, то наверняка его лаконичность мне была бы более понятной и предпочтительной.
Цитата:
Но вам "соверен" сказал - а вассалы бросились исполнять. Он и VBA уже давал.
я писал на C# задолго до того, как стал использовать его в программировании под автокад. Если бы .Net API не было, я бы писал в автокаде на чём-то другом (скорее всего на лиспе). Не хочу раздувать холивар аля "лисп или дотнет".
Цитата:
Вот и посмотрим, чего "оно" стоит. И хто оно такое.
На C# я не привязан к AutoCAD и всё то, что может лисп - я смогу сделать на дотнете (поправьте, если ошибаюсь). Так что "оно" того стоит (имхо). К примеру: вы из лиспа с подшивками сможете работать (спрашиваю, потому как на самом деле не знаю ответа)?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 12.01.2012 в 12:07.
hwd вне форума  
 
Непрочитано 12.01.2012, 12:02
#26
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


ShaggyDoc - Сейчас Вам на C# _insert вызовут - и скажут ГОТОВО - а потом еще и ссылку найдут - и скажут - а ведь у Вас же то-же самое.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 12.01.2012, 12:12
#27
hwd

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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
ShaggyDoc - Сейчас Вам на C# _insert вызовут - и скажут ГОТОВО - а потом еще и ссылку найдут - и скажут - а ведь у Вас же то-же самое.
Я так понял, что Дима_ видит существенную разницу (по смыслу содержимого) между кодом Волмслея и кодом Олега... Иначе этой фразы бы не было... Либо действительно считает что "_insert" это "то же самое" (с) - должен огорчить, что не разделяю этого мнения (т.е. это не то же самое).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 12.01.2012, 12:20
#28
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Я не смотрел коды, но про _insert естественно написал как шутку. Просто как-то была большая тема где ShaggyDoc утверждал что подобное можно реализовать только командными методами - а я там исполнял без них. Про ссылки в предыдущем посте я имел в виду ссылку ShaggyDoc'а.
p.s. она кстати
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 12.01.2012 в 12:33.
Дима_ вне форума  
 
Непрочитано 12.01.2012, 12:49
#29
Сергей Богатов


 
Регистрация: 21.02.2009
Сообщений: 825


Offtop:
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
А ну-ка, сделайте функцию или команду для множественной вставки любого блока, которой передается имя блока, масштабы вставки и, факультативно, угол поворота.
1. Во время процесса вставки до указания точки изображение блока висит на курсоре в отмасштабированном виде.
2. После указания точки - визуальный (или клавиатурный) поворот.
3. Блок может иметь (а может не иметь) атрибуты любых типов.
4. Вставка (с висящим блоком) запрашивается, пока не будет пустой ввод или нажатие ESC.
5. И работать должно в любой системе координат.
6. Да чтобы можно было в меню записать.
Это конечно оффтопик и уже обсуждалось, но симметричный вопрос:
А ну-ка, сделайте функцию или команду в LISPe чтоб можно было общаться с подшивкой
__________________
Я-проектировщик бывший проектировщик!
Сергей Богатов вне форума  
 
Непрочитано 12.01.2012, 13:00
#30
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Если кому интересно мое резюме по поводу AutoLisp\.Net - то общий ответ такой - лисп хороший, простой, хорошо совместимый, нетребовательный и удобный инструмент - но Autodesk на него положил - так что, если хотите остаться "на плаву" изучайте .Net.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 12.01.2012, 13:22
#31
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
ShaggyDoc утверждал что подобное можно реализовать только командными методами - а я там исполнял без них
Скажем так - пытался исполнять, отбросив невыполнимые и неинтересные тебе условия. А это незачет. И очень усложнив (ради доказательства прынцыпа) код. Хотя как этюд получилось очень интересно. Но не для "боевого" применения.

Цитата:
А ну-ка, сделайте функцию или команду в LISPe чтоб можно было общаться с подшивкой
А зачем с ней общаться? Что, намек на то, что в объектной модели нет (я не знаю)?

Подшивки - хороший инструмент для интерактивной работы пользователя. Для этого и сделан, а не для программирования. Если понадобится такой же результат, как от применения подшивки, я сделаю его другими способами. Более простыми.

Вообще не надо пытаться влезать с программированием в "ручные" средства. Вот, например (ближе к теме) - динамические блоки. Замечательная вещь для обычных пользователей - делать некоторую параметризацию изображений путем установки разных свойств. Т.е. задавая всякие свойства, нажимая кнопочки и прочее. Дает хорошие результаты, недаром тема так популярна. Потом с динамическими блоками начинают работать программисты и начинаются мучения.

А этого просто не надо делать - надо не сами динамические блоки создавать и изменять, а конечный результат - т.е. требуемое изображение, безо всяких лишних движений. А результат можно получить разными способами.
ShaggyDoc вне форума  
 
Непрочитано 12.01.2012, 13:41
#32
Сергей Богатов


 
Регистрация: 21.02.2009
Сообщений: 825


Offtop:
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
А зачем с ней общаться?
Это тема другого разговора... Например для того чтоб в её свойства записывать данные которые потом отображаются в поле чертежа. Или "обрабатывать" только те листы, которые привязаны к подшивке. И т.п.
__________________
Я-проектировщик бывший проектировщик!
Сергей Богатов вне форума  
 
Непрочитано 12.01.2012, 13:55
#33
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


ShaggyDoc
>>А ну-ка, сделайте функцию или команду для множественной вставки любого блока, которой передается имя блока, масштабы вставки и, факультативно, угол поворота.
>>1. Во время процесса вставки до указания точки изображение блока висит на курсоре в отмасштабированном виде.
>>...
А если еще хочется немодального окошка с параметрами команды во время работы команды?
zamtmn вне форума  
 
Непрочитано 12.01.2012, 14:00
#34
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Скажем так - пытался исполнять, отбросив невыполнимые и неинтересные тебе условия.
Там в коментариях есть сноски - где эти условия прекрасно выполняються - я думаю Вам уж точно понятно как, если мне такая функция понадобиться - я ее сделаю и выложу, а так ради доказательства самому себе - мне не надо (я точно знаю что можно) - ничего невыполнимого из то задачи нет. Хотя код действительно получился геморный - не спорю (в общем я в той теме еще до того писал - что возни с ним много).
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
А этого просто не надо делать - надо не сами динамические блоки создавать и изменять,
У меня была конкретная задача (заказ на программу) которая после долгих согласований лучше всего была решенна, в том числе и с использованием динамических блоков (програмным считыванием и модификацией дин. параметров) - более того без них бы она усложнилась многократно (обойтись было-бы можно - но с очень сильным усложнением самого алгоритма).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 12.01.2012, 14:10
#35
hwd

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


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Подшивки - хороший инструмент для интерактивной работы пользователя. Для этого и сделан, а не для программирования.
Не согласен - с подшивкой нередко требуется работать и программно, например для того, чтобы проверить правильность её структуры, наличие нужных свойств и их заполнение. Либо (к примеру) получение своего рода полного "реестра" всего того, что имеется в проекте (вроде оглавления, в котором перечислены все разделы, листы в их составе, и наименования видов на этих листах) - эта информация может быть записана в doc-файл и прилагаться к архиву проекта при сдаче его в архив организации. Или, др. пример - вам нужно пакетно обработать все листы подшивки (что-то подправить/проверить), а это значит, что вам нужно выбрать только те чертежи, которые содержат такие листы, и среди существующих в них листов выбрать именно те, что включены в состав подшивки.

Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Если понадобится такой же результат, как от применения подшивки, я сделаю его другими способами. Более простыми.
Вообще не надо пытаться влезать с программированием в "ручные" средства.
Вычерчивание линий и кружочков - тоже "ручные" средства, однако это вас не смущает.

Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Вот, например (ближе к теме) - динамические блоки. Замечательная вещь для обычных пользователей - делать некоторую параметризацию изображений путем установки разных свойств. Т.е. задавая всякие свойства, нажимая кнопочки и прочее. Дает хорошие результаты, недаром тема так популярна. Потом с динамическими блоками начинают работать программисты и начинаются мучения.
Разумеется всё должно быть в меру. Если определения блоков можно предварительно создать вручную и их набор фиксирован, то лучше конечно же вручную их и сделать. А если множество определений блоков должно формироваться на основе каких-то внешних данных, то возможно, что программно это будет выполнить проще (зависит от сложности определения блока). У меня (к счастью) нет потребности программного создания определения блоков.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 12.01.2012, 21:01
#36
Salt

Josser
 
Регистрация: 09.11.2011
Сообщений: 66


Цитата:
Сколько кода, чтобы всего лишь создать блок и вставить! А если сотни всяких блочков вставлять, с разными масштабами, поворотами, разнотипными атрибутами?
Может я чего не понял, но кто мешает создать собственную библиотеку типа rucadNetLib.dll, где каждый метод каждого класса может быть достаточно сложным (объемистым) внутри, но использование его клиентским кодом будет крайне простым (в одну строчку). Например, пусть там будет в некотором классе метод EntMake(TypedValue[] args), делающий ровно тоже, что и функция entmake из автолиспа. Да, этот метод будет содержать сотню строк кода, но ведь написать-то его надо всего один раз. Принципы программирования никто не отменял: вызовы методов низкого уровня (со всеми транзакциями и прочими нудными подробностями) упаковываются в простые для вызова методы более высокого уровня. А из этих методов высокого уровня формируется служебная библиотека, которая станет неотемлемой частью ваших будущих проектов. Все, как в "САПР на базе...". Даже названия методов для такой .NET-библиотеки можно взять оттуда, сменив только стиль(нотацию). Будет что-то вроде RuGet...()

Последний раз редактировалось Salt, 12.01.2012 в 21:26.
Salt вне форума  
 
Непрочитано 13.01.2012, 11:36
#37
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
но кто мешает создать собственную библиотеку типа rucadNetLib.dll, где каждый метод каждого класса может быть достаточно сложным (объемистым) внутри, но использование его клиентским кодом будет крайне простым
Никто не мешает. Просто, на мой взгляд, не доросли еще AutoCAD-Net-программисты до понимания простых вещей. Да и сколько их - 1.52 штуки. И пока учатся блоки вставлять.

Это же просто - классный профессиональный программист делает библиотеки (с использованием любых их любимых систем), а прикладные (в том числе простые инженеры) их используют. Примером может служить DOSLib. Она была еще во времена Автокад11 (1990 год), переписывалась в разных вариантах. Во всем мире используют.

Давно предлагаю желающим мой диалог XML-меню переделать на .NET. Тут как раз все основания - и визуальность в стиле .NET сделать, и "немодальность", и XML используется. И наглядно доказать, насколько кто быстрее, и что проще дистрибутив NET притащить, чем команду регистрации выполнить. И насколько красивше.

И все могли бы использовать. Все исходники готов дать (или подробное ТЗ), но желающих нет. Догадываюсь, почему.
ShaggyDoc вне форума  
 
Непрочитано 13.01.2012, 12:02
#38
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Давно предлагаю желающим мой диалог XML-меню переделать на .NET.
Ну я пока не слышал - но давайте так - Вы подробно описываете что делает Ваш диалог (такое постфактум ТЗ) - я делаю один-в-один на .Net - выкладываю исходники - но Вы "торжественно клянетесь" - что впредь и везде будуте использовать только его вместо своего (а иначе кому он еще нужен) идет?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 13.01.2012, 12:52
#39
hwd

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


2 Дима_
Я не вижу смысла в велосипедостроении, поскольку уже имеется готовое решение от Майкрософта в виде XAML. Если данные хранить в этом формате, то их визуализация будет происходить автоматом (это же WPF).

имхо
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 13.01.2012, 13:23
#40
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


2 HWD я тоже не вижу смысла в написании на .Net диалога аналогичного ShaggyDoc'овского, просто Мэтр (как я понял) намекает, что на .Net для этого надо быть "семипядным", а мне кажеться что он (диалог естественно) просто никому не нужен, вот я и спросил - нужен ли он ему (реально, а не "а вот напишите мне - а я посмотрю как у Вас это получится"). Про XAML я естественно знаю, но, допускаю что, может быть нужен именно XML (в определенном формате) - можно его в XAML перевести, либо с TreeView c XmlNode связать - вопрос технически простой.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Можно ли прорисовывать блоки в AutoCAD2007 через C#

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
Мониторы LCD CRT Разное 94 17.06.2008 10:51
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46
Как можно открыть чертеж через LISP на котором стоит пароль? ivspec LISP 7 10.02.2006 17:36
Можно ли через VBA динамически двигать объекты? {Smirnoff} Программирование 4 11.12.2003 01:14