#usda 1.0 ( doc = """Reusable single-pump USD asset for the OPC UA - OpenUSD Bindings pump twin. The server composes one referenced prim per configured pump (--pumps N), so the rendered hall holds exactly the pumps the connected server simulates - nothing else (spec 5.12, CompositionArc = Reference). Generated by generate_pump_assets.py from the /Plant/Pumps/P101 master in Plant.usda, so every composed pump renders at the same fidelity: an EN 733 size 65-200 end-suction centrifugal pump (Grundfos NK / KSB Etanorm proportions) driven by an IEC 160M motor on a 1.80 x 0.46 m baseplate, shaft centreline 0.160 m above the baseplate. Do not edit by hand - edit P101 and re-run the generator. The asset carries its own instrumentation and indications - pressure and bearing-temperature gauges, suction vessel, cooling fan, the alarm ring and the two fault halos - because each composed pump is driven by its own bindings and has to show its own state. The root prim declares an identity xformOp:transform and lists it in xformOpOrder because that is what makes the bay position binding work. A connector resolves a Translation render target into a single matrix op, and USD only evaluates ops named in xformOpOrder - a list that is uniform, so the connector cannot add itself to it from a stronger layer. If the asset omits the op, the bay position is silently discarded, every composed pump renders on the origin, and the hall looks like it holds a single machine.""" defaultPrim = "Pump" metersPerUnit = 1 upAxis = "Z" ) def Xform "Pump" ( kind = "component" ) { matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1) ) uniform token[] xformOpOrder = ["xformOp:transform"] def Scope "Looks" { def Material "PumpBlue" { token outputs:surface.connect = def Shader "Surface" { uniform token info:id = "UsdPreviewSurface" color3f inputs:diffuseColor = (0.02, 0.24, 0.60) float inputs:metallic = 0.1 float inputs:roughness = 0.45 token outputs:surface } } def Material "MotorGrey" { token outputs:surface.connect = def Shader "Surface" { uniform token info:id = "UsdPreviewSurface" color3f inputs:diffuseColor = (0.60, 0.61, 0.60) float inputs:metallic = 0.2 float inputs:roughness = 0.50 token outputs:surface } } def Material "Galvanised" { token outputs:surface.connect = def Shader "Surface" { uniform token info:id = "UsdPreviewSurface" color3f inputs:diffuseColor = (0.68, 0.70, 0.72) float inputs:metallic = 0.8 float inputs:roughness = 0.35 token outputs:surface } } def Material "DarkSteel" { token outputs:surface.connect = def Shader "Surface" { uniform token info:id = "UsdPreviewSurface" color3f inputs:diffuseColor = (0.16, 0.17, 0.19) float inputs:metallic = 0.6 float inputs:roughness = 0.55 token outputs:surface } } def Material "Bronze" { token outputs:surface.connect = def Shader "Surface" { uniform token info:id = "UsdPreviewSurface" color3f inputs:diffuseColor = (0.72, 0.53, 0.24) float inputs:metallic = 0.9 float inputs:roughness = 0.30 token outputs:surface } } } def Xform "Baseplate" { def Cube "Plate" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.20, 0.21, 0.23)] rel material:binding = double3 xformOp:translate = (-0.08, 0, 0.06) double3 xformOp:scale = (1.80, 0.46, 0.12) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } def Cube "PumpPad" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.26, 0.27, 0.29)] rel material:binding = double3 xformOp:translate = (-0.62, 0, 0.135) double3 xformOp:scale = (0.44, 0.40, 0.03) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } def Cube "MotorRailA" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.26, 0.27, 0.29)] rel material:binding = double3 xformOp:translate = (0.31, -0.105, 0.1365) double3 xformOp:scale = (0.62, 0.07, 0.033) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } def Cube "MotorRailB" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.26, 0.27, 0.29)] rel material:binding = double3 xformOp:translate = (0.31, 0.105, 0.1365) double3 xformOp:scale = (0.62, 0.07, 0.033) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } def Cube "LiftingLugA" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.24, 0.25, 0.27)] rel material:binding = double3 xformOp:translate = (-0.86, -0.24, 0.10) double3 xformOp:scale = (0.10, 0.014, 0.05) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } def Cube "LiftingLugB" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.24, 0.25, 0.27)] rel material:binding = double3 xformOp:translate = (0.70, 0.24, 0.10) double3 xformOp:scale = (0.10, 0.014, 0.05) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } } def Cylinder "Body" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "X" double height = 0.110 double radius = 0.1775 color3f[] primvars:displayColor = [(0.02, 0.24, 0.60)] rel material:binding = double3 xformOp:translate = (-0.645, 0, 0.28) uniform token[] xformOpOrder = ["xformOp:translate"] def Material "Mat" { token outputs:surface.connect = def Shader "Surface" { uniform token info:id = "UsdPreviewSurface" color3f inputs:diffuseColor = (0.02, 0.24, 0.60) float inputs:metallic = 0.1 float inputs:roughness = 0.45 token outputs:surface } } } def Xform "Casing" { def Cylinder "VoluteShoulder" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "X" double height = 0.070 double radius = 0.196 color3f[] primvars:displayColor = [(0.02, 0.22, 0.55)] rel material:binding = double3 xformOp:translate = (-0.645, 0.014, 0.293) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cube "Foot" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.02, 0.22, 0.55)] rel material:binding = double3 xformOp:translate = (-0.645, 0, 0.1875) double3 xformOp:scale = (0.11, 0.30, 0.135) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } def Cube "FootPad" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.02, 0.20, 0.50)] rel material:binding = double3 xformOp:translate = (-0.645, 0, 0.159) double3 xformOp:scale = (0.16, 0.36, 0.018) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } def Cylinder "DrainPlug" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "Z" double height = 0.022 double radius = 0.016 color3f[] primvars:displayColor = [(0.72, 0.53, 0.24)] rel material:binding = double3 xformOp:translate = (-0.700, 0, 0.115) uniform token[] xformOpOrder = ["xformOp:translate"] } } def Xform "Suction" { def Cylinder "Flange" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "X" double height = 0.020 double radius = 0.100 color3f[] primvars:displayColor = [(0.02, 0.22, 0.55)] rel material:binding = double3 xformOp:translate = (-0.860, 0, 0.28) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cylinder "Neck" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "X" double height = 0.055 double radius = 0.051 color3f[] primvars:displayColor = [(0.02, 0.22, 0.55)] rel material:binding = double3 xformOp:translate = (-0.822, 0, 0.28) uniform token[] xformOpOrder = ["xformOp:translate"] # Own material, so the suction line can be tinted by the # pumped fluid temperature without recolouring every other # blue casting that shares the Looks scope. def Material "Mat" { token outputs:surface.connect = def Shader "Surface" { uniform token info:id = "UsdPreviewSurface" color3f inputs:diffuseColor = (0.02, 0.22, 0.55) float inputs:metallic = 0.1 float inputs:roughness = 0.45 token outputs:surface } } } # Cavitation indication, at the suction eye where the fault is. # Hidden until the supervision state asserts. def Sphere "CavitationHalo" { double radius = 0.090 color3f[] primvars:displayColor = [(0.95, 0.85, 0.15)] token visibility = "invisible" double3 xformOp:translate = (-0.845, 0, 0.28) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cylinder "BoltTop" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "X" double height = 0.034 double radius = 0.009 color3f[] primvars:displayColor = [(0.55, 0.56, 0.58)] rel material:binding = double3 xformOp:translate = (-0.860, 0, 0.360) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cylinder "BoltBottom" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "X" double height = 0.034 double radius = 0.009 color3f[] primvars:displayColor = [(0.55, 0.56, 0.58)] rel material:binding = double3 xformOp:translate = (-0.860, 0, 0.200) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cylinder "BoltLeft" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "X" double height = 0.034 double radius = 0.009 color3f[] primvars:displayColor = [(0.55, 0.56, 0.58)] rel material:binding = double3 xformOp:translate = (-0.860, -0.080, 0.28) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cylinder "BoltRight" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "X" double height = 0.034 double radius = 0.009 color3f[] primvars:displayColor = [(0.55, 0.56, 0.58)] rel material:binding = double3 xformOp:translate = (-0.860, 0.080, 0.28) uniform token[] xformOpOrder = ["xformOp:translate"] } } def Xform "SuctionVessel" { double3 xformOp:translate = (-1.35, 0, 0) uniform token[] xformOpOrder = ["xformOp:translate"] def Cylinder "Shell" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "Z" double height = 1.05 double radius = 0.30 color3f[] primvars:displayColor = [(0.55, 0.56, 0.58)] rel material:binding = double3 xformOp:translate = (0, 0, 0.525) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cylinder "Skirt" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "Z" double height = 0.04 double radius = 0.32 color3f[] primvars:displayColor = [(0.30, 0.31, 0.33)] rel material:binding = double3 xformOp:translate = (0, 0, 0.020) uniform token[] xformOpOrder = ["xformOp:translate"] } # The liquid surface. Its height above the vessel floor is driven # by the published suction level, so the twin shows the pump # running down its supply and refilling. def Cylinder "Surface" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "Z" double height = 0.012 double radius = 0.285 color3f[] primvars:displayColor = [(0.10, 0.42, 0.72)] rel material:binding = matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.5, 1) ) uniform token[] xformOpOrder = ["xformOp:transform"] } def Cylinder "DownPipe" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "X" double height = 0.42 double radius = 0.040 color3f[] primvars:displayColor = [(0.02, 0.22, 0.55)] rel material:binding = double3 xformOp:translate = (0.28, 0, 0.28) uniform token[] xformOpOrder = ["xformOp:translate"] } } def Xform "Discharge" { def Cylinder "Neck" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "Z" double height = 0.150 double radius = 0.043 color3f[] primvars:displayColor = [(0.02, 0.22, 0.55)] rel material:binding = double3 xformOp:translate = (-0.645, 0, 0.455) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cylinder "Flange" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "Z" double height = 0.018 double radius = 0.0925 color3f[] primvars:displayColor = [(0.02, 0.22, 0.55)] rel material:binding = double3 xformOp:translate = (-0.645, 0, 0.539) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cylinder "BoltFront" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "Z" double height = 0.032 double radius = 0.009 color3f[] primvars:displayColor = [(0.55, 0.56, 0.58)] rel material:binding = double3 xformOp:translate = (-0.5725, 0, 0.539) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cylinder "BoltBack" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "Z" double height = 0.032 double radius = 0.009 color3f[] primvars:displayColor = [(0.55, 0.56, 0.58)] rel material:binding = double3 xformOp:translate = (-0.7175, 0, 0.539) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cylinder "BoltLeft" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "Z" double height = 0.032 double radius = 0.009 color3f[] primvars:displayColor = [(0.55, 0.56, 0.58)] rel material:binding = double3 xformOp:translate = (-0.645, 0.0725, 0.539) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cylinder "BoltRight" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "Z" double height = 0.032 double radius = 0.009 color3f[] primvars:displayColor = [(0.55, 0.56, 0.58)] rel material:binding = double3 xformOp:translate = (-0.645, -0.0725, 0.539) uniform token[] xformOpOrder = ["xformOp:translate"] } def Xform "Gauge" { def Cylinder "Stem" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "Y" double height = 0.055 double radius = 0.007 color3f[] primvars:displayColor = [(0.55, 0.56, 0.58)] rel material:binding = double3 xformOp:translate = (-0.645, 0.070, 0.470) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cylinder "Dial" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "Y" double height = 0.022 double radius = 0.041 color3f[] primvars:displayColor = [(0.90, 0.90, 0.88)] rel material:binding = double3 xformOp:translate = (-0.645, 0.108, 0.470) uniform token[] xformOpOrder = ["xformOp:translate"] } # Discharge pressure needle. The binding contract drives # xformOp:rotateZ, but this dial faces +Y, so a static rotateX # lays the needle's local Z along the world Y axis before the # driven rotation - the same trick the impeller uses to put a # horizontal shaft on a rotateZ binding. def Xform "Needle" { double3 xformOp:translate = (-0.645, 0.121, 0.470) double xformOp:rotateX = 90 double xformOp:rotateZ = 0 uniform token[] xformOpOrder = [ "xformOp:translate", "xformOp:rotateX", "xformOp:rotateZ" ] def Cube "Pointer" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.75, 0.10, 0.08)] rel material:binding = double3 xformOp:translate = (0.015, 0, 0) double3 xformOp:scale = (0.030, 0.0035, 0.0035) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } } } } def Xform "PowerEnd" { def Cylinder "SealHousing" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "X" double height = 0.060 double radius = 0.046 color3f[] primvars:displayColor = [(0.02, 0.22, 0.55)] rel material:binding = double3 xformOp:translate = (-0.560, 0, 0.28) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cylinder "Lantern" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "X" double height = 0.040 double radius = 0.058 color3f[] primvars:displayColor = [(0.02, 0.20, 0.50)] rel material:binding = double3 xformOp:translate = (-0.510, 0, 0.28) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cylinder "Bracket" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "X" double height = 0.220 double radius = 0.0625 color3f[] primvars:displayColor = [(0.02, 0.22, 0.55)] rel material:binding = double3 xformOp:translate = (-0.380, 0, 0.28) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cube "BracketFoot" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.02, 0.20, 0.50)] rel material:binding = double3 xformOp:translate = (-0.360, 0, 0.1875) double3 xformOp:scale = (0.16, 0.20, 0.105) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } def Cylinder "SightGlass" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "Y" double height = 0.020 double radius = 0.015 color3f[] primvars:displayColor = [(0.85, 0.86, 0.62)] rel material:binding = double3 xformOp:translate = (-0.330, 0.064, 0.245) uniform token[] xformOpOrder = ["xformOp:translate"] } # Bearing-temperature gauge on the bracket. Same rotateX trick as # the discharge gauge: the dial faces +Y, the binding drives Z. def Xform "TempGauge" { def Cylinder "Dial" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "Y" double height = 0.018 double radius = 0.032 color3f[] primvars:displayColor = [(0.90, 0.90, 0.88)] rel material:binding = double3 xformOp:translate = (-0.300, 0.070, 0.345) uniform token[] xformOpOrder = ["xformOp:translate"] } def Xform "Needle" { double3 xformOp:translate = (-0.300, 0.081, 0.345) double xformOp:rotateX = 90 double xformOp:rotateZ = 0 uniform token[] xformOpOrder = [ "xformOp:translate", "xformOp:rotateX", "xformOp:rotateZ" ] def Cube "Pointer" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.75, 0.10, 0.08)] rel material:binding = double3 xformOp:translate = (0.012, 0, 0) double3 xformOp:scale = (0.024, 0.003, 0.003) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } } } } def Cylinder "Bearing" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "X" double height = 0.036 double radius = 0.052 color3f[] primvars:displayColor = [(0.30, 0.31, 0.33)] rel material:binding = double3 xformOp:translate = (-0.300, 0, 0.28) uniform token[] xformOpOrder = ["xformOp:translate"] } def Sphere "OverheatHalo" { double radius = 0.105 color3f[] primvars:displayColor = [(1.0, 0.18, 0.08)] token visibility = "invisible" double3 xformOp:translate = (-0.300, 0, 0.28) uniform token[] xformOpOrder = ["xformOp:translate"] } def Xform "Impeller" { double3 xformOp:translate = (0, 0, 0.28) double xformOp:rotateY = 90 double xformOp:rotateZ = 0 uniform token[] xformOpOrder = [ "xformOp:translate", "xformOp:rotateY", "xformOp:rotateZ" ] custom double inputs:speedSetpoint = 0 def Cylinder "Shaft" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "Z" double height = 0.760 double radius = 0.019 color3f[] primvars:displayColor = [(0.62, 0.63, 0.65)] rel material:binding = double3 xformOp:translate = (0, 0, -0.300) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cylinder "Shroud" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "Z" double height = 0.012 double radius = 0.099 color3f[] primvars:displayColor = [(0.66, 0.48, 0.22)] rel material:binding = double3 xformOp:translate = (0, 0, 0.664) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cylinder "Hub" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "Z" double height = 0.034 double radius = 0.030 color3f[] primvars:displayColor = [(0.66, 0.48, 0.22)] rel material:binding = double3 xformOp:translate = (0, 0, 0.645) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cube "VaneA" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.70, 0.52, 0.24)] rel material:binding = double3 xformOp:translate = (0.052, 0.014, 0.646) double3 xformOp:rotateXYZ = (0, 0, 22) double3 xformOp:scale = (0.086, 0.010, 0.026) uniform token[] xformOpOrder = [ "xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale" ] } def Cube "VaneB" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.70, 0.52, 0.24)] rel material:binding = double3 xformOp:translate = (0.014, 0.052, 0.646) double3 xformOp:rotateXYZ = (0, 0, 82) double3 xformOp:scale = (0.086, 0.010, 0.026) uniform token[] xformOpOrder = [ "xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale" ] } def Cube "VaneC" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.70, 0.52, 0.24)] rel material:binding = double3 xformOp:translate = (-0.038, 0.038, 0.646) double3 xformOp:rotateXYZ = (0, 0, 142) double3 xformOp:scale = (0.086, 0.010, 0.026) uniform token[] xformOpOrder = [ "xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale" ] } def Cube "VaneD" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.70, 0.52, 0.24)] rel material:binding = double3 xformOp:translate = (-0.052, -0.014, 0.646) double3 xformOp:rotateXYZ = (0, 0, 202) double3 xformOp:scale = (0.086, 0.010, 0.026) uniform token[] xformOpOrder = [ "xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale" ] } def Cube "VaneE" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.70, 0.52, 0.24)] rel material:binding = double3 xformOp:translate = (-0.014, -0.052, 0.646) double3 xformOp:rotateXYZ = (0, 0, 262) double3 xformOp:scale = (0.086, 0.010, 0.026) uniform token[] xformOpOrder = [ "xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale" ] } def Cube "VaneF" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.70, 0.52, 0.24)] rel material:binding = double3 xformOp:translate = (0.038, -0.038, 0.646) double3 xformOp:rotateXYZ = (0, 0, 322) double3 xformOp:scale = (0.086, 0.010, 0.026) uniform token[] xformOpOrder = [ "xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale" ] } def Cylinder "CouplingHubPump" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "Z" double height = 0.052 double radius = 0.070 color3f[] primvars:displayColor = [(0.34, 0.35, 0.37)] rel material:binding = double3 xformOp:translate = (0, 0, -0.196) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cylinder "CouplingSpider" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "Z" double height = 0.014 double radius = 0.058 color3f[] primvars:displayColor = [(0.92, 0.66, 0.06)] rel material:binding = double3 xformOp:translate = (0, 0, -0.163) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cylinder "CouplingHubMotor" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "Z" double height = 0.052 double radius = 0.070 color3f[] primvars:displayColor = [(0.34, 0.35, 0.37)] rel material:binding = double3 xformOp:translate = (0, 0, -0.130) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cube "CouplingKey" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.94, 0.94, 0.95)] rel material:binding = double3 xformOp:translate = (0, 0, -0.168) double3 xformOp:scale = (0.020, 0.140, 0.010) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } } def Xform "CouplingGuard" { def Cylinder "RingPump" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "X" double height = 0.012 double radius = 0.110 color3f[] primvars:displayColor = [(0.66, 0.68, 0.70)] rel material:binding = double3 xformOp:translate = (-0.264, 0, 0.28) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cylinder "RingMotor" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "X" double height = 0.012 double radius = 0.110 color3f[] primvars:displayColor = [(0.66, 0.68, 0.70)] rel material:binding = double3 xformOp:translate = (-0.006, 0, 0.28) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cube "BarTop" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.66, 0.68, 0.70)] rel material:binding = double3 xformOp:translate = (-0.135, 0, 0.388) double3 xformOp:scale = (0.264, 0.030, 0.008) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } def Cube "BarBottom" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.66, 0.68, 0.70)] rel material:binding = double3 xformOp:translate = (-0.135, 0, 0.172) double3 xformOp:scale = (0.264, 0.030, 0.008) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } def Cube "BarLeft" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.66, 0.68, 0.70)] rel material:binding = double3 xformOp:translate = (-0.135, -0.108, 0.28) double3 xformOp:scale = (0.264, 0.008, 0.030) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } def Cube "BarRight" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.66, 0.68, 0.70)] rel material:binding = double3 xformOp:translate = (-0.135, 0.108, 0.28) double3 xformOp:scale = (0.264, 0.008, 0.030) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } } def Xform "Motor" { def Cylinder "Frame" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "X" double height = 0.615 double radius = 0.127 color3f[] primvars:displayColor = [(0.60, 0.61, 0.60)] rel material:binding = double3 xformOp:translate = (0.3125, 0, 0.28) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cylinder "DriveEndShield" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "X" double height = 0.050 double radius = 0.132 color3f[] primvars:displayColor = [(0.55, 0.56, 0.55)] rel material:binding = double3 xformOp:translate = (0.030, 0, 0.28) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cylinder "NonDriveEndShield" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "X" double height = 0.050 double radius = 0.132 color3f[] primvars:displayColor = [(0.55, 0.56, 0.55)] rel material:binding = double3 xformOp:translate = (0.595, 0, 0.28) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cylinder "FanCowl" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "X" double height = 0.080 double radius = 0.140 color3f[] primvars:displayColor = [(0.48, 0.49, 0.50)] rel material:binding = double3 xformOp:translate = (0.660, 0, 0.28) uniform token[] xformOpOrder = ["xformOp:translate"] } # Cooling fan inside the cowl. It sits on the motor shaft, so it # turns with the duty point: a pump that is barely moving fluid is # visibly loafing. Same rotateY-then-rotateZ trick as the impeller, # because the shaft is horizontal but the binding drives Z. def Xform "FanBlades" { double3 xformOp:translate = (0.660, 0, 0.28) double xformOp:rotateY = 90 double xformOp:rotateZ = 0 uniform token[] xformOpOrder = [ "xformOp:translate", "xformOp:rotateY", "xformOp:rotateZ" ] def Cylinder "Hub" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "Z" double height = 0.030 double radius = 0.028 color3f[] primvars:displayColor = [(0.20, 0.21, 0.23)] rel material:binding = uniform token[] xformOpOrder = [] } def Cube "BladeA" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.30, 0.31, 0.33)] rel material:binding = double3 xformOp:translate = (0.055, 0, 0) double3 xformOp:scale = (0.110, 0.028, 0.008) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } def Cube "BladeB" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.30, 0.31, 0.33)] rel material:binding = double3 xformOp:translate = (-0.055, 0, 0) double3 xformOp:scale = (0.110, 0.028, 0.008) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } def Cube "BladeC" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.30, 0.31, 0.33)] rel material:binding = double3 xformOp:translate = (0, 0.055, 0) double3 xformOp:scale = (0.028, 0.110, 0.008) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } def Cube "BladeD" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.30, 0.31, 0.33)] rel material:binding = double3 xformOp:translate = (0, -0.055, 0) double3 xformOp:scale = (0.028, 0.110, 0.008) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } } def Cube "FinTop" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.56, 0.57, 0.56)] rel material:binding = double3 xformOp:translate = (0.3125, 0, 0.412) double3 xformOp:scale = (0.615, 0.030, 0.024) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } def Cube "FinUpperLeft" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.56, 0.57, 0.56)] rel material:binding = double3 xformOp:translate = (0.3125, -0.098, 0.372) double3 xformOp:rotateXYZ = (40, 0, 0) double3 xformOp:scale = (0.615, 0.024, 0.030) uniform token[] xformOpOrder = [ "xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale" ] } def Cube "FinUpperRight" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.56, 0.57, 0.56)] rel material:binding = double3 xformOp:translate = (0.3125, 0.098, 0.372) double3 xformOp:rotateXYZ = (-40, 0, 0) double3 xformOp:scale = (0.615, 0.024, 0.030) uniform token[] xformOpOrder = [ "xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale" ] } def Cube "FinLeft" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.56, 0.57, 0.56)] rel material:binding = double3 xformOp:translate = (0.3125, -0.132, 0.28) double3 xformOp:scale = (0.615, 0.024, 0.030) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } def Cube "FinRight" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.56, 0.57, 0.56)] rel material:binding = double3 xformOp:translate = (0.3125, 0.132, 0.28) double3 xformOp:scale = (0.615, 0.024, 0.030) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } def Cube "TerminalBox" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.52, 0.53, 0.52)] rel material:binding = double3 xformOp:translate = (0.230, 0, 0.452) double3 xformOp:scale = (0.120, 0.120, 0.080) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } def Cylinder "CableGland" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "Y" double height = 0.040 double radius = 0.016 color3f[] primvars:displayColor = [(0.30, 0.31, 0.33)] rel material:binding = double3 xformOp:translate = (0.230, -0.078, 0.440) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cylinder "EyeBolt" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { uniform token axis = "Z" double height = 0.046 double radius = 0.012 color3f[] primvars:displayColor = [(0.62, 0.63, 0.65)] rel material:binding = double3 xformOp:translate = (0.470, 0, 0.428) uniform token[] xformOpOrder = ["xformOp:translate"] } def Cube "Nameplate" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.86, 0.87, 0.88)] rel material:binding = double3 xformOp:translate = (0.150, -0.129, 0.318) double3 xformOp:scale = (0.090, 0.004, 0.055) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } def Cube "FootLeft" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.55, 0.56, 0.55)] rel material:binding = double3 xformOp:translate = (0.310, -0.105, 0.179) double3 xformOp:scale = (0.300, 0.044, 0.052) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } def Cube "FootRight" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { double size = 1.0 color3f[] primvars:displayColor = [(0.55, 0.56, 0.55)] rel material:binding = double3 xformOp:translate = (0.310, 0.105, 0.179) double3 xformOp:scale = (0.300, 0.044, 0.052) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] } } def Mesh "AlarmRing" { int[] faceVertexCounts = [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] int[] faceVertexIndices = [0, 2, 3, 1, 2, 4, 5, 3, 4, 6, 7, 5, 6, 8, 9, 7, 8, 10, 11, 9, 10, 12, 13, 11, 12, 14, 15, 13, 14, 16, 17, 15, 16, 18, 19, 17, 18, 20, 21, 19, 20, 22, 23, 21, 22, 24, 25, 23, 24, 26, 27, 25, 26, 28, 29, 27, 28, 30, 31, 29, 30, 32, 33, 31, 32, 34, 35, 33, 34, 36, 37, 35, 36, 38, 39, 37, 38, 40, 41, 39, 40, 42, 43, 41, 42, 44, 45, 43, 44, 46, 47, 45, 46, 48, 49, 47, 48, 50, 51, 49, 50, 52, 53, 51, 52, 54, 55, 53, 54, 56, 57, 55, 56, 58, 59, 57, 58, 60, 61, 59, 60, 62, 63, 61, 62, 64, 65, 63, 64, 66, 67, 65, 66, 68, 69, 67, 68, 70, 71, 69, 70, 72, 73, 71, 72, 74, 75, 73, 74, 76, 77, 75, 76, 78, 79, 77, 78, 80, 81, 79, 80, 82, 83, 81, 82, 84, 85, 83, 84, 86, 87, 85, 86, 88, 89, 87, 88, 90, 91, 89, 90, 92, 93, 91, 92, 94, 95, 93, 94, 0, 1, 95] point3f[] points = [ (1.0200, 0.0000, 0.0150), (0.8800, 0.0000, 0.0150), (1.0106, 0.1436, 0.0150), (0.8718, 0.1253, 0.0150), (0.9825, 0.2847, 0.0150), (0.8473, 0.2485, 0.0150), (0.9363, 0.4210, 0.0150), (0.8069, 0.3674, 0.0150), (0.8726, 0.5500, 0.0150), (0.7514, 0.4800, 0.0150), (0.7927, 0.6696, 0.0150), (0.6816, 0.5844, 0.0150), (0.6978, 0.7778, 0.0150), (0.5988, 0.6788, 0.0150), (0.5896, 0.8727, 0.0150), (0.5044, 0.7616, 0.0150), (0.4700, 0.9526, 0.0150), (0.4000, 0.8314, 0.0150), (0.3410, 1.0163, 0.0150), (0.2874, 0.8869, 0.0150), (0.2047, 1.0625, 0.0150), (0.1685, 0.9273, 0.0150), (0.0636, 1.0906, 0.0150), (0.0453, 0.9518, 0.0150), (-0.0800, 1.1000, 0.0150), (-0.0800, 0.9600, 0.0150), (-0.2236, 1.0906, 0.0150), (-0.2053, 0.9518, 0.0150), (-0.3647, 1.0625, 0.0150), (-0.3285, 0.9273, 0.0150), (-0.5010, 1.0163, 0.0150), (-0.4474, 0.8869, 0.0150), (-0.6300, 0.9526, 0.0150), (-0.5600, 0.8314, 0.0150), (-0.7496, 0.8727, 0.0150), (-0.6644, 0.7616, 0.0150), (-0.8578, 0.7778, 0.0150), (-0.7588, 0.6788, 0.0150), (-0.9527, 0.6696, 0.0150), (-0.8416, 0.5844, 0.0150), (-1.0326, 0.5500, 0.0150), (-0.9114, 0.4800, 0.0150), (-1.0963, 0.4210, 0.0150), (-0.9669, 0.3674, 0.0150), (-1.1425, 0.2847, 0.0150), (-1.0073, 0.2485, 0.0150), (-1.1706, 0.1436, 0.0150), (-1.0318, 0.1253, 0.0150), (-1.1800, 0.0000, 0.0150), (-1.0400, 0.0000, 0.0150), (-1.1706, -0.1436, 0.0150), (-1.0318, -0.1253, 0.0150), (-1.1425, -0.2847, 0.0150), (-1.0073, -0.2485, 0.0150), (-1.0963, -0.4210, 0.0150), (-0.9669, -0.3674, 0.0150), (-1.0326, -0.5500, 0.0150), (-0.9114, -0.4800, 0.0150), (-0.9527, -0.6696, 0.0150), (-0.8416, -0.5844, 0.0150), (-0.8578, -0.7778, 0.0150), (-0.7588, -0.6788, 0.0150), (-0.7496, -0.8727, 0.0150), (-0.6644, -0.7616, 0.0150), (-0.6300, -0.9526, 0.0150), (-0.5600, -0.8314, 0.0150), (-0.5010, -1.0163, 0.0150), (-0.4474, -0.8869, 0.0150), (-0.3647, -1.0625, 0.0150), (-0.3285, -0.9273, 0.0150), (-0.2236, -1.0906, 0.0150), (-0.2053, -0.9518, 0.0150), (-0.0800, -1.1000, 0.0150), (-0.0800, -0.9600, 0.0150), (0.0636, -1.0906, 0.0150), (0.0453, -0.9518, 0.0150), (0.2047, -1.0625, 0.0150), (0.1685, -0.9273, 0.0150), (0.3410, -1.0163, 0.0150), (0.2874, -0.8869, 0.0150), (0.4700, -0.9526, 0.0150), (0.4000, -0.8314, 0.0150), (0.5896, -0.8727, 0.0150), (0.5044, -0.7616, 0.0150), (0.6978, -0.7778, 0.0150), (0.5988, -0.6788, 0.0150), (0.7927, -0.6696, 0.0150), (0.6816, -0.5844, 0.0150), (0.8726, -0.5500, 0.0150), (0.7514, -0.4800, 0.0150), (0.9363, -0.4210, 0.0150), (0.8069, -0.3674, 0.0150), (0.9825, -0.2847, 0.0150), (0.8473, -0.2485, 0.0150), (1.0106, -0.1436, 0.0150), (0.8718, -0.1253, 0.0150) ] color3f[] primvars:displayColor = [(0.90, 0.05, 0.05)] token visibility = "invisible" } }