Выноски в autocad через OLE

  • Автор темы alexey
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

alexey

При работе с autocad 2000-2004 через OLE столкнулся со следующей проблемой: автокад отказывается принимать вызов на создание размера типа Leader через OLE, в то время как все остальные размеры спокойно создаются. При решении данной проблемы я попробовал множество вариантов но результата так и не получил. ПРи создании выноски ей требуется ссылка на обьект MText, сам MText создается без проблем,но вот вызов создания leader при передаче в него mtext срывается с ошибкой - не тот формат входных данных, попытка заменить Mtext на что-то другое, вроде Null,emptyparam не привела к каким-ибо результатам.
Один из вариантов(DElphi 5)

Result:=ModelSpace.AddLeader(v,MText,LeaderType);

где MText уже создан, тип - OleVariant;
LeaderType
TAutoLeaderType=
(acLineNoArrow,acLineWithArrow,acSplineNoArrow,acSplineWithArrow);

v- координаты, получены следующей функцией:
function AutoGetOlePointsCoord(points:TAutoPointArray):OleVariant;
var
i:integer;
begin
Result:=VarArrayCreate([0,3*Length(points)-1],VarDouble);
for i:=0 to High(points) do
begin
Result[i+0]:=points.x;
Result[i+1]:=points.y;
Result[i+2]:=points.z;
end;
end;

впрочем с координатами проблем нет, они работают всегда и везде

MText создается следующей функцией

function AutoAddMText(ModelSpace:OleVariant;
point:TAutoPoint;
width:double;
text:string;
TextSize:double;
Color:Byte):OleVariant;
begin
Result:=ModelSpace.AddMText(AutoGetOlePointCoord(point),
width,
text);
Result.Color:=color;
Result.Height:=TextSize;
end;

после своего создания MText появляется на экране и является вполне работоспособным,
Может кто сталкивался с подобной проблемой?
 
G

Guest

Теперь автокад явно завоюет свои позиции ;)

такой благотворительности никто не ожидал
 
B

Barmutik

Как стало известно из достоверных источников первый параметр у функции AddLeader
должен быть VarArrayRef(от твоего массива координат)..

Да и если не будет работать то попробуй объявить его как VarArrayCreate([0, 5], varDouble)

100% гарантий что будет работать дать не могу конечно ... ;)
 
A

alexey

Все - разобрался B)
Всем спасибо!
В общем - ларчик просто открывался.
Просто напросто я передавал неподходящие координаты для даной функции - в тестовом варианте я скармливал ей координаты 0,0,0 и 1,1,1, в результате функция элементарно ругалась (она не может работать в 3D). А VarArrayRef
ей не требуется, все без нее и так прекрасно работает (использую OleVariant). Теперь все в порядке.
 
B

Barmutik

Ну хорошо что всё получилось ... не прошло и полмесяца B)
 
S

ShingelD

Добрый День!
Уважаемые мастера программирования, подскажите пожалуйста молодому как из программы на Delphi 7 заставить AutoCad (AutoCad.Application) выполнить скрипт-файл (*.scr), расположенный по конкретному адресу.
Благодарю за внимание. :)
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!