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

Тема в разделе "Delphi - СОМ", создана пользователем alexey, 30 апр 2004.

Статус темы:
Закрыта.
  1. alexey

    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 появляется на экране и является вполне работоспособным,
    Может кто сталкивался с подобной проблемой?
     
  2. Гость

    Теперь автокад явно завоюет свои позиции ;)
    http://www.autocad2002.ru
    такой благотворительности никто не ожидал
     
  3. Barmutik

    Barmutik Гость

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

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

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

    alexey Гость

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

    Barmutik Гость

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

    ShingelD Гость

    Добрый День!
    Уважаемые мастера программирования, подскажите пожалуйста молодому как из программы на Delphi 7 заставить AutoCad (AutoCad.Application) выполнить скрипт-файл (*.scr), расположенный по конкретному адресу.
    Благодарю за внимание. :)
     
Загрузка...
Похожие Темы - Выноски autocad через
  1. oopa
    Ответов:
    2
    Просмотров:
    2.057
  2. dmalsh
    Ответов:
    5
    Просмотров:
    7.592
Статус темы:
Закрыта.

Поделиться этой страницей