| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: mit variablen Werten eine komplette Zeichnung erstellen (7546 mal gelesen)
|
The VIP Mitglied Technischer Zeichner
Beiträge: 170 Registriert: 06.09.2002 AutoCAD Mechanical 6 unter Windows XP
|
erstellt am: 07. Aug. 2003 09:32 <-- editieren / zitieren --> Unities abgeben:
Hallo. Bei uns in der Firma hier werden Drehtüren wie man sie von Hoteleingängen her kennt produziert. Wir agieren in Durchmesserbereichen zwischen 2m und 4m. Bei uns sind momentan Draufsichten von solchen Anlagen mit den obengenannten "Standarddurchmessern" (100mm-Schritten) jeweils als DWG abgelegt und werden bei Bedarf in eine Zeichnung geladen. Somit liegen bei uns 21 Zeichnungen auf dem Netzwerk die alle bei einer grundsätzlichen Änderung alle geöffnet werden müssen und abgeändert werden müssen. Meine Frage nun: Kann ich über VBA ein Makro programmieren, welches mir die Draufsicht zeichnet, nachdem ich einige Angaben über ein Eingabefeld gemacht hat (z.B.Durchmesserangabe). Ich kenne VBA aus Excel sehr gut und kann nahezu perfekt im Excel mit VBA programmieren, bin aber mit den (für mich neuen) Befehlen im AutoCAD-VBA überhaupt nicht vertraut. Kann mir jemand helfen, eine Anweisung zu schreiben oder mir anderweitig Tipps zu diesem Thema geben? Danke. The VIP EDIT: Ist es nicht möglich ein Makro wie im Excel aufzuzeichnen? Auf diese Weise könnte ich die Draufsicht nämlich einmalig zeichnen und würde lediglich die Werte durch Variablen ersetzen.
[Diese Nachricht wurde von The VIP am 07. August 2003 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BerndE Mitglied Hochbautechniker
Beiträge: 557 Registriert: 05.07.2003
|
erstellt am: 07. Aug. 2003 10:57 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
HI, so ein MacroRecorder wäre ne feine Sache, wenn einer einen kennt, würde mich das auch interessieren. Ansonsten hat mir die Onlinehilfe von AutoCad viel weitergeholfen beim Einstieg. Habe meine VBA-Erfahrungen in Access sammeln können, der Einstieg in VBA-für Autocad gestaltete sich aber recht schwierig. Schau mal unter dem AutoCad-menübefehl ? |_Entwicklerhilfe |_ActiveX and VBA Reference |_Code Examples Außerdem findest du unter \Programme\acad2000\samples jede menge fix und fertiger Acad-VBA-Projekte.
------------------ Bernd 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: 07. Aug. 2003 16:08 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von BerndE: Schau mal unter dem AutoCad-menübefehl ? |_Entwicklerhilfe |_ActiveX and VBA Reference |_Code Examples
Mist - ich hab den Menüpunkt "Entwicklerhilfe" gar nicht Ich hab hier nur AutoCAD Mechanical 6.
Danke für die Pfadangabe mit den Beispieldateien. Das war schonmal sehr hilfreich. Scheint alles gar nicht so einfach zu erlernen zu sein; trotz meiner vielen Kenntnissen von Excel VBA komm ich nicht besonders gut vorwärts... 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: 08. Aug. 2003 07:51 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
Hallo VIP, sicher kann man in VBA alles automatisch zeichnen lassen, es stellt sich nur die Frage ob sich das auszahlt. Natürlich auch die Frage wie kompliziert die Darstellung sein soll und wie viele Linien du berechnen möchtest. Ich würde aber sagen, alles im Ursprung der Zeichnung zeichnen und dann an die jeweilige Stelle schieben und verdrehen, dann braucht man nicht so viel zu rechnen. Was ändert sich denn an diesen Türen, nur der Radius? Wenn sich nicht mehr ändert, dann ist das Programm recht einfach und schnell zu bewerkstelligen. ------------------ Roland 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: 08. Aug. 2003 09:42 <-- editieren / zitieren --> Unities abgeben:
Im Grunde ist der Aufbau der Drausicht recht simpel. Ich habe eine Datei angehägt bei der allerdings nicht alles drauf ist was wir in der Regel für den Kunden darstellen (nicht dass ich sonst noch ärger bekomme wenn ich sowas hier veröffentliche ) Wie gesagt, bei uns werden oft "ungerade" Durchmesser (z.B. 2550) verlangt und dann muss man immer alles neu zeichnen. Da aber alle Linien mathematisch an eine bestimmte Position gehören dürfte das über ein Makro und ein kleines Eingabefeld sicher zu bewerkstelligen sein. Ich denke das rechnet sich bestimmt. Vielen Dank für die Starthilfe im voraus. Gruß The VIP 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: 08. Aug. 2003 09:55 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
Hallo VIP, eigentlich sollte das kein Problem sein, das komplizierteste ist eigentlich den Anfangs- und Endwinkel der Bögen zu berechnen, alles andere ist eigentlich nur ein Kinderspiel. ------------------ Roland 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: 08. Aug. 2003 10:10 <-- editieren / zitieren --> Unities abgeben:
ja, hab ich mir auch gedacht. ist wirklich nicht komplex. allerdings kenne ich noch nicht mal die Anweisung um einen Kreis in VBA zu zeichnen oder eine Linie zu stutzen. Wenn du mir mit ein paar Befehlen als Stütze behilflich sein könntest wär ich sehr dankbar. Wenn der Stein bei mir erst mal ins Rollen gekommen ist, geht's meist ganz einfach und schnell bei mir mit dem (Er-)lernen. 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: 08. Aug. 2003 10:19 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
|
The VIP Mitglied Technischer Zeichner
Beiträge: 170 Registriert: 06.09.2002 AutoCAD Mechanical 6 unter Windows XP
|
erstellt am: 08. Aug. 2003 11:02 <-- editieren / zitieren --> Unities abgeben:
mmhhh...wie's aussieht nicht. Im Visual Basic Editor hab ich nur: "?" -> "Microsoft Visual Basic Hilfe F1" ----------------------- -> "Microsoft Visual Basic Info" Bin leider nicht für die Installation zuständig. Muss man da was nachinstallieren? Den Visual Basic Editor selber habe ich (Alt+F11). Die Hilfe unter F1 ist eher dürftig. mit dem Objektkatalog komm ich nicht so klar - den hab ich auch bei Excel so gut wie nie genutzt.
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: 08. Aug. 2003 11:09 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
|
BerndE Mitglied Hochbautechniker
Beiträge: 557 Registriert: 05.07.2003
|
erstellt am: 08. Aug. 2003 11:12 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
|
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: 08. Aug. 2003 11:14 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
|
BerndE Mitglied Hochbautechniker
Beiträge: 557 Registriert: 05.07.2003
|
erstellt am: 08. Aug. 2003 11:15 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
|
The VIP Mitglied Technischer Zeichner
Beiträge: 170 Registriert: 06.09.2002 AutoCAD Mechanical 6 unter Windows XP
|
erstellt am: 08. Aug. 2003 11:53 <-- editieren / zitieren --> Unities abgeben:
|
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: 08. Aug. 2003 11:56 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
|
The VIP Mitglied Technischer Zeichner
Beiträge: 170 Registriert: 06.09.2002 AutoCAD Mechanical 6 unter Windows XP
|
erstellt am: 08. Aug. 2003 13:06 <-- editieren / zitieren --> Unities abgeben:
Ich hoffe mal nicht dass ich durch meine (vielen) Fragen die ich evtl. noch haben werde, diesen Thread hier sprenge... Gebt mir einfach Bescheid, wenn ich abdrifte oder das ganz hier unübersichtlich wird und ich zu bestimmten Themen besser einen neuen Thread eröffnen soll. Ich hab es über die Hilfe-F1 und meinen Excel-Kenntnissen folgendes hinbekommen: Sub Aussenwand() Dim ANTWORT As Integer Dim circleObj As AcadCircle Dim centerPoint(0 To 2) As Double ANTWORT = InputBox("Durchmesserangabe", "Test") 'KREIS centerPoint(0) = 0# centerPoint(1) = 0# centerPoint(2) = 0# Set circleObj = ThisDrawing.ModelSpace.AddCircle(centerPoint, ANTWORT + 1.5) Set circleObj = ThisDrawing.ModelSpace.AddCircle(centerPoint, ANTWORT + 31.5) End Sub Zwei Fragen dazu: Gehe ich richtig vor, wenn ich zuerst zwei Kreis zeichne und die dann über das Makro an den Eckpunkten (siehe angehängt Datei bzw. fertige Zeichnung) stutze oder ist es besser einen Bogen zu zeichnen zu lassen und nicht einen Kreis, den ich dann stutze? Wie würdet ihr vorgehen (nur damit ich nicht das Feld falsch aufrolle und gleich zu beginn einen groben Fehler mache) Nummer 2: Auch in den Beispielen die im Excel in der Hilfe zu finden waren, wurde immer gerne mit Variablen gearbeitet. zum Beispiel hier: Dim centerPoint(0 To 2) As Double .... Set circleObj = ThisDrawing.ModelSpace.AddCircle(centerPoint, ANTWORT + 31.5)
mir wäre es lieber, wenn ich folgendes schreiben dürfte:
Set circleObj = ThisDrawing.ModelSpace.AddCircle(0,0,0, ANTWORT + 31.5) was natürlich in dieser Schreibweise nicht funktioniert (die Kommas werden nicht akzeptiert).
Kann man die Koordinaten auch direkt hinten angeben oder muss ich den Weg über die Variable machen? Auch das cicrleObj und überhaupt das Verwenden von Variablen (in dieser Form) mache ich nicht so gerne, auch wenn es manchmal nützlich ist / sein soll. Mir scheint es für einen einfachen Kreis ein sehr langes Makro. Ich spare da gerne bei den Befehlen und hab auch so eher den überblick (ist halt meine Programmierweise bisher) [Diese Nachricht wurde von The VIP am 08. August 2003 editiert.] [Diese Nachricht wurde von The VIP am 08. August 2003 editiert.] 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: 08. Aug. 2003 13:28 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
zu 1: Code: Dim Radius as double Radius= ThisDrawing.Utility.GetInteger(vbCr & "Radius: ") if Radius<=0 then exit sub ....
Dann mußt du den Einsetzpunkt und den Einsetzwinkel abfragen. Code: Dim EP as Variant Dim Winkel as double EP = Thisdrawing.utility.getpoint (vbcr & "Einsetzpunkt: ") Winkel= Thisdrawing.utility.getangle (EP, vbcr & "Einsetzwinkel: ")
Aufpassen! Wenn du nicht im WKS bist, mußt du den EP auf dein aktuelles BKS umrechnen, und zwar mit "ThisDrawing.Utility.TranslateCoordinates(...)". jetzt müsstest du Bögen zeichnen, das heißt, du brauchst den Anfangs- und Endwinkel. Die mußt du dir berechnen. zu 2: Wenn du nur die Werte beim Zeichnen des Kreises angeben willst, verwende folgende Funktion Code: Public Function Point3D(x As Double, Y As Double, Optional z As Double = 0) As Variant Dim retVal(0 To 2) As Double retVal(0) = x: retVal(1) = Y: retVal(2) = z Point3D = retVal End Function
Einen Kreis zeichnest du dann so Code: dim Kreis as acadcircle set Kreis= Thisdrawing.modelspace.addcircle(point3d(0,0,0),Radius)
Noch besser wäre es, wenn du dir zum einsetzen der Objekte eine Funktion schreibst, die schaut nach in welchem Bereich du dich befindest. z.B. Code: Public Function AddCircleEx(Center, Radius As Double) As AcadCircle Dim objTemp As AcadCircle On Error GoTo Err_Control If ThisDrawing.ActiveSpace = acModelSpace Then Set objTemp = ThisDrawing.ModelSpace.AddCircle(Center, Radius) ElseIf ThisDrawing.ActiveSpace = acPaperSpace And Not (ThisDrawing.MSpace) Then Set objTemp = ThisDrawing.PaperSpace.AddCircle(Center, Radius) Else: ThisDrawing.ActiveSpace = acPaperSpace And (ThisDrawing.MSpace) Set objTemp = ThisDrawing.ModelSpace.AddCircle(Center, Radius) End If Set AddCircleEx = objTemp Set objTemp = Nothing Exit_Here: Exit Function Err_Control: MsgBox "Error: " & Err.Number & " " & Err.Description & " In AddCircle Function " Resume Exit_Here End Function
So, das sollte für den Anfang genügen. Ich verabschiede mich ins WE. ------------------ Roland [Diese Nachricht wurde von RoSiNiNo am 08. August 2003 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: 09. Aug. 2003 18:32 <-- editieren / zitieren --> Unities abgeben:
Was hat es eigentlich mit diesem "Nothing" auf sich? Set AddCircleEx = objTemp Set objTemp = NothingIch hab das schon öfter gelesen, kann aber nichts damit anfangen. Danke Roland für deine Vorgaben. Werd ich gleich mal am Montag ausprobieren. MfG The VIP [Diese Nachricht wurde von The VIP am 09. August 2003 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
hsb Mitglied Ing
Beiträge: 4 Registriert: 10.08.2003
|
erstellt am: 10. Aug. 2003 22:30 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
Hallo VIP, wir vertreiben ein Programm , mit dessen Hilfe man Zeichnungen parametrisch erzeugen kann. Im Prinzip ist es ein LISP-Recorder, der die geschilderte Aufgabe löst. Ein Excel-AddIn kann Eingaben/Variablen aus Excel importieren. Nähere Infos unter www.hsb-cad.de hsb 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: 11. Aug. 2003 07:41 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
Nothing Das Schlüsselwort Nothing wird verwendet, um die Verbindung einer Objektvariablen zum zugehörigen Objekt aufzuheben. Weisen Sie einer Objektvariablen mit der Set-Anweisung den Wert Nothing zu. Beispiel:
Set Objekt1 = Nothing Mehrere Objektvariablen können sich auf dasselbe Objekt beziehen. Wenn einer Objektvariablen der Wert Nothing zugewiesen wird, verweist diese Variable anschließend auf kein aktuelles Objekt mehr. Wenn mehrere Objektvariablen auf dasselbe Objekt verweisen, werden die Speicher- und Systemressourcen, die für das Objekt reserviert wurden, auf das die Variablen verweisen, erst freigegeben, nachdem alle Objektvariablen auf Nothing gesetzt wurden (entweder explizit mit Set oder implizit, nachdem die letzte Objektvariable den Gültigkeitsbereich verläßt und auf Nothing gesetzt wird.)
------------------ Roland 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: 11. Aug. 2003 07:48 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
Da wäre mir noch etwas eingefallen, du mußt nicht unbedingt die Winkel rechnen. Du könntest die Rechtecke zeichnen, dann die Bögen mit den Winkeln 0° bis 45° (oder 60°). Dann könntest du mit IntersectWith die Schnittpunkte ermittlen und dadurch hast du die exakten Winkeln für deine Bögen --> AngleFromXAxis(Point1, Point2)Weiters würde ich alle Objekte in ein Array schreiben, dann könntest du zwei Funktionen schreiben, eine die dir alle Objekte eines Arrays mit einem gewissen Winkel um einen Punkt dreht, die zweite verschiebt dir alle Objekte des Arrays von Punkt1 zu Punkt2. Noch etwas, bei einem Block mußt du aufpassen. 1. Der Block muß in einem Suchverzeichnis vorhanden sein (sofern du nicht den ganzen Pfad angibst) 2. Wenn der Block schon in der Zeichnung vorhanden ist, würde ich ihn ohne ".dwg" einsetzten 3. Wenn der Block noch nicht in der Zeichnung vorhanden ist, mußt du ihn mit ".dwg" einsetzen. ------------------ Roland [Diese Nachricht wurde von RoSiNiNo am 11. August 2003 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: 11. Aug. 2003 08:37 <-- editieren / zitieren --> Unities abgeben:
Hallo beisammen. Habe am Wochenende alleine mit Excel versucht rechnerisch mit Hilfe von Pythagoras an die Koordinaten der Endpunkte der Bögen zu gelangen. Hat geklappt, wenn ich auch etwas skeptisch war was die Genauigkeit angeht. Heute morgen als ich die Bögen in AutoCAD gemessen habe und die Koordinaten vermasst habe, hab ich Abweichungen im 100stel-Bereich gegenüber der Excel-Berechnung festgestellt (kann mit Rundungen oder der Zahl Pi zu tun haben - keine Ahnung). Jedenfalls stimmt die Berechnung (siehe Anhang) nur das Ergebnis ist nicht 100%ig: berechnete X-Koordinate: 748.218370269548 (Bei Ø2000 und 180° bzw. 45°-Seitenwand) gemessense X-Koordinate: 748.222261554 das zieht sich durch jede Koordinate - überall Abweichungen bei der zweiten Nachkommastelle ich glaube nicht dass ich so vorgehen kann, obwohl das relativ einfach und auch schnell gelöst gewesen wäre. Dass das so ein Problem ist, hätte ich nicht gedacht. @hsb: Konnte den LISP Recoder nicht auf der HP finden. Der Bereich Download ist Kennwortgeschützt @RoSiNiNo: Kann ich nicht einfach die Bögen an den Rechtecken stutzen lassen. Alles andere ist sonst eher ungenau oder (siehe oben -> berechnen bedeutet immer Runden...) 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: 11. Aug. 2003 08:45 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
Probier es doch einfach mal mit den Schnittpunkten, wirst sehen das es viel genauer ist als die Berechnung. Da hast du nämlich nicht zwei mal PI drinnen und auch nicht zig Brüche. ------------------ Roland 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: 11. Aug. 2003 09:13 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
Hallo VIP, ich hab dir jetzt ganz schnell die Funktion geschrieben, die Werte mußt du selbst abfragen, hab es jetzt mal mit Konstanten gemacht. Code: Public Sub Drehtuer() Const Durchmesser As Double = 2000 Const Winkel As Double = 60 Dim Radius As Double Dim WinkelRad As Double Dim Linie1_1 As AcadLine Dim Linie2_1 As AcadLine Dim Bogen1 As AcadArc Dim Bogen2 As AcadArc Dim Bogen1Temp As AcadArc Dim Bogen2Temp As AcadArc Dim SP1_1 As Variant Dim SP2_1 As Variant Dim SP1_2 As Variant Dim SP2_2 As Variant Radius = Durchmesser / 2 WinkelRad = Winkel * funPI / 180 Set Linie1_1 = AddLineEx(Point3D(1000, 50), Point3D(1050, 50)) Set Linie2_1 = AddLineEx(Point3D(999, -27), Point3D(1036, -27)) Set Bogen1Temp = AddArcEx(Point3D(0, 0), Radius + 1.5, 0, WinkelRad) Set Bogen2Temp = AddArcEx(Point3D(0, 0), Radius + 31.5, 0, WinkelRad) Linie2_1.Rotate Point3D(0, 0), WinkelRad SP1_1 = Bogen1Temp.IntersectWith(Linie1_1, acExtendNone) SP2_1 = Bogen1Temp.IntersectWith(Linie2_1, acExtendNone) SP1_2 = Bogen2Temp.IntersectWith(Linie1_1, acExtendNone) SP2_2 = Bogen2Temp.IntersectWith(Linie2_1, acExtendNone) Set Bogen1 = AddArcEx(Point3D(0, 0), Radius + 1.5, ThisDrawing.Utility.AngleFromXAxis(Point3D(0, 0), SP1_1), ThisDrawing.Utility.AngleFromXAxis(Point3D(0, 0), SP2_1)) Set Bogen2 = AddArcEx(Point3D(0, 0), Radius + 31.5, ThisDrawing.Utility.AngleFromXAxis(Point3D(0, 0), SP1_2), ThisDrawing.Utility.AngleFromXAxis(Point3D(0, 0), SP2_2)) Bogen1Temp.Delete Bogen2Temp.Delete End Sub Public Function AddArcEx(Center, Radius As Double, StartAngle As Double, EndAngle As Double) As AcadArc Dim Arc As AcadArc Select Case ThisDrawing.ActiveSpace Case acPaperSpace Select Case ThisDrawing.MSpace Case True Set Arc = ThisDrawing.ModelSpace.AddArc(Center, Radius, StartAngle, EndAngle) Case False Set Arc = ThisDrawing.PaperSpace.AddArc(Center, Radius, StartAngle, EndAngle) End Select Case acModelSpace Set Arc = ThisDrawing.ModelSpace.AddArc(Center, Radius, StartAngle, EndAngle) End Select Set AddArcEx = Arc Set Arc = Nothing End Function
Public Function AddLineEx(Startpunkt, Endpunkt) As AcadLine Dim Linie As AcadLine Select Case ThisDrawing.ActiveSpace Case acPaperSpace Select Case ThisDrawing.MSpace Case True Set Linie = ThisDrawing.ModelSpace.AddLine(Startpunkt, Endpunkt) Case False Set Linie = ThisDrawing.PaperSpace.AddLine(Startpunkt, Endpunkt) End Select Case acModelSpace Set Linie = ThisDrawing.ModelSpace.AddLine(Startpunkt, Endpunkt) End Select Set AddLineEx = Linie Set Linie = Nothing End Function Public Function funPI() funPI = 4 * Atn(1) End Function Public Function Point3D(x As Double, Y As Double, Optional z As Double = 0) As Variant Dim retVal(0 To 2) As Double retVal(0) = x: retVal(1) = Y: retVal(2) = z Point3D = retVal End Function
Wie du siehst, hab ich nur den Winkel umgerechnet, das war es auch schon. ------------------ Roland [Diese Nachricht wurde von RoSiNiNo am 11. August 2003 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: 11. Aug. 2003 09:38 <-- editieren / zitieren --> Unities abgeben:
Wow! Ich verstehe zwar die Hälfte nicht, aber es funktioniert Gibt's irgendein Buch das zu empfehlen ist oder eine Internetseite wo sich mit dem Thema "Acad-VBA-Erlernen" beschäftigt? Wie es scheint hab ich noch viel zu lernen Aber ich seh schon, das wird mir richtig Spaß machen, da man ja anscheinend alles mögliche programmieren kann. [Diese Nachricht wurde von The VIP am 11. August 2003 editiert.] 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: 11. Aug. 2003 09:40 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
Ich hab es jetzt ein wenig umgeschrieben, jetzt hast du gleich Rechtecke. Code: Public Sub Drehtuer() Const Durchmesser As Double = 2000 Const Winkel As Double = 60 Dim Radius As Double Dim WinkelRad As Double ' Dim Linie1_1 As AcadLine ' Dim Linie2_1 As Acadline Dim Linie1 As AcadLWPolyline Dim Linie2 As AcadLWPolyline Dim PT1(7) As Double Dim PT2(7) As Double Dim Bogen1 As AcadArc Dim Bogen2 As AcadArc Dim Bogen1Temp As AcadArc Dim Bogen2Temp As AcadArc Dim SP1_1 As Variant Dim SP2_1 As Variant Dim SP1_2 As Variant Dim SP2_2 As Variant Radius = Durchmesser / 2 WinkelRad = Winkel * funPI / 180 PT1(0) = 1000: PT1(1) = -50: PT1(2) = 1050: PT1(3) = -50: PT1(4) = 1050: PT1(5) = 50: PT1(6) = 1000: PT1(7) = 50 PT2(0) = 999: PT2(1) = -27: PT2(2) = 1036: PT2(3) = -27: PT2(4) = 1036: PT2(5) = 27: PT2(6) = 999: PT2(7) = 27 ' Set Linie1_1 = AddLineEx(Point3D(1000, 50), Point3D(1050, 50)) ' Set Linie2_1 = AddLineEx(Point3D(999, -27), Point3D(1036, -27)) Set Linie1 = AddLightWeightPolylineEx(PT1) Set Linie2 = AddLightWeightPolylineEx(PT2) Linie1.Closed = True Linie2.Closed = True Set Bogen1Temp = AddArcEx(Point3D(0, 0), Radius + 1.5, 0, WinkelRad) Set Bogen2Temp = AddArcEx(Point3D(0, 0), Radius + 31.5, 0, WinkelRad) ' Linie2_1.Rotate Point3D(0, 0), WinkelRad Linie2.Rotate Point3D(0, 0), WinkelRad ' SP1_1 = Bogen1Temp.IntersectWith(Linie1_1, acExtendNone) ' SP2_1 = Bogen1Temp.IntersectWith(Linie2_1, acExtendNone) ' SP1_2 = Bogen2Temp.IntersectWith(Linie1_1, acExtendNone) ' SP2_2 = Bogen2Temp.IntersectWith(Linie2_1, acExtendNone) SP1_1 = Bogen1Temp.IntersectWith(Linie1, acExtendNone) SP2_1 = Bogen1Temp.IntersectWith(Linie2, acExtendNone) SP1_2 = Bogen2Temp.IntersectWith(Linie1, acExtendNone) SP2_2 = Bogen2Temp.IntersectWith(Linie2, acExtendNone) Set Bogen1 = AddArcEx(Point3D(0, 0), Radius + 1.5, ThisDrawing.Utility.AngleFromXAxis(Point3D(0, 0), SP1_1), ThisDrawing.Utility.AngleFromXAxis(Point3D(0, 0), SP2_1)) Set Bogen2 = AddArcEx(Point3D(0, 0), Radius + 31.5, ThisDrawing.Utility.AngleFromXAxis(Point3D(0, 0), SP1_2), ThisDrawing.Utility.AngleFromXAxis(Point3D(0, 0), SP2_2)) Bogen1Temp.Delete Bogen2Temp.Delete End Sub Public Function AddLightWeightPolylineEx(VerticelList) As AcadLWPolyline Dim PLinie As AcadLWPolyline Select Case ThisDrawing.ActiveSpace Case acPaperSpace Select Case ThisDrawing.MSpace Case True Set PLinie = ThisDrawing.ModelSpace.AddLightWeightPolyline(VerticelList) Case False Set PLinie = ThisDrawing.PaperSpace.AddLightWeightPolyline(VerticelList) End Select Case acModelSpace Set PLinie = ThisDrawing.ModelSpace.AddLightWeightPolyline(VerticelList) End Select Set AddLightWeightPolylineEx = PLinie Set PLinie = Nothing End Function
------------------ Roland 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: 11. Aug. 2003 09:44 <-- editieren / zitieren --> Unities abgeben:
Wobei ich natürlich dazusagen muss, dass die Rechtecke in Wirklichkeit Blöcke sind, die ich einfügen lassen muss. Ich hab mal vorsichtshalber nur Rechtecke gezeichnet weil ich nicht sicher war ob ich so eine Systemzeichnung im Original an die Öffentlichkeit bringen darf. 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: 11. Aug. 2003 09:50 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
Dann genügen dir natürlich die Linien, allerdings hab ich da einen kleinen Fhler gemacht, natürlich mußt du bei der eingabe der Koordiaten der Linien den Radius berücksichtigen. Code: Set Linie1_1 = AddLineEx(Point3D(Radius, 50), Point3D(Radius+50, 50)) Set Linie2_1 = AddLineEx(Point3D(Radius-1, -27), Point3D(Radius+36, -27))
So, hoffe das war es. Wie wäre es mit ein paar Unities? Muß natürlich nicht wein, ist aber immer schön, wenn auch etwas zurück kommt, auch wenn man gar nichts damit anfangen kann. ------------------ Roland 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: 11. Aug. 2003 10:02 <-- editieren / zitieren --> Unities abgeben:
erklär mir das mal mit den Unities. Bin zwar oft im Forum, weiß aber nicht was es damit auf sich hat. Hab das bisher noch in keinem Forum gesehen. Ich will ja schließlich nicht in Ungnade fallen nur weil ich nicht darüber bescheid weiß Scheint wohl was wichtiges mit den Unities zu sein... 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: 11. Aug. 2003 10:22 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
Ich hab eigentilch keine Ahnung was die zu bedeuten haben, aber man erkennt dann wenigstens wie viel jemandem die Antworten und die Hilfe Wert war. So erhällt man oft Unities von Leuten denen man in einem Beitrag gar nicht geholfen hat, und man freut sich dann umso mehr. Außerdem steht man dann unter den TOP 5-Mitgliedern des letzten Monats Ich vergebe immer ein paar Punkte, wenn ich etwas neues erfahre, ganz egal ob ich es nun brauche oder nicht, so bekommt derjenige eine Rückmeldung, etwas Lob hat ja noch niemandem geschadet. Sonst ist es mir aber recht egal, Haupsache ich bekomme irgeneine Rückmeldung. Oft ist es ja so das man auf irgendetwas antwortet und da kommt nix zurück, da weiß man dann natürlich nicht, ob einem der Rat geholfen hat oder nicht. ------------------ Roland 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: 11. Aug. 2003 10:48 <-- editieren / zitieren --> Unities abgeben:
Ups, das bedeutet, dass ich unter Umständen in der vergangenheit unbewußt negativ aufgefallen bin, weil ich das nicht gemacht habe. Bekommst natürlich gerne Unties und auch die anderen die mir hier geholfen haben. Wieviel vergibt man denn so? Kannst soviel haben wie du willst - hast mir nämlich sehr geholfen - ehrlich! Hat dich ja auch Zeit gekostet die Makros zu schreiben etc. 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: 11. Aug. 2003 11:24 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
Gib einfach was du willst, und weil ich nicht so bin, gleich noch eine Funktion, dann sparst du dir die unnötige Arbeit. Code: Public Function InsertBlockEx(BlInsertPoint, BlName As String, Optional BlXScale As Double = 1, _ Optional BlYScale As Double = 1, Optional BlZScale As Double = 1, _ Optional BlRotation As Double = 0) As AcadBlockReference Dim BlNew As AcadBlockReference Select Case ThisDrawing.ActiveSpace Case acPaperSpace Select Case ThisDrawing.MSpace Case True Set BlNew = ThisDrawing.ModelSpace.InsertBlock(BlInsertPoint, BlName, BlXScale, _ BlYScale, BlZScale, BlRotation) Case False If funLayoutMM = True Then Set BlNew = ThisDrawing.PaperSpace.InsertBlock(BlInsertPoint, BlName, 1, _ 1, 1, BlRotation) Else Set BlNew = ThisDrawing.PaperSpace.InsertBlock(BlInsertPoint, BlName, BlXScale, _ BlYScale, BlZScale, BlRotation) End If End Select Case acModelSpace Set BlNew = ThisDrawing.ModelSpace.InsertBlock(BlInsertPoint, BlName, BlXScale, _ BlYScale, BlZScale, BlRotation) End Select Set InsertBlockEx = BlNew Set BlNew = Nothing End Function Public Function BlockInDrawing(BlockName) Dim BlCheck As AcadBlock On Error Resume Next Set BlCheck = ThisDrawing.Blocks(BlockName) If Err Then BlockInDrawing = False Else BlockInDrawing = True End If End Function
Wenn du jetzt den Block einfügen möchtest, dann schreib einfach folgendes Code: Dim Block1 As AcadBlockReference Const BlName1 As String = "Dein_Block" Set Block1 = InsertBlockEx(point3d(Radius,0), IIf(BlockInDrawing(BlName1), BlName1, BlName1 & ".dwg"))
------------------ Roland [Diese Nachricht wurde von RoSiNiNo am 11. August 2003 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pan Mitglied
Beiträge: 141 Registriert: 18.01.2003
|
erstellt am: 11. Aug. 2003 11:30 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
|
hsb Mitglied Ing
Beiträge: 4 Registriert: 10.08.2003
|
erstellt am: 11. Aug. 2003 12:11 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
hallo vip, das ist richtig, der downloadbereich steht nur unseren kunden zur verfügung. geht es um eine einfache kostengünstige lösung des problems oder geht es um das erlernen von vba? hsb Zitat: Original erstellt von The VIP: Hallo beisammen.Habe am Wochenende alleine mit Excel versucht rechnerisch mit Hilfe von Pythagoras an die Koordinaten der Endpunkte der Bögen zu gelangen. Hat geklappt, wenn ich auch etwas skeptisch war was die Genauigkeit angeht. Heute morgen als ich die Bögen in AutoCAD gemessen habe und die Koordinaten vermasst habe, hab ich Abweichungen im 100stel-Bereich gegenüber der Excel-Berechnung festgestellt (kann mit Rundungen oder der Zahl Pi zu tun haben - keine Ahnung). Jedenfalls stimmt die Berechnung (siehe Anhang) nur das Ergebnis ist nicht 100%ig: berechnete X-Koordinate: [b]748.218370269548 (Bei Ø2000 und 180° bzw. 45°-Seitenwand) gemessense X-Koordinate: 748.222261554 das zieht sich durch jede Koordinate - überall Abweichungen bei der zweiten Nachkommastelle ich glaube nicht dass ich so vorgehen kann, obwohl das relativ einfach und auch schnell gelöst gewesen wäre. Dass das so ein Problem ist, hätte ich nicht gedacht. @hsb: Konnte den LISP Recoder nicht auf der HP finden. Der Bereich Download ist Kennwortgeschützt @RoSiNiNo: Kann ich nicht einfach die Bögen an den Rechtecken stutzen lassen. Alles andere ist sonst eher ungenau oder (siehe oben -> berechnen bedeutet immer Runden...)[/B]
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: 11. Aug. 2003 12:37 <-- editieren / zitieren --> Unities abgeben:
der Grundgedanke war, den Arbeitsaufwand zu verkleinern. Wenn bei uns eine grundsätzlich Änderung an den Draufsichten vergenommen wird, müssen mehrere Zeichnungen einzeln geöffnet und bearbeitet werden. Das mussten wir nun schon zwei Mal tun (es betrifft mehr als nur 21 Zeichnungen, da es auch Varianten gibt). Dann kam mir die Idee mit VBA und ich dachte, dass es ähnlich ist wie Excel (welches ich ja sehr gut kann). Dem ist aber nicht so und nun hab ich festgestellt, dass ich AutoCAD VBA erst erlernen muss. Das mit den ganzen Variablen festlegen und den Public Functions habe ich so nie genutzt. Meine Makros (die im Excel z.T. auch sehr komplex und vielfältig sind) habe ich immer auf das minimalste reduziert. Sprich: Nur dort Variablen erstellt wo es sein muss. Hier muss ich alleine um eine Polylinie zu zeichnen schon ein separates Makro (Public Function) schreiben um (für mich) unwichtige Dinge wie Papier- und Modellbereich zu unterscheiden. Das kann selbst ich nicht aus dem Stehgreif Ich hab es dank der Hilfe im VBA nun schon fertig gebracht die Linien zu spiegeln sodass ich eine Draufsicht habe die ähnlich aussieht wie die Vorlage die ich weiter oben angehängt habe (mit großer Vorarbeit von RoSiNiNo ) Die Entscheidung, dies zukünftig über VBA zu machen war eine Idee von mir, da nun schon wieder eine Überarbietung der Draufsichten bevorsteht (nämlich neue Radien) und so könnte ich einfach den Radius im Marko ändern und alles wäre geritzt. Ob ich das zeitlich hinbekomme bis diese nächste Änderung kommt (ca. 1 Monat) ist fraglich. Kann sein, dass dann trotzdem jemand hinhocken muss und alle die zeichnungen neu machen muss. Soviel zum Hintergrund. Ich weiß nicht ob man hier in der Firma bereit ist für diese "Spielerei" Geld auszugeben (auch wenn man deutlich einsparen würde, da je keiner zwei Tage hinsitzen muss und Zeichnungen anpassen muss) - aber wir kenne ja so manche Firmenpolitiken... So einen VBA-Recoder wie ganz oben erwäht wäre ne feine Sache, da ich auf diese Weise sehr schnell lernen könnte (so ging das auch bei Excel). Das Interesse am Erlernen ist bei mir da! Aber momentan steht eher das fertige Ergebnis im Vordergrund (für die Firma). Nur: Aus den Fingern kann ich mir das nicht saugen... [Diese Nachricht wurde von The VIP am 11. August 2003 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
hsb Mitglied Ing
Beiträge: 4 Registriert: 10.08.2003
|
erstellt am: 11. Aug. 2003 13:20 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
so ähnlich habe ich mir das auch gedacht, aber zum schluss ist es doch immer eine frage des geldes. was kostet es 21 zeichnungen ca 2/jahr neu zu zeichnen und wieviele andere parametrische zeichnungsaufgaben sind sonst noch zu bewältigen? ich glaube das geht mit einem tool billiger. zum programm DOG (dynamischer objekt generator) erzeugt über parametrische definitionen bögen, linien, bemassungen, blöcke, schraffuren etc. die anzahl der variablen ist unbegrenzt. die definition einer parametrischen zeichnung dauert je nach komplexität der zeichnung ca. 1,5 - 2mal so lange wie eine konventionelle zeichnung. das "aufgezeichnete" ergebnis ist ein lisp-programm, was die veränderung der zuvor definierten variablen zulässt und die davon abhängige zeichnung automatisch erzeugt. komplexere berechnungen lassen sich für anwender ohne lisp-kenntnisse auch alternativ über eine excel-tabelle errechnen und dann an autocad+dog übertragen. wenn interesse besteht kann ich mal ein kleines avi anhängen um die anwendung zu verdeutlichen. mfg hsb
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: 11. Aug. 2003 13:41 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
Eigentlich ist ja die Drehtür schon fertig, jetzt mußt du nur mehr die Bemaßung einfügen und schon funkts. Du mußt natürlich keine Funktion schreiben um eine Polylinie einzufügen, da man das aber öfter benötigt, ist es nicht schlecht wenn man so etwas einmal macht. Sollte jemand anderer Meinung sein, bitte melden. ------------------ Roland 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: 12. Aug. 2003 07:34 <-- editieren / zitieren --> Unities abgeben:
Moin, das läuft ja schon sehr gut mit dem Makro. Hab die entsprechendenBlöcke zugewiesen etc. Wenn ich noch einen normalen, geschlossenen Kreis (in Layer 7) zeichnen will (der quasi die komplette Aussenkontur der Anlage darstellen soll), was ist dann an der Anweisung... ThisDrawing.ModelSpace.AddCircle(Point3D(0, 0), Radius + 45) ...falsch? MfG The VIP [Diese Nachricht wurde von The VIP am 12. August 2003 editiert.] 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: 12. Aug. 2003 07:38 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
Kommt ganz darauf an was du damit machen willst. Wenn du den Kreis nachher noch einmal angreifen willst (Farbe ändern, verschieben,...), dann solltest du ihn dir auch merken. Code: dim Kreis as acadcircle set kreis = thisdrawing.modelspace.addcircle(Einsetzpunkt, Radius)
wenn du den Kreis nicht mehr brauchst, dann Code: thisdrawing.modelspace.addcircle Einsetzpunkt, Radius
------------------ Roland 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: 12. Aug. 2003 12:00 <-- editieren / zitieren --> Unities abgeben:
Hier noch ein paar Fragen: 1. ich spiegle bisher das erste Viertelsegment der Drehtür nach links und habe dann eine halbe Drehtür, dann spiegel wiederum dieses Viertel nach unten und dann wieder nach rechts um eine komplette Drehtür zu erhalten. Kann ich auch die kompletten Objekte nach unten spiegeln wenn ich bereits eine halbe Drehtür habe, oder muss ich wirklich Segment für Segment spiegeln? Ich würde mir einen "Spiegel-Vorgang" sparen. 2. Jetzt geht's etwas ins Detail, da wir auch noch die Glasscheibe darstellen. Die hat die selbe Kontur wie der Sockel. Das habe ich hinbekommen. Nur diesmal müssen die Enden miteinander verbunden sein (2 Bögen + 2 gerade Linien am Ende = Glasscheibe). Ich habe also Bögen und Linien gezeichnet und muss nun die gerade Linie stutzen (schon wieder stutzen....!) - kann ich hier mit Radius Null arbeiten um evtl. Variablen zu sparen? 3. Ich hab in der Hilfe gesucht konnte aber keine Anweisung schreiben die mir den Kreis (Radius + 45) auf Layer 7 setzt. Hab mehrere Varianten versucht, aber es hat nicht geklappt. 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: 12. Aug. 2003 12:41 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
zu 1. Wenn du dir die Objeke "gemerkt" hast (s.o.), dann ist es kein Problem, nimm einfach die ersten Objekte und die gespiegelten, und spiegel sie einfach. Da ist mir auch gleich etwas eingefallen, mach eine Collection und befülle sie mit deinen Objekten, dann kannst du alle Objekte deiner Collection drehen, spiegeln, etc. zu 2. Versteh ich nicht ganz zu 3. Code: Kreis.color=7
------------------ Roland 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: 12. Aug. 2003 13:08 <-- editieren / zitieren --> Unities abgeben:
1. ok, probier ich mal. hab's verstanden und glaube das kann ich umsetzen. 2. ich hab ne Datei angehängt. Jetzt wo ich das eine Stunde später durchlese was ich geschrieben hab ist es in der Tat schwer oder gar nicht zu verstehen 3. Ah, "color"...! ok, hat geklappt. PS: Ist es nicht etwas lächerlich, dass man in einem CAD Forum keine DWGs direkt anhängen kann sondern über ZIP gehen muss? [Diese Nachricht wurde von The VIP am 12. August 2003 editiert.] 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: 12. Aug. 2003 13:29 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
zu 2. kein Problem, du hast ja schon die Punkte Code: Linie1.startpoint=Bogen1.startpoint linie1.endpoint=bogen2.startpoint linie2.startpoint=bogen1.endpoint linie2.endpoint=bogen2.endpoint
oder, wenn du neue Linien zeichnen möchtest Code: dim Linie1 as acadline dim Linie2 as acadline set linie1=addlineex(bogen1.startpoint,bogen2.startpoint) set linie2=addlineex(bogen1.endpoint,bogen2.endpoint)
------------------ Roland [Diese Nachricht wurde von RoSiNiNo am 12. August 2003 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: 13. Aug. 2003 08:50 <-- editieren / zitieren --> Unities abgeben:
und noch zwei Fragen (nerve ich eigentlich? ) 1. Kann ich hier auch Vorgabewerte hinterlegen die man nur noch bestätigen muss Code:
ThisDrawing.Utility.GetInteger(vbCr & "Durchmesser: ")
Ich hätte gerne den Ø2000 als Standardeinstellung. 2. Wenn ich neben der Durchmessereingabe eine weitere Variable in das Makro einbauen will die der Benutzer angeben muss (in diesem Fall den Buchstaben G oder T der stellvertretend für eine Variante stehen soll), wie mach ich das?
Habe gedacht folgendes geht: Code:
Dim TYP as StringTYP = ThisDrawing.Utility.GetString(vbCr & "Anlagentyp: ")
aber irgendwie frisst er das nicht. PS: Das hier hat (natürlich) geklappt:
Code:
Linie1.startpoint=Bogen1.startpoint linie1.endpoint=bogen2.startpoint linie2.startpoint=bogen1.endpoint linie2.endpoint=bogen2.endpoint
Ist super! [Diese Nachricht wurde von The VIP am 13. August 2003 editiert.] 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: 13. Aug. 2003 12:59 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
|
pan Mitglied
Beiträge: 141 Registriert: 18.01.2003
|
erstellt am: 14. Aug. 2003 12:13 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
zu 1) vieleicht die gute alte on error... Sub test1() Dim test As Integer On Error GoTo in200: test = ThisDrawing.Utility.GetInteger(vbCr & "Durchmesser: <200>") Exit Sub in200: test = 200 End Sub zu 2) dir fehlt True oder False hinter Getstring. sh. in der Hilfe Gruß Pan
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: 14. Aug. 2003 12:54 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
|
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: 14. Aug. 2003 12:55 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
|
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: 14. Aug. 2003 12:57 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
|
The VIP Mitglied Technischer Zeichner
Beiträge: 170 Registriert: 06.09.2002 AutoCAD Mechanical 6 unter Windows XP
|
erstellt am: 19. Aug. 2003 11:05 <-- editieren / zitieren --> Unities abgeben:
Hi. melde mich nach langer Zeit wieder zurück Wir hatten hier ein bisschen viel Areit und ich musste das VBA Projekt ne Zeit ruhen lassen. Bin ständig am erweitern und verbessern. Bin aber nun auf ein Hürde gestossen: Ich habe hier ein Teil des Makros welches mir die Bögen an den entsprechenden Linie stutzt.
Code:
SP1_1 = Bogen1Temp.IntersectWith(Linie1, acExtendNone) SP2_1 = Bogen1Temp.IntersectWith(Linie2, acExtendNone) SP1_2 = Bogen2Temp.IntersectWith(Linie1, acExtendNone) SP2_2 = Bogen2Temp.IntersectWith(Linie2, acExtendNone)
Wenn ich nun Linien habe die den Bogen nicht schneiden (weil der Boden zum Bespiel einen zu kleinen Winkel hat), wie muss das Makro dann aussehen. Oder anders gefragt wie dehne ich die Bögen zur nächsten geraden Linie? Dachte zunächst es reicht, wenn ich hinten aus acExtendNone (heißt ja übersetzt "nicht strecken") einfach acExtendBoth (an beiden Enden strecken) mache. Hat aber nicht geklappt. Oder liegt es an dem IntersectWith? Und Nr.2: Wie lösche ich das Ursprungsobjekt wenn ich es spiegeln will. Wenn ich also ein Rechteck um eine Achse spiegeln möchte, will aber dass es von der Uursprungsposition verschwindet und auf die andere Seite der Achse "verschoben"/gespiegelt wird . [Diese Nachricht wurde von The VIP am 19. August 2003 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |