Тема: Как создать таблицу в AutoCAD 2005 из Delphi?
Привет!
Подскажите пожалуйста как создать таблицу в AutoCAD 2005 из дельфийского приложения.
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → Delphi → Как создать таблицу в AutoCAD 2005 из Delphi?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Привет!
Подскажите пожалуйста как создать таблицу в AutoCAD 2005 из дельфийского приложения.
Кто-нибуууууудь, отзовитесь...
Я пробовала создать таблицу следующим образом:
1. Импортировала библиотеку типов AutoCAD из файла acax16enu.tlb. В файле AutoCAD_TLB.pas содержится класс
CoAcadTable = class class function Create: IAcadTable; class function CreateRemote(const MachineName: string): IAcadTable; end;
2.Пытаюсь создать таблицу
... var AcadTbl:IAcadTable; ... AcadTbl:=CoAcadTable.Create;
На этой строчке вываливается ошибка "Не найден указанный модуль"
Скажите, что не так???
Лично я примитивно нарисовал с помощью линий :).
и текст вставлял в виде МТекст. Не очень изящное решение, но сработало. Делал на промежуточный рабочий слой (про который я точно знаю что пустой), потом выделял объекты с этого слоя и юзер тащит туда, где ему надо размещать эту таблицу. Потом менял аттрибуты объектов (для очистки промежуточного слоя).
Я сейчас посмотрел AutoCad_TLB. В моем такого класса нет. Но если и есть то по аналогии надо бы:
AcadTbl:=AcDoc.Table.add (...);
что то подобное. А лучше доки почитать, но так как я сам слабо их читаю, советовать не буду :).
Спасибо, Marat:))))
Я уже думала, что мне никто не ответит
Разобралась!!!!!
У класса
IAcadModelSpace2Disp
есть метод
function AddTable(InsertionPoint: OleVariant; NumRows: SYSINT; NumColumns: SYSINT; RowHeight: Double; ColWidth: Double): IAcadTable;
> Drozdik
кусок кода не покажете? с IAcadModelSpace2Disp
У меня чего-то не выходит
ВНИМАНИЕ!!!!!!!
БОЙТЕСЬ ТАБЛИЦ В АТОКАДЕ 2005, 2006!!!
Печальный опыт уже есть - выгрузка многострочной таблицы (200-300 строк) из дельфи приводит к аварийному завершению автокада. Не умеет он работать с таблицами, точнее умеет но с маленькими :) У себя решил проблему так: создаю dxf-файл открываю его в акаде и сохраняю в dwg программно, потом пользователю показываю уже dwg. Скорость такого решения на порядок выше, чем при работе с com-объектами. Но бредовость формата dxf и скудность его описания - просто поражают.
вот это так как не надо делать! Это в принципе правильный код, НО для небольших таблиц. В предыдущей теме я уже предупредил. Удачи!
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,AutoCad_Tlb, COMobj, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Function GetAcadApplication(Visible: Boolean): IAcadApplication;
implementation
{$R *.dfm}
Function GetAcadApplication(Visible: Boolean): IAcadApplication;
var
v : OleVariant;
begin
Result := nil;
Try
// пытаемся присоединиться к уже запущенной копии AutoCad
v := GetActiveOleObject('AutoCAD.Application');
Except
// если не получилось присоединиться, то запускаем новую копию AutoCad
v:= CreateOleObject('AutoCAD.Application');
end;
// приводим переменную типа OleVariant к типу IAcadApplication
Result := IDispatch(v) as IAcadApplication;
// далее проверяем, надо ли делать приложение AutoCad видимым
if Visible then Result.Visible := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
var v : OleVariant;
AcadApp:IAcadApplication;
MdSpace:IAcadModelSpace;
MdSpace2:IAcadModelSpace2Disp;
tbl:IAcadTable;
pt:OleVariant;
rezhim:OleVariant;
docName:WideString;
currLayer: AcadLayer;
acaddoc:IAcadDocument;
k:integer;
begin
//1 присоеденимся к приложению AutoCAD
AcadApp:=GetAcadApplication(true);
AcadApp.WindowState:=acMin;
//2 открываем шаблон
rezhim:='False';
docName:=ExtractFileDir(Application.ExeName)+'\shablon.dwg';
AcadApp.Documents.Open(docname,rezhim,'');
AcadDoc:=AcadApp.ActiveDocument;
//3 Выбираем активный слой
//.*****************************
//4 Создаем таблицу AutoCAD
mdspace:=acaddoc.ModelSpace;
mdspace2:=idispatch(mdspace) as IAcadModelSpace2Disp;
pt:=VarArrayCreate([0, 2], varDouble);
pt[0]:=0;
pt[1]:=0;
pt[2]:=0;
tbl:=idispatch(mdspace2.AddTable(pt,2,9,15,15))as IAcadTable;
for k:=1 to 800 do
begin
acaddoc.SendCommand('(print "'+inttostr(k)+'") ');
tbl.InsertRows(k,8,1);
end;
for k:=1 to 800 do
begin
acaddoc.SendCommand('(print "split - '+inttostr(k)+'") ');
tbl.MergeCells(k,k,1,3);
end;
acaddoc.Regen(acAllViewPorts);
end;
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → Delphi → Как создать таблицу в AutoCAD 2005 из Delphi?
Форум работает на PunBB, при поддержке Informer Technologies, Inc