| |
 | 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
 Beiträge: 7 Registriert: 26.11.2012
|
erstellt am: 26. Nov. 2012 13:53 <-- editieren / zitieren --> Unities abgeben:         
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. 良い精神

 Beiträge: 22477 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 26. Nov. 2012 14:04 <-- editieren / zitieren --> Unities abgeben:          Nur für TobSchmid
|
TobSchmid Mitglied Werkstudent
 Beiträge: 7 Registriert: 26.11.2012
|
erstellt am: 26. Nov. 2012 14:34 <-- editieren / zitieren --> Unities abgeben:         
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. 良い精神

 Beiträge: 22477 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 26. Nov. 2012 14:39 <-- editieren / zitieren --> Unities abgeben:          Nur für TobSchmid
|
TobSchmid Mitglied Werkstudent
 Beiträge: 7 Registriert: 26.11.2012
|
erstellt am: 26. Nov. 2012 15:38 <-- editieren / zitieren --> Unities abgeben:         
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. 良い精神

 Beiträge: 22477 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 26. Nov. 2012 15:43 <-- editieren / zitieren --> Unities abgeben:          Nur für TobSchmid
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
 Beiträge: 7 Registriert: 26.11.2012
|
erstellt am: 26. Nov. 2012 15:55 <-- editieren / zitieren --> Unities abgeben:         
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
 Beiträge: 7 Registriert: 26.11.2012
|
erstellt am: 26. Nov. 2012 18:23 <-- editieren / zitieren --> Unities abgeben:         
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.
    
 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 / zitieren --> Unities abgeben:          Nur für TobSchmid
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
 Beiträge: 7 Registriert: 26.11.2012
|
erstellt am: 27. Nov. 2012 19:45 <-- editieren / zitieren --> Unities abgeben:         
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
 Beiträge: 7 Registriert: 26.11.2012
|
erstellt am: 29. Nov. 2012 18:13 <-- editieren / zitieren --> Unities abgeben:         
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.
    
 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 / zitieren --> Unities abgeben:          Nur für TobSchmid
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 |