| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | Von Digital Twins bis Hochleistungs-Computing: PNY präsentiert seine Zukunftstechnologien für die Industrie von morgen, eine Pressemitteilung
|
Autor
|
Thema: Gummiband Funktion oder Blöcke vereinigen (1812 mal gelesen)
|
stefanstein Mitglied

 Beiträge: 11 Registriert: 08.12.2009 WinXP SP3 AutoCA 2009
|
erstellt am: 08. Dez. 2009 15:34 <-- editieren / zitieren --> Unities abgeben:         
Hallo, bin relativ neu in AutoCAD VBA und auch neu hier im Forum. Habe schon gesucht, aber vielleicht benutze ich nicht dir richtigen Begriffe. Ich möchte den gemeinsamen Flächeninhalt von mehreren übereinander liegenden Blöcken herausfinden (Vereinigungsmenge). Zuerst habe ich dies mit "Vereinigen" versucht, aber anscheinend ist dies für Blöcke nicht möglich. Gibt es eine Funktion, die sozusagen ein "Gummiband" um meine Blöcke legt, damit ich deren Flächeninhalt herausfinden kann? Ich habe im Anhang eine Skizze erstellt, damit man sieht was ich meine -> siehe blaue Linie. Oder alternativ eine Funktion, welche die Blöcke vereinigt? Vielen Dank für eure Hilfe, Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 08. Dez. 2009 15:57 <-- editieren / zitieren -->
Hi Stefan, herzlich willkommen bei CAD-de! Die Aufgabenstellung würde mich in ähnlicher Form an Fahrzeug-Schleppkurven erinnern (da wäre aber die blaue Linie nicht ganz korrekt), Deine beiden direkten Fragen würde ich so beantworten: >> Gibt es eine Funktion, die sozusagen ein "Gummiband" um meine Blöcke legt
...nein. (gibt's da vielleicht eine Hintergrundinfo, wozu Du dieses 'Gummiband' bzw. die Fläche davon benötigst, vielleicht kommen dann noch mehr Ideen als geometrisch rechnen) >> Oder alternativ eine Funktion, welche die Blöcke vereinigt?
Wenn die Rechtecke Deiner Blockdefinitionen Regionen sind, dann können diese mit '_union' vereinigt werden, wenn Du temporär die Blockreferenzen explodierst und dann die resultierenden Regionen dafür verwendest. HTH, - alfred -
------------------ www.hollaus.at |
stefanstein Mitglied

 Beiträge: 11 Registriert: 08.12.2009 WinXP SP3 AutoCA 2009
|
erstellt am: 08. Dez. 2009 16:42 <-- editieren / zitieren --> Unities abgeben:         
Danke erst einmal für die flotte Antwort. Zitat:
Die Aufgabenstellung würde mich in ähnlicher Form an Fahrzeug-Schleppkurven erinnern (da wäre aber die blaue Linie nicht ganz korrekt)
Gut erkannt!! Ist klar, dass die blaue Linie falsch ist, aber für die eigentliche Berechnung sollen dann wesentlich mehr Einzelschritte berechnet werden, um den Fehler möglichst gering zu halten. Zitat: (gibt's da vielleicht eine Hintergrundinfo, wozu Du dieses 'Gummiband' bzw. die Fläche davon benötigst, vielleicht kommen dann noch mehr Ideen als geometrisch rechnen)
Es soll die Fläche des Fahrzeuges berechnet werden, die überfahren wird. Und die ich die Hüllkurven mit einzelnen Schritten des Fahrzeuges darstelle, möchte ich diese einzelnen Fahrzeugstellungen "verschmelzen". Zitat:
Wenn die Rechtecke Deiner Blockdefinitionen Regionen sind, dann können diese mit '_union' vereinigt werden, wenn Du temporär die Blockreferenzen explodierst und dann die resultierenden Regionen dafür verwendest.
Werde ich mal ausprobieren. Hatte nur gehofft, dass ich das ganze mit den Blöcken machen kann, da in meinem Bsp ja nur ein Rechteck vorhanden ist, aber letztendlich beliebige Fahrzeugkonturen dargestellt werden sollen. Gruß Stefan
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 08. Dez. 2009 16:53 <-- editieren / zitieren -->
Hi Stefan, >> da wäre aber die blaue Linie nicht ganz korrekt .... >> ..aber für die eigentliche Berechnung sollen dann wesentlich mehr Einzelschritte berechnet werden Nee, in dem Fall ist ein Gummiband rundherum grundsätzlich falsch. Situation: Du hast ein Zugfahrzeug und 3 Anhänger (weiss schon, gibt's nur in Australien, aber die Extremfälle zeigen das Problem meiner nächsten Beschreibung) und alle Anhänger fahren in der Spur des Zugfahrzeugs (wie Lok und Wagons). Diese stellst Du jetzt so auf, dass der letzte Anhänger noch vor dem Kreisverkehr steht, das ziehende Fzg aber bereits bei der 3.ten Ausfahrt des Kreisverkehrs rausfährt. In diesem Fall würde Deine Gummibandtechnik die Kreisverkehrs-Mittelinsel voll abdecken ==> falsch . >> aber letztendlich beliebige Fahrzeugkonturen dargestellt werden sollen
Was spricht hier dagegen, das mit Regionen im Fahrzeugblock zu erfüllen? - alfred -
PS: erfindest Du gerade das Rad neu oder hast Du ein neues Rad? ------------------ www.hollaus.at |
stefanstein Mitglied

 Beiträge: 11 Registriert: 08.12.2009 WinXP SP3 AutoCA 2009
|
erstellt am: 09. Dez. 2009 08:40 <-- editieren / zitieren --> Unities abgeben:         
Zitat:
Nee, in dem Fall ist ein Gummiband rundherum grundsätzlich falsch.
Stimmt, das Beispiel mit den Anhängern macht es klar. Zitat:
Was spricht hier dagegen, das mit Regionen im Fahrzeugblock zu erfüllen?
Erst einmal nur, dass ich das bisher noch nie gemacht habe ;-) Werde mich aber heute Abend mal daran versuchen. Zitat:
PS: erfindest Du gerade das Rad neu oder hast Du ein neues Rad?
Ist eine Studienarbeit, also Ersteres.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
stefanstein Mitglied

 Beiträge: 11 Registriert: 08.12.2009 WinXP SP3 AutoCA 2009
|
erstellt am: 10. Dez. 2009 14:35 <-- editieren / zitieren --> Unities abgeben:         
Zitat: wenn Du temporär die Blockreferenzen explodierst und dann die resultierenden Regionen dafür verwendest.
So langsam bin ich hier am verzweifeln. Ich versuche alle Blöcke zu explodieren und möchte diese mit einem SelectionSet auswählen. Aber bekomme immer einen "Laufzeitfehler '-2147418113 (80000ffff)': Automatisierungsfehler, Schwerwiegender Fehler". Liegt das an mir bzw. mache ich etwas falsch?
Code:
Dim Entity As AcadEntity Dim FilterType(1) As Integer Dim FilterData(1) As Variant FilterType(0) = 100 FilterData(0) = "AcDbBlockReference"On Error Resume Next Set acSelBloecke = ThisDrawing.SelectionSets.Add("Bloecke") On Error GoTo 0 Set acSelBloecke = ThisDrawing.SelectionSets.Item("Bloecke") acSelBloecke.Select acSelectionSetAll, , , FilterType, FilterData For Each Entity In acSelBloecke 'Hier kommt der Fehler MsgBox "asd" next
Und gleich noch die nächste Frage. Gibt es einen einfacheren Weg die Blöcke "temporär" zu explodieren oder meinst du damit explodieren -> Region -> wieder zusammenfügen?? Vielen Dank, Stefan [Diese Nachricht wurde von stefanstein am 10. Dez. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 10. Dez. 2009 14:50 <-- editieren / zitieren -->
Hi, leider sehe ich keinen offensichtlichen Grund für den Fehler (die Nummer alleine habe ich jetzt nicht gesucht). Also leider nur ein paar Inputs: Wenn Du ein SelectionSet erstellt hast, dann bedeutet es nicht, dass schon was selektiert ist. Ich sehe auch keine Deklaration der Variable 'acSelBloecke' (Typkonflikt?) Was machst Du denn mit eine For-Next Schleife durch ein SelectionSet, das möglicherweise noch keine Elemente enthält? Prüfen könntest Du das vorher mit der .Count-Eigenschaft. Ich würde den Filter folgendermaßen aufbauen:
Code: FilterType(0) = 0 FilterData(0) = "INSERT"
(hat aber nichts mit dem Fehler an der markierten Stelle zu tun) >> Gibt es einen einfacheren Weg die Blöcke "temporär" zu explodieren oder >> meinst du damit explodieren -> Region -> wieder zusammenfügen??
In VBA würde mir nichts einfacheres einfallen. Natürlich könnte man sich aus der Blockdefiniton und der Einfügematrix jeder Blockreferenz (Verschiebung, Drehung, Skalierung) auch die Regionen herausrechnen, wird bei einfachen Regionen vielleicht auch schneller sein, aber in der Programmierung um Faktoren länger dauern. Vorsicht bei dem Vokabular 'wieder zusammenfügen' ==> damit meinte ich explizit '_union'! Zusammenfügen kann leider so viel anderes auch heissen. - alfred - ------------------ www.hollaus.at |
stefanstein Mitglied

 Beiträge: 11 Registriert: 08.12.2009 WinXP SP3 AutoCA 2009
|
erstellt am: 10. Dez. 2009 15:08 <-- editieren / zitieren --> Unities abgeben:         
Danke, danke. Du hast mich zwar nicht direkt auf den Fehler gebracht, aber indirekt ;-) Habe gerade schnell noch mal alles nue geschrieben und mich gefreut, dass es funktioniert, bis ich ein bisserl was in der Zeichnung gelöscht habe -> Fehler ist wieder aufgetreten. Ich denke (und hoffe) es liegt an meiner schlechten Deklaration des SelectionSets. Da ich es am Ende nicht lösche bzw. am Anfang noch einmal leere wurde immer noch auf das Alte zugegriffen, obwohl manche Elemente in der Zeichnung nicht mehr vorhanden waren. 4 Stunden Arbeit umsonst, wegen der (noch) mangelnden VBA Fähigkeit. Hoffentlich wird das irgendwann mal besser. Jetzt kann ich mich wieder dem eigentlichen Problem "Vereinigen" widmen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 10. Dez. 2009 15:12 <-- editieren / zitieren -->
Hi, >> 4 Stunden Arbeit umsonst Ich ärgere mich im nachhinein auch immer, wenn ich Zeit verbockt habe. Aber ich motiviere mich damit, dass ich meist durch die Fehlersuche viel mehr gelernt habe, als ich sonst hätte lernen und erfahren können. Also fröhlich und motiviert weiter. - alfred - ------------------ www.hollaus.at |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |