Wood Posted July 6, 2023 Share Posted July 6, 2023 Is there a method to protect custom user content like symbols when sharing drawings amongst colleagues? I have many many hours invested in certain tools and objects created in Vectorworks, as well as things like exclusive detail drawings that have intrinsic value. My clients need to interact with these objects, so they have to be in the collaborative drawing. Is there any way to curb their ability to isolate and keep these objects for their own use? Specifically, symbols and entire layers. Thanks! Quote Link to comment
Pat Stanford Posted July 6, 2023 Share Posted July 6, 2023 The short answer is no. Plug-in Objects can be included in a file and they will act kind of like symbols in that unless the script that controls the PIO is included in the users workspace they can not be modified. So you might be able to make a PIO wrapper around your symbols and include that in the file. Or you can go the legal way and just make the client sign something like an NDA / Use Agreement that says they can use these items for this project only. In the Security by Obscurity Department it is possible to attach a hidden record to your objects that will effectively watermark them. Then you could use a script that would look for objects in a drawing that use that specific record as a way of "proving" they are using your objects. But you would have to get an active VW file to run the script on. For Layers perhaps you could look into Project Sharing and not let them check out the layers in question. But none of these would possibly prevent anyone from converting your objects to lines and then grouping/resymbolizing them for their own use. If you have to share the VW file you are out of luck. If you can do PDF then that would offer more security, but they could probably import the PDF and get the linework out of that also. If you are really that worried about your clients stealing your work, do you really want to work with them in the first place? Quote Link to comment
Wood Posted July 9, 2023 Author Share Posted July 9, 2023 Thanks for the thoughtful reply Pat. Unfortunately our drawings get spread around so prolifically, it's really not feasible to cover everybody with an NDA. My main concerns are competitors getting access to tools that I use to improve my drafting product, and improve my own efficiency. It's not so much clients stealing my work, but folks in other departments passing things around that required effort and money to create. One big example is a 3D scanned as-built venue drawing obtained at significant expense to an end client, and then poached by a competitor allowing them to offer the same enhanced service without the expense. Quote Link to comment
Pat Stanford Posted July 9, 2023 Share Posted July 9, 2023 I understand your need and concern, but I don't see an "easy" way around the issue if you have to provide native files. Especially for something that does not need to be modified like a venue drawing, it is going to be very difficult to have that information protected in a format that would not be reusable in some way. I do have a way to add some protection to scriptable objects (Scripts and PIOs) as long as you have a close enough relationship with the user that it makes sense to have them provide you their Customer ID (last six digits of their serial number) and they are willing to put a license file into their user folder. If the license file is not correct then the Otherwise, about the best you could do would be to convert the assets to something that is less usable like a Mesh before sharing the file to make the asset harder for others to manipulate. Quote Link to comment
Pat Stanford Posted July 9, 2023 Share Posted July 9, 2023 Or I guess you could do it the opposite way and lock the objects to your serial number so that when it is run on anyone else's machine it adds a visible watermark to the drawing. Put the watermark in the class of the object and it would be quite hard to use the object without also showing the watermark. If this was for static objects (symbols or PIOs that should not be changed) the wrapper PIO for the watermark would be relatively easy. Quote Link to comment
Wood Posted July 10, 2023 Author Share Posted July 10, 2023 20 hours ago, Pat Stanford said: Or I guess you could do it the opposite way and lock the objects to your serial number so that when it is run on anyone else's machine it adds a visible watermark to the drawing. Put the watermark in the class of the object and it would be quite hard to use the object without also showing the watermark. If this was for static objects (symbols or PIOs that should not be changed) the wrapper PIO for the watermark would be relatively easy. Can you point me in the right direction to learn how to do this? A watermark on my custom tools would be a HUGE improvement over what I have now. Guilt and shame is still reasonably effective I hope! Thanks Pat! Quote Link to comment
Pat Stanford Posted July 10, 2023 Share Posted July 10, 2023 Responding off line, but if anyone else is interested, please contact me. Quote Link to comment
Gadzooks Posted July 10, 2023 Share Posted July 10, 2023 We should all know how to do this. Why so secretive? Quote Link to comment
Pat Stanford Posted July 10, 2023 Share Posted July 10, 2023 Security through obscurity. 😉 Here is the basic idea: 1. Find a formula that will give you a sequence of numbers with a reasonable number of (hopefully semi-random) numbers less than the size of the license file you want to provide.If you are doing individual licenses this can be as few as 6 character positions. If you want to be able to provide a single license that will work for multiple serial numbers or if you want to encode additional information (like what products the license is for) then you will want a sequence that will provide more numbers in the length of your. Additionally, this sequence should not include any duplicates. and example from OEIS.org (Online Encyclopedia of Integer Series) would be: Quote A363955When the base-2 representation of n is interpreted as a Gaussian integer x+yi in base (-1+i), both x and y are nonnegative. 0, 1, 3, 8, 9, 10, 11, 12, 13, 14, 15, 64, 65, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 115, 116, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127, 256, 257, 258, 259 2. Create a random string the length you want your license key to be 3. Replace the characters specified by the sequence with the string you are trying to encode. I envision this as being one or more customer IDs (the last 6 digits of your VW serial number. This is unique in the VW world). For added security you could add an additional encode/randomization of the string prior to doing the substitution. 4. Save the string created in step 3 as your license file and provide it to the "customer" 5. In you Vectorworks script, run the calculation to generate the sequence (you could just store the sequence values, but that would make it easier for someone to reverse engineer. By using the equation you will get the same sequence at both ends without having to store the exact values). 6. Extract the characters at the sequence locations into a new string. 7. Do the reverse of any randomization/encoding you did in the license file. 8. Get the users customer number (Vectorscript function GetActiveSerialNumber, Vectorscript function Copy to get just the customer id part) 9. So a substring search in the extracted string for the serial number. If you get a match then the license is good. 10. If you wanted to encode additional information (like which of your products the license was for) you would do the same with that information. And A363955 is not the sequence I would recommend, but it was a quick one to find that had a relatively large number of "hits" in a relatively small license length. The longer the license with the smaller the number of encoded characters obviously makes it harder to break. I hope this makes sense. I am open to questions. HTH. 2 Quote Link to comment
mjm Posted July 11, 2023 Share Posted July 11, 2023 You are literally a treasure Quote Link to comment
Gadzooks Posted July 12, 2023 Share Posted July 12, 2023 @Pat Stanford Now if I'd know it was that simple.....(who are you kidding Gadzooks) Once again shining a light on an often foggy and technically obscure software. Thanks for the way you have set the information out. I'm jealous but trying not to show it 👏 Quote Link to comment
Wood Posted July 12, 2023 Author Share Posted July 12, 2023 Whew that's a bit over my head! I suppose I'll have to start with learning about Vectorscript. Thanks for the input! Quote Link to comment
Pat Stanford Posted July 12, 2023 Share Posted July 12, 2023 Yes, the license will only work with objects that are scripted. And best if they are scripted in Vectorscript which can be encoded versus Python that pretty much has to remain readable as text. Maybe this thread will give me the "encouragement" that I need to work this and package the generation of the license keys and provide a VS function to check the validity of a license. But probably not. 😉 2 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.