S3D.structure (2)
Source: S3D.structure.members in js/structure/members.js.
Most Useful (Model Editing)#
S3D.structure.members.add(args)- Add one member. Returns new/existing member ID.
- Common args:
nodeA,nodeB,section_id,type,fixityA,fixityB,offsetsA,offsetsB,copy_properties_id,dont_overwrite_if_exists.
S3D.structure.members.remove(ids)- Remove one or many members.
- Also removes associated member-based loads and related generated area-load data.
S3D.structure.members.intersect(details)- Split a member by rule and (optionally) create split nodes only.
details.typoptions include:splitStr,equalParts,intersectingNodes,intersecting_selected_nodes,intersectingMembers,position.
S3D.structure.members.splitMembersUsingIntersectingNodes(member_id, node_splits, dont_split_members, node_splits_are_ids, s3d_model)- Low-level splitter used by
S3D.structure.members.intersect(). - Handles load redistribution and preserves key member behavior.
- Low-level splitter used by
S3D.structure.members.join(m1, m2)- Join 2 connected members into one and remap member loads to merged positions.
S3D.structure.members.changeLength(member_IDs, new_length, dirn, redraw)- Change member length by moving node A or node B (
dirn:node-aornode-b).
- Change member length by moving node A or node B (
S3D.structure.members.align(member_id, nodeA_id, nodeB_id, axis_to_align, alignment_vector)- Re-orient local member axis (
yorz) to a target vector.
- Re-orient local member axis (
Geometry / Query Helpers#
S3D.structure.members.getLength(id, consider_offsets, s3d_model)S3D.structure.members.getVector(id)S3D.structure.members.getCOG(id, consider_offsets)S3D.structure.members.getMass(id)S3D.structure.members.getIntersectingNodes(args)S3D.structure.members.getAllMemberNodes(return_member_ids)S3D.structure.members.getAssociations(member_ids, filters)
Type / Property Checks#
S3D.structure.members.isRigid(index)S3D.structure.members.isNonPrismatic(id)S3D.structure.members.getNonPrismaticMembers()S3D.structure.members.usesInsertionPoints(id)
Utility Math / Transform Helpers#
S3D.structure.members.percentageSplit(A, B, percent)S3D.structure.members.getTransformationMatrix(...)S3D.structure.members.getTransormationMatrix(...)(typo alias kept for compatibility)S3D.structure.members.getLocalAxesVectors(...)S3D.structure.members.getAlignmentRotation(...)S3D.structure.members.globalToLocal(...)S3D.structure.members.localToGlobal(...)
UI Helpers (Usually not needed in automation scripts)#
S3D.structure.members.relativeMemberPopup(open_at_node)S3D.structure.members.closeRelativeMemberPopup()S3D.structure.members.relativeMember(str, node_a, preview_only)S3D.structure.members.splitMemberPopup()S3D.structure.members.openAlignmentTool(member_IDs)S3D.structure.members.changeMemberLengthPopup()S3D.structure.members.editDesignParams(member_ids)(placeholder/todo)
Notes for LLM Usage#
- Prefer script-safe methods:
S3D.structure.members.add/remove/intersect/join/changeLength/align/getAssociations. - Many methods read/write global arrays (
elements,nodes, loads); callS3D.UI.update({ redraw:true, update_undo:true })after batch edits. S3D.structure.members.remove()and splitting methods can mutate related load objects as side effects (intended behavior).
S3D Nodes API (Public, Script-Useful)#
Source: S3D.structure.nodes in js/structure/nodes.js.
Most Useful (Model Editing)#
S3D.structure.nodes.add(args)- Add node, with optional merge-by-tolerance behavior.
- Common args:
x,y,z,ID,tol/tolerance,precision,prompt_merge,s3d_model.
S3D.structure.nodes.remove(ids, dont_delete_meshed_plates)- Remove node(s) and clean dependent entities (members, supports, loads, plate refs, etc.).
S3D.structure.nodes.merge(ID1, ID2)- Merge node
ID2intoID1, rewires references, removes resulting invalid members, then deletesID2.
- Merge node
S3D.structure.nodes.mergeAll(tol)- Batch-merge close nodes using tolerance (unit-aware defaults if omitted).
S3D.structure.nodes.mergeTwoSelectedNodes(node_A_ID, node_B_ID)- UI-oriented helper around merge + update + user feedback.
S3D.structure.nodes.moveModelToOrigin(model_dat, redraw)- Shift all nodes so minimum XYZ is at origin.
Geometry / Query Helpers#
S3D.structure.nodes.getDistance(ID1, ID2, s3d_model)S3D.structure.nodes.getVector(nodeIdFrom, nodeIdTo)S3D.structure.nodes.clockwise(nodes_to_check, flip_direction, just_check_if_compat)S3D.structure.nodes.classify()S3D.structure.nodes.getAssociations(node_ids, filters, include_member_loads = true, include_plate_loads = true)
Utility Helpers#
S3D.structure.nodes.roundNodes(round_by)S3D.structure.nodes.joinNodeToMembers(merge_nodes, member, make_changes)
Notes for LLM Usage#
- For cleanup tasks, use
S3D.structure.nodes.getAssociations()first, thenS3D.structure.nodes.remove()/S3D.structure.nodes.merge(). S3D.structure.nodes.remove()has broad side effects by design (it cascades deletions/updates).- After direct edits, run
S3D.UI.update({ redraw:true, update_undo:true, update_transformations:true }).
S3D Plates API (Public, Script-Useful)#
Source: S3D.structure.plates in js/structure/plates.js.
Most Useful (Model Editing)#
S3D.structure.plates.add(args)- Add plate from
nodesarray/string ornodeA/nodeB/nodeC(/nodeD). - Common args:
thickness,material_id,offset,rotZ,holes,diaphragm_*,drilling_stiffness_factor.
- Add plate from
S3D.structure.plates.remove(ids)- Remove plate(s), unmesh first, and remove related pressures + plate thermal loads.
S3D.structure.plates.removeDuplicates()- Removes duplicate parent plates (and meshed duplicates) by node sets.
S3D.structure.plates.merge(plate_ids)- Merges selected plates into one plate (UI-style utility; includes unmesh/update).
S3D.structure.plates.sync()- Cleans plate hole node lists (removes missing/invalid hole definitions).
S3D.structure.plates.forcePlateToBeMeshed(plate_id, only_check)- Force-meshes eligible tri/quad parent plates without holes.
S3D.structure.plates.align(ref_plate_id, ref_plate_type, plate_id, plate_type)- Aligns plate local axes/orientation to a reference plate.
S3D.structure.plates.alignMeshedPlatesToParent(parent_plate_id, do_not_update)- Aligns all child meshed plates to the parent plate.
Geometry / Query Helpers#
S3D.structure.plates.getArea(id, custom_nodes, skip_holes)S3D.structure.plates.getMass(id, area)S3D.structure.plates.getCOG(id, plate_nodes, consider_offsets)S3D.structure.plates.get3DPlanarPolygonArea(nodes_list)S3D.structure.plates.getPolygon2DPoints(node_ids, plate_id)S3D.structure.plates.first3NonColinearNodes(nodes_set)S3D.structure.plates.areNodesAreInHorizontalPlane(nodes_ids, show_alert)
Associations / Node Maps#
S3D.structure.plates.getAllPlateNodes()- Map node -> parent plate IDs.
S3D.structure.plates.getAllMeshNodes()- Flags mesh-only/internal nodes (excludes parent plate corner nodes).
S3D.structure.plates.getAssociations(plate_ids, filters)- Returns plate references in
meshed_platesandpressures.
- Returns plate references in
API passthrough helpers#
S3D.structure.plates.getTransformationMatrix(...)/S3D.structure.plates.getTransormationMatrix(...)(compat typo alias)S3D.structure.plates.getLocalAxesVectors(...)S3D.structure.plates.getNormalVector(...)S3D.structure.plates.globalToLocal(...)S3D.structure.plates.localToGlobal(...)