| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: 4 Linien zu einer "Gruppe" bilden (1920 mal gelesen)
|
The VIP Mitglied Technischer Zeichner
Beiträge: 170 Registriert: 06.09.2002 AutoCAD Mechanical 6 unter Windows XP
|
erstellt am: 15. Jan. 2004 17:35 <-- editieren / zitieren --> Unities abgeben:
Hallo. Ich habe vier Linien mit denen ich über ein Makro verschiedene Dinge mache (die vier Linien bilden ein Rechteck). Je nach dem für was der Konstrukteur die Linien für sein Projekt braucht werden die vier Objekte gespiegelt oder gedreht etc. (die wird über eine Eingabemaske bestimmt). Bevor ich jetzt ewig lange Makros schreibe die in etwa wie folgt aussehen: Code:
Set LINIE_G1 = AddLineEx(Point3D(180, 15), Point3D(2000 + MASS_A, 15)) Set LINIE_G2 = AddLineEx(Point3D(2000 + MASS_A, 15), Point3D(2000 + MASS_A, 9)) Set LINIE_G3 = AddLineEx(Point3D(2000 + MASS_A, 9), Point3D(180, 9)) Set LINIE_G4 = AddLineEx(Point3D(180, 9), Point3D(180, 15))Set LINIE_G1 = LINIE_G1.Mirror(Point3D(0, 0), Point3D(0, 10)) Set LINIE_G2 = LINIE_G1.Mirror(Point3D(0, 0), Point3D(0, 10)) Set LINIE_G3 = LINIE_G1.Mirror(Point3D(0, 0), Point3D(0, 10)) Set LINIE_G4 = LINIE_G1.Mirror(Point3D(0, 0), Point3D(0, 10)) ....
...möchte ich fragen ob ich diese vier Elemente als zusammengehörige Gruppe vordefinieren kann sodass ich im Makro nicht jede Linie einzeln drehen oder spiegeln lassen muss (je nach dem was gefordert ist). Ich stelle mir das wie folgt vor:
Code:
Set LINIE_G1 = AddLineEx(Point3D(180, 15), Point3D(2000 + MASS_A, 15)) Set LINIE_G2 = AddLineEx(Point3D(2000 + MASS_A, 15), Point3D(2000 + MASS_A, 9)) Set LINIE_G3 = AddLineEx(Point3D(2000 + MASS_A, 9), Point3D(180, 9)) Set LINIE_G4 = AddLineEx(Point3D(180, 9), Point3D(180, 15)) Set GRUPPE = LINIE_G1 + LINIE_G2 + LINIE_G3 + LINIE_G4 Set GRUPPE = GRUPPE.Mirror(Point3D(0, 0), Point3D(0, 10)) ...
Kann ich eine "makro-interne" Gruppe bilden um den Programmierweg zu verkürzen? Was müsste ich tun, wenn ich die vier Linien anschließen als Block haben wollte? [Diese Nachricht wurde von The VIP am 15. Jan. 2004 editiert.] [Diese Nachricht wurde von The VIP am 15. Jan. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
harryk Mitglied Projektleiter
Beiträge: 124 Registriert: 19.08.2003
|
erstellt am: 16. Jan. 2004 06:06 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
Hallo, nur ein paar ideen: Linien oder andere Objekte in "Collections" zusammenfassen, das Handling ist recht einfach (besser als Arrays). Der Name sagt schon alles. Für das Drehen dann eine eigene Funktion schreiben die aus dem Drehen innerhalb einer Schleife besteht. Dieser Funktion übergibst Du dann das Collection Objekt und (fast) fertig ist. Gruss, Harry Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
The VIP Mitglied Technischer Zeichner
Beiträge: 170 Registriert: 06.09.2002 AutoCAD Mechanical 6 unter Windows XP
|
erstellt am: 16. Jan. 2004 10:59 <-- editieren / zitieren --> Unities abgeben:
Ich habe mir das komplette Register Collections in der Hilfe durchgeschaut. Leider haben viele Versuche nicht zu meinem gewünschten Ergebnis geführt. Kannst du mir ein bisschen auf die Sprünge helfen? Mein Code hat wie folgt ausgesehen (lief aber nicht durch): Code:
Dim groupObj As AcadGroup... Set groupObj = ThisDrawing.Groups.Add("GLAS") LINIEG1 = LINIEG1.Groups.Add("GLAS") LINIEG2 = LINIEG2.Groups.Add("GLAS") LINIEG3 = LINIEG3.Groups.Add("GLAS") LINIEG4 = LINIEG4.Groups.Add("GLAS")
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
harryk Mitglied Projektleiter
Beiträge: 124 Registriert: 19.08.2003
|
erstellt am: 17. Jan. 2004 05:03 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
den Umweg über die Gruppe kannst Du Dir sparen wenn Du hinterher eh nen Block daraus machen möchtest. Hier der Hilfe Auszug für das Block erzeugen: Sub Example_InsertBlock() ' This example creates a block containing a circle. ' It then inserts the block. ' Create the block Dim blockObj As AcadBlock Dim insertionPnt(0 To 2) As Double insertionPnt(0) = 0#: insertionPnt(1) = 0#: insertionPnt(2) = 0# Set blockObj = ThisDrawing.Blocks.Add(insertionPnt, "CircleBlock") ' Add a circle to the block Dim circleObj As AcadCircle Dim center(0 To 2) As Double Dim radius As Double center(0) = 0: center(1) = 0: center(2) = 0 radius = 1 Set circleObj = blockObj.AddCircle(center, radius) ' Insert the block Dim blockRefObj As AcadBlockReference insertionPnt(0) = 2#: insertionPnt(1) = 2#: insertionPnt(2) = 0 Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock(insertionPnt, "CircleBlock", 1#, 1#, 1#, 0) ZoomAll End Sub Gruss, Harry Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
The VIP Mitglied Technischer Zeichner
Beiträge: 170 Registriert: 06.09.2002 AutoCAD Mechanical 6 unter Windows XP
|
erstellt am: 17. Jan. 2004 11:11 <-- editieren / zitieren --> Unities abgeben:
Das ist richtig, aber wahrscheinlich werde ich nur mit Gruppe arbeiten. Das mit dem Block war nur eine Idee. Den Befehl "Gruppe" will ich verwenden, um den Programmierweg zu verkürzen damit ich nicht jedes Objekt einzeln drehen muss sondern gleich alle vier auf einmal ansprechen kann. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
harryk Mitglied Projektleiter
Beiträge: 124 Registriert: 19.08.2003
|
erstellt am: 17. Jan. 2004 12:18 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
das Group Objekt unterstützt drehen leider nicht (jedenfalls 2k2). Aber vielleicht hilft Dir das erstmal: Sub Test4Linie() Dim LineObj(0 To 3) As AcadLine Dim startPoint(0 To 2) As Double Dim endPoint(0 To 2) As Double Dim RotationAngle As Double Dim BasePoint(0 To 2) As Double With ThisDrawing.ModelSpace startPoint(0) = 0#: startPoint(1) = 0#: startPoint(2) = 0# endPoint(0) = 500#: endPoint(1) = 0#: endPoint(2) = 0# Set LineObj(0) = .AddLine(startPoint, endPoint) startPoint(0) = 500#: startPoint(1) = 0#: startPoint(2) = 0# endPoint(0) = 500#: endPoint(1) = 500#: endPoint(2) = 0# Set LineObj(1) = .AddLine(startPoint, endPoint) startPoint(0) = 500#: startPoint(1) = 500#: startPoint(2) = 0# endPoint(0) = 0#: endPoint(1) = 500#: endPoint(2) = 0# Set LineObj(2) = .AddLine(startPoint, endPoint) startPoint(0) = 0#: startPoint(1) = 500#: startPoint(2) = 0# endPoint(0) = 0#: endPoint(1) = 0#: endPoint(2) = 0# Set LineObj(3) = .AddLine(startPoint, endPoint) End With BasePoint(0) = 250#: BasePoint(1) = 250#: BasePoint(2) = 0# RotationAngle = 45 / 180 * 3.141592654 RotateGlass LineObj, BasePoint, RotationAngle End Sub Function RotateGlass(Lines, Base, Rotation) For i = 0 To 3 LineObj(i).Rotate Base, Rotation Next i End Function Collection Objecte haben allerdings den Vorteil das Du nicht wie im array immer wieder neu re-dimensionieren musst wenn die Anzahl unbekannt ist aber für 4 Linien gehts erstmal auch so. Gruss, Harry [Diese Nachricht wurde von harryk am 17. Jan. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
The VIP Mitglied Technischer Zeichner
Beiträge: 170 Registriert: 06.09.2002 AutoCAD Mechanical 6 unter Windows XP
|
erstellt am: 19. Jan. 2004 16:24 <-- editieren / zitieren --> Unities abgeben:
ok, also ich hab mal beides angeschaut und ein wenig rumprobiert. Ich habe mich entschieden die Block-Funktion zu verwenden. Ich zeichne die vier Linien, mache einen Block daraus und dieser wird dann gedreht oder kopiert oder wie auch immer. Ich habe mal versucht zu diesem Block einen vorhandenen Block zu ergänzen und habe mal ganz naiv folgendes geschrieben:
Code:
Dim blockObj As AcadBlock ... Set Block6 = blockObj.InsertBlockEx(Point3D(2000, 0), IIf(BlockInDrawing(BlName06), BlName06, BlName06 & ".dwg"))
Leider bekomme ich da eine Fehlermeldung. Ich hatte gehofft dass es reicht wenn ich den Kreis (siehe Beispiel von dir) mit dem Block ersetze. Aber der Block (der schon in der Zeichnung ist) wird nicht mitaufgenommen. Die Hilfe ist leider auch nicht besonders gut da ich nicht weiß wonach ich suchen soll. Ich habe BLOCK und ADD gesucht, finde aber keine passenden Treffer Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Acad 2011-deutsch, Express Tools 3ds Max 2010 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 20. Jan. 2004 08:27 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|