Autor
|
Thema: Auslesen von Blockeigenschaften mittels VBA möglich? (12902 mal gelesen)
|
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 03. Nov. 2004 08:59 <-- editieren / zitieren --> Unities abgeben:
Ich bin Dir deshalb nicht böse und kann das verstehen. Das mit dem Konzept ist richtig, nur fällt es mir schwer, dieses aufzustellen, weil ich ja selber noch nicht richtig weiß, wie alles funktionieren soll. Das mit dem VBA ist leider alles Neuland für mich und ich weiß nicht, ob dann mein aufgestelltes Konzept überhaupt so umsetzbar ist -es ist sozusagen wie ein kleiner Teufelskreis.Trotzdem Danke für die Tipps und die Unterstützung. Ich werde versuchen, erst einmal dieses Konzept hinzubekommen und dann sehe ich weiter. K Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BloodyMess Mitglied Applicationingenieur
Beiträge: 603 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 03. Nov. 2004 08:48 <-- editieren / zitieren --> Unities abgeben:
Moinsen kiltswitch,wahrscheinlich kannst Du mit der TextDatei nichts anfangen, aber das ist auch nicht schlimm. Den Teil kannst Du ja auch ohne Probleme wieder rausnehmen, die Koordinaten stehen ja weiterhin im Code. Wie wäre es, wenn Du Dir erstmal die Koordinaten deiner Anbindungspunkte lokal, also ausgehend vom Einfügepunkt bestimmst. Deine ganzen Teile, die Du Dir da dranhängen möchtest scheinen katalogisiert zu sein. Ist es denn denkbar, dass Antennen oder was auch immer, an mehreren Anbindpunkten eingefügt werden können? Ich denke mal ja. Das einfachste wäre dann wahrscheinlich, wenn Du Dir ein Formular erstellst, in dem so ein nackter Mast gezeichnet ist und der Benutzer sucht sich einfach nur den Anbindepunkt aus und welches Dingens dort dran gezeichnet werden soll. Ich glaub das wäre das einfachste. Und dein Programm kennt ja dann die lokalen Koordinaten. Voraussetzung wäre natürlich, das es den Mast dann auch in der Zeichnung gibt. Aber das sollte ja nicht das Problem sein. Das nochmal als Anregung. Wie Du nun weitervorgehen sollst oder kannst, kann ich Dir nicht vorschreiben oder sagen. Ich bin gerne bereit, Dich bei Programmierproblemen und Anderen zu unterstützen, aber es wäre schön, wenn von Dir auch etwas kommen würde, was die Lösung angeht und nicht wie Du etwas realisieren sollst. Wenn es irgendwo hängt, kein Problem, da hilft Dir in dem Forum hier jeder. Es ist schwer sich etwas vorzustellen, was man noch nie gesehen hat, geschweige denn eine Lösung dazu zu finden. Entwickle doch erstmal ein Konzept, wie das ganze mal aussehen soll, was es können soll. Dann entwirfst Du eine erste Oberfläche und die Programmierung dazu kommt von ganz alleine. Ich hoffe es hilft Dir weiter, aber sei mir nicht bös. Ich kann auch nicht den ganzen Tag im Forum hängen, muss nebenbei auch noch nen bissle studieren und meine Brötchen verdienen. Gruß TP ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 03. Nov. 2004 08:25 <-- editieren / zitieren --> Unities abgeben:
Der oben stehende Code bezieht sich ja darauf, dass in der Zeichnung bereits Blöcke vorhanden sind und von diesen werden dann die Koordinaten ermittelt und die Textdatei ausgelesen.Mein Ziel ist es jedoch, in eine leere Zeichung über das entwickelte Menü die Blöcke der Einzelbauteile (aus den anderen dwg-Dateien) sozusagen zu importieren und diese automatisch an der richtigen Stelle zusammenfügen zu lassen. D.h. gleich beim Importieren des Blockes müssen die Koordinaten des Basispunktes verarbeitet werden. K Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 03. Nov. 2004 08:14 <-- editieren / zitieren --> Unities abgeben:
Hallo,erst noch einmal recht vielen Dank für die gestrige Hilfe mit dem Code. Nun stellt sich mir die Frage, wie ich mit den Basispunktkoordinaten in der Textdatei weiterarbeiten kann bzw. ob mir das überhaupt richtig weiter hilft? Mir schwebt ja vor, über ein Menü in AutoCAD alles verwalten zu können, d.h. ich wähle im Menü einen leeren Mast aus, dann meinetwegen den Mastfuß, danach das Fundament usw. und mein Programm, welches hinter dem Menü steckt, fügt diese Blöcke automatisch zusammen. Wie kann ich das umsetzen? K [Diese Nachricht wurde von kiltswitch am 03. Nov. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BloodyMess Mitglied Applicationingenieur
Beiträge: 603 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 02. Nov. 2004 18:09 <-- editieren / zitieren --> Unities abgeben:
Freuen würd ich mich über einen Kaffee und 10U`s .. Gruß TP ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 02. Nov. 2004 17:01 <-- editieren / zitieren --> Unities abgeben:
Danke für den Code, das Auslesen der Koordinaten des Basispunktes funktioniert auf diese Weise. Nun muß ich bloß noch mit den Daten in der Textdatei etwas anfangen können - aber heute nicht mehr. Feierabend ;-)Vielleicht sieht man sich ja morgen wieder hier, ich bin Dir sehr dankbar für Deine Hilfe! K Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BloodyMess Mitglied Applicationingenieur
Beiträge: 603 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 02. Nov. 2004 16:50 <-- editieren / zitieren --> Unities abgeben:
Der Code liest Dir den Einfügepunkt aller Blöcke in deiner aktuellen DWG aus und schreibt sie in die Datei. Den Verweis auf die 'Microsoft Scripting Runtime' nicht vergessen!Code: Sub ReadBlockProperties() Dim AcMapEntity As AcadEntity Dim AcMapBlock As AcadBlockReferenceDim fso As FileSystemObject Set fso = New FileSystemObject Dim TxtFile As TextStream Set TxtFile = fso.OpenTextFile("c:\ausgabe.txt", ForWriting, True) For Each AcMapEntity In ThisDrawing.ModelSpace If AcMapEntity.ObjectName = "AcDbBlockReference" Then Set AcMapBlock = AcMapEntity TxtFile.WriteLine AcMapBlock.InsertionPoint(0) & _ vbTab & AcMapBlock.InsertionPoint(1) & _ vbTab & AcMapBlock.InsertionPoint(2) & vbCr End If Next TxtFile.Close Set TxtFile = Nothing Set fso = Nothing Set AcMapEntity = Nothing Set AcMapBlock = Nothing End Sub
Gruß TP ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 02. Nov. 2004 16:41 <-- editieren / zitieren --> Unities abgeben:
Achso, und wie genau liest man den nun aus? Wie lautet dazu der Code?Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 02. Nov. 2004 16:39 <-- editieren / zitieren --> Unities abgeben:
Mmh, ich befürchte, Du könntest Recht haben. Wenn ich mich entsinne, ist der Basispunkt nicht immer gleich dem Einfügepunkt. Und wenn man nur den Basispunkt des Blocks auslesen kann, dann könnte das wirklich problematisch werden. Dann komme ich wohl um eine mathematische Berechnung nicht drumherum :-(Ist bei einem Block wirklich nur der Basispunkt auslesbar? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BloodyMess Mitglied Applicationingenieur
Beiträge: 603 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 02. Nov. 2004 16:30 <-- editieren / zitieren --> Unities abgeben:
Wahrscheinlich ist es recht einfach zu realisieren, aber die Tücke liegt dabei meist im Detail. Ist der Basispunkt deines Blockes auch gleich der Einfügepunkt? Ein Block ist immer nur mit einem Punkt definiert und diesen kannst Du Dir auch nur auslesen. Deine Anbindepunkte sind scheinbar willkürliche Punkte in dem Block drinnen, die sind aber nirgends definiert. Das heisst, das Du diese Punkte auch nicht auslesen kannst! Die könntest Du Dir höchstens mathematisch bestimmen und dort den jeweiligen Block einfügen. Vorausgesetzt, die Abstände der Anbindepunkte sind wirklich immer identisch und eindeutig festgelegt. Aber eine andere Möglichkeit sehe ich sonst nicht. Gruß TP ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |