| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY: der unverzichtbare Partner für umfassende KI-Lösungen von Workstations bis zu Edge Computing und KI-Cluster-Bereitstellung, eine Pressemitteilung
|
Autor
|
Thema: alle Layer in Ansichtsfenster tauen (3078 mal gelesen)
|
_stphn_ Mitglied
 Beiträge: 4 Registriert: 01.07.2006
|
erstellt am: 01. Jul. 2006 21:31 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich möchte per VBA für alle Layer in einem Layout-Ansichtsfenster die Eigenschaft "Layer in Anischtsfenster frieren" auf getaut setzen - sprich nicht frieren. Mit VBA ist das sehr umsändlich, da diese Eigenschaft im Layer-Objekt nicht enthalten ist und man einen Umweg über die XDaten machen muss. Bis hierhin kein Problem, nur leider funktioniert der untenstehende Code nicht, d.h. es gibt keine Veränderung am Layerstatus. Code:
Sub ThawAllLayInViewP() 'alle Layer in Ansichtsfenster tauen Dim xType As Variant, xData As VariantThisDrawing.ActivePViewport.GetXData "ACAD", xType, xData If xData(1) = "MVIEW" Then 'nur zur Sicherheit xType(30) = 1002 xData(30) = "}" xType(31) = 1002 xData(31) = "}" ReDim Preserve xType(31) ReDim Preserve xData(31) ThisDrawing.ActivePViewport.SetXData xType, xData End If End Sub
Kann mir jemand helfen bitte? Wo liegt der Fehler oder läuft es etwa sogar auf anderen Rechnern. Ich habe auch schon ein Makro, das einzelne Layer im Ansichtsfenster friert. Gibt es zufäälig schon eine erweiterte Version, wo bestimmte Layer anhand einer Liste (optimalerweise mit Wildcards) oder eines Userforms im Ansichtsfenster gefroren werden können.
Vielen Dank Stephan [System: Win XP, ACAD 2005]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
_stphn_ Mitglied
 Beiträge: 4 Registriert: 01.07.2006
|
erstellt am: 01. Jul. 2006 21:35 <-- editieren / zitieren --> Unities abgeben:         
ich sollte noch was zur Funktion das Makros schreiben: in den XDaten stehen ab Feld 30 alle Layer, die im aktuellen Ansichtsfenster gefroren sind mit dem dazugehörenden Wert 1003, die letzten 2 Felder enthalten eine "}" und den Code 1002. Also schreiben ich einfach in die Felder 30 und 31 die Werte für die letzten 2 Feldern, redimensioniere die Datenfelder und schreibe die XDaten ..soweit zur Theorie - die Praxis lässt sich davon leider noch nicht überzeugen 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 AutoCAD ACA 2024 Solidworks 2022 Sp5 Enterprise PDM 2022 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell Precision 3660 Intel Core i9-12900K 32 GB Arbeitsspeicher 2x Dell U2415
|
erstellt am: 03. Jul. 2006 08:08 <-- editieren / zitieren --> Unities abgeben:          Nur für _stphn_
|
_stphn_ Mitglied
 Beiträge: 4 Registriert: 01.07.2006
|
erstellt am: 03. Jul. 2006 11:40 <-- editieren / zitieren --> Unities abgeben:         
Danke, genau das was ich gesucht habe! Ich habe erst morgen Zeit, den Code zu testen, aber nach dem ersten Überfliegen ist es wohl so, dass die XDaten zum Schluss in ein neues Ansichtsfenster geschrieben werden müssen (das die Abmessungen des alten übernimmt). Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BloodyMess Mitglied Applicationingenieur
  
 Beiträge: 604 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 03. Jul. 2006 11:55 <-- editieren / zitieren --> Unities abgeben:          Nur für _stphn_
|
Carsten1210 Mitglied staatl. geprüfter Holztechniker
   
 Beiträge: 1360 Registriert: 24.07.2002
|
erstellt am: 03. Jul. 2006 12:12 <-- editieren / zitieren --> Unities abgeben:          Nur für _stphn_
Hi Lars, Stephan möchte die Layer im aktuellen Ansichtsfenster des Papierbreichs tauen. Dort kannst du nur über den Umweg Xdata rankommen. Schau die mal den Layermanager an, dort kannst du die Layer frieren und separat, wenn du in einem aktiven Ansichtsfenster bist, kannst für diese Fenster separate Einstellungen treffen. Und darum geht es hier. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BloodyMess Mitglied Applicationingenieur
  
 Beiträge: 604 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 03. Jul. 2006 12:25 <-- editieren / zitieren --> Unities abgeben:          Nur für _stphn_
|
PBPaul Mitglied Konstrukteur

 Beiträge: 48 Registriert: 28.09.2004 ACAD 2009, Vista 64
