Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Delphi

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
  
PNY wird von NVIDIA zum Händler des Jahres gewählt - zum dritten Mal in Folge, eine Pressemitteilung
Autor Thema:  Delphi (2616 mal gelesen)
jörgT
Mitglied
Konstrukteur


Sehen Sie sich das Profil von jörgT an!   Senden Sie eine Private Message an jörgT  Schreiben Sie einen Gästebucheintrag für jörgT

Beiträge: 28
Registriert: 01.04.2004

erstellt am: 02. Dez. 2004 09:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Leute,

ich möchte mit Delphi7 eine ACAD Zeichnung erstellen bzw. bearbeiten.
Dabei sollen nach entsprechenden Berechnungen Linien, Bögen, Polylinien usw.
erzeugt werden und danach weiter manipuliert werden.
Mir gelingt zwar ein Einstieg in diese Problematik (ich kann eine Zeichnung aufrufen, siehe Programmzeilen),
aber weiter komme ich nicht.
Deshalb folgende Fragen:
- Ist diese Verbindung von ACAD und Delphi überhaupt der richtige Weg?
- Muß ich vorher eine ActivX-Komponente installieren?
- Wie würde eine Programmzeile z. B. zum erstellen einer Linie aussehen?
- Im VBA für ACAD kann ich mir die Objektbibliothek anzeigen.
  Kann ich diese in Delphi nutzen?
- Kann ich die VBA Programmierung nutzen (VBA kann ich selbst nicht, und
  möchte dies auch nicht großartig lernen)

ACADApp := GetActiveOleObject('AutoCad.Application');
ACADApp.Documents.Open('E:\beispiel.dwg');

Vielen Dank im voraus für die Beantwortung dieser Fragen

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


Sehen Sie sich das Profil von fuchsi an!   Senden Sie eine Private Message an fuchsi  Schreiben Sie einen Gästebucheintrag für fuchsi

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 02. Dez. 2004 10:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für jörgT 10 Unities + Antwort hilfreich

- Ist diese Verbindung von ACAD und Delphi überhaupt der richtige Weg?
kann ich dir nicht sagen,kenne Delphi selber nicht. aber da es OLE Objekte ansprechen kann und du diese sprache anscheinend kennst , warum nicht ?


- Muß ich vorher eine ActivX-Komponente installieren?
eigentlich nein, das instanzieren von autocad und das öfnnen funktioniert ja

- Wie würde eine Programmzeile z. B. zum erstellen einer Linie aussehen?
in vb würde das so aussehen
Dim p1(0 To 2) As Double
Dim p2(0 To 2) As Double
p1(0) = 0: p1(1) = 0: p1(2) = 0
p2(0) = 10: p2(1) = 10: p2(2) = 0
Call ACADApp.ActiveDocument.ModelSpace.AddLine(p1, p2)


- Im VBA für ACAD kann ich mir die Objektbibliothek anzeigen.
  Kann ich diese in Delphi nutzen?
die methoden und funktionsaufrufe sind normalerweise in jeder Programmiersprache gleich, also kannst du dir in VBA die Objektbibliothek anschauen und auf delphi ummüntzen


- Kann ich die VBA Programmierung nutzen (VBA kann ich selbst nicht, und möchte dies auch nicht großartig lernen)
nun ja wenn ich mir deinen code anschaue
ACADApp := GetActiveOleObject('AutoCad.Application');
ACADApp.Documents.Open('E:\beispiel.dwg');
ist das ja nicht so viel anders als VBA
das gleiche in VBA
SET ACADApp = createobject("Autocad.Application")
call ACADApp.Documents.Open("E:\beispiel.dwg")


------------------
WWW.FFZELL.AT.TC

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

mapcar
Mitglied
CADmin



Sehen Sie sich das Profil von mapcar an!   Senden Sie eine Private Message an mapcar  Schreiben Sie einen Gästebucheintrag für mapcar

Beiträge: 1250
Registriert: 20.05.2002

Die Phönizier haben das Geld erfunden - aber warum so wenig?
(Johann Nepomuk Nestroy)

erstellt am: 02. Dez. 2004 12:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für jörgT 10 Unities + Antwort hilfreich

Im Prinzip ist es egal, ob du die COM-Schnittstelle in AutoCAD über VBA oder Delphi ansteuerst - die COM-Methoden (früher auch ActiveX-Methoden genannt) sind die selben, egal ob Vlisp, VBA oder Delphi.

Ein Unterschied ist allerdings da - wie bei VB (nicht VBA) läuft Delphi nicht 'in process', rechne also damit, dass dein Programm stellenweise deutlich langsamer läuft als VBA oder VLisp.

Und ein weiterer Hinweis:
GetActiveOleObject('AutoCad.Application') und createobject("Autocad.Application") sind natürlich zwei verschiedene Stiefel, beide kann man in beiden Sprachen verwenden, sie erfüllen aber unterschiedliche Zwecke.

Beispiele von Tony Tanzillo zur Delphi-Programmierung in AutoCAD  findest du hier: http://members.bellatlantic.net/~vze2vjds/

Gruß, Axel Strube-Zettler

