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.typ options 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.
  • 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-a or node-b).
  • S3D.structure.members.align(member_id, nodeA_id, nodeB_id, axis_to_align, alignment_vector)

    • Re-orient local member axis (y or z) to a target vector.

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); call S3D.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 ID2 into ID1, rewires references, removes resulting invalid members, then deletes ID2.
  • 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, then S3D.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 nodes array/string or nodeA/nodeB/nodeC(/nodeD).
    • Common args: thickness, material_id, offset, rotZ, holes, diaphragm_*, drilling_stiffness_factor.
  • 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_plates and pressures.

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(...)