Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  Export von Koordinaten mittels VBA

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
Autor Thema:  Export von Koordinaten mittels VBA (1094 mal gelesen)
a.hinke
Mitglied


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

Beiträge: 8
Registriert: 12.07.2021

AutoCAD 2017
Windows 10 Pro
i5-9400F
Quadro P620

erstellt am: 12. Jul. 2021 09:05    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

Mein Gehversuche in AutoCAD haben vor nicht all zu langer Zeit begonnen, bin aber grundsätzlich mit vielen unterschiedlichen CAD Systemen vertraut.

Ich arbeite in AutoCAD 2017 und möchte gern nachfolgendes Problem lösen. Um es klein anzugehen folgender Modellaufbau im AutoCAD.

Es gibt zwei Layer T01 und T02 (Layer "0" ausgenommen).
Auf jedem Layer liegt jeweils ein Kreis mit d = 10 mm (obwohl der Durchmesser eher irrelevant ist).
Der Kreis im Layer T01 liegt auf der Koordinate (X in mm, Y in mm) "0.0000, 0.0000" und der Kreis im Layer T02 liegt auf der Koordinate (X in mm, Y in mm) "1.234, -1.234".

Ich möchte nun diese Informationen in eine Datei im Textformat schreiben, sodass folgender Syntax entsteht.

T01
X00000Y00000
T02
X01234Y-1234

Wie ihr seht, gibt es keine Trennzeichen und der Wert wird in tausendstel mm geschrieben. Das Zahlenpaket besteht aus mindestens 5 Zeichen (je nach Bedarf vorlaufende Nullen oder ein "-" und je nach Bedarf vorlaufende Nullen).

Ich denke nicht, dass es hierfür einen "simplen" Befehl gibt. Aber mittels eines VBA sollte das Thema eigentlich umsetzbar sein.

Mir fehlt nun ein Ansatzpunkt bzw. Hinweise, wo ich Befehle finden kann, welche ich in eine VBA Programmierung verwenden kann.

Wenn VBA hier genauso funktioniert wie in Excel, dann bekomme ich das sicherlich hin. In Sachen Excel VBA findet man ja auch jede Menge Beschreibungen und Hilfen im Netz. Für VBA in AutoCAD bin ich mir da nicht so sicher. Aber ehrlicher Weise habe ich hierzu auch noch nicht wirklich gesucht.

Danke schon mal im Voraus für all Eure Ideen.


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

Peter2
Ehrenmitglied V.I.P. h.c.




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

Beiträge: 3701
Registriert: 15.10.2003

Win 10/64 Pro
AutoCAD MAP 3D 2018 / 2023
BricsCAD 22

erstellt am: 12. Jul. 2021 11:00    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 a.hinke 10 Unities + Antwort hilfreich

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Bricscad V11-V21 pro
Plateia, Canalis
Visual Basic

erstellt am: 12. Jul. 2021 11:35    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 a.hinke 10 Unities + Antwort hilfreich

Hallo a.hinke, willkommen im Forum    

Hier auf cad.de gibt es unterschiedliche Foren, zur Programmierung zum Beispiel
AutoCAD VBA, Diskussionen rund um die AutoCAD VBA Programmierung .. oder Excel, Alles rund um MS-Excel .
Ein Beispiel einer Steuerung von Autocad über Excel wäre hier .

Wenn Du schon Erfahrung mit Programmierung unter Excel hast, solltest Du Dir das ActiveX-Modell zu Gemüte führen.
Wenn Du dort auf das Element tippst bekommst du weitere Hinweise wie Du diese abfrägst, danach kannst Du Dein Programm entsprechend aufbauen.
Gibt ja verschiedene Methoden für Deine Anfrage: Durchlaufen der Layer damit alle Kreise darauf hintereinander stehen oder einfach nur Abfrage der Kreise (circleObj.layer, circleObj.Center(0)*1000 )

Wenn Du Probleme mit dem Code hast, kannst Du gerne Deinen Code mit Angabe des Fehlers hier einstellen.

Grüße
Klaus      

[edit] Schau Dir auch mal den Developer Guide an. Dort wird die Programmierung unter VBA für Autocad erklärt, Hinweise für den Zugriff auf die Zeichnungselemente gegeben, aber auch wie man mit SelectionSets und Filtern arbeitet. Gerade bei großen Zeichnungen ist das eine große Hilfe und erspart zusätzliche Abfragen.

[Diese Nachricht wurde von KlaK am 12. Jul. 2021 editiert.]

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