------------------
(defun - Lisp over night - AutoLisp-Programmierung für AutoCad - Da weiß man, wann man's hat
Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

jörgT
Mitglied
Konstrukteur


Sehen Sie sich das Profil von jörgT an!   Senden Sie eine Private Message an jörgT  Schreiben Sie einen Gästebucheintrag für jörgT

Beiträge: 28
Registriert: 01.04.2004

erstellt am: 03. Dez. 2004 11:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Vielen Dank für die Antworten,

nach anfänglichen Schwierigkeiten (der Typ variant und statische Arrays passten nicht zusammen) konnte ich nun erste Linien und Kreise in Acad erstellen (siehe Programmzeilen). Der Verweis auf die Seite von Tony Tanzillo war sehr hilfreich.

procedure TForm1.Button3Click(Sender: TObject);
var StartP1, EndP1, MoSpace, NewLine: Variant;
begin
  StartP1 := VarArrayCreate([0,2], varDouble);
  EndP1 := VarArrayCreate([0,2], varDouble);
  StartP1[0] := 0;
  StartP1[1] := 0;
  StartP1[2] := 0;
  EndP1[0] := 10;
  EndP1[1] := 10;
  EndP1[2] := 0;

  ACADApp := GetActiveOleObject('AutoCad.Application.16');
  Mospace := AcadApp.ActiveDocument.Modelspace;

  NewLine := MoSpace.AddLine(StartP1,EndP1);

  NewLine.Update;
end;


In einem nächsten Schritt will ich versuchen, Informationen aus den ACAD Objekten auszulesen.
Wenn jemand auch dazu einen Tip hätte, wäre ich dankbar. Ich werde es auf jeden Fall erstmal selbst versuchen.

Gruß Jörg

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

jörgT
Mitglied
Konstrukteur


Sehen Sie sich das Profil von jörgT an!   Senden Sie eine Private Message an jörgT  Schreiben Sie einen Gästebucheintrag für jörgT

Beiträge: 28
Registriert: 01.04.2004

Win 10 64Bit
Fujitsu Ceslsius
Nvidia Quadro
----------
Inventor 2022
Vault Workgroup 2022

erstellt am: 06. Dez. 2004 14:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Leute,

folgende Probleme tun sich auf beim Zugriff auf Objekte in ACAD mit Delphi.

Im VBA soll ein Zugriff folgendermaßen aussehen:

Dim AuswahlP1 As Object
Dim Prompt As String
Dim PickedPoint As Variant
.
.
Utility.GetEntity AuswahlP1, PickedPoint, Prompt

Mit Delphi habe ich folgendes versucht:
var PointP1, AuswahlA1 : Variant;
begin
  ACADApp := GetActiveOleObject('AutoCad.Application.16');
  AcadApp.ActiveDocument.utility.getEntity
  (AuswahlA1, PointP1, 'Eingabe');  //dies soll in einer Zeile stehen
end;

Dies bringt aber die Fehlermeldung Typkonflikt hervor.
Ich denke, das dieser Fehler an der 'Object'-Vereinbarung liegt,
welche im VBA durchgeführt wird, in Delphi aber nicht.
Was muß ich tun, um auf ein Objekt zugreifen zu können.

Danke im voraus,

Jörg


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

june
Mitglied


Sehen Sie sich das Profil von june an!   Senden Sie eine Private Message an june  Schreiben Sie einen Gästebucheintrag für june

Beiträge: 4
Registriert: 03.02.2005

erstellt am: 04. Feb. 2005 13:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für jörgT 10 Unities + Antwort hilfreich

Hallo Jörg,

ich stehe im Moment auch vor dem Problem
mit

AcadApp.ActiveDocument.utility.getEntity
  (VAR_IDISPATCH , VAR_POINT, 'TEXTETXETXT');

hast Du das Problem gelöst ?
Damit könntest Du mir weiterhelfen.

Gruß Jürgen

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP



Anzeige:Infos zum Werbeplatz >>

isuCAD CAD APP für Tiefbau, Umwelt

Since 1985, AnkiSOFT Software developes software to design infrastructure projects. isuCAD has been developed for Water Supply Network Design. It is for Drawing / Modelling / Planning / Design / Analyze / Simulation the water supply network. The software works under AutoCAD or ZWCAD.

apcad2
Mitglied


Sehen Sie sich das Profil von apcad2 an!   Senden Sie eine Private Message an apcad2  Schreiben Sie einen Gästebucheintrag für apcad2

Beiträge: 4
Registriert: 13.04.2005

erstellt am: 17. Aug. 2005 11:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für jörgT 10 Unities + Antwort hilfreich

var
  PickPnt: OleVariant;
  Obj: IDispatch;
  Poly: IAcadLWPolyline;
begin
  AcadApp.ActiveDocument.Utility.GetEntity(Obj, PickPnt, 'Bitte Polylinie selektieren: ');
  if (Obj as AcadEntity).EntityType = acPolylineLight then
    Poly := Obj as IAcadLWPolyline
  else
    AcadApp.ActiveDocument.Utility.Prompt('Dieses Objekt ist keine Polylinie!');
end;

In diesem Bsp. muss eine Polylinie selektiert werden. Ich hoffe, das bringt euch weiter.

[Diese Nachricht wurde von apcad2 am 17. Aug. 2005 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz