Jump to content

Stephan Moenninghoff

Member
  • Content Count

    350
  • Joined

  • Last visited

Everything posted by Stephan Moenninghoff

  1. Hi Alan, yes, that will be the next step, or, ideally, I want this to work inside the annotation space of viewports. Your example works but it converts text to polyline in the process. I understand why you need to do this. Text somehow cannot be moved in z. This was part of my problem. @Pat Stanfordthanks for mentioning the VS function. Maybe this will do what I need. I'll have to play with it.
  2. Hi Alan, Thanks for the help. I cannot download your file - the link is broken. Just to clarify: I am not having problems placing text on the screen plane or on the layer plane. The Set Planar Reference node takes care of that. What I cannot do is place text on a point on the screen plane that is a projection of a 3D point.
  3. Thanks Marissa, but unfortunately, it doesn't seem to work. (In theory, I am doing that already by feeding pCenter into the text's position). But I have tried move also. To no avail.
  4. Is there a way to obtain screen x/y co-ordinates of 3D points or loci? I want to place text objects at the centre of 3D objects but in screen plane. I can find the objects' centre and I can place a 3D Locus there, no problem. Now I want to either place a text object in 3D or on the screen plane but where the centre point of the 3D object is. Here's a fake result: I want this to run as an executable Marionette, not as an object because I'm looking for a specific object type in the current layer to be labelled. I cannot seem to find a node that will return the screen plane co-ordinates of a 3D point. Also, there seems to be no way to move a text object to a specified location in 3D space.
  5. Hi all, here is a little preview of some new functionality that we want to integrate into interiorcad 2018. With more and more VWX users now developing their own Marionettes, we thought it would be nice to integrate Marionette objects into interiorcad cabinets. This is merely a working prototype but we hope to get this ready for the next major version upgrade. Stay tuned and for those interiorcad users out there: now is the time to craft your own Marionettes :-) Enjoy --Stephan Marionette_interiorcad.mp4
  6. Version 2.2

    391 downloads

    Features: Places books from a designated symbol folder in a box ("shelf") Eliminates books that are too tall or wide for the box Allows to randomize the sequence of placement within each book collection Option to repeat the list to fill long shelves Six different types of random angles or all straight Offset from shelf edge (Random Max/Min) Allows for any number of stacks in-between standing books Number of books per stack (Random Max/Min) Offset and angles for stacked books (Random Max/Min) Option to have only stacks, no upright books Known Issues: The gap between angled books and stacks is not correct. I won't fix it ūüôā IMPORTANT *** Configure your books using the Marionette instance provided in the document. Then, make a copy. Ungroup that copy to lock its values. Start over. This will speed up your workflow considerably and you won't have to wait for each Marionette instance to recompile ***
  7. Hi @Nico VindevogelI'll post a new project when I have it ready, still working on it. In the mean time, do this: Just hook the separator up anywhere in the network, I don't think its position matters. I have wired it to a node near the end though so it does not get lost in the network. Combined with the right sorting (see above) you should pretty much get the result I had. HTH.
  8. Thanks everyone for the comments and custom nodes. @Patrick WinklerI hadn't even noticed that the order of indices got shuffled. As a matter of fact, it does not even matter for this project. I'll still install your custom node in case I need it for a future project. @sbarrettI'm installing yours as well. It's always good to have a few options to choose from. Thanks again to all!
  9. Is it correct that the if node fills up the false output with the last index to match the list length of the true output? Should I have to run the "Delete Dups" node (thanks @DomC! ) after each if node to prevent this from happening?
  10. Yes, that's what I'm doing now. It works well enough for what I'm trying to do. Thanks for confirming though!
  11. Could the slider be modified to accept its min, max and default values from input ports? Let's assume I wanted to set the amount of an element in a list by slider. In that case I would need to get the list length for its maximum and default values. If anyone can help me I would be most grateful. I promise to learn Python one day. All this Marionette wiring is keeping me off it, I guess :-).
  12. Wow, that's a fast response. Works like a charm now. Thank you!
  13. I had assumed that the "Split List" node will split a list at a given index. I have used this node before with simple lists and it worked as advertised. Now I'm trying to split a zipped list and I'm finding that the split is not carried out at the specified index. It seems the list is split at the previous, unzipped index. This is the list to split (at index 15): Number of Items: 30 [0] = [(525.1999999999999, 0, 187), [182.71333333333334, 73]] [1] = [(0, 0, 0), [174.82333333333332, 97]] [2] = [(707.9133333333333, 0, 151), [151.42333333333332, 69]] [3] = [(525.1999999999999, 0, 0), [182.71333333333334, 107]] [4] = [(347.33666666666664, 0, 272), [177.86333333333332, 105]] [5] = [(0, 0, 97), [174.82333333333332, 82]] [6] = [(174.82333333333332, 0, 133), [172.51333333333332, 56]] [7] = [(707.9133333333333, 0, 88), [151.42333333333332, 63]] [8] = [(707.9133333333333, 0, 220), [151.42333333333332, 105]] [9] = [(174.82333333333332, 0, 242), [172.51333333333332, 82]] [10] = [(0, 0, 179), [174.82333333333332, 105]] [11] = [(859.3366666666666, 0, 204), [140.66333333333333, 69]] [12] = [(859.3366666666666, 0, 0), [140.66333333333333, 103]] [13] = [(525.1999999999999, 0, 107), [182.71333333333334, 80]] [14] = [(174.82333333333332, 0, 67), [172.51333333333332, 66]] [15] = [(707.9133333333333, 0, 325), [151.42333333333332, 67]] [16] = [(347.33666666666664, 0, 76), [177.86333333333332, 70]] [17] = [(859.3366666666666, 0, 103), [140.66333333333333, 101]] [18] = [(347.33666666666664, 0, 0), [177.86333333333332, 76]] [19] = [(0, 0, 284), [174.82333333333332, 80]] [20] = [(525.1999999999999, 0, 330), [182.71333333333334, 80]] [21] = [(707.9133333333333, 0, 0), [151.42333333333332, 88]] [22] = [(525.1999999999999, 0, 260), [182.71333333333334, 70]] [23] = [(859.3366666666666, 0, 273), [140.66333333333333, 52]] [24] = [(859.3366666666666, 0, 325), [140.66333333333333, 91]] [25] = [(347.33666666666664, 0, 146), [177.86333333333332, 72]] [26] = [(174.82333333333332, 0, 0), [172.51333333333332, 67]] [27] = [(347.33666666666664, 0, 218), [177.86333333333332, 54]] [28] = [(0, 0, 364), [174.82333333333332, 97]] [29] = [(174.82333333333332, 0, 189), [172.51333333333332, 53]] This is the first list: Number of Items: 60 [0] = (525.1999999999999, 0, 187) [1] = [182.71333333333334, 73] [2] = (0, 0, 0) [3] = [174.82333333333332, 97] [4] = (707.9133333333333, 0, 151) [5] = [151.42333333333332, 69] [6] = (525.1999999999999, 0, 0) [7] = [182.71333333333334, 107] [8] = (347.33666666666664, 0, 272) [9] = [177.86333333333332, 105] [10] = (0, 0, 97) [11] = [174.82333333333332, 82] [12] = (174.82333333333332, 0, 133) [13] = [172.51333333333332, 56] [14] = (707.9133333333333, 0, 88) [15] = [151.42333333333332, 63] [16] = (707.9133333333333, 0, 220) [17] = [151.42333333333332, 105] [18] = (174.82333333333332, 0, 242) [19] = [172.51333333333332, 82] [20] = (0, 0, 179) [21] = [174.82333333333332, 105] [22] = (859.3366666666666, 0, 204) [23] = [140.66333333333333, 69] [24] = (859.3366666666666, 0, 0) [25] = [140.66333333333333, 103] [26] = (525.1999999999999, 0, 107) [27] = [182.71333333333334, 80] [28] = (174.82333333333332, 0, 67) [29] = [172.51333333333332, 66] [30] = (707.9133333333333, 0, 325) [31] = [151.42333333333332, 67] [32] = (347.33666666666664, 0, 76) [33] = [177.86333333333332, 70] [34] = (859.3366666666666, 0, 103) [35] = [140.66333333333333, 101] [36] = (347.33666666666664, 0, 0) [37] = [177.86333333333332, 76] [38] = (0, 0, 284) [39] = [174.82333333333332, 80] [40] = (525.1999999999999, 0, 330) [41] = [182.71333333333334, 80] [42] = (707.9133333333333, 0, 0) [43] = [151.42333333333332, 88] [44] = (525.1999999999999, 0, 260) [45] = [182.71333333333334, 70] [46] = (859.3366666666666, 0, 273) [47] = [140.66333333333333, 52] [48] = (859.3366666666666, 0, 325) [49] = [140.66333333333333, 91] [50] = (347.33666666666664, 0, 146) [51] = [177.86333333333332, 72] [52] = (174.82333333333332, 0, 0) [53] = [172.51333333333332, 67] [54] = (347.33666666666664, 0, 218) [55] = [177.86333333333332, 54] [56] = (0, 0, 364) [57] = [174.82333333333332, 97] [58] = (174.82333333333332, 0, 189) [59] = [172.51333333333332, 53] Is this the correct behaviour?
  14. Thanks, I'll try that. Actually, it is not only moving/duplicating the Marionettes that is taking a long time but also placing them as red symbols in the first place. I have logged a bug with Vectorworks. Let's see if there is a solution.
  15. That will do nicely, thanks, Dom. Actually, having the popup saying "Add" when the node itself is still labeled "Subtract" gives an indication that it hasn't been run in that mode yet. You rock!
  16. Hey @DomC, I have merged the add and the subtract nodes to get a single node with a popup-menu that lets me change its type in the OIP. I'm switching between add and subtract so often that I found it tiresome to rewire everything every time I made a mistake. Do you happen to know how the title of the node can be changed to show the type of calculation that has been chosen? Here's the node's code: # @Marionette.NodeDefinition class Params(metaclass = Marionette.OrderedClass): this = Marionette.Node('COULD THIS BE DYNAMIC??') this.SetDescription( 'Add or Subtract' ) a = Marionette.PortIn( 0 ) b = Marionette.PortIn( 0 ) c = Marionette.PortOut() calcType = Marionette.OIPControl( "Calculation Type", Marionette.WidgetType.Popup, 0, ['Add', 'Subtract'] ) calcType.SetDescription( "The Calculation Type" ) a.SetDescription( '' ) b.SetDescription( '' ) c.SetDescription( '' ) import operator def RunNode(self): calcType = self.Params.calcType.value a = self.Params.a.value b = self.Params.b.value if calcType == 0: self.Params.c.value = Marionette.TupleMap(operator.add, a, b) elif calcType == 1: self.Params.c.value = Marionette.TupleMap(operator.sub, a, b) Node attached, too. Dynamic Add_Subtract.vwx
  17. OK, no new features for the bookshelf this week. I'm attending the "BAU 2017" in Munich. "Been there, done it, got the t-shirt". Unfortunately, all t-shirts are size S... :-)
  18. OK, I got it. What you do is: 0_0 0_1 ... 0_9 1_0 1_1 ...etc. That's it. No Letters. @MarissaF@sbarrett not sure if this has been documented yet? This thread hasn't been updated in a while and I couldn't find this information anywhere.
  19. Plus one, so not that cold. Suits me fine. Expecting some snow though.
  20. @Alan Woodwell That sounds like a great idea for another "shelf life" marionette (should we create a new tag? I'm also working on a new "shelf life" Marionette this weekend). Can't wait to see the finished script. BoxShot app has parametric bottles, bags, cream tubs etc., so no end of possibilities there. I'll make some as soon as I get the chance. I noticed you used the "Get Bounding Box" node to get at the symbol footprints. I would never have tried that because the description reads "Returns the bounding box's coordinates of an objects *projection on the screen*. If this also works for the 3D projected footprint (as apparently it does) the description should be changed to reflect that, don't you agree?
  21. Ah, you mean like on a real messy person's shelf? :-) I cringe when I think of Karl May mixed with Penguin and trashy novels but hey, why not. I am sure there are marionetteers on this forum who could change the "Symbol in Folder" Node (was that even one of @DomC's?) to drill down into subfolders. That way the cake could be kept and eaten at the same time. Then again, one might want to exclude the Karl Mays after all (and the encyclopaedia). About time I learned Python.
  22. Yes, Hans Martin Kern is our CTO and my associate in the company and Nicolas Goutte is our Python Guru. They helped me with some of the changes made to the Index and Random Chunk Nodes.
  23. Thanks, @MarissaF :-). Marionette is highly addictive. I had a couple of hours to spare today (a rare occurrence) and I had to make a decision what to do. Of course I ended up wiring a spike for a textured, parametric box, my next pet project ("anything you can put on a shelf"). I wish I could do more Python sometimes to be more flexible. Having said that - what we can do just with nodes is already very good. I hope, Marionette will get regular updates with new features.
  24. Ah, I didn't think of the preceding 0. Thanks, Alan. Does Random still work now? I can't test just now. My PC is busy rendering and on the Mac it's still crashing. (They are on it though. This is slated to be fixed for SP3 :-)

 

7150 Riverwood Drive, Columbia, Maryland 21046, USA   |   Contact Us:   410-290-5114

 

© 2018 Vectorworks, Inc. All Rights Reserved. Vectorworks, Inc. is part of the Nemetschek Group.

√ó
√ó
  • Create New...