Тема: Как перевести процедуру копирования с базовой точкой с VB на Delphi?

Помогите перевести процедуру копирования с базавой точкой с VB на Delphi вот так она выгледит в справке по AUTOCAD ..!
Sub Example_SelectByPolygon()
    Dim ssetObj As AcadSelectionSet
    Set ssetObj = ThisDrawing.SelectionSets.Add("TEST_SSET2")
     Dim mode As Integer
     Dim pointsArray(0 To 11) As Double
    mode = acSelectionSetFence
    pointsArray(0) = 28.2: pointsArray(1) = 17.2: pointsArray(2) = 0
    pointsArray(3) = -5: pointsArray(4) = 13: pointsArray(5) = 0
    pointsArray(6) = -3.3: pointsArray(7) = -3.6: pointsArray(8) = 0
    pointsArray(9) = 28: pointsArray(10) = -3: pointsArray(11) = 0
    ssetObj.SelectByPolygon mode, pointsArray
       ReDim gpCode(0 To 1) As Integer
    gpCode(0) = 0
    gpCode(1) = 10
    Dim pnt(0 To 2) As Double
    pnt(0) = 3: pnt(1) = 6: pnt(2) = 0
    ReDim dataValue(0 To 1) As Variant
    dataValue(0) = "Circle"
    dataValue(1) = pnt
    Dim groupCode As Variant, dataCode As Variant
    groupCode = gpCode
    dataCode = dataValue
    ssetObj.SelectByPolygon mode, pointsArray, groupCode, dataCode
End Sub

Re: Как перевести процедуру копирования с базовой точкой с VB на Delphi?

НУ помогите хоть кто нибуть зачем же тогда форум придумали ведь навернека ктонибудь знает.,! Очень надо!

Re: Как перевести процедуру копирования с базовой точкой с VB на Delphi?

дык, однотипно все... только синтаксис другой будет и все...
.
зы. если до завтра никто не откликнется - то сконверчу, но без проверок...

Re: Как перевести процедуру копирования с базовой точкой с VB на Delphi?

там не работает следущая часть dataValue(1) = pnt
несовместимость типов array и выриант но почемуто в VB так работает а на Delphi нет.! А так то я понимаю что однотипно ..!

Re: Как перевести процедуру копирования с базовой точкой с VB на Delphi?

заначит не все еще потеряно !!!! отвечаю на предыдущее...
...
var dataValue : OLEVariant;
...
begin
...
  dataValue := VarArrayCreate([0, 1], varVariant);
  dataValue[0] := "Circle";
  dataValue[1] := pnt;
...
end;
.
удачи !   :)))

Re: Как перевести процедуру копирования с базовой точкой с VB на Delphi?

Хе Хе ты меня не удивил потомучто так я уже пробовал.,,! НЕРАБОТАЕТ!!! Привожу код

{-------------------------------------}
...
var mode:integer;
    select:IAcadSelectionSet;
    filtertype:OleVariant;
    Filterdata:oleVariant;
    p:array [0..2] of double;
    mas: array [0..11] of double;
    begin
mode:=acSelectionSetFence;
select:=Acadapp.ActiveDocument.SelectionSets.Add('new');
mas[0]:=0;    mas[1]:=0; mas[2]:=0;
mas[3]:=0;    mas[4]:=100; mas[5]:=0;
mas[6]:=100;  mas[7]:=100; mas[8]:=0;
mas[9]:=100;  mas[10]:=0; mas[11]:=0;
p[0]:=0; p[1]:=50; p[2]:=0;
FilterType:=VarArrayCreate([0,1],VT_I2);
FilterData:=VarArrayCreate([0,1],VarVariant);
FilterType[0]:=0;
FilterType[1]:=10;
FilterData[0]:='Circle';
FilterData[1]:=p;
select.SelectByPolygon(mode,mas,filtertype,filedata);
end;

Re: Как перевести процедуру копирования с базовой точкой с VB на Delphi?

Ошибка в том же месте..! FilterData[1]:=p; //Incompatible types: 'Variant' and 'Array' Вот так что предложи что нибуть другое..!

