Manuel Roth Geschrieben 19. Juni 2019 Teilen Geschrieben 19. Juni 2019 Hallo zusammen Ich möchte gerne einen einfachen Dialog ohne Ausrufezeichen oder sonst so etwas darstellen. Ist das möglich? Am schönsten wäre es natürlich, wenn oben im Dialg ein benutzerdefinierter Titel gesetzt werden könnte. Dies ist allerdings nicht zwingen. Nur ein Nice-to-have. Das der Dialog auf Knopfdruck erscheint, bringe ich hin. Freundliche Grüsse Manuel Roth _________________________________________________ Vectorworks 2022 SP3 | Architektur | Windows 10 Link zu diesem Kommentar
Manuel Roth Geschrieben 19. Juni 2019 Autor Teilen Geschrieben 19. Juni 2019 Und dann funktioiert es trotzdem nicht. Der Dialog erscheint zwar bei einem Klick auf den Button. Allerdings bricht das Script ab, sobald ich es ausführe wenn ein Dialog-Node im Netzwerk verbaut ist. Wie rufe ich def scripf(self) korrekt auf? Nur die Zeile pass durch script zu ersetzen funktioiert trotzdem nicht so wie gewollt. Freundliche Grüsse Manuel Roth _________________________________________________ Vectorworks 2022 SP3 | Architektur | Windows 10 Link zu diesem Kommentar
Nicolas Goutte Geschrieben 19. Juni 2019 Teilen Geschrieben 19. Juni 2019 Geht folgendes? self.script(parameter1, parameter2) 1 Software-Entwickler extragroup GmbH https://www.extragroup.de Link zu diesem Kommentar
Manuel Roth Geschrieben 19. Juni 2019 Autor Teilen Geschrieben 19. Juni 2019 Ich denke der Ansatz ist der richtige. Denn wenn anstelle der Parameter 1 und 2 einfach self hineingegeben wird kommt keine Fehlermeldung mehr. Allerdings erscheint das Dialogfeld jedesmal, wenn das Netzwerk ausgeführt wird und nicht nur beim drücken des Buttons. Zitat This is where you define your custom script for when the button is pressed Klar könnte der Dialog im Normalfall mit einem vorhergehenden Valve-Node geblockt werden. Aber in meinem Fall möchte ich eine Beschreibung des PIOs anzeigen, wenn der Button gedrückt wird. Wenn nun das PIO geändert wird, erscheint jedes mal der Dialog. Nicht nur, wenn der Buton geklickt wird. Hast du eventuell noch eine Idee, wie das geblockt werden könnte? Freundliche Grüsse Manuel Roth _________________________________________________ Vectorworks 2022 SP3 | Architektur | Windows 10 Link zu diesem Kommentar
Nicolas Goutte Geschrieben 19. Juni 2019 Teilen Geschrieben 19. Juni 2019 Sorry, Python-Fragen kann ich antworten, aber mit Marionette kenne ich mich überhaupt nicht aus. Software-Entwickler extragroup GmbH https://www.extragroup.de Link zu diesem Kommentar
Antonio Landsberger Geschrieben 19. Juni 2019 Teilen Geschrieben 19. Juni 2019 (bearbeitet) Hallo Manuel, mir ist nach dem Lesen deiner Beiträge leider noch nicht ganz klar, was du machen möchtest. Kannst du die Datei hier hochladen oder mir per Nachricht schicken? Vielleicht hilft dir ein Blick auf die "Get Symbol from Folder" Node weiter, die einen Knopf in der Informationenpalette benutzt. Wichtig ist in diesem Fall, dass im Bereich "def script(self):" die Zeile "self.Params.out.blocked = True" steht, wobei "out" der Ausgang der Node darstellt. Bearbeitet 19. Juni 2019 von Antonio Landsberger 1 Gruß Antonio Landsberger ComputerWorks GmbH http://www.computerworks.de Link zu diesem Kommentar
Dominique Corpataux Geschrieben 20. Juni 2019 Teilen Geschrieben 20. Juni 2019 Der Inhalt eines Nodes das ich benutze um Dateien auszuwählen. Es tut vom Prinzip her etwas ähnliches, was Du haben willst: 1. Wird der Button "Pick File" gedrückt, dann kann man eine Datei auswählen. Das Script wird aber nicht weiter ausgeführt (blocked = True). Es wird aber der Pfad in ein Feld geschrieben. 2. Wenn man dann das Script ausführt (ohne Button) wird der Pfad aus dem Feld gelesen. Im Prinzip könnte man die Zeile mit vs.GetFile... auswechseln Durch ein Dialogfenster, in welchem man einen Wert einstellt, welcher dann in das Feld geschrieben wird und dann später wenn man das Script normal ausführt von dort gelesen wird. Das selbe Prinzip wie das Beispiel von Antonio. #DomC 2019 @Marionette.NodeDefinition class Params(metaclass = Marionette.OrderedClass): By = 'DomC';import datetime; now = datetime.datetime.now(); y80f5 = now.year;m80f5 = now.month; d80f5 = now.day; h180f5 = now.hour; mi180f5 = now.minute; s180f5 = now.second; ms180f5 = now.microsecond; h2 = now.hour-12 if now.hour >=13 else now.hour; VersionChange1 = str(y80f5)+' '+str(m80f5)+' '+str(d80f5); VersionChange2 = str(y80f5)+'-'+str(m80f5)+'-'+str(d80f5)+'-'+str(h2)+'-'+str(mi180f5); TextStatic = Marionette.OIPControl( By +' v'+VersionChange2, Marionette.WidgetType.TextStatic, "") #APPEARANCE #Name this = Marionette.Node( 'Pick File' ) this.SetDescription( 'Returns a File Path' ) #Input Ports #OIP Controls path = Marionette.OIPControl( 'FilePath', Marionette.WidgetType.Text, '') path.SetDescription('Write Path or click the Button below') Int = Marionette.OIPControl( 'Pick File', Marionette.WidgetType.Button, 'script', 'description') Int.SetDescription('Shows Criteria dialog') #Output Ports s_path = Marionette.PortOut('h') s_path.SetDescription('Return the path string for further operations') #BEHAVIOR def RunNode(self): #inputs path = self.Params.path.value #script #out self.Params.s_path.value = path def script(self): import os dir = os.path.dirname(vs.GetFPathName()) bool, path = (vs.GetFileN('Select File', dir, '')) self.Params.path.SetValue(path) #if bool: # self.Params.s_path.value = path #else: self.Params.s_path.blocked = True 1 Macbook m3 Max 48 GB | Ryzen 3950x 64GB NVIDIA rtx3090 Link zu diesem Kommentar
Manuel Roth Geschrieben 20. Juni 2019 Autor Teilen Geschrieben 20. Juni 2019 Vielen Dank für die Hilfe. Der Button funktioiert nun so, wie er sollte. Nun kommt noch das Layout des Dialogfensters. Ist es möglich, das i bei einem Alert (Inform) Dialog zu entfernen? Freundliche Grüsse Manuel Roth _________________________________________________ Vectorworks 2022 SP3 | Architektur | Windows 10 Link zu diesem Kommentar
Nicolas Goutte Geschrieben 21. Juni 2019 Teilen Geschrieben 21. Juni 2019 vor 20 Stunden schrieb Manuel Roth: Nun kommt noch das Layout des Dialogfensters. Ist es möglich, das i bei einem Alert (Inform) Dialog zu entfernen? Diese Alert-Dialogen sind Standard-Dialogen, da kann man den Layout nicht ändern. Software-Entwickler extragroup GmbH https://www.extragroup.de Link zu diesem Kommentar
Manuel Roth Geschrieben 24. Juni 2019 Autor Teilen Geschrieben 24. Juni 2019 Das denke ich mir. Aufgrund der grossen Anzahl von Dialog Befehlen im DevelopperWiki (und den verschieden aussehenden Dialogfenstern im VW) denke ich mir aber auch, dass es möglich ist, eigene Dialoge zu basteln. Ich komme einfach nicht dahinter wie. So wie ich es verstehe wird im Beispiel von @Dominique Corpataux auch gar kein benutzerdefinierter Dialog gezeigt, sondern "nur" mit GetFileN der Auswahldialog für Dateien angezeigt. Beim Beispiel von @Antonio Landsberger habe ich noch keine Chance es zu verstehen. Ich denke aber, dass dieses Beispiel sehr interessant wäre. Freundliche Grüsse Manuel Roth _________________________________________________ Vectorworks 2022 SP3 | Architektur | Windows 10 Link zu diesem Kommentar
Nicolas Goutte Geschrieben 24. Juni 2019 Teilen Geschrieben 24. Juni 2019 vor 1 Stunde schrieb Manuel Roth: Aufgrund der grossen Anzahl von Dialog Befehlen im DevelopperWiki (und den verschieden aussehenden Dialogfenstern im VW) denke ich mir aber auch, dass es möglich ist, eigene Dialoge zu basteln. Ich komme einfach nicht dahinter wie. Es gibt eine Seite, die versucht zu erklären, wie man die benutzerdefinierten Dialogrn in VS nutzt: http://developer.vectorworks.net/index.php/VS:Creating_a_Custom_Dialog_Box 1 Software-Entwickler extragroup GmbH https://www.extragroup.de Link zu diesem Kommentar
Manuel Roth Geschrieben 24. Juni 2019 Autor Teilen Geschrieben 24. Juni 2019 Hallo zusammen Dank euch habe ich nun einen Node, welcher einfache Dialoge anzeigt. Danke. Einfacher Dialog.vwx Doch kaum steht der Node kommt die nächste Frage. Ist es möglich, nur den Button ausserhalb des PIOs anzuzeigen und die Beschriftungsfelder nicht? Wäre manchmal auch bei anderen Nodes praktisch. Und wenn wir schon beim Thema sind. Ist es möglich eine Variable von einem Wrapper auserhalb eines PIOs (oder zweiten Warppers) darzustellen? Freundliche Grüsse Manuel Roth _________________________________________________ Vectorworks 2022 SP3 | Architektur | Windows 10 Link zu diesem Kommentar
Manuel Roth Geschrieben 2. Juli 2019 Autor Teilen Geschrieben 2. Juli 2019 Hallo zusammen Ich habe eine weitere Frage zu einem Dialog. Dieses Mal soll er eine CheckBox anzeigen und den Wert dieser CheckBox ausgeben. Die Anzeige in einem Dialog funktioiert. Allerdings bringe ich es nicht hin, dass das sie auch etwas anderes als True ausgibt. Kann mir da jemand helfen? Boolean Dialog.vwx Freundliche Grüsse Manuel Roth _________________________________________________ Vectorworks 2022 SP3 | Architektur | Windows 10 Link zu diesem Kommentar
Antonio Landsberger Geschrieben 3. Juli 2019 Teilen Geschrieben 3. Juli 2019 Das Skript für den Dialogaufbau und die Abfrage war nicht ganz komplett. Angehängt ist eine funktionierende Version. Boolean-Dialog_ALa-190703.vwx 1 1 Gruß Antonio Landsberger ComputerWorks GmbH http://www.computerworks.de Link zu diesem Kommentar
Manuel Roth Geschrieben 3. Juli 2019 Autor Teilen Geschrieben 3. Juli 2019 Vielen, vielen Dank Freundliche Grüsse Manuel Roth _________________________________________________ Vectorworks 2022 SP3 | Architektur | Windows 10 Link zu diesem Kommentar
Manuel Roth Geschrieben 8. Juli 2019 Autor Teilen Geschrieben 8. Juli 2019 Hallo zusammen Ist es möglich, ein Dialog, welcher fest in VW verbaut ist, anzuzeigen? In meinem Fall, möchte ich das Dialogfeld unter Text>Textformatierung anzeigen. Ich dachte (in diesem Spezialfall), könnte vs.FormatTextDialog() dieses Dialogfeld anzeigen, allerdings passiert bei mir nicht. Und weil das noch nicht genug ist, noch eine zweite Frage. Wie ist es möglich, GroupBoxes eine feste Breite zuzuweisen? Als Beispiel könnte wieder der Dialog oben hinhalten. Dort haben die Gruppen rechts eine grössere Breite, als das breiteste Inhaltselement. Wie ist das möglich? Hängt das mit dem ResizableLayout zusammen? Freundliche Grüsse Manuel Roth _________________________________________________ Vectorworks 2022 SP3 | Architektur | Windows 10 Link zu diesem Kommentar
Antonio Landsberger Geschrieben 11. Juli 2019 Teilen Geschrieben 11. Juli 2019 (bearbeitet) Hallo Manuel, dein Gedanke war schon richtig und du hast es wahrscheinlich auch richtig eingesetzt. Meine Versuche, diesen Dialog in einer Marionette Node zum Laufen zu bringen waren auch nicht erfolgreich. Als VectorScript funktioniert es - laut einem der Entwickler. Ich werde dich auf dem Laufenden halten. Bearbeitet 11. Juli 2019 von Antonio Landsberger 1 Gruß Antonio Landsberger ComputerWorks GmbH http://www.computerworks.de Link zu diesem Kommentar
Antonio Landsberger Geschrieben 12. Juli 2019 Teilen Geschrieben 12. Juli 2019 @Manuel Roth Es war kein Fehler mit dem Befehl. Im Wiki war das Beispiel nicht komplett. Der Befehl muss in Marionette folgendermaßen geschrieben werden: vs.FormatTextDialog(font, style, size, spacing, leading, hAlign, vAlign, disable) Angehängt ist eine funktionierende Datei. FormatTextDialog-ALandsberger.vwx 1 Gruß Antonio Landsberger ComputerWorks GmbH http://www.computerworks.de Link zu diesem Kommentar
Manuel Roth Geschrieben 12. Juli 2019 Autor Teilen Geschrieben 12. Juli 2019 Vielen Dank, ohne dich wäre ich nun wohl für eine Zeit lang am Textformatierungsdialoge programmieren. Das grössere Fragezeichen ist geklärt. Nun wäre noch der zweite Teil der Frage. Ist das möglich, oder übersehe ich etwas? Am 8.7.2019 um 09:45 schrieb Manuel Roth: Wie ist es möglich, GroupBoxes eine feste Breite zuzuweisen? Als Beispiel könnte wieder der Dialog oben hinhalten. Dort haben die Gruppen rechts eine grössere Breite, als das breiteste Inhaltselement. Wie ist das möglich? Hängt das mit dem ResizableLayout zusammen? PS: Scheint auch in einem nicht ResizableLayout zu funktionieren. Siehe Extras>Aufräumen... Freundliche Grüsse Manuel Roth _________________________________________________ Vectorworks 2022 SP3 | Architektur | Windows 10 Link zu diesem Kommentar
Manuel Roth Geschrieben 12. Juli 2019 Autor Teilen Geschrieben 12. Juli 2019 Kleines PS zur dieser Funktion. Man kann sie kaputtprobieren (zumindest, wenn ein Button in einem Dialogfeld sie aufrufen soll) Ein Neustart von VW hilft dagegen. Freundliche Grüsse Manuel Roth _________________________________________________ Vectorworks 2022 SP3 | Architektur | Windows 10 Link zu diesem Kommentar
Chritian W. Geschrieben 7. Juli 2021 Teilen Geschrieben 7. Juli 2021 Hallo, ich versuche derzeit auch eine Checkbox in den Multidialog (unter Titel 2) einzubauen. aber alle versuche es richtig zu integrieren scheitern. derzeit gibt er nur "ja" aus egal ob das kreuz gesetzt ist oder nicht. und die anderen Boolian-dialoge hier auf der Seite helfen mir auch nicht wirklich weiter, da diese bei mir nichts ausgeben. Vielleicht hat je jemand eine Idee wie ich den Code anpassen kann. #CW 2 @Marionette.NodeDefinition class Params(metaclass = Marionette.OrderedClass): #APPEARANCE #Name this = Marionette.Node( "Custom Pulldown" ) this.SetDescription( 'A Dialog with 3 Popups') #Input Ports sDialog = Marionette.PortIn('Dialog Name') sTitle1 = Marionette.PortIn('Title 1:') sTitle2 = Marionette.PortIn('Title 2:') sTitle3 = Marionette.PortIn('Title 3:') sTitle4 = Marionette.PortIn('Title 4:') lPopup4 = Marionette.PortIn([],'choice4') iWidth = Marionette.PortIn(40) #OIP Controls text = Marionette.OIPControl( 'Text', Marionette.WidgetType.Text, '') text.SetDescription( 'Dialog user prompt string' ) #Output Ports sPopup1 = Marionette.PortOut() sPopup2 = Marionette.PortOut() sPopup3 = Marionette.PortOut() sPopup4 = Marionette.PortOut() sPopup1.SetDescription( 'The Result of the Popups' ) #BEHAVIOR this.SetListAbsorb() def RunNode(self): #inputs DialogName = self.Params.sDialog.value[0] title1 = self.Params.sTitle1.value[0] title2 = self.Params.sTitle2.value[0] title3 = self.Params.sTitle3.value[0] title4 = self.Params.sTitle4.value[0] pop4 = self.Params.lPopup4.value width = self.Params.iWidth.value[0] numPopups = 4 EnterDialog = 12255 #script def Dialog_Handler(item, data): self.v1 = vs.GetItemText( self.dialog, 11 ) self.v2 = vs.GetItemText( self.dialog, 12 ) self.v3 = vs.GetItemText( self.dialog, 13 ) self.v4 = vs.GetItemText( self.dialog, 14 ) if item == EnterDialog: for i in range(len(pop4)): vs.AddChoice( self.dialog, 14, pop4, i+1 ) def CreateMyDialog(): self.dialog = vs.CreateLayout( DialogName, 0, 'OK', 'Abbrechen' ) dialog = self.dialog vs.CreateStaticText(dialog, 1, title1, width) vs.CreateStaticText(dialog, 2, title2, width) vs.CreateStaticText(dialog, 3, title3, width) vs.CreateStaticText(dialog, 4, title4, width) vs.CreateEditText( dialog, 11,'',width) vs.CreateCheckBox( dialog, 12,'ja') vs.CreateEditReal( dialog, 13,1,8, width,125,20) vs.CreatePullDownMenu( dialog, 14, width) vs.SetFirstLayoutItem( dialog, 1 ) vs.SetBelowItem( dialog, 1, 11, 0, 0 ) vs.SetBelowItem( dialog, 11, 2, 0, 0 ) vs.SetBelowItem( dialog, 2, 12, 0, 0 ) vs.SetBelowItem( dialog, 12, 3, 0, 0 ) vs.SetBelowItem( dialog, 3, 13, 0, 0 ) vs.SetBelowItem( dialog, 13, 4, 0, 0 ) vs.SetBelowItem( dialog, 4, 14, 0, 0 ) vs.RunLayoutDialog(dialog, Dialog_Handler ) CreateMyDialog() #outputs self.Params.sPopup1.value = self.v1 self.Params.sPopup2.value = self.v2 self.Params.sPopup3.value = self.v3 self.Params.sPopup4.value = self.v4 Multidialog mit checkbox.vwx Link zu diesem Kommentar
Manuel Roth Geschrieben 8. Juli 2021 Autor Teilen Geschrieben 8. Juli 2021 Hallo Am 7.7.2021 um 08:16 schrieb Chritian W.: self.v4 = vs.GetItemText( self.dialog, 14 ) Das Problem ist diese Zeile hier. Wenn du stattdessen GetBooleanItem verwendest, sollte es funktionieren. Vielleicht einmal ein paar grundsätzliche Worte zu Dialogen. Das Zeug ist furchtbar komplex, ich habe nicht die Wahrheit gepachtet und schildere hier nur so wie ich sie verstehe. Du rufst ziemlich unten in deinem Code die Funktion CreateMyDialog() auf. Darin wird der Dialog erstellt und mit Elementen gefüllt. Dies funktioniert indem du zuerst ein Dialoglayout kreierst, dieses anschliessend mit Elementen füllst, welche zum Schluss noch entsprechend angeordnet werden. Ich persönlich verwende jeweils gerne anstelle der relativ nichtssagenden und schwierig zu lesenden Parameter 11 usw. eine Variable. Zum Beispiel text_name = 11 vs.CreateEditText( dialog, text_name,'',width) vs.SetFirstLayoutItem( dialog, text_name ) Je nachdem wo du Zeile 1 schreibst, kannst du diese Variable auch im Handler verwenden. Mit vs.RunLayoutDialog() wird der Dialog anschliessen auf dem Bildschrim angezeigt. Dieser Fuktion gibst du nebst dem Parameter, welcher Dialog ausgeführt werden soll den Namen einer weiteren Python-Funktion auf den Weg. Dieser Dialoghandler wird jedes mal ausgeführt, wenn im Dialog irgendetwas passiert. Dies kann eine Eingabe sein, aber auch das Schliessen, Starten und klicken auf Ok oder Abbrechen lösen diesen Aufruf aus. Beim Aufruf dieser Funktion wird automatisch auch der Parameter Item mitgegeben. Dieser definiert, mit welchem Element gerade interagiert wird. Wenn in meinem Pseudobeispiel oben ein neuer Name eingegeben wird, gibt es einen Aufruf des Handlers mit dem Parameter Item = 11 (= text_name). Nach diesem kannst du anschliessend mit einer If-Funktion suchen und entsprechend etwas unternehmen. In deinem Beispiel ist das Item EnterDialog (=12255). Das bedeutet, dass der Codeblock unter dem if nur ausgeführt wird, wenn der Dialog gestartet wird, was ja auch Sinn ergibt, da darin das Popup mit Werten gefüllt wird. Es gibt auch einen Item-Code für das Schliessen des Dialoges, für das Klicken auf Ok und einen für Abbrechen. (Ich finde sie gerade nicht, müsstest ein wenig suchen. Meinte die Codes auch schon bei Beispielfunktionen in der Function Reference Kapitel Dialogs - Modern in Verwendung gesehn zu haben.) Ich hoffe, dass meine Erklärung nicht alzu wirr war und du etwas daraus lernen konntest. Ansonsten meldest du dich gerne wieder und ich werde schauen, was ich noch präzisieren kann. Aber wie gesagt, ist einfach eigene Erfahrung durch Trial und Error und es gibt sicher noch viel mehr dazu. (Wozu zum Teufel ist der Parameter data beim Handler??? Keine Ahnung, nie gebraucht und sollte er einmal trotzdem nützlich sein, werde ich es zu diesem Zeitpunkt herausfinden. Ausser jemand, der diesen ganzen Text gelesen hat, wüsste es per Zufall, wäre ich um eine kleine Erläuterung dankbar.) Freundliche Grüsse Manuel Roth _________________________________________________ Vectorworks 2022 SP3 | Architektur | Windows 10 Link zu diesem Kommentar
Chritian W. Geschrieben 8. Juli 2021 Teilen Geschrieben 8. Juli 2021 vor 2 Stunden schrieb Manuel Roth: Das Problem ist diese Zeile hier. Wenn du stattdessen GetBooleanItem verwendest, sollte es funktionieren. Hallo Manuel, vielen Dank für deine Ausführungen, an der gleichen Zeile hatte ich es mit Vs.getBooleanItem schon mal probiert, aber auch jetzt bekomme ich es nicht hin. Vielleicht würde es mir helfen, wenn ich den Zusammenhang mit dialogID LONGINT der dialogionliche Bezeichner von CreateLayout oder CreateResizableLayout Componentid LONGINT Die Kennung für die Optionskomponente des Radios oder des Kontrollkästchens Verstehen würde. Und wie VS CreateCheckbox und VS BooleanItem zusammenpassen und für was bei einigen zwischen VectorScript und Python unterschieden wird und bei anderen wieder nicht. Das sorgt dafür, dass ich an vielen Stellen einfach nur herumprobiere, bis ich zum gewünschten Ergebnis komme. Was eigentlich meinen Grundprinzipien wiederspricht.. Mein Ziel wäre in diesem Fall einen Dialogpopup zu kreieren, welchen ich individuell zusammenstellen kann, damit bei vielen unterschiedlichen Abfragen es eben nur einen Popup beim Menübefehl gibt. Link zu diesem Kommentar
Chritian W. Geschrieben 10. Juli 2021 Teilen Geschrieben 10. Juli 2021 (bearbeitet) Ziel erreicht, nach dem ich nun alles auf die Checkbox reduziert hatte, funktioniert es - nun auch im großen Popup. Vielleicht ein Schreibfehler drin gewesen. Eigentlich muss beim Handler nur folgende Zeile rein: self.v1 = vs.GetBooleanItem( self.dialog, 11 ) und unter create Mythen Dialog: vs.CreateCheckBox( dialog, 11,'ja') Für alle die es interessiert: hier der Code in der Kurzfassung für die Checkbox: #CW 3 @Marionette.NodeDefinition class Params(metaclass = Marionette.OrderedClass): #APPEARANCE #Name this = Marionette.Node( "Checkbox für individual Popup" ) #Input Ports sDialog = Marionette.PortIn('Dialog Name') sTitle1 = Marionette.PortIn('Title 1:') iWidth = Marionette.PortIn(40) #OIP Controls text = Marionette.OIPControl( 'Text', Marionette.WidgetType.Text, '') text.SetDescription( 'Dialog user prompt string' ) #Output Ports sPopup1 = Marionette.PortOut() sPopup1.SetDescription( 'The Result of the Popups' ) #BEHAVIOR this.SetListAbsorb() def RunNode(self): #inputs DialogName = self.Params.sDialog.value[0] title1 = self.Params.sTitle1.value[0] width = self.Params.iWidth.value[0] #script def Dialog_Handler(item, data): self.v1 = vs.GetBooleanItem( self.dialog, 11 ) def CreateMyDialog(): self.dialog = vs.CreateLayout( DialogName, 0, 'OK', 'Abbrechen' ) dialog = self.dialog vs.CreateStaticText(dialog, 1, title1, width) vs.CreateCheckBox( dialog, 11,'ja') vs.SetFirstLayoutItem( dialog, 1 ) vs.SetBelowItem( dialog, 1, 11, 0, 0 ) vs.RunLayoutDialog(dialog, Dialog_Handler ) CreateMyDialog() #outputs self.Params.sPopup1.value = self.v1 Für was das data beim Handler steht weiß ich auch nicht - ohne funktioniert es jedenfalls nicht. Bearbeitet 10. Juli 2021 von Chritian W. Link zu diesem Kommentar
Manuel Roth Geschrieben 10. Juli 2021 Autor Teilen Geschrieben 10. Juli 2021 DialogID ist eine ID, die von CreateLayout dem Dialog zugewiesen wird. Sie ist für jeden (offenen?) Dialog einmalig. Damit kann sichergestellt werden, dass du deine Objekte in den korrekten Dialog einfügst usw... Die ComponentID wird von dir beim Erstellen von jedem Element mitgegeben. vs.CreateCheckBox( dialog, 11, 'ja') Auch sie dient der eindeutigen Identifikation von einem Element, damit du es platzieren, mit Inhalten füllen usw. kannst. Bei all diesen Aktionen gibts du ja auch wider die selbe Zahl an (oder so wie ich oben beschrieben habe der Übersichtlicchkeit halber eine Variable) Auch im Handler taucht diese Zahl unter dem Parameter Item wieder auf. vs.CreateCheckbox und vs.GetBooleanItem passen zusammen, weil die Checkbox die du kreierst zwei Zustände hat. Entweder ist sie aktiviert oder nicht. True oder False. Vom demher brauchst du auch den entsprechenden Befehl zum Auslesen der Werte. Wenn du versuchst mit vs.GetItemText (der Funktion für Text) einen Boolean auszulesen, kommt nichts schlaues heraus. Das selbe gilt auch umgekehrt. Python und Vectorscript sind halt zwei unterschiedliche Programmiersprachen. VS wurde für VW entwickelt, Python ist halt universell. Grundsätzlich sind mit all den vs.blabla Befehlen alle VS-Befehle auch in Python verfügbar. Umgekehrt ist es nicht der Fall. Aber ja Dialoge sind schreklich kompliziert und oftmals bin ich auch am herumprobieren. 1 Freundliche Grüsse Manuel Roth _________________________________________________ Vectorworks 2022 SP3 | Architektur | Windows 10 Link zu diesem Kommentar
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden