Jump to content

Distance between two symbols within the data manager?


Recommended Posts

I'm not really into scripting yet, but if I need to be, this might be a decent project to start?


So, I've had several venues lately who are requiring an engineering submission with ll vertical loads notated on their main beams as opposed to doing that work themselves... Ugh. 


I have a relatively obtuse way of doing this where I manually enter the distance of a hoist to a beam and the distance from beam to beam, then I throw it into a spreadsheet I made to do the math. It's clunky, but ti works.


It would save me a ton of time on larger shows if I could make each hoist understand which beams it's between and how far it is from one of them. 

Beam Calc .jpg

Link to comment

This doesn't sound too difficult. The data manager isn't really the right place to do it though I don't think - a data mapping of a field can only do relatively simple calculations/lookups to generate the value. To the best of my knowledge, you can't run a script in a field mapping.


If you had more than two beams in your file, which I'm sure you do, then you'd need some logic to build a list of all of the beams that exist with their Y values, then compare each hoist against those positions to decide where it sits. That's a bit much for a data manager mapping I think.


If it were me that needed to do this, I'd write a simple one-shot menu command called 'Update Hoist Beam Values' or whatever you want to call it. This would run a small python script that would do the work and post the new/updated values to record fields on each hoist. Your record could have four fields: Upstage Beam Name, Distance to Upstage Beam then Downstage Beam Name and Distance to Downstage Beam


