181 lines
4.7 KiB
Python
181 lines
4.7 KiB
Python
# SPDX-License: LGPL-2.1-or-later
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any, Final
|
|
|
|
from Base.Metadata import constmethod, export
|
|
|
|
from App.Part import Part
|
|
|
|
|
|
@export(Include="Mod/Assembly/App/AssemblyObject.h", Namespace="Assembly")
|
|
class AssemblyObject(Part):
|
|
"""
|
|
This class handles document objects in Assembly
|
|
|
|
Author: Ondsel (development@ondsel.com)
|
|
License: LGPL-2.1-or-later
|
|
"""
|
|
|
|
@constmethod
|
|
def solve(self) -> Any:
|
|
"""Solve the assembly and update part placements.
|
|
|
|
solve(enableRedo=False) -> int
|
|
|
|
Args:
|
|
enableRedo: Whether the solve save the initial position of parts
|
|
to enable undoing it even without a transaction.
|
|
Defaults to `False` ie the solve cannot be undone if called
|
|
outside of a transaction.
|
|
|
|
Returns:
|
|
0 in case of success, otherwise the following codes in this order of
|
|
priority:
|
|
-6 if no parts are fixed.
|
|
-4 if over-constrained,
|
|
-3 if conflicting constraints,
|
|
-5 if malformed constraints
|
|
-1 if solver error,
|
|
-2 if redundant constraints."""
|
|
...
|
|
|
|
@constmethod
|
|
def generateSimulation(self) -> Any:
|
|
"""Generate the simulation.
|
|
|
|
solve(simulationObject) -> int
|
|
|
|
Args:
|
|
simulationObject: The simulation Object.
|
|
|
|
Returns:
|
|
0 in case of success, otherwise the following codes in this order of
|
|
priority:
|
|
-6 if no parts are fixed.
|
|
-4 if over-constrained,
|
|
-3 if conflicting constraints,
|
|
-5 if malformed constraints
|
|
-1 if solver error,
|
|
-2 if redundant constraints."""
|
|
...
|
|
|
|
@constmethod
|
|
def updateForFrame(self) -> Any:
|
|
"""Update entire assembly to frame number specified.
|
|
|
|
updateForFrame(index)
|
|
|
|
Args: index of frame.
|
|
|
|
Returns: None"""
|
|
...
|
|
|
|
@constmethod
|
|
def numberOfFrames(self) -> Any:
|
|
"""numberOfFrames()
|
|
|
|
Args: None
|
|
|
|
Returns: Number of frames"""
|
|
...
|
|
|
|
@constmethod
|
|
def undoSolve(self) -> Any:
|
|
"""Undo the last solve of the assembly and return part placements to their initial position.
|
|
|
|
undoSolve()
|
|
|
|
Returns: None"""
|
|
...
|
|
|
|
@constmethod
|
|
def ensureIdentityPlacements(self) -> Any:
|
|
"""Makes sure that LinkGroups or sub-assemblies have identity placements.
|
|
|
|
ensureIdentityPlacements()
|
|
|
|
Returns: None"""
|
|
...
|
|
|
|
@constmethod
|
|
def clearUndo(self) -> Any:
|
|
"""Clear the registered undo positions.
|
|
|
|
clearUndo()
|
|
|
|
Returns: None"""
|
|
...
|
|
|
|
@constmethod
|
|
def isPartConnected(self) -> Any:
|
|
"""Check if a part is connected to the ground through joints.
|
|
|
|
isPartConnected(obj) -> bool
|
|
|
|
Args: document object to check.
|
|
|
|
Returns: True if part is connected to ground"""
|
|
...
|
|
|
|
@constmethod
|
|
def isJointConnectingPartToGround(self) -> Any:
|
|
"""Check if a joint is connecting a part to the ground.
|
|
|
|
isJointConnectingPartToGround(joint, propName) -> bool
|
|
|
|
Args:
|
|
- joint: document object of the joint to check.
|
|
- propName: string 'Part1' or 'Part2' of the joint.
|
|
|
|
Returns: True if part is connected to ground"""
|
|
...
|
|
|
|
@constmethod
|
|
def isPartGrounded(self) -> Any:
|
|
"""Check if a part has a grounded joint.
|
|
|
|
isPartGrounded(obj) -> bool
|
|
|
|
Args:
|
|
- obj: document object of the part to check.
|
|
|
|
Returns: True if part has grounded joint"""
|
|
...
|
|
|
|
@constmethod
|
|
def exportAsASMT(self) -> Any:
|
|
"""Export the assembly in a text format called ASMT.
|
|
|
|
exportAsASMT(fileName:str)
|
|
|
|
Args:
|
|
fileName: The name of the file where the ASMT will be exported."""
|
|
...
|
|
|
|
@constmethod
|
|
def getDownstreamParts(self, start_part: "App.DocumentObject", joint_to_ignore: "App.DocumentObject",
|
|
/) -> list["App.DocumentObject"]:
|
|
"""
|
|
Finds all parts connected to a start_part that are not connected to ground
|
|
when a specific joint is ignored.
|
|
|
|
getDownstreamParts(start_part, joint_to_ignore) -> list
|
|
|
|
This is used to find the entire rigid group of unconstrained components that
|
|
should be moved together during a pre-solve operation or a drag.
|
|
|
|
Args:
|
|
start_part: The App.DocumentObject to begin the search from.
|
|
joint_to_ignore: The App.DocumentObject (a joint) to temporarily
|
|
suppress during the connectivity check.
|
|
|
|
Returns:
|
|
A list of App.DocumentObject instances representing the downstream parts.
|
|
"""
|
|
...
|
|
|
|
Joints: Final[list]
|
|
"""A list of all joints this assembly has."""
|