Jump to content

twk

Member
  • Posts

    877
  • Joined

  • Last visited

Posts posted by twk

  1. 21 hours ago, AlanW said:

    Hi I find that site modifiers affects all and any site model that sit over them. I think i made a separate design layer for separate site models or exploded one or made a snapshot.

    Thanks @AlanW, thats what I've done. 

     

     

    1 hour ago, P Retondo said:

    What is the nature of your existing data?  3d points, 3d polys, stakes?

    They are made up of 3d loci's and 3D Polygons

     

    The issue I'm having is that the grade limit is set to Apply To:Proposed Only. However when I view the Site Model in 3D Existing, its showing the Site being affected still by this grade limit.

     

     

  2. I am experiencing an issue with Site Models where the underlying existing site data is being altered to meet the grade limit boundaries, when the Site Model picks up modifiers (The Grade Limit is set to affect Proposed only).

     

    The Site Model is on its own design layer, the Site Modifiers are on a separate layer, and all the modifiers are set to affect the proposed site only.

    The grade limit is also on the same layer as the Site Model.

     

    Can anyone provide assistance to resolve this problem? Is it a known bug? Tagging the experts here 😄 @Tamsin Slatter @bgoff @Pat Stanford

     

     

     

     

  3. you'd have to do a deep search, for objects within the wall:

    try this:

     

    def apply_code_to_objects(hObj):
        object_type = vs.GetTypeN(hObj)
        object_parent_type = vs.GetTypeN(vs.GetParent(hObj))
        
        if object_type == 68: # Check if object is a wall, search within wall
            h2 = vs.FIn3D(hObj) # Get handle to first object within the wall object using FIn3D
            while h2 != None:
                if vs.Selected(h2): # If object within is selected
                    if vs.GetTypeN(h2) in [86]: #If type is plugin object (86 = Plugin Object) 
                        object_type = vs.GetTypeN(h2) # store object_type as vs.GetTypeN of this selected object within the wall
                        break # break while loop
                h2 = vs.NextObj(h2) # else move onto next object within wall
        
        vs.AlrtDialog(f"Obj: {object_type} in {object_parent_type}")
    
    vs.ForEachObject(apply_code_to_objects, "(INSYMBOL & INOBJECT & NOTINDLVP & NOTINREFDLVP & (VSEL=TRUE))")

     

    • Like 3
  4. I agree, they are not layers, but to the point of referring to them in tutorials, at this point, it looks like they have to as they are called "Sheet Layers" in the actual drawing user interface.

     

    Also, (nitpicking here 😄), sheets do not 'contain' layers, they can contain Viewports that contain layers, and classes.

     

     

    But you're totally right, I only comment on this as I'm in the process of explaining the Vectorworks ecosystem to a Revit user currently on-boarding. The terminology should be changed to just "Sheets" on the drawing user interface.

     

     

    • Like 2
  5. It remembers for that particular thread. Once you reset the thread, all previous interactions are deleted. However all your inputs are used to feedback into the overall AI's algorithm/learning. So releasing this into the wild by the developers is not for fun times, the AI is need of interactive data, which is why I believe they've released it.

     

    • Like 1
  6. Some have in thread below:

     

    I have started using it, and I must say it is both cool and scary at the same time. Not too sure how to feel about it yet.

    It can write articles, even write full code, and can also write a song or a poem. Honestly still trying to wrap my head around its functionality and use-cases. Definitly something to keep an eye on. 

    A screen recording below, obviously not everything is correct in the article, but I think it depends on the prompts you ask it as its based on a highly advanced Natural Language Training model. It is quite fun, in a dreading kind of way.lol

     

     

     

     

    • Like 1
    • Laugh 1
  7. 3 hours ago, Pat Stanford said:

    Or use the Criteria Builder in the built in Script Editor to generate the correct criteria string instead of trying to type it manually.

    ^^ This method never fails.

    Just make sure to set your language in the script editor appropriately 

  8. Yes, that is what I've reverted to, just means attaching a record to every object, and making sure the records attached.

    So I have 2 Data Viz',

    - one for showing objects that have the  record, to make sure I'm not missing any crucial objects,

    - and then another to actual classify visually, after the data has been entered into the custom records.

  9. Yes, but I already know where it is mentally. Really needing to see what 'objects' are in this area.

    Eg.

    Property Line Object on a separate Design Layer (say, SITE PLAN).

    Then on this multi story building (where plans are not aligned), there are service pipes/ducting that can be visualized with colorizing where those service objects are per LOT/UNIT, etc, as you cycle through viewports/sheets/design layers.

  10. Similar to Plugin Styles, you can set certain Record Fields attached to objects, to be auto-filled by predefined criterions, setup through the Data Manager.

    I'm assuming that snippet you've attached is of a cabinet object, and you're looking at an IFC record attached to that cabinet object.

    The first image you attached has that icon showing that it is being 'auto-filled'. Clicking on it again, would bring you to the second image you've posted, and that would set that field to be now instance based (meaning you can override the auto-filled data now).

     

    It is a powerful addition to VW that we've only just started to take advantage of.

    Using Data Mapping through the Data Manager and writing to a custom wall record, we can auto-calculate North Facing walls, by pulling info from a sun-heliodon object and a using a bit of math/trignometry.

    image.thumb.png.b3c43e9d82d1b7b8f8b112e1420041d2.png

     

    Have a look at this help page for setting up some basic formulas:

    https://app-help.vectorworks.net/2023/eng/VW2023_Guide/DataManager/Creating_or_editing_mapping_formulas.htm#h

     

     

    • Like 2
  11. Could you not just collect all object handles into a python list. then delete after collection?

     

    (I've left out the convert nested symbols code). Hopefully the cleaner python will send you on the right track.)

    import vs
    
    def delete_3D_objects_in_symbol(symbol):
        _3D_components_in_symbol = []
        
        h1 = vs.FInGroup(symbol)
        while h1 not in [0, None]:
            if not vs.GetObjectVariableBoolean(h1, 1160): # Not Screen Plane Object
                sType = vs.GetTypeN(h1)
                isSymbol = sType in [15,16,11,86]
                _3D_components_in_symbol.append(h1)
                
                # if isSymbol:
                #     prevObj = vs.PrevObj(h2)
                #     vs.SymbolToGroup(h2, 1)
                #     toMessage.append("symbol to group" + "\n")
                #     delete3dGeometry(vs.NextObj(prevObj))
    
            h1 = vs.NextObj(h1)
        
        for obj in _3D_components_in_symbol:
            vs.DelObject(obj)

     

  12. We don't generally print out our notes db, but this gave me an idea to use Excel's PowerQuery editor.

    So this for users who have access to Microsoft Excel.

    Using Excel, you can import data from an XML file, (and other formats, have not tested the Vectorworks txt format, should work as well, as its tab-delimited)

     

    Also, as this is referenced into Excel, any updates to the notes xml file through vectorworks will be updated in Excel without having to setup data connections, removing/reordering columns, etc

     

    ScreenRecording below. (I kept the NoteUUID etc, but that can be removed if you need to).

     

     

     

    • Like 2
  13. The last time I tried it was 32767, something to do with Int types or LongInt, I can't remember.

    I've in the past used a splitter command and had 3 params set aside for storing data eg (storeParam1, storeParam2).

     

    code below is an example of how it would go

    # Split every_length x characters
    def value_splitter(listparams:list, value_to_store):
        """
        listparams is List of record/plugin | field/parameter names
        """
        val_str = str(value_to_store)
        max_char_length = 32767
        val_params = [val_str[i: i + max_char_length] for i in range(0, len(val_str), max_char_length)]
        
        if len(val_params) <= len(listparams):
            for i, x in enumerate(listparams):
                vs.SetRField(plugin_handle, record, x, val_params[i])
        
        else:
            raise ValueError("Number of parameters too few for splitter")

     

     

    A while back, VW introduced the use of ObjectUUIDs. You could try storing these in a json file together with the rest of the other data you're wanting to store.

     

×
×
  • Create New...