I'm sure there are nicer ways, but that's what I would do. IMO if you're new to scripting, I'd choose python. I started scripting around 2 months ago and I just find it so much more readable than Vectorscript (even though you'll still refer to Vectorscript functions within your python script).

Edited by spettitt
Link to comment


Gotcha, so I'll want to build a script that does the following:


Loop -->  Each beam gets a UUID

Each Hoist snags it's coordinates based on the beam UUIDs

Then I can dump those numbers into my worksheet or be really cool and do the math within the script.



I'm a bit intimidated by scripting. I blunder through Javascript to make things happen under google docs so I'm not hopeless, but definitely new.

Link to comment
6 minutes ago, AStein said:


Gotcha, so I'll want to build a script that does the following:


Loop -->  Each beam gets a UUID

Each Hoist snags it's coordinates based on the beam UUIDs

Then I can dump those numbers into my worksheet or be really cool and do the math within the script.



I'm a bit intimidated by scripting. I blunder through Javascript to make things happen under google docs so I'm not hopeless, but definitely new.

Thereabouts, yes. No need to use UUIDs though, the handle of each object is fine (and easier to use built-in commands). Handles aren't as permanent and globally unique as a UUID, but since this stuff will be worked out within the scope of one script execution where the handles won't change, they are plenty. Most scripts at Vectorscript/Python level (as opposed to going deeper in to the C++ SDK, which I'm not familiar with) are based on getting/looping through object handles. But, because they aren't quite as permanent, don't be storing them somewhere to use in a future script execution, it might not do what you expect.


I don't know if your beams in that image are symbols or plugin objects or what, so the below assumes it's a symbol with a record field for the beam name, but it may be different.

  • Your script would then flow something like:
    • Create Empty Python Dictionary : 'Beams' (dictionaries are just a type of table/array object in python that stores information in key:value pairs)
    • ForEachObject loop (Criteria: Type = Symbol, Symbol Name = Beam)
      • Get beam name and Get Y value. Depends how your beam name exists within whatever type of object it is.
      • Store as {Beam Name, Y Value} in the Beams dictionary.
    • ForEachObject loop (Criteria: Object Type = Hoist)
      • Reset the Beam Data record attached to it to clear old values, in case they are wrong
      • Get the Y value of the hoist
      • Find the Y values in the Beams dictionary either side of the hoist's Y value, and calculate the differences from the hoist Y.
      • Get the Key names of the beams from the dictionary
      • Post all four values to the Beam Data record

This obviously assumes your interest is purely in the Y direction.


To get started with scripting in general, I'd download a separate IDE (like PyCharm). I find it more helpful with syntax errors as I go than the built in editor. No need to download Python, as it comes with Vectorworks.


- Start a new PyCharm Project with a virtual environment, and choose a location on your machine to store the files for it.

- It will ask you to select an interpreter - point it towards the Python 3.9 exe in the Vectorworks folder in your program files.

- Grab the vs.py file from the Function Reference site https://developer.vectorworks.net/index.php/VS:Function_Reference.

- Import this to your project in PyCharm

- Make a new python file in your project 'main.py'

- In that file, write 'import vs' as your first line. This means your Pycharm project will 'know' the Vectorscript functions, and help you complete them properly as you write your script.

- If you execute your script in PyCharm with the play button, nothing will happen in Vectorworks.

- So to test it, right click on your main.py tab in Pycharm, select Copy/Path Reference then Absolute Path.

- In VWX, use Tools > Plugins > Run Script. Paste the file path you copied in the last step and accept the dialog, and the script will execute.

(when it works like you want, you can move the code to a script inside VWX to save you having to Run Script all the time)


The best way is to start simple and make a script more and more sophisticated until you have confidence. Have a look at the function reference on the python examples from the simpler functions - AlrtDialog, StrDialog are good ones to copy+ paste and test just to get some simple scripts executing. https://developer.vectorworks.net/index.php/VS:StrDialog. You want to have the 'ForEachObject' function as a target to work up to, as that's a very useful function for scripts like you are trying to make.


  • Like 1
  • Love 1
Link to comment

If it's helpful you can try this:  https://www.verysmallgroup.com/dimension2. It pretty much does a version of what @spettitt describes.


I'll post a file with an example.  


It may not do exactly what you want but I think the code could be modified to do what you are looking for (IF I get what you're looking for 🙂 )


It's written in Vector Script rather than Python.  If this looks promising let me know and I'll dig up the code.

Beam Example.vwx

Link to comment
  • Vectorworks, Inc Employee

Is this the sort of thing you are looking for?


Screenshot 2023-11-14 101451.png


If this is what you need it can be created by adding bridles tot he hoists and calculating them with Braceworks. Braceworks will automatically create hanging points that will document the force acting on the beam at the connection point.
You can then use spotlight numbering to give the hanging points ID's based on the beam they are linked with to make reporting on them eaiser.

Link to comment


On my cell. Plz forgive the typos...


So, my issue using braceworks/production assistant for this is thatis have to build the show from scratch or have someone I trust do it.


in the festival and tour world i get all sorts of drawings from all sorts of people and often at the 11th hour. I just struck a show testerday where the artist camp had changes the night before pre rig and the engineering plate already submitted was stamped (required) by the city. We normal just say "no" at that point but that camp owns the festival so... fun.


The other anecdote is putting a tour in a venue where the engineer is super-lazy and tells you a couple days ahead that he needs you fo do his job for him and notate all the roof truss loads so he can stamp it and bill the show $5k.


If I get either of those calls, there's no way I can take a strange drawing and make it brace works friendly in a quick manner.


That's why I need something low-level. Throw in my beams, capture D and Span and spit out a number. I could nail a 500 point show in an hour rather than tinkering with braceworks for days.

Edited by AStein
  • Like 1
Link to comment
  • Vectorworks, Inc Employee

Fully understand that it can be hard to work with a last minute plan changes or a design prepared by a third party, especially if you are dealing with another contractor not willing to actually do their job properly.

But does this leave you open to being legally liable if something goes wrong due to the information you have provided?
To me taking the extra time is worth it from a safety point of view and just as importantly, minimising potential liabilty if something goes wrong on site.


Link to comment


Respectfully, I'd been wanting to talk to Vectorworks folks for a while about some of the growing pains within the rigging community in my market because it seems like the reality on the ground here is not being addressed. 


But for the sake of this conversation I'd just say that if I'm saying I need these low-level tools to bypass braceworks and half the riggers out there are bailing on the BRX tools in favor of the legacy hoists, then there's misunderstanding going on between user and developer.


On a very basic level, production riggers here are almost all freelancers who learned how to calc loads by hand and then cemented that knowledge for years because Braceworks is laughably expensive for a new PR. Maybe in Europe riggers are company-people and that model makes sense? But everyone in my world is wondering what the VWX people are thinking with the pricing and features that seem like a minor convenience rather than a necessary tool. Having to constantly work around braceworks when you don't want the tool makes the business model adversarial, which is not what you want.


Riggers talk. You want them talking about how cool their new tool is, not exchanging ways to work around it. Right now everyone seems very excited about Production-Assist... Basically a massive workaround with a license model that makes it affordable. There's no good reason Vectorworks couldn't make that money instead.


As for liability, I have a lot to say on the subject of being deposed and what knowledge and papertrail is "good enough". "But I used braceworks" is not enough to educate the deposition even if it does prove a system. Mainly because liability is rarely a simple matter in a disaster.

Link to comment
29 minutes ago, AStein said:

Riggers talk. You want them talking about how cool their new tool is, not exchanging ways to work around it. Right now everyone seems very excited about Production-Assist... Basically a massive workaround with a license model that makes it affordable. There's no good reason Vectorworks couldn't make that money instead.

I have talked to a number of riggers, ones that use Braceworks, ones that use Production Assist, ones that use both, ones that use neither.  What I have yet to gleen is a list of needed tools and functionality.  For now, I would leave static analysis out of the list, Braceworks and Production Assist do this, and both are coded by the same guy.  If one doesn't use them, they do the calcs themselves, or send to a structural engineer, or both.  What is your workflow and what are the tools you need to assist you as a PR?  Is Production Assist enough?  Is it too much?

Edited by Sam Jones
spelling & punctuation
Link to comment

I currently run Production Assist and I might describe it as "too much" But (aside from the loading tools and influence lines) I really like it's selection tree and sticker printing tools. 


What I think we all miss from the Legacy Hoists, even though it was a bit of a menu dive, was being able to stick the Hoist ID in the center of the hoist symbol easily and displaying/maneuvering the data (usually just the load for engineer submissions). I use data tags now and that's fine, but it's just a little bit of extra clunkiness where I'm like: why did this get worse?


Another struggle is piercing the hanging position veil for gear counting. I just stopped using them because it makes counting truss in reports a pain. I feel like this concept is good, but if I've got a literal mile of truss to count and it's mostly in hanging positions. Yick.


I love that BRX/PA auto resolves spans into hoists. This is the killer tool and what riggers seem to want access to more than anything, but $2500/yr is just not worth it unless I can claw some of that money back from clients via volume.


For gear, I currently run a spreadsheet where I tell it what's in a system then multiply that list by the systems present, like: "deadhang" = x3 5/8" SHAX, x1 6' GAC x1 5' 3/8" WW, x1 Burlap... I have a Data Record and custom hoists that help me integrate into my format, but it's still copy paste. I see that there's some sort of virtual hardware thing going on in VWX right now. Maybe it's awesome? But I'm not really there yet. I'd love to do this inside VWX.


I print floor stickers for most one-offs. Used the little bit of Javascript I know to build a script under google docs. I currently see no good way to do this in VWX. I'd also like to print cable stickers, but havent found time to update my sticker code in google. 


Most riggers, especially tour riggers, end up making floor marks. it would be nice to see some symbols for this. I made custom ones, but a lot of guys don't really know how to do that.


It would be nice if some of the formulas and linkage in the data manager were accessible in vanilla data records. 


I use color to notate "worlds" for my hoist electrics. Like: "Red" distro powers "red" hoists which flies "red" truss. I use a visualization to show this, but it looks kind of bad, especially on hoists. I've been trying to just color the color parts of the hoist symbol based on their color tag rather than the entire hoist symbol. No luck so far.


Changing the total chain length in the OIP for hoists really needs to be editable. This seems like an oversight? 

The hoist OIP really buries some of the stuff I'm trying to edit all the time. My custom data sheet has Hoist ID, hoist symbol, function, high hook weight equivalent, cable length and vendor all right at the top. 


I'd love to see my low-level beam calc operation work. I'm... not good at coding... so I've just made a symbol with a name and the coordinates called out in the data sheet, then I'll try to do the math within vectorworks sheets... Python seems pretty easy, I just have to learn "the first thing" about how it works vs. VWX and I can play around. 


I dislike how obtuse it is to make and use titleblocks in Vectorworks so I just made a fancy datatag that grabs some info and I fill in the rest with a simple double click. No need to dig into menus and wonder why there are so many blank fields.


It would be nice to batch-edit certain things on sheet layres. I feel like this is something vectorworks probably has in some manager I havent found. Workflow here is: I have a show and I have 30 venues. Each venue needs a layout and an engineer submission. So I have a "VENUE" layer and class each venue I place in the design layres. Then I make a template for the layout and engineer submission, duplicate both 29 times and then start activating the appropriate class in each one, editing the titleblock (though I'm going to make that field smart when I get around to it) and double checking each. Then I batch publish. A function which I hold near and dear!


The bridle tool has gotten pretty good. Bravo.


I wish the mothergrid tool had the option to make the outsides or the inside dead hangs and vise-versa rather than all three being the same hoist symbol. Minor annoyance, but I mostly use it for deadhung spanners.


I wish structural members had a data point to show the total vertical and horizontal weight (not tension) on them, as engineers often want to know. I do understand that this is something I can make a worksheet do with Braceworks/PA, but it really would be convenient. 


And if you read this far, you're a saint. I'm typing this as much for my own mind so I have a list... 

  • Like 3
Link to comment
  • Vectorworks, Inc Employee

This is some really useful feedback, I'll make sure that it gets to the right people.
We are actively looking into how to address many of the these workflow related issues.
Some like the hanging position obscuring the trusses inside are much harder to address than others and will need time to carefully plan.
But the more info and feedback you and others can povide identifying specific pain points and problems the easier for our developers to understand what needs to be addressed and what our priorities need to be.


  • Like 1
Link to comment



Thanks, I'm glad it might be useful. 


I've been teaching VWX to riggers lately, formally and informally, so I get to hear a lot from the community. 


I plan on formalizing my VWX knowledge more so that I can be sure I'm teaching a good workflow, but things tend to get busy... had to miss LDI because I've got a new baby at home and she needs all the tutorials 😛

  • Like 2
Link to comment

@AStein I think there is a lot to go on in your post. Compared to the workflow of a LX crew chief or master electrician the riggers workflow is a lot more segmented. Some riggers only care about getting the chain over the chalk and don't concern themselves with power or hardware below the hook. A Lightwright style program for riggers would be fantastic but I think the number of opinions would make it hard to implement.

As for floor stickers I use word to do a mail merge from a database, it is clunky to have to use VW, excel and word but I'd rather VW do some other fixes before starting to do stickers and labels.

I've been playing around with the distance between points using the help of chatGPT.

Using the example data of:
beams = {'beam1': 1, 'beam2': 8, 'beam3': 12}
points = {'point1': 2, 'point2': 4, 'point3': 7, 'point4': 10, 'point5': 11, 'point6': 5}

I get an output of:

point1 between beam1(1), beam2(6)
point2 between beam1(3), beam2(4)
point3 between beam2(1), beam3(5)
point4 between beam2(2), beam3(2)
point5 between beam3(1), beam2(3)
point6 between beam2(3), beam1(4)

I thought having a record attached to each hoist to take the data was the way to go but thinking about how you are aiming to have a master VW file to handle all the venues for a tour you wouldn't want that data to live on the hoist because it would have multiple versions of it. So maybe a record per venue?


Link to comment

VW Distance from point to beam.pdf


Here is where I got to over the holiday weekend. The script grabs the point name and location from the symbol and same with the beam name and location. Then it runs some math on it to figure out the two closest beams and outputs it to a work sheet.

Right now it will only work with Y data but it wouldn't be two hard to modify to work with X data. I can think of a few rooms that 'go both ways' depending on where you are in the room. Also this script wont work for domes or other radial rigging grids.

Link to comment

@Sam JonesYeah, one of my guys got really interested in trying to find a 2" wide soft tape and putting labels or tabs on it. I think truss tape alone for layout would be problematic because of how fragile it is, but something like that would look slick... Maybe a roll of vinyl? I don't know, I don't really have an issue with layouts done the "old fashioned way". The stickers are more to serve one-offs/festivals when there's just too much data to scribble with chalk effectively... Also, it tooks great when the bullseye of each sticker is my client's event or logo 😉


@Mike RockOhh! That's really clever, looping through to look for what's close and 2nd closest. I should really play around with LLMs eh?


But that is a rough version of what I'm looking for. 


I agree that rigging is super-segmented and informal. I think one of the major issues in my market is that it's nearly impossible to run a vendor-based rigging company since other vendors just decided to buy their own truss and hoists and generally undercut what it's worth to rent in order to better sell their higher-margin instruments. Then, they can never get the best riggers to sign on because the mindset and pay expectations between departments is so vast... Anyway, that's why we're all over-opinionated, entrepreneurs who each have our own dogma based on how we came up in the industry... It's not great.


But that's also why we're often frustrated with how closed-off Vectorworks can feel. 


Link to comment
  • 1 month later...
  • Vectorworks, Inc Employee

I've  made a hoist data tag that is the same size as an Avery label. I make a viewport with hoists at a scale 1:1000, add the tag in the annotations, then arrange the tags in a grid. If I've made bridle diagrams, I put it next to the tag. I can then print a sheet of labels to spike the floor.image.png

  • Like 1
Link to comment
1 hour ago, AStein said:

The pitfall here is that I have a show coming up with a bit over 300 hoists so I'd need a way to automate the layout and pagination. Does vectorworks have anything like that?

AutoPlot Tools for Spotlight does.  Lacks sufficient documentation, but a Zoom session will get you where you need to go.

Link to comment

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.

Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Create New...