Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Objekte von einer Lage lesen

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 präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
Autor Thema:  Objekte von einer Lage lesen (1589 mal gelesen)
TobSchmid
Mitglied
Werkstudent

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

Beiträge: 7
Registriert: 26.11.2012

erstellt am: 26. Nov. 2012 13: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

Hallo,
ich bin neu hier in diesem Forum und will mich kurz vorstellen, bevor ich mein Problem schildern werde.

Ich bin Student an der HS Regensburg und studieren Elektro- und Informationstechnik im zweiten Semester. Um mir mein Studium finanzieren zu können, arbeite ich als Werkstudent bei einem Unternehmen, dass Halbleiter entwickelt und produziert.

Mein Problem ist folgendes:
Ich möchte mittels VBA, Objecte auf genau einer Lage/Layer aus einer CAD-Zeichnung herauslesen.
Leider kenne ich mich wenig bis gar nicht mit VBA in Verbindung mit AutoCAD aus und deshalb tu mich schwer überhaupt einen Ansatz zu finden auf dem sich aufbauen lässt.

Ich würde mich sehr über Hilfe freuen.
Vielen Dank schon mal.
Grüße, Tobias

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

cadffm
Ehrenmitglied V.I.P. h.c.
良い精神



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: 22477
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 26. Nov. 2012 14: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 TobSchmid 10 Unities + Antwort hilfreich

Also VBA kannst du, kennst aber nicht das AutoCAD- Object Model ?

Tja, dann fang bei Null an: http://www.stbartl.at/links.htm

Oder hier: http://www.amazon.de/AutoCAD-programmieren-mit-VBA-Einf%C3%BChrung/dp/3827321050

oder mit vielen Beispielen im www, wie zB hier auf CAD.de : http://ww3.cad.de/foren/ubb/Forum259/HTML/000902.shtml#000000

------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

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

TobSchmid
Mitglied
Werkstudent

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

Beiträge: 7
Registriert: 26.11.2012

erstellt am: 26. Nov. 2012 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

Danke für den Tip...
Bin jetzt schon einmal ein bisschen weiter, hoffe ich zumindest.

Code:

Private Sub Auflistung_Objecte()
    Dim objElement As AcadObject
    Dim strObjecte As String
   
    For Each objElement In ThisDrawing.ModelSpace
        strObjecte = strObjecte & objElement.ObjectName & vbCr
    Next
    MsgBox strObjecte
End Sub


Wie kann ich jetzt bestimmte Objekte von einer Lage auswählen?

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

cadffm
Ehrenmitglied V.I.P. h.c.
良い精神



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: 22477
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 26. Nov. 2012 14:39    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 TobSchmid 10 Unities + Antwort hilfreich

Wenn du von LAYER redest dann wäre es gut diese Vokabel zu nutzen,
was deine Frage angeht so ist oben ja bereits ein nettes Beispiel
in dem die (Top-)Objekte auf einem Layer gelöscht werden.

http://ww3.cad.de/foren/ubb/Forum259/HTML/000902.shtml#000000

Jetzt willst du diese nicht löschen, aber das Konstrukt wäre ja identisch,
nur der THEN-Part in der If-Abfrage sieht anders aus.

(Es wäre ggf. gut zu wissen was du überhaupt anstellen willst, nicht das es ausreichen würde den Befehl DATAEXTRAKT zu starten und du dir das ganze hättest sparen können)

------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

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

TobSchmid
Mitglied
Werkstudent

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

Beiträge: 7
Registriert: 26.11.2012

erstellt am: 26. Nov. 2012 15:38    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

Es sollen einfach nur bestimmte Objekte (z.B. Linien) von genau einem Layer ausgewählt werden, ohne das jetzt Großartig was mit denen gemacht werden soll. "EDIT: Es soll die Anzahl von Polylines die sich auf Layer x befinden in einer MsgBox ausgegeben werden."
Entschuldigung, dass ich mich so dämlich anstelle aber das ist echt frustrierend und ich komme einfach nicht weiter.

[Diese Nachricht wurde von TobSchmid am 26. Nov. 2012 editiert.]

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

cadffm
Ehrenmitglied V.I.P. h.c.
良い精神



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: 22477
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 26. Nov. 2012 15: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 TobSchmid 10 Unities + Antwort hilfreich

Noch stellst du dich nicht dämlich an, aber wenn man das Ziel nicht kennt kann man auch nicht beurteilen ob
das sinnig ist was du da machst, bzw.  was man dir als Hilfe postet (ist ja abhängig vom Ziel).

Also schreibe doch mla was (nicht großartig) damit geschehen soll..

Ebenso wie man die Objekte anhand des Layers filtern kann (siehe Beispiel) geht das dann natürlich auch für
Objektarten.

------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

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

TobSchmid
Mitglied
Werkstudent

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

Beiträge: 7
Registriert: 26.11.2012

erstellt am: 26. Nov. 2012 15:55    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

Okay, ich versuchs mal.
Also es geht darum, das ich eine Zeichnung habe, auf der ein Chip zu sehen ist. Dieser Chip ist über Kupferdrähte (Linien) mit dem Gehäuse verbunden auf dem sich die Anschlüsse befinden. Um nun heraus zu finden ob die Drähte richtig verbunden sind, will ich diese aus der Zeichnung heraus filtern. EDIT: Vorab geht es aber nur darum, zu prüfen, ob die Anzahl der Drähte korrekt ist. Sprich Anzahl der Drähte = y auf dem Layer x. Korrekt?
(Im nächsten Schritt soll dann der Text, aus den Textobjekten die zu dem Draht gehören, heraus gelesen werden.)