a.hinke
Mitglied


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

Beiträge: 8
Registriert: 12.07.2021

AutoCAD 2017
Windows 10 Pro
i5-9400F
Quadro P620

erstellt am: 12. Jul. 2021 14:46    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

Super, das ist genau das wonach ich gesucht habe um den Einstieg zu finden. Danke

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Bricscad V11-V21 pro
Plateia, Canalis
Visual Basic

erstellt am: 12. Jul. 2021 22:43    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 a.hinke 10 Unities + Antwort hilfreich

Ach ja, wenn es eine Lösung ohne VBA sein soll, schau dir mal die Datenextraktion an. Damit kannst Du Layername, X, Y etc. in eine Datei oder Exceltabelle schreiben. Die Werte müßten dann natürlich noch nachbehandelt werden.

Grüße
Klaus 

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

a.hinke
Mitglied


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

Beiträge: 8
Registriert: 12.07.2021

AutoCAD 2017
Windows 10 Pro
i5-9400F
Quadro P620

erstellt am: 13. Jul. 2021 08:00    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

Ja, das hatte ich mir auch bereits überlegt. Allerdings muss ich ja dann im Nachgang via VBA im Excel Hand anlegen. Und da dachte ich mir, dass ich es auch einfach gleich über das VBA im AutoCAD machen kann. Sobald ich was brauchbares habe stelle ich es hier gern zur Verfügung. Allerdings kann das alles dauern, da das eher ein Nebenprojekt ist.

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

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



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

Beiträge: 9732
Registriert: 01.12.2003

AutoCAD 2.5 - 2022, Civil 3D, MAP 3D, ACADM
Inventor AutoCAD 2022, AIP 4-2022
Win 10

erstellt am: 13. Jul. 2021 09:10    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 a.hinke 10 Unities + Antwort hilfreich

Die älteste und äußerst kompakte Programmiersprache in AutoCAD ist LISP.
Um mal Alternativen zu VBA in AutoCAD aufzuzeigen.

Folgenden Code in eine Textdatei mit der Endung LSP kopieren und dann mit APPLOAD laden.
Liefert auch das gewünschte Ergebnis.
Zeitdauer für die Erstellung ca. 15min.

Code:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Lisp Beispiel
;;; CAD.de Formum 13.07.2021 - Udo Hübner - CAD-Huebner.de
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; Unterfunktion für das Formatieren der Koordinaten

(defun formatnumber (num digits)
  (setq numstr (rtos (* num 1000) 2 0)
        numlen (strlen numstr)
  )
  (if (< numlen digits)
    (if (minusp num)
      (setq numstr (strcat "-" (substr "0000000000" 1 (- digits numlen)) (substr numstr 2 (1- numlen))))
      ;else
      (setq numstr (strcat     (substr "0000000000" 1 (- digits numlen)) numstr))
    )
  )
  numstr ; return value
)

;;; Hauptpropgramm

