Ben Garcia Posted April 15 Share Posted April 15 (edited) My wrapper node create a wall of set panels: After making it into a marionette object, it goes somewhat AWOL. Given there's nothing in the script that sets none zero Z heights this is confusing me a lot. Any suggestions on what might be causing a difference in behaviour once it's set to this mode? Edited April 15 by Ben Garcia Quote Link to comment
Ben Garcia Posted April 15 Author Share Posted April 15 (edited) What's crazy to me is adding a print to the marionette object causes the behavior to change. Congratulations to VW for creating quantum computing- where measuring the result changes it! 🫠 Edited April 15 by Ben Garcia Quote Link to comment
Marionette Maven Marissa Farrell Posted April 15 Marionette Maven Share Posted April 15 It would be helpful if you provided the file so I could look it over. Quote Link to comment
Ben Garcia Posted April 15 Author Share Posted April 15 Smart Set Panels- EXPERIMENTAL.vwx Attached. To be honest it's a poorly made marionette file. I struggled with the process of organising nodes, re-working & bug fixing, making loops & handling edge cases ect. It's turned into a mess of a file. Quote Link to comment
Marionette Maven Marissa Farrell Posted April 15 Marionette Maven Share Posted April 15 Thank you. I'm taking a look through this today; I'll try to get back with some progress later this afternoon. Quote Link to comment
Ben Garcia Posted April 15 Author Share Posted April 15 6 minutes ago, Marissa Farrell said: Thank you. I'm taking a look through this today; I'll try to get back with some progress later this afternoon. Much appreciated Marissa. If I can help someway, let me know. Quote Link to comment
Marionette Maven Marissa Farrell Posted April 15 Marionette Maven Share Posted April 15 I went through and tidied up your network/wrappers. But - I have a couple of questions before I can go much further and before it's in a shape that would benefit you enough to upload. 1) Is there a reason you aren't using Dimension (Dim) nodes? I see you use a lot of Real and Any nodes and then do some Unit Conversions within the network, I'd suggest using Dim instead of Real, and from what I can tell, your Any nodes would be much better replaced with Integer or Real nodes. If there's reasoning behind you not doing that, I'd be interested in hearing it to better understand. The Any node is kind of overkill in this situation (I generally only use it if I want to input a list without having to generate it, or sometimes a string, and rarely a function) 2) Is there a reason you're using the Get Symbol from Folder nodes? You could use String nodes there, which arguably are less convenient in some ways because you'd have to either type or copy the names of the symbols, but they're much easier to edit later on if you happen to change the name of a symbol. 3) Could you mock up maybe 3 examples of expected results? (specifically so I understand better how the Second/Third Largest panels come into play) I've been reorganizing and cleaning things up so it's easier to follow when I get it back to you. I also replaced some of your custom nodes with existing default content nodes (which makes it easier to debug later) but the ones that I noticed you edited intentionally and didn't have an equivalent for I left alone. I'll make a list of those changes when I return it to you. I also believe it's possible to condense the network more, I just want to be sure it's acting as you expect before doing so. It was also helpful to see where you made edits and caught bugs, I've made a note to fix them in content as soon as I get the green light. Quote Link to comment
Ben Garcia Posted April 16 Author Share Posted April 16 Thanks so much for this Marissa. I didn't spot the Dim nodes- sounds like they'd be much better for me to use there. I preferred the selection UI of the Get Symbol from Folder nodes- Felt much easier to avoid typos vs using string nodes and as you say if we change some symbol names later on which might happen, it's easier to edit. Attached are some mocked up examples. I've to show the edge cases I'm aware of. I'm keen to see how you tidy it up. I was thinking whilst I put it together I could probably do a better job in Python as I know that. If I had classes, type handling, loops, breaks, it'd probably be a lot cleaner to work with. It's the way it is as I was catching edge cases. I also felt keeping it somewhat open made future debugging easier. I also found an issue where when I had 2 packaged marionette nodes inside eachother and went to the lowest packaged node in debug node, it caused an error. This was either due to the error always happening, but being excepted when not debugged inside it's packaged network, or the debug mode causing some slightly different behavior which caused errors. I wasn't sure either way and the easiest fix was to just package nodes less. Example set panels.vwx I'm certain the main block that each panel works with could be much better but I found that if I made a marionette node into a symbol and then edited the node, it didn't edit all instances of the node. I get what's happening there but that wasn't intuitive to me as I was vaguely seeing nodes saved as symbols as analogous to Python functions. Quote Link to comment
Marionette Maven Marissa Farrell Posted April 16 Marionette Maven Share Posted April 16 Here's where I got to yesterday - I have a few different layers in there - one where I just tried to tidy your network to navigate it easier (Tidy) - one where I started replacing nodes with our equivalents/possibly better options (Rewrite 1) - the Rewrite Object layer was my attempt at using your framework and getting it into better shape (I ended up bailing on it) - and the file should open to Complete Rework. This layer has how I would have approached it. There are a few things missing still - I didn't do anything with the headers, maybe something else(?) - but it SEEMS to be working for the base of the shape. I wasn't sure how the headers were supposed to fit in, I can try to find time later today or tomorrow to pop those in there, too. This layer has my initial network at the bottom, then where I "clean it up" with wrappers above it, and finally above that a Marionette Object with OIP controls that contains the "clean" script. The OIP controls for width/height take dim values (so you can type 1000m or 8' or whatever you want) I kept your mapping node and add braces wrapper since they were working well enough (I may make some changes later) - but I believe everything else is from our shipped content. Instead of referencing each Symbol name, I have it filter based on substrings in the name (on that note - one of your symbols is misnamed 🙂 ) I think it's easier to maintain that way - but obviously whatever workflow is best for you makes the most sense overall. I do think that writing it in Python would be the most efficient way, but I also agree that it's easier to share and maintain with non-Python users if kept in Marionette form. 6 hours ago, Ben Garcia said: I found that if I made a marionette node into a symbol and then edited the node, it didn't edit all instances of the node. I'll get back to this later. I assume you're referring to wrappers and not nodes, but I'll cover both when I have time. Please let me know if you have any feedback/questions. Smart Set Panels- EXPERIMENTAL_MFarrell.vwx 1 Quote Link to comment
Ben Garcia Posted April 22 Author Share Posted April 22 Thank you for this Marissa. I'm going through the file you sent. Sorry it took a moment- I only work for d&b on Weds & Thursday. It's interesting to see you're completely different approach to the same problem. I wouldn't have approached this with string manipulation but I can totally see why you've done that. It's certainly ended up vastly cleaner than what I was able to come up with. If you'd like to add it (But there's no need for you to do so for me)- the logic with the headers was we'd add a header if the targeted height was at or above the height of the panel +1ft, but smaller than the next panel size. All panels are intervals of 2ft height, with the exception of 13ft. That's why the map height to indicies node is mapped the way it is. The repeat node is very interesting- I hadn't realized that existed. Filter looks like a much more sensible way of doing what you're doing vs what I did. You're right my previous comment was referring to wrappers. Specifically wrappers which are saved as a symbol. I understand what's happening but it's not what I'd expect & my gut feel is it'd be more effective to consider a wrapper in a symbol to be instanced and to be editable in an instance-able way by default. I believe currently you have to select the symbol, edit, adjust the wrapper as needed. I had expected that editing the wrapper in the model would have edited the symbol. Out of interest- if I were to implement this in the future in Python, would it be called via a tool and have it's own object type (Like a lighting instrument?). Is that possible via plug-ins? My plug-in knowledge is limited to some automatic reporting I previously created. Quote Link to comment
Pat Stanford Posted April 22 Share Posted April 22 10 minutes ago, Ben Garcia said: Out of interest- if I were to implement this in the future in Python, would it be called via a tool and have it's own object type (Like a lighting instrument?). Is that possible via plug-ins? My plug-in knowledge is limited to some automatic reporting I previously created. I will comment on this part and leave Marissa to comment on the Marionette piece. In Python (and Vectorscript), you can make four types of "things". 1. A script that can be called from a Script Palette or the Resource Manager. 2. A Plug-in Menu Command that can be added to your workspace and that will effectively allow you to ship a script with the workspace instead of having to have it in each individual VW file. 3. A Plug-in Object. This is very similar to the concept of a lighting instrument in that it is a named type of object and can have values that can be changed from the Object Info Palette (Parameters). 4. A Plug-in Tool. This allows you to run a "tool" to collect information that you need to be able to have the data necessary to generate a PIO that has the correct values. This about a truss that you could draw a line where you want the truss to run and then have that information transferred to the truss object that is then drawn. The tool only "exists" when you are using it. The object created last until you delete it. Lots of friendly and helpful people on the Vectorscript and Python forums if you want to learn about doing it that way. At at the very least, even if you decide to stick to Marionette, you might find that you have occasion to make a custom node for a specific need. That will require basic Python skills to accomplish. HTH 1 Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.