Jump to content

Search the Community

Showing results for tags 'marionette'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Announcements
    • Announcements
    • News You Need
    • Job Board
  • Feedback
    • Roadmap
    • Wishlist - Feature and Content Requests
    • Known Issues
    • Wishes Granted / Issues Resolved
    • Forum Feedback
  • General
    • Troubleshooting
    • General Discussion
    • Architecture
    • Site Design
    • Entertainment
    • Previsualization
    • Braceworks
    • ConnectCAD
    • Energos
    • Rendering
    • Workflows
    • Buying and Selling Vectorworks Licenses
    • Hardware
  • Customization
    • AI Visualizer
    • Marionette
    • Vectorscript
    • Python Scripting
    • SDK
    • 3rd Party Services, Products and Events
    • Data Tags
  • Solids Modeling and 3D Printing
    • Subdivision
    • Solids Modeling
    • 3D Printing
  • Vectorworks in Action
  • Archive
    • Resource Sharing
    • Machine Design

Calendars

  • In-Person Training - North America
  • In-Person Training - UK
  • Coffee Breaks
  • Essentials Seminars
  • Webinars
  • Community Groups

Categories

  • Knowledgebase
    • Tech Bulletins
    • Troubleshooting
    • Workflows
    • How To
    • FAQs

Categories

  • Marionette - Objects
  • Marionette - Networks
  • Marionette - Nodes
  • Marionette - Menu Commands

Product Groups

There are no results to display.


Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Occupation


Homepage


Hobbies


Location


