Files posted by DomC
https://youtu.be/vuCvK4OwN80 German Movie
https://youtu.be/Nm0te1zmpVY English Movie
Structure of the Input:
1. Group with Geometry group (send to back) and Reshape Zone definition (send to front). Best practice is to use a blue smbol without screen plane objects
2. Reshape Zone group has further groups. Every reshape zones (polygons) is grouped with a dimension object. The dimension is the link to the script. The parameter name is a prefix of the dimension text
3. Use one of the existing examples to understand the system
1. Supportes not 3D, Chain Dimension, path objects, rectangles. Container objects are not reshaped but moved (like the reshape tool)
2. user origin has to be set to vectorworks origin
3. not mix of screen-plane and layer plane. Use all layer-plane
Parametric Symbol v2018.vwx
The heart of this Marionette example is the RectPack node. A node with over 2600 lines of code!
It supports dozens of packing algorithm to pack rectangles on another rectangular area in a space and time-saving way.
The right combination of packing and bin algo gives the ability to pack rectangles in a way you want to have them on your machines (as close as possible, always cut complete board, less cuts etc.)
Actually not even myself know, which packing algo ist right for which use case.
Also for professional use case, usually there is a machine dedicated software, which packs the port in a way which match best for the machine.
So I see the main use case to pack parts on a board for milling them on a cnc-machine as example for model-making. Workflows which uses a guillotine-workflow (always cut the whole board) often have special requirements which maybe could be reached with the choice of packing algorithm or maybe can not.
The Marionette Example based on foundational work:
http://www.secnot.com/ Python code for packing algorithm
Jukka Jylang - A Thousand Ways to Pack the Bin - A Practical Approach to Two-Dimensional Rectangle Bin Packing (2010)
Huang, E. Korf - Optimal Rectangle Packing: An Absolute Placement Approach (2013)
- Input of basic data like length and width
- Input of additional data
- object input (node detects if part input are objects and process them like rectangles)
- sort by material
- use a list of stock materials
Not all input combinations works at the moment. Recommended to use the existing examples to get correct input values.
This Marionette Script creates multiple space objects from worksheet data.
A very nice and time saving Marionette script to automate a routine peace of work.
Please consider, that the the script takes the area column and calculate the square with that. If you have a language settings with comma instead of points for decimal seperator, the calculation will fail. Use points as decimal character or eliminate decimal places in your list
About this File
This tool is available in english ("Apartment Tag") and german ("Wohnungsstempel"). The contents are nearly the same just translated.
This Marionette Tool summarize all Space-Areas, which are part of the same Appartement Number and shows the result in a symbol based Marionette stamp. Alternatively we can pull out sum of apartment area with a worksheet. But this Marionette is also a nice method to do this.
1. The Marionette Objects access to the field "11_Room ID" of the space object. Every other field can be used if necessary by editing script.
2. With the Marionette PIOs field "ApartmentID" you can tell the stamp, which apartment should be displayed
3. With the Checkbox "Layer from Apartment Tag". You can make the Tag collecting spaces of the tag's layer. Otherwise it will collect areas from the layer of the layer popup
4. You can exclude Spaces with specified keywords. Delimiter for Keywords is "$"
Über diese Datei
Dieses Werkzeug ist auf Deutsch ("Wohnungsstempel") und auf Englisch ("Apartment Tag") verfügbar. Die Inhalte sind bis auf die übersetzten Bezeichnungen nahezu gleich.
Der Marionette Wohnungsstempel fasst Wohnungsflächen zusammen und zeigt diese in einem Symbolbasierten Marionette-Stempel an. Raumflächen können auch mittels Tabellen ausgezogen werden. Der Wohungsstempel ist eine komfortable alternative.
1. Räume welche zur gleichen Wohung gehören, werden mit dem Standardfeld "Raum ID" identifiziert. Auch andere Kriterien für die Wohungszugehörigkeit können festgelegt werden, dazu muss das Script geändert werden.
2. Im Feld "WohnungsID" wird eingestellt, welche Wohung angezeigt werden soll.
3. Mit der Checkbox "Ebene von Wohungsstempel" lassen sich explizit die Räume auf die Ebene des Wohungsstempels eingrenzen. Ist die Checkbox deaktiviert, gilt die Einstellung "Räume von Ebene:"
4. Räume mit bestimmten Namen, können hier ausgeschlossen werden. Trennung der Namen erfolgt mit "$"
This Script is made to made separate objects from geometry which is nested in PlugIns or Symbols. Those could be uses for special usecases. The Script is criteria and class based. So it would be necessary the nested geomtry is in a seperate class.
The Script uses 3 Criterias
1. (left) The Input PIOs or Symbols by a free criteria
2. (middle) The class which contains the required objects we want to extract
3. (right) The Criteria for deleting the "debris" of the scripts. Which is selectable by class of the source PIOs/Symbols and deletes everything which are groups inside of this class (it deletes not the source objects, because those are symbols or PlugIns)
This is also a possible method to ungroup things. Many ungrouping workflows do not work with Marionette, because the ungroup script command does not create handles to the resulting objects. But the group after ungrouping will be in the same class as the source objects. So using classes could be a workaround to catch the results by a second criteria. Not noble, but it works 🙂
Use is on your own risk and in a copy of your project (like always)
This Script is made for troubleshooting special requirements by resorting geometry for IFC Export.
If NetVolume of Wall components has to be written in a custom pSet (if this is a special requirement), this Network maybe provide a solution.
If you export Base Quantities, you get component volumes exported. Which is the normal-case to export the component quantities.
What does the Script(s) do:
1. The first Script creates record fields for every component Name exists in the Document (Walls have to be in the drawing, not just as a style).
2. The Second Script gets Wall component NetVolumes and writes it in the Record attached to the Wall for every component Name.
3. So you are able to use the Data-Manager to attach this component informations to the Wall Body and be able to export is as a Custom pSet to ifc (if this is a requirement in a specific project)
The standard behaviour of the extrude along path tool is to center the profile on the path and after creation we are able move it. This works pretty good. If we use the extrude along path node, is is not so easy to move the profile group after creation. This example shows how to do.
1. Put a 2D locus point in your (blue) symbol as a reference point and put it in the background (cmd/ctrl + B)
2. the script will measure this point and after creation of the extrude along path it will move the profile group
- A custom node to get the profile group of the path
- A custom node to reset the extrude along path object after moving profile group
More and more projects with a high level of individual control or a high level of geometry detail were created in 3D. The leading modelling and scripting capabilities keeps Vectorworks the best choice for BIM models. We have the best tool to make more than just the standard.
This Example shows how to parameterize a "hand design" Geometry of a beautiful Door.
If you often have objects like imported pictures or imported PDFs with many objects or pages, this Marionette Menu Command can be handy.
It aligns objects to the bounding box buttom and stick it together to the bounding box width.
This Example shows a Marionette Object, which contains a Vectorworks Worksheet.
By clicking "Update" Button in the OIP, the Marionette pulls automatically the new values out of the linked xls sheet.
1. Import first The Worksheet in Vectorworks 2021
2. Create a blue symbol (insert as group) that contains the worksheet
3. Fill out Worksheet Name, Symbol Name, and File Path (Pick File Node)
- I see it as a fun-gadget
- It will not enhance the VW Worksheet if new rows are added in the linked xls.
- It will not make the VW Worksheet smaller if rows are deleted from the linked xls.
- It is based on the import xls from 2021 and it will update just values. No Format etc. will be updated.
This Network shows how to create fields from an existing xls or txt file.
"XLS Get Values"is to read Data directly out of a XLS Sheet.
The Smaller Nodes "XLS GetSheetNames", "XLS GetSheetInfos" are additional Nodes which are not essentially.
Everywhere you want to get Data out of an XLS File instead a Textfile.
1. If file Input is wrong the node will do nothing (no crash 🙂 )
2. If the sheet name is wrong it will import first sheet
3. If start/end is empty, it will return the complete sheet.
This Network ist not very flexible (world based values, just one row) but still useful.
You can insert and and ungroup for individual layout etc.
1. First delete all classes and replace to "none" or "keine"
2. copy the object on your file
3. If you do not delete classes on the original, you will paste the classes from the example in your file
A Marionette PlugIn, that collects a custom drawing (font character, picture whatever) and refer it to a regular font character.
This "Font" is placed into the control geometry container. Also we could just use a blue symbol.
The Heart of the script is a custom node "create font dict" which manage collecting the control geometry. Also it returns a dictionary sequence data type. A dictionary is very useful if you want to have pairs of data. In this case a character and a drawing group with informations forms a pair.
Sure, the script could be improved by several things (multi-line, alignment, page based etc. ) But I think it is very useful to have that plug in. Have fun with it. Maybe you can share your own fonts and your wonderful handwriting here. Thanks.
1. Handwriting Font
2. Vectorfont (ability to use sketch view)
3. For Milling Machines
4. Fast inserting of object sequences
1. Script Crashed if input Geometry was None (Integrated a script blocker and an Alert Dialog )
2. Input Dict was always None, because use of an outdated Script command (vs.GetType() instead vs.GetTypeN()). Issue in many other scripts. One of the very rare incompatibilites of Script commands the past Years.
During my last Marionette-Project, I produced some simple geometry nodes. Which maybe can be useful to can make geometrical constructions instead of mathematical (trigonometry) calculations.
"Perpendicular from Point to Line", "Parallel from Line through Point", "Circle-Circle Intersection", "Line-Circle Intersection", "Line-Line Intersection", "2 Circle Middleline" and some more.
Also the more Complicated Nodes "Circle tangent to 2 Circle", "Point or Circle tangent to 3 Circles"
Three Examples of Marionette PIOs of Circular Stairs.
Importer Nodes for the most used external python packages.
Tested with VW 2020 SP1, Mojave 10.14.6 and Windows 10
This Nodes breaks up and scale a 3D Solid Geometry and the result is similar like a 2D Geometry reshaped by the 2D Reshape Tool.
The Input Geometry (Geometries) have to be grouped. You can input it from symbol or control geometry.
The Node is designed with some love to detail and make the job in many situation just right. It follows some rules:
1. reference Point is left bottom back
2. Overlapping geometries over the zero point to left, back or bottom are handled symmetric. You can use locus points to direct the correct symmetry.
3. The nodes cut a geometry in 3 parts. the end parts are called "caps". The Node allows to scale the caps or the middle part (in most cases the right mode)
4. It is necessary the input geometry is a group.
5. Grouped Objects completely inside caps, will be moved as well
6. Objects between the caps, will be moved half value
This advantage of this node, is to allow an incredible fast production of a specific type of PlugIn Objects (Reshape in x, y, z direction Middle Part is scaled like Tables, Pillars, Handles etc.)
Simple Example (Pillar):
More Complex Example(Window Element):
Imagine you have client, which delivers you a room list. And a list, which objects have to be in this rooms. You can consider this lists with hundreds of rooms on your left screen and click them one by one in your rooms. You will make errors and your eyes will get squared.
Another real interesting example how you could accelerate a routine job with a marionette script.
This Examples shows, how to automatically create sheet layers and viewports from objects of the design layers. In this example, a sheet layer will be created for every exhibition place available on the design layer. It creates a 1:20 close-up from the specific exhibitor's place and an overview plan with a marker of the exhibitors place.
This Network-Template could be used whenever you want to create automatically documentations out of your drawing. As Example:
- Put a Viewport of every Space Object in your drawing on SheetLayers
- Put Viewports from Building Elements close-ups (Windows, Doors etc.) on sheet layers
Also this Network contains some very powerful custom nodes:
1. Enhances BBox, Enhanced Rectangle, PutByRefPoint those are just to save time for calculating width, length and ref point of objects
2. Function Two (like standard function node with two inputs), SetParent
(1. and 2. Already available on this forum)
5. VP Layer Visibility
6. Add VP Ann (Annotations in Viewport)
7. Nodes for getting Marionette OIP Data which is not possible with "Get Record Field"
This is one of the files used in the Marionette launch video. It was created by Dominique Corpataux at Computerworks.
A Node which creates Measure Lines in Polygons (Line from every vetex point to every other vertex point).
1. p2p Lines:
2. Perpentidular Lines (Perpentidular Line from every poly vertex on every poly edge):
To sort out needless lines, there are several filters integrated:
1. Double Lines automatically filtered with an epsilon (p2p is not the same as perpenticular if you look all 15 digits)
2. Measure Lines, which are identical with poly edges
3. Measure Lines, which are outside of the polygon
4. Overlapping lines. If two lines are parallel and both points of the smaller lines are on the bigger line, the bigger line is filtered
5. Filter Lines over and lower than min max values
6. An Option, to return a number of length (Return first x values). As example if there are measure lines with the length (1.2, 1.2, 1.25, 1.5,) and the value is 1, two lines with 1.2 will be returned. This value is holding on perpendicular and p2p lines.
Turn off Debug options like "Show Edge", "show Outside Poly", Filter small length (niches) and set "Return first x values" on 1 or 2 to get optimal results. So a normal result will look like this:
Attached there are three examples. An Example with spaces, An examples just with polys and an example as PlugIn. PlugIn is good for playing with the options to see changes prompt.
Example of a 2D/3D Marionette PIO with a Custom Wall hole.
The Geometry of the Window and the embrasure is based on a symbol. Also the 2D Drawing is based on a symbol. The Geometry is reshaped by the 2D and 3D Reshape node. So the Script itself is relatively slim.
Replace the Geometry with everything else you can draw. Generic solids are recommended. Also you could script some additional geometry for window division while frame is parametrized by reshape node.
This will go on. It took about 2 hours to draw the geometry and 2 hours to parametrize it. Impressive, how quick we can produce PIOs with Marionette based on that workflow.
Show Size of the active Document
This Wrapper contains two Marionette Nodes:
1. GetActFile -> Returns the Path of the Active Document
2. OpenDocFolder -> Starts a Subprocess of Finder (Macintosh) or Explorer (Windows) to show a Window from the input Path
Just Test by executing Wrapper. If you like it, add it to your Marionette menu commands.