Тема: Как правельно определить переменные функции GetPoint в Delphi?

Привет. Подскажите пожалуйста как правильно определить переменные функции GetPoint. Мне надо указать точку вставки.
У меня есть программка:
var
.....
AcadАрр: IAcadApplication;
AcDoc: IAcadDocument;
AcUtil: IAcadUtility;
StartPoint, Point: array of OleVariant;
или:
StartPoint, Point: array of Double;
....
implementation....
procedure ...;
begin
try
AcadApp := GetActiveOleObject('AutoCAD.Application.17')as IAcadApplication;
AcDoc := Acad.ActiveDocument;
AcUtil := AcDoc.Utility;
....
StartPoint := AcDoc.Utility.GetPoint(Point, 'Укажите точку:');
....
end.
Так вот есть проблема. На считывании точки программка выдает ошибку. В хелпе написано что:
RetVal = GetPoint([Point][, Prompt])
Object
Utility
The object or objects this method applies to.
Point
Variant (three-element array of doubles); input-only; optional
The 3D WCS coordinates specifying the relative base point.
Prompt
Variant (string); input-only; optional
The text used to prompt the user for input.
RetVal
Variant (three-element array of doubles)
The 3D WCS coordinates of the point the AutoCAD user has selected.
Я попробовала определить переменные как Array of Double.
При этом он выдает ошибку:
"Ошибка преобразования точки из SafeArray в точку двойного массива".
Тогда я определила переменные как Array of OleVariant. Он выдал еще одну ошибку:
"Недопустимый аргумент Point в GetPoint".
Помогите определить переменные правильно. Какого типа они должны быть? Никак не получается!!!!!

Re: Как правельно определить переменные функции GetPoint в Delphi?

Хочу добавить. Покапалась на форуме нашла файл объектной модели автокада на русском языке....на английском видимо прочитала не внимательно....написано:
Object
Utility
Объект или объекты обращающиеся к этому методу.
Point
Variant (three-element array of doubles); input-only; optional
(массив с тремя элементами double); только для ввода; дополнительный
Трехмерные координаты полежения WCS относительная базовая точка.
Prompt
Variant (string); только для ввода; дополнительный
Текст запрашиваемый пользователя относительно ввода.
RetVal
Variant (массив с тремя элементами double)
Трехмерные координаты WCS точки выбранной пользователем AutoCADа.
Получается что мою точку Point надо сначало ввести....а потом он считает точку и вернет значение новой точки!!!
Также в примерах есть вот такая вещь:
' Возвратите точку, используя подсказку
    returnPnt = ThisDrawing.Utility.GetPoint(, "Введите точку: ")
    MsgBox "WCS точки: " & returnPnt(0) & ", " & returnPnt(1) & ", " & returnPnt(2) & vbCrLf & _
            "(Введите следующее значение без подсказки.)", , "GetPoint Пример"
или
' Возвратите точку, используя базовую точку и подсказку
    Dim basePnt(0 To 2) As Double
    basePnt(0) = 2#: basePnt(1) = 2#: basePnt(2) = 0#
    returnPnt = ThisDrawing.Utility.GetPoint(basePnt, "Введите точку: ")
    MsgBox "WCS точки: " & returnPnt(0) & ", " & returnPnt(1) & ", " & returnPnt(2)
Я пробовала вернуть точку без подсказки - но он просто ругается на запятую и говорит что так дело не пойдет. Пробовала также определить ему точку:
Point[0]=0;
Point[1]=0;
Point[2]=0;
StartPoint := AcDoc.Utility.GetPoint(Point, 'Укажите точку:');
Ругается!!!! Подскажите как правельно сделать....если можно то только с использованием подсказки....без базовой точки.
Буду очень благодарна.

Re: Как правельно определить переменные функции GetPoint в Delphi?

> Сонечка
Подскажите, где нашли файл объектной модели автокада на русском языке

Re: Как правельно определить переменные функции GetPoint в Delphi?

Пожалуйста
http://www.vbamodel.narod.ru
А вы мне в замен как обращаться с этой гребаной функцией GetPoint :)

Re: Как правельно определить переменные функции GetPoint в Delphi?

> Сонечка
А это разве не помогает: https://www.caduser.ru/forum/topic10674.html ?

Re: Как правельно определить переменные функции GetPoint в Delphi?

Могу сразу сказать что EmptyParam при программировании с использованием библиотеки 2007 автокада НЕ ПРОКАТЫВАЕТ!!!! (в отличии от предыдущих). По этому то моя программка и перестала работать. В этом то и загвоздка. Он требует определить переменну EmptyParam!!!! OleVariant не прокатывает. Эту точка в этой функции вводимая (если посмотреть описание модели). То есть итеперь мне надо сначало определить эту точку а потом использовать. Как правиль определить? Я уже писала что
Point[0]=0;
Point[1]=0;
Point[2]=0;
не прокатывает!!!! Че делать?

Re: Как правельно определить переменные функции GetPoint в Delphi?

Для использования метода GetEntity в AutoCAD 2007-2008 сначала необходимо вызвать метод Activate:
AcDoc.Activate;
AcDoc.Utility.GetPoint(Point, 'Укажите точку:');

Re: Как правельно определить переменные функции GetPoint в Delphi?

спасибо.....попробую

Re: Как правельно определить переменные функции GetPoint в Delphi?

Ну что ж.....всем спасибо, но это не сработало!!!! Но я все-таки добила эту несчастную функцию!!!! Так что все работает. Повторюсь, что первоначально это точка все-таки вводимая и ее надо сначало определить (например с координатами 0,0,0) а потом уже использовать. При использовании этой функции автокад сначало берет подставляет под знчение Point первоначально определенную точку, а когда указываешь на экране точку он заменяет первоначальную на указанную и возвращает ее значение. Вот так.

Re: Как правельно определить переменные функции GetPoint в Delphi?

вот код на шарпе - работает;

public Form1()
{
    InitializeComponent();
    acadDoc.BeginCommand +=
        newDAcadDocumentEvents_BeginCommandEventHandler(acadDoc_BeginCommand);
}
public void acadDoc_BeginCommand(string CommandName)
{
    m_command = CommandName;
}
string m_command = string.Empty;
private void button1_Click(object sender, EventArgs e)
    {
        string tmp = m_command;
        object startPnt = new object();
        object endPnt = new object();
        double[] point = new double[3];
        string prompt1 = "Enter the start point of the line: ";
    string prompt2 = "Enter the end point of the line: ";
    if (tmp == m_command)
    {
        try
        {
            startPnt = objAcad.ActiveDocument.Utility.GetPoint(Type.Missing, prompt1);
            endPnt = objAcad.ActiveDocument.Utility.GetPoint(startPnt, prompt2);
            listBox1.Items.Add(((double[])startPnt)[0] + "   " +
                ((double[])startPnt)[1] + "   " +
                ((double[])startPnt)[2] + "   ");
            listBox1.Items.Add(((double[])endPnt)[0] + "   " +
                ((double[])endPnt)[1] + "   " +
                ((double[])endPnt)[2] + "   ");
        }
        catch (Exception ex){ }
    }