| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Absoluter Nullpunkt (2800 mal gelesen)
|
The VIP Mitglied Technischer Zeichner
Beiträge: 170 Registriert: 06.09.2002 AutoCAD Mechanical 6 unter Windows XP
|
erstellt am: 16. Dez. 2003 14:34 <-- editieren / zitieren --> Unities abgeben:
Hallo. Wenn ich bisher Zeichnungen per Makro erstellt habe (weil sich variable Maße im Teil befinden) dann wurden die immer auf dem absoluten Nullpunkt gezeichnet: 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
Wenn ich nun neben dieses Teil (welches auf dem absoluten Nullpunkt sitzt) ein weiteres Teil per Makro zeichnen lassen möchte, wie hinterlege ich dann die Basiskoordinatendaten (z.B. X=5000 / Y=0 / Z=0) Noch besser natürlich wäre, wenn man vor Makrobeginn gefragt werden könnte wo das Makro die Zeichnung zeichnen soll (also sozusagen per Mausklick ein Einfügepunkt setzen). Man klickt auf einen bestimmten Punkt im Modellbereich und dieser Punkt ist dann der Nullpunkt/Basispunkt für das Makro. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 16. Dez. 2003 14:45 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
du könntest eine globale variable verwenden z.B.: Public BasisPunkt as variant und am anfang schreibst du BasisPunkt = ThisDrawing.Utility.GetPoint(, "BasisPunkt") in deiner funktion zum punktumwandeln musst du die nur dazurechnen. 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 + basispunkt(0) retVal(1) = Y + basisPunkt(1) retVal(2) = Z Point3D = retVal End Function damit kannst du wieder mit deinem nullpunkt rechnen, gezeichnet wird dann (über die funktion Point3D) um den gezeigten vektor verschoebn ------------------ 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. Dez. 2003 15:30 <-- editieren / zitieren --> Unities abgeben:
Wenn ich kompiliere bekomme ich bei Code:
Public BasisPunkt As Variant
einen Fehler: "Ungültiges Attribut in Sub oder Function" Beim Rest habe ich mich an deine Vorgaben gehalten. Mein Sub ist übrigens ein PUBLIC SUB (vielleicht hat das was zu sagen) Ich habe anstelle "Public BasisPunkt As Variant" auch schon "Dim BasisPunkt As Variant" geschrieben. Kein Erfolg, denn dann bleibt er in der Zeile
Code:
retVal(0) = X + BasisPunkt(0)
hängen, nachdem ich den Basispunkt im Modellbereich wählen konnte. EDIT: Ich starte das Makro aus einem Eingabefeld (über Betätigung von einem Button) Code:
Private Sub COMMAND_OK_Click()Zeichnung_erstellen 'startet Hauptmakro (Public Sub) End Sub
Dann bleibt er bereits in dieser Zeile hängen:
Code:
BasisPunkt = ThisDrawing.Utility.GetPoint(, "BasisPunkt:")
[Diese Nachricht wurde von The VIP am 16. Dez. 2003 editiert.] [Diese Nachricht wurde von The VIP am 16. Dez. 2003 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 16. Dez. 2003 15:43 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
also mein modul schaut jetzt so aus Public BasisPunkt As Variant
Public Sub test() BasisPunkt = ThisDrawing.Utility.GetPoint(, "BasisPunkt") ThisDrawing.ModelSpace.AddLine Point3D(0, 0), Point3D(1, 1) End Sub 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 + BasisPunkt(0) retVal(1) = Y + BasisPunkt(1) retVal(2) = Z Point3D = retVal End Function mit sub test starte ich das vba-makro nach der abfrage nach dem basispunkt , wird dann von 0,0 nach 1,1 eine linie gezeichnet, die allerdins nicht bei 0,0 sondern bei deinem gezeigtem basispunkt beginnt.
------------------ 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. Dez. 2003 15:52 <-- editieren / zitieren --> Unities abgeben:
Stimmt!! Klappt einwandfrei. Problem: Ich starte das Makro über den Button (also PRIVATE SUB - siehe oben) und das scheint nicht zu klappen, denn wenn ich das Makro im Visual Basic Editor starte (über den Button "Ausführen"), dann klappt alles einwandfrei... Irgendwie muss ich den Button austricksen, aber wie? [Diese Nachricht wurde von The VIP am 16. Dez. 2003 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 16. Dez. 2003 16:08 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
hab mein zeugs jetzt mal in eine userform eingebunden, und funzt auch (das form muss aber eigenschaft ShowModal=false haben. sonst geht die punkteingabe nicht.) Public BasisPunkt As Variant Private Sub CommandButton1_Click() BasisPunkt = ThisDrawing.Utility.GetPoint(, "BasisPunkt") ThisDrawing.ModelSpace.AddLine Point3D(0, 0), Point3D(1, 1) End Sub 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 + BasisPunkt(0) retVal(1) = Y + BasisPunkt(1) retVal(2) = Z Point3D = retVal End Function
------------------ 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: 16. Dez. 2003 16:23 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
Eigentlich verstehe ich nicht warum ihr die Funktion Point3D verändert. Wieso machst du es nicht einfach so? Code: Private Sub CommandButton1_Click() Dim BasisPunkt As Variant BasisPunkt = ThisDrawing.Utility.GetPoint(, "BasisPunkt") ThisDrawing.ModelSpace.AddLine Point3D(0 + Basispunkt(0), 0 + Basispunkt(1)), Point3D(1 + Basispunkt(0), 1 + Basispunkt(1)) End Sub
------------------ 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: 16. Dez. 2003 16:24 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
|
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 16. Dez. 2003 16:27 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
@rosinino damit das haupt-erstell programm unabhängig von der verschiebung funktioniert. es geht ja nicht unbedingt nur um die eine linie, sondern kann auch durchaus, um komplexere berechnete zeichnungen gehen, und da ist es halt einfacher so zu tun (rechnen) als ob man das im Null/Null Punkt macht. ------------------ 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. Dez. 2003 16:32 <-- editieren / zitieren --> Unities abgeben:
Ich habe ziemlich viele Linien und Kreise und müsste daher oft zu dem Befehl "Point3D" die Anweisung "+ Basispunkt(0)" hinzufügen. Das Makro würde dadurch länger werden. Im Grunde ist das schon OK wenn das in der Function Point3D hinterlegt ist, aber das PRIVATE SUB (welches sich hinter dem Button im Dialogfeld/Formular verbirgt) verträgt sich irgendwie nicht mit dem PUBLIC-SUB-Makro welches ich wiedrum in einem Modul geschrieben habe.
[Diese Nachricht wurde von The VIP am 16. Dez. 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: 16. Dez. 2003 16:50 <-- editieren / zitieren --> Unities abgeben:
vielleicht nochmal kurz zum besseren Durchblick: Ich habe eine Werkzeugleiste mit einem selbsteingerichteten Button. Hinter dem Button verbirgt sich der Befehl:
Code:
^C^C-vbarun DIALOG
Im Visual Basic Editor wird nun im Modul1 das Makro DIALOG aufgerufen. dieses Makro sieht schlichtweg so aus: Code:
Public Sub DIALOG() EINGABE.Show End Sub
Das Formular mit dem Namen EINGABE wird geöffnet. Der Konstrukteur stellt seine Parameter ein die zur Zeichnungserstellung benötigt werden. Er kann nun auf "Schließen" klicken: Code:
Private Sub COMMAND_SCHLIESSEN_Click() Unload Me End Sub
oder auf OK: Code:
Public Sub COMMAND_OK_Click() Zeichnung_erstellen 'startet Hauptmakro (Public Sub) End Sub
im Makro "Zeichnung_erstellen" welches sich in Modul2 befindet zeichnet nun Visual Basic die gewünschte Zeichnung. Und im Makro "Zeichnung_erstellen" steht dann auch: Code:
Public BasisPunkt As VariantPublic Sub Zeichnung_erstellen() ... [b]BasisPunkt = ThisDrawing.Utility.GetPoint(, "BasisPunkt:")[b] ... End Sub
und in der fettgedruckten Zeile gibt's die Fehlermeldung. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 17. Dez. 2003 08:26 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
so jetzt habe ich hargenau deine konstellation nachgebaut und es funktioniert. es gibt nur ein problem: wenn das userform MODAL geöfnet wird, kommt bei der zeile die du fett markieren wolltest, ein laufzeitfehler "AutoCad Hauptfenster ist nicht sichtbar". bei modalen fenstern sind natürlich keinerlei punkteingaben in der zeichnung erlaubt. entweder du machst die eigenschaft ShowModal des userforms auf false (dann bleibt das userform einfach stehen, und du kannst trotzdem in der zeichnung arbeiten , ähnlich wie das acad-eigenschaftsfenster nur nicht dockable) oder du schliesst das userform, vor der punkteingabe z.B.: Public Sub COMMAND_OK_Click() ME.HIDE Zeichnung_erstellen 'startet Hauptmakro (Public Sub) ME.SHOW End Sub
------------------ 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. Dez. 2003 09:11 <-- editieren / zitieren --> Unities abgeben:
|
The VIP Mitglied Technischer Zeichner
Beiträge: 170 Registriert: 06.09.2002 AutoCAD Mechanical 6 unter Windows XP
|
erstellt am: 17. Dez. 2003 14:46 <-- editieren / zitieren --> Unities abgeben:
Hallo nochmal. Es hat zwar nichts mehr mit dem Hauptthema "Nullpunkt" zu tun, aber ich stelle die Frage dennoch in diesem Thread. Mein Makro erweitert sich ständig, sodass ich nun noch eine zweite Zeichnung mit einem neuen Einfügepunkt im Makro erzeugen lasse: Code:
Public Sub COMMAND_OK_Click()ME.HIDE Zeichnung_erstellen1 'startet Hauptmakro (Public Sub) Zeichnung_erstellen2 'startet Hauptmakro (Public Sub) ME.SHOW End Sub
Makro "Zeichnung_erstellen2" baut sich ähnlich auf wie "Zeichnung_erstellen1" - auch hier zunächst die Makroabfrage nach dem Basispunkt. Und jetzt zu meiner Frage: Ich hab festgestellt dass der Basispunkt-Befehl nicht "transparent" ist. Ich werde nach dem Basispunkt gefragt, möchte aber vorher z.B. zoomen dann bricht das Makro ab. Es ist zwar kein so großes Hindernis oder so, aber ist es dennoch möglich diese Zeile transparent zu machen? Geht das überhaupt so einfach? Es wäre halt komfortabler.
[Diese Nachricht wurde von The VIP am 17. Dez. 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: 17. Dez. 2003 14:50 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
|
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 30. Dez. 2003 18:26 <-- editieren / zitieren --> Unities abgeben: Nur für The VIP
Zitat: Original erstellt von The VIP: Public BasisPunkt As VariantPublic Sub Zeichnung_erstellen() ... BasisPunkt = ThisDrawing.Utility.GetPoint(, "BasisPunkt:") ... End Sub und in der fettgedruckten Zeile gibt's die Fehlermeldung.
Hab' das nicht komplett nachvollzogen, bin auch totaler Anfänger, nur ... nimm auch mal den ':' da raus BasisPunkt = ThisDrawing.Utility.GetPoint(, "BasisPunkt") lg Nancy [Diese Nachricht wurde von startrek am 30. Dez. 2003 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |