Newsgroup: it.comp.lang.delphi
Titolo: Comunicazione Autocad14 ---> delphi 4





 

Per favore aiutatemi, sto cercando disperatamente di scrivere 
un programma che si colleghi ad AutoCAD usando ActiveX, ma non riesco a 
passare in punto di inserimento in modo corretto. 


Il punto di inserimento e` un array di double. 



 


Questo codice produce il seguente errore: 

incompatibilita` di tipi


 


function AcInsertBlock(sBlockName  : 
String;
                       
XInsPoint   : 
double;
                       
YInsPoint   : 
double;
                       
ZInsPoint   : 
double;
                       
XScale      : 
double;
                       
YScale      : 
double;
                       
Rotation    : double) : OleVariant;


 


var
 retval   : 
OleVariant;
  InsPoint : Variant;
begin


 


  InsPoint := VarArrayCreate([0,2], 
varDouble );


 


  InsPoint[0] := XInsPoint;
  
InsPoint[1] := YInsPoint;
  InsPoint[2] := ZInsPoint;


 


  Result := AcDoc.ModelSpace.InsertBlock( 
InsPoint, sBlockName, XScale, YScale, Rotation);


 


 { produce errore di incompatibilita` di 
tipi }
end;


 


Mentre questo produce l'errore seguente: 
Type not 
allowed in OLE Automation call.


 


function AcInsertBlock(sBlockName  : 
String;
                       
XInsPoint   : 
double;
                       
YInsPoint   : 
double;
                       
ZInsPoint   : 
double;
                       
XScale      : 
double;
                       
YScale      : 
double;
                       
Rotation    : double) : OleVariant;


 


var
 retval   : 
OleVariant;


begin
  {ATTENZIONE PRODUCE 
QUESTO ERRORE:
  [Error] uAcInterface.pas(113): Type not allowed in 
OLE Automation call}
  Result := AcDoc.InsertBlock( 
VarArrayOf([XInsPoint,YInsPoint,ZInsPoint]), sBlockName, XScale, YScale, 
Rotation );
end;


 


In Visual Basic il seguente codice funziona 
correttamente:


 


Dim retval  As Object
Dim acInsP(0 
To 2) As Double 'Punto inserimento del blocco


  acInsP(0) = 260#
  acInsP(1) 
= 240#


  acInsP(2) = 0#


 


  Set retval = 
acmoSpace.InsertBlock(acInsP, "Tabella3", 1, 1, 0)


 


Se qualcuno ha qualche idea o conosce qualcuno che mi possa 
aiutare, o qualche sito dove recuperare le informazioni che mi servono, vi prego 
di scrivermi 
vallong...@tiscalinet.it


Grazie.



 
  ha scritto nel messaggio 
news:8ftsps$5e3$1...@nslave2.tin.it
...






Anzitutto grazie per l'interessamento.


 


Devo realizzare un programma che, letti alcuni dati (lista materiale) da un 
dBase, li trasferisca in tabelle all'interno dei fogli del mio disegno. 
Naturalmente non posso definire una semplice tabella unica, sarebbe troppo 
facile, ma una per foglio.


Quindi il LISP non e` il linguaggio + adatto allo scopo.


 


Grazie.


 



 
  wrote in message 
8fu59r$jiu$1...@nslave2.tin.it
...


>
[...]
Il punto di inserimento e` un array di double.
[...]
function AcInsertBlock(sBlockName  : String;
                       XInsPoint   : double;
                       YInsPoint   : double;
                       ZInsPoint   : double;
                       XScale      : double;
                       YScale      : double;
                       Rotation    : double) : OleVariant;
var
 retval   : OleVariant;
  InsPoint : Variant;
begin
  InsPoint := VarArrayCreate([0,2], varDouble );
  InsPoint[0] := XInsPoint;
  InsPoint[1] := YInsPoint;
  InsPoint[2] := ZInsPoint;
  Result := AcDoc.ModelSpace.InsertBlock( InsPoint, sBlockName, XScale,
YScale, Rotation);
 { produce errore di incompatibilita` di tipi }
end;
[...]
In Visual Basic il seguente codice funziona correttamente:
Dim retval  As Object
Dim acInsP(0 To 2) As Double 'Punto inserimento del blocco
  acInsP(0) = 260#
  acInsP(1) = 240#
  acInsP(2) = 0#
  Set retval = acmoSpace.InsertBlock(acInsP, "Tabella3", 1, 1, 0)
<<
Provato a fare come in VB?
function AcInsertBlock(sBlockName  : String; ...): ...;
const APoint: array[0..2] of double = (0, 0, 0);
begin
    APoint[0] := XInsPoint;
    ...
    Result := OleServer.InsertBlock(APoint, ...);
end;
hth
Paolo Arosio


Scusa se rispondo in ritardo, ma ho preso un potente raffreddore.
Si, ho provato ma produce il seguente errore:
[Error] uAcInterface.pas(117): Type not allowed in OLE Automation call
Grazie Ciao