Files
Marc SchierandCopilot ca89ac85a7 Add a Generators companion-spec sample and compose servers at a site level (#4180)
# Description

Adds a **Generators companion-specification sample** alongside the
existing pump sample, and a **`SiteCompositionServer`** that composes
several device servers into one OpenUSD scene at a supervisory level —
demonstrating that servers can be aggregated without mirroring their
address spaces.

Three things, in dependency order:

### 1. `GeneratorServer`

A self-contained server realising the draft Generators spec
(`http://opcfoundation.org/UA/Generators/`) end to end: N simulated
generating sets, DI + Machinery integration, a twelve-state operating
state machine, four protection alarms per set, six control methods, and
a per-set OpenUSD twin.

The organising idea is that **load fraction is the only independent
variable**. Everything else is a function of it:

```
V̇_f(x) = 3.67 + 100·x                fuel rate      [L/h]
η(x)   = P(x) / (V̇_f(x) · ρ · LHV)   efficiency
S = P / PF     I = S / (√3·V_LL)     f = N·p / 120
```

This is not stylistic. When each measurement is an independent
oscillator — as the pump sample's simulation once was — a server happily
publishes a duty point no real machine could occupy, and no test can
catch it because there is nothing for the values to be inconsistent
*with*. Deriving them from one variable means `P = √3·V·I·PF` and `η =
P/(V̇·ρ·LHV)` hold at every tick by construction. The published
`DATASHEET.md`, the engineering ranges, the trip points and the
simulation all read the same constants in `GeneratorDatasheet.cs`, so
the document and the server cannot describe different machines.

The machine is a fictitious **SimGen Systems GenX-500** (400 kW prime /
440 kW standby, 400/230 V, 50 Hz, four-pole). Figures are representative
of a real industrial genset class; no vendor is named anywhere in the
code or docs.

### 2. Cross-server composition in the connector

`RemoteSessionFactory` already existed in the client library but the
connector CLI never set it, so cross-server composition was unreachable.
`--federate` wires it up: the connector opens a session to each server
named by a component binding, discovers its representations and drives
its bindings into the same stage.

It is **opt-in** because the endpoint the connector dials comes from the
server being rendered rather than from the operator, which makes
honouring it a trust decision. Federation is best-effort per component —
a subordinate that is down is logged and skipped, and the rest of the
scene still renders — which is the only `src/` change in this PR.

### 3. `SiteCompositionServer`

Owns no devices. It publishes a site stage plus one cross-server
component binding per subordinate, carrying that server's
`ComponentServerUri` and `ComponentEndpointUrl`. Nothing is mirrored, so
there is no cache to invalidate and no second copy of the truth.

## Notes for reviewers

**Everything interesting in this PR was found by running the servers,
not by reading the code.** Six defects, none of which looked wrong in
review:

- `IsShutdown` and `SubsystemName` are *optional* on
`GeneratorProtectionAlarmType`, so the generated factory does not
materialise them. `CreateOrReplace` alone produces a child that exists,
appears in `GetChildren` and holds the right value — but carries **no
`ReferenceTypeId`**, so no browse can reach it. Every alarm was
publishing its trip without saying whether the trip stops the machine or
which subsystem to go to. `AddXxx(context)` first is what gives the
child its `HasProperty` reference.
- **The protections could never fire.** Every trip point sits outside
the band the datasheet curves produce — that is what a datasheet *means*
— so all four alarms, the shutdown class, `ResetFaults` and the whole
`Fault` branch of the state machine were unreachable while the README
documented them as observable. Overload was worse: the load clamp
ceiling was set to exactly the trip point, making a
strictly-greater-than comparison unsatisfiable. Faults are now
injectable, and the first set — the one the hero camera frames —
develops one on a slow rotation.
- **A shutdown trip removes the condition that caused it**, because oil
pressure and coolant temperature are only supervised while the engine
turns. Each alarm went active for one tick and cleared, leaving an
operator with a stopped machine and no indication of why. Shutdown-class
alarms now latch until the set leaves the shutdown state. Every unit
test that checked the *condition* passed throughout — the defect only
appears when the trip and the supervision interact over time.
- **`Synchronizing` and `Paralleled` were declared, drawn in the README
and never entered.** The first set now energises a dead bus and closes
onto it while every other set synchronises to a live one — both how a
real plant parallels, and what makes the two states observable.
- **The tick raced client method calls.** The simulation tick runs on a
thread-pool thread while method calls arrive on request threads, and
both transition sets and write the same nodes. A tick moving a set to
`Cooldown` and a concurrent `EmergencyStop` could interleave the paired
`CurrentState` / `CurrentState.Id` writes and leave a client with a
state *name* from one transition and a state *node* from the other — the
exact failure the paired write exists to prevent, reintroduced by the
threading model. Both paths now take one gate.
- Low oil pressure supervised from raw speed **tripped every set during
cranking**, because pressure has not built yet. Now gated on
`IsSpinning`, which is what a real start-up bypass does.

Smaller fixes: shutdown trips are applied after the whole evaluation
pass (stopping mid-loop made the remaining conditions read healthy,
collapsing simultaneous trips to whichever came first in the table);
`ResetFaults` reports its clears as events (a client learns of condition
state changes only through events, so a silent clear leaves an
alarm-list client showing it forever); the start counter moved into the
transition so commanded starts are counted; the federated connector
closes the remote session if the connector constructor throws between
taking ownership and registering it; and `prepare_machinery_nodeset.py`
now *asserts* the IA namespace is last before removing it rather than
only claiming so in its docstring — removing any earlier entry would
silently renumber every namespace after it and rebind their NodeIds.

**A model limitation is left visible rather than papered over.**
`GeneratorStateMachineType` declares an emergency stop only out of
`Running`, `Loaded` and `Paralleled`, so the sample refuses
`EmergencyStop` from `Starting` and `Warmup`. A real panel stops from
anywhere. That is the specification's shape, not this sample's choice,
so it is pinned by a test and named in the docs.

**`Model/` vendors a reduced Machinery nodeset**, derived mechanically
by whitelist. The full official nodeset does not survive the model
source generator (`MODELGEN003`) and drags in IA through a single
optional `Stacklight` member a generating set does not have. Deriving it
by script keeps the provenance checkable; the whitelist is the only
thing to edit when more types are needed. **Never hand-edit the
generated output.**

**The federated scene renders end to end.** Getting there surfaced three
more defects, all of which produced a plausible-looking scene with
nothing in it: the generator sample's plant aggregation was created
under an already-registered `DeviceSet` and so was invisible to every
client (it had *never* rendered geometry, standalone or federated); the
connector's asset fetch ran on the primary session only, so composition
referenced layers that were never downloaded; and both generator colour
bindings wrote `primvars:displayColor` to prims that did not declare it,
so the renderer rejected every update while the file still looked
correct. Cross-server components compose under the subordinate's own
root, so the site layer now *places* `/Plant` and `/Powerhouse` rather
than leaving them stacked on the origin.

**`OpenUsdRepresentation` is now mounted with `HasAddIn`, not
`HasComponent`** (review feedback). The nodeset says so explicitly —
*"Mounted with HasAddIn"* — but every server in the tree used plain
`HasComponent`. It survived because `HasAddIn` is a *subtype* of
`HasComponent`: the representation still browses, still aggregates and
still drives a twin, so every functional test passed before the fix and
after it, and only a conformance checker could tell. Seven mount sites
corrected. `PumpDeviceIntegrationServer` and `MinimalRobotServer` had
hand-rolled the mount instead of calling the shared
`CreateRepresentation` helper, which is exactly how they drifted from
it. Both sample E2E suites now assert the reference type across
**every** discovered representation — a narrower check would have missed
the plant-level representation that arrived later from master still
carrying `HasComponent`.

**Live colour is not achievable in the current OpenUSD viewer, and that
is now documented rather than worked around.** Proven with a standalone
probe: `primvars:displayColor` resolves as `color3f[]` from the
`UsdGeomGprim` schema whatever the layer declares, and the `OpenUsd
0.4.0-alpha` managed API has no writer for that type. Bound
`UsdPreviewSurface` materials are not shaded either, so geometry renders
grey unless it also carries an explicit `displayColor` primvar. The
**visibility** bindings carry no such caveat and are what the samples
rely on to show state. Filed upstream as
[openusd-dotnet#2](https://github.com/marcschier/openusd-dotnet/issues/2),
[#3](https://github.com/marcschier/openusd-dotnet/issues/3) and
[#4](https://github.com/marcschier/openusd-dotnet/issues/4), and linked
from `docs/OpenUsd.md` so a reader can check whether they have since
been fixed.

## Related Issues

No tracking issue — this is additive sample and documentation work with
a single small, self-contained change to `src/` (per-component error
isolation and session-ownership hardening in
`OpenUsdConnector.Composition.cs`). Happy to open one if maintainers
would prefer it tracked.

## Checklist

- [x] I have signed the
[CLA](https://opcfoundation.org/license/cla/ContributorLicenseAgreementv1.0.pdf)
and read the
[CONTRIBUTING](https://github.com/OPCFoundation/UA-.NETStandard/blob/master/CONTRIBUTING.md)
doc.
- [x] I have added tests that prove my fix is effective or that my
feature works and increased code coverage.
- [x] I have added all necessary documentation.
- [x] I have verified that my changes do not introduce (new) build or
analyzer warnings.
- [x] I ran **all** tests locally using the **UA.slnx** solution against
at least .net **framework** and .net **10**, and all passed.
- [ ] I fixed **all** failing and flaky tests in the CI pipelines and
**all** CodeQL warnings.
- [ ] I have addressed **all** PR feedback received.

### Testing

The generator fixtures live in `tests/Opc.Ua.OpenUsd.Tests/Generator` —
**82 tests**, no new project. `Opc.Ua.Di.Tests` would have been the
natural home next to the pump fixtures, but both device samples
source-generate their own reduced `Opc.Ua.Machinery` model and expose it
via `InternalsVisibleTo`, so referencing both from one assembly makes
every Machinery type ambiguous (CS0433); `Opc.Ua.OpenUsd.Tests`
references no other sample and already hosts `RobotAssetContractTests`.
The suite runs **870** on net10.0 and net48 (784 existing + 86) and
**788** on net472, where the sample does not exist and only the
framework-independent asset-contract tests run — forgetting exactly that
exclusion broke CI on the sibling pump PR.

The tests target the things in this sample that fail *quietly*:

- **Datasheet conformance** holds the model to its own claim — rated
speed is `120·f/p`, rated current follows from the rating, the fuel
curve reproduces the published table, and `η = P/(V̇·ρ·LHV)` reconciles
at every load. Efficiency is swept across the whole simulated range to
show it stays inside (0,100) and rises monotonically; a fit that goes
negative somewhere in its range is a coincidence that happens to look
right at the duty point, not a model. A further test reads
`DATASHEET.md` and checks the document quotes the figures the server
actually serves.
- **Drift between the two descriptions of the state machine** — the
physics' `IsLegalTransition` and the model's `GeneratorStateMap` — is
checked in *both* directions. A transition the physics permits but the
map lacks moves a machine without telling a client; one the map holds
but the physics refuses is dead weight that looks supported.
- **Reachability at run time**, not just in the declared table — the
test that catches states the model declares and nothing ever enters.
- **That every protection can actually fire**, which is the half of the
alarm contract that "a healthy set annunciates nothing" does not cover.

A **hosted end-to-end fixture** connects a real client and asserts what
the address space actually exposes — the aggregation at
`/Powerhouse/Generators`, its component binding, and every per-set twin.
That is the only kind of test that catches the registration defect
above: the node object had the right browse name, binding and asset
reference, so every test that inspected objects passed while no client
could see it.

**Every state-machine and protection fix was checked by mutation.**
Restoring the clamp ceiling, the direct `Running → Loaded` path, the old
start-counter placement, or removing the alarm opt-in each makes the
corresponding test fail, naming the specific defect. A test that has
never been seen to fail has not been shown to work.

Verified against a running plant: `Synchronizing`, `Paralleled` and
`Fault` all observed on a two-set server, with
`HighCoolantTemperatureAlarm` seen active on the fault subject. Method
behaviour verified separately — per-set distinct `CurrentState` nodes,
`EmergencyStop` → `EmergencyStopped` with `Start` then refused as
`BadInvalidState`, `ResetFaults` → `Off`, `SetOperatingMode(9999)`
refused with the mode unchanged, and the other sets untouched
throughout. Also verified as a three-server federated stage.

0 warnings on a clean Release rebuild of both samples, the client
library, the connector and the tests, across every TFM.

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: fe608993-f3c9-4779-a6b9-9a9eabfc24ba
2026-08-07 10:48:02 +02:00

2294 lines
102 KiB
Plaintext

#usda 1.0
(
doc = """Reusable 400 kW diesel generator component generated by generate_generator_assets.py."""
defaultPrim = "Generator"
metersPerUnit = 1
upAxis = "Z"
)
def Xform "Generator" (kind = "component")
{
matrix4d xformOp:transform = ( (1.000, 0.000, 0.000, 0.000), (0.000, 1.000, 0.000, 0.000), (0.000, 0.000, 1.000, 0.000), (0.000, 0.000, 0.000, 1.000) )
uniform token[] xformOpOrder = ["xformOp:transform"]
def Scope "Looks"
{
def Material "GenGreen"
{
token outputs:surface.connect = </Generator/Looks/GenGreen/PreviewSurface.outputs:surface>
def Shader "PreviewSurface"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (0.016, 0.210, 0.166)
float inputs:roughness = 0.380
float inputs:metallic = 0.050
token outputs:surface
}
}
def Material "GenGreenDark"
{
token outputs:surface.connect = </Generator/Looks/GenGreenDark/PreviewSurface.outputs:surface>
def Shader "PreviewSurface"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (0.010, 0.140, 0.112)
float inputs:roughness = 0.450
float inputs:metallic = 0.050
token outputs:surface
}
}
def Material "MetalGrey"
{
token outputs:surface.connect = </Generator/Looks/MetalGrey/PreviewSurface.outputs:surface>
def Shader "PreviewSurface"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (0.450, 0.470, 0.480)
float inputs:roughness = 0.360
float inputs:metallic = 0.450
token outputs:surface
}
}
def Material "SteelBright"
{
token outputs:surface.connect = </Generator/Looks/SteelBright/PreviewSurface.outputs:surface>
def Shader "PreviewSurface"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (0.560, 0.575, 0.590)
float inputs:roughness = 0.220
float inputs:metallic = 0.850
token outputs:surface
}
}
def Material "RadiatorDark"
{
token outputs:surface.connect = </Generator/Looks/RadiatorDark/PreviewSurface.outputs:surface>
def Shader "PreviewSurface"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (0.030, 0.035, 0.040)
float inputs:roughness = 0.680
float inputs:metallic = 0.100
token outputs:surface
}
}
def Material "ManifoldRust"
{
token outputs:surface.connect = </Generator/Looks/ManifoldRust/PreviewSurface.outputs:surface>
def Shader "PreviewSurface"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (0.235, 0.088, 0.042)
float inputs:roughness = 0.720
float inputs:metallic = 0.250
token outputs:surface
}
}
def Material "ExhaustSteel"
{
token outputs:surface.connect = </Generator/Looks/ExhaustSteel/PreviewSurface.outputs:surface>
def Shader "PreviewSurface"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (0.620, 0.600, 0.560)
float inputs:roughness = 0.310
float inputs:metallic = 0.650
token outputs:surface
}
}
def Material "PanelBlack"
{
token outputs:surface.connect = </Generator/Looks/PanelBlack/PreviewSurface.outputs:surface>
def Shader "PreviewSurface"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (0.005, 0.006, 0.008)
float inputs:roughness = 0.500
float inputs:metallic = 0.000
token outputs:surface
}
}
def Material "PanelFascia"
{
token outputs:surface.connect = </Generator/Looks/PanelFascia/PreviewSurface.outputs:surface>
def Shader "PreviewSurface"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (0.190, 0.200, 0.208)
float inputs:roughness = 0.550
float inputs:metallic = 0.000
token outputs:surface
}
}
def Material "ScreenDark"
{
token outputs:surface.connect = </Generator/Looks/ScreenDark/PreviewSurface.outputs:surface>
def Shader "PreviewSurface"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (0.020, 0.045, 0.038)
float inputs:roughness = 0.280
float inputs:metallic = 0.000
token outputs:surface
}
}
def Material "FilterCream"
{
token outputs:surface.connect = </Generator/Looks/FilterCream/PreviewSurface.outputs:surface>
def Shader "PreviewSurface"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (0.760, 0.735, 0.660)
float inputs:roughness = 0.600
float inputs:metallic = 0.000
token outputs:surface
}
}
def Material "HoseBlack"
{
token outputs:surface.connect = </Generator/Looks/HoseBlack/PreviewSurface.outputs:surface>
def Shader "PreviewSurface"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (0.028, 0.030, 0.032)
float inputs:roughness = 0.750
float inputs:metallic = 0.000
token outputs:surface
}
}
def Material "LabelYellow"
{
token outputs:surface.connect = </Generator/Looks/LabelYellow/PreviewSurface.outputs:surface>
def Shader "PreviewSurface"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (0.780, 0.610, 0.040)
float inputs:roughness = 0.600
float inputs:metallic = 0.000
token outputs:surface
}
}
def Material "FluidAmber"
{
token outputs:surface.connect = </Generator/Looks/FluidAmber/PreviewSurface.outputs:surface>
def Shader "PreviewSurface"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (0.950, 0.530, 0.080)
float inputs:roughness = 0.220
float inputs:metallic = 0.000
token outputs:surface
}
}
def Material "AlarmRed"
{
token outputs:surface.connect = </Generator/Looks/AlarmRed/PreviewSurface.outputs:surface>
def Shader "PreviewSurface"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (1.000, 0.030, 0.020)
float inputs:roughness = 0.250
float inputs:metallic = 0.000
token outputs:surface
}
}
def Material "HaloOrange"
{
token outputs:surface.connect = </Generator/Looks/HaloOrange/PreviewSurface.outputs:surface>
def Shader "PreviewSurface"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (1.000, 0.360, 0.020)
float inputs:roughness = 0.180
float inputs:metallic = 0.000
token outputs:surface
}
}
def Material "LampGreen"
{
token outputs:surface.connect = </Generator/Looks/LampGreen/PreviewSurface.outputs:surface>
def Shader "PreviewSurface"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (0.050, 0.950, 0.250)
float inputs:roughness = 0.180
float inputs:metallic = 0.000
token outputs:surface
}
}
}
def Xform "Skid"
{
double3 xformOp:translate = (0.000, 0.000, 0.140)
uniform token[] xformOpOrder = ["xformOp:translate"]
def Xform "RailLeft"
{
double3 xformOp:translate = (0.000, 0.660, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
def Cube "Web"
{
double size = 1
double3 xformOp:translate = (0.000, 0.000, 0.000)
double3 xformOp:scale = (4.000, 0.040, 0.240)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "FlangeTop"
{
double size = 1
double3 xformOp:translate = (0.000, 0.000, 0.122)
double3 xformOp:scale = (4.000, 0.150, 0.035)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "FlangeBottom"
{
double size = 1
double3 xformOp:translate = (0.000, 0.000, -0.122)
double3 xformOp:scale = (4.000, 0.150, 0.035)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
}
def Xform "RailRight"
{
double3 xformOp:translate = (0.000, -0.660, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
def Cube "Web"
{
double size = 1
double3 xformOp:translate = (0.000, 0.000, 0.000)
double3 xformOp:scale = (4.000, 0.040, 0.240)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "FlangeTop"
{
double size = 1
double3 xformOp:translate = (0.000, 0.000, 0.122)
double3 xformOp:scale = (4.000, 0.150, 0.035)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "FlangeBottom"
{
double size = 1
double3 xformOp:translate = (0.000, 0.000, -0.122)
double3 xformOp:scale = (4.000, 0.150, 0.035)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
}
def Cube "CrossMember1"
{
double size = 1
double3 xformOp:translate = (-1.860, 0.000, 0.000)
double3 xformOp:scale = (0.110, 1.320, 0.180)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "CrossMember2"
{
double size = 1
double3 xformOp:translate = (-0.980, 0.000, 0.000)
double3 xformOp:scale = (0.110, 1.320, 0.180)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "CrossMember3"
{
double size = 1
double3 xformOp:translate = (0.180, 0.000, 0.000)
double3 xformOp:scale = (0.110, 1.320, 0.180)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "CrossMember4"
{
double size = 1
double3 xformOp:translate = (1.180, 0.000, 0.000)
double3 xformOp:scale = (0.110, 1.320, 0.180)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "CrossMember5"
{
double size = 1
double3 xformOp:translate = (1.880, 0.000, 0.000)
double3 xformOp:scale = (0.110, 1.320, 0.180)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "LiftLug1"
{
double size = 1
double3 xformOp:translate = (-1.700, 0.660, 0.160)
double3 xformOp:scale = (0.120, 0.030, 0.130)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/LabelYellow>
color3f[] primvars:displayColor = [(0.780, 0.610, 0.040)]
}
def Cube "LiftLug2"
{
double size = 1
double3 xformOp:translate = (-1.700, -0.660, 0.160)
double3 xformOp:scale = (0.120, 0.030, 0.130)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/LabelYellow>
color3f[] primvars:displayColor = [(0.780, 0.610, 0.040)]
}
def Cube "LiftLug3"
{
double size = 1
double3 xformOp:translate = (1.700, 0.660, 0.160)
double3 xformOp:scale = (0.120, 0.030, 0.130)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/LabelYellow>
color3f[] primvars:displayColor = [(0.780, 0.610, 0.040)]
}
def Cube "LiftLug4"
{
double size = 1
double3 xformOp:translate = (1.700, -0.660, 0.160)
double3 xformOp:scale = (0.120, 0.030, 0.130)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/LabelYellow>
color3f[] primvars:displayColor = [(0.780, 0.610, 0.040)]
}
}
def Xform "FuelTank"
{
double3 xformOp:translate = (0.000, 0.000, 0.400)
uniform token[] xformOpOrder = ["xformOp:translate"]
def Cube "Shell"
{
double size = 1
double3 xformOp:translate = (0.000, 0.000, 0.000)
double3 xformOp:scale = (3.700, 1.240, 0.430)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "Strap1"
{
double size = 1
double3 xformOp:translate = (-1.200, 0.000, 0.000)
double3 xformOp:scale = (0.070, 1.260, 0.450)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreenDark>
color3f[] primvars:displayColor = [(0.010, 0.140, 0.112)]
}
def Cube "Strap2"
{
double size = 1
double3 xformOp:translate = (1.200, 0.000, 0.000)
double3 xformOp:scale = (0.070, 1.260, 0.450)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreenDark>
color3f[] primvars:displayColor = [(0.010, 0.140, 0.112)]
}
def Cylinder "FillerNeck"
{
uniform token axis = "Z"
double radius = 0.070
double height = 0.120
double3 xformOp:translate = (-1.650, -0.480, 0.250)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/SteelBright>
color3f[] primvars:displayColor = [(0.560, 0.575, 0.590)]
}
def Cube "Surface"
{
double size = 1
matrix4d xformOp:transform = ( (1.000, 0.000, 0.000, 0.000), (0.000, 1.000, 0.000, 0.000), (0.000, 0.000, 1.000, 0.000), (0.000, 0.000, 0.165, 1.000) )
uniform token[] xformOpOrder = ["xformOp:transform"]
rel material:binding = </Generator/Looks/FluidAmber>
}
}
def Xform "Engine"
{
double3 xformOp:translate = (-0.480, 0.000, 0.780)
uniform token[] xformOpOrder = ["xformOp:translate"]
def Cube "Sump"
{
double size = 1
double3 xformOp:translate = (0.000, 0.000, -0.300)
double3 xformOp:scale = (1.720, 0.760, 0.240)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreenDark>
color3f[] primvars:displayColor = [(0.010, 0.140, 0.112)]
}
def Cube "Crankcase"
{
double size = 1
double3 xformOp:translate = (0.000, 0.000, -0.030)
double3 xformOp:scale = (1.780, 0.900, 0.400)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "GearCase"
{
double size = 1
double3 xformOp:translate = (-0.960, 0.000, 0.060)
double3 xformOp:scale = (0.180, 0.820, 0.560)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "Flywheel"
{
double size = 1
double3 xformOp:translate = (0.980, 0.000, 0.030)
double3 xformOp:scale = (0.240, 0.780, 0.780)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Xform "BankLeft"
{
double3 xformOp:translate = (0.000, 0.245, 0.190)
uniform token[] xformOpOrder = ["xformOp:translate"]
def Cube "Head"
{
double size = 1
double3 xformOp:translate = (0.000, 0.100, 0.120)
double3 xformOp:rotateXYZ = (30.000, 0.000, 0.000)
double3 xformOp:scale = (1.560, 0.300, 0.360)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "RockerCover1"
{
double size = 1
double3 xformOp:translate = (-0.620, 0.150, 0.250)
double3 xformOp:rotateXYZ = (30.000, 0.000, 0.000)
double3 xformOp:scale = (0.150, 0.230, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "RockerCover2"
{
double size = 1
double3 xformOp:translate = (-0.440, 0.150, 0.250)
double3 xformOp:rotateXYZ = (30.000, 0.000, 0.000)
double3 xformOp:scale = (0.150, 0.230, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "RockerCover3"
{
double size = 1
double3 xformOp:translate = (-0.260, 0.150, 0.250)
double3 xformOp:rotateXYZ = (30.000, 0.000, 0.000)
double3 xformOp:scale = (0.150, 0.230, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "RockerCover4"
{
double size = 1
double3 xformOp:translate = (-0.080, 0.150, 0.250)
double3 xformOp:rotateXYZ = (30.000, 0.000, 0.000)
double3 xformOp:scale = (0.150, 0.230, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "RockerCover5"
{
double size = 1
double3 xformOp:translate = (0.100, 0.150, 0.250)
double3 xformOp:rotateXYZ = (30.000, 0.000, 0.000)
double3 xformOp:scale = (0.150, 0.230, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "RockerCover6"
{
double size = 1
double3 xformOp:translate = (0.280, 0.150, 0.250)
double3 xformOp:rotateXYZ = (30.000, 0.000, 0.000)
double3 xformOp:scale = (0.150, 0.230, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "RockerCover7"
{
double size = 1
double3 xformOp:translate = (0.460, 0.150, 0.250)
double3 xformOp:rotateXYZ = (30.000, 0.000, 0.000)
double3 xformOp:scale = (0.150, 0.230, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "RockerCover8"
{
double size = 1
double3 xformOp:translate = (0.640, 0.150, 0.250)
double3 xformOp:rotateXYZ = (30.000, 0.000, 0.000)
double3 xformOp:scale = (0.150, 0.230, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
}
def Xform "BankRight"
{
double3 xformOp:translate = (0.000, -0.245, 0.190)
uniform token[] xformOpOrder = ["xformOp:translate"]
def Cube "Head"
{
double size = 1
double3 xformOp:translate = (0.000, -0.100, 0.120)
double3 xformOp:rotateXYZ = (-30.000, 0.000, 0.000)
double3 xformOp:scale = (1.560, 0.300, 0.360)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "RockerCover1"
{
double size = 1
double3 xformOp:translate = (-0.620, -0.150, 0.250)
double3 xformOp:rotateXYZ = (-30.000, 0.000, 0.000)
double3 xformOp:scale = (0.150, 0.230, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "RockerCover2"
{
double size = 1
double3 xformOp:translate = (-0.440, -0.150, 0.250)
double3 xformOp:rotateXYZ = (-30.000, 0.000, 0.000)
double3 xformOp:scale = (0.150, 0.230, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "RockerCover3"
{
double size = 1
double3 xformOp:translate = (-0.260, -0.150, 0.250)
double3 xformOp:rotateXYZ = (-30.000, 0.000, 0.000)
double3 xformOp:scale = (0.150, 0.230, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "RockerCover4"
{
double size = 1
double3 xformOp:translate = (-0.080, -0.150, 0.250)
double3 xformOp:rotateXYZ = (-30.000, 0.000, 0.000)
double3 xformOp:scale = (0.150, 0.230, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "RockerCover5"
{
double size = 1
double3 xformOp:translate = (0.100, -0.150, 0.250)
double3 xformOp:rotateXYZ = (-30.000, 0.000, 0.000)
double3 xformOp:scale = (0.150, 0.230, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "RockerCover6"
{
double size = 1
double3 xformOp:translate = (0.280, -0.150, 0.250)
double3 xformOp:rotateXYZ = (-30.000, 0.000, 0.000)
double3 xformOp:scale = (0.150, 0.230, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "RockerCover7"
{
double size = 1
double3 xformOp:translate = (0.460, -0.150, 0.250)
double3 xformOp:rotateXYZ = (-30.000, 0.000, 0.000)
double3 xformOp:scale = (0.150, 0.230, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "RockerCover8"
{
double size = 1
double3 xformOp:translate = (0.640, -0.150, 0.250)
double3 xformOp:rotateXYZ = (-30.000, 0.000, 0.000)
double3 xformOp:scale = (0.150, 0.230, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
}
def Xform "ManifoldLeft"
{
double3 xformOp:translate = (0.000, 0.430, 0.560)
uniform token[] xformOpOrder = ["xformOp:translate"]
def Cylinder "Log"
{
uniform token axis = "X"
double radius = 0.062
double height = 1.500
double3 xformOp:translate = (0.000, 0.000, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ManifoldRust>
color3f[] primvars:displayColor = [(0.235, 0.088, 0.042)]
}
def Cylinder "Riser1"
{
uniform token axis = "Z"
double radius = 0.038
double height = 0.150
double3 xformOp:translate = (-0.620, 0.000, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ManifoldRust>
color3f[] primvars:displayColor = [(0.235, 0.088, 0.042)]
}
def Cylinder "Riser2"
{
uniform token axis = "Z"
double radius = 0.038
double height = 0.150
double3 xformOp:translate = (-0.440, 0.000, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ManifoldRust>
color3f[] primvars:displayColor = [(0.235, 0.088, 0.042)]
}
def Cylinder "Riser3"
{
uniform token axis = "Z"
double radius = 0.038
double height = 0.150
double3 xformOp:translate = (-0.260, 0.000, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ManifoldRust>
color3f[] primvars:displayColor = [(0.235, 0.088, 0.042)]
}
def Cylinder "Riser4"
{
uniform token axis = "Z"
double radius = 0.038
double height = 0.150
double3 xformOp:translate = (-0.080, 0.000, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ManifoldRust>
color3f[] primvars:displayColor = [(0.235, 0.088, 0.042)]
}
def Cylinder "Riser5"
{
uniform token axis = "Z"
double radius = 0.038
double height = 0.150
double3 xformOp:translate = (0.100, 0.000, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ManifoldRust>
color3f[] primvars:displayColor = [(0.235, 0.088, 0.042)]
}
def Cylinder "Riser6"
{
uniform token axis = "Z"
double radius = 0.038
double height = 0.150
double3 xformOp:translate = (0.280, 0.000, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ManifoldRust>
color3f[] primvars:displayColor = [(0.235, 0.088, 0.042)]
}
def Cylinder "Riser7"
{
uniform token axis = "Z"
double radius = 0.038
double height = 0.150
double3 xformOp:translate = (0.460, 0.000, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ManifoldRust>
color3f[] primvars:displayColor = [(0.235, 0.088, 0.042)]
}
def Cylinder "Riser8"
{
uniform token axis = "Z"
double radius = 0.038
double height = 0.150
double3 xformOp:translate = (0.640, 0.000, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ManifoldRust>
color3f[] primvars:displayColor = [(0.235, 0.088, 0.042)]
}
def Cylinder "Elbow"
{
uniform token axis = "Z"
double radius = 0.072
double height = 0.300
double3 xformOp:translate = (0.820, 0.000, 0.180)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ManifoldRust>
color3f[] primvars:displayColor = [(0.235, 0.088, 0.042)]
}
def Cylinder "ElbowBend"
{
uniform token axis = "X"
double radius = 0.072
double height = 0.240
double3 xformOp:translate = (0.930, 0.000, 0.320)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ManifoldRust>
color3f[] primvars:displayColor = [(0.235, 0.088, 0.042)]
}
}
def Xform "ManifoldRight"
{
double3 xformOp:translate = (0.000, -0.430, 0.560)
uniform token[] xformOpOrder = ["xformOp:translate"]
def Cylinder "Log"
{
uniform token axis = "X"
double radius = 0.062
double height = 1.500
double3 xformOp:translate = (0.000, 0.000, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ManifoldRust>
color3f[] primvars:displayColor = [(0.235, 0.088, 0.042)]
}
def Cylinder "Riser1"
{
uniform token axis = "Z"
double radius = 0.038
double height = 0.150
double3 xformOp:translate = (-0.620, 0.000, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ManifoldRust>
color3f[] primvars:displayColor = [(0.235, 0.088, 0.042)]
}
def Cylinder "Riser2"
{
uniform token axis = "Z"
double radius = 0.038
double height = 0.150
double3 xformOp:translate = (-0.440, 0.000, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ManifoldRust>
color3f[] primvars:displayColor = [(0.235, 0.088, 0.042)]
}
def Cylinder "Riser3"
{
uniform token axis = "Z"
double radius = 0.038
double height = 0.150
double3 xformOp:translate = (-0.260, 0.000, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ManifoldRust>
color3f[] primvars:displayColor = [(0.235, 0.088, 0.042)]
}
def Cylinder "Riser4"
{
uniform token axis = "Z"
double radius = 0.038
double height = 0.150
double3 xformOp:translate = (-0.080, 0.000, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ManifoldRust>
color3f[] primvars:displayColor = [(0.235, 0.088, 0.042)]
}
def Cylinder "Riser5"
{
uniform token axis = "Z"
double radius = 0.038
double height = 0.150
double3 xformOp:translate = (0.100, 0.000, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ManifoldRust>
color3f[] primvars:displayColor = [(0.235, 0.088, 0.042)]
}
def Cylinder "Riser6"
{
uniform token axis = "Z"
double radius = 0.038
double height = 0.150
double3 xformOp:translate = (0.280, 0.000, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ManifoldRust>
color3f[] primvars:displayColor = [(0.235, 0.088, 0.042)]
}
def Cylinder "Riser7"
{
uniform token axis = "Z"
double radius = 0.038
double height = 0.150
double3 xformOp:translate = (0.460, 0.000, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ManifoldRust>
color3f[] primvars:displayColor = [(0.235, 0.088, 0.042)]
}
def Cylinder "Riser8"
{
uniform token axis = "Z"
double radius = 0.038
double height = 0.150
double3 xformOp:translate = (0.640, 0.000, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ManifoldRust>
color3f[] primvars:displayColor = [(0.235, 0.088, 0.042)]
}
def Cylinder "Elbow"
{
uniform token axis = "Z"
double radius = 0.072
double height = 0.300
double3 xformOp:translate = (0.820, 0.000, 0.180)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ManifoldRust>
color3f[] primvars:displayColor = [(0.235, 0.088, 0.042)]
}
def Cylinder "ElbowBend"
{
uniform token axis = "X"
double radius = 0.072
double height = 0.240
double3 xformOp:translate = (0.930, 0.000, 0.320)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ManifoldRust>
color3f[] primvars:displayColor = [(0.235, 0.088, 0.042)]
}
}
def Xform "TurboLeft"
{
double3 xformOp:translate = (1.070, 0.330, 0.880)
double xformOp:rotateX = 0.000
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateX"]
def Cylinder "TurbineHousing"
{
uniform token axis = "X"
double radius = 0.135
double height = 0.150
double3 xformOp:translate = (-0.090, 0.000, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/PanelBlack>
color3f[] primvars:displayColor = [(0.005, 0.006, 0.008)]
}
def Cylinder "Cartridge"
{
uniform token axis = "X"
double radius = 0.070
double height = 0.130
double3 xformOp:translate = (0.020, 0.000, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/SteelBright>
color3f[] primvars:displayColor = [(0.560, 0.575, 0.590)]
}
def Cylinder "CompressorHousing"
{
uniform token axis = "X"
double radius = 0.150
double height = 0.160
double3 xformOp:translate = (0.150, 0.000, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/SteelBright>
color3f[] primvars:displayColor = [(0.560, 0.575, 0.590)]
}
def Cylinder "Inlet"
{
uniform token axis = "Y"
double radius = 0.105
double height = 0.150
double3 xformOp:translate = (0.150, 0.130, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/SteelBright>
color3f[] primvars:displayColor = [(0.560, 0.575, 0.590)]
}
}
def Xform "TurboRight"
{
double3 xformOp:translate = (1.070, -0.330, 0.880)
double xformOp:rotateX = 0.000
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateX"]
def Cylinder "TurbineHousing"
{
uniform token axis = "X"
double radius = 0.135
double height = 0.150
double3 xformOp:translate = (-0.090, 0.000, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/PanelBlack>
color3f[] primvars:displayColor = [(0.005, 0.006, 0.008)]
}
def Cylinder "Cartridge"
{
uniform token axis = "X"
double radius = 0.070
double height = 0.130
double3 xformOp:translate = (0.020, 0.000, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/SteelBright>
color3f[] primvars:displayColor = [(0.560, 0.575, 0.590)]
}
def Cylinder "CompressorHousing"
{
uniform token axis = "X"
double radius = 0.150
double height = 0.160
double3 xformOp:translate = (0.150, 0.000, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/SteelBright>
color3f[] primvars:displayColor = [(0.560, 0.575, 0.590)]
}
def Cylinder "Inlet"
{
uniform token axis = "Y"
double radius = 0.105
double height = 0.150
double3 xformOp:translate = (0.150, -0.130, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/SteelBright>
color3f[] primvars:displayColor = [(0.560, 0.575, 0.590)]
}
}
def Xform "IntakeLeft"
{
double3 xformOp:translate = (0.000, 0.000, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
def Cylinder "Riser"
{
uniform token axis = "Z"
double radius = 0.090
double height = 0.360
double3 xformOp:translate = (0.700, 0.560, 1.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cylinder "Crossover"
{
uniform token axis = "X"
double radius = 0.090
double height = 0.900
double3 xformOp:translate = (0.220, 0.560, 1.170)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cylinder "Drop"
{
uniform token axis = "Z"
double radius = 0.085
double height = 0.300
double3 xformOp:translate = (-0.250, 0.560, 1.020)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
}
def Xform "IntakeRight"
{
double3 xformOp:translate = (0.000, 0.000, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
def Cylinder "Riser"
{
uniform token axis = "Z"
double radius = 0.090
double height = 0.360
double3 xformOp:translate = (0.700, -0.560, 1.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cylinder "Crossover"
{
uniform token axis = "X"
double radius = 0.090
double height = 0.900
double3 xformOp:translate = (0.220, -0.560, 1.170)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cylinder "Drop"
{
uniform token axis = "Z"
double radius = 0.085
double height = 0.300
double3 xformOp:translate = (-0.250, -0.560, 1.020)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
}
def Cube "Aftercooler"
{
double size = 1
double3 xformOp:translate = (0.150, 0.000, 0.620)
double3 xformOp:scale = (0.900, 0.420, 0.240)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "ValleyCover"
{
double size = 1
double3 xformOp:translate = (-0.350, 0.000, 0.480)
double3 xformOp:scale = (1.300, 0.300, 0.100)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cylinder "FuelFilter1"
{
uniform token axis = "Z"
double radius = 0.055
double height = 0.230
double3 xformOp:translate = (-0.250, -0.560, -0.120)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/FilterCream>
color3f[] primvars:displayColor = [(0.760, 0.735, 0.660)]
}
def Cylinder "FuelFilter2"
{
uniform token axis = "Z"
double radius = 0.055
double height = 0.230
double3 xformOp:translate = (-0.105, -0.560, -0.120)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/FilterCream>
color3f[] primvars:displayColor = [(0.760, 0.735, 0.660)]
}
def Cylinder "FuelFilter3"
{
uniform token axis = "Z"
double radius = 0.055
double height = 0.230
double3 xformOp:translate = (0.040, -0.560, -0.120)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/FilterCream>
color3f[] primvars:displayColor = [(0.760, 0.735, 0.660)]
}
def Cylinder "FuelFilter4"
{
uniform token axis = "Z"
double radius = 0.055
double height = 0.230
double3 xformOp:translate = (0.185, -0.560, -0.120)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/FilterCream>
color3f[] primvars:displayColor = [(0.760, 0.735, 0.660)]
}
def Cylinder "FuelFilter5"
{
uniform token axis = "Z"
double radius = 0.055
double height = 0.230
double3 xformOp:translate = (0.330, -0.560, -0.120)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/FilterCream>
color3f[] primvars:displayColor = [(0.760, 0.735, 0.660)]
}
def Cylinder "OilFilter1"
{
uniform token axis = "Z"
double radius = 0.075
double height = 0.300
double3 xformOp:translate = (0.480, -0.540, -0.100)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/FilterCream>
color3f[] primvars:displayColor = [(0.760, 0.735, 0.660)]
}
def Cylinder "OilFilter2"
{
uniform token axis = "Z"
double radius = 0.075
double height = 0.300
double3 xformOp:translate = (0.670, -0.540, -0.100)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/FilterCream>
color3f[] primvars:displayColor = [(0.760, 0.735, 0.660)]
}
def Cylinder "StarterMotor"
{
uniform token axis = "X"
double radius = 0.110
double height = 0.420
double3 xformOp:translate = (0.720, 0.470, -0.240)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/PanelBlack>
color3f[] primvars:displayColor = [(0.005, 0.006, 0.008)]
}
def Cylinder "ChargeAlternator"
{
uniform token axis = "X"
double radius = 0.090
double height = 0.260
double3 xformOp:translate = (-0.700, -0.470, 0.140)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/SteelBright>
color3f[] primvars:displayColor = [(0.560, 0.575, 0.590)]
}
def Cylinder "WaterPump"
{
uniform token axis = "X"
double radius = 0.130
double height = 0.200
double3 xformOp:translate = (-1.020, -0.300, -0.140)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cylinder "HoseTop"
{
uniform token axis = "X"
double radius = 0.070
double height = 0.520
double3 xformOp:translate = (-1.320, 0.240, 0.240)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/HoseBlack>
color3f[] primvars:displayColor = [(0.028, 0.030, 0.032)]
}
def Cylinder "HoseBottom"
{
uniform token axis = "X"
double radius = 0.070
double height = 0.520
double3 xformOp:translate = (-1.320, -0.240, -0.220)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/HoseBlack>
color3f[] primvars:displayColor = [(0.028, 0.030, 0.032)]
}
def Sphere "OverheatHalo"
{
double radius = 0.340
double3 xformOp:translate = (0.000, 0.000, 1.380)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/HaloOrange>
color3f[] primvars:displayColor = [(1.000, 0.360, 0.020)]
token visibility = "invisible"
}
def Sphere "OilHalo"
{
double radius = 0.260
double3 xformOp:translate = (-0.100, -0.820, -0.280)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/HaloOrange>
color3f[] primvars:displayColor = [(1.000, 0.360, 0.020)]
token visibility = "invisible"
}
}
def Xform "Alternator"
{
double3 xformOp:translate = (1.320, 0.000, 0.860)
uniform token[] xformOpOrder = ["xformOp:translate"]
def Cylinder "Housing"
{
uniform token axis = "X"
double radius = 0.440
double height = 1.120
double3 xformOp:translate = (0.000, 0.000, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Xform "VentBand"
{
double3 xformOp:translate = (0.000, 0.000, 0.430)
uniform token[] xformOpOrder = ["xformOp:translate"]
def Cube "Louvre1"
{
double size = 1
double3 xformOp:translate = (-0.360, 0.000, 0.000)
double3 xformOp:rotateXYZ = (0.000, 0.000, 0.000)
double3 xformOp:scale = (0.030, 0.120, 0.500)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreenDark>
color3f[] primvars:displayColor = [(0.010, 0.140, 0.112)]
}
def Cube "Louvre2"
{
double size = 1
double3 xformOp:translate = (-0.285, 0.000, 0.000)
double3 xformOp:rotateXYZ = (0.000, 0.000, 0.000)
double3 xformOp:scale = (0.030, 0.120, 0.500)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreenDark>
color3f[] primvars:displayColor = [(0.010, 0.140, 0.112)]
}
def Cube "Louvre3"
{
double size = 1
double3 xformOp:translate = (-0.210, 0.000, 0.000)
double3 xformOp:rotateXYZ = (0.000, 0.000, 0.000)
double3 xformOp:scale = (0.030, 0.120, 0.500)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreenDark>
color3f[] primvars:displayColor = [(0.010, 0.140, 0.112)]
}
def Cube "Louvre4"
{
double size = 1
double3 xformOp:translate = (-0.135, 0.000, 0.000)
double3 xformOp:rotateXYZ = (0.000, 0.000, 0.000)
double3 xformOp:scale = (0.030, 0.120, 0.500)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreenDark>
color3f[] primvars:displayColor = [(0.010, 0.140, 0.112)]
}
def Cube "Louvre5"
{
double size = 1
double3 xformOp:translate = (-0.060, 0.000, 0.000)
double3 xformOp:rotateXYZ = (0.000, 0.000, 0.000)
double3 xformOp:scale = (0.030, 0.120, 0.500)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreenDark>
color3f[] primvars:displayColor = [(0.010, 0.140, 0.112)]
}
def Cube "Louvre6"
{
double size = 1
double3 xformOp:translate = (0.015, 0.000, 0.000)
double3 xformOp:rotateXYZ = (0.000, 0.000, 0.000)
double3 xformOp:scale = (0.030, 0.120, 0.500)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreenDark>
color3f[] primvars:displayColor = [(0.010, 0.140, 0.112)]
}
def Cube "Louvre7"
{
double size = 1
double3 xformOp:translate = (0.090, 0.000, 0.000)
double3 xformOp:rotateXYZ = (0.000, 0.000, 0.000)
double3 xformOp:scale = (0.030, 0.120, 0.500)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreenDark>
color3f[] primvars:displayColor = [(0.010, 0.140, 0.112)]
}
def Cube "Louvre8"
{
double size = 1
double3 xformOp:translate = (0.165, 0.000, 0.000)
double3 xformOp:rotateXYZ = (0.000, 0.000, 0.000)
double3 xformOp:scale = (0.030, 0.120, 0.500)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreenDark>
color3f[] primvars:displayColor = [(0.010, 0.140, 0.112)]
}
def Cube "Louvre9"
{
double size = 1
double3 xformOp:translate = (0.240, 0.000, 0.000)
double3 xformOp:rotateXYZ = (0.000, 0.000, 0.000)
double3 xformOp:scale = (0.030, 0.120, 0.500)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreenDark>
color3f[] primvars:displayColor = [(0.010, 0.140, 0.112)]
}
}
def Cylinder "DriveEndBell"
{
uniform token axis = "X"
double radius = 0.400
double height = 0.140
double3 xformOp:translate = (-0.610, 0.000, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/GenGreenDark>
color3f[] primvars:displayColor = [(0.010, 0.140, 0.112)]
}
def Cylinder "NonDriveEndBell"
{
uniform token axis = "X"
double radius = 0.360
double height = 0.160
double3 xformOp:translate = (0.620, 0.000, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/GenGreenDark>
color3f[] primvars:displayColor = [(0.010, 0.140, 0.112)]
}
def Cylinder "HeatBand"
{
uniform token axis = "X"
double radius = 0.455
double height = 0.220
double3 xformOp:translate = (-0.180, 0.000, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/GenGreenDark>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "TerminalBox"
{
double size = 1
double3 xformOp:translate = (0.100, 0.000, 0.520)
double3 xformOp:scale = (0.480, 0.420, 0.300)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "TerminalLid"
{
double size = 1
double3 xformOp:translate = (0.100, 0.000, 0.685)
double3 xformOp:scale = (0.500, 0.440, 0.030)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreenDark>
color3f[] primvars:displayColor = [(0.010, 0.140, 0.112)]
}
def Cube "FootLeft"
{
double size = 1
double3 xformOp:translate = (0.000, 0.400, -0.520)
double3 xformOp:scale = (0.700, 0.120, 0.220)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "FootRight"
{
double size = 1
double3 xformOp:translate = (0.000, -0.400, -0.520)
double3 xformOp:scale = (0.700, 0.120, 0.220)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
}
def Cylinder "CouplingGuard"
{
uniform token axis = "X"
double radius = 0.330
double height = 0.420
double3 xformOp:translate = (0.660, 0.000, 0.830)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/GenGreenDark>
color3f[] primvars:displayColor = [(0.010, 0.140, 0.112)]
}
def Xform "Radiator"
{
double3 xformOp:translate = (-2.020, 0.000, 1.020)
uniform token[] xformOpOrder = ["xformOp:translate"]
def Cube "Core"
{
double size = 1
double3 xformOp:translate = (0.000, 0.000, 0.000)
double3 xformOp:scale = (0.200, 1.280, 1.280)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/RadiatorDark>
color3f[] primvars:displayColor = [(0.030, 0.035, 0.040)]
}
def Xform "FinPack"
{
double3 xformOp:translate = (0.000, 0.000, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
def Cube "Fin1"
{
double size = 1
double3 xformOp:translate = (-0.075, -0.620, 0.000)
double3 xformOp:scale = (0.012, 1.180, 1.180)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/RadiatorDark>
color3f[] primvars:displayColor = [(0.030, 0.035, 0.040)]
}
def Cube "Fin2"
{
double size = 1
double3 xformOp:translate = (0.075, -0.537, 0.000)
double3 xformOp:scale = (0.012, 1.180, 1.180)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/RadiatorDark>
color3f[] primvars:displayColor = [(0.030, 0.035, 0.040)]
}
def Cube "Fin3"
{
double size = 1
double3 xformOp:translate = (-0.075, -0.454, 0.000)
double3 xformOp:scale = (0.012, 1.180, 1.180)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/RadiatorDark>
color3f[] primvars:displayColor = [(0.030, 0.035, 0.040)]
}
def Cube "Fin4"
{
double size = 1
double3 xformOp:translate = (0.075, -0.371, 0.000)
double3 xformOp:scale = (0.012, 1.180, 1.180)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/RadiatorDark>
color3f[] primvars:displayColor = [(0.030, 0.035, 0.040)]
}
def Cube "Fin5"
{
double size = 1
double3 xformOp:translate = (-0.075, -0.288, 0.000)
double3 xformOp:scale = (0.012, 1.180, 1.180)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/RadiatorDark>
color3f[] primvars:displayColor = [(0.030, 0.035, 0.040)]
}
def Cube "Fin6"
{
double size = 1
double3 xformOp:translate = (0.075, -0.205, 0.000)
double3 xformOp:scale = (0.012, 1.180, 1.180)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/RadiatorDark>
color3f[] primvars:displayColor = [(0.030, 0.035, 0.040)]
}
def Cube "Fin7"
{
double size = 1
double3 xformOp:translate = (-0.075, -0.122, 0.000)
double3 xformOp:scale = (0.012, 1.180, 1.180)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/RadiatorDark>
color3f[] primvars:displayColor = [(0.030, 0.035, 0.040)]
}
def Cube "Fin8"
{
double size = 1
double3 xformOp:translate = (0.075, -0.039, 0.000)
double3 xformOp:scale = (0.012, 1.180, 1.180)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/RadiatorDark>
color3f[] primvars:displayColor = [(0.030, 0.035, 0.040)]
}
def Cube "Fin9"
{
double size = 1
double3 xformOp:translate = (-0.075, 0.044, 0.000)
double3 xformOp:scale = (0.012, 1.180, 1.180)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/RadiatorDark>
color3f[] primvars:displayColor = [(0.030, 0.035, 0.040)]
}
def Cube "Fin10"
{
double size = 1
double3 xformOp:translate = (0.075, 0.127, 0.000)
double3 xformOp:scale = (0.012, 1.180, 1.180)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/RadiatorDark>
color3f[] primvars:displayColor = [(0.030, 0.035, 0.040)]
}
def Cube "Fin11"
{
double size = 1
double3 xformOp:translate = (-0.075, 0.210, 0.000)
double3 xformOp:scale = (0.012, 1.180, 1.180)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/RadiatorDark>
color3f[] primvars:displayColor = [(0.030, 0.035, 0.040)]
}
def Cube "Fin12"
{
double size = 1
double3 xformOp:translate = (0.075, 0.293, 0.000)
double3 xformOp:scale = (0.012, 1.180, 1.180)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/RadiatorDark>
color3f[] primvars:displayColor = [(0.030, 0.035, 0.040)]
}
def Cube "Fin13"
{
double size = 1
double3 xformOp:translate = (-0.075, 0.376, 0.000)
double3 xformOp:scale = (0.012, 1.180, 1.180)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/RadiatorDark>
color3f[] primvars:displayColor = [(0.030, 0.035, 0.040)]
}
def Cube "Fin14"
{
double size = 1
double3 xformOp:translate = (0.075, 0.459, 0.000)
double3 xformOp:scale = (0.012, 1.180, 1.180)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/RadiatorDark>
color3f[] primvars:displayColor = [(0.030, 0.035, 0.040)]
}
def Cube "Fin15"
{
double size = 1
double3 xformOp:translate = (-0.075, 0.542, 0.000)
double3 xformOp:scale = (0.012, 1.180, 1.180)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/RadiatorDark>
color3f[] primvars:displayColor = [(0.030, 0.035, 0.040)]
}
}
def Cube "TopTank"
{
double size = 1
double3 xformOp:translate = (0.000, 0.000, 0.700)
double3 xformOp:scale = (0.280, 1.360, 0.170)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/PanelBlack>
color3f[] primvars:displayColor = [(0.005, 0.006, 0.008)]
}
def Cube "BottomTank"
{
double size = 1
double3 xformOp:translate = (0.000, 0.000, -0.700)
double3 xformOp:scale = (0.280, 1.360, 0.170)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/PanelBlack>
color3f[] primvars:displayColor = [(0.005, 0.006, 0.008)]
}
def Cube "GuardLeft"
{
double size = 1
double3 xformOp:translate = (0.000, 0.680, 0.000)
double3 xformOp:scale = (0.300, 0.070, 1.560)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/PanelBlack>
color3f[] primvars:displayColor = [(0.005, 0.006, 0.008)]
}
def Cube "GuardRight"
{
double size = 1
double3 xformOp:translate = (0.000, -0.680, 0.000)
double3 xformOp:scale = (0.300, 0.070, 1.560)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/PanelBlack>
color3f[] primvars:displayColor = [(0.005, 0.006, 0.008)]
}
def Cube "FillerCap"
{
double size = 1
double3 xformOp:translate = (0.000, 0.480, 0.820)
double3 xformOp:scale = (0.140, 0.140, 0.090)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/SteelBright>
color3f[] primvars:displayColor = [(0.560, 0.575, 0.590)]
}
def Cylinder "FanShroud"
{
uniform token axis = "X"
double radius = 0.560
double height = 0.120
double3 xformOp:translate = (0.220, 0.000, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/PanelBlack>
color3f[] primvars:displayColor = [(0.005, 0.006, 0.008)]
}
def Xform "Fan"
{
double3 xformOp:translate = (0.180, 0.000, 0.000)
double xformOp:rotateY = 90.000
double xformOp:rotateZ = 0.000
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateY", "xformOp:rotateZ"]
def Cylinder "Hub"
{
uniform token axis = "Z"
double radius = 0.110
double height = 0.120
double3 xformOp:translate = (0.000, 0.000, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/PanelBlack>
color3f[] primvars:displayColor = [(0.005, 0.006, 0.008)]
}
def Cube "Blade_1"
{
double size = 1
double3 xformOp:translate = (0.000, 0.260, 0.000)
double xformOp:rotateZ = 0.000
double3 xformOp:scale = (0.070, 0.440, 0.025)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/MetalGrey>
color3f[] primvars:displayColor = [(0.450, 0.470, 0.480)]
}
def Cube "Blade_2"
{
double size = 1
double3 xformOp:translate = (0.000, 0.260, 0.000)
double xformOp:rotateZ = 40.000
double3 xformOp:scale = (0.070, 0.440, 0.025)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/MetalGrey>
color3f[] primvars:displayColor = [(0.450, 0.470, 0.480)]
}
def Cube "Blade_3"
{
double size = 1
double3 xformOp:translate = (0.000, 0.260, 0.000)
double xformOp:rotateZ = 80.000
double3 xformOp:scale = (0.070, 0.440, 0.025)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/MetalGrey>
color3f[] primvars:displayColor = [(0.450, 0.470, 0.480)]
}
def Cube "Blade_4"
{
double size = 1
double3 xformOp:translate = (0.000, 0.260, 0.000)
double xformOp:rotateZ = 120.000
double3 xformOp:scale = (0.070, 0.440, 0.025)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/MetalGrey>
color3f[] primvars:displayColor = [(0.450, 0.470, 0.480)]
}
def Cube "Blade_5"
{
double size = 1
double3 xformOp:translate = (0.000, 0.260, 0.000)
double xformOp:rotateZ = 160.000
double3 xformOp:scale = (0.070, 0.440, 0.025)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/MetalGrey>
color3f[] primvars:displayColor = [(0.450, 0.470, 0.480)]
}
def Cube "Blade_6"
{
double size = 1
double3 xformOp:translate = (0.000, 0.260, 0.000)
double xformOp:rotateZ = 200.000
double3 xformOp:scale = (0.070, 0.440, 0.025)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/MetalGrey>
color3f[] primvars:displayColor = [(0.450, 0.470, 0.480)]
}
def Cube "Blade_7"
{
double size = 1
double3 xformOp:translate = (0.000, 0.260, 0.000)
double xformOp:rotateZ = 240.000
double3 xformOp:scale = (0.070, 0.440, 0.025)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/MetalGrey>
color3f[] primvars:displayColor = [(0.450, 0.470, 0.480)]
}
def Cube "Blade_8"
{
double size = 1
double3 xformOp:translate = (0.000, 0.260, 0.000)
double xformOp:rotateZ = 280.000
double3 xformOp:scale = (0.070, 0.440, 0.025)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/MetalGrey>
color3f[] primvars:displayColor = [(0.450, 0.470, 0.480)]
}
def Cube "Blade_9"
{
double size = 1
double3 xformOp:translate = (0.000, 0.260, 0.000)
double xformOp:rotateZ = 320.000
double3 xformOp:scale = (0.070, 0.440, 0.025)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZ", "xformOp:scale"]
rel material:binding = </Generator/Looks/MetalGrey>
color3f[] primvars:displayColor = [(0.450, 0.470, 0.480)]
}
}
}
def Xform "Exhaust"
{
double3 xformOp:translate = (-0.100, 0.430, 1.560)
uniform token[] xformOpOrder = ["xformOp:translate"]
def Cylinder "Silencer"
{
uniform token axis = "X"
double radius = 0.230
double height = 1.150
double3 xformOp:translate = (0.000, 0.000, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ExhaustSteel>
color3f[] primvars:displayColor = [(0.620, 0.600, 0.560)]
}
def Cylinder "EndCapFront"
{
uniform token axis = "X"
double radius = 0.235
double height = 0.060
double3 xformOp:translate = (-0.600, 0.000, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ExhaustSteel>
color3f[] primvars:displayColor = [(0.620, 0.600, 0.560)]
}
def Cylinder "EndCapRear"
{
uniform token axis = "X"
double radius = 0.235
double height = 0.060
double3 xformOp:translate = (0.600, 0.000, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ExhaustSteel>
color3f[] primvars:displayColor = [(0.620, 0.600, 0.560)]
}
def Cylinder "Bellows"
{
uniform token axis = "Z"
double radius = 0.090
double height = 0.220
double3 xformOp:translate = (0.560, 0.000, -0.280)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/SteelBright>
color3f[] primvars:displayColor = [(0.560, 0.575, 0.590)]
}
def Cylinder "Stack"
{
uniform token axis = "Z"
double radius = 0.115
double height = 1.250
double3 xformOp:translate = (-0.450, 0.000, 0.600)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ExhaustSteel>
color3f[] primvars:displayColor = [(0.620, 0.600, 0.560)]
}
def Cylinder "RainCap"
{
uniform token axis = "Z"
double radius = 0.140
double height = 0.060
double3 xformOp:translate = (-0.450, 0.000, 1.250)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/ExhaustSteel>
color3f[] primvars:displayColor = [(0.620, 0.600, 0.560)]
}
}
def Xform "ControlPanel"
{
double3 xformOp:translate = (1.180, -0.720, 1.500)
uniform token[] xformOpOrder = ["xformOp:translate"]
def Cube "Enclosure"
{
double size = 1
double3 xformOp:translate = (0.000, 0.000, 0.000)
double3 xformOp:scale = (0.640, 0.260, 0.760)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreen>
color3f[] primvars:displayColor = [(0.016, 0.210, 0.166)]
}
def Cube "Fascia"
{
double size = 1
double3 xformOp:translate = (0.000, -0.135, 0.000)
double3 xformOp:scale = (0.560, 0.030, 0.640)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/PanelBlack>
color3f[] primvars:displayColor = [(0.005, 0.006, 0.008)]
}
def Cube "Display"
{
double size = 1
double3 xformOp:translate = (0.010, -0.155, 0.120)
double3 xformOp:scale = (0.230, 0.016, 0.180)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/ScreenDark>
color3f[] primvars:displayColor = [(0.020, 0.045, 0.038)]
}
def Cube "MimicPlate"
{
double size = 1
double3 xformOp:translate = (-0.190, -0.152, 0.060)
double3 xformOp:scale = (0.150, 0.014, 0.300)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/PanelFascia>
color3f[] primvars:displayColor = [(0.190, 0.200, 0.208)]
}
def Xform "Keypad"
{
double3 xformOp:translate = (0.010, 0.000, 0.120)
uniform token[] xformOpOrder = ["xformOp:translate"]
def Cube "Key1"
{
double size = 1
double3 xformOp:translate = (-0.075, -0.072, -0.050)
double3 xformOp:scale = (0.036, 0.014, 0.026)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/PanelFascia>
color3f[] primvars:displayColor = [(0.190, 0.200, 0.208)]
}
def Cube "Key2"
{
double size = 1
double3 xformOp:translate = (-0.025, -0.072, -0.050)
double3 xformOp:scale = (0.036, 0.014, 0.026)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/PanelFascia>
color3f[] primvars:displayColor = [(0.190, 0.200, 0.208)]
}
def Cube "Key3"
{
double size = 1
double3 xformOp:translate = (0.025, -0.072, -0.050)
double3 xformOp:scale = (0.036, 0.014, 0.026)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/PanelFascia>
color3f[] primvars:displayColor = [(0.190, 0.200, 0.208)]
}
def Cube "Key4"
{
double size = 1
double3 xformOp:translate = (0.075, -0.072, -0.050)
double3 xformOp:scale = (0.036, 0.014, 0.026)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/PanelFascia>
color3f[] primvars:displayColor = [(0.190, 0.200, 0.208)]
}
def Cube "Key5"
{
double size = 1
double3 xformOp:translate = (-0.075, -0.072, -0.092)
double3 xformOp:scale = (0.036, 0.014, 0.026)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/PanelFascia>
color3f[] primvars:displayColor = [(0.190, 0.200, 0.208)]
}
def Cube "Key6"
{
double size = 1
double3 xformOp:translate = (-0.025, -0.072, -0.092)
double3 xformOp:scale = (0.036, 0.014, 0.026)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/PanelFascia>
color3f[] primvars:displayColor = [(0.190, 0.200, 0.208)]
}
def Cube "Key7"
{
double size = 1
double3 xformOp:translate = (0.025, -0.072, -0.092)
double3 xformOp:scale = (0.036, 0.014, 0.026)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/PanelFascia>
color3f[] primvars:displayColor = [(0.190, 0.200, 0.208)]
}
def Cube "Key8"
{
double size = 1
double3 xformOp:translate = (0.075, -0.072, -0.092)
double3 xformOp:scale = (0.036, 0.014, 0.026)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/PanelFascia>
color3f[] primvars:displayColor = [(0.190, 0.200, 0.208)]
}
}
def Cylinder "EStopBase"
{
uniform token axis = "Y"
double radius = 0.055
double height = 0.030
double3 xformOp:translate = (0.190, -0.150, -0.230)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/LabelYellow>
color3f[] primvars:displayColor = [(0.780, 0.610, 0.040)]
}
def Cylinder "EStopButton"
{
uniform token axis = "Y"
double radius = 0.042
double height = 0.045
double3 xformOp:translate = (0.190, -0.175, -0.230)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/AlarmRed>
color3f[] primvars:displayColor = [(1.000, 0.030, 0.020)]
}
def Cube "LabelStrip"
{
double size = 1
double3 xformOp:translate = (0.000, -0.150, -0.330)
double3 xformOp:scale = (0.520, 0.012, 0.070)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/LabelYellow>
color3f[] primvars:displayColor = [(0.780, 0.610, 0.040)]
}
def Xform "LoadGauge"
{
double3 xformOp:translate = (-0.150, -0.150, 0.250)
uniform token[] xformOpOrder = ["xformOp:translate"]
def Cylinder "Face"
{
uniform token axis = "Y"
double radius = 0.075
double height = 0.020
double3 xformOp:translate = (0.000, 0.000, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/MetalGrey>
color3f[] primvars:displayColor = [(0.450, 0.470, 0.480)]
}
def Cylinder "Bezel"
{
uniform token axis = "Y"
double radius = 0.085
double height = 0.012
double3 xformOp:translate = (0.000, 0.008, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/PanelBlack>
color3f[] primvars:displayColor = [(0.005, 0.006, 0.008)]
}
def Xform "Needle"
{
double3 xformOp:translate = (0.000, -0.018, 0.000)
double xformOp:rotateX = 90.000
double xformOp:rotateZ = 0.000
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateX", "xformOp:rotateZ"]
def Cube "Pointer"
{
double size = 1
double3 xformOp:translate = (0.000, 0.040, 0.000)
double3 xformOp:scale = (0.012, 0.075, 0.006)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/AlarmRed>
color3f[] primvars:displayColor = [(1.000, 0.030, 0.020)]
}
}
}
def Xform "TempGauge"
{
double3 xformOp:translate = (0.150, -0.150, 0.250)
uniform token[] xformOpOrder = ["xformOp:translate"]
def Cylinder "Face"
{
uniform token axis = "Y"
double radius = 0.075
double height = 0.020
double3 xformOp:translate = (0.000, 0.000, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/MetalGrey>
color3f[] primvars:displayColor = [(0.450, 0.470, 0.480)]
}
def Cylinder "Bezel"
{
uniform token axis = "Y"
double radius = 0.085
double height = 0.012
double3 xformOp:translate = (0.000, 0.008, 0.000)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/PanelBlack>
color3f[] primvars:displayColor = [(0.005, 0.006, 0.008)]
}
def Xform "Needle"
{
double3 xformOp:translate = (0.000, -0.018, 0.000)
double xformOp:rotateX = 90.000
double xformOp:rotateZ = 0.000
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateX", "xformOp:rotateZ"]
def Cube "Pointer"
{
double size = 1
double3 xformOp:translate = (0.000, 0.040, 0.000)
double3 xformOp:scale = (0.012, 0.075, 0.006)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/AlarmRed>
color3f[] primvars:displayColor = [(1.000, 0.030, 0.020)]
}
}
}
def Sphere "RunLamp"
{
double radius = 0.030
double3 xformOp:translate = (-0.190, -0.160, -0.230)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </Generator/Looks/LampGreen>
color3f[] primvars:displayColor = [(0.050, 0.950, 0.250)]
token visibility = "invisible"
}
}
def Xform "BatteryRack"
{
double3 xformOp:translate = (-1.560, -0.430, 0.420)
uniform token[] xformOpOrder = ["xformOp:translate"]
def Cube "Tray"
{
double size = 1
double3 xformOp:translate = (0.000, 0.000, -0.140)
double3 xformOp:scale = (0.520, 0.340, 0.040)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/GenGreenDark>
color3f[] primvars:displayColor = [(0.010, 0.140, 0.112)]
}
def Cube "BatteryA"
{
double size = 1
double3 xformOp:translate = (-0.130, 0.000, 0.000)
double3 xformOp:scale = (0.230, 0.300, 0.240)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/PanelBlack>
color3f[] primvars:displayColor = [(0.005, 0.006, 0.008)]
}
def Cube "BatteryB"
{
double size = 1
double3 xformOp:translate = (0.130, 0.000, 0.000)
double3 xformOp:scale = (0.230, 0.300, 0.240)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"]
rel material:binding = </Generator/Looks/PanelBlack>
color3f[] primvars:displayColor = [(0.005, 0.006, 0.008)]
}
}
def Mesh "AlarmRing"
{
point3f[] points = [
(1.900, 0.000, 3.100),
(1.884, 0.248, 3.100),
(1.487, 0.196, 3.100),
(1.500, 0.000, 3.100),
(1.884, 0.248, 3.100),
(1.835, 0.492, 3.100),
(1.449, 0.388, 3.100),
(1.487, 0.196, 3.100),
(1.835, 0.492, 3.100),
(1.755, 0.727, 3.100),
(1.386, 0.574, 3.100),
(1.449, 0.388, 3.100),
(1.755, 0.727, 3.100),
(1.645, 0.950, 3.100),
(1.299, 0.750, 3.100),
(1.386, 0.574, 3.100),
(1.645, 0.950, 3.100),
(1.507, 1.157, 3.100),
(1.190, 0.913, 3.100),
(1.299, 0.750, 3.100),
(1.507, 1.157, 3.100),
(1.344, 1.344, 3.100),
(1.061, 1.061, 3.100),
(1.190, 0.913, 3.100),
(1.344, 1.344, 3.100),
(1.157, 1.507, 3.100),
(0.913, 1.190, 3.100),
(1.061, 1.061, 3.100),
(1.157, 1.507, 3.100),
(0.950, 1.645, 3.100),
(0.750, 1.299, 3.100),
(0.913, 1.190, 3.100),
(0.950, 1.645, 3.100),
(0.727, 1.755, 3.100),
(0.574, 1.386, 3.100),
(0.750, 1.299, 3.100),
(0.727, 1.755, 3.100),
(0.492, 1.835, 3.100),
(0.388, 1.449, 3.100),
(0.574, 1.386, 3.100),
(0.492, 1.835, 3.100),
(0.248, 1.884, 3.100),
(0.196, 1.487, 3.100),
(0.388, 1.449, 3.100),
(0.248, 1.884, 3.100),
(0.000, 1.900, 3.100),
(0.000, 1.500, 3.100),
(0.196, 1.487, 3.100),
(0.000, 1.900, 3.100),
(-0.248, 1.884, 3.100),
(-0.196, 1.487, 3.100),
(0.000, 1.500, 3.100),
(-0.248, 1.884, 3.100),
(-0.492, 1.835, 3.100),
(-0.388, 1.449, 3.100),
(-0.196, 1.487, 3.100),
(-0.492, 1.835, 3.100),
(-0.727, 1.755, 3.100),
(-0.574, 1.386, 3.100),
(-0.388, 1.449, 3.100),
(-0.727, 1.755, 3.100),
(-0.950, 1.645, 3.100),
(-0.750, 1.299, 3.100),
(-0.574, 1.386, 3.100),
(-0.950, 1.645, 3.100),
(-1.157, 1.507, 3.100),
(-0.913, 1.190, 3.100),
(-0.750, 1.299, 3.100),
(-1.157, 1.507, 3.100),
(-1.344, 1.344, 3.100),
(-1.061, 1.061, 3.100),
(-0.913, 1.190, 3.100),
(-1.344, 1.344, 3.100),
(-1.507, 1.157, 3.100),
(-1.190, 0.913, 3.100),
(-1.061, 1.061, 3.100),
(-1.507, 1.157, 3.100),
(-1.645, 0.950, 3.100),
(-1.299, 0.750, 3.100),
(-1.190, 0.913, 3.100),
(-1.645, 0.950, 3.100),
(-1.755, 0.727, 3.100),
(-1.386, 0.574, 3.100),
(-1.299, 0.750, 3.100),
(-1.755, 0.727, 3.100),
(-1.835, 0.492, 3.100),
(-1.449, 0.388, 3.100),
(-1.386, 0.574, 3.100),
(-1.835, 0.492, 3.100),
(-1.884, 0.248, 3.100),
(-1.487, 0.196, 3.100),
(-1.449, 0.388, 3.100),
(-1.884, 0.248, 3.100),
(-1.900, 0.000, 3.100),
(-1.500, 0.000, 3.100),
(-1.487, 0.196, 3.100),
(-1.900, 0.000, 3.100),
(-1.884, -0.248, 3.100),
(-1.487, -0.196, 3.100),
(-1.500, 0.000, 3.100),
(-1.884, -0.248, 3.100),
(-1.835, -0.492, 3.100),
(-1.449, -0.388, 3.100),
(-1.487, -0.196, 3.100),
(-1.835, -0.492, 3.100),
(-1.755, -0.727, 3.100),
(-1.386, -0.574, 3.100),
(-1.449, -0.388, 3.100),
(-1.755, -0.727, 3.100),
(-1.645, -0.950, 3.100),
(-1.299, -0.750, 3.100),
(-1.386, -0.574, 3.100),
(-1.645, -0.950, 3.100),
(-1.507, -1.157, 3.100),
(-1.190, -0.913, 3.100),
(-1.299, -0.750, 3.100),
(-1.507, -1.157, 3.100),
(-1.344, -1.344, 3.100),
(-1.061, -1.061, 3.100),
(-1.190, -0.913, 3.100),
(-1.344, -1.344, 3.100),
(-1.157, -1.507, 3.100),
(-0.913, -1.190, 3.100),
(-1.061, -1.061, 3.100),
(-1.157, -1.507, 3.100),
(-0.950, -1.645, 3.100),
(-0.750, -1.299, 3.100),
(-0.913, -1.190, 3.100),
(-0.950, -1.645, 3.100),
(-0.727, -1.755, 3.100),
(-0.574, -1.386, 3.100),
(-0.750, -1.299, 3.100),
(-0.727, -1.755, 3.100),
(-0.492, -1.835, 3.100),
(-0.388, -1.449, 3.100),
(-0.574, -1.386, 3.100),
(-0.492, -1.835, 3.100),
(-0.248, -1.884, 3.100),
(-0.196, -1.487, 3.100),
(-0.388, -1.449, 3.100),
(-0.248, -1.884, 3.100),
(0.000, -1.900, 3.100),
(0.000, -1.500, 3.100),
(-0.196, -1.487, 3.100),
(0.000, -1.900, 3.100),
(0.248, -1.884, 3.100),
(0.196, -1.487, 3.100),
(0.000, -1.500, 3.100),
(0.248, -1.884, 3.100),
(0.492, -1.835, 3.100),
(0.388, -1.449, 3.100),
(0.196, -1.487, 3.100),
(0.492, -1.835, 3.100),
(0.727, -1.755, 3.100),
(0.574, -1.386, 3.100),
(0.388, -1.449, 3.100),
(0.727, -1.755, 3.100),
(0.950, -1.645, 3.100),
(0.750, -1.299, 3.100),
(0.574, -1.386, 3.100),
(0.950, -1.645, 3.100),
(1.157, -1.507, 3.100),
(0.913, -1.190, 3.100),
(0.750, -1.299, 3.100),
(1.157, -1.507, 3.100),
(1.344, -1.344, 3.100),
(1.061, -1.061, 3.100),
(0.913, -1.190, 3.100),
(1.344, -1.344, 3.100),
(1.507, -1.157, 3.100),
(1.190, -0.913, 3.100),
(1.061, -1.061, 3.100),
(1.507, -1.157, 3.100),
(1.645, -0.950, 3.100),
(1.299, -0.750, 3.100),
(1.190, -0.913, 3.100),
(1.645, -0.950, 3.100),
(1.755, -0.727, 3.100),
(1.386, -0.574, 3.100),
(1.299, -0.750, 3.100),
(1.755, -0.727, 3.100),
(1.835, -0.492, 3.100),
(1.449, -0.388, 3.100),
(1.386, -0.574, 3.100),
(1.835, -0.492, 3.100),
(1.884, -0.248, 3.100),
(1.487, -0.196, 3.100),
(1.449, -0.388, 3.100),
(1.884, -0.248, 3.100),
(1.900, 0.000, 3.100),
(1.500, 0.000, 3.100),
(1.487, -0.196, 3.100)
]
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, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191
]
rel material:binding = </Generator/Looks/AlarmRed>
token visibility = "invisible"
}
}