|
erstellt am: 18. Okt. 2006 18:57 <-- editieren / zitieren --> Unities abgeben:          Nur für _stphn_
Hallo, da ich oft mit den Expresstools in Asichtsfenstern Layer isoliere (sie werden dabei nur gefroren nicht ausgeschaltet) um Einzelteilprofile zu erzeugen, interessiert mich dieses Thema sehr. Das Tool auf das Carsten verwiesen hatte, macht auf meinem Rechner gar nichts (der Status aller Layer bleibt unverändert. Wie ist denn der Stand der Dinge? MfG Paul Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
_stphn_ Mitglied
 Beiträge: 4 Registriert: 01.07.2006
|
erstellt am: 19. Okt. 2006 15:11 <-- editieren / zitieren --> Unities abgeben:         
bei mir läuft es ohne Probleme: Nochmal zum Verständnis - es geht darum, im Modellbereich eines Layout einzelne Layer zu frieren/tauen (also "im Anichtsfenster"). Du muss also ins Anischtsfenster wechslen und dort das Makro "selectVPobjectsToFreeze()" starten, anschließend Objekte auf den zu frierenden Layern auswählen und schwupps sind sie weg. Bist du wirklich im Ansichtsfenster, wenn du das Makro startest? Gibt es irgendwelche Fehlermeldungen? Setz doch zur Not mal einen Breakpoint und geht das Makro zeilenweise durch. Was ich anfangs übersehen hatte, ist dass du das Ansichtsfenster aktualisieren musst. Zitat aus dem Quelltext: Zitat: ' notice that at this point NOTHING happens in the viewport to visibly show ' any changes to the viewport. ' flipping to a different layout or turning the Mview Off and On will display the ' Xdata changes to the viewport. ' See sub ViewPortUpdate for how to update the Viewport.
.. aber ViewPortUpdate() wird im Makro ja normalerweise auch aufgerufen... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PBPaul Mitglied Konstrukteur

 Beiträge: 48 Registriert: 28.09.2004 ACAD 2009, Vista 64
|
erstellt am: 19. Okt. 2006 19:11 <-- editieren / zitieren --> Unities abgeben:          Nur für _stphn_
Hallo, das "Frieren-Makro" habe ich nicht getestet, das funktioniert, wie gesagt, mit den Express-Tools "layiso" ohne Probleme. Nur das tauen aller Layer explizit für das gewählte Fenster im Layout wäre schön. MfG Paul Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PBPaul Mitglied Konstrukteur

 Beiträge: 48 Registriert: 28.09.2004 ACAD 2009, Vista 64
|
erstellt am: 19. Okt. 2006 21:03 <-- editieren / zitieren --> Unities abgeben:          Nur für _stphn_
Hallo, inzwischen habe ich ein wenig ein wenig probiert und den CODE so umgestrickt, das die Layer nacheinander getaut werden, so lange ich auf den Fensterrahmen klicke. Hat jemand eine Idee das zu verbessern. Aber Vorsicht wenn VPort.Delete aus der äußeren For-Next-Schleife genommen wird, werden so viel übereinander liegende Ansichtsfenter wie Layer erzeugt. Sub VpLayerTauen() Dim strLayer As String Dim XdataType As Variant Dim XdataValue As Variant Dim newXdataType As Variant Dim newXdataValue As Variant Dim I As Integer Dim Counter As Integer Dim PT1 As Variant Dim varCenter As Variant Dim dblWidth As Double Dim dblHeight As Double Dim objViewPortNew As AcadPViewport Dim LayerListe As AcadLayers Dim LayerObj As AcadLayer Dim objPViewport As AcadPViewport Dim strPrompt As String Set LayerListe = ThisDrawing.Layers If LayerListe.Count = 0 Then Exit Sub If ThisDrawing.ActiveSpace = acModelSpace Then MsgBox "Bitte in den Papierbereich wechseln und nochmal versuchen", vbCritical Exit Sub End If ThisDrawing.MSpace = False For Each LayerObj In LayerListe strLayer = LayerObj.Name ThisDrawing.Utility.GetEntity objPViewport, PT1, "Select ViewPort:" objPViewport.GetXData "ACAD", XdataType, XdataValue For I = LBound(XdataType) To UBound(XdataType) If XdataType(I) = 1003 Then Counter = I + 1 If UCase(XdataValue(I)) = UCase(strLayer) Then Exit For End If Next If Counter = 0 Then Exit Sub dblWidth = objPViewport.Width dblHeight = objPViewport.Height varCenter = objPViewport.Center newXdataType = XdataType newXdataValue = XdataValue For I = Counter To UBound(XdataType) ReDim Preserve newXdataType(I - 1) ReDim Preserve newXdataValue(I - 1) newXdataType(I - 1) = XdataType(I) newXdataValue(I - 1) = XdataValue(I) Next Set objViewPortNew = ThisDrawing.PaperSpace.AddPViewport(varCenter, dblWidth, dblHeight) objViewPortNew.SetXData newXdataType, newXdataValue objViewPortNew.Layer = objPViewport.Layer ThisDrawing.MSpace = False objViewPortNew.Display (False) objViewPortNew.Display (True) ThisDrawing.Utility.Prompt ("Done!" & vbCr) objPViewport.Delete Next End Sub MfG Paul Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer

 Beiträge: 9807 Registriert: 01.12.2003 AutoCAD 2.5 - 2022, LDD, MDT, RD, ADT, Civil Inventor AIP 4-11, 2008 -2022 Win 10
|
erstellt am: 19. Okt. 2006 22:47 <-- editieren / zitieren --> Unities abgeben:          Nur für _stphn_
Würde nicht vielleicht ein Code:
Sub AFLayerTauen() ThisDrawing.SendCommand ("_VPLAYER" & vbCr & "_Thaw" & vbCr & "*" _ & vbCr & "_Current" & vbCr & vbCr) End Sub
reichen ?
------------------ Mit freundlichem Gruß Udo Hübner Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PBPaul Mitglied Konstrukteur

 Beiträge: 48 Registriert: 28.09.2004 ACAD 2009, Vista 64
|
erstellt am: 20. Okt. 2006 10:22 <-- editieren / zitieren --> Unities abgeben:          Nur für _stphn_
|