115 lines
3.5 KiB
Python
115 lines
3.5 KiB
Python
|
|
"""
|
||
|
|
NX Journal to verify if expressions are linked to geometry
|
||
|
|
|
||
|
|
This journal will:
|
||
|
|
1. Open Bracket.prt
|
||
|
|
2. Print current expression values
|
||
|
|
3. Print geometry bounding box / feature parameters
|
||
|
|
4. Check if expressions control any features
|
||
|
|
"""
|
||
|
|
|
||
|
|
import NXOpen
|
||
|
|
import sys
|
||
|
|
|
||
|
|
def main(args):
|
||
|
|
theSession = NXOpen.Session.GetSession()
|
||
|
|
|
||
|
|
# Open Bracket.prt
|
||
|
|
prt_file = r"C:\Users\antoi\Documents\Atomaste\Atomizer\examples\bracket\Bracket.prt"
|
||
|
|
print(f"Opening {prt_file}...")
|
||
|
|
|
||
|
|
try:
|
||
|
|
basePart, partLoadStatus = theSession.Parts.OpenActiveDisplay(
|
||
|
|
prt_file,
|
||
|
|
NXOpen.DisplayPartOption.AllowAdditional
|
||
|
|
)
|
||
|
|
partLoadStatus.Dispose()
|
||
|
|
|
||
|
|
workPart = theSession.Parts.Work
|
||
|
|
|
||
|
|
print("\n" + "="*60)
|
||
|
|
print("EXPRESSION VALUES:")
|
||
|
|
print("="*60)
|
||
|
|
|
||
|
|
# Get expressions
|
||
|
|
tip_thickness = workPart.Expressions.FindObject("tip_thickness")
|
||
|
|
support_angle = workPart.Expressions.FindObject("support_angle")
|
||
|
|
|
||
|
|
if tip_thickness:
|
||
|
|
print(f"tip_thickness = {tip_thickness.Value}")
|
||
|
|
else:
|
||
|
|
print("ERROR: tip_thickness expression not found!")
|
||
|
|
|
||
|
|
if support_angle:
|
||
|
|
print(f"support_angle = {support_angle.Value}")
|
||
|
|
else:
|
||
|
|
print("ERROR: support_angle expression not found!")
|
||
|
|
|
||
|
|
print("\n" + "="*60)
|
||
|
|
print("CHECKING FEATURE DEPENDENCIES:")
|
||
|
|
print("="*60)
|
||
|
|
|
||
|
|
# Check if any features reference these expressions
|
||
|
|
features = workPart.Features
|
||
|
|
for feature in features:
|
||
|
|
try:
|
||
|
|
# Get feature parameters
|
||
|
|
params = feature.GetFeatureParameters()
|
||
|
|
for param in params:
|
||
|
|
try:
|
||
|
|
# Check if parameter uses our expressions
|
||
|
|
expr = param.RightHandSide
|
||
|
|
if expr and hasattr(expr, 'Name'):
|
||
|
|
if 'tip_thickness' in expr.Name or 'support_angle' in expr.Name:
|
||
|
|
print(f" Feature '{feature.Name}' uses expression '{expr.Name}'")
|
||
|
|
except:
|
||
|
|
pass
|
||
|
|
except:
|
||
|
|
pass
|
||
|
|
|
||
|
|
print("\n" + "="*60)
|
||
|
|
print("PART BOUNDING BOX:")
|
||
|
|
print("="*60)
|
||
|
|
|
||
|
|
# Get bounding box (shows overall geometry size)
|
||
|
|
try:
|
||
|
|
bodies = workPart.Bodies
|
||
|
|
if bodies and len(bodies) > 0:
|
||
|
|
body = bodies[0]
|
||
|
|
# Get bounding box
|
||
|
|
corner1 = [0.0, 0.0, 0.0]
|
||
|
|
directions = [[0.0]*3, [0.0]*3, [0.0]*3]
|
||
|
|
distances = [0.0, 0.0, 0.0]
|
||
|
|
|
||
|
|
theUfSession = NXOpen.UF.UFSession.GetUFSession()
|
||
|
|
theUfSession.Modl.AskBoundingBoxExact(body.Tag, corner1, directions, distances)
|
||
|
|
|
||
|
|
print(f" X extent: {distances[0]:.2f}")
|
||
|
|
print(f" Y extent: {distances[1]:.2f}")
|
||
|
|
print(f" Z extent: {distances[2]:.2f}")
|
||
|
|
except Exception as e:
|
||
|
|
print(f" Could not get bounding box: {e}")
|
||
|
|
|
||
|
|
print("\n" + "="*60)
|
||
|
|
print("ALL EXPRESSIONS IN PART:")
|
||
|
|
print("="*60)
|
||
|
|
|
||
|
|
# List all expressions
|
||
|
|
for expr in workPart.Expressions:
|
||
|
|
print(f" {expr.Name} = {expr.Value} (units: {expr.Units if hasattr(expr, 'Units') else 'N/A'})")
|
||
|
|
|
||
|
|
print("\n" + "="*60)
|
||
|
|
print("Done!")
|
||
|
|
|
||
|
|
return True
|
||
|
|
|
||
|
|
except Exception as e:
|
||
|
|
print(f"ERROR: {e}")
|
||
|
|
import traceback
|
||
|
|
traceback.print_exc()
|
||
|
|
return False
|
||
|
|
|
||
|
|
if __name__ == '__main__':
|
||
|
|
success = main(sys.argv[1:])
|
||
|
|
sys.exit(0 if success else 1)
|