Re: Как перевести процедуру копирования с базовой точкой с VB на Delphi?

вот лопухнулся-то я...  :)
тип Variant не может "всасывать" в себя значение типа массив,
надо этот массив объявлять как вариантный, попробуй объявить так:
var
  p : OLEVariant;
begin
  p := VarArrayCreate([0, 2], varDouble);
...
end;

Re: Как перевести процедуру копирования с базовой точкой с VB на Delphi?

Ну ошибок вроде не выдаёт хотя копировать ещё не пробовал..!
Можешь пояснить что такое в этой процедуре:
FilterType и почему именно
FilterType[0]:=0;
FilterType[1]:=10;
И что такое филтр дата FilterData[0]:='Circle';
Зарание Спасибо..!

Re: Как перевести процедуру копирования с базовой точкой с VB на Delphi?

А ещё теперь эту часть чертежа надо вставить в другой чертёжь Как это сделать ! Помоги пожалуста.,!

Re: Как перевести процедуру копирования с базовой точкой с VB на Delphi?

Теперь возник другой вопрос ! Как вставить блок причём все блоки находятся в отдельном файле, тоесть открыто два файла один в котором рисуем другой файл с блоками.,! НАдо блоки брать из файла с блоками..! вот процедура написана опятьже на VB из справки AUTOCAD если сможешь преведи на Delphi!!
Sub Ch10_InsertingABlock()
    ' Define the block
    Dim blockObj As AcadBlock
    Dim insertionPnt(0 To 2) As Double
    insertionPnt(0) = 0
    insertionPnt(1) = 0
    insertionPnt(2) = 0
    Set blockObj = ThisDrawing.Blocks.Add _
                     (insertionPnt, "CircleBlock")
    ' Add a circle to the block
    Dim circleObj As AcadCircle
    Dim center(0 To 2) As Double
    Dim radius As Double
    center(0) = 0
    center(1) = 0
    center(2) = 0
    radius = 1
    Set circleObj = blockObj.AddCircle(center, radius)
    ' Insert the block
    Dim blockRefObj As AcadBlockReference
    insertionPnt(0) = 2
    insertionPnt(1) = 2
    insertionPnt(2) = 0
    Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock _
               (insertionPnt, "CircleBlock", 1#, 1#, 1#, 0)
    ZoomAll
    MsgBox "The circle belongs to " & blockRefObj.ObjectName
End Sub

Re: Как перевести процедуру копирования с базовой точкой с VB на Delphi?

сорри за оффтопик,
но все что ты делашь легко решается на Лиспе...
На делфе надо делать интерфейсную часть, а обработку данных тем более графических надо делать на лиспе... у меня прекрасно работают и копирование с базовой точкой и вставка блоков из файла.. Точно так же прекрасно работает "деревянное" меню которое хранится в базе данных Firebird (интерфейс дерева ессно написан на билдере, считай делфях)

Re: Как перевести процедуру копирования с базовой точкой с VB на Delphi?

Я наверно даже с тобой соглошусь..! Я знаю что лисп под это заточен..! Просто в лиспом я никргда не работал..И совсем нет времени в данный момент эго изучать .,! Но если не трудо то расскажи хотябы структуру как вобще всё это связать тоесть Lisp Delphi Autocad?

Re: Как перевести процедуру копирования с базовой точкой с VB на Delphi?

лично я в Лиспе тоже не шарю... (но изучать что-то надо: lisp, arx)...
по-вопросу перевода кода VB в Delphi - у тебя и самого это прекрасно получается !
а рассказать о связках List-Delphi-AutoCad - даже целой книжки не хватает... почитай последнюю "САПР на базе AutoCad, как это делается" - там много чего написано.

Re: Как перевести процедуру копирования с базовой точкой с VB на Delphi?

Я думаю: так программу которую сейчас пишу доделаю всётаки полностью на дельфе., т. к. сейчас уйдет  много времени на разбор лиспа.! Ну а если что нибуть ещё буду писать с использованием автокада то тогда всё буду делать как советуют профессионалы.,! НАДО РОСТИ,,!