(defun C:NCCode ()

  (prompt "\nwähle Kreise:")
  (setq AWSkreise (ssget (list (cons 0 "CIRCLE"))) ;; AWS = Auswahlsatz
        AnzKreise (sslength AWSKreise)
  )
  (write-line "------------------------")
  (while (>= (setq Anzkreise (1- AnzKreise)) 0)
    (setq ElisteKreis (entget (ssname AWSKreise Anzkreise))
          layer       (cdr (assoc 8 ElisteKreis))
          Mpkt        (cdr (assoc 10 ElisteKreis))
    )
    (write-line layer)
    (Write-line (strcat (formatnumber (car Mpkt) 10) "," (formatnumber (cadr Mpkt) 10)))
  )
  (write-line "------------------------")
  (prin1)

   



------------------
Mit freundlichem Gruß

Udo Hübner
www.CAD-Huebner.de

[Diese Nachricht wurde von CAD-Huebner am 13. Jul. 2021 editiert.]

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Bricscad V11-V21 pro
Plateia, Canalis
Visual Basic

erstellt am: 13. Jul. 2021 12:04    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 a.hinke 10 Unities + Antwort hilfreich

@a.hinke: Ja, da hast Du sicherlich recht. War nur so eine Idee falls Dir die Zeit fehlen sollte Dich mit dem ActiveX-Objektmodell vertraut zu machen.

@Udo: Da hast Du sicherlich recht, dass man sehr kompakten Code schreiben kann. Aber man muß dazu eine völlig andere Programmiersprache erlernen, was auch nicht mal so schnell nebenbei geht  In 15 min hätte ich das in Lisp nicht geschafft, da fehlen mir einfach die Grundlagen.

Das VBA-Makro dagegen ist in fünf Minuten (mit Testen evtl. 10 min) schnell geschrieben  :

Code:
Sub Schreib_Liste()
    Dim ent As AcadObject
    Dim circleObj As AcadCircle
    Dim BRefObj As AcadBlockReference
    Dim X As Double, Y As Double
    Dim bWrite As Boolean
   
    Open "D:\Kreis.txt" For Output As #1
    For Each ent In ThisDrawing.ModelSpace
        bWrite = True
        Select Case ent.ObjectName
          Case "AcDbCircle":
                            Set circleObj = ent
                            X = circleObj.Center(0)
                            Y = circleObj.Center(1)
          Case "AcDbBlockReference":
                            Set BRefObj = ent
                            X = BRefObj.InsertionPoint(0)
                            Y = BRefObj.InsertionPoint(1)
          Case Else: bWrite = False
        End Select
        If bWrite = True Then
            Print #1, ent.Layer
            Print #1, Format(Round(X * 1000, 0), "00000"); ","; Format(Round(X * 1000, 0), "00000")
        End If
    Next ent
    Close #1
End Sub

Aber da kenne ich den Syntax auswendig und muß nicht lange nach DXF-Codes suchen. Gut, der SelectionSet fehlt noch, wäre aber auch nicht das Thema.
Habe als Beispiel für weitere Objekte noch eine Blockreference eingefügt, in Lisp bliebe es hier ja beim Code 10, müßte nur beim ssget "Insert" ergänzen.

Grüße
Klaus 

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

a.hinke
Mitglied


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

Beiträge: 8
Registriert: 12.07.2021

AutoCAD 2017
Windows 10 Pro
i5-9400F
Quadro P620

erstellt am: 13. Jul. 2021 14:59    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 CAD - Huebner,

danke für den Hinweis auf LISP.

Gibt es Vorteile / Nachteile in der Benutzung der jeweiligen Programmiersprache?

Ein Vorteil denke ich ist, dass man alle Zeilen auch direkt in die Befehlszeile von AutoCad einfügen kann oder ginge das mit den VBA Zeilen auch?

Grundsätzlich habe ich nichts dagegen, mich mit einer weiteren Sprache auseinander zu setzen.
Nur wenn es eigentlich nicht nötig ist, würde ich mir die Zeit sparen und meine Kenntnisse eher in VBA verbessern.

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Bricscad V11-V21 pro
Plateia, Canalis
Visual Basic

erstellt am: 13. Jul. 2021 17:27    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 a.hinke 10 Unities + Antwort hilfreich

Nein, VBAzeilen kann man nicht so direkt über Command aufrufen.

Eine ausführliche Homepage zum Lernen von Lisp findest Du hier, dort gibt es auch Links für tiefergehende Anwendungen.

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

a.hinke
Mitglied


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

Beiträge: 8
Registriert: 12.07.2021

AutoCAD 2017
Windows 10 Pro
i5-9400F
Quadro P620

erstellt am: 14. Jul. 2021 08:10    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

Das ging alles schneller als erwartet.

Ich bin am Ende bei VBA geblieben, auch wenn ich über LISP das gleiche Ergebnis erzielen konnte.

Hier mein VBA

--------------------------

Sub Bohrdaten()

    Dim Obj As AcadObject
    Dim circleObj As AcadCircle
    Dim X As String, Y As String
    Dim layerEntry As AcadLayer
     
    Open "<Pfad>\Bohrdaten_AutoCAD.bor" For Output As #1
   
    Print #1, "%3000"
   
    For Each layerEntry In ThisDrawing.Layers
   
        If layerEntry.LayerOn = True Then
       
            Print #1, layerEntry.Name
           
            For Each Obj In ThisDrawing.ModelSpace
           
                If Obj.Layer = layerEntry.Name And Obj.ObjectName = "AcDbCircle" Then
               
                    Set circleObj = Obj
                   
                    If circleObj.Center(0) < 0 Then
                        X = Format(Round(circleObj.Center(0) * 1000, 0), "0000")
                    Else
                        X = Format(Round(circleObj.Center(0) * 1000, 0), "00000")
                    End If
                   
                    If circleObj.Center(1) < 0 Then
                        Y = Format(Round(circleObj.Center(1) * 1000, 0), "0000")
                    Else
                        Y = Format(Round(circleObj.Center(1) * 1000, 0), "00000")
                    End If
                   
                    Print #1, "X"; X; "Y"; Y
                   
                End If
               
            Next Obj
           
        End If
   
    Next layerEntry
   
    Close #1
   
End Sub


--------------------------

Ich werde das VBA sicherlich noch um weitere Funktionen erweitern, sodass es am Ende den Anforderungen genügt und ein guter Automatismus zur Verfügung steht.

An alle hier recht herzlichen Dank für die Einführung zu diesem Thema und das ihr mir das "Laufen" beigebracht habt.

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

a.hinke
Mitglied


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

Beiträge: 8
Registriert: 12.07.2021

AutoCAD 2017
Windows 10 Pro
i5-9400F
Quadro P620

erstellt am: 22. Jul. 2021 14:34    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,

ich hab da nun doch nochmal an etwas zu knobeln. Also vom Grundsatz komme ich an die Informationen die ich benötige, sofern dir Kreise nicht innerhalb von Blöcken liegen. Aber wie komme ich jetzt an diese?

Über die "AcDbBlockReference" bekomme ich ja nur die Informationen, wo der gesamte Block eingefügt wurde.

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Bricscad V11-V21 pro
Plateia, Canalis
Visual Basic

erstellt am: 22. Jul. 2021 16:08    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 a.hinke 10 Unities + Antwort hilfreich

Hallo,
Die Tücken merkt man immer erst beim Testen  

Aber auch hier gibt es eine Lösung.
Über BlockReference.Explode kannst Du den Inhalt der Reference einem neuem Varant-Array zuweisen.
Dieses Durchlaufen und die Kreise herausschreiben.
Ein Beispiel dazu findest Du hier

Im Gegensatz zum Autocadbefehl _Explode wird hier die ursprüngliche Blockreference nicht aufgelöst sondern im Prinzip eine Kopie davon erzeugt.
D.h. Du mußt dann entscheiden ob du die BlockReference oder die kopierten Elemente aus der Zeichnung löscht.

Grüße
Klaus  

[Diese Nachricht wurde von KlaK am 22. Jul. 2021 editiert.]

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

a.hinke
Mitglied


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

Beiträge: 8
Registriert: 12.07.2021

AutoCAD 2017
Windows 10 Pro
i5-9400F
Quadro P620

erstellt am: 22. Jul. 2021 17:25    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

Nabend,

wäre es nicht viel einfacher, wenn man wie folgt vorgeht?

alle sichtbare Objekte markieren (Es sind ja nur die Layer aktiv, die ich auch exportieren will.)

  Befehl "Ursprung" in der Befehlsleiste eingeben und Enter drücken

      Daten exportieren (Soweit funktioniert ja die Routine bereits.)

        Rückgängig Button klicken

Das ganze dann als Script ausführen.

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Bricscad V11-V21 pro
Plateia, Canalis
Visual Basic

erstellt am: 22. Jul. 2021 22:53    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 a.hinke 10 Unities + Antwort hilfreich

Klar kann man das auch machen, jeder schreibt das Programm wie er es benutzen möchte. Ich habe auch einige die nur für ganz spezielle Konstellationen funktionieren. Möchte man es vielseitiger wird es komplizierter (Stichwort Block in Block, Block in XRef).

Man könnte auch die Zeichnung über Script öffnen, Blöcke auflösen, Programm laufen lassen und Zeichnung ohne Speichern schließen - alles möglich ...

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

a.hinke
Mitglied


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

Beiträge: 8
Registriert: 12.07.2021

AutoCAD 2017
Windows 10 Pro
i5-9400F
Quadro P620

erstellt am: 23. Jul. 2021 11:19    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 erneut,

meine Idee von gestern lässt sich irgendwie nicht umsetzen.

Ich befinde mich zum Start im Layout Bereich.

Gebe ich folgende Befehle,

------------------------------------
_.MSPACE
_AI_SELALL
URSPRUNG
_-VBARUN
Export.Bohrdaten
_.UNDO
4
------------------------------------

einzeln in die Befehlszeile, dann bekomme ich folgendes Resultat:

------------------------------------
Befehl: _.MSPACE
Befehl: _AI_SELALL
Objekte werden gewählt...fertig.
Befehl: URSPRUNG
387 gefunden
356 konnten nicht aufgelöst werden.
Verknüpfung der Bemaßung aufgehoben
Verknüpfung der Hilfslinien aufgehoben
Verknüpfung der Hilfslinien aufgehoben
Verknüpfung der Hilfslinien aufgehoben
Verknüpfung der Hilfslinien aufgehoben
Verknüpfung der Bemaßung aufgehoben
Befehl: _-VBARUN
Makroname: Export.Bohrdaten
Befehl: _.UNDO
Aktuelle Einstellungen: Automatisch = Aus, Steuerung = Alle, Zusammenfügen = Ja, Layer = Ja
Anzahl der rückgängig zu machenden Operationen eingeben oder [Auto/Steuern/Beginn/Ende/Markierung/Rück] <1>: 4
-VBAAUSF URSPRUNG AI_SELALL MBEREICH
------------------------------------

Sind die Befehle in der Skriptdatei, bekomme ich folgendes Resultat:

------------------------------------
Befehl: _.MSPACE
Befehl: _AI_SELALL
Objekte werden gewählt...fertig.
Befehl: URSPRUNG
Objekt wählen: _-VBARUN
*Ungültige Auswahl*
Erwartet einen Punkt oder Letztes/ALLE/Gruppe
------------------------------------

Es scheint, dass die ausgewählten Objekte nicht von dem Befehl "URSPRUNG" übernommen werden und dann somit die Aufforderung "Objekt wählen:" kommt. Damit ist natürlich die Routine in die Fritten. Aber warum verhält es sich so? Hat da jemand eine Prompte Idee?


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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 23. Jul. 2021 11:47    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 a.hinke 10 Unities + Antwort hilfreich

_.MSPACE
_AI_SELALL
URSPRUNG
_-VBARUN
Export.Bohrdaten
_.UNDO
4
------------------------------------

>>"einzeln in die Befehlszeile, dann bekomme ich folgendes Resultat:"
lööft


>>"Sind die Befehle in der Skriptdatei, bekomme ich folgendes Resultat:"

------------------------------------
Befehl: _.MSPACE
Befehl: _AI_SELALL
Objekte werden gewählt...fertig.
Befehl: URSPRUNG
Objekt wählen: _-VBARUN
*Ungültige Auswahl*
Erwartet einen Punkt oder Letztes/ALLE/Gruppe
------------------------------------

>>"Hat da jemand eine Prompte Idee?"
Gar Wissen, einige haben 

>>"Es scheint, dass die ausgewählten Objekte nicht von dem Befehl "URSPRUNG" übernommen werden"
>>"und dann somit die Aufforderung "Objekt wählen:" kommt."

Korrekt, die hier über ein Script gestartete Befehlversion akzeptiert nur ObjektNachBefehl
und kann auch nur ein einziges Objekt auflösen (wie in der Hilfe[F1] dokumentiert).
Werden AutoCAD-Befehl durch eine Automation gesteuert - script,macro,(send)command
wird in einigen Fällen wo dies eben zutrifft, eine "alte" Version des Befehls gestartet.
Auf diese Weise erhält man sich die Kompatibilität von älteren Automationsprozessen.
Ohne Erklärungen and Variante, hier gebe ich dir jetzt einfach einen Lispausdruck,
du darfst aber auch gerne eine Schleife in VBA bauen welche 1 nach dem anderen auflöst(Performance).
Also: Bevor du so einen Befehl aufrufst, sende Folgenes in die Befehlszeile
(initcommandversion)

Man würde es auch noch durch eine Systemumstellung hinbekommen, aber in AutoCAD im Zusammenhang mit Scripten schlage ich das eher nicht vor.


>>"Damit ist natürlich die Routine in die Fritten."
Ja, da muß man dann anders vorgehen im Script.
Erst Befehl, dann Objektwahl ALLE. Beispiel von PEDIT:
PEDIT
mehrere
ALLE

somit wäre ein "alle Objekte an Befehl übergeben" gelöst.
(nur das in diesem besonderen Fall auch das nicht viel hilft)


>>"Aber warum verhält es sich so?"
Kompatibilitätssicherstellung für Abmillionen von Programmen, Menüdateien und Scripten weltweit.


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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Bricscad V11-V21 pro
Plateia, Canalis
Visual Basic

erstellt am: 23. Jul. 2021 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 Nur für a.hinke 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von a.hinke:
Hallo erneut,
meine Idee von gestern lässt sich irgendwie nicht umsetzen.

Aber Du bekommst Du schon einen Hinweis beim Programmablauf:

Zitat:
Befehl: _.MSPACE
Befehl: _AI_SELALL
Objekte werden gewählt...fertig.
Befehl: URSPRUNG
Objekt wählen: _-VBARUN
*Ungültige Auswahl*
Erwartet einen Punkt oder Letztes/ALLE/Gruppe

Wenn ich das lese, lasse ich einfach den _AI_SELALL weg und ergänze
URSPRUNG Alle

Alternativ : Ursprung L (dann muss _AI_SELALL natürlich drin bleiben)
Das sollte ja dann klappen. Wichtig dabei: Eine Leerzeile nach dem Befehl damit die Auswahl beendet und die Objekte bearbeitet werden. Manche Befehle verhalten sich im Script anders als im Autocad (wie cadffm schon schrieb).

Bzgl. des Programmaufrufs:
in Makros wie in Scripten verwende ich hier
(Command "VBARUN" "Export.Bohrdaten")

bzw. (^C^CCommand "VBARUN" "Export.Bohrdaten") Zweimal ESC damit auch wirklich alle vorherigen Befehle beendet sind.

Teste es und berichte, mir fehlt gerade die Zeit dazu  

[Diese Nachricht wurde von KlaK am 23. Jul. 2021 editiert.]

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



Bauingenieur:in / Architekt:in (m/w/d)

In der Stabsstelle Bauplanung der Generaldirektion der Staatlichen Museen zu Berlin (SMB) sind zwei Stellen als

Bauingenieur:in / Architekt:in (m/w/d)

zu besetzen.

Die Staatlichen Museen zu Berlin sind mit ihren 17 Museumssammlungen und vier Forschungsinstituten der größte Museumsverbund in Deutschland. Die Stabsstelle Bauplanung koordiniert alle großen ...

Anzeige ansehenArchitektur
cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 23. Jul. 2021 15:28    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 a.hinke 10 Unities + Antwort hilfreich

Ich wollte es eigentlich nur als PN an KlaK senden, da er aber so wenig Zeit hat um evtl. das Eine oder
Andere noch nachzuschieben, hier nun doch direkt im Thread damit a.hinke die Infos schneller hat.

>>Alternativ : Ursprung L
Würde die Objektwahloption LETZTES starten, also das zuletzt erstellte Objekt wählen


>>"dann muss _AI_SELALL natürlich drin bleiben"
Richtig wäre V order VORHER, L steht für Letztes (Objekte) und V für Vorherige Auswahl
Aber der Befehl Ursprung akzeptiert V leider nicht


>>Wichtig dabei: Eine Leerzeile nach dem Befehl damit die Auswahl beendet und die Objekte bearbeitet werden. Manche Befehle verhalten sich im Script anders als im Autocad.
Falls das im direkten Zusammenhang stand:
Das ist händisch genau so. Akzeptiert ein Befehl mehrere Objektwahlvorgänge,
so beendet man die Objektwahlabfrage mit einer Leerantwort, also Enter.
Enter im Script = Zeilenumbruch, alternativ hier (aber kein guter Tip für Anfänger, da schlecht "lesbar" und nicht allgemeingültig: Ein Leerzeichen)


>>"Bzgl. des Programmaufrufs: in Makros wie in Scripten verwende ich hier (Command "VBARUN" "Export.Bohrdaten") "
Wer eine Abneidung gegen Lisp-Command hat, kann auch VL-VBARUN nutzen: (vl-vbarun "open_close.dvb!op_cl.REOPEN")
Wer eine Abneigung gegen Klammern hat, der kann auch den Befehl VBASTMT nutzen, womit man VBA-Ausdrücke direkt evaluieren lassen kann.
_.VBASTMT acadapplication.runmacro "open_close.dvb!op_cl.REOPEN"


>>"bzw. (^C^CCommand "VBARUN" "Export.Bohrdaten") Zweimal ESC damit auch wirklich alle vorherigen Befehle beendet sind."
Da war die Eile wohl die Fehlerquelle, ich korrigiere mal: ^C^C(Command "VBARUN" "Export.Bohrdaten")

Ergänzung: In einem Menümakro - und nur da funktioniert das so (nicht das a.hinke sich unnötig abmüht)
könnte man schreiben
^C^C^C(Command "VBARUN" "Export.Bohrdaten") Drei Mal ESC(^C) damit sicher ein möglicherweise aktiver Befehl zuvor beendet wird."
Gibt es tatsächlich, Befehle mit 3 Ebenen

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)2023 CAD.de | Impressum | Datenschutz