Jump to content

Flagging a Title block field as updated so vectorworks doesn't overwrite it

Recommended Posts

So I have a custom script that I've created that works in concert with the Vectorworks Title Block object. I import info from a csv file exported from our database and it loads in fields like sales person, venue, event name, etc into the title block (via Title Block Project Data.[record field]). It also creates/updates version numbering (outside of VW revision data which is difficult to work with via script for what we're trying to do) and puts the initials of the person who most recent revised it into a drafted by field. 


I had to make some edits for it to work with 2018 last year, but got suitable workarounds for the issues I was having, but they've gotten worse in 2019 as I'm working on our transition.


It seems that when I update the Record field it updates the title block visually, but the old information is retained "somewhere".  Previously it was only an issue if I replaced the title block (it would load default data into the fields unless I had subsequently edited the title block via the project settings - but I would only have to edit one field and it would flag all of the fields as changed. Now if I edit only one field via the built in settings it will only update that one field, but all others will revert to the previous state.


I was wondering if there is some way within the script to flag those fields as changed/edited so that they don't revert if I (or any of our other draftspeople) change anything via the built in editor.

Link to comment
  • Vectorworks, Inc Employee

Hello @Stephen Sorenson,


I suppose you are having issues only with the Project Data fields?


The Project Data in the Title Block Border is document wide. This means that it should be the same for all TBBs in the document. That is why, we have additional logic that keeps this data consistent. When you change the data for just one Title Block, it is becoming inconsistent with the document data and that is why it is getting overwritten.


If you do not want your changes to be overwritten, you will have to make them for the document too. This means that you will have to use SetRField and pass the handle of the Project Data format as first argument (you could take it with GetObject('Title Block Project Data') ).

However, keep in mind that this will not update the rest of the TBBs in the document to have consistent data, unless they get reset. You could run a foreach in the end of your changes in order to reset all TBBs in the document and make their Project Data consistent with the document project data.


Let me know if you have any other questions.


Best Regards,

Nikolay Zhelyazkov

  • Like 1
Link to comment
  • 1 year later...
On 11/19/2018 at 9:23 AM, Nikolay Zhelyazkov said:

If you do not want your changes to be overwritten, you will have to make them for the document too. This means that you will have to use SetRField and pass the handle of the Project Data format as first argument (you could take it with GetObject('Title Block Project Data') ).


Fantastic @Nikolay Zhelyazkov You saved my day!

Link to comment

We too have setup automatic revision control internally and externally of vectorworks.

However with the new 2019 Titleblock, I can't seem to set Revision Increment value to Manual or Auto through script (vs.SetRField).



- Set Plugin Default field value

- Setting value/default value throughout all Titleblocks in document

- Setting value/default value throughout all Plugin Style Titleblocks in document


What is the logic here? @Nikolay Zhelyazkov

Edited by twk
Link to comment

Apologies, my record handle for setting default values was wrong.

vs.SetRField(self.plugin_object.record_def_handle, self.plugin_object.plugin_name, self.parameter_name, value)

self.plugin_object.record_def_handle should be calling vs.GetObject(vs.GetName(vs.GetParametricRecord(self.handle))), not vs.GetParametricRecord(self.handle).


Full script below:

import vs
alert_dialog = lambda x:vs.AlrtDialog(str(x))

class PluginObject():
    class PluginParameter():
        def __init__(self, plugin_object, parameter_name:str):
            self.plugin_object = plugin_object #type: PluginObject
            self.parameter_name = parameter_name

        def __str__(self):
            return "{}".format(self.parameter_name)

        def value(self):
            return vs.GetRField(self.plugin_object.handle, self.plugin_object.plugin_name, self.parameter_name)

        def value(self, value):
            vs.SetRField(self.plugin_object.handle, self.plugin_object.plugin_name, self.parameter_name, value)

        def value_default(self):
            return vs.GetRField(self.plugin_object.record_def_handle, self.plugin_object.plugin_name, self.parameter_name)

        def value_default(self, value):
            vs.SetRField(self.plugin_object.record_def_handle, self.plugin_object.plugin_name, self.parameter_name, value)

    def __init__(self, handle):
        self.handle = handle
        self.record_handle = vs.GetParametricRecord(self.handle)
        self.record_def_handle = vs.GetObject(vs.GetName(self.record_handle))
        self.plugin_name = vs.GetName(self.record_handle)

    def list_parameters(self):
        data = []
        for x in range(vs.NumFields(self.record_handle)):
            fldname = vs.GetFldName(self.record_handle, x+1)

        return data

    def get_parameter_by_name(self, parameter_name:str):
        for x in self.list_parameters:
            if x.parameter_name == parameter_name:
                return x

tb = PluginObject(vs.FSActLayer())
revision_mark = tb.get_parameter_by_name('Revision Mark')
revision_mark.value_default = 'Numbers'


Link to comment
  • Vectorworks, Inc Employee

Hello @twk,


Your script seems to be setting the Revision Data numbering correctly. You can see that when you try to add new Revision and see that it is using the correct numbering. However, in order to change the numbering for existing revisions, you will have to do this from the Settings/Manager dialog, as from there we renumber the existing data. Other way to do this from script is to update the revision numbers from the code, but this will make the script more complicated.


Best Regards,

Nikolay Zhelyazkov

Link to comment

Yes, above script is a snippet of the working script, all is working well now. My problem was incorrectly setting default values.


I have now managed to complete our revision cloud tool to pull and push data to the new titleblocks.


Edited by twk
  • Like 1
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...