Jump to content


  • Posts

  • Joined

  • Last visited


261 Spectacular


Personal Information

  • Occupation
    Architectural Designer
  • Homepage
  • Location
    New Zealand

Recent Profile Visitors

3,505 profile views
  1. From my experience, any plugins created before the latest version work with the latest version -- IF -- they are not using depreciated function calls (alot got dropped in 2012). But if you're wanting plugins to be backwards compatible they have to be created/edited in that version to work with that version. E.g You create a plugin in version 2018, and then come 2021, a new version gets released and all should be well (from what i know, no functions were depreciated in 2021). However, once you make any edit to the plugin using the plugin manager, under 2021, (eg add a parameter, remove a parameter, change a parameter name, etc), that action breaks backwards compatibility. If you point your script to an external source and are changing script code in an external editor, this doesn't seem to affect the *.vso or *.vsm files. So if you are want to do edits to the plugin via the plugin manager and still maintain the backwards compatibility you'd have to do it in the earliest version (in this case 2018) you want compatibility for. Again, my own experience.
  2. Wrap p1 in str(p1) instead. That's using python to convert any data type to a str type.
  3. You can find it on this page: (Scroll to bottom of page) https://developer.vectorworks.net/index.php/Vectorworks_Scripting#Version_Information
  4. Here is a stripped out version from my custom python library for a geometry object. In this case the object must be a 3D type (Mesh, Extrude, 3DPoly, Nurbs, etc); And this is only for the 3D bounding box points. Josh is right, if its a mesh object, there are function calls to get the actual vertex points. import vs class GEOMETRY3D(): class POINT3D(): def __init__(self, x, y, z): self.x = x self.y = y self.z = z def __sub__(self, other): self.x -= other.x self.y -= other.y self.z -= other.z def __add__(self, other): self.x += other.x self.y += other.y self.z += other.z def mid_point_to_other_point(self, other_point): return def length_to_other_point(self, other_point): return def get_offset_pt(self, offsetX=0, offsetY=0, offsetZ=0): return GEOMETRY3D.POINT3D(self.x + offsetX, self.y + offsetY, self.z + offsetZ) def __init__(self, handle): self.handle = handle self.generate_bounding_box() def generate_bounding_box(self): self.top_center = GEOMETRY3D.POINT3D(self.center.x, self.center.y, self.center.z + (self.depth / 2)) self.bottom_center = GEOMETRY3D.POINT3D(self.center.x, self.center.y, self.center.z - (self.depth / 2)) self.top_back_left = self.top_center.get_offset_pt(-self.width / 2, self.height / 2) self.top_back_right = self.top_center.get_offset_pt(self.width / 2, self.height / 2) self.top_front_right = self.top_center.get_offset_pt(self.width / 2, -self.height / 2) self.top_front_left = self.top_center.get_offset_pt(-self.width / 2, -self.height / 2) self.bottom_back_left = self.bottom_center.get_offset_pt(-self.width / 2, self.height / 2) self.bottom_back_right = self.bottom_center.get_offset_pt(self.width / 2, self.height / 2) self.bottom_front_right = self.bottom_center.get_offset_pt(self.width / 2, -self.height / 2) self.bottom_front_left = self.bottom_center.get_offset_pt(-self.width / 2, -self.height / 2) @property def bounding_box_points(self): """ Top to bottom, Top Left Back to Top Front Left Counterclockwise --> then Bottom.. :return: """ return self.top_back_left, self.top_back_right, self.top_front_right, self.top_front_left, self.bottom_back_left, self.bottom_back_right, self.bottom_front_right, self.bottom_front_left @property def center(self): ptxy, z = vs.Get3DCntr(self.handle) return GEOMETRY3D.POINT3D(ptxy[0], ptxy[1], z) @property def height(self): return vs.Get3DInfo(self.handle)[0] @property def width(self): return vs.Get3DInfo(self.handle)[1] @property def depth(self): return vs.Get3DInfo(self.handle)[2] # obj3D = GEOMETRY3D(vs.FSActLayer()) # for x in obj3D.bounding_box_points: # vs.Locus3D(x.x, x.y, x.z)
  5. As soon as I went back into Vectorworks, I figured out what the issue was. I'm in a project sharing file, and even though I had all the walls checked out, I had to check out the the WinDoor objects as well. I think this is by design, as the Data Manager does a document wide setting when in use. Working now.
  6. Trying to add a data sheet to the WinDoor object (@Julian Carr), however the Data Sheet is shown grayed out still on the Object Info pallette Data Tab. Also the WinDoor needed to be added manually to allow for Data Mapping, it wasn't set by default. Also the WinDoor object already has IFC data on it? Is this programmed internally? I would like to setup a datasheet to just show the ID and certain UserID fields. Any help is much appreciated.
  7. Thanks @Vlado and @Dave Donley, I managed to sort it out. Using the vs.GetAssociation calls on the texture resource handle
  8. With a bit of trial and error, and crossing my eyes through DebugList view, it turns out, the vs.GetAssociation(handle, i) and vs.GetNumAssociations(handle) did the trick. The debuglist view did show the hatch handle, buried under a AssociationNode.
  9. Does anyone know, how we can find out what hatch is being used in a particular texture? Has it got anything to with Shader Records? I can't seem to find anything. https://developer.vectorworks.net/index.php/SDK:Using_Shader_Records @Rick Berge @Vlado @JBenghiat
  10. I have been using the python external libraries openpyxl and pandas dataframes for data exchange between vectorworks and excel. They have very good documentation. https://openpyxl.readthedocs.io/en/stable/ https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html
  11. I am trying to get wall data, via the wall style selectors on this page: https://developer.vectorworks.net/index.php/VS:Function_Reference_Appendix#wallstyle The note at the bottom of the table says: Pass the handle returned by GetWallPreferences or GetSlabPreferences to access Wall/Slab Preferences values for all selectors. I can't seem to get the description or mark values for a wall style. Has anyone else had the same issue?
  12. Nice share @_c_! Finally got my group widgets working after months of trial and error. My widget indent calls were in the kObjOnWidgetPrep function not the kObjOnInitXProperties. (Funny that indentation works in kObjOnWidgetPrep without the Grouping) Again, thank you and thank you.
  13. I'll chime in for the NZ market, we are using the MasterSpec system that has plugins for both Archicad and Revit (Master Key). If we could get integration for vectorworks that would be awesome! https://masterspec.co.nz/
  14. We have also transitioned into vw2021, from vw2019, and just getting my head around the General Notes/Call Out Notes/Notes Manager workflow. A colleague who is setting up notes for the General Notes tool has found out that you can't Add multiple notes at the same time with this new workflow. You were able to in 2019. Is this WAD?
  15. I may have a copy of 12.5 somewhere. I have used in past for Windows 10 successfully, opening older projects for clients wanting changes/renovations some 10 years later! I will PM you, @Victoria Bowles
  • Create New...