| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY wird von NVIDIA zum Händler des Jahres gewählt - zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Ansichtsfenster per VBA zuschneiden (1516 mal gelesen)
|
idraH Mitglied

 Beiträge: 64 Registriert: 22.04.2002 ACAD 2006 Win XP
|
erstellt am: 15. Dez. 2009 12:28 <-- editieren / zitieren --> Unities abgeben:         
Hallo allerseits, ich bräuchte mal Hilfe für o.g. Aufgabenstellung. Zur Zeit lege ich automatisch neue Layouts an und in jedem Layout ein Ansichtsfenster mit folgendem Code: Code: Set newVport = ThisDrawing.PaperSpace. _ AddPViewport(center, Laenge, Hoehe)
Da damit ja nur ein rechteckiges AF erzeugt wird, würde ich im Anschluß dieses AF gern polygonal zuschneiden um ein Schritfeld freizusetllen. Leider habe ich bis jetzt keine Methode in "newVport" gefunden welche dafür nutzbar scheint und hoffe auf Eure Unterstützung viele Grüße, Hartmut Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 15. Dez. 2009 13:59 <-- editieren / zitieren -->
Hi, Methode (bzw. ein abgeleitetes Interface zu AcadPViewport mit Funktionen dafür) hätte ich auch nicht gefunden. Es wird voraussichtlich darauf hinauslaufen müssen, dies mit SendCommand "_mview" & vbCr & "_o" & vbCr abzuhandeln und eine zuvor erzeugte Polylinie bzw. Region dann zu wählen. Arbeitest Du ev. mit dotNET ==> da schon. Ob's mit Lisp ginge, kann ich Dir leider nicht sagen (würde aber mal nicht ausschliessen, auch da zu suchen). Sorry, - alfred - ------------------ www.hollaus.at |
idraH Mitglied

 Beiträge: 64 Registriert: 22.04.2002 ACAD 2006 Win XP
|
erstellt am: 15. Dez. 2009 14:11 <-- editieren / zitieren --> Unities abgeben:         
danke erstmal für die (wenn auch ernüchternde) Antwort. da ich Position und Maße des SF und des AF kenne, würde ich gern auf eine manuelle Aktion (wählen der Polylinie) verzichten. Könnte ich an "SendCommand" eine zuvor erzeugte Polylinie übergeben, so dass keine Nutzeraktion nötig wird? Programmierung läuft rein in VBA und Lisp hab ich mich leider bis jetzt immer vor gedrückt. Könnte ev. noch irgendwas über XDATA laufen? (Friere darüber einige Layer im AF)? viele Grüße, Hartmut Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 15. Dez. 2009 14:14 <-- editieren / zitieren -->
Hi, >> Könnte ich an "SendCommand" eine zuvor erzeugte Polylinie übergeben Ja, den Handle der Polylinie solltest Du ja kennen, wenn/weil Du diese erzeugt hast, dann bei Sendcommand mitgeben: (handent "HANDLE") wobei Du statt HANDLE den Handle der Poly (Hex-Wert) einsetzt. - alfred - ------------------ www.hollaus.at |
idraH Mitglied

 Beiträge: 64 Registriert: 22.04.2002 ACAD 2006 Win XP
|
erstellt am: 15. Dez. 2009 14:50 <-- editieren / zitieren --> Unities abgeben:         
So, hab jetzt noch ein wenig gegoogelt und folgenden Code gefunden + modifiziert so das er hoffentlich macht was ich möchte. Trotzdem schade dass es über reines VBA scheinbar nicht möglich sein soll. Danke Alfred für deinen entscheidende Hilfe. Code: Dim acVp As AcadViewport Dim acPline As AcadLWPolyline Dim sHandle As String Dim acEnt As AcadEntity Dim vPt As Variant ''''''''''''''''''''''''''''''''''''''' On Error GoTo Err_Control ThisDrawing.SetVariable "CMDECHO", 0 'ThisDrawing.Utility.GetEntity acEnt, vPt, "Select polyline to outline viewport" 'If TypeOf acEnt Is AcadLWPolyline Then ' Set acPline = acEnt 'End If Dim PLpoints(0 To 13) As Double PLpoints(0) = 5: PLpoints(1) = 5 PLpoints(2) = 262: PLpoints(3) = 5 PLpoints(4) = 262: PLpoints(5) = 30 PLpoints(6) = 292: PLpoints(7) = 30 PLpoints(8) = 292: PLpoints(9) = 205 PLpoints(10) = 5: PLpoints(11) = 205 PLpoints(12) = 5: PLpoints(13) = 5 Set acPline = ThisDrawing.PaperSpace.AddLightWeightPolyline(PLpoints) acPline.Closed = True 'If acPline.Closed = False Then 'MsgBox "Polyline must be closed" 'Exit Sub 'End If sHandle = acPline.Handle ThisDrawing.SendCommand "._MVIEW" & vbCr & "_OB" & " (handent " & Chr(34) & _ sHandle & Chr(34) & ")" & vbCr Exit_Here: ThisDrawing.SetVariable "CMDECHO", 1 Exit Sub Err_Control: MsgBox Err.Number & " --> " & Err.HelpContext Resume Exit_Here
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 15. Dez. 2009 15:24 <-- editieren / zitieren -->
Hi, danke für die Rückmeldung! Eine kleine Rückmeldung zu Deinem Code lass mich noch anbringen: >> PLpoints(12) = 5: PLpoints(13) = 5 Die Dimensionierung der Punkte kann bei 11 enden, denn der Punkt 5,5,0 muss am Ende nicht mehr erzeugt werden, da Du mit .Close die Polylinie danach schliesst. Der Punkt 5,5,0 wäre dann im Polylinienverlauf doppelt vorhanden und eigentlich nicht schön. - alfred - ------------------ www.hollaus.at |

| |
idraH Mitglied

 Beiträge: 64 Registriert: 22.04.2002 ACAD 2006 Win XP
|
erstellt am: 15. Dez. 2009 15:48 <-- editieren / zitieren --> Unities abgeben:         
Danke Alfred, für den Hinweis. hatte schon vermutet, dass bei .close, Punkt 12/13 entfallen könnte (kann man ja beim Zeichnen auch so machen - wenn man beim vorletzten Punkt mit S(chliessen) beendet ist die PL geschlossen (PL-Eigenschaft "Geschlossen"="JA"). Dass es nebenbei aber den von Dir beschriebenen Nebeneffekt geben würde hatte ich allerdings nicht bedacht/vermutet (Beim PL zeichnen ist die Eigenschaft "Geschlossen" der PL ja nicht zwangsläufig "JA" wenn man den letzen Punkt auf den Startpunkt setzt.) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |