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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > AutoCAD и delphi 7, добавление шаблонов

AutoCAD и delphi 7, добавление шаблонов

Ответ
Поиск в этой теме
Непрочитано 24.12.2011, 17:51 #1
AutoCAD и delphi 7, добавление шаблонов
zebra87
 
1с программист
 
Тамбов
Регистрация: 24.12.2011
Сообщений: 16

Всем доброго времени суток. Есть вопрос к профессионалам данного портала, мне нужно добавлять шаблоны в автокад, причем по несколько штук на чертеж. Примитивы чертить не проблема, а вот как пытаюсь добавить шаблон, сразу ошибка. Помогите пожалуйста, гугл мне не очень помог, везде только рисование примитивов, а про шаблоны ни слова.
Пробывал и добавлять шаблоны в блок Block.AddShape и на прямую, т.е. просто AddShape, ни в какую, выдает ошибки то OLE то типо не хватает каких то записей в какой то таблице((( я в этом профан, перечитал много литературы, но про шаблоны нигде ничего не сказано.
Просмотров: 10193
 
Непрочитано 24.12.2011, 19:31
#2
Александр Ривилис

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


Цитата:
Сообщение от zebra87 Посмотреть сообщение
а вот как пытаюсь добавить шаблон, сразу ошибка
Может пояснишь что за шаблоны ты добавляешь? Точнее что ты понимаешь под шаблоном (в терминах AutoCAD)?
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 24.12.2011, 19:42
#3
zebra87

1с программист
 
Регистрация: 24.12.2011
Тамбов
Сообщений: 16
<phrase 1=


*.dwt Если не программно, а самими средствами автокада, то можно шаблон в блок добавить указать масштаб и место куда вставлять, и вставляет, а вот программно нужно, а оказалось проблемой(((


procedure TForm1.Button1Click(Sender: TObject);
var
AutoCAD, Tab : OleVariant;
ModelSpace, Acad : OleVariant;
AcadPoint : OleVariant;
BlockName: string;
Block, BlkRef: OleVariant;
begin
BlockName:= 'New Block';
AcadPoint:=VarArrayCreate([0, 2], VT_R8);
AcadPoint[0]:=1000;
AcadPoint[1]:=1000;
AcadPoint[2]:=0.0;

try
Acad:=GetActiveOleObject('AutoCAD.Application');
except
Acad:= CreateOleObject('AutoCAD.Application');
end;
Acad.visible:= True;
ModelSpace := Acad.ActiveDocument.ModelSpace;
//ModelSpace.AddShape('C:\1.dwg',StartPoint,0.01,0.0).Update;
Block:= Acad.ActiveDocument.Blocks.Add(AcadPoint, BlockName);
//Block.AddTable(AcadPoint,1,1,10,10);
Block.AddShape('C:\1.dwt',AcadPoint,0.01,0.01).Update;

end;

Вот так делаю, и на строке Block.AddShape('C:\1.dwt',AcadPoint,0.01,0.01).Update; выдает ошибку про отсутствие записи в таблице и тут я впал в ступор

Последний раз редактировалось zebra87, 24.12.2011 в 19:51. Причина: Добавление исходного кода
zebra87 вне форума  
 
Непрочитано 24.12.2011, 20:07
#4
ShaggyDoc

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


Шаблон (dwt) не может быть "добавлен" в чертеж! Шаблон всего лишь прототип, по одному из которых создан чертеж.
В чертеж можно внедрять определения блоков (в том числе из файлов) и делать вставки экземпляров блоков.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 24.12.2011, 20:52
#5
zebra87

1с программист
 
Регистрация: 24.12.2011
Тамбов
Сообщений: 16
<phrase 1=


А как это можно реализовать? просто пробывал и dwg добавлять никак. Просто задание интересное, есть база данных в дельфях этих чертежей (шаблонов) каких либо схем, вот их нужно добавить на 1 чертеж, что бы получилась полноценная схема?
zebra87 вне форума  
 
Непрочитано 24.12.2011, 21:17
#6
trir


 
Регистрация: 18.12.2010
Сообщений: 5,051


Так наверно надо шаблоны перевести в блоки или добавлять внешней ссылкой
trir вне форума  
 
Автор темы   Непрочитано 24.12.2011, 21:29
#7
zebra87

1с программист
 
Регистрация: 24.12.2011
Тамбов
Сообщений: 16
<phrase 1=


Подскажи как это реализовать, хотя бы какими методами, процедурами или функциями пользоваться

То что пользоваться блоками я понял, вот только проблема с добавление шаблона в блок, выдает ошибку, простые элементы в блок добавляет, а шаблоны не хочет.

Последний раз редактировалось zebra87, 24.12.2011 в 21:37.
zebra87 вне форума  
 
Непрочитано 24.12.2011, 22:42
#8
trir


 
Регистрация: 18.12.2010
Сообщений: 5,051


Забудь про шаблоны, а лучше по подробней опиши задачу, лучше с примерами
trir вне форума  
 
Автор темы   Непрочитано 24.12.2011, 23:15
#9
zebra87

1с программист
 
Регистрация: 24.12.2011
Тамбов
Сообщений: 16
<phrase 1=


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

На 3 сайтах программистов создавал данную тему, ни на одном на 2-х вообще ничего не ответили, а на 1 посоветовали здесь поискать решение данной проблемы

Последний раз редактировалось zebra87, 24.12.2011 в 23:20.
zebra87 вне форума  
 
Непрочитано 24.12.2011, 23:20
#10
trir


 
Регистрация: 18.12.2010
Сообщений: 5,051


Чертёж загони в блок, блок получи как текст и сохрани в БД. Ну а потом вставляй как блок.
trir вне форума  
 
Автор темы   Непрочитано 24.12.2011, 23:25
#11
zebra87

1с программист
 
Регистрация: 24.12.2011
Тамбов
Сообщений: 16
<phrase 1=


Я просто думал создавать кучу шаблонов, а в БД хранить только пути к ним, и по выборке чертить его в автокаде, а как его в текст сохранить, dfx что ли?
zebra87 вне форума  
 
Непрочитано 25.12.2011, 00:22
#12
trir


 
Регистрация: 18.12.2010
Сообщений: 5,051


Ну блок в виде текста выглядит примерно так:
((-1 . <Имя объекта: -4d9288>) (0 . "BLOCK") (330 . <Имя объекта: -4d9290>) (5
. "1CD2F") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbBlockBegin") (70
. 0) (10 0.0 0.0 0.0) (-2 . <Имя объекта: -4d9278>) (2 . "bl1") (1 . ""))
И далее следуют примитивы из которых он состоит
Из подобного "текста" можно создать блок используя SendCommand и lisp, и довольно быстро, по сравнению с другими вариантами
trir вне форума  
 
Непрочитано 25.12.2011, 07:42
#13
ShaggyDoc

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


Забудь навсегда слово "шаблон"! Используй блоки. Блок может быть отдельным DWG-файлом. В БД храни только пути к ним, разумеется относительные. Ни в какие "тексты" не надо сохранять. DWG может обычный пользователь создавать, какие надо и как надо.

Как работать с блоками (и любыми другими объектами) изучай в acadauto.chm. Там вся объектная модель, с примерами на VB на все случаи.

Однако ты идешь принципиально неверным путем. Ты делаешь свое приложение на Delphi, из которого пытаешься управлять Автокадом через объекты. Это примерно как дистанционно управлять марсоходом с Земли. Вроде и можно, но проблем будет несметное количество. Ты пока столкнулся с самой простой.
Не столкнулся еще и с тем, что может быть не 'AutoCAD.Application'.

Даже вставить блок в чертеж "дистанционно" не так просто. Надо точку вставки, поворот, масштаб (ы) задавать, могут быть атрибуты разных типов.


Правильный путь (особенно с блоками):

1. Основное приложение, с которым работает юзер, написано на LISP и работает внутри AutoCAD. Это "водитель внутри марсохода".

2. То, что надо сделать на Delphi (например "вижуальная" работа с БД и выбор из нее) делаешь в Delphi в виде COM-сервера.

3. Пользователь, щелчком по кнопке или меню в Автокаде запускает программу. Он и не знает, на чем она написана, но это Lisp.

4. Lisp вызывает твой COM-сервер и юзер видит какой-то диалог, в котором выбирает блок. Или еще что. Это еще надо продумать и реализовать - как именно выбрать нужный блок из сотен или тысяч.

5. В основную программу сервер возвращает имя блока (файла). Далее множеством давно известных способов результат обрабатывается. Например, в нужное место в нужном масштабе вставляется изображение.

Подробно все описано в книге "САПР на базе AutoCAD - как это делается". Как раз на примерах Delphi 7. А есть еще .NET и ObjectARX - там возможностей побольше будет.
ShaggyDoc вне форума  
 
Непрочитано 25.12.2011, 09:29
#14
Дима_

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


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Однако ты идешь принципиально...
1. Основное приложение, с которым работает юзер, написано на LISP и работает внутри AutoCAD. Это "водитель внутри марсохода".
2. То, что надо сделать на Delphi (например "вижуальная" работа с БД и выбор из нее) делаешь в Delphi в виде COM-сервера.
Чем обусловлен выбор только такой тактики - ИХМО она имеет право на жизь - но не более чем на равных правах с предложенной автором. Регистрация COM-servera не менее слобое звено чем "не 'AutoCAD.Application'" (просто другого характера). При всей моей любви к лиспу - без потери чего-либо, в автокаде, можно обойтись и без него - система достаточно хорошо интегрированна со всеми перечисленными Вами средствами и прекрасно работают без "водителей внутри марсохода".
p.s. По тактике прдложенной автору с БД и блоками - я двумя руками за (хотя может быть вариант когда хранить описание блоков более рационально в двоичном виде прямо в базе - естественно с возможностью изменения их "разрешенным" пользователям).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 25.12.2011, 11:32
#15
zebra87

1с программист
 
Регистрация: 24.12.2011
Тамбов
Сообщений: 16
<phrase 1=


А почему бы не пользоваться готовыми методами Application? Вот единственный косяк, как с ними работать. С автокадом до этого ни разу не сталкивался, работал с Execl и wordом через COM а вот с автокадом столкнулся с трудностями. Еще читал про контейнеры, можно ли им разрешить мою проблему, единственное как пишут что он с автокадом тоже коряво работает( короче я в замешательстве
zebra87 вне форума  
 
Непрочитано 25.12.2011, 12:14
#16
ShaggyDoc

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


Цитата:
Регистрация COM-servera не менее слобое звено
Да в чем слабость-то? Или инсталлятор зарегистрирует, или regsvr32 xxx.dll.
А вот с именем 'AutoCAD.Application' проблемы бывают. Может быть не один Автокад, в 'AutoCAD.Application' может числиться не тот, на который рассчитываем. Тут Autodesk порядочно мути внесла, с подменой "текущего" Application.

"Другие ситемы" (ObjectARX, .NET) конечно работают, ведь они родные. Но и вызов-то их в итоге из LISP осуществляется. На все случаи не наделаешь "именованных" команд. А вот функции с аргументами, сделанные для Lisp - очень хорошо.

Однако автор ветки про Delphi спрашивает, а там только COM будет доступен. Причем в самом ненадежном виде. Даже нет гарантии, что в библиотеках типов бродяги-программисты все правильно объявили.

Цитата:
С автокадом до этого ни разу не сталкивался, работал с Execl и wordом через COM а вот с автокадом столкнулся с трудностями
Вот в том и проблема, что не сталкивался. Офисные программы специально так и сделаны, чтобы легко интегрироваться. Да и их объекты и методы такие, что легко вписываются в идеологию COM. Однако и там проблем хватает.

Например, нельзя "вычислить" с помощью VBA какой-то текст, а потом запросить точку для его вставки. Будет без спросу написан в текущей позиции курсора. А в AutoCAD это постоянно надо, предусмотрено.

Цитата:
Еще читал про контейнеры, можно ли им разрешить мою проблему
Нет. В отличие от "офисных" и других "легких" приложений, AutoCAD система очень тяжелая в запуске. Он не позволит себя просто так встроить себя.
Можешь сам убедиться - откомпилируй Delphi7\Demos\ActiveX\OleCtnrs\ и попробуй туда в контейнер встроить Автокад в run-time.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 25.12.2011, 16:36
#17
zebra87

1с программист
 
Регистрация: 24.12.2011
Тамбов
Сообщений: 16
<phrase 1=


Подкинте пожалуйста литературы по этой теме, будем крутиться как сможем
zebra87 вне форума  
 
Непрочитано 25.12.2011, 19:05
#18
Дима_

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


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Да в чем слабость-то? Или инсталлятор зарегистрирует, или regsvr32 xxx.dll.
В пользователях "не администраторах", хотя проблема конечно решаемая, но она есть.
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
На все случаи не наделаешь "именованных" команд. А вот функции с аргументами...
с 2007 версии проблема решена.
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Однако автор ветки про Delphi спрашивает, а там только COM будет доступен. Причем в самом ненадежном виде.
Вот это правда абсолютная, но скорее говорящея о выборе не самого хорошего инструмета (для автокада), хотя впрочем это частый случай - "пишу на том, что знаю", но если Вы советуете "до кучи" изучить лисп, да до уровня чтоб на нем писать "Основное приложение", то тем самым роль Delphi в данном случае - весьма вторична.
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 25.12.2011 в 19:18.
Дима_ вне форума  
 
Автор темы   Непрочитано 25.12.2011, 21:28
#19
zebra87

1с программист
 
Регистрация: 24.12.2011
Тамбов
Сообщений: 16
<phrase 1=


Ну а какими книгами пользоваться? С чего то ведь надо начинать. Да и всем спасибо) буду дальше сам тыркаться)
zebra87 вне форума  
 
Непрочитано 25.12.2011, 21:58
#20
Дима_

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


Если честно не понятно по какой области Вам нужна литература - для конкретно этой задачи - много не надо, в общем про программирование для автокада литературы масса, в том числе и здесь упомянутая.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > AutoCAD и delphi 7, добавление шаблонов

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой AutoCAD использовать ? denes AutoCAD 55 12.09.2011 14:29
Рабочие пространства в AutoCAD (Добавление, удаление, переименование) nav3000 AutoCAD 1 23.08.2010 11:47
autocad и delphi программирование 3d модели Korso Программирование 6 19.04.2010 11:00
Создание параметрического чертежа с помощью AutoCad и Delphi karakatica Программирование 3 10.07.2009 13:01