| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
24.12.2011, 17:51 | #1 | |
AutoCAD и delphi 7, добавление шаблонов
1с программист
Тамбов
Регистрация: 24.12.2011
Сообщений: 16
|
||
Просмотров: 10193
|
|
||||
Может пояснишь что за шаблоны ты добавляешь? Точнее что ты понимаешь под шаблоном (в терминах AutoCAD)?
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
|
||||
1с программист Регистрация: 24.12.2011
Тамбов
Сообщений: 16
|
*.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. Причина: Добавление исходного кода |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Шаблон (dwt) не может быть "добавлен" в чертеж! Шаблон всего лишь прототип, по одному из которых создан чертеж.
В чертеж можно внедрять определения блоков (в том числе из файлов) и делать вставки экземпляров блоков. |
|||
|
||||
1с программист Регистрация: 24.12.2011
Тамбов
Сообщений: 16
|
А как это можно реализовать? просто пробывал и dwg добавлять никак. Просто задание интересное, есть база данных в дельфях этих чертежей (шаблонов) каких либо схем, вот их нужно добавить на 1 чертеж, что бы получилась полноценная схема?
|
|||
|
||||
1с программист Регистрация: 24.12.2011
Тамбов
Сообщений: 16
|
Подскажи как это реализовать, хотя бы какими методами, процедурами или функциями пользоваться
То что пользоваться блоками я понял, вот только проблема с добавление шаблона в блок, выдает ошибку, простые элементы в блок добавляет, а шаблоны не хочет. Последний раз редактировалось zebra87, 24.12.2011 в 21:37. |
|||
|
||||
1с программист Регистрация: 24.12.2011
Тамбов
Сообщений: 16
|
Вот смотри, есть БД каких то приборов (например вольтметр или амперметр), есть его чертеж. Для построения электрической цепи, требуется несколько элементов, пользователь, делает выборку из БД этих приборов, размещает их на чертеже ну и в идеале делает трассировку между ними (т.е. соединение этих элементов кратчайшими путями), вот проблема стоит только в том, есть несколько приборов, а добавить их на чертеж не могу((( а приборы могут быть сложные по составу, поэтому разбиение его на простейшие элементы только геморой искать((( вот хотел их добавлять на 1 лист чертежа, а они гадюки не добавляются((( гугл весь перерыл, и русские и англоязычные сайты, нигде подобной инфы нет
На 3 сайтах программистов создавал данную тему, ни на одном на 2-х вообще ничего не ответили, а на 1 посоветовали здесь поискать решение данной проблемы Последний раз редактировалось zebra87, 24.12.2011 в 23:20. |
|||
|
||||
Регистрация: 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, и довольно быстро, по сравнению с другими вариантами |
|||
|
||||
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 - там возможностей побольше будет. |
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Цитата:
p.s. По тактике прдложенной автору с БД и блоками - я двумя руками за (хотя может быть вариант когда хранить описание блоков более рационально в двоичном виде прямо в базе - естественно с возможностью изменения их "разрешенным" пользователям).
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
1с программист Регистрация: 24.12.2011
Тамбов
Сообщений: 16
|
А почему бы не пользоваться готовыми методами Application? Вот единственный косяк, как с ними работать. С автокадом до этого ни разу не сталкивался, работал с Execl и wordом через COM а вот с автокадом столкнулся с трудностями. Еще читал про контейнеры, можно ли им разрешить мою проблему, единственное как пишут что он с автокадом тоже коряво работает( короче я в замешательстве
|
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Цитата:
А вот с именем 'AutoCAD.Application' проблемы бывают. Может быть не один Автокад, в 'AutoCAD.Application' может числиться не тот, на который рассчитываем. Тут Autodesk порядочно мути внесла, с подменой "текущего" Application. "Другие ситемы" (ObjectARX, .NET) конечно работают, ведь они родные. Но и вызов-то их в итоге из LISP осуществляется. На все случаи не наделаешь "именованных" команд. А вот функции с аргументами, сделанные для Lisp - очень хорошо. Однако автор ветки про Delphi спрашивает, а там только COM будет доступен. Причем в самом ненадежном виде. Даже нет гарантии, что в библиотеках типов бродяги-программисты все правильно объявили. Цитата:
Например, нельзя "вычислить" с помощью VBA какой-то текст, а потом запросить точку для его вставки. Будет без спросу написан в текущей позиции курсора. А в AutoCAD это постоянно надо, предусмотрено. Цитата:
Можешь сам убедиться - откомпилируй Delphi7\Demos\ActiveX\OleCtnrs\ и попробуй туда в контейнер встроить Автокад в run-time. |
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Цитата:
Цитата:
Вот это правда абсолютная, но скорее говорящея о выборе не самого хорошего инструмета (для автокада), хотя впрочем это частый случай - "пишу на том, что знаю", но если Вы советуете "до кучи" изучить лисп, да до уровня чтоб на нем писать "Основное приложение", то тем самым роль Delphi в данном случае - весьма вторична.
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 25.12.2011 в 19:18. |
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Если честно не понятно по какой области Вам нужна литература - для конкретно этой задачи - много не надо, в общем про программирование для автокада литературы масса, в том числе и здесь упомянутая.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
Опции темы | Поиск в этой теме |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Какой 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 |