Skype

  1. Hi everyone I have this script that imports marionette badly. recognizes them as Object Style but it causes all connections to the nodes to be lost.I read that someone had the same problem, can you help me understand if it has been solved? import vs import os import csv # --------------------------------------------------------- # CONSTANTS # --------------------------------------------------------- K_SYM_DEFS = 16 K_TEXTURES = 97 K_MATERIALS = 108 BTN_OK = 1 BTN_CANCEL = 2 SETUP_DIALOG = 12255 NIL = vs.Handle(0) # Global data CONFIG = {} FOLDERS = {} CATALOGS = {} ITEMS = [] # Catalog dialog CATALOG_POPUP_ID = 10 g_catlg_dialog_id = None g_catalog_keys = [] g_selected_catalog_key = '' # Category dialog CAT_POPUP_ID = 20 g_cat_dialog_id = None g_cat_keys = [] g_selected_cat_key = '' # Symbols dialog POPUP_ID = 4 g_dialog_id = None g_reslist_id = 0 g_res_indices = [] g_available_names = [] g_chosen_name = '' # --------------------------------------------------------- # PATH MANAGEMENT # --------------------------------------------------------- def _get_user_data_root(): """ Returns the User Data folder (e.g. .../Vectorworks/2026) """ return vs.GetFolderPath(12).rstrip(os.sep) def _get_plugin_folder(): """ Returns the 'Immaginazione' folder (.../2026/Plug-in(s)/Immaginazione) """ user_data_root = _get_user_data_root() path_plural = os.path.join(user_data_root, 'Plug-ins', 'Immaginazione') if os.path.exists(path_plural): return path_plural path_singular = os.path.join(user_data_root, 'Plug-in', 'Immaginazione') if os.path.exists(path_singular): return path_singular return path_plural def _csv_path(): return os.path.join(_get_plugin_folder(), 'config_arredi.csv') def resolve_catalog_file(catalog_key): """ Finds the .vwx file INSIDE the 2026 folder root, not inside Immaginazione. """ raw_csv_path = CATALOGS.get(catalog_key, '').strip() if not raw_csv_path: return '' rel_path = raw_csv_path.lstrip(os.sep).lstrip('/') user_data_root = _get_user_data_root() full_path = os.path.join(user_data_root, rel_path) if os.path.exists(full_path): return full_path filename_only = os.path.basename(rel_path) flat_path = os.path.join(user_data_root, filename_only) if os.path.exists(flat_path): return flat_path return full_path # --------------------------------------------------------- # CSV PARSER # --------------------------------------------------------- def load_config_from_csv(): global CONFIG, FOLDERS, CATALOGS, ITEMS CONFIG.clear() FOLDERS.clear() CATALOGS.clear() ITEMS[:] = [] path = _csv_path() if not os.path.exists(path): vs.AlrtDialog('CRITICAL ERROR: CSV file does not exist.\\\\\\\\n\\\\\\\\nLooked here:\\\\\\\\n' + path) return False try: with open(path, 'r', encoding='utf-8', newline='') as f: reader = csv.reader(f, delimiter=',', quotechar='"', skipinitialspace=True) for row in reader: if not row: continue first = row[0].strip() if not first or first.startswith('#'): continue tipo = first # CATALOG if tipo == 'CATALOG' and len(row) >= 3: key = row[1].strip() val = row[2].strip() if key and val: CATALOGS[key] = val continue # ITEM (5 fields) if tipo == 'ITEM' and len(row) >= 5: ck = row[1].strip() fk = row[2].strip() nm = row[3].strip() kind = row[4].strip() if ck and fk and nm and kind: ITEMS.append((ck, fk, nm, kind)) continue # ITEM (legacy 4 fields -> Symbol) elif tipo == 'ITEM' and len(row) == 4: ck = row[1].strip() fk = row[2].strip() nm = row[3].strip() if ck and fk and nm: ITEMS.append((ck, fk, nm, 'Symbol')) continue # 2+ fields: CONFIG or FOLDER if len(row) >= 2: k = row[0].strip() v = row[1].strip() if k == 'FOLDER_MAIN': CONFIG['FOLDER_MAIN'] = v continue if k.startswith('TARGET_LAYER'): CONFIG[k] = v continue if k.startswith('DIR_'): CONFIG[k] = v continue FOLDERS[k] = v if not CATALOGS: vs.AlrtDialog('CSV error: no CATALOG rows found.') return False return True except Exception as e: vs.AlrtDialog('Exception while reading CSV:\\\\\\\\n' + str(e)) return False def get_target_layer_for_catalog(catalog_key): spec = 'TARGET_LAYER_' + catalog_key if spec in CONFIG: return CONFIG[spec] if 'TARGET_LAYER' in CONFIG: return CONFIG['TARGET_LAYER'] return '' # --------------------------------------------------------- # RESOURCE MANAGEMENT # --------------------------------------------------------- def get_or_create_folder(name, res_type): h = vs.GetObject(name) if h == NIL: vs.NameObject(name) vs.BeginFolderN(res_type) vs.EndFolder() h = vs.GetObject(name) return h def get_or_create_symbol_folder_path(folder_path): parts = [p.strip() for p in folder_path.split('/') if p.strip()] h_parent = NIL root_csv = CONFIG.get('FOLDER_MAIN', '').strip() if root_csv and parts and parts[0] != root_csv: h_root = get_or_create_folder(root_csv, K_SYM_DEFS) h_parent = h_root for part in parts: h = get_or_create_folder(part, K_SYM_DEFS) if h_parent != NIL and h != NIL: vs.SetParent(h, h_parent) h_parent = h return h_parent def copia_marionette_profonda(catalog_file, symbol_name): """ Imports Marionette using GetResource from the catalog file """ try: h_imported = vs.GetResource(catalog_file, K_SYM_DEFS, symbol_name) if h_imported != NIL: return True return False except: return False def importa_simboli_in_cartelle(catalog_file, filtered_items): imported_count = 0 marionette_failed = [] listID, numItems = vs.BuildResourceListN(K_SYM_DEFS, catalog_file) if listID == 0: return 0 name_map = {} for i in range(1, numItems + 1): n = vs.GetActualNameFromResourceList(listID, i) name_map[n] = i for folder_key, symbol_name, kind in filtered_items: idx = name_map.get(symbol_name, 0) if idx == 0: continue # MARIONETTE: use GetResource if 'Marionette' in kind or kind == 'Marionette Object': if copia_marionette_profonda(catalog_file, symbol_name): imported_count += 1 else: marionette_failed.append(symbol_name) continue # NORMAL SYMBOLS h_sym = vs.GetObject(symbol_name) if h_sym == NIL: h_sym = vs.ImportResourceToCurrentFile(listID, idx) if h_sym == NIL: continue imported_count += 1 # Move into folder fpath = FOLDERS.get(folder_key, '') if fpath: h_folder_dest = get_or_create_symbol_folder_path(fpath) if h_folder_dest != NIL: vs.InsertSymbolInFolder(h_folder_dest, h_sym) if marionette_failed: vs.AlrtDialog('Marionette failed (Vectorworks bug): ' + str(len(marionette_failed))) return imported_count def organizza_risorse_dipendenti(): if 'DIR_TEX_ROOT' not in CONFIG: return try: ht = get_or_create_folder(CONFIG['DIR_TEX_ROOT'], K_TEXTURES) hts = get_or_create_folder(CONFIG.get('DIR_TEX_SUB', ''), K_TEXTURES) if ht and hts: vs.SetParent(hts, ht) l, n = vs.BuildResourceList(K_TEXTURES, 0, '') for i in range(1, n + 1): h = vs.GetResourceFromList(l, i) if vs.GetName(h).startswith('40_'): vs.SetParent(h, hts) except: pass # --------------------------------------------------------- # DIALOG HANDLERS # --------------------------------------------------------- def catalog_dialog_handler(item, data): global g_selected_catalog_key if item == SETUP_DIALOG: for i, k in enumerate(g_catalog_keys): vs.AddChoice(g_catlg_dialog_id, CATALOG_POPUP_ID, k, i) g_selected_catalog_key = g_catalog_keys[0] if g_catalog_keys else '' elif item == CATALOG_POPUP_ID: g_selected_catalog_key = g_catalog_keys[data] elif item == BTN_OK: return 1 elif item == BTN_CANCEL: return 2 return 0 def category_dialog_handler(item, data): global g_selected_cat_key if item == SETUP_DIALOG: for i, k in enumerate(g_cat_keys): vs.AddChoice(g_cat_dialog_id, CAT_POPUP_ID, k, i) g_selected_cat_key = g_cat_keys[0] if g_cat_keys else '' elif item == CAT_POPUP_ID: g_selected_cat_key = g_cat_keys[data] elif item == BTN_OK: return 1 elif item == BTN_CANCEL: return 2 return 0 def symbol_dialog_handler(item, data): global g_chosen_name, g_reslist_id, g_res_indices if item == SETUP_DIALOG: g_reslist_id, tot = vs.BuildResourceList(K_SYM_DEFS, 0, '') g_res_indices = [] for i in range(1, tot + 1): nm = vs.GetActualNameFromResourceList(g_reslist_id, i) if nm in g_available_names: vs.InsertImagePopupResource(g_dialog_id, POPUP_ID, g_reslist_id, i) g_res_indices.append(i) if g_res_indices: g_chosen_name = vs.GetActualNameFromResourceList(g_reslist_id, g_res_indices[0]) elif item == POPUP_ID: g_chosen_name = vs.GetActualNameFromResourceList(g_reslist_id, g_res_indices[data]) elif item == BTN_OK: return 1 elif item == BTN_CANCEL: return 2 return 0 # --------------------------------------------------------- # MAIN # --------------------------------------------------------- def main(): global g_catlg_dialog_id, g_catalog_keys global g_cat_dialog_id, g_cat_keys global g_dialog_id, g_available_names # 1. Load config if not load_config_from_csv(): return # 2. Catalog dialog g_catalog_keys = sorted(CATALOGS.keys()) g_catlg_dialog_id = vs.CreateLayout('Choose Catalog', False, 'OK', 'Cancel') vs.CreatePullDownMenu(g_catlg_dialog_id, CATALOG_POPUP_ID, 30) vs.SetFirstLayoutItem(g_catlg_dialog_id, CATALOG_POPUP_ID) if vs.RunLayoutDialog(g_catlg_dialog_id, catalog_dialog_handler) != BTN_OK: return # 3. Resolve catalog file cat_key = g_selected_catalog_key cat_path = resolve_catalog_file(cat_key) if not os.path.exists(cat_path): vs.AlrtDialog('ERROR: Catalog file not found.\\\\\\\\n\\\\\\\\nCalculated path:\\\\\\\\n' + cat_path) return # 4. Filter objects - Symbol + Marionette, no NULL, no Text valid_items = [] for (ck, fk, nm, kind) in ITEMS: if ck == cat_key and kind not in ('Text',) and fk != 'NULL': valid_items.append((fk, nm, kind)) if not valid_items: vs.AlrtDialog('No valid objects found for this catalog.') return # 5. Target Layer tgt_layer = get_target_layer_for_catalog(cat_key) if not tgt_layer: vs.AlrtDialog('Target Layer is not defined in the CSV.') return if vs.GetObject(tgt_layer) == NIL: vs.CreateLayer(tgt_layer, 0) # 6. Category dialog used_fkeys = sorted(list(set([k for (k, n, knd) in valid_items]))) g_cat_keys = [k for k in used_fkeys if k in FOLDERS] if not g_cat_keys: vs.AlrtDialog('No valid categories found.') return g_cat_dialog_id = vs.CreateLayout('Choose Category', False, 'OK', 'Cancel') vs.CreatePullDownMenu(g_cat_dialog_id, CAT_POPUP_ID, 25) vs.SetFirstLayoutItem(g_cat_dialog_id, CAT_POPUP_ID) if vs.RunLayoutDialog(g_cat_dialog_id, category_dialog_handler) != BTN_OK: return # 7. Import symbols of chosen category cat_sel = g_selected_cat_key items_to_import = [(fk, nm, knd) for (fk, nm, knd) in valid_items if fk == cat_sel] importa_simboli_in_cartelle(cat_path, items_to_import) organizza_risorse_dipendenti() # 8. Object dialog g_available_names = [nm for (fk, nm, knd) in items_to_import] if not g_available_names: vs.AlrtDialog('No available objects in this category.') return g_dialog_id = vs.CreateLayout('Choose Object', False, 'OK', 'Cancel') vs.CreateThumbnailPopup(g_dialog_id, POPUP_ID) vs.SetFirstLayoutItem(g_dialog_id, POPUP_ID) if vs.RunLayoutDialog(g_dialog_id, symbol_dialog_handler) != BTN_OK: return # 9. Activate if g_chosen_name: vs.Layer(tgt_layer) vs.SetActSymbol(g_chosen_name) vs.SetTool(-209) main() Thank's Best regard
  2. Hi all, I thought that I'd try and put in one place some diverse Marionette resources for you who are new to Vectorworks' algorithmic / parametric modeling tool: Basic Tutorial in Vectorworks documentation More Advanced Tutorial in Vectorworks documentation Marionette on YouTube (thank you Jim) Marionette Developer Wiki (for Pythonistas)
  3. Hello, I want to place objects in the 3D parts of the plants. Each object must be placed in the style of the plant that bears the name of the object. With “list explode,” I find the group in which I want to place my object with “set parent.” I have a problem when an object is missing or the name is not exactly right; the objects are shifted from the missing object. I want the missing object to be skipped so that the rest are not shifted. Here I have 9 objects and 10 plants. Can you help me?
  4. Version 2025.0

    77 downloads

    How to Use the Marionette Script: Step 1: Install the Pillow Library The script requires the Python library Pillow for image processing. If you’re unsure whether you’ve installed it before, you can safely install it again. To install: 1. Select the Install Pillow node in the script. 2. Click Run in the Object Info Palette (OIP), or 3. Right-click the node and select Run Marionette Script. Step 2: Add Commands to Your Marionette Command Library To make the script easily accessible: 1. Right-click on each wrapper. 2. Select Convert to Menu Command…. 3. Name the command as you want it to appear in the Tools > Marionette Commands menu. Step 3: Use the Commands 1. Select an image (bitmap) on your drawing area. 2. Navigate to Tools > Marionette Commands > [Your Command Name]. 3. Test with sample bitmaps provided in the file’s Sample Images design layer. Special Notes: • Running Commands: Important: These Marionette Wrappers cannot be run directly from the drawing area because they act on selected objects. You must run them from the Tools > Marionette Commands menu. • Installing Pillow: The Pillow library will be installed to your User Folder. If needed, reinstall it using the provided Install Pillow node. • Image Import Settings: For the AI to Prop commands, always import images as JPEG. Importing as PNG will cause display issues. Use the AI to Prop with Dialog command to manually adjust import settings if needed. Once configured, the non-dialog version will reuse the last settings automatically. • Temporary Files: The script creates temporary images in your User Folder. These files can be deleted at any time.
  5. Version 1.2

    15 downloads

    This node imports multiple images at once, provided the image name and the image. In the IOP, you can specify whether you want the file to be imported as an image, a 2D texture, or both. The ‘GetFiles’ node was provided by @DomC ---------------------- Ce node importe plusieurs images en une seule fois, fourni le nom de l'image et l'image. Dans la IOP vous pouvez spécifiez si vous vous que le fichier soit importé en tant qu'image, texture 2D ou les deux à la fois. Le node 'GetFiles' a été fourni par @DomC.
  6. Version 1.0.1

    7 downloads

    In order to use clear labels, I need the plant ID to be legible. This script automatically creates a new ID based on the botanical name of the plant by taking the first two letters of the genus, species, and variety and capitalizing them for better readability. This formula can of course be modified. First, place your plants on a layer, recalculate the table, and run the script. There is a script to automatically place the symbols on a layer if you have many plants in the file. Thanks @Marissa Farrell for putting me on the right track!😉 ------------ Pour pouvoir utiliser des étiquettes claires, j'ai besoin que l'ID de la plante soit lisible. Ce script permet de créer automatique un nouvel ID en fonction du nom botanique de la plante en prenant les deux premières lettres du genre, de l’espèce et de la variété et leur mettant une majuscule pour une meilleure lisibilité. Cette formule peut être modifiée bien entendu. Placez d’abord vos plantes sur une couche, recalculez le tableau et lancez le script. Il y a un script pur placer automatiquement les symboles sur une couche si vous avez de nombreuses plantes dans le fichier.
  7. Hello, I've looked everywhere but can't find it. Does anyone have a node that can return the number of subrows in a given row in a table? Input: Table name is OK (get worksheet) Input: Row number (Int) Output: Number of subrows (Int) Thanks!!
  8. Hello is a way to duplicate a folder with all the symbols def it contains ? Or select multiple symbols def and duplicate it at once ? I've a look in marionette , but can't find a way to select symbols def or symbol folders And I've no knowledge in scripting 😞 thanks
  9. Hello everyone, I am experiencing unexpected behavior when executing a Marionette command I created. To explain the script: I want to get a pop-up that shows me the perimeter and area of a drawn object (polygon, polyline, square, circle, ellipse, etc.). That works so far. The only problem is that after the command, all objects are converted to a polyline. I would like the objects to remain as they were originally. For example, a square. Does anyone have any idea what I'm doing wrong? File and a little step by step picture attached. Thanks in advance. Laenge+Flaeche.vwx
  10. Hallo, a general question - not to a spesific network: In bigger networks I experience sometimes performance issues (e.g. long calculation times). Is there a list of things that are performance killers or a guideline of what to avoid? What are the top performance killers in marionette networks? What are things in general I can do to increase the performance? Thanks a lot 🙂
  11. Hi everyone, I'm new but I think I didn't make much of a mistake...or I hope! I have this script that I need to extrude a polygon and attach a record. I would like to use the Record Dialog to set to my external database and then automatically connect a description, code and UM. The file is attached...if you need it, I'll also give you a part of the database, but I have to work on it for sensitive data! Thank you very much Senza Titolo 5 v2025.vwx
  12. I'm building a simple hybrid object in Marionette. Now I'd like to use materials in the object. There seem to be no nodes for materials in Marionette. I'm missing 2 nodes: A 'materials popup' node to select a material from the available materials in the current document. A 'set material' node to attach a material by name to an object by handle. I've been able to create the latter. But when I create the 'materials popup' node, I'm running into an issue. When I create the node, it lists the materials in the document correctly, but when I add a material to the document, it doesn't update except when I save the current document... I'm attaching my custom nodes. Geëxporteerd bestand Marionette.vwx
  13. Hi everyone, I am in the process of creating a kind of wiki from a worksheet in Vectorworks. Column 1 of the worksheet shows the topic. Column 2 of the worksheet contains a suitable hyperlink. The aim is to select a topic via a pop-up query and then get a pop-up that contains a clickable hyperlink. So far I have only managed to display the hyperlink as text. However, this is not clickable. Does anyone have an idea if it is possible to get a working hyperlink in the pop-up? Thanks in advance. Test Marionette Wiki.vwx
  14. Hi I am a long-in-the-tooth programmer but quite new to VW and it's associated scripting abilities. I have spent quite a while doing a summary search for the ability to automatically place objects in a document from a Resource folder, e.g. a group of plants. It would be like being able to Ctrl-A on a folders content and dragging and dropping into the document. I've learnt quite a bit but not stumbled upon the ability to script such a function. So I dont know if this is even possible! Can anybody help? This could be a scripting in any of the acceptable types or perhaps a standard feature of VW I have yet to discover. Thanks Matthew
  15. Hi all, I'm starting with some basic marionette stuff to get a better understanding and I'm running into a little bit of a problem that I can't seem to figure out. I've created a small script which creates a rectangle and uses control geometry to determine the size of the created rectangle. Once I wrap the script and convert it to an object node with control geometry the object, the control geometry and the generated rectangle become misaligned. Furthermore, when i adjust the size of the control geometry the origin of the generated rectangle seems to shift. Does anyone know why this might be happening? I've attached a screen shot of the issue below. Thank you, Derek
  16. I have a marionette network that begins with a UI Boolean into an "If Switch," but the entire network runs regardless of if a value is sent down a certain path or not. Is there a way I can prevent part of the network from running if the "if Switch" doesn't send data down the line? Below is a screenshot of the current node structure:
  17. Hi, everyone I have two problems with inserting and mirroring symbols with a marionette. When inserting I don't get a Z position. When mirroring, the symbol is shifted in the Y-axis. Is the knot correct? Who can help? thank you Problem.vwx
  18. I used many symbols in my project. Now I want to find symbols with the same name and replace them with a different symbol. Which node can I use to get the name of the inserted symbol? Thanks for your help!
  19. Hi there, I am using more and more data tags to display information from plug-in objects (trusses, hoists, lights...). Therefore ALL or SELECTED eligible mode is the one I use - because I want to tag hundreds of items with one click. F.e. a custom hoist tag or a tag for truss length etc. But this is the same for any tag or any plug-in object. I color this tags with data visualization depending on their tagged information or I use them in marionette. To be able to do this you have to set a "link to data source" (a record) inside the tag field and attach this record to the tag itself. Then the information from the tag field is not only displayed in the tag - it is also written into the record field. And this record field is used within data viz, marionette and so on... The record must not be used for the objects you are tagging. No comes the problem: With a record attached to the tag but not to the object ALL or SELECTED eligible mode is not possible Why is this the case? For making it short I quote @Nikolay Zhelyazkov who was really helpful about this topic: I can understand why the modes aren't allowed, but for my work there is actually no other way around and I think I am not the only one. So what could be a solution? I don't know if this is possible, but maybe this could be one: Only in the ALL or SELECTED mode: If it is detected, that a record is required at the objects for the tag to work 1. display the dialog as you get in SINGLE or LABEL mode 2. but don't give the option to "don't show this dialog again. Always do the selected action." for the dialog. 3. display the dialog with every use of the tool only once - not for every conflict it goes through 4. For every conflict do the same choice like you decided in the dialog PROS: + nothing will change for the currently working modes + ALL/SELECTED will work for this scenario CONS: - no possibility to hide the dialog completely - different choices within a tagging is not possible -> select the ones you want to have the same choice and run SELECTED mode. If you also want to have this to work please vote this up! --------------------------------------------------------------- Setting up the data link: The error message you are given in ALL/SELECTED mode: The dialog you get in SINGLE eligible mode: Original thread with more background information : How to set up a data tag for use in data visualization: Thank you @Tom W. @Nikolay Zhelyazkov for helping me out
  20. When I'm doing plant orders I like to colour cells once I know an order is complete for that particular plant. I do everything in worksheets as have never found the plant database thing useful to how I work. Doing this manually is tedious: 1 select cell 2 right click 3 format 4 select format tab 5 dropdown 6 solid 7 Select colour 8 Ok I do not yet work with Marionette but have seen a few work nodes that mention colouring worksheet cells, but haven't found anything like this.
  21. I've created this pendant light and now wish to control how far down from the ceiling it will hang. That is, how far the light parts will hang down from the mounting pieces. Can I utilize Marionette and constraints for this? How do I get the nodes to drive the properties of existing geometry? Also, how to I get the insertion of the symbol to relate to a level in a story? Thanks, Rudy Beuc Pendant Accent Blue.vwx
  22. Would be great if someone at VW could develop a marionette network to send data to Passive House energy modeling tool PHPP similar to what Perkins Will has done here in Rhino. https://research.perkinswill.com/wp-content/uploads/2021/06/2020-Fall-incubator_CheneyCillian_compress.pdf Maybe this should be tied into the Energos development team.
  23. Hi, I'm trying to build a workflow that can create plant symbols from data supplied from a spreadsheet. Since create plant style function is not available, my idea is to duplicate an existing plant symbol then replace the record values. I have customized a node which contains CreateDuplicateObject (to create a duplicate of the original symbol), SetName (to assign a name to the new symbol) and Plant_UpdatedTranslat (to give the new plant symbol a different ID). It seems doing the job. I can see that the symbol has been created, the name and ID have both changed from the Resource Manager preview. But things became strange when I inspect the plant style setting. The duplicate has the exact same name and ID as the original which means the data preview in the resource manager is incorrect. I'm not sure what I did wrong. I suspect some of the plant data cannot be updated by script such as Latin Name, Scheduled Size etc. as the 'Set Record Field' node does not seem to work on tree symbols. If someone can help that would be greatly appreciated.
  24. Hi, I wish that instead of developing energos and other analysis marionnette objects specific for Vectorworks and with limitations, that could be created the integration of ladybug tools. https://www.ladybug.tools They are open tools, and written in Python. Today, they are usable with Rhino. Don’t be afraid of the first look, those tools are awesome and allow to make really precise analysis based on open source and recognised calculation engines like energy+ or OpenFOAM : - thermo dynamic simulation - energy needs - illuminance - airflows - summer comfort - shadows analysis - … As there is marionnette inside Vectorworks, it should not be really complicated to use those tools with vectorworks for the 3D model part instead of Rhino. And thought that it would make Vectorworks the only Architect CAD software that allows you to make precise analysis, but it seems that there is already a commercial Revit plugin… Nevertheless, this connection between Ladybug tools and Vectorworks would be awesome. Best, Gaëtan https://docs.ladybug.tools/ladybug-tools-academy/v/climate-analysis/sun-path-sky-mask-and-direct-sun-hours
  25. It seems like Marionette doesn't work with Project Sharing. Or am I missing something? I created a test file with some Marionette objects. I put it in Dropbox and saved it as a Project Sharing file. I opened a Working File, and everything worked as expected. I signed out of my main user account and went to my evil twin user account, where I created another Working File. There, when I tried to modify a Marionette, it simply disappeared. When I edited the script for another Marionette, its wires (in a network symbol) were disconnected or, mostly, just non-existent. With the Select Similar tool, I determined that the invisible Marionettes still had some kind of presence. When I returned to my main user account and refreshed that Working File, the Marionettes seem to work as expected, but the invisible ones still have their presence.
×
×
  • Create New...