| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
|
Autor
|
Thema: Problem ActiveUcs (1286 mal gelesen)
|
c.schojer Mitglied
 
 Beiträge: 299 Registriert: 23.05.2007 Autocad 2018
|
erstellt am: 29. Apr. 2008 21:04 <-- editieren / zitieren --> Unities abgeben:         
Problem mit dem Programm bei Adt2006 Gibt X und Y-Achse des Bks sind nicht im Lot???? Mfg Chris Sub Example_ActiveUCS() ' This example returns the current saved UCS (or saves a new one dynamically) ' and then sets a new UCS. ' Finally, it returns the UCS to the previous setting. Dim newUCS As AcadUCS Dim currUCS As AcadUCS Dim origin(0 To 2) As Double Dim xAxis(0 To 2) As Double Dim yAxis(0 To 2) As Double ' Get the current saved UCS of the active document. If the current UCS is ' not saved, then add a new UCS to the UserCoordinateSystems collection If ThisDrawing.GetVariable("UCSNAME") = "" Then ' Current UCS is not saved so get the data and save it With ThisDrawing Set currUCS = .UserCoordinateSystems.Add( _ .GetVariable("UCSORG"), _ .Utility.TranslateCoordinates(.GetVariable("UCSXDIR"), acUCS, acWorld, 0), _ .Utility.TranslateCoordinates(.GetVariable("UCSYDIR"), acUCS, acWorld, 0), _ "OriginalUCS") End With Else Set currUCS = ThisDrawing.ActiveUCS 'current UCS is saved End If MsgBox "The current UCS is " & currUCS.name, vbInformation, "ActiveUCS Example" ' Create a UCS and make it current origin(0) = 0: origin(1) = 0: origin(2) = 0 xAxis(0) = 1: xAxis(1) = 1: xAxis(2) = 0 yAxis(0) = -1: yAxis(1) = 1: yAxis(2) = 0 Set newUCS = ThisDrawing.UserCoordinateSystems.Add(origin, xAxis, yAxis, "TestUCS") ThisDrawing.ActiveUCS = newUCS MsgBox "The new UCS is " & newUCS.name, vbInformation, "ActiveUCS Example" ' Reset the UCS to its previous setting ThisDrawing.ActiveUCS = currUCS MsgBox "The UCS is reset to " & currUCS.name, vbInformation, "ActiveUCS Example" End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
   
 Beiträge: 1360 Registriert: 24.07.2002
|
erstellt am: 29. Apr. 2008 21:08 <-- editieren / zitieren --> Unities abgeben:          Nur für c.schojer
Hi Chris, Was willst du uns damit sagen?! Bekommst du bei dem Beispiel eine Fehlermeldung?! Ich kenne so einen Fehler nur, wenn uns Homag Zeichnungen von neuen Maschinen / Maschinenplänen schickt, die mit Catia erstellt wurden. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
c.schojer Mitglied
 
 Beiträge: 299 Registriert: 23.05.2007 Autocad 2018
