Jump to content

Lilith Gardell

  • Content Count

  • Joined

  • Last visited

Everything posted by Lilith Gardell

  1. A happy new year to all of you! Maybe this is the thread my question fits best in. I just opened a vwx2017 file with marionette networks in VWX 2018 for the first time. What is left from the networks is a chaos of pure lines where the connection lines used to be. No nodes at all. The Marionette objects are still there. When I first had a look at the network inside all the connections were cut. The connection lines end somewhere near the other node. When I close and open again. The nodes are magically reconnected. That's not normal, is it? As far as I understand the thread above this should not happen. VWX 2018 doesn't run stable at my computer yet. To be precise: it crushes every time I close it. Even if I don't work in it at all. So I haven't started working with this version seriously yet but stick to VWX 2017. Maybe this marionette conversion behavior gives a clue what is wrong with my VWX 2018 so that could be fixed too? I add both the file in its original vwx2017 version and the vwx2018 version with lines instead of networks. Maybe someone has an idea about this? (About the content: I am trying to produce multiple phyllotaxis with a series of different angles and put them in a row - just wanted to see if DomCs Change Marionette OIP Parameter script, in VWX2018, could help with that. But that's another question.) Phyllotaxis doublizieren und versetzen v2018.vwx Phyllotaxis doublizieren und versetzen.vwx
  2. Hello, in a Marionette workshop last week we put together a script to dublicate selected objects on the design layer 'unused' and then delete the original object - which does the job of changing the layer to the design layer 'unused'. I tested it and added the criteria "layer is not 13 / 14 / 15" - those are sheet layers. The discovery of today. Otherwise it would work on activated objects on the sheet layers also which I don't want to happen. I guess this is it. At least I haven't found any other problems with it so far. When I manage to change this script into a tool and give it a shortcut key the workflow gets really quick. Have a great day, Lilith l = 'unused' GefundeneObjekte = [] def DoSomething(h): GefundeneObjekte.append(h) vs.ForEachObject(DoSomething, "NOTINDLVP & NOTINREFDLVP & (SEL=TRUE) & (L<>'13') & (L<>'14') & (L<>'15')") for element in GefundeneObjekte: new1 = vs.GetLayerByName(l) o = element created = vs.CreateDuplicateObject(o, new1) vs.DelObject(o) vs.ReDrawAll()
  3. So cool! I didn't know that it's possible to actually build your own tool. So it could be like any other tool in the construction palette? And be selectable via short key, even the modes? That would make it even quicker. Mode 1 and 2 sound perfect. What do you mean with giving graphical highlighting to the invisible objects? When I change the visibility of the "hidden class" - for example with mode 2 - I can see the previously invisible objects and pick those that need to be visible again. There will not be the case that all objects need to be reset to original class. It is always only a selection. Therefore I don't need Mode 3. Is the problem with the selection solved? Would it be possible to combine this with the SetLayer Script I found in the Marionette library? For a second tool or for another "class of modes" for a choice between class and layer? Like: choose between class and layer - then choose between mode 1 and 2. It feels like I will be able to build my own new world. Have a great day, Lilith
  4. Hi Pat, I found a SetLayer script in Marionette. @Marionette.NodeDefinition class Params(metaclass = Marionette.OrderedClass): this = Marionette.Node( "Set Layer" ) this.SetDescription( 'Adds an object to a specified layer' ) object = Marionette.PortIn(vs.Handle(0), 'obj') object.SetDescription( "The input object" ) list = [] h = vs.ActLayer() for i in range(0,vs.NumLayers()): list.append(vs.GetLName(h)) h = vs.NextLayer(h) layer = Marionette.OIPControl('Layers', Marionette.WidgetType.Popup, 0, list) layer.SetDescription( "A list of available layers" ) obj = Marionette.PortOut() obj.SetDescription( "The result object" ) def RunNode(self): l = self.Params.layer.value o = self.Params.object.value list = self.Params.list new = list[l] new1 = vs.GetLayerByName(new) created = vs.CreateDuplicateObject(o, new1) vs.Marionette_DisposeObj(o) self.Params.obj.value = created Don't know how to use it yet, but it does exist.
  5. Hello Pat, thank you very much for reading and figuring out my long message and for your support. At one point my explanation still seems to be misleading. The selection I need is the same selection a tool uses. It only works on visible selected objects. It does not work on selected objects on a layout - as long as you are not working on this layout while using the tool. It does not work on selected objects in a non-selected group – as long as you are not inside this group while using the tool. It does not work on selected objects on a layer or a layout or in group B – as long as you work and use the tool inside of group A. It does not work on selected objects on a layer or a layout Y or in a group – as long as you work and use the tool on layout X. That’s what I am searching for. I don’t want the script to work on any selection that I don’t “see” in the moment I am using the script – which would be a selection inside a group or on a layout I am not working on at that moment. Each show has its own plan, so I don’t need different classes for different shows. But I could sometimes use it for different scenes. Each show starts with the standard plan with all the standard equipment in it but the original standard plan stays untouched. I need to “hide” lights that are not being used – via putting them in a hidden class. As things change during the rehearsal process, I need to let those “hidden” lights reappear that are being used again in the next rehearsal – via putting them in their original class. I need to be able to select from those which are hidden. Not all of the hidden lights will be used/reappear. (Well, in my structure it’s mostly about layers and not classes, but that’s not relevant at that moment and there isn’t a SetLayer command anyway. Who programs the commands actually? If there is a SetClass, there could be a SetLayer, couldn’t it?) I like the idea of having the original class (or layer) saved in the light info record and being able to use a script to put it back to this original class via this stored information instead of via the info in my head. But I am afraid that for this we still have to solve the fundamental problem of the selection first, don’t we? I have not yet found a criteria which looks at a certain entry inside a record. I can just set the criteria: linked or not linked with a certain record/database. How does the Reset to Original Class script get the info from the record? I am not sure I understood the part about the “flag” that indicates which lights need to be “hidden”. Manually I just select the lights and change their class (layer) via info-palette. Would I need to do the little detour to first manually write a “hide-flag” into the record and then use the Hide objects script? If I got it right, I would translate my manual workflow into this: Store Current Class (=Writes Class-Name into a user-defined input-field “Original Class” in the record?) – first with all the standard equipment in the standard plan, so this is fixed, and then, working on a certain show, for every new light that I insert additionally into the plan. To hide certain lights, I manually select and write a “Hide-flag” in a second user-defined input-field “Hide” in the record, so I can use the Hide Objects Script which changes the class into “Hidden Class”. To let certain hidden objects in the “Hidden Class” reappear, I manually select them and write a “Reappear-flag”, and then run a Reset to Original Class script, combined with a script that erases any “Hide” or “Reappear”-flag. Did I get you right? Or work via linking and unlinking a database “Hide” and a database “Original Class” if you cannot grab the info inside of a database? I'd love to sort this out. It sounds quite promising. Best wishes, Lilith
  6. Hello Pat, hello Raymond, Thank you very much for your messages and your help. Two thoughts: first, I am afraid I have to postpone my question / my attempt to create a script for this task because I don’t understand your answer yet, Raymond. I need to learn more about scripting in general to actually be able to put your answer into practice. Second, I got the impression that the structure of classes and layers of the plan I am working with – which is created to meet the demands of our theatre with different multi-storey areas - might not work well from the point at which you try to create a script for this special task. I try to explain better what I am doing and why, and I created a simplified version of the file. Okay, the theatre has around 200 lighting fixtures on different storeys and different areas as standard equipment. For example in the area of the audience: orchestra seating balcony, 1.balcony, 2.balcony. Each with various lighting fixtures. Each balcony lies on its own layer to pull the overlapping balconys apart in the layout. Here I guess it would slow me down if I use a criteria like ForEachObjectInLayer. I am used to select lighting fixtures on any of those layers and put them (manually) into the hidden class. I created a hidden layer and later a hidden class to be quick enough with the changes during lighting rehearsals. All fixtures that are thrown out in one rehearsal and shall not be in the layout anymore, can be part of the game again in the next rehearsal. To save the effort to put the fixtures in question again and new into the plan, to give them all their data, to adjust the labels and all that, I just “park” them into the hidden layer (or class) when they are not used and put them back to their original layer (or class). It started with the hidden layer. The hidden class is needed as soon as you work inside a group or on a layout. Each boom is a group for example. If there is additional text on the layout for a thrown out fixture, it needs to be managed on the layout. Here I can only use classes. I guess I could maybe perhaps possibly change the structure to use just one layer for the standard equipment and one layer for the added lighting fixtures. I need to think that through calmly first to check all the consequences and I cannot do it in the middle of a theatre season. Or I just do this task manually like before and try with completely different tasks first. If I would change the structure to just one (or two) layers and use vs.ForEachObjectInLayer() I could avoid affecting selected objects in groups on other layers and anything on layouts as I understand and I would avoid running the script several times because of several layers. That sounds great. But – maybe as I don’t understand the possibilities of the IF statements enough – I don’t know yet how to avoid affecting selected fixtures in groups (in the same layer). Is the solution to just put my booms on a separate layer? I tried to understand how the code differs between lighting fixtures outside and inside a group. I can find the code for the creation of the group, but don’t find any mark which fixture is in the group, so I don’t know how to exclude objects in a group. In the simplified version of the plan there are four lighting fixtures on three different layers. One layer is hidden. The lighting object on this layer is selected. There is a group with four lighting fixtures (the boom), with two lighting fixtures selected. There is a test layout. If I run the (second) script with vs.ForEachObject() I can exclude the non-selected and non-visible objects, but not the selected objects that are inside a non-selected group and not the selected objects on the test layout (again both inside and outside of a non-selected group). I hope now you can understand better what I am doing and why. And maybe we find the point in the code about the difference of being in a group or not. Or find out, how a tool in VWX makes its selection. A tool ignores any selected object that lies on a hidden layer or class, or that lies on a layout I am not working on at the moment, or that lies in a group. That’s exactly what I need. Best wishes from Zurich, Lilith simplified_version_standard_plan.vwx
  7. If I create a script via Extras-Menue/Search and change (which might have a different name in English as I translated freely), I can choose not to work in/on groups and it leaves selected objects in non-selected groups alone. For example: import vs; vs.EditProperties("((V) & (SEL=TRUE))"); But if I take the same criteria ((V) & (SEL=TRUE)) into my other script, it behaves differently. With this script it does work on objects in groups again. c='00 spielt nicht mit' def DoIt(h): vs.SetClass(h, c) vs.ResetObject(h) return() criteria="((V) & (SEL=TRUE))" vs.ForEachObject(DoIt, criteria) I don't understand where the difference comes from.
  8. To Pat: I am open to switch to Vectorscript as I am new to scripting anyways.
  9. Hello Pat, thank you very much! I tried your script and tried to find the right criteria. It seems my main problem is selected objects in not-selected groups. I found the criteria for "object is not a group", but the script still works on selected objects _inside_ groups that are not selected. Do you have any idea how to avoid that? I already thought about having a script to deselect all objects (so no objects inside of groups are selected), then select the objects I want to put in the special class manually, then run the script to put them into this class. This might still be faster than to do it all manually via info palette. I exported VWX files as text files and tried to find out how for example the move-tool works. I would like to find out how their criteria works - because this tool ignores selected objects in not-selected groups. It just works on selected objects that are visible, not in a container object and not in a viewport/layout. That's exactly what I need. But I didn't find it yet. Somehow the process of the tool is not in the text - only the result. Or did I miss it? All the best, Lilith - away from the computer from tomorrow till monday because of a little holiday
  10. A criteria like SetLayer doesn't exist so I went for the version with the class.
  11. I did exactly what you suggest: I created a special layer (and class - for objects that are in a group or for some text etc in a layout) to be invisible. What I am looking for now is a faster way to put the lighting objects into this layer (or class). Okay, thank you. So I used locking before, but didn't know the english expression.
  12. Hi bcd! I am searching for a faster way via script to "park" lighting devices into a certain class that is invisible in my layouts. (During rehearsal process the lighting devices of our standard equipment tend to be thrown out and then be part of the play again and so on.) Saved Views don't help with that, do they? What does locking instruments mean? I got some ideas from one of the instructors how to adjust the criteria. Didn't have time yet to test them.
  13. Hello, after some tests I figured out that I need to find a way to exclude both groups and layouts and objects that are not visible at the moment (for the last I found something: (NOTINDLVP & NOTINREFDLVP & (V)) otherwise there will be bad surprises. Or train myself to never ever leave something activated/selected in a group or layout or in a class or layer that is not visible... no, wait, if I change the class of an object to another class that is not visible (which I need to do very often) I`d have to change this new class to be visible again, deselect all objects, hide the class again and then go on with my work. That seems to be more work than to do all that without the script... hhm... Are there any other ideas?
  14. Okay... I changed it to criteria="((SEL=TRUE))" and it seems to work like I would expect. I will run some more tests.
  15. c='spielt nicht mit' def DoIt(h): vs.SetClass(h, c) vs.ResetObject(h) return() criteria="(INSYMBOL & INOBJECT & INVIEWPORT & (SEL=TRUE))" vs.ForEachObject(DoIt, criteria) (SEL=TRUE) is already part of the criteria, but it somehow doesn`t work. At least I don`t get how.
  16. Yes, the objects stay in their old class - that`s what the info palette says - but they are blended out anyway when I blend out 'spielt nicht mit'. Only lighting instruments behave like that. That was the test about I tried to explain above. They are somehow in both classes now. You can blend them out with their old class or with 'spielt nicht mit'. That's kind of weird.
  17. Hi Patrick, I would like to select lighting instruments, run the script to put just the selected ones into the class 'spielt nicht mit' and leave all the other lighting instruments unchanged. At the moment it puts all lighting instruments into the class wether they are selected or not. So the criteria should be "activated" or "selected". I will have a look at the criteria dialog you mentioned. Thank you, Patrick!
  18. Hi Patrick, I did some tests to get the idea with what kind of object it works and with what kind it doesn't. Symbols from the VWX library that are not lighting instruments work. Drawn objects work. I change them to be a lighting device - it still works. I change them to be a symbol in my library - it doesn't work. I don't get the pattern yet. If you blend out the class "spielt nicht mit" - you can see the results. Script_Tests_Klasse_zuordnen_v2.vwx
  19. Hhm... well... it behaves differently than expected. When I blend out this special class, all other objects are also blended out - as if they are set to this class too even if they are not and the info palette doesn`t say so either. I have to change the class to another class and then back to the original class for them not to blend out too. The objects are lighting instruments. I guess I should have said so. Other objects don`t show this behavior (like rectangles or circles). With them it works as expected.
  20. It works! Thank you very much, MarissaF! Life will be so much easier now. And I definitely have to learn more about scripting...
  21. Hello Patrick, thank you very much! I`m not there yet. Now there is a Syntax Error with invalid syntax in the last line.
  22. Hi, how happy was I to find your questions and answers about setting the class of an activated object to a certain class. I am quite new to work with scripts (and in this forum). I gave it a try and just copied the above script and changed the name of the class to the one I need. Maybe you could help me with this error: File "<string>", line 3 vs.SetClass(h, c) ^ IndentationError: expected an indented block Do you know what I should change? Thanks a lot, Lilith


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...