[Diese Nachricht wurde von TobSchmid am 26. Nov. 2012 editiert.]

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

TobSchmid
Mitglied
Werkstudent

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

Beiträge: 7
Registriert: 26.11.2012

erstellt am: 26. Nov. 2012 18:23    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

Ich hab mir das genannte Beispiel bestimmt zehn mal durch gelesen aber ich werd daraus einfach nicht schlau  

EDIT: Sorry, doublepost.

[Diese Nachricht wurde von TobSchmid am 26. Nov. 2012 editiert.]

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

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 27. Nov. 2012 19:09    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 TobSchmid 10 Unities + Antwort hilfreich

Hallo,

im angegebenen Link ist ein Kurzbeispiel mit einer kleinen Falle drin.
Macht man mal um kurz was zu probieren.

Ich habe dir das mal (ohne zu Testen) zusammenkopiert und auskommentiert.
So sollte es gehen 

Code:

' Deine Funktion zur Selektion
Public Sub mySelect()
  ' Selectionset (hierin sollen deine ausgewählten Objeklte aufgelistet werden)
  Dim tSSet As AcadSelectionSet

  ' Arrays für Filterangeben anlegen
  Dim FType(0) as Integer
  Dim FData(0) as Variant

  ' Fehlerverfolgung an da man ein Selektionset nur einmal haben darf
  ' Wird das ein zweites mal angelegt, gibt es einen Fehler der hier abgefangen wird (Resume Next)
  On Error Resume Next

  ' Versuch das Selectionset anzulegen
  Set tSSet = ThisDrawing.SelectionSets.Add("pSSet")

  ' Gab es dieses schon, tritt die Fehlerbehandlung ein und hier wird trotzdem weitergemacht
  ' Wenn das Objekt tSSet leer ist (dann gab es den Fehler weil es schon existierte)
  If tSSet Is Nothing Then
    ' dann weise das vorhandene Selectionset zu
    Set tSSet = ThisDrawing.SelectionSets.Item("pSSet")
  end if

  ' Jetzt eine eventuell von vorher bestehende Auswahl entfernen
  tSSet.Clear

  ' Filter definieren
  FType(0) = 8          'Gruppencode für Layer (siehe Anleitung DXF)
  FData(0) = "weg_damit" 'Name des Layers <== vorne deinen Layernamen eintragen
                        'es sollen ja nur die Objekte deines Layers kommen
                        'Den Filter könnte man auch um weitere Eigenschften erweitern
                        'z.B. Objektart, Farbe etc.

  ' Im AutoCAD nach allen Objekten auf dem Layer(siehe Filter oben) suchen lassen
  tSSet.Select acSelectionSetAll, , , FType, FData        'Auswahlsatz mit Filter

  ' Anzahl anzeigen
  msgbox tSSet.Count & " Objekte gefunden"

End Sub



Wilfried Stelberg

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

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

TobSchmid
Mitglied
Werkstudent

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

Beiträge: 7
Registriert: 26.11.2012

erstellt am: 27. Nov. 2012 19:45    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 vielen Dank!
Ich kann es heute leider nicht mehr austesten aber das werde ich morgen umgehend machen.
Nochmals Dankeschön für die Hilfe.
Grüße, Tobias


EDIT: funktioniert wunderbar! Vielen Dank nochmal

[Diese Nachricht wurde von TobSchmid am 29. Nov. 2012 editiert.]

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

TobSchmid
Mitglied
Werkstudent

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

Beiträge: 7
Registriert: 26.11.2012

erstellt am: 29. Nov. 2012 18: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

Ich würde noch einmal gerne eure Hilfe in Anspruch nehmen.
Und zwar möchte nun bestimmte Objekte von einem Layer auswählen.
Dazu hab ich mir folgendes ausgedacht.
Code:
Private Sub Objekte()
    Dim Object As AcadObject
    Dim i As Integer
 
For Each Object In ThisDrawing.ModelSpace
If (TypeOf Object Is AcadPolyline Or TypeOf Object Is IAcadLWPolyline Or TypeOf Object Is AcadCircle) Then i = i + 1
        Next Object
        MsgBox i & " Objekte gefunden!"
End Sub

Wie kann ich das nun sinnvoll in das obige Programm einfügen, sodass nur bestimmte Objekte von dem von mir definierten Layer ausgewählt werden?

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

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 02. Dez. 2012 18: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 Nur für TobSchmid 10 Unities + Antwort hilfreich

Hallo Tobias,

schau dir das mal an.

Du musst dann natürlich auch die Deklarierung erweitern

Code:
  ' Arrays für Filterangeben anlegen
  Dim FType(2) as Integer
  Dim FData(2) as Variant

Code:
FType(0) = 8              'Filter Layer
FData(0) = "weg_damit"  'Layername als String
FType(1) = 410            'Filter ob Modell oder Layout
FData(1) = "Model"        '0=Model; 1=Papierbereich
FType(2) = 0              'Objekttyp als Filter
FData(2) = "LWPOLYLINE,CIRCLE"  'Objektname als String '"LWPolyline","Circle"

Wilfried Stelberg

------------------
Warum lisp'eln wenn's auch anders geht.  
www.ib-stelberg.de

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