|
erstellt am: 29. Apr. 2008 21:45 <-- editieren / zitieren --> Unities abgeben:         
Nein ist ein ganz normales Autocad file wo ich ucs auf ein Objekt gemacht habe wenn ich diesen Befehl dann ausführe bekomme ich den erwähnten Fehler... Hmm wenn ich das gesamte File Exportiere paßts Wie kann ich das Aktuelle UCS abspeichern? ohne Fehler? und wieder laden? Mfg Chris [Diese Nachricht wurde von c.schojer am 29. Apr. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Huebi Mitglied Vermessungsing.
 
 Beiträge: 107 Registriert: 08.01.2004 Intel Core Duo E6750@2.66GHz NVIDIA GeForce 8600 GT AutoCAD 2004, 2007, 2008 AcadMAP 2004 und 2007 Civil 3D 2008 ADT 2009
|
erstellt am: 02. Mai. 2008 10:55 <-- editieren / zitieren --> Unities abgeben:          Nur für c.schojer
Hallo beinander, auf dieses Problem bin ich auch schon gestoßen. Der Beispielscode funktioniert nicht richtig, wenn man ein unbenanntes BKS aktiviert hat (z.B. das BKS nach einem Objekt ausgedreht und dieses dann eben nicht gespeichert hat). Mein Work-Around sieht dann folgendermaßen aus: ThisDrawing.SendCommand ("BKS" & vbCr & "SP" & vbCr & "originalUCS" & vbCr & "j" & vbCr) Das ist allerdings wenig elegant... aber es wirkt! Liebe Grüße aus München Hübi P.S. Weiß eigentlich jemand von Euch, warum meine uralte System-Info immer wieder angezeigt wird, obwohl ich diese in meinem Profil längst geändert habe? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin

 Beiträge: 2855 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2025 Plateia, Canalis Visual Basic
|
erstellt am: 02. Mai. 2008 11:34 <-- editieren / zitieren --> Unities abgeben:          Nur für c.schojer
Hallo Hübi, darüber habe ich mich auch schon gewundert, bis ich vor einigen Wochen einen Threat las, der darauf hinwies, dass die Sysinfo brettabhämgig sind. D.h. wenn Du in einem Forum Deinen ersten Beitrag / Antwort schreibst, wird die SysInfo vom Profil übernommen und dort hinterlegt. Anschließend wird diese SysInfo verwendet. Willst Du diese ändern kannst Du das beim Verfassen eines neuen Beitrages machen. Siehe auch hier Grüße, Klaus [Diese Nachricht wurde von KlaK am 02. Mai. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Huebi Mitglied Vermessungsing.
 
 Beiträge: 107 Registriert: 08.01.2004 Intel Core Duo E6750@2.66GHz NVIDIA GeForce 8600 GT AutoCAD 2004, 2007, 2008 AcadMAP 2004 und 2007 Civil 3D 2008 ADT 2009
|
erstellt am: 02. Mai. 2008 13:27 <-- editieren / zitieren --> Unities abgeben:          Nur für c.schojer
Hallo Klaus, herzlichen Dank für die Info ;o) Kapiert hab ich's zwar noch nicht, warum die Systeminfo brettabhängig sein soll... aber ich hab's zur Kenntnis genommen *g* Mal sehen, ob sich die Einstellungen mit diesem Posting ändern *g* Grüße aus München Hübi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
   
 Beiträge: 1360 Registriert: 24.07.2002
|
erstellt am: 02. Mai. 2008 20:40 <-- editieren / zitieren --> Unities abgeben:          Nur für c.schojer
Hi Chris, Ich kann dein Problem zwar nicht nachvollziehen. Aber ein UCS kannst du ja so erstellen: Code: Set ucsObj = ThisDrawing.UserCoordinateSystems.Add(origin, xAxisPoint, yAxisPoint, "TestUCS")
Wobei du dir den Wert für origin aus der Systemvariable UCSORG holen kannst. Die X- und Y-Vectoren kannst du über die Systemvariablen UCSXDIR und UCSYDIR holen. Damit bist du dann auch nicht auf das ActiveUCS-Object angewiesen. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Huebi Mitglied Vermessungsing.
 
 Beiträge: 107 Registriert: 08.01.2004 Intel Core Duo E6750@2.66GHz NVIDIA GeForce 8600 GT AutoCAD 2004, 2007, 2008 AcadMAP 2004 und 2007 Civil 3D 2008 ADT 2009
|
erstellt am: 05. Mai. 2008 07:21 <-- editieren / zitieren --> Unities abgeben:          Nur für c.schojer
Hallo Carsten, probier's doch mal aus - irgendwo in dem Beispielcode (...oder im VBA?) ist ein Bug. Zeichne z.B. eine Linie von 0,0 nach 1,2 und drehe das BKS danach aus (BKS - Objekt) ohne dieses dann zu speichern. Dann geh mal den Beispielcode aus der VBA-Hilfe, den Chris angegeben hat, durch. Eigentlich sollte das BKS unter dem Namen "OriginalUCS" gespeichert und dann wieder hergestellt werden, aber das, was dabei rauskommt entspricht nicht dem originalen BKS - leider. Mich würde es auch brennend interessieren, woran das liegt! Grüße, Hübi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
c.schojer Mitglied
 
 Beiträge: 299 Registriert: 23.05.2007 Autocad 2018
|
erstellt am: 05. Mai. 2008 13:01 <-- editieren / zitieren --> Unities abgeben:         
|
Carsten1210 Mitglied staatl. geprüfter Holztechniker
   
 Beiträge: 1360 Registriert: 24.07.2002
|
erstellt am: 05. Mai. 2008 13:57 <-- editieren / zitieren --> Unities abgeben:          Nur für c.schojer
Hi, Jetzt hab ich das Problem erkannt. Ich denke, der Fehler liegt darin, das bei den Viewdirections (UCSXDIR und UCSYDIR) die Koordinaten von dem Ursprung(UCSORG) aus berechnet werden müssen und nicht als absolute Werte genutzt werden können. Dann sollte es auch funktionieren. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Huebi Mitglied Vermessungsing.
 
 Beiträge: 107 Registriert: 08.01.2004 Intel Core Duo E6750@2.66GHz NVIDIA GeForce 8600 GT AutoCAD 2004, 2007, 2008 AcadMAP 2004 und 2007 Civil 3D 2008 ADT 2009
|
erstellt am: 05. Mai. 2008 15:02 <-- editieren / zitieren --> Unities abgeben:          Nur für c.schojer
Hallo Chris und Carsten, die Viewdirections (UCSXDIR und UCSYDIR) liegen auf dem Einheitskreis und zeigen eigentlich nur den Winkel der Achsen an - und das im WKS. Was mich schon immer wunderte ist, dass die Directions in diesem Beispiel mit der Methode "TranslateCoordinates" nochmals umgewandelt werden. Dies ist meiner Meinung nach eigentlich nicht notwendig. Ändert man den Code allerdings so ab: Set currUCS = .UserCoordinateSystems.Add( _ .GetVariable("UCSORG"), _ .GetVariable("UCSXDIR"), _ .GetVariable("UCSYDIR"), _ "OriginalUCS") erscheint (nicht immer) die Fehlermeldung: "X-Achse und Y-Achse des BKS sind nicht im Lot" Irgendwo ist da der Wurm drin *g*...nur wo? Grüße vom Hübi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
   
 Beiträge: 1360 Registriert: 24.07.2002
|
erstellt am: 05. Mai. 2008 15:12 <-- editieren / zitieren --> Unities abgeben:          Nur für c.schojer
Hi Huebi, Du musst die X- und Y-Vectoren vom Origin (Einfüge / Nullpunkt des BKS) aus für das neue BKS angeben. Das heißt, das du die Vectoren berechnen musst und nicht einfach die Werte nehmen kannst, die du über die Variablen zurück bekommst. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Huebi Mitglied Vermessungsing.
 
 Beiträge: 107 Registriert: 08.01.2004 Intel Core Duo E6750@2.66GHz NVIDIA GeForce 8600 GT AutoCAD 2004, 2007, 2008 AcadMAP 2004 und 2007 Civil 3D 2008 ADT 2009
|
erstellt am: 08. Mai. 2008 16:29 <-- editieren / zitieren --> Unities abgeben:          Nur für c.schojer
Okeeee, Okeeee, Du hast ja recht Carsten *g* Ich hab's mal ausprobiert und so funktioniert's tadellos! Sub SaveCurrentUCS ()
Dim currUCS As AcadUCS Dim UCSName As String UCSName = ThisDrawing.GetVariable("UCSNAME") If InStr(UCSName, "*") <> 0 Then UCSName = "" If UCSName = "" Then Dim Origin As Variant Dim xAxis As Variant Dim yAxis As Variant With ThisDrawing Origin = .GetVariable("UCSORG") xAxis = .GetVariable("UCSXDIR") yAxis = .GetVariable("UCSYDIR") End With xAxis(0) = Origin(0) + xAxis(0) xAxis(1) = Origin(1) + xAxis(1) xAxis(2) = Origin(2) + xAxis(2) yAxis(0) = Origin(0) + yAxis(0) yAxis(1) = Origin(1) + yAxis(1) yAxis(2) = Origin(2) + yAxis(2) Set currUCS = ThisDrawing.UserCoordinateSystems.Add(Origin, xAxis, yAxis, "OriginalUCS") Else Set currUCS = ThisDrawing.ActiveUCS 'aktuelles BKS ist bereits gespeichert End If End Sub 10Us sind unterwegs Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
c.schojer Mitglied
 
 Beiträge: 299 Registriert: 23.05.2007 Autocad 2018
|
erstellt am: 08. Mai. 2008 19:26 <-- editieren / zitieren --> Unities abgeben:         
|