| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Koordinaten von Punkten/Objekten mit VBA auslesen (3574 mal gelesen)
|
Wg Mitglied
Beiträge: 7 Registriert: 09.07.2001
|
erstellt am: 09. Jul. 2001 12:05 <-- editieren / zitieren --> Unities abgeben:
Halloechen, ist es mittels VBA möglich, Koordinaten von Punkte oder Objekte (Viereck, Kreis)heraus zu lesen und diese in eine Datei zu schreiben? Die Punkte und Objekte sind in jeweilig spez. Layer. hat dies schon einer gemacht? Gruss Tom Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mariaca Mitglied Entwickler
Beiträge: 688 Registriert: 04.03.2000
|
erstellt am: 09. Jul. 2001 12:17 <-- editieren / zitieren --> Unities abgeben: Nur für Wg
Hallo Tom, da bin ich mir fast sicher! Mit Lisp auf jeden Fall dafür gibt es viele Beispiele auf Lisp spezifischen Seiten (Afralisp / Cadence usw.). Vielleicht bekommst Du da etwas gratis. Wenn Du ein bischen Geld ausgeben willst (so ca. 50 DEM) ist vielleicht das deutsche AutoCAD Magazin das richtige für Dich - die haben sogar eine CD (250 DEM ?) mit teils überraschenden LISP und VBA programmen - Vielleicht hat die ja auch jemand und leiht Sie Dir? Jetzt habe ich viel über LISP nicht aber viel über VBA gesagt! Kein Wunder VBA habe ich (zu Unrecht ) bisher ignoriert, da LISP direkt auf bekannte ACAD Befehle zugreift ist es einfach er für mich! Muß es denn VBA sein? TIP: Vielleicht bekommst Du was Du suchst indem Du Deine Objekte nach dem "LIST" Befehl aussuchst - bei Polylinien usw. wirft der Befehl die Koordinaten raus. Das könnte man per LISP auch automatisieren und die K- Werte auch in X/Y/Z WerteListen schreiben lassen. Für einfache Arbeiten kopierst Du den Inhalt der Ausgabe und editierst mit Texteditor! Gruß Harald Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Wg Mitglied
Beiträge: 7 Registriert: 09.07.2001
|
erstellt am: 09. Jul. 2001 12:22 <-- editieren / zitieren --> Unities abgeben:
|
Jasmann Mitglied Programmierer
Beiträge: 7 Registriert: 09.07.2001
|
erstellt am: 09. Jul. 2001 12:42 <-- editieren / zitieren --> Unities abgeben: Nur für Wg
Mit VBA ist durchaus möglich Koordinaten der verschiedenen Objekte auszulesen. Diese stehen in verschiedenen Property 's des Objektes. Polylinie in Auflistung Coordinates, Linien im Startpoint/Endpoint, Blockreferences im Insertionspoint u.s.w. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Torsten Niemeier Ehrenmitglied V.I.P. h.c. Maschinenbau Ingenieur
Beiträge: 3617 Registriert: 21.06.2001 "ZUSE I.36", 8 BIT, 32 Lämpchen, Service-Ölkännchen "ESSO-Super", Software: AO auf Kuhlmann-Parallelogramm-Plattform ** CSWP 04/2011 ** ** CSWE 08/2011 **
|
erstellt am: 09. Jul. 2001 12:47 <-- editieren / zitieren --> Unities abgeben: Nur für Wg
|
Wg Mitglied
Beiträge: 7 Registriert: 09.07.2001
|
erstellt am: 09. Jul. 2001 12:54 <-- editieren / zitieren --> Unities abgeben:
|
Jasmann Mitglied Programmierer
Beiträge: 7 Registriert: 09.07.2001
|
erstellt am: 09. Jul. 2001 12:56 <-- editieren / zitieren --> Unities abgeben: Nur für Wg
|
Wg Mitglied
Beiträge: 7 Registriert: 09.07.2001
|
erstellt am: 10. Jul. 2001 09:30 <-- editieren / zitieren --> Unities abgeben:
Hallo Jasmann, habe versucht diesen Block Commander zu laden. aber diese URL gibt es leider nicht mehr. Wuerde mich freuen, wenn du mir vielleicht dieses via mail zukommen lassen wuerdest, wenn du dies selber bereits hast. Schoenen Tag noch Tom Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Wg Mitglied
Beiträge: 7 Registriert: 09.07.2001
|
erstellt am: 10. Jul. 2001 09:33 <-- editieren / zitieren --> Unities abgeben:
Hallo Jasmann, habe versucht diesen Block Commander zu laden. aber diese URL gibt es leider nicht mehr. Wuerde mich freuen, wenn du mir vielleicht dieses via mail zukommen lassen wuerdest, wenn du dies selber bereits hast. Schoenen Tag noch Tom Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AB Mitglied
Beiträge: 255 Registriert: 24.05.2002 Mechanical Desktop 6 AutoCAD 2002
|
erstellt am: 30. Jul. 2002 14:43 <-- editieren / zitieren --> Unities abgeben: Nur für Wg
Hallo, ich bin auf der Suche nach einem Lisp-Programm, welches automatisch alle Konstruktionspunkte einer Zeichnung geordnet in eine Text-Datei speichert (X,Y,Z), so dass ich diese weiterverarbeiten kann, bzw. angeben kann, welche Punkte, wie mit einander verbunden werden sollen. Bisher habe ich leider nur Programme gefunden, die nach anklicken des entsprechenden Punktes, diesen in eine Text-Datei schreibt (s. http://home.arcor.de/cadwieselx/Sonstiges/sonstiges.html-> Punkteliste. Ich möchte aber nicht alle Punkte meiner Zeichnung einzeln anklicken müssen, da es einfach zu viele sind. Die Funktion "Auflisten", unter Hilfsmittel->Abfrage erfüllt diese Aufgabe ja quasi schon fast. Jetzt muss das herausgefilterte nur noch in eine bearbeitbare Textdatei oder Excel-Tabelle übertragbar werden Es wäre super, wenn mir da jemand helfen könnte. Ich weiß nämlich überhaupt nicht, wie ich das anstellen soll. Viele Grüße Andrea
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StephanJP Mitglied CAD-Admin
Beiträge: 830 Registriert: 09.11.2000
|
erstellt am: 30. Jul. 2002 16:29 <-- editieren / zitieren --> Unities abgeben: Nur für Wg
Hallo Andrea, vielleicht solltest Du Dein Problem in einem eigenen Beitrag posten? Dann bekommst Du viel mehr Resonanz, weil mehr Leute wissen, was Dein Problem ist. Zu Deinem Problem ist es prinzipiell recht einfach, alle Punktkoordinaten in eine Datei zu schreiben, nur weil mit 10.000 Punkten in einer Datei ohne irgendeine Ordnung kein Mensch was anfangen kann, hat das halt auch noch keiner so geschrieben. Beschreib halt nochmal genauer, was Du wirklich mit den Punkten anstellen willst ------------------
gruß stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Caladia Ehrenmitglied V.I.P. h.c.
Beiträge: 2546 Registriert: 04.03.2002 ACAD2009 ACAD2010 SP2 ACAD2011 SP1 ABDS-S 2012 SP2 ABDS-S 2013 SP2 ABDS-S 2014 SP1 ABDS-S 2015 SP2 ABDS-S 2016 Expresstools A3-Makroboard 16-Tasten Lupe Impression 3 Win7 64bit IE11 Firefox Office2003 SP3
|
erstellt am: 30. Jul. 2002 18:08 <-- editieren / zitieren --> Unities abgeben: Nur für Wg
|
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Autodesk Building Design Suite Premium 2021 Windows 10 Pro 64bit HP Workstation Z620, 24GB GeForce GTX 970
|
erstellt am: 31. Jul. 2002 08:02 <-- editieren / zitieren --> Unities abgeben: Nur für Wg
anbei findest du die vba-prozedur. sie gibt alle gewählten punkte unsortiert in eine textdatei aus. Code:
' (c)Feletic 31.07.2002 ' Übergibt Punktekoordinaten in Textdatei und ' speichert in Zeichnungspfad und Zeichnungsnamen Public Sub Dots_Extract_Text() Dim SS As AcadSelectionSet Dim Filnum As Integer Dim atts As Variant Dim Obj As Object Dim Punkt As AcadPoint Dim Pt(0 To 2) As String Dim Pfad As String Dim DatName As String Dim PfadDatei As String Dim FltTypes(0) As Integer Dim FltData(0) As Variant Dim pointUCS As Variant Dim pointWCS As Variant ' Filter erstellen FltTypes(0) = 0: FltData(0) = "POINT" ' Selectionset bilden und befüllen On Error Resume Next Set SS = ThisDrawing.SelectionSets("aussi_dotAuswahl") If Err Then On Error GoTo 0 Set SS = ThisDrawing.SelectionSets.Add("aussi_dotAuswahl") Else On Error Resume Next End If SS.Clear SS.SelectOnScreen FltTypes, FltData Pfad = ThisDrawing.GetVariable("DWGPREFIX") DatName = ThisDrawing.GetVariable("DWGNAME") DatName = Left(DatName, Len(DatName) - 4) PfadDatei = Pfad & DatName & ".txt" 'Datei öffnen Dim fs, a Set fs = CreateObject("Scripting.FileSystemObject") Set a = fs.CreateTextFile(PfadDatei, True) a.WriteLine ("X-Wert;Y-Wert;Z-Wert") ' Inhalt der Elemente schreiben For Each Obj In SS Set Punkt = Obj 'Eingabe des Einsetzpunktes pointWCS = Punkt.Coordinates ' Translate the point into UCS coordinates pointUCS = ThisDrawing.Utility.TranslateCoordinates(pointWCS, acWorld, acUCS, False) Pt(0) = funPunkt(LTrim(Str(pointUCS(0)))) Pt(1) = funPunkt(LTrim(Str(pointUCS(1)))) Pt(2) = funPunkt(LTrim(Str(pointUCS(2)))) a.WriteLine (Pt(0) & ";" & Pt(1) & ";" & Pt(2)) ' a.WriteLine (Punkt.Coordinates(0) & ";" & Punkt.Coordinates(1) & ";" & Punkt.Coordinates(2)) Next Obj a.Close End Sub
hoffe das genügt dir fürs erste roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AB Mitglied
Beiträge: 255 Registriert: 24.05.2002 Mechanical Desktop 6 AutoCAD 2002
|
erstellt am: 31. Jul. 2002 08:42 <-- editieren / zitieren --> Unities abgeben: Nur für Wg
|
AB Mitglied
Beiträge: 255 Registriert: 24.05.2002 Mechanical Desktop 6 AutoCAD 2002
|
erstellt am: 31. Jul. 2002 08:45 <-- editieren / zitieren --> Unities abgeben: Nur für Wg
Hallo Roland, habe gerade Deinen Beitrag entdeckt. Leider kenne ich mich gar nicht mit VBA aus. Ich weiß gerade mal, wie man es lädt. Könntest Du mir vielleicht noch sagen, wo ich den Code hinkopieren muss und was ich dann noch zu machen habe? Danke, Andrea Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Autodesk Building Design Suite Premium 2021 Windows 10 Pro 64bit HP Workstation Z620, 24GB GeForce GTX 970
|
erstellt am: 31. Jul. 2002 09:10 <-- editieren / zitieren --> Unities abgeben: Nur für Wg
kein problem, mit vbaide Visual Basic-Editor öffnen, auf der linken seite befindet sich der Projekt-Explorer, dort drinnen auf rechte maustaste drücken, Einfügen -> Modul. es öffnet sich dann ein fenster. sollte in der obersten zeile nichts stehen, dann kopier einfach folgende zeile hinein (ist allerdings nicht unbedingt notwendig). Code:
Option Explicit
dannach kopierst du einfach die zeilen hinein. Im Eigenschaftenfenster (üblicherweise unter dem Projekt-Explorer) kannst du den namen des moduls ändern (z.B. Koordinaten). wenn du dann diese prozedur in einem werkzeugkasten haben möchtest, einfach folgenden code als aufruf anhängen. Code:
^C^C-VBARUN;acad.dvb!Koordinaten.Dots_Extract_Text;
genaueres kannst du unter der entwicklerhilfe nachlesen roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AB Mitglied
Beiträge: 255 Registriert: 24.05.2002 Mechanical Desktop 6 AutoCAD 2002
|
erstellt am: 31. Jul. 2002 09:51 <-- editieren / zitieren --> Unities abgeben: Nur für Wg
Hallo Roland, ich muss Dich noch etwas Fragen, da beim Kompilieren folgende Fehlermeldung kommt: "Sub oder Funktion nicht definiert". Der Cursor bleibt bei der Zeile "Pt(0) = funPunkt(LTrim(Str(pointUCS(0))))" stehen. Unter dem Button Hilfe erscheint dann folgender Hinweis "Sie haben versucht, eine Prozedur eines anderen Projekts aufzurufen, ohne einen expliziten Verweis auf das Projekt im Dialogfeld Verweise hinzuzufügen". Leider ist bei mir der Button Verweise (unter Extras) allerdings inaktiv. Weißt Du, was ich da machen kann? Andrea Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Autodesk Building Design Suite Premium 2021 Windows 10 Pro 64bit HP Workstation Z620, 24GB GeForce GTX 970
|
erstellt am: 31. Jul. 2002 10:02 <-- editieren / zitieren --> Unities abgeben: Nur für Wg
etschuldige, das hab ich vergessen. Code:
'Ersetzt Komma durch Punkt Public Function funPunkt(Wert) Dim Punkt As Long Dim Komma As Long Wert = LTrim(Wert) Komma = InStr(Wert, ",") If Komma > 0 Then Mid(Wert, Komma) = "." Punkt = InStr(Wert, ".") If Punkt = 1 Then Wert = "0" & Wert funPunkt = Wert End Function
diese funktion einfach darunter hineinkopieren, sie ersetzt den "," durch einen "." wenn du das nicht möchtest dann einfach die nachfolgenden zeilen bei dir einfügen (es ist dann die funktion funPunkt() entfernt. Code:
Pt(0) = LTrim(Str(pointUCS(0))) Pt(1) = LTrim(Str(pointUCS(1))) Pt(2) = LTrim(Str(pointUCS(2)))
alles klar? roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AB Mitglied
Beiträge: 255 Registriert: 24.05.2002 Mechanical Desktop 6 AutoCAD 2002
|
erstellt am: 31. Jul. 2002 10:32 <-- editieren / zitieren --> Unities abgeben: Nur für Wg
Noch eine Frage habe ich. Sorry! Ich hoffe, dass das dann die letzte ist. Das hat alles soweit funktioniert. Allerdings weiß ich nicht, worin er die Punkte speichertm, so dass ich sie mir ansehen kann. Es kommt auch keine Frage, wo alles gespeichert werden soll. Es wird nur fehlerfrei kompiliert, dann soll ich meine Objekte auswählen und dann wird automatisch in den VBA-Editor umgeschaltet. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Autodesk Building Design Suite Premium 2021 Windows 10 Pro 64bit HP Workstation Z620, 24GB GeForce GTX 970
|
erstellt am: 31. Jul. 2002 10:43 <-- editieren / zitieren --> Unities abgeben: Nur für Wg
die datei hat den namen der zeichnung und wird in dem gleichen ordner wie diese als textdatei abgelegt. man kann natürlich auch den pfad und den namen abfragen, dazu braucht man aber noch weitere prozeduren. kannst du auch haben, wenn du unbedingt möchtest. roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AB Mitglied
Beiträge: 255 Registriert: 24.05.2002 Mechanical Desktop 6 AutoCAD 2002
|
erstellt am: 31. Jul. 2002 10:52 <-- editieren / zitieren --> Unities abgeben: Nur für Wg
|