From 6a408af364390de01122b83df65db08b8113615d Mon Sep 17 00:00:00 2001 From: debloip Date: Thu, 27 Jun 2024 15:04:11 -0400 Subject: [PATCH 01/75] HYDRA-1058 : Rough basic structure for GeomSubset picking --- lib/mayaHydra/mayaPlugin/plugin.cpp | 26 ++ lib/mayaHydra/mayaPlugin/renderOverride.cpp | 269 ++++++++++++++++---- lib/mayaHydra/mayaPlugin/tokens.cpp | 4 + lib/mayaHydra/mayaPlugin/tokens.h | 15 ++ 4 files changed, 268 insertions(+), 46 deletions(-) diff --git a/lib/mayaHydra/mayaPlugin/plugin.cpp b/lib/mayaHydra/mayaPlugin/plugin.cpp index c1a10b222b..498772144e 100644 --- a/lib/mayaHydra/mayaPlugin/plugin.cpp +++ b/lib/mayaHydra/mayaPlugin/plugin.cpp @@ -31,6 +31,7 @@ #include #include +#include #include #include @@ -83,6 +84,13 @@ void finalize() MayaHydra::MayaColorPreferencesTranslator::deleteInstance(); } +static std::optional gsPluginLoadCallbackId; + +void pluginLoadCallback( const MStringArray& strs, void* clientData ) +{ + +} + PLUGIN_EXPORT MStatus initializePlugin(MObject obj) { MString experimental("mayaHydra is experimental."); @@ -123,6 +131,20 @@ PLUGIN_EXPORT MStatus initializePlugin(MObject obj) } } + MStatus pluginLoadCallbackStatus; + MCallbackId pluginLoadCallbackId = MSceneMessage::addStringArrayCallback( + MSceneMessage::Message::kAfterPluginLoad, + pluginLoadCallback, + nullptr, + &pluginLoadCallbackStatus); + if (pluginLoadCallbackStatus) { + gsPluginLoadCallbackId = pluginLoadCallbackId; + } else { + ret = MS::kFailure; + ret.perror("Error registering plugin load callback."); + return ret; + } + initialize(); return ret; @@ -132,6 +154,10 @@ PLUGIN_EXPORT MStatus uninitializePlugin(MObject obj) { finalize(); + if (gsPluginLoadCallbackId.has_value()) { + MSceneMessage::removeCallback(gsPluginLoadCallbackId.value()); + } + MFnPlugin plugin(obj, "Autodesk", PLUGIN_VERSION, "Any"); MStatus ret = MS::kSuccess; if (auto* renderer = MHWRender::MRenderer::theRenderer()) { diff --git a/lib/mayaHydra/mayaPlugin/renderOverride.cpp b/lib/mayaHydra/mayaPlugin/renderOverride.cpp index 144916ac48..4d3bb8c309 100644 --- a/lib/mayaHydra/mayaPlugin/renderOverride.cpp +++ b/lib/mayaHydra/mayaPlugin/renderOverride.cpp @@ -30,6 +30,18 @@ #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #ifdef CODE_COVERAGE_WORKAROUND #include @@ -42,8 +54,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -208,6 +222,26 @@ UsdPrim GetPrimOrAncestorWithKind(const UsdPrim& prim, const TfToken& kind) return iterPrim; } +std::vector GetSelectedFaceSubsets(const UsdPrim& prim, const int faceIndex) +{ + std::vector selectedFaceSubsets; + + auto faceSubsets = UsdGeomSubset::GetGeomSubsets(UsdGeomImageable(prim), UsdGeomTokens->face); + for (const auto& faceSubset : faceSubsets) { + auto indicesAttr = faceSubset.GetIndicesAttr(); + VtIntArray indices; + indicesAttr.Get(&indices); + for (auto index : indices) { + if (index == faceIndex) { + selectedFaceSubsets.push_back(faceSubset.GetPath()); + break; + } + } + } + + return selectedFaceSubsets; +} + //! Pick resolution behavior to use when the picked object is a point instance. enum UsdPointInstancesPickMode { @@ -228,6 +262,12 @@ enum UsdPointInstancesPickMode Prototypes }; +enum UsdGeomSubsetsPickMode +{ + Prims = 0, + GeomSubsets +}; + //! \brief Query the pick mode to use when picking point instances in the viewport. //! \return A UsdPointInstancesPickMode enum value indicating the pick mode behavior //! to employ when the picked object is a point instance. @@ -255,14 +295,35 @@ UsdPointInstancesPickMode GetPointInstancesPickMode() return pickMode; } +UsdGeomSubsetsPickMode GetGeomSubsetsPickMode() +{ + static const MString kOptionVarName(MayaHydraPickOptionVars->GeomSubsetsPickMode.GetText()); + + auto pickMode = UsdGeomSubsetsPickMode::Prims; + + if (MGlobal::optionVarExists(kOptionVarName)) { + const TfToken pickModeToken(MGlobal::optionVarStringValue(kOptionVarName).asChar()); + + if (pickModeToken == GeomSubsetsPickModeTokens->Prims) { + pickMode = UsdGeomSubsetsPickMode::Prims; + } else if (pickModeToken == GeomSubsetsPickModeTokens->GeomSubsets) { + pickMode = UsdGeomSubsetsPickMode::GeomSubsets; + } + } + + return pickMode; +} + struct PickInput { PickInput( const HdxPickHit& pickHitArg, - const MHWRender::MSelectionInfo& pickInfoArg - ) : pickHit(pickHitArg), pickInfo(pickInfoArg) {} + const MHWRender::MSelectionInfo& pickInfoArg, + const bool isSolePickHit + ) : pickHit(pickHitArg), pickInfo(pickInfoArg), isSolePickHit(isSolePickHit) {} const HdxPickHit& pickHit; const MHWRender::MSelectionInfo& pickInfo; + const bool isSolePickHit; }; // Picking output can go either to the UFE representation of the Maya selection @@ -441,6 +502,82 @@ class UsdPickHandler : public MtohRenderOverride::PickHandlerBase { UsdPickHandler(MtohRenderOverride& renderOverride) : PickHandlerBase(renderOverride) {} + + std::vector resolveGeomSubsetsPicking(HdSceneIndexBaseConstRefPtr sceneIndex, const SdfPath& basePrimPath, const TfToken& geomSubsetType, int componentIndex) const + { + if (componentIndex < 0 || sceneIndex->GetPrim(basePrimPath).primType != HdPrimTypeTokens->mesh) { + return {}; + } + + std::vector pickedGeomSubsets; + auto childPaths = sceneIndex->GetChildPrimPaths(basePrimPath); + for (const auto& childPath : childPaths) { + HdSceneIndexPrim childPrim = sceneIndex->GetPrim(childPath); + if (childPrim.primType != HdPrimTypeTokens->geomSubset) { + continue; + } + + auto modelPathDataSource = HdTypedSampledDataSource::Cast( + HdContainerDataSource::Get(childPrim.dataSource, HdDataSourceLocator(TfToken("model"), TfToken("modelPath"))) + ); + if (!modelPathDataSource || modelPathDataSource->GetTypedValue(0) != basePrimPath) { + continue; + } + + HdGeomSubsetSchema geomSubsetSchema = HdGeomSubsetSchema(childPrim.dataSource); + if (!geomSubsetSchema.IsDefined() || geomSubsetSchema.GetType()->GetTypedValue(0) != geomSubsetType) { + continue; + } + + auto geomSubsetIndices = geomSubsetSchema.GetIndices()->GetTypedValue(0); + for (const auto& index : geomSubsetIndices) { + if (index == componentIndex) { + HdPrimOriginSchema primOriginSchema = HdPrimOriginSchema::GetFromParent(childPrim.dataSource); + if (primOriginSchema.IsDefined()) { + auto usdPath = primOriginSchema.GetOriginPath(HdPrimOriginSchemaTokens->scenePath); + pickedGeomSubsets.push_back({usdPath, -1}); + } + } + } + } + return pickedGeomSubsets; + } + + std::vector resolvePointInstancePicking(HdRenderIndex& renderIndex, const HdxPickHit& pickHit) const + { + auto primOrigin = HdxPrimOriginInfo::FromPickHit(&renderIndex, pickHit); + + if (pickHit.instancerId.IsEmpty()) { + return {{primOrigin.GetFullPath(), -1}}; + } + + // If there is a Hydra instancer, distinguish between native instancing + // (implicit USD prototype created by USD itself) and point instancing + // (explicitly authored USD prototypes). As per HdxInstancerContext + // documentation: + // + // [...] "exactly one of instancePrimOrigin or instancerPrimOrigin will + // contain data depending on whether the instancing at the current + // level was implicit or not, respectively." + const auto& instancerContext = primOrigin.instancerContexts.front(); + + if (instancerContext.instancePrimOrigin) { + // Implicit prototype instancing (i.e. USD native instancing). + auto schema = HdPrimOriginSchema(instancerContext.instancePrimOrigin); + if (!TF_VERIFY(schema, "Cannot build prim origin schema for USD native instance.")) { + return {{SdfPath(), -1}}; + } + return {{schema.GetOriginPath(HdPrimOriginSchemaTokens->scenePath), -1}}; + } + + // Explicit prototype instancing (i.e. USD point instancing). + std::function pickFn[] = {pickInstancer, pickInstance, pickPrototype}; + + // Retrieve pick mode from mayaUsd optionVar, to see if we're picking + // instances, the instancer itself, or the prototype instanced by the + // point instance. + return {pickFn[GetPointInstancesPickMode()](primOrigin, pickHit)}; + } // Return the closest path and the instance index in the scene index scene // that corresponds to the pick hit. If the pick hit is not an instance, @@ -501,56 +638,83 @@ class UsdPickHandler : public MtohRenderOverride::PickHandlerBase { return false; } - // For the USD pick handler pick results are directly returned with USD - // scene paths, so no need to remove scene index plugin path prefix. - const auto& [pickedUsdPath, instanceNdx] = hitPath(pickInput.pickHit); - - const auto pickedMayaPath = usdPathToUfePath(registration, pickedUsdPath); - const auto snMayaPath = - // As per https://stackoverflow.com/questions/46114214 - // structured bindings cannot be captured by a lambda in C++ 17, - // so pass in pickedUsdPath and instanceNdx as lambda arguments. - [&pickedMayaPath, ®istration]( - const SdfPath& pickedUsdPath, int instanceNdx) { - - if (instanceNdx >= 0) { - // Point instance: add the instance index to the path. - // Appending a numeric component to the path to identify a - // point instance cannot be done on the picked SdfPath, as - // numeric path components are not allowed by SdfPath. Do so - // here with Ufe::Path, which has no such restriction. - return pickedMayaPath + std::to_string(instanceNdx); - } + std::vector hitPaths; - // Not an instance: adjust picked path for selection kind. - auto snKind = GetSelectionKind(); - if (snKind.IsEmpty()) { - return pickedMayaPath; + if (GetGeomSubsetsPickMode() == UsdGeomSubsetsPickMode::GeomSubsets) { + auto geomSubsetsHitPaths = resolveGeomSubsetsPicking( + renderIndex()->GetTerminalSceneIndex(), + pickInput.pickHit.objectId, + HdGeomSubsetSchemaTokens->typeFaceSet, + pickInput.pickHit.elementIndex); + if (!geomSubsetsHitPaths.empty()) { + hitPaths.insert(hitPaths.end(), geomSubsetsHitPaths.begin(), geomSubsetsHitPaths.end()); } - // Get the prim from the stage and path, to access the - // UsdModelAPI for the prim. - auto proxyShapeObj = registration->dagNode.object(); - if (proxyShapeObj.isNull()) { - TF_FATAL_ERROR("No mayaUsd proxy shape object corresponds to USD pick"); - return pickedMayaPath; + if (hitPaths.empty() && pickInput.isSolePickHit) { + auto pointInstanceHitPaths = resolvePointInstancePicking(*renderIndex(), pickInput.pickHit); + if (!pointInstanceHitPaths.empty()) { + hitPaths.insert(hitPaths.end(), pointInstanceHitPaths.begin(), pointInstanceHitPaths.end()); + } + } + } else { + auto pointInstanceHitPaths = resolvePointInstancePicking(*renderIndex(), pickInput.pickHit); + if (!pointInstanceHitPaths.empty()) { + hitPaths.insert(hitPaths.end(), pointInstanceHitPaths.begin(), pointInstanceHitPaths.end()); } + } - MayaUsdAPI::ProxyStage proxyStage{proxyShapeObj}; - auto prim = proxyStage.getUsdStage()->GetPrimAtPath(pickedUsdPath); - prim = GetPrimOrAncestorWithKind(prim, snKind); - const auto usdPath = prim ? prim.GetPath() : pickedUsdPath; + // For the USD pick handler pick results are directly returned with USD + // scene paths, so no need to remove scene index plugin path prefix. + size_t nbSelectedUfeItems = 0; + for (const auto& [pickedUsdPath, instanceNdx] : hitPaths) { + const auto pickedMayaPath = usdPathToUfePath(registration, pickedUsdPath); + const auto snMayaPath = + // As per https://stackoverflow.com/questions/46114214 + // structured bindings cannot be captured by a lambda in C++ 17, + // so pass in pickedUsdPath and instanceNdx as lambda arguments. + [&pickedMayaPath, ®istration]( + const SdfPath& pickedUsdPath, int instanceNdx) { + + if (instanceNdx >= 0) { + // Point instance: add the instance index to the path. + // Appending a numeric component to the path to identify a + // point instance cannot be done on the picked SdfPath, as + // numeric path components are not allowed by SdfPath. Do so + // here with Ufe::Path, which has no such restriction. + return pickedMayaPath + std::to_string(instanceNdx); + } - return usdPathToUfePath(registration, usdPath); - }(pickedUsdPath, instanceNdx); + // Not an instance: adjust picked path for selection kind. + auto snKind = GetSelectionKind(); + if (snKind.IsEmpty()) { + return pickedMayaPath; + } - auto si = Ufe::Hierarchy::createItem(snMayaPath); - if (!si) { - return false; - } + // Get the prim from the stage and path, to access the + // UsdModelAPI for the prim. + auto proxyShapeObj = registration->dagNode.object(); + if (proxyShapeObj.isNull()) { + TF_FATAL_ERROR("No mayaUsd proxy shape object corresponds to USD pick"); + return pickedMayaPath; + } - pickOutput.ufeSelection->append(si); - return true; + MayaUsdAPI::ProxyStage proxyStage{proxyShapeObj}; + auto prim = proxyStage.getUsdStage()->GetPrimAtPath(pickedUsdPath); + prim = GetPrimOrAncestorWithKind(prim, snKind); + const auto usdPath = prim ? prim.GetPath() : pickedUsdPath; + + return usdPathToUfePath(registration, usdPath); + }(pickedUsdPath, instanceNdx); + + auto si = Ufe::Hierarchy::createItem(snMayaPath); + if (!si) { + continue; + } + + pickOutput.ufeSelection->append(si); + nbSelectedUfeItems++; + } + return nbSelectedUfeItems > 0; } }; @@ -1700,7 +1864,7 @@ void MtohRenderOverride::_PopulateSelectionList( MStatus status; for (const HdxPickHit& hit : hits) { - PickInput pickInput(hit, selectInfo); + PickInput pickInput(hit, selectInfo, hits.size() == 1u); _PickHandler(hit)->handlePickHit(pickInput, pickOutput); } @@ -1756,6 +1920,9 @@ void MtohRenderOverride::_PickByRegion( pickParams.viewMatrix.Set(viewMatrix.matrix); pickParams.projectionMatrix.Set(adjustedProjMatrix.matrix); pickParams.resolveMode = HdxPickTokens->resolveUnique; + if (GetGeomSubsetsPickMode() == UsdGeomSubsetsPickMode::GeomSubsets) { + pickParams.pickTarget = HdxPickTokens->pickFaces; + } if (pointSnappingActive) { pickParams.pickTarget = HdxPickTokens->pickPoints; @@ -1863,7 +2030,17 @@ bool MtohRenderOverride::select( outHits.clear(); } } - + static std::mutex printMutex; + { + std::lock_guard printLock(printMutex); + //std::cout << " ----------------- " << std::endl; + for (size_t iHit = 0; iHit < outHits.size(); iHit++) { + //std::cout << "Pick #" << iHit + 1 << " : " << std::endl; + std::stringstream ss; + ss << outHits[iHit]; + //std::cout << ss.str() << std::endl; + } + } _PopulateSelectionList(outHits, selectInfo, selectionList, worldSpaceHitPts); return true; } diff --git a/lib/mayaHydra/mayaPlugin/tokens.cpp b/lib/mayaHydra/mayaPlugin/tokens.cpp index 4cc78edb95..7d9215d40e 100644 --- a/lib/mayaHydra/mayaPlugin/tokens.cpp +++ b/lib/mayaHydra/mayaPlugin/tokens.cpp @@ -25,4 +25,8 @@ TF_DEFINE_PUBLIC_TOKENS( ); // clang-format on +TF_DEFINE_PUBLIC_TOKENS(MayaHydraPickOptionVars, MAYAHYDRA_PICK_OPTIONVAR_TOKENS); + +TF_DEFINE_PUBLIC_TOKENS(GeomSubsetsPickModeTokens, GEOMSUBSETS_PICK_MODE_TOKENS); + PXR_NAMESPACE_CLOSE_SCOPE diff --git a/lib/mayaHydra/mayaPlugin/tokens.h b/lib/mayaHydra/mayaPlugin/tokens.h index 6cf8e20f7f..b4957d9ce3 100644 --- a/lib/mayaHydra/mayaPlugin/tokens.h +++ b/lib/mayaHydra/mayaPlugin/tokens.h @@ -31,6 +31,21 @@ PXR_NAMESPACE_OPEN_SCOPE // This is not an exported API. TF_DECLARE_PUBLIC_TOKENS(MtohTokens, , MTOH_TOKENS); +// clang-format off +#define MAYAHYDRA_PICK_OPTIONVAR_TOKENS \ + ((GeomSubsetsPickMode, "mayaHydra_GeomSubsetsPickMode")) +// clang-format on + +TF_DECLARE_PUBLIC_TOKENS(MayaHydraPickOptionVars, MAYAHYDRA_PICK_OPTIONVAR_TOKENS); + +// clang-format off +#define GEOMSUBSETS_PICK_MODE_TOKENS \ + (Prims) \ + (GeomSubsets) +// clang-format on + +TF_DECLARE_PUBLIC_TOKENS(GeomSubsetsPickModeTokens, GEOMSUBSETS_PICK_MODE_TOKENS); + PXR_NAMESPACE_CLOSE_SCOPE #endif // MTOH_TOKENS_H From 8411237320f1c4a0ae3744835f7f7ef783b9372e Mon Sep 17 00:00:00 2001 From: debloip Date: Thu, 27 Jun 2024 16:50:44 -0400 Subject: [PATCH 02/75] HYDRA-1058 : Attempt to add menu item to USD selection mode menu --- CMakeLists.txt | 5 ++ lib/mayaHydra/mayaPlugin/plugin.cpp | 11 +++- modules/mayaHydra.mod.template | 2 +- modules/mayaHydra_Win.mod.template | 2 +- scripts/CMakeLists.txt | 12 +++++ scripts/mayaHydraMenus.mel | 51 +++++++++++++++++++ scripts/mayaHydra_registerUI_batch_load.mel | 6 +++ scripts/mayaHydra_registerUI_batch_unload.mel | 6 +++ scripts/mayaHydra_registerUI_load.mel | 7 +++ scripts/mayaHydra_registerUI_unload.mel | 14 +++++ 10 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 scripts/CMakeLists.txt create mode 100644 scripts/mayaHydraMenus.mel create mode 100644 scripts/mayaHydra_registerUI_batch_load.mel create mode 100644 scripts/mayaHydra_registerUI_batch_unload.mel create mode 100644 scripts/mayaHydra_registerUI_load.mel create mode 100644 scripts/mayaHydra_registerUI_unload.mel diff --git a/CMakeLists.txt b/CMakeLists.txt index 398bb85a5f..dbdc901810 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -231,6 +231,11 @@ if(BUILD_HDSB_PLUGIN) endif() endif() +#------------------------------------------------------------------------------ +# scripts +#------------------------------------------------------------------------------ +add_subdirectory(scripts) + #------------------------------------------------------------------------------ # install #------------------------------------------------------------------------------ diff --git a/lib/mayaHydra/mayaPlugin/plugin.cpp b/lib/mayaHydra/mayaPlugin/plugin.cpp index 498772144e..736a0b40ab 100644 --- a/lib/mayaHydra/mayaPlugin/plugin.cpp +++ b/lib/mayaHydra/mayaPlugin/plugin.cpp @@ -88,7 +88,10 @@ static std::optional gsPluginLoadCallbackId; void pluginLoadCallback( const MStringArray& strs, void* clientData ) { - + std::cout << "pluginLoadCallback ------------------------- " << std::endl; + for (const auto& str : strs) { + std::cout << str.asChar() << std::endl; + } } PLUGIN_EXPORT MStatus initializePlugin(MObject obj) @@ -145,6 +148,12 @@ PLUGIN_EXPORT MStatus initializePlugin(MObject obj) return ret; } + plugin.registerUI( + "mayaHydra_registerUI_load", + "mayaHydra_registerUI_unload", + "mayaHydra_registerUI_batch_load", + "mayaHydra_registerUI_batch_unload"); + initialize(); return ret; diff --git a/modules/mayaHydra.mod.template b/modules/mayaHydra.mod.template index 8deb2f43e7..96f5882164 100644 --- a/modules/mayaHydra.mod.template +++ b/modules/mayaHydra.mod.template @@ -13,6 +13,6 @@ PXR_MTLX_STDLIB_SEARCH_PATHS+:=libraries icons: plug-ins: lib/maya presets: -scripts: +scripts: scripts resources: ${PXR_OVERRIDE_PLUGINPATH_NAME}+:=lib/usd diff --git a/modules/mayaHydra_Win.mod.template b/modules/mayaHydra_Win.mod.template index 760f44306d..1902895cfa 100644 --- a/modules/mayaHydra_Win.mod.template +++ b/modules/mayaHydra_Win.mod.template @@ -16,7 +16,7 @@ PXR_MTLX_STDLIB_SEARCH_PATHS+:=libraries icons: plug-ins: lib/maya presets: -scripts: +scripts: scripts resources: PATH+:=lib ${PXR_OVERRIDE_PLUGINPATH_NAME}+:=lib/usd diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt new file mode 100644 index 0000000000..d44441e8c1 --- /dev/null +++ b/scripts/CMakeLists.txt @@ -0,0 +1,12 @@ +set(MEL_SCRIPT_FILES + mayaHydraMenus.mel + mayaHydra_registerUI_load.mel + mayaHydra_registerUI_unload.mel + mayaHydra_registerUI_batch_load.mel + mayaHydra_registerUI_batch_unload.mel +) + +install( + FILES ${MEL_SCRIPT_FILES} + DESTINATION ${CMAKE_INSTALL_PREFIX}/scripts +) diff --git a/scripts/mayaHydraMenus.mel b/scripts/mayaHydraMenus.mel new file mode 100644 index 0000000000..6a8469403b --- /dev/null +++ b/scripts/mayaHydraMenus.mel @@ -0,0 +1,51 @@ +global proc mayaHydraMenus_PrepareMenus() { + global string $gMainSelectMenu; // Maya's "Select" menu + addMenuCallback($gMainSelectMenu, "mayaHydraMenus_SelectMenuOpenedCallback"); +} + +global int $g_mayaHydraMenus_SelectMenuIdleEventId; + +global string $gMayaUsdSelectModeSubMenu; + +global proc mayaHydraMenus_SelectMenuOpenedCallback() { + global string $gMainSelectMenu; // Maya's "Select" menu + removeMenuCallback($gMainSelectMenu, "mayaHydraMenus_SelectMenuOpenedCallback"); + + $g_mayaHydraMenus_SelectMenuIdleEventId = `scriptJob -idleEvent "mayaHydraMenus_CreateSelectMenuItems"`; +} + +global proc mayaHydraMenus_CreateSelectMenuItems() { + // Check if the USD Selection menu exists, and if not, wait for it by returning immediately + if ($gMayaUsdSelectModeSubMenu == "" || !`menuItem -q -exists $gMayaUsdSelectModeSubMenu`) { + return; + } + + // The USD Selection menu now exists, so stop calling this idle event callback + scriptJob -kill $g_mayaHydraMenus_SelectMenuIdleEventId; + + menuItem -divider true -dividerLabel "New Divider" -parent $gMayaUsdSelectModeSubMenu; +} + + +// addMenuCallback and removeMenuCallback copied from MayaUSD +// See here : [TODO : insert link] + +/////////////////////////////////////////////////////////////////////////////// +// addMenuCallback +// safely add a post menu callback to a menu +proc addMenuCallback(string $menuName, string $cmd) { + string $existingCallbacks = `menu -q -pmc $menuName`; + // append the callback + menu -e -pmc ($existingCallbacks + ";" + $cmd + ";") $menuName; +} + +/////////////////////////////////////////////////////////////////////////////// +// removeMenuCallback +// safely remove a post menu callback to a menu +proc removeMenuCallback(string $menuName, string $cmd) { + string $existingCallbacks = `menu -q -pmc $menuName`; + // remove our callback from the string of callbacks + string $newCallbacks = + `substitute (";"+$cmd+".*;") $existingCallbacks ""`; + menu -e -pmc $newCallbacks $menuName; +} diff --git a/scripts/mayaHydra_registerUI_batch_load.mel b/scripts/mayaHydra_registerUI_batch_load.mel new file mode 100644 index 0000000000..5a2bba4a93 --- /dev/null +++ b/scripts/mayaHydra_registerUI_batch_load.mel @@ -0,0 +1,6 @@ +global proc mayaHydra_registerUI_batch_load() +// Callback registered with the MFnPlugin for when the plugin is loaded +// in batch mode. +// Do not currently have anything we need to handle. +{ +} diff --git a/scripts/mayaHydra_registerUI_batch_unload.mel b/scripts/mayaHydra_registerUI_batch_unload.mel new file mode 100644 index 0000000000..d5c8ea3b11 --- /dev/null +++ b/scripts/mayaHydra_registerUI_batch_unload.mel @@ -0,0 +1,6 @@ +global proc mayaHydra_registerUI_batch_unload() +// Callback registered with the MFnPlugin for when the plugin is loaded +// in batch mode. +// Do not currently have anything we need to handle. +{ +} diff --git a/scripts/mayaHydra_registerUI_load.mel b/scripts/mayaHydra_registerUI_load.mel new file mode 100644 index 0000000000..24472dbbc8 --- /dev/null +++ b/scripts/mayaHydra_registerUI_load.mel @@ -0,0 +1,7 @@ +global proc mayaHydra_registerUI_load() +// Callback registered with the MFnPlugin for when the plugin is loaded. +// Used to initialize any UI we create. +{ + source "mayaHydraMenus.mel"; + mayaHydraMenus_PrepareMenus; +} diff --git a/scripts/mayaHydra_registerUI_unload.mel b/scripts/mayaHydra_registerUI_unload.mel new file mode 100644 index 0000000000..8b8a94903a --- /dev/null +++ b/scripts/mayaHydra_registerUI_unload.mel @@ -0,0 +1,14 @@ +global proc mayaUsd_pluginUIDeletion() +// Callback registered with the MFnPlugin for when the plugin is unloaded. +// Used to remove any UI we create. +{ + // We do not bother unloading the ufeSupport plugin here, even though + // we do attempt to load it when this plugin gets loaded. It is a utility + // plugin that we depend on, but so could others so we will leave it alone. + + + // Unregister the Preferences tab. + deleteCustomPrefsTab("mayaUsd_PrefCreateTab"); + + mayaUsdMenu_unloadui(); +} From d22f02867e9b80f436636637217570bef8c5f111 Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 28 Jun 2024 11:30:59 -0400 Subject: [PATCH 03/75] HYDRA-1058 : Functioning registering of menu items in USD selection menu --- scripts/mayaHydraMenus.mel | 82 ++++++++++++++++++++++++++++---------- 1 file changed, 60 insertions(+), 22 deletions(-) diff --git a/scripts/mayaHydraMenus.mel b/scripts/mayaHydraMenus.mel index 6a8469403b..821c087eae 100644 --- a/scripts/mayaHydraMenus.mel +++ b/scripts/mayaHydraMenus.mel @@ -1,3 +1,47 @@ +// addMenuCallback and removeMenuCallback copied from MayaUSD +// See here : [TODO : insert link] + +/////////////////////////////////////////////////////////////////////////////// +// addMenuCallback +// safely add a post menu callback to a menu +proc addMenuCallback(string $menuName, string $cmd) { + string $existingCallbacks = `menu -q -pmc $menuName`; + // append the callback + menu -e -pmc ($existingCallbacks + ";" + $cmd + ";") $menuName; +} + +/////////////////////////////////////////////////////////////////////////////// +// removeMenuCallback +// safely remove a post menu callback to a menu +proc removeMenuCallback(string $menuName, string $cmd) { + string $existingCallbacks = `menu -q -pmc $menuName`; + // remove our callback from the string of callbacks + string $newCallbacks = + `substitute (";"+$cmd+".*;") $existingCallbacks ""`; + menu -e -pmc $newCallbacks $menuName; +} + +/////////////////////////////////////////////////////////////////////////////// +// addMenuItemCallback +// safely add a post menu item callback to a menu item +proc addMenuItemCallback(string $menuItemName, string $cmd) { + string $existingCallbacks = `menuItem -q -pmc $menuItemName`; + // append the callback + menuItem -e -pmc ($existingCallbacks + ";" + $cmd + ";") $menuItemName; +} + +/////////////////////////////////////////////////////////////////////////////// +// removeMenuItemCallback +// safely remove a post menu item callback to a menu item +proc removeMenuItemCallback(string $menuItemName, string $cmd) { + string $existingCallbacks = `menuItem -q -pmc $menuItemName`; + // remove our callback from the string of callbacks + string $newCallbacks = + `substitute (";"+$cmd+".*;") $existingCallbacks ""`; + menuItem -e -pmc $newCallbacks $menuItemName; +} + + global proc mayaHydraMenus_PrepareMenus() { global string $gMainSelectMenu; // Maya's "Select" menu addMenuCallback($gMainSelectMenu, "mayaHydraMenus_SelectMenuOpenedCallback"); @@ -7,45 +51,39 @@ global int $g_mayaHydraMenus_SelectMenuIdleEventId; global string $gMayaUsdSelectModeSubMenu; +global int $g_mayaHydraMenus_PickModeMenuEventRegistered; + global proc mayaHydraMenus_SelectMenuOpenedCallback() { global string $gMainSelectMenu; // Maya's "Select" menu removeMenuCallback($gMainSelectMenu, "mayaHydraMenus_SelectMenuOpenedCallback"); + global int $g_mayaHydraMenus_SelectMenuIdleEventId; $g_mayaHydraMenus_SelectMenuIdleEventId = `scriptJob -idleEvent "mayaHydraMenus_CreateSelectMenuItems"`; } global proc mayaHydraMenus_CreateSelectMenuItems() { + global string $gMayaUsdSelectModeSubMenu; // Check if the USD Selection menu exists, and if not, wait for it by returning immediately if ($gMayaUsdSelectModeSubMenu == "" || !`menuItem -q -exists $gMayaUsdSelectModeSubMenu`) { return; } - // The USD Selection menu now exists, so stop calling this idle event callback - scriptJob -kill $g_mayaHydraMenus_SelectMenuIdleEventId; + print "ScriptJob running"; - menuItem -divider true -dividerLabel "New Divider" -parent $gMayaUsdSelectModeSubMenu; + global int $g_mayaHydraMenus_PickModeMenuEventRegistered; + if ($g_mayaHydraMenus_PickModeMenuEventRegistered == 0) { + addMenuItemCallback($gMayaUsdSelectModeSubMenu, "mayaHydraMenus_CreatePickModeMenuItems"); + $g_mayaHydraMenus_PickModeMenuEventRegistered = 1; + } } +global proc mayaHydraMenus_CreatePickModeMenuItems() { + global string $gMayaUsdSelectModeSubMenu; + removeMenuItemCallback($gMayaUsdSelectModeSubMenu, "mayaHydraMenus_CreatePickModeMenuItems"); -// addMenuCallback and removeMenuCallback copied from MayaUSD -// See here : [TODO : insert link] + global int $g_mayaHydraMenus_SelectMenuIdleEventId; + scriptJob -kill $g_mayaHydraMenus_SelectMenuIdleEventId -force; -/////////////////////////////////////////////////////////////////////////////// -// addMenuCallback -// safely add a post menu callback to a menu -proc addMenuCallback(string $menuName, string $cmd) { - string $existingCallbacks = `menu -q -pmc $menuName`; - // append the callback - menu -e -pmc ($existingCallbacks + ";" + $cmd + ";") $menuName; + menuItem -divider true -dividerLabel "New Divider" -parent $gMayaUsdSelectModeSubMenu; } -/////////////////////////////////////////////////////////////////////////////// -// removeMenuCallback -// safely remove a post menu callback to a menu -proc removeMenuCallback(string $menuName, string $cmd) { - string $existingCallbacks = `menu -q -pmc $menuName`; - // remove our callback from the string of callbacks - string $newCallbacks = - `substitute (";"+$cmd+".*;") $existingCallbacks ""`; - menu -e -pmc $newCallbacks $menuName; -} From 498894af99fb6f3e6b03d55d5a2998859dc14fef Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 28 Jun 2024 11:55:47 -0400 Subject: [PATCH 04/75] HYDRA-1058 : Functional picking mode menu --- scripts/mayaHydraMenus.mel | 46 ++++++++++++++++++++++++++- scripts/mayaHydra_registerUI_load.mel | 38 ++++++++++++++++++++++ 2 files changed, 83 insertions(+), 1 deletion(-) diff --git a/scripts/mayaHydraMenus.mel b/scripts/mayaHydraMenus.mel index 821c087eae..981e7684e8 100644 --- a/scripts/mayaHydraMenus.mel +++ b/scripts/mayaHydraMenus.mel @@ -84,6 +84,50 @@ global proc mayaHydraMenus_CreatePickModeMenuItems() { global int $g_mayaHydraMenus_SelectMenuIdleEventId; scriptJob -kill $g_mayaHydraMenus_SelectMenuIdleEventId -force; - menuItem -divider true -dividerLabel "New Divider" -parent $gMayaUsdSelectModeSubMenu; + createPickModeMenuItems(); } +global proc createPickModeMenuItems() { + $origParent = `setParent -q -menu`; + global string $gMayaUsdSelectModeSubMenu; + setParent -menu $gMayaUsdSelectModeSubMenu; + + menuItem -divider true -dividerLabel "GeomSubsets (Hydra viewports only)"; + + radioMenuItemCollection; + menuItem -radioButton on -runTimeCommand ("mayaHydraGeomSubsetsPickMode_Prims") geomSubsetsPickMode_Prims; + menuItem -radioButton off -runTimeCommand ("mayaHydraGeomSubsetsPickMode_GeomSubsets") geomSubsetsPickMode_GeomSubsets; + + mayaHydra_updateGeomSubsetsPickModeMenuItems(); + + scriptJob -parent $gMayaUsdSelectModeSubMenu + -optionVarChanged "mayaHydra_GeomSubsetsPickMode" "mayaHydra_updateGeomSubsetsPickModeMenuItems"; + + setParent -menu $origParent; +} + + +/////////////////////////////////////////////////////////////////////////////// +// mayaHydra_updateGeomSubsetsPickModeMenuItems +// Update the menu item radio buttons in the GeomSubsets Pick Mode menu +global proc mayaHydra_updateGeomSubsetsPickModeMenuItems() { + // Note: we do all string compares as case-insenstive (lowercase) + // as the menu labels are capitalized. + string $pickMode = `tolower(mayaHydra_getGeomSubsetsPickMode())`; + switch($pickMode) { + case "": + menuItem -e -radioButton on geomSubsetsPickMode_Prims; + break; + default: + // Enable the menu item based on the label. + global string $gMayaUsdSelectModeSubMenu; + $menuItems = `menu -q -itemArray $gMayaUsdSelectModeSubMenu`; + for($i = 0; $i < size($menuItems); $i++) { + string $label = `menuItem -q -label $menuItems[$i]`; + if(`tolower($label)` == $pickMode) { + menuItem -e -radioButton on $menuItems[$i]; + break; + } + } + } +} \ No newline at end of file diff --git a/scripts/mayaHydra_registerUI_load.mel b/scripts/mayaHydra_registerUI_load.mel index 24472dbbc8..c773c6a411 100644 --- a/scripts/mayaHydra_registerUI_load.mel +++ b/scripts/mayaHydra_registerUI_load.mel @@ -3,5 +3,43 @@ global proc mayaHydra_registerUI_load() // Used to initialize any UI we create. { source "mayaHydraMenus.mel"; + mayaHydra_createRuntimeCommands; mayaHydraMenus_PrepareMenus; } + +/////////////////////////////////////////////////////////////////////////////// +// mayaHydra_setGeomSubsetsPickMode +// Helper function to set the GeomSubsets pick mode. +global proc mayaHydra_setGeomSubsetsPickMode(string $mode) { + optionVar -stringValue "mayaHydra_GeomSubsetsPickMode" $mode; +} + +/////////////////////////////////////////////////////////////////////////////// +// mayaHydra_getGeomSubsetsPickMode +// Helper function to get the GeomSubsets pick mode. +global proc string mayaHydra_getGeomSubsetsPickMode() { + string $mode = ""; + if (`optionVar -exists "mayaHydra_GeomSubsetsPickMode"`) { + $mode = `optionVar -q "mayaHydra_GeomSubsetsPickMode"`; + } + return $mode; +} + +global proc mayaHydra_createRuntimeCommands() { + if (!`runTimeCommand -exists mayaHydraGeomSubsetsPickMode_Prims`) { + runTimeCommand -default true -plugin "mayaHydra" + -label "Prims" + -annotation "Select whole prims" + -category "Menu items.Maya USD" + -command ("mayaHydra_setGeomSubsetsPickMode(\"Prims\")") + mayaHydraGeomSubsetsPickMode_Prims; + } + if (!`runTimeCommand -exists mayaHydraGeomSubsetsPickMode_GeomSubsets`) { + runTimeCommand -default true -plugin "mayaHydra" + -label "GeomSubsets" + -annotation "Select GeomSubsets" + -category "Menu items.Maya USD" + -command ("mayaHydra_setGeomSubsetsPickMode(\"GeomSubsets\")") + mayaHydraGeomSubsetsPickMode_GeomSubsets; + } +} From aa1cd641887045673ab400996b4acf1e95bbaaad Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 28 Jun 2024 12:38:17 -0400 Subject: [PATCH 05/75] HYDRA-1058 : Cleanup picking code --- lib/mayaHydra/mayaPlugin/renderOverride.cpp | 52 +++++---------------- lib/mayaHydra/mayaPlugin/renderOverride.h | 1 + 2 files changed, 13 insertions(+), 40 deletions(-) diff --git a/lib/mayaHydra/mayaPlugin/renderOverride.cpp b/lib/mayaHydra/mayaPlugin/renderOverride.cpp index 4d3bb8c309..92371bc8a0 100644 --- a/lib/mayaHydra/mayaPlugin/renderOverride.cpp +++ b/lib/mayaHydra/mayaPlugin/renderOverride.cpp @@ -222,26 +222,6 @@ UsdPrim GetPrimOrAncestorWithKind(const UsdPrim& prim, const TfToken& kind) return iterPrim; } -std::vector GetSelectedFaceSubsets(const UsdPrim& prim, const int faceIndex) -{ - std::vector selectedFaceSubsets; - - auto faceSubsets = UsdGeomSubset::GetGeomSubsets(UsdGeomImageable(prim), UsdGeomTokens->face); - for (const auto& faceSubset : faceSubsets) { - auto indicesAttr = faceSubset.GetIndicesAttr(); - VtIntArray indices; - indicesAttr.Get(&indices); - for (auto index : indices) { - if (index == faceIndex) { - selectedFaceSubsets.push_back(faceSubset.GetPath()); - break; - } - } - } - - return selectedFaceSubsets; -} - //! Pick resolution behavior to use when the picked object is a point instance. enum UsdPointInstancesPickMode { @@ -1887,6 +1867,7 @@ void MtohRenderOverride::_PickByRegion( HdxPickHitVector& outHits, const MMatrix& viewMatrix, const MMatrix& projMatrix, + bool pickGeomSubsets, bool pointSnappingActive, int view_x, int view_y, @@ -1917,10 +1898,15 @@ void MtohRenderOverride::_PickByRegion( HdxPickTaskContextParams pickParams; // Use the same size as selection region is enough to get all pick results. pickParams.resolution.Set(sel_w, sel_h); + pickParams.pickTarget = HdxPickTokens->pickPrimsAndInstances; + pickParams.resolveMode = HdxPickTokens->resolveUnique; + pickParams.doUnpickablesOcclude = false; pickParams.viewMatrix.Set(viewMatrix.matrix); pickParams.projectionMatrix.Set(adjustedProjMatrix.matrix); - pickParams.resolveMode = HdxPickTokens->resolveUnique; - if (GetGeomSubsetsPickMode() == UsdGeomSubsetsPickMode::GeomSubsets) { + pickParams.collection = _renderCollection; + pickParams.outHits = &outHits; + + if (pickGeomSubsets) { pickParams.pickTarget = HdxPickTokens->pickFaces; } @@ -1931,11 +1917,6 @@ void MtohRenderOverride::_PickByRegion( pickParams.collection = _pointSnappingCollection; pickParams.collection.SetExcludePaths(_selectionSceneIndex->GetFullySelectedPaths()); } - else { - pickParams.collection = _renderCollection; - } - - pickParams.outHits = &outHits; // Execute picking tasks. HdTaskSharedPtrVector pickingTasks = _taskController->GetPickingTasks(); @@ -1979,6 +1960,7 @@ bool MtohRenderOverride::select( return false; HdxPickHitVector outHits; + const bool pickGeomSubsets = GetGeomSubsetsPickMode() == UsdGeomSubsetsPickMode::GeomSubsets; const bool pointSnappingActive = selectInfo.pointSnapping(); if (pointSnappingActive) { @@ -1999,7 +1981,7 @@ bool MtohRenderOverride::select( unsigned int curr_sel_x = cursor_x > (int)curr_sel_w / 2 ? cursor_x - (int)curr_sel_w / 2 : 0; unsigned int curr_sel_y = cursor_y > (int)curr_sel_h / 2 ? cursor_y - (int)curr_sel_h / 2 : 0; - _PickByRegion(outHits, viewMatrix, projMatrix, pointSnappingActive, + _PickByRegion(outHits, viewMatrix, projMatrix, pickGeomSubsets, pointSnappingActive, view_x, view_y, view_w, view_h, curr_sel_x, curr_sel_y, curr_sel_w, curr_sel_h); // Increase the size of picking region. @@ -2010,7 +1992,7 @@ bool MtohRenderOverride::select( // Pick from original region directly when point snapping is not active or no hit is found yet. if (outHits.empty()) { - _PickByRegion(outHits, viewMatrix, projMatrix, pointSnappingActive, + _PickByRegion(outHits, viewMatrix, projMatrix, pickGeomSubsets, pointSnappingActive, view_x, view_y, view_w, view_h, sel_x, sel_y, sel_w, sel_h); } @@ -2030,17 +2012,7 @@ bool MtohRenderOverride::select( outHits.clear(); } } - static std::mutex printMutex; - { - std::lock_guard printLock(printMutex); - //std::cout << " ----------------- " << std::endl; - for (size_t iHit = 0; iHit < outHits.size(); iHit++) { - //std::cout << "Pick #" << iHit + 1 << " : " << std::endl; - std::stringstream ss; - ss << outHits[iHit]; - //std::cout << ss.str() << std::endl; - } - } + _PopulateSelectionList(outHits, selectInfo, selectionList, worldSpaceHitPts); return true; } diff --git a/lib/mayaHydra/mayaPlugin/renderOverride.h b/lib/mayaHydra/mayaPlugin/renderOverride.h index 409b6ebed6..9b8164311b 100644 --- a/lib/mayaHydra/mayaPlugin/renderOverride.h +++ b/lib/mayaHydra/mayaPlugin/renderOverride.h @@ -169,6 +169,7 @@ class MtohRenderOverride : public MHWRender::MRenderOverride HdxPickHitVector& outHits, const MMatrix& viewMatrix, const MMatrix& projMatrix, + bool pickGeomSubsets, bool pointSnappingActive, int view_x, int view_y, From 2a7cc0f23efb28eaae35ba38d16b560d826ccd5e Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 28 Jun 2024 12:47:59 -0400 Subject: [PATCH 06/75] HYDRA-1058 : Cleanup pick interpretation code --- lib/mayaHydra/mayaPlugin/renderOverride.cpp | 63 +++++---------------- 1 file changed, 13 insertions(+), 50 deletions(-) diff --git a/lib/mayaHydra/mayaPlugin/renderOverride.cpp b/lib/mayaHydra/mayaPlugin/renderOverride.cpp index 92371bc8a0..0ef070008a 100644 --- a/lib/mayaHydra/mayaPlugin/renderOverride.cpp +++ b/lib/mayaHydra/mayaPlugin/renderOverride.cpp @@ -483,7 +483,11 @@ class UsdPickHandler : public MtohRenderOverride::PickHandlerBase { UsdPickHandler(MtohRenderOverride& renderOverride) : PickHandlerBase(renderOverride) {} - std::vector resolveGeomSubsetsPicking(HdSceneIndexBaseConstRefPtr sceneIndex, const SdfPath& basePrimPath, const TfToken& geomSubsetType, int componentIndex) const + std::vector resolveGeomSubsetsPicking( + HdSceneIndexBaseConstRefPtr sceneIndex, + const SdfPath& basePrimPath, + const TfToken& geomSubsetType, + int componentIndex) const { if (componentIndex < 0 || sceneIndex->GetPrim(basePrimPath).primType != HdPrimTypeTokens->mesh) { return {}; @@ -523,50 +527,14 @@ class UsdPickHandler : public MtohRenderOverride::PickHandlerBase { return pickedGeomSubsets; } - std::vector resolvePointInstancePicking(HdRenderIndex& renderIndex, const HdxPickHit& pickHit) const - { - auto primOrigin = HdxPrimOriginInfo::FromPickHit(&renderIndex, pickHit); - - if (pickHit.instancerId.IsEmpty()) { - return {{primOrigin.GetFullPath(), -1}}; - } - - // If there is a Hydra instancer, distinguish between native instancing - // (implicit USD prototype created by USD itself) and point instancing - // (explicitly authored USD prototypes). As per HdxInstancerContext - // documentation: - // - // [...] "exactly one of instancePrimOrigin or instancerPrimOrigin will - // contain data depending on whether the instancing at the current - // level was implicit or not, respectively." - const auto& instancerContext = primOrigin.instancerContexts.front(); - - if (instancerContext.instancePrimOrigin) { - // Implicit prototype instancing (i.e. USD native instancing). - auto schema = HdPrimOriginSchema(instancerContext.instancePrimOrigin); - if (!TF_VERIFY(schema, "Cannot build prim origin schema for USD native instance.")) { - return {{SdfPath(), -1}}; - } - return {{schema.GetOriginPath(HdPrimOriginSchemaTokens->scenePath), -1}}; - } - - // Explicit prototype instancing (i.e. USD point instancing). - std::function pickFn[] = {pickInstancer, pickInstance, pickPrototype}; - - // Retrieve pick mode from mayaUsd optionVar, to see if we're picking - // instances, the instancer itself, or the prototype instanced by the - // point instance. - return {pickFn[GetPointInstancesPickMode()](primOrigin, pickHit)}; - } - // Return the closest path and the instance index in the scene index scene // that corresponds to the pick hit. If the pick hit is not an instance, // the instance index will be -1. - HitPath hitPath(const HdxPickHit& hit) const { - auto primOrigin = HdxPrimOriginInfo::FromPickHit( - renderIndex(), hit); + HitPath resolvePointInstancePicking(HdRenderIndex& renderIndex, const HdxPickHit& pickHit) const + { + auto primOrigin = HdxPrimOriginInfo::FromPickHit(&renderIndex, pickHit); - if (hit.instancerId.IsEmpty()) { + if (pickHit.instancerId.IsEmpty()) { return {primOrigin.GetFullPath(), -1}; } @@ -595,7 +563,7 @@ class UsdPickHandler : public MtohRenderOverride::PickHandlerBase { // Retrieve pick mode from mayaUsd optionVar, to see if we're picking // instances, the instancer itself, or the prototype instanced by the // point instance. - return pickFn[GetPointInstancesPickMode()](primOrigin, hit); + return pickFn[GetPointInstancesPickMode()](primOrigin, pickHit); } bool handlePickHit( @@ -630,17 +598,12 @@ class UsdPickHandler : public MtohRenderOverride::PickHandlerBase { hitPaths.insert(hitPaths.end(), geomSubsetsHitPaths.begin(), geomSubsetsHitPaths.end()); } + // If we did not find any geomSubset and this is the only pick hit, then fallback to selecting the base prim/instance. if (hitPaths.empty() && pickInput.isSolePickHit) { - auto pointInstanceHitPaths = resolvePointInstancePicking(*renderIndex(), pickInput.pickHit); - if (!pointInstanceHitPaths.empty()) { - hitPaths.insert(hitPaths.end(), pointInstanceHitPaths.begin(), pointInstanceHitPaths.end()); - } + hitPaths.push_back(resolvePointInstancePicking(*renderIndex(), pickInput.pickHit)); } } else { - auto pointInstanceHitPaths = resolvePointInstancePicking(*renderIndex(), pickInput.pickHit); - if (!pointInstanceHitPaths.empty()) { - hitPaths.insert(hitPaths.end(), pointInstanceHitPaths.begin(), pointInstanceHitPaths.end()); - } + hitPaths.push_back(resolvePointInstancePicking(*renderIndex(), pickInput.pickHit)); } // For the USD pick handler pick results are directly returned with USD From 10a0657241ac4695b404b72c02c0540df9cdddb2 Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 28 Jun 2024 12:51:37 -0400 Subject: [PATCH 07/75] HYDRA-1058 : Move comment --- lib/mayaHydra/mayaPlugin/renderOverride.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/mayaHydra/mayaPlugin/renderOverride.cpp b/lib/mayaHydra/mayaPlugin/renderOverride.cpp index 0ef070008a..3420855ce2 100644 --- a/lib/mayaHydra/mayaPlugin/renderOverride.cpp +++ b/lib/mayaHydra/mayaPlugin/renderOverride.cpp @@ -606,10 +606,10 @@ class UsdPickHandler : public MtohRenderOverride::PickHandlerBase { hitPaths.push_back(resolvePointInstancePicking(*renderIndex(), pickInput.pickHit)); } - // For the USD pick handler pick results are directly returned with USD - // scene paths, so no need to remove scene index plugin path prefix. size_t nbSelectedUfeItems = 0; for (const auto& [pickedUsdPath, instanceNdx] : hitPaths) { + // For the USD pick handler pick results are directly returned with USD + // scene paths, so no need to remove scene index plugin path prefix. const auto pickedMayaPath = usdPathToUfePath(registration, pickedUsdPath); const auto snMayaPath = // As per https://stackoverflow.com/questions/46114214 From 1af6821ff6ab6db80825f84f7931a77bf1aeae84 Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 28 Jun 2024 15:37:55 -0400 Subject: [PATCH 08/75] HYDRA-1058 : Avoid unnecessary idle events to create pick mode UI --- scripts/CMakeLists.txt | 1 + scripts/mayaHydraMenus.mel | 57 ++----------- scripts/mayaHydra_GeomSubsetsPickModeMenu.mel | 84 +++++++++++++++++++ scripts/mayaHydra_registerUI_load.mel | 4 +- 4 files changed, 94 insertions(+), 52 deletions(-) create mode 100644 scripts/mayaHydra_GeomSubsetsPickModeMenu.mel diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index d44441e8c1..91013e10a5 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -4,6 +4,7 @@ set(MEL_SCRIPT_FILES mayaHydra_registerUI_unload.mel mayaHydra_registerUI_batch_load.mel mayaHydra_registerUI_batch_unload.mel + mayaHydra_GeomSubsetsPickModeMenu.mel ) install( diff --git a/scripts/mayaHydraMenus.mel b/scripts/mayaHydraMenus.mel index 981e7684e8..355640da49 100644 --- a/scripts/mayaHydraMenus.mel +++ b/scripts/mayaHydraMenus.mel @@ -1,8 +1,6 @@ // addMenuCallback and removeMenuCallback copied from MayaUSD // See here : [TODO : insert link] -/////////////////////////////////////////////////////////////////////////////// -// addMenuCallback // safely add a post menu callback to a menu proc addMenuCallback(string $menuName, string $cmd) { string $existingCallbacks = `menu -q -pmc $menuName`; @@ -10,8 +8,6 @@ proc addMenuCallback(string $menuName, string $cmd) { menu -e -pmc ($existingCallbacks + ";" + $cmd + ";") $menuName; } -/////////////////////////////////////////////////////////////////////////////// -// removeMenuCallback // safely remove a post menu callback to a menu proc removeMenuCallback(string $menuName, string $cmd) { string $existingCallbacks = `menu -q -pmc $menuName`; @@ -21,27 +17,6 @@ proc removeMenuCallback(string $menuName, string $cmd) { menu -e -pmc $newCallbacks $menuName; } -/////////////////////////////////////////////////////////////////////////////// -// addMenuItemCallback -// safely add a post menu item callback to a menu item -proc addMenuItemCallback(string $menuItemName, string $cmd) { - string $existingCallbacks = `menuItem -q -pmc $menuItemName`; - // append the callback - menuItem -e -pmc ($existingCallbacks + ";" + $cmd + ";") $menuItemName; -} - -/////////////////////////////////////////////////////////////////////////////// -// removeMenuItemCallback -// safely remove a post menu item callback to a menu item -proc removeMenuItemCallback(string $menuItemName, string $cmd) { - string $existingCallbacks = `menuItem -q -pmc $menuItemName`; - // remove our callback from the string of callbacks - string $newCallbacks = - `substitute (";"+$cmd+".*;") $existingCallbacks ""`; - menuItem -e -pmc $newCallbacks $menuItemName; -} - - global proc mayaHydraMenus_PrepareMenus() { global string $gMainSelectMenu; // Maya's "Select" menu addMenuCallback($gMainSelectMenu, "mayaHydraMenus_SelectMenuOpenedCallback"); @@ -54,42 +29,24 @@ global string $gMayaUsdSelectModeSubMenu; global int $g_mayaHydraMenus_PickModeMenuEventRegistered; global proc mayaHydraMenus_SelectMenuOpenedCallback() { + if (!`pluginInfo -q -loaded mayaUsdPlugin`) { + return; + } + global string $gMainSelectMenu; // Maya's "Select" menu removeMenuCallback($gMainSelectMenu, "mayaHydraMenus_SelectMenuOpenedCallback"); - global int $g_mayaHydraMenus_SelectMenuIdleEventId; - $g_mayaHydraMenus_SelectMenuIdleEventId = `scriptJob -idleEvent "mayaHydraMenus_CreateSelectMenuItems"`; + scriptJob -idleEvent "mayaHydraMenus_CreatePickModeMenuItems" -runOnce true; } -global proc mayaHydraMenus_CreateSelectMenuItems() { +global proc mayaHydraMenus_CreatePickModeMenuItems() { global string $gMayaUsdSelectModeSubMenu; - // Check if the USD Selection menu exists, and if not, wait for it by returning immediately if ($gMayaUsdSelectModeSubMenu == "" || !`menuItem -q -exists $gMayaUsdSelectModeSubMenu`) { + print "Error : USD selection submenu was not found, could not add GeomSubsets pick mode UI.\n"; return; } - print "ScriptJob running"; - - global int $g_mayaHydraMenus_PickModeMenuEventRegistered; - if ($g_mayaHydraMenus_PickModeMenuEventRegistered == 0) { - addMenuItemCallback($gMayaUsdSelectModeSubMenu, "mayaHydraMenus_CreatePickModeMenuItems"); - $g_mayaHydraMenus_PickModeMenuEventRegistered = 1; - } -} - -global proc mayaHydraMenus_CreatePickModeMenuItems() { - global string $gMayaUsdSelectModeSubMenu; - removeMenuItemCallback($gMayaUsdSelectModeSubMenu, "mayaHydraMenus_CreatePickModeMenuItems"); - - global int $g_mayaHydraMenus_SelectMenuIdleEventId; - scriptJob -kill $g_mayaHydraMenus_SelectMenuIdleEventId -force; - - createPickModeMenuItems(); -} - -global proc createPickModeMenuItems() { $origParent = `setParent -q -menu`; - global string $gMayaUsdSelectModeSubMenu; setParent -menu $gMayaUsdSelectModeSubMenu; menuItem -divider true -dividerLabel "GeomSubsets (Hydra viewports only)"; diff --git a/scripts/mayaHydra_GeomSubsetsPickModeMenu.mel b/scripts/mayaHydra_GeomSubsetsPickModeMenu.mel new file mode 100644 index 0000000000..66a8ed1854 --- /dev/null +++ b/scripts/mayaHydra_GeomSubsetsPickModeMenu.mel @@ -0,0 +1,84 @@ +// addMenuCallback and removeMenuCallback copied from MayaUSD +// See here : [TODO : insert link] + +// safely add a post menu callback to a menu +proc addMenuCallback(string $menuName, string $cmd) { + string $existingCallbacks = `menu -q -pmc $menuName`; + // append the callback + menu -e -pmc ($existingCallbacks + ";" + $cmd + ";") $menuName; +} + +// safely remove a post menu callback to a menu +proc removeMenuCallback(string $menuName, string $cmd) { + string $existingCallbacks = `menu -q -pmc $menuName`; + // remove our callback from the string of callbacks + string $newCallbacks = + `substitute (";"+$cmd+".*;") $existingCallbacks ""`; + menu -e -pmc $newCallbacks $menuName; +} + +global proc mayaHydra_GeomSubsetsPickModeMenu_Setup() { + global string $gMainSelectMenu; // Maya's "Select" menu + addMenuCallback($gMainSelectMenu, "mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback"); +} + +global proc mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback() { + if (!`pluginInfo -q -loaded mayaUsdPlugin`) { + return; + } + + global string $gMainSelectMenu; // Maya's "Select" menu + removeMenuCallback($gMainSelectMenu, "mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback"); + + scriptJob -idleEvent "mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems" -runOnce true; +} + +global proc mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems() { + global string $gMayaUsdSelectModeSubMenu; + if ($gMayaUsdSelectModeSubMenu == "" || !`menuItem -q -exists $gMayaUsdSelectModeSubMenu`) { + print "Error : USD selection submenu was not found, could not add GeomSubsets pick mode UI.\n"; + return; + } + + $origParent = `setParent -q -menu`; + setParent -menu $gMayaUsdSelectModeSubMenu; + + menuItem -divider true -dividerLabel "GeomSubsets (Hydra only)"; + + radioMenuItemCollection; + menuItem -radioButton on -runTimeCommand ("mayaHydraGeomSubsetsPickMode_Prims") geomSubsetsPickMode_Prims; + menuItem -radioButton off -runTimeCommand ("mayaHydraGeomSubsetsPickMode_GeomSubsets") geomSubsetsPickMode_GeomSubsets; + + mayaHydra_updateGeomSubsetsPickModeMenuItems(); + + scriptJob -parent $gMayaUsdSelectModeSubMenu + -optionVarChanged "mayaHydra_GeomSubsetsPickMode" "mayaHydra_updateGeomSubsetsPickModeMenuItems"; + + setParent -menu $origParent; +} + + +/////////////////////////////////////////////////////////////////////////////// +// mayaHydra_updateGeomSubsetsPickModeMenuItems +// Update the menu item radio buttons in the GeomSubsets Pick Mode menu +global proc mayaHydra_updateGeomSubsetsPickModeMenuItems() { + // Note: we do all string compares as case-insenstive (lowercase) + // as the menu labels are capitalized. + string $pickMode = `tolower(mayaHydra_getGeomSubsetsPickMode())`; + switch($pickMode) { + case "": + menuItem -e -radioButton on geomSubsetsPickMode_Prims; + break; + default: + // Enable the menu item based on the label. + global string $gMayaUsdSelectModeSubMenu; + $menuItems = `menu -q -itemArray $gMayaUsdSelectModeSubMenu`; + for($i = 0; $i < size($menuItems); $i++) { + string $label = `menuItem -q -label $menuItems[$i]`; + if(`tolower($label)` == $pickMode) { + menuItem -e -radioButton on $menuItems[$i]; + break; + } + } + } +} \ No newline at end of file diff --git a/scripts/mayaHydra_registerUI_load.mel b/scripts/mayaHydra_registerUI_load.mel index c773c6a411..6924d3df6a 100644 --- a/scripts/mayaHydra_registerUI_load.mel +++ b/scripts/mayaHydra_registerUI_load.mel @@ -2,9 +2,9 @@ global proc mayaHydra_registerUI_load() // Callback registered with the MFnPlugin for when the plugin is loaded. // Used to initialize any UI we create. { - source "mayaHydraMenus.mel"; + source "mayaHydra_GeomSubsetsPickModeMenu.mel"; mayaHydra_createRuntimeCommands; - mayaHydraMenus_PrepareMenus; + mayaHydra_GeomSubsetsPickModeMenu_Setup; } /////////////////////////////////////////////////////////////////////////////// From 1e8ed3947e23262b68249aa752fbba5ae3354bb5 Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 28 Jun 2024 15:43:57 -0400 Subject: [PATCH 09/75] HYDRA-1058 : Move all GeomSubset MEL code into same script --- scripts/mayaHydraMenus.mel | 90 ------------------- scripts/mayaHydra_GeomSubsetsPickModeMenu.mel | 53 +++++++++-- scripts/mayaHydra_registerUI_load.mel | 38 -------- 3 files changed, 45 insertions(+), 136 deletions(-) diff --git a/scripts/mayaHydraMenus.mel b/scripts/mayaHydraMenus.mel index 355640da49..e69de29bb2 100644 --- a/scripts/mayaHydraMenus.mel +++ b/scripts/mayaHydraMenus.mel @@ -1,90 +0,0 @@ -// addMenuCallback and removeMenuCallback copied from MayaUSD -// See here : [TODO : insert link] - -// safely add a post menu callback to a menu -proc addMenuCallback(string $menuName, string $cmd) { - string $existingCallbacks = `menu -q -pmc $menuName`; - // append the callback - menu -e -pmc ($existingCallbacks + ";" + $cmd + ";") $menuName; -} - -// safely remove a post menu callback to a menu -proc removeMenuCallback(string $menuName, string $cmd) { - string $existingCallbacks = `menu -q -pmc $menuName`; - // remove our callback from the string of callbacks - string $newCallbacks = - `substitute (";"+$cmd+".*;") $existingCallbacks ""`; - menu -e -pmc $newCallbacks $menuName; -} - -global proc mayaHydraMenus_PrepareMenus() { - global string $gMainSelectMenu; // Maya's "Select" menu - addMenuCallback($gMainSelectMenu, "mayaHydraMenus_SelectMenuOpenedCallback"); -} - -global int $g_mayaHydraMenus_SelectMenuIdleEventId; - -global string $gMayaUsdSelectModeSubMenu; - -global int $g_mayaHydraMenus_PickModeMenuEventRegistered; - -global proc mayaHydraMenus_SelectMenuOpenedCallback() { - if (!`pluginInfo -q -loaded mayaUsdPlugin`) { - return; - } - - global string $gMainSelectMenu; // Maya's "Select" menu - removeMenuCallback($gMainSelectMenu, "mayaHydraMenus_SelectMenuOpenedCallback"); - - scriptJob -idleEvent "mayaHydraMenus_CreatePickModeMenuItems" -runOnce true; -} - -global proc mayaHydraMenus_CreatePickModeMenuItems() { - global string $gMayaUsdSelectModeSubMenu; - if ($gMayaUsdSelectModeSubMenu == "" || !`menuItem -q -exists $gMayaUsdSelectModeSubMenu`) { - print "Error : USD selection submenu was not found, could not add GeomSubsets pick mode UI.\n"; - return; - } - - $origParent = `setParent -q -menu`; - setParent -menu $gMayaUsdSelectModeSubMenu; - - menuItem -divider true -dividerLabel "GeomSubsets (Hydra viewports only)"; - - radioMenuItemCollection; - menuItem -radioButton on -runTimeCommand ("mayaHydraGeomSubsetsPickMode_Prims") geomSubsetsPickMode_Prims; - menuItem -radioButton off -runTimeCommand ("mayaHydraGeomSubsetsPickMode_GeomSubsets") geomSubsetsPickMode_GeomSubsets; - - mayaHydra_updateGeomSubsetsPickModeMenuItems(); - - scriptJob -parent $gMayaUsdSelectModeSubMenu - -optionVarChanged "mayaHydra_GeomSubsetsPickMode" "mayaHydra_updateGeomSubsetsPickModeMenuItems"; - - setParent -menu $origParent; -} - - -/////////////////////////////////////////////////////////////////////////////// -// mayaHydra_updateGeomSubsetsPickModeMenuItems -// Update the menu item radio buttons in the GeomSubsets Pick Mode menu -global proc mayaHydra_updateGeomSubsetsPickModeMenuItems() { - // Note: we do all string compares as case-insenstive (lowercase) - // as the menu labels are capitalized. - string $pickMode = `tolower(mayaHydra_getGeomSubsetsPickMode())`; - switch($pickMode) { - case "": - menuItem -e -radioButton on geomSubsetsPickMode_Prims; - break; - default: - // Enable the menu item based on the label. - global string $gMayaUsdSelectModeSubMenu; - $menuItems = `menu -q -itemArray $gMayaUsdSelectModeSubMenu`; - for($i = 0; $i < size($menuItems); $i++) { - string $label = `menuItem -q -label $menuItems[$i]`; - if(`tolower($label)` == $pickMode) { - menuItem -e -radioButton on $menuItems[$i]; - break; - } - } - } -} \ No newline at end of file diff --git a/scripts/mayaHydra_GeomSubsetsPickModeMenu.mel b/scripts/mayaHydra_GeomSubsetsPickModeMenu.mel index 66a8ed1854..720305e03f 100644 --- a/scripts/mayaHydra_GeomSubsetsPickModeMenu.mel +++ b/scripts/mayaHydra_GeomSubsetsPickModeMenu.mel @@ -18,6 +18,7 @@ proc removeMenuCallback(string $menuName, string $cmd) { } global proc mayaHydra_GeomSubsetsPickModeMenu_Setup() { + mayaHydra_createRuntimeCommands; global string $gMainSelectMenu; // Maya's "Select" menu addMenuCallback($gMainSelectMenu, "mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback"); } @@ -49,20 +50,18 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems() { menuItem -radioButton on -runTimeCommand ("mayaHydraGeomSubsetsPickMode_Prims") geomSubsetsPickMode_Prims; menuItem -radioButton off -runTimeCommand ("mayaHydraGeomSubsetsPickMode_GeomSubsets") geomSubsetsPickMode_GeomSubsets; - mayaHydra_updateGeomSubsetsPickModeMenuItems(); + mayaHydra_GeomSubsetsPickModeMenu_UpdateRadioButtons(); scriptJob -parent $gMayaUsdSelectModeSubMenu - -optionVarChanged "mayaHydra_GeomSubsetsPickMode" "mayaHydra_updateGeomSubsetsPickModeMenuItems"; + -optionVarChanged "mayaHydra_GeomSubsetsPickMode" "mayaHydra_GeomSubsetsPickModeMenu_UpdateRadioButtons"; setParent -menu $origParent; } -/////////////////////////////////////////////////////////////////////////////// -// mayaHydra_updateGeomSubsetsPickModeMenuItems -// Update the menu item radio buttons in the GeomSubsets Pick Mode menu -global proc mayaHydra_updateGeomSubsetsPickModeMenuItems() { - // Note: we do all string compares as case-insenstive (lowercase) +// Update the menu item radio buttons in the GeomSubsets pick mode UI +global proc mayaHydra_GeomSubsetsPickModeMenu_UpdateRadioButtons() { + // Note: we do all string compares as case-insensitive (lowercase) // as the menu labels are capitalized. string $pickMode = `tolower(mayaHydra_getGeomSubsetsPickMode())`; switch($pickMode) { @@ -81,4 +80,42 @@ global proc mayaHydra_updateGeomSubsetsPickModeMenuItems() { } } } -} \ No newline at end of file +} + + +/////////////////////////////////////////////////////////////////////////////// +// mayaHydra_setGeomSubsetsPickMode +// Helper function to set the GeomSubsets pick mode. +global proc mayaHydra_setGeomSubsetsPickMode(string $mode) { + optionVar -stringValue "mayaHydra_GeomSubsetsPickMode" $mode; +} + +/////////////////////////////////////////////////////////////////////////////// +// mayaHydra_getGeomSubsetsPickMode +// Helper function to get the GeomSubsets pick mode. +global proc string mayaHydra_getGeomSubsetsPickMode() { + string $mode = ""; + if (`optionVar -exists "mayaHydra_GeomSubsetsPickMode"`) { + $mode = `optionVar -q "mayaHydra_GeomSubsetsPickMode"`; + } + return $mode; +} + +global proc mayaHydra_createRuntimeCommands() { + if (!`runTimeCommand -exists mayaHydraGeomSubsetsPickMode_Prims`) { + runTimeCommand -default true -plugin "mayaHydra" + -label "Prims" + -annotation "Select whole prims" + -category "Menu items.Maya USD" + -command ("mayaHydra_setGeomSubsetsPickMode(\"Prims\")") + mayaHydraGeomSubsetsPickMode_Prims; + } + if (!`runTimeCommand -exists mayaHydraGeomSubsetsPickMode_GeomSubsets`) { + runTimeCommand -default true -plugin "mayaHydra" + -label "GeomSubsets" + -annotation "Select GeomSubsets" + -category "Menu items.Maya USD" + -command ("mayaHydra_setGeomSubsetsPickMode(\"GeomSubsets\")") + mayaHydraGeomSubsetsPickMode_GeomSubsets; + } +} diff --git a/scripts/mayaHydra_registerUI_load.mel b/scripts/mayaHydra_registerUI_load.mel index 6924d3df6a..a483cf0ba0 100644 --- a/scripts/mayaHydra_registerUI_load.mel +++ b/scripts/mayaHydra_registerUI_load.mel @@ -3,43 +3,5 @@ global proc mayaHydra_registerUI_load() // Used to initialize any UI we create. { source "mayaHydra_GeomSubsetsPickModeMenu.mel"; - mayaHydra_createRuntimeCommands; mayaHydra_GeomSubsetsPickModeMenu_Setup; } - -/////////////////////////////////////////////////////////////////////////////// -// mayaHydra_setGeomSubsetsPickMode -// Helper function to set the GeomSubsets pick mode. -global proc mayaHydra_setGeomSubsetsPickMode(string $mode) { - optionVar -stringValue "mayaHydra_GeomSubsetsPickMode" $mode; -} - -/////////////////////////////////////////////////////////////////////////////// -// mayaHydra_getGeomSubsetsPickMode -// Helper function to get the GeomSubsets pick mode. -global proc string mayaHydra_getGeomSubsetsPickMode() { - string $mode = ""; - if (`optionVar -exists "mayaHydra_GeomSubsetsPickMode"`) { - $mode = `optionVar -q "mayaHydra_GeomSubsetsPickMode"`; - } - return $mode; -} - -global proc mayaHydra_createRuntimeCommands() { - if (!`runTimeCommand -exists mayaHydraGeomSubsetsPickMode_Prims`) { - runTimeCommand -default true -plugin "mayaHydra" - -label "Prims" - -annotation "Select whole prims" - -category "Menu items.Maya USD" - -command ("mayaHydra_setGeomSubsetsPickMode(\"Prims\")") - mayaHydraGeomSubsetsPickMode_Prims; - } - if (!`runTimeCommand -exists mayaHydraGeomSubsetsPickMode_GeomSubsets`) { - runTimeCommand -default true -plugin "mayaHydra" - -label "GeomSubsets" - -annotation "Select GeomSubsets" - -category "Menu items.Maya USD" - -command ("mayaHydra_setGeomSubsetsPickMode(\"GeomSubsets\")") - mayaHydraGeomSubsetsPickMode_GeomSubsets; - } -} From aa48112ccc36179da22c1584c118a29e12fa33b9 Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 28 Jun 2024 16:00:42 -0400 Subject: [PATCH 10/75] HYDRA-1058 : Cleanup GeomSubsets UI setup code --- scripts/CMakeLists.txt | 3 +- scripts/mayaHydraMenus.mel | 0 ....mel => mayaHydra_GeomSubsetsPickMode.mel} | 89 +++++++++---------- scripts/mayaHydra_registerUI_load.mel | 4 +- 4 files changed, 46 insertions(+), 50 deletions(-) delete mode 100644 scripts/mayaHydraMenus.mel rename scripts/{mayaHydra_GeomSubsetsPickModeMenu.mel => mayaHydra_GeomSubsetsPickMode.mel} (71%) diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index 91013e10a5..972c0b8df2 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -1,10 +1,9 @@ set(MEL_SCRIPT_FILES - mayaHydraMenus.mel mayaHydra_registerUI_load.mel mayaHydra_registerUI_unload.mel mayaHydra_registerUI_batch_load.mel mayaHydra_registerUI_batch_unload.mel - mayaHydra_GeomSubsetsPickModeMenu.mel + mayaHydra_GeomSubsetsPickMode.mel ) install( diff --git a/scripts/mayaHydraMenus.mel b/scripts/mayaHydraMenus.mel deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/scripts/mayaHydra_GeomSubsetsPickModeMenu.mel b/scripts/mayaHydra_GeomSubsetsPickMode.mel similarity index 71% rename from scripts/mayaHydra_GeomSubsetsPickModeMenu.mel rename to scripts/mayaHydra_GeomSubsetsPickMode.mel index 720305e03f..967176a054 100644 --- a/scripts/mayaHydra_GeomSubsetsPickModeMenu.mel +++ b/scripts/mayaHydra_GeomSubsetsPickMode.mel @@ -1,4 +1,7 @@ -// addMenuCallback and removeMenuCallback copied from MayaUSD +// Contents of this file are largely adaptations of MayaUSD code for Kind and Point Instance picking modes UI setup. +// See the following MEL files in MayaUSD : [TODO : list file names, with links?] + +// addMenuCallback and removeMenuCallback were copied over from MayaUSD // See here : [TODO : insert link] // safely add a post menu callback to a menu @@ -17,8 +20,41 @@ proc removeMenuCallback(string $menuName, string $cmd) { menu -e -pmc $newCallbacks $menuName; } -global proc mayaHydra_GeomSubsetsPickModeMenu_Setup() { - mayaHydra_createRuntimeCommands; +// Helper function to get the GeomSubsets pick mode. +global proc string mayaHydra_GeomSubsetsPickMode_GetMode() { + string $mode = ""; + if (`optionVar -exists "mayaHydra_GeomSubsetsPickMode"`) { + $mode = `optionVar -q "mayaHydra_GeomSubsetsPickMode"`; + } + return $mode; +} + +// Helper function to set the GeomSubsets pick mode. +global proc mayaHydra_GeomSubsetsPickMode_SetMode(string $mode) { + optionVar -stringValue "mayaHydra_GeomSubsetsPickMode" $mode; +} + +global proc mayaHydra_GeomSubsetsPickMode_SetupRuntimeCommands() { + if (!`runTimeCommand -exists mayaHydra_GeomSubsetsPickMode_SetPrims`) { + runTimeCommand -default true -plugin "mayaHydra" + -label "Prims" + -annotation "Select whole prims" + -category "Menu items.Maya USD" + -command ("mayaHydra_GeomSubsetsPickMode_SetMode(\"Prims\")") + mayaHydra_GeomSubsetsPickMode_SetPrims; + } + if (!`runTimeCommand -exists mayaHydra_GeomSubsetsPickMode_SetGeomSubsets`) { + runTimeCommand -default true -plugin "mayaHydra" + -label "GeomSubsets" + -annotation "Select GeomSubsets" + -category "Menu items.Maya USD" + -command ("mayaHydra_GeomSubsetsPickMode_SetMode(\"GeomSubsets\")") + mayaHydra_GeomSubsetsPickMode_SetGeomSubsets; + } +} + +global proc mayaHydra_GeomSubsetsPickMode_SetupUI() { + mayaHydra_GeomSubsetsPickMode_SetupRuntimeCommands; global string $gMainSelectMenu; // Maya's "Select" menu addMenuCallback($gMainSelectMenu, "mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback"); } @@ -47,8 +83,8 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems() { menuItem -divider true -dividerLabel "GeomSubsets (Hydra only)"; radioMenuItemCollection; - menuItem -radioButton on -runTimeCommand ("mayaHydraGeomSubsetsPickMode_Prims") geomSubsetsPickMode_Prims; - menuItem -radioButton off -runTimeCommand ("mayaHydraGeomSubsetsPickMode_GeomSubsets") geomSubsetsPickMode_GeomSubsets; + menuItem -radioButton on -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetPrims") mayaHydra_GeomSubsetsPickMode_Prims; + menuItem -radioButton off -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetGeomSubsets") mayaHydra_GeomSubsetsPickMode_GeomSubsets; mayaHydra_GeomSubsetsPickModeMenu_UpdateRadioButtons(); @@ -58,15 +94,14 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems() { setParent -menu $origParent; } - // Update the menu item radio buttons in the GeomSubsets pick mode UI global proc mayaHydra_GeomSubsetsPickModeMenu_UpdateRadioButtons() { // Note: we do all string compares as case-insensitive (lowercase) // as the menu labels are capitalized. - string $pickMode = `tolower(mayaHydra_getGeomSubsetsPickMode())`; + string $pickMode = `tolower(mayaHydra_GeomSubsetsPickMode_GetMode())`; switch($pickMode) { case "": - menuItem -e -radioButton on geomSubsetsPickMode_Prims; + menuItem -e -radioButton on mayaHydra_GeomSubsetsPickMode_Prims; break; default: // Enable the menu item based on the label. @@ -81,41 +116,3 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_UpdateRadioButtons() { } } } - - -/////////////////////////////////////////////////////////////////////////////// -// mayaHydra_setGeomSubsetsPickMode -// Helper function to set the GeomSubsets pick mode. -global proc mayaHydra_setGeomSubsetsPickMode(string $mode) { - optionVar -stringValue "mayaHydra_GeomSubsetsPickMode" $mode; -} - -/////////////////////////////////////////////////////////////////////////////// -// mayaHydra_getGeomSubsetsPickMode -// Helper function to get the GeomSubsets pick mode. -global proc string mayaHydra_getGeomSubsetsPickMode() { - string $mode = ""; - if (`optionVar -exists "mayaHydra_GeomSubsetsPickMode"`) { - $mode = `optionVar -q "mayaHydra_GeomSubsetsPickMode"`; - } - return $mode; -} - -global proc mayaHydra_createRuntimeCommands() { - if (!`runTimeCommand -exists mayaHydraGeomSubsetsPickMode_Prims`) { - runTimeCommand -default true -plugin "mayaHydra" - -label "Prims" - -annotation "Select whole prims" - -category "Menu items.Maya USD" - -command ("mayaHydra_setGeomSubsetsPickMode(\"Prims\")") - mayaHydraGeomSubsetsPickMode_Prims; - } - if (!`runTimeCommand -exists mayaHydraGeomSubsetsPickMode_GeomSubsets`) { - runTimeCommand -default true -plugin "mayaHydra" - -label "GeomSubsets" - -annotation "Select GeomSubsets" - -category "Menu items.Maya USD" - -command ("mayaHydra_setGeomSubsetsPickMode(\"GeomSubsets\")") - mayaHydraGeomSubsetsPickMode_GeomSubsets; - } -} diff --git a/scripts/mayaHydra_registerUI_load.mel b/scripts/mayaHydra_registerUI_load.mel index a483cf0ba0..8de71b418b 100644 --- a/scripts/mayaHydra_registerUI_load.mel +++ b/scripts/mayaHydra_registerUI_load.mel @@ -2,6 +2,6 @@ global proc mayaHydra_registerUI_load() // Callback registered with the MFnPlugin for when the plugin is loaded. // Used to initialize any UI we create. { - source "mayaHydra_GeomSubsetsPickModeMenu.mel"; - mayaHydra_GeomSubsetsPickModeMenu_Setup; + source "mayaHydra_GeomSubsetsPickMode.mel"; + mayaHydra_GeomSubsetsPickMode_SetupUI(); } From 98445a48bed522cb24673ce107ae85642f0c76ca Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 28 Jun 2024 16:28:37 -0400 Subject: [PATCH 11/75] HYDRA-1058 : Tear down UI on plugin unload and if MayaUSD is unloaded, and reconstruct it if MayaUSD is reloaded --- lib/mayaHydra/mayaPlugin/plugin.cpp | 30 ++++++++++--------- scripts/mayaHydra_GeomSubsetsPickMode.mel | 35 ++++++++++++++++++----- scripts/mayaHydra_registerUI_unload.mel | 13 ++------- 3 files changed, 48 insertions(+), 30 deletions(-) diff --git a/lib/mayaHydra/mayaPlugin/plugin.cpp b/lib/mayaHydra/mayaPlugin/plugin.cpp index 736a0b40ab..76d1904416 100644 --- a/lib/mayaHydra/mayaPlugin/plugin.cpp +++ b/lib/mayaHydra/mayaPlugin/plugin.cpp @@ -84,13 +84,17 @@ void finalize() MayaHydra::MayaColorPreferencesTranslator::deleteInstance(); } -static std::optional gsPluginLoadCallbackId; +static std::optional gsBeforePluginUnloadCallbackId; -void pluginLoadCallback( const MStringArray& strs, void* clientData ) +void beforePluginUnloadCallback( const MStringArray& strs, void* clientData ) { - std::cout << "pluginLoadCallback ------------------------- " << std::endl; + std::cout << "beforePluginUnloadCallback ------------------------- " << std::endl; for (const auto& str : strs) { std::cout << str.asChar() << std::endl; + if (str == "mayaUsdPlugin") { + MGlobal::executeCommand("mayaHydra_GeomSubsetsPickMode_TeardownUI"); + break; + } } } @@ -134,17 +138,17 @@ PLUGIN_EXPORT MStatus initializePlugin(MObject obj) } } - MStatus pluginLoadCallbackStatus; - MCallbackId pluginLoadCallbackId = MSceneMessage::addStringArrayCallback( - MSceneMessage::Message::kAfterPluginLoad, - pluginLoadCallback, + MStatus beforePluginUnloadCallbackStatus; + MCallbackId beforePluginUnloadCallbackId = MSceneMessage::addStringArrayCallback( + MSceneMessage::Message::kBeforePluginUnload, + beforePluginUnloadCallback, nullptr, - &pluginLoadCallbackStatus); - if (pluginLoadCallbackStatus) { - gsPluginLoadCallbackId = pluginLoadCallbackId; + &beforePluginUnloadCallbackStatus); + if (beforePluginUnloadCallbackStatus) { + gsBeforePluginUnloadCallbackId = beforePluginUnloadCallbackId; } else { ret = MS::kFailure; - ret.perror("Error registering plugin load callback."); + ret.perror("Error registering BeforePluginUnload callback."); return ret; } @@ -163,8 +167,8 @@ PLUGIN_EXPORT MStatus uninitializePlugin(MObject obj) { finalize(); - if (gsPluginLoadCallbackId.has_value()) { - MSceneMessage::removeCallback(gsPluginLoadCallbackId.value()); + if (gsBeforePluginUnloadCallbackId.has_value()) { + MSceneMessage::removeCallback(gsBeforePluginUnloadCallbackId.value()); } MFnPlugin plugin(obj, "Autodesk", PLUGIN_VERSION, "Any"); diff --git a/scripts/mayaHydra_GeomSubsetsPickMode.mel b/scripts/mayaHydra_GeomSubsetsPickMode.mel index 967176a054..233a37681a 100644 --- a/scripts/mayaHydra_GeomSubsetsPickMode.mel +++ b/scripts/mayaHydra_GeomSubsetsPickMode.mel @@ -20,6 +20,10 @@ proc removeMenuCallback(string $menuName, string $cmd) { menu -e -pmc $newCallbacks $menuName; } +global string $gMayaHydra_GeomSubsetsPickMode_Divider; +global string $gMayaHydra_GeomSubsetsPickMode_ButtonPrims; +global string $gMayaHydra_GeomSubsetsPickMode_ButtonGeomSubsets; + // Helper function to get the GeomSubsets pick mode. global proc string mayaHydra_GeomSubsetsPickMode_GetMode() { string $mode = ""; @@ -59,15 +63,32 @@ global proc mayaHydra_GeomSubsetsPickMode_SetupUI() { addMenuCallback($gMainSelectMenu, "mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback"); } +global proc mayaHydra_GeomSubsetsPickMode_TeardownUI() { + global string $gMayaHydra_GeomSubsetsPickMode_Divider; + global string $gMayaHydra_GeomSubsetsPickMode_ButtonPrims; + global string $gMayaHydra_GeomSubsetsPickMode_ButtonGeomSubsets; + deleteUI -menuItem + $gMayaHydra_GeomSubsetsPickMode_Divider + $gMayaHydra_GeomSubsetsPickMode_ButtonPrims + $gMayaHydra_GeomSubsetsPickMode_ButtonGeomSubsets; + $gMayaHydra_GeomSubsetsPickMode_Divider = ""; + $gMayaHydra_GeomSubsetsPickMode_ButtonPrims = ""; + $gMayaHydra_GeomSubsetsPickMode_ButtonGeomSubsets = ""; +} + global proc mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback() { if (!`pluginInfo -q -loaded mayaUsdPlugin`) { return; } - global string $gMainSelectMenu; // Maya's "Select" menu - removeMenuCallback($gMainSelectMenu, "mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback"); - - scriptJob -idleEvent "mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems" -runOnce true; + global string $gMayaHydra_GeomSubsetsPickMode_Divider; + global string $gMayaHydra_GeomSubsetsPickMode_ButtonPrims; + global string $gMayaHydra_GeomSubsetsPickMode_ButtonGeomSubsets; + if ($gMayaHydra_GeomSubsetsPickMode_Divider == "" + && $gMayaHydra_GeomSubsetsPickMode_ButtonPrims == "" + && $gMayaHydra_GeomSubsetsPickMode_ButtonGeomSubsets == "") { + scriptJob -idleEvent "mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems" -runOnce true; + } } global proc mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems() { @@ -80,11 +101,11 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems() { $origParent = `setParent -q -menu`; setParent -menu $gMayaUsdSelectModeSubMenu; - menuItem -divider true -dividerLabel "GeomSubsets (Hydra only)"; + $gMayaHydra_GeomSubsetsPickMode_Divider = `menuItem -divider true -dividerLabel "GeomSubsets (Hydra only)"`; radioMenuItemCollection; - menuItem -radioButton on -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetPrims") mayaHydra_GeomSubsetsPickMode_Prims; - menuItem -radioButton off -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetGeomSubsets") mayaHydra_GeomSubsetsPickMode_GeomSubsets; + $gMayaHydra_GeomSubsetsPickMode_ButtonPrims = `menuItem -radioButton on -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetPrims") mayaHydra_GeomSubsetsPickMode_Prims`; + $gMayaHydra_GeomSubsetsPickMode_ButtonGeomSubsets = `menuItem -radioButton off -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetGeomSubsets") mayaHydra_GeomSubsetsPickMode_GeomSubsets`; mayaHydra_GeomSubsetsPickModeMenu_UpdateRadioButtons(); diff --git a/scripts/mayaHydra_registerUI_unload.mel b/scripts/mayaHydra_registerUI_unload.mel index 8b8a94903a..90dfe94b11 100644 --- a/scripts/mayaHydra_registerUI_unload.mel +++ b/scripts/mayaHydra_registerUI_unload.mel @@ -1,14 +1,7 @@ -global proc mayaUsd_pluginUIDeletion() +global proc mayaHydra_registerUI_unload() // Callback registered with the MFnPlugin for when the plugin is unloaded. // Used to remove any UI we create. { - // We do not bother unloading the ufeSupport plugin here, even though - // we do attempt to load it when this plugin gets loaded. It is a utility - // plugin that we depend on, but so could others so we will leave it alone. - - - // Unregister the Preferences tab. - deleteCustomPrefsTab("mayaUsd_PrefCreateTab"); - - mayaUsdMenu_unloadui(); + source "mayaHydra_GeomSubsetsPickMode.mel"; + mayaHydra_GeomSubsetsPickMode_TeardownUI(); } From ce3a01db698ee6344765614069e5b3d01d0b4b6c Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 28 Jun 2024 16:37:25 -0400 Subject: [PATCH 12/75] HYDRA-1058 : Simplify data keeping for UI teardown --- scripts/mayaHydra_GeomSubsetsPickMode.mel | 24 +++++++++-------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/scripts/mayaHydra_GeomSubsetsPickMode.mel b/scripts/mayaHydra_GeomSubsetsPickMode.mel index 233a37681a..9897960b91 100644 --- a/scripts/mayaHydra_GeomSubsetsPickMode.mel +++ b/scripts/mayaHydra_GeomSubsetsPickMode.mel @@ -21,8 +21,7 @@ proc removeMenuCallback(string $menuName, string $cmd) { } global string $gMayaHydra_GeomSubsetsPickMode_Divider; -global string $gMayaHydra_GeomSubsetsPickMode_ButtonPrims; -global string $gMayaHydra_GeomSubsetsPickMode_ButtonGeomSubsets; +global string $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; // Helper function to get the GeomSubsets pick mode. global proc string mayaHydra_GeomSubsetsPickMode_GetMode() { @@ -65,15 +64,12 @@ global proc mayaHydra_GeomSubsetsPickMode_SetupUI() { global proc mayaHydra_GeomSubsetsPickMode_TeardownUI() { global string $gMayaHydra_GeomSubsetsPickMode_Divider; - global string $gMayaHydra_GeomSubsetsPickMode_ButtonPrims; - global string $gMayaHydra_GeomSubsetsPickMode_ButtonGeomSubsets; + global string $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; deleteUI -menuItem $gMayaHydra_GeomSubsetsPickMode_Divider - $gMayaHydra_GeomSubsetsPickMode_ButtonPrims - $gMayaHydra_GeomSubsetsPickMode_ButtonGeomSubsets; + $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; $gMayaHydra_GeomSubsetsPickMode_Divider = ""; - $gMayaHydra_GeomSubsetsPickMode_ButtonPrims = ""; - $gMayaHydra_GeomSubsetsPickMode_ButtonGeomSubsets = ""; + $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup = ""; } global proc mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback() { @@ -82,11 +78,9 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback() { } global string $gMayaHydra_GeomSubsetsPickMode_Divider; - global string $gMayaHydra_GeomSubsetsPickMode_ButtonPrims; - global string $gMayaHydra_GeomSubsetsPickMode_ButtonGeomSubsets; + global string $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; if ($gMayaHydra_GeomSubsetsPickMode_Divider == "" - && $gMayaHydra_GeomSubsetsPickMode_ButtonPrims == "" - && $gMayaHydra_GeomSubsetsPickMode_ButtonGeomSubsets == "") { + && $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup == "") { scriptJob -idleEvent "mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems" -runOnce true; } } @@ -103,9 +97,9 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems() { $gMayaHydra_GeomSubsetsPickMode_Divider = `menuItem -divider true -dividerLabel "GeomSubsets (Hydra only)"`; - radioMenuItemCollection; - $gMayaHydra_GeomSubsetsPickMode_ButtonPrims = `menuItem -radioButton on -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetPrims") mayaHydra_GeomSubsetsPickMode_Prims`; - $gMayaHydra_GeomSubsetsPickMode_ButtonGeomSubsets = `menuItem -radioButton off -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetGeomSubsets") mayaHydra_GeomSubsetsPickMode_GeomSubsets`; + $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup = `radioMenuItemCollection`; + menuItem -radioButton on -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetPrims") mayaHydra_GeomSubsetsPickMode_Prims; + menuItem -radioButton off -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetGeomSubsets") mayaHydra_GeomSubsetsPickMode_GeomSubsets; mayaHydra_GeomSubsetsPickModeMenu_UpdateRadioButtons(); From b81e16491d70170e26b29874513fe24bfd4737bf Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 28 Jun 2024 16:45:23 -0400 Subject: [PATCH 13/75] HYDRA-1058 : Remove print debugging statements --- lib/mayaHydra/mayaPlugin/plugin.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/mayaHydra/mayaPlugin/plugin.cpp b/lib/mayaHydra/mayaPlugin/plugin.cpp index 76d1904416..f6cb032fb6 100644 --- a/lib/mayaHydra/mayaPlugin/plugin.cpp +++ b/lib/mayaHydra/mayaPlugin/plugin.cpp @@ -88,9 +88,7 @@ static std::optional gsBeforePluginUnloadCallbackId; void beforePluginUnloadCallback( const MStringArray& strs, void* clientData ) { - std::cout << "beforePluginUnloadCallback ------------------------- " << std::endl; for (const auto& str : strs) { - std::cout << str.asChar() << std::endl; if (str == "mayaUsdPlugin") { MGlobal::executeCommand("mayaHydra_GeomSubsetsPickMode_TeardownUI"); break; From 828fbead50feaaa060ca041fe65ee010156d6a0a Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 28 Jun 2024 16:46:27 -0400 Subject: [PATCH 14/75] HYDRA-1058 : Reorder operations --- lib/mayaHydra/mayaPlugin/plugin.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/mayaHydra/mayaPlugin/plugin.cpp b/lib/mayaHydra/mayaPlugin/plugin.cpp index f6cb032fb6..0f0be5ae86 100644 --- a/lib/mayaHydra/mayaPlugin/plugin.cpp +++ b/lib/mayaHydra/mayaPlugin/plugin.cpp @@ -136,6 +136,12 @@ PLUGIN_EXPORT MStatus initializePlugin(MObject obj) } } + plugin.registerUI( + "mayaHydra_registerUI_load", + "mayaHydra_registerUI_unload", + "mayaHydra_registerUI_batch_load", + "mayaHydra_registerUI_batch_unload"); + MStatus beforePluginUnloadCallbackStatus; MCallbackId beforePluginUnloadCallbackId = MSceneMessage::addStringArrayCallback( MSceneMessage::Message::kBeforePluginUnload, @@ -150,12 +156,6 @@ PLUGIN_EXPORT MStatus initializePlugin(MObject obj) return ret; } - plugin.registerUI( - "mayaHydra_registerUI_load", - "mayaHydra_registerUI_unload", - "mayaHydra_registerUI_batch_load", - "mayaHydra_registerUI_batch_unload"); - initialize(); return ret; From 0e372824b68204acd04c76556407c8d0befb4143 Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 28 Jun 2024 16:51:29 -0400 Subject: [PATCH 15/75] HYDRA-1058 : Cleanup headers and rename method --- lib/mayaHydra/mayaPlugin/renderOverride.cpp | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/lib/mayaHydra/mayaPlugin/renderOverride.cpp b/lib/mayaHydra/mayaPlugin/renderOverride.cpp index 3420855ce2..dfe7203aa6 100644 --- a/lib/mayaHydra/mayaPlugin/renderOverride.cpp +++ b/lib/mayaHydra/mayaPlugin/renderOverride.cpp @@ -30,18 +30,6 @@ #include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #ifdef CODE_COVERAGE_WORKAROUND #include @@ -88,6 +76,7 @@ #include #include #include +#include #include #include #include @@ -530,7 +519,7 @@ class UsdPickHandler : public MtohRenderOverride::PickHandlerBase { // Return the closest path and the instance index in the scene index scene // that corresponds to the pick hit. If the pick hit is not an instance, // the instance index will be -1. - HitPath resolvePointInstancePicking(HdRenderIndex& renderIndex, const HdxPickHit& pickHit) const + HitPath resolvePrimAndInstancePicking(HdRenderIndex& renderIndex, const HdxPickHit& pickHit) const { auto primOrigin = HdxPrimOriginInfo::FromPickHit(&renderIndex, pickHit); @@ -600,10 +589,10 @@ class UsdPickHandler : public MtohRenderOverride::PickHandlerBase { // If we did not find any geomSubset and this is the only pick hit, then fallback to selecting the base prim/instance. if (hitPaths.empty() && pickInput.isSolePickHit) { - hitPaths.push_back(resolvePointInstancePicking(*renderIndex(), pickInput.pickHit)); + hitPaths.push_back(resolvePrimAndInstancePicking(*renderIndex(), pickInput.pickHit)); } } else { - hitPaths.push_back(resolvePointInstancePicking(*renderIndex(), pickInput.pickHit)); + hitPaths.push_back(resolvePrimAndInstancePicking(*renderIndex(), pickInput.pickHit)); } size_t nbSelectedUfeItems = 0; From 7f790ac465f90ea91eb3184782cc8723907f9ac9 Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 28 Jun 2024 17:01:59 -0400 Subject: [PATCH 16/75] HYDRA-1058 : Add comments to explain how the pick mode menu is hooked up --- lib/mayaHydra/mayaPlugin/plugin.cpp | 3 +++ scripts/mayaHydra_GeomSubsetsPickMode.mel | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/lib/mayaHydra/mayaPlugin/plugin.cpp b/lib/mayaHydra/mayaPlugin/plugin.cpp index 0f0be5ae86..15ad7408ec 100644 --- a/lib/mayaHydra/mayaPlugin/plugin.cpp +++ b/lib/mayaHydra/mayaPlugin/plugin.cpp @@ -89,6 +89,9 @@ static std::optional gsBeforePluginUnloadCallbackId; void beforePluginUnloadCallback( const MStringArray& strs, void* clientData ) { for (const auto& str : strs) { + // If MayaUSD is being unloaded, tear down our GeomSubsets picking mode UI. + // This resets the variables used to keep track of the UI elements' existence, + // and allows us to recreate them if MayaUSD is reloaded. if (str == "mayaUsdPlugin") { MGlobal::executeCommand("mayaHydra_GeomSubsetsPickMode_TeardownUI"); break; diff --git a/scripts/mayaHydra_GeomSubsetsPickMode.mel b/scripts/mayaHydra_GeomSubsetsPickMode.mel index 9897960b91..85ed16ad26 100644 --- a/scripts/mayaHydra_GeomSubsetsPickMode.mel +++ b/scripts/mayaHydra_GeomSubsetsPickMode.mel @@ -73,10 +73,26 @@ global proc mayaHydra_GeomSubsetsPickMode_TeardownUI() { } global proc mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback() { + // Explanation of how we augment MayaUSD's selection modes menu with our custom options + // for GeomSubsets picking : + // To create its selection modes menu, MayaUSD, on plugin UI load, will setup a callback + // on when the "Select" menu in Maya is opened. The callback will then create the selection + // modes submenu and its menu items. So what we do in order to add our own menu items is that + // we also add our own callback on the "Select" menu. However, we can't count on the order + // in which callbacks will be registered and processed, and just blindly add the menu items here. + // To work around this, we thus create the UI elements in a method that will be called by an idle + // event/scriptJob, which will be executed after the "Select" menu open callbacks have been + // processed. The USD selection modes menu should then exist, and we can add our menu items then. + + // If MayaUSD is not loaded, the USD selection modes menu won't exist, so no need to try and add + // our own menu items. if (!`pluginInfo -q -loaded mayaUsdPlugin`) { return; } + // If our custom UI elements name is empty, then they do not exist or have been torn down previously, + // so create them. Note that we check that all UI elements have empty names : normally they should + // always either all have a name and exist, or all have no name and not exist. global string $gMayaHydra_GeomSubsetsPickMode_Divider; global string $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; if ($gMayaHydra_GeomSubsetsPickMode_Divider == "" From ba064154503f73586ea197be75ec2874188312cb Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 28 Jun 2024 17:02:52 -0400 Subject: [PATCH 17/75] HYDRA-1058 : Remove headers --- lib/mayaHydra/mayaPlugin/renderOverride.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/mayaHydra/mayaPlugin/renderOverride.cpp b/lib/mayaHydra/mayaPlugin/renderOverride.cpp index dfe7203aa6..62ec52bfd2 100644 --- a/lib/mayaHydra/mayaPlugin/renderOverride.cpp +++ b/lib/mayaHydra/mayaPlugin/renderOverride.cpp @@ -42,10 +42,8 @@ #include #include #include -#include #include #include -#include #include #include #include From 238cdb0af7470e54fa1ada668c7826217dd25b80 Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 28 Jun 2024 17:08:51 -0400 Subject: [PATCH 18/75] HYDRA-1058 : Rename prims picking mode --- lib/mayaHydra/mayaPlugin/renderOverride.cpp | 8 ++++---- lib/mayaHydra/mayaPlugin/tokens.h | 2 +- scripts/mayaHydra_GeomSubsetsPickMode.mel | 12 ++++++------ 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/mayaHydra/mayaPlugin/renderOverride.cpp b/lib/mayaHydra/mayaPlugin/renderOverride.cpp index 62ec52bfd2..52de576922 100644 --- a/lib/mayaHydra/mayaPlugin/renderOverride.cpp +++ b/lib/mayaHydra/mayaPlugin/renderOverride.cpp @@ -231,7 +231,7 @@ enum UsdPointInstancesPickMode enum UsdGeomSubsetsPickMode { - Prims = 0, + PrimsAndInstances = 0, GeomSubsets }; @@ -266,13 +266,13 @@ UsdGeomSubsetsPickMode GetGeomSubsetsPickMode() { static const MString kOptionVarName(MayaHydraPickOptionVars->GeomSubsetsPickMode.GetText()); - auto pickMode = UsdGeomSubsetsPickMode::Prims; + auto pickMode = UsdGeomSubsetsPickMode::PrimsAndInstances; if (MGlobal::optionVarExists(kOptionVarName)) { const TfToken pickModeToken(MGlobal::optionVarStringValue(kOptionVarName).asChar()); - if (pickModeToken == GeomSubsetsPickModeTokens->Prims) { - pickMode = UsdGeomSubsetsPickMode::Prims; + if (pickModeToken == GeomSubsetsPickModeTokens->PrimsAndInstances) { + pickMode = UsdGeomSubsetsPickMode::PrimsAndInstances; } else if (pickModeToken == GeomSubsetsPickModeTokens->GeomSubsets) { pickMode = UsdGeomSubsetsPickMode::GeomSubsets; } diff --git a/lib/mayaHydra/mayaPlugin/tokens.h b/lib/mayaHydra/mayaPlugin/tokens.h index b4957d9ce3..85598f6922 100644 --- a/lib/mayaHydra/mayaPlugin/tokens.h +++ b/lib/mayaHydra/mayaPlugin/tokens.h @@ -40,7 +40,7 @@ TF_DECLARE_PUBLIC_TOKENS(MayaHydraPickOptionVars, MAYAHYDRA_PICK_OPTIONVAR_TOKEN // clang-format off #define GEOMSUBSETS_PICK_MODE_TOKENS \ - (Prims) \ + (PrimsAndInstances) \ (GeomSubsets) // clang-format on diff --git a/scripts/mayaHydra_GeomSubsetsPickMode.mel b/scripts/mayaHydra_GeomSubsetsPickMode.mel index 85ed16ad26..a16ba39389 100644 --- a/scripts/mayaHydra_GeomSubsetsPickMode.mel +++ b/scripts/mayaHydra_GeomSubsetsPickMode.mel @@ -38,13 +38,13 @@ global proc mayaHydra_GeomSubsetsPickMode_SetMode(string $mode) { } global proc mayaHydra_GeomSubsetsPickMode_SetupRuntimeCommands() { - if (!`runTimeCommand -exists mayaHydra_GeomSubsetsPickMode_SetPrims`) { + if (!`runTimeCommand -exists mayaHydra_GeomSubsetsPickMode_SetPrimsAndInstances`) { runTimeCommand -default true -plugin "mayaHydra" - -label "Prims" + -label "Prims & Instances" -annotation "Select whole prims" -category "Menu items.Maya USD" - -command ("mayaHydra_GeomSubsetsPickMode_SetMode(\"Prims\")") - mayaHydra_GeomSubsetsPickMode_SetPrims; + -command ("mayaHydra_GeomSubsetsPickMode_SetMode(\"PrimsAndInstances\")") + mayaHydra_GeomSubsetsPickMode_SetPrimsAndInstances; } if (!`runTimeCommand -exists mayaHydra_GeomSubsetsPickMode_SetGeomSubsets`) { runTimeCommand -default true -plugin "mayaHydra" @@ -114,7 +114,7 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems() { $gMayaHydra_GeomSubsetsPickMode_Divider = `menuItem -divider true -dividerLabel "GeomSubsets (Hydra only)"`; $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup = `radioMenuItemCollection`; - menuItem -radioButton on -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetPrims") mayaHydra_GeomSubsetsPickMode_Prims; + menuItem -radioButton on -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetPrimsAndInstances") mayaHydra_GeomSubsetsPickMode_PrimsAndInstances; menuItem -radioButton off -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetGeomSubsets") mayaHydra_GeomSubsetsPickMode_GeomSubsets; mayaHydra_GeomSubsetsPickModeMenu_UpdateRadioButtons(); @@ -132,7 +132,7 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_UpdateRadioButtons() { string $pickMode = `tolower(mayaHydra_GeomSubsetsPickMode_GetMode())`; switch($pickMode) { case "": - menuItem -e -radioButton on mayaHydra_GeomSubsetsPickMode_Prims; + menuItem -e -radioButton on mayaHydra_GeomSubsetsPickMode_PrimsAndInstances; break; default: // Enable the menu item based on the label. From 3b1cf87c4050dcc4d5061118bf6648982d2893ca Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 28 Jun 2024 17:17:21 -0400 Subject: [PATCH 19/75] HYDRA-1058 : Adjust UI label --- scripts/mayaHydra_GeomSubsetsPickMode.mel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/mayaHydra_GeomSubsetsPickMode.mel b/scripts/mayaHydra_GeomSubsetsPickMode.mel index a16ba39389..2541ac07aa 100644 --- a/scripts/mayaHydra_GeomSubsetsPickMode.mel +++ b/scripts/mayaHydra_GeomSubsetsPickMode.mel @@ -40,7 +40,7 @@ global proc mayaHydra_GeomSubsetsPickMode_SetMode(string $mode) { global proc mayaHydra_GeomSubsetsPickMode_SetupRuntimeCommands() { if (!`runTimeCommand -exists mayaHydra_GeomSubsetsPickMode_SetPrimsAndInstances`) { runTimeCommand -default true -plugin "mayaHydra" - -label "Prims & Instances" + -label "Prims and Instances" -annotation "Select whole prims" -category "Menu items.Maya USD" -command ("mayaHydra_GeomSubsetsPickMode_SetMode(\"PrimsAndInstances\")") From 60372122c47d747f420a150ed416f679b6f56f82 Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 28 Jun 2024 22:38:55 -0400 Subject: [PATCH 20/75] HYDRA-1058 : Clarify naming --- scripts/mayaHydra_GeomSubsetsPickMode.mel | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/mayaHydra_GeomSubsetsPickMode.mel b/scripts/mayaHydra_GeomSubsetsPickMode.mel index 2541ac07aa..84284e7d29 100644 --- a/scripts/mayaHydra_GeomSubsetsPickMode.mel +++ b/scripts/mayaHydra_GeomSubsetsPickMode.mel @@ -104,11 +104,11 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback() { global proc mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems() { global string $gMayaUsdSelectModeSubMenu; if ($gMayaUsdSelectModeSubMenu == "" || !`menuItem -q -exists $gMayaUsdSelectModeSubMenu`) { - print "Error : USD selection submenu was not found, could not add GeomSubsets pick mode UI.\n"; + print "Error : USD selection submenu was not found, could not create GeomSubsets pick mode UI.\n"; return; } - $origParent = `setParent -q -menu`; + $prevParent = `setParent -q -menu`; setParent -menu $gMayaUsdSelectModeSubMenu; $gMayaHydra_GeomSubsetsPickMode_Divider = `menuItem -divider true -dividerLabel "GeomSubsets (Hydra only)"`; @@ -122,7 +122,7 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems() { scriptJob -parent $gMayaUsdSelectModeSubMenu -optionVarChanged "mayaHydra_GeomSubsetsPickMode" "mayaHydra_GeomSubsetsPickModeMenu_UpdateRadioButtons"; - setParent -menu $origParent; + setParent -menu $prevParent; } // Update the menu item radio buttons in the GeomSubsets pick mode UI From 696fdea6d0e99b586da8b228e4f4a23ca126b89a Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 28 Jun 2024 22:40:03 -0400 Subject: [PATCH 21/75] HYDRA-1058 : Add comments --- scripts/mayaHydra_GeomSubsetsPickMode.mel | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/mayaHydra_GeomSubsetsPickMode.mel b/scripts/mayaHydra_GeomSubsetsPickMode.mel index 84284e7d29..b930bcc81c 100644 --- a/scripts/mayaHydra_GeomSubsetsPickMode.mel +++ b/scripts/mayaHydra_GeomSubsetsPickMode.mel @@ -108,6 +108,7 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems() { return; } + // Store the current parent menu and change it to the USD selection submenu $prevParent = `setParent -q -menu`; setParent -menu $gMayaUsdSelectModeSubMenu; @@ -122,6 +123,7 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems() { scriptJob -parent $gMayaUsdSelectModeSubMenu -optionVarChanged "mayaHydra_GeomSubsetsPickMode" "mayaHydra_GeomSubsetsPickModeMenu_UpdateRadioButtons"; + // Restore the previous parent menu setParent -menu $prevParent; } From 3b6e56f7e85ffc31d743d859a5756e63cc152251 Mon Sep 17 00:00:00 2001 From: debloip Date: Tue, 2 Jul 2024 00:13:41 -0400 Subject: [PATCH 22/75] HYDRA-1058 : Handle single selection pick mode --- lib/mayaHydra/mayaPlugin/renderOverride.cpp | 8 +++++--- lib/mayaHydra/mayaPlugin/renderOverride.h | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/mayaHydra/mayaPlugin/renderOverride.cpp b/lib/mayaHydra/mayaPlugin/renderOverride.cpp index 52de576922..d177dd530c 100644 --- a/lib/mayaHydra/mayaPlugin/renderOverride.cpp +++ b/lib/mayaHydra/mayaPlugin/renderOverride.cpp @@ -1817,6 +1817,7 @@ void MtohRenderOverride::_PickByRegion( HdxPickHitVector& outHits, const MMatrix& viewMatrix, const MMatrix& projMatrix, + bool singlePick, bool pickGeomSubsets, bool pointSnappingActive, int view_x, @@ -1849,7 +1850,7 @@ void MtohRenderOverride::_PickByRegion( // Use the same size as selection region is enough to get all pick results. pickParams.resolution.Set(sel_w, sel_h); pickParams.pickTarget = HdxPickTokens->pickPrimsAndInstances; - pickParams.resolveMode = HdxPickTokens->resolveUnique; + pickParams.resolveMode = singlePick ? HdxPickTokens->resolveNearestToCenter : HdxPickTokens->resolveUnique; pickParams.doUnpickablesOcclude = false; pickParams.viewMatrix.Set(viewMatrix.matrix); pickParams.projectionMatrix.Set(adjustedProjMatrix.matrix); @@ -1910,6 +1911,7 @@ bool MtohRenderOverride::select( return false; HdxPickHitVector outHits; + const bool singlePick = selectInfo.singleSelection(); const bool pickGeomSubsets = GetGeomSubsetsPickMode() == UsdGeomSubsetsPickMode::GeomSubsets; const bool pointSnappingActive = selectInfo.pointSnapping(); if (pointSnappingActive) @@ -1931,7 +1933,7 @@ bool MtohRenderOverride::select( unsigned int curr_sel_x = cursor_x > (int)curr_sel_w / 2 ? cursor_x - (int)curr_sel_w / 2 : 0; unsigned int curr_sel_y = cursor_y > (int)curr_sel_h / 2 ? cursor_y - (int)curr_sel_h / 2 : 0; - _PickByRegion(outHits, viewMatrix, projMatrix, pickGeomSubsets, pointSnappingActive, + _PickByRegion(outHits, viewMatrix, projMatrix, singlePick, pickGeomSubsets, pointSnappingActive, view_x, view_y, view_w, view_h, curr_sel_x, curr_sel_y, curr_sel_w, curr_sel_h); // Increase the size of picking region. @@ -1942,7 +1944,7 @@ bool MtohRenderOverride::select( // Pick from original region directly when point snapping is not active or no hit is found yet. if (outHits.empty()) { - _PickByRegion(outHits, viewMatrix, projMatrix, pickGeomSubsets, pointSnappingActive, + _PickByRegion(outHits, viewMatrix, projMatrix, singlePick, pickGeomSubsets, pointSnappingActive, view_x, view_y, view_w, view_h, sel_x, sel_y, sel_w, sel_h); } diff --git a/lib/mayaHydra/mayaPlugin/renderOverride.h b/lib/mayaHydra/mayaPlugin/renderOverride.h index 9b8164311b..ee5f7dc352 100644 --- a/lib/mayaHydra/mayaPlugin/renderOverride.h +++ b/lib/mayaHydra/mayaPlugin/renderOverride.h @@ -169,6 +169,7 @@ class MtohRenderOverride : public MHWRender::MRenderOverride HdxPickHitVector& outHits, const MMatrix& viewMatrix, const MMatrix& projMatrix, + bool singlePick, bool pickGeomSubsets, bool pointSnappingActive, int view_x, From a0dc0a4f7e854244494c7941ecf3fe2261289b22 Mon Sep 17 00:00:00 2001 From: debloip Date: Tue, 2 Jul 2024 00:45:55 -0400 Subject: [PATCH 23/75] HYDRA-1058 : Fix UI deletion and re-creation --- scripts/mayaHydra_GeomSubsetsPickMode.mel | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/scripts/mayaHydra_GeomSubsetsPickMode.mel b/scripts/mayaHydra_GeomSubsetsPickMode.mel index b930bcc81c..450e5182b2 100644 --- a/scripts/mayaHydra_GeomSubsetsPickMode.mel +++ b/scripts/mayaHydra_GeomSubsetsPickMode.mel @@ -20,8 +20,8 @@ proc removeMenuCallback(string $menuName, string $cmd) { menu -e -pmc $newCallbacks $menuName; } -global string $gMayaHydra_GeomSubsetsPickMode_Divider; -global string $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; +global string $gMayaHydra_GeomSubsetsPickMode_Divider = ""; +global string $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup = ""; // Helper function to get the GeomSubsets pick mode. global proc string mayaHydra_GeomSubsetsPickMode_GetMode() { @@ -64,11 +64,15 @@ global proc mayaHydra_GeomSubsetsPickMode_SetupUI() { global proc mayaHydra_GeomSubsetsPickMode_TeardownUI() { global string $gMayaHydra_GeomSubsetsPickMode_Divider; - global string $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; - deleteUI -menuItem - $gMayaHydra_GeomSubsetsPickMode_Divider - $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; + if (`menuItem -q -exists $gMayaHydra_GeomSubsetsPickMode_Divider`) { + deleteUI -menuItem $gMayaHydra_GeomSubsetsPickMode_Divider; + } $gMayaHydra_GeomSubsetsPickMode_Divider = ""; + + global string $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; + if (`menuItem -q -exists $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup`) { + deleteUI -menuItem $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; + } $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup = ""; } @@ -112,8 +116,10 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems() { $prevParent = `setParent -q -menu`; setParent -menu $gMayaUsdSelectModeSubMenu; + global string $gMayaHydra_GeomSubsetsPickMode_Divider; $gMayaHydra_GeomSubsetsPickMode_Divider = `menuItem -divider true -dividerLabel "GeomSubsets (Hydra only)"`; + global string $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup = `radioMenuItemCollection`; menuItem -radioButton on -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetPrimsAndInstances") mayaHydra_GeomSubsetsPickMode_PrimsAndInstances; menuItem -radioButton off -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetGeomSubsets") mayaHydra_GeomSubsetsPickMode_GeomSubsets; From a04b5b6ae977c88063829b8d2e9894361fd2e9c9 Mon Sep 17 00:00:00 2001 From: debloip Date: Tue, 2 Jul 2024 00:51:36 -0400 Subject: [PATCH 24/75] HYDRA-1058 : Remove select menu callback on UI teardown --- scripts/mayaHydra_GeomSubsetsPickMode.mel | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/mayaHydra_GeomSubsetsPickMode.mel b/scripts/mayaHydra_GeomSubsetsPickMode.mel index 450e5182b2..8f5203ab8a 100644 --- a/scripts/mayaHydra_GeomSubsetsPickMode.mel +++ b/scripts/mayaHydra_GeomSubsetsPickMode.mel @@ -63,6 +63,9 @@ global proc mayaHydra_GeomSubsetsPickMode_SetupUI() { } global proc mayaHydra_GeomSubsetsPickMode_TeardownUI() { + global string $gMainSelectMenu; // Maya's "Select" menu + removeMenuCallback($gMainSelectMenu, "mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback"); + global string $gMayaHydra_GeomSubsetsPickMode_Divider; if (`menuItem -q -exists $gMayaHydra_GeomSubsetsPickMode_Divider`) { deleteUI -menuItem $gMayaHydra_GeomSubsetsPickMode_Divider; From 21b6ce96f455c10f665a7f45e7ee5e2a8113c61b Mon Sep 17 00:00:00 2001 From: debloip Date: Tue, 2 Jul 2024 00:59:27 -0400 Subject: [PATCH 25/75] HYDRA-1058 : Fix callbacks clear command --- lib/mayaHydra/mayaPlugin/plugin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mayaHydra/mayaPlugin/plugin.cpp b/lib/mayaHydra/mayaPlugin/plugin.cpp index 15ad7408ec..898c215b55 100644 --- a/lib/mayaHydra/mayaPlugin/plugin.cpp +++ b/lib/mayaHydra/mayaPlugin/plugin.cpp @@ -184,7 +184,7 @@ PLUGIN_EXPORT MStatus uninitializePlugin(MObject obj) gsRenderOverrides.clear(); // Clear any registered callbacks - MGlobal::executeCommand("callbacks -cc mayaHydra;"); + MGlobal::executeCommand("callbacks -cc -owner mayaHydra;"); if (!plugin.deregisterCommand(MtohViewCmd::name)) { ret = MS::kFailure; From a6d40de4e19e6afd710a9685c4904ead855412fb Mon Sep 17 00:00:00 2001 From: debloip Date: Tue, 2 Jul 2024 11:52:27 -0400 Subject: [PATCH 26/75] HYDRA-1058 : Fix UI deletion on plugin unload and re-load --- lib/mayaHydra/mayaPlugin/plugin.cpp | 55 +++++++++++++----- scripts/mayaHydra_GeomSubsetsPickMode.mel | 68 ++++++++++++++++++++--- 2 files changed, 101 insertions(+), 22 deletions(-) diff --git a/lib/mayaHydra/mayaPlugin/plugin.cpp b/lib/mayaHydra/mayaPlugin/plugin.cpp index 898c215b55..a80c6c1b6f 100644 --- a/lib/mayaHydra/mayaPlugin/plugin.cpp +++ b/lib/mayaHydra/mayaPlugin/plugin.cpp @@ -84,7 +84,19 @@ void finalize() MayaHydra::MayaColorPreferencesTranslator::deleteInstance(); } -static std::optional gsBeforePluginUnloadCallbackId; +static std::vector gsPluginLoadingCallbackIds; + +void afterPluginLoadCallback( const MStringArray& strs, void* clientData ) +{ + for (const auto& str : strs) { + // If MayaUSD is being loaded, set up our GeomSubsets picking mode UI. + // This will re-create the "Select" menu callback if it has been previously torn down. + if (str == "mayaUsdPlugin") { + MGlobal::executeCommand("if (`exists mayaHydra_GeomSubsetsPickMode_SetupUI`) { mayaHydra_GeomSubsetsPickMode_SetupUI; }"); + break; + } + } +} void beforePluginUnloadCallback( const MStringArray& strs, void* clientData ) { @@ -92,7 +104,10 @@ void beforePluginUnloadCallback( const MStringArray& strs, void* clientData ) // If MayaUSD is being unloaded, tear down our GeomSubsets picking mode UI. // This resets the variables used to keep track of the UI elements' existence, // and allows us to recreate them if MayaUSD is reloaded. - if (str == "mayaUsdPlugin") { + // We also do the same if mayaHydra is about to be unloaded : we can't rely on + // the deletion procedure registered through registerUI, as it seems the global + // variables tracking our UI elements have been reset at that point for some reason. + if (str == "mayaUsdPlugin" || str == "mayaHydra") { MGlobal::executeCommand("mayaHydra_GeomSubsetsPickMode_TeardownUI"); break; } @@ -145,17 +160,27 @@ PLUGIN_EXPORT MStatus initializePlugin(MObject obj) "mayaHydra_registerUI_batch_load", "mayaHydra_registerUI_batch_unload"); - MStatus beforePluginUnloadCallbackStatus; - MCallbackId beforePluginUnloadCallbackId = MSceneMessage::addStringArrayCallback( - MSceneMessage::Message::kBeforePluginUnload, - beforePluginUnloadCallback, - nullptr, - &beforePluginUnloadCallbackStatus); - if (beforePluginUnloadCallbackStatus) { - gsBeforePluginUnloadCallbackId = beforePluginUnloadCallbackId; - } else { - ret = MS::kFailure; - ret.perror("Error registering BeforePluginUnload callback."); + auto registerPluginLoadingCallback = [&](MSceneMessage::Message pluginLoadingMessage, MMessage::MStringArrayFunction callback) { + MStatus callbackStatus; + MCallbackId callbackId = MSceneMessage::addStringArrayCallback( + pluginLoadingMessage, + callback, + nullptr, + &callbackStatus); + if (callbackStatus) { + gsPluginLoadingCallbackIds.push_back(callbackId); + } else { + ret = MS::kFailure; + ret.perror("Error registering plugin loading callback."); + } + }; + + registerPluginLoadingCallback(MSceneMessage::Message::kAfterPluginLoad, afterPluginLoadCallback); + if (!ret) { + return ret; + } + registerPluginLoadingCallback(MSceneMessage::Message::kBeforePluginUnload, beforePluginUnloadCallback); + if (!ret) { return ret; } @@ -168,8 +193,8 @@ PLUGIN_EXPORT MStatus uninitializePlugin(MObject obj) { finalize(); - if (gsBeforePluginUnloadCallbackId.has_value()) { - MSceneMessage::removeCallback(gsBeforePluginUnloadCallbackId.value()); + for (const auto& callbackId : gsPluginLoadingCallbackIds) { + MSceneMessage::removeCallback(callbackId); } MFnPlugin plugin(obj, "Autodesk", PLUGIN_VERSION, "Any"); diff --git a/scripts/mayaHydra_GeomSubsetsPickMode.mel b/scripts/mayaHydra_GeomSubsetsPickMode.mel index 8f5203ab8a..fecb175d39 100644 --- a/scripts/mayaHydra_GeomSubsetsPickMode.mel +++ b/scripts/mayaHydra_GeomSubsetsPickMode.mel @@ -20,8 +20,14 @@ proc removeMenuCallback(string $menuName, string $cmd) { menu -e -pmc $newCallbacks $menuName; } +proc int hasMenuCallback(string $menuName, string $cmd) { + string $existingCallbacks = `menu -q -pmc $menuName`; + return `gmatch $existingCallbacks ("*" + $cmd + "*")`; +} + global string $gMayaHydra_GeomSubsetsPickMode_Divider = ""; global string $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup = ""; +global string $gMayaHydra_GeomSubsetsPickMode_RadioButtons[] = {}; // Helper function to get the GeomSubsets pick mode. global proc string mayaHydra_GeomSubsetsPickMode_GetMode() { @@ -59,22 +65,47 @@ global proc mayaHydra_GeomSubsetsPickMode_SetupRuntimeCommands() { global proc mayaHydra_GeomSubsetsPickMode_SetupUI() { mayaHydra_GeomSubsetsPickMode_SetupRuntimeCommands; global string $gMainSelectMenu; // Maya's "Select" menu - addMenuCallback($gMainSelectMenu, "mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback"); + $callbackExists = hasMenuCallback($gMainSelectMenu, "mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback"); + if (!$callbackExists) { + addMenuCallback($gMainSelectMenu, "mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback"); + } } global proc mayaHydra_GeomSubsetsPickMode_TeardownUI() { + print "mayaHydra_GeomSubsetsPickMode_TeardownUI\n"; global string $gMainSelectMenu; // Maya's "Select" menu removeMenuCallback($gMainSelectMenu, "mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback"); - + global string $gMayaHydra_GeomSubsetsPickMode_Divider; + //print $gMayaHydra_GeomSubsetsPickMode_Divider; + //print "\n"; if (`menuItem -q -exists $gMayaHydra_GeomSubsetsPickMode_Divider`) { + print "Deleting "; + print $gMayaHydra_GeomSubsetsPickMode_Divider; + print "\n"; deleteUI -menuItem $gMayaHydra_GeomSubsetsPickMode_Divider; } $gMayaHydra_GeomSubsetsPickMode_Divider = ""; + global string $gMayaHydra_GeomSubsetsPickMode_RadioButtons[]; + for ($radioButton in $gMayaHydra_GeomSubsetsPickMode_RadioButtons) { + if (`menuItem -q -exists $radioButton`) { + print "Deleting "; + print $radioButton; + print "\n"; + deleteUI -menuItem $radioButton; + } + } + clear($gMayaHydra_GeomSubsetsPickMode_RadioButtons); + global string $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; - if (`menuItem -q -exists $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup`) { - deleteUI -menuItem $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; + //print $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; + //print "\n"; + if (`radioMenuItemCollection -q -exists $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup`) { + print "Deleting "; + print $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; + print "\n"; + deleteUI -radioMenuItemCollection $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; } $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup = ""; } @@ -97,15 +128,29 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback() { return; } + global string $gMainSelectMenu; // Maya's "Select" menu + $callbackExists = hasMenuCallback($gMainSelectMenu, "mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback"); + if (!$callbackExists) { + return; + } + // If our custom UI elements name is empty, then they do not exist or have been torn down previously, // so create them. Note that we check that all UI elements have empty names : normally they should // always either all have a name and exist, or all have no name and not exist. global string $gMayaHydra_GeomSubsetsPickMode_Divider; global string $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; + //print $gMayaHydra_GeomSubsetsPickMode_Divider; + //print "\n"; + //print $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; + //print "\n"; if ($gMayaHydra_GeomSubsetsPickMode_Divider == "" && $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup == "") { scriptJob -idleEvent "mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems" -runOnce true; } + //print $gMayaHydra_GeomSubsetsPickMode_Divider; + //print "\n"; + //print $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; + //print "\n"; } global proc mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems() { @@ -115,6 +160,14 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems() { return; } + global string $gMainSelectMenu; // Maya's "Select" menu + $callbackExists = hasMenuCallback($gMainSelectMenu, "mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback"); + if (!$callbackExists) { + return; + } + + print "Creating items\n"; + // Store the current parent menu and change it to the USD selection submenu $prevParent = `setParent -q -menu`; setParent -menu $gMayaUsdSelectModeSubMenu; @@ -123,9 +176,10 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems() { $gMayaHydra_GeomSubsetsPickMode_Divider = `menuItem -divider true -dividerLabel "GeomSubsets (Hydra only)"`; global string $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; - $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup = `radioMenuItemCollection`; - menuItem -radioButton on -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetPrimsAndInstances") mayaHydra_GeomSubsetsPickMode_PrimsAndInstances; - menuItem -radioButton off -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetGeomSubsets") mayaHydra_GeomSubsetsPickMode_GeomSubsets; + $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup = `radioMenuItemCollection -global true`; + global string $gMayaHydra_GeomSubsetsPickMode_RadioButtons[]; + $gMayaHydra_GeomSubsetsPickMode_RadioButtons[0] = `menuItem -radioButton on -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetPrimsAndInstances") mayaHydra_GeomSubsetsPickMode_PrimsAndInstances`; + $gMayaHydra_GeomSubsetsPickMode_RadioButtons[1] = `menuItem -radioButton off -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetGeomSubsets") mayaHydra_GeomSubsetsPickMode_GeomSubsets`; mayaHydra_GeomSubsetsPickModeMenu_UpdateRadioButtons(); From da990fbeb027c05813a976b111d0b9dba0dacb03 Mon Sep 17 00:00:00 2001 From: debloip Date: Tue, 2 Jul 2024 11:54:31 -0400 Subject: [PATCH 27/75] HYDRA-1058 : Remove prints --- scripts/mayaHydra_GeomSubsetsPickMode.mel | 26 +---------------------- 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/scripts/mayaHydra_GeomSubsetsPickMode.mel b/scripts/mayaHydra_GeomSubsetsPickMode.mel index fecb175d39..407b169a39 100644 --- a/scripts/mayaHydra_GeomSubsetsPickMode.mel +++ b/scripts/mayaHydra_GeomSubsetsPickMode.mel @@ -72,17 +72,11 @@ global proc mayaHydra_GeomSubsetsPickMode_SetupUI() { } global proc mayaHydra_GeomSubsetsPickMode_TeardownUI() { - print "mayaHydra_GeomSubsetsPickMode_TeardownUI\n"; global string $gMainSelectMenu; // Maya's "Select" menu removeMenuCallback($gMainSelectMenu, "mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback"); - + global string $gMayaHydra_GeomSubsetsPickMode_Divider; - //print $gMayaHydra_GeomSubsetsPickMode_Divider; - //print "\n"; if (`menuItem -q -exists $gMayaHydra_GeomSubsetsPickMode_Divider`) { - print "Deleting "; - print $gMayaHydra_GeomSubsetsPickMode_Divider; - print "\n"; deleteUI -menuItem $gMayaHydra_GeomSubsetsPickMode_Divider; } $gMayaHydra_GeomSubsetsPickMode_Divider = ""; @@ -90,21 +84,13 @@ global proc mayaHydra_GeomSubsetsPickMode_TeardownUI() { global string $gMayaHydra_GeomSubsetsPickMode_RadioButtons[]; for ($radioButton in $gMayaHydra_GeomSubsetsPickMode_RadioButtons) { if (`menuItem -q -exists $radioButton`) { - print "Deleting "; - print $radioButton; - print "\n"; deleteUI -menuItem $radioButton; } } clear($gMayaHydra_GeomSubsetsPickMode_RadioButtons); global string $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; - //print $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; - //print "\n"; if (`radioMenuItemCollection -q -exists $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup`) { - print "Deleting "; - print $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; - print "\n"; deleteUI -radioMenuItemCollection $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; } $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup = ""; @@ -139,18 +125,10 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback() { // always either all have a name and exist, or all have no name and not exist. global string $gMayaHydra_GeomSubsetsPickMode_Divider; global string $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; - //print $gMayaHydra_GeomSubsetsPickMode_Divider; - //print "\n"; - //print $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; - //print "\n"; if ($gMayaHydra_GeomSubsetsPickMode_Divider == "" && $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup == "") { scriptJob -idleEvent "mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems" -runOnce true; } - //print $gMayaHydra_GeomSubsetsPickMode_Divider; - //print "\n"; - //print $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; - //print "\n"; } global proc mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems() { @@ -166,8 +144,6 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems() { return; } - print "Creating items\n"; - // Store the current parent menu and change it to the USD selection submenu $prevParent = `setParent -q -menu`; setParent -menu $gMayaUsdSelectModeSubMenu; From 193d5ff6e40907846d1b5cc4ef318e577da87f87 Mon Sep 17 00:00:00 2001 From: debloip Date: Tue, 2 Jul 2024 11:58:04 -0400 Subject: [PATCH 28/75] HYDRA-1058 : Extend check for UI creation for consistency --- scripts/mayaHydra_GeomSubsetsPickMode.mel | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/mayaHydra_GeomSubsetsPickMode.mel b/scripts/mayaHydra_GeomSubsetsPickMode.mel index 407b169a39..8a61f14ed7 100644 --- a/scripts/mayaHydra_GeomSubsetsPickMode.mel +++ b/scripts/mayaHydra_GeomSubsetsPickMode.mel @@ -125,8 +125,10 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback() { // always either all have a name and exist, or all have no name and not exist. global string $gMayaHydra_GeomSubsetsPickMode_Divider; global string $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; + global string $gMayaHydra_GeomSubsetsPickMode_RadioButtons[]; if ($gMayaHydra_GeomSubsetsPickMode_Divider == "" - && $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup == "") { + && $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup == "" + && `size($gMayaHydra_GeomSubsetsPickMode_RadioButtons)` == 0) { scriptJob -idleEvent "mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems" -runOnce true; } } From a8dedc2d020cb5a44b3624ef137393c15604d81d Mon Sep 17 00:00:00 2001 From: debloip Date: Tue, 2 Jul 2024 12:03:03 -0400 Subject: [PATCH 29/75] HYDRA-1058 : Add example scene --- .../GeomSubsetWithMat.usda | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 test/testSamples/testGeomSubsetsPicking/GeomSubsetWithMat.usda diff --git a/test/testSamples/testGeomSubsetsPicking/GeomSubsetWithMat.usda b/test/testSamples/testGeomSubsetsPicking/GeomSubsetWithMat.usda new file mode 100644 index 0000000000..a8e648ebda --- /dev/null +++ b/test/testSamples/testGeomSubsetsPicking/GeomSubsetWithMat.usda @@ -0,0 +1,54 @@ +#usda 1.0 + +def Mesh "pSphere1" ( + kind = "component" +) +{ + uniform bool doubleSided = 1 + float3[] extent = [(-1.0000002, -1, -1.0000005), (1, 1, 1.0000001)] + 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, 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, 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, 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, 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, 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, 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, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] + int[] faceVertexIndices = [0, 1, 21, 20, 1, 2, 22, 21, 2, 3, 23, 22, 3, 4, 24, 23, 4, 5, 25, 24, 5, 6, 26, 25, 6, 7, 27, 26, 7, 8, 28, 27, 8, 9, 29, 28, 9, 10, 30, 29, 10, 11, 31, 30, 11, 12, 32, 31, 12, 13, 33, 32, 13, 14, 34, 33, 14, 15, 35, 34, 15, 16, 36, 35, 16, 17, 37, 36, 17, 18, 38, 37, 18, 19, 39, 38, 19, 0, 20, 39, 20, 21, 41, 40, 21, 22, 42, 41, 22, 23, 43, 42, 23, 24, 44, 43, 24, 25, 45, 44, 25, 26, 46, 45, 26, 27, 47, 46, 27, 28, 48, 47, 28, 29, 49, 48, 29, 30, 50, 49, 30, 31, 51, 50, 31, 32, 52, 51, 32, 33, 53, 52, 33, 34, 54, 53, 34, 35, 55, 54, 35, 36, 56, 55, 36, 37, 57, 56, 37, 38, 58, 57, 38, 39, 59, 58, 39, 20, 40, 59, 40, 41, 61, 60, 41, 42, 62, 61, 42, 43, 63, 62, 43, 44, 64, 63, 44, 45, 65, 64, 45, 46, 66, 65, 46, 47, 67, 66, 47, 48, 68, 67, 48, 49, 69, 68, 49, 50, 70, 69, 50, 51, 71, 70, 51, 52, 72, 71, 52, 53, 73, 72, 53, 54, 74, 73, 54, 55, 75, 74, 55, 56, 76, 75, 56, 57, 77, 76, 57, 58, 78, 77, 58, 59, 79, 78, 59, 40, 60, 79, 60, 61, 81, 80, 61, 62, 82, 81, 62, 63, 83, 82, 63, 64, 84, 83, 64, 65, 85, 84, 65, 66, 86, 85, 66, 67, 87, 86, 67, 68, 88, 87, 68, 69, 89, 88, 69, 70, 90, 89, 70, 71, 91, 90, 71, 72, 92, 91, 72, 73, 93, 92, 73, 74, 94, 93, 74, 75, 95, 94, 75, 76, 96, 95, 76, 77, 97, 96, 77, 78, 98, 97, 78, 79, 99, 98, 79, 60, 80, 99, 80, 81, 101, 100, 81, 82, 102, 101, 82, 83, 103, 102, 83, 84, 104, 103, 84, 85, 105, 104, 85, 86, 106, 105, 86, 87, 107, 106, 87, 88, 108, 107, 88, 89, 109, 108, 89, 90, 110, 109, 90, 91, 111, 110, 91, 92, 112, 111, 92, 93, 113, 112, 93, 94, 114, 113, 94, 95, 115, 114, 95, 96, 116, 115, 96, 97, 117, 116, 97, 98, 118, 117, 98, 99, 119, 118, 99, 80, 100, 119, 100, 101, 121, 120, 101, 102, 122, 121, 102, 103, 123, 122, 103, 104, 124, 123, 104, 105, 125, 124, 105, 106, 126, 125, 106, 107, 127, 126, 107, 108, 128, 127, 108, 109, 129, 128, 109, 110, 130, 129, 110, 111, 131, 130, 111, 112, 132, 131, 112, 113, 133, 132, 113, 114, 134, 133, 114, 115, 135, 134, 115, 116, 136, 135, 116, 117, 137, 136, 117, 118, 138, 137, 118, 119, 139, 138, 119, 100, 120, 139, 120, 121, 141, 140, 121, 122, 142, 141, 122, 123, 143, 142, 123, 124, 144, 143, 124, 125, 145, 144, 125, 126, 146, 145, 126, 127, 147, 146, 127, 128, 148, 147, 128, 129, 149, 148, 129, 130, 150, 149, 130, 131, 151, 150, 131, 132, 152, 151, 132, 133, 153, 152, 133, 134, 154, 153, 134, 135, 155, 154, 135, 136, 156, 155, 136, 137, 157, 156, 137, 138, 158, 157, 138, 139, 159, 158, 139, 120, 140, 159, 140, 141, 161, 160, 141, 142, 162, 161, 142, 143, 163, 162, 143, 144, 164, 163, 144, 145, 165, 164, 145, 146, 166, 165, 146, 147, 167, 166, 147, 148, 168, 167, 148, 149, 169, 168, 149, 150, 170, 169, 150, 151, 171, 170, 151, 152, 172, 171, 152, 153, 173, 172, 153, 154, 174, 173, 154, 155, 175, 174, 155, 156, 176, 175, 156, 157, 177, 176, 157, 158, 178, 177, 158, 159, 179, 178, 159, 140, 160, 179, 160, 161, 181, 180, 161, 162, 182, 181, 162, 163, 183, 182, 163, 164, 184, 183, 164, 165, 185, 184, 165, 166, 186, 185, 166, 167, 187, 186, 167, 168, 188, 187, 168, 169, 189, 188, 169, 170, 190, 189, 170, 171, 191, 190, 171, 172, 192, 191, 172, 173, 193, 192, 173, 174, 194, 193, 174, 175, 195, 194, 175, 176, 196, 195, 176, 177, 197, 196, 177, 178, 198, 197, 178, 179, 199, 198, 179, 160, 180, 199, 180, 181, 201, 200, 181, 182, 202, 201, 182, 183, 203, 202, 183, 184, 204, 203, 184, 185, 205, 204, 185, 186, 206, 205, 186, 187, 207, 206, 187, 188, 208, 207, 188, 189, 209, 208, 189, 190, 210, 209, 190, 191, 211, 210, 191, 192, 212, 211, 192, 193, 213, 212, 193, 194, 214, 213, 194, 195, 215, 214, 195, 196, 216, 215, 196, 197, 217, 216, 197, 198, 218, 217, 198, 199, 219, 218, 199, 180, 200, 219, 200, 201, 221, 220, 201, 202, 222, 221, 202, 203, 223, 222, 203, 204, 224, 223, 204, 205, 225, 224, 205, 206, 226, 225, 206, 207, 227, 226, 207, 208, 228, 227, 208, 209, 229, 228, 209, 210, 230, 229, 210, 211, 231, 230, 211, 212, 232, 231, 212, 213, 233, 232, 213, 214, 234, 233, 214, 215, 235, 234, 215, 216, 236, 235, 216, 217, 237, 236, 217, 218, 238, 237, 218, 219, 239, 238, 219, 200, 220, 239, 220, 221, 241, 240, 221, 222, 242, 241, 222, 223, 243, 242, 223, 224, 244, 243, 224, 225, 245, 244, 225, 226, 246, 245, 226, 227, 247, 246, 227, 228, 248, 247, 228, 229, 249, 248, 229, 230, 250, 249, 230, 231, 251, 250, 231, 232, 252, 251, 232, 233, 253, 252, 233, 234, 254, 253, 234, 235, 255, 254, 235, 236, 256, 255, 236, 237, 257, 256, 237, 238, 258, 257, 238, 239, 259, 258, 239, 220, 240, 259, 240, 241, 261, 260, 241, 242, 262, 261, 242, 243, 263, 262, 243, 244, 264, 263, 244, 245, 265, 264, 245, 246, 266, 265, 246, 247, 267, 266, 247, 248, 268, 267, 248, 249, 269, 268, 249, 250, 270, 269, 250, 251, 271, 270, 251, 252, 272, 271, 252, 253, 273, 272, 253, 254, 274, 273, 254, 255, 275, 274, 255, 256, 276, 275, 256, 257, 277, 276, 257, 258, 278, 277, 258, 259, 279, 278, 259, 240, 260, 279, 260, 261, 281, 280, 261, 262, 282, 281, 262, 263, 283, 282, 263, 264, 284, 283, 264, 265, 285, 284, 265, 266, 286, 285, 266, 267, 287, 286, 267, 268, 288, 287, 268, 269, 289, 288, 269, 270, 290, 289, 270, 271, 291, 290, 271, 272, 292, 291, 272, 273, 293, 292, 273, 274, 294, 293, 274, 275, 295, 294, 275, 276, 296, 295, 276, 277, 297, 296, 277, 278, 298, 297, 278, 279, 299, 298, 279, 260, 280, 299, 280, 281, 301, 300, 281, 282, 302, 301, 282, 283, 303, 302, 283, 284, 304, 303, 284, 285, 305, 304, 285, 286, 306, 305, 286, 287, 307, 306, 287, 288, 308, 307, 288, 289, 309, 308, 289, 290, 310, 309, 290, 291, 311, 310, 291, 292, 312, 311, 292, 293, 313, 312, 293, 294, 314, 313, 294, 295, 315, 314, 295, 296, 316, 315, 296, 297, 317, 316, 297, 298, 318, 317, 298, 299, 319, 318, 299, 280, 300, 319, 300, 301, 321, 320, 301, 302, 322, 321, 302, 303, 323, 322, 303, 304, 324, 323, 304, 305, 325, 324, 305, 306, 326, 325, 306, 307, 327, 326, 307, 308, 328, 327, 308, 309, 329, 328, 309, 310, 330, 329, 310, 311, 331, 330, 311, 312, 332, 331, 312, 313, 333, 332, 313, 314, 334, 333, 314, 315, 335, 334, 315, 316, 336, 335, 316, 317, 337, 336, 317, 318, 338, 337, 318, 319, 339, 338, 319, 300, 320, 339, 320, 321, 341, 340, 321, 322, 342, 341, 322, 323, 343, 342, 323, 324, 344, 343, 324, 325, 345, 344, 325, 326, 346, 345, 326, 327, 347, 346, 327, 328, 348, 347, 328, 329, 349, 348, 329, 330, 350, 349, 330, 331, 351, 350, 331, 332, 352, 351, 332, 333, 353, 352, 333, 334, 354, 353, 334, 335, 355, 354, 335, 336, 356, 355, 336, 337, 357, 356, 337, 338, 358, 357, 338, 339, 359, 358, 339, 320, 340, 359, 340, 341, 361, 360, 341, 342, 362, 361, 342, 343, 363, 362, 343, 344, 364, 363, 344, 345, 365, 364, 345, 346, 366, 365, 346, 347, 367, 366, 347, 348, 368, 367, 348, 349, 369, 368, 349, 350, 370, 369, 350, 351, 371, 370, 351, 352, 372, 371, 352, 353, 373, 372, 353, 354, 374, 373, 354, 355, 375, 374, 355, 356, 376, 375, 356, 357, 377, 376, 357, 358, 378, 377, 358, 359, 379, 378, 359, 340, 360, 379, 1, 0, 380, 2, 1, 380, 3, 2, 380, 4, 3, 380, 5, 4, 380, 6, 5, 380, 7, 6, 380, 8, 7, 380, 9, 8, 380, 10, 9, 380, 11, 10, 380, 12, 11, 380, 13, 12, 380, 14, 13, 380, 15, 14, 380, 16, 15, 380, 17, 16, 380, 18, 17, 380, 19, 18, 380, 0, 19, 380, 360, 361, 381, 361, 362, 381, 362, 363, 381, 363, 364, 381, 364, 365, 381, 365, 366, 381, 366, 367, 381, 367, 368, 381, 368, 369, 381, 369, 370, 381, 370, 371, 381, 371, 372, 381, 372, 373, 381, 373, 374, 381, 374, 375, 381, 375, 376, 381, 376, 377, 381, 377, 378, 381, 378, 379, 381, 379, 360, 381] + point3f[] points = [(0.14877813, -0.98768836, -0.048340943), (0.12655823, -0.98768836, -0.09194993), (0.09194993, -0.98768836, -0.12655823), (0.048340935, -0.98768836, -0.14877811), (0, -0.98768836, -0.15643455), (-0.048340935, -0.98768836, -0.1487781), (-0.09194992, -0.98768836, -0.1265582), (-0.12655818, -0.98768836, -0.0919499), (-0.14877807, -0.98768836, -0.048340924), (-0.15643452, -0.98768836, 0), (-0.14877807, -0.98768836, 0.048340924), (-0.12655818, -0.98768836, 0.091949895), (-0.091949895, -0.98768836, 0.12655817), (-0.048340924, -0.98768836, 0.14877805), (-4.6621107e-9, -0.98768836, 0.15643449), (0.04834091, -0.98768836, 0.14877804), (0.09194988, -0.98768836, 0.12655815), (0.12655815, -0.98768836, 0.09194989), (0.14877804, -0.98768836, 0.048340913), (0.15643448, -0.98768836, 0), (0.29389283, -0.95105654, -0.095491566), (0.25000018, -0.95105654, -0.18163574), (0.18163574, -0.95105654, -0.25000015), (0.09549155, -0.95105654, -0.2938928), (0, -0.95105654, -0.30901715), (-0.09549155, -0.95105654, -0.29389277), (-0.18163571, -0.95105654, -0.2500001), (-0.2500001, -0.95105654, -0.1816357), (-0.2938927, -0.95105654, -0.09549153), (-0.30901706, -0.95105654, 0), (-0.2938927, -0.95105654, 0.09549153), (-0.25000006, -0.95105654, 0.18163568), (-0.18163568, -0.95105654, 0.25000006), (-0.09549153, -0.95105654, 0.29389268), (-9.209424e-9, -0.95105654, 0.30901703), (0.0954915, -0.95105654, 0.29389265), (0.18163563, -0.95105654, 0.25000003), (0.25, -0.95105654, 0.18163565), (0.29389265, -0.95105654, 0.095491506), (0.309017, -0.95105654, 0), (0.43177092, -0.8910065, -0.14029087), (0.3672863, -0.8910065, -0.2668491), (0.2668491, -0.8910065, -0.36728626), (0.14029086, -0.8910065, -0.43177086), (0, -0.8910065, -0.45399073), (-0.14029086, -0.8910065, -0.43177083), (-0.26684904, -0.8910065, -0.36728618), (-0.36728615, -0.8910065, -0.266849), (-0.43177077, -0.8910065, -0.14029081), (-0.45399064, -0.8910065, 0), (-0.43177077, -0.8910065, 0.14029081), (-0.36728612, -0.8910065, 0.26684898), (-0.26684898, -0.8910065, 0.36728612), (-0.14029081, -0.8910065, 0.4317707), (-1.3529972e-8, -0.8910065, 0.45399058), (0.14029078, -0.8910065, 0.43177068), (0.26684892, -0.8910065, 0.3672861), (0.36728606, -0.8910065, 0.26684895), (0.43177065, -0.8910065, 0.1402908), (0.45399052, -0.8910065, 0), (0.55901736, -0.809017, -0.18163574), (0.47552857, -0.809017, -0.3454917), (0.3454917, -0.809017, -0.47552854), (0.18163572, -0.809017, -0.5590173), (0, -0.809017, -0.58778554), (-0.18163572, -0.809017, -0.55901724), (-0.34549165, -0.809017, -0.47552842), (-0.4755284, -0.809017, -0.3454916), (-0.5590171, -0.809017, -0.18163566), (-0.58778536, -0.809017, 0), (-0.5590171, -0.809017, 0.18163566), (-0.47552836, -0.809017, 0.34549156), (-0.34549156, -0.809017, 0.47552833), (-0.18163566, -0.809017, 0.55901706), (-1.7517365e-8, -0.809017, 0.5877853), (0.18163562, -0.809017, 0.55901706), (0.3454915, -0.809017, 0.4755283), (0.47552827, -0.809017, 0.34549153), (0.559017, -0.809017, 0.18163563), (0.58778524, -0.809017, 0), (0.67249894, -0.70710677, -0.21850814), (0.5720618, -0.70710677, -0.41562718), (0.41562718, -0.70710677, -0.5720617), (0.21850812, -0.70710677, -0.6724989), (0, -0.70710677, -0.7071071), (-0.21850812, -0.70710677, -0.6724988), (-0.4156271, -0.70710677, -0.5720616), (-0.57206154, -0.70710677, -0.41562706), (-0.6724987, -0.70710677, -0.21850805), (-0.70710695, -0.70710677, 0), (-0.6724987, -0.70710677, 0.21850805), (-0.57206154, -0.70710677, 0.415627), (-0.415627, -0.70710677, 0.5720615), (-0.21850805, -0.70710677, 0.6724986), (-2.1073424e-8, -0.70710677, 0.7071068), (0.21850799, -0.70710677, 0.6724986), (0.4156269, -0.70710677, 0.5720614), (0.5720614, -0.70710677, 0.41562697), (0.6724985, -0.70710677, 0.21850802), (0.70710677, -0.70710677, 0), (0.7694214, -0.58778524, -0.25000015), (0.65450895, -0.58778524, -0.47552854), (0.47552854, -0.58778524, -0.6545089), (0.25000012, -0.58778524, -0.7694213), (0, -0.58778524, -0.80901736), (-0.25000012, -0.58778524, -0.7694212), (-0.47552845, -0.58778524, -0.65450877), (-0.6545087, -0.58778524, -0.4755284), (-0.7694211, -0.58778524, -0.25000006), (-0.8090172, -0.58778524, 0), (-0.7694211, -0.58778524, 0.25000006), (-0.65450865, -0.58778524, 0.47552836), (-0.47552836, -0.58778524, 0.6545086), (-0.25000006, -0.58778524, 0.769421), (-2.4110586e-8, -0.58778524, 0.8090171), (0.24999999, -0.58778524, 0.769421), (0.47552827, -0.58778524, 0.65450853), (0.65450853, -0.58778524, 0.4755283), (0.7694209, -0.58778524, 0.25), (0.809017, -0.58778524, 0), (0.8473981, -0.45399052, -0.27533633), (0.7208399, -0.45399052, -0.5237208), (0.5237208, -0.45399052, -0.72083986), (0.2753363, -0.45399052, -0.847398), (0, -0.45399052, -0.89100695), (-0.2753363, -0.45399052, -0.847398), (-0.5237207, -0.45399052, -0.7208397), (-0.7208396, -0.45399052, -0.5237206), (-0.8473978, -0.45399052, -0.2753362), (-0.89100677, -0.45399052, 0), (-0.8473978, -0.45399052, 0.2753362), (-0.7208396, -0.45399052, 0.5237206), (-0.5237206, -0.45399052, 0.72083956), (-0.2753362, -0.45399052, 0.8473977), (-2.6554064e-8, -0.45399052, 0.89100665), (0.27533615, -0.45399052, 0.8473976), (0.5237205, -0.45399052, 0.7208395), (0.72083944, -0.45399052, 0.52372056), (0.84739757, -0.45399052, 0.27533618), (0.8910065, -0.45399052, 0), (0.9045091, -0.30901697, -0.2938928), (0.7694214, -0.30901697, -0.55901736), (0.55901736, -0.30901697, -0.76942134), (0.29389277, -0.30901697, -0.904509), (0, -0.30901697, -0.951057), (-0.29389277, -0.30901697, -0.90450895), (-0.55901724, -0.30901697, -0.7694212), (-0.76942116, -0.30901697, -0.5590172), (-0.90450877, -0.30901697, -0.2938927), (-0.9510568, -0.30901697, 0), (-0.90450877, -0.30901697, 0.2938927), (-0.7694211, -0.30901697, 0.5590171), (-0.5590171, -0.30901697, 0.76942104), (-0.2938927, -0.30901697, 0.90450865), (-2.8343694e-8, -0.30901697, 0.95105666), (0.29389262, -0.30901697, 0.9045086), (0.559017, -0.30901697, 0.769421), (0.7694209, -0.30901697, 0.55901706), (0.90450853, -0.30901697, 0.29389265), (0.95105654, -0.30901697, 0), (0.93934804, -0.15643437, -0.30521268), (0.7990572, -0.15643437, -0.580549), (0.580549, -0.15643437, -0.7990571), (0.30521265, -0.15643437, -0.9393479), (0, -0.15643437, -0.98768884), (-0.30521265, -0.15643437, -0.93934786), (-0.5805489, -0.15643437, -0.79905695), (-0.7990569, -0.15643437, -0.5805488), (-0.9393477, -0.15643437, -0.30521256), (-0.9876886, -0.15643437, 0), (-0.9393477, -0.15643437, 0.30521256), (-0.7990568, -0.15643437, 0.58054876), (-0.58054876, -0.15643437, 0.79905677), (-0.30521256, -0.15643437, 0.93934757), (-2.9435407e-8, -0.15643437, 0.9876885), (0.30521247, -0.15643437, 0.93934757), (0.58054864, -0.15643437, 0.7990567), (0.79905665, -0.15643437, 0.5805487), (0.9393475, -0.15643437, 0.3052125), (0.98768836, -0.15643437, 0), (0.95105714, 0, -0.30901718), (0.80901754, 0, -0.5877856), (0.5877856, 0, -0.8090175), (0.30901715, 0, -0.951057), (0, 0, -1.0000005), (-0.30901715, 0, -0.95105696), (-0.5877855, 0, -0.8090173), (-0.80901724, 0, -0.5877854), (-0.9510568, 0, -0.30901706), (-1.0000002, 0, 0), (-0.9510568, 0, 0.30901706), (-0.8090172, 0, 0.58778536), (-0.58778536, 0, 0.8090171), (-0.30901706, 0, 0.95105666), (-2.9802322e-8, 0, 1.0000001), (0.30901697, 0, 0.9510566), (0.58778524, 0, 0.80901706), (0.809017, 0, 0.5877853), (0.95105654, 0, 0.309017), (1, 0, 0), (0.93934804, 0.15643437, -0.30521268), (0.7990572, 0.15643437, -0.580549), (0.580549, 0.15643437, -0.7990571), (0.30521265, 0.15643437, -0.9393479), (0, 0.15643437, -0.98768884), (-0.30521265, 0.15643437, -0.93934786), (-0.5805489, 0.15643437, -0.79905695), (-0.7990569, 0.15643437, -0.5805488), (-0.9393477, 0.15643437, -0.30521256), (-0.9876886, 0.15643437, 0), (-0.9393477, 0.15643437, 0.30521256), (-0.7990568, 0.15643437, 0.58054876), (-0.58054876, 0.15643437, 0.79905677), (-0.30521256, 0.15643437, 0.93934757), (-2.9435407e-8, 0.15643437, 0.9876885), (0.30521247, 0.15643437, 0.93934757), (0.58054864, 0.15643437, 0.7990567), (0.79905665, 0.15643437, 0.5805487), (0.9393475, 0.15643437, 0.3052125), (0.98768836, 0.15643437, 0), (0.9045091, 0.30901697, -0.2938928), (0.7694214, 0.30901697, -0.55901736), (0.55901736, 0.30901697, -0.76942134), (0.29389277, 0.30901697, -0.904509), (0, 0.30901697, -0.951057), (-0.29389277, 0.30901697, -0.90450895), (-0.55901724, 0.30901697, -0.7694212), (-0.76942116, 0.30901697, -0.5590172), (-0.90450877, 0.30901697, -0.2938927), (-0.9510568, 0.30901697, 0), (-0.90450877, 0.30901697, 0.2938927), (-0.7694211, 0.30901697, 0.5590171), (-0.5590171, 0.30901697, 0.76942104), (-0.2938927, 0.30901697, 0.90450865), (-2.8343694e-8, 0.30901697, 0.95105666), (0.29389262, 0.30901697, 0.9045086), (0.559017, 0.30901697, 0.769421), (0.7694209, 0.30901697, 0.55901706), (0.90450853, 0.30901697, 0.29389265), (0.95105654, 0.30901697, 0), (0.8473981, 0.45399052, -0.27533633), (0.7208399, 0.45399052, -0.5237208), (0.5237208, 0.45399052, -0.72083986), (0.2753363, 0.45399052, -0.847398), (0, 0.45399052, -0.89100695), (-0.2753363, 0.45399052, -0.847398), (-0.5237207, 0.45399052, -0.7208397), (-0.7208396, 0.45399052, -0.5237206), (-0.8473978, 0.45399052, -0.2753362), (-0.89100677, 0.45399052, 0), (-0.8473978, 0.45399052, 0.2753362), (-0.7208396, 0.45399052, 0.5237206), (-0.5237206, 0.45399052, 0.72083956), (-0.2753362, 0.45399052, 0.8473977), (-2.6554064e-8, 0.45399052, 0.89100665), (0.27533615, 0.45399052, 0.8473976), (0.5237205, 0.45399052, 0.7208395), (0.72083944, 0.45399052, 0.52372056), (0.84739757, 0.45399052, 0.27533618), (0.8910065, 0.45399052, 0), (0.7694214, 0.58778524, -0.25000015), (0.65450895, 0.58778524, -0.47552854), (0.47552854, 0.58778524, -0.6545089), (0.25000012, 0.58778524, -0.7694213), (0, 0.58778524, -0.80901736), (-0.25000012, 0.58778524, -0.7694212), (-0.47552845, 0.58778524, -0.65450877), (-0.6545087, 0.58778524, -0.4755284), (-0.7694211, 0.58778524, -0.25000006), (-0.8090172, 0.58778524, 0), (-0.7694211, 0.58778524, 0.25000006), (-0.65450865, 0.58778524, 0.47552836), (-0.47552836, 0.58778524, 0.6545086), (-0.25000006, 0.58778524, 0.769421), (-2.4110586e-8, 0.58778524, 0.8090171), (0.24999999, 0.58778524, 0.769421), (0.47552827, 0.58778524, 0.65450853), (0.65450853, 0.58778524, 0.4755283), (0.7694209, 0.58778524, 0.25), (0.809017, 0.58778524, 0), (0.67249894, 0.70710677, -0.21850814), (0.5720618, 0.70710677, -0.41562718), (0.41562718, 0.70710677, -0.5720617), (0.21850812, 0.70710677, -0.6724989), (0, 0.70710677, -0.7071071), (-0.21850812, 0.70710677, -0.6724988), (-0.4156271, 0.70710677, -0.5720616), (-0.57206154, 0.70710677, -0.41562706), (-0.6724987, 0.70710677, -0.21850805), (-0.70710695, 0.70710677, 0), (-0.6724987, 0.70710677, 0.21850805), (-0.57206154, 0.70710677, 0.415627), (-0.415627, 0.70710677, 0.5720615), (-0.21850805, 0.70710677, 0.6724986), (-2.1073424e-8, 0.70710677, 0.7071068), (0.21850799, 0.70710677, 0.6724986), (0.4156269, 0.70710677, 0.5720614), (0.5720614, 0.70710677, 0.41562697), (0.6724985, 0.70710677, 0.21850802), (0.70710677, 0.70710677, 0), (0.55901736, 0.809017, -0.18163574), (0.47552857, 0.809017, -0.3454917), (0.3454917, 0.809017, -0.47552854), (0.18163572, 0.809017, -0.5590173), (0, 0.809017, -0.58778554), (-0.18163572, 0.809017, -0.55901724), (-0.34549165, 0.809017, -0.47552842), (-0.4755284, 0.809017, -0.3454916), (-0.5590171, 0.809017, -0.18163566), (-0.58778536, 0.809017, 0), (-0.5590171, 0.809017, 0.18163566), (-0.47552836, 0.809017, 0.34549156), (-0.34549156, 0.809017, 0.47552833), (-0.18163566, 0.809017, 0.55901706), (-1.7517365e-8, 0.809017, 0.5877853), (0.18163562, 0.809017, 0.55901706), (0.3454915, 0.809017, 0.4755283), (0.47552827, 0.809017, 0.34549153), (0.559017, 0.809017, 0.18163563), (0.58778524, 0.809017, 0), (0.43177092, 0.8910065, -0.14029087), (0.3672863, 0.8910065, -0.2668491), (0.2668491, 0.8910065, -0.36728626), (0.14029086, 0.8910065, -0.43177086), (0, 0.8910065, -0.45399073), (-0.14029086, 0.8910065, -0.43177083), (-0.26684904, 0.8910065, -0.36728618), (-0.36728615, 0.8910065, -0.266849), (-0.43177077, 0.8910065, -0.14029081), (-0.45399064, 0.8910065, 0), (-0.43177077, 0.8910065, 0.14029081), (-0.36728612, 0.8910065, 0.26684898), (-0.26684898, 0.8910065, 0.36728612), (-0.14029081, 0.8910065, 0.4317707), (-1.3529972e-8, 0.8910065, 0.45399058), (0.14029078, 0.8910065, 0.43177068), (0.26684892, 0.8910065, 0.3672861), (0.36728606, 0.8910065, 0.26684895), (0.43177065, 0.8910065, 0.1402908), (0.45399052, 0.8910065, 0), (0.29389283, 0.95105654, -0.095491566), (0.25000018, 0.95105654, -0.18163574), (0.18163574, 0.95105654, -0.25000015), (0.09549155, 0.95105654, -0.2938928), (0, 0.95105654, -0.30901715), (-0.09549155, 0.95105654, -0.29389277), (-0.18163571, 0.95105654, -0.2500001), (-0.2500001, 0.95105654, -0.1816357), (-0.2938927, 0.95105654, -0.09549153), (-0.30901706, 0.95105654, 0), (-0.2938927, 0.95105654, 0.09549153), (-0.25000006, 0.95105654, 0.18163568), (-0.18163568, 0.95105654, 0.25000006), (-0.09549153, 0.95105654, 0.29389268), (-9.209424e-9, 0.95105654, 0.30901703), (0.0954915, 0.95105654, 0.29389265), (0.18163563, 0.95105654, 0.25000003), (0.25, 0.95105654, 0.18163565), (0.29389265, 0.95105654, 0.095491506), (0.309017, 0.95105654, 0), (0.14877813, 0.98768836, -0.048340943), (0.12655823, 0.98768836, -0.09194993), (0.09194993, 0.98768836, -0.12655823), (0.048340935, 0.98768836, -0.14877811), (0, 0.98768836, -0.15643455), (-0.048340935, 0.98768836, -0.1487781), (-0.09194992, 0.98768836, -0.1265582), (-0.12655818, 0.98768836, -0.0919499), (-0.14877807, 0.98768836, -0.048340924), (-0.15643452, 0.98768836, 0), (-0.14877807, 0.98768836, 0.048340924), (-0.12655818, 0.98768836, 0.091949895), (-0.091949895, 0.98768836, 0.12655817), (-0.048340924, 0.98768836, 0.14877805), (-4.6621107e-9, 0.98768836, 0.15643449), (0.04834091, 0.98768836, 0.14877804), (0.09194988, 0.98768836, 0.12655815), (0.12655815, 0.98768836, 0.09194989), (0.14877804, 0.98768836, 0.048340913), (0.15643448, 0.98768836, 0), (0, -1, 0), (0, 1, 0)] + color3f[] primvars:displayColor = [(0.13320851, 0.13320851, 0.13320851)] ( + customData = { + dictionary Maya = { + bool generated = 1 + } + } + ) + texCoord2f[] primvars:st = [(0, 0.05), (0.05, 0.05), (0.1, 0.05), (0.15, 0.05), (0.2, 0.05), (0.25, 0.05), (0.3, 0.05), (0.35000002, 0.05), (0.40000004, 0.05), (0.45000005, 0.05), (0.50000006, 0.05), (0.5500001, 0.05), (0.6000001, 0.05), (0.6500001, 0.05), (0.7000001, 0.05), (0.7500001, 0.05), (0.80000013, 0.05), (0.85000014, 0.05), (0.90000015, 0.05), (0.95000017, 0.05), (1.0000001, 0.05), (0, 0.1), (0.05, 0.1), (0.1, 0.1), (0.15, 0.1), (0.2, 0.1), (0.25, 0.1), (0.3, 0.1), (0.35000002, 0.1), (0.40000004, 0.1), (0.45000005, 0.1), (0.50000006, 0.1), (0.5500001, 0.1), (0.6000001, 0.1), (0.6500001, 0.1), (0.7000001, 0.1), (0.7500001, 0.1), (0.80000013, 0.1), (0.85000014, 0.1), (0.90000015, 0.1), (0.95000017, 0.1), (1.0000001, 0.1), (0, 0.15), (0.05, 0.15), (0.1, 0.15), (0.15, 0.15), (0.2, 0.15), (0.25, 0.15), (0.3, 0.15), (0.35000002, 0.15), (0.40000004, 0.15), (0.45000005, 0.15), (0.50000006, 0.15), (0.5500001, 0.15), (0.6000001, 0.15), (0.6500001, 0.15), (0.7000001, 0.15), (0.7500001, 0.15), (0.80000013, 0.15), (0.85000014, 0.15), (0.90000015, 0.15), (0.95000017, 0.15), (1.0000001, 0.15), (0, 0.2), (0.05, 0.2), (0.1, 0.2), (0.15, 0.2), (0.2, 0.2), (0.25, 0.2), (0.3, 0.2), (0.35000002, 0.2), (0.40000004, 0.2), (0.45000005, 0.2), (0.50000006, 0.2), (0.5500001, 0.2), (0.6000001, 0.2), (0.6500001, 0.2), (0.7000001, 0.2), (0.7500001, 0.2), (0.80000013, 0.2), (0.85000014, 0.2), (0.90000015, 0.2), (0.95000017, 0.2), (1.0000001, 0.2), (0, 0.25), (0.05, 0.25), (0.1, 0.25), (0.15, 0.25), (0.2, 0.25), (0.25, 0.25), (0.3, 0.25), (0.35000002, 0.25), (0.40000004, 0.25), (0.45000005, 0.25), (0.50000006, 0.25), (0.5500001, 0.25), (0.6000001, 0.25), (0.6500001, 0.25), (0.7000001, 0.25), (0.7500001, 0.25), (0.80000013, 0.25), (0.85000014, 0.25), (0.90000015, 0.25), (0.95000017, 0.25), (1.0000001, 0.25), (0, 0.3), (0.05, 0.3), (0.1, 0.3), (0.15, 0.3), (0.2, 0.3), (0.25, 0.3), (0.3, 0.3), (0.35000002, 0.3), (0.40000004, 0.3), (0.45000005, 0.3), (0.50000006, 0.3), (0.5500001, 0.3), (0.6000001, 0.3), (0.6500001, 0.3), (0.7000001, 0.3), (0.7500001, 0.3), (0.80000013, 0.3), (0.85000014, 0.3), (0.90000015, 0.3), (0.95000017, 0.3), (1.0000001, 0.3), (0, 0.35000002), (0.05, 0.35000002), (0.1, 0.35000002), (0.15, 0.35000002), (0.2, 0.35000002), (0.25, 0.35000002), (0.3, 0.35000002), (0.35000002, 0.35000002), (0.40000004, 0.35000002), (0.45000005, 0.35000002), (0.50000006, 0.35000002), (0.5500001, 0.35000002), (0.6000001, 0.35000002), (0.6500001, 0.35000002), (0.7000001, 0.35000002), (0.7500001, 0.35000002), (0.80000013, 0.35000002), (0.85000014, 0.35000002), (0.90000015, 0.35000002), (0.95000017, 0.35000002), (1.0000001, 0.35000002), (0, 0.40000004), (0.05, 0.40000004), (0.1, 0.40000004), (0.15, 0.40000004), (0.2, 0.40000004), (0.25, 0.40000004), (0.3, 0.40000004), (0.35000002, 0.40000004), (0.40000004, 0.40000004), (0.45000005, 0.40000004), (0.50000006, 0.40000004), (0.5500001, 0.40000004), (0.6000001, 0.40000004), (0.6500001, 0.40000004), (0.7000001, 0.40000004), (0.7500001, 0.40000004), (0.80000013, 0.40000004), (0.85000014, 0.40000004), (0.90000015, 0.40000004), (0.95000017, 0.40000004), (1.0000001, 0.40000004), (0, 0.45000005), (0.05, 0.45000005), (0.1, 0.45000005), (0.15, 0.45000005), (0.2, 0.45000005), (0.25, 0.45000005), (0.3, 0.45000005), (0.35000002, 0.45000005), (0.40000004, 0.45000005), (0.45000005, 0.45000005), (0.50000006, 0.45000005), (0.5500001, 0.45000005), (0.6000001, 0.45000005), (0.6500001, 0.45000005), (0.7000001, 0.45000005), (0.7500001, 0.45000005), (0.80000013, 0.45000005), (0.85000014, 0.45000005), (0.90000015, 0.45000005), (0.95000017, 0.45000005), (1.0000001, 0.45000005), (0, 0.50000006), (0.05, 0.50000006), (0.1, 0.50000006), (0.15, 0.50000006), (0.2, 0.50000006), (0.25, 0.50000006), (0.3, 0.50000006), (0.35000002, 0.50000006), (0.40000004, 0.50000006), (0.45000005, 0.50000006), (0.50000006, 0.50000006), (0.5500001, 0.50000006), (0.6000001, 0.50000006), (0.6500001, 0.50000006), (0.7000001, 0.50000006), (0.7500001, 0.50000006), (0.80000013, 0.50000006), (0.85000014, 0.50000006), (0.90000015, 0.50000006), (0.95000017, 0.50000006), (1.0000001, 0.50000006), (0, 0.5500001), (0.05, 0.5500001), (0.1, 0.5500001), (0.15, 0.5500001), (0.2, 0.5500001), (0.25, 0.5500001), (0.3, 0.5500001), (0.35000002, 0.5500001), (0.40000004, 0.5500001), (0.45000005, 0.5500001), (0.50000006, 0.5500001), (0.5500001, 0.5500001), (0.6000001, 0.5500001), (0.6500001, 0.5500001), (0.7000001, 0.5500001), (0.7500001, 0.5500001), (0.80000013, 0.5500001), (0.85000014, 0.5500001), (0.90000015, 0.5500001), (0.95000017, 0.5500001), (1.0000001, 0.5500001), (0, 0.6000001), (0.05, 0.6000001), (0.1, 0.6000001), (0.15, 0.6000001), (0.2, 0.6000001), (0.25, 0.6000001), (0.3, 0.6000001), (0.35000002, 0.6000001), (0.40000004, 0.6000001), (0.45000005, 0.6000001), (0.50000006, 0.6000001), (0.5500001, 0.6000001), (0.6000001, 0.6000001), (0.6500001, 0.6000001), (0.7000001, 0.6000001), (0.7500001, 0.6000001), (0.80000013, 0.6000001), (0.85000014, 0.6000001), (0.90000015, 0.6000001), (0.95000017, 0.6000001), (1.0000001, 0.6000001), (0, 0.6500001), (0.05, 0.6500001), (0.1, 0.6500001), (0.15, 0.6500001), (0.2, 0.6500001), (0.25, 0.6500001), (0.3, 0.6500001), (0.35000002, 0.6500001), (0.40000004, 0.6500001), (0.45000005, 0.6500001), (0.50000006, 0.6500001), (0.5500001, 0.6500001), (0.6000001, 0.6500001), (0.6500001, 0.6500001), (0.7000001, 0.6500001), (0.7500001, 0.6500001), (0.80000013, 0.6500001), (0.85000014, 0.6500001), (0.90000015, 0.6500001), (0.95000017, 0.6500001), (1.0000001, 0.6500001), (0, 0.7000001), (0.05, 0.7000001), (0.1, 0.7000001), (0.15, 0.7000001), (0.2, 0.7000001), (0.25, 0.7000001), (0.3, 0.7000001), (0.35000002, 0.7000001), (0.40000004, 0.7000001), (0.45000005, 0.7000001), (0.50000006, 0.7000001), (0.5500001, 0.7000001), (0.6000001, 0.7000001), (0.6500001, 0.7000001), (0.7000001, 0.7000001), (0.7500001, 0.7000001), (0.80000013, 0.7000001), (0.85000014, 0.7000001), (0.90000015, 0.7000001), (0.95000017, 0.7000001), (1.0000001, 0.7000001), (0, 0.7500001), (0.05, 0.7500001), (0.1, 0.7500001), (0.15, 0.7500001), (0.2, 0.7500001), (0.25, 0.7500001), (0.3, 0.7500001), (0.35000002, 0.7500001), (0.40000004, 0.7500001), (0.45000005, 0.7500001), (0.50000006, 0.7500001), (0.5500001, 0.7500001), (0.6000001, 0.7500001), (0.6500001, 0.7500001), (0.7000001, 0.7500001), (0.7500001, 0.7500001), (0.80000013, 0.7500001), (0.85000014, 0.7500001), (0.90000015, 0.7500001), (0.95000017, 0.7500001), (1.0000001, 0.7500001), (0, 0.80000013), (0.05, 0.80000013), (0.1, 0.80000013), (0.15, 0.80000013), (0.2, 0.80000013), (0.25, 0.80000013), (0.3, 0.80000013), (0.35000002, 0.80000013), (0.40000004, 0.80000013), (0.45000005, 0.80000013), (0.50000006, 0.80000013), (0.5500001, 0.80000013), (0.6000001, 0.80000013), (0.6500001, 0.80000013), (0.7000001, 0.80000013), (0.7500001, 0.80000013), (0.80000013, 0.80000013), (0.85000014, 0.80000013), (0.90000015, 0.80000013), (0.95000017, 0.80000013), (1.0000001, 0.80000013), (0, 0.85000014), (0.05, 0.85000014), (0.1, 0.85000014), (0.15, 0.85000014), (0.2, 0.85000014), (0.25, 0.85000014), (0.3, 0.85000014), (0.35000002, 0.85000014), (0.40000004, 0.85000014), (0.45000005, 0.85000014), (0.50000006, 0.85000014), (0.5500001, 0.85000014), (0.6000001, 0.85000014), (0.6500001, 0.85000014), (0.7000001, 0.85000014), (0.7500001, 0.85000014), (0.80000013, 0.85000014), (0.85000014, 0.85000014), (0.90000015, 0.85000014), (0.95000017, 0.85000014), (1.0000001, 0.85000014), (0, 0.90000015), (0.05, 0.90000015), (0.1, 0.90000015), (0.15, 0.90000015), (0.2, 0.90000015), (0.25, 0.90000015), (0.3, 0.90000015), (0.35000002, 0.90000015), (0.40000004, 0.90000015), (0.45000005, 0.90000015), (0.50000006, 0.90000015), (0.5500001, 0.90000015), (0.6000001, 0.90000015), (0.6500001, 0.90000015), (0.7000001, 0.90000015), (0.7500001, 0.90000015), (0.80000013, 0.90000015), (0.85000014, 0.90000015), (0.90000015, 0.90000015), (0.95000017, 0.90000015), (1.0000001, 0.90000015), (0, 0.95000017), (0.05, 0.95000017), (0.1, 0.95000017), (0.15, 0.95000017), (0.2, 0.95000017), (0.25, 0.95000017), (0.3, 0.95000017), (0.35000002, 0.95000017), (0.40000004, 0.95000017), (0.45000005, 0.95000017), (0.50000006, 0.95000017), (0.5500001, 0.95000017), (0.6000001, 0.95000017), (0.6500001, 0.95000017), (0.7000001, 0.95000017), (0.7500001, 0.95000017), (0.80000013, 0.95000017), (0.85000014, 0.95000017), (0.90000015, 0.95000017), (0.95000017, 0.95000017), (1.0000001, 0.95000017), (0.025, 0), (0.075, 0), (0.125, 0), (0.17500001, 0), (0.22500001, 0), (0.275, 0), (0.32500002, 0), (0.375, 0), (0.425, 0), (0.47500002, 0), (0.525, 0), (0.575, 0), (0.625, 0), (0.675, 0), (0.72499996, 0), (0.775, 0), (0.825, 0), (0.875, 0), (0.925, 0), (0.97499996, 0), (0.025, 1), (0.075, 1), (0.125, 1), (0.17500001, 1), (0.22500001, 1), (0.275, 1), (0.32500002, 1), (0.375, 1), (0.425, 1), (0.47500002, 1), (0.525, 1), (0.575, 1), (0.625, 1), (0.675, 1), (0.72499996, 1), (0.775, 1), (0.825, 1), (0.875, 1), (0.925, 1), (0.97499996, 1)] ( + customData = { + dictionary Maya = { + token name = "map1" + } + } + interpolation = "faceVarying" + ) + int[] primvars:st:indices = [0, 1, 22, 21, 1, 2, 23, 22, 2, 3, 24, 23, 3, 4, 25, 24, 4, 5, 26, 25, 5, 6, 27, 26, 6, 7, 28, 27, 7, 8, 29, 28, 8, 9, 30, 29, 9, 10, 31, 30, 10, 11, 32, 31, 11, 12, 33, 32, 12, 13, 34, 33, 13, 14, 35, 34, 14, 15, 36, 35, 15, 16, 37, 36, 16, 17, 38, 37, 17, 18, 39, 38, 18, 19, 40, 39, 19, 20, 41, 40, 21, 22, 43, 42, 22, 23, 44, 43, 23, 24, 45, 44, 24, 25, 46, 45, 25, 26, 47, 46, 26, 27, 48, 47, 27, 28, 49, 48, 28, 29, 50, 49, 29, 30, 51, 50, 30, 31, 52, 51, 31, 32, 53, 52, 32, 33, 54, 53, 33, 34, 55, 54, 34, 35, 56, 55, 35, 36, 57, 56, 36, 37, 58, 57, 37, 38, 59, 58, 38, 39, 60, 59, 39, 40, 61, 60, 40, 41, 62, 61, 42, 43, 64, 63, 43, 44, 65, 64, 44, 45, 66, 65, 45, 46, 67, 66, 46, 47, 68, 67, 47, 48, 69, 68, 48, 49, 70, 69, 49, 50, 71, 70, 50, 51, 72, 71, 51, 52, 73, 72, 52, 53, 74, 73, 53, 54, 75, 74, 54, 55, 76, 75, 55, 56, 77, 76, 56, 57, 78, 77, 57, 58, 79, 78, 58, 59, 80, 79, 59, 60, 81, 80, 60, 61, 82, 81, 61, 62, 83, 82, 63, 64, 85, 84, 64, 65, 86, 85, 65, 66, 87, 86, 66, 67, 88, 87, 67, 68, 89, 88, 68, 69, 90, 89, 69, 70, 91, 90, 70, 71, 92, 91, 71, 72, 93, 92, 72, 73, 94, 93, 73, 74, 95, 94, 74, 75, 96, 95, 75, 76, 97, 96, 76, 77, 98, 97, 77, 78, 99, 98, 78, 79, 100, 99, 79, 80, 101, 100, 80, 81, 102, 101, 81, 82, 103, 102, 82, 83, 104, 103, 84, 85, 106, 105, 85, 86, 107, 106, 86, 87, 108, 107, 87, 88, 109, 108, 88, 89, 110, 109, 89, 90, 111, 110, 90, 91, 112, 111, 91, 92, 113, 112, 92, 93, 114, 113, 93, 94, 115, 114, 94, 95, 116, 115, 95, 96, 117, 116, 96, 97, 118, 117, 97, 98, 119, 118, 98, 99, 120, 119, 99, 100, 121, 120, 100, 101, 122, 121, 101, 102, 123, 122, 102, 103, 124, 123, 103, 104, 125, 124, 105, 106, 127, 126, 106, 107, 128, 127, 107, 108, 129, 128, 108, 109, 130, 129, 109, 110, 131, 130, 110, 111, 132, 131, 111, 112, 133, 132, 112, 113, 134, 133, 113, 114, 135, 134, 114, 115, 136, 135, 115, 116, 137, 136, 116, 117, 138, 137, 117, 118, 139, 138, 118, 119, 140, 139, 119, 120, 141, 140, 120, 121, 142, 141, 121, 122, 143, 142, 122, 123, 144, 143, 123, 124, 145, 144, 124, 125, 146, 145, 126, 127, 148, 147, 127, 128, 149, 148, 128, 129, 150, 149, 129, 130, 151, 150, 130, 131, 152, 151, 131, 132, 153, 152, 132, 133, 154, 153, 133, 134, 155, 154, 134, 135, 156, 155, 135, 136, 157, 156, 136, 137, 158, 157, 137, 138, 159, 158, 138, 139, 160, 159, 139, 140, 161, 160, 140, 141, 162, 161, 141, 142, 163, 162, 142, 143, 164, 163, 143, 144, 165, 164, 144, 145, 166, 165, 145, 146, 167, 166, 147, 148, 169, 168, 148, 149, 170, 169, 149, 150, 171, 170, 150, 151, 172, 171, 151, 152, 173, 172, 152, 153, 174, 173, 153, 154, 175, 174, 154, 155, 176, 175, 155, 156, 177, 176, 156, 157, 178, 177, 157, 158, 179, 178, 158, 159, 180, 179, 159, 160, 181, 180, 160, 161, 182, 181, 161, 162, 183, 182, 162, 163, 184, 183, 163, 164, 185, 184, 164, 165, 186, 185, 165, 166, 187, 186, 166, 167, 188, 187, 168, 169, 190, 189, 169, 170, 191, 190, 170, 171, 192, 191, 171, 172, 193, 192, 172, 173, 194, 193, 173, 174, 195, 194, 174, 175, 196, 195, 175, 176, 197, 196, 176, 177, 198, 197, 177, 178, 199, 198, 178, 179, 200, 199, 179, 180, 201, 200, 180, 181, 202, 201, 181, 182, 203, 202, 182, 183, 204, 203, 183, 184, 205, 204, 184, 185, 206, 205, 185, 186, 207, 206, 186, 187, 208, 207, 187, 188, 209, 208, 189, 190, 211, 210, 190, 191, 212, 211, 191, 192, 213, 212, 192, 193, 214, 213, 193, 194, 215, 214, 194, 195, 216, 215, 195, 196, 217, 216, 196, 197, 218, 217, 197, 198, 219, 218, 198, 199, 220, 219, 199, 200, 221, 220, 200, 201, 222, 221, 201, 202, 223, 222, 202, 203, 224, 223, 203, 204, 225, 224, 204, 205, 226, 225, 205, 206, 227, 226, 206, 207, 228, 227, 207, 208, 229, 228, 208, 209, 230, 229, 210, 211, 232, 231, 211, 212, 233, 232, 212, 213, 234, 233, 213, 214, 235, 234, 214, 215, 236, 235, 215, 216, 237, 236, 216, 217, 238, 237, 217, 218, 239, 238, 218, 219, 240, 239, 219, 220, 241, 240, 220, 221, 242, 241, 221, 222, 243, 242, 222, 223, 244, 243, 223, 224, 245, 244, 224, 225, 246, 245, 225, 226, 247, 246, 226, 227, 248, 247, 227, 228, 249, 248, 228, 229, 250, 249, 229, 230, 251, 250, 231, 232, 253, 252, 232, 233, 254, 253, 233, 234, 255, 254, 234, 235, 256, 255, 235, 236, 257, 256, 236, 237, 258, 257, 237, 238, 259, 258, 238, 239, 260, 259, 239, 240, 261, 260, 240, 241, 262, 261, 241, 242, 263, 262, 242, 243, 264, 263, 243, 244, 265, 264, 244, 245, 266, 265, 245, 246, 267, 266, 246, 247, 268, 267, 247, 248, 269, 268, 248, 249, 270, 269, 249, 250, 271, 270, 250, 251, 272, 271, 252, 253, 274, 273, 253, 254, 275, 274, 254, 255, 276, 275, 255, 256, 277, 276, 256, 257, 278, 277, 257, 258, 279, 278, 258, 259, 280, 279, 259, 260, 281, 280, 260, 261, 282, 281, 261, 262, 283, 282, 262, 263, 284, 283, 263, 264, 285, 284, 264, 265, 286, 285, 265, 266, 287, 286, 266, 267, 288, 287, 267, 268, 289, 288, 268, 269, 290, 289, 269, 270, 291, 290, 270, 271, 292, 291, 271, 272, 293, 292, 273, 274, 295, 294, 274, 275, 296, 295, 275, 276, 297, 296, 276, 277, 298, 297, 277, 278, 299, 298, 278, 279, 300, 299, 279, 280, 301, 300, 280, 281, 302, 301, 281, 282, 303, 302, 282, 283, 304, 303, 283, 284, 305, 304, 284, 285, 306, 305, 285, 286, 307, 306, 286, 287, 308, 307, 287, 288, 309, 308, 288, 289, 310, 309, 289, 290, 311, 310, 290, 291, 312, 311, 291, 292, 313, 312, 292, 293, 314, 313, 294, 295, 316, 315, 295, 296, 317, 316, 296, 297, 318, 317, 297, 298, 319, 318, 298, 299, 320, 319, 299, 300, 321, 320, 300, 301, 322, 321, 301, 302, 323, 322, 302, 303, 324, 323, 303, 304, 325, 324, 304, 305, 326, 325, 305, 306, 327, 326, 306, 307, 328, 327, 307, 308, 329, 328, 308, 309, 330, 329, 309, 310, 331, 330, 310, 311, 332, 331, 311, 312, 333, 332, 312, 313, 334, 333, 313, 314, 335, 334, 315, 316, 337, 336, 316, 317, 338, 337, 317, 318, 339, 338, 318, 319, 340, 339, 319, 320, 341, 340, 320, 321, 342, 341, 321, 322, 343, 342, 322, 323, 344, 343, 323, 324, 345, 344, 324, 325, 346, 345, 325, 326, 347, 346, 326, 327, 348, 347, 327, 328, 349, 348, 328, 329, 350, 349, 329, 330, 351, 350, 330, 331, 352, 351, 331, 332, 353, 352, 332, 333, 354, 353, 333, 334, 355, 354, 334, 335, 356, 355, 336, 337, 358, 357, 337, 338, 359, 358, 338, 339, 360, 359, 339, 340, 361, 360, 340, 341, 362, 361, 341, 342, 363, 362, 342, 343, 364, 363, 343, 344, 365, 364, 344, 345, 366, 365, 345, 346, 367, 366, 346, 347, 368, 367, 347, 348, 369, 368, 348, 349, 370, 369, 349, 350, 371, 370, 350, 351, 372, 371, 351, 352, 373, 372, 352, 353, 374, 373, 353, 354, 375, 374, 354, 355, 376, 375, 355, 356, 377, 376, 357, 358, 379, 378, 358, 359, 380, 379, 359, 360, 381, 380, 360, 361, 382, 381, 361, 362, 383, 382, 362, 363, 384, 383, 363, 364, 385, 384, 364, 365, 386, 385, 365, 366, 387, 386, 366, 367, 388, 387, 367, 368, 389, 388, 368, 369, 390, 389, 369, 370, 391, 390, 370, 371, 392, 391, 371, 372, 393, 392, 372, 373, 394, 393, 373, 374, 395, 394, 374, 375, 396, 395, 375, 376, 397, 396, 376, 377, 398, 397, 1, 0, 399, 2, 1, 400, 3, 2, 401, 4, 3, 402, 5, 4, 403, 6, 5, 404, 7, 6, 405, 8, 7, 406, 9, 8, 407, 10, 9, 408, 11, 10, 409, 12, 11, 410, 13, 12, 411, 14, 13, 412, 15, 14, 413, 16, 15, 414, 17, 16, 415, 18, 17, 416, 19, 18, 417, 20, 19, 418, 378, 379, 419, 379, 380, 420, 380, 381, 421, 381, 382, 422, 382, 383, 423, 383, 384, 424, 384, 385, 425, 385, 386, 426, 386, 387, 427, 387, 388, 428, 388, 389, 429, 389, 390, 430, 390, 391, 431, 391, 392, 432, 392, 393, 433, 393, 394, 434, 394, 395, 435, 395, 396, 436, 396, 397, 437, 397, 398, 438] + token visibility = "inherited" + + def GeomSubset "unnamedTag" ( + prepend apiSchemas = ["MaterialBindingAPI"] + ) + { + uniform token elementType = "face" + uniform token familyName = "materialBind" + int[] indices = [103, 104, 105, 106, 107, 108, 109, 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, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239] + rel material:binding = + } +} + +def Scope "mtl" +{ + def Material "UsdPreviewSurface1" + { + token outputs:surface.connect = + + def Shader "UsdPreviewSurface1" + { + uniform token info:id = "UsdPreviewSurface" + token outputs:surface + } + } +} + From 02e3337329fa8f1178555083bca7d9b6e69fd3d7 Mon Sep 17 00:00:00 2001 From: debloip Date: Tue, 2 Jul 2024 12:35:34 -0400 Subject: [PATCH 30/75] HYDRA-1058 : Fix GeomSubsets pick resolution for Xform parent --- lib/mayaHydra/mayaPlugin/renderOverride.cpp | 2 +- .../GeomSubsetWithMat.usda | 74 +++++++++++-------- 2 files changed, 44 insertions(+), 32 deletions(-) diff --git a/lib/mayaHydra/mayaPlugin/renderOverride.cpp b/lib/mayaHydra/mayaPlugin/renderOverride.cpp index d177dd530c..bcbe8c8332 100644 --- a/lib/mayaHydra/mayaPlugin/renderOverride.cpp +++ b/lib/mayaHydra/mayaPlugin/renderOverride.cpp @@ -491,7 +491,7 @@ class UsdPickHandler : public MtohRenderOverride::PickHandlerBase { auto modelPathDataSource = HdTypedSampledDataSource::Cast( HdContainerDataSource::Get(childPrim.dataSource, HdDataSourceLocator(TfToken("model"), TfToken("modelPath"))) ); - if (!modelPathDataSource || modelPathDataSource->GetTypedValue(0) != basePrimPath) { + if (modelPathDataSource && modelPathDataSource->GetTypedValue(0) != basePrimPath) { continue; } diff --git a/test/testSamples/testGeomSubsetsPicking/GeomSubsetWithMat.usda b/test/testSamples/testGeomSubsetsPicking/GeomSubsetWithMat.usda index a8e648ebda..43a9b3c439 100644 --- a/test/testSamples/testGeomSubsetsPicking/GeomSubsetWithMat.usda +++ b/test/testSamples/testGeomSubsetsPicking/GeomSubsetWithMat.usda @@ -1,43 +1,55 @@ #usda 1.0 -def Mesh "pSphere1" ( - kind = "component" -) +def Xform "MeshXform" { - uniform bool doubleSided = 1 - float3[] extent = [(-1.0000002, -1, -1.0000005), (1, 1, 1.0000001)] - 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, 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, 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, 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, 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, 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, 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, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] - int[] faceVertexIndices = [0, 1, 21, 20, 1, 2, 22, 21, 2, 3, 23, 22, 3, 4, 24, 23, 4, 5, 25, 24, 5, 6, 26, 25, 6, 7, 27, 26, 7, 8, 28, 27, 8, 9, 29, 28, 9, 10, 30, 29, 10, 11, 31, 30, 11, 12, 32, 31, 12, 13, 33, 32, 13, 14, 34, 33, 14, 15, 35, 34, 15, 16, 36, 35, 16, 17, 37, 36, 17, 18, 38, 37, 18, 19, 39, 38, 19, 0, 20, 39, 20, 21, 41, 40, 21, 22, 42, 41, 22, 23, 43, 42, 23, 24, 44, 43, 24, 25, 45, 44, 25, 26, 46, 45, 26, 27, 47, 46, 27, 28, 48, 47, 28, 29, 49, 48, 29, 30, 50, 49, 30, 31, 51, 50, 31, 32, 52, 51, 32, 33, 53, 52, 33, 34, 54, 53, 34, 35, 55, 54, 35, 36, 56, 55, 36, 37, 57, 56, 37, 38, 58, 57, 38, 39, 59, 58, 39, 20, 40, 59, 40, 41, 61, 60, 41, 42, 62, 61, 42, 43, 63, 62, 43, 44, 64, 63, 44, 45, 65, 64, 45, 46, 66, 65, 46, 47, 67, 66, 47, 48, 68, 67, 48, 49, 69, 68, 49, 50, 70, 69, 50, 51, 71, 70, 51, 52, 72, 71, 52, 53, 73, 72, 53, 54, 74, 73, 54, 55, 75, 74, 55, 56, 76, 75, 56, 57, 77, 76, 57, 58, 78, 77, 58, 59, 79, 78, 59, 40, 60, 79, 60, 61, 81, 80, 61, 62, 82, 81, 62, 63, 83, 82, 63, 64, 84, 83, 64, 65, 85, 84, 65, 66, 86, 85, 66, 67, 87, 86, 67, 68, 88, 87, 68, 69, 89, 88, 69, 70, 90, 89, 70, 71, 91, 90, 71, 72, 92, 91, 72, 73, 93, 92, 73, 74, 94, 93, 74, 75, 95, 94, 75, 76, 96, 95, 76, 77, 97, 96, 77, 78, 98, 97, 78, 79, 99, 98, 79, 60, 80, 99, 80, 81, 101, 100, 81, 82, 102, 101, 82, 83, 103, 102, 83, 84, 104, 103, 84, 85, 105, 104, 85, 86, 106, 105, 86, 87, 107, 106, 87, 88, 108, 107, 88, 89, 109, 108, 89, 90, 110, 109, 90, 91, 111, 110, 91, 92, 112, 111, 92, 93, 113, 112, 93, 94, 114, 113, 94, 95, 115, 114, 95, 96, 116, 115, 96, 97, 117, 116, 97, 98, 118, 117, 98, 99, 119, 118, 99, 80, 100, 119, 100, 101, 121, 120, 101, 102, 122, 121, 102, 103, 123, 122, 103, 104, 124, 123, 104, 105, 125, 124, 105, 106, 126, 125, 106, 107, 127, 126, 107, 108, 128, 127, 108, 109, 129, 128, 109, 110, 130, 129, 110, 111, 131, 130, 111, 112, 132, 131, 112, 113, 133, 132, 113, 114, 134, 133, 114, 115, 135, 134, 115, 116, 136, 135, 116, 117, 137, 136, 117, 118, 138, 137, 118, 119, 139, 138, 119, 100, 120, 139, 120, 121, 141, 140, 121, 122, 142, 141, 122, 123, 143, 142, 123, 124, 144, 143, 124, 125, 145, 144, 125, 126, 146, 145, 126, 127, 147, 146, 127, 128, 148, 147, 128, 129, 149, 148, 129, 130, 150, 149, 130, 131, 151, 150, 131, 132, 152, 151, 132, 133, 153, 152, 133, 134, 154, 153, 134, 135, 155, 154, 135, 136, 156, 155, 136, 137, 157, 156, 137, 138, 158, 157, 138, 139, 159, 158, 139, 120, 140, 159, 140, 141, 161, 160, 141, 142, 162, 161, 142, 143, 163, 162, 143, 144, 164, 163, 144, 145, 165, 164, 145, 146, 166, 165, 146, 147, 167, 166, 147, 148, 168, 167, 148, 149, 169, 168, 149, 150, 170, 169, 150, 151, 171, 170, 151, 152, 172, 171, 152, 153, 173, 172, 153, 154, 174, 173, 154, 155, 175, 174, 155, 156, 176, 175, 156, 157, 177, 176, 157, 158, 178, 177, 158, 159, 179, 178, 159, 140, 160, 179, 160, 161, 181, 180, 161, 162, 182, 181, 162, 163, 183, 182, 163, 164, 184, 183, 164, 165, 185, 184, 165, 166, 186, 185, 166, 167, 187, 186, 167, 168, 188, 187, 168, 169, 189, 188, 169, 170, 190, 189, 170, 171, 191, 190, 171, 172, 192, 191, 172, 173, 193, 192, 173, 174, 194, 193, 174, 175, 195, 194, 175, 176, 196, 195, 176, 177, 197, 196, 177, 178, 198, 197, 178, 179, 199, 198, 179, 160, 180, 199, 180, 181, 201, 200, 181, 182, 202, 201, 182, 183, 203, 202, 183, 184, 204, 203, 184, 185, 205, 204, 185, 186, 206, 205, 186, 187, 207, 206, 187, 188, 208, 207, 188, 189, 209, 208, 189, 190, 210, 209, 190, 191, 211, 210, 191, 192, 212, 211, 192, 193, 213, 212, 193, 194, 214, 213, 194, 195, 215, 214, 195, 196, 216, 215, 196, 197, 217, 216, 197, 198, 218, 217, 198, 199, 219, 218, 199, 180, 200, 219, 200, 201, 221, 220, 201, 202, 222, 221, 202, 203, 223, 222, 203, 204, 224, 223, 204, 205, 225, 224, 205, 206, 226, 225, 206, 207, 227, 226, 207, 208, 228, 227, 208, 209, 229, 228, 209, 210, 230, 229, 210, 211, 231, 230, 211, 212, 232, 231, 212, 213, 233, 232, 213, 214, 234, 233, 214, 215, 235, 234, 215, 216, 236, 235, 216, 217, 237, 236, 217, 218, 238, 237, 218, 219, 239, 238, 219, 200, 220, 239, 220, 221, 241, 240, 221, 222, 242, 241, 222, 223, 243, 242, 223, 224, 244, 243, 224, 225, 245, 244, 225, 226, 246, 245, 226, 227, 247, 246, 227, 228, 248, 247, 228, 229, 249, 248, 229, 230, 250, 249, 230, 231, 251, 250, 231, 232, 252, 251, 232, 233, 253, 252, 233, 234, 254, 253, 234, 235, 255, 254, 235, 236, 256, 255, 236, 237, 257, 256, 237, 238, 258, 257, 238, 239, 259, 258, 239, 220, 240, 259, 240, 241, 261, 260, 241, 242, 262, 261, 242, 243, 263, 262, 243, 244, 264, 263, 244, 245, 265, 264, 245, 246, 266, 265, 246, 247, 267, 266, 247, 248, 268, 267, 248, 249, 269, 268, 249, 250, 270, 269, 250, 251, 271, 270, 251, 252, 272, 271, 252, 253, 273, 272, 253, 254, 274, 273, 254, 255, 275, 274, 255, 256, 276, 275, 256, 257, 277, 276, 257, 258, 278, 277, 258, 259, 279, 278, 259, 240, 260, 279, 260, 261, 281, 280, 261, 262, 282, 281, 262, 263, 283, 282, 263, 264, 284, 283, 264, 265, 285, 284, 265, 266, 286, 285, 266, 267, 287, 286, 267, 268, 288, 287, 268, 269, 289, 288, 269, 270, 290, 289, 270, 271, 291, 290, 271, 272, 292, 291, 272, 273, 293, 292, 273, 274, 294, 293, 274, 275, 295, 294, 275, 276, 296, 295, 276, 277, 297, 296, 277, 278, 298, 297, 278, 279, 299, 298, 279, 260, 280, 299, 280, 281, 301, 300, 281, 282, 302, 301, 282, 283, 303, 302, 283, 284, 304, 303, 284, 285, 305, 304, 285, 286, 306, 305, 286, 287, 307, 306, 287, 288, 308, 307, 288, 289, 309, 308, 289, 290, 310, 309, 290, 291, 311, 310, 291, 292, 312, 311, 292, 293, 313, 312, 293, 294, 314, 313, 294, 295, 315, 314, 295, 296, 316, 315, 296, 297, 317, 316, 297, 298, 318, 317, 298, 299, 319, 318, 299, 280, 300, 319, 300, 301, 321, 320, 301, 302, 322, 321, 302, 303, 323, 322, 303, 304, 324, 323, 304, 305, 325, 324, 305, 306, 326, 325, 306, 307, 327, 326, 307, 308, 328, 327, 308, 309, 329, 328, 309, 310, 330, 329, 310, 311, 331, 330, 311, 312, 332, 331, 312, 313, 333, 332, 313, 314, 334, 333, 314, 315, 335, 334, 315, 316, 336, 335, 316, 317, 337, 336, 317, 318, 338, 337, 318, 319, 339, 338, 319, 300, 320, 339, 320, 321, 341, 340, 321, 322, 342, 341, 322, 323, 343, 342, 323, 324, 344, 343, 324, 325, 345, 344, 325, 326, 346, 345, 326, 327, 347, 346, 327, 328, 348, 347, 328, 329, 349, 348, 329, 330, 350, 349, 330, 331, 351, 350, 331, 332, 352, 351, 332, 333, 353, 352, 333, 334, 354, 353, 334, 335, 355, 354, 335, 336, 356, 355, 336, 337, 357, 356, 337, 338, 358, 357, 338, 339, 359, 358, 339, 320, 340, 359, 340, 341, 361, 360, 341, 342, 362, 361, 342, 343, 363, 362, 343, 344, 364, 363, 344, 345, 365, 364, 345, 346, 366, 365, 346, 347, 367, 366, 347, 348, 368, 367, 348, 349, 369, 368, 349, 350, 370, 369, 350, 351, 371, 370, 351, 352, 372, 371, 352, 353, 373, 372, 353, 354, 374, 373, 354, 355, 375, 374, 355, 356, 376, 375, 356, 357, 377, 376, 357, 358, 378, 377, 358, 359, 379, 378, 359, 340, 360, 379, 1, 0, 380, 2, 1, 380, 3, 2, 380, 4, 3, 380, 5, 4, 380, 6, 5, 380, 7, 6, 380, 8, 7, 380, 9, 8, 380, 10, 9, 380, 11, 10, 380, 12, 11, 380, 13, 12, 380, 14, 13, 380, 15, 14, 380, 16, 15, 380, 17, 16, 380, 18, 17, 380, 19, 18, 380, 0, 19, 380, 360, 361, 381, 361, 362, 381, 362, 363, 381, 363, 364, 381, 364, 365, 381, 365, 366, 381, 366, 367, 381, 367, 368, 381, 368, 369, 381, 369, 370, 381, 370, 371, 381, 371, 372, 381, 372, 373, 381, 373, 374, 381, 374, 375, 381, 375, 376, 381, 376, 377, 381, 377, 378, 381, 378, 379, 381, 379, 360, 381] - point3f[] points = [(0.14877813, -0.98768836, -0.048340943), (0.12655823, -0.98768836, -0.09194993), (0.09194993, -0.98768836, -0.12655823), (0.048340935, -0.98768836, -0.14877811), (0, -0.98768836, -0.15643455), (-0.048340935, -0.98768836, -0.1487781), (-0.09194992, -0.98768836, -0.1265582), (-0.12655818, -0.98768836, -0.0919499), (-0.14877807, -0.98768836, -0.048340924), (-0.15643452, -0.98768836, 0), (-0.14877807, -0.98768836, 0.048340924), (-0.12655818, -0.98768836, 0.091949895), (-0.091949895, -0.98768836, 0.12655817), (-0.048340924, -0.98768836, 0.14877805), (-4.6621107e-9, -0.98768836, 0.15643449), (0.04834091, -0.98768836, 0.14877804), (0.09194988, -0.98768836, 0.12655815), (0.12655815, -0.98768836, 0.09194989), (0.14877804, -0.98768836, 0.048340913), (0.15643448, -0.98768836, 0), (0.29389283, -0.95105654, -0.095491566), (0.25000018, -0.95105654, -0.18163574), (0.18163574, -0.95105654, -0.25000015), (0.09549155, -0.95105654, -0.2938928), (0, -0.95105654, -0.30901715), (-0.09549155, -0.95105654, -0.29389277), (-0.18163571, -0.95105654, -0.2500001), (-0.2500001, -0.95105654, -0.1816357), (-0.2938927, -0.95105654, -0.09549153), (-0.30901706, -0.95105654, 0), (-0.2938927, -0.95105654, 0.09549153), (-0.25000006, -0.95105654, 0.18163568), (-0.18163568, -0.95105654, 0.25000006), (-0.09549153, -0.95105654, 0.29389268), (-9.209424e-9, -0.95105654, 0.30901703), (0.0954915, -0.95105654, 0.29389265), (0.18163563, -0.95105654, 0.25000003), (0.25, -0.95105654, 0.18163565), (0.29389265, -0.95105654, 0.095491506), (0.309017, -0.95105654, 0), (0.43177092, -0.8910065, -0.14029087), (0.3672863, -0.8910065, -0.2668491), (0.2668491, -0.8910065, -0.36728626), (0.14029086, -0.8910065, -0.43177086), (0, -0.8910065, -0.45399073), (-0.14029086, -0.8910065, -0.43177083), (-0.26684904, -0.8910065, -0.36728618), (-0.36728615, -0.8910065, -0.266849), (-0.43177077, -0.8910065, -0.14029081), (-0.45399064, -0.8910065, 0), (-0.43177077, -0.8910065, 0.14029081), (-0.36728612, -0.8910065, 0.26684898), (-0.26684898, -0.8910065, 0.36728612), (-0.14029081, -0.8910065, 0.4317707), (-1.3529972e-8, -0.8910065, 0.45399058), (0.14029078, -0.8910065, 0.43177068), (0.26684892, -0.8910065, 0.3672861), (0.36728606, -0.8910065, 0.26684895), (0.43177065, -0.8910065, 0.1402908), (0.45399052, -0.8910065, 0), (0.55901736, -0.809017, -0.18163574), (0.47552857, -0.809017, -0.3454917), (0.3454917, -0.809017, -0.47552854), (0.18163572, -0.809017, -0.5590173), (0, -0.809017, -0.58778554), (-0.18163572, -0.809017, -0.55901724), (-0.34549165, -0.809017, -0.47552842), (-0.4755284, -0.809017, -0.3454916), (-0.5590171, -0.809017, -0.18163566), (-0.58778536, -0.809017, 0), (-0.5590171, -0.809017, 0.18163566), (-0.47552836, -0.809017, 0.34549156), (-0.34549156, -0.809017, 0.47552833), (-0.18163566, -0.809017, 0.55901706), (-1.7517365e-8, -0.809017, 0.5877853), (0.18163562, -0.809017, 0.55901706), (0.3454915, -0.809017, 0.4755283), (0.47552827, -0.809017, 0.34549153), (0.559017, -0.809017, 0.18163563), (0.58778524, -0.809017, 0), (0.67249894, -0.70710677, -0.21850814), (0.5720618, -0.70710677, -0.41562718), (0.41562718, -0.70710677, -0.5720617), (0.21850812, -0.70710677, -0.6724989), (0, -0.70710677, -0.7071071), (-0.21850812, -0.70710677, -0.6724988), (-0.4156271, -0.70710677, -0.5720616), (-0.57206154, -0.70710677, -0.41562706), (-0.6724987, -0.70710677, -0.21850805), (-0.70710695, -0.70710677, 0), (-0.6724987, -0.70710677, 0.21850805), (-0.57206154, -0.70710677, 0.415627), (-0.415627, -0.70710677, 0.5720615), (-0.21850805, -0.70710677, 0.6724986), (-2.1073424e-8, -0.70710677, 0.7071068), (0.21850799, -0.70710677, 0.6724986), (0.4156269, -0.70710677, 0.5720614), (0.5720614, -0.70710677, 0.41562697), (0.6724985, -0.70710677, 0.21850802), (0.70710677, -0.70710677, 0), (0.7694214, -0.58778524, -0.25000015), (0.65450895, -0.58778524, -0.47552854), (0.47552854, -0.58778524, -0.6545089), (0.25000012, -0.58778524, -0.7694213), (0, -0.58778524, -0.80901736), (-0.25000012, -0.58778524, -0.7694212), (-0.47552845, -0.58778524, -0.65450877), (-0.6545087, -0.58778524, -0.4755284), (-0.7694211, -0.58778524, -0.25000006), (-0.8090172, -0.58778524, 0), (-0.7694211, -0.58778524, 0.25000006), (-0.65450865, -0.58778524, 0.47552836), (-0.47552836, -0.58778524, 0.6545086), (-0.25000006, -0.58778524, 0.769421), (-2.4110586e-8, -0.58778524, 0.8090171), (0.24999999, -0.58778524, 0.769421), (0.47552827, -0.58778524, 0.65450853), (0.65450853, -0.58778524, 0.4755283), (0.7694209, -0.58778524, 0.25), (0.809017, -0.58778524, 0), (0.8473981, -0.45399052, -0.27533633), (0.7208399, -0.45399052, -0.5237208), (0.5237208, -0.45399052, -0.72083986), (0.2753363, -0.45399052, -0.847398), (0, -0.45399052, -0.89100695), (-0.2753363, -0.45399052, -0.847398), (-0.5237207, -0.45399052, -0.7208397), (-0.7208396, -0.45399052, -0.5237206), (-0.8473978, -0.45399052, -0.2753362), (-0.89100677, -0.45399052, 0), (-0.8473978, -0.45399052, 0.2753362), (-0.7208396, -0.45399052, 0.5237206), (-0.5237206, -0.45399052, 0.72083956), (-0.2753362, -0.45399052, 0.8473977), (-2.6554064e-8, -0.45399052, 0.89100665), (0.27533615, -0.45399052, 0.8473976), (0.5237205, -0.45399052, 0.7208395), (0.72083944, -0.45399052, 0.52372056), (0.84739757, -0.45399052, 0.27533618), (0.8910065, -0.45399052, 0), (0.9045091, -0.30901697, -0.2938928), (0.7694214, -0.30901697, -0.55901736), (0.55901736, -0.30901697, -0.76942134), (0.29389277, -0.30901697, -0.904509), (0, -0.30901697, -0.951057), (-0.29389277, -0.30901697, -0.90450895), (-0.55901724, -0.30901697, -0.7694212), (-0.76942116, -0.30901697, -0.5590172), (-0.90450877, -0.30901697, -0.2938927), (-0.9510568, -0.30901697, 0), (-0.90450877, -0.30901697, 0.2938927), (-0.7694211, -0.30901697, 0.5590171), (-0.5590171, -0.30901697, 0.76942104), (-0.2938927, -0.30901697, 0.90450865), (-2.8343694e-8, -0.30901697, 0.95105666), (0.29389262, -0.30901697, 0.9045086), (0.559017, -0.30901697, 0.769421), (0.7694209, -0.30901697, 0.55901706), (0.90450853, -0.30901697, 0.29389265), (0.95105654, -0.30901697, 0), (0.93934804, -0.15643437, -0.30521268), (0.7990572, -0.15643437, -0.580549), (0.580549, -0.15643437, -0.7990571), (0.30521265, -0.15643437, -0.9393479), (0, -0.15643437, -0.98768884), (-0.30521265, -0.15643437, -0.93934786), (-0.5805489, -0.15643437, -0.79905695), (-0.7990569, -0.15643437, -0.5805488), (-0.9393477, -0.15643437, -0.30521256), (-0.9876886, -0.15643437, 0), (-0.9393477, -0.15643437, 0.30521256), (-0.7990568, -0.15643437, 0.58054876), (-0.58054876, -0.15643437, 0.79905677), (-0.30521256, -0.15643437, 0.93934757), (-2.9435407e-8, -0.15643437, 0.9876885), (0.30521247, -0.15643437, 0.93934757), (0.58054864, -0.15643437, 0.7990567), (0.79905665, -0.15643437, 0.5805487), (0.9393475, -0.15643437, 0.3052125), (0.98768836, -0.15643437, 0), (0.95105714, 0, -0.30901718), (0.80901754, 0, -0.5877856), (0.5877856, 0, -0.8090175), (0.30901715, 0, -0.951057), (0, 0, -1.0000005), (-0.30901715, 0, -0.95105696), (-0.5877855, 0, -0.8090173), (-0.80901724, 0, -0.5877854), (-0.9510568, 0, -0.30901706), (-1.0000002, 0, 0), (-0.9510568, 0, 0.30901706), (-0.8090172, 0, 0.58778536), (-0.58778536, 0, 0.8090171), (-0.30901706, 0, 0.95105666), (-2.9802322e-8, 0, 1.0000001), (0.30901697, 0, 0.9510566), (0.58778524, 0, 0.80901706), (0.809017, 0, 0.5877853), (0.95105654, 0, 0.309017), (1, 0, 0), (0.93934804, 0.15643437, -0.30521268), (0.7990572, 0.15643437, -0.580549), (0.580549, 0.15643437, -0.7990571), (0.30521265, 0.15643437, -0.9393479), (0, 0.15643437, -0.98768884), (-0.30521265, 0.15643437, -0.93934786), (-0.5805489, 0.15643437, -0.79905695), (-0.7990569, 0.15643437, -0.5805488), (-0.9393477, 0.15643437, -0.30521256), (-0.9876886, 0.15643437, 0), (-0.9393477, 0.15643437, 0.30521256), (-0.7990568, 0.15643437, 0.58054876), (-0.58054876, 0.15643437, 0.79905677), (-0.30521256, 0.15643437, 0.93934757), (-2.9435407e-8, 0.15643437, 0.9876885), (0.30521247, 0.15643437, 0.93934757), (0.58054864, 0.15643437, 0.7990567), (0.79905665, 0.15643437, 0.5805487), (0.9393475, 0.15643437, 0.3052125), (0.98768836, 0.15643437, 0), (0.9045091, 0.30901697, -0.2938928), (0.7694214, 0.30901697, -0.55901736), (0.55901736, 0.30901697, -0.76942134), (0.29389277, 0.30901697, -0.904509), (0, 0.30901697, -0.951057), (-0.29389277, 0.30901697, -0.90450895), (-0.55901724, 0.30901697, -0.7694212), (-0.76942116, 0.30901697, -0.5590172), (-0.90450877, 0.30901697, -0.2938927), (-0.9510568, 0.30901697, 0), (-0.90450877, 0.30901697, 0.2938927), (-0.7694211, 0.30901697, 0.5590171), (-0.5590171, 0.30901697, 0.76942104), (-0.2938927, 0.30901697, 0.90450865), (-2.8343694e-8, 0.30901697, 0.95105666), (0.29389262, 0.30901697, 0.9045086), (0.559017, 0.30901697, 0.769421), (0.7694209, 0.30901697, 0.55901706), (0.90450853, 0.30901697, 0.29389265), (0.95105654, 0.30901697, 0), (0.8473981, 0.45399052, -0.27533633), (0.7208399, 0.45399052, -0.5237208), (0.5237208, 0.45399052, -0.72083986), (0.2753363, 0.45399052, -0.847398), (0, 0.45399052, -0.89100695), (-0.2753363, 0.45399052, -0.847398), (-0.5237207, 0.45399052, -0.7208397), (-0.7208396, 0.45399052, -0.5237206), (-0.8473978, 0.45399052, -0.2753362), (-0.89100677, 0.45399052, 0), (-0.8473978, 0.45399052, 0.2753362), (-0.7208396, 0.45399052, 0.5237206), (-0.5237206, 0.45399052, 0.72083956), (-0.2753362, 0.45399052, 0.8473977), (-2.6554064e-8, 0.45399052, 0.89100665), (0.27533615, 0.45399052, 0.8473976), (0.5237205, 0.45399052, 0.7208395), (0.72083944, 0.45399052, 0.52372056), (0.84739757, 0.45399052, 0.27533618), (0.8910065, 0.45399052, 0), (0.7694214, 0.58778524, -0.25000015), (0.65450895, 0.58778524, -0.47552854), (0.47552854, 0.58778524, -0.6545089), (0.25000012, 0.58778524, -0.7694213), (0, 0.58778524, -0.80901736), (-0.25000012, 0.58778524, -0.7694212), (-0.47552845, 0.58778524, -0.65450877), (-0.6545087, 0.58778524, -0.4755284), (-0.7694211, 0.58778524, -0.25000006), (-0.8090172, 0.58778524, 0), (-0.7694211, 0.58778524, 0.25000006), (-0.65450865, 0.58778524, 0.47552836), (-0.47552836, 0.58778524, 0.6545086), (-0.25000006, 0.58778524, 0.769421), (-2.4110586e-8, 0.58778524, 0.8090171), (0.24999999, 0.58778524, 0.769421), (0.47552827, 0.58778524, 0.65450853), (0.65450853, 0.58778524, 0.4755283), (0.7694209, 0.58778524, 0.25), (0.809017, 0.58778524, 0), (0.67249894, 0.70710677, -0.21850814), (0.5720618, 0.70710677, -0.41562718), (0.41562718, 0.70710677, -0.5720617), (0.21850812, 0.70710677, -0.6724989), (0, 0.70710677, -0.7071071), (-0.21850812, 0.70710677, -0.6724988), (-0.4156271, 0.70710677, -0.5720616), (-0.57206154, 0.70710677, -0.41562706), (-0.6724987, 0.70710677, -0.21850805), (-0.70710695, 0.70710677, 0), (-0.6724987, 0.70710677, 0.21850805), (-0.57206154, 0.70710677, 0.415627), (-0.415627, 0.70710677, 0.5720615), (-0.21850805, 0.70710677, 0.6724986), (-2.1073424e-8, 0.70710677, 0.7071068), (0.21850799, 0.70710677, 0.6724986), (0.4156269, 0.70710677, 0.5720614), (0.5720614, 0.70710677, 0.41562697), (0.6724985, 0.70710677, 0.21850802), (0.70710677, 0.70710677, 0), (0.55901736, 0.809017, -0.18163574), (0.47552857, 0.809017, -0.3454917), (0.3454917, 0.809017, -0.47552854), (0.18163572, 0.809017, -0.5590173), (0, 0.809017, -0.58778554), (-0.18163572, 0.809017, -0.55901724), (-0.34549165, 0.809017, -0.47552842), (-0.4755284, 0.809017, -0.3454916), (-0.5590171, 0.809017, -0.18163566), (-0.58778536, 0.809017, 0), (-0.5590171, 0.809017, 0.18163566), (-0.47552836, 0.809017, 0.34549156), (-0.34549156, 0.809017, 0.47552833), (-0.18163566, 0.809017, 0.55901706), (-1.7517365e-8, 0.809017, 0.5877853), (0.18163562, 0.809017, 0.55901706), (0.3454915, 0.809017, 0.4755283), (0.47552827, 0.809017, 0.34549153), (0.559017, 0.809017, 0.18163563), (0.58778524, 0.809017, 0), (0.43177092, 0.8910065, -0.14029087), (0.3672863, 0.8910065, -0.2668491), (0.2668491, 0.8910065, -0.36728626), (0.14029086, 0.8910065, -0.43177086), (0, 0.8910065, -0.45399073), (-0.14029086, 0.8910065, -0.43177083), (-0.26684904, 0.8910065, -0.36728618), (-0.36728615, 0.8910065, -0.266849), (-0.43177077, 0.8910065, -0.14029081), (-0.45399064, 0.8910065, 0), (-0.43177077, 0.8910065, 0.14029081), (-0.36728612, 0.8910065, 0.26684898), (-0.26684898, 0.8910065, 0.36728612), (-0.14029081, 0.8910065, 0.4317707), (-1.3529972e-8, 0.8910065, 0.45399058), (0.14029078, 0.8910065, 0.43177068), (0.26684892, 0.8910065, 0.3672861), (0.36728606, 0.8910065, 0.26684895), (0.43177065, 0.8910065, 0.1402908), (0.45399052, 0.8910065, 0), (0.29389283, 0.95105654, -0.095491566), (0.25000018, 0.95105654, -0.18163574), (0.18163574, 0.95105654, -0.25000015), (0.09549155, 0.95105654, -0.2938928), (0, 0.95105654, -0.30901715), (-0.09549155, 0.95105654, -0.29389277), (-0.18163571, 0.95105654, -0.2500001), (-0.2500001, 0.95105654, -0.1816357), (-0.2938927, 0.95105654, -0.09549153), (-0.30901706, 0.95105654, 0), (-0.2938927, 0.95105654, 0.09549153), (-0.25000006, 0.95105654, 0.18163568), (-0.18163568, 0.95105654, 0.25000006), (-0.09549153, 0.95105654, 0.29389268), (-9.209424e-9, 0.95105654, 0.30901703), (0.0954915, 0.95105654, 0.29389265), (0.18163563, 0.95105654, 0.25000003), (0.25, 0.95105654, 0.18163565), (0.29389265, 0.95105654, 0.095491506), (0.309017, 0.95105654, 0), (0.14877813, 0.98768836, -0.048340943), (0.12655823, 0.98768836, -0.09194993), (0.09194993, 0.98768836, -0.12655823), (0.048340935, 0.98768836, -0.14877811), (0, 0.98768836, -0.15643455), (-0.048340935, 0.98768836, -0.1487781), (-0.09194992, 0.98768836, -0.1265582), (-0.12655818, 0.98768836, -0.0919499), (-0.14877807, 0.98768836, -0.048340924), (-0.15643452, 0.98768836, 0), (-0.14877807, 0.98768836, 0.048340924), (-0.12655818, 0.98768836, 0.091949895), (-0.091949895, 0.98768836, 0.12655817), (-0.048340924, 0.98768836, 0.14877805), (-4.6621107e-9, 0.98768836, 0.15643449), (0.04834091, 0.98768836, 0.14877804), (0.09194988, 0.98768836, 0.12655815), (0.12655815, 0.98768836, 0.09194989), (0.14877804, 0.98768836, 0.048340913), (0.15643448, 0.98768836, 0), (0, -1, 0), (0, 1, 0)] - color3f[] primvars:displayColor = [(0.13320851, 0.13320851, 0.13320851)] ( - customData = { - dictionary Maya = { - bool generated = 1 - } - } + def Mesh "pSphere1" ( + kind = "component" ) - texCoord2f[] primvars:st = [(0, 0.05), (0.05, 0.05), (0.1, 0.05), (0.15, 0.05), (0.2, 0.05), (0.25, 0.05), (0.3, 0.05), (0.35000002, 0.05), (0.40000004, 0.05), (0.45000005, 0.05), (0.50000006, 0.05), (0.5500001, 0.05), (0.6000001, 0.05), (0.6500001, 0.05), (0.7000001, 0.05), (0.7500001, 0.05), (0.80000013, 0.05), (0.85000014, 0.05), (0.90000015, 0.05), (0.95000017, 0.05), (1.0000001, 0.05), (0, 0.1), (0.05, 0.1), (0.1, 0.1), (0.15, 0.1), (0.2, 0.1), (0.25, 0.1), (0.3, 0.1), (0.35000002, 0.1), (0.40000004, 0.1), (0.45000005, 0.1), (0.50000006, 0.1), (0.5500001, 0.1), (0.6000001, 0.1), (0.6500001, 0.1), (0.7000001, 0.1), (0.7500001, 0.1), (0.80000013, 0.1), (0.85000014, 0.1), (0.90000015, 0.1), (0.95000017, 0.1), (1.0000001, 0.1), (0, 0.15), (0.05, 0.15), (0.1, 0.15), (0.15, 0.15), (0.2, 0.15), (0.25, 0.15), (0.3, 0.15), (0.35000002, 0.15), (0.40000004, 0.15), (0.45000005, 0.15), (0.50000006, 0.15), (0.5500001, 0.15), (0.6000001, 0.15), (0.6500001, 0.15), (0.7000001, 0.15), (0.7500001, 0.15), (0.80000013, 0.15), (0.85000014, 0.15), (0.90000015, 0.15), (0.95000017, 0.15), (1.0000001, 0.15), (0, 0.2), (0.05, 0.2), (0.1, 0.2), (0.15, 0.2), (0.2, 0.2), (0.25, 0.2), (0.3, 0.2), (0.35000002, 0.2), (0.40000004, 0.2), (0.45000005, 0.2), (0.50000006, 0.2), (0.5500001, 0.2), (0.6000001, 0.2), (0.6500001, 0.2), (0.7000001, 0.2), (0.7500001, 0.2), (0.80000013, 0.2), (0.85000014, 0.2), (0.90000015, 0.2), (0.95000017, 0.2), (1.0000001, 0.2), (0, 0.25), (0.05, 0.25), (0.1, 0.25), (0.15, 0.25), (0.2, 0.25), (0.25, 0.25), (0.3, 0.25), (0.35000002, 0.25), (0.40000004, 0.25), (0.45000005, 0.25), (0.50000006, 0.25), (0.5500001, 0.25), (0.6000001, 0.25), (0.6500001, 0.25), (0.7000001, 0.25), (0.7500001, 0.25), (0.80000013, 0.25), (0.85000014, 0.25), (0.90000015, 0.25), (0.95000017, 0.25), (1.0000001, 0.25), (0, 0.3), (0.05, 0.3), (0.1, 0.3), (0.15, 0.3), (0.2, 0.3), (0.25, 0.3), (0.3, 0.3), (0.35000002, 0.3), (0.40000004, 0.3), (0.45000005, 0.3), (0.50000006, 0.3), (0.5500001, 0.3), (0.6000001, 0.3), (0.6500001, 0.3), (0.7000001, 0.3), (0.7500001, 0.3), (0.80000013, 0.3), (0.85000014, 0.3), (0.90000015, 0.3), (0.95000017, 0.3), (1.0000001, 0.3), (0, 0.35000002), (0.05, 0.35000002), (0.1, 0.35000002), (0.15, 0.35000002), (0.2, 0.35000002), (0.25, 0.35000002), (0.3, 0.35000002), (0.35000002, 0.35000002), (0.40000004, 0.35000002), (0.45000005, 0.35000002), (0.50000006, 0.35000002), (0.5500001, 0.35000002), (0.6000001, 0.35000002), (0.6500001, 0.35000002), (0.7000001, 0.35000002), (0.7500001, 0.35000002), (0.80000013, 0.35000002), (0.85000014, 0.35000002), (0.90000015, 0.35000002), (0.95000017, 0.35000002), (1.0000001, 0.35000002), (0, 0.40000004), (0.05, 0.40000004), (0.1, 0.40000004), (0.15, 0.40000004), (0.2, 0.40000004), (0.25, 0.40000004), (0.3, 0.40000004), (0.35000002, 0.40000004), (0.40000004, 0.40000004), (0.45000005, 0.40000004), (0.50000006, 0.40000004), (0.5500001, 0.40000004), (0.6000001, 0.40000004), (0.6500001, 0.40000004), (0.7000001, 0.40000004), (0.7500001, 0.40000004), (0.80000013, 0.40000004), (0.85000014, 0.40000004), (0.90000015, 0.40000004), (0.95000017, 0.40000004), (1.0000001, 0.40000004), (0, 0.45000005), (0.05, 0.45000005), (0.1, 0.45000005), (0.15, 0.45000005), (0.2, 0.45000005), (0.25, 0.45000005), (0.3, 0.45000005), (0.35000002, 0.45000005), (0.40000004, 0.45000005), (0.45000005, 0.45000005), (0.50000006, 0.45000005), (0.5500001, 0.45000005), (0.6000001, 0.45000005), (0.6500001, 0.45000005), (0.7000001, 0.45000005), (0.7500001, 0.45000005), (0.80000013, 0.45000005), (0.85000014, 0.45000005), (0.90000015, 0.45000005), (0.95000017, 0.45000005), (1.0000001, 0.45000005), (0, 0.50000006), (0.05, 0.50000006), (0.1, 0.50000006), (0.15, 0.50000006), (0.2, 0.50000006), (0.25, 0.50000006), (0.3, 0.50000006), (0.35000002, 0.50000006), (0.40000004, 0.50000006), (0.45000005, 0.50000006), (0.50000006, 0.50000006), (0.5500001, 0.50000006), (0.6000001, 0.50000006), (0.6500001, 0.50000006), (0.7000001, 0.50000006), (0.7500001, 0.50000006), (0.80000013, 0.50000006), (0.85000014, 0.50000006), (0.90000015, 0.50000006), (0.95000017, 0.50000006), (1.0000001, 0.50000006), (0, 0.5500001), (0.05, 0.5500001), (0.1, 0.5500001), (0.15, 0.5500001), (0.2, 0.5500001), (0.25, 0.5500001), (0.3, 0.5500001), (0.35000002, 0.5500001), (0.40000004, 0.5500001), (0.45000005, 0.5500001), (0.50000006, 0.5500001), (0.5500001, 0.5500001), (0.6000001, 0.5500001), (0.6500001, 0.5500001), (0.7000001, 0.5500001), (0.7500001, 0.5500001), (0.80000013, 0.5500001), (0.85000014, 0.5500001), (0.90000015, 0.5500001), (0.95000017, 0.5500001), (1.0000001, 0.5500001), (0, 0.6000001), (0.05, 0.6000001), (0.1, 0.6000001), (0.15, 0.6000001), (0.2, 0.6000001), (0.25, 0.6000001), (0.3, 0.6000001), (0.35000002, 0.6000001), (0.40000004, 0.6000001), (0.45000005, 0.6000001), (0.50000006, 0.6000001), (0.5500001, 0.6000001), (0.6000001, 0.6000001), (0.6500001, 0.6000001), (0.7000001, 0.6000001), (0.7500001, 0.6000001), (0.80000013, 0.6000001), (0.85000014, 0.6000001), (0.90000015, 0.6000001), (0.95000017, 0.6000001), (1.0000001, 0.6000001), (0, 0.6500001), (0.05, 0.6500001), (0.1, 0.6500001), (0.15, 0.6500001), (0.2, 0.6500001), (0.25, 0.6500001), (0.3, 0.6500001), (0.35000002, 0.6500001), (0.40000004, 0.6500001), (0.45000005, 0.6500001), (0.50000006, 0.6500001), (0.5500001, 0.6500001), (0.6000001, 0.6500001), (0.6500001, 0.6500001), (0.7000001, 0.6500001), (0.7500001, 0.6500001), (0.80000013, 0.6500001), (0.85000014, 0.6500001), (0.90000015, 0.6500001), (0.95000017, 0.6500001), (1.0000001, 0.6500001), (0, 0.7000001), (0.05, 0.7000001), (0.1, 0.7000001), (0.15, 0.7000001), (0.2, 0.7000001), (0.25, 0.7000001), (0.3, 0.7000001), (0.35000002, 0.7000001), (0.40000004, 0.7000001), (0.45000005, 0.7000001), (0.50000006, 0.7000001), (0.5500001, 0.7000001), (0.6000001, 0.7000001), (0.6500001, 0.7000001), (0.7000001, 0.7000001), (0.7500001, 0.7000001), (0.80000013, 0.7000001), (0.85000014, 0.7000001), (0.90000015, 0.7000001), (0.95000017, 0.7000001), (1.0000001, 0.7000001), (0, 0.7500001), (0.05, 0.7500001), (0.1, 0.7500001), (0.15, 0.7500001), (0.2, 0.7500001), (0.25, 0.7500001), (0.3, 0.7500001), (0.35000002, 0.7500001), (0.40000004, 0.7500001), (0.45000005, 0.7500001), (0.50000006, 0.7500001), (0.5500001, 0.7500001), (0.6000001, 0.7500001), (0.6500001, 0.7500001), (0.7000001, 0.7500001), (0.7500001, 0.7500001), (0.80000013, 0.7500001), (0.85000014, 0.7500001), (0.90000015, 0.7500001), (0.95000017, 0.7500001), (1.0000001, 0.7500001), (0, 0.80000013), (0.05, 0.80000013), (0.1, 0.80000013), (0.15, 0.80000013), (0.2, 0.80000013), (0.25, 0.80000013), (0.3, 0.80000013), (0.35000002, 0.80000013), (0.40000004, 0.80000013), (0.45000005, 0.80000013), (0.50000006, 0.80000013), (0.5500001, 0.80000013), (0.6000001, 0.80000013), (0.6500001, 0.80000013), (0.7000001, 0.80000013), (0.7500001, 0.80000013), (0.80000013, 0.80000013), (0.85000014, 0.80000013), (0.90000015, 0.80000013), (0.95000017, 0.80000013), (1.0000001, 0.80000013), (0, 0.85000014), (0.05, 0.85000014), (0.1, 0.85000014), (0.15, 0.85000014), (0.2, 0.85000014), (0.25, 0.85000014), (0.3, 0.85000014), (0.35000002, 0.85000014), (0.40000004, 0.85000014), (0.45000005, 0.85000014), (0.50000006, 0.85000014), (0.5500001, 0.85000014), (0.6000001, 0.85000014), (0.6500001, 0.85000014), (0.7000001, 0.85000014), (0.7500001, 0.85000014), (0.80000013, 0.85000014), (0.85000014, 0.85000014), (0.90000015, 0.85000014), (0.95000017, 0.85000014), (1.0000001, 0.85000014), (0, 0.90000015), (0.05, 0.90000015), (0.1, 0.90000015), (0.15, 0.90000015), (0.2, 0.90000015), (0.25, 0.90000015), (0.3, 0.90000015), (0.35000002, 0.90000015), (0.40000004, 0.90000015), (0.45000005, 0.90000015), (0.50000006, 0.90000015), (0.5500001, 0.90000015), (0.6000001, 0.90000015), (0.6500001, 0.90000015), (0.7000001, 0.90000015), (0.7500001, 0.90000015), (0.80000013, 0.90000015), (0.85000014, 0.90000015), (0.90000015, 0.90000015), (0.95000017, 0.90000015), (1.0000001, 0.90000015), (0, 0.95000017), (0.05, 0.95000017), (0.1, 0.95000017), (0.15, 0.95000017), (0.2, 0.95000017), (0.25, 0.95000017), (0.3, 0.95000017), (0.35000002, 0.95000017), (0.40000004, 0.95000017), (0.45000005, 0.95000017), (0.50000006, 0.95000017), (0.5500001, 0.95000017), (0.6000001, 0.95000017), (0.6500001, 0.95000017), (0.7000001, 0.95000017), (0.7500001, 0.95000017), (0.80000013, 0.95000017), (0.85000014, 0.95000017), (0.90000015, 0.95000017), (0.95000017, 0.95000017), (1.0000001, 0.95000017), (0.025, 0), (0.075, 0), (0.125, 0), (0.17500001, 0), (0.22500001, 0), (0.275, 0), (0.32500002, 0), (0.375, 0), (0.425, 0), (0.47500002, 0), (0.525, 0), (0.575, 0), (0.625, 0), (0.675, 0), (0.72499996, 0), (0.775, 0), (0.825, 0), (0.875, 0), (0.925, 0), (0.97499996, 0), (0.025, 1), (0.075, 1), (0.125, 1), (0.17500001, 1), (0.22500001, 1), (0.275, 1), (0.32500002, 1), (0.375, 1), (0.425, 1), (0.47500002, 1), (0.525, 1), (0.575, 1), (0.625, 1), (0.675, 1), (0.72499996, 1), (0.775, 1), (0.825, 1), (0.875, 1), (0.925, 1), (0.97499996, 1)] ( - customData = { - dictionary Maya = { - token name = "map1" + { + uniform bool doubleSided = 1 + float3[] extent = [(-1.0000002, -1, -1.0000005), (1, 1, 1.0000001)] + 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, 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, 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, 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, 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, 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, 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, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] + int[] faceVertexIndices = [0, 1, 21, 20, 1, 2, 22, 21, 2, 3, 23, 22, 3, 4, 24, 23, 4, 5, 25, 24, 5, 6, 26, 25, 6, 7, 27, 26, 7, 8, 28, 27, 8, 9, 29, 28, 9, 10, 30, 29, 10, 11, 31, 30, 11, 12, 32, 31, 12, 13, 33, 32, 13, 14, 34, 33, 14, 15, 35, 34, 15, 16, 36, 35, 16, 17, 37, 36, 17, 18, 38, 37, 18, 19, 39, 38, 19, 0, 20, 39, 20, 21, 41, 40, 21, 22, 42, 41, 22, 23, 43, 42, 23, 24, 44, 43, 24, 25, 45, 44, 25, 26, 46, 45, 26, 27, 47, 46, 27, 28, 48, 47, 28, 29, 49, 48, 29, 30, 50, 49, 30, 31, 51, 50, 31, 32, 52, 51, 32, 33, 53, 52, 33, 34, 54, 53, 34, 35, 55, 54, 35, 36, 56, 55, 36, 37, 57, 56, 37, 38, 58, 57, 38, 39, 59, 58, 39, 20, 40, 59, 40, 41, 61, 60, 41, 42, 62, 61, 42, 43, 63, 62, 43, 44, 64, 63, 44, 45, 65, 64, 45, 46, 66, 65, 46, 47, 67, 66, 47, 48, 68, 67, 48, 49, 69, 68, 49, 50, 70, 69, 50, 51, 71, 70, 51, 52, 72, 71, 52, 53, 73, 72, 53, 54, 74, 73, 54, 55, 75, 74, 55, 56, 76, 75, 56, 57, 77, 76, 57, 58, 78, 77, 58, 59, 79, 78, 59, 40, 60, 79, 60, 61, 81, 80, 61, 62, 82, 81, 62, 63, 83, 82, 63, 64, 84, 83, 64, 65, 85, 84, 65, 66, 86, 85, 66, 67, 87, 86, 67, 68, 88, 87, 68, 69, 89, 88, 69, 70, 90, 89, 70, 71, 91, 90, 71, 72, 92, 91, 72, 73, 93, 92, 73, 74, 94, 93, 74, 75, 95, 94, 75, 76, 96, 95, 76, 77, 97, 96, 77, 78, 98, 97, 78, 79, 99, 98, 79, 60, 80, 99, 80, 81, 101, 100, 81, 82, 102, 101, 82, 83, 103, 102, 83, 84, 104, 103, 84, 85, 105, 104, 85, 86, 106, 105, 86, 87, 107, 106, 87, 88, 108, 107, 88, 89, 109, 108, 89, 90, 110, 109, 90, 91, 111, 110, 91, 92, 112, 111, 92, 93, 113, 112, 93, 94, 114, 113, 94, 95, 115, 114, 95, 96, 116, 115, 96, 97, 117, 116, 97, 98, 118, 117, 98, 99, 119, 118, 99, 80, 100, 119, 100, 101, 121, 120, 101, 102, 122, 121, 102, 103, 123, 122, 103, 104, 124, 123, 104, 105, 125, 124, 105, 106, 126, 125, 106, 107, 127, 126, 107, 108, 128, 127, 108, 109, 129, 128, 109, 110, 130, 129, 110, 111, 131, 130, 111, 112, 132, 131, 112, 113, 133, 132, 113, 114, 134, 133, 114, 115, 135, 134, 115, 116, 136, 135, 116, 117, 137, 136, 117, 118, 138, 137, 118, 119, 139, 138, 119, 100, 120, 139, 120, 121, 141, 140, 121, 122, 142, 141, 122, 123, 143, 142, 123, 124, 144, 143, 124, 125, 145, 144, 125, 126, 146, 145, 126, 127, 147, 146, 127, 128, 148, 147, 128, 129, 149, 148, 129, 130, 150, 149, 130, 131, 151, 150, 131, 132, 152, 151, 132, 133, 153, 152, 133, 134, 154, 153, 134, 135, 155, 154, 135, 136, 156, 155, 136, 137, 157, 156, 137, 138, 158, 157, 138, 139, 159, 158, 139, 120, 140, 159, 140, 141, 161, 160, 141, 142, 162, 161, 142, 143, 163, 162, 143, 144, 164, 163, 144, 145, 165, 164, 145, 146, 166, 165, 146, 147, 167, 166, 147, 148, 168, 167, 148, 149, 169, 168, 149, 150, 170, 169, 150, 151, 171, 170, 151, 152, 172, 171, 152, 153, 173, 172, 153, 154, 174, 173, 154, 155, 175, 174, 155, 156, 176, 175, 156, 157, 177, 176, 157, 158, 178, 177, 158, 159, 179, 178, 159, 140, 160, 179, 160, 161, 181, 180, 161, 162, 182, 181, 162, 163, 183, 182, 163, 164, 184, 183, 164, 165, 185, 184, 165, 166, 186, 185, 166, 167, 187, 186, 167, 168, 188, 187, 168, 169, 189, 188, 169, 170, 190, 189, 170, 171, 191, 190, 171, 172, 192, 191, 172, 173, 193, 192, 173, 174, 194, 193, 174, 175, 195, 194, 175, 176, 196, 195, 176, 177, 197, 196, 177, 178, 198, 197, 178, 179, 199, 198, 179, 160, 180, 199, 180, 181, 201, 200, 181, 182, 202, 201, 182, 183, 203, 202, 183, 184, 204, 203, 184, 185, 205, 204, 185, 186, 206, 205, 186, 187, 207, 206, 187, 188, 208, 207, 188, 189, 209, 208, 189, 190, 210, 209, 190, 191, 211, 210, 191, 192, 212, 211, 192, 193, 213, 212, 193, 194, 214, 213, 194, 195, 215, 214, 195, 196, 216, 215, 196, 197, 217, 216, 197, 198, 218, 217, 198, 199, 219, 218, 199, 180, 200, 219, 200, 201, 221, 220, 201, 202, 222, 221, 202, 203, 223, 222, 203, 204, 224, 223, 204, 205, 225, 224, 205, 206, 226, 225, 206, 207, 227, 226, 207, 208, 228, 227, 208, 209, 229, 228, 209, 210, 230, 229, 210, 211, 231, 230, 211, 212, 232, 231, 212, 213, 233, 232, 213, 214, 234, 233, 214, 215, 235, 234, 215, 216, 236, 235, 216, 217, 237, 236, 217, 218, 238, 237, 218, 219, 239, 238, 219, 200, 220, 239, 220, 221, 241, 240, 221, 222, 242, 241, 222, 223, 243, 242, 223, 224, 244, 243, 224, 225, 245, 244, 225, 226, 246, 245, 226, 227, 247, 246, 227, 228, 248, 247, 228, 229, 249, 248, 229, 230, 250, 249, 230, 231, 251, 250, 231, 232, 252, 251, 232, 233, 253, 252, 233, 234, 254, 253, 234, 235, 255, 254, 235, 236, 256, 255, 236, 237, 257, 256, 237, 238, 258, 257, 238, 239, 259, 258, 239, 220, 240, 259, 240, 241, 261, 260, 241, 242, 262, 261, 242, 243, 263, 262, 243, 244, 264, 263, 244, 245, 265, 264, 245, 246, 266, 265, 246, 247, 267, 266, 247, 248, 268, 267, 248, 249, 269, 268, 249, 250, 270, 269, 250, 251, 271, 270, 251, 252, 272, 271, 252, 253, 273, 272, 253, 254, 274, 273, 254, 255, 275, 274, 255, 256, 276, 275, 256, 257, 277, 276, 257, 258, 278, 277, 258, 259, 279, 278, 259, 240, 260, 279, 260, 261, 281, 280, 261, 262, 282, 281, 262, 263, 283, 282, 263, 264, 284, 283, 264, 265, 285, 284, 265, 266, 286, 285, 266, 267, 287, 286, 267, 268, 288, 287, 268, 269, 289, 288, 269, 270, 290, 289, 270, 271, 291, 290, 271, 272, 292, 291, 272, 273, 293, 292, 273, 274, 294, 293, 274, 275, 295, 294, 275, 276, 296, 295, 276, 277, 297, 296, 277, 278, 298, 297, 278, 279, 299, 298, 279, 260, 280, 299, 280, 281, 301, 300, 281, 282, 302, 301, 282, 283, 303, 302, 283, 284, 304, 303, 284, 285, 305, 304, 285, 286, 306, 305, 286, 287, 307, 306, 287, 288, 308, 307, 288, 289, 309, 308, 289, 290, 310, 309, 290, 291, 311, 310, 291, 292, 312, 311, 292, 293, 313, 312, 293, 294, 314, 313, 294, 295, 315, 314, 295, 296, 316, 315, 296, 297, 317, 316, 297, 298, 318, 317, 298, 299, 319, 318, 299, 280, 300, 319, 300, 301, 321, 320, 301, 302, 322, 321, 302, 303, 323, 322, 303, 304, 324, 323, 304, 305, 325, 324, 305, 306, 326, 325, 306, 307, 327, 326, 307, 308, 328, 327, 308, 309, 329, 328, 309, 310, 330, 329, 310, 311, 331, 330, 311, 312, 332, 331, 312, 313, 333, 332, 313, 314, 334, 333, 314, 315, 335, 334, 315, 316, 336, 335, 316, 317, 337, 336, 317, 318, 338, 337, 318, 319, 339, 338, 319, 300, 320, 339, 320, 321, 341, 340, 321, 322, 342, 341, 322, 323, 343, 342, 323, 324, 344, 343, 324, 325, 345, 344, 325, 326, 346, 345, 326, 327, 347, 346, 327, 328, 348, 347, 328, 329, 349, 348, 329, 330, 350, 349, 330, 331, 351, 350, 331, 332, 352, 351, 332, 333, 353, 352, 333, 334, 354, 353, 334, 335, 355, 354, 335, 336, 356, 355, 336, 337, 357, 356, 337, 338, 358, 357, 338, 339, 359, 358, 339, 320, 340, 359, 340, 341, 361, 360, 341, 342, 362, 361, 342, 343, 363, 362, 343, 344, 364, 363, 344, 345, 365, 364, 345, 346, 366, 365, 346, 347, 367, 366, 347, 348, 368, 367, 348, 349, 369, 368, 349, 350, 370, 369, 350, 351, 371, 370, 351, 352, 372, 371, 352, 353, 373, 372, 353, 354, 374, 373, 354, 355, 375, 374, 355, 356, 376, 375, 356, 357, 377, 376, 357, 358, 378, 377, 358, 359, 379, 378, 359, 340, 360, 379, 1, 0, 380, 2, 1, 380, 3, 2, 380, 4, 3, 380, 5, 4, 380, 6, 5, 380, 7, 6, 380, 8, 7, 380, 9, 8, 380, 10, 9, 380, 11, 10, 380, 12, 11, 380, 13, 12, 380, 14, 13, 380, 15, 14, 380, 16, 15, 380, 17, 16, 380, 18, 17, 380, 19, 18, 380, 0, 19, 380, 360, 361, 381, 361, 362, 381, 362, 363, 381, 363, 364, 381, 364, 365, 381, 365, 366, 381, 366, 367, 381, 367, 368, 381, 368, 369, 381, 369, 370, 381, 370, 371, 381, 371, 372, 381, 372, 373, 381, 373, 374, 381, 374, 375, 381, 375, 376, 381, 376, 377, 381, 377, 378, 381, 378, 379, 381, 379, 360, 381] + point3f[] points = [(0.14877813, -0.98768836, -0.048340943), (0.12655823, -0.98768836, -0.09194993), (0.09194993, -0.98768836, -0.12655823), (0.048340935, -0.98768836, -0.14877811), (0, -0.98768836, -0.15643455), (-0.048340935, -0.98768836, -0.1487781), (-0.09194992, -0.98768836, -0.1265582), (-0.12655818, -0.98768836, -0.0919499), (-0.14877807, -0.98768836, -0.048340924), (-0.15643452, -0.98768836, 0), (-0.14877807, -0.98768836, 0.048340924), (-0.12655818, -0.98768836, 0.091949895), (-0.091949895, -0.98768836, 0.12655817), (-0.048340924, -0.98768836, 0.14877805), (-4.6621107e-9, -0.98768836, 0.15643449), (0.04834091, -0.98768836, 0.14877804), (0.09194988, -0.98768836, 0.12655815), (0.12655815, -0.98768836, 0.09194989), (0.14877804, -0.98768836, 0.048340913), (0.15643448, -0.98768836, 0), (0.29389283, -0.95105654, -0.095491566), (0.25000018, -0.95105654, -0.18163574), (0.18163574, -0.95105654, -0.25000015), (0.09549155, -0.95105654, -0.2938928), (0, -0.95105654, -0.30901715), (-0.09549155, -0.95105654, -0.29389277), (-0.18163571, -0.95105654, -0.2500001), (-0.2500001, -0.95105654, -0.1816357), (-0.2938927, -0.95105654, -0.09549153), (-0.30901706, -0.95105654, 0), (-0.2938927, -0.95105654, 0.09549153), (-0.25000006, -0.95105654, 0.18163568), (-0.18163568, -0.95105654, 0.25000006), (-0.09549153, -0.95105654, 0.29389268), (-9.209424e-9, -0.95105654, 0.30901703), (0.0954915, -0.95105654, 0.29389265), (0.18163563, -0.95105654, 0.25000003), (0.25, -0.95105654, 0.18163565), (0.29389265, -0.95105654, 0.095491506), (0.309017, -0.95105654, 0), (0.43177092, -0.8910065, -0.14029087), (0.3672863, -0.8910065, -0.2668491), (0.2668491, -0.8910065, -0.36728626), (0.14029086, -0.8910065, -0.43177086), (0, -0.8910065, -0.45399073), (-0.14029086, -0.8910065, -0.43177083), (-0.26684904, -0.8910065, -0.36728618), (-0.36728615, -0.8910065, -0.266849), (-0.43177077, -0.8910065, -0.14029081), (-0.45399064, -0.8910065, 0), (-0.43177077, -0.8910065, 0.14029081), (-0.36728612, -0.8910065, 0.26684898), (-0.26684898, -0.8910065, 0.36728612), (-0.14029081, -0.8910065, 0.4317707), (-1.3529972e-8, -0.8910065, 0.45399058), (0.14029078, -0.8910065, 0.43177068), (0.26684892, -0.8910065, 0.3672861), (0.36728606, -0.8910065, 0.26684895), (0.43177065, -0.8910065, 0.1402908), (0.45399052, -0.8910065, 0), (0.55901736, -0.809017, -0.18163574), (0.47552857, -0.809017, -0.3454917), (0.3454917, -0.809017, -0.47552854), (0.18163572, -0.809017, -0.5590173), (0, -0.809017, -0.58778554), (-0.18163572, -0.809017, -0.55901724), (-0.34549165, -0.809017, -0.47552842), (-0.4755284, -0.809017, -0.3454916), (-0.5590171, -0.809017, -0.18163566), (-0.58778536, -0.809017, 0), (-0.5590171, -0.809017, 0.18163566), (-0.47552836, -0.809017, 0.34549156), (-0.34549156, -0.809017, 0.47552833), (-0.18163566, -0.809017, 0.55901706), (-1.7517365e-8, -0.809017, 0.5877853), (0.18163562, -0.809017, 0.55901706), (0.3454915, -0.809017, 0.4755283), (0.47552827, -0.809017, 0.34549153), (0.559017, -0.809017, 0.18163563), (0.58778524, -0.809017, 0), (0.67249894, -0.70710677, -0.21850814), (0.5720618, -0.70710677, -0.41562718), (0.41562718, -0.70710677, -0.5720617), (0.21850812, -0.70710677, -0.6724989), (0, -0.70710677, -0.7071071), (-0.21850812, -0.70710677, -0.6724988), (-0.4156271, -0.70710677, -0.5720616), (-0.57206154, -0.70710677, -0.41562706), (-0.6724987, -0.70710677, -0.21850805), (-0.70710695, -0.70710677, 0), (-0.6724987, -0.70710677, 0.21850805), (-0.57206154, -0.70710677, 0.415627), (-0.415627, -0.70710677, 0.5720615), (-0.21850805, -0.70710677, 0.6724986), (-2.1073424e-8, -0.70710677, 0.7071068), (0.21850799, -0.70710677, 0.6724986), (0.4156269, -0.70710677, 0.5720614), (0.5720614, -0.70710677, 0.41562697), (0.6724985, -0.70710677, 0.21850802), (0.70710677, -0.70710677, 0), (0.7694214, -0.58778524, -0.25000015), (0.65450895, -0.58778524, -0.47552854), (0.47552854, -0.58778524, -0.6545089), (0.25000012, -0.58778524, -0.7694213), (0, -0.58778524, -0.80901736), (-0.25000012, -0.58778524, -0.7694212), (-0.47552845, -0.58778524, -0.65450877), (-0.6545087, -0.58778524, -0.4755284), (-0.7694211, -0.58778524, -0.25000006), (-0.8090172, -0.58778524, 0), (-0.7694211, -0.58778524, 0.25000006), (-0.65450865, -0.58778524, 0.47552836), (-0.47552836, -0.58778524, 0.6545086), (-0.25000006, -0.58778524, 0.769421), (-2.4110586e-8, -0.58778524, 0.8090171), (0.24999999, -0.58778524, 0.769421), (0.47552827, -0.58778524, 0.65450853), (0.65450853, -0.58778524, 0.4755283), (0.7694209, -0.58778524, 0.25), (0.809017, -0.58778524, 0), (0.8473981, -0.45399052, -0.27533633), (0.7208399, -0.45399052, -0.5237208), (0.5237208, -0.45399052, -0.72083986), (0.2753363, -0.45399052, -0.847398), (0, -0.45399052, -0.89100695), (-0.2753363, -0.45399052, -0.847398), (-0.5237207, -0.45399052, -0.7208397), (-0.7208396, -0.45399052, -0.5237206), (-0.8473978, -0.45399052, -0.2753362), (-0.89100677, -0.45399052, 0), (-0.8473978, -0.45399052, 0.2753362), (-0.7208396, -0.45399052, 0.5237206), (-0.5237206, -0.45399052, 0.72083956), (-0.2753362, -0.45399052, 0.8473977), (-2.6554064e-8, -0.45399052, 0.89100665), (0.27533615, -0.45399052, 0.8473976), (0.5237205, -0.45399052, 0.7208395), (0.72083944, -0.45399052, 0.52372056), (0.84739757, -0.45399052, 0.27533618), (0.8910065, -0.45399052, 0), (0.9045091, -0.30901697, -0.2938928), (0.7694214, -0.30901697, -0.55901736), (0.55901736, -0.30901697, -0.76942134), (0.29389277, -0.30901697, -0.904509), (0, -0.30901697, -0.951057), (-0.29389277, -0.30901697, -0.90450895), (-0.55901724, -0.30901697, -0.7694212), (-0.76942116, -0.30901697, -0.5590172), (-0.90450877, -0.30901697, -0.2938927), (-0.9510568, -0.30901697, 0), (-0.90450877, -0.30901697, 0.2938927), (-0.7694211, -0.30901697, 0.5590171), (-0.5590171, -0.30901697, 0.76942104), (-0.2938927, -0.30901697, 0.90450865), (-2.8343694e-8, -0.30901697, 0.95105666), (0.29389262, -0.30901697, 0.9045086), (0.559017, -0.30901697, 0.769421), (0.7694209, -0.30901697, 0.55901706), (0.90450853, -0.30901697, 0.29389265), (0.95105654, -0.30901697, 0), (0.93934804, -0.15643437, -0.30521268), (0.7990572, -0.15643437, -0.580549), (0.580549, -0.15643437, -0.7990571), (0.30521265, -0.15643437, -0.9393479), (0, -0.15643437, -0.98768884), (-0.30521265, -0.15643437, -0.93934786), (-0.5805489, -0.15643437, -0.79905695), (-0.7990569, -0.15643437, -0.5805488), (-0.9393477, -0.15643437, -0.30521256), (-0.9876886, -0.15643437, 0), (-0.9393477, -0.15643437, 0.30521256), (-0.7990568, -0.15643437, 0.58054876), (-0.58054876, -0.15643437, 0.79905677), (-0.30521256, -0.15643437, 0.93934757), (-2.9435407e-8, -0.15643437, 0.9876885), (0.30521247, -0.15643437, 0.93934757), (0.58054864, -0.15643437, 0.7990567), (0.79905665, -0.15643437, 0.5805487), (0.9393475, -0.15643437, 0.3052125), (0.98768836, -0.15643437, 0), (0.95105714, 0, -0.30901718), (0.80901754, 0, -0.5877856), (0.5877856, 0, -0.8090175), (0.30901715, 0, -0.951057), (0, 0, -1.0000005), (-0.30901715, 0, -0.95105696), (-0.5877855, 0, -0.8090173), (-0.80901724, 0, -0.5877854), (-0.9510568, 0, -0.30901706), (-1.0000002, 0, 0), (-0.9510568, 0, 0.30901706), (-0.8090172, 0, 0.58778536), (-0.58778536, 0, 0.8090171), (-0.30901706, 0, 0.95105666), (-2.9802322e-8, 0, 1.0000001), (0.30901697, 0, 0.9510566), (0.58778524, 0, 0.80901706), (0.809017, 0, 0.5877853), (0.95105654, 0, 0.309017), (1, 0, 0), (0.93934804, 0.15643437, -0.30521268), (0.7990572, 0.15643437, -0.580549), (0.580549, 0.15643437, -0.7990571), (0.30521265, 0.15643437, -0.9393479), (0, 0.15643437, -0.98768884), (-0.30521265, 0.15643437, -0.93934786), (-0.5805489, 0.15643437, -0.79905695), (-0.7990569, 0.15643437, -0.5805488), (-0.9393477, 0.15643437, -0.30521256), (-0.9876886, 0.15643437, 0), (-0.9393477, 0.15643437, 0.30521256), (-0.7990568, 0.15643437, 0.58054876), (-0.58054876, 0.15643437, 0.79905677), (-0.30521256, 0.15643437, 0.93934757), (-2.9435407e-8, 0.15643437, 0.9876885), (0.30521247, 0.15643437, 0.93934757), (0.58054864, 0.15643437, 0.7990567), (0.79905665, 0.15643437, 0.5805487), (0.9393475, 0.15643437, 0.3052125), (0.98768836, 0.15643437, 0), (0.9045091, 0.30901697, -0.2938928), (0.7694214, 0.30901697, -0.55901736), (0.55901736, 0.30901697, -0.76942134), (0.29389277, 0.30901697, -0.904509), (0, 0.30901697, -0.951057), (-0.29389277, 0.30901697, -0.90450895), (-0.55901724, 0.30901697, -0.7694212), (-0.76942116, 0.30901697, -0.5590172), (-0.90450877, 0.30901697, -0.2938927), (-0.9510568, 0.30901697, 0), (-0.90450877, 0.30901697, 0.2938927), (-0.7694211, 0.30901697, 0.5590171), (-0.5590171, 0.30901697, 0.76942104), (-0.2938927, 0.30901697, 0.90450865), (-2.8343694e-8, 0.30901697, 0.95105666), (0.29389262, 0.30901697, 0.9045086), (0.559017, 0.30901697, 0.769421), (0.7694209, 0.30901697, 0.55901706), (0.90450853, 0.30901697, 0.29389265), (0.95105654, 0.30901697, 0), (0.8473981, 0.45399052, -0.27533633), (0.7208399, 0.45399052, -0.5237208), (0.5237208, 0.45399052, -0.72083986), (0.2753363, 0.45399052, -0.847398), (0, 0.45399052, -0.89100695), (-0.2753363, 0.45399052, -0.847398), (-0.5237207, 0.45399052, -0.7208397), (-0.7208396, 0.45399052, -0.5237206), (-0.8473978, 0.45399052, -0.2753362), (-0.89100677, 0.45399052, 0), (-0.8473978, 0.45399052, 0.2753362), (-0.7208396, 0.45399052, 0.5237206), (-0.5237206, 0.45399052, 0.72083956), (-0.2753362, 0.45399052, 0.8473977), (-2.6554064e-8, 0.45399052, 0.89100665), (0.27533615, 0.45399052, 0.8473976), (0.5237205, 0.45399052, 0.7208395), (0.72083944, 0.45399052, 0.52372056), (0.84739757, 0.45399052, 0.27533618), (0.8910065, 0.45399052, 0), (0.7694214, 0.58778524, -0.25000015), (0.65450895, 0.58778524, -0.47552854), (0.47552854, 0.58778524, -0.6545089), (0.25000012, 0.58778524, -0.7694213), (0, 0.58778524, -0.80901736), (-0.25000012, 0.58778524, -0.7694212), (-0.47552845, 0.58778524, -0.65450877), (-0.6545087, 0.58778524, -0.4755284), (-0.7694211, 0.58778524, -0.25000006), (-0.8090172, 0.58778524, 0), (-0.7694211, 0.58778524, 0.25000006), (-0.65450865, 0.58778524, 0.47552836), (-0.47552836, 0.58778524, 0.6545086), (-0.25000006, 0.58778524, 0.769421), (-2.4110586e-8, 0.58778524, 0.8090171), (0.24999999, 0.58778524, 0.769421), (0.47552827, 0.58778524, 0.65450853), (0.65450853, 0.58778524, 0.4755283), (0.7694209, 0.58778524, 0.25), (0.809017, 0.58778524, 0), (0.67249894, 0.70710677, -0.21850814), (0.5720618, 0.70710677, -0.41562718), (0.41562718, 0.70710677, -0.5720617), (0.21850812, 0.70710677, -0.6724989), (0, 0.70710677, -0.7071071), (-0.21850812, 0.70710677, -0.6724988), (-0.4156271, 0.70710677, -0.5720616), (-0.57206154, 0.70710677, -0.41562706), (-0.6724987, 0.70710677, -0.21850805), (-0.70710695, 0.70710677, 0), (-0.6724987, 0.70710677, 0.21850805), (-0.57206154, 0.70710677, 0.415627), (-0.415627, 0.70710677, 0.5720615), (-0.21850805, 0.70710677, 0.6724986), (-2.1073424e-8, 0.70710677, 0.7071068), (0.21850799, 0.70710677, 0.6724986), (0.4156269, 0.70710677, 0.5720614), (0.5720614, 0.70710677, 0.41562697), (0.6724985, 0.70710677, 0.21850802), (0.70710677, 0.70710677, 0), (0.55901736, 0.809017, -0.18163574), (0.47552857, 0.809017, -0.3454917), (0.3454917, 0.809017, -0.47552854), (0.18163572, 0.809017, -0.5590173), (0, 0.809017, -0.58778554), (-0.18163572, 0.809017, -0.55901724), (-0.34549165, 0.809017, -0.47552842), (-0.4755284, 0.809017, -0.3454916), (-0.5590171, 0.809017, -0.18163566), (-0.58778536, 0.809017, 0), (-0.5590171, 0.809017, 0.18163566), (-0.47552836, 0.809017, 0.34549156), (-0.34549156, 0.809017, 0.47552833), (-0.18163566, 0.809017, 0.55901706), (-1.7517365e-8, 0.809017, 0.5877853), (0.18163562, 0.809017, 0.55901706), (0.3454915, 0.809017, 0.4755283), (0.47552827, 0.809017, 0.34549153), (0.559017, 0.809017, 0.18163563), (0.58778524, 0.809017, 0), (0.43177092, 0.8910065, -0.14029087), (0.3672863, 0.8910065, -0.2668491), (0.2668491, 0.8910065, -0.36728626), (0.14029086, 0.8910065, -0.43177086), (0, 0.8910065, -0.45399073), (-0.14029086, 0.8910065, -0.43177083), (-0.26684904, 0.8910065, -0.36728618), (-0.36728615, 0.8910065, -0.266849), (-0.43177077, 0.8910065, -0.14029081), (-0.45399064, 0.8910065, 0), (-0.43177077, 0.8910065, 0.14029081), (-0.36728612, 0.8910065, 0.26684898), (-0.26684898, 0.8910065, 0.36728612), (-0.14029081, 0.8910065, 0.4317707), (-1.3529972e-8, 0.8910065, 0.45399058), (0.14029078, 0.8910065, 0.43177068), (0.26684892, 0.8910065, 0.3672861), (0.36728606, 0.8910065, 0.26684895), (0.43177065, 0.8910065, 0.1402908), (0.45399052, 0.8910065, 0), (0.29389283, 0.95105654, -0.095491566), (0.25000018, 0.95105654, -0.18163574), (0.18163574, 0.95105654, -0.25000015), (0.09549155, 0.95105654, -0.2938928), (0, 0.95105654, -0.30901715), (-0.09549155, 0.95105654, -0.29389277), (-0.18163571, 0.95105654, -0.2500001), (-0.2500001, 0.95105654, -0.1816357), (-0.2938927, 0.95105654, -0.09549153), (-0.30901706, 0.95105654, 0), (-0.2938927, 0.95105654, 0.09549153), (-0.25000006, 0.95105654, 0.18163568), (-0.18163568, 0.95105654, 0.25000006), (-0.09549153, 0.95105654, 0.29389268), (-9.209424e-9, 0.95105654, 0.30901703), (0.0954915, 0.95105654, 0.29389265), (0.18163563, 0.95105654, 0.25000003), (0.25, 0.95105654, 0.18163565), (0.29389265, 0.95105654, 0.095491506), (0.309017, 0.95105654, 0), (0.14877813, 0.98768836, -0.048340943), (0.12655823, 0.98768836, -0.09194993), (0.09194993, 0.98768836, -0.12655823), (0.048340935, 0.98768836, -0.14877811), (0, 0.98768836, -0.15643455), (-0.048340935, 0.98768836, -0.1487781), (-0.09194992, 0.98768836, -0.1265582), (-0.12655818, 0.98768836, -0.0919499), (-0.14877807, 0.98768836, -0.048340924), (-0.15643452, 0.98768836, 0), (-0.14877807, 0.98768836, 0.048340924), (-0.12655818, 0.98768836, 0.091949895), (-0.091949895, 0.98768836, 0.12655817), (-0.048340924, 0.98768836, 0.14877805), (-4.6621107e-9, 0.98768836, 0.15643449), (0.04834091, 0.98768836, 0.14877804), (0.09194988, 0.98768836, 0.12655815), (0.12655815, 0.98768836, 0.09194989), (0.14877804, 0.98768836, 0.048340913), (0.15643448, 0.98768836, 0), (0, -1, 0), (0, 1, 0)] + color3f[] primvars:displayColor = [(0.13320851, 0.13320851, 0.13320851)] ( + customData = { + dictionary Maya = { + bool generated = 1 + } } - } - interpolation = "faceVarying" - ) - int[] primvars:st:indices = [0, 1, 22, 21, 1, 2, 23, 22, 2, 3, 24, 23, 3, 4, 25, 24, 4, 5, 26, 25, 5, 6, 27, 26, 6, 7, 28, 27, 7, 8, 29, 28, 8, 9, 30, 29, 9, 10, 31, 30, 10, 11, 32, 31, 11, 12, 33, 32, 12, 13, 34, 33, 13, 14, 35, 34, 14, 15, 36, 35, 15, 16, 37, 36, 16, 17, 38, 37, 17, 18, 39, 38, 18, 19, 40, 39, 19, 20, 41, 40, 21, 22, 43, 42, 22, 23, 44, 43, 23, 24, 45, 44, 24, 25, 46, 45, 25, 26, 47, 46, 26, 27, 48, 47, 27, 28, 49, 48, 28, 29, 50, 49, 29, 30, 51, 50, 30, 31, 52, 51, 31, 32, 53, 52, 32, 33, 54, 53, 33, 34, 55, 54, 34, 35, 56, 55, 35, 36, 57, 56, 36, 37, 58, 57, 37, 38, 59, 58, 38, 39, 60, 59, 39, 40, 61, 60, 40, 41, 62, 61, 42, 43, 64, 63, 43, 44, 65, 64, 44, 45, 66, 65, 45, 46, 67, 66, 46, 47, 68, 67, 47, 48, 69, 68, 48, 49, 70, 69, 49, 50, 71, 70, 50, 51, 72, 71, 51, 52, 73, 72, 52, 53, 74, 73, 53, 54, 75, 74, 54, 55, 76, 75, 55, 56, 77, 76, 56, 57, 78, 77, 57, 58, 79, 78, 58, 59, 80, 79, 59, 60, 81, 80, 60, 61, 82, 81, 61, 62, 83, 82, 63, 64, 85, 84, 64, 65, 86, 85, 65, 66, 87, 86, 66, 67, 88, 87, 67, 68, 89, 88, 68, 69, 90, 89, 69, 70, 91, 90, 70, 71, 92, 91, 71, 72, 93, 92, 72, 73, 94, 93, 73, 74, 95, 94, 74, 75, 96, 95, 75, 76, 97, 96, 76, 77, 98, 97, 77, 78, 99, 98, 78, 79, 100, 99, 79, 80, 101, 100, 80, 81, 102, 101, 81, 82, 103, 102, 82, 83, 104, 103, 84, 85, 106, 105, 85, 86, 107, 106, 86, 87, 108, 107, 87, 88, 109, 108, 88, 89, 110, 109, 89, 90, 111, 110, 90, 91, 112, 111, 91, 92, 113, 112, 92, 93, 114, 113, 93, 94, 115, 114, 94, 95, 116, 115, 95, 96, 117, 116, 96, 97, 118, 117, 97, 98, 119, 118, 98, 99, 120, 119, 99, 100, 121, 120, 100, 101, 122, 121, 101, 102, 123, 122, 102, 103, 124, 123, 103, 104, 125, 124, 105, 106, 127, 126, 106, 107, 128, 127, 107, 108, 129, 128, 108, 109, 130, 129, 109, 110, 131, 130, 110, 111, 132, 131, 111, 112, 133, 132, 112, 113, 134, 133, 113, 114, 135, 134, 114, 115, 136, 135, 115, 116, 137, 136, 116, 117, 138, 137, 117, 118, 139, 138, 118, 119, 140, 139, 119, 120, 141, 140, 120, 121, 142, 141, 121, 122, 143, 142, 122, 123, 144, 143, 123, 124, 145, 144, 124, 125, 146, 145, 126, 127, 148, 147, 127, 128, 149, 148, 128, 129, 150, 149, 129, 130, 151, 150, 130, 131, 152, 151, 131, 132, 153, 152, 132, 133, 154, 153, 133, 134, 155, 154, 134, 135, 156, 155, 135, 136, 157, 156, 136, 137, 158, 157, 137, 138, 159, 158, 138, 139, 160, 159, 139, 140, 161, 160, 140, 141, 162, 161, 141, 142, 163, 162, 142, 143, 164, 163, 143, 144, 165, 164, 144, 145, 166, 165, 145, 146, 167, 166, 147, 148, 169, 168, 148, 149, 170, 169, 149, 150, 171, 170, 150, 151, 172, 171, 151, 152, 173, 172, 152, 153, 174, 173, 153, 154, 175, 174, 154, 155, 176, 175, 155, 156, 177, 176, 156, 157, 178, 177, 157, 158, 179, 178, 158, 159, 180, 179, 159, 160, 181, 180, 160, 161, 182, 181, 161, 162, 183, 182, 162, 163, 184, 183, 163, 164, 185, 184, 164, 165, 186, 185, 165, 166, 187, 186, 166, 167, 188, 187, 168, 169, 190, 189, 169, 170, 191, 190, 170, 171, 192, 191, 171, 172, 193, 192, 172, 173, 194, 193, 173, 174, 195, 194, 174, 175, 196, 195, 175, 176, 197, 196, 176, 177, 198, 197, 177, 178, 199, 198, 178, 179, 200, 199, 179, 180, 201, 200, 180, 181, 202, 201, 181, 182, 203, 202, 182, 183, 204, 203, 183, 184, 205, 204, 184, 185, 206, 205, 185, 186, 207, 206, 186, 187, 208, 207, 187, 188, 209, 208, 189, 190, 211, 210, 190, 191, 212, 211, 191, 192, 213, 212, 192, 193, 214, 213, 193, 194, 215, 214, 194, 195, 216, 215, 195, 196, 217, 216, 196, 197, 218, 217, 197, 198, 219, 218, 198, 199, 220, 219, 199, 200, 221, 220, 200, 201, 222, 221, 201, 202, 223, 222, 202, 203, 224, 223, 203, 204, 225, 224, 204, 205, 226, 225, 205, 206, 227, 226, 206, 207, 228, 227, 207, 208, 229, 228, 208, 209, 230, 229, 210, 211, 232, 231, 211, 212, 233, 232, 212, 213, 234, 233, 213, 214, 235, 234, 214, 215, 236, 235, 215, 216, 237, 236, 216, 217, 238, 237, 217, 218, 239, 238, 218, 219, 240, 239, 219, 220, 241, 240, 220, 221, 242, 241, 221, 222, 243, 242, 222, 223, 244, 243, 223, 224, 245, 244, 224, 225, 246, 245, 225, 226, 247, 246, 226, 227, 248, 247, 227, 228, 249, 248, 228, 229, 250, 249, 229, 230, 251, 250, 231, 232, 253, 252, 232, 233, 254, 253, 233, 234, 255, 254, 234, 235, 256, 255, 235, 236, 257, 256, 236, 237, 258, 257, 237, 238, 259, 258, 238, 239, 260, 259, 239, 240, 261, 260, 240, 241, 262, 261, 241, 242, 263, 262, 242, 243, 264, 263, 243, 244, 265, 264, 244, 245, 266, 265, 245, 246, 267, 266, 246, 247, 268, 267, 247, 248, 269, 268, 248, 249, 270, 269, 249, 250, 271, 270, 250, 251, 272, 271, 252, 253, 274, 273, 253, 254, 275, 274, 254, 255, 276, 275, 255, 256, 277, 276, 256, 257, 278, 277, 257, 258, 279, 278, 258, 259, 280, 279, 259, 260, 281, 280, 260, 261, 282, 281, 261, 262, 283, 282, 262, 263, 284, 283, 263, 264, 285, 284, 264, 265, 286, 285, 265, 266, 287, 286, 266, 267, 288, 287, 267, 268, 289, 288, 268, 269, 290, 289, 269, 270, 291, 290, 270, 271, 292, 291, 271, 272, 293, 292, 273, 274, 295, 294, 274, 275, 296, 295, 275, 276, 297, 296, 276, 277, 298, 297, 277, 278, 299, 298, 278, 279, 300, 299, 279, 280, 301, 300, 280, 281, 302, 301, 281, 282, 303, 302, 282, 283, 304, 303, 283, 284, 305, 304, 284, 285, 306, 305, 285, 286, 307, 306, 286, 287, 308, 307, 287, 288, 309, 308, 288, 289, 310, 309, 289, 290, 311, 310, 290, 291, 312, 311, 291, 292, 313, 312, 292, 293, 314, 313, 294, 295, 316, 315, 295, 296, 317, 316, 296, 297, 318, 317, 297, 298, 319, 318, 298, 299, 320, 319, 299, 300, 321, 320, 300, 301, 322, 321, 301, 302, 323, 322, 302, 303, 324, 323, 303, 304, 325, 324, 304, 305, 326, 325, 305, 306, 327, 326, 306, 307, 328, 327, 307, 308, 329, 328, 308, 309, 330, 329, 309, 310, 331, 330, 310, 311, 332, 331, 311, 312, 333, 332, 312, 313, 334, 333, 313, 314, 335, 334, 315, 316, 337, 336, 316, 317, 338, 337, 317, 318, 339, 338, 318, 319, 340, 339, 319, 320, 341, 340, 320, 321, 342, 341, 321, 322, 343, 342, 322, 323, 344, 343, 323, 324, 345, 344, 324, 325, 346, 345, 325, 326, 347, 346, 326, 327, 348, 347, 327, 328, 349, 348, 328, 329, 350, 349, 329, 330, 351, 350, 330, 331, 352, 351, 331, 332, 353, 352, 332, 333, 354, 353, 333, 334, 355, 354, 334, 335, 356, 355, 336, 337, 358, 357, 337, 338, 359, 358, 338, 339, 360, 359, 339, 340, 361, 360, 340, 341, 362, 361, 341, 342, 363, 362, 342, 343, 364, 363, 343, 344, 365, 364, 344, 345, 366, 365, 345, 346, 367, 366, 346, 347, 368, 367, 347, 348, 369, 368, 348, 349, 370, 369, 349, 350, 371, 370, 350, 351, 372, 371, 351, 352, 373, 372, 352, 353, 374, 373, 353, 354, 375, 374, 354, 355, 376, 375, 355, 356, 377, 376, 357, 358, 379, 378, 358, 359, 380, 379, 359, 360, 381, 380, 360, 361, 382, 381, 361, 362, 383, 382, 362, 363, 384, 383, 363, 364, 385, 384, 364, 365, 386, 385, 365, 366, 387, 386, 366, 367, 388, 387, 367, 368, 389, 388, 368, 369, 390, 389, 369, 370, 391, 390, 370, 371, 392, 391, 371, 372, 393, 392, 372, 373, 394, 393, 373, 374, 395, 394, 374, 375, 396, 395, 375, 376, 397, 396, 376, 377, 398, 397, 1, 0, 399, 2, 1, 400, 3, 2, 401, 4, 3, 402, 5, 4, 403, 6, 5, 404, 7, 6, 405, 8, 7, 406, 9, 8, 407, 10, 9, 408, 11, 10, 409, 12, 11, 410, 13, 12, 411, 14, 13, 412, 15, 14, 413, 16, 15, 414, 17, 16, 415, 18, 17, 416, 19, 18, 417, 20, 19, 418, 378, 379, 419, 379, 380, 420, 380, 381, 421, 381, 382, 422, 382, 383, 423, 383, 384, 424, 384, 385, 425, 385, 386, 426, 386, 387, 427, 387, 388, 428, 388, 389, 429, 389, 390, 430, 390, 391, 431, 391, 392, 432, 392, 393, 433, 393, 394, 434, 394, 395, 435, 395, 396, 436, 396, 397, 437, 397, 398, 438] - token visibility = "inherited" + ) + texCoord2f[] primvars:st = [(0, 0.05), (0.05, 0.05), (0.1, 0.05), (0.15, 0.05), (0.2, 0.05), (0.25, 0.05), (0.3, 0.05), (0.35000002, 0.05), (0.40000004, 0.05), (0.45000005, 0.05), (0.50000006, 0.05), (0.5500001, 0.05), (0.6000001, 0.05), (0.6500001, 0.05), (0.7000001, 0.05), (0.7500001, 0.05), (0.80000013, 0.05), (0.85000014, 0.05), (0.90000015, 0.05), (0.95000017, 0.05), (1.0000001, 0.05), (0, 0.1), (0.05, 0.1), (0.1, 0.1), (0.15, 0.1), (0.2, 0.1), (0.25, 0.1), (0.3, 0.1), (0.35000002, 0.1), (0.40000004, 0.1), (0.45000005, 0.1), (0.50000006, 0.1), (0.5500001, 0.1), (0.6000001, 0.1), (0.6500001, 0.1), (0.7000001, 0.1), (0.7500001, 0.1), (0.80000013, 0.1), (0.85000014, 0.1), (0.90000015, 0.1), (0.95000017, 0.1), (1.0000001, 0.1), (0, 0.15), (0.05, 0.15), (0.1, 0.15), (0.15, 0.15), (0.2, 0.15), (0.25, 0.15), (0.3, 0.15), (0.35000002, 0.15), (0.40000004, 0.15), (0.45000005, 0.15), (0.50000006, 0.15), (0.5500001, 0.15), (0.6000001, 0.15), (0.6500001, 0.15), (0.7000001, 0.15), (0.7500001, 0.15), (0.80000013, 0.15), (0.85000014, 0.15), (0.90000015, 0.15), (0.95000017, 0.15), (1.0000001, 0.15), (0, 0.2), (0.05, 0.2), (0.1, 0.2), (0.15, 0.2), (0.2, 0.2), (0.25, 0.2), (0.3, 0.2), (0.35000002, 0.2), (0.40000004, 0.2), (0.45000005, 0.2), (0.50000006, 0.2), (0.5500001, 0.2), (0.6000001, 0.2), (0.6500001, 0.2), (0.7000001, 0.2), (0.7500001, 0.2), (0.80000013, 0.2), (0.85000014, 0.2), (0.90000015, 0.2), (0.95000017, 0.2), (1.0000001, 0.2), (0, 0.25), (0.05, 0.25), (0.1, 0.25), (0.15, 0.25), (0.2, 0.25), (0.25, 0.25), (0.3, 0.25), (0.35000002, 0.25), (0.40000004, 0.25), (0.45000005, 0.25), (0.50000006, 0.25), (0.5500001, 0.25), (0.6000001, 0.25), (0.6500001, 0.25), (0.7000001, 0.25), (0.7500001, 0.25), (0.80000013, 0.25), (0.85000014, 0.25), (0.90000015, 0.25), (0.95000017, 0.25), (1.0000001, 0.25), (0, 0.3), (0.05, 0.3), (0.1, 0.3), (0.15, 0.3), (0.2, 0.3), (0.25, 0.3), (0.3, 0.3), (0.35000002, 0.3), (0.40000004, 0.3), (0.45000005, 0.3), (0.50000006, 0.3), (0.5500001, 0.3), (0.6000001, 0.3), (0.6500001, 0.3), (0.7000001, 0.3), (0.7500001, 0.3), (0.80000013, 0.3), (0.85000014, 0.3), (0.90000015, 0.3), (0.95000017, 0.3), (1.0000001, 0.3), (0, 0.35000002), (0.05, 0.35000002), (0.1, 0.35000002), (0.15, 0.35000002), (0.2, 0.35000002), (0.25, 0.35000002), (0.3, 0.35000002), (0.35000002, 0.35000002), (0.40000004, 0.35000002), (0.45000005, 0.35000002), (0.50000006, 0.35000002), (0.5500001, 0.35000002), (0.6000001, 0.35000002), (0.6500001, 0.35000002), (0.7000001, 0.35000002), (0.7500001, 0.35000002), (0.80000013, 0.35000002), (0.85000014, 0.35000002), (0.90000015, 0.35000002), (0.95000017, 0.35000002), (1.0000001, 0.35000002), (0, 0.40000004), (0.05, 0.40000004), (0.1, 0.40000004), (0.15, 0.40000004), (0.2, 0.40000004), (0.25, 0.40000004), (0.3, 0.40000004), (0.35000002, 0.40000004), (0.40000004, 0.40000004), (0.45000005, 0.40000004), (0.50000006, 0.40000004), (0.5500001, 0.40000004), (0.6000001, 0.40000004), (0.6500001, 0.40000004), (0.7000001, 0.40000004), (0.7500001, 0.40000004), (0.80000013, 0.40000004), (0.85000014, 0.40000004), (0.90000015, 0.40000004), (0.95000017, 0.40000004), (1.0000001, 0.40000004), (0, 0.45000005), (0.05, 0.45000005), (0.1, 0.45000005), (0.15, 0.45000005), (0.2, 0.45000005), (0.25, 0.45000005), (0.3, 0.45000005), (0.35000002, 0.45000005), (0.40000004, 0.45000005), (0.45000005, 0.45000005), (0.50000006, 0.45000005), (0.5500001, 0.45000005), (0.6000001, 0.45000005), (0.6500001, 0.45000005), (0.7000001, 0.45000005), (0.7500001, 0.45000005), (0.80000013, 0.45000005), (0.85000014, 0.45000005), (0.90000015, 0.45000005), (0.95000017, 0.45000005), (1.0000001, 0.45000005), (0, 0.50000006), (0.05, 0.50000006), (0.1, 0.50000006), (0.15, 0.50000006), (0.2, 0.50000006), (0.25, 0.50000006), (0.3, 0.50000006), (0.35000002, 0.50000006), (0.40000004, 0.50000006), (0.45000005, 0.50000006), (0.50000006, 0.50000006), (0.5500001, 0.50000006), (0.6000001, 0.50000006), (0.6500001, 0.50000006), (0.7000001, 0.50000006), (0.7500001, 0.50000006), (0.80000013, 0.50000006), (0.85000014, 0.50000006), (0.90000015, 0.50000006), (0.95000017, 0.50000006), (1.0000001, 0.50000006), (0, 0.5500001), (0.05, 0.5500001), (0.1, 0.5500001), (0.15, 0.5500001), (0.2, 0.5500001), (0.25, 0.5500001), (0.3, 0.5500001), (0.35000002, 0.5500001), (0.40000004, 0.5500001), (0.45000005, 0.5500001), (0.50000006, 0.5500001), (0.5500001, 0.5500001), (0.6000001, 0.5500001), (0.6500001, 0.5500001), (0.7000001, 0.5500001), (0.7500001, 0.5500001), (0.80000013, 0.5500001), (0.85000014, 0.5500001), (0.90000015, 0.5500001), (0.95000017, 0.5500001), (1.0000001, 0.5500001), (0, 0.6000001), (0.05, 0.6000001), (0.1, 0.6000001), (0.15, 0.6000001), (0.2, 0.6000001), (0.25, 0.6000001), (0.3, 0.6000001), (0.35000002, 0.6000001), (0.40000004, 0.6000001), (0.45000005, 0.6000001), (0.50000006, 0.6000001), (0.5500001, 0.6000001), (0.6000001, 0.6000001), (0.6500001, 0.6000001), (0.7000001, 0.6000001), (0.7500001, 0.6000001), (0.80000013, 0.6000001), (0.85000014, 0.6000001), (0.90000015, 0.6000001), (0.95000017, 0.6000001), (1.0000001, 0.6000001), (0, 0.6500001), (0.05, 0.6500001), (0.1, 0.6500001), (0.15, 0.6500001), (0.2, 0.6500001), (0.25, 0.6500001), (0.3, 0.6500001), (0.35000002, 0.6500001), (0.40000004, 0.6500001), (0.45000005, 0.6500001), (0.50000006, 0.6500001), (0.5500001, 0.6500001), (0.6000001, 0.6500001), (0.6500001, 0.6500001), (0.7000001, 0.6500001), (0.7500001, 0.6500001), (0.80000013, 0.6500001), (0.85000014, 0.6500001), (0.90000015, 0.6500001), (0.95000017, 0.6500001), (1.0000001, 0.6500001), (0, 0.7000001), (0.05, 0.7000001), (0.1, 0.7000001), (0.15, 0.7000001), (0.2, 0.7000001), (0.25, 0.7000001), (0.3, 0.7000001), (0.35000002, 0.7000001), (0.40000004, 0.7000001), (0.45000005, 0.7000001), (0.50000006, 0.7000001), (0.5500001, 0.7000001), (0.6000001, 0.7000001), (0.6500001, 0.7000001), (0.7000001, 0.7000001), (0.7500001, 0.7000001), (0.80000013, 0.7000001), (0.85000014, 0.7000001), (0.90000015, 0.7000001), (0.95000017, 0.7000001), (1.0000001, 0.7000001), (0, 0.7500001), (0.05, 0.7500001), (0.1, 0.7500001), (0.15, 0.7500001), (0.2, 0.7500001), (0.25, 0.7500001), (0.3, 0.7500001), (0.35000002, 0.7500001), (0.40000004, 0.7500001), (0.45000005, 0.7500001), (0.50000006, 0.7500001), (0.5500001, 0.7500001), (0.6000001, 0.7500001), (0.6500001, 0.7500001), (0.7000001, 0.7500001), (0.7500001, 0.7500001), (0.80000013, 0.7500001), (0.85000014, 0.7500001), (0.90000015, 0.7500001), (0.95000017, 0.7500001), (1.0000001, 0.7500001), (0, 0.80000013), (0.05, 0.80000013), (0.1, 0.80000013), (0.15, 0.80000013), (0.2, 0.80000013), (0.25, 0.80000013), (0.3, 0.80000013), (0.35000002, 0.80000013), (0.40000004, 0.80000013), (0.45000005, 0.80000013), (0.50000006, 0.80000013), (0.5500001, 0.80000013), (0.6000001, 0.80000013), (0.6500001, 0.80000013), (0.7000001, 0.80000013), (0.7500001, 0.80000013), (0.80000013, 0.80000013), (0.85000014, 0.80000013), (0.90000015, 0.80000013), (0.95000017, 0.80000013), (1.0000001, 0.80000013), (0, 0.85000014), (0.05, 0.85000014), (0.1, 0.85000014), (0.15, 0.85000014), (0.2, 0.85000014), (0.25, 0.85000014), (0.3, 0.85000014), (0.35000002, 0.85000014), (0.40000004, 0.85000014), (0.45000005, 0.85000014), (0.50000006, 0.85000014), (0.5500001, 0.85000014), (0.6000001, 0.85000014), (0.6500001, 0.85000014), (0.7000001, 0.85000014), (0.7500001, 0.85000014), (0.80000013, 0.85000014), (0.85000014, 0.85000014), (0.90000015, 0.85000014), (0.95000017, 0.85000014), (1.0000001, 0.85000014), (0, 0.90000015), (0.05, 0.90000015), (0.1, 0.90000015), (0.15, 0.90000015), (0.2, 0.90000015), (0.25, 0.90000015), (0.3, 0.90000015), (0.35000002, 0.90000015), (0.40000004, 0.90000015), (0.45000005, 0.90000015), (0.50000006, 0.90000015), (0.5500001, 0.90000015), (0.6000001, 0.90000015), (0.6500001, 0.90000015), (0.7000001, 0.90000015), (0.7500001, 0.90000015), (0.80000013, 0.90000015), (0.85000014, 0.90000015), (0.90000015, 0.90000015), (0.95000017, 0.90000015), (1.0000001, 0.90000015), (0, 0.95000017), (0.05, 0.95000017), (0.1, 0.95000017), (0.15, 0.95000017), (0.2, 0.95000017), (0.25, 0.95000017), (0.3, 0.95000017), (0.35000002, 0.95000017), (0.40000004, 0.95000017), (0.45000005, 0.95000017), (0.50000006, 0.95000017), (0.5500001, 0.95000017), (0.6000001, 0.95000017), (0.6500001, 0.95000017), (0.7000001, 0.95000017), (0.7500001, 0.95000017), (0.80000013, 0.95000017), (0.85000014, 0.95000017), (0.90000015, 0.95000017), (0.95000017, 0.95000017), (1.0000001, 0.95000017), (0.025, 0), (0.075, 0), (0.125, 0), (0.17500001, 0), (0.22500001, 0), (0.275, 0), (0.32500002, 0), (0.375, 0), (0.425, 0), (0.47500002, 0), (0.525, 0), (0.575, 0), (0.625, 0), (0.675, 0), (0.72499996, 0), (0.775, 0), (0.825, 0), (0.875, 0), (0.925, 0), (0.97499996, 0), (0.025, 1), (0.075, 1), (0.125, 1), (0.17500001, 1), (0.22500001, 1), (0.275, 1), (0.32500002, 1), (0.375, 1), (0.425, 1), (0.47500002, 1), (0.525, 1), (0.575, 1), (0.625, 1), (0.675, 1), (0.72499996, 1), (0.775, 1), (0.825, 1), (0.875, 1), (0.925, 1), (0.97499996, 1)] ( + customData = { + dictionary Maya = { + token name = "map1" + } + } + interpolation = "faceVarying" + ) + int[] primvars:st:indices = [0, 1, 22, 21, 1, 2, 23, 22, 2, 3, 24, 23, 3, 4, 25, 24, 4, 5, 26, 25, 5, 6, 27, 26, 6, 7, 28, 27, 7, 8, 29, 28, 8, 9, 30, 29, 9, 10, 31, 30, 10, 11, 32, 31, 11, 12, 33, 32, 12, 13, 34, 33, 13, 14, 35, 34, 14, 15, 36, 35, 15, 16, 37, 36, 16, 17, 38, 37, 17, 18, 39, 38, 18, 19, 40, 39, 19, 20, 41, 40, 21, 22, 43, 42, 22, 23, 44, 43, 23, 24, 45, 44, 24, 25, 46, 45, 25, 26, 47, 46, 26, 27, 48, 47, 27, 28, 49, 48, 28, 29, 50, 49, 29, 30, 51, 50, 30, 31, 52, 51, 31, 32, 53, 52, 32, 33, 54, 53, 33, 34, 55, 54, 34, 35, 56, 55, 35, 36, 57, 56, 36, 37, 58, 57, 37, 38, 59, 58, 38, 39, 60, 59, 39, 40, 61, 60, 40, 41, 62, 61, 42, 43, 64, 63, 43, 44, 65, 64, 44, 45, 66, 65, 45, 46, 67, 66, 46, 47, 68, 67, 47, 48, 69, 68, 48, 49, 70, 69, 49, 50, 71, 70, 50, 51, 72, 71, 51, 52, 73, 72, 52, 53, 74, 73, 53, 54, 75, 74, 54, 55, 76, 75, 55, 56, 77, 76, 56, 57, 78, 77, 57, 58, 79, 78, 58, 59, 80, 79, 59, 60, 81, 80, 60, 61, 82, 81, 61, 62, 83, 82, 63, 64, 85, 84, 64, 65, 86, 85, 65, 66, 87, 86, 66, 67, 88, 87, 67, 68, 89, 88, 68, 69, 90, 89, 69, 70, 91, 90, 70, 71, 92, 91, 71, 72, 93, 92, 72, 73, 94, 93, 73, 74, 95, 94, 74, 75, 96, 95, 75, 76, 97, 96, 76, 77, 98, 97, 77, 78, 99, 98, 78, 79, 100, 99, 79, 80, 101, 100, 80, 81, 102, 101, 81, 82, 103, 102, 82, 83, 104, 103, 84, 85, 106, 105, 85, 86, 107, 106, 86, 87, 108, 107, 87, 88, 109, 108, 88, 89, 110, 109, 89, 90, 111, 110, 90, 91, 112, 111, 91, 92, 113, 112, 92, 93, 114, 113, 93, 94, 115, 114, 94, 95, 116, 115, 95, 96, 117, 116, 96, 97, 118, 117, 97, 98, 119, 118, 98, 99, 120, 119, 99, 100, 121, 120, 100, 101, 122, 121, 101, 102, 123, 122, 102, 103, 124, 123, 103, 104, 125, 124, 105, 106, 127, 126, 106, 107, 128, 127, 107, 108, 129, 128, 108, 109, 130, 129, 109, 110, 131, 130, 110, 111, 132, 131, 111, 112, 133, 132, 112, 113, 134, 133, 113, 114, 135, 134, 114, 115, 136, 135, 115, 116, 137, 136, 116, 117, 138, 137, 117, 118, 139, 138, 118, 119, 140, 139, 119, 120, 141, 140, 120, 121, 142, 141, 121, 122, 143, 142, 122, 123, 144, 143, 123, 124, 145, 144, 124, 125, 146, 145, 126, 127, 148, 147, 127, 128, 149, 148, 128, 129, 150, 149, 129, 130, 151, 150, 130, 131, 152, 151, 131, 132, 153, 152, 132, 133, 154, 153, 133, 134, 155, 154, 134, 135, 156, 155, 135, 136, 157, 156, 136, 137, 158, 157, 137, 138, 159, 158, 138, 139, 160, 159, 139, 140, 161, 160, 140, 141, 162, 161, 141, 142, 163, 162, 142, 143, 164, 163, 143, 144, 165, 164, 144, 145, 166, 165, 145, 146, 167, 166, 147, 148, 169, 168, 148, 149, 170, 169, 149, 150, 171, 170, 150, 151, 172, 171, 151, 152, 173, 172, 152, 153, 174, 173, 153, 154, 175, 174, 154, 155, 176, 175, 155, 156, 177, 176, 156, 157, 178, 177, 157, 158, 179, 178, 158, 159, 180, 179, 159, 160, 181, 180, 160, 161, 182, 181, 161, 162, 183, 182, 162, 163, 184, 183, 163, 164, 185, 184, 164, 165, 186, 185, 165, 166, 187, 186, 166, 167, 188, 187, 168, 169, 190, 189, 169, 170, 191, 190, 170, 171, 192, 191, 171, 172, 193, 192, 172, 173, 194, 193, 173, 174, 195, 194, 174, 175, 196, 195, 175, 176, 197, 196, 176, 177, 198, 197, 177, 178, 199, 198, 178, 179, 200, 199, 179, 180, 201, 200, 180, 181, 202, 201, 181, 182, 203, 202, 182, 183, 204, 203, 183, 184, 205, 204, 184, 185, 206, 205, 185, 186, 207, 206, 186, 187, 208, 207, 187, 188, 209, 208, 189, 190, 211, 210, 190, 191, 212, 211, 191, 192, 213, 212, 192, 193, 214, 213, 193, 194, 215, 214, 194, 195, 216, 215, 195, 196, 217, 216, 196, 197, 218, 217, 197, 198, 219, 218, 198, 199, 220, 219, 199, 200, 221, 220, 200, 201, 222, 221, 201, 202, 223, 222, 202, 203, 224, 223, 203, 204, 225, 224, 204, 205, 226, 225, 205, 206, 227, 226, 206, 207, 228, 227, 207, 208, 229, 228, 208, 209, 230, 229, 210, 211, 232, 231, 211, 212, 233, 232, 212, 213, 234, 233, 213, 214, 235, 234, 214, 215, 236, 235, 215, 216, 237, 236, 216, 217, 238, 237, 217, 218, 239, 238, 218, 219, 240, 239, 219, 220, 241, 240, 220, 221, 242, 241, 221, 222, 243, 242, 222, 223, 244, 243, 223, 224, 245, 244, 224, 225, 246, 245, 225, 226, 247, 246, 226, 227, 248, 247, 227, 228, 249, 248, 228, 229, 250, 249, 229, 230, 251, 250, 231, 232, 253, 252, 232, 233, 254, 253, 233, 234, 255, 254, 234, 235, 256, 255, 235, 236, 257, 256, 236, 237, 258, 257, 237, 238, 259, 258, 238, 239, 260, 259, 239, 240, 261, 260, 240, 241, 262, 261, 241, 242, 263, 262, 242, 243, 264, 263, 243, 244, 265, 264, 244, 245, 266, 265, 245, 246, 267, 266, 246, 247, 268, 267, 247, 248, 269, 268, 248, 249, 270, 269, 249, 250, 271, 270, 250, 251, 272, 271, 252, 253, 274, 273, 253, 254, 275, 274, 254, 255, 276, 275, 255, 256, 277, 276, 256, 257, 278, 277, 257, 258, 279, 278, 258, 259, 280, 279, 259, 260, 281, 280, 260, 261, 282, 281, 261, 262, 283, 282, 262, 263, 284, 283, 263, 264, 285, 284, 264, 265, 286, 285, 265, 266, 287, 286, 266, 267, 288, 287, 267, 268, 289, 288, 268, 269, 290, 289, 269, 270, 291, 290, 270, 271, 292, 291, 271, 272, 293, 292, 273, 274, 295, 294, 274, 275, 296, 295, 275, 276, 297, 296, 276, 277, 298, 297, 277, 278, 299, 298, 278, 279, 300, 299, 279, 280, 301, 300, 280, 281, 302, 301, 281, 282, 303, 302, 282, 283, 304, 303, 283, 284, 305, 304, 284, 285, 306, 305, 285, 286, 307, 306, 286, 287, 308, 307, 287, 288, 309, 308, 288, 289, 310, 309, 289, 290, 311, 310, 290, 291, 312, 311, 291, 292, 313, 312, 292, 293, 314, 313, 294, 295, 316, 315, 295, 296, 317, 316, 296, 297, 318, 317, 297, 298, 319, 318, 298, 299, 320, 319, 299, 300, 321, 320, 300, 301, 322, 321, 301, 302, 323, 322, 302, 303, 324, 323, 303, 304, 325, 324, 304, 305, 326, 325, 305, 306, 327, 326, 306, 307, 328, 327, 307, 308, 329, 328, 308, 309, 330, 329, 309, 310, 331, 330, 310, 311, 332, 331, 311, 312, 333, 332, 312, 313, 334, 333, 313, 314, 335, 334, 315, 316, 337, 336, 316, 317, 338, 337, 317, 318, 339, 338, 318, 319, 340, 339, 319, 320, 341, 340, 320, 321, 342, 341, 321, 322, 343, 342, 322, 323, 344, 343, 323, 324, 345, 344, 324, 325, 346, 345, 325, 326, 347, 346, 326, 327, 348, 347, 327, 328, 349, 348, 328, 329, 350, 349, 329, 330, 351, 350, 330, 331, 352, 351, 331, 332, 353, 352, 332, 333, 354, 353, 333, 334, 355, 354, 334, 335, 356, 355, 336, 337, 358, 357, 337, 338, 359, 358, 338, 339, 360, 359, 339, 340, 361, 360, 340, 341, 362, 361, 341, 342, 363, 362, 342, 343, 364, 363, 343, 344, 365, 364, 344, 345, 366, 365, 345, 346, 367, 366, 346, 347, 368, 367, 347, 348, 369, 368, 348, 349, 370, 369, 349, 350, 371, 370, 350, 351, 372, 371, 351, 352, 373, 372, 352, 353, 374, 373, 353, 354, 375, 374, 354, 355, 376, 375, 355, 356, 377, 376, 357, 358, 379, 378, 358, 359, 380, 379, 359, 360, 381, 380, 360, 361, 382, 381, 361, 362, 383, 382, 362, 363, 384, 383, 363, 364, 385, 384, 364, 365, 386, 385, 365, 366, 387, 386, 366, 367, 388, 387, 367, 368, 389, 388, 368, 369, 390, 389, 369, 370, 391, 390, 370, 371, 392, 391, 371, 372, 393, 392, 372, 373, 394, 393, 373, 374, 395, 394, 374, 375, 396, 395, 375, 376, 397, 396, 376, 377, 398, 397, 1, 0, 399, 2, 1, 400, 3, 2, 401, 4, 3, 402, 5, 4, 403, 6, 5, 404, 7, 6, 405, 8, 7, 406, 9, 8, 407, 10, 9, 408, 11, 10, 409, 12, 11, 410, 13, 12, 411, 14, 13, 412, 15, 14, 413, 16, 15, 414, 17, 16, 415, 18, 17, 416, 19, 18, 417, 20, 19, 418, 378, 379, 419, 379, 380, 420, 380, 381, 421, 381, 382, 422, 382, 383, 423, 383, 384, 424, 384, 385, 425, 385, 386, 426, 386, 387, 427, 387, 388, 428, 388, 389, 429, 389, 390, 430, 390, 391, 431, 391, 392, 432, 392, 393, 433, 393, 394, 434, 394, 395, 435, 395, 396, 436, 396, 397, 437, 397, 398, 438] + token visibility = "inherited" - def GeomSubset "unnamedTag" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) - { - uniform token elementType = "face" - uniform token familyName = "materialBind" - int[] indices = [103, 104, 105, 106, 107, 108, 109, 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, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239] - rel material:binding = + def GeomSubset "unnamedTag" ( + prepend apiSchemas = ["MaterialBindingAPI"] + ) + { + uniform token elementType = "face" + uniform token familyName = "materialBind" + int[] indices = [103, 104, 105, 106, 107, 108, 109, 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, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239] + rel material:binding = + } } } +def PointInstancer "MeshPointInstancer" +{ + point3f[] positions = [(0, 0, -4), (0, 2, -4)] + int[] protoIndices = [0, 0] + rel prototypes = [ + , + ] +} + def Scope "mtl" { def Material "UsdPreviewSurface1" From ea54d9ea95ec14fe39877cb059f29326ae56d8c5 Mon Sep 17 00:00:00 2001 From: debloip Date: Tue, 2 Jul 2024 12:49:43 -0400 Subject: [PATCH 31/75] HYDRA-1058 : Use anonymous namespace variables instead of static --- lib/mayaHydra/mayaPlugin/plugin.cpp | 42 ++++++++++++++++------------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/lib/mayaHydra/mayaPlugin/plugin.cpp b/lib/mayaHydra/mayaPlugin/plugin.cpp index a80c6c1b6f..fbb3e85b3c 100644 --- a/lib/mayaHydra/mayaPlugin/plugin.cpp +++ b/lib/mayaHydra/mayaPlugin/plugin.cpp @@ -47,13 +47,6 @@ using namespace MayaHydra; -// Don't use smart pointers in the static vector: when Maya is doing its -// default "quick exit" that does not uninitialize plugins, the atexit -// destruction of the overrides in the vector will crash on destruction, -// because Hydra has already destroyed structures these rely on. Simply leak -// the render overrides in this case. -static std::vector gsRenderOverrides; - #if defined(MAYAHYDRA_VERSION) #define STRINGIFY(x) #x #define TOSTRING(x) STRINGIFY(x) @@ -63,6 +56,20 @@ static std::vector gsRenderOverrides; #define PLUGIN_VERSION "Maya-Hydra experimental" #endif +namespace { + const std::string kMayaHydraPluginName = "mayaHydra"; + const std::string kMayaUsdPluginName = "mayaUsdPlugin"; + + // Don't use smart pointers in the static vector: when Maya is doing its + // default "quick exit" that does not uninitialize plugins, the atexit + // destruction of the overrides in the vector will crash on destruction, + // because Hydra has already destroyed structures these rely on. Simply leak + // the render overrides in this case. + std::vector _renderOverrides; + + std::vector _pluginLoadingCallbackIds; +} + void initialize() { Fvp::InitializationParams fvpInitParams; @@ -84,14 +91,12 @@ void finalize() MayaHydra::MayaColorPreferencesTranslator::deleteInstance(); } -static std::vector gsPluginLoadingCallbackIds; - void afterPluginLoadCallback( const MStringArray& strs, void* clientData ) { for (const auto& str : strs) { // If MayaUSD is being loaded, set up our GeomSubsets picking mode UI. // This will re-create the "Select" menu callback if it has been previously torn down. - if (str == "mayaUsdPlugin") { + if (str.asChar() == kMayaUsdPluginName) { MGlobal::executeCommand("if (`exists mayaHydra_GeomSubsetsPickMode_SetupUI`) { mayaHydra_GeomSubsetsPickMode_SetupUI; }"); break; } @@ -107,7 +112,8 @@ void beforePluginUnloadCallback( const MStringArray& strs, void* clientData ) // We also do the same if mayaHydra is about to be unloaded : we can't rely on // the deletion procedure registered through registerUI, as it seems the global // variables tracking our UI elements have been reset at that point for some reason. - if (str == "mayaUsdPlugin" || str == "mayaHydra") { + auto strChar = str.asChar(); + if (strChar == kMayaUsdPluginName || strChar == kMayaHydraPluginName) { MGlobal::executeCommand("mayaHydra_GeomSubsetsPickMode_TeardownUI"); break; } @@ -149,7 +155,7 @@ PLUGIN_EXPORT MStatus initializePlugin(MObject obj) auto mtohRenderer = std::make_unique(desc); MStatus status = renderer->registerOverride(mtohRenderer.get()); if (status == MS::kSuccess) { - gsRenderOverrides.push_back(mtohRenderer.release()); + _renderOverrides.push_back(mtohRenderer.release()); } } } @@ -168,7 +174,7 @@ PLUGIN_EXPORT MStatus initializePlugin(MObject obj) nullptr, &callbackStatus); if (callbackStatus) { - gsPluginLoadingCallbackIds.push_back(callbackId); + _pluginLoadingCallbackIds.push_back(callbackId); } else { ret = MS::kFailure; ret.perror("Error registering plugin loading callback."); @@ -193,20 +199,20 @@ PLUGIN_EXPORT MStatus uninitializePlugin(MObject obj) { finalize(); - for (const auto& callbackId : gsPluginLoadingCallbackIds) { + for (const auto& callbackId : _pluginLoadingCallbackIds) { MSceneMessage::removeCallback(callbackId); } MFnPlugin plugin(obj, "Autodesk", PLUGIN_VERSION, "Any"); MStatus ret = MS::kSuccess; if (auto* renderer = MHWRender::MRenderer::theRenderer()) { - for (unsigned int i = 0; i < gsRenderOverrides.size(); i++) { - renderer->deregisterOverride(gsRenderOverrides[i]); - delete gsRenderOverrides[i]; + for (unsigned int i = 0; i < _renderOverrides.size(); i++) { + renderer->deregisterOverride(_renderOverrides[i]); + delete _renderOverrides[i]; } } - gsRenderOverrides.clear(); + _renderOverrides.clear(); // Clear any registered callbacks MGlobal::executeCommand("callbacks -cc -owner mayaHydra;"); From 0e9e601a5226877394959b5e5aac8b05040d2313 Mon Sep 17 00:00:00 2001 From: debloip Date: Tue, 2 Jul 2024 12:54:35 -0400 Subject: [PATCH 32/75] HYDRA-1058 : Refactor plugin loading callbacks registration --- lib/mayaHydra/mayaPlugin/plugin.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/mayaHydra/mayaPlugin/plugin.cpp b/lib/mayaHydra/mayaPlugin/plugin.cpp index fbb3e85b3c..c9a2d96bfd 100644 --- a/lib/mayaHydra/mayaPlugin/plugin.cpp +++ b/lib/mayaHydra/mayaPlugin/plugin.cpp @@ -181,13 +181,15 @@ PLUGIN_EXPORT MStatus initializePlugin(MObject obj) } }; - registerPluginLoadingCallback(MSceneMessage::Message::kAfterPluginLoad, afterPluginLoadCallback); - if (!ret) { - return ret; - } - registerPluginLoadingCallback(MSceneMessage::Message::kBeforePluginUnload, beforePluginUnloadCallback); - if (!ret) { - return ret; + std::vector> pluginLoadingCallbacks = { + {MSceneMessage::Message::kAfterPluginLoad, afterPluginLoadCallback}, + {MSceneMessage::Message::kBeforePluginUnload, beforePluginUnloadCallback} + }; + for (const auto& pluginLoadingCallback : pluginLoadingCallbacks) { + registerPluginLoadingCallback(pluginLoadingCallback.first, pluginLoadingCallback.second); + if (!ret) { + return ret; + } } initialize(); From 68d0a5519c9355a33cf98d4a634a17d7e40e8880 Mon Sep 17 00:00:00 2001 From: debloip Date: Tue, 2 Jul 2024 13:17:52 -0400 Subject: [PATCH 33/75] HYDRA-1058 : Remove superfluous UI code changes --- scripts/mayaHydra_GeomSubsetsPickMode.mel | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/scripts/mayaHydra_GeomSubsetsPickMode.mel b/scripts/mayaHydra_GeomSubsetsPickMode.mel index 8a61f14ed7..fc3104a9fd 100644 --- a/scripts/mayaHydra_GeomSubsetsPickMode.mel +++ b/scripts/mayaHydra_GeomSubsetsPickMode.mel @@ -114,12 +114,6 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback() { return; } - global string $gMainSelectMenu; // Maya's "Select" menu - $callbackExists = hasMenuCallback($gMainSelectMenu, "mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback"); - if (!$callbackExists) { - return; - } - // If our custom UI elements name is empty, then they do not exist or have been torn down previously, // so create them. Note that we check that all UI elements have empty names : normally they should // always either all have a name and exist, or all have no name and not exist. @@ -140,12 +134,6 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems() { return; } - global string $gMainSelectMenu; // Maya's "Select" menu - $callbackExists = hasMenuCallback($gMainSelectMenu, "mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback"); - if (!$callbackExists) { - return; - } - // Store the current parent menu and change it to the USD selection submenu $prevParent = `setParent -q -menu`; setParent -menu $gMayaUsdSelectModeSubMenu; @@ -154,7 +142,7 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems() { $gMayaHydra_GeomSubsetsPickMode_Divider = `menuItem -divider true -dividerLabel "GeomSubsets (Hydra only)"`; global string $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; - $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup = `radioMenuItemCollection -global true`; + $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup = `radioMenuItemCollection`; global string $gMayaHydra_GeomSubsetsPickMode_RadioButtons[]; $gMayaHydra_GeomSubsetsPickMode_RadioButtons[0] = `menuItem -radioButton on -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetPrimsAndInstances") mayaHydra_GeomSubsetsPickMode_PrimsAndInstances`; $gMayaHydra_GeomSubsetsPickMode_RadioButtons[1] = `menuItem -radioButton off -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetGeomSubsets") mayaHydra_GeomSubsetsPickMode_GeomSubsets`; From 3919d7b26aa3222d7ed72a8608d477c1a3863008 Mon Sep 17 00:00:00 2001 From: debloip Date: Tue, 2 Jul 2024 14:11:15 -0400 Subject: [PATCH 34/75] HYDRA-1058 : Add upper half geom subset sphere scene --- .../UpperHalfGeomSubsetSphere.usda | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetSphere.usda diff --git a/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetSphere.usda b/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetSphere.usda new file mode 100644 index 0000000000..d7795ec22a --- /dev/null +++ b/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetSphere.usda @@ -0,0 +1,54 @@ +#usda 1.0 + +def Mesh "pSphere1" ( + kind = "component" +) +{ + uniform bool doubleSided = 1 + float3[] extent = [(-1.0000002, -1, -1.0000005), (1, 1, 1.0000001)] + 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, 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, 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, 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, 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, 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, 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, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] + int[] faceVertexIndices = [0, 1, 21, 20, 1, 2, 22, 21, 2, 3, 23, 22, 3, 4, 24, 23, 4, 5, 25, 24, 5, 6, 26, 25, 6, 7, 27, 26, 7, 8, 28, 27, 8, 9, 29, 28, 9, 10, 30, 29, 10, 11, 31, 30, 11, 12, 32, 31, 12, 13, 33, 32, 13, 14, 34, 33, 14, 15, 35, 34, 15, 16, 36, 35, 16, 17, 37, 36, 17, 18, 38, 37, 18, 19, 39, 38, 19, 0, 20, 39, 20, 21, 41, 40, 21, 22, 42, 41, 22, 23, 43, 42, 23, 24, 44, 43, 24, 25, 45, 44, 25, 26, 46, 45, 26, 27, 47, 46, 27, 28, 48, 47, 28, 29, 49, 48, 29, 30, 50, 49, 30, 31, 51, 50, 31, 32, 52, 51, 32, 33, 53, 52, 33, 34, 54, 53, 34, 35, 55, 54, 35, 36, 56, 55, 36, 37, 57, 56, 37, 38, 58, 57, 38, 39, 59, 58, 39, 20, 40, 59, 40, 41, 61, 60, 41, 42, 62, 61, 42, 43, 63, 62, 43, 44, 64, 63, 44, 45, 65, 64, 45, 46, 66, 65, 46, 47, 67, 66, 47, 48, 68, 67, 48, 49, 69, 68, 49, 50, 70, 69, 50, 51, 71, 70, 51, 52, 72, 71, 52, 53, 73, 72, 53, 54, 74, 73, 54, 55, 75, 74, 55, 56, 76, 75, 56, 57, 77, 76, 57, 58, 78, 77, 58, 59, 79, 78, 59, 40, 60, 79, 60, 61, 81, 80, 61, 62, 82, 81, 62, 63, 83, 82, 63, 64, 84, 83, 64, 65, 85, 84, 65, 66, 86, 85, 66, 67, 87, 86, 67, 68, 88, 87, 68, 69, 89, 88, 69, 70, 90, 89, 70, 71, 91, 90, 71, 72, 92, 91, 72, 73, 93, 92, 73, 74, 94, 93, 74, 75, 95, 94, 75, 76, 96, 95, 76, 77, 97, 96, 77, 78, 98, 97, 78, 79, 99, 98, 79, 60, 80, 99, 80, 81, 101, 100, 81, 82, 102, 101, 82, 83, 103, 102, 83, 84, 104, 103, 84, 85, 105, 104, 85, 86, 106, 105, 86, 87, 107, 106, 87, 88, 108, 107, 88, 89, 109, 108, 89, 90, 110, 109, 90, 91, 111, 110, 91, 92, 112, 111, 92, 93, 113, 112, 93, 94, 114, 113, 94, 95, 115, 114, 95, 96, 116, 115, 96, 97, 117, 116, 97, 98, 118, 117, 98, 99, 119, 118, 99, 80, 100, 119, 100, 101, 121, 120, 101, 102, 122, 121, 102, 103, 123, 122, 103, 104, 124, 123, 104, 105, 125, 124, 105, 106, 126, 125, 106, 107, 127, 126, 107, 108, 128, 127, 108, 109, 129, 128, 109, 110, 130, 129, 110, 111, 131, 130, 111, 112, 132, 131, 112, 113, 133, 132, 113, 114, 134, 133, 114, 115, 135, 134, 115, 116, 136, 135, 116, 117, 137, 136, 117, 118, 138, 137, 118, 119, 139, 138, 119, 100, 120, 139, 120, 121, 141, 140, 121, 122, 142, 141, 122, 123, 143, 142, 123, 124, 144, 143, 124, 125, 145, 144, 125, 126, 146, 145, 126, 127, 147, 146, 127, 128, 148, 147, 128, 129, 149, 148, 129, 130, 150, 149, 130, 131, 151, 150, 131, 132, 152, 151, 132, 133, 153, 152, 133, 134, 154, 153, 134, 135, 155, 154, 135, 136, 156, 155, 136, 137, 157, 156, 137, 138, 158, 157, 138, 139, 159, 158, 139, 120, 140, 159, 140, 141, 161, 160, 141, 142, 162, 161, 142, 143, 163, 162, 143, 144, 164, 163, 144, 145, 165, 164, 145, 146, 166, 165, 146, 147, 167, 166, 147, 148, 168, 167, 148, 149, 169, 168, 149, 150, 170, 169, 150, 151, 171, 170, 151, 152, 172, 171, 152, 153, 173, 172, 153, 154, 174, 173, 154, 155, 175, 174, 155, 156, 176, 175, 156, 157, 177, 176, 157, 158, 178, 177, 158, 159, 179, 178, 159, 140, 160, 179, 160, 161, 181, 180, 161, 162, 182, 181, 162, 163, 183, 182, 163, 164, 184, 183, 164, 165, 185, 184, 165, 166, 186, 185, 166, 167, 187, 186, 167, 168, 188, 187, 168, 169, 189, 188, 169, 170, 190, 189, 170, 171, 191, 190, 171, 172, 192, 191, 172, 173, 193, 192, 173, 174, 194, 193, 174, 175, 195, 194, 175, 176, 196, 195, 176, 177, 197, 196, 177, 178, 198, 197, 178, 179, 199, 198, 179, 160, 180, 199, 180, 181, 201, 200, 181, 182, 202, 201, 182, 183, 203, 202, 183, 184, 204, 203, 184, 185, 205, 204, 185, 186, 206, 205, 186, 187, 207, 206, 187, 188, 208, 207, 188, 189, 209, 208, 189, 190, 210, 209, 190, 191, 211, 210, 191, 192, 212, 211, 192, 193, 213, 212, 193, 194, 214, 213, 194, 195, 215, 214, 195, 196, 216, 215, 196, 197, 217, 216, 197, 198, 218, 217, 198, 199, 219, 218, 199, 180, 200, 219, 200, 201, 221, 220, 201, 202, 222, 221, 202, 203, 223, 222, 203, 204, 224, 223, 204, 205, 225, 224, 205, 206, 226, 225, 206, 207, 227, 226, 207, 208, 228, 227, 208, 209, 229, 228, 209, 210, 230, 229, 210, 211, 231, 230, 211, 212, 232, 231, 212, 213, 233, 232, 213, 214, 234, 233, 214, 215, 235, 234, 215, 216, 236, 235, 216, 217, 237, 236, 217, 218, 238, 237, 218, 219, 239, 238, 219, 200, 220, 239, 220, 221, 241, 240, 221, 222, 242, 241, 222, 223, 243, 242, 223, 224, 244, 243, 224, 225, 245, 244, 225, 226, 246, 245, 226, 227, 247, 246, 227, 228, 248, 247, 228, 229, 249, 248, 229, 230, 250, 249, 230, 231, 251, 250, 231, 232, 252, 251, 232, 233, 253, 252, 233, 234, 254, 253, 234, 235, 255, 254, 235, 236, 256, 255, 236, 237, 257, 256, 237, 238, 258, 257, 238, 239, 259, 258, 239, 220, 240, 259, 240, 241, 261, 260, 241, 242, 262, 261, 242, 243, 263, 262, 243, 244, 264, 263, 244, 245, 265, 264, 245, 246, 266, 265, 246, 247, 267, 266, 247, 248, 268, 267, 248, 249, 269, 268, 249, 250, 270, 269, 250, 251, 271, 270, 251, 252, 272, 271, 252, 253, 273, 272, 253, 254, 274, 273, 254, 255, 275, 274, 255, 256, 276, 275, 256, 257, 277, 276, 257, 258, 278, 277, 258, 259, 279, 278, 259, 240, 260, 279, 260, 261, 281, 280, 261, 262, 282, 281, 262, 263, 283, 282, 263, 264, 284, 283, 264, 265, 285, 284, 265, 266, 286, 285, 266, 267, 287, 286, 267, 268, 288, 287, 268, 269, 289, 288, 269, 270, 290, 289, 270, 271, 291, 290, 271, 272, 292, 291, 272, 273, 293, 292, 273, 274, 294, 293, 274, 275, 295, 294, 275, 276, 296, 295, 276, 277, 297, 296, 277, 278, 298, 297, 278, 279, 299, 298, 279, 260, 280, 299, 280, 281, 301, 300, 281, 282, 302, 301, 282, 283, 303, 302, 283, 284, 304, 303, 284, 285, 305, 304, 285, 286, 306, 305, 286, 287, 307, 306, 287, 288, 308, 307, 288, 289, 309, 308, 289, 290, 310, 309, 290, 291, 311, 310, 291, 292, 312, 311, 292, 293, 313, 312, 293, 294, 314, 313, 294, 295, 315, 314, 295, 296, 316, 315, 296, 297, 317, 316, 297, 298, 318, 317, 298, 299, 319, 318, 299, 280, 300, 319, 300, 301, 321, 320, 301, 302, 322, 321, 302, 303, 323, 322, 303, 304, 324, 323, 304, 305, 325, 324, 305, 306, 326, 325, 306, 307, 327, 326, 307, 308, 328, 327, 308, 309, 329, 328, 309, 310, 330, 329, 310, 311, 331, 330, 311, 312, 332, 331, 312, 313, 333, 332, 313, 314, 334, 333, 314, 315, 335, 334, 315, 316, 336, 335, 316, 317, 337, 336, 317, 318, 338, 337, 318, 319, 339, 338, 319, 300, 320, 339, 320, 321, 341, 340, 321, 322, 342, 341, 322, 323, 343, 342, 323, 324, 344, 343, 324, 325, 345, 344, 325, 326, 346, 345, 326, 327, 347, 346, 327, 328, 348, 347, 328, 329, 349, 348, 329, 330, 350, 349, 330, 331, 351, 350, 331, 332, 352, 351, 332, 333, 353, 352, 333, 334, 354, 353, 334, 335, 355, 354, 335, 336, 356, 355, 336, 337, 357, 356, 337, 338, 358, 357, 338, 339, 359, 358, 339, 320, 340, 359, 340, 341, 361, 360, 341, 342, 362, 361, 342, 343, 363, 362, 343, 344, 364, 363, 344, 345, 365, 364, 345, 346, 366, 365, 346, 347, 367, 366, 347, 348, 368, 367, 348, 349, 369, 368, 349, 350, 370, 369, 350, 351, 371, 370, 351, 352, 372, 371, 352, 353, 373, 372, 353, 354, 374, 373, 354, 355, 375, 374, 355, 356, 376, 375, 356, 357, 377, 376, 357, 358, 378, 377, 358, 359, 379, 378, 359, 340, 360, 379, 1, 0, 380, 2, 1, 380, 3, 2, 380, 4, 3, 380, 5, 4, 380, 6, 5, 380, 7, 6, 380, 8, 7, 380, 9, 8, 380, 10, 9, 380, 11, 10, 380, 12, 11, 380, 13, 12, 380, 14, 13, 380, 15, 14, 380, 16, 15, 380, 17, 16, 380, 18, 17, 380, 19, 18, 380, 0, 19, 380, 360, 361, 381, 361, 362, 381, 362, 363, 381, 363, 364, 381, 364, 365, 381, 365, 366, 381, 366, 367, 381, 367, 368, 381, 368, 369, 381, 369, 370, 381, 370, 371, 381, 371, 372, 381, 372, 373, 381, 373, 374, 381, 374, 375, 381, 375, 376, 381, 376, 377, 381, 377, 378, 381, 378, 379, 381, 379, 360, 381] + point3f[] points = [(0.14877813, -0.98768836, -0.048340943), (0.12655823, -0.98768836, -0.09194993), (0.09194993, -0.98768836, -0.12655823), (0.048340935, -0.98768836, -0.14877811), (0, -0.98768836, -0.15643455), (-0.048340935, -0.98768836, -0.1487781), (-0.09194992, -0.98768836, -0.1265582), (-0.12655818, -0.98768836, -0.0919499), (-0.14877807, -0.98768836, -0.048340924), (-0.15643452, -0.98768836, 0), (-0.14877807, -0.98768836, 0.048340924), (-0.12655818, -0.98768836, 0.091949895), (-0.091949895, -0.98768836, 0.12655817), (-0.048340924, -0.98768836, 0.14877805), (-4.6621107e-9, -0.98768836, 0.15643449), (0.04834091, -0.98768836, 0.14877804), (0.09194988, -0.98768836, 0.12655815), (0.12655815, -0.98768836, 0.09194989), (0.14877804, -0.98768836, 0.048340913), (0.15643448, -0.98768836, 0), (0.29389283, -0.95105654, -0.095491566), (0.25000018, -0.95105654, -0.18163574), (0.18163574, -0.95105654, -0.25000015), (0.09549155, -0.95105654, -0.2938928), (0, -0.95105654, -0.30901715), (-0.09549155, -0.95105654, -0.29389277), (-0.18163571, -0.95105654, -0.2500001), (-0.2500001, -0.95105654, -0.1816357), (-0.2938927, -0.95105654, -0.09549153), (-0.30901706, -0.95105654, 0), (-0.2938927, -0.95105654, 0.09549153), (-0.25000006, -0.95105654, 0.18163568), (-0.18163568, -0.95105654, 0.25000006), (-0.09549153, -0.95105654, 0.29389268), (-9.209424e-9, -0.95105654, 0.30901703), (0.0954915, -0.95105654, 0.29389265), (0.18163563, -0.95105654, 0.25000003), (0.25, -0.95105654, 0.18163565), (0.29389265, -0.95105654, 0.095491506), (0.309017, -0.95105654, 0), (0.43177092, -0.8910065, -0.14029087), (0.3672863, -0.8910065, -0.2668491), (0.2668491, -0.8910065, -0.36728626), (0.14029086, -0.8910065, -0.43177086), (0, -0.8910065, -0.45399073), (-0.14029086, -0.8910065, -0.43177083), (-0.26684904, -0.8910065, -0.36728618), (-0.36728615, -0.8910065, -0.266849), (-0.43177077, -0.8910065, -0.14029081), (-0.45399064, -0.8910065, 0), (-0.43177077, -0.8910065, 0.14029081), (-0.36728612, -0.8910065, 0.26684898), (-0.26684898, -0.8910065, 0.36728612), (-0.14029081, -0.8910065, 0.4317707), (-1.3529972e-8, -0.8910065, 0.45399058), (0.14029078, -0.8910065, 0.43177068), (0.26684892, -0.8910065, 0.3672861), (0.36728606, -0.8910065, 0.26684895), (0.43177065, -0.8910065, 0.1402908), (0.45399052, -0.8910065, 0), (0.55901736, -0.809017, -0.18163574), (0.47552857, -0.809017, -0.3454917), (0.3454917, -0.809017, -0.47552854), (0.18163572, -0.809017, -0.5590173), (0, -0.809017, -0.58778554), (-0.18163572, -0.809017, -0.55901724), (-0.34549165, -0.809017, -0.47552842), (-0.4755284, -0.809017, -0.3454916), (-0.5590171, -0.809017, -0.18163566), (-0.58778536, -0.809017, 0), (-0.5590171, -0.809017, 0.18163566), (-0.47552836, -0.809017, 0.34549156), (-0.34549156, -0.809017, 0.47552833), (-0.18163566, -0.809017, 0.55901706), (-1.7517365e-8, -0.809017, 0.5877853), (0.18163562, -0.809017, 0.55901706), (0.3454915, -0.809017, 0.4755283), (0.47552827, -0.809017, 0.34549153), (0.559017, -0.809017, 0.18163563), (0.58778524, -0.809017, 0), (0.67249894, -0.70710677, -0.21850814), (0.5720618, -0.70710677, -0.41562718), (0.41562718, -0.70710677, -0.5720617), (0.21850812, -0.70710677, -0.6724989), (0, -0.70710677, -0.7071071), (-0.21850812, -0.70710677, -0.6724988), (-0.4156271, -0.70710677, -0.5720616), (-0.57206154, -0.70710677, -0.41562706), (-0.6724987, -0.70710677, -0.21850805), (-0.70710695, -0.70710677, 0), (-0.6724987, -0.70710677, 0.21850805), (-0.57206154, -0.70710677, 0.415627), (-0.415627, -0.70710677, 0.5720615), (-0.21850805, -0.70710677, 0.6724986), (-2.1073424e-8, -0.70710677, 0.7071068), (0.21850799, -0.70710677, 0.6724986), (0.4156269, -0.70710677, 0.5720614), (0.5720614, -0.70710677, 0.41562697), (0.6724985, -0.70710677, 0.21850802), (0.70710677, -0.70710677, 0), (0.7694214, -0.58778524, -0.25000015), (0.65450895, -0.58778524, -0.47552854), (0.47552854, -0.58778524, -0.6545089), (0.25000012, -0.58778524, -0.7694213), (0, -0.58778524, -0.80901736), (-0.25000012, -0.58778524, -0.7694212), (-0.47552845, -0.58778524, -0.65450877), (-0.6545087, -0.58778524, -0.4755284), (-0.7694211, -0.58778524, -0.25000006), (-0.8090172, -0.58778524, 0), (-0.7694211, -0.58778524, 0.25000006), (-0.65450865, -0.58778524, 0.47552836), (-0.47552836, -0.58778524, 0.6545086), (-0.25000006, -0.58778524, 0.769421), (-2.4110586e-8, -0.58778524, 0.8090171), (0.24999999, -0.58778524, 0.769421), (0.47552827, -0.58778524, 0.65450853), (0.65450853, -0.58778524, 0.4755283), (0.7694209, -0.58778524, 0.25), (0.809017, -0.58778524, 0), (0.8473981, -0.45399052, -0.27533633), (0.7208399, -0.45399052, -0.5237208), (0.5237208, -0.45399052, -0.72083986), (0.2753363, -0.45399052, -0.847398), (0, -0.45399052, -0.89100695), (-0.2753363, -0.45399052, -0.847398), (-0.5237207, -0.45399052, -0.7208397), (-0.7208396, -0.45399052, -0.5237206), (-0.8473978, -0.45399052, -0.2753362), (-0.89100677, -0.45399052, 0), (-0.8473978, -0.45399052, 0.2753362), (-0.7208396, -0.45399052, 0.5237206), (-0.5237206, -0.45399052, 0.72083956), (-0.2753362, -0.45399052, 0.8473977), (-2.6554064e-8, -0.45399052, 0.89100665), (0.27533615, -0.45399052, 0.8473976), (0.5237205, -0.45399052, 0.7208395), (0.72083944, -0.45399052, 0.52372056), (0.84739757, -0.45399052, 0.27533618), (0.8910065, -0.45399052, 0), (0.9045091, -0.30901697, -0.2938928), (0.7694214, -0.30901697, -0.55901736), (0.55901736, -0.30901697, -0.76942134), (0.29389277, -0.30901697, -0.904509), (0, -0.30901697, -0.951057), (-0.29389277, -0.30901697, -0.90450895), (-0.55901724, -0.30901697, -0.7694212), (-0.76942116, -0.30901697, -0.5590172), (-0.90450877, -0.30901697, -0.2938927), (-0.9510568, -0.30901697, 0), (-0.90450877, -0.30901697, 0.2938927), (-0.7694211, -0.30901697, 0.5590171), (-0.5590171, -0.30901697, 0.76942104), (-0.2938927, -0.30901697, 0.90450865), (-2.8343694e-8, -0.30901697, 0.95105666), (0.29389262, -0.30901697, 0.9045086), (0.559017, -0.30901697, 0.769421), (0.7694209, -0.30901697, 0.55901706), (0.90450853, -0.30901697, 0.29389265), (0.95105654, -0.30901697, 0), (0.93934804, -0.15643437, -0.30521268), (0.7990572, -0.15643437, -0.580549), (0.580549, -0.15643437, -0.7990571), (0.30521265, -0.15643437, -0.9393479), (0, -0.15643437, -0.98768884), (-0.30521265, -0.15643437, -0.93934786), (-0.5805489, -0.15643437, -0.79905695), (-0.7990569, -0.15643437, -0.5805488), (-0.9393477, -0.15643437, -0.30521256), (-0.9876886, -0.15643437, 0), (-0.9393477, -0.15643437, 0.30521256), (-0.7990568, -0.15643437, 0.58054876), (-0.58054876, -0.15643437, 0.79905677), (-0.30521256, -0.15643437, 0.93934757), (-2.9435407e-8, -0.15643437, 0.9876885), (0.30521247, -0.15643437, 0.93934757), (0.58054864, -0.15643437, 0.7990567), (0.79905665, -0.15643437, 0.5805487), (0.9393475, -0.15643437, 0.3052125), (0.98768836, -0.15643437, 0), (0.95105714, 0, -0.30901718), (0.80901754, 0, -0.5877856), (0.5877856, 0, -0.8090175), (0.30901715, 0, -0.951057), (0, 0, -1.0000005), (-0.30901715, 0, -0.95105696), (-0.5877855, 0, -0.8090173), (-0.80901724, 0, -0.5877854), (-0.9510568, 0, -0.30901706), (-1.0000002, 0, 0), (-0.9510568, 0, 0.30901706), (-0.8090172, 0, 0.58778536), (-0.58778536, 0, 0.8090171), (-0.30901706, 0, 0.95105666), (-2.9802322e-8, 0, 1.0000001), (0.30901697, 0, 0.9510566), (0.58778524, 0, 0.80901706), (0.809017, 0, 0.5877853), (0.95105654, 0, 0.309017), (1, 0, 0), (0.93934804, 0.15643437, -0.30521268), (0.7990572, 0.15643437, -0.580549), (0.580549, 0.15643437, -0.7990571), (0.30521265, 0.15643437, -0.9393479), (0, 0.15643437, -0.98768884), (-0.30521265, 0.15643437, -0.93934786), (-0.5805489, 0.15643437, -0.79905695), (-0.7990569, 0.15643437, -0.5805488), (-0.9393477, 0.15643437, -0.30521256), (-0.9876886, 0.15643437, 0), (-0.9393477, 0.15643437, 0.30521256), (-0.7990568, 0.15643437, 0.58054876), (-0.58054876, 0.15643437, 0.79905677), (-0.30521256, 0.15643437, 0.93934757), (-2.9435407e-8, 0.15643437, 0.9876885), (0.30521247, 0.15643437, 0.93934757), (0.58054864, 0.15643437, 0.7990567), (0.79905665, 0.15643437, 0.5805487), (0.9393475, 0.15643437, 0.3052125), (0.98768836, 0.15643437, 0), (0.9045091, 0.30901697, -0.2938928), (0.7694214, 0.30901697, -0.55901736), (0.55901736, 0.30901697, -0.76942134), (0.29389277, 0.30901697, -0.904509), (0, 0.30901697, -0.951057), (-0.29389277, 0.30901697, -0.90450895), (-0.55901724, 0.30901697, -0.7694212), (-0.76942116, 0.30901697, -0.5590172), (-0.90450877, 0.30901697, -0.2938927), (-0.9510568, 0.30901697, 0), (-0.90450877, 0.30901697, 0.2938927), (-0.7694211, 0.30901697, 0.5590171), (-0.5590171, 0.30901697, 0.76942104), (-0.2938927, 0.30901697, 0.90450865), (-2.8343694e-8, 0.30901697, 0.95105666), (0.29389262, 0.30901697, 0.9045086), (0.559017, 0.30901697, 0.769421), (0.7694209, 0.30901697, 0.55901706), (0.90450853, 0.30901697, 0.29389265), (0.95105654, 0.30901697, 0), (0.8473981, 0.45399052, -0.27533633), (0.7208399, 0.45399052, -0.5237208), (0.5237208, 0.45399052, -0.72083986), (0.2753363, 0.45399052, -0.847398), (0, 0.45399052, -0.89100695), (-0.2753363, 0.45399052, -0.847398), (-0.5237207, 0.45399052, -0.7208397), (-0.7208396, 0.45399052, -0.5237206), (-0.8473978, 0.45399052, -0.2753362), (-0.89100677, 0.45399052, 0), (-0.8473978, 0.45399052, 0.2753362), (-0.7208396, 0.45399052, 0.5237206), (-0.5237206, 0.45399052, 0.72083956), (-0.2753362, 0.45399052, 0.8473977), (-2.6554064e-8, 0.45399052, 0.89100665), (0.27533615, 0.45399052, 0.8473976), (0.5237205, 0.45399052, 0.7208395), (0.72083944, 0.45399052, 0.52372056), (0.84739757, 0.45399052, 0.27533618), (0.8910065, 0.45399052, 0), (0.7694214, 0.58778524, -0.25000015), (0.65450895, 0.58778524, -0.47552854), (0.47552854, 0.58778524, -0.6545089), (0.25000012, 0.58778524, -0.7694213), (0, 0.58778524, -0.80901736), (-0.25000012, 0.58778524, -0.7694212), (-0.47552845, 0.58778524, -0.65450877), (-0.6545087, 0.58778524, -0.4755284), (-0.7694211, 0.58778524, -0.25000006), (-0.8090172, 0.58778524, 0), (-0.7694211, 0.58778524, 0.25000006), (-0.65450865, 0.58778524, 0.47552836), (-0.47552836, 0.58778524, 0.6545086), (-0.25000006, 0.58778524, 0.769421), (-2.4110586e-8, 0.58778524, 0.8090171), (0.24999999, 0.58778524, 0.769421), (0.47552827, 0.58778524, 0.65450853), (0.65450853, 0.58778524, 0.4755283), (0.7694209, 0.58778524, 0.25), (0.809017, 0.58778524, 0), (0.67249894, 0.70710677, -0.21850814), (0.5720618, 0.70710677, -0.41562718), (0.41562718, 0.70710677, -0.5720617), (0.21850812, 0.70710677, -0.6724989), (0, 0.70710677, -0.7071071), (-0.21850812, 0.70710677, -0.6724988), (-0.4156271, 0.70710677, -0.5720616), (-0.57206154, 0.70710677, -0.41562706), (-0.6724987, 0.70710677, -0.21850805), (-0.70710695, 0.70710677, 0), (-0.6724987, 0.70710677, 0.21850805), (-0.57206154, 0.70710677, 0.415627), (-0.415627, 0.70710677, 0.5720615), (-0.21850805, 0.70710677, 0.6724986), (-2.1073424e-8, 0.70710677, 0.7071068), (0.21850799, 0.70710677, 0.6724986), (0.4156269, 0.70710677, 0.5720614), (0.5720614, 0.70710677, 0.41562697), (0.6724985, 0.70710677, 0.21850802), (0.70710677, 0.70710677, 0), (0.55901736, 0.809017, -0.18163574), (0.47552857, 0.809017, -0.3454917), (0.3454917, 0.809017, -0.47552854), (0.18163572, 0.809017, -0.5590173), (0, 0.809017, -0.58778554), (-0.18163572, 0.809017, -0.55901724), (-0.34549165, 0.809017, -0.47552842), (-0.4755284, 0.809017, -0.3454916), (-0.5590171, 0.809017, -0.18163566), (-0.58778536, 0.809017, 0), (-0.5590171, 0.809017, 0.18163566), (-0.47552836, 0.809017, 0.34549156), (-0.34549156, 0.809017, 0.47552833), (-0.18163566, 0.809017, 0.55901706), (-1.7517365e-8, 0.809017, 0.5877853), (0.18163562, 0.809017, 0.55901706), (0.3454915, 0.809017, 0.4755283), (0.47552827, 0.809017, 0.34549153), (0.559017, 0.809017, 0.18163563), (0.58778524, 0.809017, 0), (0.43177092, 0.8910065, -0.14029087), (0.3672863, 0.8910065, -0.2668491), (0.2668491, 0.8910065, -0.36728626), (0.14029086, 0.8910065, -0.43177086), (0, 0.8910065, -0.45399073), (-0.14029086, 0.8910065, -0.43177083), (-0.26684904, 0.8910065, -0.36728618), (-0.36728615, 0.8910065, -0.266849), (-0.43177077, 0.8910065, -0.14029081), (-0.45399064, 0.8910065, 0), (-0.43177077, 0.8910065, 0.14029081), (-0.36728612, 0.8910065, 0.26684898), (-0.26684898, 0.8910065, 0.36728612), (-0.14029081, 0.8910065, 0.4317707), (-1.3529972e-8, 0.8910065, 0.45399058), (0.14029078, 0.8910065, 0.43177068), (0.26684892, 0.8910065, 0.3672861), (0.36728606, 0.8910065, 0.26684895), (0.43177065, 0.8910065, 0.1402908), (0.45399052, 0.8910065, 0), (0.29389283, 0.95105654, -0.095491566), (0.25000018, 0.95105654, -0.18163574), (0.18163574, 0.95105654, -0.25000015), (0.09549155, 0.95105654, -0.2938928), (0, 0.95105654, -0.30901715), (-0.09549155, 0.95105654, -0.29389277), (-0.18163571, 0.95105654, -0.2500001), (-0.2500001, 0.95105654, -0.1816357), (-0.2938927, 0.95105654, -0.09549153), (-0.30901706, 0.95105654, 0), (-0.2938927, 0.95105654, 0.09549153), (-0.25000006, 0.95105654, 0.18163568), (-0.18163568, 0.95105654, 0.25000006), (-0.09549153, 0.95105654, 0.29389268), (-9.209424e-9, 0.95105654, 0.30901703), (0.0954915, 0.95105654, 0.29389265), (0.18163563, 0.95105654, 0.25000003), (0.25, 0.95105654, 0.18163565), (0.29389265, 0.95105654, 0.095491506), (0.309017, 0.95105654, 0), (0.14877813, 0.98768836, -0.048340943), (0.12655823, 0.98768836, -0.09194993), (0.09194993, 0.98768836, -0.12655823), (0.048340935, 0.98768836, -0.14877811), (0, 0.98768836, -0.15643455), (-0.048340935, 0.98768836, -0.1487781), (-0.09194992, 0.98768836, -0.1265582), (-0.12655818, 0.98768836, -0.0919499), (-0.14877807, 0.98768836, -0.048340924), (-0.15643452, 0.98768836, 0), (-0.14877807, 0.98768836, 0.048340924), (-0.12655818, 0.98768836, 0.091949895), (-0.091949895, 0.98768836, 0.12655817), (-0.048340924, 0.98768836, 0.14877805), (-4.6621107e-9, 0.98768836, 0.15643449), (0.04834091, 0.98768836, 0.14877804), (0.09194988, 0.98768836, 0.12655815), (0.12655815, 0.98768836, 0.09194989), (0.14877804, 0.98768836, 0.048340913), (0.15643448, 0.98768836, 0), (0, -1, 0), (0, 1, 0)] + color3f[] primvars:displayColor = [(0.13320851, 0.13320851, 0.13320851)] ( + customData = { + dictionary Maya = { + bool generated = 1 + } + } + ) + texCoord2f[] primvars:st = [(0, 0.05), (0.05, 0.05), (0.1, 0.05), (0.15, 0.05), (0.2, 0.05), (0.25, 0.05), (0.3, 0.05), (0.35000002, 0.05), (0.40000004, 0.05), (0.45000005, 0.05), (0.50000006, 0.05), (0.5500001, 0.05), (0.6000001, 0.05), (0.6500001, 0.05), (0.7000001, 0.05), (0.7500001, 0.05), (0.80000013, 0.05), (0.85000014, 0.05), (0.90000015, 0.05), (0.95000017, 0.05), (1.0000001, 0.05), (0, 0.1), (0.05, 0.1), (0.1, 0.1), (0.15, 0.1), (0.2, 0.1), (0.25, 0.1), (0.3, 0.1), (0.35000002, 0.1), (0.40000004, 0.1), (0.45000005, 0.1), (0.50000006, 0.1), (0.5500001, 0.1), (0.6000001, 0.1), (0.6500001, 0.1), (0.7000001, 0.1), (0.7500001, 0.1), (0.80000013, 0.1), (0.85000014, 0.1), (0.90000015, 0.1), (0.95000017, 0.1), (1.0000001, 0.1), (0, 0.15), (0.05, 0.15), (0.1, 0.15), (0.15, 0.15), (0.2, 0.15), (0.25, 0.15), (0.3, 0.15), (0.35000002, 0.15), (0.40000004, 0.15), (0.45000005, 0.15), (0.50000006, 0.15), (0.5500001, 0.15), (0.6000001, 0.15), (0.6500001, 0.15), (0.7000001, 0.15), (0.7500001, 0.15), (0.80000013, 0.15), (0.85000014, 0.15), (0.90000015, 0.15), (0.95000017, 0.15), (1.0000001, 0.15), (0, 0.2), (0.05, 0.2), (0.1, 0.2), (0.15, 0.2), (0.2, 0.2), (0.25, 0.2), (0.3, 0.2), (0.35000002, 0.2), (0.40000004, 0.2), (0.45000005, 0.2), (0.50000006, 0.2), (0.5500001, 0.2), (0.6000001, 0.2), (0.6500001, 0.2), (0.7000001, 0.2), (0.7500001, 0.2), (0.80000013, 0.2), (0.85000014, 0.2), (0.90000015, 0.2), (0.95000017, 0.2), (1.0000001, 0.2), (0, 0.25), (0.05, 0.25), (0.1, 0.25), (0.15, 0.25), (0.2, 0.25), (0.25, 0.25), (0.3, 0.25), (0.35000002, 0.25), (0.40000004, 0.25), (0.45000005, 0.25), (0.50000006, 0.25), (0.5500001, 0.25), (0.6000001, 0.25), (0.6500001, 0.25), (0.7000001, 0.25), (0.7500001, 0.25), (0.80000013, 0.25), (0.85000014, 0.25), (0.90000015, 0.25), (0.95000017, 0.25), (1.0000001, 0.25), (0, 0.3), (0.05, 0.3), (0.1, 0.3), (0.15, 0.3), (0.2, 0.3), (0.25, 0.3), (0.3, 0.3), (0.35000002, 0.3), (0.40000004, 0.3), (0.45000005, 0.3), (0.50000006, 0.3), (0.5500001, 0.3), (0.6000001, 0.3), (0.6500001, 0.3), (0.7000001, 0.3), (0.7500001, 0.3), (0.80000013, 0.3), (0.85000014, 0.3), (0.90000015, 0.3), (0.95000017, 0.3), (1.0000001, 0.3), (0, 0.35000002), (0.05, 0.35000002), (0.1, 0.35000002), (0.15, 0.35000002), (0.2, 0.35000002), (0.25, 0.35000002), (0.3, 0.35000002), (0.35000002, 0.35000002), (0.40000004, 0.35000002), (0.45000005, 0.35000002), (0.50000006, 0.35000002), (0.5500001, 0.35000002), (0.6000001, 0.35000002), (0.6500001, 0.35000002), (0.7000001, 0.35000002), (0.7500001, 0.35000002), (0.80000013, 0.35000002), (0.85000014, 0.35000002), (0.90000015, 0.35000002), (0.95000017, 0.35000002), (1.0000001, 0.35000002), (0, 0.40000004), (0.05, 0.40000004), (0.1, 0.40000004), (0.15, 0.40000004), (0.2, 0.40000004), (0.25, 0.40000004), (0.3, 0.40000004), (0.35000002, 0.40000004), (0.40000004, 0.40000004), (0.45000005, 0.40000004), (0.50000006, 0.40000004), (0.5500001, 0.40000004), (0.6000001, 0.40000004), (0.6500001, 0.40000004), (0.7000001, 0.40000004), (0.7500001, 0.40000004), (0.80000013, 0.40000004), (0.85000014, 0.40000004), (0.90000015, 0.40000004), (0.95000017, 0.40000004), (1.0000001, 0.40000004), (0, 0.45000005), (0.05, 0.45000005), (0.1, 0.45000005), (0.15, 0.45000005), (0.2, 0.45000005), (0.25, 0.45000005), (0.3, 0.45000005), (0.35000002, 0.45000005), (0.40000004, 0.45000005), (0.45000005, 0.45000005), (0.50000006, 0.45000005), (0.5500001, 0.45000005), (0.6000001, 0.45000005), (0.6500001, 0.45000005), (0.7000001, 0.45000005), (0.7500001, 0.45000005), (0.80000013, 0.45000005), (0.85000014, 0.45000005), (0.90000015, 0.45000005), (0.95000017, 0.45000005), (1.0000001, 0.45000005), (0, 0.50000006), (0.05, 0.50000006), (0.1, 0.50000006), (0.15, 0.50000006), (0.2, 0.50000006), (0.25, 0.50000006), (0.3, 0.50000006), (0.35000002, 0.50000006), (0.40000004, 0.50000006), (0.45000005, 0.50000006), (0.50000006, 0.50000006), (0.5500001, 0.50000006), (0.6000001, 0.50000006), (0.6500001, 0.50000006), (0.7000001, 0.50000006), (0.7500001, 0.50000006), (0.80000013, 0.50000006), (0.85000014, 0.50000006), (0.90000015, 0.50000006), (0.95000017, 0.50000006), (1.0000001, 0.50000006), (0, 0.5500001), (0.05, 0.5500001), (0.1, 0.5500001), (0.15, 0.5500001), (0.2, 0.5500001), (0.25, 0.5500001), (0.3, 0.5500001), (0.35000002, 0.5500001), (0.40000004, 0.5500001), (0.45000005, 0.5500001), (0.50000006, 0.5500001), (0.5500001, 0.5500001), (0.6000001, 0.5500001), (0.6500001, 0.5500001), (0.7000001, 0.5500001), (0.7500001, 0.5500001), (0.80000013, 0.5500001), (0.85000014, 0.5500001), (0.90000015, 0.5500001), (0.95000017, 0.5500001), (1.0000001, 0.5500001), (0, 0.6000001), (0.05, 0.6000001), (0.1, 0.6000001), (0.15, 0.6000001), (0.2, 0.6000001), (0.25, 0.6000001), (0.3, 0.6000001), (0.35000002, 0.6000001), (0.40000004, 0.6000001), (0.45000005, 0.6000001), (0.50000006, 0.6000001), (0.5500001, 0.6000001), (0.6000001, 0.6000001), (0.6500001, 0.6000001), (0.7000001, 0.6000001), (0.7500001, 0.6000001), (0.80000013, 0.6000001), (0.85000014, 0.6000001), (0.90000015, 0.6000001), (0.95000017, 0.6000001), (1.0000001, 0.6000001), (0, 0.6500001), (0.05, 0.6500001), (0.1, 0.6500001), (0.15, 0.6500001), (0.2, 0.6500001), (0.25, 0.6500001), (0.3, 0.6500001), (0.35000002, 0.6500001), (0.40000004, 0.6500001), (0.45000005, 0.6500001), (0.50000006, 0.6500001), (0.5500001, 0.6500001), (0.6000001, 0.6500001), (0.6500001, 0.6500001), (0.7000001, 0.6500001), (0.7500001, 0.6500001), (0.80000013, 0.6500001), (0.85000014, 0.6500001), (0.90000015, 0.6500001), (0.95000017, 0.6500001), (1.0000001, 0.6500001), (0, 0.7000001), (0.05, 0.7000001), (0.1, 0.7000001), (0.15, 0.7000001), (0.2, 0.7000001), (0.25, 0.7000001), (0.3, 0.7000001), (0.35000002, 0.7000001), (0.40000004, 0.7000001), (0.45000005, 0.7000001), (0.50000006, 0.7000001), (0.5500001, 0.7000001), (0.6000001, 0.7000001), (0.6500001, 0.7000001), (0.7000001, 0.7000001), (0.7500001, 0.7000001), (0.80000013, 0.7000001), (0.85000014, 0.7000001), (0.90000015, 0.7000001), (0.95000017, 0.7000001), (1.0000001, 0.7000001), (0, 0.7500001), (0.05, 0.7500001), (0.1, 0.7500001), (0.15, 0.7500001), (0.2, 0.7500001), (0.25, 0.7500001), (0.3, 0.7500001), (0.35000002, 0.7500001), (0.40000004, 0.7500001), (0.45000005, 0.7500001), (0.50000006, 0.7500001), (0.5500001, 0.7500001), (0.6000001, 0.7500001), (0.6500001, 0.7500001), (0.7000001, 0.7500001), (0.7500001, 0.7500001), (0.80000013, 0.7500001), (0.85000014, 0.7500001), (0.90000015, 0.7500001), (0.95000017, 0.7500001), (1.0000001, 0.7500001), (0, 0.80000013), (0.05, 0.80000013), (0.1, 0.80000013), (0.15, 0.80000013), (0.2, 0.80000013), (0.25, 0.80000013), (0.3, 0.80000013), (0.35000002, 0.80000013), (0.40000004, 0.80000013), (0.45000005, 0.80000013), (0.50000006, 0.80000013), (0.5500001, 0.80000013), (0.6000001, 0.80000013), (0.6500001, 0.80000013), (0.7000001, 0.80000013), (0.7500001, 0.80000013), (0.80000013, 0.80000013), (0.85000014, 0.80000013), (0.90000015, 0.80000013), (0.95000017, 0.80000013), (1.0000001, 0.80000013), (0, 0.85000014), (0.05, 0.85000014), (0.1, 0.85000014), (0.15, 0.85000014), (0.2, 0.85000014), (0.25, 0.85000014), (0.3, 0.85000014), (0.35000002, 0.85000014), (0.40000004, 0.85000014), (0.45000005, 0.85000014), (0.50000006, 0.85000014), (0.5500001, 0.85000014), (0.6000001, 0.85000014), (0.6500001, 0.85000014), (0.7000001, 0.85000014), (0.7500001, 0.85000014), (0.80000013, 0.85000014), (0.85000014, 0.85000014), (0.90000015, 0.85000014), (0.95000017, 0.85000014), (1.0000001, 0.85000014), (0, 0.90000015), (0.05, 0.90000015), (0.1, 0.90000015), (0.15, 0.90000015), (0.2, 0.90000015), (0.25, 0.90000015), (0.3, 0.90000015), (0.35000002, 0.90000015), (0.40000004, 0.90000015), (0.45000005, 0.90000015), (0.50000006, 0.90000015), (0.5500001, 0.90000015), (0.6000001, 0.90000015), (0.6500001, 0.90000015), (0.7000001, 0.90000015), (0.7500001, 0.90000015), (0.80000013, 0.90000015), (0.85000014, 0.90000015), (0.90000015, 0.90000015), (0.95000017, 0.90000015), (1.0000001, 0.90000015), (0, 0.95000017), (0.05, 0.95000017), (0.1, 0.95000017), (0.15, 0.95000017), (0.2, 0.95000017), (0.25, 0.95000017), (0.3, 0.95000017), (0.35000002, 0.95000017), (0.40000004, 0.95000017), (0.45000005, 0.95000017), (0.50000006, 0.95000017), (0.5500001, 0.95000017), (0.6000001, 0.95000017), (0.6500001, 0.95000017), (0.7000001, 0.95000017), (0.7500001, 0.95000017), (0.80000013, 0.95000017), (0.85000014, 0.95000017), (0.90000015, 0.95000017), (0.95000017, 0.95000017), (1.0000001, 0.95000017), (0.025, 0), (0.075, 0), (0.125, 0), (0.17500001, 0), (0.22500001, 0), (0.275, 0), (0.32500002, 0), (0.375, 0), (0.425, 0), (0.47500002, 0), (0.525, 0), (0.575, 0), (0.625, 0), (0.675, 0), (0.72499996, 0), (0.775, 0), (0.825, 0), (0.875, 0), (0.925, 0), (0.97499996, 0), (0.025, 1), (0.075, 1), (0.125, 1), (0.17500001, 1), (0.22500001, 1), (0.275, 1), (0.32500002, 1), (0.375, 1), (0.425, 1), (0.47500002, 1), (0.525, 1), (0.575, 1), (0.625, 1), (0.675, 1), (0.72499996, 1), (0.775, 1), (0.825, 1), (0.875, 1), (0.925, 1), (0.97499996, 1)] ( + customData = { + dictionary Maya = { + token name = "map1" + } + } + interpolation = "faceVarying" + ) + int[] primvars:st:indices = [0, 1, 22, 21, 1, 2, 23, 22, 2, 3, 24, 23, 3, 4, 25, 24, 4, 5, 26, 25, 5, 6, 27, 26, 6, 7, 28, 27, 7, 8, 29, 28, 8, 9, 30, 29, 9, 10, 31, 30, 10, 11, 32, 31, 11, 12, 33, 32, 12, 13, 34, 33, 13, 14, 35, 34, 14, 15, 36, 35, 15, 16, 37, 36, 16, 17, 38, 37, 17, 18, 39, 38, 18, 19, 40, 39, 19, 20, 41, 40, 21, 22, 43, 42, 22, 23, 44, 43, 23, 24, 45, 44, 24, 25, 46, 45, 25, 26, 47, 46, 26, 27, 48, 47, 27, 28, 49, 48, 28, 29, 50, 49, 29, 30, 51, 50, 30, 31, 52, 51, 31, 32, 53, 52, 32, 33, 54, 53, 33, 34, 55, 54, 34, 35, 56, 55, 35, 36, 57, 56, 36, 37, 58, 57, 37, 38, 59, 58, 38, 39, 60, 59, 39, 40, 61, 60, 40, 41, 62, 61, 42, 43, 64, 63, 43, 44, 65, 64, 44, 45, 66, 65, 45, 46, 67, 66, 46, 47, 68, 67, 47, 48, 69, 68, 48, 49, 70, 69, 49, 50, 71, 70, 50, 51, 72, 71, 51, 52, 73, 72, 52, 53, 74, 73, 53, 54, 75, 74, 54, 55, 76, 75, 55, 56, 77, 76, 56, 57, 78, 77, 57, 58, 79, 78, 58, 59, 80, 79, 59, 60, 81, 80, 60, 61, 82, 81, 61, 62, 83, 82, 63, 64, 85, 84, 64, 65, 86, 85, 65, 66, 87, 86, 66, 67, 88, 87, 67, 68, 89, 88, 68, 69, 90, 89, 69, 70, 91, 90, 70, 71, 92, 91, 71, 72, 93, 92, 72, 73, 94, 93, 73, 74, 95, 94, 74, 75, 96, 95, 75, 76, 97, 96, 76, 77, 98, 97, 77, 78, 99, 98, 78, 79, 100, 99, 79, 80, 101, 100, 80, 81, 102, 101, 81, 82, 103, 102, 82, 83, 104, 103, 84, 85, 106, 105, 85, 86, 107, 106, 86, 87, 108, 107, 87, 88, 109, 108, 88, 89, 110, 109, 89, 90, 111, 110, 90, 91, 112, 111, 91, 92, 113, 112, 92, 93, 114, 113, 93, 94, 115, 114, 94, 95, 116, 115, 95, 96, 117, 116, 96, 97, 118, 117, 97, 98, 119, 118, 98, 99, 120, 119, 99, 100, 121, 120, 100, 101, 122, 121, 101, 102, 123, 122, 102, 103, 124, 123, 103, 104, 125, 124, 105, 106, 127, 126, 106, 107, 128, 127, 107, 108, 129, 128, 108, 109, 130, 129, 109, 110, 131, 130, 110, 111, 132, 131, 111, 112, 133, 132, 112, 113, 134, 133, 113, 114, 135, 134, 114, 115, 136, 135, 115, 116, 137, 136, 116, 117, 138, 137, 117, 118, 139, 138, 118, 119, 140, 139, 119, 120, 141, 140, 120, 121, 142, 141, 121, 122, 143, 142, 122, 123, 144, 143, 123, 124, 145, 144, 124, 125, 146, 145, 126, 127, 148, 147, 127, 128, 149, 148, 128, 129, 150, 149, 129, 130, 151, 150, 130, 131, 152, 151, 131, 132, 153, 152, 132, 133, 154, 153, 133, 134, 155, 154, 134, 135, 156, 155, 135, 136, 157, 156, 136, 137, 158, 157, 137, 138, 159, 158, 138, 139, 160, 159, 139, 140, 161, 160, 140, 141, 162, 161, 141, 142, 163, 162, 142, 143, 164, 163, 143, 144, 165, 164, 144, 145, 166, 165, 145, 146, 167, 166, 147, 148, 169, 168, 148, 149, 170, 169, 149, 150, 171, 170, 150, 151, 172, 171, 151, 152, 173, 172, 152, 153, 174, 173, 153, 154, 175, 174, 154, 155, 176, 175, 155, 156, 177, 176, 156, 157, 178, 177, 157, 158, 179, 178, 158, 159, 180, 179, 159, 160, 181, 180, 160, 161, 182, 181, 161, 162, 183, 182, 162, 163, 184, 183, 163, 164, 185, 184, 164, 165, 186, 185, 165, 166, 187, 186, 166, 167, 188, 187, 168, 169, 190, 189, 169, 170, 191, 190, 170, 171, 192, 191, 171, 172, 193, 192, 172, 173, 194, 193, 173, 174, 195, 194, 174, 175, 196, 195, 175, 176, 197, 196, 176, 177, 198, 197, 177, 178, 199, 198, 178, 179, 200, 199, 179, 180, 201, 200, 180, 181, 202, 201, 181, 182, 203, 202, 182, 183, 204, 203, 183, 184, 205, 204, 184, 185, 206, 205, 185, 186, 207, 206, 186, 187, 208, 207, 187, 188, 209, 208, 189, 190, 211, 210, 190, 191, 212, 211, 191, 192, 213, 212, 192, 193, 214, 213, 193, 194, 215, 214, 194, 195, 216, 215, 195, 196, 217, 216, 196, 197, 218, 217, 197, 198, 219, 218, 198, 199, 220, 219, 199, 200, 221, 220, 200, 201, 222, 221, 201, 202, 223, 222, 202, 203, 224, 223, 203, 204, 225, 224, 204, 205, 226, 225, 205, 206, 227, 226, 206, 207, 228, 227, 207, 208, 229, 228, 208, 209, 230, 229, 210, 211, 232, 231, 211, 212, 233, 232, 212, 213, 234, 233, 213, 214, 235, 234, 214, 215, 236, 235, 215, 216, 237, 236, 216, 217, 238, 237, 217, 218, 239, 238, 218, 219, 240, 239, 219, 220, 241, 240, 220, 221, 242, 241, 221, 222, 243, 242, 222, 223, 244, 243, 223, 224, 245, 244, 224, 225, 246, 245, 225, 226, 247, 246, 226, 227, 248, 247, 227, 228, 249, 248, 228, 229, 250, 249, 229, 230, 251, 250, 231, 232, 253, 252, 232, 233, 254, 253, 233, 234, 255, 254, 234, 235, 256, 255, 235, 236, 257, 256, 236, 237, 258, 257, 237, 238, 259, 258, 238, 239, 260, 259, 239, 240, 261, 260, 240, 241, 262, 261, 241, 242, 263, 262, 242, 243, 264, 263, 243, 244, 265, 264, 244, 245, 266, 265, 245, 246, 267, 266, 246, 247, 268, 267, 247, 248, 269, 268, 248, 249, 270, 269, 249, 250, 271, 270, 250, 251, 272, 271, 252, 253, 274, 273, 253, 254, 275, 274, 254, 255, 276, 275, 255, 256, 277, 276, 256, 257, 278, 277, 257, 258, 279, 278, 258, 259, 280, 279, 259, 260, 281, 280, 260, 261, 282, 281, 261, 262, 283, 282, 262, 263, 284, 283, 263, 264, 285, 284, 264, 265, 286, 285, 265, 266, 287, 286, 266, 267, 288, 287, 267, 268, 289, 288, 268, 269, 290, 289, 269, 270, 291, 290, 270, 271, 292, 291, 271, 272, 293, 292, 273, 274, 295, 294, 274, 275, 296, 295, 275, 276, 297, 296, 276, 277, 298, 297, 277, 278, 299, 298, 278, 279, 300, 299, 279, 280, 301, 300, 280, 281, 302, 301, 281, 282, 303, 302, 282, 283, 304, 303, 283, 284, 305, 304, 284, 285, 306, 305, 285, 286, 307, 306, 286, 287, 308, 307, 287, 288, 309, 308, 288, 289, 310, 309, 289, 290, 311, 310, 290, 291, 312, 311, 291, 292, 313, 312, 292, 293, 314, 313, 294, 295, 316, 315, 295, 296, 317, 316, 296, 297, 318, 317, 297, 298, 319, 318, 298, 299, 320, 319, 299, 300, 321, 320, 300, 301, 322, 321, 301, 302, 323, 322, 302, 303, 324, 323, 303, 304, 325, 324, 304, 305, 326, 325, 305, 306, 327, 326, 306, 307, 328, 327, 307, 308, 329, 328, 308, 309, 330, 329, 309, 310, 331, 330, 310, 311, 332, 331, 311, 312, 333, 332, 312, 313, 334, 333, 313, 314, 335, 334, 315, 316, 337, 336, 316, 317, 338, 337, 317, 318, 339, 338, 318, 319, 340, 339, 319, 320, 341, 340, 320, 321, 342, 341, 321, 322, 343, 342, 322, 323, 344, 343, 323, 324, 345, 344, 324, 325, 346, 345, 325, 326, 347, 346, 326, 327, 348, 347, 327, 328, 349, 348, 328, 329, 350, 349, 329, 330, 351, 350, 330, 331, 352, 351, 331, 332, 353, 352, 332, 333, 354, 353, 333, 334, 355, 354, 334, 335, 356, 355, 336, 337, 358, 357, 337, 338, 359, 358, 338, 339, 360, 359, 339, 340, 361, 360, 340, 341, 362, 361, 341, 342, 363, 362, 342, 343, 364, 363, 343, 344, 365, 364, 344, 345, 366, 365, 345, 346, 367, 366, 346, 347, 368, 367, 347, 348, 369, 368, 348, 349, 370, 369, 349, 350, 371, 370, 350, 351, 372, 371, 351, 352, 373, 372, 352, 353, 374, 373, 353, 354, 375, 374, 354, 355, 376, 375, 355, 356, 377, 376, 357, 358, 379, 378, 358, 359, 380, 379, 359, 360, 381, 380, 360, 361, 382, 381, 361, 362, 383, 382, 362, 363, 384, 383, 363, 364, 385, 384, 364, 365, 386, 385, 365, 366, 387, 386, 366, 367, 388, 387, 367, 368, 389, 388, 368, 369, 390, 389, 369, 370, 391, 390, 370, 371, 392, 391, 371, 372, 393, 392, 372, 373, 394, 393, 373, 374, 395, 394, 374, 375, 396, 395, 375, 376, 397, 396, 376, 377, 398, 397, 1, 0, 399, 2, 1, 400, 3, 2, 401, 4, 3, 402, 5, 4, 403, 6, 5, 404, 7, 6, 405, 8, 7, 406, 9, 8, 407, 10, 9, 408, 11, 10, 409, 12, 11, 410, 13, 12, 411, 14, 13, 412, 15, 14, 413, 16, 15, 414, 17, 16, 415, 18, 17, 416, 19, 18, 417, 20, 19, 418, 378, 379, 419, 379, 380, 420, 380, 381, 421, 381, 382, 422, 382, 383, 423, 383, 384, 424, 384, 385, 425, 385, 386, 426, 386, 387, 427, 387, 388, 428, 388, 389, 429, 389, 390, 430, 390, 391, 431, 391, 392, 432, 392, 393, 433, 393, 394, 434, 394, 395, 435, 395, 396, 436, 396, 397, 437, 397, 398, 438] + token visibility = "inherited" + + def GeomSubset "upperHalf" ( + prepend apiSchemas = ["MaterialBindingAPI"] + ) + { + uniform token elementType = "face" + uniform token familyName = "materialBind" + int[] indices = [180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399] + rel material:binding = + } +} + +def Scope "mtl" +{ + def Material "UsdPreviewSurface1" + { + token outputs:surface.connect = + + def Shader "UsdPreviewSurface1" + { + uniform token info:id = "UsdPreviewSurface" + token outputs:surface + } + } +} + From f712c280ee01ee941adac7b3ad140ab59d2c622b Mon Sep 17 00:00:00 2001 From: debloip Date: Tue, 2 Jul 2024 14:15:27 -0400 Subject: [PATCH 35/75] HYDRA-1058 : Simplify GeomSubset prim --- .../UpperHalfGeomSubsetSphere.usda | 22 +++---------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetSphere.usda b/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetSphere.usda index d7795ec22a..e37c0b123e 100644 --- a/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetSphere.usda +++ b/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetSphere.usda @@ -1,31 +1,15 @@ #usda 1.0 -def Mesh "pSphere1" ( +def Mesh "UpperHalfGeomSubsetSphere" ( kind = "component" ) { uniform bool doubleSided = 1 - float3[] extent = [(-1.0000002, -1, -1.0000005), (1, 1, 1.0000001)] + float3[] extent = [(-1, -1, -1), (1, 1, 1)] 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, 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, 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, 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, 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, 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, 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, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] int[] faceVertexIndices = [0, 1, 21, 20, 1, 2, 22, 21, 2, 3, 23, 22, 3, 4, 24, 23, 4, 5, 25, 24, 5, 6, 26, 25, 6, 7, 27, 26, 7, 8, 28, 27, 8, 9, 29, 28, 9, 10, 30, 29, 10, 11, 31, 30, 11, 12, 32, 31, 12, 13, 33, 32, 13, 14, 34, 33, 14, 15, 35, 34, 15, 16, 36, 35, 16, 17, 37, 36, 17, 18, 38, 37, 18, 19, 39, 38, 19, 0, 20, 39, 20, 21, 41, 40, 21, 22, 42, 41, 22, 23, 43, 42, 23, 24, 44, 43, 24, 25, 45, 44, 25, 26, 46, 45, 26, 27, 47, 46, 27, 28, 48, 47, 28, 29, 49, 48, 29, 30, 50, 49, 30, 31, 51, 50, 31, 32, 52, 51, 32, 33, 53, 52, 33, 34, 54, 53, 34, 35, 55, 54, 35, 36, 56, 55, 36, 37, 57, 56, 37, 38, 58, 57, 38, 39, 59, 58, 39, 20, 40, 59, 40, 41, 61, 60, 41, 42, 62, 61, 42, 43, 63, 62, 43, 44, 64, 63, 44, 45, 65, 64, 45, 46, 66, 65, 46, 47, 67, 66, 47, 48, 68, 67, 48, 49, 69, 68, 49, 50, 70, 69, 50, 51, 71, 70, 51, 52, 72, 71, 52, 53, 73, 72, 53, 54, 74, 73, 54, 55, 75, 74, 55, 56, 76, 75, 56, 57, 77, 76, 57, 58, 78, 77, 58, 59, 79, 78, 59, 40, 60, 79, 60, 61, 81, 80, 61, 62, 82, 81, 62, 63, 83, 82, 63, 64, 84, 83, 64, 65, 85, 84, 65, 66, 86, 85, 66, 67, 87, 86, 67, 68, 88, 87, 68, 69, 89, 88, 69, 70, 90, 89, 70, 71, 91, 90, 71, 72, 92, 91, 72, 73, 93, 92, 73, 74, 94, 93, 74, 75, 95, 94, 75, 76, 96, 95, 76, 77, 97, 96, 77, 78, 98, 97, 78, 79, 99, 98, 79, 60, 80, 99, 80, 81, 101, 100, 81, 82, 102, 101, 82, 83, 103, 102, 83, 84, 104, 103, 84, 85, 105, 104, 85, 86, 106, 105, 86, 87, 107, 106, 87, 88, 108, 107, 88, 89, 109, 108, 89, 90, 110, 109, 90, 91, 111, 110, 91, 92, 112, 111, 92, 93, 113, 112, 93, 94, 114, 113, 94, 95, 115, 114, 95, 96, 116, 115, 96, 97, 117, 116, 97, 98, 118, 117, 98, 99, 119, 118, 99, 80, 100, 119, 100, 101, 121, 120, 101, 102, 122, 121, 102, 103, 123, 122, 103, 104, 124, 123, 104, 105, 125, 124, 105, 106, 126, 125, 106, 107, 127, 126, 107, 108, 128, 127, 108, 109, 129, 128, 109, 110, 130, 129, 110, 111, 131, 130, 111, 112, 132, 131, 112, 113, 133, 132, 113, 114, 134, 133, 114, 115, 135, 134, 115, 116, 136, 135, 116, 117, 137, 136, 117, 118, 138, 137, 118, 119, 139, 138, 119, 100, 120, 139, 120, 121, 141, 140, 121, 122, 142, 141, 122, 123, 143, 142, 123, 124, 144, 143, 124, 125, 145, 144, 125, 126, 146, 145, 126, 127, 147, 146, 127, 128, 148, 147, 128, 129, 149, 148, 129, 130, 150, 149, 130, 131, 151, 150, 131, 132, 152, 151, 132, 133, 153, 152, 133, 134, 154, 153, 134, 135, 155, 154, 135, 136, 156, 155, 136, 137, 157, 156, 137, 138, 158, 157, 138, 139, 159, 158, 139, 120, 140, 159, 140, 141, 161, 160, 141, 142, 162, 161, 142, 143, 163, 162, 143, 144, 164, 163, 144, 145, 165, 164, 145, 146, 166, 165, 146, 147, 167, 166, 147, 148, 168, 167, 148, 149, 169, 168, 149, 150, 170, 169, 150, 151, 171, 170, 151, 152, 172, 171, 152, 153, 173, 172, 153, 154, 174, 173, 154, 155, 175, 174, 155, 156, 176, 175, 156, 157, 177, 176, 157, 158, 178, 177, 158, 159, 179, 178, 159, 140, 160, 179, 160, 161, 181, 180, 161, 162, 182, 181, 162, 163, 183, 182, 163, 164, 184, 183, 164, 165, 185, 184, 165, 166, 186, 185, 166, 167, 187, 186, 167, 168, 188, 187, 168, 169, 189, 188, 169, 170, 190, 189, 170, 171, 191, 190, 171, 172, 192, 191, 172, 173, 193, 192, 173, 174, 194, 193, 174, 175, 195, 194, 175, 176, 196, 195, 176, 177, 197, 196, 177, 178, 198, 197, 178, 179, 199, 198, 179, 160, 180, 199, 180, 181, 201, 200, 181, 182, 202, 201, 182, 183, 203, 202, 183, 184, 204, 203, 184, 185, 205, 204, 185, 186, 206, 205, 186, 187, 207, 206, 187, 188, 208, 207, 188, 189, 209, 208, 189, 190, 210, 209, 190, 191, 211, 210, 191, 192, 212, 211, 192, 193, 213, 212, 193, 194, 214, 213, 194, 195, 215, 214, 195, 196, 216, 215, 196, 197, 217, 216, 197, 198, 218, 217, 198, 199, 219, 218, 199, 180, 200, 219, 200, 201, 221, 220, 201, 202, 222, 221, 202, 203, 223, 222, 203, 204, 224, 223, 204, 205, 225, 224, 205, 206, 226, 225, 206, 207, 227, 226, 207, 208, 228, 227, 208, 209, 229, 228, 209, 210, 230, 229, 210, 211, 231, 230, 211, 212, 232, 231, 212, 213, 233, 232, 213, 214, 234, 233, 214, 215, 235, 234, 215, 216, 236, 235, 216, 217, 237, 236, 217, 218, 238, 237, 218, 219, 239, 238, 219, 200, 220, 239, 220, 221, 241, 240, 221, 222, 242, 241, 222, 223, 243, 242, 223, 224, 244, 243, 224, 225, 245, 244, 225, 226, 246, 245, 226, 227, 247, 246, 227, 228, 248, 247, 228, 229, 249, 248, 229, 230, 250, 249, 230, 231, 251, 250, 231, 232, 252, 251, 232, 233, 253, 252, 233, 234, 254, 253, 234, 235, 255, 254, 235, 236, 256, 255, 236, 237, 257, 256, 237, 238, 258, 257, 238, 239, 259, 258, 239, 220, 240, 259, 240, 241, 261, 260, 241, 242, 262, 261, 242, 243, 263, 262, 243, 244, 264, 263, 244, 245, 265, 264, 245, 246, 266, 265, 246, 247, 267, 266, 247, 248, 268, 267, 248, 249, 269, 268, 249, 250, 270, 269, 250, 251, 271, 270, 251, 252, 272, 271, 252, 253, 273, 272, 253, 254, 274, 273, 254, 255, 275, 274, 255, 256, 276, 275, 256, 257, 277, 276, 257, 258, 278, 277, 258, 259, 279, 278, 259, 240, 260, 279, 260, 261, 281, 280, 261, 262, 282, 281, 262, 263, 283, 282, 263, 264, 284, 283, 264, 265, 285, 284, 265, 266, 286, 285, 266, 267, 287, 286, 267, 268, 288, 287, 268, 269, 289, 288, 269, 270, 290, 289, 270, 271, 291, 290, 271, 272, 292, 291, 272, 273, 293, 292, 273, 274, 294, 293, 274, 275, 295, 294, 275, 276, 296, 295, 276, 277, 297, 296, 277, 278, 298, 297, 278, 279, 299, 298, 279, 260, 280, 299, 280, 281, 301, 300, 281, 282, 302, 301, 282, 283, 303, 302, 283, 284, 304, 303, 284, 285, 305, 304, 285, 286, 306, 305, 286, 287, 307, 306, 287, 288, 308, 307, 288, 289, 309, 308, 289, 290, 310, 309, 290, 291, 311, 310, 291, 292, 312, 311, 292, 293, 313, 312, 293, 294, 314, 313, 294, 295, 315, 314, 295, 296, 316, 315, 296, 297, 317, 316, 297, 298, 318, 317, 298, 299, 319, 318, 299, 280, 300, 319, 300, 301, 321, 320, 301, 302, 322, 321, 302, 303, 323, 322, 303, 304, 324, 323, 304, 305, 325, 324, 305, 306, 326, 325, 306, 307, 327, 326, 307, 308, 328, 327, 308, 309, 329, 328, 309, 310, 330, 329, 310, 311, 331, 330, 311, 312, 332, 331, 312, 313, 333, 332, 313, 314, 334, 333, 314, 315, 335, 334, 315, 316, 336, 335, 316, 317, 337, 336, 317, 318, 338, 337, 318, 319, 339, 338, 319, 300, 320, 339, 320, 321, 341, 340, 321, 322, 342, 341, 322, 323, 343, 342, 323, 324, 344, 343, 324, 325, 345, 344, 325, 326, 346, 345, 326, 327, 347, 346, 327, 328, 348, 347, 328, 329, 349, 348, 329, 330, 350, 349, 330, 331, 351, 350, 331, 332, 352, 351, 332, 333, 353, 352, 333, 334, 354, 353, 334, 335, 355, 354, 335, 336, 356, 355, 336, 337, 357, 356, 337, 338, 358, 357, 338, 339, 359, 358, 339, 320, 340, 359, 340, 341, 361, 360, 341, 342, 362, 361, 342, 343, 363, 362, 343, 344, 364, 363, 344, 345, 365, 364, 345, 346, 366, 365, 346, 347, 367, 366, 347, 348, 368, 367, 348, 349, 369, 368, 349, 350, 370, 369, 350, 351, 371, 370, 351, 352, 372, 371, 352, 353, 373, 372, 353, 354, 374, 373, 354, 355, 375, 374, 355, 356, 376, 375, 356, 357, 377, 376, 357, 358, 378, 377, 358, 359, 379, 378, 359, 340, 360, 379, 1, 0, 380, 2, 1, 380, 3, 2, 380, 4, 3, 380, 5, 4, 380, 6, 5, 380, 7, 6, 380, 8, 7, 380, 9, 8, 380, 10, 9, 380, 11, 10, 380, 12, 11, 380, 13, 12, 380, 14, 13, 380, 15, 14, 380, 16, 15, 380, 17, 16, 380, 18, 17, 380, 19, 18, 380, 0, 19, 380, 360, 361, 381, 361, 362, 381, 362, 363, 381, 363, 364, 381, 364, 365, 381, 365, 366, 381, 366, 367, 381, 367, 368, 381, 368, 369, 381, 369, 370, 381, 370, 371, 381, 371, 372, 381, 372, 373, 381, 373, 374, 381, 374, 375, 381, 375, 376, 381, 376, 377, 381, 377, 378, 381, 378, 379, 381, 379, 360, 381] point3f[] points = [(0.14877813, -0.98768836, -0.048340943), (0.12655823, -0.98768836, -0.09194993), (0.09194993, -0.98768836, -0.12655823), (0.048340935, -0.98768836, -0.14877811), (0, -0.98768836, -0.15643455), (-0.048340935, -0.98768836, -0.1487781), (-0.09194992, -0.98768836, -0.1265582), (-0.12655818, -0.98768836, -0.0919499), (-0.14877807, -0.98768836, -0.048340924), (-0.15643452, -0.98768836, 0), (-0.14877807, -0.98768836, 0.048340924), (-0.12655818, -0.98768836, 0.091949895), (-0.091949895, -0.98768836, 0.12655817), (-0.048340924, -0.98768836, 0.14877805), (-4.6621107e-9, -0.98768836, 0.15643449), (0.04834091, -0.98768836, 0.14877804), (0.09194988, -0.98768836, 0.12655815), (0.12655815, -0.98768836, 0.09194989), (0.14877804, -0.98768836, 0.048340913), (0.15643448, -0.98768836, 0), (0.29389283, -0.95105654, -0.095491566), (0.25000018, -0.95105654, -0.18163574), (0.18163574, -0.95105654, -0.25000015), (0.09549155, -0.95105654, -0.2938928), (0, -0.95105654, -0.30901715), (-0.09549155, -0.95105654, -0.29389277), (-0.18163571, -0.95105654, -0.2500001), (-0.2500001, -0.95105654, -0.1816357), (-0.2938927, -0.95105654, -0.09549153), (-0.30901706, -0.95105654, 0), (-0.2938927, -0.95105654, 0.09549153), (-0.25000006, -0.95105654, 0.18163568), (-0.18163568, -0.95105654, 0.25000006), (-0.09549153, -0.95105654, 0.29389268), (-9.209424e-9, -0.95105654, 0.30901703), (0.0954915, -0.95105654, 0.29389265), (0.18163563, -0.95105654, 0.25000003), (0.25, -0.95105654, 0.18163565), (0.29389265, -0.95105654, 0.095491506), (0.309017, -0.95105654, 0), (0.43177092, -0.8910065, -0.14029087), (0.3672863, -0.8910065, -0.2668491), (0.2668491, -0.8910065, -0.36728626), (0.14029086, -0.8910065, -0.43177086), (0, -0.8910065, -0.45399073), (-0.14029086, -0.8910065, -0.43177083), (-0.26684904, -0.8910065, -0.36728618), (-0.36728615, -0.8910065, -0.266849), (-0.43177077, -0.8910065, -0.14029081), (-0.45399064, -0.8910065, 0), (-0.43177077, -0.8910065, 0.14029081), (-0.36728612, -0.8910065, 0.26684898), (-0.26684898, -0.8910065, 0.36728612), (-0.14029081, -0.8910065, 0.4317707), (-1.3529972e-8, -0.8910065, 0.45399058), (0.14029078, -0.8910065, 0.43177068), (0.26684892, -0.8910065, 0.3672861), (0.36728606, -0.8910065, 0.26684895), (0.43177065, -0.8910065, 0.1402908), (0.45399052, -0.8910065, 0), (0.55901736, -0.809017, -0.18163574), (0.47552857, -0.809017, -0.3454917), (0.3454917, -0.809017, -0.47552854), (0.18163572, -0.809017, -0.5590173), (0, -0.809017, -0.58778554), (-0.18163572, -0.809017, -0.55901724), (-0.34549165, -0.809017, -0.47552842), (-0.4755284, -0.809017, -0.3454916), (-0.5590171, -0.809017, -0.18163566), (-0.58778536, -0.809017, 0), (-0.5590171, -0.809017, 0.18163566), (-0.47552836, -0.809017, 0.34549156), (-0.34549156, -0.809017, 0.47552833), (-0.18163566, -0.809017, 0.55901706), (-1.7517365e-8, -0.809017, 0.5877853), (0.18163562, -0.809017, 0.55901706), (0.3454915, -0.809017, 0.4755283), (0.47552827, -0.809017, 0.34549153), (0.559017, -0.809017, 0.18163563), (0.58778524, -0.809017, 0), (0.67249894, -0.70710677, -0.21850814), (0.5720618, -0.70710677, -0.41562718), (0.41562718, -0.70710677, -0.5720617), (0.21850812, -0.70710677, -0.6724989), (0, -0.70710677, -0.7071071), (-0.21850812, -0.70710677, -0.6724988), (-0.4156271, -0.70710677, -0.5720616), (-0.57206154, -0.70710677, -0.41562706), (-0.6724987, -0.70710677, -0.21850805), (-0.70710695, -0.70710677, 0), (-0.6724987, -0.70710677, 0.21850805), (-0.57206154, -0.70710677, 0.415627), (-0.415627, -0.70710677, 0.5720615), (-0.21850805, -0.70710677, 0.6724986), (-2.1073424e-8, -0.70710677, 0.7071068), (0.21850799, -0.70710677, 0.6724986), (0.4156269, -0.70710677, 0.5720614), (0.5720614, -0.70710677, 0.41562697), (0.6724985, -0.70710677, 0.21850802), (0.70710677, -0.70710677, 0), (0.7694214, -0.58778524, -0.25000015), (0.65450895, -0.58778524, -0.47552854), (0.47552854, -0.58778524, -0.6545089), (0.25000012, -0.58778524, -0.7694213), (0, -0.58778524, -0.80901736), (-0.25000012, -0.58778524, -0.7694212), (-0.47552845, -0.58778524, -0.65450877), (-0.6545087, -0.58778524, -0.4755284), (-0.7694211, -0.58778524, -0.25000006), (-0.8090172, -0.58778524, 0), (-0.7694211, -0.58778524, 0.25000006), (-0.65450865, -0.58778524, 0.47552836), (-0.47552836, -0.58778524, 0.6545086), (-0.25000006, -0.58778524, 0.769421), (-2.4110586e-8, -0.58778524, 0.8090171), (0.24999999, -0.58778524, 0.769421), (0.47552827, -0.58778524, 0.65450853), (0.65450853, -0.58778524, 0.4755283), (0.7694209, -0.58778524, 0.25), (0.809017, -0.58778524, 0), (0.8473981, -0.45399052, -0.27533633), (0.7208399, -0.45399052, -0.5237208), (0.5237208, -0.45399052, -0.72083986), (0.2753363, -0.45399052, -0.847398), (0, -0.45399052, -0.89100695), (-0.2753363, -0.45399052, -0.847398), (-0.5237207, -0.45399052, -0.7208397), (-0.7208396, -0.45399052, -0.5237206), (-0.8473978, -0.45399052, -0.2753362), (-0.89100677, -0.45399052, 0), (-0.8473978, -0.45399052, 0.2753362), (-0.7208396, -0.45399052, 0.5237206), (-0.5237206, -0.45399052, 0.72083956), (-0.2753362, -0.45399052, 0.8473977), (-2.6554064e-8, -0.45399052, 0.89100665), (0.27533615, -0.45399052, 0.8473976), (0.5237205, -0.45399052, 0.7208395), (0.72083944, -0.45399052, 0.52372056), (0.84739757, -0.45399052, 0.27533618), (0.8910065, -0.45399052, 0), (0.9045091, -0.30901697, -0.2938928), (0.7694214, -0.30901697, -0.55901736), (0.55901736, -0.30901697, -0.76942134), (0.29389277, -0.30901697, -0.904509), (0, -0.30901697, -0.951057), (-0.29389277, -0.30901697, -0.90450895), (-0.55901724, -0.30901697, -0.7694212), (-0.76942116, -0.30901697, -0.5590172), (-0.90450877, -0.30901697, -0.2938927), (-0.9510568, -0.30901697, 0), (-0.90450877, -0.30901697, 0.2938927), (-0.7694211, -0.30901697, 0.5590171), (-0.5590171, -0.30901697, 0.76942104), (-0.2938927, -0.30901697, 0.90450865), (-2.8343694e-8, -0.30901697, 0.95105666), (0.29389262, -0.30901697, 0.9045086), (0.559017, -0.30901697, 0.769421), (0.7694209, -0.30901697, 0.55901706), (0.90450853, -0.30901697, 0.29389265), (0.95105654, -0.30901697, 0), (0.93934804, -0.15643437, -0.30521268), (0.7990572, -0.15643437, -0.580549), (0.580549, -0.15643437, -0.7990571), (0.30521265, -0.15643437, -0.9393479), (0, -0.15643437, -0.98768884), (-0.30521265, -0.15643437, -0.93934786), (-0.5805489, -0.15643437, -0.79905695), (-0.7990569, -0.15643437, -0.5805488), (-0.9393477, -0.15643437, -0.30521256), (-0.9876886, -0.15643437, 0), (-0.9393477, -0.15643437, 0.30521256), (-0.7990568, -0.15643437, 0.58054876), (-0.58054876, -0.15643437, 0.79905677), (-0.30521256, -0.15643437, 0.93934757), (-2.9435407e-8, -0.15643437, 0.9876885), (0.30521247, -0.15643437, 0.93934757), (0.58054864, -0.15643437, 0.7990567), (0.79905665, -0.15643437, 0.5805487), (0.9393475, -0.15643437, 0.3052125), (0.98768836, -0.15643437, 0), (0.95105714, 0, -0.30901718), (0.80901754, 0, -0.5877856), (0.5877856, 0, -0.8090175), (0.30901715, 0, -0.951057), (0, 0, -1.0000005), (-0.30901715, 0, -0.95105696), (-0.5877855, 0, -0.8090173), (-0.80901724, 0, -0.5877854), (-0.9510568, 0, -0.30901706), (-1.0000002, 0, 0), (-0.9510568, 0, 0.30901706), (-0.8090172, 0, 0.58778536), (-0.58778536, 0, 0.8090171), (-0.30901706, 0, 0.95105666), (-2.9802322e-8, 0, 1.0000001), (0.30901697, 0, 0.9510566), (0.58778524, 0, 0.80901706), (0.809017, 0, 0.5877853), (0.95105654, 0, 0.309017), (1, 0, 0), (0.93934804, 0.15643437, -0.30521268), (0.7990572, 0.15643437, -0.580549), (0.580549, 0.15643437, -0.7990571), (0.30521265, 0.15643437, -0.9393479), (0, 0.15643437, -0.98768884), (-0.30521265, 0.15643437, -0.93934786), (-0.5805489, 0.15643437, -0.79905695), (-0.7990569, 0.15643437, -0.5805488), (-0.9393477, 0.15643437, -0.30521256), (-0.9876886, 0.15643437, 0), (-0.9393477, 0.15643437, 0.30521256), (-0.7990568, 0.15643437, 0.58054876), (-0.58054876, 0.15643437, 0.79905677), (-0.30521256, 0.15643437, 0.93934757), (-2.9435407e-8, 0.15643437, 0.9876885), (0.30521247, 0.15643437, 0.93934757), (0.58054864, 0.15643437, 0.7990567), (0.79905665, 0.15643437, 0.5805487), (0.9393475, 0.15643437, 0.3052125), (0.98768836, 0.15643437, 0), (0.9045091, 0.30901697, -0.2938928), (0.7694214, 0.30901697, -0.55901736), (0.55901736, 0.30901697, -0.76942134), (0.29389277, 0.30901697, -0.904509), (0, 0.30901697, -0.951057), (-0.29389277, 0.30901697, -0.90450895), (-0.55901724, 0.30901697, -0.7694212), (-0.76942116, 0.30901697, -0.5590172), (-0.90450877, 0.30901697, -0.2938927), (-0.9510568, 0.30901697, 0), (-0.90450877, 0.30901697, 0.2938927), (-0.7694211, 0.30901697, 0.5590171), (-0.5590171, 0.30901697, 0.76942104), (-0.2938927, 0.30901697, 0.90450865), (-2.8343694e-8, 0.30901697, 0.95105666), (0.29389262, 0.30901697, 0.9045086), (0.559017, 0.30901697, 0.769421), (0.7694209, 0.30901697, 0.55901706), (0.90450853, 0.30901697, 0.29389265), (0.95105654, 0.30901697, 0), (0.8473981, 0.45399052, -0.27533633), (0.7208399, 0.45399052, -0.5237208), (0.5237208, 0.45399052, -0.72083986), (0.2753363, 0.45399052, -0.847398), (0, 0.45399052, -0.89100695), (-0.2753363, 0.45399052, -0.847398), (-0.5237207, 0.45399052, -0.7208397), (-0.7208396, 0.45399052, -0.5237206), (-0.8473978, 0.45399052, -0.2753362), (-0.89100677, 0.45399052, 0), (-0.8473978, 0.45399052, 0.2753362), (-0.7208396, 0.45399052, 0.5237206), (-0.5237206, 0.45399052, 0.72083956), (-0.2753362, 0.45399052, 0.8473977), (-2.6554064e-8, 0.45399052, 0.89100665), (0.27533615, 0.45399052, 0.8473976), (0.5237205, 0.45399052, 0.7208395), (0.72083944, 0.45399052, 0.52372056), (0.84739757, 0.45399052, 0.27533618), (0.8910065, 0.45399052, 0), (0.7694214, 0.58778524, -0.25000015), (0.65450895, 0.58778524, -0.47552854), (0.47552854, 0.58778524, -0.6545089), (0.25000012, 0.58778524, -0.7694213), (0, 0.58778524, -0.80901736), (-0.25000012, 0.58778524, -0.7694212), (-0.47552845, 0.58778524, -0.65450877), (-0.6545087, 0.58778524, -0.4755284), (-0.7694211, 0.58778524, -0.25000006), (-0.8090172, 0.58778524, 0), (-0.7694211, 0.58778524, 0.25000006), (-0.65450865, 0.58778524, 0.47552836), (-0.47552836, 0.58778524, 0.6545086), (-0.25000006, 0.58778524, 0.769421), (-2.4110586e-8, 0.58778524, 0.8090171), (0.24999999, 0.58778524, 0.769421), (0.47552827, 0.58778524, 0.65450853), (0.65450853, 0.58778524, 0.4755283), (0.7694209, 0.58778524, 0.25), (0.809017, 0.58778524, 0), (0.67249894, 0.70710677, -0.21850814), (0.5720618, 0.70710677, -0.41562718), (0.41562718, 0.70710677, -0.5720617), (0.21850812, 0.70710677, -0.6724989), (0, 0.70710677, -0.7071071), (-0.21850812, 0.70710677, -0.6724988), (-0.4156271, 0.70710677, -0.5720616), (-0.57206154, 0.70710677, -0.41562706), (-0.6724987, 0.70710677, -0.21850805), (-0.70710695, 0.70710677, 0), (-0.6724987, 0.70710677, 0.21850805), (-0.57206154, 0.70710677, 0.415627), (-0.415627, 0.70710677, 0.5720615), (-0.21850805, 0.70710677, 0.6724986), (-2.1073424e-8, 0.70710677, 0.7071068), (0.21850799, 0.70710677, 0.6724986), (0.4156269, 0.70710677, 0.5720614), (0.5720614, 0.70710677, 0.41562697), (0.6724985, 0.70710677, 0.21850802), (0.70710677, 0.70710677, 0), (0.55901736, 0.809017, -0.18163574), (0.47552857, 0.809017, -0.3454917), (0.3454917, 0.809017, -0.47552854), (0.18163572, 0.809017, -0.5590173), (0, 0.809017, -0.58778554), (-0.18163572, 0.809017, -0.55901724), (-0.34549165, 0.809017, -0.47552842), (-0.4755284, 0.809017, -0.3454916), (-0.5590171, 0.809017, -0.18163566), (-0.58778536, 0.809017, 0), (-0.5590171, 0.809017, 0.18163566), (-0.47552836, 0.809017, 0.34549156), (-0.34549156, 0.809017, 0.47552833), (-0.18163566, 0.809017, 0.55901706), (-1.7517365e-8, 0.809017, 0.5877853), (0.18163562, 0.809017, 0.55901706), (0.3454915, 0.809017, 0.4755283), (0.47552827, 0.809017, 0.34549153), (0.559017, 0.809017, 0.18163563), (0.58778524, 0.809017, 0), (0.43177092, 0.8910065, -0.14029087), (0.3672863, 0.8910065, -0.2668491), (0.2668491, 0.8910065, -0.36728626), (0.14029086, 0.8910065, -0.43177086), (0, 0.8910065, -0.45399073), (-0.14029086, 0.8910065, -0.43177083), (-0.26684904, 0.8910065, -0.36728618), (-0.36728615, 0.8910065, -0.266849), (-0.43177077, 0.8910065, -0.14029081), (-0.45399064, 0.8910065, 0), (-0.43177077, 0.8910065, 0.14029081), (-0.36728612, 0.8910065, 0.26684898), (-0.26684898, 0.8910065, 0.36728612), (-0.14029081, 0.8910065, 0.4317707), (-1.3529972e-8, 0.8910065, 0.45399058), (0.14029078, 0.8910065, 0.43177068), (0.26684892, 0.8910065, 0.3672861), (0.36728606, 0.8910065, 0.26684895), (0.43177065, 0.8910065, 0.1402908), (0.45399052, 0.8910065, 0), (0.29389283, 0.95105654, -0.095491566), (0.25000018, 0.95105654, -0.18163574), (0.18163574, 0.95105654, -0.25000015), (0.09549155, 0.95105654, -0.2938928), (0, 0.95105654, -0.30901715), (-0.09549155, 0.95105654, -0.29389277), (-0.18163571, 0.95105654, -0.2500001), (-0.2500001, 0.95105654, -0.1816357), (-0.2938927, 0.95105654, -0.09549153), (-0.30901706, 0.95105654, 0), (-0.2938927, 0.95105654, 0.09549153), (-0.25000006, 0.95105654, 0.18163568), (-0.18163568, 0.95105654, 0.25000006), (-0.09549153, 0.95105654, 0.29389268), (-9.209424e-9, 0.95105654, 0.30901703), (0.0954915, 0.95105654, 0.29389265), (0.18163563, 0.95105654, 0.25000003), (0.25, 0.95105654, 0.18163565), (0.29389265, 0.95105654, 0.095491506), (0.309017, 0.95105654, 0), (0.14877813, 0.98768836, -0.048340943), (0.12655823, 0.98768836, -0.09194993), (0.09194993, 0.98768836, -0.12655823), (0.048340935, 0.98768836, -0.14877811), (0, 0.98768836, -0.15643455), (-0.048340935, 0.98768836, -0.1487781), (-0.09194992, 0.98768836, -0.1265582), (-0.12655818, 0.98768836, -0.0919499), (-0.14877807, 0.98768836, -0.048340924), (-0.15643452, 0.98768836, 0), (-0.14877807, 0.98768836, 0.048340924), (-0.12655818, 0.98768836, 0.091949895), (-0.091949895, 0.98768836, 0.12655817), (-0.048340924, 0.98768836, 0.14877805), (-4.6621107e-9, 0.98768836, 0.15643449), (0.04834091, 0.98768836, 0.14877804), (0.09194988, 0.98768836, 0.12655815), (0.12655815, 0.98768836, 0.09194989), (0.14877804, 0.98768836, 0.048340913), (0.15643448, 0.98768836, 0), (0, -1, 0), (0, 1, 0)] - color3f[] primvars:displayColor = [(0.13320851, 0.13320851, 0.13320851)] ( - customData = { - dictionary Maya = { - bool generated = 1 - } - } - ) - texCoord2f[] primvars:st = [(0, 0.05), (0.05, 0.05), (0.1, 0.05), (0.15, 0.05), (0.2, 0.05), (0.25, 0.05), (0.3, 0.05), (0.35000002, 0.05), (0.40000004, 0.05), (0.45000005, 0.05), (0.50000006, 0.05), (0.5500001, 0.05), (0.6000001, 0.05), (0.6500001, 0.05), (0.7000001, 0.05), (0.7500001, 0.05), (0.80000013, 0.05), (0.85000014, 0.05), (0.90000015, 0.05), (0.95000017, 0.05), (1.0000001, 0.05), (0, 0.1), (0.05, 0.1), (0.1, 0.1), (0.15, 0.1), (0.2, 0.1), (0.25, 0.1), (0.3, 0.1), (0.35000002, 0.1), (0.40000004, 0.1), (0.45000005, 0.1), (0.50000006, 0.1), (0.5500001, 0.1), (0.6000001, 0.1), (0.6500001, 0.1), (0.7000001, 0.1), (0.7500001, 0.1), (0.80000013, 0.1), (0.85000014, 0.1), (0.90000015, 0.1), (0.95000017, 0.1), (1.0000001, 0.1), (0, 0.15), (0.05, 0.15), (0.1, 0.15), (0.15, 0.15), (0.2, 0.15), (0.25, 0.15), (0.3, 0.15), (0.35000002, 0.15), (0.40000004, 0.15), (0.45000005, 0.15), (0.50000006, 0.15), (0.5500001, 0.15), (0.6000001, 0.15), (0.6500001, 0.15), (0.7000001, 0.15), (0.7500001, 0.15), (0.80000013, 0.15), (0.85000014, 0.15), (0.90000015, 0.15), (0.95000017, 0.15), (1.0000001, 0.15), (0, 0.2), (0.05, 0.2), (0.1, 0.2), (0.15, 0.2), (0.2, 0.2), (0.25, 0.2), (0.3, 0.2), (0.35000002, 0.2), (0.40000004, 0.2), (0.45000005, 0.2), (0.50000006, 0.2), (0.5500001, 0.2), (0.6000001, 0.2), (0.6500001, 0.2), (0.7000001, 0.2), (0.7500001, 0.2), (0.80000013, 0.2), (0.85000014, 0.2), (0.90000015, 0.2), (0.95000017, 0.2), (1.0000001, 0.2), (0, 0.25), (0.05, 0.25), (0.1, 0.25), (0.15, 0.25), (0.2, 0.25), (0.25, 0.25), (0.3, 0.25), (0.35000002, 0.25), (0.40000004, 0.25), (0.45000005, 0.25), (0.50000006, 0.25), (0.5500001, 0.25), (0.6000001, 0.25), (0.6500001, 0.25), (0.7000001, 0.25), (0.7500001, 0.25), (0.80000013, 0.25), (0.85000014, 0.25), (0.90000015, 0.25), (0.95000017, 0.25), (1.0000001, 0.25), (0, 0.3), (0.05, 0.3), (0.1, 0.3), (0.15, 0.3), (0.2, 0.3), (0.25, 0.3), (0.3, 0.3), (0.35000002, 0.3), (0.40000004, 0.3), (0.45000005, 0.3), (0.50000006, 0.3), (0.5500001, 0.3), (0.6000001, 0.3), (0.6500001, 0.3), (0.7000001, 0.3), (0.7500001, 0.3), (0.80000013, 0.3), (0.85000014, 0.3), (0.90000015, 0.3), (0.95000017, 0.3), (1.0000001, 0.3), (0, 0.35000002), (0.05, 0.35000002), (0.1, 0.35000002), (0.15, 0.35000002), (0.2, 0.35000002), (0.25, 0.35000002), (0.3, 0.35000002), (0.35000002, 0.35000002), (0.40000004, 0.35000002), (0.45000005, 0.35000002), (0.50000006, 0.35000002), (0.5500001, 0.35000002), (0.6000001, 0.35000002), (0.6500001, 0.35000002), (0.7000001, 0.35000002), (0.7500001, 0.35000002), (0.80000013, 0.35000002), (0.85000014, 0.35000002), (0.90000015, 0.35000002), (0.95000017, 0.35000002), (1.0000001, 0.35000002), (0, 0.40000004), (0.05, 0.40000004), (0.1, 0.40000004), (0.15, 0.40000004), (0.2, 0.40000004), (0.25, 0.40000004), (0.3, 0.40000004), (0.35000002, 0.40000004), (0.40000004, 0.40000004), (0.45000005, 0.40000004), (0.50000006, 0.40000004), (0.5500001, 0.40000004), (0.6000001, 0.40000004), (0.6500001, 0.40000004), (0.7000001, 0.40000004), (0.7500001, 0.40000004), (0.80000013, 0.40000004), (0.85000014, 0.40000004), (0.90000015, 0.40000004), (0.95000017, 0.40000004), (1.0000001, 0.40000004), (0, 0.45000005), (0.05, 0.45000005), (0.1, 0.45000005), (0.15, 0.45000005), (0.2, 0.45000005), (0.25, 0.45000005), (0.3, 0.45000005), (0.35000002, 0.45000005), (0.40000004, 0.45000005), (0.45000005, 0.45000005), (0.50000006, 0.45000005), (0.5500001, 0.45000005), (0.6000001, 0.45000005), (0.6500001, 0.45000005), (0.7000001, 0.45000005), (0.7500001, 0.45000005), (0.80000013, 0.45000005), (0.85000014, 0.45000005), (0.90000015, 0.45000005), (0.95000017, 0.45000005), (1.0000001, 0.45000005), (0, 0.50000006), (0.05, 0.50000006), (0.1, 0.50000006), (0.15, 0.50000006), (0.2, 0.50000006), (0.25, 0.50000006), (0.3, 0.50000006), (0.35000002, 0.50000006), (0.40000004, 0.50000006), (0.45000005, 0.50000006), (0.50000006, 0.50000006), (0.5500001, 0.50000006), (0.6000001, 0.50000006), (0.6500001, 0.50000006), (0.7000001, 0.50000006), (0.7500001, 0.50000006), (0.80000013, 0.50000006), (0.85000014, 0.50000006), (0.90000015, 0.50000006), (0.95000017, 0.50000006), (1.0000001, 0.50000006), (0, 0.5500001), (0.05, 0.5500001), (0.1, 0.5500001), (0.15, 0.5500001), (0.2, 0.5500001), (0.25, 0.5500001), (0.3, 0.5500001), (0.35000002, 0.5500001), (0.40000004, 0.5500001), (0.45000005, 0.5500001), (0.50000006, 0.5500001), (0.5500001, 0.5500001), (0.6000001, 0.5500001), (0.6500001, 0.5500001), (0.7000001, 0.5500001), (0.7500001, 0.5500001), (0.80000013, 0.5500001), (0.85000014, 0.5500001), (0.90000015, 0.5500001), (0.95000017, 0.5500001), (1.0000001, 0.5500001), (0, 0.6000001), (0.05, 0.6000001), (0.1, 0.6000001), (0.15, 0.6000001), (0.2, 0.6000001), (0.25, 0.6000001), (0.3, 0.6000001), (0.35000002, 0.6000001), (0.40000004, 0.6000001), (0.45000005, 0.6000001), (0.50000006, 0.6000001), (0.5500001, 0.6000001), (0.6000001, 0.6000001), (0.6500001, 0.6000001), (0.7000001, 0.6000001), (0.7500001, 0.6000001), (0.80000013, 0.6000001), (0.85000014, 0.6000001), (0.90000015, 0.6000001), (0.95000017, 0.6000001), (1.0000001, 0.6000001), (0, 0.6500001), (0.05, 0.6500001), (0.1, 0.6500001), (0.15, 0.6500001), (0.2, 0.6500001), (0.25, 0.6500001), (0.3, 0.6500001), (0.35000002, 0.6500001), (0.40000004, 0.6500001), (0.45000005, 0.6500001), (0.50000006, 0.6500001), (0.5500001, 0.6500001), (0.6000001, 0.6500001), (0.6500001, 0.6500001), (0.7000001, 0.6500001), (0.7500001, 0.6500001), (0.80000013, 0.6500001), (0.85000014, 0.6500001), (0.90000015, 0.6500001), (0.95000017, 0.6500001), (1.0000001, 0.6500001), (0, 0.7000001), (0.05, 0.7000001), (0.1, 0.7000001), (0.15, 0.7000001), (0.2, 0.7000001), (0.25, 0.7000001), (0.3, 0.7000001), (0.35000002, 0.7000001), (0.40000004, 0.7000001), (0.45000005, 0.7000001), (0.50000006, 0.7000001), (0.5500001, 0.7000001), (0.6000001, 0.7000001), (0.6500001, 0.7000001), (0.7000001, 0.7000001), (0.7500001, 0.7000001), (0.80000013, 0.7000001), (0.85000014, 0.7000001), (0.90000015, 0.7000001), (0.95000017, 0.7000001), (1.0000001, 0.7000001), (0, 0.7500001), (0.05, 0.7500001), (0.1, 0.7500001), (0.15, 0.7500001), (0.2, 0.7500001), (0.25, 0.7500001), (0.3, 0.7500001), (0.35000002, 0.7500001), (0.40000004, 0.7500001), (0.45000005, 0.7500001), (0.50000006, 0.7500001), (0.5500001, 0.7500001), (0.6000001, 0.7500001), (0.6500001, 0.7500001), (0.7000001, 0.7500001), (0.7500001, 0.7500001), (0.80000013, 0.7500001), (0.85000014, 0.7500001), (0.90000015, 0.7500001), (0.95000017, 0.7500001), (1.0000001, 0.7500001), (0, 0.80000013), (0.05, 0.80000013), (0.1, 0.80000013), (0.15, 0.80000013), (0.2, 0.80000013), (0.25, 0.80000013), (0.3, 0.80000013), (0.35000002, 0.80000013), (0.40000004, 0.80000013), (0.45000005, 0.80000013), (0.50000006, 0.80000013), (0.5500001, 0.80000013), (0.6000001, 0.80000013), (0.6500001, 0.80000013), (0.7000001, 0.80000013), (0.7500001, 0.80000013), (0.80000013, 0.80000013), (0.85000014, 0.80000013), (0.90000015, 0.80000013), (0.95000017, 0.80000013), (1.0000001, 0.80000013), (0, 0.85000014), (0.05, 0.85000014), (0.1, 0.85000014), (0.15, 0.85000014), (0.2, 0.85000014), (0.25, 0.85000014), (0.3, 0.85000014), (0.35000002, 0.85000014), (0.40000004, 0.85000014), (0.45000005, 0.85000014), (0.50000006, 0.85000014), (0.5500001, 0.85000014), (0.6000001, 0.85000014), (0.6500001, 0.85000014), (0.7000001, 0.85000014), (0.7500001, 0.85000014), (0.80000013, 0.85000014), (0.85000014, 0.85000014), (0.90000015, 0.85000014), (0.95000017, 0.85000014), (1.0000001, 0.85000014), (0, 0.90000015), (0.05, 0.90000015), (0.1, 0.90000015), (0.15, 0.90000015), (0.2, 0.90000015), (0.25, 0.90000015), (0.3, 0.90000015), (0.35000002, 0.90000015), (0.40000004, 0.90000015), (0.45000005, 0.90000015), (0.50000006, 0.90000015), (0.5500001, 0.90000015), (0.6000001, 0.90000015), (0.6500001, 0.90000015), (0.7000001, 0.90000015), (0.7500001, 0.90000015), (0.80000013, 0.90000015), (0.85000014, 0.90000015), (0.90000015, 0.90000015), (0.95000017, 0.90000015), (1.0000001, 0.90000015), (0, 0.95000017), (0.05, 0.95000017), (0.1, 0.95000017), (0.15, 0.95000017), (0.2, 0.95000017), (0.25, 0.95000017), (0.3, 0.95000017), (0.35000002, 0.95000017), (0.40000004, 0.95000017), (0.45000005, 0.95000017), (0.50000006, 0.95000017), (0.5500001, 0.95000017), (0.6000001, 0.95000017), (0.6500001, 0.95000017), (0.7000001, 0.95000017), (0.7500001, 0.95000017), (0.80000013, 0.95000017), (0.85000014, 0.95000017), (0.90000015, 0.95000017), (0.95000017, 0.95000017), (1.0000001, 0.95000017), (0.025, 0), (0.075, 0), (0.125, 0), (0.17500001, 0), (0.22500001, 0), (0.275, 0), (0.32500002, 0), (0.375, 0), (0.425, 0), (0.47500002, 0), (0.525, 0), (0.575, 0), (0.625, 0), (0.675, 0), (0.72499996, 0), (0.775, 0), (0.825, 0), (0.875, 0), (0.925, 0), (0.97499996, 0), (0.025, 1), (0.075, 1), (0.125, 1), (0.17500001, 1), (0.22500001, 1), (0.275, 1), (0.32500002, 1), (0.375, 1), (0.425, 1), (0.47500002, 1), (0.525, 1), (0.575, 1), (0.625, 1), (0.675, 1), (0.72499996, 1), (0.775, 1), (0.825, 1), (0.875, 1), (0.925, 1), (0.97499996, 1)] ( - customData = { - dictionary Maya = { - token name = "map1" - } - } - interpolation = "faceVarying" - ) - int[] primvars:st:indices = [0, 1, 22, 21, 1, 2, 23, 22, 2, 3, 24, 23, 3, 4, 25, 24, 4, 5, 26, 25, 5, 6, 27, 26, 6, 7, 28, 27, 7, 8, 29, 28, 8, 9, 30, 29, 9, 10, 31, 30, 10, 11, 32, 31, 11, 12, 33, 32, 12, 13, 34, 33, 13, 14, 35, 34, 14, 15, 36, 35, 15, 16, 37, 36, 16, 17, 38, 37, 17, 18, 39, 38, 18, 19, 40, 39, 19, 20, 41, 40, 21, 22, 43, 42, 22, 23, 44, 43, 23, 24, 45, 44, 24, 25, 46, 45, 25, 26, 47, 46, 26, 27, 48, 47, 27, 28, 49, 48, 28, 29, 50, 49, 29, 30, 51, 50, 30, 31, 52, 51, 31, 32, 53, 52, 32, 33, 54, 53, 33, 34, 55, 54, 34, 35, 56, 55, 35, 36, 57, 56, 36, 37, 58, 57, 37, 38, 59, 58, 38, 39, 60, 59, 39, 40, 61, 60, 40, 41, 62, 61, 42, 43, 64, 63, 43, 44, 65, 64, 44, 45, 66, 65, 45, 46, 67, 66, 46, 47, 68, 67, 47, 48, 69, 68, 48, 49, 70, 69, 49, 50, 71, 70, 50, 51, 72, 71, 51, 52, 73, 72, 52, 53, 74, 73, 53, 54, 75, 74, 54, 55, 76, 75, 55, 56, 77, 76, 56, 57, 78, 77, 57, 58, 79, 78, 58, 59, 80, 79, 59, 60, 81, 80, 60, 61, 82, 81, 61, 62, 83, 82, 63, 64, 85, 84, 64, 65, 86, 85, 65, 66, 87, 86, 66, 67, 88, 87, 67, 68, 89, 88, 68, 69, 90, 89, 69, 70, 91, 90, 70, 71, 92, 91, 71, 72, 93, 92, 72, 73, 94, 93, 73, 74, 95, 94, 74, 75, 96, 95, 75, 76, 97, 96, 76, 77, 98, 97, 77, 78, 99, 98, 78, 79, 100, 99, 79, 80, 101, 100, 80, 81, 102, 101, 81, 82, 103, 102, 82, 83, 104, 103, 84, 85, 106, 105, 85, 86, 107, 106, 86, 87, 108, 107, 87, 88, 109, 108, 88, 89, 110, 109, 89, 90, 111, 110, 90, 91, 112, 111, 91, 92, 113, 112, 92, 93, 114, 113, 93, 94, 115, 114, 94, 95, 116, 115, 95, 96, 117, 116, 96, 97, 118, 117, 97, 98, 119, 118, 98, 99, 120, 119, 99, 100, 121, 120, 100, 101, 122, 121, 101, 102, 123, 122, 102, 103, 124, 123, 103, 104, 125, 124, 105, 106, 127, 126, 106, 107, 128, 127, 107, 108, 129, 128, 108, 109, 130, 129, 109, 110, 131, 130, 110, 111, 132, 131, 111, 112, 133, 132, 112, 113, 134, 133, 113, 114, 135, 134, 114, 115, 136, 135, 115, 116, 137, 136, 116, 117, 138, 137, 117, 118, 139, 138, 118, 119, 140, 139, 119, 120, 141, 140, 120, 121, 142, 141, 121, 122, 143, 142, 122, 123, 144, 143, 123, 124, 145, 144, 124, 125, 146, 145, 126, 127, 148, 147, 127, 128, 149, 148, 128, 129, 150, 149, 129, 130, 151, 150, 130, 131, 152, 151, 131, 132, 153, 152, 132, 133, 154, 153, 133, 134, 155, 154, 134, 135, 156, 155, 135, 136, 157, 156, 136, 137, 158, 157, 137, 138, 159, 158, 138, 139, 160, 159, 139, 140, 161, 160, 140, 141, 162, 161, 141, 142, 163, 162, 142, 143, 164, 163, 143, 144, 165, 164, 144, 145, 166, 165, 145, 146, 167, 166, 147, 148, 169, 168, 148, 149, 170, 169, 149, 150, 171, 170, 150, 151, 172, 171, 151, 152, 173, 172, 152, 153, 174, 173, 153, 154, 175, 174, 154, 155, 176, 175, 155, 156, 177, 176, 156, 157, 178, 177, 157, 158, 179, 178, 158, 159, 180, 179, 159, 160, 181, 180, 160, 161, 182, 181, 161, 162, 183, 182, 162, 163, 184, 183, 163, 164, 185, 184, 164, 165, 186, 185, 165, 166, 187, 186, 166, 167, 188, 187, 168, 169, 190, 189, 169, 170, 191, 190, 170, 171, 192, 191, 171, 172, 193, 192, 172, 173, 194, 193, 173, 174, 195, 194, 174, 175, 196, 195, 175, 176, 197, 196, 176, 177, 198, 197, 177, 178, 199, 198, 178, 179, 200, 199, 179, 180, 201, 200, 180, 181, 202, 201, 181, 182, 203, 202, 182, 183, 204, 203, 183, 184, 205, 204, 184, 185, 206, 205, 185, 186, 207, 206, 186, 187, 208, 207, 187, 188, 209, 208, 189, 190, 211, 210, 190, 191, 212, 211, 191, 192, 213, 212, 192, 193, 214, 213, 193, 194, 215, 214, 194, 195, 216, 215, 195, 196, 217, 216, 196, 197, 218, 217, 197, 198, 219, 218, 198, 199, 220, 219, 199, 200, 221, 220, 200, 201, 222, 221, 201, 202, 223, 222, 202, 203, 224, 223, 203, 204, 225, 224, 204, 205, 226, 225, 205, 206, 227, 226, 206, 207, 228, 227, 207, 208, 229, 228, 208, 209, 230, 229, 210, 211, 232, 231, 211, 212, 233, 232, 212, 213, 234, 233, 213, 214, 235, 234, 214, 215, 236, 235, 215, 216, 237, 236, 216, 217, 238, 237, 217, 218, 239, 238, 218, 219, 240, 239, 219, 220, 241, 240, 220, 221, 242, 241, 221, 222, 243, 242, 222, 223, 244, 243, 223, 224, 245, 244, 224, 225, 246, 245, 225, 226, 247, 246, 226, 227, 248, 247, 227, 228, 249, 248, 228, 229, 250, 249, 229, 230, 251, 250, 231, 232, 253, 252, 232, 233, 254, 253, 233, 234, 255, 254, 234, 235, 256, 255, 235, 236, 257, 256, 236, 237, 258, 257, 237, 238, 259, 258, 238, 239, 260, 259, 239, 240, 261, 260, 240, 241, 262, 261, 241, 242, 263, 262, 242, 243, 264, 263, 243, 244, 265, 264, 244, 245, 266, 265, 245, 246, 267, 266, 246, 247, 268, 267, 247, 248, 269, 268, 248, 249, 270, 269, 249, 250, 271, 270, 250, 251, 272, 271, 252, 253, 274, 273, 253, 254, 275, 274, 254, 255, 276, 275, 255, 256, 277, 276, 256, 257, 278, 277, 257, 258, 279, 278, 258, 259, 280, 279, 259, 260, 281, 280, 260, 261, 282, 281, 261, 262, 283, 282, 262, 263, 284, 283, 263, 264, 285, 284, 264, 265, 286, 285, 265, 266, 287, 286, 266, 267, 288, 287, 267, 268, 289, 288, 268, 269, 290, 289, 269, 270, 291, 290, 270, 271, 292, 291, 271, 272, 293, 292, 273, 274, 295, 294, 274, 275, 296, 295, 275, 276, 297, 296, 276, 277, 298, 297, 277, 278, 299, 298, 278, 279, 300, 299, 279, 280, 301, 300, 280, 281, 302, 301, 281, 282, 303, 302, 282, 283, 304, 303, 283, 284, 305, 304, 284, 285, 306, 305, 285, 286, 307, 306, 286, 287, 308, 307, 287, 288, 309, 308, 288, 289, 310, 309, 289, 290, 311, 310, 290, 291, 312, 311, 291, 292, 313, 312, 292, 293, 314, 313, 294, 295, 316, 315, 295, 296, 317, 316, 296, 297, 318, 317, 297, 298, 319, 318, 298, 299, 320, 319, 299, 300, 321, 320, 300, 301, 322, 321, 301, 302, 323, 322, 302, 303, 324, 323, 303, 304, 325, 324, 304, 305, 326, 325, 305, 306, 327, 326, 306, 307, 328, 327, 307, 308, 329, 328, 308, 309, 330, 329, 309, 310, 331, 330, 310, 311, 332, 331, 311, 312, 333, 332, 312, 313, 334, 333, 313, 314, 335, 334, 315, 316, 337, 336, 316, 317, 338, 337, 317, 318, 339, 338, 318, 319, 340, 339, 319, 320, 341, 340, 320, 321, 342, 341, 321, 322, 343, 342, 322, 323, 344, 343, 323, 324, 345, 344, 324, 325, 346, 345, 325, 326, 347, 346, 326, 327, 348, 347, 327, 328, 349, 348, 328, 329, 350, 349, 329, 330, 351, 350, 330, 331, 352, 351, 331, 332, 353, 352, 332, 333, 354, 353, 333, 334, 355, 354, 334, 335, 356, 355, 336, 337, 358, 357, 337, 338, 359, 358, 338, 339, 360, 359, 339, 340, 361, 360, 340, 341, 362, 361, 341, 342, 363, 362, 342, 343, 364, 363, 343, 344, 365, 364, 344, 345, 366, 365, 345, 346, 367, 366, 346, 347, 368, 367, 347, 348, 369, 368, 348, 349, 370, 369, 349, 350, 371, 370, 350, 351, 372, 371, 351, 352, 373, 372, 352, 353, 374, 373, 353, 354, 375, 374, 354, 355, 376, 375, 355, 356, 377, 376, 357, 358, 379, 378, 358, 359, 380, 379, 359, 360, 381, 380, 360, 361, 382, 381, 361, 362, 383, 382, 362, 363, 384, 383, 363, 364, 385, 384, 364, 365, 386, 385, 365, 366, 387, 386, 366, 367, 388, 387, 367, 368, 389, 388, 368, 369, 390, 389, 369, 370, 391, 390, 370, 371, 392, 391, 371, 372, 393, 392, 372, 373, 394, 393, 373, 374, 395, 394, 374, 375, 396, 395, 375, 376, 397, 396, 376, 377, 398, 397, 1, 0, 399, 2, 1, 400, 3, 2, 401, 4, 3, 402, 5, 4, 403, 6, 5, 404, 7, 6, 405, 8, 7, 406, 9, 8, 407, 10, 9, 408, 11, 10, 409, 12, 11, 410, 13, 12, 411, 14, 13, 412, 15, 14, 413, 16, 15, 414, 17, 16, 415, 18, 17, 416, 19, 18, 417, 20, 19, 418, 378, 379, 419, 379, 380, 420, 380, 381, 421, 381, 382, 422, 382, 383, 423, 383, 384, 424, 384, 385, 425, 385, 386, 426, 386, 387, 427, 387, 388, 428, 388, 389, 429, 389, 390, 430, 390, 391, 431, 391, 392, 432, 392, 393, 433, 393, 394, 434, 394, 395, 435, 395, 396, 436, 396, 397, 437, 397, 398, 438] - token visibility = "inherited" + def GeomSubset "upperHalf" ( prepend apiSchemas = ["MaterialBindingAPI"] From 168ef7815647e646bd4f6199d04e79e60159706e Mon Sep 17 00:00:00 2001 From: debloip Date: Tue, 2 Jul 2024 14:21:34 -0400 Subject: [PATCH 36/75] HYDRA-1058 : Add upper half geom subset cube scene --- .../UpperHalfGeomSubsetCube.usda | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetCube.usda diff --git a/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetCube.usda b/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetCube.usda new file mode 100644 index 0000000000..ad3b9eaed2 --- /dev/null +++ b/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetCube.usda @@ -0,0 +1,54 @@ +#usda 1.0 + +def Mesh "pCube1" ( + kind = "component" +) +{ + uniform bool doubleSided = 1 + float3[] extent = [(-0.5, -0.5, -0.5), (0.5, 0.5, 0.5)] + 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 12, 11, 1, 2, 13, 12, 2, 3, 14, 13, 3, 4, 15, 14, 4, 5, 16, 15, 5, 6, 17, 16, 6, 7, 18, 17, 7, 8, 19, 18, 8, 9, 20, 19, 9, 10, 21, 20, 11, 12, 23, 22, 12, 13, 24, 23, 13, 14, 25, 24, 14, 15, 26, 25, 15, 16, 27, 26, 16, 17, 28, 27, 17, 18, 29, 28, 18, 19, 30, 29, 19, 20, 31, 30, 20, 21, 32, 31, 22, 23, 34, 33, 23, 24, 35, 34, 24, 25, 36, 35, 25, 26, 37, 36, 26, 27, 38, 37, 27, 28, 39, 38, 28, 29, 40, 39, 29, 30, 41, 40, 30, 31, 42, 41, 31, 32, 43, 42, 33, 34, 45, 44, 34, 35, 46, 45, 35, 36, 47, 46, 36, 37, 48, 47, 37, 38, 49, 48, 38, 39, 50, 49, 39, 40, 51, 50, 40, 41, 52, 51, 41, 42, 53, 52, 42, 43, 54, 53, 44, 45, 56, 55, 45, 46, 57, 56, 46, 47, 58, 57, 47, 48, 59, 58, 48, 49, 60, 59, 49, 50, 61, 60, 50, 51, 62, 61, 51, 52, 63, 62, 52, 53, 64, 63, 53, 54, 65, 64, 55, 56, 67, 66, 56, 57, 68, 67, 57, 58, 69, 68, 58, 59, 70, 69, 59, 60, 71, 70, 60, 61, 72, 71, 61, 62, 73, 72, 62, 63, 74, 73, 63, 64, 75, 74, 64, 65, 76, 75, 66, 67, 78, 77, 67, 68, 79, 78, 68, 69, 80, 79, 69, 70, 81, 80, 70, 71, 82, 81, 71, 72, 83, 82, 72, 73, 84, 83, 73, 74, 85, 84, 74, 75, 86, 85, 75, 76, 87, 86, 77, 78, 89, 88, 78, 79, 90, 89, 79, 80, 91, 90, 80, 81, 92, 91, 81, 82, 93, 92, 82, 83, 94, 93, 83, 84, 95, 94, 84, 85, 96, 95, 85, 86, 97, 96, 86, 87, 98, 97, 88, 89, 100, 99, 89, 90, 101, 100, 90, 91, 102, 101, 91, 92, 103, 102, 92, 93, 104, 103, 93, 94, 105, 104, 94, 95, 106, 105, 95, 96, 107, 106, 96, 97, 108, 107, 97, 98, 109, 108, 99, 100, 111, 110, 100, 101, 112, 111, 101, 102, 113, 112, 102, 103, 114, 113, 103, 104, 115, 114, 104, 105, 116, 115, 105, 106, 117, 116, 106, 107, 118, 117, 107, 108, 119, 118, 108, 109, 120, 119, 110, 111, 122, 121, 111, 112, 123, 122, 112, 113, 124, 123, 113, 114, 125, 124, 114, 115, 126, 125, 115, 116, 127, 126, 116, 117, 128, 127, 117, 118, 129, 128, 118, 119, 130, 129, 119, 120, 131, 130, 121, 122, 133, 132, 122, 123, 134, 133, 123, 124, 135, 134, 124, 125, 136, 135, 125, 126, 137, 136, 126, 127, 138, 137, 127, 128, 139, 138, 128, 129, 140, 139, 129, 130, 141, 140, 130, 131, 142, 141, 132, 133, 144, 143, 133, 134, 145, 144, 134, 135, 146, 145, 135, 136, 147, 146, 136, 137, 148, 147, 137, 138, 149, 148, 138, 139, 150, 149, 139, 140, 151, 150, 140, 141, 152, 151, 141, 142, 153, 152, 143, 144, 155, 154, 144, 145, 156, 155, 145, 146, 157, 156, 146, 147, 158, 157, 147, 148, 159, 158, 148, 149, 160, 159, 149, 150, 161, 160, 150, 151, 162, 161, 151, 152, 163, 162, 152, 153, 164, 163, 154, 155, 166, 165, 155, 156, 167, 166, 156, 157, 168, 167, 157, 158, 169, 168, 158, 159, 170, 169, 159, 160, 171, 170, 160, 161, 172, 171, 161, 162, 173, 172, 162, 163, 174, 173, 163, 164, 175, 174, 165, 166, 177, 176, 166, 167, 178, 177, 167, 168, 179, 178, 168, 169, 180, 179, 169, 170, 181, 180, 170, 171, 182, 181, 171, 172, 183, 182, 172, 173, 184, 183, 173, 174, 185, 184, 174, 175, 186, 185, 176, 177, 188, 187, 177, 178, 189, 188, 178, 179, 190, 189, 179, 180, 191, 190, 180, 181, 192, 191, 181, 182, 193, 192, 182, 183, 194, 193, 183, 184, 195, 194, 184, 185, 196, 195, 185, 186, 197, 196, 187, 188, 199, 198, 188, 189, 200, 199, 189, 190, 201, 200, 190, 191, 202, 201, 191, 192, 203, 202, 192, 193, 204, 203, 193, 194, 205, 204, 194, 195, 206, 205, 195, 196, 207, 206, 196, 197, 208, 207, 198, 199, 210, 209, 199, 200, 211, 210, 200, 201, 212, 211, 201, 202, 213, 212, 202, 203, 214, 213, 203, 204, 215, 214, 204, 205, 216, 215, 205, 206, 217, 216, 206, 207, 218, 217, 207, 208, 219, 218, 209, 210, 221, 220, 210, 211, 222, 221, 211, 212, 223, 222, 212, 213, 224, 223, 213, 214, 225, 224, 214, 215, 226, 225, 215, 216, 227, 226, 216, 217, 228, 227, 217, 218, 229, 228, 218, 219, 230, 229, 220, 221, 232, 231, 221, 222, 233, 232, 222, 223, 234, 233, 223, 224, 235, 234, 224, 225, 236, 235, 225, 226, 237, 236, 226, 227, 238, 237, 227, 228, 239, 238, 228, 229, 240, 239, 229, 230, 241, 240, 231, 232, 243, 242, 232, 233, 244, 243, 233, 234, 245, 244, 234, 235, 246, 245, 235, 236, 247, 246, 236, 237, 248, 247, 237, 238, 249, 248, 238, 239, 250, 249, 239, 240, 251, 250, 240, 241, 252, 251, 242, 243, 254, 253, 243, 244, 255, 254, 244, 245, 256, 255, 245, 246, 257, 256, 246, 247, 258, 257, 247, 248, 259, 258, 248, 249, 260, 259, 249, 250, 261, 260, 250, 251, 262, 261, 251, 252, 263, 262, 253, 254, 265, 264, 254, 255, 266, 265, 255, 256, 267, 266, 256, 257, 268, 267, 257, 258, 269, 268, 258, 259, 270, 269, 259, 260, 271, 270, 260, 261, 272, 271, 261, 262, 273, 272, 262, 263, 274, 273, 264, 265, 276, 275, 265, 266, 277, 276, 266, 267, 278, 277, 267, 268, 279, 278, 268, 269, 280, 279, 269, 270, 281, 280, 270, 271, 282, 281, 271, 272, 283, 282, 272, 273, 284, 283, 273, 274, 285, 284, 275, 276, 287, 286, 276, 277, 288, 287, 277, 278, 289, 288, 278, 279, 290, 289, 279, 280, 291, 290, 280, 281, 292, 291, 281, 282, 293, 292, 282, 283, 294, 293, 283, 284, 295, 294, 284, 285, 296, 295, 286, 287, 298, 297, 287, 288, 299, 298, 288, 289, 300, 299, 289, 290, 301, 300, 290, 291, 302, 301, 291, 292, 303, 302, 292, 293, 304, 303, 293, 294, 305, 304, 294, 295, 306, 305, 295, 296, 307, 306, 297, 298, 309, 308, 298, 299, 310, 309, 299, 300, 311, 310, 300, 301, 312, 311, 301, 302, 313, 312, 302, 303, 314, 313, 303, 304, 315, 314, 304, 305, 316, 315, 305, 306, 317, 316, 306, 307, 318, 317, 308, 309, 320, 319, 309, 310, 321, 320, 310, 311, 322, 321, 311, 312, 323, 322, 312, 313, 324, 323, 313, 314, 325, 324, 314, 315, 326, 325, 315, 316, 327, 326, 316, 317, 328, 327, 317, 318, 329, 328, 319, 320, 331, 330, 320, 321, 332, 331, 321, 322, 333, 332, 322, 323, 334, 333, 323, 324, 335, 334, 324, 325, 336, 335, 325, 326, 337, 336, 326, 327, 338, 337, 327, 328, 339, 338, 328, 329, 340, 339, 330, 331, 342, 341, 331, 332, 343, 342, 332, 333, 344, 343, 333, 334, 345, 344, 334, 335, 346, 345, 335, 336, 347, 346, 336, 337, 348, 347, 337, 338, 349, 348, 338, 339, 350, 349, 339, 340, 351, 350, 341, 342, 353, 352, 342, 343, 354, 353, 343, 344, 355, 354, 344, 345, 356, 355, 345, 346, 357, 356, 346, 347, 358, 357, 347, 348, 359, 358, 348, 349, 360, 359, 349, 350, 361, 360, 350, 351, 362, 361, 352, 353, 364, 363, 353, 354, 365, 364, 354, 355, 366, 365, 355, 356, 367, 366, 356, 357, 368, 367, 357, 358, 369, 368, 358, 359, 370, 369, 359, 360, 371, 370, 360, 361, 372, 371, 361, 362, 373, 372, 363, 364, 375, 374, 364, 365, 376, 375, 365, 366, 377, 376, 366, 367, 378, 377, 367, 368, 379, 378, 368, 369, 380, 379, 369, 370, 381, 380, 370, 371, 382, 381, 371, 372, 383, 382, 372, 373, 384, 383, 374, 375, 386, 385, 375, 376, 387, 386, 376, 377, 388, 387, 377, 378, 389, 388, 378, 379, 390, 389, 379, 380, 391, 390, 380, 381, 392, 391, 381, 382, 393, 392, 382, 383, 394, 393, 383, 384, 395, 394, 385, 386, 397, 396, 386, 387, 398, 397, 387, 388, 399, 398, 388, 389, 400, 399, 389, 390, 401, 400, 390, 391, 402, 401, 391, 392, 403, 402, 392, 393, 404, 403, 393, 394, 405, 404, 394, 395, 406, 405, 396, 397, 408, 407, 397, 398, 409, 408, 398, 399, 410, 409, 399, 400, 411, 410, 400, 401, 412, 411, 401, 402, 413, 412, 402, 403, 414, 413, 403, 404, 415, 414, 404, 405, 416, 415, 405, 406, 417, 416, 407, 408, 419, 418, 408, 409, 420, 419, 409, 410, 421, 420, 410, 411, 422, 421, 411, 412, 423, 422, 412, 413, 424, 423, 413, 414, 425, 424, 414, 415, 426, 425, 415, 416, 427, 426, 416, 417, 428, 427, 418, 419, 430, 429, 419, 420, 431, 430, 420, 421, 432, 431, 421, 422, 433, 432, 422, 423, 434, 433, 423, 424, 435, 434, 424, 425, 436, 435, 425, 426, 437, 436, 426, 427, 438, 437, 427, 428, 439, 438, 429, 430, 1, 0, 430, 431, 2, 1, 431, 432, 3, 2, 432, 433, 4, 3, 433, 434, 5, 4, 434, 435, 6, 5, 435, 436, 7, 6, 436, 437, 8, 7, 437, 438, 9, 8, 438, 439, 10, 9, 351, 340, 329, 440, 362, 351, 440, 441, 373, 362, 441, 442, 384, 373, 442, 443, 395, 384, 443, 444, 406, 395, 444, 445, 417, 406, 445, 446, 428, 417, 446, 447, 439, 428, 447, 448, 10, 439, 448, 21, 440, 329, 318, 449, 441, 440, 449, 450, 442, 441, 450, 451, 443, 442, 451, 452, 444, 443, 452, 453, 445, 444, 453, 454, 446, 445, 454, 455, 447, 446, 455, 456, 448, 447, 456, 457, 21, 448, 457, 32, 449, 318, 307, 458, 450, 449, 458, 459, 451, 450, 459, 460, 452, 451, 460, 461, 453, 452, 461, 462, 454, 453, 462, 463, 455, 454, 463, 464, 456, 455, 464, 465, 457, 456, 465, 466, 32, 457, 466, 43, 458, 307, 296, 467, 459, 458, 467, 468, 460, 459, 468, 469, 461, 460, 469, 470, 462, 461, 470, 471, 463, 462, 471, 472, 464, 463, 472, 473, 465, 464, 473, 474, 466, 465, 474, 475, 43, 466, 475, 54, 467, 296, 285, 476, 468, 467, 476, 477, 469, 468, 477, 478, 470, 469, 478, 479, 471, 470, 479, 480, 472, 471, 480, 481, 473, 472, 481, 482, 474, 473, 482, 483, 475, 474, 483, 484, 54, 475, 484, 65, 476, 285, 274, 485, 477, 476, 485, 486, 478, 477, 486, 487, 479, 478, 487, 488, 480, 479, 488, 489, 481, 480, 489, 490, 482, 481, 490, 491, 483, 482, 491, 492, 484, 483, 492, 493, 65, 484, 493, 76, 485, 274, 263, 494, 486, 485, 494, 495, 487, 486, 495, 496, 488, 487, 496, 497, 489, 488, 497, 498, 490, 489, 498, 499, 491, 490, 499, 500, 492, 491, 500, 501, 493, 492, 501, 502, 76, 493, 502, 87, 494, 263, 252, 503, 495, 494, 503, 504, 496, 495, 504, 505, 497, 496, 505, 506, 498, 497, 506, 507, 499, 498, 507, 508, 500, 499, 508, 509, 501, 500, 509, 510, 502, 501, 510, 511, 87, 502, 511, 98, 503, 252, 241, 512, 504, 503, 512, 513, 505, 504, 513, 514, 506, 505, 514, 515, 507, 506, 515, 516, 508, 507, 516, 517, 509, 508, 517, 518, 510, 509, 518, 519, 511, 510, 519, 520, 98, 511, 520, 109, 512, 241, 230, 219, 513, 512, 219, 208, 514, 513, 208, 197, 515, 514, 197, 186, 516, 515, 186, 175, 517, 516, 175, 164, 518, 517, 164, 153, 519, 518, 153, 142, 520, 519, 142, 131, 109, 520, 131, 120, 330, 341, 521, 319, 341, 352, 522, 521, 352, 363, 523, 522, 363, 374, 524, 523, 374, 385, 525, 524, 385, 396, 526, 525, 396, 407, 527, 526, 407, 418, 528, 527, 418, 429, 529, 528, 429, 0, 11, 529, 319, 521, 530, 308, 521, 522, 531, 530, 522, 523, 532, 531, 523, 524, 533, 532, 524, 525, 534, 533, 525, 526, 535, 534, 526, 527, 536, 535, 527, 528, 537, 536, 528, 529, 538, 537, 529, 11, 22, 538, 308, 530, 539, 297, 530, 531, 540, 539, 531, 532, 541, 540, 532, 533, 542, 541, 533, 534, 543, 542, 534, 535, 544, 543, 535, 536, 545, 544, 536, 537, 546, 545, 537, 538, 547, 546, 538, 22, 33, 547, 297, 539, 548, 286, 539, 540, 549, 548, 540, 541, 550, 549, 541, 542, 551, 550, 542, 543, 552, 551, 543, 544, 553, 552, 544, 545, 554, 553, 545, 546, 555, 554, 546, 547, 556, 555, 547, 33, 44, 556, 286, 548, 557, 275, 548, 549, 558, 557, 549, 550, 559, 558, 550, 551, 560, 559, 551, 552, 561, 560, 552, 553, 562, 561, 553, 554, 563, 562, 554, 555, 564, 563, 555, 556, 565, 564, 556, 44, 55, 565, 275, 557, 566, 264, 557, 558, 567, 566, 558, 559, 568, 567, 559, 560, 569, 568, 560, 561, 570, 569, 561, 562, 571, 570, 562, 563, 572, 571, 563, 564, 573, 572, 564, 565, 574, 573, 565, 55, 66, 574, 264, 566, 575, 253, 566, 567, 576, 575, 567, 568, 577, 576, 568, 569, 578, 577, 569, 570, 579, 578, 570, 571, 580, 579, 571, 572, 581, 580, 572, 573, 582, 581, 573, 574, 583, 582, 574, 66, 77, 583, 253, 575, 584, 242, 575, 576, 585, 584, 576, 577, 586, 585, 577, 578, 587, 586, 578, 579, 588, 587, 579, 580, 589, 588, 580, 581, 590, 589, 581, 582, 591, 590, 582, 583, 592, 591, 583, 77, 88, 592, 242, 584, 593, 231, 584, 585, 594, 593, 585, 586, 595, 594, 586, 587, 596, 595, 587, 588, 597, 596, 588, 589, 598, 597, 589, 590, 599, 598, 590, 591, 600, 599, 591, 592, 601, 600, 592, 88, 99, 601, 231, 593, 209, 220, 593, 594, 198, 209, 594, 595, 187, 198, 595, 596, 176, 187, 596, 597, 165, 176, 597, 598, 154, 165, 598, 599, 143, 154, 599, 600, 132, 143, 600, 601, 121, 132, 601, 99, 110, 121] + point3f[] points = [(-0.5, -0.5, 0.5), (-0.4, -0.5, 0.5), (-0.3, -0.5, 0.5), (-0.20000002, -0.5, 0.5), (-0.10000002, -0.5, 0.5), (-1.4901161e-8, -0.5, 0.5), (0.09999999, -0.5, 0.5), (0.19999999, -0.5, 0.5), (0.29999998, -0.5, 0.5), (0.39999998, -0.5, 0.5), (0.49999997, -0.5, 0.5), (-0.5, -0.4, 0.5), (-0.4, -0.4, 0.5), (-0.3, -0.4, 0.5), (-0.20000002, -0.4, 0.5), (-0.10000002, -0.4, 0.5), (-1.4901161e-8, -0.4, 0.5), (0.09999999, -0.4, 0.5), (0.19999999, -0.4, 0.5), (0.29999998, -0.4, 0.5), (0.39999998, -0.4, 0.5), (0.49999997, -0.4, 0.5), (-0.5, -0.3, 0.5), (-0.4, -0.3, 0.5), (-0.3, -0.3, 0.5), (-0.20000002, -0.3, 0.5), (-0.10000002, -0.3, 0.5), (-1.4901161e-8, -0.3, 0.5), (0.09999999, -0.3, 0.5), (0.19999999, -0.3, 0.5), (0.29999998, -0.3, 0.5), (0.39999998, -0.3, 0.5), (0.49999997, -0.3, 0.5), (-0.5, -0.20000002, 0.5), (-0.4, -0.20000002, 0.5), (-0.3, -0.20000002, 0.5), (-0.20000002, -0.20000002, 0.5), (-0.10000002, -0.20000002, 0.5), (-1.4901161e-8, -0.20000002, 0.5), (0.09999999, -0.20000002, 0.5), (0.19999999, -0.20000002, 0.5), (0.29999998, -0.20000002, 0.5), (0.39999998, -0.20000002, 0.5), (0.49999997, -0.20000002, 0.5), (-0.5, -0.10000002, 0.5), (-0.4, -0.10000002, 0.5), (-0.3, -0.10000002, 0.5), (-0.20000002, -0.10000002, 0.5), (-0.10000002, -0.10000002, 0.5), (-1.4901161e-8, -0.10000002, 0.5), (0.09999999, -0.10000002, 0.5), (0.19999999, -0.10000002, 0.5), (0.29999998, -0.10000002, 0.5), (0.39999998, -0.10000002, 0.5), (0.49999997, -0.10000002, 0.5), (-0.5, -1.4901161e-8, 0.5), (-0.4, -1.4901161e-8, 0.5), (-0.3, -1.4901161e-8, 0.5), (-0.20000002, -1.4901161e-8, 0.5), (-0.10000002, -1.4901161e-8, 0.5), (-1.4901161e-8, -1.4901161e-8, 0.5), (0.09999999, -1.4901161e-8, 0.5), (0.19999999, -1.4901161e-8, 0.5), (0.29999998, -1.4901161e-8, 0.5), (0.39999998, -1.4901161e-8, 0.5), (0.49999997, -1.4901161e-8, 0.5), (-0.5, 0.09999999, 0.5), (-0.4, 0.09999999, 0.5), (-0.3, 0.09999999, 0.5), (-0.20000002, 0.09999999, 0.5), (-0.10000002, 0.09999999, 0.5), (-1.4901161e-8, 0.09999999, 0.5), (0.09999999, 0.09999999, 0.5), (0.19999999, 0.09999999, 0.5), (0.29999998, 0.09999999, 0.5), (0.39999998, 0.09999999, 0.5), (0.49999997, 0.09999999, 0.5), (-0.5, 0.19999999, 0.5), (-0.4, 0.19999999, 0.5), (-0.3, 0.19999999, 0.5), (-0.20000002, 0.19999999, 0.5), (-0.10000002, 0.19999999, 0.5), (-1.4901161e-8, 0.19999999, 0.5), (0.09999999, 0.19999999, 0.5), (0.19999999, 0.19999999, 0.5), (0.29999998, 0.19999999, 0.5), (0.39999998, 0.19999999, 0.5), (0.49999997, 0.19999999, 0.5), (-0.5, 0.29999998, 0.5), (-0.4, 0.29999998, 0.5), (-0.3, 0.29999998, 0.5), (-0.20000002, 0.29999998, 0.5), (-0.10000002, 0.29999998, 0.5), (-1.4901161e-8, 0.29999998, 0.5), (0.09999999, 0.29999998, 0.5), (0.19999999, 0.29999998, 0.5), (0.29999998, 0.29999998, 0.5), (0.39999998, 0.29999998, 0.5), (0.49999997, 0.29999998, 0.5), (-0.5, 0.39999998, 0.5), (-0.4, 0.39999998, 0.5), (-0.3, 0.39999998, 0.5), (-0.20000002, 0.39999998, 0.5), (-0.10000002, 0.39999998, 0.5), (-1.4901161e-8, 0.39999998, 0.5), (0.09999999, 0.39999998, 0.5), (0.19999999, 0.39999998, 0.5), (0.29999998, 0.39999998, 0.5), (0.39999998, 0.39999998, 0.5), (0.49999997, 0.39999998, 0.5), (-0.5, 0.5, 0.5), (-0.4, 0.5, 0.5), (-0.3, 0.5, 0.5), (-0.20000002, 0.5, 0.5), (-0.10000002, 0.5, 0.5), (-1.4901161e-8, 0.5, 0.5), (0.09999999, 0.5, 0.5), (0.19999999, 0.5, 0.5), (0.29999998, 0.5, 0.5), (0.39999998, 0.5, 0.5), (0.49999997, 0.5, 0.5), (-0.5, 0.5, 0.4), (-0.4, 0.5, 0.4), (-0.3, 0.5, 0.4), (-0.20000002, 0.5, 0.4), (-0.10000002, 0.5, 0.4), (-1.4901161e-8, 0.5, 0.4), (0.09999999, 0.5, 0.4), (0.19999999, 0.5, 0.4), (0.29999998, 0.5, 0.4), (0.39999998, 0.5, 0.4), (0.49999997, 0.5, 0.4), (-0.5, 0.5, 0.3), (-0.4, 0.5, 0.3), (-0.3, 0.5, 0.3), (-0.20000002, 0.5, 0.3), (-0.10000002, 0.5, 0.3), (-1.4901161e-8, 0.5, 0.3), (0.09999999, 0.5, 0.3), (0.19999999, 0.5, 0.3), (0.29999998, 0.5, 0.3), (0.39999998, 0.5, 0.3), (0.49999997, 0.5, 0.3), (-0.5, 0.5, 0.20000002), (-0.4, 0.5, 0.20000002), (-0.3, 0.5, 0.20000002), (-0.20000002, 0.5, 0.20000002), (-0.10000002, 0.5, 0.20000002), (-1.4901161e-8, 0.5, 0.20000002), (0.09999999, 0.5, 0.20000002), (0.19999999, 0.5, 0.20000002), (0.29999998, 0.5, 0.20000002), (0.39999998, 0.5, 0.20000002), (0.49999997, 0.5, 0.20000002), (-0.5, 0.5, 0.10000002), (-0.4, 0.5, 0.10000002), (-0.3, 0.5, 0.10000002), (-0.20000002, 0.5, 0.10000002), (-0.10000002, 0.5, 0.10000002), (-1.4901161e-8, 0.5, 0.10000002), (0.09999999, 0.5, 0.10000002), (0.19999999, 0.5, 0.10000002), (0.29999998, 0.5, 0.10000002), (0.39999998, 0.5, 0.10000002), (0.49999997, 0.5, 0.10000002), (-0.5, 0.5, 1.4901161e-8), (-0.4, 0.5, 1.4901161e-8), (-0.3, 0.5, 1.4901161e-8), (-0.20000002, 0.5, 1.4901161e-8), (-0.10000002, 0.5, 1.4901161e-8), (-1.4901161e-8, 0.5, 1.4901161e-8), (0.09999999, 0.5, 1.4901161e-8), (0.19999999, 0.5, 1.4901161e-8), (0.29999998, 0.5, 1.4901161e-8), (0.39999998, 0.5, 1.4901161e-8), (0.49999997, 0.5, 1.4901161e-8), (-0.5, 0.5, -0.09999999), (-0.4, 0.5, -0.09999999), (-0.3, 0.5, -0.09999999), (-0.20000002, 0.5, -0.09999999), (-0.10000002, 0.5, -0.09999999), (-1.4901161e-8, 0.5, -0.09999999), (0.09999999, 0.5, -0.09999999), (0.19999999, 0.5, -0.09999999), (0.29999998, 0.5, -0.09999999), (0.39999998, 0.5, -0.09999999), (0.49999997, 0.5, -0.09999999), (-0.5, 0.5, -0.19999999), (-0.4, 0.5, -0.19999999), (-0.3, 0.5, -0.19999999), (-0.20000002, 0.5, -0.19999999), (-0.10000002, 0.5, -0.19999999), (-1.4901161e-8, 0.5, -0.19999999), (0.09999999, 0.5, -0.19999999), (0.19999999, 0.5, -0.19999999), (0.29999998, 0.5, -0.19999999), (0.39999998, 0.5, -0.19999999), (0.49999997, 0.5, -0.19999999), (-0.5, 0.5, -0.29999998), (-0.4, 0.5, -0.29999998), (-0.3, 0.5, -0.29999998), (-0.20000002, 0.5, -0.29999998), (-0.10000002, 0.5, -0.29999998), (-1.4901161e-8, 0.5, -0.29999998), (0.09999999, 0.5, -0.29999998), (0.19999999, 0.5, -0.29999998), (0.29999998, 0.5, -0.29999998), (0.39999998, 0.5, -0.29999998), (0.49999997, 0.5, -0.29999998), (-0.5, 0.5, -0.39999998), (-0.4, 0.5, -0.39999998), (-0.3, 0.5, -0.39999998), (-0.20000002, 0.5, -0.39999998), (-0.10000002, 0.5, -0.39999998), (-1.4901161e-8, 0.5, -0.39999998), (0.09999999, 0.5, -0.39999998), (0.19999999, 0.5, -0.39999998), (0.29999998, 0.5, -0.39999998), (0.39999998, 0.5, -0.39999998), (0.49999997, 0.5, -0.39999998), (-0.5, 0.5, -0.5), (-0.4, 0.5, -0.5), (-0.3, 0.5, -0.5), (-0.20000002, 0.5, -0.5), (-0.10000002, 0.5, -0.5), (-1.4901161e-8, 0.5, -0.5), (0.09999999, 0.5, -0.5), (0.19999999, 0.5, -0.5), (0.29999998, 0.5, -0.5), (0.39999998, 0.5, -0.5), (0.49999997, 0.5, -0.5), (-0.5, 0.4, -0.5), (-0.4, 0.4, -0.5), (-0.3, 0.4, -0.5), (-0.20000002, 0.4, -0.5), (-0.10000002, 0.4, -0.5), (-1.4901161e-8, 0.4, -0.5), (0.09999999, 0.4, -0.5), (0.19999999, 0.4, -0.5), (0.29999998, 0.4, -0.5), (0.39999998, 0.4, -0.5), (0.49999997, 0.4, -0.5), (-0.5, 0.3, -0.5), (-0.4, 0.3, -0.5), (-0.3, 0.3, -0.5), (-0.20000002, 0.3, -0.5), (-0.10000002, 0.3, -0.5), (-1.4901161e-8, 0.3, -0.5), (0.09999999, 0.3, -0.5), (0.19999999, 0.3, -0.5), (0.29999998, 0.3, -0.5), (0.39999998, 0.3, -0.5), (0.49999997, 0.3, -0.5), (-0.5, 0.20000002, -0.5), (-0.4, 0.20000002, -0.5), (-0.3, 0.20000002, -0.5), (-0.20000002, 0.20000002, -0.5), (-0.10000002, 0.20000002, -0.5), (-1.4901161e-8, 0.20000002, -0.5), (0.09999999, 0.20000002, -0.5), (0.19999999, 0.20000002, -0.5), (0.29999998, 0.20000002, -0.5), (0.39999998, 0.20000002, -0.5), (0.49999997, 0.20000002, -0.5), (-0.5, 0.10000002, -0.5), (-0.4, 0.10000002, -0.5), (-0.3, 0.10000002, -0.5), (-0.20000002, 0.10000002, -0.5), (-0.10000002, 0.10000002, -0.5), (-1.4901161e-8, 0.10000002, -0.5), (0.09999999, 0.10000002, -0.5), (0.19999999, 0.10000002, -0.5), (0.29999998, 0.10000002, -0.5), (0.39999998, 0.10000002, -0.5), (0.49999997, 0.10000002, -0.5), (-0.5, 1.4901161e-8, -0.5), (-0.4, 1.4901161e-8, -0.5), (-0.3, 1.4901161e-8, -0.5), (-0.20000002, 1.4901161e-8, -0.5), (-0.10000002, 1.4901161e-8, -0.5), (-1.4901161e-8, 1.4901161e-8, -0.5), (0.09999999, 1.4901161e-8, -0.5), (0.19999999, 1.4901161e-8, -0.5), (0.29999998, 1.4901161e-8, -0.5), (0.39999998, 1.4901161e-8, -0.5), (0.49999997, 1.4901161e-8, -0.5), (-0.5, -0.09999999, -0.5), (-0.4, -0.09999999, -0.5), (-0.3, -0.09999999, -0.5), (-0.20000002, -0.09999999, -0.5), (-0.10000002, -0.09999999, -0.5), (-1.4901161e-8, -0.09999999, -0.5), (0.09999999, -0.09999999, -0.5), (0.19999999, -0.09999999, -0.5), (0.29999998, -0.09999999, -0.5), (0.39999998, -0.09999999, -0.5), (0.49999997, -0.09999999, -0.5), (-0.5, -0.19999999, -0.5), (-0.4, -0.19999999, -0.5), (-0.3, -0.19999999, -0.5), (-0.20000002, -0.19999999, -0.5), (-0.10000002, -0.19999999, -0.5), (-1.4901161e-8, -0.19999999, -0.5), (0.09999999, -0.19999999, -0.5), (0.19999999, -0.19999999, -0.5), (0.29999998, -0.19999999, -0.5), (0.39999998, -0.19999999, -0.5), (0.49999997, -0.19999999, -0.5), (-0.5, -0.29999998, -0.5), (-0.4, -0.29999998, -0.5), (-0.3, -0.29999998, -0.5), (-0.20000002, -0.29999998, -0.5), (-0.10000002, -0.29999998, -0.5), (-1.4901161e-8, -0.29999998, -0.5), (0.09999999, -0.29999998, -0.5), (0.19999999, -0.29999998, -0.5), (0.29999998, -0.29999998, -0.5), (0.39999998, -0.29999998, -0.5), (0.49999997, -0.29999998, -0.5), (-0.5, -0.39999998, -0.5), (-0.4, -0.39999998, -0.5), (-0.3, -0.39999998, -0.5), (-0.20000002, -0.39999998, -0.5), (-0.10000002, -0.39999998, -0.5), (-1.4901161e-8, -0.39999998, -0.5), (0.09999999, -0.39999998, -0.5), (0.19999999, -0.39999998, -0.5), (0.29999998, -0.39999998, -0.5), (0.39999998, -0.39999998, -0.5), (0.49999997, -0.39999998, -0.5), (-0.5, -0.5, -0.5), (-0.4, -0.5, -0.5), (-0.3, -0.5, -0.5), (-0.20000002, -0.5, -0.5), (-0.10000002, -0.5, -0.5), (-1.4901161e-8, -0.5, -0.5), (0.09999999, -0.5, -0.5), (0.19999999, -0.5, -0.5), (0.29999998, -0.5, -0.5), (0.39999998, -0.5, -0.5), (0.49999997, -0.5, -0.5), (-0.5, -0.5, -0.4), (-0.4, -0.5, -0.4), (-0.3, -0.5, -0.4), (-0.20000002, -0.5, -0.4), (-0.10000002, -0.5, -0.4), (-1.4901161e-8, -0.5, -0.4), (0.09999999, -0.5, -0.4), (0.19999999, -0.5, -0.4), (0.29999998, -0.5, -0.4), (0.39999998, -0.5, -0.4), (0.49999997, -0.5, -0.4), (-0.5, -0.5, -0.3), (-0.4, -0.5, -0.3), (-0.3, -0.5, -0.3), (-0.20000002, -0.5, -0.3), (-0.10000002, -0.5, -0.3), (-1.4901161e-8, -0.5, -0.3), (0.09999999, -0.5, -0.3), (0.19999999, -0.5, -0.3), (0.29999998, -0.5, -0.3), (0.39999998, -0.5, -0.3), (0.49999997, -0.5, -0.3), (-0.5, -0.5, -0.20000002), (-0.4, -0.5, -0.20000002), (-0.3, -0.5, -0.20000002), (-0.20000002, -0.5, -0.20000002), (-0.10000002, -0.5, -0.20000002), (-1.4901161e-8, -0.5, -0.20000002), (0.09999999, -0.5, -0.20000002), (0.19999999, -0.5, -0.20000002), (0.29999998, -0.5, -0.20000002), (0.39999998, -0.5, -0.20000002), (0.49999997, -0.5, -0.20000002), (-0.5, -0.5, -0.10000002), (-0.4, -0.5, -0.10000002), (-0.3, -0.5, -0.10000002), (-0.20000002, -0.5, -0.10000002), (-0.10000002, -0.5, -0.10000002), (-1.4901161e-8, -0.5, -0.10000002), (0.09999999, -0.5, -0.10000002), (0.19999999, -0.5, -0.10000002), (0.29999998, -0.5, -0.10000002), (0.39999998, -0.5, -0.10000002), (0.49999997, -0.5, -0.10000002), (-0.5, -0.5, -1.4901161e-8), (-0.4, -0.5, -1.4901161e-8), (-0.3, -0.5, -1.4901161e-8), (-0.20000002, -0.5, -1.4901161e-8), (-0.10000002, -0.5, -1.4901161e-8), (-1.4901161e-8, -0.5, -1.4901161e-8), (0.09999999, -0.5, -1.4901161e-8), (0.19999999, -0.5, -1.4901161e-8), (0.29999998, -0.5, -1.4901161e-8), (0.39999998, -0.5, -1.4901161e-8), (0.49999997, -0.5, -1.4901161e-8), (-0.5, -0.5, 0.09999999), (-0.4, -0.5, 0.09999999), (-0.3, -0.5, 0.09999999), (-0.20000002, -0.5, 0.09999999), (-0.10000002, -0.5, 0.09999999), (-1.4901161e-8, -0.5, 0.09999999), (0.09999999, -0.5, 0.09999999), (0.19999999, -0.5, 0.09999999), (0.29999998, -0.5, 0.09999999), (0.39999998, -0.5, 0.09999999), (0.49999997, -0.5, 0.09999999), (-0.5, -0.5, 0.19999999), (-0.4, -0.5, 0.19999999), (-0.3, -0.5, 0.19999999), (-0.20000002, -0.5, 0.19999999), (-0.10000002, -0.5, 0.19999999), (-1.4901161e-8, -0.5, 0.19999999), (0.09999999, -0.5, 0.19999999), (0.19999999, -0.5, 0.19999999), (0.29999998, -0.5, 0.19999999), (0.39999998, -0.5, 0.19999999), (0.49999997, -0.5, 0.19999999), (-0.5, -0.5, 0.29999998), (-0.4, -0.5, 0.29999998), (-0.3, -0.5, 0.29999998), (-0.20000002, -0.5, 0.29999998), (-0.10000002, -0.5, 0.29999998), (-1.4901161e-8, -0.5, 0.29999998), (0.09999999, -0.5, 0.29999998), (0.19999999, -0.5, 0.29999998), (0.29999998, -0.5, 0.29999998), (0.39999998, -0.5, 0.29999998), (0.49999997, -0.5, 0.29999998), (-0.5, -0.5, 0.39999998), (-0.4, -0.5, 0.39999998), (-0.3, -0.5, 0.39999998), (-0.20000002, -0.5, 0.39999998), (-0.10000002, -0.5, 0.39999998), (-1.4901161e-8, -0.5, 0.39999998), (0.09999999, -0.5, 0.39999998), (0.19999999, -0.5, 0.39999998), (0.29999998, -0.5, 0.39999998), (0.39999998, -0.5, 0.39999998), (0.49999997, -0.5, 0.39999998), (0.5, -0.4, -0.4), (0.5, -0.4, -0.3), (0.5, -0.4, -0.20000002), (0.5, -0.4, -0.10000002), (0.5, -0.4, -1.4901161e-8), (0.5, -0.4, 0.09999999), (0.5, -0.4, 0.19999999), (0.5, -0.4, 0.29999998), (0.5, -0.4, 0.39999998), (0.5, -0.3, -0.4), (0.5, -0.3, -0.3), (0.5, -0.3, -0.20000002), (0.5, -0.3, -0.10000002), (0.5, -0.3, -1.4901161e-8), (0.5, -0.3, 0.09999999), (0.5, -0.3, 0.19999999), (0.5, -0.3, 0.29999998), (0.5, -0.3, 0.39999998), (0.5, -0.20000002, -0.4), (0.5, -0.20000002, -0.3), (0.5, -0.20000002, -0.20000002), (0.5, -0.20000002, -0.10000002), (0.5, -0.20000002, -1.4901161e-8), (0.5, -0.20000002, 0.09999999), (0.5, -0.20000002, 0.19999999), (0.5, -0.20000002, 0.29999998), (0.5, -0.20000002, 0.39999998), (0.5, -0.10000002, -0.4), (0.5, -0.10000002, -0.3), (0.5, -0.10000002, -0.20000002), (0.5, -0.10000002, -0.10000002), (0.5, -0.10000002, -1.4901161e-8), (0.5, -0.10000002, 0.09999999), (0.5, -0.10000002, 0.19999999), (0.5, -0.10000002, 0.29999998), (0.5, -0.10000002, 0.39999998), (0.5, -1.4901161e-8, -0.4), (0.5, -1.4901161e-8, -0.3), (0.5, -1.4901161e-8, -0.20000002), (0.5, -1.4901161e-8, -0.10000002), (0.5, -1.4901161e-8, -1.4901161e-8), (0.5, -1.4901161e-8, 0.09999999), (0.5, -1.4901161e-8, 0.19999999), (0.5, -1.4901161e-8, 0.29999998), (0.5, -1.4901161e-8, 0.39999998), (0.5, 0.09999999, -0.4), (0.5, 0.09999999, -0.3), (0.5, 0.09999999, -0.20000002), (0.5, 0.09999999, -0.10000002), (0.5, 0.09999999, -1.4901161e-8), (0.5, 0.09999999, 0.09999999), (0.5, 0.09999999, 0.19999999), (0.5, 0.09999999, 0.29999998), (0.5, 0.09999999, 0.39999998), (0.5, 0.19999999, -0.4), (0.5, 0.19999999, -0.3), (0.5, 0.19999999, -0.20000002), (0.5, 0.19999999, -0.10000002), (0.5, 0.19999999, -1.4901161e-8), (0.5, 0.19999999, 0.09999999), (0.5, 0.19999999, 0.19999999), (0.5, 0.19999999, 0.29999998), (0.5, 0.19999999, 0.39999998), (0.5, 0.29999998, -0.4), (0.5, 0.29999998, -0.3), (0.5, 0.29999998, -0.20000002), (0.5, 0.29999998, -0.10000002), (0.5, 0.29999998, -1.4901161e-8), (0.5, 0.29999998, 0.09999999), (0.5, 0.29999998, 0.19999999), (0.5, 0.29999998, 0.29999998), (0.5, 0.29999998, 0.39999998), (0.5, 0.39999998, -0.4), (0.5, 0.39999998, -0.3), (0.5, 0.39999998, -0.20000002), (0.5, 0.39999998, -0.10000002), (0.5, 0.39999998, -1.4901161e-8), (0.5, 0.39999998, 0.09999999), (0.5, 0.39999998, 0.19999999), (0.5, 0.39999998, 0.29999998), (0.5, 0.39999998, 0.39999998), (-0.5, -0.4, -0.4), (-0.5, -0.4, -0.3), (-0.5, -0.4, -0.20000002), (-0.5, -0.4, -0.10000002), (-0.5, -0.4, -1.4901161e-8), (-0.5, -0.4, 0.09999999), (-0.5, -0.4, 0.19999999), (-0.5, -0.4, 0.29999998), (-0.5, -0.4, 0.39999998), (-0.5, -0.3, -0.4), (-0.5, -0.3, -0.3), (-0.5, -0.3, -0.20000002), (-0.5, -0.3, -0.10000002), (-0.5, -0.3, -1.4901161e-8), (-0.5, -0.3, 0.09999999), (-0.5, -0.3, 0.19999999), (-0.5, -0.3, 0.29999998), (-0.5, -0.3, 0.39999998), (-0.5, -0.20000002, -0.4), (-0.5, -0.20000002, -0.3), (-0.5, -0.20000002, -0.20000002), (-0.5, -0.20000002, -0.10000002), (-0.5, -0.20000002, -1.4901161e-8), (-0.5, -0.20000002, 0.09999999), (-0.5, -0.20000002, 0.19999999), (-0.5, -0.20000002, 0.29999998), (-0.5, -0.20000002, 0.39999998), (-0.5, -0.10000002, -0.4), (-0.5, -0.10000002, -0.3), (-0.5, -0.10000002, -0.20000002), (-0.5, -0.10000002, -0.10000002), (-0.5, -0.10000002, -1.4901161e-8), (-0.5, -0.10000002, 0.09999999), (-0.5, -0.10000002, 0.19999999), (-0.5, -0.10000002, 0.29999998), (-0.5, -0.10000002, 0.39999998), (-0.5, -1.4901161e-8, -0.4), (-0.5, -1.4901161e-8, -0.3), (-0.5, -1.4901161e-8, -0.20000002), (-0.5, -1.4901161e-8, -0.10000002), (-0.5, -1.4901161e-8, -1.4901161e-8), (-0.5, -1.4901161e-8, 0.09999999), (-0.5, -1.4901161e-8, 0.19999999), (-0.5, -1.4901161e-8, 0.29999998), (-0.5, -1.4901161e-8, 0.39999998), (-0.5, 0.09999999, -0.4), (-0.5, 0.09999999, -0.3), (-0.5, 0.09999999, -0.20000002), (-0.5, 0.09999999, -0.10000002), (-0.5, 0.09999999, -1.4901161e-8), (-0.5, 0.09999999, 0.09999999), (-0.5, 0.09999999, 0.19999999), (-0.5, 0.09999999, 0.29999998), (-0.5, 0.09999999, 0.39999998), (-0.5, 0.19999999, -0.4), (-0.5, 0.19999999, -0.3), (-0.5, 0.19999999, -0.20000002), (-0.5, 0.19999999, -0.10000002), (-0.5, 0.19999999, -1.4901161e-8), (-0.5, 0.19999999, 0.09999999), (-0.5, 0.19999999, 0.19999999), (-0.5, 0.19999999, 0.29999998), (-0.5, 0.19999999, 0.39999998), (-0.5, 0.29999998, -0.4), (-0.5, 0.29999998, -0.3), (-0.5, 0.29999998, -0.20000002), (-0.5, 0.29999998, -0.10000002), (-0.5, 0.29999998, -1.4901161e-8), (-0.5, 0.29999998, 0.09999999), (-0.5, 0.29999998, 0.19999999), (-0.5, 0.29999998, 0.29999998), (-0.5, 0.29999998, 0.39999998), (-0.5, 0.39999998, -0.4), (-0.5, 0.39999998, -0.3), (-0.5, 0.39999998, -0.20000002), (-0.5, 0.39999998, -0.10000002), (-0.5, 0.39999998, -1.4901161e-8), (-0.5, 0.39999998, 0.09999999), (-0.5, 0.39999998, 0.19999999), (-0.5, 0.39999998, 0.29999998), (-0.5, 0.39999998, 0.39999998)] + color3f[] primvars:displayColor = [(0.13320851, 0.13320851, 0.13320851)] ( + customData = { + dictionary Maya = { + bool generated = 1 + } + } + ) + texCoord2f[] primvars:st = [(0.375, 0), (0.4, 0), (0.425, 0), (0.45000002, 0), (0.47500002, 0), (0.5, 0), (0.525, 0), (0.54999995, 0), (0.5749999, 0), (0.5999999, 0), (0.6249999, 0), (0.375, 0.025), (0.4, 0.025), (0.425, 0.025), (0.45000002, 0.025), (0.47500002, 0.025), (0.5, 0.025), (0.525, 0.025), (0.54999995, 0.025), (0.5749999, 0.025), (0.5999999, 0.025), (0.6249999, 0.025), (0.375, 0.05), (0.4, 0.05), (0.425, 0.05), (0.45000002, 0.05), (0.47500002, 0.05), (0.5, 0.05), (0.525, 0.05), (0.54999995, 0.05), (0.5749999, 0.05), (0.5999999, 0.05), (0.6249999, 0.05), (0.375, 0.075), (0.4, 0.075), (0.425, 0.075), (0.45000002, 0.075), (0.47500002, 0.075), (0.5, 0.075), (0.525, 0.075), (0.54999995, 0.075), (0.5749999, 0.075), (0.5999999, 0.075), (0.6249999, 0.075), (0.375, 0.1), (0.4, 0.1), (0.425, 0.1), (0.45000002, 0.1), (0.47500002, 0.1), (0.5, 0.1), (0.525, 0.1), (0.54999995, 0.1), (0.5749999, 0.1), (0.5999999, 0.1), (0.6249999, 0.1), (0.375, 0.125), (0.4, 0.125), (0.425, 0.125), (0.45000002, 0.125), (0.47500002, 0.125), (0.5, 0.125), (0.525, 0.125), (0.54999995, 0.125), (0.5749999, 0.125), (0.5999999, 0.125), (0.6249999, 0.125), (0.375, 0.15), (0.4, 0.15), (0.425, 0.15), (0.45000002, 0.15), (0.47500002, 0.15), (0.5, 0.15), (0.525, 0.15), (0.54999995, 0.15), (0.5749999, 0.15), (0.5999999, 0.15), (0.6249999, 0.15), (0.375, 0.17500001), (0.4, 0.17500001), (0.425, 0.17500001), (0.45000002, 0.17500001), (0.47500002, 0.17500001), (0.5, 0.17500001), (0.525, 0.17500001), (0.54999995, 0.17500001), (0.5749999, 0.17500001), (0.5999999, 0.17500001), (0.6249999, 0.17500001), (0.375, 0.20000002), (0.4, 0.20000002), (0.425, 0.20000002), (0.45000002, 0.20000002), (0.47500002, 0.20000002), (0.5, 0.20000002), (0.525, 0.20000002), (0.54999995, 0.20000002), (0.5749999, 0.20000002), (0.5999999, 0.20000002), (0.6249999, 0.20000002), (0.375, 0.22500002), (0.4, 0.22500002), (0.425, 0.22500002), (0.45000002, 0.22500002), (0.47500002, 0.22500002), (0.5, 0.22500002), (0.525, 0.22500002), (0.54999995, 0.22500002), (0.5749999, 0.22500002), (0.5999999, 0.22500002), (0.6249999, 0.22500002), (0.375, 0.25000003), (0.4, 0.25000003), (0.425, 0.25000003), (0.45000002, 0.25000003), (0.47500002, 0.25000003), (0.5, 0.25000003), (0.525, 0.25000003), (0.54999995, 0.25000003), (0.5749999, 0.25000003), (0.5999999, 0.25000003), (0.6249999, 0.25000003), (0.375, 0.27500004), (0.4, 0.27500004), (0.425, 0.27500004), (0.45000002, 0.27500004), (0.47500002, 0.27500004), (0.5, 0.27500004), (0.525, 0.27500004), (0.54999995, 0.27500004), (0.5749999, 0.27500004), (0.5999999, 0.27500004), (0.6249999, 0.27500004), (0.375, 0.30000004), (0.4, 0.30000004), (0.425, 0.30000004), (0.45000002, 0.30000004), (0.47500002, 0.30000004), (0.5, 0.30000004), (0.525, 0.30000004), (0.54999995, 0.30000004), (0.5749999, 0.30000004), (0.5999999, 0.30000004), (0.6249999, 0.30000004), (0.375, 0.32500005), (0.4, 0.32500005), (0.425, 0.32500005), (0.45000002, 0.32500005), (0.47500002, 0.32500005), (0.5, 0.32500005), (0.525, 0.32500005), (0.54999995, 0.32500005), (0.5749999, 0.32500005), (0.5999999, 0.32500005), (0.6249999, 0.32500005), (0.375, 0.35000005), (0.4, 0.35000005), (0.425, 0.35000005), (0.45000002, 0.35000005), (0.47500002, 0.35000005), (0.5, 0.35000005), (0.525, 0.35000005), (0.54999995, 0.35000005), (0.5749999, 0.35000005), (0.5999999, 0.35000005), (0.6249999, 0.35000005), (0.375, 0.37500006), (0.4, 0.37500006), (0.425, 0.37500006), (0.45000002, 0.37500006), (0.47500002, 0.37500006), (0.5, 0.37500006), (0.525, 0.37500006), (0.54999995, 0.37500006), (0.5749999, 0.37500006), (0.5999999, 0.37500006), (0.6249999, 0.37500006), (0.375, 0.40000007), (0.4, 0.40000007), (0.425, 0.40000007), (0.45000002, 0.40000007), (0.47500002, 0.40000007), (0.5, 0.40000007), (0.525, 0.40000007), (0.54999995, 0.40000007), (0.5749999, 0.40000007), (0.5999999, 0.40000007), (0.6249999, 0.40000007), (0.375, 0.42500007), (0.4, 0.42500007), (0.425, 0.42500007), (0.45000002, 0.42500007), (0.47500002, 0.42500007), (0.5, 0.42500007), (0.525, 0.42500007), (0.54999995, 0.42500007), (0.5749999, 0.42500007), (0.5999999, 0.42500007), (0.6249999, 0.42500007), (0.375, 0.45000008), (0.4, 0.45000008), (0.425, 0.45000008), (0.45000002, 0.45000008), (0.47500002, 0.45000008), (0.5, 0.45000008), (0.525, 0.45000008), (0.54999995, 0.45000008), (0.5749999, 0.45000008), (0.5999999, 0.45000008), (0.6249999, 0.45000008), (0.375, 0.47500008), (0.4, 0.47500008), (0.425, 0.47500008), (0.45000002, 0.47500008), (0.47500002, 0.47500008), (0.5, 0.47500008), (0.525, 0.47500008), (0.54999995, 0.47500008), (0.5749999, 0.47500008), (0.5999999, 0.47500008), (0.6249999, 0.47500008), (0.375, 0.50000006), (0.4, 0.50000006), (0.425, 0.50000006), (0.45000002, 0.50000006), (0.47500002, 0.50000006), (0.5, 0.50000006), (0.525, 0.50000006), (0.54999995, 0.50000006), (0.5749999, 0.50000006), (0.5999999, 0.50000006), (0.6249999, 0.50000006), (0.375, 0.52500004), (0.4, 0.52500004), (0.425, 0.52500004), (0.45000002, 0.52500004), (0.47500002, 0.52500004), (0.5, 0.52500004), (0.525, 0.52500004), (0.54999995, 0.52500004), (0.5749999, 0.52500004), (0.5999999, 0.52500004), (0.6249999, 0.52500004), (0.375, 0.55), (0.4, 0.55), (0.425, 0.55), (0.45000002, 0.55), (0.47500002, 0.55), (0.5, 0.55), (0.525, 0.55), (0.54999995, 0.55), (0.5749999, 0.55), (0.5999999, 0.55), (0.6249999, 0.55), (0.375, 0.575), (0.4, 0.575), (0.425, 0.575), (0.45000002, 0.575), (0.47500002, 0.575), (0.5, 0.575), (0.525, 0.575), (0.54999995, 0.575), (0.5749999, 0.575), (0.5999999, 0.575), (0.6249999, 0.575), (0.375, 0.59999996), (0.4, 0.59999996), (0.425, 0.59999996), (0.45000002, 0.59999996), (0.47500002, 0.59999996), (0.5, 0.59999996), (0.525, 0.59999996), (0.54999995, 0.59999996), (0.5749999, 0.59999996), (0.5999999, 0.59999996), (0.6249999, 0.59999996), (0.375, 0.62499994), (0.4, 0.62499994), (0.425, 0.62499994), (0.45000002, 0.62499994), (0.47500002, 0.62499994), (0.5, 0.62499994), (0.525, 0.62499994), (0.54999995, 0.62499994), (0.5749999, 0.62499994), (0.5999999, 0.62499994), (0.6249999, 0.62499994), (0.375, 0.6499999), (0.4, 0.6499999), (0.425, 0.6499999), (0.45000002, 0.6499999), (0.47500002, 0.6499999), (0.5, 0.6499999), (0.525, 0.6499999), (0.54999995, 0.6499999), (0.5749999, 0.6499999), (0.5999999, 0.6499999), (0.6249999, 0.6499999), (0.375, 0.6749999), (0.4, 0.6749999), (0.425, 0.6749999), (0.45000002, 0.6749999), (0.47500002, 0.6749999), (0.5, 0.6749999), (0.525, 0.6749999), (0.54999995, 0.6749999), (0.5749999, 0.6749999), (0.5999999, 0.6749999), (0.6249999, 0.6749999), (0.375, 0.69999987), (0.4, 0.69999987), (0.425, 0.69999987), (0.45000002, 0.69999987), (0.47500002, 0.69999987), (0.5, 0.69999987), (0.525, 0.69999987), (0.54999995, 0.69999987), (0.5749999, 0.69999987), (0.5999999, 0.69999987), (0.6249999, 0.69999987), (0.375, 0.72499985), (0.4, 0.72499985), (0.425, 0.72499985), (0.45000002, 0.72499985), (0.47500002, 0.72499985), (0.5, 0.72499985), (0.525, 0.72499985), (0.54999995, 0.72499985), (0.5749999, 0.72499985), (0.5999999, 0.72499985), (0.6249999, 0.72499985), (0.375, 0.7499998), (0.4, 0.7499998), (0.425, 0.7499998), (0.45000002, 0.7499998), (0.47500002, 0.7499998), (0.5, 0.7499998), (0.525, 0.7499998), (0.54999995, 0.7499998), (0.5749999, 0.7499998), (0.5999999, 0.7499998), (0.6249999, 0.7499998), (0.375, 0.7749998), (0.4, 0.7749998), (0.425, 0.7749998), (0.45000002, 0.7749998), (0.47500002, 0.7749998), (0.5, 0.7749998), (0.525, 0.7749998), (0.54999995, 0.7749998), (0.5749999, 0.7749998), (0.5999999, 0.7749998), (0.6249999, 0.7749998), (0.375, 0.7999998), (0.4, 0.7999998), (0.425, 0.7999998), (0.45000002, 0.7999998), (0.47500002, 0.7999998), (0.5, 0.7999998), (0.525, 0.7999998), (0.54999995, 0.7999998), (0.5749999, 0.7999998), (0.5999999, 0.7999998), (0.6249999, 0.7999998), (0.375, 0.82499975), (0.4, 0.82499975), (0.425, 0.82499975), (0.45000002, 0.82499975), (0.47500002, 0.82499975), (0.5, 0.82499975), (0.525, 0.82499975), (0.54999995, 0.82499975), (0.5749999, 0.82499975), (0.5999999, 0.82499975), (0.6249999, 0.82499975), (0.375, 0.8499997), (0.4, 0.8499997), (0.425, 0.8499997), (0.45000002, 0.8499997), (0.47500002, 0.8499997), (0.5, 0.8499997), (0.525, 0.8499997), (0.54999995, 0.8499997), (0.5749999, 0.8499997), (0.5999999, 0.8499997), (0.6249999, 0.8499997), (0.375, 0.8749997), (0.4, 0.8749997), (0.425, 0.8749997), (0.45000002, 0.8749997), (0.47500002, 0.8749997), (0.5, 0.8749997), (0.525, 0.8749997), (0.54999995, 0.8749997), (0.5749999, 0.8749997), (0.5999999, 0.8749997), (0.6249999, 0.8749997), (0.375, 0.8999997), (0.4, 0.8999997), (0.425, 0.8999997), (0.45000002, 0.8999997), (0.47500002, 0.8999997), (0.5, 0.8999997), (0.525, 0.8999997), (0.54999995, 0.8999997), (0.5749999, 0.8999997), (0.5999999, 0.8999997), (0.6249999, 0.8999997), (0.375, 0.92499965), (0.4, 0.92499965), (0.425, 0.92499965), (0.45000002, 0.92499965), (0.47500002, 0.92499965), (0.5, 0.92499965), (0.525, 0.92499965), (0.54999995, 0.92499965), (0.5749999, 0.92499965), (0.5999999, 0.92499965), (0.6249999, 0.92499965), (0.375, 0.94999963), (0.4, 0.94999963), (0.425, 0.94999963), (0.45000002, 0.94999963), (0.47500002, 0.94999963), (0.5, 0.94999963), (0.525, 0.94999963), (0.54999995, 0.94999963), (0.5749999, 0.94999963), (0.5999999, 0.94999963), (0.6249999, 0.94999963), (0.375, 0.9749996), (0.4, 0.9749996), (0.425, 0.9749996), (0.45000002, 0.9749996), (0.47500002, 0.9749996), (0.5, 0.9749996), (0.525, 0.9749996), (0.54999995, 0.9749996), (0.5749999, 0.9749996), (0.5999999, 0.9749996), (0.6249999, 0.9749996), (0.375, 0.9999996), (0.4, 0.9999996), (0.425, 0.9999996), (0.45000002, 0.9999996), (0.47500002, 0.9999996), (0.5, 0.9999996), (0.525, 0.9999996), (0.54999995, 0.9999996), (0.5749999, 0.9999996), (0.5999999, 0.9999996), (0.6249999, 0.9999996), (0.875, 0), (0.85, 0), (0.82500005, 0), (0.8000001, 0), (0.7750001, 0), (0.7500001, 0), (0.72500014, 0), (0.70000017, 0), (0.6750002, 0), (0.6500002, 0), (0.875, 0.025), (0.85, 0.025), (0.82500005, 0.025), (0.8000001, 0.025), (0.7750001, 0.025), (0.7500001, 0.025), (0.72500014, 0.025), (0.70000017, 0.025), (0.6750002, 0.025), (0.6500002, 0.025), (0.875, 0.05), (0.85, 0.05), (0.82500005, 0.05), (0.8000001, 0.05), (0.7750001, 0.05), (0.7500001, 0.05), (0.72500014, 0.05), (0.70000017, 0.05), (0.6750002, 0.05), (0.6500002, 0.05), (0.875, 0.075), (0.85, 0.075), (0.82500005, 0.075), (0.8000001, 0.075), (0.7750001, 0.075), (0.7500001, 0.075), (0.72500014, 0.075), (0.70000017, 0.075), (0.6750002, 0.075), (0.6500002, 0.075), (0.875, 0.1), (0.85, 0.1), (0.82500005, 0.1), (0.8000001, 0.1), (0.7750001, 0.1), (0.7500001, 0.1), (0.72500014, 0.1), (0.70000017, 0.1), (0.6750002, 0.1), (0.6500002, 0.1), (0.875, 0.125), (0.85, 0.125), (0.82500005, 0.125), (0.8000001, 0.125), (0.7750001, 0.125), (0.7500001, 0.125), (0.72500014, 0.125), (0.70000017, 0.125), (0.6750002, 0.125), (0.6500002, 0.125), (0.875, 0.15), (0.85, 0.15), (0.82500005, 0.15), (0.8000001, 0.15), (0.7750001, 0.15), (0.7500001, 0.15), (0.72500014, 0.15), (0.70000017, 0.15), (0.6750002, 0.15), (0.6500002, 0.15), (0.875, 0.17500001), (0.85, 0.17500001), (0.82500005, 0.17500001), (0.8000001, 0.17500001), (0.7750001, 0.17500001), (0.7500001, 0.17500001), (0.72500014, 0.17500001), (0.70000017, 0.17500001), (0.6750002, 0.17500001), (0.6500002, 0.17500001), (0.875, 0.20000002), (0.85, 0.20000002), (0.82500005, 0.20000002), (0.8000001, 0.20000002), (0.7750001, 0.20000002), (0.7500001, 0.20000002), (0.72500014, 0.20000002), (0.70000017, 0.20000002), (0.6750002, 0.20000002), (0.6500002, 0.20000002), (0.875, 0.22500002), (0.85, 0.22500002), (0.82500005, 0.22500002), (0.8000001, 0.22500002), (0.7750001, 0.22500002), (0.7500001, 0.22500002), (0.72500014, 0.22500002), (0.70000017, 0.22500002), (0.6750002, 0.22500002), (0.6500002, 0.22500002), (0.875, 0.25000003), (0.85, 0.25000003), (0.82500005, 0.25000003), (0.8000001, 0.25000003), (0.7750001, 0.25000003), (0.7500001, 0.25000003), (0.72500014, 0.25000003), (0.70000017, 0.25000003), (0.6750002, 0.25000003), (0.6500002, 0.25000003), (0.125, 0), (0.15, 0), (0.17500001, 0), (0.20000002, 0), (0.22500002, 0), (0.25000003, 0), (0.27500004, 0), (0.30000004, 0), (0.32500005, 0), (0.35000005, 0), (0.125, 0.025), (0.15, 0.025), (0.17500001, 0.025), (0.20000002, 0.025), (0.22500002, 0.025), (0.25000003, 0.025), (0.27500004, 0.025), (0.30000004, 0.025), (0.32500005, 0.025), (0.35000005, 0.025), (0.125, 0.05), (0.15, 0.05), (0.17500001, 0.05), (0.20000002, 0.05), (0.22500002, 0.05), (0.25000003, 0.05), (0.27500004, 0.05), (0.30000004, 0.05), (0.32500005, 0.05), (0.35000005, 0.05), (0.125, 0.075), (0.15, 0.075), (0.17500001, 0.075), (0.20000002, 0.075), (0.22500002, 0.075), (0.25000003, 0.075), (0.27500004, 0.075), (0.30000004, 0.075), (0.32500005, 0.075), (0.35000005, 0.075), (0.125, 0.1), (0.15, 0.1), (0.17500001, 0.1), (0.20000002, 0.1), (0.22500002, 0.1), (0.25000003, 0.1), (0.27500004, 0.1), (0.30000004, 0.1), (0.32500005, 0.1), (0.35000005, 0.1), (0.125, 0.125), (0.15, 0.125), (0.17500001, 0.125), (0.20000002, 0.125), (0.22500002, 0.125), (0.25000003, 0.125), (0.27500004, 0.125), (0.30000004, 0.125), (0.32500005, 0.125), (0.35000005, 0.125), (0.125, 0.15), (0.15, 0.15), (0.17500001, 0.15), (0.20000002, 0.15), (0.22500002, 0.15), (0.25000003, 0.15), (0.27500004, 0.15), (0.30000004, 0.15), (0.32500005, 0.15), (0.35000005, 0.15), (0.125, 0.17500001), (0.15, 0.17500001), (0.17500001, 0.17500001), (0.20000002, 0.17500001), (0.22500002, 0.17500001), (0.25000003, 0.17500001), (0.27500004, 0.17500001), (0.30000004, 0.17500001), (0.32500005, 0.17500001), (0.35000005, 0.17500001), (0.125, 0.20000002), (0.15, 0.20000002), (0.17500001, 0.20000002), (0.20000002, 0.20000002), (0.22500002, 0.20000002), (0.25000003, 0.20000002), (0.27500004, 0.20000002), (0.30000004, 0.20000002), (0.32500005, 0.20000002), (0.35000005, 0.20000002), (0.125, 0.22500002), (0.15, 0.22500002), (0.17500001, 0.22500002), (0.20000002, 0.22500002), (0.22500002, 0.22500002), (0.25000003, 0.22500002), (0.27500004, 0.22500002), (0.30000004, 0.22500002), (0.32500005, 0.22500002), (0.35000005, 0.22500002), (0.125, 0.25000003), (0.15, 0.25000003), (0.17500001, 0.25000003), (0.20000002, 0.25000003), (0.22500002, 0.25000003), (0.25000003, 0.25000003), (0.27500004, 0.25000003), (0.30000004, 0.25000003), (0.32500005, 0.25000003), (0.35000005, 0.25000003)] ( + customData = { + dictionary Maya = { + token name = "map1" + } + } + interpolation = "faceVarying" + ) + int[] primvars:st:indices = [0, 1, 12, 11, 1, 2, 13, 12, 2, 3, 14, 13, 3, 4, 15, 14, 4, 5, 16, 15, 5, 6, 17, 16, 6, 7, 18, 17, 7, 8, 19, 18, 8, 9, 20, 19, 9, 10, 21, 20, 11, 12, 23, 22, 12, 13, 24, 23, 13, 14, 25, 24, 14, 15, 26, 25, 15, 16, 27, 26, 16, 17, 28, 27, 17, 18, 29, 28, 18, 19, 30, 29, 19, 20, 31, 30, 20, 21, 32, 31, 22, 23, 34, 33, 23, 24, 35, 34, 24, 25, 36, 35, 25, 26, 37, 36, 26, 27, 38, 37, 27, 28, 39, 38, 28, 29, 40, 39, 29, 30, 41, 40, 30, 31, 42, 41, 31, 32, 43, 42, 33, 34, 45, 44, 34, 35, 46, 45, 35, 36, 47, 46, 36, 37, 48, 47, 37, 38, 49, 48, 38, 39, 50, 49, 39, 40, 51, 50, 40, 41, 52, 51, 41, 42, 53, 52, 42, 43, 54, 53, 44, 45, 56, 55, 45, 46, 57, 56, 46, 47, 58, 57, 47, 48, 59, 58, 48, 49, 60, 59, 49, 50, 61, 60, 50, 51, 62, 61, 51, 52, 63, 62, 52, 53, 64, 63, 53, 54, 65, 64, 55, 56, 67, 66, 56, 57, 68, 67, 57, 58, 69, 68, 58, 59, 70, 69, 59, 60, 71, 70, 60, 61, 72, 71, 61, 62, 73, 72, 62, 63, 74, 73, 63, 64, 75, 74, 64, 65, 76, 75, 66, 67, 78, 77, 67, 68, 79, 78, 68, 69, 80, 79, 69, 70, 81, 80, 70, 71, 82, 81, 71, 72, 83, 82, 72, 73, 84, 83, 73, 74, 85, 84, 74, 75, 86, 85, 75, 76, 87, 86, 77, 78, 89, 88, 78, 79, 90, 89, 79, 80, 91, 90, 80, 81, 92, 91, 81, 82, 93, 92, 82, 83, 94, 93, 83, 84, 95, 94, 84, 85, 96, 95, 85, 86, 97, 96, 86, 87, 98, 97, 88, 89, 100, 99, 89, 90, 101, 100, 90, 91, 102, 101, 91, 92, 103, 102, 92, 93, 104, 103, 93, 94, 105, 104, 94, 95, 106, 105, 95, 96, 107, 106, 96, 97, 108, 107, 97, 98, 109, 108, 99, 100, 111, 110, 100, 101, 112, 111, 101, 102, 113, 112, 102, 103, 114, 113, 103, 104, 115, 114, 104, 105, 116, 115, 105, 106, 117, 116, 106, 107, 118, 117, 107, 108, 119, 118, 108, 109, 120, 119, 110, 111, 122, 121, 111, 112, 123, 122, 112, 113, 124, 123, 113, 114, 125, 124, 114, 115, 126, 125, 115, 116, 127, 126, 116, 117, 128, 127, 117, 118, 129, 128, 118, 119, 130, 129, 119, 120, 131, 130, 121, 122, 133, 132, 122, 123, 134, 133, 123, 124, 135, 134, 124, 125, 136, 135, 125, 126, 137, 136, 126, 127, 138, 137, 127, 128, 139, 138, 128, 129, 140, 139, 129, 130, 141, 140, 130, 131, 142, 141, 132, 133, 144, 143, 133, 134, 145, 144, 134, 135, 146, 145, 135, 136, 147, 146, 136, 137, 148, 147, 137, 138, 149, 148, 138, 139, 150, 149, 139, 140, 151, 150, 140, 141, 152, 151, 141, 142, 153, 152, 143, 144, 155, 154, 144, 145, 156, 155, 145, 146, 157, 156, 146, 147, 158, 157, 147, 148, 159, 158, 148, 149, 160, 159, 149, 150, 161, 160, 150, 151, 162, 161, 151, 152, 163, 162, 152, 153, 164, 163, 154, 155, 166, 165, 155, 156, 167, 166, 156, 157, 168, 167, 157, 158, 169, 168, 158, 159, 170, 169, 159, 160, 171, 170, 160, 161, 172, 171, 161, 162, 173, 172, 162, 163, 174, 173, 163, 164, 175, 174, 165, 166, 177, 176, 166, 167, 178, 177, 167, 168, 179, 178, 168, 169, 180, 179, 169, 170, 181, 180, 170, 171, 182, 181, 171, 172, 183, 182, 172, 173, 184, 183, 173, 174, 185, 184, 174, 175, 186, 185, 176, 177, 188, 187, 177, 178, 189, 188, 178, 179, 190, 189, 179, 180, 191, 190, 180, 181, 192, 191, 181, 182, 193, 192, 182, 183, 194, 193, 183, 184, 195, 194, 184, 185, 196, 195, 185, 186, 197, 196, 187, 188, 199, 198, 188, 189, 200, 199, 189, 190, 201, 200, 190, 191, 202, 201, 191, 192, 203, 202, 192, 193, 204, 203, 193, 194, 205, 204, 194, 195, 206, 205, 195, 196, 207, 206, 196, 197, 208, 207, 198, 199, 210, 209, 199, 200, 211, 210, 200, 201, 212, 211, 201, 202, 213, 212, 202, 203, 214, 213, 203, 204, 215, 214, 204, 205, 216, 215, 205, 206, 217, 216, 206, 207, 218, 217, 207, 208, 219, 218, 209, 210, 221, 220, 210, 211, 222, 221, 211, 212, 223, 222, 212, 213, 224, 223, 213, 214, 225, 224, 214, 215, 226, 225, 215, 216, 227, 226, 216, 217, 228, 227, 217, 218, 229, 228, 218, 219, 230, 229, 220, 221, 232, 231, 221, 222, 233, 232, 222, 223, 234, 233, 223, 224, 235, 234, 224, 225, 236, 235, 225, 226, 237, 236, 226, 227, 238, 237, 227, 228, 239, 238, 228, 229, 240, 239, 229, 230, 241, 240, 231, 232, 243, 242, 232, 233, 244, 243, 233, 234, 245, 244, 234, 235, 246, 245, 235, 236, 247, 246, 236, 237, 248, 247, 237, 238, 249, 248, 238, 239, 250, 249, 239, 240, 251, 250, 240, 241, 252, 251, 242, 243, 254, 253, 243, 244, 255, 254, 244, 245, 256, 255, 245, 246, 257, 256, 246, 247, 258, 257, 247, 248, 259, 258, 248, 249, 260, 259, 249, 250, 261, 260, 250, 251, 262, 261, 251, 252, 263, 262, 253, 254, 265, 264, 254, 255, 266, 265, 255, 256, 267, 266, 256, 257, 268, 267, 257, 258, 269, 268, 258, 259, 270, 269, 259, 260, 271, 270, 260, 261, 272, 271, 261, 262, 273, 272, 262, 263, 274, 273, 264, 265, 276, 275, 265, 266, 277, 276, 266, 267, 278, 277, 267, 268, 279, 278, 268, 269, 280, 279, 269, 270, 281, 280, 270, 271, 282, 281, 271, 272, 283, 282, 272, 273, 284, 283, 273, 274, 285, 284, 275, 276, 287, 286, 276, 277, 288, 287, 277, 278, 289, 288, 278, 279, 290, 289, 279, 280, 291, 290, 280, 281, 292, 291, 281, 282, 293, 292, 282, 283, 294, 293, 283, 284, 295, 294, 284, 285, 296, 295, 286, 287, 298, 297, 287, 288, 299, 298, 288, 289, 300, 299, 289, 290, 301, 300, 290, 291, 302, 301, 291, 292, 303, 302, 292, 293, 304, 303, 293, 294, 305, 304, 294, 295, 306, 305, 295, 296, 307, 306, 297, 298, 309, 308, 298, 299, 310, 309, 299, 300, 311, 310, 300, 301, 312, 311, 301, 302, 313, 312, 302, 303, 314, 313, 303, 304, 315, 314, 304, 305, 316, 315, 305, 306, 317, 316, 306, 307, 318, 317, 308, 309, 320, 319, 309, 310, 321, 320, 310, 311, 322, 321, 311, 312, 323, 322, 312, 313, 324, 323, 313, 314, 325, 324, 314, 315, 326, 325, 315, 316, 327, 326, 316, 317, 328, 327, 317, 318, 329, 328, 319, 320, 331, 330, 320, 321, 332, 331, 321, 322, 333, 332, 322, 323, 334, 333, 323, 324, 335, 334, 324, 325, 336, 335, 325, 326, 337, 336, 326, 327, 338, 337, 327, 328, 339, 338, 328, 329, 340, 339, 330, 331, 342, 341, 331, 332, 343, 342, 332, 333, 344, 343, 333, 334, 345, 344, 334, 335, 346, 345, 335, 336, 347, 346, 336, 337, 348, 347, 337, 338, 349, 348, 338, 339, 350, 349, 339, 340, 351, 350, 341, 342, 353, 352, 342, 343, 354, 353, 343, 344, 355, 354, 344, 345, 356, 355, 345, 346, 357, 356, 346, 347, 358, 357, 347, 348, 359, 358, 348, 349, 360, 359, 349, 350, 361, 360, 350, 351, 362, 361, 352, 353, 364, 363, 353, 354, 365, 364, 354, 355, 366, 365, 355, 356, 367, 366, 356, 357, 368, 367, 357, 358, 369, 368, 358, 359, 370, 369, 359, 360, 371, 370, 360, 361, 372, 371, 361, 362, 373, 372, 363, 364, 375, 374, 364, 365, 376, 375, 365, 366, 377, 376, 366, 367, 378, 377, 367, 368, 379, 378, 368, 369, 380, 379, 369, 370, 381, 380, 370, 371, 382, 381, 371, 372, 383, 382, 372, 373, 384, 383, 374, 375, 386, 385, 375, 376, 387, 386, 376, 377, 388, 387, 377, 378, 389, 388, 378, 379, 390, 389, 379, 380, 391, 390, 380, 381, 392, 391, 381, 382, 393, 392, 382, 383, 394, 393, 383, 384, 395, 394, 385, 386, 397, 396, 386, 387, 398, 397, 387, 388, 399, 398, 388, 389, 400, 399, 389, 390, 401, 400, 390, 391, 402, 401, 391, 392, 403, 402, 392, 393, 404, 403, 393, 394, 405, 404, 394, 395, 406, 405, 396, 397, 408, 407, 397, 398, 409, 408, 398, 399, 410, 409, 399, 400, 411, 410, 400, 401, 412, 411, 401, 402, 413, 412, 402, 403, 414, 413, 403, 404, 415, 414, 404, 405, 416, 415, 405, 406, 417, 416, 407, 408, 419, 418, 408, 409, 420, 419, 409, 410, 421, 420, 410, 411, 422, 421, 411, 412, 423, 422, 412, 413, 424, 423, 413, 414, 425, 424, 414, 415, 426, 425, 415, 416, 427, 426, 416, 417, 428, 427, 418, 419, 430, 429, 419, 420, 431, 430, 420, 421, 432, 431, 421, 422, 433, 432, 422, 423, 434, 433, 423, 424, 435, 434, 424, 425, 436, 435, 425, 426, 437, 436, 426, 427, 438, 437, 427, 428, 439, 438, 429, 430, 441, 440, 430, 431, 442, 441, 431, 432, 443, 442, 432, 433, 444, 443, 433, 434, 445, 444, 434, 435, 446, 445, 435, 436, 447, 446, 436, 437, 448, 447, 437, 438, 449, 448, 438, 439, 450, 449, 452, 451, 461, 462, 453, 452, 462, 463, 454, 453, 463, 464, 455, 454, 464, 465, 456, 455, 465, 466, 457, 456, 466, 467, 458, 457, 467, 468, 459, 458, 468, 469, 460, 459, 469, 470, 10, 460, 470, 21, 462, 461, 471, 472, 463, 462, 472, 473, 464, 463, 473, 474, 465, 464, 474, 475, 466, 465, 475, 476, 467, 466, 476, 477, 468, 467, 477, 478, 469, 468, 478, 479, 470, 469, 479, 480, 21, 470, 480, 32, 472, 471, 481, 482, 473, 472, 482, 483, 474, 473, 483, 484, 475, 474, 484, 485, 476, 475, 485, 486, 477, 476, 486, 487, 478, 477, 487, 488, 479, 478, 488, 489, 480, 479, 489, 490, 32, 480, 490, 43, 482, 481, 491, 492, 483, 482, 492, 493, 484, 483, 493, 494, 485, 484, 494, 495, 486, 485, 495, 496, 487, 486, 496, 497, 488, 487, 497, 498, 489, 488, 498, 499, 490, 489, 499, 500, 43, 490, 500, 54, 492, 491, 501, 502, 493, 492, 502, 503, 494, 493, 503, 504, 495, 494, 504, 505, 496, 495, 505, 506, 497, 496, 506, 507, 498, 497, 507, 508, 499, 498, 508, 509, 500, 499, 509, 510, 54, 500, 510, 65, 502, 501, 511, 512, 503, 502, 512, 513, 504, 503, 513, 514, 505, 504, 514, 515, 506, 505, 515, 516, 507, 506, 516, 517, 508, 507, 517, 518, 509, 508, 518, 519, 510, 509, 519, 520, 65, 510, 520, 76, 512, 511, 521, 522, 513, 512, 522, 523, 514, 513, 523, 524, 515, 514, 524, 525, 516, 515, 525, 526, 517, 516, 526, 527, 518, 517, 527, 528, 519, 518, 528, 529, 520, 519, 529, 530, 76, 520, 530, 87, 522, 521, 531, 532, 523, 522, 532, 533, 524, 523, 533, 534, 525, 524, 534, 535, 526, 525, 535, 536, 527, 526, 536, 537, 528, 527, 537, 538, 529, 528, 538, 539, 530, 529, 539, 540, 87, 530, 540, 98, 532, 531, 541, 542, 533, 532, 542, 543, 534, 533, 543, 544, 535, 534, 544, 545, 536, 535, 545, 546, 537, 536, 546, 547, 538, 537, 547, 548, 539, 538, 548, 549, 540, 539, 549, 550, 98, 540, 550, 109, 542, 541, 551, 552, 543, 542, 552, 553, 544, 543, 553, 554, 545, 544, 554, 555, 546, 545, 555, 556, 547, 546, 556, 557, 548, 547, 557, 558, 549, 548, 558, 559, 550, 549, 559, 560, 109, 550, 560, 120, 561, 562, 572, 571, 562, 563, 573, 572, 563, 564, 574, 573, 564, 565, 575, 574, 565, 566, 576, 575, 566, 567, 577, 576, 567, 568, 578, 577, 568, 569, 579, 578, 569, 570, 580, 579, 570, 0, 11, 580, 571, 572, 582, 581, 572, 573, 583, 582, 573, 574, 584, 583, 574, 575, 585, 584, 575, 576, 586, 585, 576, 577, 587, 586, 577, 578, 588, 587, 578, 579, 589, 588, 579, 580, 590, 589, 580, 11, 22, 590, 581, 582, 592, 591, 582, 583, 593, 592, 583, 584, 594, 593, 584, 585, 595, 594, 585, 586, 596, 595, 586, 587, 597, 596, 587, 588, 598, 597, 588, 589, 599, 598, 589, 590, 600, 599, 590, 22, 33, 600, 591, 592, 602, 601, 592, 593, 603, 602, 593, 594, 604, 603, 594, 595, 605, 604, 595, 596, 606, 605, 596, 597, 607, 606, 597, 598, 608, 607, 598, 599, 609, 608, 599, 600, 610, 609, 600, 33, 44, 610, 601, 602, 612, 611, 602, 603, 613, 612, 603, 604, 614, 613, 604, 605, 615, 614, 605, 606, 616, 615, 606, 607, 617, 616, 607, 608, 618, 617, 608, 609, 619, 618, 609, 610, 620, 619, 610, 44, 55, 620, 611, 612, 622, 621, 612, 613, 623, 622, 613, 614, 624, 623, 614, 615, 625, 624, 615, 616, 626, 625, 616, 617, 627, 626, 617, 618, 628, 627, 618, 619, 629, 628, 619, 620, 630, 629, 620, 55, 66, 630, 621, 622, 632, 631, 622, 623, 633, 632, 623, 624, 634, 633, 624, 625, 635, 634, 625, 626, 636, 635, 626, 627, 637, 636, 627, 628, 638, 637, 628, 629, 639, 638, 629, 630, 640, 639, 630, 66, 77, 640, 631, 632, 642, 641, 632, 633, 643, 642, 633, 634, 644, 643, 634, 635, 645, 644, 635, 636, 646, 645, 636, 637, 647, 646, 637, 638, 648, 647, 638, 639, 649, 648, 639, 640, 650, 649, 640, 77, 88, 650, 641, 642, 652, 651, 642, 643, 653, 652, 643, 644, 654, 653, 644, 645, 655, 654, 645, 646, 656, 655, 646, 647, 657, 656, 647, 648, 658, 657, 648, 649, 659, 658, 649, 650, 660, 659, 650, 88, 99, 660, 651, 652, 662, 661, 652, 653, 663, 662, 653, 654, 664, 663, 654, 655, 665, 664, 655, 656, 666, 665, 656, 657, 667, 666, 657, 658, 668, 667, 658, 659, 669, 668, 659, 660, 670, 669, 660, 99, 110, 670] + token visibility = "inherited" + + def GeomSubset "upperHalf" ( + prepend apiSchemas = ["MaterialBindingAPI"] + ) + { + uniform token elementType = "face" + uniform token familyName = "materialBind" + int[] indices = [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, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599] + rel material:binding = + } +} + +def Scope "mtl" +{ + def Material "UsdPreviewSurface1" + { + token outputs:surface.connect = + + def Shader "UsdPreviewSurface1" + { + uniform token info:id = "UsdPreviewSurface" + token outputs:surface + } + } +} + From 6b5f1d264e1bd23affc8d54e250c4d794f38bc69 Mon Sep 17 00:00:00 2001 From: debloip Date: Tue, 2 Jul 2024 14:23:16 -0400 Subject: [PATCH 37/75] HYDRA-1058 : Simplify cube scene --- .../UpperHalfGeomSubsetCube.usda | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetCube.usda b/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetCube.usda index ad3b9eaed2..ab584db918 100644 --- a/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetCube.usda +++ b/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetCube.usda @@ -9,23 +9,7 @@ def Mesh "pCube1" ( 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 12, 11, 1, 2, 13, 12, 2, 3, 14, 13, 3, 4, 15, 14, 4, 5, 16, 15, 5, 6, 17, 16, 6, 7, 18, 17, 7, 8, 19, 18, 8, 9, 20, 19, 9, 10, 21, 20, 11, 12, 23, 22, 12, 13, 24, 23, 13, 14, 25, 24, 14, 15, 26, 25, 15, 16, 27, 26, 16, 17, 28, 27, 17, 18, 29, 28, 18, 19, 30, 29, 19, 20, 31, 30, 20, 21, 32, 31, 22, 23, 34, 33, 23, 24, 35, 34, 24, 25, 36, 35, 25, 26, 37, 36, 26, 27, 38, 37, 27, 28, 39, 38, 28, 29, 40, 39, 29, 30, 41, 40, 30, 31, 42, 41, 31, 32, 43, 42, 33, 34, 45, 44, 34, 35, 46, 45, 35, 36, 47, 46, 36, 37, 48, 47, 37, 38, 49, 48, 38, 39, 50, 49, 39, 40, 51, 50, 40, 41, 52, 51, 41, 42, 53, 52, 42, 43, 54, 53, 44, 45, 56, 55, 45, 46, 57, 56, 46, 47, 58, 57, 47, 48, 59, 58, 48, 49, 60, 59, 49, 50, 61, 60, 50, 51, 62, 61, 51, 52, 63, 62, 52, 53, 64, 63, 53, 54, 65, 64, 55, 56, 67, 66, 56, 57, 68, 67, 57, 58, 69, 68, 58, 59, 70, 69, 59, 60, 71, 70, 60, 61, 72, 71, 61, 62, 73, 72, 62, 63, 74, 73, 63, 64, 75, 74, 64, 65, 76, 75, 66, 67, 78, 77, 67, 68, 79, 78, 68, 69, 80, 79, 69, 70, 81, 80, 70, 71, 82, 81, 71, 72, 83, 82, 72, 73, 84, 83, 73, 74, 85, 84, 74, 75, 86, 85, 75, 76, 87, 86, 77, 78, 89, 88, 78, 79, 90, 89, 79, 80, 91, 90, 80, 81, 92, 91, 81, 82, 93, 92, 82, 83, 94, 93, 83, 84, 95, 94, 84, 85, 96, 95, 85, 86, 97, 96, 86, 87, 98, 97, 88, 89, 100, 99, 89, 90, 101, 100, 90, 91, 102, 101, 91, 92, 103, 102, 92, 93, 104, 103, 93, 94, 105, 104, 94, 95, 106, 105, 95, 96, 107, 106, 96, 97, 108, 107, 97, 98, 109, 108, 99, 100, 111, 110, 100, 101, 112, 111, 101, 102, 113, 112, 102, 103, 114, 113, 103, 104, 115, 114, 104, 105, 116, 115, 105, 106, 117, 116, 106, 107, 118, 117, 107, 108, 119, 118, 108, 109, 120, 119, 110, 111, 122, 121, 111, 112, 123, 122, 112, 113, 124, 123, 113, 114, 125, 124, 114, 115, 126, 125, 115, 116, 127, 126, 116, 117, 128, 127, 117, 118, 129, 128, 118, 119, 130, 129, 119, 120, 131, 130, 121, 122, 133, 132, 122, 123, 134, 133, 123, 124, 135, 134, 124, 125, 136, 135, 125, 126, 137, 136, 126, 127, 138, 137, 127, 128, 139, 138, 128, 129, 140, 139, 129, 130, 141, 140, 130, 131, 142, 141, 132, 133, 144, 143, 133, 134, 145, 144, 134, 135, 146, 145, 135, 136, 147, 146, 136, 137, 148, 147, 137, 138, 149, 148, 138, 139, 150, 149, 139, 140, 151, 150, 140, 141, 152, 151, 141, 142, 153, 152, 143, 144, 155, 154, 144, 145, 156, 155, 145, 146, 157, 156, 146, 147, 158, 157, 147, 148, 159, 158, 148, 149, 160, 159, 149, 150, 161, 160, 150, 151, 162, 161, 151, 152, 163, 162, 152, 153, 164, 163, 154, 155, 166, 165, 155, 156, 167, 166, 156, 157, 168, 167, 157, 158, 169, 168, 158, 159, 170, 169, 159, 160, 171, 170, 160, 161, 172, 171, 161, 162, 173, 172, 162, 163, 174, 173, 163, 164, 175, 174, 165, 166, 177, 176, 166, 167, 178, 177, 167, 168, 179, 178, 168, 169, 180, 179, 169, 170, 181, 180, 170, 171, 182, 181, 171, 172, 183, 182, 172, 173, 184, 183, 173, 174, 185, 184, 174, 175, 186, 185, 176, 177, 188, 187, 177, 178, 189, 188, 178, 179, 190, 189, 179, 180, 191, 190, 180, 181, 192, 191, 181, 182, 193, 192, 182, 183, 194, 193, 183, 184, 195, 194, 184, 185, 196, 195, 185, 186, 197, 196, 187, 188, 199, 198, 188, 189, 200, 199, 189, 190, 201, 200, 190, 191, 202, 201, 191, 192, 203, 202, 192, 193, 204, 203, 193, 194, 205, 204, 194, 195, 206, 205, 195, 196, 207, 206, 196, 197, 208, 207, 198, 199, 210, 209, 199, 200, 211, 210, 200, 201, 212, 211, 201, 202, 213, 212, 202, 203, 214, 213, 203, 204, 215, 214, 204, 205, 216, 215, 205, 206, 217, 216, 206, 207, 218, 217, 207, 208, 219, 218, 209, 210, 221, 220, 210, 211, 222, 221, 211, 212, 223, 222, 212, 213, 224, 223, 213, 214, 225, 224, 214, 215, 226, 225, 215, 216, 227, 226, 216, 217, 228, 227, 217, 218, 229, 228, 218, 219, 230, 229, 220, 221, 232, 231, 221, 222, 233, 232, 222, 223, 234, 233, 223, 224, 235, 234, 224, 225, 236, 235, 225, 226, 237, 236, 226, 227, 238, 237, 227, 228, 239, 238, 228, 229, 240, 239, 229, 230, 241, 240, 231, 232, 243, 242, 232, 233, 244, 243, 233, 234, 245, 244, 234, 235, 246, 245, 235, 236, 247, 246, 236, 237, 248, 247, 237, 238, 249, 248, 238, 239, 250, 249, 239, 240, 251, 250, 240, 241, 252, 251, 242, 243, 254, 253, 243, 244, 255, 254, 244, 245, 256, 255, 245, 246, 257, 256, 246, 247, 258, 257, 247, 248, 259, 258, 248, 249, 260, 259, 249, 250, 261, 260, 250, 251, 262, 261, 251, 252, 263, 262, 253, 254, 265, 264, 254, 255, 266, 265, 255, 256, 267, 266, 256, 257, 268, 267, 257, 258, 269, 268, 258, 259, 270, 269, 259, 260, 271, 270, 260, 261, 272, 271, 261, 262, 273, 272, 262, 263, 274, 273, 264, 265, 276, 275, 265, 266, 277, 276, 266, 267, 278, 277, 267, 268, 279, 278, 268, 269, 280, 279, 269, 270, 281, 280, 270, 271, 282, 281, 271, 272, 283, 282, 272, 273, 284, 283, 273, 274, 285, 284, 275, 276, 287, 286, 276, 277, 288, 287, 277, 278, 289, 288, 278, 279, 290, 289, 279, 280, 291, 290, 280, 281, 292, 291, 281, 282, 293, 292, 282, 283, 294, 293, 283, 284, 295, 294, 284, 285, 296, 295, 286, 287, 298, 297, 287, 288, 299, 298, 288, 289, 300, 299, 289, 290, 301, 300, 290, 291, 302, 301, 291, 292, 303, 302, 292, 293, 304, 303, 293, 294, 305, 304, 294, 295, 306, 305, 295, 296, 307, 306, 297, 298, 309, 308, 298, 299, 310, 309, 299, 300, 311, 310, 300, 301, 312, 311, 301, 302, 313, 312, 302, 303, 314, 313, 303, 304, 315, 314, 304, 305, 316, 315, 305, 306, 317, 316, 306, 307, 318, 317, 308, 309, 320, 319, 309, 310, 321, 320, 310, 311, 322, 321, 311, 312, 323, 322, 312, 313, 324, 323, 313, 314, 325, 324, 314, 315, 326, 325, 315, 316, 327, 326, 316, 317, 328, 327, 317, 318, 329, 328, 319, 320, 331, 330, 320, 321, 332, 331, 321, 322, 333, 332, 322, 323, 334, 333, 323, 324, 335, 334, 324, 325, 336, 335, 325, 326, 337, 336, 326, 327, 338, 337, 327, 328, 339, 338, 328, 329, 340, 339, 330, 331, 342, 341, 331, 332, 343, 342, 332, 333, 344, 343, 333, 334, 345, 344, 334, 335, 346, 345, 335, 336, 347, 346, 336, 337, 348, 347, 337, 338, 349, 348, 338, 339, 350, 349, 339, 340, 351, 350, 341, 342, 353, 352, 342, 343, 354, 353, 343, 344, 355, 354, 344, 345, 356, 355, 345, 346, 357, 356, 346, 347, 358, 357, 347, 348, 359, 358, 348, 349, 360, 359, 349, 350, 361, 360, 350, 351, 362, 361, 352, 353, 364, 363, 353, 354, 365, 364, 354, 355, 366, 365, 355, 356, 367, 366, 356, 357, 368, 367, 357, 358, 369, 368, 358, 359, 370, 369, 359, 360, 371, 370, 360, 361, 372, 371, 361, 362, 373, 372, 363, 364, 375, 374, 364, 365, 376, 375, 365, 366, 377, 376, 366, 367, 378, 377, 367, 368, 379, 378, 368, 369, 380, 379, 369, 370, 381, 380, 370, 371, 382, 381, 371, 372, 383, 382, 372, 373, 384, 383, 374, 375, 386, 385, 375, 376, 387, 386, 376, 377, 388, 387, 377, 378, 389, 388, 378, 379, 390, 389, 379, 380, 391, 390, 380, 381, 392, 391, 381, 382, 393, 392, 382, 383, 394, 393, 383, 384, 395, 394, 385, 386, 397, 396, 386, 387, 398, 397, 387, 388, 399, 398, 388, 389, 400, 399, 389, 390, 401, 400, 390, 391, 402, 401, 391, 392, 403, 402, 392, 393, 404, 403, 393, 394, 405, 404, 394, 395, 406, 405, 396, 397, 408, 407, 397, 398, 409, 408, 398, 399, 410, 409, 399, 400, 411, 410, 400, 401, 412, 411, 401, 402, 413, 412, 402, 403, 414, 413, 403, 404, 415, 414, 404, 405, 416, 415, 405, 406, 417, 416, 407, 408, 419, 418, 408, 409, 420, 419, 409, 410, 421, 420, 410, 411, 422, 421, 411, 412, 423, 422, 412, 413, 424, 423, 413, 414, 425, 424, 414, 415, 426, 425, 415, 416, 427, 426, 416, 417, 428, 427, 418, 419, 430, 429, 419, 420, 431, 430, 420, 421, 432, 431, 421, 422, 433, 432, 422, 423, 434, 433, 423, 424, 435, 434, 424, 425, 436, 435, 425, 426, 437, 436, 426, 427, 438, 437, 427, 428, 439, 438, 429, 430, 1, 0, 430, 431, 2, 1, 431, 432, 3, 2, 432, 433, 4, 3, 433, 434, 5, 4, 434, 435, 6, 5, 435, 436, 7, 6, 436, 437, 8, 7, 437, 438, 9, 8, 438, 439, 10, 9, 351, 340, 329, 440, 362, 351, 440, 441, 373, 362, 441, 442, 384, 373, 442, 443, 395, 384, 443, 444, 406, 395, 444, 445, 417, 406, 445, 446, 428, 417, 446, 447, 439, 428, 447, 448, 10, 439, 448, 21, 440, 329, 318, 449, 441, 440, 449, 450, 442, 441, 450, 451, 443, 442, 451, 452, 444, 443, 452, 453, 445, 444, 453, 454, 446, 445, 454, 455, 447, 446, 455, 456, 448, 447, 456, 457, 21, 448, 457, 32, 449, 318, 307, 458, 450, 449, 458, 459, 451, 450, 459, 460, 452, 451, 460, 461, 453, 452, 461, 462, 454, 453, 462, 463, 455, 454, 463, 464, 456, 455, 464, 465, 457, 456, 465, 466, 32, 457, 466, 43, 458, 307, 296, 467, 459, 458, 467, 468, 460, 459, 468, 469, 461, 460, 469, 470, 462, 461, 470, 471, 463, 462, 471, 472, 464, 463, 472, 473, 465, 464, 473, 474, 466, 465, 474, 475, 43, 466, 475, 54, 467, 296, 285, 476, 468, 467, 476, 477, 469, 468, 477, 478, 470, 469, 478, 479, 471, 470, 479, 480, 472, 471, 480, 481, 473, 472, 481, 482, 474, 473, 482, 483, 475, 474, 483, 484, 54, 475, 484, 65, 476, 285, 274, 485, 477, 476, 485, 486, 478, 477, 486, 487, 479, 478, 487, 488, 480, 479, 488, 489, 481, 480, 489, 490, 482, 481, 490, 491, 483, 482, 491, 492, 484, 483, 492, 493, 65, 484, 493, 76, 485, 274, 263, 494, 486, 485, 494, 495, 487, 486, 495, 496, 488, 487, 496, 497, 489, 488, 497, 498, 490, 489, 498, 499, 491, 490, 499, 500, 492, 491, 500, 501, 493, 492, 501, 502, 76, 493, 502, 87, 494, 263, 252, 503, 495, 494, 503, 504, 496, 495, 504, 505, 497, 496, 505, 506, 498, 497, 506, 507, 499, 498, 507, 508, 500, 499, 508, 509, 501, 500, 509, 510, 502, 501, 510, 511, 87, 502, 511, 98, 503, 252, 241, 512, 504, 503, 512, 513, 505, 504, 513, 514, 506, 505, 514, 515, 507, 506, 515, 516, 508, 507, 516, 517, 509, 508, 517, 518, 510, 509, 518, 519, 511, 510, 519, 520, 98, 511, 520, 109, 512, 241, 230, 219, 513, 512, 219, 208, 514, 513, 208, 197, 515, 514, 197, 186, 516, 515, 186, 175, 517, 516, 175, 164, 518, 517, 164, 153, 519, 518, 153, 142, 520, 519, 142, 131, 109, 520, 131, 120, 330, 341, 521, 319, 341, 352, 522, 521, 352, 363, 523, 522, 363, 374, 524, 523, 374, 385, 525, 524, 385, 396, 526, 525, 396, 407, 527, 526, 407, 418, 528, 527, 418, 429, 529, 528, 429, 0, 11, 529, 319, 521, 530, 308, 521, 522, 531, 530, 522, 523, 532, 531, 523, 524, 533, 532, 524, 525, 534, 533, 525, 526, 535, 534, 526, 527, 536, 535, 527, 528, 537, 536, 528, 529, 538, 537, 529, 11, 22, 538, 308, 530, 539, 297, 530, 531, 540, 539, 531, 532, 541, 540, 532, 533, 542, 541, 533, 534, 543, 542, 534, 535, 544, 543, 535, 536, 545, 544, 536, 537, 546, 545, 537, 538, 547, 546, 538, 22, 33, 547, 297, 539, 548, 286, 539, 540, 549, 548, 540, 541, 550, 549, 541, 542, 551, 550, 542, 543, 552, 551, 543, 544, 553, 552, 544, 545, 554, 553, 545, 546, 555, 554, 546, 547, 556, 555, 547, 33, 44, 556, 286, 548, 557, 275, 548, 549, 558, 557, 549, 550, 559, 558, 550, 551, 560, 559, 551, 552, 561, 560, 552, 553, 562, 561, 553, 554, 563, 562, 554, 555, 564, 563, 555, 556, 565, 564, 556, 44, 55, 565, 275, 557, 566, 264, 557, 558, 567, 566, 558, 559, 568, 567, 559, 560, 569, 568, 560, 561, 570, 569, 561, 562, 571, 570, 562, 563, 572, 571, 563, 564, 573, 572, 564, 565, 574, 573, 565, 55, 66, 574, 264, 566, 575, 253, 566, 567, 576, 575, 567, 568, 577, 576, 568, 569, 578, 577, 569, 570, 579, 578, 570, 571, 580, 579, 571, 572, 581, 580, 572, 573, 582, 581, 573, 574, 583, 582, 574, 66, 77, 583, 253, 575, 584, 242, 575, 576, 585, 584, 576, 577, 586, 585, 577, 578, 587, 586, 578, 579, 588, 587, 579, 580, 589, 588, 580, 581, 590, 589, 581, 582, 591, 590, 582, 583, 592, 591, 583, 77, 88, 592, 242, 584, 593, 231, 584, 585, 594, 593, 585, 586, 595, 594, 586, 587, 596, 595, 587, 588, 597, 596, 588, 589, 598, 597, 589, 590, 599, 598, 590, 591, 600, 599, 591, 592, 601, 600, 592, 88, 99, 601, 231, 593, 209, 220, 593, 594, 198, 209, 594, 595, 187, 198, 595, 596, 176, 187, 596, 597, 165, 176, 597, 598, 154, 165, 598, 599, 143, 154, 599, 600, 132, 143, 600, 601, 121, 132, 601, 99, 110, 121] point3f[] points = [(-0.5, -0.5, 0.5), (-0.4, -0.5, 0.5), (-0.3, -0.5, 0.5), (-0.20000002, -0.5, 0.5), (-0.10000002, -0.5, 0.5), (-1.4901161e-8, -0.5, 0.5), (0.09999999, -0.5, 0.5), (0.19999999, -0.5, 0.5), (0.29999998, -0.5, 0.5), (0.39999998, -0.5, 0.5), (0.49999997, -0.5, 0.5), (-0.5, -0.4, 0.5), (-0.4, -0.4, 0.5), (-0.3, -0.4, 0.5), (-0.20000002, -0.4, 0.5), (-0.10000002, -0.4, 0.5), (-1.4901161e-8, -0.4, 0.5), (0.09999999, -0.4, 0.5), (0.19999999, -0.4, 0.5), (0.29999998, -0.4, 0.5), (0.39999998, -0.4, 0.5), (0.49999997, -0.4, 0.5), (-0.5, -0.3, 0.5), (-0.4, -0.3, 0.5), (-0.3, -0.3, 0.5), (-0.20000002, -0.3, 0.5), (-0.10000002, -0.3, 0.5), (-1.4901161e-8, -0.3, 0.5), (0.09999999, -0.3, 0.5), (0.19999999, -0.3, 0.5), (0.29999998, -0.3, 0.5), (0.39999998, -0.3, 0.5), (0.49999997, -0.3, 0.5), (-0.5, -0.20000002, 0.5), (-0.4, -0.20000002, 0.5), (-0.3, -0.20000002, 0.5), (-0.20000002, -0.20000002, 0.5), (-0.10000002, -0.20000002, 0.5), (-1.4901161e-8, -0.20000002, 0.5), (0.09999999, -0.20000002, 0.5), (0.19999999, -0.20000002, 0.5), (0.29999998, -0.20000002, 0.5), (0.39999998, -0.20000002, 0.5), (0.49999997, -0.20000002, 0.5), (-0.5, -0.10000002, 0.5), (-0.4, -0.10000002, 0.5), (-0.3, -0.10000002, 0.5), (-0.20000002, -0.10000002, 0.5), (-0.10000002, -0.10000002, 0.5), (-1.4901161e-8, -0.10000002, 0.5), (0.09999999, -0.10000002, 0.5), (0.19999999, -0.10000002, 0.5), (0.29999998, -0.10000002, 0.5), (0.39999998, -0.10000002, 0.5), (0.49999997, -0.10000002, 0.5), (-0.5, -1.4901161e-8, 0.5), (-0.4, -1.4901161e-8, 0.5), (-0.3, -1.4901161e-8, 0.5), (-0.20000002, -1.4901161e-8, 0.5), (-0.10000002, -1.4901161e-8, 0.5), (-1.4901161e-8, -1.4901161e-8, 0.5), (0.09999999, -1.4901161e-8, 0.5), (0.19999999, -1.4901161e-8, 0.5), (0.29999998, -1.4901161e-8, 0.5), (0.39999998, -1.4901161e-8, 0.5), (0.49999997, -1.4901161e-8, 0.5), (-0.5, 0.09999999, 0.5), (-0.4, 0.09999999, 0.5), (-0.3, 0.09999999, 0.5), (-0.20000002, 0.09999999, 0.5), (-0.10000002, 0.09999999, 0.5), (-1.4901161e-8, 0.09999999, 0.5), (0.09999999, 0.09999999, 0.5), (0.19999999, 0.09999999, 0.5), (0.29999998, 0.09999999, 0.5), (0.39999998, 0.09999999, 0.5), (0.49999997, 0.09999999, 0.5), (-0.5, 0.19999999, 0.5), (-0.4, 0.19999999, 0.5), (-0.3, 0.19999999, 0.5), (-0.20000002, 0.19999999, 0.5), (-0.10000002, 0.19999999, 0.5), (-1.4901161e-8, 0.19999999, 0.5), (0.09999999, 0.19999999, 0.5), (0.19999999, 0.19999999, 0.5), (0.29999998, 0.19999999, 0.5), (0.39999998, 0.19999999, 0.5), (0.49999997, 0.19999999, 0.5), (-0.5, 0.29999998, 0.5), (-0.4, 0.29999998, 0.5), (-0.3, 0.29999998, 0.5), (-0.20000002, 0.29999998, 0.5), (-0.10000002, 0.29999998, 0.5), (-1.4901161e-8, 0.29999998, 0.5), (0.09999999, 0.29999998, 0.5), (0.19999999, 0.29999998, 0.5), (0.29999998, 0.29999998, 0.5), (0.39999998, 0.29999998, 0.5), (0.49999997, 0.29999998, 0.5), (-0.5, 0.39999998, 0.5), (-0.4, 0.39999998, 0.5), (-0.3, 0.39999998, 0.5), (-0.20000002, 0.39999998, 0.5), (-0.10000002, 0.39999998, 0.5), (-1.4901161e-8, 0.39999998, 0.5), (0.09999999, 0.39999998, 0.5), (0.19999999, 0.39999998, 0.5), (0.29999998, 0.39999998, 0.5), (0.39999998, 0.39999998, 0.5), (0.49999997, 0.39999998, 0.5), (-0.5, 0.5, 0.5), (-0.4, 0.5, 0.5), (-0.3, 0.5, 0.5), (-0.20000002, 0.5, 0.5), (-0.10000002, 0.5, 0.5), (-1.4901161e-8, 0.5, 0.5), (0.09999999, 0.5, 0.5), (0.19999999, 0.5, 0.5), (0.29999998, 0.5, 0.5), (0.39999998, 0.5, 0.5), (0.49999997, 0.5, 0.5), (-0.5, 0.5, 0.4), (-0.4, 0.5, 0.4), (-0.3, 0.5, 0.4), (-0.20000002, 0.5, 0.4), (-0.10000002, 0.5, 0.4), (-1.4901161e-8, 0.5, 0.4), (0.09999999, 0.5, 0.4), (0.19999999, 0.5, 0.4), (0.29999998, 0.5, 0.4), (0.39999998, 0.5, 0.4), (0.49999997, 0.5, 0.4), (-0.5, 0.5, 0.3), (-0.4, 0.5, 0.3), (-0.3, 0.5, 0.3), (-0.20000002, 0.5, 0.3), (-0.10000002, 0.5, 0.3), (-1.4901161e-8, 0.5, 0.3), (0.09999999, 0.5, 0.3), (0.19999999, 0.5, 0.3), (0.29999998, 0.5, 0.3), (0.39999998, 0.5, 0.3), (0.49999997, 0.5, 0.3), (-0.5, 0.5, 0.20000002), (-0.4, 0.5, 0.20000002), (-0.3, 0.5, 0.20000002), (-0.20000002, 0.5, 0.20000002), (-0.10000002, 0.5, 0.20000002), (-1.4901161e-8, 0.5, 0.20000002), (0.09999999, 0.5, 0.20000002), (0.19999999, 0.5, 0.20000002), (0.29999998, 0.5, 0.20000002), (0.39999998, 0.5, 0.20000002), (0.49999997, 0.5, 0.20000002), (-0.5, 0.5, 0.10000002), (-0.4, 0.5, 0.10000002), (-0.3, 0.5, 0.10000002), (-0.20000002, 0.5, 0.10000002), (-0.10000002, 0.5, 0.10000002), (-1.4901161e-8, 0.5, 0.10000002), (0.09999999, 0.5, 0.10000002), (0.19999999, 0.5, 0.10000002), (0.29999998, 0.5, 0.10000002), (0.39999998, 0.5, 0.10000002), (0.49999997, 0.5, 0.10000002), (-0.5, 0.5, 1.4901161e-8), (-0.4, 0.5, 1.4901161e-8), (-0.3, 0.5, 1.4901161e-8), (-0.20000002, 0.5, 1.4901161e-8), (-0.10000002, 0.5, 1.4901161e-8), (-1.4901161e-8, 0.5, 1.4901161e-8), (0.09999999, 0.5, 1.4901161e-8), (0.19999999, 0.5, 1.4901161e-8), (0.29999998, 0.5, 1.4901161e-8), (0.39999998, 0.5, 1.4901161e-8), (0.49999997, 0.5, 1.4901161e-8), (-0.5, 0.5, -0.09999999), (-0.4, 0.5, -0.09999999), (-0.3, 0.5, -0.09999999), (-0.20000002, 0.5, -0.09999999), (-0.10000002, 0.5, -0.09999999), (-1.4901161e-8, 0.5, -0.09999999), (0.09999999, 0.5, -0.09999999), (0.19999999, 0.5, -0.09999999), (0.29999998, 0.5, -0.09999999), (0.39999998, 0.5, -0.09999999), (0.49999997, 0.5, -0.09999999), (-0.5, 0.5, -0.19999999), (-0.4, 0.5, -0.19999999), (-0.3, 0.5, -0.19999999), (-0.20000002, 0.5, -0.19999999), (-0.10000002, 0.5, -0.19999999), (-1.4901161e-8, 0.5, -0.19999999), (0.09999999, 0.5, -0.19999999), (0.19999999, 0.5, -0.19999999), (0.29999998, 0.5, -0.19999999), (0.39999998, 0.5, -0.19999999), (0.49999997, 0.5, -0.19999999), (-0.5, 0.5, -0.29999998), (-0.4, 0.5, -0.29999998), (-0.3, 0.5, -0.29999998), (-0.20000002, 0.5, -0.29999998), (-0.10000002, 0.5, -0.29999998), (-1.4901161e-8, 0.5, -0.29999998), (0.09999999, 0.5, -0.29999998), (0.19999999, 0.5, -0.29999998), (0.29999998, 0.5, -0.29999998), (0.39999998, 0.5, -0.29999998), (0.49999997, 0.5, -0.29999998), (-0.5, 0.5, -0.39999998), (-0.4, 0.5, -0.39999998), (-0.3, 0.5, -0.39999998), (-0.20000002, 0.5, -0.39999998), (-0.10000002, 0.5, -0.39999998), (-1.4901161e-8, 0.5, -0.39999998), (0.09999999, 0.5, -0.39999998), (0.19999999, 0.5, -0.39999998), (0.29999998, 0.5, -0.39999998), (0.39999998, 0.5, -0.39999998), (0.49999997, 0.5, -0.39999998), (-0.5, 0.5, -0.5), (-0.4, 0.5, -0.5), (-0.3, 0.5, -0.5), (-0.20000002, 0.5, -0.5), (-0.10000002, 0.5, -0.5), (-1.4901161e-8, 0.5, -0.5), (0.09999999, 0.5, -0.5), (0.19999999, 0.5, -0.5), (0.29999998, 0.5, -0.5), (0.39999998, 0.5, -0.5), (0.49999997, 0.5, -0.5), (-0.5, 0.4, -0.5), (-0.4, 0.4, -0.5), (-0.3, 0.4, -0.5), (-0.20000002, 0.4, -0.5), (-0.10000002, 0.4, -0.5), (-1.4901161e-8, 0.4, -0.5), (0.09999999, 0.4, -0.5), (0.19999999, 0.4, -0.5), (0.29999998, 0.4, -0.5), (0.39999998, 0.4, -0.5), (0.49999997, 0.4, -0.5), (-0.5, 0.3, -0.5), (-0.4, 0.3, -0.5), (-0.3, 0.3, -0.5), (-0.20000002, 0.3, -0.5), (-0.10000002, 0.3, -0.5), (-1.4901161e-8, 0.3, -0.5), (0.09999999, 0.3, -0.5), (0.19999999, 0.3, -0.5), (0.29999998, 0.3, -0.5), (0.39999998, 0.3, -0.5), (0.49999997, 0.3, -0.5), (-0.5, 0.20000002, -0.5), (-0.4, 0.20000002, -0.5), (-0.3, 0.20000002, -0.5), (-0.20000002, 0.20000002, -0.5), (-0.10000002, 0.20000002, -0.5), (-1.4901161e-8, 0.20000002, -0.5), (0.09999999, 0.20000002, -0.5), (0.19999999, 0.20000002, -0.5), (0.29999998, 0.20000002, -0.5), (0.39999998, 0.20000002, -0.5), (0.49999997, 0.20000002, -0.5), (-0.5, 0.10000002, -0.5), (-0.4, 0.10000002, -0.5), (-0.3, 0.10000002, -0.5), (-0.20000002, 0.10000002, -0.5), (-0.10000002, 0.10000002, -0.5), (-1.4901161e-8, 0.10000002, -0.5), (0.09999999, 0.10000002, -0.5), (0.19999999, 0.10000002, -0.5), (0.29999998, 0.10000002, -0.5), (0.39999998, 0.10000002, -0.5), (0.49999997, 0.10000002, -0.5), (-0.5, 1.4901161e-8, -0.5), (-0.4, 1.4901161e-8, -0.5), (-0.3, 1.4901161e-8, -0.5), (-0.20000002, 1.4901161e-8, -0.5), (-0.10000002, 1.4901161e-8, -0.5), (-1.4901161e-8, 1.4901161e-8, -0.5), (0.09999999, 1.4901161e-8, -0.5), (0.19999999, 1.4901161e-8, -0.5), (0.29999998, 1.4901161e-8, -0.5), (0.39999998, 1.4901161e-8, -0.5), (0.49999997, 1.4901161e-8, -0.5), (-0.5, -0.09999999, -0.5), (-0.4, -0.09999999, -0.5), (-0.3, -0.09999999, -0.5), (-0.20000002, -0.09999999, -0.5), (-0.10000002, -0.09999999, -0.5), (-1.4901161e-8, -0.09999999, -0.5), (0.09999999, -0.09999999, -0.5), (0.19999999, -0.09999999, -0.5), (0.29999998, -0.09999999, -0.5), (0.39999998, -0.09999999, -0.5), (0.49999997, -0.09999999, -0.5), (-0.5, -0.19999999, -0.5), (-0.4, -0.19999999, -0.5), (-0.3, -0.19999999, -0.5), (-0.20000002, -0.19999999, -0.5), (-0.10000002, -0.19999999, -0.5), (-1.4901161e-8, -0.19999999, -0.5), (0.09999999, -0.19999999, -0.5), (0.19999999, -0.19999999, -0.5), (0.29999998, -0.19999999, -0.5), (0.39999998, -0.19999999, -0.5), (0.49999997, -0.19999999, -0.5), (-0.5, -0.29999998, -0.5), (-0.4, -0.29999998, -0.5), (-0.3, -0.29999998, -0.5), (-0.20000002, -0.29999998, -0.5), (-0.10000002, -0.29999998, -0.5), (-1.4901161e-8, -0.29999998, -0.5), (0.09999999, -0.29999998, -0.5), (0.19999999, -0.29999998, -0.5), (0.29999998, -0.29999998, -0.5), (0.39999998, -0.29999998, -0.5), (0.49999997, -0.29999998, -0.5), (-0.5, -0.39999998, -0.5), (-0.4, -0.39999998, -0.5), (-0.3, -0.39999998, -0.5), (-0.20000002, -0.39999998, -0.5), (-0.10000002, -0.39999998, -0.5), (-1.4901161e-8, -0.39999998, -0.5), (0.09999999, -0.39999998, -0.5), (0.19999999, -0.39999998, -0.5), (0.29999998, -0.39999998, -0.5), (0.39999998, -0.39999998, -0.5), (0.49999997, -0.39999998, -0.5), (-0.5, -0.5, -0.5), (-0.4, -0.5, -0.5), (-0.3, -0.5, -0.5), (-0.20000002, -0.5, -0.5), (-0.10000002, -0.5, -0.5), (-1.4901161e-8, -0.5, -0.5), (0.09999999, -0.5, -0.5), (0.19999999, -0.5, -0.5), (0.29999998, -0.5, -0.5), (0.39999998, -0.5, -0.5), (0.49999997, -0.5, -0.5), (-0.5, -0.5, -0.4), (-0.4, -0.5, -0.4), (-0.3, -0.5, -0.4), (-0.20000002, -0.5, -0.4), (-0.10000002, -0.5, -0.4), (-1.4901161e-8, -0.5, -0.4), (0.09999999, -0.5, -0.4), (0.19999999, -0.5, -0.4), (0.29999998, -0.5, -0.4), (0.39999998, -0.5, -0.4), (0.49999997, -0.5, -0.4), (-0.5, -0.5, -0.3), (-0.4, -0.5, -0.3), (-0.3, -0.5, -0.3), (-0.20000002, -0.5, -0.3), (-0.10000002, -0.5, -0.3), (-1.4901161e-8, -0.5, -0.3), (0.09999999, -0.5, -0.3), (0.19999999, -0.5, -0.3), (0.29999998, -0.5, -0.3), (0.39999998, -0.5, -0.3), (0.49999997, -0.5, -0.3), (-0.5, -0.5, -0.20000002), (-0.4, -0.5, -0.20000002), (-0.3, -0.5, -0.20000002), (-0.20000002, -0.5, -0.20000002), (-0.10000002, -0.5, -0.20000002), (-1.4901161e-8, -0.5, -0.20000002), (0.09999999, -0.5, -0.20000002), (0.19999999, -0.5, -0.20000002), (0.29999998, -0.5, -0.20000002), (0.39999998, -0.5, -0.20000002), (0.49999997, -0.5, -0.20000002), (-0.5, -0.5, -0.10000002), (-0.4, -0.5, -0.10000002), (-0.3, -0.5, -0.10000002), (-0.20000002, -0.5, -0.10000002), (-0.10000002, -0.5, -0.10000002), (-1.4901161e-8, -0.5, -0.10000002), (0.09999999, -0.5, -0.10000002), (0.19999999, -0.5, -0.10000002), (0.29999998, -0.5, -0.10000002), (0.39999998, -0.5, -0.10000002), (0.49999997, -0.5, -0.10000002), (-0.5, -0.5, -1.4901161e-8), (-0.4, -0.5, -1.4901161e-8), (-0.3, -0.5, -1.4901161e-8), (-0.20000002, -0.5, -1.4901161e-8), (-0.10000002, -0.5, -1.4901161e-8), (-1.4901161e-8, -0.5, -1.4901161e-8), (0.09999999, -0.5, -1.4901161e-8), (0.19999999, -0.5, -1.4901161e-8), (0.29999998, -0.5, -1.4901161e-8), (0.39999998, -0.5, -1.4901161e-8), (0.49999997, -0.5, -1.4901161e-8), (-0.5, -0.5, 0.09999999), (-0.4, -0.5, 0.09999999), (-0.3, -0.5, 0.09999999), (-0.20000002, -0.5, 0.09999999), (-0.10000002, -0.5, 0.09999999), (-1.4901161e-8, -0.5, 0.09999999), (0.09999999, -0.5, 0.09999999), (0.19999999, -0.5, 0.09999999), (0.29999998, -0.5, 0.09999999), (0.39999998, -0.5, 0.09999999), (0.49999997, -0.5, 0.09999999), (-0.5, -0.5, 0.19999999), (-0.4, -0.5, 0.19999999), (-0.3, -0.5, 0.19999999), (-0.20000002, -0.5, 0.19999999), (-0.10000002, -0.5, 0.19999999), (-1.4901161e-8, -0.5, 0.19999999), (0.09999999, -0.5, 0.19999999), (0.19999999, -0.5, 0.19999999), (0.29999998, -0.5, 0.19999999), (0.39999998, -0.5, 0.19999999), (0.49999997, -0.5, 0.19999999), (-0.5, -0.5, 0.29999998), (-0.4, -0.5, 0.29999998), (-0.3, -0.5, 0.29999998), (-0.20000002, -0.5, 0.29999998), (-0.10000002, -0.5, 0.29999998), (-1.4901161e-8, -0.5, 0.29999998), (0.09999999, -0.5, 0.29999998), (0.19999999, -0.5, 0.29999998), (0.29999998, -0.5, 0.29999998), (0.39999998, -0.5, 0.29999998), (0.49999997, -0.5, 0.29999998), (-0.5, -0.5, 0.39999998), (-0.4, -0.5, 0.39999998), (-0.3, -0.5, 0.39999998), (-0.20000002, -0.5, 0.39999998), (-0.10000002, -0.5, 0.39999998), (-1.4901161e-8, -0.5, 0.39999998), (0.09999999, -0.5, 0.39999998), (0.19999999, -0.5, 0.39999998), (0.29999998, -0.5, 0.39999998), (0.39999998, -0.5, 0.39999998), (0.49999997, -0.5, 0.39999998), (0.5, -0.4, -0.4), (0.5, -0.4, -0.3), (0.5, -0.4, -0.20000002), (0.5, -0.4, -0.10000002), (0.5, -0.4, -1.4901161e-8), (0.5, -0.4, 0.09999999), (0.5, -0.4, 0.19999999), (0.5, -0.4, 0.29999998), (0.5, -0.4, 0.39999998), (0.5, -0.3, -0.4), (0.5, -0.3, -0.3), (0.5, -0.3, -0.20000002), (0.5, -0.3, -0.10000002), (0.5, -0.3, -1.4901161e-8), (0.5, -0.3, 0.09999999), (0.5, -0.3, 0.19999999), (0.5, -0.3, 0.29999998), (0.5, -0.3, 0.39999998), (0.5, -0.20000002, -0.4), (0.5, -0.20000002, -0.3), (0.5, -0.20000002, -0.20000002), (0.5, -0.20000002, -0.10000002), (0.5, -0.20000002, -1.4901161e-8), (0.5, -0.20000002, 0.09999999), (0.5, -0.20000002, 0.19999999), (0.5, -0.20000002, 0.29999998), (0.5, -0.20000002, 0.39999998), (0.5, -0.10000002, -0.4), (0.5, -0.10000002, -0.3), (0.5, -0.10000002, -0.20000002), (0.5, -0.10000002, -0.10000002), (0.5, -0.10000002, -1.4901161e-8), (0.5, -0.10000002, 0.09999999), (0.5, -0.10000002, 0.19999999), (0.5, -0.10000002, 0.29999998), (0.5, -0.10000002, 0.39999998), (0.5, -1.4901161e-8, -0.4), (0.5, -1.4901161e-8, -0.3), (0.5, -1.4901161e-8, -0.20000002), (0.5, -1.4901161e-8, -0.10000002), (0.5, -1.4901161e-8, -1.4901161e-8), (0.5, -1.4901161e-8, 0.09999999), (0.5, -1.4901161e-8, 0.19999999), (0.5, -1.4901161e-8, 0.29999998), (0.5, -1.4901161e-8, 0.39999998), (0.5, 0.09999999, -0.4), (0.5, 0.09999999, -0.3), (0.5, 0.09999999, -0.20000002), (0.5, 0.09999999, -0.10000002), (0.5, 0.09999999, -1.4901161e-8), (0.5, 0.09999999, 0.09999999), (0.5, 0.09999999, 0.19999999), (0.5, 0.09999999, 0.29999998), (0.5, 0.09999999, 0.39999998), (0.5, 0.19999999, -0.4), (0.5, 0.19999999, -0.3), (0.5, 0.19999999, -0.20000002), (0.5, 0.19999999, -0.10000002), (0.5, 0.19999999, -1.4901161e-8), (0.5, 0.19999999, 0.09999999), (0.5, 0.19999999, 0.19999999), (0.5, 0.19999999, 0.29999998), (0.5, 0.19999999, 0.39999998), (0.5, 0.29999998, -0.4), (0.5, 0.29999998, -0.3), (0.5, 0.29999998, -0.20000002), (0.5, 0.29999998, -0.10000002), (0.5, 0.29999998, -1.4901161e-8), (0.5, 0.29999998, 0.09999999), (0.5, 0.29999998, 0.19999999), (0.5, 0.29999998, 0.29999998), (0.5, 0.29999998, 0.39999998), (0.5, 0.39999998, -0.4), (0.5, 0.39999998, -0.3), (0.5, 0.39999998, -0.20000002), (0.5, 0.39999998, -0.10000002), (0.5, 0.39999998, -1.4901161e-8), (0.5, 0.39999998, 0.09999999), (0.5, 0.39999998, 0.19999999), (0.5, 0.39999998, 0.29999998), (0.5, 0.39999998, 0.39999998), (-0.5, -0.4, -0.4), (-0.5, -0.4, -0.3), (-0.5, -0.4, -0.20000002), (-0.5, -0.4, -0.10000002), (-0.5, -0.4, -1.4901161e-8), (-0.5, -0.4, 0.09999999), (-0.5, -0.4, 0.19999999), (-0.5, -0.4, 0.29999998), (-0.5, -0.4, 0.39999998), (-0.5, -0.3, -0.4), (-0.5, -0.3, -0.3), (-0.5, -0.3, -0.20000002), (-0.5, -0.3, -0.10000002), (-0.5, -0.3, -1.4901161e-8), (-0.5, -0.3, 0.09999999), (-0.5, -0.3, 0.19999999), (-0.5, -0.3, 0.29999998), (-0.5, -0.3, 0.39999998), (-0.5, -0.20000002, -0.4), (-0.5, -0.20000002, -0.3), (-0.5, -0.20000002, -0.20000002), (-0.5, -0.20000002, -0.10000002), (-0.5, -0.20000002, -1.4901161e-8), (-0.5, -0.20000002, 0.09999999), (-0.5, -0.20000002, 0.19999999), (-0.5, -0.20000002, 0.29999998), (-0.5, -0.20000002, 0.39999998), (-0.5, -0.10000002, -0.4), (-0.5, -0.10000002, -0.3), (-0.5, -0.10000002, -0.20000002), (-0.5, -0.10000002, -0.10000002), (-0.5, -0.10000002, -1.4901161e-8), (-0.5, -0.10000002, 0.09999999), (-0.5, -0.10000002, 0.19999999), (-0.5, -0.10000002, 0.29999998), (-0.5, -0.10000002, 0.39999998), (-0.5, -1.4901161e-8, -0.4), (-0.5, -1.4901161e-8, -0.3), (-0.5, -1.4901161e-8, -0.20000002), (-0.5, -1.4901161e-8, -0.10000002), (-0.5, -1.4901161e-8, -1.4901161e-8), (-0.5, -1.4901161e-8, 0.09999999), (-0.5, -1.4901161e-8, 0.19999999), (-0.5, -1.4901161e-8, 0.29999998), (-0.5, -1.4901161e-8, 0.39999998), (-0.5, 0.09999999, -0.4), (-0.5, 0.09999999, -0.3), (-0.5, 0.09999999, -0.20000002), (-0.5, 0.09999999, -0.10000002), (-0.5, 0.09999999, -1.4901161e-8), (-0.5, 0.09999999, 0.09999999), (-0.5, 0.09999999, 0.19999999), (-0.5, 0.09999999, 0.29999998), (-0.5, 0.09999999, 0.39999998), (-0.5, 0.19999999, -0.4), (-0.5, 0.19999999, -0.3), (-0.5, 0.19999999, -0.20000002), (-0.5, 0.19999999, -0.10000002), (-0.5, 0.19999999, -1.4901161e-8), (-0.5, 0.19999999, 0.09999999), (-0.5, 0.19999999, 0.19999999), (-0.5, 0.19999999, 0.29999998), (-0.5, 0.19999999, 0.39999998), (-0.5, 0.29999998, -0.4), (-0.5, 0.29999998, -0.3), (-0.5, 0.29999998, -0.20000002), (-0.5, 0.29999998, -0.10000002), (-0.5, 0.29999998, -1.4901161e-8), (-0.5, 0.29999998, 0.09999999), (-0.5, 0.29999998, 0.19999999), (-0.5, 0.29999998, 0.29999998), (-0.5, 0.29999998, 0.39999998), (-0.5, 0.39999998, -0.4), (-0.5, 0.39999998, -0.3), (-0.5, 0.39999998, -0.20000002), (-0.5, 0.39999998, -0.10000002), (-0.5, 0.39999998, -1.4901161e-8), (-0.5, 0.39999998, 0.09999999), (-0.5, 0.39999998, 0.19999999), (-0.5, 0.39999998, 0.29999998), (-0.5, 0.39999998, 0.39999998)] - color3f[] primvars:displayColor = [(0.13320851, 0.13320851, 0.13320851)] ( - customData = { - dictionary Maya = { - bool generated = 1 - } - } - ) - texCoord2f[] primvars:st = [(0.375, 0), (0.4, 0), (0.425, 0), (0.45000002, 0), (0.47500002, 0), (0.5, 0), (0.525, 0), (0.54999995, 0), (0.5749999, 0), (0.5999999, 0), (0.6249999, 0), (0.375, 0.025), (0.4, 0.025), (0.425, 0.025), (0.45000002, 0.025), (0.47500002, 0.025), (0.5, 0.025), (0.525, 0.025), (0.54999995, 0.025), (0.5749999, 0.025), (0.5999999, 0.025), (0.6249999, 0.025), (0.375, 0.05), (0.4, 0.05), (0.425, 0.05), (0.45000002, 0.05), (0.47500002, 0.05), (0.5, 0.05), (0.525, 0.05), (0.54999995, 0.05), (0.5749999, 0.05), (0.5999999, 0.05), (0.6249999, 0.05), (0.375, 0.075), (0.4, 0.075), (0.425, 0.075), (0.45000002, 0.075), (0.47500002, 0.075), (0.5, 0.075), (0.525, 0.075), (0.54999995, 0.075), (0.5749999, 0.075), (0.5999999, 0.075), (0.6249999, 0.075), (0.375, 0.1), (0.4, 0.1), (0.425, 0.1), (0.45000002, 0.1), (0.47500002, 0.1), (0.5, 0.1), (0.525, 0.1), (0.54999995, 0.1), (0.5749999, 0.1), (0.5999999, 0.1), (0.6249999, 0.1), (0.375, 0.125), (0.4, 0.125), (0.425, 0.125), (0.45000002, 0.125), (0.47500002, 0.125), (0.5, 0.125), (0.525, 0.125), (0.54999995, 0.125), (0.5749999, 0.125), (0.5999999, 0.125), (0.6249999, 0.125), (0.375, 0.15), (0.4, 0.15), (0.425, 0.15), (0.45000002, 0.15), (0.47500002, 0.15), (0.5, 0.15), (0.525, 0.15), (0.54999995, 0.15), (0.5749999, 0.15), (0.5999999, 0.15), (0.6249999, 0.15), (0.375, 0.17500001), (0.4, 0.17500001), (0.425, 0.17500001), (0.45000002, 0.17500001), (0.47500002, 0.17500001), (0.5, 0.17500001), (0.525, 0.17500001), (0.54999995, 0.17500001), (0.5749999, 0.17500001), (0.5999999, 0.17500001), (0.6249999, 0.17500001), (0.375, 0.20000002), (0.4, 0.20000002), (0.425, 0.20000002), (0.45000002, 0.20000002), (0.47500002, 0.20000002), (0.5, 0.20000002), (0.525, 0.20000002), (0.54999995, 0.20000002), (0.5749999, 0.20000002), (0.5999999, 0.20000002), (0.6249999, 0.20000002), (0.375, 0.22500002), (0.4, 0.22500002), (0.425, 0.22500002), (0.45000002, 0.22500002), (0.47500002, 0.22500002), (0.5, 0.22500002), (0.525, 0.22500002), (0.54999995, 0.22500002), (0.5749999, 0.22500002), (0.5999999, 0.22500002), (0.6249999, 0.22500002), (0.375, 0.25000003), (0.4, 0.25000003), (0.425, 0.25000003), (0.45000002, 0.25000003), (0.47500002, 0.25000003), (0.5, 0.25000003), (0.525, 0.25000003), (0.54999995, 0.25000003), (0.5749999, 0.25000003), (0.5999999, 0.25000003), (0.6249999, 0.25000003), (0.375, 0.27500004), (0.4, 0.27500004), (0.425, 0.27500004), (0.45000002, 0.27500004), (0.47500002, 0.27500004), (0.5, 0.27500004), (0.525, 0.27500004), (0.54999995, 0.27500004), (0.5749999, 0.27500004), (0.5999999, 0.27500004), (0.6249999, 0.27500004), (0.375, 0.30000004), (0.4, 0.30000004), (0.425, 0.30000004), (0.45000002, 0.30000004), (0.47500002, 0.30000004), (0.5, 0.30000004), (0.525, 0.30000004), (0.54999995, 0.30000004), (0.5749999, 0.30000004), (0.5999999, 0.30000004), (0.6249999, 0.30000004), (0.375, 0.32500005), (0.4, 0.32500005), (0.425, 0.32500005), (0.45000002, 0.32500005), (0.47500002, 0.32500005), (0.5, 0.32500005), (0.525, 0.32500005), (0.54999995, 0.32500005), (0.5749999, 0.32500005), (0.5999999, 0.32500005), (0.6249999, 0.32500005), (0.375, 0.35000005), (0.4, 0.35000005), (0.425, 0.35000005), (0.45000002, 0.35000005), (0.47500002, 0.35000005), (0.5, 0.35000005), (0.525, 0.35000005), (0.54999995, 0.35000005), (0.5749999, 0.35000005), (0.5999999, 0.35000005), (0.6249999, 0.35000005), (0.375, 0.37500006), (0.4, 0.37500006), (0.425, 0.37500006), (0.45000002, 0.37500006), (0.47500002, 0.37500006), (0.5, 0.37500006), (0.525, 0.37500006), (0.54999995, 0.37500006), (0.5749999, 0.37500006), (0.5999999, 0.37500006), (0.6249999, 0.37500006), (0.375, 0.40000007), (0.4, 0.40000007), (0.425, 0.40000007), (0.45000002, 0.40000007), (0.47500002, 0.40000007), (0.5, 0.40000007), (0.525, 0.40000007), (0.54999995, 0.40000007), (0.5749999, 0.40000007), (0.5999999, 0.40000007), (0.6249999, 0.40000007), (0.375, 0.42500007), (0.4, 0.42500007), (0.425, 0.42500007), (0.45000002, 0.42500007), (0.47500002, 0.42500007), (0.5, 0.42500007), (0.525, 0.42500007), (0.54999995, 0.42500007), (0.5749999, 0.42500007), (0.5999999, 0.42500007), (0.6249999, 0.42500007), (0.375, 0.45000008), (0.4, 0.45000008), (0.425, 0.45000008), (0.45000002, 0.45000008), (0.47500002, 0.45000008), (0.5, 0.45000008), (0.525, 0.45000008), (0.54999995, 0.45000008), (0.5749999, 0.45000008), (0.5999999, 0.45000008), (0.6249999, 0.45000008), (0.375, 0.47500008), (0.4, 0.47500008), (0.425, 0.47500008), (0.45000002, 0.47500008), (0.47500002, 0.47500008), (0.5, 0.47500008), (0.525, 0.47500008), (0.54999995, 0.47500008), (0.5749999, 0.47500008), (0.5999999, 0.47500008), (0.6249999, 0.47500008), (0.375, 0.50000006), (0.4, 0.50000006), (0.425, 0.50000006), (0.45000002, 0.50000006), (0.47500002, 0.50000006), (0.5, 0.50000006), (0.525, 0.50000006), (0.54999995, 0.50000006), (0.5749999, 0.50000006), (0.5999999, 0.50000006), (0.6249999, 0.50000006), (0.375, 0.52500004), (0.4, 0.52500004), (0.425, 0.52500004), (0.45000002, 0.52500004), (0.47500002, 0.52500004), (0.5, 0.52500004), (0.525, 0.52500004), (0.54999995, 0.52500004), (0.5749999, 0.52500004), (0.5999999, 0.52500004), (0.6249999, 0.52500004), (0.375, 0.55), (0.4, 0.55), (0.425, 0.55), (0.45000002, 0.55), (0.47500002, 0.55), (0.5, 0.55), (0.525, 0.55), (0.54999995, 0.55), (0.5749999, 0.55), (0.5999999, 0.55), (0.6249999, 0.55), (0.375, 0.575), (0.4, 0.575), (0.425, 0.575), (0.45000002, 0.575), (0.47500002, 0.575), (0.5, 0.575), (0.525, 0.575), (0.54999995, 0.575), (0.5749999, 0.575), (0.5999999, 0.575), (0.6249999, 0.575), (0.375, 0.59999996), (0.4, 0.59999996), (0.425, 0.59999996), (0.45000002, 0.59999996), (0.47500002, 0.59999996), (0.5, 0.59999996), (0.525, 0.59999996), (0.54999995, 0.59999996), (0.5749999, 0.59999996), (0.5999999, 0.59999996), (0.6249999, 0.59999996), (0.375, 0.62499994), (0.4, 0.62499994), (0.425, 0.62499994), (0.45000002, 0.62499994), (0.47500002, 0.62499994), (0.5, 0.62499994), (0.525, 0.62499994), (0.54999995, 0.62499994), (0.5749999, 0.62499994), (0.5999999, 0.62499994), (0.6249999, 0.62499994), (0.375, 0.6499999), (0.4, 0.6499999), (0.425, 0.6499999), (0.45000002, 0.6499999), (0.47500002, 0.6499999), (0.5, 0.6499999), (0.525, 0.6499999), (0.54999995, 0.6499999), (0.5749999, 0.6499999), (0.5999999, 0.6499999), (0.6249999, 0.6499999), (0.375, 0.6749999), (0.4, 0.6749999), (0.425, 0.6749999), (0.45000002, 0.6749999), (0.47500002, 0.6749999), (0.5, 0.6749999), (0.525, 0.6749999), (0.54999995, 0.6749999), (0.5749999, 0.6749999), (0.5999999, 0.6749999), (0.6249999, 0.6749999), (0.375, 0.69999987), (0.4, 0.69999987), (0.425, 0.69999987), (0.45000002, 0.69999987), (0.47500002, 0.69999987), (0.5, 0.69999987), (0.525, 0.69999987), (0.54999995, 0.69999987), (0.5749999, 0.69999987), (0.5999999, 0.69999987), (0.6249999, 0.69999987), (0.375, 0.72499985), (0.4, 0.72499985), (0.425, 0.72499985), (0.45000002, 0.72499985), (0.47500002, 0.72499985), (0.5, 0.72499985), (0.525, 0.72499985), (0.54999995, 0.72499985), (0.5749999, 0.72499985), (0.5999999, 0.72499985), (0.6249999, 0.72499985), (0.375, 0.7499998), (0.4, 0.7499998), (0.425, 0.7499998), (0.45000002, 0.7499998), (0.47500002, 0.7499998), (0.5, 0.7499998), (0.525, 0.7499998), (0.54999995, 0.7499998), (0.5749999, 0.7499998), (0.5999999, 0.7499998), (0.6249999, 0.7499998), (0.375, 0.7749998), (0.4, 0.7749998), (0.425, 0.7749998), (0.45000002, 0.7749998), (0.47500002, 0.7749998), (0.5, 0.7749998), (0.525, 0.7749998), (0.54999995, 0.7749998), (0.5749999, 0.7749998), (0.5999999, 0.7749998), (0.6249999, 0.7749998), (0.375, 0.7999998), (0.4, 0.7999998), (0.425, 0.7999998), (0.45000002, 0.7999998), (0.47500002, 0.7999998), (0.5, 0.7999998), (0.525, 0.7999998), (0.54999995, 0.7999998), (0.5749999, 0.7999998), (0.5999999, 0.7999998), (0.6249999, 0.7999998), (0.375, 0.82499975), (0.4, 0.82499975), (0.425, 0.82499975), (0.45000002, 0.82499975), (0.47500002, 0.82499975), (0.5, 0.82499975), (0.525, 0.82499975), (0.54999995, 0.82499975), (0.5749999, 0.82499975), (0.5999999, 0.82499975), (0.6249999, 0.82499975), (0.375, 0.8499997), (0.4, 0.8499997), (0.425, 0.8499997), (0.45000002, 0.8499997), (0.47500002, 0.8499997), (0.5, 0.8499997), (0.525, 0.8499997), (0.54999995, 0.8499997), (0.5749999, 0.8499997), (0.5999999, 0.8499997), (0.6249999, 0.8499997), (0.375, 0.8749997), (0.4, 0.8749997), (0.425, 0.8749997), (0.45000002, 0.8749997), (0.47500002, 0.8749997), (0.5, 0.8749997), (0.525, 0.8749997), (0.54999995, 0.8749997), (0.5749999, 0.8749997), (0.5999999, 0.8749997), (0.6249999, 0.8749997), (0.375, 0.8999997), (0.4, 0.8999997), (0.425, 0.8999997), (0.45000002, 0.8999997), (0.47500002, 0.8999997), (0.5, 0.8999997), (0.525, 0.8999997), (0.54999995, 0.8999997), (0.5749999, 0.8999997), (0.5999999, 0.8999997), (0.6249999, 0.8999997), (0.375, 0.92499965), (0.4, 0.92499965), (0.425, 0.92499965), (0.45000002, 0.92499965), (0.47500002, 0.92499965), (0.5, 0.92499965), (0.525, 0.92499965), (0.54999995, 0.92499965), (0.5749999, 0.92499965), (0.5999999, 0.92499965), (0.6249999, 0.92499965), (0.375, 0.94999963), (0.4, 0.94999963), (0.425, 0.94999963), (0.45000002, 0.94999963), (0.47500002, 0.94999963), (0.5, 0.94999963), (0.525, 0.94999963), (0.54999995, 0.94999963), (0.5749999, 0.94999963), (0.5999999, 0.94999963), (0.6249999, 0.94999963), (0.375, 0.9749996), (0.4, 0.9749996), (0.425, 0.9749996), (0.45000002, 0.9749996), (0.47500002, 0.9749996), (0.5, 0.9749996), (0.525, 0.9749996), (0.54999995, 0.9749996), (0.5749999, 0.9749996), (0.5999999, 0.9749996), (0.6249999, 0.9749996), (0.375, 0.9999996), (0.4, 0.9999996), (0.425, 0.9999996), (0.45000002, 0.9999996), (0.47500002, 0.9999996), (0.5, 0.9999996), (0.525, 0.9999996), (0.54999995, 0.9999996), (0.5749999, 0.9999996), (0.5999999, 0.9999996), (0.6249999, 0.9999996), (0.875, 0), (0.85, 0), (0.82500005, 0), (0.8000001, 0), (0.7750001, 0), (0.7500001, 0), (0.72500014, 0), (0.70000017, 0), (0.6750002, 0), (0.6500002, 0), (0.875, 0.025), (0.85, 0.025), (0.82500005, 0.025), (0.8000001, 0.025), (0.7750001, 0.025), (0.7500001, 0.025), (0.72500014, 0.025), (0.70000017, 0.025), (0.6750002, 0.025), (0.6500002, 0.025), (0.875, 0.05), (0.85, 0.05), (0.82500005, 0.05), (0.8000001, 0.05), (0.7750001, 0.05), (0.7500001, 0.05), (0.72500014, 0.05), (0.70000017, 0.05), (0.6750002, 0.05), (0.6500002, 0.05), (0.875, 0.075), (0.85, 0.075), (0.82500005, 0.075), (0.8000001, 0.075), (0.7750001, 0.075), (0.7500001, 0.075), (0.72500014, 0.075), (0.70000017, 0.075), (0.6750002, 0.075), (0.6500002, 0.075), (0.875, 0.1), (0.85, 0.1), (0.82500005, 0.1), (0.8000001, 0.1), (0.7750001, 0.1), (0.7500001, 0.1), (0.72500014, 0.1), (0.70000017, 0.1), (0.6750002, 0.1), (0.6500002, 0.1), (0.875, 0.125), (0.85, 0.125), (0.82500005, 0.125), (0.8000001, 0.125), (0.7750001, 0.125), (0.7500001, 0.125), (0.72500014, 0.125), (0.70000017, 0.125), (0.6750002, 0.125), (0.6500002, 0.125), (0.875, 0.15), (0.85, 0.15), (0.82500005, 0.15), (0.8000001, 0.15), (0.7750001, 0.15), (0.7500001, 0.15), (0.72500014, 0.15), (0.70000017, 0.15), (0.6750002, 0.15), (0.6500002, 0.15), (0.875, 0.17500001), (0.85, 0.17500001), (0.82500005, 0.17500001), (0.8000001, 0.17500001), (0.7750001, 0.17500001), (0.7500001, 0.17500001), (0.72500014, 0.17500001), (0.70000017, 0.17500001), (0.6750002, 0.17500001), (0.6500002, 0.17500001), (0.875, 0.20000002), (0.85, 0.20000002), (0.82500005, 0.20000002), (0.8000001, 0.20000002), (0.7750001, 0.20000002), (0.7500001, 0.20000002), (0.72500014, 0.20000002), (0.70000017, 0.20000002), (0.6750002, 0.20000002), (0.6500002, 0.20000002), (0.875, 0.22500002), (0.85, 0.22500002), (0.82500005, 0.22500002), (0.8000001, 0.22500002), (0.7750001, 0.22500002), (0.7500001, 0.22500002), (0.72500014, 0.22500002), (0.70000017, 0.22500002), (0.6750002, 0.22500002), (0.6500002, 0.22500002), (0.875, 0.25000003), (0.85, 0.25000003), (0.82500005, 0.25000003), (0.8000001, 0.25000003), (0.7750001, 0.25000003), (0.7500001, 0.25000003), (0.72500014, 0.25000003), (0.70000017, 0.25000003), (0.6750002, 0.25000003), (0.6500002, 0.25000003), (0.125, 0), (0.15, 0), (0.17500001, 0), (0.20000002, 0), (0.22500002, 0), (0.25000003, 0), (0.27500004, 0), (0.30000004, 0), (0.32500005, 0), (0.35000005, 0), (0.125, 0.025), (0.15, 0.025), (0.17500001, 0.025), (0.20000002, 0.025), (0.22500002, 0.025), (0.25000003, 0.025), (0.27500004, 0.025), (0.30000004, 0.025), (0.32500005, 0.025), (0.35000005, 0.025), (0.125, 0.05), (0.15, 0.05), (0.17500001, 0.05), (0.20000002, 0.05), (0.22500002, 0.05), (0.25000003, 0.05), (0.27500004, 0.05), (0.30000004, 0.05), (0.32500005, 0.05), (0.35000005, 0.05), (0.125, 0.075), (0.15, 0.075), (0.17500001, 0.075), (0.20000002, 0.075), (0.22500002, 0.075), (0.25000003, 0.075), (0.27500004, 0.075), (0.30000004, 0.075), (0.32500005, 0.075), (0.35000005, 0.075), (0.125, 0.1), (0.15, 0.1), (0.17500001, 0.1), (0.20000002, 0.1), (0.22500002, 0.1), (0.25000003, 0.1), (0.27500004, 0.1), (0.30000004, 0.1), (0.32500005, 0.1), (0.35000005, 0.1), (0.125, 0.125), (0.15, 0.125), (0.17500001, 0.125), (0.20000002, 0.125), (0.22500002, 0.125), (0.25000003, 0.125), (0.27500004, 0.125), (0.30000004, 0.125), (0.32500005, 0.125), (0.35000005, 0.125), (0.125, 0.15), (0.15, 0.15), (0.17500001, 0.15), (0.20000002, 0.15), (0.22500002, 0.15), (0.25000003, 0.15), (0.27500004, 0.15), (0.30000004, 0.15), (0.32500005, 0.15), (0.35000005, 0.15), (0.125, 0.17500001), (0.15, 0.17500001), (0.17500001, 0.17500001), (0.20000002, 0.17500001), (0.22500002, 0.17500001), (0.25000003, 0.17500001), (0.27500004, 0.17500001), (0.30000004, 0.17500001), (0.32500005, 0.17500001), (0.35000005, 0.17500001), (0.125, 0.20000002), (0.15, 0.20000002), (0.17500001, 0.20000002), (0.20000002, 0.20000002), (0.22500002, 0.20000002), (0.25000003, 0.20000002), (0.27500004, 0.20000002), (0.30000004, 0.20000002), (0.32500005, 0.20000002), (0.35000005, 0.20000002), (0.125, 0.22500002), (0.15, 0.22500002), (0.17500001, 0.22500002), (0.20000002, 0.22500002), (0.22500002, 0.22500002), (0.25000003, 0.22500002), (0.27500004, 0.22500002), (0.30000004, 0.22500002), (0.32500005, 0.22500002), (0.35000005, 0.22500002), (0.125, 0.25000003), (0.15, 0.25000003), (0.17500001, 0.25000003), (0.20000002, 0.25000003), (0.22500002, 0.25000003), (0.25000003, 0.25000003), (0.27500004, 0.25000003), (0.30000004, 0.25000003), (0.32500005, 0.25000003), (0.35000005, 0.25000003)] ( - customData = { - dictionary Maya = { - token name = "map1" - } - } - interpolation = "faceVarying" - ) - int[] primvars:st:indices = [0, 1, 12, 11, 1, 2, 13, 12, 2, 3, 14, 13, 3, 4, 15, 14, 4, 5, 16, 15, 5, 6, 17, 16, 6, 7, 18, 17, 7, 8, 19, 18, 8, 9, 20, 19, 9, 10, 21, 20, 11, 12, 23, 22, 12, 13, 24, 23, 13, 14, 25, 24, 14, 15, 26, 25, 15, 16, 27, 26, 16, 17, 28, 27, 17, 18, 29, 28, 18, 19, 30, 29, 19, 20, 31, 30, 20, 21, 32, 31, 22, 23, 34, 33, 23, 24, 35, 34, 24, 25, 36, 35, 25, 26, 37, 36, 26, 27, 38, 37, 27, 28, 39, 38, 28, 29, 40, 39, 29, 30, 41, 40, 30, 31, 42, 41, 31, 32, 43, 42, 33, 34, 45, 44, 34, 35, 46, 45, 35, 36, 47, 46, 36, 37, 48, 47, 37, 38, 49, 48, 38, 39, 50, 49, 39, 40, 51, 50, 40, 41, 52, 51, 41, 42, 53, 52, 42, 43, 54, 53, 44, 45, 56, 55, 45, 46, 57, 56, 46, 47, 58, 57, 47, 48, 59, 58, 48, 49, 60, 59, 49, 50, 61, 60, 50, 51, 62, 61, 51, 52, 63, 62, 52, 53, 64, 63, 53, 54, 65, 64, 55, 56, 67, 66, 56, 57, 68, 67, 57, 58, 69, 68, 58, 59, 70, 69, 59, 60, 71, 70, 60, 61, 72, 71, 61, 62, 73, 72, 62, 63, 74, 73, 63, 64, 75, 74, 64, 65, 76, 75, 66, 67, 78, 77, 67, 68, 79, 78, 68, 69, 80, 79, 69, 70, 81, 80, 70, 71, 82, 81, 71, 72, 83, 82, 72, 73, 84, 83, 73, 74, 85, 84, 74, 75, 86, 85, 75, 76, 87, 86, 77, 78, 89, 88, 78, 79, 90, 89, 79, 80, 91, 90, 80, 81, 92, 91, 81, 82, 93, 92, 82, 83, 94, 93, 83, 84, 95, 94, 84, 85, 96, 95, 85, 86, 97, 96, 86, 87, 98, 97, 88, 89, 100, 99, 89, 90, 101, 100, 90, 91, 102, 101, 91, 92, 103, 102, 92, 93, 104, 103, 93, 94, 105, 104, 94, 95, 106, 105, 95, 96, 107, 106, 96, 97, 108, 107, 97, 98, 109, 108, 99, 100, 111, 110, 100, 101, 112, 111, 101, 102, 113, 112, 102, 103, 114, 113, 103, 104, 115, 114, 104, 105, 116, 115, 105, 106, 117, 116, 106, 107, 118, 117, 107, 108, 119, 118, 108, 109, 120, 119, 110, 111, 122, 121, 111, 112, 123, 122, 112, 113, 124, 123, 113, 114, 125, 124, 114, 115, 126, 125, 115, 116, 127, 126, 116, 117, 128, 127, 117, 118, 129, 128, 118, 119, 130, 129, 119, 120, 131, 130, 121, 122, 133, 132, 122, 123, 134, 133, 123, 124, 135, 134, 124, 125, 136, 135, 125, 126, 137, 136, 126, 127, 138, 137, 127, 128, 139, 138, 128, 129, 140, 139, 129, 130, 141, 140, 130, 131, 142, 141, 132, 133, 144, 143, 133, 134, 145, 144, 134, 135, 146, 145, 135, 136, 147, 146, 136, 137, 148, 147, 137, 138, 149, 148, 138, 139, 150, 149, 139, 140, 151, 150, 140, 141, 152, 151, 141, 142, 153, 152, 143, 144, 155, 154, 144, 145, 156, 155, 145, 146, 157, 156, 146, 147, 158, 157, 147, 148, 159, 158, 148, 149, 160, 159, 149, 150, 161, 160, 150, 151, 162, 161, 151, 152, 163, 162, 152, 153, 164, 163, 154, 155, 166, 165, 155, 156, 167, 166, 156, 157, 168, 167, 157, 158, 169, 168, 158, 159, 170, 169, 159, 160, 171, 170, 160, 161, 172, 171, 161, 162, 173, 172, 162, 163, 174, 173, 163, 164, 175, 174, 165, 166, 177, 176, 166, 167, 178, 177, 167, 168, 179, 178, 168, 169, 180, 179, 169, 170, 181, 180, 170, 171, 182, 181, 171, 172, 183, 182, 172, 173, 184, 183, 173, 174, 185, 184, 174, 175, 186, 185, 176, 177, 188, 187, 177, 178, 189, 188, 178, 179, 190, 189, 179, 180, 191, 190, 180, 181, 192, 191, 181, 182, 193, 192, 182, 183, 194, 193, 183, 184, 195, 194, 184, 185, 196, 195, 185, 186, 197, 196, 187, 188, 199, 198, 188, 189, 200, 199, 189, 190, 201, 200, 190, 191, 202, 201, 191, 192, 203, 202, 192, 193, 204, 203, 193, 194, 205, 204, 194, 195, 206, 205, 195, 196, 207, 206, 196, 197, 208, 207, 198, 199, 210, 209, 199, 200, 211, 210, 200, 201, 212, 211, 201, 202, 213, 212, 202, 203, 214, 213, 203, 204, 215, 214, 204, 205, 216, 215, 205, 206, 217, 216, 206, 207, 218, 217, 207, 208, 219, 218, 209, 210, 221, 220, 210, 211, 222, 221, 211, 212, 223, 222, 212, 213, 224, 223, 213, 214, 225, 224, 214, 215, 226, 225, 215, 216, 227, 226, 216, 217, 228, 227, 217, 218, 229, 228, 218, 219, 230, 229, 220, 221, 232, 231, 221, 222, 233, 232, 222, 223, 234, 233, 223, 224, 235, 234, 224, 225, 236, 235, 225, 226, 237, 236, 226, 227, 238, 237, 227, 228, 239, 238, 228, 229, 240, 239, 229, 230, 241, 240, 231, 232, 243, 242, 232, 233, 244, 243, 233, 234, 245, 244, 234, 235, 246, 245, 235, 236, 247, 246, 236, 237, 248, 247, 237, 238, 249, 248, 238, 239, 250, 249, 239, 240, 251, 250, 240, 241, 252, 251, 242, 243, 254, 253, 243, 244, 255, 254, 244, 245, 256, 255, 245, 246, 257, 256, 246, 247, 258, 257, 247, 248, 259, 258, 248, 249, 260, 259, 249, 250, 261, 260, 250, 251, 262, 261, 251, 252, 263, 262, 253, 254, 265, 264, 254, 255, 266, 265, 255, 256, 267, 266, 256, 257, 268, 267, 257, 258, 269, 268, 258, 259, 270, 269, 259, 260, 271, 270, 260, 261, 272, 271, 261, 262, 273, 272, 262, 263, 274, 273, 264, 265, 276, 275, 265, 266, 277, 276, 266, 267, 278, 277, 267, 268, 279, 278, 268, 269, 280, 279, 269, 270, 281, 280, 270, 271, 282, 281, 271, 272, 283, 282, 272, 273, 284, 283, 273, 274, 285, 284, 275, 276, 287, 286, 276, 277, 288, 287, 277, 278, 289, 288, 278, 279, 290, 289, 279, 280, 291, 290, 280, 281, 292, 291, 281, 282, 293, 292, 282, 283, 294, 293, 283, 284, 295, 294, 284, 285, 296, 295, 286, 287, 298, 297, 287, 288, 299, 298, 288, 289, 300, 299, 289, 290, 301, 300, 290, 291, 302, 301, 291, 292, 303, 302, 292, 293, 304, 303, 293, 294, 305, 304, 294, 295, 306, 305, 295, 296, 307, 306, 297, 298, 309, 308, 298, 299, 310, 309, 299, 300, 311, 310, 300, 301, 312, 311, 301, 302, 313, 312, 302, 303, 314, 313, 303, 304, 315, 314, 304, 305, 316, 315, 305, 306, 317, 316, 306, 307, 318, 317, 308, 309, 320, 319, 309, 310, 321, 320, 310, 311, 322, 321, 311, 312, 323, 322, 312, 313, 324, 323, 313, 314, 325, 324, 314, 315, 326, 325, 315, 316, 327, 326, 316, 317, 328, 327, 317, 318, 329, 328, 319, 320, 331, 330, 320, 321, 332, 331, 321, 322, 333, 332, 322, 323, 334, 333, 323, 324, 335, 334, 324, 325, 336, 335, 325, 326, 337, 336, 326, 327, 338, 337, 327, 328, 339, 338, 328, 329, 340, 339, 330, 331, 342, 341, 331, 332, 343, 342, 332, 333, 344, 343, 333, 334, 345, 344, 334, 335, 346, 345, 335, 336, 347, 346, 336, 337, 348, 347, 337, 338, 349, 348, 338, 339, 350, 349, 339, 340, 351, 350, 341, 342, 353, 352, 342, 343, 354, 353, 343, 344, 355, 354, 344, 345, 356, 355, 345, 346, 357, 356, 346, 347, 358, 357, 347, 348, 359, 358, 348, 349, 360, 359, 349, 350, 361, 360, 350, 351, 362, 361, 352, 353, 364, 363, 353, 354, 365, 364, 354, 355, 366, 365, 355, 356, 367, 366, 356, 357, 368, 367, 357, 358, 369, 368, 358, 359, 370, 369, 359, 360, 371, 370, 360, 361, 372, 371, 361, 362, 373, 372, 363, 364, 375, 374, 364, 365, 376, 375, 365, 366, 377, 376, 366, 367, 378, 377, 367, 368, 379, 378, 368, 369, 380, 379, 369, 370, 381, 380, 370, 371, 382, 381, 371, 372, 383, 382, 372, 373, 384, 383, 374, 375, 386, 385, 375, 376, 387, 386, 376, 377, 388, 387, 377, 378, 389, 388, 378, 379, 390, 389, 379, 380, 391, 390, 380, 381, 392, 391, 381, 382, 393, 392, 382, 383, 394, 393, 383, 384, 395, 394, 385, 386, 397, 396, 386, 387, 398, 397, 387, 388, 399, 398, 388, 389, 400, 399, 389, 390, 401, 400, 390, 391, 402, 401, 391, 392, 403, 402, 392, 393, 404, 403, 393, 394, 405, 404, 394, 395, 406, 405, 396, 397, 408, 407, 397, 398, 409, 408, 398, 399, 410, 409, 399, 400, 411, 410, 400, 401, 412, 411, 401, 402, 413, 412, 402, 403, 414, 413, 403, 404, 415, 414, 404, 405, 416, 415, 405, 406, 417, 416, 407, 408, 419, 418, 408, 409, 420, 419, 409, 410, 421, 420, 410, 411, 422, 421, 411, 412, 423, 422, 412, 413, 424, 423, 413, 414, 425, 424, 414, 415, 426, 425, 415, 416, 427, 426, 416, 417, 428, 427, 418, 419, 430, 429, 419, 420, 431, 430, 420, 421, 432, 431, 421, 422, 433, 432, 422, 423, 434, 433, 423, 424, 435, 434, 424, 425, 436, 435, 425, 426, 437, 436, 426, 427, 438, 437, 427, 428, 439, 438, 429, 430, 441, 440, 430, 431, 442, 441, 431, 432, 443, 442, 432, 433, 444, 443, 433, 434, 445, 444, 434, 435, 446, 445, 435, 436, 447, 446, 436, 437, 448, 447, 437, 438, 449, 448, 438, 439, 450, 449, 452, 451, 461, 462, 453, 452, 462, 463, 454, 453, 463, 464, 455, 454, 464, 465, 456, 455, 465, 466, 457, 456, 466, 467, 458, 457, 467, 468, 459, 458, 468, 469, 460, 459, 469, 470, 10, 460, 470, 21, 462, 461, 471, 472, 463, 462, 472, 473, 464, 463, 473, 474, 465, 464, 474, 475, 466, 465, 475, 476, 467, 466, 476, 477, 468, 467, 477, 478, 469, 468, 478, 479, 470, 469, 479, 480, 21, 470, 480, 32, 472, 471, 481, 482, 473, 472, 482, 483, 474, 473, 483, 484, 475, 474, 484, 485, 476, 475, 485, 486, 477, 476, 486, 487, 478, 477, 487, 488, 479, 478, 488, 489, 480, 479, 489, 490, 32, 480, 490, 43, 482, 481, 491, 492, 483, 482, 492, 493, 484, 483, 493, 494, 485, 484, 494, 495, 486, 485, 495, 496, 487, 486, 496, 497, 488, 487, 497, 498, 489, 488, 498, 499, 490, 489, 499, 500, 43, 490, 500, 54, 492, 491, 501, 502, 493, 492, 502, 503, 494, 493, 503, 504, 495, 494, 504, 505, 496, 495, 505, 506, 497, 496, 506, 507, 498, 497, 507, 508, 499, 498, 508, 509, 500, 499, 509, 510, 54, 500, 510, 65, 502, 501, 511, 512, 503, 502, 512, 513, 504, 503, 513, 514, 505, 504, 514, 515, 506, 505, 515, 516, 507, 506, 516, 517, 508, 507, 517, 518, 509, 508, 518, 519, 510, 509, 519, 520, 65, 510, 520, 76, 512, 511, 521, 522, 513, 512, 522, 523, 514, 513, 523, 524, 515, 514, 524, 525, 516, 515, 525, 526, 517, 516, 526, 527, 518, 517, 527, 528, 519, 518, 528, 529, 520, 519, 529, 530, 76, 520, 530, 87, 522, 521, 531, 532, 523, 522, 532, 533, 524, 523, 533, 534, 525, 524, 534, 535, 526, 525, 535, 536, 527, 526, 536, 537, 528, 527, 537, 538, 529, 528, 538, 539, 530, 529, 539, 540, 87, 530, 540, 98, 532, 531, 541, 542, 533, 532, 542, 543, 534, 533, 543, 544, 535, 534, 544, 545, 536, 535, 545, 546, 537, 536, 546, 547, 538, 537, 547, 548, 539, 538, 548, 549, 540, 539, 549, 550, 98, 540, 550, 109, 542, 541, 551, 552, 543, 542, 552, 553, 544, 543, 553, 554, 545, 544, 554, 555, 546, 545, 555, 556, 547, 546, 556, 557, 548, 547, 557, 558, 549, 548, 558, 559, 550, 549, 559, 560, 109, 550, 560, 120, 561, 562, 572, 571, 562, 563, 573, 572, 563, 564, 574, 573, 564, 565, 575, 574, 565, 566, 576, 575, 566, 567, 577, 576, 567, 568, 578, 577, 568, 569, 579, 578, 569, 570, 580, 579, 570, 0, 11, 580, 571, 572, 582, 581, 572, 573, 583, 582, 573, 574, 584, 583, 574, 575, 585, 584, 575, 576, 586, 585, 576, 577, 587, 586, 577, 578, 588, 587, 578, 579, 589, 588, 579, 580, 590, 589, 580, 11, 22, 590, 581, 582, 592, 591, 582, 583, 593, 592, 583, 584, 594, 593, 584, 585, 595, 594, 585, 586, 596, 595, 586, 587, 597, 596, 587, 588, 598, 597, 588, 589, 599, 598, 589, 590, 600, 599, 590, 22, 33, 600, 591, 592, 602, 601, 592, 593, 603, 602, 593, 594, 604, 603, 594, 595, 605, 604, 595, 596, 606, 605, 596, 597, 607, 606, 597, 598, 608, 607, 598, 599, 609, 608, 599, 600, 610, 609, 600, 33, 44, 610, 601, 602, 612, 611, 602, 603, 613, 612, 603, 604, 614, 613, 604, 605, 615, 614, 605, 606, 616, 615, 606, 607, 617, 616, 607, 608, 618, 617, 608, 609, 619, 618, 609, 610, 620, 619, 610, 44, 55, 620, 611, 612, 622, 621, 612, 613, 623, 622, 613, 614, 624, 623, 614, 615, 625, 624, 615, 616, 626, 625, 616, 617, 627, 626, 617, 618, 628, 627, 618, 619, 629, 628, 619, 620, 630, 629, 620, 55, 66, 630, 621, 622, 632, 631, 622, 623, 633, 632, 623, 624, 634, 633, 624, 625, 635, 634, 625, 626, 636, 635, 626, 627, 637, 636, 627, 628, 638, 637, 628, 629, 639, 638, 629, 630, 640, 639, 630, 66, 77, 640, 631, 632, 642, 641, 632, 633, 643, 642, 633, 634, 644, 643, 634, 635, 645, 644, 635, 636, 646, 645, 636, 637, 647, 646, 637, 638, 648, 647, 638, 639, 649, 648, 639, 640, 650, 649, 640, 77, 88, 650, 641, 642, 652, 651, 642, 643, 653, 652, 643, 644, 654, 653, 644, 645, 655, 654, 645, 646, 656, 655, 646, 647, 657, 656, 647, 648, 658, 657, 648, 649, 659, 658, 649, 650, 660, 659, 650, 88, 99, 660, 651, 652, 662, 661, 652, 653, 663, 662, 653, 654, 664, 663, 654, 655, 665, 664, 655, 656, 666, 665, 656, 657, 667, 666, 657, 658, 668, 667, 658, 659, 669, 668, 659, 660, 670, 669, 660, 99, 110, 670] - token visibility = "inherited" + def GeomSubset "upperHalf" ( prepend apiSchemas = ["MaterialBindingAPI"] From 74a39a70552925ac5bcb46ad9ba3090b131ca03d Mon Sep 17 00:00:00 2001 From: debloip Date: Tue, 2 Jul 2024 14:24:27 -0400 Subject: [PATCH 38/75] HYDRA-1058 : Fixup --- .../testGeomSubsetsPicking/UpperHalfGeomSubsetCube.usda | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetCube.usda b/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetCube.usda index ab584db918..203a0564b6 100644 --- a/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetCube.usda +++ b/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetCube.usda @@ -1,6 +1,6 @@ #usda 1.0 -def Mesh "pCube1" ( +def Mesh "UpperHalfGeomSubsetCube" ( kind = "component" ) { From 0c2f0ee9343799553724498bd739a024551891cd Mon Sep 17 00:00:00 2001 From: debloip Date: Tue, 2 Jul 2024 16:34:13 -0400 Subject: [PATCH 39/75] HYDRA-1058 : Scene with instancing and materials --- .../GeomSubsetsPickingTestScene.usda | 71 +++++++++++++++++++ .../UpperHalfGeomSubsetCube.usda | 26 ++----- .../UpperHalfGeomSubsetSphere.usda | 26 ++----- 3 files changed, 83 insertions(+), 40 deletions(-) create mode 100644 test/testSamples/testGeomSubsetsPicking/GeomSubsetsPickingTestScene.usda diff --git a/test/testSamples/testGeomSubsetsPicking/GeomSubsetsPickingTestScene.usda b/test/testSamples/testGeomSubsetsPicking/GeomSubsetsPickingTestScene.usda new file mode 100644 index 0000000000..15e0795a99 --- /dev/null +++ b/test/testSamples/testGeomSubsetsPicking/GeomSubsetsPickingTestScene.usda @@ -0,0 +1,71 @@ +#usda 1.0 +( + defaultPrim = "Root" + metersPerUnit = 0.01 + upAxis = "Z" +) + +def Xform "Root" +{ + def Xform "CubeMeshXform" + { + double3 xformOp:translate = (2, 0, 0) + uniform token[] xformOpOrder = ["xformOp:translate"] + + def Mesh "CubeMesh" ( + references = @./UpperHalfGeomSubsetCube.usda@ + ) + { + over "upperHalf" ( + prepend apiSchemas = ["MaterialBindingAPI"] + ) + { + uniform token familyName = "materialBind" + rel material:binding = + } + } + } + + def Xform "SphereMeshXform" + { + double3 xformOp:translate = (-2, 0, 0) + uniform token[] xformOpOrder = ["xformOp:translate"] + + def Mesh "SphereMesh" ( + references = @./UpperHalfGeomSubsetSphere.usda@ + ) + { + over "upperHalf" ( + prepend apiSchemas = ["MaterialBindingAPI"] + ) + { + uniform token familyName = "materialBind" + rel material:binding = + } + } + } + + def PointInstancer "SphereInstancer" + { + point3f[] positions = [(0, 0, -4), (0, 2, -4)] + int[] protoIndices = [0, 0] + rel prototypes = [ + , + ] + } +} + +def Scope "mtl" +{ + def Material "GeomSubsetMaterial" + { + token outputs:surface.connect = + + def Shader "GeomSubsetMaterial" + { + uniform token info:id = "UsdPreviewSurface" + token outputs:surface + } + } +} + diff --git a/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetCube.usda b/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetCube.usda index 203a0564b6..d0e93d3583 100644 --- a/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetCube.usda +++ b/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetCube.usda @@ -1,4 +1,9 @@ #usda 1.0 +( + defaultPrim = "UpperHalfGeomSubsetCube" + metersPerUnit = 0.01 + upAxis = "Z" +) def Mesh "UpperHalfGeomSubsetCube" ( kind = "component" @@ -10,29 +15,10 @@ def Mesh "UpperHalfGeomSubsetCube" ( int[] faceVertexIndices = [0, 1, 12, 11, 1, 2, 13, 12, 2, 3, 14, 13, 3, 4, 15, 14, 4, 5, 16, 15, 5, 6, 17, 16, 6, 7, 18, 17, 7, 8, 19, 18, 8, 9, 20, 19, 9, 10, 21, 20, 11, 12, 23, 22, 12, 13, 24, 23, 13, 14, 25, 24, 14, 15, 26, 25, 15, 16, 27, 26, 16, 17, 28, 27, 17, 18, 29, 28, 18, 19, 30, 29, 19, 20, 31, 30, 20, 21, 32, 31, 22, 23, 34, 33, 23, 24, 35, 34, 24, 25, 36, 35, 25, 26, 37, 36, 26, 27, 38, 37, 27, 28, 39, 38, 28, 29, 40, 39, 29, 30, 41, 40, 30, 31, 42, 41, 31, 32, 43, 42, 33, 34, 45, 44, 34, 35, 46, 45, 35, 36, 47, 46, 36, 37, 48, 47, 37, 38, 49, 48, 38, 39, 50, 49, 39, 40, 51, 50, 40, 41, 52, 51, 41, 42, 53, 52, 42, 43, 54, 53, 44, 45, 56, 55, 45, 46, 57, 56, 46, 47, 58, 57, 47, 48, 59, 58, 48, 49, 60, 59, 49, 50, 61, 60, 50, 51, 62, 61, 51, 52, 63, 62, 52, 53, 64, 63, 53, 54, 65, 64, 55, 56, 67, 66, 56, 57, 68, 67, 57, 58, 69, 68, 58, 59, 70, 69, 59, 60, 71, 70, 60, 61, 72, 71, 61, 62, 73, 72, 62, 63, 74, 73, 63, 64, 75, 74, 64, 65, 76, 75, 66, 67, 78, 77, 67, 68, 79, 78, 68, 69, 80, 79, 69, 70, 81, 80, 70, 71, 82, 81, 71, 72, 83, 82, 72, 73, 84, 83, 73, 74, 85, 84, 74, 75, 86, 85, 75, 76, 87, 86, 77, 78, 89, 88, 78, 79, 90, 89, 79, 80, 91, 90, 80, 81, 92, 91, 81, 82, 93, 92, 82, 83, 94, 93, 83, 84, 95, 94, 84, 85, 96, 95, 85, 86, 97, 96, 86, 87, 98, 97, 88, 89, 100, 99, 89, 90, 101, 100, 90, 91, 102, 101, 91, 92, 103, 102, 92, 93, 104, 103, 93, 94, 105, 104, 94, 95, 106, 105, 95, 96, 107, 106, 96, 97, 108, 107, 97, 98, 109, 108, 99, 100, 111, 110, 100, 101, 112, 111, 101, 102, 113, 112, 102, 103, 114, 113, 103, 104, 115, 114, 104, 105, 116, 115, 105, 106, 117, 116, 106, 107, 118, 117, 107, 108, 119, 118, 108, 109, 120, 119, 110, 111, 122, 121, 111, 112, 123, 122, 112, 113, 124, 123, 113, 114, 125, 124, 114, 115, 126, 125, 115, 116, 127, 126, 116, 117, 128, 127, 117, 118, 129, 128, 118, 119, 130, 129, 119, 120, 131, 130, 121, 122, 133, 132, 122, 123, 134, 133, 123, 124, 135, 134, 124, 125, 136, 135, 125, 126, 137, 136, 126, 127, 138, 137, 127, 128, 139, 138, 128, 129, 140, 139, 129, 130, 141, 140, 130, 131, 142, 141, 132, 133, 144, 143, 133, 134, 145, 144, 134, 135, 146, 145, 135, 136, 147, 146, 136, 137, 148, 147, 137, 138, 149, 148, 138, 139, 150, 149, 139, 140, 151, 150, 140, 141, 152, 151, 141, 142, 153, 152, 143, 144, 155, 154, 144, 145, 156, 155, 145, 146, 157, 156, 146, 147, 158, 157, 147, 148, 159, 158, 148, 149, 160, 159, 149, 150, 161, 160, 150, 151, 162, 161, 151, 152, 163, 162, 152, 153, 164, 163, 154, 155, 166, 165, 155, 156, 167, 166, 156, 157, 168, 167, 157, 158, 169, 168, 158, 159, 170, 169, 159, 160, 171, 170, 160, 161, 172, 171, 161, 162, 173, 172, 162, 163, 174, 173, 163, 164, 175, 174, 165, 166, 177, 176, 166, 167, 178, 177, 167, 168, 179, 178, 168, 169, 180, 179, 169, 170, 181, 180, 170, 171, 182, 181, 171, 172, 183, 182, 172, 173, 184, 183, 173, 174, 185, 184, 174, 175, 186, 185, 176, 177, 188, 187, 177, 178, 189, 188, 178, 179, 190, 189, 179, 180, 191, 190, 180, 181, 192, 191, 181, 182, 193, 192, 182, 183, 194, 193, 183, 184, 195, 194, 184, 185, 196, 195, 185, 186, 197, 196, 187, 188, 199, 198, 188, 189, 200, 199, 189, 190, 201, 200, 190, 191, 202, 201, 191, 192, 203, 202, 192, 193, 204, 203, 193, 194, 205, 204, 194, 195, 206, 205, 195, 196, 207, 206, 196, 197, 208, 207, 198, 199, 210, 209, 199, 200, 211, 210, 200, 201, 212, 211, 201, 202, 213, 212, 202, 203, 214, 213, 203, 204, 215, 214, 204, 205, 216, 215, 205, 206, 217, 216, 206, 207, 218, 217, 207, 208, 219, 218, 209, 210, 221, 220, 210, 211, 222, 221, 211, 212, 223, 222, 212, 213, 224, 223, 213, 214, 225, 224, 214, 215, 226, 225, 215, 216, 227, 226, 216, 217, 228, 227, 217, 218, 229, 228, 218, 219, 230, 229, 220, 221, 232, 231, 221, 222, 233, 232, 222, 223, 234, 233, 223, 224, 235, 234, 224, 225, 236, 235, 225, 226, 237, 236, 226, 227, 238, 237, 227, 228, 239, 238, 228, 229, 240, 239, 229, 230, 241, 240, 231, 232, 243, 242, 232, 233, 244, 243, 233, 234, 245, 244, 234, 235, 246, 245, 235, 236, 247, 246, 236, 237, 248, 247, 237, 238, 249, 248, 238, 239, 250, 249, 239, 240, 251, 250, 240, 241, 252, 251, 242, 243, 254, 253, 243, 244, 255, 254, 244, 245, 256, 255, 245, 246, 257, 256, 246, 247, 258, 257, 247, 248, 259, 258, 248, 249, 260, 259, 249, 250, 261, 260, 250, 251, 262, 261, 251, 252, 263, 262, 253, 254, 265, 264, 254, 255, 266, 265, 255, 256, 267, 266, 256, 257, 268, 267, 257, 258, 269, 268, 258, 259, 270, 269, 259, 260, 271, 270, 260, 261, 272, 271, 261, 262, 273, 272, 262, 263, 274, 273, 264, 265, 276, 275, 265, 266, 277, 276, 266, 267, 278, 277, 267, 268, 279, 278, 268, 269, 280, 279, 269, 270, 281, 280, 270, 271, 282, 281, 271, 272, 283, 282, 272, 273, 284, 283, 273, 274, 285, 284, 275, 276, 287, 286, 276, 277, 288, 287, 277, 278, 289, 288, 278, 279, 290, 289, 279, 280, 291, 290, 280, 281, 292, 291, 281, 282, 293, 292, 282, 283, 294, 293, 283, 284, 295, 294, 284, 285, 296, 295, 286, 287, 298, 297, 287, 288, 299, 298, 288, 289, 300, 299, 289, 290, 301, 300, 290, 291, 302, 301, 291, 292, 303, 302, 292, 293, 304, 303, 293, 294, 305, 304, 294, 295, 306, 305, 295, 296, 307, 306, 297, 298, 309, 308, 298, 299, 310, 309, 299, 300, 311, 310, 300, 301, 312, 311, 301, 302, 313, 312, 302, 303, 314, 313, 303, 304, 315, 314, 304, 305, 316, 315, 305, 306, 317, 316, 306, 307, 318, 317, 308, 309, 320, 319, 309, 310, 321, 320, 310, 311, 322, 321, 311, 312, 323, 322, 312, 313, 324, 323, 313, 314, 325, 324, 314, 315, 326, 325, 315, 316, 327, 326, 316, 317, 328, 327, 317, 318, 329, 328, 319, 320, 331, 330, 320, 321, 332, 331, 321, 322, 333, 332, 322, 323, 334, 333, 323, 324, 335, 334, 324, 325, 336, 335, 325, 326, 337, 336, 326, 327, 338, 337, 327, 328, 339, 338, 328, 329, 340, 339, 330, 331, 342, 341, 331, 332, 343, 342, 332, 333, 344, 343, 333, 334, 345, 344, 334, 335, 346, 345, 335, 336, 347, 346, 336, 337, 348, 347, 337, 338, 349, 348, 338, 339, 350, 349, 339, 340, 351, 350, 341, 342, 353, 352, 342, 343, 354, 353, 343, 344, 355, 354, 344, 345, 356, 355, 345, 346, 357, 356, 346, 347, 358, 357, 347, 348, 359, 358, 348, 349, 360, 359, 349, 350, 361, 360, 350, 351, 362, 361, 352, 353, 364, 363, 353, 354, 365, 364, 354, 355, 366, 365, 355, 356, 367, 366, 356, 357, 368, 367, 357, 358, 369, 368, 358, 359, 370, 369, 359, 360, 371, 370, 360, 361, 372, 371, 361, 362, 373, 372, 363, 364, 375, 374, 364, 365, 376, 375, 365, 366, 377, 376, 366, 367, 378, 377, 367, 368, 379, 378, 368, 369, 380, 379, 369, 370, 381, 380, 370, 371, 382, 381, 371, 372, 383, 382, 372, 373, 384, 383, 374, 375, 386, 385, 375, 376, 387, 386, 376, 377, 388, 387, 377, 378, 389, 388, 378, 379, 390, 389, 379, 380, 391, 390, 380, 381, 392, 391, 381, 382, 393, 392, 382, 383, 394, 393, 383, 384, 395, 394, 385, 386, 397, 396, 386, 387, 398, 397, 387, 388, 399, 398, 388, 389, 400, 399, 389, 390, 401, 400, 390, 391, 402, 401, 391, 392, 403, 402, 392, 393, 404, 403, 393, 394, 405, 404, 394, 395, 406, 405, 396, 397, 408, 407, 397, 398, 409, 408, 398, 399, 410, 409, 399, 400, 411, 410, 400, 401, 412, 411, 401, 402, 413, 412, 402, 403, 414, 413, 403, 404, 415, 414, 404, 405, 416, 415, 405, 406, 417, 416, 407, 408, 419, 418, 408, 409, 420, 419, 409, 410, 421, 420, 410, 411, 422, 421, 411, 412, 423, 422, 412, 413, 424, 423, 413, 414, 425, 424, 414, 415, 426, 425, 415, 416, 427, 426, 416, 417, 428, 427, 418, 419, 430, 429, 419, 420, 431, 430, 420, 421, 432, 431, 421, 422, 433, 432, 422, 423, 434, 433, 423, 424, 435, 434, 424, 425, 436, 435, 425, 426, 437, 436, 426, 427, 438, 437, 427, 428, 439, 438, 429, 430, 1, 0, 430, 431, 2, 1, 431, 432, 3, 2, 432, 433, 4, 3, 433, 434, 5, 4, 434, 435, 6, 5, 435, 436, 7, 6, 436, 437, 8, 7, 437, 438, 9, 8, 438, 439, 10, 9, 351, 340, 329, 440, 362, 351, 440, 441, 373, 362, 441, 442, 384, 373, 442, 443, 395, 384, 443, 444, 406, 395, 444, 445, 417, 406, 445, 446, 428, 417, 446, 447, 439, 428, 447, 448, 10, 439, 448, 21, 440, 329, 318, 449, 441, 440, 449, 450, 442, 441, 450, 451, 443, 442, 451, 452, 444, 443, 452, 453, 445, 444, 453, 454, 446, 445, 454, 455, 447, 446, 455, 456, 448, 447, 456, 457, 21, 448, 457, 32, 449, 318, 307, 458, 450, 449, 458, 459, 451, 450, 459, 460, 452, 451, 460, 461, 453, 452, 461, 462, 454, 453, 462, 463, 455, 454, 463, 464, 456, 455, 464, 465, 457, 456, 465, 466, 32, 457, 466, 43, 458, 307, 296, 467, 459, 458, 467, 468, 460, 459, 468, 469, 461, 460, 469, 470, 462, 461, 470, 471, 463, 462, 471, 472, 464, 463, 472, 473, 465, 464, 473, 474, 466, 465, 474, 475, 43, 466, 475, 54, 467, 296, 285, 476, 468, 467, 476, 477, 469, 468, 477, 478, 470, 469, 478, 479, 471, 470, 479, 480, 472, 471, 480, 481, 473, 472, 481, 482, 474, 473, 482, 483, 475, 474, 483, 484, 54, 475, 484, 65, 476, 285, 274, 485, 477, 476, 485, 486, 478, 477, 486, 487, 479, 478, 487, 488, 480, 479, 488, 489, 481, 480, 489, 490, 482, 481, 490, 491, 483, 482, 491, 492, 484, 483, 492, 493, 65, 484, 493, 76, 485, 274, 263, 494, 486, 485, 494, 495, 487, 486, 495, 496, 488, 487, 496, 497, 489, 488, 497, 498, 490, 489, 498, 499, 491, 490, 499, 500, 492, 491, 500, 501, 493, 492, 501, 502, 76, 493, 502, 87, 494, 263, 252, 503, 495, 494, 503, 504, 496, 495, 504, 505, 497, 496, 505, 506, 498, 497, 506, 507, 499, 498, 507, 508, 500, 499, 508, 509, 501, 500, 509, 510, 502, 501, 510, 511, 87, 502, 511, 98, 503, 252, 241, 512, 504, 503, 512, 513, 505, 504, 513, 514, 506, 505, 514, 515, 507, 506, 515, 516, 508, 507, 516, 517, 509, 508, 517, 518, 510, 509, 518, 519, 511, 510, 519, 520, 98, 511, 520, 109, 512, 241, 230, 219, 513, 512, 219, 208, 514, 513, 208, 197, 515, 514, 197, 186, 516, 515, 186, 175, 517, 516, 175, 164, 518, 517, 164, 153, 519, 518, 153, 142, 520, 519, 142, 131, 109, 520, 131, 120, 330, 341, 521, 319, 341, 352, 522, 521, 352, 363, 523, 522, 363, 374, 524, 523, 374, 385, 525, 524, 385, 396, 526, 525, 396, 407, 527, 526, 407, 418, 528, 527, 418, 429, 529, 528, 429, 0, 11, 529, 319, 521, 530, 308, 521, 522, 531, 530, 522, 523, 532, 531, 523, 524, 533, 532, 524, 525, 534, 533, 525, 526, 535, 534, 526, 527, 536, 535, 527, 528, 537, 536, 528, 529, 538, 537, 529, 11, 22, 538, 308, 530, 539, 297, 530, 531, 540, 539, 531, 532, 541, 540, 532, 533, 542, 541, 533, 534, 543, 542, 534, 535, 544, 543, 535, 536, 545, 544, 536, 537, 546, 545, 537, 538, 547, 546, 538, 22, 33, 547, 297, 539, 548, 286, 539, 540, 549, 548, 540, 541, 550, 549, 541, 542, 551, 550, 542, 543, 552, 551, 543, 544, 553, 552, 544, 545, 554, 553, 545, 546, 555, 554, 546, 547, 556, 555, 547, 33, 44, 556, 286, 548, 557, 275, 548, 549, 558, 557, 549, 550, 559, 558, 550, 551, 560, 559, 551, 552, 561, 560, 552, 553, 562, 561, 553, 554, 563, 562, 554, 555, 564, 563, 555, 556, 565, 564, 556, 44, 55, 565, 275, 557, 566, 264, 557, 558, 567, 566, 558, 559, 568, 567, 559, 560, 569, 568, 560, 561, 570, 569, 561, 562, 571, 570, 562, 563, 572, 571, 563, 564, 573, 572, 564, 565, 574, 573, 565, 55, 66, 574, 264, 566, 575, 253, 566, 567, 576, 575, 567, 568, 577, 576, 568, 569, 578, 577, 569, 570, 579, 578, 570, 571, 580, 579, 571, 572, 581, 580, 572, 573, 582, 581, 573, 574, 583, 582, 574, 66, 77, 583, 253, 575, 584, 242, 575, 576, 585, 584, 576, 577, 586, 585, 577, 578, 587, 586, 578, 579, 588, 587, 579, 580, 589, 588, 580, 581, 590, 589, 581, 582, 591, 590, 582, 583, 592, 591, 583, 77, 88, 592, 242, 584, 593, 231, 584, 585, 594, 593, 585, 586, 595, 594, 586, 587, 596, 595, 587, 588, 597, 596, 588, 589, 598, 597, 589, 590, 599, 598, 590, 591, 600, 599, 591, 592, 601, 600, 592, 88, 99, 601, 231, 593, 209, 220, 593, 594, 198, 209, 594, 595, 187, 198, 595, 596, 176, 187, 596, 597, 165, 176, 597, 598, 154, 165, 598, 599, 143, 154, 599, 600, 132, 143, 600, 601, 121, 132, 601, 99, 110, 121] point3f[] points = [(-0.5, -0.5, 0.5), (-0.4, -0.5, 0.5), (-0.3, -0.5, 0.5), (-0.20000002, -0.5, 0.5), (-0.10000002, -0.5, 0.5), (-1.4901161e-8, -0.5, 0.5), (0.09999999, -0.5, 0.5), (0.19999999, -0.5, 0.5), (0.29999998, -0.5, 0.5), (0.39999998, -0.5, 0.5), (0.49999997, -0.5, 0.5), (-0.5, -0.4, 0.5), (-0.4, -0.4, 0.5), (-0.3, -0.4, 0.5), (-0.20000002, -0.4, 0.5), (-0.10000002, -0.4, 0.5), (-1.4901161e-8, -0.4, 0.5), (0.09999999, -0.4, 0.5), (0.19999999, -0.4, 0.5), (0.29999998, -0.4, 0.5), (0.39999998, -0.4, 0.5), (0.49999997, -0.4, 0.5), (-0.5, -0.3, 0.5), (-0.4, -0.3, 0.5), (-0.3, -0.3, 0.5), (-0.20000002, -0.3, 0.5), (-0.10000002, -0.3, 0.5), (-1.4901161e-8, -0.3, 0.5), (0.09999999, -0.3, 0.5), (0.19999999, -0.3, 0.5), (0.29999998, -0.3, 0.5), (0.39999998, -0.3, 0.5), (0.49999997, -0.3, 0.5), (-0.5, -0.20000002, 0.5), (-0.4, -0.20000002, 0.5), (-0.3, -0.20000002, 0.5), (-0.20000002, -0.20000002, 0.5), (-0.10000002, -0.20000002, 0.5), (-1.4901161e-8, -0.20000002, 0.5), (0.09999999, -0.20000002, 0.5), (0.19999999, -0.20000002, 0.5), (0.29999998, -0.20000002, 0.5), (0.39999998, -0.20000002, 0.5), (0.49999997, -0.20000002, 0.5), (-0.5, -0.10000002, 0.5), (-0.4, -0.10000002, 0.5), (-0.3, -0.10000002, 0.5), (-0.20000002, -0.10000002, 0.5), (-0.10000002, -0.10000002, 0.5), (-1.4901161e-8, -0.10000002, 0.5), (0.09999999, -0.10000002, 0.5), (0.19999999, -0.10000002, 0.5), (0.29999998, -0.10000002, 0.5), (0.39999998, -0.10000002, 0.5), (0.49999997, -0.10000002, 0.5), (-0.5, -1.4901161e-8, 0.5), (-0.4, -1.4901161e-8, 0.5), (-0.3, -1.4901161e-8, 0.5), (-0.20000002, -1.4901161e-8, 0.5), (-0.10000002, -1.4901161e-8, 0.5), (-1.4901161e-8, -1.4901161e-8, 0.5), (0.09999999, -1.4901161e-8, 0.5), (0.19999999, -1.4901161e-8, 0.5), (0.29999998, -1.4901161e-8, 0.5), (0.39999998, -1.4901161e-8, 0.5), (0.49999997, -1.4901161e-8, 0.5), (-0.5, 0.09999999, 0.5), (-0.4, 0.09999999, 0.5), (-0.3, 0.09999999, 0.5), (-0.20000002, 0.09999999, 0.5), (-0.10000002, 0.09999999, 0.5), (-1.4901161e-8, 0.09999999, 0.5), (0.09999999, 0.09999999, 0.5), (0.19999999, 0.09999999, 0.5), (0.29999998, 0.09999999, 0.5), (0.39999998, 0.09999999, 0.5), (0.49999997, 0.09999999, 0.5), (-0.5, 0.19999999, 0.5), (-0.4, 0.19999999, 0.5), (-0.3, 0.19999999, 0.5), (-0.20000002, 0.19999999, 0.5), (-0.10000002, 0.19999999, 0.5), (-1.4901161e-8, 0.19999999, 0.5), (0.09999999, 0.19999999, 0.5), (0.19999999, 0.19999999, 0.5), (0.29999998, 0.19999999, 0.5), (0.39999998, 0.19999999, 0.5), (0.49999997, 0.19999999, 0.5), (-0.5, 0.29999998, 0.5), (-0.4, 0.29999998, 0.5), (-0.3, 0.29999998, 0.5), (-0.20000002, 0.29999998, 0.5), (-0.10000002, 0.29999998, 0.5), (-1.4901161e-8, 0.29999998, 0.5), (0.09999999, 0.29999998, 0.5), (0.19999999, 0.29999998, 0.5), (0.29999998, 0.29999998, 0.5), (0.39999998, 0.29999998, 0.5), (0.49999997, 0.29999998, 0.5), (-0.5, 0.39999998, 0.5), (-0.4, 0.39999998, 0.5), (-0.3, 0.39999998, 0.5), (-0.20000002, 0.39999998, 0.5), (-0.10000002, 0.39999998, 0.5), (-1.4901161e-8, 0.39999998, 0.5), (0.09999999, 0.39999998, 0.5), (0.19999999, 0.39999998, 0.5), (0.29999998, 0.39999998, 0.5), (0.39999998, 0.39999998, 0.5), (0.49999997, 0.39999998, 0.5), (-0.5, 0.5, 0.5), (-0.4, 0.5, 0.5), (-0.3, 0.5, 0.5), (-0.20000002, 0.5, 0.5), (-0.10000002, 0.5, 0.5), (-1.4901161e-8, 0.5, 0.5), (0.09999999, 0.5, 0.5), (0.19999999, 0.5, 0.5), (0.29999998, 0.5, 0.5), (0.39999998, 0.5, 0.5), (0.49999997, 0.5, 0.5), (-0.5, 0.5, 0.4), (-0.4, 0.5, 0.4), (-0.3, 0.5, 0.4), (-0.20000002, 0.5, 0.4), (-0.10000002, 0.5, 0.4), (-1.4901161e-8, 0.5, 0.4), (0.09999999, 0.5, 0.4), (0.19999999, 0.5, 0.4), (0.29999998, 0.5, 0.4), (0.39999998, 0.5, 0.4), (0.49999997, 0.5, 0.4), (-0.5, 0.5, 0.3), (-0.4, 0.5, 0.3), (-0.3, 0.5, 0.3), (-0.20000002, 0.5, 0.3), (-0.10000002, 0.5, 0.3), (-1.4901161e-8, 0.5, 0.3), (0.09999999, 0.5, 0.3), (0.19999999, 0.5, 0.3), (0.29999998, 0.5, 0.3), (0.39999998, 0.5, 0.3), (0.49999997, 0.5, 0.3), (-0.5, 0.5, 0.20000002), (-0.4, 0.5, 0.20000002), (-0.3, 0.5, 0.20000002), (-0.20000002, 0.5, 0.20000002), (-0.10000002, 0.5, 0.20000002), (-1.4901161e-8, 0.5, 0.20000002), (0.09999999, 0.5, 0.20000002), (0.19999999, 0.5, 0.20000002), (0.29999998, 0.5, 0.20000002), (0.39999998, 0.5, 0.20000002), (0.49999997, 0.5, 0.20000002), (-0.5, 0.5, 0.10000002), (-0.4, 0.5, 0.10000002), (-0.3, 0.5, 0.10000002), (-0.20000002, 0.5, 0.10000002), (-0.10000002, 0.5, 0.10000002), (-1.4901161e-8, 0.5, 0.10000002), (0.09999999, 0.5, 0.10000002), (0.19999999, 0.5, 0.10000002), (0.29999998, 0.5, 0.10000002), (0.39999998, 0.5, 0.10000002), (0.49999997, 0.5, 0.10000002), (-0.5, 0.5, 1.4901161e-8), (-0.4, 0.5, 1.4901161e-8), (-0.3, 0.5, 1.4901161e-8), (-0.20000002, 0.5, 1.4901161e-8), (-0.10000002, 0.5, 1.4901161e-8), (-1.4901161e-8, 0.5, 1.4901161e-8), (0.09999999, 0.5, 1.4901161e-8), (0.19999999, 0.5, 1.4901161e-8), (0.29999998, 0.5, 1.4901161e-8), (0.39999998, 0.5, 1.4901161e-8), (0.49999997, 0.5, 1.4901161e-8), (-0.5, 0.5, -0.09999999), (-0.4, 0.5, -0.09999999), (-0.3, 0.5, -0.09999999), (-0.20000002, 0.5, -0.09999999), (-0.10000002, 0.5, -0.09999999), (-1.4901161e-8, 0.5, -0.09999999), (0.09999999, 0.5, -0.09999999), (0.19999999, 0.5, -0.09999999), (0.29999998, 0.5, -0.09999999), (0.39999998, 0.5, -0.09999999), (0.49999997, 0.5, -0.09999999), (-0.5, 0.5, -0.19999999), (-0.4, 0.5, -0.19999999), (-0.3, 0.5, -0.19999999), (-0.20000002, 0.5, -0.19999999), (-0.10000002, 0.5, -0.19999999), (-1.4901161e-8, 0.5, -0.19999999), (0.09999999, 0.5, -0.19999999), (0.19999999, 0.5, -0.19999999), (0.29999998, 0.5, -0.19999999), (0.39999998, 0.5, -0.19999999), (0.49999997, 0.5, -0.19999999), (-0.5, 0.5, -0.29999998), (-0.4, 0.5, -0.29999998), (-0.3, 0.5, -0.29999998), (-0.20000002, 0.5, -0.29999998), (-0.10000002, 0.5, -0.29999998), (-1.4901161e-8, 0.5, -0.29999998), (0.09999999, 0.5, -0.29999998), (0.19999999, 0.5, -0.29999998), (0.29999998, 0.5, -0.29999998), (0.39999998, 0.5, -0.29999998), (0.49999997, 0.5, -0.29999998), (-0.5, 0.5, -0.39999998), (-0.4, 0.5, -0.39999998), (-0.3, 0.5, -0.39999998), (-0.20000002, 0.5, -0.39999998), (-0.10000002, 0.5, -0.39999998), (-1.4901161e-8, 0.5, -0.39999998), (0.09999999, 0.5, -0.39999998), (0.19999999, 0.5, -0.39999998), (0.29999998, 0.5, -0.39999998), (0.39999998, 0.5, -0.39999998), (0.49999997, 0.5, -0.39999998), (-0.5, 0.5, -0.5), (-0.4, 0.5, -0.5), (-0.3, 0.5, -0.5), (-0.20000002, 0.5, -0.5), (-0.10000002, 0.5, -0.5), (-1.4901161e-8, 0.5, -0.5), (0.09999999, 0.5, -0.5), (0.19999999, 0.5, -0.5), (0.29999998, 0.5, -0.5), (0.39999998, 0.5, -0.5), (0.49999997, 0.5, -0.5), (-0.5, 0.4, -0.5), (-0.4, 0.4, -0.5), (-0.3, 0.4, -0.5), (-0.20000002, 0.4, -0.5), (-0.10000002, 0.4, -0.5), (-1.4901161e-8, 0.4, -0.5), (0.09999999, 0.4, -0.5), (0.19999999, 0.4, -0.5), (0.29999998, 0.4, -0.5), (0.39999998, 0.4, -0.5), (0.49999997, 0.4, -0.5), (-0.5, 0.3, -0.5), (-0.4, 0.3, -0.5), (-0.3, 0.3, -0.5), (-0.20000002, 0.3, -0.5), (-0.10000002, 0.3, -0.5), (-1.4901161e-8, 0.3, -0.5), (0.09999999, 0.3, -0.5), (0.19999999, 0.3, -0.5), (0.29999998, 0.3, -0.5), (0.39999998, 0.3, -0.5), (0.49999997, 0.3, -0.5), (-0.5, 0.20000002, -0.5), (-0.4, 0.20000002, -0.5), (-0.3, 0.20000002, -0.5), (-0.20000002, 0.20000002, -0.5), (-0.10000002, 0.20000002, -0.5), (-1.4901161e-8, 0.20000002, -0.5), (0.09999999, 0.20000002, -0.5), (0.19999999, 0.20000002, -0.5), (0.29999998, 0.20000002, -0.5), (0.39999998, 0.20000002, -0.5), (0.49999997, 0.20000002, -0.5), (-0.5, 0.10000002, -0.5), (-0.4, 0.10000002, -0.5), (-0.3, 0.10000002, -0.5), (-0.20000002, 0.10000002, -0.5), (-0.10000002, 0.10000002, -0.5), (-1.4901161e-8, 0.10000002, -0.5), (0.09999999, 0.10000002, -0.5), (0.19999999, 0.10000002, -0.5), (0.29999998, 0.10000002, -0.5), (0.39999998, 0.10000002, -0.5), (0.49999997, 0.10000002, -0.5), (-0.5, 1.4901161e-8, -0.5), (-0.4, 1.4901161e-8, -0.5), (-0.3, 1.4901161e-8, -0.5), (-0.20000002, 1.4901161e-8, -0.5), (-0.10000002, 1.4901161e-8, -0.5), (-1.4901161e-8, 1.4901161e-8, -0.5), (0.09999999, 1.4901161e-8, -0.5), (0.19999999, 1.4901161e-8, -0.5), (0.29999998, 1.4901161e-8, -0.5), (0.39999998, 1.4901161e-8, -0.5), (0.49999997, 1.4901161e-8, -0.5), (-0.5, -0.09999999, -0.5), (-0.4, -0.09999999, -0.5), (-0.3, -0.09999999, -0.5), (-0.20000002, -0.09999999, -0.5), (-0.10000002, -0.09999999, -0.5), (-1.4901161e-8, -0.09999999, -0.5), (0.09999999, -0.09999999, -0.5), (0.19999999, -0.09999999, -0.5), (0.29999998, -0.09999999, -0.5), (0.39999998, -0.09999999, -0.5), (0.49999997, -0.09999999, -0.5), (-0.5, -0.19999999, -0.5), (-0.4, -0.19999999, -0.5), (-0.3, -0.19999999, -0.5), (-0.20000002, -0.19999999, -0.5), (-0.10000002, -0.19999999, -0.5), (-1.4901161e-8, -0.19999999, -0.5), (0.09999999, -0.19999999, -0.5), (0.19999999, -0.19999999, -0.5), (0.29999998, -0.19999999, -0.5), (0.39999998, -0.19999999, -0.5), (0.49999997, -0.19999999, -0.5), (-0.5, -0.29999998, -0.5), (-0.4, -0.29999998, -0.5), (-0.3, -0.29999998, -0.5), (-0.20000002, -0.29999998, -0.5), (-0.10000002, -0.29999998, -0.5), (-1.4901161e-8, -0.29999998, -0.5), (0.09999999, -0.29999998, -0.5), (0.19999999, -0.29999998, -0.5), (0.29999998, -0.29999998, -0.5), (0.39999998, -0.29999998, -0.5), (0.49999997, -0.29999998, -0.5), (-0.5, -0.39999998, -0.5), (-0.4, -0.39999998, -0.5), (-0.3, -0.39999998, -0.5), (-0.20000002, -0.39999998, -0.5), (-0.10000002, -0.39999998, -0.5), (-1.4901161e-8, -0.39999998, -0.5), (0.09999999, -0.39999998, -0.5), (0.19999999, -0.39999998, -0.5), (0.29999998, -0.39999998, -0.5), (0.39999998, -0.39999998, -0.5), (0.49999997, -0.39999998, -0.5), (-0.5, -0.5, -0.5), (-0.4, -0.5, -0.5), (-0.3, -0.5, -0.5), (-0.20000002, -0.5, -0.5), (-0.10000002, -0.5, -0.5), (-1.4901161e-8, -0.5, -0.5), (0.09999999, -0.5, -0.5), (0.19999999, -0.5, -0.5), (0.29999998, -0.5, -0.5), (0.39999998, -0.5, -0.5), (0.49999997, -0.5, -0.5), (-0.5, -0.5, -0.4), (-0.4, -0.5, -0.4), (-0.3, -0.5, -0.4), (-0.20000002, -0.5, -0.4), (-0.10000002, -0.5, -0.4), (-1.4901161e-8, -0.5, -0.4), (0.09999999, -0.5, -0.4), (0.19999999, -0.5, -0.4), (0.29999998, -0.5, -0.4), (0.39999998, -0.5, -0.4), (0.49999997, -0.5, -0.4), (-0.5, -0.5, -0.3), (-0.4, -0.5, -0.3), (-0.3, -0.5, -0.3), (-0.20000002, -0.5, -0.3), (-0.10000002, -0.5, -0.3), (-1.4901161e-8, -0.5, -0.3), (0.09999999, -0.5, -0.3), (0.19999999, -0.5, -0.3), (0.29999998, -0.5, -0.3), (0.39999998, -0.5, -0.3), (0.49999997, -0.5, -0.3), (-0.5, -0.5, -0.20000002), (-0.4, -0.5, -0.20000002), (-0.3, -0.5, -0.20000002), (-0.20000002, -0.5, -0.20000002), (-0.10000002, -0.5, -0.20000002), (-1.4901161e-8, -0.5, -0.20000002), (0.09999999, -0.5, -0.20000002), (0.19999999, -0.5, -0.20000002), (0.29999998, -0.5, -0.20000002), (0.39999998, -0.5, -0.20000002), (0.49999997, -0.5, -0.20000002), (-0.5, -0.5, -0.10000002), (-0.4, -0.5, -0.10000002), (-0.3, -0.5, -0.10000002), (-0.20000002, -0.5, -0.10000002), (-0.10000002, -0.5, -0.10000002), (-1.4901161e-8, -0.5, -0.10000002), (0.09999999, -0.5, -0.10000002), (0.19999999, -0.5, -0.10000002), (0.29999998, -0.5, -0.10000002), (0.39999998, -0.5, -0.10000002), (0.49999997, -0.5, -0.10000002), (-0.5, -0.5, -1.4901161e-8), (-0.4, -0.5, -1.4901161e-8), (-0.3, -0.5, -1.4901161e-8), (-0.20000002, -0.5, -1.4901161e-8), (-0.10000002, -0.5, -1.4901161e-8), (-1.4901161e-8, -0.5, -1.4901161e-8), (0.09999999, -0.5, -1.4901161e-8), (0.19999999, -0.5, -1.4901161e-8), (0.29999998, -0.5, -1.4901161e-8), (0.39999998, -0.5, -1.4901161e-8), (0.49999997, -0.5, -1.4901161e-8), (-0.5, -0.5, 0.09999999), (-0.4, -0.5, 0.09999999), (-0.3, -0.5, 0.09999999), (-0.20000002, -0.5, 0.09999999), (-0.10000002, -0.5, 0.09999999), (-1.4901161e-8, -0.5, 0.09999999), (0.09999999, -0.5, 0.09999999), (0.19999999, -0.5, 0.09999999), (0.29999998, -0.5, 0.09999999), (0.39999998, -0.5, 0.09999999), (0.49999997, -0.5, 0.09999999), (-0.5, -0.5, 0.19999999), (-0.4, -0.5, 0.19999999), (-0.3, -0.5, 0.19999999), (-0.20000002, -0.5, 0.19999999), (-0.10000002, -0.5, 0.19999999), (-1.4901161e-8, -0.5, 0.19999999), (0.09999999, -0.5, 0.19999999), (0.19999999, -0.5, 0.19999999), (0.29999998, -0.5, 0.19999999), (0.39999998, -0.5, 0.19999999), (0.49999997, -0.5, 0.19999999), (-0.5, -0.5, 0.29999998), (-0.4, -0.5, 0.29999998), (-0.3, -0.5, 0.29999998), (-0.20000002, -0.5, 0.29999998), (-0.10000002, -0.5, 0.29999998), (-1.4901161e-8, -0.5, 0.29999998), (0.09999999, -0.5, 0.29999998), (0.19999999, -0.5, 0.29999998), (0.29999998, -0.5, 0.29999998), (0.39999998, -0.5, 0.29999998), (0.49999997, -0.5, 0.29999998), (-0.5, -0.5, 0.39999998), (-0.4, -0.5, 0.39999998), (-0.3, -0.5, 0.39999998), (-0.20000002, -0.5, 0.39999998), (-0.10000002, -0.5, 0.39999998), (-1.4901161e-8, -0.5, 0.39999998), (0.09999999, -0.5, 0.39999998), (0.19999999, -0.5, 0.39999998), (0.29999998, -0.5, 0.39999998), (0.39999998, -0.5, 0.39999998), (0.49999997, -0.5, 0.39999998), (0.5, -0.4, -0.4), (0.5, -0.4, -0.3), (0.5, -0.4, -0.20000002), (0.5, -0.4, -0.10000002), (0.5, -0.4, -1.4901161e-8), (0.5, -0.4, 0.09999999), (0.5, -0.4, 0.19999999), (0.5, -0.4, 0.29999998), (0.5, -0.4, 0.39999998), (0.5, -0.3, -0.4), (0.5, -0.3, -0.3), (0.5, -0.3, -0.20000002), (0.5, -0.3, -0.10000002), (0.5, -0.3, -1.4901161e-8), (0.5, -0.3, 0.09999999), (0.5, -0.3, 0.19999999), (0.5, -0.3, 0.29999998), (0.5, -0.3, 0.39999998), (0.5, -0.20000002, -0.4), (0.5, -0.20000002, -0.3), (0.5, -0.20000002, -0.20000002), (0.5, -0.20000002, -0.10000002), (0.5, -0.20000002, -1.4901161e-8), (0.5, -0.20000002, 0.09999999), (0.5, -0.20000002, 0.19999999), (0.5, -0.20000002, 0.29999998), (0.5, -0.20000002, 0.39999998), (0.5, -0.10000002, -0.4), (0.5, -0.10000002, -0.3), (0.5, -0.10000002, -0.20000002), (0.5, -0.10000002, -0.10000002), (0.5, -0.10000002, -1.4901161e-8), (0.5, -0.10000002, 0.09999999), (0.5, -0.10000002, 0.19999999), (0.5, -0.10000002, 0.29999998), (0.5, -0.10000002, 0.39999998), (0.5, -1.4901161e-8, -0.4), (0.5, -1.4901161e-8, -0.3), (0.5, -1.4901161e-8, -0.20000002), (0.5, -1.4901161e-8, -0.10000002), (0.5, -1.4901161e-8, -1.4901161e-8), (0.5, -1.4901161e-8, 0.09999999), (0.5, -1.4901161e-8, 0.19999999), (0.5, -1.4901161e-8, 0.29999998), (0.5, -1.4901161e-8, 0.39999998), (0.5, 0.09999999, -0.4), (0.5, 0.09999999, -0.3), (0.5, 0.09999999, -0.20000002), (0.5, 0.09999999, -0.10000002), (0.5, 0.09999999, -1.4901161e-8), (0.5, 0.09999999, 0.09999999), (0.5, 0.09999999, 0.19999999), (0.5, 0.09999999, 0.29999998), (0.5, 0.09999999, 0.39999998), (0.5, 0.19999999, -0.4), (0.5, 0.19999999, -0.3), (0.5, 0.19999999, -0.20000002), (0.5, 0.19999999, -0.10000002), (0.5, 0.19999999, -1.4901161e-8), (0.5, 0.19999999, 0.09999999), (0.5, 0.19999999, 0.19999999), (0.5, 0.19999999, 0.29999998), (0.5, 0.19999999, 0.39999998), (0.5, 0.29999998, -0.4), (0.5, 0.29999998, -0.3), (0.5, 0.29999998, -0.20000002), (0.5, 0.29999998, -0.10000002), (0.5, 0.29999998, -1.4901161e-8), (0.5, 0.29999998, 0.09999999), (0.5, 0.29999998, 0.19999999), (0.5, 0.29999998, 0.29999998), (0.5, 0.29999998, 0.39999998), (0.5, 0.39999998, -0.4), (0.5, 0.39999998, -0.3), (0.5, 0.39999998, -0.20000002), (0.5, 0.39999998, -0.10000002), (0.5, 0.39999998, -1.4901161e-8), (0.5, 0.39999998, 0.09999999), (0.5, 0.39999998, 0.19999999), (0.5, 0.39999998, 0.29999998), (0.5, 0.39999998, 0.39999998), (-0.5, -0.4, -0.4), (-0.5, -0.4, -0.3), (-0.5, -0.4, -0.20000002), (-0.5, -0.4, -0.10000002), (-0.5, -0.4, -1.4901161e-8), (-0.5, -0.4, 0.09999999), (-0.5, -0.4, 0.19999999), (-0.5, -0.4, 0.29999998), (-0.5, -0.4, 0.39999998), (-0.5, -0.3, -0.4), (-0.5, -0.3, -0.3), (-0.5, -0.3, -0.20000002), (-0.5, -0.3, -0.10000002), (-0.5, -0.3, -1.4901161e-8), (-0.5, -0.3, 0.09999999), (-0.5, -0.3, 0.19999999), (-0.5, -0.3, 0.29999998), (-0.5, -0.3, 0.39999998), (-0.5, -0.20000002, -0.4), (-0.5, -0.20000002, -0.3), (-0.5, -0.20000002, -0.20000002), (-0.5, -0.20000002, -0.10000002), (-0.5, -0.20000002, -1.4901161e-8), (-0.5, -0.20000002, 0.09999999), (-0.5, -0.20000002, 0.19999999), (-0.5, -0.20000002, 0.29999998), (-0.5, -0.20000002, 0.39999998), (-0.5, -0.10000002, -0.4), (-0.5, -0.10000002, -0.3), (-0.5, -0.10000002, -0.20000002), (-0.5, -0.10000002, -0.10000002), (-0.5, -0.10000002, -1.4901161e-8), (-0.5, -0.10000002, 0.09999999), (-0.5, -0.10000002, 0.19999999), (-0.5, -0.10000002, 0.29999998), (-0.5, -0.10000002, 0.39999998), (-0.5, -1.4901161e-8, -0.4), (-0.5, -1.4901161e-8, -0.3), (-0.5, -1.4901161e-8, -0.20000002), (-0.5, -1.4901161e-8, -0.10000002), (-0.5, -1.4901161e-8, -1.4901161e-8), (-0.5, -1.4901161e-8, 0.09999999), (-0.5, -1.4901161e-8, 0.19999999), (-0.5, -1.4901161e-8, 0.29999998), (-0.5, -1.4901161e-8, 0.39999998), (-0.5, 0.09999999, -0.4), (-0.5, 0.09999999, -0.3), (-0.5, 0.09999999, -0.20000002), (-0.5, 0.09999999, -0.10000002), (-0.5, 0.09999999, -1.4901161e-8), (-0.5, 0.09999999, 0.09999999), (-0.5, 0.09999999, 0.19999999), (-0.5, 0.09999999, 0.29999998), (-0.5, 0.09999999, 0.39999998), (-0.5, 0.19999999, -0.4), (-0.5, 0.19999999, -0.3), (-0.5, 0.19999999, -0.20000002), (-0.5, 0.19999999, -0.10000002), (-0.5, 0.19999999, -1.4901161e-8), (-0.5, 0.19999999, 0.09999999), (-0.5, 0.19999999, 0.19999999), (-0.5, 0.19999999, 0.29999998), (-0.5, 0.19999999, 0.39999998), (-0.5, 0.29999998, -0.4), (-0.5, 0.29999998, -0.3), (-0.5, 0.29999998, -0.20000002), (-0.5, 0.29999998, -0.10000002), (-0.5, 0.29999998, -1.4901161e-8), (-0.5, 0.29999998, 0.09999999), (-0.5, 0.29999998, 0.19999999), (-0.5, 0.29999998, 0.29999998), (-0.5, 0.29999998, 0.39999998), (-0.5, 0.39999998, -0.4), (-0.5, 0.39999998, -0.3), (-0.5, 0.39999998, -0.20000002), (-0.5, 0.39999998, -0.10000002), (-0.5, 0.39999998, -1.4901161e-8), (-0.5, 0.39999998, 0.09999999), (-0.5, 0.39999998, 0.19999999), (-0.5, 0.39999998, 0.29999998), (-0.5, 0.39999998, 0.39999998)] - - def GeomSubset "upperHalf" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) + def GeomSubset "upperHalf" { uniform token elementType = "face" - uniform token familyName = "materialBind" int[] indices = [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, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599] - rel material:binding = - } -} - -def Scope "mtl" -{ - def Material "UsdPreviewSurface1" - { - token outputs:surface.connect = - - def Shader "UsdPreviewSurface1" - { - uniform token info:id = "UsdPreviewSurface" - token outputs:surface - } } } diff --git a/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetSphere.usda b/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetSphere.usda index e37c0b123e..66b456f8fb 100644 --- a/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetSphere.usda +++ b/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetSphere.usda @@ -1,4 +1,9 @@ #usda 1.0 +( + defaultPrim = "UpperHalfGeomSubsetSphere" + metersPerUnit = 0.01 + upAxis = "Z" +) def Mesh "UpperHalfGeomSubsetSphere" ( kind = "component" @@ -10,29 +15,10 @@ def Mesh "UpperHalfGeomSubsetSphere" ( int[] faceVertexIndices = [0, 1, 21, 20, 1, 2, 22, 21, 2, 3, 23, 22, 3, 4, 24, 23, 4, 5, 25, 24, 5, 6, 26, 25, 6, 7, 27, 26, 7, 8, 28, 27, 8, 9, 29, 28, 9, 10, 30, 29, 10, 11, 31, 30, 11, 12, 32, 31, 12, 13, 33, 32, 13, 14, 34, 33, 14, 15, 35, 34, 15, 16, 36, 35, 16, 17, 37, 36, 17, 18, 38, 37, 18, 19, 39, 38, 19, 0, 20, 39, 20, 21, 41, 40, 21, 22, 42, 41, 22, 23, 43, 42, 23, 24, 44, 43, 24, 25, 45, 44, 25, 26, 46, 45, 26, 27, 47, 46, 27, 28, 48, 47, 28, 29, 49, 48, 29, 30, 50, 49, 30, 31, 51, 50, 31, 32, 52, 51, 32, 33, 53, 52, 33, 34, 54, 53, 34, 35, 55, 54, 35, 36, 56, 55, 36, 37, 57, 56, 37, 38, 58, 57, 38, 39, 59, 58, 39, 20, 40, 59, 40, 41, 61, 60, 41, 42, 62, 61, 42, 43, 63, 62, 43, 44, 64, 63, 44, 45, 65, 64, 45, 46, 66, 65, 46, 47, 67, 66, 47, 48, 68, 67, 48, 49, 69, 68, 49, 50, 70, 69, 50, 51, 71, 70, 51, 52, 72, 71, 52, 53, 73, 72, 53, 54, 74, 73, 54, 55, 75, 74, 55, 56, 76, 75, 56, 57, 77, 76, 57, 58, 78, 77, 58, 59, 79, 78, 59, 40, 60, 79, 60, 61, 81, 80, 61, 62, 82, 81, 62, 63, 83, 82, 63, 64, 84, 83, 64, 65, 85, 84, 65, 66, 86, 85, 66, 67, 87, 86, 67, 68, 88, 87, 68, 69, 89, 88, 69, 70, 90, 89, 70, 71, 91, 90, 71, 72, 92, 91, 72, 73, 93, 92, 73, 74, 94, 93, 74, 75, 95, 94, 75, 76, 96, 95, 76, 77, 97, 96, 77, 78, 98, 97, 78, 79, 99, 98, 79, 60, 80, 99, 80, 81, 101, 100, 81, 82, 102, 101, 82, 83, 103, 102, 83, 84, 104, 103, 84, 85, 105, 104, 85, 86, 106, 105, 86, 87, 107, 106, 87, 88, 108, 107, 88, 89, 109, 108, 89, 90, 110, 109, 90, 91, 111, 110, 91, 92, 112, 111, 92, 93, 113, 112, 93, 94, 114, 113, 94, 95, 115, 114, 95, 96, 116, 115, 96, 97, 117, 116, 97, 98, 118, 117, 98, 99, 119, 118, 99, 80, 100, 119, 100, 101, 121, 120, 101, 102, 122, 121, 102, 103, 123, 122, 103, 104, 124, 123, 104, 105, 125, 124, 105, 106, 126, 125, 106, 107, 127, 126, 107, 108, 128, 127, 108, 109, 129, 128, 109, 110, 130, 129, 110, 111, 131, 130, 111, 112, 132, 131, 112, 113, 133, 132, 113, 114, 134, 133, 114, 115, 135, 134, 115, 116, 136, 135, 116, 117, 137, 136, 117, 118, 138, 137, 118, 119, 139, 138, 119, 100, 120, 139, 120, 121, 141, 140, 121, 122, 142, 141, 122, 123, 143, 142, 123, 124, 144, 143, 124, 125, 145, 144, 125, 126, 146, 145, 126, 127, 147, 146, 127, 128, 148, 147, 128, 129, 149, 148, 129, 130, 150, 149, 130, 131, 151, 150, 131, 132, 152, 151, 132, 133, 153, 152, 133, 134, 154, 153, 134, 135, 155, 154, 135, 136, 156, 155, 136, 137, 157, 156, 137, 138, 158, 157, 138, 139, 159, 158, 139, 120, 140, 159, 140, 141, 161, 160, 141, 142, 162, 161, 142, 143, 163, 162, 143, 144, 164, 163, 144, 145, 165, 164, 145, 146, 166, 165, 146, 147, 167, 166, 147, 148, 168, 167, 148, 149, 169, 168, 149, 150, 170, 169, 150, 151, 171, 170, 151, 152, 172, 171, 152, 153, 173, 172, 153, 154, 174, 173, 154, 155, 175, 174, 155, 156, 176, 175, 156, 157, 177, 176, 157, 158, 178, 177, 158, 159, 179, 178, 159, 140, 160, 179, 160, 161, 181, 180, 161, 162, 182, 181, 162, 163, 183, 182, 163, 164, 184, 183, 164, 165, 185, 184, 165, 166, 186, 185, 166, 167, 187, 186, 167, 168, 188, 187, 168, 169, 189, 188, 169, 170, 190, 189, 170, 171, 191, 190, 171, 172, 192, 191, 172, 173, 193, 192, 173, 174, 194, 193, 174, 175, 195, 194, 175, 176, 196, 195, 176, 177, 197, 196, 177, 178, 198, 197, 178, 179, 199, 198, 179, 160, 180, 199, 180, 181, 201, 200, 181, 182, 202, 201, 182, 183, 203, 202, 183, 184, 204, 203, 184, 185, 205, 204, 185, 186, 206, 205, 186, 187, 207, 206, 187, 188, 208, 207, 188, 189, 209, 208, 189, 190, 210, 209, 190, 191, 211, 210, 191, 192, 212, 211, 192, 193, 213, 212, 193, 194, 214, 213, 194, 195, 215, 214, 195, 196, 216, 215, 196, 197, 217, 216, 197, 198, 218, 217, 198, 199, 219, 218, 199, 180, 200, 219, 200, 201, 221, 220, 201, 202, 222, 221, 202, 203, 223, 222, 203, 204, 224, 223, 204, 205, 225, 224, 205, 206, 226, 225, 206, 207, 227, 226, 207, 208, 228, 227, 208, 209, 229, 228, 209, 210, 230, 229, 210, 211, 231, 230, 211, 212, 232, 231, 212, 213, 233, 232, 213, 214, 234, 233, 214, 215, 235, 234, 215, 216, 236, 235, 216, 217, 237, 236, 217, 218, 238, 237, 218, 219, 239, 238, 219, 200, 220, 239, 220, 221, 241, 240, 221, 222, 242, 241, 222, 223, 243, 242, 223, 224, 244, 243, 224, 225, 245, 244, 225, 226, 246, 245, 226, 227, 247, 246, 227, 228, 248, 247, 228, 229, 249, 248, 229, 230, 250, 249, 230, 231, 251, 250, 231, 232, 252, 251, 232, 233, 253, 252, 233, 234, 254, 253, 234, 235, 255, 254, 235, 236, 256, 255, 236, 237, 257, 256, 237, 238, 258, 257, 238, 239, 259, 258, 239, 220, 240, 259, 240, 241, 261, 260, 241, 242, 262, 261, 242, 243, 263, 262, 243, 244, 264, 263, 244, 245, 265, 264, 245, 246, 266, 265, 246, 247, 267, 266, 247, 248, 268, 267, 248, 249, 269, 268, 249, 250, 270, 269, 250, 251, 271, 270, 251, 252, 272, 271, 252, 253, 273, 272, 253, 254, 274, 273, 254, 255, 275, 274, 255, 256, 276, 275, 256, 257, 277, 276, 257, 258, 278, 277, 258, 259, 279, 278, 259, 240, 260, 279, 260, 261, 281, 280, 261, 262, 282, 281, 262, 263, 283, 282, 263, 264, 284, 283, 264, 265, 285, 284, 265, 266, 286, 285, 266, 267, 287, 286, 267, 268, 288, 287, 268, 269, 289, 288, 269, 270, 290, 289, 270, 271, 291, 290, 271, 272, 292, 291, 272, 273, 293, 292, 273, 274, 294, 293, 274, 275, 295, 294, 275, 276, 296, 295, 276, 277, 297, 296, 277, 278, 298, 297, 278, 279, 299, 298, 279, 260, 280, 299, 280, 281, 301, 300, 281, 282, 302, 301, 282, 283, 303, 302, 283, 284, 304, 303, 284, 285, 305, 304, 285, 286, 306, 305, 286, 287, 307, 306, 287, 288, 308, 307, 288, 289, 309, 308, 289, 290, 310, 309, 290, 291, 311, 310, 291, 292, 312, 311, 292, 293, 313, 312, 293, 294, 314, 313, 294, 295, 315, 314, 295, 296, 316, 315, 296, 297, 317, 316, 297, 298, 318, 317, 298, 299, 319, 318, 299, 280, 300, 319, 300, 301, 321, 320, 301, 302, 322, 321, 302, 303, 323, 322, 303, 304, 324, 323, 304, 305, 325, 324, 305, 306, 326, 325, 306, 307, 327, 326, 307, 308, 328, 327, 308, 309, 329, 328, 309, 310, 330, 329, 310, 311, 331, 330, 311, 312, 332, 331, 312, 313, 333, 332, 313, 314, 334, 333, 314, 315, 335, 334, 315, 316, 336, 335, 316, 317, 337, 336, 317, 318, 338, 337, 318, 319, 339, 338, 319, 300, 320, 339, 320, 321, 341, 340, 321, 322, 342, 341, 322, 323, 343, 342, 323, 324, 344, 343, 324, 325, 345, 344, 325, 326, 346, 345, 326, 327, 347, 346, 327, 328, 348, 347, 328, 329, 349, 348, 329, 330, 350, 349, 330, 331, 351, 350, 331, 332, 352, 351, 332, 333, 353, 352, 333, 334, 354, 353, 334, 335, 355, 354, 335, 336, 356, 355, 336, 337, 357, 356, 337, 338, 358, 357, 338, 339, 359, 358, 339, 320, 340, 359, 340, 341, 361, 360, 341, 342, 362, 361, 342, 343, 363, 362, 343, 344, 364, 363, 344, 345, 365, 364, 345, 346, 366, 365, 346, 347, 367, 366, 347, 348, 368, 367, 348, 349, 369, 368, 349, 350, 370, 369, 350, 351, 371, 370, 351, 352, 372, 371, 352, 353, 373, 372, 353, 354, 374, 373, 354, 355, 375, 374, 355, 356, 376, 375, 356, 357, 377, 376, 357, 358, 378, 377, 358, 359, 379, 378, 359, 340, 360, 379, 1, 0, 380, 2, 1, 380, 3, 2, 380, 4, 3, 380, 5, 4, 380, 6, 5, 380, 7, 6, 380, 8, 7, 380, 9, 8, 380, 10, 9, 380, 11, 10, 380, 12, 11, 380, 13, 12, 380, 14, 13, 380, 15, 14, 380, 16, 15, 380, 17, 16, 380, 18, 17, 380, 19, 18, 380, 0, 19, 380, 360, 361, 381, 361, 362, 381, 362, 363, 381, 363, 364, 381, 364, 365, 381, 365, 366, 381, 366, 367, 381, 367, 368, 381, 368, 369, 381, 369, 370, 381, 370, 371, 381, 371, 372, 381, 372, 373, 381, 373, 374, 381, 374, 375, 381, 375, 376, 381, 376, 377, 381, 377, 378, 381, 378, 379, 381, 379, 360, 381] point3f[] points = [(0.14877813, -0.98768836, -0.048340943), (0.12655823, -0.98768836, -0.09194993), (0.09194993, -0.98768836, -0.12655823), (0.048340935, -0.98768836, -0.14877811), (0, -0.98768836, -0.15643455), (-0.048340935, -0.98768836, -0.1487781), (-0.09194992, -0.98768836, -0.1265582), (-0.12655818, -0.98768836, -0.0919499), (-0.14877807, -0.98768836, -0.048340924), (-0.15643452, -0.98768836, 0), (-0.14877807, -0.98768836, 0.048340924), (-0.12655818, -0.98768836, 0.091949895), (-0.091949895, -0.98768836, 0.12655817), (-0.048340924, -0.98768836, 0.14877805), (-4.6621107e-9, -0.98768836, 0.15643449), (0.04834091, -0.98768836, 0.14877804), (0.09194988, -0.98768836, 0.12655815), (0.12655815, -0.98768836, 0.09194989), (0.14877804, -0.98768836, 0.048340913), (0.15643448, -0.98768836, 0), (0.29389283, -0.95105654, -0.095491566), (0.25000018, -0.95105654, -0.18163574), (0.18163574, -0.95105654, -0.25000015), (0.09549155, -0.95105654, -0.2938928), (0, -0.95105654, -0.30901715), (-0.09549155, -0.95105654, -0.29389277), (-0.18163571, -0.95105654, -0.2500001), (-0.2500001, -0.95105654, -0.1816357), (-0.2938927, -0.95105654, -0.09549153), (-0.30901706, -0.95105654, 0), (-0.2938927, -0.95105654, 0.09549153), (-0.25000006, -0.95105654, 0.18163568), (-0.18163568, -0.95105654, 0.25000006), (-0.09549153, -0.95105654, 0.29389268), (-9.209424e-9, -0.95105654, 0.30901703), (0.0954915, -0.95105654, 0.29389265), (0.18163563, -0.95105654, 0.25000003), (0.25, -0.95105654, 0.18163565), (0.29389265, -0.95105654, 0.095491506), (0.309017, -0.95105654, 0), (0.43177092, -0.8910065, -0.14029087), (0.3672863, -0.8910065, -0.2668491), (0.2668491, -0.8910065, -0.36728626), (0.14029086, -0.8910065, -0.43177086), (0, -0.8910065, -0.45399073), (-0.14029086, -0.8910065, -0.43177083), (-0.26684904, -0.8910065, -0.36728618), (-0.36728615, -0.8910065, -0.266849), (-0.43177077, -0.8910065, -0.14029081), (-0.45399064, -0.8910065, 0), (-0.43177077, -0.8910065, 0.14029081), (-0.36728612, -0.8910065, 0.26684898), (-0.26684898, -0.8910065, 0.36728612), (-0.14029081, -0.8910065, 0.4317707), (-1.3529972e-8, -0.8910065, 0.45399058), (0.14029078, -0.8910065, 0.43177068), (0.26684892, -0.8910065, 0.3672861), (0.36728606, -0.8910065, 0.26684895), (0.43177065, -0.8910065, 0.1402908), (0.45399052, -0.8910065, 0), (0.55901736, -0.809017, -0.18163574), (0.47552857, -0.809017, -0.3454917), (0.3454917, -0.809017, -0.47552854), (0.18163572, -0.809017, -0.5590173), (0, -0.809017, -0.58778554), (-0.18163572, -0.809017, -0.55901724), (-0.34549165, -0.809017, -0.47552842), (-0.4755284, -0.809017, -0.3454916), (-0.5590171, -0.809017, -0.18163566), (-0.58778536, -0.809017, 0), (-0.5590171, -0.809017, 0.18163566), (-0.47552836, -0.809017, 0.34549156), (-0.34549156, -0.809017, 0.47552833), (-0.18163566, -0.809017, 0.55901706), (-1.7517365e-8, -0.809017, 0.5877853), (0.18163562, -0.809017, 0.55901706), (0.3454915, -0.809017, 0.4755283), (0.47552827, -0.809017, 0.34549153), (0.559017, -0.809017, 0.18163563), (0.58778524, -0.809017, 0), (0.67249894, -0.70710677, -0.21850814), (0.5720618, -0.70710677, -0.41562718), (0.41562718, -0.70710677, -0.5720617), (0.21850812, -0.70710677, -0.6724989), (0, -0.70710677, -0.7071071), (-0.21850812, -0.70710677, -0.6724988), (-0.4156271, -0.70710677, -0.5720616), (-0.57206154, -0.70710677, -0.41562706), (-0.6724987, -0.70710677, -0.21850805), (-0.70710695, -0.70710677, 0), (-0.6724987, -0.70710677, 0.21850805), (-0.57206154, -0.70710677, 0.415627), (-0.415627, -0.70710677, 0.5720615), (-0.21850805, -0.70710677, 0.6724986), (-2.1073424e-8, -0.70710677, 0.7071068), (0.21850799, -0.70710677, 0.6724986), (0.4156269, -0.70710677, 0.5720614), (0.5720614, -0.70710677, 0.41562697), (0.6724985, -0.70710677, 0.21850802), (0.70710677, -0.70710677, 0), (0.7694214, -0.58778524, -0.25000015), (0.65450895, -0.58778524, -0.47552854), (0.47552854, -0.58778524, -0.6545089), (0.25000012, -0.58778524, -0.7694213), (0, -0.58778524, -0.80901736), (-0.25000012, -0.58778524, -0.7694212), (-0.47552845, -0.58778524, -0.65450877), (-0.6545087, -0.58778524, -0.4755284), (-0.7694211, -0.58778524, -0.25000006), (-0.8090172, -0.58778524, 0), (-0.7694211, -0.58778524, 0.25000006), (-0.65450865, -0.58778524, 0.47552836), (-0.47552836, -0.58778524, 0.6545086), (-0.25000006, -0.58778524, 0.769421), (-2.4110586e-8, -0.58778524, 0.8090171), (0.24999999, -0.58778524, 0.769421), (0.47552827, -0.58778524, 0.65450853), (0.65450853, -0.58778524, 0.4755283), (0.7694209, -0.58778524, 0.25), (0.809017, -0.58778524, 0), (0.8473981, -0.45399052, -0.27533633), (0.7208399, -0.45399052, -0.5237208), (0.5237208, -0.45399052, -0.72083986), (0.2753363, -0.45399052, -0.847398), (0, -0.45399052, -0.89100695), (-0.2753363, -0.45399052, -0.847398), (-0.5237207, -0.45399052, -0.7208397), (-0.7208396, -0.45399052, -0.5237206), (-0.8473978, -0.45399052, -0.2753362), (-0.89100677, -0.45399052, 0), (-0.8473978, -0.45399052, 0.2753362), (-0.7208396, -0.45399052, 0.5237206), (-0.5237206, -0.45399052, 0.72083956), (-0.2753362, -0.45399052, 0.8473977), (-2.6554064e-8, -0.45399052, 0.89100665), (0.27533615, -0.45399052, 0.8473976), (0.5237205, -0.45399052, 0.7208395), (0.72083944, -0.45399052, 0.52372056), (0.84739757, -0.45399052, 0.27533618), (0.8910065, -0.45399052, 0), (0.9045091, -0.30901697, -0.2938928), (0.7694214, -0.30901697, -0.55901736), (0.55901736, -0.30901697, -0.76942134), (0.29389277, -0.30901697, -0.904509), (0, -0.30901697, -0.951057), (-0.29389277, -0.30901697, -0.90450895), (-0.55901724, -0.30901697, -0.7694212), (-0.76942116, -0.30901697, -0.5590172), (-0.90450877, -0.30901697, -0.2938927), (-0.9510568, -0.30901697, 0), (-0.90450877, -0.30901697, 0.2938927), (-0.7694211, -0.30901697, 0.5590171), (-0.5590171, -0.30901697, 0.76942104), (-0.2938927, -0.30901697, 0.90450865), (-2.8343694e-8, -0.30901697, 0.95105666), (0.29389262, -0.30901697, 0.9045086), (0.559017, -0.30901697, 0.769421), (0.7694209, -0.30901697, 0.55901706), (0.90450853, -0.30901697, 0.29389265), (0.95105654, -0.30901697, 0), (0.93934804, -0.15643437, -0.30521268), (0.7990572, -0.15643437, -0.580549), (0.580549, -0.15643437, -0.7990571), (0.30521265, -0.15643437, -0.9393479), (0, -0.15643437, -0.98768884), (-0.30521265, -0.15643437, -0.93934786), (-0.5805489, -0.15643437, -0.79905695), (-0.7990569, -0.15643437, -0.5805488), (-0.9393477, -0.15643437, -0.30521256), (-0.9876886, -0.15643437, 0), (-0.9393477, -0.15643437, 0.30521256), (-0.7990568, -0.15643437, 0.58054876), (-0.58054876, -0.15643437, 0.79905677), (-0.30521256, -0.15643437, 0.93934757), (-2.9435407e-8, -0.15643437, 0.9876885), (0.30521247, -0.15643437, 0.93934757), (0.58054864, -0.15643437, 0.7990567), (0.79905665, -0.15643437, 0.5805487), (0.9393475, -0.15643437, 0.3052125), (0.98768836, -0.15643437, 0), (0.95105714, 0, -0.30901718), (0.80901754, 0, -0.5877856), (0.5877856, 0, -0.8090175), (0.30901715, 0, -0.951057), (0, 0, -1.0000005), (-0.30901715, 0, -0.95105696), (-0.5877855, 0, -0.8090173), (-0.80901724, 0, -0.5877854), (-0.9510568, 0, -0.30901706), (-1.0000002, 0, 0), (-0.9510568, 0, 0.30901706), (-0.8090172, 0, 0.58778536), (-0.58778536, 0, 0.8090171), (-0.30901706, 0, 0.95105666), (-2.9802322e-8, 0, 1.0000001), (0.30901697, 0, 0.9510566), (0.58778524, 0, 0.80901706), (0.809017, 0, 0.5877853), (0.95105654, 0, 0.309017), (1, 0, 0), (0.93934804, 0.15643437, -0.30521268), (0.7990572, 0.15643437, -0.580549), (0.580549, 0.15643437, -0.7990571), (0.30521265, 0.15643437, -0.9393479), (0, 0.15643437, -0.98768884), (-0.30521265, 0.15643437, -0.93934786), (-0.5805489, 0.15643437, -0.79905695), (-0.7990569, 0.15643437, -0.5805488), (-0.9393477, 0.15643437, -0.30521256), (-0.9876886, 0.15643437, 0), (-0.9393477, 0.15643437, 0.30521256), (-0.7990568, 0.15643437, 0.58054876), (-0.58054876, 0.15643437, 0.79905677), (-0.30521256, 0.15643437, 0.93934757), (-2.9435407e-8, 0.15643437, 0.9876885), (0.30521247, 0.15643437, 0.93934757), (0.58054864, 0.15643437, 0.7990567), (0.79905665, 0.15643437, 0.5805487), (0.9393475, 0.15643437, 0.3052125), (0.98768836, 0.15643437, 0), (0.9045091, 0.30901697, -0.2938928), (0.7694214, 0.30901697, -0.55901736), (0.55901736, 0.30901697, -0.76942134), (0.29389277, 0.30901697, -0.904509), (0, 0.30901697, -0.951057), (-0.29389277, 0.30901697, -0.90450895), (-0.55901724, 0.30901697, -0.7694212), (-0.76942116, 0.30901697, -0.5590172), (-0.90450877, 0.30901697, -0.2938927), (-0.9510568, 0.30901697, 0), (-0.90450877, 0.30901697, 0.2938927), (-0.7694211, 0.30901697, 0.5590171), (-0.5590171, 0.30901697, 0.76942104), (-0.2938927, 0.30901697, 0.90450865), (-2.8343694e-8, 0.30901697, 0.95105666), (0.29389262, 0.30901697, 0.9045086), (0.559017, 0.30901697, 0.769421), (0.7694209, 0.30901697, 0.55901706), (0.90450853, 0.30901697, 0.29389265), (0.95105654, 0.30901697, 0), (0.8473981, 0.45399052, -0.27533633), (0.7208399, 0.45399052, -0.5237208), (0.5237208, 0.45399052, -0.72083986), (0.2753363, 0.45399052, -0.847398), (0, 0.45399052, -0.89100695), (-0.2753363, 0.45399052, -0.847398), (-0.5237207, 0.45399052, -0.7208397), (-0.7208396, 0.45399052, -0.5237206), (-0.8473978, 0.45399052, -0.2753362), (-0.89100677, 0.45399052, 0), (-0.8473978, 0.45399052, 0.2753362), (-0.7208396, 0.45399052, 0.5237206), (-0.5237206, 0.45399052, 0.72083956), (-0.2753362, 0.45399052, 0.8473977), (-2.6554064e-8, 0.45399052, 0.89100665), (0.27533615, 0.45399052, 0.8473976), (0.5237205, 0.45399052, 0.7208395), (0.72083944, 0.45399052, 0.52372056), (0.84739757, 0.45399052, 0.27533618), (0.8910065, 0.45399052, 0), (0.7694214, 0.58778524, -0.25000015), (0.65450895, 0.58778524, -0.47552854), (0.47552854, 0.58778524, -0.6545089), (0.25000012, 0.58778524, -0.7694213), (0, 0.58778524, -0.80901736), (-0.25000012, 0.58778524, -0.7694212), (-0.47552845, 0.58778524, -0.65450877), (-0.6545087, 0.58778524, -0.4755284), (-0.7694211, 0.58778524, -0.25000006), (-0.8090172, 0.58778524, 0), (-0.7694211, 0.58778524, 0.25000006), (-0.65450865, 0.58778524, 0.47552836), (-0.47552836, 0.58778524, 0.6545086), (-0.25000006, 0.58778524, 0.769421), (-2.4110586e-8, 0.58778524, 0.8090171), (0.24999999, 0.58778524, 0.769421), (0.47552827, 0.58778524, 0.65450853), (0.65450853, 0.58778524, 0.4755283), (0.7694209, 0.58778524, 0.25), (0.809017, 0.58778524, 0), (0.67249894, 0.70710677, -0.21850814), (0.5720618, 0.70710677, -0.41562718), (0.41562718, 0.70710677, -0.5720617), (0.21850812, 0.70710677, -0.6724989), (0, 0.70710677, -0.7071071), (-0.21850812, 0.70710677, -0.6724988), (-0.4156271, 0.70710677, -0.5720616), (-0.57206154, 0.70710677, -0.41562706), (-0.6724987, 0.70710677, -0.21850805), (-0.70710695, 0.70710677, 0), (-0.6724987, 0.70710677, 0.21850805), (-0.57206154, 0.70710677, 0.415627), (-0.415627, 0.70710677, 0.5720615), (-0.21850805, 0.70710677, 0.6724986), (-2.1073424e-8, 0.70710677, 0.7071068), (0.21850799, 0.70710677, 0.6724986), (0.4156269, 0.70710677, 0.5720614), (0.5720614, 0.70710677, 0.41562697), (0.6724985, 0.70710677, 0.21850802), (0.70710677, 0.70710677, 0), (0.55901736, 0.809017, -0.18163574), (0.47552857, 0.809017, -0.3454917), (0.3454917, 0.809017, -0.47552854), (0.18163572, 0.809017, -0.5590173), (0, 0.809017, -0.58778554), (-0.18163572, 0.809017, -0.55901724), (-0.34549165, 0.809017, -0.47552842), (-0.4755284, 0.809017, -0.3454916), (-0.5590171, 0.809017, -0.18163566), (-0.58778536, 0.809017, 0), (-0.5590171, 0.809017, 0.18163566), (-0.47552836, 0.809017, 0.34549156), (-0.34549156, 0.809017, 0.47552833), (-0.18163566, 0.809017, 0.55901706), (-1.7517365e-8, 0.809017, 0.5877853), (0.18163562, 0.809017, 0.55901706), (0.3454915, 0.809017, 0.4755283), (0.47552827, 0.809017, 0.34549153), (0.559017, 0.809017, 0.18163563), (0.58778524, 0.809017, 0), (0.43177092, 0.8910065, -0.14029087), (0.3672863, 0.8910065, -0.2668491), (0.2668491, 0.8910065, -0.36728626), (0.14029086, 0.8910065, -0.43177086), (0, 0.8910065, -0.45399073), (-0.14029086, 0.8910065, -0.43177083), (-0.26684904, 0.8910065, -0.36728618), (-0.36728615, 0.8910065, -0.266849), (-0.43177077, 0.8910065, -0.14029081), (-0.45399064, 0.8910065, 0), (-0.43177077, 0.8910065, 0.14029081), (-0.36728612, 0.8910065, 0.26684898), (-0.26684898, 0.8910065, 0.36728612), (-0.14029081, 0.8910065, 0.4317707), (-1.3529972e-8, 0.8910065, 0.45399058), (0.14029078, 0.8910065, 0.43177068), (0.26684892, 0.8910065, 0.3672861), (0.36728606, 0.8910065, 0.26684895), (0.43177065, 0.8910065, 0.1402908), (0.45399052, 0.8910065, 0), (0.29389283, 0.95105654, -0.095491566), (0.25000018, 0.95105654, -0.18163574), (0.18163574, 0.95105654, -0.25000015), (0.09549155, 0.95105654, -0.2938928), (0, 0.95105654, -0.30901715), (-0.09549155, 0.95105654, -0.29389277), (-0.18163571, 0.95105654, -0.2500001), (-0.2500001, 0.95105654, -0.1816357), (-0.2938927, 0.95105654, -0.09549153), (-0.30901706, 0.95105654, 0), (-0.2938927, 0.95105654, 0.09549153), (-0.25000006, 0.95105654, 0.18163568), (-0.18163568, 0.95105654, 0.25000006), (-0.09549153, 0.95105654, 0.29389268), (-9.209424e-9, 0.95105654, 0.30901703), (0.0954915, 0.95105654, 0.29389265), (0.18163563, 0.95105654, 0.25000003), (0.25, 0.95105654, 0.18163565), (0.29389265, 0.95105654, 0.095491506), (0.309017, 0.95105654, 0), (0.14877813, 0.98768836, -0.048340943), (0.12655823, 0.98768836, -0.09194993), (0.09194993, 0.98768836, -0.12655823), (0.048340935, 0.98768836, -0.14877811), (0, 0.98768836, -0.15643455), (-0.048340935, 0.98768836, -0.1487781), (-0.09194992, 0.98768836, -0.1265582), (-0.12655818, 0.98768836, -0.0919499), (-0.14877807, 0.98768836, -0.048340924), (-0.15643452, 0.98768836, 0), (-0.14877807, 0.98768836, 0.048340924), (-0.12655818, 0.98768836, 0.091949895), (-0.091949895, 0.98768836, 0.12655817), (-0.048340924, 0.98768836, 0.14877805), (-4.6621107e-9, 0.98768836, 0.15643449), (0.04834091, 0.98768836, 0.14877804), (0.09194988, 0.98768836, 0.12655815), (0.12655815, 0.98768836, 0.09194989), (0.14877804, 0.98768836, 0.048340913), (0.15643448, 0.98768836, 0), (0, -1, 0), (0, 1, 0)] - - def GeomSubset "upperHalf" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) + def GeomSubset "upperHalf" { uniform token elementType = "face" - uniform token familyName = "materialBind" int[] indices = [180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399] - rel material:binding = - } -} - -def Scope "mtl" -{ - def Material "UsdPreviewSurface1" - { - token outputs:surface.connect = - - def Shader "UsdPreviewSurface1" - { - uniform token info:id = "UsdPreviewSurface" - token outputs:surface - } } } From 706cf2006d226a7f50d8c702d610c5e7506bdb81 Mon Sep 17 00:00:00 2001 From: debloip Date: Tue, 2 Jul 2024 16:40:45 -0400 Subject: [PATCH 40/75] HYDRA-1058 : Adjust scene --- .../GeomSubsetsPickingTestScene.usda | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/test/testSamples/testGeomSubsetsPicking/GeomSubsetsPickingTestScene.usda b/test/testSamples/testGeomSubsetsPicking/GeomSubsetsPickingTestScene.usda index 15e0795a99..80df175299 100644 --- a/test/testSamples/testGeomSubsetsPicking/GeomSubsetsPickingTestScene.usda +++ b/test/testSamples/testGeomSubsetsPicking/GeomSubsetsPickingTestScene.usda @@ -9,8 +9,9 @@ def Xform "Root" { def Xform "CubeMeshXform" { - double3 xformOp:translate = (2, 0, 0) - uniform token[] xformOpOrder = ["xformOp:translate"] + double3 xformOp:translate = (-2, 0, 0) + float3 xformOp:scale = (2, 2, 2) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] def Mesh "CubeMesh" ( references = @./UpperHalfGeomSubsetCube.usda@ @@ -28,7 +29,7 @@ def Xform "Root" def Xform "SphereMeshXform" { - double3 xformOp:translate = (-2, 0, 0) + double3 xformOp:translate = (-2, 2, 0) uniform token[] xformOpOrder = ["xformOp:translate"] def Mesh "SphereMesh" ( @@ -47,7 +48,7 @@ def Xform "Root" def PointInstancer "SphereInstancer" { - point3f[] positions = [(0, 0, -4), (0, 2, -4)] + point3f[] positions = [(2, 0, 0), (2, 2, 0)] int[] protoIndices = [0, 0] rel prototypes = [ , From 9d3a68b1b0537eddfd171e354ce076d2acb9e510 Mon Sep 17 00:00:00 2001 From: debloip Date: Tue, 2 Jul 2024 16:44:57 -0400 Subject: [PATCH 41/75] HYDRA-1058 : Add test files --- .../mayaUsd/render/mayaToHydra/CMakeLists.txt | 1 + .../render/mayaToHydra/cpp/CMakeLists.txt | 1 + .../cpp/testGeomSubsetsPicking.cpp | 170 ++++++++++++++++++ .../mayaToHydra/cpp/testGeomSubsetsPicking.py | 130 ++++++++++++++ 4 files changed, 302 insertions(+) create mode 100644 test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp create mode 100644 test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py diff --git a/test/lib/mayaUsd/render/mayaToHydra/CMakeLists.txt b/test/lib/mayaUsd/render/mayaToHydra/CMakeLists.txt index 05c32f14c3..babccda109 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/CMakeLists.txt +++ b/test/lib/mayaUsd/render/mayaToHydra/CMakeLists.txt @@ -66,6 +66,7 @@ set(INTERACTIVE_TEST_SCRIPT_FILES cpp/testUsdPickKind.py cpp/testNurbsSurfaces.py cpp/testPointInstancingWireframeHighlight.py + cpp/testGeomSubsetsPicking.py ) #Add this test only if the MayaUsd_FOUND (so also MAYAUSDAPI_LIBRARY) has been found during compile time. diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/CMakeLists.txt b/test/lib/mayaUsd/render/mayaToHydra/cpp/CMakeLists.txt index 2d96417632..47dc315669 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/CMakeLists.txt +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/CMakeLists.txt @@ -41,6 +41,7 @@ target_sources(${TARGET_NAME} testUsdPicking.cpp testNurbsSurfaces.cpp testPointInstancingWireframeHighlight.cpp + testGeomSubsetsPicking.cpp ) # ----------------------------------------------------------------------------- diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp new file mode 100644 index 0000000000..ebc6feb61e --- /dev/null +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp @@ -0,0 +1,170 @@ +// Copyright 2024 Autodesk +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#include "testUtils.h" + +#include +#include +#include + +#include +#include + +#include + +PXR_NAMESPACE_USING_DIRECTIVE + +using namespace MayaHydra; + +namespace { + +FindPrimPredicate findPickPrimPredicate(const std::string& objectName, const TfToken& primType) +{ + return [objectName, + primType](const HdSceneIndexBaseRefPtr& sceneIndex, const SdfPath& primPath) -> bool { + return primPath.GetAsString().find(objectName) != std::string::npos + && sceneIndex->GetPrim(primPath).primType == primType; + }; +} + +void ensureSelected(const SceneIndexInspector& inspector, const FindPrimPredicate& primPredicate) +{ + // 2024-03-01 : Due to the extra "Lighted" hierarchy, it is possible for an object to be split + // into two prims, only one of which will be selected. We will tolerate this in the test, but + // we'll make sure there are at most two prims for that object. We'll also allow a prim not + // to have any selections, but at least one prim must be selected. + PrimEntriesVector primEntries = inspector.FindPrims(primPredicate); + ASSERT_GE(primEntries.size(), 1u); + ASSERT_LE(primEntries.size(), 2u); + + size_t nbSelectedPrims = 0; + for (const auto& primEntry : primEntries) { + HdSelectionsSchema selectionsSchema = HdSelectionsSchema::GetFromParent(primEntry.prim.dataSource); + if (selectionsSchema.GetNumElements() > 0u) { + ASSERT_EQ(selectionsSchema.GetNumElements(), 1u); + HdSelectionSchema selectionSchema = selectionsSchema.GetElement(0); + EXPECT_TRUE(selectionSchema.GetFullySelected()); + nbSelectedPrims++; + } + } + + ASSERT_GT(nbSelectedPrims, 0u); +} + +void ensureUnselected(const SceneIndexInspector& inspector, const FindPrimPredicate& primPredicate) +{ + PrimEntriesVector primEntries = inspector.FindPrims(primPredicate); + for (const auto& primEntry : primEntries) { + HdSelectionsSchema selectionsSchema + = HdSelectionsSchema::GetFromParent(primEntry.prim.dataSource); + ASSERT_EQ(selectionsSchema.IsDefined(), false); + } +} + +} // namespace + +TEST(TestPicking, pickObject) +{ + const SceneIndicesVector& sceneIndices = GetTerminalSceneIndices(); + ASSERT_GT(sceneIndices.size(), 0u); + SceneIndexInspector inspector(sceneIndices.front()); + + auto [argc, argv] = getTestingArgs(); + ASSERT_EQ(argc, 2); + const std::string objectName(argv[0]); + const TfToken primType(argv[1]); + + ensureUnselected(inspector, PrimNamePredicate(objectName)); + + PrimEntriesVector prims = inspector.FindPrims(findPickPrimPredicate(objectName, primType)); + ASSERT_EQ(prims.size(), 1u); + + M3dView active3dView = M3dView::active3dView(); + + auto primMouseCoords = getPrimMouseCoords(prims.front().prim, active3dView); + + mouseClick(Qt::MouseButton::LeftButton, active3dView.widget(), primMouseCoords); + + active3dView.refresh(); + + ensureSelected(inspector, PrimNamePredicate(objectName)); +} + +TEST(TestPicking, marqueeSelect) +{ + const SceneIndicesVector& sceneIndices = GetTerminalSceneIndices(); + ASSERT_GT(sceneIndices.size(), 0u); + SceneIndexInspector inspector(sceneIndices.front()); + + auto [argc, argv] = getTestingArgs(); + ASSERT_TRUE(argc % 2 == 0); // Each object is identified by both its name and a type + ASSERT_TRUE(argc >= 4); // We need at least two objects to do the marquee selection + std::vector> objectsToSelect; + for (int iArg = 0; iArg < argc; iArg += 2) { + objectsToSelect.push_back(std::make_pair(std::string(argv[iArg]), TfToken(argv[iArg + 1]))); + } + + for (const auto& object : objectsToSelect) { + ensureUnselected(inspector, PrimNamePredicate(object.first)); + } + + M3dView active3dView = M3dView::active3dView(); + + // We get the first prim's mouse coordinates and initialize the selection rectangle + // with them; we then iterate on the other prims and expand the selection rectangle + // to fit them all. + + // Get the first prim's mouse coords + PrimEntriesVector initialPrimEntries = inspector.FindPrims( + findPickPrimPredicate(objectsToSelect.front().first, objectsToSelect.front().second)); + ASSERT_EQ(initialPrimEntries.size(), 1u); + auto initialMouseCoords = getPrimMouseCoords(initialPrimEntries.front().prim, active3dView); + + // Initialize the selection rectangle + QPoint topLeftMouseCoords = initialMouseCoords; + QPoint bottomRightMouseCoords = initialMouseCoords; + + // Expand the selection rectangle to fit all prims + for (size_t iObject = 1; iObject < objectsToSelect.size(); iObject++) { + PrimEntriesVector objectPrims = inspector.FindPrims( + findPickPrimPredicate(objectsToSelect[iObject].first, objectsToSelect[iObject].second)); + ASSERT_EQ(objectPrims.size(), 1u); + auto objectMouseCoords = getPrimMouseCoords(objectPrims.front().prim, active3dView); + + if (objectMouseCoords.x() > bottomRightMouseCoords.x()) { + bottomRightMouseCoords.setX(objectMouseCoords.x()); + } + if (objectMouseCoords.x() < topLeftMouseCoords.x()) { + topLeftMouseCoords.setX(objectMouseCoords.x()); + } + if (objectMouseCoords.y() > topLeftMouseCoords.y()) { + topLeftMouseCoords.setY(objectMouseCoords.y()); + } + if (objectMouseCoords.y() < bottomRightMouseCoords.y()) { + bottomRightMouseCoords.setY(objectMouseCoords.y()); + } + } + + // Perform the marquee selection + mousePress(Qt::MouseButton::LeftButton, active3dView.widget(), topLeftMouseCoords); + mouseMoveTo(active3dView.widget(), bottomRightMouseCoords); + mouseRelease(Qt::MouseButton::LeftButton, active3dView.widget(), bottomRightMouseCoords); + + active3dView.refresh(); + + for (const auto& object : objectsToSelect) { + ensureSelected(inspector, PrimNamePredicate(object.first)); + } +} diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py new file mode 100644 index 0000000000..0d66f58808 --- /dev/null +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py @@ -0,0 +1,130 @@ +# Copyright 2024 Autodesk +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +import maya.cmds as cmds +import fixturesUtils +import mayaUtils +import mtohUtils + +from testUtils import PluginLoaded + +class TestPicking(mtohUtils.MayaHydraBaseTestCase): + # MayaHydraBaseTestCase.setUpClass requirement. + _file = __file__ + + def setUp(self): + super(TestPicking, self).setUp() + self.setHdStormRenderer() + cmds.refresh() + + def createMayaCube(self): + objectName = cmds.polyCube()[0] + cmds.move(1, 2, 3) + cmds.select(clear=True) + cmds.refresh() + return objectName + + def createMayaDirectionalLight(self): + shapeName = cmds.directionalLight() + objectName = cmds.listRelatives(shapeName, parent=True) + cmds.move(3, -2, 1) + cmds.select(clear=True) + cmds.modelEditor(mayaUtils.activeModelPanel(), edit=True, displayLights='all') + cmds.refresh() + return objectName + + def createUsdCubeFromMaya(self, stagePath): + objectName = cmds.polyCube()[0] + cmds.move(-4, 3, -2) + cmds.mayaUsdDuplicate(cmds.ls(objectName, long=True)[0], stagePath) + cmds.delete(objectName) + cmds.select(clear=True) + cmds.refresh() + return objectName + + def createUsdCube(self, stagePath): + import mayaUsd.lib + from pxr import UsdGeom + objectName = "USDCube" + stage = mayaUsd.lib.GetPrim(stagePath).GetStage() + xform = UsdGeom.Xform.Define(stage, "/" + objectName + "Xform") + xform.AddTranslateOp().Set(value=(6, 5, 4)) + UsdGeom.Cube.Define(stage, str(xform.GetPath()) + "/" + objectName) + cmds.select(clear=True) + cmds.refresh() + return objectName + + def createUsdRectLight(self, stagePath): + import mayaUsd.lib + from pxr import UsdGeom, UsdLux + objectName = "USDRectLight" + stage = mayaUsd.lib.GetPrim(stagePath).GetStage() + xform = UsdGeom.Xform.Define(stage, "/" + objectName + "Xform") + xform.AddTranslateOp().Set(value=(-6, -3.5, -1)) + UsdLux.RectLight.Define(stage, str(xform.GetPath()) + "/" + objectName) + cmds.select(clear=True) + cmds.modelEditor(mayaUtils.activeModelPanel(), edit=True, displayLights='all') + cmds.refresh() + return objectName + + def test_PickMayaMesh(self): + cubeObjectName = self.createMayaCube() + with PluginLoaded('mayaHydraCppTests'): + cmds.mayaHydraCppTest(cubeObjectName, "mesh", f="TestPicking.pickObject") + + def test_PickMayaLight(self): + directionalLightObjectName = self.createMayaDirectionalLight() + with PluginLoaded('mayaHydraCppTests'): + cmds.mayaHydraCppTest(directionalLightObjectName, "simpleLight", f="TestPicking.pickObject") + + def test_PickUsdMesh(self): + import mayaUsd_createStageWithNewLayer + stagePath = mayaUsd_createStageWithNewLayer.createStageWithNewLayer() + cubeObjectName = self.createUsdCubeFromMaya(stagePath) + with PluginLoaded('mayaHydraCppTests'): + cmds.mayaHydraCppTest(cubeObjectName, "mesh", f="TestPicking.pickObject") + + def test_PickUsdImplicitSurface(self): + import mayaUsd_createStageWithNewLayer + stagePath = mayaUsd_createStageWithNewLayer.createStageWithNewLayer() + cubeObjectName = self.createUsdCube(stagePath) + with PluginLoaded('mayaHydraCppTests'): + cmds.mayaHydraCppTest(cubeObjectName, "mesh", f="TestPicking.pickObject") + + def test_PickUsdLight(self): + import mayaUsd_createStageWithNewLayer + stagePath = mayaUsd_createStageWithNewLayer.createStageWithNewLayer() + rectLightObjectName = self.createUsdRectLight(stagePath) + with PluginLoaded('mayaHydraCppTests'): + cmds.mayaHydraCppTest(rectLightObjectName, "rectLight", f="TestPicking.pickObject") + + def test_MarqueeSelection(self): + import mayaUsd_createStageWithNewLayer + stagePath = mayaUsd_createStageWithNewLayer.createStageWithNewLayer() + mayaCubeName = self.createMayaCube() + mayaDirectionalLightName = self.createMayaDirectionalLight() + usdMayaCubeName = self.createUsdCubeFromMaya(stagePath) + usdCubeName = self.createUsdCube(stagePath) + usdRectLightName = self.createUsdRectLight(stagePath) + with PluginLoaded('mayaHydraCppTests'): + cmds.mayaHydraCppTest( + mayaCubeName, "mesh", + mayaDirectionalLightName, "simpleLight", + usdMayaCubeName, "mesh", + usdCubeName, "mesh", + usdRectLightName, "rectLight", + f="TestPicking.marqueeSelect") + +if __name__ == '__main__': + fixturesUtils.runTests(globals()) From b5a55985106b16baef668ae9af3466df04c2d464 Mon Sep 17 00:00:00 2001 From: debloip Date: Wed, 3 Jul 2024 10:08:17 -0400 Subject: [PATCH 42/75] HYDRA-1058 : Adjust test scene --- .../testGeomSubsetsPicking/GeomSubsetsPickingTestScene.usda | 4 ++-- .../testGeomSubsetsPicking/UpperHalfGeomSubsetCube.usda | 2 +- .../testGeomSubsetsPicking/UpperHalfGeomSubsetSphere.usda | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test/testSamples/testGeomSubsetsPicking/GeomSubsetsPickingTestScene.usda b/test/testSamples/testGeomSubsetsPicking/GeomSubsetsPickingTestScene.usda index 80df175299..1201b63c3d 100644 --- a/test/testSamples/testGeomSubsetsPicking/GeomSubsetsPickingTestScene.usda +++ b/test/testSamples/testGeomSubsetsPicking/GeomSubsetsPickingTestScene.usda @@ -17,7 +17,7 @@ def Xform "Root" references = @./UpperHalfGeomSubsetCube.usda@ ) { - over "upperHalf" ( + over "CubeUpperHalf" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { @@ -36,7 +36,7 @@ def Xform "Root" references = @./UpperHalfGeomSubsetSphere.usda@ ) { - over "upperHalf" ( + over "SphereUpperHalf" ( prepend apiSchemas = ["MaterialBindingAPI"] ) { diff --git a/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetCube.usda b/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetCube.usda index d0e93d3583..aaadc8c867 100644 --- a/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetCube.usda +++ b/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetCube.usda @@ -15,7 +15,7 @@ def Mesh "UpperHalfGeomSubsetCube" ( int[] faceVertexIndices = [0, 1, 12, 11, 1, 2, 13, 12, 2, 3, 14, 13, 3, 4, 15, 14, 4, 5, 16, 15, 5, 6, 17, 16, 6, 7, 18, 17, 7, 8, 19, 18, 8, 9, 20, 19, 9, 10, 21, 20, 11, 12, 23, 22, 12, 13, 24, 23, 13, 14, 25, 24, 14, 15, 26, 25, 15, 16, 27, 26, 16, 17, 28, 27, 17, 18, 29, 28, 18, 19, 30, 29, 19, 20, 31, 30, 20, 21, 32, 31, 22, 23, 34, 33, 23, 24, 35, 34, 24, 25, 36, 35, 25, 26, 37, 36, 26, 27, 38, 37, 27, 28, 39, 38, 28, 29, 40, 39, 29, 30, 41, 40, 30, 31, 42, 41, 31, 32, 43, 42, 33, 34, 45, 44, 34, 35, 46, 45, 35, 36, 47, 46, 36, 37, 48, 47, 37, 38, 49, 48, 38, 39, 50, 49, 39, 40, 51, 50, 40, 41, 52, 51, 41, 42, 53, 52, 42, 43, 54, 53, 44, 45, 56, 55, 45, 46, 57, 56, 46, 47, 58, 57, 47, 48, 59, 58, 48, 49, 60, 59, 49, 50, 61, 60, 50, 51, 62, 61, 51, 52, 63, 62, 52, 53, 64, 63, 53, 54, 65, 64, 55, 56, 67, 66, 56, 57, 68, 67, 57, 58, 69, 68, 58, 59, 70, 69, 59, 60, 71, 70, 60, 61, 72, 71, 61, 62, 73, 72, 62, 63, 74, 73, 63, 64, 75, 74, 64, 65, 76, 75, 66, 67, 78, 77, 67, 68, 79, 78, 68, 69, 80, 79, 69, 70, 81, 80, 70, 71, 82, 81, 71, 72, 83, 82, 72, 73, 84, 83, 73, 74, 85, 84, 74, 75, 86, 85, 75, 76, 87, 86, 77, 78, 89, 88, 78, 79, 90, 89, 79, 80, 91, 90, 80, 81, 92, 91, 81, 82, 93, 92, 82, 83, 94, 93, 83, 84, 95, 94, 84, 85, 96, 95, 85, 86, 97, 96, 86, 87, 98, 97, 88, 89, 100, 99, 89, 90, 101, 100, 90, 91, 102, 101, 91, 92, 103, 102, 92, 93, 104, 103, 93, 94, 105, 104, 94, 95, 106, 105, 95, 96, 107, 106, 96, 97, 108, 107, 97, 98, 109, 108, 99, 100, 111, 110, 100, 101, 112, 111, 101, 102, 113, 112, 102, 103, 114, 113, 103, 104, 115, 114, 104, 105, 116, 115, 105, 106, 117, 116, 106, 107, 118, 117, 107, 108, 119, 118, 108, 109, 120, 119, 110, 111, 122, 121, 111, 112, 123, 122, 112, 113, 124, 123, 113, 114, 125, 124, 114, 115, 126, 125, 115, 116, 127, 126, 116, 117, 128, 127, 117, 118, 129, 128, 118, 119, 130, 129, 119, 120, 131, 130, 121, 122, 133, 132, 122, 123, 134, 133, 123, 124, 135, 134, 124, 125, 136, 135, 125, 126, 137, 136, 126, 127, 138, 137, 127, 128, 139, 138, 128, 129, 140, 139, 129, 130, 141, 140, 130, 131, 142, 141, 132, 133, 144, 143, 133, 134, 145, 144, 134, 135, 146, 145, 135, 136, 147, 146, 136, 137, 148, 147, 137, 138, 149, 148, 138, 139, 150, 149, 139, 140, 151, 150, 140, 141, 152, 151, 141, 142, 153, 152, 143, 144, 155, 154, 144, 145, 156, 155, 145, 146, 157, 156, 146, 147, 158, 157, 147, 148, 159, 158, 148, 149, 160, 159, 149, 150, 161, 160, 150, 151, 162, 161, 151, 152, 163, 162, 152, 153, 164, 163, 154, 155, 166, 165, 155, 156, 167, 166, 156, 157, 168, 167, 157, 158, 169, 168, 158, 159, 170, 169, 159, 160, 171, 170, 160, 161, 172, 171, 161, 162, 173, 172, 162, 163, 174, 173, 163, 164, 175, 174, 165, 166, 177, 176, 166, 167, 178, 177, 167, 168, 179, 178, 168, 169, 180, 179, 169, 170, 181, 180, 170, 171, 182, 181, 171, 172, 183, 182, 172, 173, 184, 183, 173, 174, 185, 184, 174, 175, 186, 185, 176, 177, 188, 187, 177, 178, 189, 188, 178, 179, 190, 189, 179, 180, 191, 190, 180, 181, 192, 191, 181, 182, 193, 192, 182, 183, 194, 193, 183, 184, 195, 194, 184, 185, 196, 195, 185, 186, 197, 196, 187, 188, 199, 198, 188, 189, 200, 199, 189, 190, 201, 200, 190, 191, 202, 201, 191, 192, 203, 202, 192, 193, 204, 203, 193, 194, 205, 204, 194, 195, 206, 205, 195, 196, 207, 206, 196, 197, 208, 207, 198, 199, 210, 209, 199, 200, 211, 210, 200, 201, 212, 211, 201, 202, 213, 212, 202, 203, 214, 213, 203, 204, 215, 214, 204, 205, 216, 215, 205, 206, 217, 216, 206, 207, 218, 217, 207, 208, 219, 218, 209, 210, 221, 220, 210, 211, 222, 221, 211, 212, 223, 222, 212, 213, 224, 223, 213, 214, 225, 224, 214, 215, 226, 225, 215, 216, 227, 226, 216, 217, 228, 227, 217, 218, 229, 228, 218, 219, 230, 229, 220, 221, 232, 231, 221, 222, 233, 232, 222, 223, 234, 233, 223, 224, 235, 234, 224, 225, 236, 235, 225, 226, 237, 236, 226, 227, 238, 237, 227, 228, 239, 238, 228, 229, 240, 239, 229, 230, 241, 240, 231, 232, 243, 242, 232, 233, 244, 243, 233, 234, 245, 244, 234, 235, 246, 245, 235, 236, 247, 246, 236, 237, 248, 247, 237, 238, 249, 248, 238, 239, 250, 249, 239, 240, 251, 250, 240, 241, 252, 251, 242, 243, 254, 253, 243, 244, 255, 254, 244, 245, 256, 255, 245, 246, 257, 256, 246, 247, 258, 257, 247, 248, 259, 258, 248, 249, 260, 259, 249, 250, 261, 260, 250, 251, 262, 261, 251, 252, 263, 262, 253, 254, 265, 264, 254, 255, 266, 265, 255, 256, 267, 266, 256, 257, 268, 267, 257, 258, 269, 268, 258, 259, 270, 269, 259, 260, 271, 270, 260, 261, 272, 271, 261, 262, 273, 272, 262, 263, 274, 273, 264, 265, 276, 275, 265, 266, 277, 276, 266, 267, 278, 277, 267, 268, 279, 278, 268, 269, 280, 279, 269, 270, 281, 280, 270, 271, 282, 281, 271, 272, 283, 282, 272, 273, 284, 283, 273, 274, 285, 284, 275, 276, 287, 286, 276, 277, 288, 287, 277, 278, 289, 288, 278, 279, 290, 289, 279, 280, 291, 290, 280, 281, 292, 291, 281, 282, 293, 292, 282, 283, 294, 293, 283, 284, 295, 294, 284, 285, 296, 295, 286, 287, 298, 297, 287, 288, 299, 298, 288, 289, 300, 299, 289, 290, 301, 300, 290, 291, 302, 301, 291, 292, 303, 302, 292, 293, 304, 303, 293, 294, 305, 304, 294, 295, 306, 305, 295, 296, 307, 306, 297, 298, 309, 308, 298, 299, 310, 309, 299, 300, 311, 310, 300, 301, 312, 311, 301, 302, 313, 312, 302, 303, 314, 313, 303, 304, 315, 314, 304, 305, 316, 315, 305, 306, 317, 316, 306, 307, 318, 317, 308, 309, 320, 319, 309, 310, 321, 320, 310, 311, 322, 321, 311, 312, 323, 322, 312, 313, 324, 323, 313, 314, 325, 324, 314, 315, 326, 325, 315, 316, 327, 326, 316, 317, 328, 327, 317, 318, 329, 328, 319, 320, 331, 330, 320, 321, 332, 331, 321, 322, 333, 332, 322, 323, 334, 333, 323, 324, 335, 334, 324, 325, 336, 335, 325, 326, 337, 336, 326, 327, 338, 337, 327, 328, 339, 338, 328, 329, 340, 339, 330, 331, 342, 341, 331, 332, 343, 342, 332, 333, 344, 343, 333, 334, 345, 344, 334, 335, 346, 345, 335, 336, 347, 346, 336, 337, 348, 347, 337, 338, 349, 348, 338, 339, 350, 349, 339, 340, 351, 350, 341, 342, 353, 352, 342, 343, 354, 353, 343, 344, 355, 354, 344, 345, 356, 355, 345, 346, 357, 356, 346, 347, 358, 357, 347, 348, 359, 358, 348, 349, 360, 359, 349, 350, 361, 360, 350, 351, 362, 361, 352, 353, 364, 363, 353, 354, 365, 364, 354, 355, 366, 365, 355, 356, 367, 366, 356, 357, 368, 367, 357, 358, 369, 368, 358, 359, 370, 369, 359, 360, 371, 370, 360, 361, 372, 371, 361, 362, 373, 372, 363, 364, 375, 374, 364, 365, 376, 375, 365, 366, 377, 376, 366, 367, 378, 377, 367, 368, 379, 378, 368, 369, 380, 379, 369, 370, 381, 380, 370, 371, 382, 381, 371, 372, 383, 382, 372, 373, 384, 383, 374, 375, 386, 385, 375, 376, 387, 386, 376, 377, 388, 387, 377, 378, 389, 388, 378, 379, 390, 389, 379, 380, 391, 390, 380, 381, 392, 391, 381, 382, 393, 392, 382, 383, 394, 393, 383, 384, 395, 394, 385, 386, 397, 396, 386, 387, 398, 397, 387, 388, 399, 398, 388, 389, 400, 399, 389, 390, 401, 400, 390, 391, 402, 401, 391, 392, 403, 402, 392, 393, 404, 403, 393, 394, 405, 404, 394, 395, 406, 405, 396, 397, 408, 407, 397, 398, 409, 408, 398, 399, 410, 409, 399, 400, 411, 410, 400, 401, 412, 411, 401, 402, 413, 412, 402, 403, 414, 413, 403, 404, 415, 414, 404, 405, 416, 415, 405, 406, 417, 416, 407, 408, 419, 418, 408, 409, 420, 419, 409, 410, 421, 420, 410, 411, 422, 421, 411, 412, 423, 422, 412, 413, 424, 423, 413, 414, 425, 424, 414, 415, 426, 425, 415, 416, 427, 426, 416, 417, 428, 427, 418, 419, 430, 429, 419, 420, 431, 430, 420, 421, 432, 431, 421, 422, 433, 432, 422, 423, 434, 433, 423, 424, 435, 434, 424, 425, 436, 435, 425, 426, 437, 436, 426, 427, 438, 437, 427, 428, 439, 438, 429, 430, 1, 0, 430, 431, 2, 1, 431, 432, 3, 2, 432, 433, 4, 3, 433, 434, 5, 4, 434, 435, 6, 5, 435, 436, 7, 6, 436, 437, 8, 7, 437, 438, 9, 8, 438, 439, 10, 9, 351, 340, 329, 440, 362, 351, 440, 441, 373, 362, 441, 442, 384, 373, 442, 443, 395, 384, 443, 444, 406, 395, 444, 445, 417, 406, 445, 446, 428, 417, 446, 447, 439, 428, 447, 448, 10, 439, 448, 21, 440, 329, 318, 449, 441, 440, 449, 450, 442, 441, 450, 451, 443, 442, 451, 452, 444, 443, 452, 453, 445, 444, 453, 454, 446, 445, 454, 455, 447, 446, 455, 456, 448, 447, 456, 457, 21, 448, 457, 32, 449, 318, 307, 458, 450, 449, 458, 459, 451, 450, 459, 460, 452, 451, 460, 461, 453, 452, 461, 462, 454, 453, 462, 463, 455, 454, 463, 464, 456, 455, 464, 465, 457, 456, 465, 466, 32, 457, 466, 43, 458, 307, 296, 467, 459, 458, 467, 468, 460, 459, 468, 469, 461, 460, 469, 470, 462, 461, 470, 471, 463, 462, 471, 472, 464, 463, 472, 473, 465, 464, 473, 474, 466, 465, 474, 475, 43, 466, 475, 54, 467, 296, 285, 476, 468, 467, 476, 477, 469, 468, 477, 478, 470, 469, 478, 479, 471, 470, 479, 480, 472, 471, 480, 481, 473, 472, 481, 482, 474, 473, 482, 483, 475, 474, 483, 484, 54, 475, 484, 65, 476, 285, 274, 485, 477, 476, 485, 486, 478, 477, 486, 487, 479, 478, 487, 488, 480, 479, 488, 489, 481, 480, 489, 490, 482, 481, 490, 491, 483, 482, 491, 492, 484, 483, 492, 493, 65, 484, 493, 76, 485, 274, 263, 494, 486, 485, 494, 495, 487, 486, 495, 496, 488, 487, 496, 497, 489, 488, 497, 498, 490, 489, 498, 499, 491, 490, 499, 500, 492, 491, 500, 501, 493, 492, 501, 502, 76, 493, 502, 87, 494, 263, 252, 503, 495, 494, 503, 504, 496, 495, 504, 505, 497, 496, 505, 506, 498, 497, 506, 507, 499, 498, 507, 508, 500, 499, 508, 509, 501, 500, 509, 510, 502, 501, 510, 511, 87, 502, 511, 98, 503, 252, 241, 512, 504, 503, 512, 513, 505, 504, 513, 514, 506, 505, 514, 515, 507, 506, 515, 516, 508, 507, 516, 517, 509, 508, 517, 518, 510, 509, 518, 519, 511, 510, 519, 520, 98, 511, 520, 109, 512, 241, 230, 219, 513, 512, 219, 208, 514, 513, 208, 197, 515, 514, 197, 186, 516, 515, 186, 175, 517, 516, 175, 164, 518, 517, 164, 153, 519, 518, 153, 142, 520, 519, 142, 131, 109, 520, 131, 120, 330, 341, 521, 319, 341, 352, 522, 521, 352, 363, 523, 522, 363, 374, 524, 523, 374, 385, 525, 524, 385, 396, 526, 525, 396, 407, 527, 526, 407, 418, 528, 527, 418, 429, 529, 528, 429, 0, 11, 529, 319, 521, 530, 308, 521, 522, 531, 530, 522, 523, 532, 531, 523, 524, 533, 532, 524, 525, 534, 533, 525, 526, 535, 534, 526, 527, 536, 535, 527, 528, 537, 536, 528, 529, 538, 537, 529, 11, 22, 538, 308, 530, 539, 297, 530, 531, 540, 539, 531, 532, 541, 540, 532, 533, 542, 541, 533, 534, 543, 542, 534, 535, 544, 543, 535, 536, 545, 544, 536, 537, 546, 545, 537, 538, 547, 546, 538, 22, 33, 547, 297, 539, 548, 286, 539, 540, 549, 548, 540, 541, 550, 549, 541, 542, 551, 550, 542, 543, 552, 551, 543, 544, 553, 552, 544, 545, 554, 553, 545, 546, 555, 554, 546, 547, 556, 555, 547, 33, 44, 556, 286, 548, 557, 275, 548, 549, 558, 557, 549, 550, 559, 558, 550, 551, 560, 559, 551, 552, 561, 560, 552, 553, 562, 561, 553, 554, 563, 562, 554, 555, 564, 563, 555, 556, 565, 564, 556, 44, 55, 565, 275, 557, 566, 264, 557, 558, 567, 566, 558, 559, 568, 567, 559, 560, 569, 568, 560, 561, 570, 569, 561, 562, 571, 570, 562, 563, 572, 571, 563, 564, 573, 572, 564, 565, 574, 573, 565, 55, 66, 574, 264, 566, 575, 253, 566, 567, 576, 575, 567, 568, 577, 576, 568, 569, 578, 577, 569, 570, 579, 578, 570, 571, 580, 579, 571, 572, 581, 580, 572, 573, 582, 581, 573, 574, 583, 582, 574, 66, 77, 583, 253, 575, 584, 242, 575, 576, 585, 584, 576, 577, 586, 585, 577, 578, 587, 586, 578, 579, 588, 587, 579, 580, 589, 588, 580, 581, 590, 589, 581, 582, 591, 590, 582, 583, 592, 591, 583, 77, 88, 592, 242, 584, 593, 231, 584, 585, 594, 593, 585, 586, 595, 594, 586, 587, 596, 595, 587, 588, 597, 596, 588, 589, 598, 597, 589, 590, 599, 598, 590, 591, 600, 599, 591, 592, 601, 600, 592, 88, 99, 601, 231, 593, 209, 220, 593, 594, 198, 209, 594, 595, 187, 198, 595, 596, 176, 187, 596, 597, 165, 176, 597, 598, 154, 165, 598, 599, 143, 154, 599, 600, 132, 143, 600, 601, 121, 132, 601, 99, 110, 121] point3f[] points = [(-0.5, -0.5, 0.5), (-0.4, -0.5, 0.5), (-0.3, -0.5, 0.5), (-0.20000002, -0.5, 0.5), (-0.10000002, -0.5, 0.5), (-1.4901161e-8, -0.5, 0.5), (0.09999999, -0.5, 0.5), (0.19999999, -0.5, 0.5), (0.29999998, -0.5, 0.5), (0.39999998, -0.5, 0.5), (0.49999997, -0.5, 0.5), (-0.5, -0.4, 0.5), (-0.4, -0.4, 0.5), (-0.3, -0.4, 0.5), (-0.20000002, -0.4, 0.5), (-0.10000002, -0.4, 0.5), (-1.4901161e-8, -0.4, 0.5), (0.09999999, -0.4, 0.5), (0.19999999, -0.4, 0.5), (0.29999998, -0.4, 0.5), (0.39999998, -0.4, 0.5), (0.49999997, -0.4, 0.5), (-0.5, -0.3, 0.5), (-0.4, -0.3, 0.5), (-0.3, -0.3, 0.5), (-0.20000002, -0.3, 0.5), (-0.10000002, -0.3, 0.5), (-1.4901161e-8, -0.3, 0.5), (0.09999999, -0.3, 0.5), (0.19999999, -0.3, 0.5), (0.29999998, -0.3, 0.5), (0.39999998, -0.3, 0.5), (0.49999997, -0.3, 0.5), (-0.5, -0.20000002, 0.5), (-0.4, -0.20000002, 0.5), (-0.3, -0.20000002, 0.5), (-0.20000002, -0.20000002, 0.5), (-0.10000002, -0.20000002, 0.5), (-1.4901161e-8, -0.20000002, 0.5), (0.09999999, -0.20000002, 0.5), (0.19999999, -0.20000002, 0.5), (0.29999998, -0.20000002, 0.5), (0.39999998, -0.20000002, 0.5), (0.49999997, -0.20000002, 0.5), (-0.5, -0.10000002, 0.5), (-0.4, -0.10000002, 0.5), (-0.3, -0.10000002, 0.5), (-0.20000002, -0.10000002, 0.5), (-0.10000002, -0.10000002, 0.5), (-1.4901161e-8, -0.10000002, 0.5), (0.09999999, -0.10000002, 0.5), (0.19999999, -0.10000002, 0.5), (0.29999998, -0.10000002, 0.5), (0.39999998, -0.10000002, 0.5), (0.49999997, -0.10000002, 0.5), (-0.5, -1.4901161e-8, 0.5), (-0.4, -1.4901161e-8, 0.5), (-0.3, -1.4901161e-8, 0.5), (-0.20000002, -1.4901161e-8, 0.5), (-0.10000002, -1.4901161e-8, 0.5), (-1.4901161e-8, -1.4901161e-8, 0.5), (0.09999999, -1.4901161e-8, 0.5), (0.19999999, -1.4901161e-8, 0.5), (0.29999998, -1.4901161e-8, 0.5), (0.39999998, -1.4901161e-8, 0.5), (0.49999997, -1.4901161e-8, 0.5), (-0.5, 0.09999999, 0.5), (-0.4, 0.09999999, 0.5), (-0.3, 0.09999999, 0.5), (-0.20000002, 0.09999999, 0.5), (-0.10000002, 0.09999999, 0.5), (-1.4901161e-8, 0.09999999, 0.5), (0.09999999, 0.09999999, 0.5), (0.19999999, 0.09999999, 0.5), (0.29999998, 0.09999999, 0.5), (0.39999998, 0.09999999, 0.5), (0.49999997, 0.09999999, 0.5), (-0.5, 0.19999999, 0.5), (-0.4, 0.19999999, 0.5), (-0.3, 0.19999999, 0.5), (-0.20000002, 0.19999999, 0.5), (-0.10000002, 0.19999999, 0.5), (-1.4901161e-8, 0.19999999, 0.5), (0.09999999, 0.19999999, 0.5), (0.19999999, 0.19999999, 0.5), (0.29999998, 0.19999999, 0.5), (0.39999998, 0.19999999, 0.5), (0.49999997, 0.19999999, 0.5), (-0.5, 0.29999998, 0.5), (-0.4, 0.29999998, 0.5), (-0.3, 0.29999998, 0.5), (-0.20000002, 0.29999998, 0.5), (-0.10000002, 0.29999998, 0.5), (-1.4901161e-8, 0.29999998, 0.5), (0.09999999, 0.29999998, 0.5), (0.19999999, 0.29999998, 0.5), (0.29999998, 0.29999998, 0.5), (0.39999998, 0.29999998, 0.5), (0.49999997, 0.29999998, 0.5), (-0.5, 0.39999998, 0.5), (-0.4, 0.39999998, 0.5), (-0.3, 0.39999998, 0.5), (-0.20000002, 0.39999998, 0.5), (-0.10000002, 0.39999998, 0.5), (-1.4901161e-8, 0.39999998, 0.5), (0.09999999, 0.39999998, 0.5), (0.19999999, 0.39999998, 0.5), (0.29999998, 0.39999998, 0.5), (0.39999998, 0.39999998, 0.5), (0.49999997, 0.39999998, 0.5), (-0.5, 0.5, 0.5), (-0.4, 0.5, 0.5), (-0.3, 0.5, 0.5), (-0.20000002, 0.5, 0.5), (-0.10000002, 0.5, 0.5), (-1.4901161e-8, 0.5, 0.5), (0.09999999, 0.5, 0.5), (0.19999999, 0.5, 0.5), (0.29999998, 0.5, 0.5), (0.39999998, 0.5, 0.5), (0.49999997, 0.5, 0.5), (-0.5, 0.5, 0.4), (-0.4, 0.5, 0.4), (-0.3, 0.5, 0.4), (-0.20000002, 0.5, 0.4), (-0.10000002, 0.5, 0.4), (-1.4901161e-8, 0.5, 0.4), (0.09999999, 0.5, 0.4), (0.19999999, 0.5, 0.4), (0.29999998, 0.5, 0.4), (0.39999998, 0.5, 0.4), (0.49999997, 0.5, 0.4), (-0.5, 0.5, 0.3), (-0.4, 0.5, 0.3), (-0.3, 0.5, 0.3), (-0.20000002, 0.5, 0.3), (-0.10000002, 0.5, 0.3), (-1.4901161e-8, 0.5, 0.3), (0.09999999, 0.5, 0.3), (0.19999999, 0.5, 0.3), (0.29999998, 0.5, 0.3), (0.39999998, 0.5, 0.3), (0.49999997, 0.5, 0.3), (-0.5, 0.5, 0.20000002), (-0.4, 0.5, 0.20000002), (-0.3, 0.5, 0.20000002), (-0.20000002, 0.5, 0.20000002), (-0.10000002, 0.5, 0.20000002), (-1.4901161e-8, 0.5, 0.20000002), (0.09999999, 0.5, 0.20000002), (0.19999999, 0.5, 0.20000002), (0.29999998, 0.5, 0.20000002), (0.39999998, 0.5, 0.20000002), (0.49999997, 0.5, 0.20000002), (-0.5, 0.5, 0.10000002), (-0.4, 0.5, 0.10000002), (-0.3, 0.5, 0.10000002), (-0.20000002, 0.5, 0.10000002), (-0.10000002, 0.5, 0.10000002), (-1.4901161e-8, 0.5, 0.10000002), (0.09999999, 0.5, 0.10000002), (0.19999999, 0.5, 0.10000002), (0.29999998, 0.5, 0.10000002), (0.39999998, 0.5, 0.10000002), (0.49999997, 0.5, 0.10000002), (-0.5, 0.5, 1.4901161e-8), (-0.4, 0.5, 1.4901161e-8), (-0.3, 0.5, 1.4901161e-8), (-0.20000002, 0.5, 1.4901161e-8), (-0.10000002, 0.5, 1.4901161e-8), (-1.4901161e-8, 0.5, 1.4901161e-8), (0.09999999, 0.5, 1.4901161e-8), (0.19999999, 0.5, 1.4901161e-8), (0.29999998, 0.5, 1.4901161e-8), (0.39999998, 0.5, 1.4901161e-8), (0.49999997, 0.5, 1.4901161e-8), (-0.5, 0.5, -0.09999999), (-0.4, 0.5, -0.09999999), (-0.3, 0.5, -0.09999999), (-0.20000002, 0.5, -0.09999999), (-0.10000002, 0.5, -0.09999999), (-1.4901161e-8, 0.5, -0.09999999), (0.09999999, 0.5, -0.09999999), (0.19999999, 0.5, -0.09999999), (0.29999998, 0.5, -0.09999999), (0.39999998, 0.5, -0.09999999), (0.49999997, 0.5, -0.09999999), (-0.5, 0.5, -0.19999999), (-0.4, 0.5, -0.19999999), (-0.3, 0.5, -0.19999999), (-0.20000002, 0.5, -0.19999999), (-0.10000002, 0.5, -0.19999999), (-1.4901161e-8, 0.5, -0.19999999), (0.09999999, 0.5, -0.19999999), (0.19999999, 0.5, -0.19999999), (0.29999998, 0.5, -0.19999999), (0.39999998, 0.5, -0.19999999), (0.49999997, 0.5, -0.19999999), (-0.5, 0.5, -0.29999998), (-0.4, 0.5, -0.29999998), (-0.3, 0.5, -0.29999998), (-0.20000002, 0.5, -0.29999998), (-0.10000002, 0.5, -0.29999998), (-1.4901161e-8, 0.5, -0.29999998), (0.09999999, 0.5, -0.29999998), (0.19999999, 0.5, -0.29999998), (0.29999998, 0.5, -0.29999998), (0.39999998, 0.5, -0.29999998), (0.49999997, 0.5, -0.29999998), (-0.5, 0.5, -0.39999998), (-0.4, 0.5, -0.39999998), (-0.3, 0.5, -0.39999998), (-0.20000002, 0.5, -0.39999998), (-0.10000002, 0.5, -0.39999998), (-1.4901161e-8, 0.5, -0.39999998), (0.09999999, 0.5, -0.39999998), (0.19999999, 0.5, -0.39999998), (0.29999998, 0.5, -0.39999998), (0.39999998, 0.5, -0.39999998), (0.49999997, 0.5, -0.39999998), (-0.5, 0.5, -0.5), (-0.4, 0.5, -0.5), (-0.3, 0.5, -0.5), (-0.20000002, 0.5, -0.5), (-0.10000002, 0.5, -0.5), (-1.4901161e-8, 0.5, -0.5), (0.09999999, 0.5, -0.5), (0.19999999, 0.5, -0.5), (0.29999998, 0.5, -0.5), (0.39999998, 0.5, -0.5), (0.49999997, 0.5, -0.5), (-0.5, 0.4, -0.5), (-0.4, 0.4, -0.5), (-0.3, 0.4, -0.5), (-0.20000002, 0.4, -0.5), (-0.10000002, 0.4, -0.5), (-1.4901161e-8, 0.4, -0.5), (0.09999999, 0.4, -0.5), (0.19999999, 0.4, -0.5), (0.29999998, 0.4, -0.5), (0.39999998, 0.4, -0.5), (0.49999997, 0.4, -0.5), (-0.5, 0.3, -0.5), (-0.4, 0.3, -0.5), (-0.3, 0.3, -0.5), (-0.20000002, 0.3, -0.5), (-0.10000002, 0.3, -0.5), (-1.4901161e-8, 0.3, -0.5), (0.09999999, 0.3, -0.5), (0.19999999, 0.3, -0.5), (0.29999998, 0.3, -0.5), (0.39999998, 0.3, -0.5), (0.49999997, 0.3, -0.5), (-0.5, 0.20000002, -0.5), (-0.4, 0.20000002, -0.5), (-0.3, 0.20000002, -0.5), (-0.20000002, 0.20000002, -0.5), (-0.10000002, 0.20000002, -0.5), (-1.4901161e-8, 0.20000002, -0.5), (0.09999999, 0.20000002, -0.5), (0.19999999, 0.20000002, -0.5), (0.29999998, 0.20000002, -0.5), (0.39999998, 0.20000002, -0.5), (0.49999997, 0.20000002, -0.5), (-0.5, 0.10000002, -0.5), (-0.4, 0.10000002, -0.5), (-0.3, 0.10000002, -0.5), (-0.20000002, 0.10000002, -0.5), (-0.10000002, 0.10000002, -0.5), (-1.4901161e-8, 0.10000002, -0.5), (0.09999999, 0.10000002, -0.5), (0.19999999, 0.10000002, -0.5), (0.29999998, 0.10000002, -0.5), (0.39999998, 0.10000002, -0.5), (0.49999997, 0.10000002, -0.5), (-0.5, 1.4901161e-8, -0.5), (-0.4, 1.4901161e-8, -0.5), (-0.3, 1.4901161e-8, -0.5), (-0.20000002, 1.4901161e-8, -0.5), (-0.10000002, 1.4901161e-8, -0.5), (-1.4901161e-8, 1.4901161e-8, -0.5), (0.09999999, 1.4901161e-8, -0.5), (0.19999999, 1.4901161e-8, -0.5), (0.29999998, 1.4901161e-8, -0.5), (0.39999998, 1.4901161e-8, -0.5), (0.49999997, 1.4901161e-8, -0.5), (-0.5, -0.09999999, -0.5), (-0.4, -0.09999999, -0.5), (-0.3, -0.09999999, -0.5), (-0.20000002, -0.09999999, -0.5), (-0.10000002, -0.09999999, -0.5), (-1.4901161e-8, -0.09999999, -0.5), (0.09999999, -0.09999999, -0.5), (0.19999999, -0.09999999, -0.5), (0.29999998, -0.09999999, -0.5), (0.39999998, -0.09999999, -0.5), (0.49999997, -0.09999999, -0.5), (-0.5, -0.19999999, -0.5), (-0.4, -0.19999999, -0.5), (-0.3, -0.19999999, -0.5), (-0.20000002, -0.19999999, -0.5), (-0.10000002, -0.19999999, -0.5), (-1.4901161e-8, -0.19999999, -0.5), (0.09999999, -0.19999999, -0.5), (0.19999999, -0.19999999, -0.5), (0.29999998, -0.19999999, -0.5), (0.39999998, -0.19999999, -0.5), (0.49999997, -0.19999999, -0.5), (-0.5, -0.29999998, -0.5), (-0.4, -0.29999998, -0.5), (-0.3, -0.29999998, -0.5), (-0.20000002, -0.29999998, -0.5), (-0.10000002, -0.29999998, -0.5), (-1.4901161e-8, -0.29999998, -0.5), (0.09999999, -0.29999998, -0.5), (0.19999999, -0.29999998, -0.5), (0.29999998, -0.29999998, -0.5), (0.39999998, -0.29999998, -0.5), (0.49999997, -0.29999998, -0.5), (-0.5, -0.39999998, -0.5), (-0.4, -0.39999998, -0.5), (-0.3, -0.39999998, -0.5), (-0.20000002, -0.39999998, -0.5), (-0.10000002, -0.39999998, -0.5), (-1.4901161e-8, -0.39999998, -0.5), (0.09999999, -0.39999998, -0.5), (0.19999999, -0.39999998, -0.5), (0.29999998, -0.39999998, -0.5), (0.39999998, -0.39999998, -0.5), (0.49999997, -0.39999998, -0.5), (-0.5, -0.5, -0.5), (-0.4, -0.5, -0.5), (-0.3, -0.5, -0.5), (-0.20000002, -0.5, -0.5), (-0.10000002, -0.5, -0.5), (-1.4901161e-8, -0.5, -0.5), (0.09999999, -0.5, -0.5), (0.19999999, -0.5, -0.5), (0.29999998, -0.5, -0.5), (0.39999998, -0.5, -0.5), (0.49999997, -0.5, -0.5), (-0.5, -0.5, -0.4), (-0.4, -0.5, -0.4), (-0.3, -0.5, -0.4), (-0.20000002, -0.5, -0.4), (-0.10000002, -0.5, -0.4), (-1.4901161e-8, -0.5, -0.4), (0.09999999, -0.5, -0.4), (0.19999999, -0.5, -0.4), (0.29999998, -0.5, -0.4), (0.39999998, -0.5, -0.4), (0.49999997, -0.5, -0.4), (-0.5, -0.5, -0.3), (-0.4, -0.5, -0.3), (-0.3, -0.5, -0.3), (-0.20000002, -0.5, -0.3), (-0.10000002, -0.5, -0.3), (-1.4901161e-8, -0.5, -0.3), (0.09999999, -0.5, -0.3), (0.19999999, -0.5, -0.3), (0.29999998, -0.5, -0.3), (0.39999998, -0.5, -0.3), (0.49999997, -0.5, -0.3), (-0.5, -0.5, -0.20000002), (-0.4, -0.5, -0.20000002), (-0.3, -0.5, -0.20000002), (-0.20000002, -0.5, -0.20000002), (-0.10000002, -0.5, -0.20000002), (-1.4901161e-8, -0.5, -0.20000002), (0.09999999, -0.5, -0.20000002), (0.19999999, -0.5, -0.20000002), (0.29999998, -0.5, -0.20000002), (0.39999998, -0.5, -0.20000002), (0.49999997, -0.5, -0.20000002), (-0.5, -0.5, -0.10000002), (-0.4, -0.5, -0.10000002), (-0.3, -0.5, -0.10000002), (-0.20000002, -0.5, -0.10000002), (-0.10000002, -0.5, -0.10000002), (-1.4901161e-8, -0.5, -0.10000002), (0.09999999, -0.5, -0.10000002), (0.19999999, -0.5, -0.10000002), (0.29999998, -0.5, -0.10000002), (0.39999998, -0.5, -0.10000002), (0.49999997, -0.5, -0.10000002), (-0.5, -0.5, -1.4901161e-8), (-0.4, -0.5, -1.4901161e-8), (-0.3, -0.5, -1.4901161e-8), (-0.20000002, -0.5, -1.4901161e-8), (-0.10000002, -0.5, -1.4901161e-8), (-1.4901161e-8, -0.5, -1.4901161e-8), (0.09999999, -0.5, -1.4901161e-8), (0.19999999, -0.5, -1.4901161e-8), (0.29999998, -0.5, -1.4901161e-8), (0.39999998, -0.5, -1.4901161e-8), (0.49999997, -0.5, -1.4901161e-8), (-0.5, -0.5, 0.09999999), (-0.4, -0.5, 0.09999999), (-0.3, -0.5, 0.09999999), (-0.20000002, -0.5, 0.09999999), (-0.10000002, -0.5, 0.09999999), (-1.4901161e-8, -0.5, 0.09999999), (0.09999999, -0.5, 0.09999999), (0.19999999, -0.5, 0.09999999), (0.29999998, -0.5, 0.09999999), (0.39999998, -0.5, 0.09999999), (0.49999997, -0.5, 0.09999999), (-0.5, -0.5, 0.19999999), (-0.4, -0.5, 0.19999999), (-0.3, -0.5, 0.19999999), (-0.20000002, -0.5, 0.19999999), (-0.10000002, -0.5, 0.19999999), (-1.4901161e-8, -0.5, 0.19999999), (0.09999999, -0.5, 0.19999999), (0.19999999, -0.5, 0.19999999), (0.29999998, -0.5, 0.19999999), (0.39999998, -0.5, 0.19999999), (0.49999997, -0.5, 0.19999999), (-0.5, -0.5, 0.29999998), (-0.4, -0.5, 0.29999998), (-0.3, -0.5, 0.29999998), (-0.20000002, -0.5, 0.29999998), (-0.10000002, -0.5, 0.29999998), (-1.4901161e-8, -0.5, 0.29999998), (0.09999999, -0.5, 0.29999998), (0.19999999, -0.5, 0.29999998), (0.29999998, -0.5, 0.29999998), (0.39999998, -0.5, 0.29999998), (0.49999997, -0.5, 0.29999998), (-0.5, -0.5, 0.39999998), (-0.4, -0.5, 0.39999998), (-0.3, -0.5, 0.39999998), (-0.20000002, -0.5, 0.39999998), (-0.10000002, -0.5, 0.39999998), (-1.4901161e-8, -0.5, 0.39999998), (0.09999999, -0.5, 0.39999998), (0.19999999, -0.5, 0.39999998), (0.29999998, -0.5, 0.39999998), (0.39999998, -0.5, 0.39999998), (0.49999997, -0.5, 0.39999998), (0.5, -0.4, -0.4), (0.5, -0.4, -0.3), (0.5, -0.4, -0.20000002), (0.5, -0.4, -0.10000002), (0.5, -0.4, -1.4901161e-8), (0.5, -0.4, 0.09999999), (0.5, -0.4, 0.19999999), (0.5, -0.4, 0.29999998), (0.5, -0.4, 0.39999998), (0.5, -0.3, -0.4), (0.5, -0.3, -0.3), (0.5, -0.3, -0.20000002), (0.5, -0.3, -0.10000002), (0.5, -0.3, -1.4901161e-8), (0.5, -0.3, 0.09999999), (0.5, -0.3, 0.19999999), (0.5, -0.3, 0.29999998), (0.5, -0.3, 0.39999998), (0.5, -0.20000002, -0.4), (0.5, -0.20000002, -0.3), (0.5, -0.20000002, -0.20000002), (0.5, -0.20000002, -0.10000002), (0.5, -0.20000002, -1.4901161e-8), (0.5, -0.20000002, 0.09999999), (0.5, -0.20000002, 0.19999999), (0.5, -0.20000002, 0.29999998), (0.5, -0.20000002, 0.39999998), (0.5, -0.10000002, -0.4), (0.5, -0.10000002, -0.3), (0.5, -0.10000002, -0.20000002), (0.5, -0.10000002, -0.10000002), (0.5, -0.10000002, -1.4901161e-8), (0.5, -0.10000002, 0.09999999), (0.5, -0.10000002, 0.19999999), (0.5, -0.10000002, 0.29999998), (0.5, -0.10000002, 0.39999998), (0.5, -1.4901161e-8, -0.4), (0.5, -1.4901161e-8, -0.3), (0.5, -1.4901161e-8, -0.20000002), (0.5, -1.4901161e-8, -0.10000002), (0.5, -1.4901161e-8, -1.4901161e-8), (0.5, -1.4901161e-8, 0.09999999), (0.5, -1.4901161e-8, 0.19999999), (0.5, -1.4901161e-8, 0.29999998), (0.5, -1.4901161e-8, 0.39999998), (0.5, 0.09999999, -0.4), (0.5, 0.09999999, -0.3), (0.5, 0.09999999, -0.20000002), (0.5, 0.09999999, -0.10000002), (0.5, 0.09999999, -1.4901161e-8), (0.5, 0.09999999, 0.09999999), (0.5, 0.09999999, 0.19999999), (0.5, 0.09999999, 0.29999998), (0.5, 0.09999999, 0.39999998), (0.5, 0.19999999, -0.4), (0.5, 0.19999999, -0.3), (0.5, 0.19999999, -0.20000002), (0.5, 0.19999999, -0.10000002), (0.5, 0.19999999, -1.4901161e-8), (0.5, 0.19999999, 0.09999999), (0.5, 0.19999999, 0.19999999), (0.5, 0.19999999, 0.29999998), (0.5, 0.19999999, 0.39999998), (0.5, 0.29999998, -0.4), (0.5, 0.29999998, -0.3), (0.5, 0.29999998, -0.20000002), (0.5, 0.29999998, -0.10000002), (0.5, 0.29999998, -1.4901161e-8), (0.5, 0.29999998, 0.09999999), (0.5, 0.29999998, 0.19999999), (0.5, 0.29999998, 0.29999998), (0.5, 0.29999998, 0.39999998), (0.5, 0.39999998, -0.4), (0.5, 0.39999998, -0.3), (0.5, 0.39999998, -0.20000002), (0.5, 0.39999998, -0.10000002), (0.5, 0.39999998, -1.4901161e-8), (0.5, 0.39999998, 0.09999999), (0.5, 0.39999998, 0.19999999), (0.5, 0.39999998, 0.29999998), (0.5, 0.39999998, 0.39999998), (-0.5, -0.4, -0.4), (-0.5, -0.4, -0.3), (-0.5, -0.4, -0.20000002), (-0.5, -0.4, -0.10000002), (-0.5, -0.4, -1.4901161e-8), (-0.5, -0.4, 0.09999999), (-0.5, -0.4, 0.19999999), (-0.5, -0.4, 0.29999998), (-0.5, -0.4, 0.39999998), (-0.5, -0.3, -0.4), (-0.5, -0.3, -0.3), (-0.5, -0.3, -0.20000002), (-0.5, -0.3, -0.10000002), (-0.5, -0.3, -1.4901161e-8), (-0.5, -0.3, 0.09999999), (-0.5, -0.3, 0.19999999), (-0.5, -0.3, 0.29999998), (-0.5, -0.3, 0.39999998), (-0.5, -0.20000002, -0.4), (-0.5, -0.20000002, -0.3), (-0.5, -0.20000002, -0.20000002), (-0.5, -0.20000002, -0.10000002), (-0.5, -0.20000002, -1.4901161e-8), (-0.5, -0.20000002, 0.09999999), (-0.5, -0.20000002, 0.19999999), (-0.5, -0.20000002, 0.29999998), (-0.5, -0.20000002, 0.39999998), (-0.5, -0.10000002, -0.4), (-0.5, -0.10000002, -0.3), (-0.5, -0.10000002, -0.20000002), (-0.5, -0.10000002, -0.10000002), (-0.5, -0.10000002, -1.4901161e-8), (-0.5, -0.10000002, 0.09999999), (-0.5, -0.10000002, 0.19999999), (-0.5, -0.10000002, 0.29999998), (-0.5, -0.10000002, 0.39999998), (-0.5, -1.4901161e-8, -0.4), (-0.5, -1.4901161e-8, -0.3), (-0.5, -1.4901161e-8, -0.20000002), (-0.5, -1.4901161e-8, -0.10000002), (-0.5, -1.4901161e-8, -1.4901161e-8), (-0.5, -1.4901161e-8, 0.09999999), (-0.5, -1.4901161e-8, 0.19999999), (-0.5, -1.4901161e-8, 0.29999998), (-0.5, -1.4901161e-8, 0.39999998), (-0.5, 0.09999999, -0.4), (-0.5, 0.09999999, -0.3), (-0.5, 0.09999999, -0.20000002), (-0.5, 0.09999999, -0.10000002), (-0.5, 0.09999999, -1.4901161e-8), (-0.5, 0.09999999, 0.09999999), (-0.5, 0.09999999, 0.19999999), (-0.5, 0.09999999, 0.29999998), (-0.5, 0.09999999, 0.39999998), (-0.5, 0.19999999, -0.4), (-0.5, 0.19999999, -0.3), (-0.5, 0.19999999, -0.20000002), (-0.5, 0.19999999, -0.10000002), (-0.5, 0.19999999, -1.4901161e-8), (-0.5, 0.19999999, 0.09999999), (-0.5, 0.19999999, 0.19999999), (-0.5, 0.19999999, 0.29999998), (-0.5, 0.19999999, 0.39999998), (-0.5, 0.29999998, -0.4), (-0.5, 0.29999998, -0.3), (-0.5, 0.29999998, -0.20000002), (-0.5, 0.29999998, -0.10000002), (-0.5, 0.29999998, -1.4901161e-8), (-0.5, 0.29999998, 0.09999999), (-0.5, 0.29999998, 0.19999999), (-0.5, 0.29999998, 0.29999998), (-0.5, 0.29999998, 0.39999998), (-0.5, 0.39999998, -0.4), (-0.5, 0.39999998, -0.3), (-0.5, 0.39999998, -0.20000002), (-0.5, 0.39999998, -0.10000002), (-0.5, 0.39999998, -1.4901161e-8), (-0.5, 0.39999998, 0.09999999), (-0.5, 0.39999998, 0.19999999), (-0.5, 0.39999998, 0.29999998), (-0.5, 0.39999998, 0.39999998)] - def GeomSubset "upperHalf" + def GeomSubset "CubeUpperHalf" { uniform token elementType = "face" int[] indices = [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, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599] diff --git a/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetSphere.usda b/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetSphere.usda index 66b456f8fb..61c96ee3fc 100644 --- a/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetSphere.usda +++ b/test/testSamples/testGeomSubsetsPicking/UpperHalfGeomSubsetSphere.usda @@ -15,7 +15,7 @@ def Mesh "UpperHalfGeomSubsetSphere" ( int[] faceVertexIndices = [0, 1, 21, 20, 1, 2, 22, 21, 2, 3, 23, 22, 3, 4, 24, 23, 4, 5, 25, 24, 5, 6, 26, 25, 6, 7, 27, 26, 7, 8, 28, 27, 8, 9, 29, 28, 9, 10, 30, 29, 10, 11, 31, 30, 11, 12, 32, 31, 12, 13, 33, 32, 13, 14, 34, 33, 14, 15, 35, 34, 15, 16, 36, 35, 16, 17, 37, 36, 17, 18, 38, 37, 18, 19, 39, 38, 19, 0, 20, 39, 20, 21, 41, 40, 21, 22, 42, 41, 22, 23, 43, 42, 23, 24, 44, 43, 24, 25, 45, 44, 25, 26, 46, 45, 26, 27, 47, 46, 27, 28, 48, 47, 28, 29, 49, 48, 29, 30, 50, 49, 30, 31, 51, 50, 31, 32, 52, 51, 32, 33, 53, 52, 33, 34, 54, 53, 34, 35, 55, 54, 35, 36, 56, 55, 36, 37, 57, 56, 37, 38, 58, 57, 38, 39, 59, 58, 39, 20, 40, 59, 40, 41, 61, 60, 41, 42, 62, 61, 42, 43, 63, 62, 43, 44, 64, 63, 44, 45, 65, 64, 45, 46, 66, 65, 46, 47, 67, 66, 47, 48, 68, 67, 48, 49, 69, 68, 49, 50, 70, 69, 50, 51, 71, 70, 51, 52, 72, 71, 52, 53, 73, 72, 53, 54, 74, 73, 54, 55, 75, 74, 55, 56, 76, 75, 56, 57, 77, 76, 57, 58, 78, 77, 58, 59, 79, 78, 59, 40, 60, 79, 60, 61, 81, 80, 61, 62, 82, 81, 62, 63, 83, 82, 63, 64, 84, 83, 64, 65, 85, 84, 65, 66, 86, 85, 66, 67, 87, 86, 67, 68, 88, 87, 68, 69, 89, 88, 69, 70, 90, 89, 70, 71, 91, 90, 71, 72, 92, 91, 72, 73, 93, 92, 73, 74, 94, 93, 74, 75, 95, 94, 75, 76, 96, 95, 76, 77, 97, 96, 77, 78, 98, 97, 78, 79, 99, 98, 79, 60, 80, 99, 80, 81, 101, 100, 81, 82, 102, 101, 82, 83, 103, 102, 83, 84, 104, 103, 84, 85, 105, 104, 85, 86, 106, 105, 86, 87, 107, 106, 87, 88, 108, 107, 88, 89, 109, 108, 89, 90, 110, 109, 90, 91, 111, 110, 91, 92, 112, 111, 92, 93, 113, 112, 93, 94, 114, 113, 94, 95, 115, 114, 95, 96, 116, 115, 96, 97, 117, 116, 97, 98, 118, 117, 98, 99, 119, 118, 99, 80, 100, 119, 100, 101, 121, 120, 101, 102, 122, 121, 102, 103, 123, 122, 103, 104, 124, 123, 104, 105, 125, 124, 105, 106, 126, 125, 106, 107, 127, 126, 107, 108, 128, 127, 108, 109, 129, 128, 109, 110, 130, 129, 110, 111, 131, 130, 111, 112, 132, 131, 112, 113, 133, 132, 113, 114, 134, 133, 114, 115, 135, 134, 115, 116, 136, 135, 116, 117, 137, 136, 117, 118, 138, 137, 118, 119, 139, 138, 119, 100, 120, 139, 120, 121, 141, 140, 121, 122, 142, 141, 122, 123, 143, 142, 123, 124, 144, 143, 124, 125, 145, 144, 125, 126, 146, 145, 126, 127, 147, 146, 127, 128, 148, 147, 128, 129, 149, 148, 129, 130, 150, 149, 130, 131, 151, 150, 131, 132, 152, 151, 132, 133, 153, 152, 133, 134, 154, 153, 134, 135, 155, 154, 135, 136, 156, 155, 136, 137, 157, 156, 137, 138, 158, 157, 138, 139, 159, 158, 139, 120, 140, 159, 140, 141, 161, 160, 141, 142, 162, 161, 142, 143, 163, 162, 143, 144, 164, 163, 144, 145, 165, 164, 145, 146, 166, 165, 146, 147, 167, 166, 147, 148, 168, 167, 148, 149, 169, 168, 149, 150, 170, 169, 150, 151, 171, 170, 151, 152, 172, 171, 152, 153, 173, 172, 153, 154, 174, 173, 154, 155, 175, 174, 155, 156, 176, 175, 156, 157, 177, 176, 157, 158, 178, 177, 158, 159, 179, 178, 159, 140, 160, 179, 160, 161, 181, 180, 161, 162, 182, 181, 162, 163, 183, 182, 163, 164, 184, 183, 164, 165, 185, 184, 165, 166, 186, 185, 166, 167, 187, 186, 167, 168, 188, 187, 168, 169, 189, 188, 169, 170, 190, 189, 170, 171, 191, 190, 171, 172, 192, 191, 172, 173, 193, 192, 173, 174, 194, 193, 174, 175, 195, 194, 175, 176, 196, 195, 176, 177, 197, 196, 177, 178, 198, 197, 178, 179, 199, 198, 179, 160, 180, 199, 180, 181, 201, 200, 181, 182, 202, 201, 182, 183, 203, 202, 183, 184, 204, 203, 184, 185, 205, 204, 185, 186, 206, 205, 186, 187, 207, 206, 187, 188, 208, 207, 188, 189, 209, 208, 189, 190, 210, 209, 190, 191, 211, 210, 191, 192, 212, 211, 192, 193, 213, 212, 193, 194, 214, 213, 194, 195, 215, 214, 195, 196, 216, 215, 196, 197, 217, 216, 197, 198, 218, 217, 198, 199, 219, 218, 199, 180, 200, 219, 200, 201, 221, 220, 201, 202, 222, 221, 202, 203, 223, 222, 203, 204, 224, 223, 204, 205, 225, 224, 205, 206, 226, 225, 206, 207, 227, 226, 207, 208, 228, 227, 208, 209, 229, 228, 209, 210, 230, 229, 210, 211, 231, 230, 211, 212, 232, 231, 212, 213, 233, 232, 213, 214, 234, 233, 214, 215, 235, 234, 215, 216, 236, 235, 216, 217, 237, 236, 217, 218, 238, 237, 218, 219, 239, 238, 219, 200, 220, 239, 220, 221, 241, 240, 221, 222, 242, 241, 222, 223, 243, 242, 223, 224, 244, 243, 224, 225, 245, 244, 225, 226, 246, 245, 226, 227, 247, 246, 227, 228, 248, 247, 228, 229, 249, 248, 229, 230, 250, 249, 230, 231, 251, 250, 231, 232, 252, 251, 232, 233, 253, 252, 233, 234, 254, 253, 234, 235, 255, 254, 235, 236, 256, 255, 236, 237, 257, 256, 237, 238, 258, 257, 238, 239, 259, 258, 239, 220, 240, 259, 240, 241, 261, 260, 241, 242, 262, 261, 242, 243, 263, 262, 243, 244, 264, 263, 244, 245, 265, 264, 245, 246, 266, 265, 246, 247, 267, 266, 247, 248, 268, 267, 248, 249, 269, 268, 249, 250, 270, 269, 250, 251, 271, 270, 251, 252, 272, 271, 252, 253, 273, 272, 253, 254, 274, 273, 254, 255, 275, 274, 255, 256, 276, 275, 256, 257, 277, 276, 257, 258, 278, 277, 258, 259, 279, 278, 259, 240, 260, 279, 260, 261, 281, 280, 261, 262, 282, 281, 262, 263, 283, 282, 263, 264, 284, 283, 264, 265, 285, 284, 265, 266, 286, 285, 266, 267, 287, 286, 267, 268, 288, 287, 268, 269, 289, 288, 269, 270, 290, 289, 270, 271, 291, 290, 271, 272, 292, 291, 272, 273, 293, 292, 273, 274, 294, 293, 274, 275, 295, 294, 275, 276, 296, 295, 276, 277, 297, 296, 277, 278, 298, 297, 278, 279, 299, 298, 279, 260, 280, 299, 280, 281, 301, 300, 281, 282, 302, 301, 282, 283, 303, 302, 283, 284, 304, 303, 284, 285, 305, 304, 285, 286, 306, 305, 286, 287, 307, 306, 287, 288, 308, 307, 288, 289, 309, 308, 289, 290, 310, 309, 290, 291, 311, 310, 291, 292, 312, 311, 292, 293, 313, 312, 293, 294, 314, 313, 294, 295, 315, 314, 295, 296, 316, 315, 296, 297, 317, 316, 297, 298, 318, 317, 298, 299, 319, 318, 299, 280, 300, 319, 300, 301, 321, 320, 301, 302, 322, 321, 302, 303, 323, 322, 303, 304, 324, 323, 304, 305, 325, 324, 305, 306, 326, 325, 306, 307, 327, 326, 307, 308, 328, 327, 308, 309, 329, 328, 309, 310, 330, 329, 310, 311, 331, 330, 311, 312, 332, 331, 312, 313, 333, 332, 313, 314, 334, 333, 314, 315, 335, 334, 315, 316, 336, 335, 316, 317, 337, 336, 317, 318, 338, 337, 318, 319, 339, 338, 319, 300, 320, 339, 320, 321, 341, 340, 321, 322, 342, 341, 322, 323, 343, 342, 323, 324, 344, 343, 324, 325, 345, 344, 325, 326, 346, 345, 326, 327, 347, 346, 327, 328, 348, 347, 328, 329, 349, 348, 329, 330, 350, 349, 330, 331, 351, 350, 331, 332, 352, 351, 332, 333, 353, 352, 333, 334, 354, 353, 334, 335, 355, 354, 335, 336, 356, 355, 336, 337, 357, 356, 337, 338, 358, 357, 338, 339, 359, 358, 339, 320, 340, 359, 340, 341, 361, 360, 341, 342, 362, 361, 342, 343, 363, 362, 343, 344, 364, 363, 344, 345, 365, 364, 345, 346, 366, 365, 346, 347, 367, 366, 347, 348, 368, 367, 348, 349, 369, 368, 349, 350, 370, 369, 350, 351, 371, 370, 351, 352, 372, 371, 352, 353, 373, 372, 353, 354, 374, 373, 354, 355, 375, 374, 355, 356, 376, 375, 356, 357, 377, 376, 357, 358, 378, 377, 358, 359, 379, 378, 359, 340, 360, 379, 1, 0, 380, 2, 1, 380, 3, 2, 380, 4, 3, 380, 5, 4, 380, 6, 5, 380, 7, 6, 380, 8, 7, 380, 9, 8, 380, 10, 9, 380, 11, 10, 380, 12, 11, 380, 13, 12, 380, 14, 13, 380, 15, 14, 380, 16, 15, 380, 17, 16, 380, 18, 17, 380, 19, 18, 380, 0, 19, 380, 360, 361, 381, 361, 362, 381, 362, 363, 381, 363, 364, 381, 364, 365, 381, 365, 366, 381, 366, 367, 381, 367, 368, 381, 368, 369, 381, 369, 370, 381, 370, 371, 381, 371, 372, 381, 372, 373, 381, 373, 374, 381, 374, 375, 381, 375, 376, 381, 376, 377, 381, 377, 378, 381, 378, 379, 381, 379, 360, 381] point3f[] points = [(0.14877813, -0.98768836, -0.048340943), (0.12655823, -0.98768836, -0.09194993), (0.09194993, -0.98768836, -0.12655823), (0.048340935, -0.98768836, -0.14877811), (0, -0.98768836, -0.15643455), (-0.048340935, -0.98768836, -0.1487781), (-0.09194992, -0.98768836, -0.1265582), (-0.12655818, -0.98768836, -0.0919499), (-0.14877807, -0.98768836, -0.048340924), (-0.15643452, -0.98768836, 0), (-0.14877807, -0.98768836, 0.048340924), (-0.12655818, -0.98768836, 0.091949895), (-0.091949895, -0.98768836, 0.12655817), (-0.048340924, -0.98768836, 0.14877805), (-4.6621107e-9, -0.98768836, 0.15643449), (0.04834091, -0.98768836, 0.14877804), (0.09194988, -0.98768836, 0.12655815), (0.12655815, -0.98768836, 0.09194989), (0.14877804, -0.98768836, 0.048340913), (0.15643448, -0.98768836, 0), (0.29389283, -0.95105654, -0.095491566), (0.25000018, -0.95105654, -0.18163574), (0.18163574, -0.95105654, -0.25000015), (0.09549155, -0.95105654, -0.2938928), (0, -0.95105654, -0.30901715), (-0.09549155, -0.95105654, -0.29389277), (-0.18163571, -0.95105654, -0.2500001), (-0.2500001, -0.95105654, -0.1816357), (-0.2938927, -0.95105654, -0.09549153), (-0.30901706, -0.95105654, 0), (-0.2938927, -0.95105654, 0.09549153), (-0.25000006, -0.95105654, 0.18163568), (-0.18163568, -0.95105654, 0.25000006), (-0.09549153, -0.95105654, 0.29389268), (-9.209424e-9, -0.95105654, 0.30901703), (0.0954915, -0.95105654, 0.29389265), (0.18163563, -0.95105654, 0.25000003), (0.25, -0.95105654, 0.18163565), (0.29389265, -0.95105654, 0.095491506), (0.309017, -0.95105654, 0), (0.43177092, -0.8910065, -0.14029087), (0.3672863, -0.8910065, -0.2668491), (0.2668491, -0.8910065, -0.36728626), (0.14029086, -0.8910065, -0.43177086), (0, -0.8910065, -0.45399073), (-0.14029086, -0.8910065, -0.43177083), (-0.26684904, -0.8910065, -0.36728618), (-0.36728615, -0.8910065, -0.266849), (-0.43177077, -0.8910065, -0.14029081), (-0.45399064, -0.8910065, 0), (-0.43177077, -0.8910065, 0.14029081), (-0.36728612, -0.8910065, 0.26684898), (-0.26684898, -0.8910065, 0.36728612), (-0.14029081, -0.8910065, 0.4317707), (-1.3529972e-8, -0.8910065, 0.45399058), (0.14029078, -0.8910065, 0.43177068), (0.26684892, -0.8910065, 0.3672861), (0.36728606, -0.8910065, 0.26684895), (0.43177065, -0.8910065, 0.1402908), (0.45399052, -0.8910065, 0), (0.55901736, -0.809017, -0.18163574), (0.47552857, -0.809017, -0.3454917), (0.3454917, -0.809017, -0.47552854), (0.18163572, -0.809017, -0.5590173), (0, -0.809017, -0.58778554), (-0.18163572, -0.809017, -0.55901724), (-0.34549165, -0.809017, -0.47552842), (-0.4755284, -0.809017, -0.3454916), (-0.5590171, -0.809017, -0.18163566), (-0.58778536, -0.809017, 0), (-0.5590171, -0.809017, 0.18163566), (-0.47552836, -0.809017, 0.34549156), (-0.34549156, -0.809017, 0.47552833), (-0.18163566, -0.809017, 0.55901706), (-1.7517365e-8, -0.809017, 0.5877853), (0.18163562, -0.809017, 0.55901706), (0.3454915, -0.809017, 0.4755283), (0.47552827, -0.809017, 0.34549153), (0.559017, -0.809017, 0.18163563), (0.58778524, -0.809017, 0), (0.67249894, -0.70710677, -0.21850814), (0.5720618, -0.70710677, -0.41562718), (0.41562718, -0.70710677, -0.5720617), (0.21850812, -0.70710677, -0.6724989), (0, -0.70710677, -0.7071071), (-0.21850812, -0.70710677, -0.6724988), (-0.4156271, -0.70710677, -0.5720616), (-0.57206154, -0.70710677, -0.41562706), (-0.6724987, -0.70710677, -0.21850805), (-0.70710695, -0.70710677, 0), (-0.6724987, -0.70710677, 0.21850805), (-0.57206154, -0.70710677, 0.415627), (-0.415627, -0.70710677, 0.5720615), (-0.21850805, -0.70710677, 0.6724986), (-2.1073424e-8, -0.70710677, 0.7071068), (0.21850799, -0.70710677, 0.6724986), (0.4156269, -0.70710677, 0.5720614), (0.5720614, -0.70710677, 0.41562697), (0.6724985, -0.70710677, 0.21850802), (0.70710677, -0.70710677, 0), (0.7694214, -0.58778524, -0.25000015), (0.65450895, -0.58778524, -0.47552854), (0.47552854, -0.58778524, -0.6545089), (0.25000012, -0.58778524, -0.7694213), (0, -0.58778524, -0.80901736), (-0.25000012, -0.58778524, -0.7694212), (-0.47552845, -0.58778524, -0.65450877), (-0.6545087, -0.58778524, -0.4755284), (-0.7694211, -0.58778524, -0.25000006), (-0.8090172, -0.58778524, 0), (-0.7694211, -0.58778524, 0.25000006), (-0.65450865, -0.58778524, 0.47552836), (-0.47552836, -0.58778524, 0.6545086), (-0.25000006, -0.58778524, 0.769421), (-2.4110586e-8, -0.58778524, 0.8090171), (0.24999999, -0.58778524, 0.769421), (0.47552827, -0.58778524, 0.65450853), (0.65450853, -0.58778524, 0.4755283), (0.7694209, -0.58778524, 0.25), (0.809017, -0.58778524, 0), (0.8473981, -0.45399052, -0.27533633), (0.7208399, -0.45399052, -0.5237208), (0.5237208, -0.45399052, -0.72083986), (0.2753363, -0.45399052, -0.847398), (0, -0.45399052, -0.89100695), (-0.2753363, -0.45399052, -0.847398), (-0.5237207, -0.45399052, -0.7208397), (-0.7208396, -0.45399052, -0.5237206), (-0.8473978, -0.45399052, -0.2753362), (-0.89100677, -0.45399052, 0), (-0.8473978, -0.45399052, 0.2753362), (-0.7208396, -0.45399052, 0.5237206), (-0.5237206, -0.45399052, 0.72083956), (-0.2753362, -0.45399052, 0.8473977), (-2.6554064e-8, -0.45399052, 0.89100665), (0.27533615, -0.45399052, 0.8473976), (0.5237205, -0.45399052, 0.7208395), (0.72083944, -0.45399052, 0.52372056), (0.84739757, -0.45399052, 0.27533618), (0.8910065, -0.45399052, 0), (0.9045091, -0.30901697, -0.2938928), (0.7694214, -0.30901697, -0.55901736), (0.55901736, -0.30901697, -0.76942134), (0.29389277, -0.30901697, -0.904509), (0, -0.30901697, -0.951057), (-0.29389277, -0.30901697, -0.90450895), (-0.55901724, -0.30901697, -0.7694212), (-0.76942116, -0.30901697, -0.5590172), (-0.90450877, -0.30901697, -0.2938927), (-0.9510568, -0.30901697, 0), (-0.90450877, -0.30901697, 0.2938927), (-0.7694211, -0.30901697, 0.5590171), (-0.5590171, -0.30901697, 0.76942104), (-0.2938927, -0.30901697, 0.90450865), (-2.8343694e-8, -0.30901697, 0.95105666), (0.29389262, -0.30901697, 0.9045086), (0.559017, -0.30901697, 0.769421), (0.7694209, -0.30901697, 0.55901706), (0.90450853, -0.30901697, 0.29389265), (0.95105654, -0.30901697, 0), (0.93934804, -0.15643437, -0.30521268), (0.7990572, -0.15643437, -0.580549), (0.580549, -0.15643437, -0.7990571), (0.30521265, -0.15643437, -0.9393479), (0, -0.15643437, -0.98768884), (-0.30521265, -0.15643437, -0.93934786), (-0.5805489, -0.15643437, -0.79905695), (-0.7990569, -0.15643437, -0.5805488), (-0.9393477, -0.15643437, -0.30521256), (-0.9876886, -0.15643437, 0), (-0.9393477, -0.15643437, 0.30521256), (-0.7990568, -0.15643437, 0.58054876), (-0.58054876, -0.15643437, 0.79905677), (-0.30521256, -0.15643437, 0.93934757), (-2.9435407e-8, -0.15643437, 0.9876885), (0.30521247, -0.15643437, 0.93934757), (0.58054864, -0.15643437, 0.7990567), (0.79905665, -0.15643437, 0.5805487), (0.9393475, -0.15643437, 0.3052125), (0.98768836, -0.15643437, 0), (0.95105714, 0, -0.30901718), (0.80901754, 0, -0.5877856), (0.5877856, 0, -0.8090175), (0.30901715, 0, -0.951057), (0, 0, -1.0000005), (-0.30901715, 0, -0.95105696), (-0.5877855, 0, -0.8090173), (-0.80901724, 0, -0.5877854), (-0.9510568, 0, -0.30901706), (-1.0000002, 0, 0), (-0.9510568, 0, 0.30901706), (-0.8090172, 0, 0.58778536), (-0.58778536, 0, 0.8090171), (-0.30901706, 0, 0.95105666), (-2.9802322e-8, 0, 1.0000001), (0.30901697, 0, 0.9510566), (0.58778524, 0, 0.80901706), (0.809017, 0, 0.5877853), (0.95105654, 0, 0.309017), (1, 0, 0), (0.93934804, 0.15643437, -0.30521268), (0.7990572, 0.15643437, -0.580549), (0.580549, 0.15643437, -0.7990571), (0.30521265, 0.15643437, -0.9393479), (0, 0.15643437, -0.98768884), (-0.30521265, 0.15643437, -0.93934786), (-0.5805489, 0.15643437, -0.79905695), (-0.7990569, 0.15643437, -0.5805488), (-0.9393477, 0.15643437, -0.30521256), (-0.9876886, 0.15643437, 0), (-0.9393477, 0.15643437, 0.30521256), (-0.7990568, 0.15643437, 0.58054876), (-0.58054876, 0.15643437, 0.79905677), (-0.30521256, 0.15643437, 0.93934757), (-2.9435407e-8, 0.15643437, 0.9876885), (0.30521247, 0.15643437, 0.93934757), (0.58054864, 0.15643437, 0.7990567), (0.79905665, 0.15643437, 0.5805487), (0.9393475, 0.15643437, 0.3052125), (0.98768836, 0.15643437, 0), (0.9045091, 0.30901697, -0.2938928), (0.7694214, 0.30901697, -0.55901736), (0.55901736, 0.30901697, -0.76942134), (0.29389277, 0.30901697, -0.904509), (0, 0.30901697, -0.951057), (-0.29389277, 0.30901697, -0.90450895), (-0.55901724, 0.30901697, -0.7694212), (-0.76942116, 0.30901697, -0.5590172), (-0.90450877, 0.30901697, -0.2938927), (-0.9510568, 0.30901697, 0), (-0.90450877, 0.30901697, 0.2938927), (-0.7694211, 0.30901697, 0.5590171), (-0.5590171, 0.30901697, 0.76942104), (-0.2938927, 0.30901697, 0.90450865), (-2.8343694e-8, 0.30901697, 0.95105666), (0.29389262, 0.30901697, 0.9045086), (0.559017, 0.30901697, 0.769421), (0.7694209, 0.30901697, 0.55901706), (0.90450853, 0.30901697, 0.29389265), (0.95105654, 0.30901697, 0), (0.8473981, 0.45399052, -0.27533633), (0.7208399, 0.45399052, -0.5237208), (0.5237208, 0.45399052, -0.72083986), (0.2753363, 0.45399052, -0.847398), (0, 0.45399052, -0.89100695), (-0.2753363, 0.45399052, -0.847398), (-0.5237207, 0.45399052, -0.7208397), (-0.7208396, 0.45399052, -0.5237206), (-0.8473978, 0.45399052, -0.2753362), (-0.89100677, 0.45399052, 0), (-0.8473978, 0.45399052, 0.2753362), (-0.7208396, 0.45399052, 0.5237206), (-0.5237206, 0.45399052, 0.72083956), (-0.2753362, 0.45399052, 0.8473977), (-2.6554064e-8, 0.45399052, 0.89100665), (0.27533615, 0.45399052, 0.8473976), (0.5237205, 0.45399052, 0.7208395), (0.72083944, 0.45399052, 0.52372056), (0.84739757, 0.45399052, 0.27533618), (0.8910065, 0.45399052, 0), (0.7694214, 0.58778524, -0.25000015), (0.65450895, 0.58778524, -0.47552854), (0.47552854, 0.58778524, -0.6545089), (0.25000012, 0.58778524, -0.7694213), (0, 0.58778524, -0.80901736), (-0.25000012, 0.58778524, -0.7694212), (-0.47552845, 0.58778524, -0.65450877), (-0.6545087, 0.58778524, -0.4755284), (-0.7694211, 0.58778524, -0.25000006), (-0.8090172, 0.58778524, 0), (-0.7694211, 0.58778524, 0.25000006), (-0.65450865, 0.58778524, 0.47552836), (-0.47552836, 0.58778524, 0.6545086), (-0.25000006, 0.58778524, 0.769421), (-2.4110586e-8, 0.58778524, 0.8090171), (0.24999999, 0.58778524, 0.769421), (0.47552827, 0.58778524, 0.65450853), (0.65450853, 0.58778524, 0.4755283), (0.7694209, 0.58778524, 0.25), (0.809017, 0.58778524, 0), (0.67249894, 0.70710677, -0.21850814), (0.5720618, 0.70710677, -0.41562718), (0.41562718, 0.70710677, -0.5720617), (0.21850812, 0.70710677, -0.6724989), (0, 0.70710677, -0.7071071), (-0.21850812, 0.70710677, -0.6724988), (-0.4156271, 0.70710677, -0.5720616), (-0.57206154, 0.70710677, -0.41562706), (-0.6724987, 0.70710677, -0.21850805), (-0.70710695, 0.70710677, 0), (-0.6724987, 0.70710677, 0.21850805), (-0.57206154, 0.70710677, 0.415627), (-0.415627, 0.70710677, 0.5720615), (-0.21850805, 0.70710677, 0.6724986), (-2.1073424e-8, 0.70710677, 0.7071068), (0.21850799, 0.70710677, 0.6724986), (0.4156269, 0.70710677, 0.5720614), (0.5720614, 0.70710677, 0.41562697), (0.6724985, 0.70710677, 0.21850802), (0.70710677, 0.70710677, 0), (0.55901736, 0.809017, -0.18163574), (0.47552857, 0.809017, -0.3454917), (0.3454917, 0.809017, -0.47552854), (0.18163572, 0.809017, -0.5590173), (0, 0.809017, -0.58778554), (-0.18163572, 0.809017, -0.55901724), (-0.34549165, 0.809017, -0.47552842), (-0.4755284, 0.809017, -0.3454916), (-0.5590171, 0.809017, -0.18163566), (-0.58778536, 0.809017, 0), (-0.5590171, 0.809017, 0.18163566), (-0.47552836, 0.809017, 0.34549156), (-0.34549156, 0.809017, 0.47552833), (-0.18163566, 0.809017, 0.55901706), (-1.7517365e-8, 0.809017, 0.5877853), (0.18163562, 0.809017, 0.55901706), (0.3454915, 0.809017, 0.4755283), (0.47552827, 0.809017, 0.34549153), (0.559017, 0.809017, 0.18163563), (0.58778524, 0.809017, 0), (0.43177092, 0.8910065, -0.14029087), (0.3672863, 0.8910065, -0.2668491), (0.2668491, 0.8910065, -0.36728626), (0.14029086, 0.8910065, -0.43177086), (0, 0.8910065, -0.45399073), (-0.14029086, 0.8910065, -0.43177083), (-0.26684904, 0.8910065, -0.36728618), (-0.36728615, 0.8910065, -0.266849), (-0.43177077, 0.8910065, -0.14029081), (-0.45399064, 0.8910065, 0), (-0.43177077, 0.8910065, 0.14029081), (-0.36728612, 0.8910065, 0.26684898), (-0.26684898, 0.8910065, 0.36728612), (-0.14029081, 0.8910065, 0.4317707), (-1.3529972e-8, 0.8910065, 0.45399058), (0.14029078, 0.8910065, 0.43177068), (0.26684892, 0.8910065, 0.3672861), (0.36728606, 0.8910065, 0.26684895), (0.43177065, 0.8910065, 0.1402908), (0.45399052, 0.8910065, 0), (0.29389283, 0.95105654, -0.095491566), (0.25000018, 0.95105654, -0.18163574), (0.18163574, 0.95105654, -0.25000015), (0.09549155, 0.95105654, -0.2938928), (0, 0.95105654, -0.30901715), (-0.09549155, 0.95105654, -0.29389277), (-0.18163571, 0.95105654, -0.2500001), (-0.2500001, 0.95105654, -0.1816357), (-0.2938927, 0.95105654, -0.09549153), (-0.30901706, 0.95105654, 0), (-0.2938927, 0.95105654, 0.09549153), (-0.25000006, 0.95105654, 0.18163568), (-0.18163568, 0.95105654, 0.25000006), (-0.09549153, 0.95105654, 0.29389268), (-9.209424e-9, 0.95105654, 0.30901703), (0.0954915, 0.95105654, 0.29389265), (0.18163563, 0.95105654, 0.25000003), (0.25, 0.95105654, 0.18163565), (0.29389265, 0.95105654, 0.095491506), (0.309017, 0.95105654, 0), (0.14877813, 0.98768836, -0.048340943), (0.12655823, 0.98768836, -0.09194993), (0.09194993, 0.98768836, -0.12655823), (0.048340935, 0.98768836, -0.14877811), (0, 0.98768836, -0.15643455), (-0.048340935, 0.98768836, -0.1487781), (-0.09194992, 0.98768836, -0.1265582), (-0.12655818, 0.98768836, -0.0919499), (-0.14877807, 0.98768836, -0.048340924), (-0.15643452, 0.98768836, 0), (-0.14877807, 0.98768836, 0.048340924), (-0.12655818, 0.98768836, 0.091949895), (-0.091949895, 0.98768836, 0.12655817), (-0.048340924, 0.98768836, 0.14877805), (-4.6621107e-9, 0.98768836, 0.15643449), (0.04834091, 0.98768836, 0.14877804), (0.09194988, 0.98768836, 0.12655815), (0.12655815, 0.98768836, 0.09194989), (0.14877804, 0.98768836, 0.048340913), (0.15643448, 0.98768836, 0), (0, -1, 0), (0, 1, 0)] - def GeomSubset "upperHalf" + def GeomSubset "SphereUpperHalf" { uniform token elementType = "face" int[] indices = [180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399] From 86a7ae16d6469a102cf7345c5b9e0fc56bcbfda1 Mon Sep 17 00:00:00 2001 From: debloip Date: Wed, 3 Jul 2024 10:11:56 -0400 Subject: [PATCH 43/75] HYDRA-1058 : GeomSubsets picking marquee select test --- .../cpp/testGeomSubsetsPicking.cpp | 75 +++------ .../mayaToHydra/cpp/testGeomSubsetsPicking.py | 150 +++++++----------- 2 files changed, 83 insertions(+), 142 deletions(-) diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp index ebc6feb61e..a9c9a29113 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp @@ -18,10 +18,16 @@ #include #include #include +#include #include #include +#include +#include +#include +#include + #include PXR_NAMESPACE_USING_DIRECTIVE @@ -46,8 +52,8 @@ void ensureSelected(const SceneIndexInspector& inspector, const FindPrimPredicat // we'll make sure there are at most two prims for that object. We'll also allow a prim not // to have any selections, but at least one prim must be selected. PrimEntriesVector primEntries = inspector.FindPrims(primPredicate); - ASSERT_GE(primEntries.size(), 1u); - ASSERT_LE(primEntries.size(), 2u); + //ASSERT_GE(primEntries.size(), 1u); + //ASSERT_LE(primEntries.size(), 2u); size_t nbSelectedPrims = 0; for (const auto& primEntry : primEntries) { @@ -75,7 +81,7 @@ void ensureUnselected(const SceneIndexInspector& inspector, const FindPrimPredic } // namespace -TEST(TestPicking, pickObject) +TEST(TestGeomSubsetsPicking, pickObject) { const SceneIndicesVector& sceneIndices = GetTerminalSceneIndices(); ASSERT_GT(sceneIndices.size(), 0u); @@ -102,69 +108,40 @@ TEST(TestPicking, pickObject) ensureSelected(inspector, PrimNamePredicate(objectName)); } -TEST(TestPicking, marqueeSelect) +TEST(TestGeomSubsetsPicking, marqueeSelect) { const SceneIndicesVector& sceneIndices = GetTerminalSceneIndices(); ASSERT_GT(sceneIndices.size(), 0u); SceneIndexInspector inspector(sceneIndices.front()); - auto [argc, argv] = getTestingArgs(); - ASSERT_TRUE(argc % 2 == 0); // Each object is identified by both its name and a type - ASSERT_TRUE(argc >= 4); // We need at least two objects to do the marquee selection - std::vector> objectsToSelect; - for (int iArg = 0; iArg < argc; iArg += 2) { - objectsToSelect.push_back(std::make_pair(std::string(argv[iArg]), TfToken(argv[iArg + 1]))); + std::vector geomSubsetNamesToSelect = {"CubeUpperHalf", "SphereUpperHalf"}; + + for (const auto& geomSubsetName : geomSubsetNamesToSelect) { + ensureUnselected(inspector, PrimNamePredicate(geomSubsetName)); } - for (const auto& object : objectsToSelect) { - ensureUnselected(inspector, PrimNamePredicate(object.first)); - } + auto ufeSelection = Ufe::GlobalSelection::get(); + EXPECT_TRUE(ufeSelection->empty()); M3dView active3dView = M3dView::active3dView(); - // We get the first prim's mouse coordinates and initialize the selection rectangle - // with them; we then iterate on the other prims and expand the selection rectangle - // to fit them all. - - // Get the first prim's mouse coords - PrimEntriesVector initialPrimEntries = inspector.FindPrims( - findPickPrimPredicate(objectsToSelect.front().first, objectsToSelect.front().second)); - ASSERT_EQ(initialPrimEntries.size(), 1u); - auto initialMouseCoords = getPrimMouseCoords(initialPrimEntries.front().prim, active3dView); - // Initialize the selection rectangle - QPoint topLeftMouseCoords = initialMouseCoords; - QPoint bottomRightMouseCoords = initialMouseCoords; - - // Expand the selection rectangle to fit all prims - for (size_t iObject = 1; iObject < objectsToSelect.size(); iObject++) { - PrimEntriesVector objectPrims = inspector.FindPrims( - findPickPrimPredicate(objectsToSelect[iObject].first, objectsToSelect[iObject].second)); - ASSERT_EQ(objectPrims.size(), 1u); - auto objectMouseCoords = getPrimMouseCoords(objectPrims.front().prim, active3dView); - - if (objectMouseCoords.x() > bottomRightMouseCoords.x()) { - bottomRightMouseCoords.setX(objectMouseCoords.x()); - } - if (objectMouseCoords.x() < topLeftMouseCoords.x()) { - topLeftMouseCoords.setX(objectMouseCoords.x()); - } - if (objectMouseCoords.y() > topLeftMouseCoords.y()) { - topLeftMouseCoords.setY(objectMouseCoords.y()); - } - if (objectMouseCoords.y() < bottomRightMouseCoords.y()) { - bottomRightMouseCoords.setY(objectMouseCoords.y()); - } - } + int offset = 10; + QPoint topLeftMouseCoords(0 + offset, 0 + offset); + QPoint bottomRightMouseCoords(active3dView.portWidth() - offset, active3dView.portHeight() - offset); // Perform the marquee selection mousePress(Qt::MouseButton::LeftButton, active3dView.widget(), topLeftMouseCoords); mouseMoveTo(active3dView.widget(), bottomRightMouseCoords); mouseRelease(Qt::MouseButton::LeftButton, active3dView.widget(), bottomRightMouseCoords); - active3dView.refresh(); + active3dView.refresh(false, true); + + std::ofstream outFile("HydraSceneDump.txt"); + HdUtils::PrintSceneIndex(outFile, inspector.GetSceneIndex()); + outFile.close(); - for (const auto& object : objectsToSelect) { - ensureSelected(inspector, PrimNamePredicate(object.first)); + for (const auto& geomSubsetName : geomSubsetNamesToSelect) { + ensureSelected(inspector, PrimNamePredicate(geomSubsetName)); } } diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py index 0d66f58808..478e66486e 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py @@ -16,115 +16,79 @@ import fixturesUtils import mayaUtils import mtohUtils +import testUtils +import usdUtils from testUtils import PluginLoaded -class TestPicking(mtohUtils.MayaHydraBaseTestCase): +class TestGeomSubsetsPicking(mtohUtils.MayaHydraBaseTestCase): # MayaHydraBaseTestCase.setUpClass requirement. _file = __file__ - def setUp(self): - super(TestPicking, self).setUp() - self.setHdStormRenderer() - cmds.refresh() - - def createMayaCube(self): - objectName = cmds.polyCube()[0] - cmds.move(1, 2, 3) - cmds.select(clear=True) - cmds.refresh() - return objectName - - def createMayaDirectionalLight(self): - shapeName = cmds.directionalLight() - objectName = cmds.listRelatives(shapeName, parent=True) - cmds.move(3, -2, 1) - cmds.select(clear=True) - cmds.modelEditor(mayaUtils.activeModelPanel(), edit=True, displayLights='all') - cmds.refresh() - return objectName + def loadUsdScene(self): + usdScenePath = testUtils.getTestScene('testGeomSubsetsPicking', 'GeomSubsetsPickingTestScene.usda') + usdUtils.createStageFromFile(usdScenePath) - def createUsdCubeFromMaya(self, stagePath): - objectName = cmds.polyCube()[0] - cmds.move(-4, 3, -2) - cmds.mayaUsdDuplicate(cmds.ls(objectName, long=True)[0], stagePath) - cmds.delete(objectName) - cmds.select(clear=True) - cmds.refresh() - return objectName - - def createUsdCube(self, stagePath): - import mayaUsd.lib - from pxr import UsdGeom - objectName = "USDCube" - stage = mayaUsd.lib.GetPrim(stagePath).GetStage() - xform = UsdGeom.Xform.Define(stage, "/" + objectName + "Xform") - xform.AddTranslateOp().Set(value=(6, 5, 4)) - UsdGeom.Cube.Define(stage, str(xform.GetPath()) + "/" + objectName) - cmds.select(clear=True) - cmds.refresh() - return objectName - - def createUsdRectLight(self, stagePath): - import mayaUsd.lib - from pxr import UsdGeom, UsdLux - objectName = "USDRectLight" - stage = mayaUsd.lib.GetPrim(stagePath).GetStage() - xform = UsdGeom.Xform.Define(stage, "/" + objectName + "Xform") - xform.AddTranslateOp().Set(value=(-6, -3.5, -1)) - UsdLux.RectLight.Define(stage, str(xform.GetPath()) + "/" + objectName) + def setUp(self): + super(TestGeomSubsetsPicking, self).setUp() + self.loadUsdScene() cmds.select(clear=True) - cmds.modelEditor(mayaUtils.activeModelPanel(), edit=True, displayLights='all') + cmds.optionVar( + sv=('mayaHydra_GeomSubsetsPickMode', 'GeomSubsets')) + self.setHdStormRenderer() cmds.refresh() - return objectName - def test_PickMayaMesh(self): - cubeObjectName = self.createMayaCube() - with PluginLoaded('mayaHydraCppTests'): - cmds.mayaHydraCppTest(cubeObjectName, "mesh", f="TestPicking.pickObject") + # def test_SinglePickGeomSubset(self): + # cubeObjectName = self.createMayaCube() + # with PluginLoaded('mayaHydraCppTests'): + # cmds.mayaHydraCppTest(cubeObjectName, "mesh", f="TestGeomSubsetsPicking.pickGeomSubset") - def test_PickMayaLight(self): - directionalLightObjectName = self.createMayaDirectionalLight() - with PluginLoaded('mayaHydraCppTests'): - cmds.mayaHydraCppTest(directionalLightObjectName, "simpleLight", f="TestPicking.pickObject") + # def test_PickMayaLight(self): + # directionalLightObjectName = self.createMayaDirectionalLight() + # with PluginLoaded('mayaHydraCppTests'): + # cmds.mayaHydraCppTest(directionalLightObjectName, "simpleLight", f="TestGeomSubsetsPicking.pickObject") - def test_PickUsdMesh(self): - import mayaUsd_createStageWithNewLayer - stagePath = mayaUsd_createStageWithNewLayer.createStageWithNewLayer() - cubeObjectName = self.createUsdCubeFromMaya(stagePath) - with PluginLoaded('mayaHydraCppTests'): - cmds.mayaHydraCppTest(cubeObjectName, "mesh", f="TestPicking.pickObject") + # def test_PickUsdMesh(self): + # import mayaUsd_createStageWithNewLayer + # stagePath = mayaUsd_createStageWithNewLayer.createStageWithNewLayer() + # cubeObjectName = self.createUsdCubeFromMaya(stagePath) + # with PluginLoaded('mayaHydraCppTests'): + # cmds.mayaHydraCppTest(cubeObjectName, "mesh", f="TestGeomSubsetsPicking.pickObject") - def test_PickUsdImplicitSurface(self): - import mayaUsd_createStageWithNewLayer - stagePath = mayaUsd_createStageWithNewLayer.createStageWithNewLayer() - cubeObjectName = self.createUsdCube(stagePath) - with PluginLoaded('mayaHydraCppTests'): - cmds.mayaHydraCppTest(cubeObjectName, "mesh", f="TestPicking.pickObject") + # def test_PickUsdImplicitSurface(self): + # import mayaUsd_createStageWithNewLayer + # stagePath = mayaUsd_createStageWithNewLayer.createStageWithNewLayer() + # cubeObjectName = self.createUsdCube(stagePath) + # with PluginLoaded('mayaHydraCppTests'): + # cmds.mayaHydraCppTest(cubeObjectName, "mesh", f="TestGeomSubsetsPicking.pickObject") - def test_PickUsdLight(self): - import mayaUsd_createStageWithNewLayer - stagePath = mayaUsd_createStageWithNewLayer.createStageWithNewLayer() - rectLightObjectName = self.createUsdRectLight(stagePath) - with PluginLoaded('mayaHydraCppTests'): - cmds.mayaHydraCppTest(rectLightObjectName, "rectLight", f="TestPicking.pickObject") + # def test_PickUsdLight(self): + # import mayaUsd_createStageWithNewLayer + # stagePath = mayaUsd_createStageWithNewLayer.createStageWithNewLayer() + # rectLightObjectName = self.createUsdRectLight(stagePath) + # with PluginLoaded('mayaHydraCppTests'): + # cmds.mayaHydraCppTest(rectLightObjectName, "rectLight", f="TestGeomSubsetsPicking.pickObject") + + # def test_MarqueeSelection(self): + # import mayaUsd_createStageWithNewLayer + # stagePath = mayaUsd_createStageWithNewLayer.createStageWithNewLayer() + # mayaCubeName = self.createMayaCube() + # mayaDirectionalLightName = self.createMayaDirectionalLight() + # usdMayaCubeName = self.createUsdCubeFromMaya(stagePath) + # usdCubeName = self.createUsdCube(stagePath) + # usdRectLightName = self.createUsdRectLight(stagePath) + # with PluginLoaded('mayaHydraCppTests'): + # cmds.mayaHydraCppTest( + # mayaCubeName, "mesh", + # mayaDirectionalLightName, "simpleLight", + # usdMayaCubeName, "mesh", + # usdCubeName, "mesh", + # usdRectLightName, "rectLight", + # f="TestGeomSubsetsPicking.marqueeSelect") - def test_MarqueeSelection(self): - import mayaUsd_createStageWithNewLayer - stagePath = mayaUsd_createStageWithNewLayer.createStageWithNewLayer() - mayaCubeName = self.createMayaCube() - mayaDirectionalLightName = self.createMayaDirectionalLight() - usdMayaCubeName = self.createUsdCubeFromMaya(stagePath) - usdCubeName = self.createUsdCube(stagePath) - usdRectLightName = self.createUsdRectLight(stagePath) + def test_MarqueeSelect(self): with PluginLoaded('mayaHydraCppTests'): - cmds.mayaHydraCppTest( - mayaCubeName, "mesh", - mayaDirectionalLightName, "simpleLight", - usdMayaCubeName, "mesh", - usdCubeName, "mesh", - usdRectLightName, "rectLight", - f="TestPicking.marqueeSelect") + cmds.mayaHydraCppTest(f="TestGeomSubsetsPicking.marqueeSelect") if __name__ == '__main__': fixturesUtils.runTests(globals()) From 15fe9acaedbc357fbe5ae753aa049fb55a095920 Mon Sep 17 00:00:00 2001 From: debloip Date: Wed, 3 Jul 2024 10:29:10 -0400 Subject: [PATCH 44/75] HYDRA-1058 : GeomSubset picking test --- .../cpp/testGeomSubsetsPicking.cpp | 27 +++++++++++++++++++ .../mayaToHydra/cpp/testGeomSubsetsPicking.py | 18 +++++++++++++ 2 files changed, 45 insertions(+) diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp index a9c9a29113..37125dbd10 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp @@ -17,6 +17,7 @@ #include #include +#include #include #include @@ -108,6 +109,32 @@ TEST(TestGeomSubsetsPicking, pickObject) ensureSelected(inspector, PrimNamePredicate(objectName)); } +TEST(TestGeomSubsetsPicking, geomSubsetPicking) +{ + const SceneIndicesVector& sceneIndices = GetTerminalSceneIndices(); + ASSERT_GT(sceneIndices.size(), 0u); + SceneIndexInspector inspector(sceneIndices.front()); + + const std::string objectName = "CubeMesh"; + const std::string geomSubsetName = "CubeUpperHalf"; + + ensureUnselected(inspector, PrimNamePredicate(geomSubsetName)); + + PrimEntriesVector prims = inspector.FindPrims(findPickPrimPredicate(objectName, HdPrimTypeTokens->mesh)); + ASSERT_EQ(prims.size(), 1u); + + M3dView active3dView = M3dView::active3dView(); + + auto primMouseCoords = getPrimMouseCoords(prims.front().prim, active3dView); + primMouseCoords -= QPoint(0, 25); // Move coords upwards + + mouseClick(Qt::MouseButton::LeftButton, active3dView.widget(), primMouseCoords); + + active3dView.refresh(false, true); + + ensureSelected(inspector, PrimNamePredicate(geomSubsetName)); +} + TEST(TestGeomSubsetsPicking, marqueeSelect) { const SceneIndicesVector& sceneIndices = GetTerminalSceneIndices(); diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py index 478e66486e..703315349b 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py @@ -35,6 +35,8 @@ def setUp(self): cmds.select(clear=True) cmds.optionVar( sv=('mayaHydra_GeomSubsetsPickMode', 'GeomSubsets')) + cmds.setAttr('persp.translate', 0, 0, 15, type='float3') + cmds.setAttr('persp.rotate', 0, 0, 0, type='float3') self.setHdStormRenderer() cmds.refresh() @@ -86,6 +88,22 @@ def setUp(self): # usdRectLightName, "rectLight", # f="TestGeomSubsetsPicking.marqueeSelect") + def test_GeomSubsetPicking(self): + with PluginLoaded('mayaHydraCppTests'): + cmds.mayaHydraCppTest(f="TestGeomSubsetsPicking.geomSubsetPicking") + + # def test_FallbackPicking(self): + # with PluginLoaded('mayaHydraCppTests'): + # cmds.mayaHydraCppTest(f="TestGeomSubsetsPicking.fallbackPicking") + + # def test_InstanceGeomSubsetPicking(self): + # with PluginLoaded('mayaHydraCppTests'): + # cmds.mayaHydraCppTest(f="TestGeomSubsetsPicking.instanceGeomSubsetPicking") + + # def test_InstanceFallbackPicking(self): + # with PluginLoaded('mayaHydraCppTests'): + # cmds.mayaHydraCppTest(f="TestGeomSubsetsPicking.instanceFallbackPicking") + def test_MarqueeSelect(self): with PluginLoaded('mayaHydraCppTests'): cmds.mayaHydraCppTest(f="TestGeomSubsetsPicking.marqueeSelect") From 05217874ab8be9b213431686871017369d121ead Mon Sep 17 00:00:00 2001 From: debloip Date: Wed, 3 Jul 2024 10:48:42 -0400 Subject: [PATCH 45/75] HYDRA-1058 : Fallback picking test --- .../cpp/testGeomSubsetsPicking.cpp | 25 +++++++++++++++++++ .../mayaToHydra/cpp/testGeomSubsetsPicking.py | 6 ++--- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp index 37125dbd10..6ec9a6039b 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp @@ -135,6 +135,31 @@ TEST(TestGeomSubsetsPicking, geomSubsetPicking) ensureSelected(inspector, PrimNamePredicate(geomSubsetName)); } +TEST(TestGeomSubsetsPicking, fallbackPicking) +{ + const SceneIndicesVector& sceneIndices = GetTerminalSceneIndices(); + ASSERT_GT(sceneIndices.size(), 0u); + SceneIndexInspector inspector(sceneIndices.front()); + + const std::string objectName = "CubeMesh"; + + ensureUnselected(inspector, PrimNamePredicate(objectName)); + + PrimEntriesVector prims = inspector.FindPrims(findPickPrimPredicate(objectName, HdPrimTypeTokens->mesh)); + ASSERT_EQ(prims.size(), 1u); + + M3dView active3dView = M3dView::active3dView(); + + auto primMouseCoords = getPrimMouseCoords(prims.front().prim, active3dView); + primMouseCoords += QPoint(0, 25); // Move coords upwards + + mouseClick(Qt::MouseButton::LeftButton, active3dView.widget(), primMouseCoords); + + active3dView.refresh(false, true); + + ensureSelected(inspector, PrimNamePredicate(objectName)); +} + TEST(TestGeomSubsetsPicking, marqueeSelect) { const SceneIndicesVector& sceneIndices = GetTerminalSceneIndices(); diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py index 703315349b..96b444d801 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py @@ -92,9 +92,9 @@ def test_GeomSubsetPicking(self): with PluginLoaded('mayaHydraCppTests'): cmds.mayaHydraCppTest(f="TestGeomSubsetsPicking.geomSubsetPicking") - # def test_FallbackPicking(self): - # with PluginLoaded('mayaHydraCppTests'): - # cmds.mayaHydraCppTest(f="TestGeomSubsetsPicking.fallbackPicking") + def test_FallbackPicking(self): + with PluginLoaded('mayaHydraCppTests'): + cmds.mayaHydraCppTest(f="TestGeomSubsetsPicking.fallbackPicking") # def test_InstanceGeomSubsetPicking(self): # with PluginLoaded('mayaHydraCppTests'): From d2696471171adbd611449fdec97d1608e03fdd9d Mon Sep 17 00:00:00 2001 From: debloip Date: Wed, 3 Jul 2024 11:17:04 -0400 Subject: [PATCH 46/75] HYDRA-1058 : Instance GeomSubset picking test --- .../cpp/testGeomSubsetsPicking.cpp | 30 +++++++++++- .../mayaToHydra/cpp/testGeomSubsetsPicking.py | 6 +-- .../render/mayaToHydra/cpp/testUtils.cpp | 48 +++++++++++++++++++ .../render/mayaToHydra/cpp/testUtils.h | 2 + 4 files changed, 82 insertions(+), 4 deletions(-) diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp index 6ec9a6039b..d21674674f 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp @@ -151,7 +151,7 @@ TEST(TestGeomSubsetsPicking, fallbackPicking) M3dView active3dView = M3dView::active3dView(); auto primMouseCoords = getPrimMouseCoords(prims.front().prim, active3dView); - primMouseCoords += QPoint(0, 25); // Move coords upwards + primMouseCoords += QPoint(0, 25); // Move coords downwards mouseClick(Qt::MouseButton::LeftButton, active3dView.widget(), primMouseCoords); @@ -160,6 +160,34 @@ TEST(TestGeomSubsetsPicking, fallbackPicking) ensureSelected(inspector, PrimNamePredicate(objectName)); } +TEST(TestGeomSubsetsPicking, instanceGeomSubsetPicking) +{ + const SceneIndicesVector& sceneIndices = GetTerminalSceneIndices(); + ASSERT_GT(sceneIndices.size(), 0u); + SceneIndexInspector inspector(sceneIndices.front()); + + const std::string objectName = "SphereMesh"; + const std::string geomSubsetName = "SphereUpperHalf"; + const std::string instancerName = "SphereInstancer"; + + ensureUnselected(inspector, PrimNamePredicate(geomSubsetName)); + + PrimEntriesVector instancerPrims = inspector.FindPrims(findPickPrimPredicate(instancerName, HdPrimTypeTokens->instancer)); + ASSERT_EQ(instancerPrims.size(), 1u); + + + M3dView active3dView = M3dView::active3dView(); + + auto primMouseCoords = getInstanceMouseCoords(instancerPrims.front().prim, 0, active3dView); + primMouseCoords -= QPoint(0, 25); // Move coords upwards + + mouseClick(Qt::MouseButton::LeftButton, active3dView.widget(), primMouseCoords); + + active3dView.refresh(false, true); + + ensureSelected(inspector, PrimNamePredicate(geomSubsetName)); +} + TEST(TestGeomSubsetsPicking, marqueeSelect) { const SceneIndicesVector& sceneIndices = GetTerminalSceneIndices(); diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py index 96b444d801..bb4fb92d1a 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py @@ -96,9 +96,9 @@ def test_FallbackPicking(self): with PluginLoaded('mayaHydraCppTests'): cmds.mayaHydraCppTest(f="TestGeomSubsetsPicking.fallbackPicking") - # def test_InstanceGeomSubsetPicking(self): - # with PluginLoaded('mayaHydraCppTests'): - # cmds.mayaHydraCppTest(f="TestGeomSubsetsPicking.instanceGeomSubsetPicking") + def test_InstanceGeomSubsetPicking(self): + with PluginLoaded('mayaHydraCppTests'): + cmds.mayaHydraCppTest(f="TestGeomSubsetsPicking.instanceGeomSubsetPicking") # def test_InstanceFallbackPicking(self): # with PluginLoaded('mayaHydraCppTests'): diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.cpp index 3f46e2eb92..19b34d26bf 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.cpp @@ -20,7 +20,13 @@ #include #include +#include +#include +#include #include +#include +#include +#include #include #include @@ -437,4 +443,46 @@ QPoint getPrimMouseCoords(const HdSceneIndexPrim& prim, M3dView& view) return QPoint(viewportX, view.portHeight() - viewportY); } +QPoint getInstanceMouseCoords(const PXR_NS::HdSceneIndexPrim& instancerPrim, size_t instanceIndex, M3dView& view) +{ + HdDataSourceBaseHandle instancerXformDataSource = HdContainerDataSource::Get(instancerPrim.dataSource, HdXformSchema::GetDefaultLocator()); + if (!instancerXformDataSource) { + ADD_FAILURE() << "Scene index instancer prim has no default locator data source, cannot get mouse coordinates for the instance."; + return {}; + } + HdContainerDataSourceHandle xformContainerDataSource = HdContainerDataSource::Cast(instancerXformDataSource); + TF_AXIOM(xformContainerDataSource); + HdXformSchema xformSchema(xformContainerDataSource); + TF_AXIOM(xformSchema.GetMatrix()); + GfMatrix4d xformMatrix = xformSchema.GetMatrix()->GetTypedValue(0); + + HdDataSourceLocator instanceTranslationsLocator(HdPrimvarsSchemaTokens->primvars, TfToken("hydra:instanceTranslations"), HdPrimvarSchemaTokens->primvarValue); + auto instanceTranslationsDataSource = HdTypedSampledDataSource>::Cast( + HdContainerDataSource::Get(instancerPrim.dataSource, instanceTranslationsLocator) + ); + if (!instanceTranslationsDataSource) { + ADD_FAILURE() << "Scene index instancer prim has no instance translations data source, cannot get mouse coordinates for the instance."; + return {}; + } + GfVec3f instanceTranslation = instanceTranslationsDataSource->GetTypedValue(0)[instanceIndex]; + + GfVec3d translation = xformMatrix.ExtractTranslation() + instanceTranslation; + + MPoint worldPosition(translation[0], translation[1], translation[2], 1.0); + short viewportX = 0, viewportY = 0; + MStatus worldToViewStatus; + // First assert checks that the point was not clipped, second assert checks the general MStatus + if (!view.worldToView(worldPosition, viewportX, viewportY, &worldToViewStatus)) { + ADD_FAILURE() << "point was clipped by world to view projection, cannot get mouse coordinates for scene index prim."; + return {}; + } + if (worldToViewStatus != MS::kSuccess) { + ADD_FAILURE() << "M3dView::worldToView() failed, cannot get mouse coordinates for scene index prim."; + return {}; + } + + // Qt and M3dView use opposite Y-coordinates + return QPoint(viewportX, view.portHeight() - viewportY); +} + } // namespace MAYAHYDRA_NS_DEF diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.h b/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.h index 63a82708cc..ea45b592b0 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.h +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.h @@ -460,6 +460,8 @@ void mouseClick(Qt::MouseButton mouseButton, QWidget* widget, QPoint localMouseP */ QPoint getPrimMouseCoords(const PXR_NS::HdSceneIndexPrim& prim, M3dView& view); +QPoint getInstanceMouseCoords(const PXR_NS::HdSceneIndexPrim& instancerPrim, size_t instanceIndex, M3dView& view); + } // namespace MAYAHYDRA_NS_DEF #endif // MAYAHYDRA_TEST_UTILS_H From d6a774d61f0d85255c16f5242768cb8d3918c489 Mon Sep 17 00:00:00 2001 From: debloip Date: Wed, 3 Jul 2024 11:21:56 -0400 Subject: [PATCH 47/75] HYDRA-1058 : Instance fallback picking test --- .../cpp/testGeomSubsetsPicking.cpp | 28 +++++++++++++++++++ .../mayaToHydra/cpp/testGeomSubsetsPicking.py | 8 ++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp index d21674674f..7d5ad4e72f 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp @@ -188,6 +188,34 @@ TEST(TestGeomSubsetsPicking, instanceGeomSubsetPicking) ensureSelected(inspector, PrimNamePredicate(geomSubsetName)); } +TEST(TestGeomSubsetsPicking, instanceFallbackPicking) +{ + const SceneIndicesVector& sceneIndices = GetTerminalSceneIndices(); + ASSERT_GT(sceneIndices.size(), 0u); + SceneIndexInspector inspector(sceneIndices.front()); + + const std::string objectName = "SphereMesh"; + const std::string geomSubsetName = "SphereUpperHalf"; + const std::string instancerName = "SphereInstancer"; + + ensureUnselected(inspector, PrimNamePredicate(objectName)); + + PrimEntriesVector instancerPrims = inspector.FindPrims(findPickPrimPredicate(instancerName, HdPrimTypeTokens->instancer)); + ASSERT_EQ(instancerPrims.size(), 1u); + + + M3dView active3dView = M3dView::active3dView(); + + auto primMouseCoords = getInstanceMouseCoords(instancerPrims.front().prim, 0, active3dView); + primMouseCoords += QPoint(0, 25); // Move coords downwards + + mouseClick(Qt::MouseButton::LeftButton, active3dView.widget(), primMouseCoords); + + active3dView.refresh(false, true); + + ensureSelected(inspector, PrimNamePredicate(objectName)); +} + TEST(TestGeomSubsetsPicking, marqueeSelect) { const SceneIndicesVector& sceneIndices = GetTerminalSceneIndices(); diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py index bb4fb92d1a..5f83235019 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py @@ -35,6 +35,8 @@ def setUp(self): cmds.select(clear=True) cmds.optionVar( sv=('mayaHydra_GeomSubsetsPickMode', 'GeomSubsets')) + cmds.optionVar( + sv=('mayaUsd_PointInstancesPickMode', 'Prototypes')) cmds.setAttr('persp.translate', 0, 0, 15, type='float3') cmds.setAttr('persp.rotate', 0, 0, 0, type='float3') self.setHdStormRenderer() @@ -100,9 +102,9 @@ def test_InstanceGeomSubsetPicking(self): with PluginLoaded('mayaHydraCppTests'): cmds.mayaHydraCppTest(f="TestGeomSubsetsPicking.instanceGeomSubsetPicking") - # def test_InstanceFallbackPicking(self): - # with PluginLoaded('mayaHydraCppTests'): - # cmds.mayaHydraCppTest(f="TestGeomSubsetsPicking.instanceFallbackPicking") + def test_InstanceFallbackPicking(self): + with PluginLoaded('mayaHydraCppTests'): + cmds.mayaHydraCppTest(f="TestGeomSubsetsPicking.instanceFallbackPicking") def test_MarqueeSelect(self): with PluginLoaded('mayaHydraCppTests'): From f93a62ef2cc7a55ab65cc934e56a74d2c94d5be2 Mon Sep 17 00:00:00 2001 From: debloip Date: Wed, 3 Jul 2024 11:44:11 -0400 Subject: [PATCH 48/75] HYDRA-1058 : Refactor and cleanup testUtils --- .../render/mayaToHydra/cpp/testUtils.cpp | 64 ++++++++----------- .../render/mayaToHydra/cpp/testUtils.h | 27 ++++++++ 2 files changed, 54 insertions(+), 37 deletions(-) diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.cpp index 19b34d26bf..0d708a5d16 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.cpp @@ -412,25 +412,13 @@ void mouseClick(Qt::MouseButton mouseButton, QWidget* widget, QPoint localMouseP mouseRelease(mouseButton, widget, localMousePos); } -QPoint getPrimMouseCoords(const HdSceneIndexPrim& prim, M3dView& view) +QPoint worldPositionToMouseCoords(const PXR_NS::GfVec3d& worldPosition, M3dView& view) { - HdDataSourceBaseHandle xformDataSource = HdContainerDataSource::Get(prim.dataSource, HdXformSchema::GetDefaultLocator()); - if (!xformDataSource) { - ADD_FAILURE() << "Scene index prim has no default locator data source, cannot get mouse coordinates for it."; - return {}; - } - HdContainerDataSourceHandle xformContainerDataSource = HdContainerDataSource::Cast(xformDataSource); - TF_AXIOM(xformContainerDataSource); - HdXformSchema xformSchema(xformContainerDataSource); - TF_AXIOM(xformSchema.GetMatrix()); - GfMatrix4d xformMatrix = xformSchema.GetMatrix()->GetTypedValue(0); - GfVec3d translation = xformMatrix.ExtractTranslation(); - - MPoint worldPosition(translation[0], translation[1], translation[2], 1.0); + MPoint mayaWorldPosition(worldPosition[0], worldPosition[1], worldPosition[2], 1.0); short viewportX = 0, viewportY = 0; MStatus worldToViewStatus; // First assert checks that the point was not clipped, second assert checks the general MStatus - if (!view.worldToView(worldPosition, viewportX, viewportY, &worldToViewStatus)) { + if (!view.worldToView(mayaWorldPosition, viewportX, viewportY, &worldToViewStatus)) { ADD_FAILURE() << "point was clipped by world to view projection, cannot get mouse coordinates for scene index prim."; return {}; } @@ -443,18 +431,35 @@ QPoint getPrimMouseCoords(const HdSceneIndexPrim& prim, M3dView& view) return QPoint(viewportX, view.portHeight() - viewportY); } -QPoint getInstanceMouseCoords(const PXR_NS::HdSceneIndexPrim& instancerPrim, size_t instanceIndex, M3dView& view) +QPoint getPrimMouseCoords(const HdSceneIndexPrim& prim, M3dView& view) { - HdDataSourceBaseHandle instancerXformDataSource = HdContainerDataSource::Get(instancerPrim.dataSource, HdXformSchema::GetDefaultLocator()); - if (!instancerXformDataSource) { - ADD_FAILURE() << "Scene index instancer prim has no default locator data source, cannot get mouse coordinates for the instance."; + HdDataSourceBaseHandle xformDataSource = HdContainerDataSource::Get(prim.dataSource, HdXformSchema::GetDefaultLocator()); + if (!xformDataSource) { + ADD_FAILURE() << "Scene index prim has no default locator data source, cannot get mouse coordinates for it."; return {}; } - HdContainerDataSourceHandle xformContainerDataSource = HdContainerDataSource::Cast(instancerXformDataSource); + HdContainerDataSourceHandle xformContainerDataSource = HdContainerDataSource::Cast(xformDataSource); TF_AXIOM(xformContainerDataSource); HdXformSchema xformSchema(xformContainerDataSource); TF_AXIOM(xformSchema.GetMatrix()); GfMatrix4d xformMatrix = xformSchema.GetMatrix()->GetTypedValue(0); + + GfVec3d worldPosition = xformMatrix.ExtractTranslation(); + return worldPositionToMouseCoords(worldPosition, view); +} + +QPoint getInstanceMouseCoords(const PXR_NS::HdSceneIndexPrim& instancerPrim, size_t instanceIndex, M3dView& view) +{ + HdDataSourceBaseHandle instancerXformDataSource = HdContainerDataSource::Get(instancerPrim.dataSource, HdXformSchema::GetDefaultLocator()); + if (!instancerXformDataSource) { + ADD_FAILURE() << "Scene index instancer prim has no default locator data source, cannot get mouse coordinates for the instance."; + return {}; + } + HdContainerDataSourceHandle instancerXformContainerDataSource = HdContainerDataSource::Cast(instancerXformDataSource); + TF_AXIOM(instancerXformContainerDataSource); + HdXformSchema instancerXformSchema(instancerXformContainerDataSource); + TF_AXIOM(instancerXformSchema.GetMatrix()); + GfMatrix4d instancerXformMatrix = instancerXformSchema.GetMatrix()->GetTypedValue(0); HdDataSourceLocator instanceTranslationsLocator(HdPrimvarsSchemaTokens->primvars, TfToken("hydra:instanceTranslations"), HdPrimvarSchemaTokens->primvarValue); auto instanceTranslationsDataSource = HdTypedSampledDataSource>::Cast( @@ -466,23 +471,8 @@ QPoint getInstanceMouseCoords(const PXR_NS::HdSceneIndexPrim& instancerPrim, siz } GfVec3f instanceTranslation = instanceTranslationsDataSource->GetTypedValue(0)[instanceIndex]; - GfVec3d translation = xformMatrix.ExtractTranslation() + instanceTranslation; - - MPoint worldPosition(translation[0], translation[1], translation[2], 1.0); - short viewportX = 0, viewportY = 0; - MStatus worldToViewStatus; - // First assert checks that the point was not clipped, second assert checks the general MStatus - if (!view.worldToView(worldPosition, viewportX, viewportY, &worldToViewStatus)) { - ADD_FAILURE() << "point was clipped by world to view projection, cannot get mouse coordinates for scene index prim."; - return {}; - } - if (worldToViewStatus != MS::kSuccess) { - ADD_FAILURE() << "M3dView::worldToView() failed, cannot get mouse coordinates for scene index prim."; - return {}; - } - - // Qt and M3dView use opposite Y-coordinates - return QPoint(viewportX, view.portHeight() - viewportY); + GfVec3d worldPosition = instancerXformMatrix.ExtractTranslation() + instanceTranslation; + return worldPositionToMouseCoords(worldPosition, view); } } // namespace MAYAHYDRA_NS_DEF diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.h b/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.h index ea45b592b0..61bc035c68 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.h +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.h @@ -446,6 +446,20 @@ void mouseRelease(Qt::MouseButton mouseButton, QWidget* widget, QPoint localMous */ void mouseClick(Qt::MouseButton mouseButton, QWidget* widget, QPoint localMousePos); +/** + * @brief Get the mouse coordinates of a position in the world. + * + * This function will return the mouse coordinates for the given world position, + * based on the given view. Note that the view argument is not changed and is + * passed in by non const reference only because its interface is not + * const-correct. + * + * @param[in] worldPosition The world position for which mouse coordinates must be computed. + * @param[in] view The view for which mouse coordinates are returned. + * @return Mouse coordinates. + */ +QPoint worldPositionToMouseCoords(const PXR_NS::GfVec3d& worldPosition, M3dView& view); + /** * @brief Get the mouse coordinates for a scene index prim. * @@ -460,6 +474,19 @@ void mouseClick(Qt::MouseButton mouseButton, QWidget* widget, QPoint localMouseP */ QPoint getPrimMouseCoords(const PXR_NS::HdSceneIndexPrim& prim, M3dView& view); +/** + * @brief Get the mouse coordinates for a scene index prim instance. + * + * This function will return the mouse coordinates for the scene index prim instance's + * local coordinate origin. Note that the view argument is not changed and is + * passed in by non const reference only because its interface is not + * const-correct. + * + * @param[in] instancerPrim The scene index instancer prim that owns the relevant instance. + * @param[in] instanceIndex The index of the relevant instance within the instancer prim. + * @param[in] view The view for which mouse coordinates are returned. + * @return Mouse coordinates. + */ QPoint getInstanceMouseCoords(const PXR_NS::HdSceneIndexPrim& instancerPrim, size_t instanceIndex, M3dView& view); } // namespace MAYAHYDRA_NS_DEF From 0c157122afb628770aeab83239d5623645f08649 Mon Sep 17 00:00:00 2001 From: debloip Date: Wed, 3 Jul 2024 13:23:54 -0400 Subject: [PATCH 49/75] HYDRA-1058 : Cleanup testGeomSubsetsPicking.py --- .../mayaToHydra/cpp/testGeomSubsetsPicking.py | 50 ------------------- 1 file changed, 50 deletions(-) diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py index 5f83235019..caf4e71700 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py @@ -14,7 +14,6 @@ # import maya.cmds as cmds import fixturesUtils -import mayaUtils import mtohUtils import testUtils import usdUtils @@ -39,57 +38,8 @@ def setUp(self): sv=('mayaUsd_PointInstancesPickMode', 'Prototypes')) cmds.setAttr('persp.translate', 0, 0, 15, type='float3') cmds.setAttr('persp.rotate', 0, 0, 0, type='float3') - self.setHdStormRenderer() cmds.refresh() - # def test_SinglePickGeomSubset(self): - # cubeObjectName = self.createMayaCube() - # with PluginLoaded('mayaHydraCppTests'): - # cmds.mayaHydraCppTest(cubeObjectName, "mesh", f="TestGeomSubsetsPicking.pickGeomSubset") - - # def test_PickMayaLight(self): - # directionalLightObjectName = self.createMayaDirectionalLight() - # with PluginLoaded('mayaHydraCppTests'): - # cmds.mayaHydraCppTest(directionalLightObjectName, "simpleLight", f="TestGeomSubsetsPicking.pickObject") - - # def test_PickUsdMesh(self): - # import mayaUsd_createStageWithNewLayer - # stagePath = mayaUsd_createStageWithNewLayer.createStageWithNewLayer() - # cubeObjectName = self.createUsdCubeFromMaya(stagePath) - # with PluginLoaded('mayaHydraCppTests'): - # cmds.mayaHydraCppTest(cubeObjectName, "mesh", f="TestGeomSubsetsPicking.pickObject") - - # def test_PickUsdImplicitSurface(self): - # import mayaUsd_createStageWithNewLayer - # stagePath = mayaUsd_createStageWithNewLayer.createStageWithNewLayer() - # cubeObjectName = self.createUsdCube(stagePath) - # with PluginLoaded('mayaHydraCppTests'): - # cmds.mayaHydraCppTest(cubeObjectName, "mesh", f="TestGeomSubsetsPicking.pickObject") - - # def test_PickUsdLight(self): - # import mayaUsd_createStageWithNewLayer - # stagePath = mayaUsd_createStageWithNewLayer.createStageWithNewLayer() - # rectLightObjectName = self.createUsdRectLight(stagePath) - # with PluginLoaded('mayaHydraCppTests'): - # cmds.mayaHydraCppTest(rectLightObjectName, "rectLight", f="TestGeomSubsetsPicking.pickObject") - - # def test_MarqueeSelection(self): - # import mayaUsd_createStageWithNewLayer - # stagePath = mayaUsd_createStageWithNewLayer.createStageWithNewLayer() - # mayaCubeName = self.createMayaCube() - # mayaDirectionalLightName = self.createMayaDirectionalLight() - # usdMayaCubeName = self.createUsdCubeFromMaya(stagePath) - # usdCubeName = self.createUsdCube(stagePath) - # usdRectLightName = self.createUsdRectLight(stagePath) - # with PluginLoaded('mayaHydraCppTests'): - # cmds.mayaHydraCppTest( - # mayaCubeName, "mesh", - # mayaDirectionalLightName, "simpleLight", - # usdMayaCubeName, "mesh", - # usdCubeName, "mesh", - # usdRectLightName, "rectLight", - # f="TestGeomSubsetsPicking.marqueeSelect") - def test_GeomSubsetPicking(self): with PluginLoaded('mayaHydraCppTests'): cmds.mayaHydraCppTest(f="TestGeomSubsetsPicking.geomSubsetPicking") From dc3720d968a1cba0d0e4cd1bf9ea38e0013aa929 Mon Sep 17 00:00:00 2001 From: debloip Date: Wed, 3 Jul 2024 13:25:47 -0400 Subject: [PATCH 50/75] HYDRA-1058 : Remove dead code --- .../cpp/testGeomSubsetsPicking.cpp | 29 ------------------- 1 file changed, 29 deletions(-) diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp index 7d5ad4e72f..96a59ac1bd 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp @@ -53,8 +53,6 @@ void ensureSelected(const SceneIndexInspector& inspector, const FindPrimPredicat // we'll make sure there are at most two prims for that object. We'll also allow a prim not // to have any selections, but at least one prim must be selected. PrimEntriesVector primEntries = inspector.FindPrims(primPredicate); - //ASSERT_GE(primEntries.size(), 1u); - //ASSERT_LE(primEntries.size(), 2u); size_t nbSelectedPrims = 0; for (const auto& primEntry : primEntries) { @@ -82,33 +80,6 @@ void ensureUnselected(const SceneIndexInspector& inspector, const FindPrimPredic } // namespace -TEST(TestGeomSubsetsPicking, pickObject) -{ - const SceneIndicesVector& sceneIndices = GetTerminalSceneIndices(); - ASSERT_GT(sceneIndices.size(), 0u); - SceneIndexInspector inspector(sceneIndices.front()); - - auto [argc, argv] = getTestingArgs(); - ASSERT_EQ(argc, 2); - const std::string objectName(argv[0]); - const TfToken primType(argv[1]); - - ensureUnselected(inspector, PrimNamePredicate(objectName)); - - PrimEntriesVector prims = inspector.FindPrims(findPickPrimPredicate(objectName, primType)); - ASSERT_EQ(prims.size(), 1u); - - M3dView active3dView = M3dView::active3dView(); - - auto primMouseCoords = getPrimMouseCoords(prims.front().prim, active3dView); - - mouseClick(Qt::MouseButton::LeftButton, active3dView.widget(), primMouseCoords); - - active3dView.refresh(); - - ensureSelected(inspector, PrimNamePredicate(objectName)); -} - TEST(TestGeomSubsetsPicking, geomSubsetPicking) { const SceneIndicesVector& sceneIndices = GetTerminalSceneIndices(); From 357441041b60459605414425c4bfb0d3e5dc4a6d Mon Sep 17 00:00:00 2001 From: debloip Date: Wed, 3 Jul 2024 13:26:05 -0400 Subject: [PATCH 51/75] HYDRA-1058 : Fixup --- .../mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp index 96a59ac1bd..0638fda4a2 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp @@ -48,10 +48,6 @@ FindPrimPredicate findPickPrimPredicate(const std::string& objectName, const TfT void ensureSelected(const SceneIndexInspector& inspector, const FindPrimPredicate& primPredicate) { - // 2024-03-01 : Due to the extra "Lighted" hierarchy, it is possible for an object to be split - // into two prims, only one of which will be selected. We will tolerate this in the test, but - // we'll make sure there are at most two prims for that object. We'll also allow a prim not - // to have any selections, but at least one prim must be selected. PrimEntriesVector primEntries = inspector.FindPrims(primPredicate); size_t nbSelectedPrims = 0; From 44d7aba5a540c7599ae65a32dcd65dad9343598b Mon Sep 17 00:00:00 2001 From: debloip Date: Wed, 3 Jul 2024 20:37:48 -0400 Subject: [PATCH 52/75] HYDRA-1058 : Extract out common test code --- .../cpp/testGeomSubsetsPicking.cpp | 79 +++++++++++-------- 1 file changed, 45 insertions(+), 34 deletions(-) diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp index 0638fda4a2..e009d39ee3 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp @@ -15,11 +15,13 @@ #include "testUtils.h" +#include #include #include #include #include #include +#include #include #include @@ -37,6 +39,15 @@ using namespace MayaHydra; namespace { +const std::string kCubeMesh = "CubeMesh"; +const std::string kCubeUpperHalf = "CubeUpperHalf"; +const std::string kSphereMesh = "SphereMesh"; +const std::string kSphereUpperHalf = "SphereUpperHalf"; + +const std::string kStageUfePathSegment = "|GeomSubsetsPickingTestScene|GeomSubsetsPickingTestSceneShape"; +const std::string kCubeMeshUfePathSegment = "/Root/CubeMeshXform/CubeMesh"; +const std::string kSphereMeshUfePathSegment = "/Root/SphereMeshXform/SphereMesh"; + FindPrimPredicate findPickPrimPredicate(const std::string& objectName, const TfToken& primType) { return [objectName, @@ -74,57 +85,57 @@ void ensureUnselected(const SceneIndexInspector& inspector, const FindPrimPredic } } -} // namespace - -TEST(TestGeomSubsetsPicking, geomSubsetPicking) +void testPrimPicking(const Ufe::Path& clickObjectUfePath, const QPoint& clickOffset, const Ufe::Path& selectedObjectUfePath) { const SceneIndicesVector& sceneIndices = GetTerminalSceneIndices(); ASSERT_GT(sceneIndices.size(), 0u); SceneIndexInspector inspector(sceneIndices.front()); - const std::string objectName = "CubeMesh"; - const std::string geomSubsetName = "CubeUpperHalf"; + auto ufeSelection = Ufe::GlobalSelection::get(); + ASSERT_TRUE(ufeSelection->empty()); - ensureUnselected(inspector, PrimNamePredicate(geomSubsetName)); + const auto selectionSceneIndex = findSelectionSceneIndexInTree(inspector.GetSceneIndex()); + ASSERT_TRUE(selectionSceneIndex); - PrimEntriesVector prims = inspector.FindPrims(findPickPrimPredicate(objectName, HdPrimTypeTokens->mesh)); - ASSERT_EQ(prims.size(), 1u); + const auto selectedObjectSceneIndexPath = selectionSceneIndex->SceneIndexPath(selectedObjectUfePath); - M3dView active3dView = M3dView::active3dView(); + HdSceneIndexPrim selectedObjectSceneIndexPrim = inspector.GetSceneIndex()->GetPrim(selectedObjectSceneIndexPath); + HdSelectionsSchema selectionsSchema = HdSelectionsSchema::GetFromParent(selectedObjectSceneIndexPrim.dataSource); + ASSERT_EQ(selectionsSchema.IsDefined(), false); - auto primMouseCoords = getPrimMouseCoords(prims.front().prim, active3dView); - primMouseCoords -= QPoint(0, 25); // Move coords upwards + M3dView active3dView = M3dView::active3dView(); + const auto clickSceneIndexPath = selectionSceneIndex->SceneIndexPath(clickObjectUfePath); + auto primMouseCoords = getPrimMouseCoords(inspector.GetSceneIndex()->GetPrim(clickSceneIndexPath), active3dView); + primMouseCoords += clickOffset; mouseClick(Qt::MouseButton::LeftButton, active3dView.widget(), primMouseCoords); + active3dView.refresh(); - active3dView.refresh(false, true); + ASSERT_EQ(ufeSelection->size(), 1u); + ASSERT_TRUE(ufeSelection->contains(selectedObjectUfePath)); - ensureSelected(inspector, PrimNamePredicate(geomSubsetName)); + selectedObjectSceneIndexPrim = inspector.GetSceneIndex()->GetPrim(selectedObjectSceneIndexPath); + selectionsSchema = HdSelectionsSchema::GetFromParent(selectedObjectSceneIndexPrim.dataSource); + ASSERT_EQ(selectionsSchema.IsDefined(), true); + ASSERT_EQ(selectionsSchema.GetNumElements(), 1u); + ASSERT_TRUE(selectionsSchema.GetElement(0).GetFullySelected()); } -TEST(TestGeomSubsetsPicking, fallbackPicking) -{ - const SceneIndicesVector& sceneIndices = GetTerminalSceneIndices(); - ASSERT_GT(sceneIndices.size(), 0u); - SceneIndexInspector inspector(sceneIndices.front()); - - const std::string objectName = "CubeMesh"; - - ensureUnselected(inspector, PrimNamePredicate(objectName)); - - PrimEntriesVector prims = inspector.FindPrims(findPickPrimPredicate(objectName, HdPrimTypeTokens->mesh)); - ASSERT_EQ(prims.size(), 1u); - - M3dView active3dView = M3dView::active3dView(); - - auto primMouseCoords = getPrimMouseCoords(prims.front().prim, active3dView); - primMouseCoords += QPoint(0, 25); // Move coords downwards - - mouseClick(Qt::MouseButton::LeftButton, active3dView.widget(), primMouseCoords); +} // namespace - active3dView.refresh(false, true); +TEST(TestGeomSubsetsPicking, geomSubsetPicking) +{ + const auto cubeMeshUfePathString = kStageUfePathSegment + "," + kCubeMeshUfePathSegment; + const auto cubeMeshUfePath = Ufe::PathString::path(cubeMeshUfePathString); + const auto cubeUpperHalfUfePath = Ufe::PathString::path(cubeMeshUfePathString + "/" + kCubeUpperHalf); + testPrimPicking(cubeMeshUfePath, QPoint(0, -25), cubeUpperHalfUfePath); +} - ensureSelected(inspector, PrimNamePredicate(objectName)); +TEST(TestGeomSubsetsPicking, fallbackPicking) +{ + const auto cubeMeshUfePathString = kStageUfePathSegment + "," + kCubeMeshUfePathSegment; + const auto cubeMeshUfePath = Ufe::PathString::path(cubeMeshUfePathString); + testPrimPicking(cubeMeshUfePath, QPoint(0, 25), cubeMeshUfePath); } TEST(TestGeomSubsetsPicking, instanceGeomSubsetPicking) From a2d23144761195d79fea16b7a4696a358d8e187f Mon Sep 17 00:00:00 2001 From: debloip Date: Wed, 3 Jul 2024 20:50:10 -0400 Subject: [PATCH 53/75] HYDRA-1058 : Extract out common test code for instance tests --- .../cpp/testGeomSubsetsPicking.cpp | 99 ++++++++++--------- 1 file changed, 53 insertions(+), 46 deletions(-) diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp index e009d39ee3..1068b91702 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp @@ -47,6 +47,7 @@ const std::string kSphereUpperHalf = "SphereUpperHalf"; const std::string kStageUfePathSegment = "|GeomSubsetsPickingTestScene|GeomSubsetsPickingTestSceneShape"; const std::string kCubeMeshUfePathSegment = "/Root/CubeMeshXform/CubeMesh"; const std::string kSphereMeshUfePathSegment = "/Root/SphereMeshXform/SphereMesh"; +const std::string kSphereInstancerUfePathSegment = "/Root/SphereInstancer"; FindPrimPredicate findPickPrimPredicate(const std::string& objectName, const TfToken& primType) { @@ -104,8 +105,8 @@ void testPrimPicking(const Ufe::Path& clickObjectUfePath, const QPoint& clickOff ASSERT_EQ(selectionsSchema.IsDefined(), false); M3dView active3dView = M3dView::active3dView(); - const auto clickSceneIndexPath = selectionSceneIndex->SceneIndexPath(clickObjectUfePath); - auto primMouseCoords = getPrimMouseCoords(inspector.GetSceneIndex()->GetPrim(clickSceneIndexPath), active3dView); + const auto clickObjectSceneIndexPath = selectionSceneIndex->SceneIndexPath(clickObjectUfePath); + auto primMouseCoords = getPrimMouseCoords(inspector.GetSceneIndex()->GetPrim(clickObjectSceneIndexPath), active3dView); primMouseCoords += clickOffset; mouseClick(Qt::MouseButton::LeftButton, active3dView.widget(), primMouseCoords); @@ -121,6 +122,46 @@ void testPrimPicking(const Ufe::Path& clickObjectUfePath, const QPoint& clickOff ASSERT_TRUE(selectionsSchema.GetElement(0).GetFullySelected()); } +void testInstancePicking(const Ufe::Path& clickInstancerUfePath, int clickInstanceIndex, const QPoint& clickOffset, const Ufe::Path& selectedObjectUfePath) +{ + const SceneIndicesVector& sceneIndices = GetTerminalSceneIndices(); + ASSERT_GT(sceneIndices.size(), 0u); + SceneIndexInspector inspector(sceneIndices.front()); + + auto ufeSelection = Ufe::GlobalSelection::get(); + ASSERT_TRUE(ufeSelection->empty()); + + const auto selectionSceneIndex = findSelectionSceneIndexInTree(inspector.GetSceneIndex()); + ASSERT_TRUE(selectionSceneIndex); + + const auto selectedObjectSceneIndexPaths = selectionSceneIndex->SceneIndexPaths(selectedObjectUfePath); + + for (const auto& selectedObjectSceneIndexPath : selectedObjectSceneIndexPaths) { + HdSceneIndexPrim selectedObjectSceneIndexPrim = inspector.GetSceneIndex()->GetPrim(selectedObjectSceneIndexPath); + HdSelectionsSchema selectionsSchema = HdSelectionsSchema::GetFromParent(selectedObjectSceneIndexPrim.dataSource); + ASSERT_EQ(selectionsSchema.IsDefined(), false); + } + + M3dView active3dView = M3dView::active3dView(); + const auto clickInstancerSceneIndexPath = selectionSceneIndex->SceneIndexPath(clickInstancerUfePath); + auto primMouseCoords = getInstanceMouseCoords(inspector.GetSceneIndex()->GetPrim(clickInstancerSceneIndexPath), clickInstanceIndex, active3dView); + primMouseCoords += clickOffset; + + mouseClick(Qt::MouseButton::LeftButton, active3dView.widget(), primMouseCoords); + active3dView.refresh(); + + ASSERT_EQ(ufeSelection->size(), 1u); + ASSERT_TRUE(ufeSelection->contains(selectedObjectUfePath)); + + for (const auto& selectedObjectSceneIndexPath : selectedObjectSceneIndexPaths) { + HdSceneIndexPrim selectedObjectSceneIndexPrim = inspector.GetSceneIndex()->GetPrim(selectedObjectSceneIndexPath); + HdSelectionsSchema selectionsSchema = HdSelectionsSchema::GetFromParent(selectedObjectSceneIndexPrim.dataSource); + ASSERT_EQ(selectionsSchema.IsDefined(), true); + ASSERT_EQ(selectionsSchema.GetNumElements(), 1u); + ASSERT_TRUE(selectionsSchema.GetElement(0).GetFullySelected()); + } +} + } // namespace TEST(TestGeomSubsetsPicking, geomSubsetPicking) @@ -140,58 +181,24 @@ TEST(TestGeomSubsetsPicking, fallbackPicking) TEST(TestGeomSubsetsPicking, instanceGeomSubsetPicking) { - const SceneIndicesVector& sceneIndices = GetTerminalSceneIndices(); - ASSERT_GT(sceneIndices.size(), 0u); - SceneIndexInspector inspector(sceneIndices.front()); - - const std::string objectName = "SphereMesh"; - const std::string geomSubsetName = "SphereUpperHalf"; - const std::string instancerName = "SphereInstancer"; - - ensureUnselected(inspector, PrimNamePredicate(geomSubsetName)); - - PrimEntriesVector instancerPrims = inspector.FindPrims(findPickPrimPredicate(instancerName, HdPrimTypeTokens->instancer)); - ASSERT_EQ(instancerPrims.size(), 1u); - + const auto sphereInstancerUfePathString = kStageUfePathSegment + "," + kSphereInstancerUfePathSegment; + const auto sphereInstancerUfePath = Ufe::PathString::path(sphereInstancerUfePathString); - M3dView active3dView = M3dView::active3dView(); - - auto primMouseCoords = getInstanceMouseCoords(instancerPrims.front().prim, 0, active3dView); - primMouseCoords -= QPoint(0, 25); // Move coords upwards - - mouseClick(Qt::MouseButton::LeftButton, active3dView.widget(), primMouseCoords); - - active3dView.refresh(false, true); + const auto sphereMeshUfePathString = kStageUfePathSegment + "," + kSphereMeshUfePathSegment; + const auto sphereUpperHalfUfePath = Ufe::PathString::path(sphereMeshUfePathString + "/" + kSphereUpperHalf); - ensureSelected(inspector, PrimNamePredicate(geomSubsetName)); + testInstancePicking(sphereInstancerUfePath, 0, QPoint(0, -25), sphereUpperHalfUfePath); } TEST(TestGeomSubsetsPicking, instanceFallbackPicking) { - const SceneIndicesVector& sceneIndices = GetTerminalSceneIndices(); - ASSERT_GT(sceneIndices.size(), 0u); - SceneIndexInspector inspector(sceneIndices.front()); - - const std::string objectName = "SphereMesh"; - const std::string geomSubsetName = "SphereUpperHalf"; - const std::string instancerName = "SphereInstancer"; - - ensureUnselected(inspector, PrimNamePredicate(objectName)); - - PrimEntriesVector instancerPrims = inspector.FindPrims(findPickPrimPredicate(instancerName, HdPrimTypeTokens->instancer)); - ASSERT_EQ(instancerPrims.size(), 1u); - + const auto sphereInstancerUfePathString = kStageUfePathSegment + "," + kSphereInstancerUfePathSegment; + const auto sphereInstancerUfePath = Ufe::PathString::path(sphereInstancerUfePathString); - M3dView active3dView = M3dView::active3dView(); - - auto primMouseCoords = getInstanceMouseCoords(instancerPrims.front().prim, 0, active3dView); - primMouseCoords += QPoint(0, 25); // Move coords downwards - - mouseClick(Qt::MouseButton::LeftButton, active3dView.widget(), primMouseCoords); - - active3dView.refresh(false, true); + const auto sphereMeshUfePathString = kStageUfePathSegment + "," + kSphereMeshUfePathSegment; + const auto sphereMeshUfePath = Ufe::PathString::path(sphereMeshUfePathString); - ensureSelected(inspector, PrimNamePredicate(objectName)); + testInstancePicking(sphereInstancerUfePath, 0, QPoint(0, 25), sphereMeshUfePath); } TEST(TestGeomSubsetsPicking, marqueeSelect) From 9d4a414faeb724e0c736fb7ba74086336974a49b Mon Sep 17 00:00:00 2001 From: debloip Date: Wed, 3 Jul 2024 21:02:27 -0400 Subject: [PATCH 54/75] HYDRA-1058 : Cleanup tests --- .../cpp/testGeomSubsetsPicking.cpp | 67 +++++++------------ 1 file changed, 24 insertions(+), 43 deletions(-) diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp index 1068b91702..a1514c780b 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp @@ -39,50 +39,34 @@ using namespace MayaHydra; namespace { -const std::string kCubeMesh = "CubeMesh"; -const std::string kCubeUpperHalf = "CubeUpperHalf"; -const std::string kSphereMesh = "SphereMesh"; -const std::string kSphereUpperHalf = "SphereUpperHalf"; - const std::string kStageUfePathSegment = "|GeomSubsetsPickingTestScene|GeomSubsetsPickingTestSceneShape"; const std::string kCubeMeshUfePathSegment = "/Root/CubeMeshXform/CubeMesh"; const std::string kSphereMeshUfePathSegment = "/Root/SphereMeshXform/SphereMesh"; const std::string kSphereInstancerUfePathSegment = "/Root/SphereInstancer"; -FindPrimPredicate findPickPrimPredicate(const std::string& objectName, const TfToken& primType) -{ - return [objectName, - primType](const HdSceneIndexBaseRefPtr& sceneIndex, const SdfPath& primPath) -> bool { - return primPath.GetAsString().find(objectName) != std::string::npos - && sceneIndex->GetPrim(primPath).primType == primType; - }; -} +const std::string kCubeUpperHalfName = "CubeUpperHalf"; +const std::string kSphereUpperHalfName = "SphereUpperHalf"; -void ensureSelected(const SceneIndexInspector& inspector, const FindPrimPredicate& primPredicate) +void assertUnselected(const SceneIndexInspector& inspector, const FindPrimPredicate& primPredicate) { PrimEntriesVector primEntries = inspector.FindPrims(primPredicate); - - size_t nbSelectedPrims = 0; for (const auto& primEntry : primEntries) { HdSelectionsSchema selectionsSchema = HdSelectionsSchema::GetFromParent(primEntry.prim.dataSource); - if (selectionsSchema.GetNumElements() > 0u) { - ASSERT_EQ(selectionsSchema.GetNumElements(), 1u); - HdSelectionSchema selectionSchema = selectionsSchema.GetElement(0); - EXPECT_TRUE(selectionSchema.GetFullySelected()); - nbSelectedPrims++; - } + ASSERT_FALSE(selectionsSchema.IsDefined()); } - - ASSERT_GT(nbSelectedPrims, 0u); } -void ensureUnselected(const SceneIndexInspector& inspector, const FindPrimPredicate& primPredicate) +void assertSelected(const SceneIndexInspector& inspector, const FindPrimPredicate& primPredicate) { PrimEntriesVector primEntries = inspector.FindPrims(primPredicate); + ASSERT_FALSE(primEntries.empty()); + for (const auto& primEntry : primEntries) { - HdSelectionsSchema selectionsSchema - = HdSelectionsSchema::GetFromParent(primEntry.prim.dataSource); - ASSERT_EQ(selectionsSchema.IsDefined(), false); + HdSelectionsSchema selectionsSchema = HdSelectionsSchema::GetFromParent(primEntry.prim.dataSource); + ASSERT_TRUE(selectionsSchema.IsDefined()); + ASSERT_EQ(selectionsSchema.GetNumElements(), 1u); + HdSelectionSchema selectionSchema = selectionsSchema.GetElement(0); + ASSERT_TRUE(selectionSchema.GetFullySelected()); } } @@ -168,7 +152,7 @@ TEST(TestGeomSubsetsPicking, geomSubsetPicking) { const auto cubeMeshUfePathString = kStageUfePathSegment + "," + kCubeMeshUfePathSegment; const auto cubeMeshUfePath = Ufe::PathString::path(cubeMeshUfePathString); - const auto cubeUpperHalfUfePath = Ufe::PathString::path(cubeMeshUfePathString + "/" + kCubeUpperHalf); + const auto cubeUpperHalfUfePath = Ufe::PathString::path(cubeMeshUfePathString + "/" + kCubeUpperHalfName); testPrimPicking(cubeMeshUfePath, QPoint(0, -25), cubeUpperHalfUfePath); } @@ -185,7 +169,7 @@ TEST(TestGeomSubsetsPicking, instanceGeomSubsetPicking) const auto sphereInstancerUfePath = Ufe::PathString::path(sphereInstancerUfePathString); const auto sphereMeshUfePathString = kStageUfePathSegment + "," + kSphereMeshUfePathSegment; - const auto sphereUpperHalfUfePath = Ufe::PathString::path(sphereMeshUfePathString + "/" + kSphereUpperHalf); + const auto sphereUpperHalfUfePath = Ufe::PathString::path(sphereMeshUfePathString + "/" + kSphereUpperHalfName); testInstancePicking(sphereInstancerUfePath, 0, QPoint(0, -25), sphereUpperHalfUfePath); } @@ -208,33 +192,30 @@ TEST(TestGeomSubsetsPicking, marqueeSelect) SceneIndexInspector inspector(sceneIndices.front()); std::vector geomSubsetNamesToSelect = {"CubeUpperHalf", "SphereUpperHalf"}; + + auto ufeSelection = Ufe::GlobalSelection::get(); + ASSERT_TRUE(ufeSelection->empty()); for (const auto& geomSubsetName : geomSubsetNamesToSelect) { - ensureUnselected(inspector, PrimNamePredicate(geomSubsetName)); + assertUnselected(inspector, PrimNamePredicate(geomSubsetName)); } - auto ufeSelection = Ufe::GlobalSelection::get(); - EXPECT_TRUE(ufeSelection->empty()); - M3dView active3dView = M3dView::active3dView(); // Initialize the selection rectangle - int offset = 10; - QPoint topLeftMouseCoords(0 + offset, 0 + offset); - QPoint bottomRightMouseCoords(active3dView.portWidth() - offset, active3dView.portHeight() - offset); + int offsetFromBorder = 10; + QPoint topLeftMouseCoords(0 + offsetFromBorder, 0 + offsetFromBorder); + QPoint bottomRightMouseCoords(active3dView.portWidth() - offsetFromBorder, active3dView.portHeight() - offsetFromBorder); // Perform the marquee selection mousePress(Qt::MouseButton::LeftButton, active3dView.widget(), topLeftMouseCoords); mouseMoveTo(active3dView.widget(), bottomRightMouseCoords); mouseRelease(Qt::MouseButton::LeftButton, active3dView.widget(), bottomRightMouseCoords); + active3dView.refresh(); - active3dView.refresh(false, true); - - std::ofstream outFile("HydraSceneDump.txt"); - HdUtils::PrintSceneIndex(outFile, inspector.GetSceneIndex()); - outFile.close(); + ASSERT_EQ(ufeSelection->size(), 2u); for (const auto& geomSubsetName : geomSubsetNamesToSelect) { - ensureSelected(inspector, PrimNamePredicate(geomSubsetName)); + assertSelected(inspector, PrimNamePredicate(geomSubsetName)); } } From 514fa73966bcde95d20afed66c3406dc9ef18e4b Mon Sep 17 00:00:00 2001 From: debloip Date: Wed, 3 Jul 2024 21:06:22 -0400 Subject: [PATCH 55/75] HYDRA-1058 : Cleanup test headers and increase thoroughness --- .../mayaToHydra/cpp/testGeomSubsetsPicking.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp index a1514c780b..f3c43ae012 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp @@ -18,10 +18,6 @@ #include #include #include -#include -#include -#include -#include #include #include @@ -191,6 +187,12 @@ TEST(TestGeomSubsetsPicking, marqueeSelect) ASSERT_GT(sceneIndices.size(), 0u); SceneIndexInspector inspector(sceneIndices.front()); + const auto cubeMeshUfePathString = kStageUfePathSegment + "," + kCubeMeshUfePathSegment; + const auto cubeUpperHalfUfePath = Ufe::PathString::path(cubeMeshUfePathString + "/" + kCubeUpperHalfName); + + const auto sphereMeshUfePathString = kStageUfePathSegment + "," + kSphereMeshUfePathSegment; + const auto sphereUpperHalfUfePath = Ufe::PathString::path(sphereMeshUfePathString + "/" + kSphereUpperHalfName); + std::vector geomSubsetNamesToSelect = {"CubeUpperHalf", "SphereUpperHalf"}; auto ufeSelection = Ufe::GlobalSelection::get(); @@ -214,6 +216,8 @@ TEST(TestGeomSubsetsPicking, marqueeSelect) active3dView.refresh(); ASSERT_EQ(ufeSelection->size(), 2u); + ASSERT_TRUE(ufeSelection->contains(cubeUpperHalfUfePath)); + ASSERT_TRUE(ufeSelection->contains(sphereUpperHalfUfePath)); for (const auto& geomSubsetName : geomSubsetNamesToSelect) { assertSelected(inspector, PrimNamePredicate(geomSubsetName)); From f2b8201d77a582eee59da687c5af1210c5c4d230 Mon Sep 17 00:00:00 2001 From: debloip Date: Wed, 3 Jul 2024 21:09:22 -0400 Subject: [PATCH 56/75] HYDRA-1058 : Remove unused file --- .../GeomSubsetWithMat.usda | 66 ------------------- 1 file changed, 66 deletions(-) delete mode 100644 test/testSamples/testGeomSubsetsPicking/GeomSubsetWithMat.usda diff --git a/test/testSamples/testGeomSubsetsPicking/GeomSubsetWithMat.usda b/test/testSamples/testGeomSubsetsPicking/GeomSubsetWithMat.usda deleted file mode 100644 index 43a9b3c439..0000000000 --- a/test/testSamples/testGeomSubsetsPicking/GeomSubsetWithMat.usda +++ /dev/null @@ -1,66 +0,0 @@ -#usda 1.0 - -def Xform "MeshXform" -{ - def Mesh "pSphere1" ( - kind = "component" - ) - { - uniform bool doubleSided = 1 - float3[] extent = [(-1.0000002, -1, -1.0000005), (1, 1, 1.0000001)] - 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, 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, 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, 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, 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, 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, 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, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] - int[] faceVertexIndices = [0, 1, 21, 20, 1, 2, 22, 21, 2, 3, 23, 22, 3, 4, 24, 23, 4, 5, 25, 24, 5, 6, 26, 25, 6, 7, 27, 26, 7, 8, 28, 27, 8, 9, 29, 28, 9, 10, 30, 29, 10, 11, 31, 30, 11, 12, 32, 31, 12, 13, 33, 32, 13, 14, 34, 33, 14, 15, 35, 34, 15, 16, 36, 35, 16, 17, 37, 36, 17, 18, 38, 37, 18, 19, 39, 38, 19, 0, 20, 39, 20, 21, 41, 40, 21, 22, 42, 41, 22, 23, 43, 42, 23, 24, 44, 43, 24, 25, 45, 44, 25, 26, 46, 45, 26, 27, 47, 46, 27, 28, 48, 47, 28, 29, 49, 48, 29, 30, 50, 49, 30, 31, 51, 50, 31, 32, 52, 51, 32, 33, 53, 52, 33, 34, 54, 53, 34, 35, 55, 54, 35, 36, 56, 55, 36, 37, 57, 56, 37, 38, 58, 57, 38, 39, 59, 58, 39, 20, 40, 59, 40, 41, 61, 60, 41, 42, 62, 61, 42, 43, 63, 62, 43, 44, 64, 63, 44, 45, 65, 64, 45, 46, 66, 65, 46, 47, 67, 66, 47, 48, 68, 67, 48, 49, 69, 68, 49, 50, 70, 69, 50, 51, 71, 70, 51, 52, 72, 71, 52, 53, 73, 72, 53, 54, 74, 73, 54, 55, 75, 74, 55, 56, 76, 75, 56, 57, 77, 76, 57, 58, 78, 77, 58, 59, 79, 78, 59, 40, 60, 79, 60, 61, 81, 80, 61, 62, 82, 81, 62, 63, 83, 82, 63, 64, 84, 83, 64, 65, 85, 84, 65, 66, 86, 85, 66, 67, 87, 86, 67, 68, 88, 87, 68, 69, 89, 88, 69, 70, 90, 89, 70, 71, 91, 90, 71, 72, 92, 91, 72, 73, 93, 92, 73, 74, 94, 93, 74, 75, 95, 94, 75, 76, 96, 95, 76, 77, 97, 96, 77, 78, 98, 97, 78, 79, 99, 98, 79, 60, 80, 99, 80, 81, 101, 100, 81, 82, 102, 101, 82, 83, 103, 102, 83, 84, 104, 103, 84, 85, 105, 104, 85, 86, 106, 105, 86, 87, 107, 106, 87, 88, 108, 107, 88, 89, 109, 108, 89, 90, 110, 109, 90, 91, 111, 110, 91, 92, 112, 111, 92, 93, 113, 112, 93, 94, 114, 113, 94, 95, 115, 114, 95, 96, 116, 115, 96, 97, 117, 116, 97, 98, 118, 117, 98, 99, 119, 118, 99, 80, 100, 119, 100, 101, 121, 120, 101, 102, 122, 121, 102, 103, 123, 122, 103, 104, 124, 123, 104, 105, 125, 124, 105, 106, 126, 125, 106, 107, 127, 126, 107, 108, 128, 127, 108, 109, 129, 128, 109, 110, 130, 129, 110, 111, 131, 130, 111, 112, 132, 131, 112, 113, 133, 132, 113, 114, 134, 133, 114, 115, 135, 134, 115, 116, 136, 135, 116, 117, 137, 136, 117, 118, 138, 137, 118, 119, 139, 138, 119, 100, 120, 139, 120, 121, 141, 140, 121, 122, 142, 141, 122, 123, 143, 142, 123, 124, 144, 143, 124, 125, 145, 144, 125, 126, 146, 145, 126, 127, 147, 146, 127, 128, 148, 147, 128, 129, 149, 148, 129, 130, 150, 149, 130, 131, 151, 150, 131, 132, 152, 151, 132, 133, 153, 152, 133, 134, 154, 153, 134, 135, 155, 154, 135, 136, 156, 155, 136, 137, 157, 156, 137, 138, 158, 157, 138, 139, 159, 158, 139, 120, 140, 159, 140, 141, 161, 160, 141, 142, 162, 161, 142, 143, 163, 162, 143, 144, 164, 163, 144, 145, 165, 164, 145, 146, 166, 165, 146, 147, 167, 166, 147, 148, 168, 167, 148, 149, 169, 168, 149, 150, 170, 169, 150, 151, 171, 170, 151, 152, 172, 171, 152, 153, 173, 172, 153, 154, 174, 173, 154, 155, 175, 174, 155, 156, 176, 175, 156, 157, 177, 176, 157, 158, 178, 177, 158, 159, 179, 178, 159, 140, 160, 179, 160, 161, 181, 180, 161, 162, 182, 181, 162, 163, 183, 182, 163, 164, 184, 183, 164, 165, 185, 184, 165, 166, 186, 185, 166, 167, 187, 186, 167, 168, 188, 187, 168, 169, 189, 188, 169, 170, 190, 189, 170, 171, 191, 190, 171, 172, 192, 191, 172, 173, 193, 192, 173, 174, 194, 193, 174, 175, 195, 194, 175, 176, 196, 195, 176, 177, 197, 196, 177, 178, 198, 197, 178, 179, 199, 198, 179, 160, 180, 199, 180, 181, 201, 200, 181, 182, 202, 201, 182, 183, 203, 202, 183, 184, 204, 203, 184, 185, 205, 204, 185, 186, 206, 205, 186, 187, 207, 206, 187, 188, 208, 207, 188, 189, 209, 208, 189, 190, 210, 209, 190, 191, 211, 210, 191, 192, 212, 211, 192, 193, 213, 212, 193, 194, 214, 213, 194, 195, 215, 214, 195, 196, 216, 215, 196, 197, 217, 216, 197, 198, 218, 217, 198, 199, 219, 218, 199, 180, 200, 219, 200, 201, 221, 220, 201, 202, 222, 221, 202, 203, 223, 222, 203, 204, 224, 223, 204, 205, 225, 224, 205, 206, 226, 225, 206, 207, 227, 226, 207, 208, 228, 227, 208, 209, 229, 228, 209, 210, 230, 229, 210, 211, 231, 230, 211, 212, 232, 231, 212, 213, 233, 232, 213, 214, 234, 233, 214, 215, 235, 234, 215, 216, 236, 235, 216, 217, 237, 236, 217, 218, 238, 237, 218, 219, 239, 238, 219, 200, 220, 239, 220, 221, 241, 240, 221, 222, 242, 241, 222, 223, 243, 242, 223, 224, 244, 243, 224, 225, 245, 244, 225, 226, 246, 245, 226, 227, 247, 246, 227, 228, 248, 247, 228, 229, 249, 248, 229, 230, 250, 249, 230, 231, 251, 250, 231, 232, 252, 251, 232, 233, 253, 252, 233, 234, 254, 253, 234, 235, 255, 254, 235, 236, 256, 255, 236, 237, 257, 256, 237, 238, 258, 257, 238, 239, 259, 258, 239, 220, 240, 259, 240, 241, 261, 260, 241, 242, 262, 261, 242, 243, 263, 262, 243, 244, 264, 263, 244, 245, 265, 264, 245, 246, 266, 265, 246, 247, 267, 266, 247, 248, 268, 267, 248, 249, 269, 268, 249, 250, 270, 269, 250, 251, 271, 270, 251, 252, 272, 271, 252, 253, 273, 272, 253, 254, 274, 273, 254, 255, 275, 274, 255, 256, 276, 275, 256, 257, 277, 276, 257, 258, 278, 277, 258, 259, 279, 278, 259, 240, 260, 279, 260, 261, 281, 280, 261, 262, 282, 281, 262, 263, 283, 282, 263, 264, 284, 283, 264, 265, 285, 284, 265, 266, 286, 285, 266, 267, 287, 286, 267, 268, 288, 287, 268, 269, 289, 288, 269, 270, 290, 289, 270, 271, 291, 290, 271, 272, 292, 291, 272, 273, 293, 292, 273, 274, 294, 293, 274, 275, 295, 294, 275, 276, 296, 295, 276, 277, 297, 296, 277, 278, 298, 297, 278, 279, 299, 298, 279, 260, 280, 299, 280, 281, 301, 300, 281, 282, 302, 301, 282, 283, 303, 302, 283, 284, 304, 303, 284, 285, 305, 304, 285, 286, 306, 305, 286, 287, 307, 306, 287, 288, 308, 307, 288, 289, 309, 308, 289, 290, 310, 309, 290, 291, 311, 310, 291, 292, 312, 311, 292, 293, 313, 312, 293, 294, 314, 313, 294, 295, 315, 314, 295, 296, 316, 315, 296, 297, 317, 316, 297, 298, 318, 317, 298, 299, 319, 318, 299, 280, 300, 319, 300, 301, 321, 320, 301, 302, 322, 321, 302, 303, 323, 322, 303, 304, 324, 323, 304, 305, 325, 324, 305, 306, 326, 325, 306, 307, 327, 326, 307, 308, 328, 327, 308, 309, 329, 328, 309, 310, 330, 329, 310, 311, 331, 330, 311, 312, 332, 331, 312, 313, 333, 332, 313, 314, 334, 333, 314, 315, 335, 334, 315, 316, 336, 335, 316, 317, 337, 336, 317, 318, 338, 337, 318, 319, 339, 338, 319, 300, 320, 339, 320, 321, 341, 340, 321, 322, 342, 341, 322, 323, 343, 342, 323, 324, 344, 343, 324, 325, 345, 344, 325, 326, 346, 345, 326, 327, 347, 346, 327, 328, 348, 347, 328, 329, 349, 348, 329, 330, 350, 349, 330, 331, 351, 350, 331, 332, 352, 351, 332, 333, 353, 352, 333, 334, 354, 353, 334, 335, 355, 354, 335, 336, 356, 355, 336, 337, 357, 356, 337, 338, 358, 357, 338, 339, 359, 358, 339, 320, 340, 359, 340, 341, 361, 360, 341, 342, 362, 361, 342, 343, 363, 362, 343, 344, 364, 363, 344, 345, 365, 364, 345, 346, 366, 365, 346, 347, 367, 366, 347, 348, 368, 367, 348, 349, 369, 368, 349, 350, 370, 369, 350, 351, 371, 370, 351, 352, 372, 371, 352, 353, 373, 372, 353, 354, 374, 373, 354, 355, 375, 374, 355, 356, 376, 375, 356, 357, 377, 376, 357, 358, 378, 377, 358, 359, 379, 378, 359, 340, 360, 379, 1, 0, 380, 2, 1, 380, 3, 2, 380, 4, 3, 380, 5, 4, 380, 6, 5, 380, 7, 6, 380, 8, 7, 380, 9, 8, 380, 10, 9, 380, 11, 10, 380, 12, 11, 380, 13, 12, 380, 14, 13, 380, 15, 14, 380, 16, 15, 380, 17, 16, 380, 18, 17, 380, 19, 18, 380, 0, 19, 380, 360, 361, 381, 361, 362, 381, 362, 363, 381, 363, 364, 381, 364, 365, 381, 365, 366, 381, 366, 367, 381, 367, 368, 381, 368, 369, 381, 369, 370, 381, 370, 371, 381, 371, 372, 381, 372, 373, 381, 373, 374, 381, 374, 375, 381, 375, 376, 381, 376, 377, 381, 377, 378, 381, 378, 379, 381, 379, 360, 381] - point3f[] points = [(0.14877813, -0.98768836, -0.048340943), (0.12655823, -0.98768836, -0.09194993), (0.09194993, -0.98768836, -0.12655823), (0.048340935, -0.98768836, -0.14877811), (0, -0.98768836, -0.15643455), (-0.048340935, -0.98768836, -0.1487781), (-0.09194992, -0.98768836, -0.1265582), (-0.12655818, -0.98768836, -0.0919499), (-0.14877807, -0.98768836, -0.048340924), (-0.15643452, -0.98768836, 0), (-0.14877807, -0.98768836, 0.048340924), (-0.12655818, -0.98768836, 0.091949895), (-0.091949895, -0.98768836, 0.12655817), (-0.048340924, -0.98768836, 0.14877805), (-4.6621107e-9, -0.98768836, 0.15643449), (0.04834091, -0.98768836, 0.14877804), (0.09194988, -0.98768836, 0.12655815), (0.12655815, -0.98768836, 0.09194989), (0.14877804, -0.98768836, 0.048340913), (0.15643448, -0.98768836, 0), (0.29389283, -0.95105654, -0.095491566), (0.25000018, -0.95105654, -0.18163574), (0.18163574, -0.95105654, -0.25000015), (0.09549155, -0.95105654, -0.2938928), (0, -0.95105654, -0.30901715), (-0.09549155, -0.95105654, -0.29389277), (-0.18163571, -0.95105654, -0.2500001), (-0.2500001, -0.95105654, -0.1816357), (-0.2938927, -0.95105654, -0.09549153), (-0.30901706, -0.95105654, 0), (-0.2938927, -0.95105654, 0.09549153), (-0.25000006, -0.95105654, 0.18163568), (-0.18163568, -0.95105654, 0.25000006), (-0.09549153, -0.95105654, 0.29389268), (-9.209424e-9, -0.95105654, 0.30901703), (0.0954915, -0.95105654, 0.29389265), (0.18163563, -0.95105654, 0.25000003), (0.25, -0.95105654, 0.18163565), (0.29389265, -0.95105654, 0.095491506), (0.309017, -0.95105654, 0), (0.43177092, -0.8910065, -0.14029087), (0.3672863, -0.8910065, -0.2668491), (0.2668491, -0.8910065, -0.36728626), (0.14029086, -0.8910065, -0.43177086), (0, -0.8910065, -0.45399073), (-0.14029086, -0.8910065, -0.43177083), (-0.26684904, -0.8910065, -0.36728618), (-0.36728615, -0.8910065, -0.266849), (-0.43177077, -0.8910065, -0.14029081), (-0.45399064, -0.8910065, 0), (-0.43177077, -0.8910065, 0.14029081), (-0.36728612, -0.8910065, 0.26684898), (-0.26684898, -0.8910065, 0.36728612), (-0.14029081, -0.8910065, 0.4317707), (-1.3529972e-8, -0.8910065, 0.45399058), (0.14029078, -0.8910065, 0.43177068), (0.26684892, -0.8910065, 0.3672861), (0.36728606, -0.8910065, 0.26684895), (0.43177065, -0.8910065, 0.1402908), (0.45399052, -0.8910065, 0), (0.55901736, -0.809017, -0.18163574), (0.47552857, -0.809017, -0.3454917), (0.3454917, -0.809017, -0.47552854), (0.18163572, -0.809017, -0.5590173), (0, -0.809017, -0.58778554), (-0.18163572, -0.809017, -0.55901724), (-0.34549165, -0.809017, -0.47552842), (-0.4755284, -0.809017, -0.3454916), (-0.5590171, -0.809017, -0.18163566), (-0.58778536, -0.809017, 0), (-0.5590171, -0.809017, 0.18163566), (-0.47552836, -0.809017, 0.34549156), (-0.34549156, -0.809017, 0.47552833), (-0.18163566, -0.809017, 0.55901706), (-1.7517365e-8, -0.809017, 0.5877853), (0.18163562, -0.809017, 0.55901706), (0.3454915, -0.809017, 0.4755283), (0.47552827, -0.809017, 0.34549153), (0.559017, -0.809017, 0.18163563), (0.58778524, -0.809017, 0), (0.67249894, -0.70710677, -0.21850814), (0.5720618, -0.70710677, -0.41562718), (0.41562718, -0.70710677, -0.5720617), (0.21850812, -0.70710677, -0.6724989), (0, -0.70710677, -0.7071071), (-0.21850812, -0.70710677, -0.6724988), (-0.4156271, -0.70710677, -0.5720616), (-0.57206154, -0.70710677, -0.41562706), (-0.6724987, -0.70710677, -0.21850805), (-0.70710695, -0.70710677, 0), (-0.6724987, -0.70710677, 0.21850805), (-0.57206154, -0.70710677, 0.415627), (-0.415627, -0.70710677, 0.5720615), (-0.21850805, -0.70710677, 0.6724986), (-2.1073424e-8, -0.70710677, 0.7071068), (0.21850799, -0.70710677, 0.6724986), (0.4156269, -0.70710677, 0.5720614), (0.5720614, -0.70710677, 0.41562697), (0.6724985, -0.70710677, 0.21850802), (0.70710677, -0.70710677, 0), (0.7694214, -0.58778524, -0.25000015), (0.65450895, -0.58778524, -0.47552854), (0.47552854, -0.58778524, -0.6545089), (0.25000012, -0.58778524, -0.7694213), (0, -0.58778524, -0.80901736), (-0.25000012, -0.58778524, -0.7694212), (-0.47552845, -0.58778524, -0.65450877), (-0.6545087, -0.58778524, -0.4755284), (-0.7694211, -0.58778524, -0.25000006), (-0.8090172, -0.58778524, 0), (-0.7694211, -0.58778524, 0.25000006), (-0.65450865, -0.58778524, 0.47552836), (-0.47552836, -0.58778524, 0.6545086), (-0.25000006, -0.58778524, 0.769421), (-2.4110586e-8, -0.58778524, 0.8090171), (0.24999999, -0.58778524, 0.769421), (0.47552827, -0.58778524, 0.65450853), (0.65450853, -0.58778524, 0.4755283), (0.7694209, -0.58778524, 0.25), (0.809017, -0.58778524, 0), (0.8473981, -0.45399052, -0.27533633), (0.7208399, -0.45399052, -0.5237208), (0.5237208, -0.45399052, -0.72083986), (0.2753363, -0.45399052, -0.847398), (0, -0.45399052, -0.89100695), (-0.2753363, -0.45399052, -0.847398), (-0.5237207, -0.45399052, -0.7208397), (-0.7208396, -0.45399052, -0.5237206), (-0.8473978, -0.45399052, -0.2753362), (-0.89100677, -0.45399052, 0), (-0.8473978, -0.45399052, 0.2753362), (-0.7208396, -0.45399052, 0.5237206), (-0.5237206, -0.45399052, 0.72083956), (-0.2753362, -0.45399052, 0.8473977), (-2.6554064e-8, -0.45399052, 0.89100665), (0.27533615, -0.45399052, 0.8473976), (0.5237205, -0.45399052, 0.7208395), (0.72083944, -0.45399052, 0.52372056), (0.84739757, -0.45399052, 0.27533618), (0.8910065, -0.45399052, 0), (0.9045091, -0.30901697, -0.2938928), (0.7694214, -0.30901697, -0.55901736), (0.55901736, -0.30901697, -0.76942134), (0.29389277, -0.30901697, -0.904509), (0, -0.30901697, -0.951057), (-0.29389277, -0.30901697, -0.90450895), (-0.55901724, -0.30901697, -0.7694212), (-0.76942116, -0.30901697, -0.5590172), (-0.90450877, -0.30901697, -0.2938927), (-0.9510568, -0.30901697, 0), (-0.90450877, -0.30901697, 0.2938927), (-0.7694211, -0.30901697, 0.5590171), (-0.5590171, -0.30901697, 0.76942104), (-0.2938927, -0.30901697, 0.90450865), (-2.8343694e-8, -0.30901697, 0.95105666), (0.29389262, -0.30901697, 0.9045086), (0.559017, -0.30901697, 0.769421), (0.7694209, -0.30901697, 0.55901706), (0.90450853, -0.30901697, 0.29389265), (0.95105654, -0.30901697, 0), (0.93934804, -0.15643437, -0.30521268), (0.7990572, -0.15643437, -0.580549), (0.580549, -0.15643437, -0.7990571), (0.30521265, -0.15643437, -0.9393479), (0, -0.15643437, -0.98768884), (-0.30521265, -0.15643437, -0.93934786), (-0.5805489, -0.15643437, -0.79905695), (-0.7990569, -0.15643437, -0.5805488), (-0.9393477, -0.15643437, -0.30521256), (-0.9876886, -0.15643437, 0), (-0.9393477, -0.15643437, 0.30521256), (-0.7990568, -0.15643437, 0.58054876), (-0.58054876, -0.15643437, 0.79905677), (-0.30521256, -0.15643437, 0.93934757), (-2.9435407e-8, -0.15643437, 0.9876885), (0.30521247, -0.15643437, 0.93934757), (0.58054864, -0.15643437, 0.7990567), (0.79905665, -0.15643437, 0.5805487), (0.9393475, -0.15643437, 0.3052125), (0.98768836, -0.15643437, 0), (0.95105714, 0, -0.30901718), (0.80901754, 0, -0.5877856), (0.5877856, 0, -0.8090175), (0.30901715, 0, -0.951057), (0, 0, -1.0000005), (-0.30901715, 0, -0.95105696), (-0.5877855, 0, -0.8090173), (-0.80901724, 0, -0.5877854), (-0.9510568, 0, -0.30901706), (-1.0000002, 0, 0), (-0.9510568, 0, 0.30901706), (-0.8090172, 0, 0.58778536), (-0.58778536, 0, 0.8090171), (-0.30901706, 0, 0.95105666), (-2.9802322e-8, 0, 1.0000001), (0.30901697, 0, 0.9510566), (0.58778524, 0, 0.80901706), (0.809017, 0, 0.5877853), (0.95105654, 0, 0.309017), (1, 0, 0), (0.93934804, 0.15643437, -0.30521268), (0.7990572, 0.15643437, -0.580549), (0.580549, 0.15643437, -0.7990571), (0.30521265, 0.15643437, -0.9393479), (0, 0.15643437, -0.98768884), (-0.30521265, 0.15643437, -0.93934786), (-0.5805489, 0.15643437, -0.79905695), (-0.7990569, 0.15643437, -0.5805488), (-0.9393477, 0.15643437, -0.30521256), (-0.9876886, 0.15643437, 0), (-0.9393477, 0.15643437, 0.30521256), (-0.7990568, 0.15643437, 0.58054876), (-0.58054876, 0.15643437, 0.79905677), (-0.30521256, 0.15643437, 0.93934757), (-2.9435407e-8, 0.15643437, 0.9876885), (0.30521247, 0.15643437, 0.93934757), (0.58054864, 0.15643437, 0.7990567), (0.79905665, 0.15643437, 0.5805487), (0.9393475, 0.15643437, 0.3052125), (0.98768836, 0.15643437, 0), (0.9045091, 0.30901697, -0.2938928), (0.7694214, 0.30901697, -0.55901736), (0.55901736, 0.30901697, -0.76942134), (0.29389277, 0.30901697, -0.904509), (0, 0.30901697, -0.951057), (-0.29389277, 0.30901697, -0.90450895), (-0.55901724, 0.30901697, -0.7694212), (-0.76942116, 0.30901697, -0.5590172), (-0.90450877, 0.30901697, -0.2938927), (-0.9510568, 0.30901697, 0), (-0.90450877, 0.30901697, 0.2938927), (-0.7694211, 0.30901697, 0.5590171), (-0.5590171, 0.30901697, 0.76942104), (-0.2938927, 0.30901697, 0.90450865), (-2.8343694e-8, 0.30901697, 0.95105666), (0.29389262, 0.30901697, 0.9045086), (0.559017, 0.30901697, 0.769421), (0.7694209, 0.30901697, 0.55901706), (0.90450853, 0.30901697, 0.29389265), (0.95105654, 0.30901697, 0), (0.8473981, 0.45399052, -0.27533633), (0.7208399, 0.45399052, -0.5237208), (0.5237208, 0.45399052, -0.72083986), (0.2753363, 0.45399052, -0.847398), (0, 0.45399052, -0.89100695), (-0.2753363, 0.45399052, -0.847398), (-0.5237207, 0.45399052, -0.7208397), (-0.7208396, 0.45399052, -0.5237206), (-0.8473978, 0.45399052, -0.2753362), (-0.89100677, 0.45399052, 0), (-0.8473978, 0.45399052, 0.2753362), (-0.7208396, 0.45399052, 0.5237206), (-0.5237206, 0.45399052, 0.72083956), (-0.2753362, 0.45399052, 0.8473977), (-2.6554064e-8, 0.45399052, 0.89100665), (0.27533615, 0.45399052, 0.8473976), (0.5237205, 0.45399052, 0.7208395), (0.72083944, 0.45399052, 0.52372056), (0.84739757, 0.45399052, 0.27533618), (0.8910065, 0.45399052, 0), (0.7694214, 0.58778524, -0.25000015), (0.65450895, 0.58778524, -0.47552854), (0.47552854, 0.58778524, -0.6545089), (0.25000012, 0.58778524, -0.7694213), (0, 0.58778524, -0.80901736), (-0.25000012, 0.58778524, -0.7694212), (-0.47552845, 0.58778524, -0.65450877), (-0.6545087, 0.58778524, -0.4755284), (-0.7694211, 0.58778524, -0.25000006), (-0.8090172, 0.58778524, 0), (-0.7694211, 0.58778524, 0.25000006), (-0.65450865, 0.58778524, 0.47552836), (-0.47552836, 0.58778524, 0.6545086), (-0.25000006, 0.58778524, 0.769421), (-2.4110586e-8, 0.58778524, 0.8090171), (0.24999999, 0.58778524, 0.769421), (0.47552827, 0.58778524, 0.65450853), (0.65450853, 0.58778524, 0.4755283), (0.7694209, 0.58778524, 0.25), (0.809017, 0.58778524, 0), (0.67249894, 0.70710677, -0.21850814), (0.5720618, 0.70710677, -0.41562718), (0.41562718, 0.70710677, -0.5720617), (0.21850812, 0.70710677, -0.6724989), (0, 0.70710677, -0.7071071), (-0.21850812, 0.70710677, -0.6724988), (-0.4156271, 0.70710677, -0.5720616), (-0.57206154, 0.70710677, -0.41562706), (-0.6724987, 0.70710677, -0.21850805), (-0.70710695, 0.70710677, 0), (-0.6724987, 0.70710677, 0.21850805), (-0.57206154, 0.70710677, 0.415627), (-0.415627, 0.70710677, 0.5720615), (-0.21850805, 0.70710677, 0.6724986), (-2.1073424e-8, 0.70710677, 0.7071068), (0.21850799, 0.70710677, 0.6724986), (0.4156269, 0.70710677, 0.5720614), (0.5720614, 0.70710677, 0.41562697), (0.6724985, 0.70710677, 0.21850802), (0.70710677, 0.70710677, 0), (0.55901736, 0.809017, -0.18163574), (0.47552857, 0.809017, -0.3454917), (0.3454917, 0.809017, -0.47552854), (0.18163572, 0.809017, -0.5590173), (0, 0.809017, -0.58778554), (-0.18163572, 0.809017, -0.55901724), (-0.34549165, 0.809017, -0.47552842), (-0.4755284, 0.809017, -0.3454916), (-0.5590171, 0.809017, -0.18163566), (-0.58778536, 0.809017, 0), (-0.5590171, 0.809017, 0.18163566), (-0.47552836, 0.809017, 0.34549156), (-0.34549156, 0.809017, 0.47552833), (-0.18163566, 0.809017, 0.55901706), (-1.7517365e-8, 0.809017, 0.5877853), (0.18163562, 0.809017, 0.55901706), (0.3454915, 0.809017, 0.4755283), (0.47552827, 0.809017, 0.34549153), (0.559017, 0.809017, 0.18163563), (0.58778524, 0.809017, 0), (0.43177092, 0.8910065, -0.14029087), (0.3672863, 0.8910065, -0.2668491), (0.2668491, 0.8910065, -0.36728626), (0.14029086, 0.8910065, -0.43177086), (0, 0.8910065, -0.45399073), (-0.14029086, 0.8910065, -0.43177083), (-0.26684904, 0.8910065, -0.36728618), (-0.36728615, 0.8910065, -0.266849), (-0.43177077, 0.8910065, -0.14029081), (-0.45399064, 0.8910065, 0), (-0.43177077, 0.8910065, 0.14029081), (-0.36728612, 0.8910065, 0.26684898), (-0.26684898, 0.8910065, 0.36728612), (-0.14029081, 0.8910065, 0.4317707), (-1.3529972e-8, 0.8910065, 0.45399058), (0.14029078, 0.8910065, 0.43177068), (0.26684892, 0.8910065, 0.3672861), (0.36728606, 0.8910065, 0.26684895), (0.43177065, 0.8910065, 0.1402908), (0.45399052, 0.8910065, 0), (0.29389283, 0.95105654, -0.095491566), (0.25000018, 0.95105654, -0.18163574), (0.18163574, 0.95105654, -0.25000015), (0.09549155, 0.95105654, -0.2938928), (0, 0.95105654, -0.30901715), (-0.09549155, 0.95105654, -0.29389277), (-0.18163571, 0.95105654, -0.2500001), (-0.2500001, 0.95105654, -0.1816357), (-0.2938927, 0.95105654, -0.09549153), (-0.30901706, 0.95105654, 0), (-0.2938927, 0.95105654, 0.09549153), (-0.25000006, 0.95105654, 0.18163568), (-0.18163568, 0.95105654, 0.25000006), (-0.09549153, 0.95105654, 0.29389268), (-9.209424e-9, 0.95105654, 0.30901703), (0.0954915, 0.95105654, 0.29389265), (0.18163563, 0.95105654, 0.25000003), (0.25, 0.95105654, 0.18163565), (0.29389265, 0.95105654, 0.095491506), (0.309017, 0.95105654, 0), (0.14877813, 0.98768836, -0.048340943), (0.12655823, 0.98768836, -0.09194993), (0.09194993, 0.98768836, -0.12655823), (0.048340935, 0.98768836, -0.14877811), (0, 0.98768836, -0.15643455), (-0.048340935, 0.98768836, -0.1487781), (-0.09194992, 0.98768836, -0.1265582), (-0.12655818, 0.98768836, -0.0919499), (-0.14877807, 0.98768836, -0.048340924), (-0.15643452, 0.98768836, 0), (-0.14877807, 0.98768836, 0.048340924), (-0.12655818, 0.98768836, 0.091949895), (-0.091949895, 0.98768836, 0.12655817), (-0.048340924, 0.98768836, 0.14877805), (-4.6621107e-9, 0.98768836, 0.15643449), (0.04834091, 0.98768836, 0.14877804), (0.09194988, 0.98768836, 0.12655815), (0.12655815, 0.98768836, 0.09194989), (0.14877804, 0.98768836, 0.048340913), (0.15643448, 0.98768836, 0), (0, -1, 0), (0, 1, 0)] - color3f[] primvars:displayColor = [(0.13320851, 0.13320851, 0.13320851)] ( - customData = { - dictionary Maya = { - bool generated = 1 - } - } - ) - texCoord2f[] primvars:st = [(0, 0.05), (0.05, 0.05), (0.1, 0.05), (0.15, 0.05), (0.2, 0.05), (0.25, 0.05), (0.3, 0.05), (0.35000002, 0.05), (0.40000004, 0.05), (0.45000005, 0.05), (0.50000006, 0.05), (0.5500001, 0.05), (0.6000001, 0.05), (0.6500001, 0.05), (0.7000001, 0.05), (0.7500001, 0.05), (0.80000013, 0.05), (0.85000014, 0.05), (0.90000015, 0.05), (0.95000017, 0.05), (1.0000001, 0.05), (0, 0.1), (0.05, 0.1), (0.1, 0.1), (0.15, 0.1), (0.2, 0.1), (0.25, 0.1), (0.3, 0.1), (0.35000002, 0.1), (0.40000004, 0.1), (0.45000005, 0.1), (0.50000006, 0.1), (0.5500001, 0.1), (0.6000001, 0.1), (0.6500001, 0.1), (0.7000001, 0.1), (0.7500001, 0.1), (0.80000013, 0.1), (0.85000014, 0.1), (0.90000015, 0.1), (0.95000017, 0.1), (1.0000001, 0.1), (0, 0.15), (0.05, 0.15), (0.1, 0.15), (0.15, 0.15), (0.2, 0.15), (0.25, 0.15), (0.3, 0.15), (0.35000002, 0.15), (0.40000004, 0.15), (0.45000005, 0.15), (0.50000006, 0.15), (0.5500001, 0.15), (0.6000001, 0.15), (0.6500001, 0.15), (0.7000001, 0.15), (0.7500001, 0.15), (0.80000013, 0.15), (0.85000014, 0.15), (0.90000015, 0.15), (0.95000017, 0.15), (1.0000001, 0.15), (0, 0.2), (0.05, 0.2), (0.1, 0.2), (0.15, 0.2), (0.2, 0.2), (0.25, 0.2), (0.3, 0.2), (0.35000002, 0.2), (0.40000004, 0.2), (0.45000005, 0.2), (0.50000006, 0.2), (0.5500001, 0.2), (0.6000001, 0.2), (0.6500001, 0.2), (0.7000001, 0.2), (0.7500001, 0.2), (0.80000013, 0.2), (0.85000014, 0.2), (0.90000015, 0.2), (0.95000017, 0.2), (1.0000001, 0.2), (0, 0.25), (0.05, 0.25), (0.1, 0.25), (0.15, 0.25), (0.2, 0.25), (0.25, 0.25), (0.3, 0.25), (0.35000002, 0.25), (0.40000004, 0.25), (0.45000005, 0.25), (0.50000006, 0.25), (0.5500001, 0.25), (0.6000001, 0.25), (0.6500001, 0.25), (0.7000001, 0.25), (0.7500001, 0.25), (0.80000013, 0.25), (0.85000014, 0.25), (0.90000015, 0.25), (0.95000017, 0.25), (1.0000001, 0.25), (0, 0.3), (0.05, 0.3), (0.1, 0.3), (0.15, 0.3), (0.2, 0.3), (0.25, 0.3), (0.3, 0.3), (0.35000002, 0.3), (0.40000004, 0.3), (0.45000005, 0.3), (0.50000006, 0.3), (0.5500001, 0.3), (0.6000001, 0.3), (0.6500001, 0.3), (0.7000001, 0.3), (0.7500001, 0.3), (0.80000013, 0.3), (0.85000014, 0.3), (0.90000015, 0.3), (0.95000017, 0.3), (1.0000001, 0.3), (0, 0.35000002), (0.05, 0.35000002), (0.1, 0.35000002), (0.15, 0.35000002), (0.2, 0.35000002), (0.25, 0.35000002), (0.3, 0.35000002), (0.35000002, 0.35000002), (0.40000004, 0.35000002), (0.45000005, 0.35000002), (0.50000006, 0.35000002), (0.5500001, 0.35000002), (0.6000001, 0.35000002), (0.6500001, 0.35000002), (0.7000001, 0.35000002), (0.7500001, 0.35000002), (0.80000013, 0.35000002), (0.85000014, 0.35000002), (0.90000015, 0.35000002), (0.95000017, 0.35000002), (1.0000001, 0.35000002), (0, 0.40000004), (0.05, 0.40000004), (0.1, 0.40000004), (0.15, 0.40000004), (0.2, 0.40000004), (0.25, 0.40000004), (0.3, 0.40000004), (0.35000002, 0.40000004), (0.40000004, 0.40000004), (0.45000005, 0.40000004), (0.50000006, 0.40000004), (0.5500001, 0.40000004), (0.6000001, 0.40000004), (0.6500001, 0.40000004), (0.7000001, 0.40000004), (0.7500001, 0.40000004), (0.80000013, 0.40000004), (0.85000014, 0.40000004), (0.90000015, 0.40000004), (0.95000017, 0.40000004), (1.0000001, 0.40000004), (0, 0.45000005), (0.05, 0.45000005), (0.1, 0.45000005), (0.15, 0.45000005), (0.2, 0.45000005), (0.25, 0.45000005), (0.3, 0.45000005), (0.35000002, 0.45000005), (0.40000004, 0.45000005), (0.45000005, 0.45000005), (0.50000006, 0.45000005), (0.5500001, 0.45000005), (0.6000001, 0.45000005), (0.6500001, 0.45000005), (0.7000001, 0.45000005), (0.7500001, 0.45000005), (0.80000013, 0.45000005), (0.85000014, 0.45000005), (0.90000015, 0.45000005), (0.95000017, 0.45000005), (1.0000001, 0.45000005), (0, 0.50000006), (0.05, 0.50000006), (0.1, 0.50000006), (0.15, 0.50000006), (0.2, 0.50000006), (0.25, 0.50000006), (0.3, 0.50000006), (0.35000002, 0.50000006), (0.40000004, 0.50000006), (0.45000005, 0.50000006), (0.50000006, 0.50000006), (0.5500001, 0.50000006), (0.6000001, 0.50000006), (0.6500001, 0.50000006), (0.7000001, 0.50000006), (0.7500001, 0.50000006), (0.80000013, 0.50000006), (0.85000014, 0.50000006), (0.90000015, 0.50000006), (0.95000017, 0.50000006), (1.0000001, 0.50000006), (0, 0.5500001), (0.05, 0.5500001), (0.1, 0.5500001), (0.15, 0.5500001), (0.2, 0.5500001), (0.25, 0.5500001), (0.3, 0.5500001), (0.35000002, 0.5500001), (0.40000004, 0.5500001), (0.45000005, 0.5500001), (0.50000006, 0.5500001), (0.5500001, 0.5500001), (0.6000001, 0.5500001), (0.6500001, 0.5500001), (0.7000001, 0.5500001), (0.7500001, 0.5500001), (0.80000013, 0.5500001), (0.85000014, 0.5500001), (0.90000015, 0.5500001), (0.95000017, 0.5500001), (1.0000001, 0.5500001), (0, 0.6000001), (0.05, 0.6000001), (0.1, 0.6000001), (0.15, 0.6000001), (0.2, 0.6000001), (0.25, 0.6000001), (0.3, 0.6000001), (0.35000002, 0.6000001), (0.40000004, 0.6000001), (0.45000005, 0.6000001), (0.50000006, 0.6000001), (0.5500001, 0.6000001), (0.6000001, 0.6000001), (0.6500001, 0.6000001), (0.7000001, 0.6000001), (0.7500001, 0.6000001), (0.80000013, 0.6000001), (0.85000014, 0.6000001), (0.90000015, 0.6000001), (0.95000017, 0.6000001), (1.0000001, 0.6000001), (0, 0.6500001), (0.05, 0.6500001), (0.1, 0.6500001), (0.15, 0.6500001), (0.2, 0.6500001), (0.25, 0.6500001), (0.3, 0.6500001), (0.35000002, 0.6500001), (0.40000004, 0.6500001), (0.45000005, 0.6500001), (0.50000006, 0.6500001), (0.5500001, 0.6500001), (0.6000001, 0.6500001), (0.6500001, 0.6500001), (0.7000001, 0.6500001), (0.7500001, 0.6500001), (0.80000013, 0.6500001), (0.85000014, 0.6500001), (0.90000015, 0.6500001), (0.95000017, 0.6500001), (1.0000001, 0.6500001), (0, 0.7000001), (0.05, 0.7000001), (0.1, 0.7000001), (0.15, 0.7000001), (0.2, 0.7000001), (0.25, 0.7000001), (0.3, 0.7000001), (0.35000002, 0.7000001), (0.40000004, 0.7000001), (0.45000005, 0.7000001), (0.50000006, 0.7000001), (0.5500001, 0.7000001), (0.6000001, 0.7000001), (0.6500001, 0.7000001), (0.7000001, 0.7000001), (0.7500001, 0.7000001), (0.80000013, 0.7000001), (0.85000014, 0.7000001), (0.90000015, 0.7000001), (0.95000017, 0.7000001), (1.0000001, 0.7000001), (0, 0.7500001), (0.05, 0.7500001), (0.1, 0.7500001), (0.15, 0.7500001), (0.2, 0.7500001), (0.25, 0.7500001), (0.3, 0.7500001), (0.35000002, 0.7500001), (0.40000004, 0.7500001), (0.45000005, 0.7500001), (0.50000006, 0.7500001), (0.5500001, 0.7500001), (0.6000001, 0.7500001), (0.6500001, 0.7500001), (0.7000001, 0.7500001), (0.7500001, 0.7500001), (0.80000013, 0.7500001), (0.85000014, 0.7500001), (0.90000015, 0.7500001), (0.95000017, 0.7500001), (1.0000001, 0.7500001), (0, 0.80000013), (0.05, 0.80000013), (0.1, 0.80000013), (0.15, 0.80000013), (0.2, 0.80000013), (0.25, 0.80000013), (0.3, 0.80000013), (0.35000002, 0.80000013), (0.40000004, 0.80000013), (0.45000005, 0.80000013), (0.50000006, 0.80000013), (0.5500001, 0.80000013), (0.6000001, 0.80000013), (0.6500001, 0.80000013), (0.7000001, 0.80000013), (0.7500001, 0.80000013), (0.80000013, 0.80000013), (0.85000014, 0.80000013), (0.90000015, 0.80000013), (0.95000017, 0.80000013), (1.0000001, 0.80000013), (0, 0.85000014), (0.05, 0.85000014), (0.1, 0.85000014), (0.15, 0.85000014), (0.2, 0.85000014), (0.25, 0.85000014), (0.3, 0.85000014), (0.35000002, 0.85000014), (0.40000004, 0.85000014), (0.45000005, 0.85000014), (0.50000006, 0.85000014), (0.5500001, 0.85000014), (0.6000001, 0.85000014), (0.6500001, 0.85000014), (0.7000001, 0.85000014), (0.7500001, 0.85000014), (0.80000013, 0.85000014), (0.85000014, 0.85000014), (0.90000015, 0.85000014), (0.95000017, 0.85000014), (1.0000001, 0.85000014), (0, 0.90000015), (0.05, 0.90000015), (0.1, 0.90000015), (0.15, 0.90000015), (0.2, 0.90000015), (0.25, 0.90000015), (0.3, 0.90000015), (0.35000002, 0.90000015), (0.40000004, 0.90000015), (0.45000005, 0.90000015), (0.50000006, 0.90000015), (0.5500001, 0.90000015), (0.6000001, 0.90000015), (0.6500001, 0.90000015), (0.7000001, 0.90000015), (0.7500001, 0.90000015), (0.80000013, 0.90000015), (0.85000014, 0.90000015), (0.90000015, 0.90000015), (0.95000017, 0.90000015), (1.0000001, 0.90000015), (0, 0.95000017), (0.05, 0.95000017), (0.1, 0.95000017), (0.15, 0.95000017), (0.2, 0.95000017), (0.25, 0.95000017), (0.3, 0.95000017), (0.35000002, 0.95000017), (0.40000004, 0.95000017), (0.45000005, 0.95000017), (0.50000006, 0.95000017), (0.5500001, 0.95000017), (0.6000001, 0.95000017), (0.6500001, 0.95000017), (0.7000001, 0.95000017), (0.7500001, 0.95000017), (0.80000013, 0.95000017), (0.85000014, 0.95000017), (0.90000015, 0.95000017), (0.95000017, 0.95000017), (1.0000001, 0.95000017), (0.025, 0), (0.075, 0), (0.125, 0), (0.17500001, 0), (0.22500001, 0), (0.275, 0), (0.32500002, 0), (0.375, 0), (0.425, 0), (0.47500002, 0), (0.525, 0), (0.575, 0), (0.625, 0), (0.675, 0), (0.72499996, 0), (0.775, 0), (0.825, 0), (0.875, 0), (0.925, 0), (0.97499996, 0), (0.025, 1), (0.075, 1), (0.125, 1), (0.17500001, 1), (0.22500001, 1), (0.275, 1), (0.32500002, 1), (0.375, 1), (0.425, 1), (0.47500002, 1), (0.525, 1), (0.575, 1), (0.625, 1), (0.675, 1), (0.72499996, 1), (0.775, 1), (0.825, 1), (0.875, 1), (0.925, 1), (0.97499996, 1)] ( - customData = { - dictionary Maya = { - token name = "map1" - } - } - interpolation = "faceVarying" - ) - int[] primvars:st:indices = [0, 1, 22, 21, 1, 2, 23, 22, 2, 3, 24, 23, 3, 4, 25, 24, 4, 5, 26, 25, 5, 6, 27, 26, 6, 7, 28, 27, 7, 8, 29, 28, 8, 9, 30, 29, 9, 10, 31, 30, 10, 11, 32, 31, 11, 12, 33, 32, 12, 13, 34, 33, 13, 14, 35, 34, 14, 15, 36, 35, 15, 16, 37, 36, 16, 17, 38, 37, 17, 18, 39, 38, 18, 19, 40, 39, 19, 20, 41, 40, 21, 22, 43, 42, 22, 23, 44, 43, 23, 24, 45, 44, 24, 25, 46, 45, 25, 26, 47, 46, 26, 27, 48, 47, 27, 28, 49, 48, 28, 29, 50, 49, 29, 30, 51, 50, 30, 31, 52, 51, 31, 32, 53, 52, 32, 33, 54, 53, 33, 34, 55, 54, 34, 35, 56, 55, 35, 36, 57, 56, 36, 37, 58, 57, 37, 38, 59, 58, 38, 39, 60, 59, 39, 40, 61, 60, 40, 41, 62, 61, 42, 43, 64, 63, 43, 44, 65, 64, 44, 45, 66, 65, 45, 46, 67, 66, 46, 47, 68, 67, 47, 48, 69, 68, 48, 49, 70, 69, 49, 50, 71, 70, 50, 51, 72, 71, 51, 52, 73, 72, 52, 53, 74, 73, 53, 54, 75, 74, 54, 55, 76, 75, 55, 56, 77, 76, 56, 57, 78, 77, 57, 58, 79, 78, 58, 59, 80, 79, 59, 60, 81, 80, 60, 61, 82, 81, 61, 62, 83, 82, 63, 64, 85, 84, 64, 65, 86, 85, 65, 66, 87, 86, 66, 67, 88, 87, 67, 68, 89, 88, 68, 69, 90, 89, 69, 70, 91, 90, 70, 71, 92, 91, 71, 72, 93, 92, 72, 73, 94, 93, 73, 74, 95, 94, 74, 75, 96, 95, 75, 76, 97, 96, 76, 77, 98, 97, 77, 78, 99, 98, 78, 79, 100, 99, 79, 80, 101, 100, 80, 81, 102, 101, 81, 82, 103, 102, 82, 83, 104, 103, 84, 85, 106, 105, 85, 86, 107, 106, 86, 87, 108, 107, 87, 88, 109, 108, 88, 89, 110, 109, 89, 90, 111, 110, 90, 91, 112, 111, 91, 92, 113, 112, 92, 93, 114, 113, 93, 94, 115, 114, 94, 95, 116, 115, 95, 96, 117, 116, 96, 97, 118, 117, 97, 98, 119, 118, 98, 99, 120, 119, 99, 100, 121, 120, 100, 101, 122, 121, 101, 102, 123, 122, 102, 103, 124, 123, 103, 104, 125, 124, 105, 106, 127, 126, 106, 107, 128, 127, 107, 108, 129, 128, 108, 109, 130, 129, 109, 110, 131, 130, 110, 111, 132, 131, 111, 112, 133, 132, 112, 113, 134, 133, 113, 114, 135, 134, 114, 115, 136, 135, 115, 116, 137, 136, 116, 117, 138, 137, 117, 118, 139, 138, 118, 119, 140, 139, 119, 120, 141, 140, 120, 121, 142, 141, 121, 122, 143, 142, 122, 123, 144, 143, 123, 124, 145, 144, 124, 125, 146, 145, 126, 127, 148, 147, 127, 128, 149, 148, 128, 129, 150, 149, 129, 130, 151, 150, 130, 131, 152, 151, 131, 132, 153, 152, 132, 133, 154, 153, 133, 134, 155, 154, 134, 135, 156, 155, 135, 136, 157, 156, 136, 137, 158, 157, 137, 138, 159, 158, 138, 139, 160, 159, 139, 140, 161, 160, 140, 141, 162, 161, 141, 142, 163, 162, 142, 143, 164, 163, 143, 144, 165, 164, 144, 145, 166, 165, 145, 146, 167, 166, 147, 148, 169, 168, 148, 149, 170, 169, 149, 150, 171, 170, 150, 151, 172, 171, 151, 152, 173, 172, 152, 153, 174, 173, 153, 154, 175, 174, 154, 155, 176, 175, 155, 156, 177, 176, 156, 157, 178, 177, 157, 158, 179, 178, 158, 159, 180, 179, 159, 160, 181, 180, 160, 161, 182, 181, 161, 162, 183, 182, 162, 163, 184, 183, 163, 164, 185, 184, 164, 165, 186, 185, 165, 166, 187, 186, 166, 167, 188, 187, 168, 169, 190, 189, 169, 170, 191, 190, 170, 171, 192, 191, 171, 172, 193, 192, 172, 173, 194, 193, 173, 174, 195, 194, 174, 175, 196, 195, 175, 176, 197, 196, 176, 177, 198, 197, 177, 178, 199, 198, 178, 179, 200, 199, 179, 180, 201, 200, 180, 181, 202, 201, 181, 182, 203, 202, 182, 183, 204, 203, 183, 184, 205, 204, 184, 185, 206, 205, 185, 186, 207, 206, 186, 187, 208, 207, 187, 188, 209, 208, 189, 190, 211, 210, 190, 191, 212, 211, 191, 192, 213, 212, 192, 193, 214, 213, 193, 194, 215, 214, 194, 195, 216, 215, 195, 196, 217, 216, 196, 197, 218, 217, 197, 198, 219, 218, 198, 199, 220, 219, 199, 200, 221, 220, 200, 201, 222, 221, 201, 202, 223, 222, 202, 203, 224, 223, 203, 204, 225, 224, 204, 205, 226, 225, 205, 206, 227, 226, 206, 207, 228, 227, 207, 208, 229, 228, 208, 209, 230, 229, 210, 211, 232, 231, 211, 212, 233, 232, 212, 213, 234, 233, 213, 214, 235, 234, 214, 215, 236, 235, 215, 216, 237, 236, 216, 217, 238, 237, 217, 218, 239, 238, 218, 219, 240, 239, 219, 220, 241, 240, 220, 221, 242, 241, 221, 222, 243, 242, 222, 223, 244, 243, 223, 224, 245, 244, 224, 225, 246, 245, 225, 226, 247, 246, 226, 227, 248, 247, 227, 228, 249, 248, 228, 229, 250, 249, 229, 230, 251, 250, 231, 232, 253, 252, 232, 233, 254, 253, 233, 234, 255, 254, 234, 235, 256, 255, 235, 236, 257, 256, 236, 237, 258, 257, 237, 238, 259, 258, 238, 239, 260, 259, 239, 240, 261, 260, 240, 241, 262, 261, 241, 242, 263, 262, 242, 243, 264, 263, 243, 244, 265, 264, 244, 245, 266, 265, 245, 246, 267, 266, 246, 247, 268, 267, 247, 248, 269, 268, 248, 249, 270, 269, 249, 250, 271, 270, 250, 251, 272, 271, 252, 253, 274, 273, 253, 254, 275, 274, 254, 255, 276, 275, 255, 256, 277, 276, 256, 257, 278, 277, 257, 258, 279, 278, 258, 259, 280, 279, 259, 260, 281, 280, 260, 261, 282, 281, 261, 262, 283, 282, 262, 263, 284, 283, 263, 264, 285, 284, 264, 265, 286, 285, 265, 266, 287, 286, 266, 267, 288, 287, 267, 268, 289, 288, 268, 269, 290, 289, 269, 270, 291, 290, 270, 271, 292, 291, 271, 272, 293, 292, 273, 274, 295, 294, 274, 275, 296, 295, 275, 276, 297, 296, 276, 277, 298, 297, 277, 278, 299, 298, 278, 279, 300, 299, 279, 280, 301, 300, 280, 281, 302, 301, 281, 282, 303, 302, 282, 283, 304, 303, 283, 284, 305, 304, 284, 285, 306, 305, 285, 286, 307, 306, 286, 287, 308, 307, 287, 288, 309, 308, 288, 289, 310, 309, 289, 290, 311, 310, 290, 291, 312, 311, 291, 292, 313, 312, 292, 293, 314, 313, 294, 295, 316, 315, 295, 296, 317, 316, 296, 297, 318, 317, 297, 298, 319, 318, 298, 299, 320, 319, 299, 300, 321, 320, 300, 301, 322, 321, 301, 302, 323, 322, 302, 303, 324, 323, 303, 304, 325, 324, 304, 305, 326, 325, 305, 306, 327, 326, 306, 307, 328, 327, 307, 308, 329, 328, 308, 309, 330, 329, 309, 310, 331, 330, 310, 311, 332, 331, 311, 312, 333, 332, 312, 313, 334, 333, 313, 314, 335, 334, 315, 316, 337, 336, 316, 317, 338, 337, 317, 318, 339, 338, 318, 319, 340, 339, 319, 320, 341, 340, 320, 321, 342, 341, 321, 322, 343, 342, 322, 323, 344, 343, 323, 324, 345, 344, 324, 325, 346, 345, 325, 326, 347, 346, 326, 327, 348, 347, 327, 328, 349, 348, 328, 329, 350, 349, 329, 330, 351, 350, 330, 331, 352, 351, 331, 332, 353, 352, 332, 333, 354, 353, 333, 334, 355, 354, 334, 335, 356, 355, 336, 337, 358, 357, 337, 338, 359, 358, 338, 339, 360, 359, 339, 340, 361, 360, 340, 341, 362, 361, 341, 342, 363, 362, 342, 343, 364, 363, 343, 344, 365, 364, 344, 345, 366, 365, 345, 346, 367, 366, 346, 347, 368, 367, 347, 348, 369, 368, 348, 349, 370, 369, 349, 350, 371, 370, 350, 351, 372, 371, 351, 352, 373, 372, 352, 353, 374, 373, 353, 354, 375, 374, 354, 355, 376, 375, 355, 356, 377, 376, 357, 358, 379, 378, 358, 359, 380, 379, 359, 360, 381, 380, 360, 361, 382, 381, 361, 362, 383, 382, 362, 363, 384, 383, 363, 364, 385, 384, 364, 365, 386, 385, 365, 366, 387, 386, 366, 367, 388, 387, 367, 368, 389, 388, 368, 369, 390, 389, 369, 370, 391, 390, 370, 371, 392, 391, 371, 372, 393, 392, 372, 373, 394, 393, 373, 374, 395, 394, 374, 375, 396, 395, 375, 376, 397, 396, 376, 377, 398, 397, 1, 0, 399, 2, 1, 400, 3, 2, 401, 4, 3, 402, 5, 4, 403, 6, 5, 404, 7, 6, 405, 8, 7, 406, 9, 8, 407, 10, 9, 408, 11, 10, 409, 12, 11, 410, 13, 12, 411, 14, 13, 412, 15, 14, 413, 16, 15, 414, 17, 16, 415, 18, 17, 416, 19, 18, 417, 20, 19, 418, 378, 379, 419, 379, 380, 420, 380, 381, 421, 381, 382, 422, 382, 383, 423, 383, 384, 424, 384, 385, 425, 385, 386, 426, 386, 387, 427, 387, 388, 428, 388, 389, 429, 389, 390, 430, 390, 391, 431, 391, 392, 432, 392, 393, 433, 393, 394, 434, 394, 395, 435, 395, 396, 436, 396, 397, 437, 397, 398, 438] - token visibility = "inherited" - - def GeomSubset "unnamedTag" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) - { - uniform token elementType = "face" - uniform token familyName = "materialBind" - int[] indices = [103, 104, 105, 106, 107, 108, 109, 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, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239] - rel material:binding = - } - } -} - -def PointInstancer "MeshPointInstancer" -{ - point3f[] positions = [(0, 0, -4), (0, 2, -4)] - int[] protoIndices = [0, 0] - rel prototypes = [ - , - ] -} - -def Scope "mtl" -{ - def Material "UsdPreviewSurface1" - { - token outputs:surface.connect = - - def Shader "UsdPreviewSurface1" - { - uniform token info:id = "UsdPreviewSurface" - token outputs:surface - } - } -} - From 502d69c6d192e360bf845e3ac7613419437f312c Mon Sep 17 00:00:00 2001 From: debloip Date: Wed, 3 Jul 2024 21:32:14 -0400 Subject: [PATCH 57/75] HYDRA-1058 : Rename picking modes and use token-based approach for extensibility --- lib/mayaHydra/mayaPlugin/renderOverride.cpp | 32 ++++++------------- lib/mayaHydra/mayaPlugin/renderOverride.h | 2 +- lib/mayaHydra/mayaPlugin/tokens.h | 4 +-- scripts/mayaHydra_GeomSubsetsPickMode.mel | 26 +++++++-------- .../mayaToHydra/cpp/testGeomSubsetsPicking.py | 2 +- 5 files changed, 26 insertions(+), 40 deletions(-) diff --git a/lib/mayaHydra/mayaPlugin/renderOverride.cpp b/lib/mayaHydra/mayaPlugin/renderOverride.cpp index bcbe8c8332..adc367c11b 100644 --- a/lib/mayaHydra/mayaPlugin/renderOverride.cpp +++ b/lib/mayaHydra/mayaPlugin/renderOverride.cpp @@ -229,12 +229,6 @@ enum UsdPointInstancesPickMode Prototypes }; -enum UsdGeomSubsetsPickMode -{ - PrimsAndInstances = 0, - GeomSubsets -}; - //! \brief Query the pick mode to use when picking point instances in the viewport. //! \return A UsdPointInstancesPickMode enum value indicating the pick mode behavior //! to employ when the picked object is a point instance. @@ -262,23 +256,15 @@ UsdPointInstancesPickMode GetPointInstancesPickMode() return pickMode; } -UsdGeomSubsetsPickMode GetGeomSubsetsPickMode() +TfToken GetGeomSubsetsPickMode() { static const MString kOptionVarName(MayaHydraPickOptionVars->GeomSubsetsPickMode.GetText()); - auto pickMode = UsdGeomSubsetsPickMode::PrimsAndInstances; - if (MGlobal::optionVarExists(kOptionVarName)) { - const TfToken pickModeToken(MGlobal::optionVarStringValue(kOptionVarName).asChar()); - - if (pickModeToken == GeomSubsetsPickModeTokens->PrimsAndInstances) { - pickMode = UsdGeomSubsetsPickMode::PrimsAndInstances; - } else if (pickModeToken == GeomSubsetsPickModeTokens->GeomSubsets) { - pickMode = UsdGeomSubsetsPickMode::GeomSubsets; - } + return TfToken(MGlobal::optionVarStringValue(kOptionVarName).asChar()); } - return pickMode; + return GeomSubsetsPickModeTokens->None; } struct PickInput { @@ -575,7 +561,7 @@ class UsdPickHandler : public MtohRenderOverride::PickHandlerBase { std::vector hitPaths; - if (GetGeomSubsetsPickMode() == UsdGeomSubsetsPickMode::GeomSubsets) { + if (GetGeomSubsetsPickMode() == GeomSubsetsPickModeTokens->Faces) { auto geomSubsetsHitPaths = resolveGeomSubsetsPicking( renderIndex()->GetTerminalSceneIndex(), pickInput.pickHit.objectId, @@ -1818,7 +1804,7 @@ void MtohRenderOverride::_PickByRegion( const MMatrix& viewMatrix, const MMatrix& projMatrix, bool singlePick, - bool pickGeomSubsets, + TfToken geomSubsetsPickMode, bool pointSnappingActive, int view_x, int view_y, @@ -1857,7 +1843,7 @@ void MtohRenderOverride::_PickByRegion( pickParams.collection = _renderCollection; pickParams.outHits = &outHits; - if (pickGeomSubsets) { + if (geomSubsetsPickMode == GeomSubsetsPickModeTokens->Faces) { pickParams.pickTarget = HdxPickTokens->pickFaces; } @@ -1912,7 +1898,7 @@ bool MtohRenderOverride::select( HdxPickHitVector outHits; const bool singlePick = selectInfo.singleSelection(); - const bool pickGeomSubsets = GetGeomSubsetsPickMode() == UsdGeomSubsetsPickMode::GeomSubsets; + const TfToken geomSubsetsPickMode = GetGeomSubsetsPickMode(); const bool pointSnappingActive = selectInfo.pointSnapping(); if (pointSnappingActive) { @@ -1933,7 +1919,7 @@ bool MtohRenderOverride::select( unsigned int curr_sel_x = cursor_x > (int)curr_sel_w / 2 ? cursor_x - (int)curr_sel_w / 2 : 0; unsigned int curr_sel_y = cursor_y > (int)curr_sel_h / 2 ? cursor_y - (int)curr_sel_h / 2 : 0; - _PickByRegion(outHits, viewMatrix, projMatrix, singlePick, pickGeomSubsets, pointSnappingActive, + _PickByRegion(outHits, viewMatrix, projMatrix, singlePick, geomSubsetsPickMode, pointSnappingActive, view_x, view_y, view_w, view_h, curr_sel_x, curr_sel_y, curr_sel_w, curr_sel_h); // Increase the size of picking region. @@ -1944,7 +1930,7 @@ bool MtohRenderOverride::select( // Pick from original region directly when point snapping is not active or no hit is found yet. if (outHits.empty()) { - _PickByRegion(outHits, viewMatrix, projMatrix, singlePick, pickGeomSubsets, pointSnappingActive, + _PickByRegion(outHits, viewMatrix, projMatrix, singlePick, geomSubsetsPickMode, pointSnappingActive, view_x, view_y, view_w, view_h, sel_x, sel_y, sel_w, sel_h); } diff --git a/lib/mayaHydra/mayaPlugin/renderOverride.h b/lib/mayaHydra/mayaPlugin/renderOverride.h index ee5f7dc352..8ce5383ff1 100644 --- a/lib/mayaHydra/mayaPlugin/renderOverride.h +++ b/lib/mayaHydra/mayaPlugin/renderOverride.h @@ -170,7 +170,7 @@ class MtohRenderOverride : public MHWRender::MRenderOverride const MMatrix& viewMatrix, const MMatrix& projMatrix, bool singlePick, - bool pickGeomSubsets, + TfToken geomSubsetsPickMode, bool pointSnappingActive, int view_x, int view_y, diff --git a/lib/mayaHydra/mayaPlugin/tokens.h b/lib/mayaHydra/mayaPlugin/tokens.h index 85598f6922..cf007ceb39 100644 --- a/lib/mayaHydra/mayaPlugin/tokens.h +++ b/lib/mayaHydra/mayaPlugin/tokens.h @@ -40,8 +40,8 @@ TF_DECLARE_PUBLIC_TOKENS(MayaHydraPickOptionVars, MAYAHYDRA_PICK_OPTIONVAR_TOKEN // clang-format off #define GEOMSUBSETS_PICK_MODE_TOKENS \ - (PrimsAndInstances) \ - (GeomSubsets) + (None) \ + (Faces) // clang-format on TF_DECLARE_PUBLIC_TOKENS(GeomSubsetsPickModeTokens, GEOMSUBSETS_PICK_MODE_TOKENS); diff --git a/scripts/mayaHydra_GeomSubsetsPickMode.mel b/scripts/mayaHydra_GeomSubsetsPickMode.mel index fc3104a9fd..58dadbb77a 100644 --- a/scripts/mayaHydra_GeomSubsetsPickMode.mel +++ b/scripts/mayaHydra_GeomSubsetsPickMode.mel @@ -44,21 +44,21 @@ global proc mayaHydra_GeomSubsetsPickMode_SetMode(string $mode) { } global proc mayaHydra_GeomSubsetsPickMode_SetupRuntimeCommands() { - if (!`runTimeCommand -exists mayaHydra_GeomSubsetsPickMode_SetPrimsAndInstances`) { + if (!`runTimeCommand -exists mayaHydra_GeomSubsetsPickMode_SetNone`) { runTimeCommand -default true -plugin "mayaHydra" - -label "Prims and Instances" - -annotation "Select whole prims" + -label "None" + -annotation "Don't select GeomSubsets" -category "Menu items.Maya USD" - -command ("mayaHydra_GeomSubsetsPickMode_SetMode(\"PrimsAndInstances\")") - mayaHydra_GeomSubsetsPickMode_SetPrimsAndInstances; + -command ("mayaHydra_GeomSubsetsPickMode_SetMode(\"None\")") + mayaHydra_GeomSubsetsPickMode_SetNone; } - if (!`runTimeCommand -exists mayaHydra_GeomSubsetsPickMode_SetGeomSubsets`) { + if (!`runTimeCommand -exists mayaHydra_GeomSubsetsPickMode_SetFaces`) { runTimeCommand -default true -plugin "mayaHydra" - -label "GeomSubsets" - -annotation "Select GeomSubsets" + -label "Faces" + -annotation "Select GeomSubsets of faces" -category "Menu items.Maya USD" - -command ("mayaHydra_GeomSubsetsPickMode_SetMode(\"GeomSubsets\")") - mayaHydra_GeomSubsetsPickMode_SetGeomSubsets; + -command ("mayaHydra_GeomSubsetsPickMode_SetMode(\"Faces\")") + mayaHydra_GeomSubsetsPickMode_SetFaces; } } @@ -144,8 +144,8 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems() { global string $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup = `radioMenuItemCollection`; global string $gMayaHydra_GeomSubsetsPickMode_RadioButtons[]; - $gMayaHydra_GeomSubsetsPickMode_RadioButtons[0] = `menuItem -radioButton on -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetPrimsAndInstances") mayaHydra_GeomSubsetsPickMode_PrimsAndInstances`; - $gMayaHydra_GeomSubsetsPickMode_RadioButtons[1] = `menuItem -radioButton off -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetGeomSubsets") mayaHydra_GeomSubsetsPickMode_GeomSubsets`; + $gMayaHydra_GeomSubsetsPickMode_RadioButtons[0] = `menuItem -radioButton on -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetNone") mayaHydra_GeomSubsetsPickMode_None`; + $gMayaHydra_GeomSubsetsPickMode_RadioButtons[1] = `menuItem -radioButton off -runTimeCommand ("mayaHydra_GeomSubsetsPickMode_SetFaces") mayaHydra_GeomSubsetsPickMode_Faces`; mayaHydra_GeomSubsetsPickModeMenu_UpdateRadioButtons(); @@ -163,7 +163,7 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_UpdateRadioButtons() { string $pickMode = `tolower(mayaHydra_GeomSubsetsPickMode_GetMode())`; switch($pickMode) { case "": - menuItem -e -radioButton on mayaHydra_GeomSubsetsPickMode_PrimsAndInstances; + menuItem -e -radioButton on mayaHydra_GeomSubsetsPickMode_None; break; default: // Enable the menu item based on the label. diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py index caf4e71700..79d8be36bd 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py @@ -33,7 +33,7 @@ def setUp(self): self.loadUsdScene() cmds.select(clear=True) cmds.optionVar( - sv=('mayaHydra_GeomSubsetsPickMode', 'GeomSubsets')) + sv=('mayaHydra_GeomSubsetsPickMode', 'Faces')) cmds.optionVar( sv=('mayaUsd_PointInstancesPickMode', 'Prototypes')) cmds.setAttr('persp.translate', 0, 0, 15, type='float3') From 5b8fcc495be52d33c2fd75b9ea2a9385b19b7c13 Mon Sep 17 00:00:00 2001 From: debloip Date: Wed, 3 Jul 2024 21:38:03 -0400 Subject: [PATCH 58/75] HYDRA-1058 : Small touchups --- lib/mayaHydra/mayaPlugin/renderOverride.cpp | 9 +-------- lib/mayaHydra/mayaPlugin/renderOverride.h | 2 +- test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.cpp | 8 ++------ 3 files changed, 4 insertions(+), 15 deletions(-) diff --git a/lib/mayaHydra/mayaPlugin/renderOverride.cpp b/lib/mayaHydra/mayaPlugin/renderOverride.cpp index adc367c11b..04111955ff 100644 --- a/lib/mayaHydra/mayaPlugin/renderOverride.cpp +++ b/lib/mayaHydra/mayaPlugin/renderOverride.cpp @@ -474,13 +474,6 @@ class UsdPickHandler : public MtohRenderOverride::PickHandlerBase { continue; } - auto modelPathDataSource = HdTypedSampledDataSource::Cast( - HdContainerDataSource::Get(childPrim.dataSource, HdDataSourceLocator(TfToken("model"), TfToken("modelPath"))) - ); - if (modelPathDataSource && modelPathDataSource->GetTypedValue(0) != basePrimPath) { - continue; - } - HdGeomSubsetSchema geomSubsetSchema = HdGeomSubsetSchema(childPrim.dataSource); if (!geomSubsetSchema.IsDefined() || geomSubsetSchema.GetType()->GetTypedValue(0) != geomSubsetType) { continue; @@ -1804,7 +1797,7 @@ void MtohRenderOverride::_PickByRegion( const MMatrix& viewMatrix, const MMatrix& projMatrix, bool singlePick, - TfToken geomSubsetsPickMode, + const TfToken& geomSubsetsPickMode, bool pointSnappingActive, int view_x, int view_y, diff --git a/lib/mayaHydra/mayaPlugin/renderOverride.h b/lib/mayaHydra/mayaPlugin/renderOverride.h index 8ce5383ff1..8eaf81e2fa 100644 --- a/lib/mayaHydra/mayaPlugin/renderOverride.h +++ b/lib/mayaHydra/mayaPlugin/renderOverride.h @@ -170,7 +170,7 @@ class MtohRenderOverride : public MHWRender::MRenderOverride const MMatrix& viewMatrix, const MMatrix& projMatrix, bool singlePick, - TfToken geomSubsetsPickMode, + const TfToken& geomSubsetsPickMode, bool pointSnappingActive, int view_x, int view_y, diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.cpp index 0d708a5d16..95c998729b 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.cpp @@ -20,15 +20,11 @@ #include #include -#include -#include -#include #include -#include -#include -#include #include #include +#include +#include #include #include From cabdfaba6ad310fd5bef33925d20eebb2f1a4aff Mon Sep 17 00:00:00 2001 From: debloip Date: Thu, 4 Jul 2024 10:34:24 -0400 Subject: [PATCH 59/75] HYDRA-1058 : Cleanup GeomSubsets mel file --- scripts/mayaHydra_GeomSubsetsPickMode.mel | 50 ++++++++++++----------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/scripts/mayaHydra_GeomSubsetsPickMode.mel b/scripts/mayaHydra_GeomSubsetsPickMode.mel index 58dadbb77a..66638496db 100644 --- a/scripts/mayaHydra_GeomSubsetsPickMode.mel +++ b/scripts/mayaHydra_GeomSubsetsPickMode.mel @@ -1,17 +1,17 @@ // Contents of this file are largely adaptations of MayaUSD code for Kind and Point Instance picking modes UI setup. -// See the following MEL files in MayaUSD : [TODO : list file names, with links?] +// See mayaUsdMenu.mel in MayaUSD : https://github.com/Autodesk/maya-usd/blob/d7e4ee276f752a745e563f1dfb54e932b11c013f/plugin/adsk/scripts/mayaUsdMenu.mel // addMenuCallback and removeMenuCallback were copied over from MayaUSD -// See here : [TODO : insert link] +// See here : https://github.com/Autodesk/maya-usd/blob/d7e4ee276f752a745e563f1dfb54e932b11c013f/plugin/adsk/scripts/mayaUsdMenu.mel#L53-L72 -// safely add a post menu callback to a menu +// Safely add a post menu callback to a menu proc addMenuCallback(string $menuName, string $cmd) { string $existingCallbacks = `menu -q -pmc $menuName`; // append the callback menu -e -pmc ($existingCallbacks + ";" + $cmd + ";") $menuName; } -// safely remove a post menu callback to a menu +// Safely remove a post menu callback to a menu proc removeMenuCallback(string $menuName, string $cmd) { string $existingCallbacks = `menu -q -pmc $menuName`; // remove our callback from the string of callbacks @@ -20,11 +20,13 @@ proc removeMenuCallback(string $menuName, string $cmd) { menu -e -pmc $newCallbacks $menuName; } +// Check if a post menu callback is present on a menu proc int hasMenuCallback(string $menuName, string $cmd) { string $existingCallbacks = `menu -q -pmc $menuName`; return `gmatch $existingCallbacks ("*" + $cmd + "*")`; } +// Global variables to keep track of our UI elements global string $gMayaHydra_GeomSubsetsPickMode_Divider = ""; global string $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup = ""; global string $gMayaHydra_GeomSubsetsPickMode_RadioButtons[] = {}; @@ -43,25 +45,7 @@ global proc mayaHydra_GeomSubsetsPickMode_SetMode(string $mode) { optionVar -stringValue "mayaHydra_GeomSubsetsPickMode" $mode; } -global proc mayaHydra_GeomSubsetsPickMode_SetupRuntimeCommands() { - if (!`runTimeCommand -exists mayaHydra_GeomSubsetsPickMode_SetNone`) { - runTimeCommand -default true -plugin "mayaHydra" - -label "None" - -annotation "Don't select GeomSubsets" - -category "Menu items.Maya USD" - -command ("mayaHydra_GeomSubsetsPickMode_SetMode(\"None\")") - mayaHydra_GeomSubsetsPickMode_SetNone; - } - if (!`runTimeCommand -exists mayaHydra_GeomSubsetsPickMode_SetFaces`) { - runTimeCommand -default true -plugin "mayaHydra" - -label "Faces" - -annotation "Select GeomSubsets of faces" - -category "Menu items.Maya USD" - -command ("mayaHydra_GeomSubsetsPickMode_SetMode(\"Faces\")") - mayaHydra_GeomSubsetsPickMode_SetFaces; - } -} - +// Main entry point to create the GeomSubsets UI global proc mayaHydra_GeomSubsetsPickMode_SetupUI() { mayaHydra_GeomSubsetsPickMode_SetupRuntimeCommands; global string $gMainSelectMenu; // Maya's "Select" menu @@ -71,6 +55,7 @@ global proc mayaHydra_GeomSubsetsPickMode_SetupUI() { } } +// Main entry point to delete the GeomSubsets UI global proc mayaHydra_GeomSubsetsPickMode_TeardownUI() { global string $gMainSelectMenu; // Maya's "Select" menu removeMenuCallback($gMainSelectMenu, "mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback"); @@ -96,6 +81,25 @@ global proc mayaHydra_GeomSubsetsPickMode_TeardownUI() { $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup = ""; } +global proc mayaHydra_GeomSubsetsPickMode_SetupRuntimeCommands() { + if (!`runTimeCommand -exists mayaHydra_GeomSubsetsPickMode_SetNone`) { + runTimeCommand -default true -plugin "mayaHydra" + -label "None" + -annotation "Don't select GeomSubsets" + -category "Menu items.Maya USD" + -command ("mayaHydra_GeomSubsetsPickMode_SetMode(\"None\")") + mayaHydra_GeomSubsetsPickMode_SetNone; + } + if (!`runTimeCommand -exists mayaHydra_GeomSubsetsPickMode_SetFaces`) { + runTimeCommand -default true -plugin "mayaHydra" + -label "Faces" + -annotation "Select GeomSubsets of faces" + -category "Menu items.Maya USD" + -command ("mayaHydra_GeomSubsetsPickMode_SetMode(\"Faces\")") + mayaHydra_GeomSubsetsPickMode_SetFaces; + } +} + global proc mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback() { // Explanation of how we augment MayaUSD's selection modes menu with our custom options // for GeomSubsets picking : From 22333dd1c4b0d72bec73e1d88754f063b5f5427c Mon Sep 17 00:00:00 2001 From: debloip Date: Thu, 4 Jul 2024 11:32:13 -0400 Subject: [PATCH 60/75] HYDRA-1058 : Add localization support --- lib/mayaHydra/mayaPlugin/plugin.cpp | 17 +++++++++-- scripts/CMakeLists.txt | 1 + scripts/mayaHydra_GeomSubsetsPickMode.mel | 11 ++++--- scripts/mayaHydra_registerUIStrings.mel | 37 +++++++++++++++++++++++ 4 files changed, 58 insertions(+), 8 deletions(-) create mode 100644 scripts/mayaHydra_registerUIStrings.mel diff --git a/lib/mayaHydra/mayaPlugin/plugin.cpp b/lib/mayaHydra/mayaPlugin/plugin.cpp index c9a2d96bfd..6551e2fa33 100644 --- a/lib/mayaHydra/mayaPlugin/plugin.cpp +++ b/lib/mayaHydra/mayaPlugin/plugin.cpp @@ -160,11 +160,22 @@ PLUGIN_EXPORT MStatus initializePlugin(MObject obj) } } - plugin.registerUI( + if (!plugin.registerUIStrings(nullptr, "mayaHydra_registerUIStrings")) { + ret = MS::kFailure; + ret.perror("Error registering mayaHydra UI string resources."); + return ret; + } + + if (!plugin.registerUI( "mayaHydra_registerUI_load", "mayaHydra_registerUI_unload", "mayaHydra_registerUI_batch_load", - "mayaHydra_registerUI_batch_unload"); + "mayaHydra_registerUI_batch_unload")) + { + ret = MS::kFailure; + ret.perror("Error registering mayaHydra UI procedures."); + return ret; + } auto registerPluginLoadingCallback = [&](MSceneMessage::Message pluginLoadingMessage, MMessage::MStringArrayFunction callback) { MStatus callbackStatus; @@ -177,7 +188,7 @@ PLUGIN_EXPORT MStatus initializePlugin(MObject obj) _pluginLoadingCallbackIds.push_back(callbackId); } else { ret = MS::kFailure; - ret.perror("Error registering plugin loading callback."); + ret.perror("Error registering mayaHydra plugin loading callback."); } }; diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index 972c0b8df2..64935cbf36 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -1,4 +1,5 @@ set(MEL_SCRIPT_FILES + mayaHydra_registerUIStrings.mel mayaHydra_registerUI_load.mel mayaHydra_registerUI_unload.mel mayaHydra_registerUI_batch_load.mel diff --git a/scripts/mayaHydra_GeomSubsetsPickMode.mel b/scripts/mayaHydra_GeomSubsetsPickMode.mel index 66638496db..b6e80158cc 100644 --- a/scripts/mayaHydra_GeomSubsetsPickMode.mel +++ b/scripts/mayaHydra_GeomSubsetsPickMode.mel @@ -84,16 +84,16 @@ global proc mayaHydra_GeomSubsetsPickMode_TeardownUI() { global proc mayaHydra_GeomSubsetsPickMode_SetupRuntimeCommands() { if (!`runTimeCommand -exists mayaHydra_GeomSubsetsPickMode_SetNone`) { runTimeCommand -default true -plugin "mayaHydra" - -label "None" - -annotation "Don't select GeomSubsets" + -label `getMayaHydraString("kUSDGeomSubsetsPickMode_None")` + -annotation `getMayaHydraString("kUSDGeomSubsetsPickMode_NoneAnn")` -category "Menu items.Maya USD" -command ("mayaHydra_GeomSubsetsPickMode_SetMode(\"None\")") mayaHydra_GeomSubsetsPickMode_SetNone; } if (!`runTimeCommand -exists mayaHydra_GeomSubsetsPickMode_SetFaces`) { runTimeCommand -default true -plugin "mayaHydra" - -label "Faces" - -annotation "Select GeomSubsets of faces" + -label `getMayaHydraString("kUSDGeomSubsetsPickMode_Faces")` + -annotation `getMayaHydraString("kUSDGeomSubsetsPickMode_FacesAnn")` -category "Menu items.Maya USD" -command ("mayaHydra_GeomSubsetsPickMode_SetMode(\"Faces\")") mayaHydra_GeomSubsetsPickMode_SetFaces; @@ -143,7 +143,8 @@ global proc mayaHydra_GeomSubsetsPickModeMenu_CreateMenuItems() { setParent -menu $gMayaUsdSelectModeSubMenu; global string $gMayaHydra_GeomSubsetsPickMode_Divider; - $gMayaHydra_GeomSubsetsPickMode_Divider = `menuItem -divider true -dividerLabel "GeomSubsets (Hydra only)"`; + $dividerLabel = getMayaHydraString("kGeomSubsets"); + $gMayaHydra_GeomSubsetsPickMode_Divider = `menuItem -divider true -dividerLabel $dividerLabel`; global string $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup; $gMayaHydra_GeomSubsetsPickMode_RadioButtonsGroup = `radioMenuItemCollection`; diff --git a/scripts/mayaHydra_registerUIStrings.mel b/scripts/mayaHydra_registerUIStrings.mel new file mode 100644 index 0000000000..a3a16bcac5 --- /dev/null +++ b/scripts/mayaHydra_registerUIStrings.mel @@ -0,0 +1,37 @@ +// Copyright 2024 Autodesk +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +proc registerMayaHydraString(string $key, string $value) +{ + registerPluginResource("mayaHydra", $key, $value); +} + +global proc string getMayaHydraString(string $key) +{ + return getPluginResource("mayaHydra", $key); +} + +global proc mayaHydra_registerUIStrings() +{ + // Register the UI strings + registerMayaHydraString("kGeomSubsets", "GeomSubsets (Hydra only)"); + registerMayaHydraString("kUSDGeomSubsetsPickMode_None", "None"); + registerMayaHydraString("kUSDGeomSubsetsPickMode_NoneAnn", "Don't select GeomSubsets."); + registerMayaHydraString("kUSDGeomSubsetsPickMode_Faces", "Faces"); + registerMayaHydraString("kUSDGeomSubsetsPickMode_FacesAnn", "Select GeomSubsets containing faces."); + + // Load any localized resources + loadPluginLanguageResources("mayaHydra", "mayaHydra.pres.mel"); +} From 7469854bc944883fce2ea06d17bcd17ef310e91d Mon Sep 17 00:00:00 2001 From: debloip Date: Thu, 4 Jul 2024 11:39:18 -0400 Subject: [PATCH 61/75] HYDRA-1058 : Add copyright notices --- scripts/mayaHydra_GeomSubsetsPickMode.mel | 15 +++++++++++++++ scripts/mayaHydra_registerUI_batch_load.mel | 15 +++++++++++++++ scripts/mayaHydra_registerUI_batch_unload.mel | 15 +++++++++++++++ scripts/mayaHydra_registerUI_load.mel | 15 +++++++++++++++ scripts/mayaHydra_registerUI_unload.mel | 15 +++++++++++++++ 5 files changed, 75 insertions(+) diff --git a/scripts/mayaHydra_GeomSubsetsPickMode.mel b/scripts/mayaHydra_GeomSubsetsPickMode.mel index b6e80158cc..0bf1dca278 100644 --- a/scripts/mayaHydra_GeomSubsetsPickMode.mel +++ b/scripts/mayaHydra_GeomSubsetsPickMode.mel @@ -1,3 +1,18 @@ +// Copyright 2024 Autodesk +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + // Contents of this file are largely adaptations of MayaUSD code for Kind and Point Instance picking modes UI setup. // See mayaUsdMenu.mel in MayaUSD : https://github.com/Autodesk/maya-usd/blob/d7e4ee276f752a745e563f1dfb54e932b11c013f/plugin/adsk/scripts/mayaUsdMenu.mel diff --git a/scripts/mayaHydra_registerUI_batch_load.mel b/scripts/mayaHydra_registerUI_batch_load.mel index 5a2bba4a93..1b6a7fe2a0 100644 --- a/scripts/mayaHydra_registerUI_batch_load.mel +++ b/scripts/mayaHydra_registerUI_batch_load.mel @@ -1,3 +1,18 @@ +// Copyright 2024 Autodesk +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + global proc mayaHydra_registerUI_batch_load() // Callback registered with the MFnPlugin for when the plugin is loaded // in batch mode. diff --git a/scripts/mayaHydra_registerUI_batch_unload.mel b/scripts/mayaHydra_registerUI_batch_unload.mel index d5c8ea3b11..45b0bf1a56 100644 --- a/scripts/mayaHydra_registerUI_batch_unload.mel +++ b/scripts/mayaHydra_registerUI_batch_unload.mel @@ -1,3 +1,18 @@ +// Copyright 2024 Autodesk +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + global proc mayaHydra_registerUI_batch_unload() // Callback registered with the MFnPlugin for when the plugin is loaded // in batch mode. diff --git a/scripts/mayaHydra_registerUI_load.mel b/scripts/mayaHydra_registerUI_load.mel index 8de71b418b..c40c9c6a13 100644 --- a/scripts/mayaHydra_registerUI_load.mel +++ b/scripts/mayaHydra_registerUI_load.mel @@ -1,3 +1,18 @@ +// Copyright 2024 Autodesk +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + global proc mayaHydra_registerUI_load() // Callback registered with the MFnPlugin for when the plugin is loaded. // Used to initialize any UI we create. diff --git a/scripts/mayaHydra_registerUI_unload.mel b/scripts/mayaHydra_registerUI_unload.mel index 90dfe94b11..60e429af00 100644 --- a/scripts/mayaHydra_registerUI_unload.mel +++ b/scripts/mayaHydra_registerUI_unload.mel @@ -1,3 +1,18 @@ +// Copyright 2024 Autodesk +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + global proc mayaHydra_registerUI_unload() // Callback registered with the MFnPlugin for when the plugin is unloaded. // Used to remove any UI we create. From d580ab86f8eb99c13e2ecbcf069ab741cef52027 Mon Sep 17 00:00:00 2001 From: debloip Date: Thu, 4 Jul 2024 11:47:19 -0400 Subject: [PATCH 62/75] HYDRA-1058 : Add comments in test --- .../render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp index f3c43ae012..6ffe8abf50 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp @@ -72,6 +72,7 @@ void testPrimPicking(const Ufe::Path& clickObjectUfePath, const QPoint& clickOff ASSERT_GT(sceneIndices.size(), 0u); SceneIndexInspector inspector(sceneIndices.front()); + // Preconditions auto ufeSelection = Ufe::GlobalSelection::get(); ASSERT_TRUE(ufeSelection->empty()); @@ -84,6 +85,7 @@ void testPrimPicking(const Ufe::Path& clickObjectUfePath, const QPoint& clickOff HdSelectionsSchema selectionsSchema = HdSelectionsSchema::GetFromParent(selectedObjectSceneIndexPrim.dataSource); ASSERT_EQ(selectionsSchema.IsDefined(), false); + // Picking M3dView active3dView = M3dView::active3dView(); const auto clickObjectSceneIndexPath = selectionSceneIndex->SceneIndexPath(clickObjectUfePath); auto primMouseCoords = getPrimMouseCoords(inspector.GetSceneIndex()->GetPrim(clickObjectSceneIndexPath), active3dView); @@ -92,6 +94,7 @@ void testPrimPicking(const Ufe::Path& clickObjectUfePath, const QPoint& clickOff mouseClick(Qt::MouseButton::LeftButton, active3dView.widget(), primMouseCoords); active3dView.refresh(); + // Postconditions ASSERT_EQ(ufeSelection->size(), 1u); ASSERT_TRUE(ufeSelection->contains(selectedObjectUfePath)); @@ -108,6 +111,7 @@ void testInstancePicking(const Ufe::Path& clickInstancerUfePath, int clickInstan ASSERT_GT(sceneIndices.size(), 0u); SceneIndexInspector inspector(sceneIndices.front()); + // Preconditions auto ufeSelection = Ufe::GlobalSelection::get(); ASSERT_TRUE(ufeSelection->empty()); @@ -122,6 +126,7 @@ void testInstancePicking(const Ufe::Path& clickInstancerUfePath, int clickInstan ASSERT_EQ(selectionsSchema.IsDefined(), false); } + // Picking M3dView active3dView = M3dView::active3dView(); const auto clickInstancerSceneIndexPath = selectionSceneIndex->SceneIndexPath(clickInstancerUfePath); auto primMouseCoords = getInstanceMouseCoords(inspector.GetSceneIndex()->GetPrim(clickInstancerSceneIndexPath), clickInstanceIndex, active3dView); @@ -130,6 +135,7 @@ void testInstancePicking(const Ufe::Path& clickInstancerUfePath, int clickInstan mouseClick(Qt::MouseButton::LeftButton, active3dView.widget(), primMouseCoords); active3dView.refresh(); + // Postconditions ASSERT_EQ(ufeSelection->size(), 1u); ASSERT_TRUE(ufeSelection->contains(selectedObjectUfePath)); @@ -195,6 +201,7 @@ TEST(TestGeomSubsetsPicking, marqueeSelect) std::vector geomSubsetNamesToSelect = {"CubeUpperHalf", "SphereUpperHalf"}; + // Preconditions auto ufeSelection = Ufe::GlobalSelection::get(); ASSERT_TRUE(ufeSelection->empty()); @@ -202,19 +209,19 @@ TEST(TestGeomSubsetsPicking, marqueeSelect) assertUnselected(inspector, PrimNamePredicate(geomSubsetName)); } + // Marquee selection M3dView active3dView = M3dView::active3dView(); - // Initialize the selection rectangle int offsetFromBorder = 10; QPoint topLeftMouseCoords(0 + offsetFromBorder, 0 + offsetFromBorder); QPoint bottomRightMouseCoords(active3dView.portWidth() - offsetFromBorder, active3dView.portHeight() - offsetFromBorder); - // Perform the marquee selection mousePress(Qt::MouseButton::LeftButton, active3dView.widget(), topLeftMouseCoords); mouseMoveTo(active3dView.widget(), bottomRightMouseCoords); mouseRelease(Qt::MouseButton::LeftButton, active3dView.widget(), bottomRightMouseCoords); active3dView.refresh(); + // Postconditions ASSERT_EQ(ufeSelection->size(), 2u); ASSERT_TRUE(ufeSelection->contains(cubeUpperHalfUfePath)); ASSERT_TRUE(ufeSelection->contains(sphereUpperHalfUfePath)); From d7ff4e320d849e28fe8ff7122770f1e32b9e6bcf Mon Sep 17 00:00:00 2001 From: debloip Date: Thu, 4 Jul 2024 12:46:39 -0400 Subject: [PATCH 63/75] HYDRA-1058 : Handle build support for USD < 2403 --- lib/mayaHydra/mayaPlugin/renderOverride.cpp | 6 ++++++ lib/mayaHydra/mayaPlugin/viewCommand.cpp | 9 +++++++++ scripts/mayaHydra_GeomSubsetsPickMode.mel | 8 ++++++++ 3 files changed, 23 insertions(+) diff --git a/lib/mayaHydra/mayaPlugin/renderOverride.cpp b/lib/mayaHydra/mayaPlugin/renderOverride.cpp index f49e580a23..bb1ddeaa00 100644 --- a/lib/mayaHydra/mayaPlugin/renderOverride.cpp +++ b/lib/mayaHydra/mayaPlugin/renderOverride.cpp @@ -465,6 +465,7 @@ class UsdPickHandler : public MtohRenderOverride::PickHandlerBase { UsdPickHandler(MtohRenderOverride& renderOverride) : PickHandlerBase(renderOverride) {} +#if PXR_VERSION >= 2403 std::vector resolveGeomSubsetsPicking( HdSceneIndexBaseConstRefPtr sceneIndex, const SdfPath& basePrimPath, @@ -501,6 +502,7 @@ class UsdPickHandler : public MtohRenderOverride::PickHandlerBase { } return pickedGeomSubsets; } +#endif // Return the closest path and the instance index in the scene index scene // that corresponds to the pick hit. If the pick hit is not an instance, @@ -563,6 +565,7 @@ class UsdPickHandler : public MtohRenderOverride::PickHandlerBase { std::vector hitPaths; +#if PXR_VERSION >= 2403 if (GetGeomSubsetsPickMode() == GeomSubsetsPickModeTokens->Faces) { auto geomSubsetsHitPaths = resolveGeomSubsetsPicking( renderIndex()->GetTerminalSceneIndex(), @@ -580,6 +583,9 @@ class UsdPickHandler : public MtohRenderOverride::PickHandlerBase { } else { hitPaths.push_back(resolvePrimAndInstancePicking(*renderIndex(), pickInput.pickHit)); } +#else + hitPaths.push_back(resolvePrimAndInstancePicking(*renderIndex(), pickInput.pickHit)); +#endif size_t nbSelectedUfeItems = 0; for (const auto& [pickedUsdPath, instanceNdx] : hitPaths) { diff --git a/lib/mayaHydra/mayaPlugin/viewCommand.cpp b/lib/mayaHydra/mayaPlugin/viewCommand.cpp index 75dad64369..960c517b9f 100644 --- a/lib/mayaHydra/mayaPlugin/viewCommand.cpp +++ b/lib/mayaHydra/mayaPlugin/viewCommand.cpp @@ -28,6 +28,8 @@ #include #include +#include + PXR_NAMESPACE_USING_DIRECTIVE namespace MAYAHYDRA_NS_DEF { @@ -92,6 +94,9 @@ constexpr auto _gitCommitLong = "-gitCommit"; constexpr auto _gitBranchLong = "-gitBranch"; constexpr auto _buildDateLong = "-buildDate"; +constexpr auto _usdVersion = "-uv"; +constexpr auto _usdVersionLong = "-usdVersion"; + constexpr auto _rendererId = "-r"; constexpr auto _rendererIdLong = "-renderer"; @@ -181,6 +186,8 @@ MSyntax MtohViewCmd::createSyntax() syntax.addFlag(_gitBranch, _gitBranchLong); syntax.addFlag(_buildDate, _buildDateLong); + syntax.addFlag(_usdVersion, _usdVersionLong); + return syntax; } @@ -303,6 +310,8 @@ MStatus MtohViewCmd::doIt(const MArgList& args) setResult(MhBuildInfo::gitBranch()); } else if (db.isFlagSet(_buildDate)) { setResult(MhBuildInfo::buildDate()); + } else if (db.isFlagSet(_usdVersion)) { + setResult(PXR_VERSION); } return MS::kSuccess; } diff --git a/scripts/mayaHydra_GeomSubsetsPickMode.mel b/scripts/mayaHydra_GeomSubsetsPickMode.mel index 0bf1dca278..561e27da78 100644 --- a/scripts/mayaHydra_GeomSubsetsPickMode.mel +++ b/scripts/mayaHydra_GeomSubsetsPickMode.mel @@ -62,6 +62,10 @@ global proc mayaHydra_GeomSubsetsPickMode_SetMode(string $mode) { // Main entry point to create the GeomSubsets UI global proc mayaHydra_GeomSubsetsPickMode_SetupUI() { + if (`mayaHydra -usdVersion` < 2403) { + return; + } + mayaHydra_GeomSubsetsPickMode_SetupRuntimeCommands; global string $gMainSelectMenu; // Maya's "Select" menu $callbackExists = hasMenuCallback($gMainSelectMenu, "mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback"); @@ -72,6 +76,10 @@ global proc mayaHydra_GeomSubsetsPickMode_SetupUI() { // Main entry point to delete the GeomSubsets UI global proc mayaHydra_GeomSubsetsPickMode_TeardownUI() { + if (`mayaHydra -usdVersion` < 2403) { + return; + } + global string $gMainSelectMenu; // Maya's "Select" menu removeMenuCallback($gMainSelectMenu, "mayaHydra_GeomSubsetsPickModeMenu_SelectMenuOpenedCallback"); From 84545f26fdee32033243911d9f3f54df71cca174 Mon Sep 17 00:00:00 2001 From: debloip Date: Thu, 4 Jul 2024 13:00:36 -0400 Subject: [PATCH 64/75] HYDRA-1058 : Skip GeomSubset picking tests if USD version does not support GeomSubset prims --- .../cpp/testGeomSubsetsPicking.cpp | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp index 6ffe8abf50..454d6e90e0 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp @@ -152,21 +152,32 @@ void testInstancePicking(const Ufe::Path& clickInstancerUfePath, int clickInstan TEST(TestGeomSubsetsPicking, geomSubsetPicking) { +#if PXR_VERSION < 2403 + GTEST_SKIP() << "Skipping test, USD version used does not support GeomSubset prims."; +#else const auto cubeMeshUfePathString = kStageUfePathSegment + "," + kCubeMeshUfePathSegment; const auto cubeMeshUfePath = Ufe::PathString::path(cubeMeshUfePathString); const auto cubeUpperHalfUfePath = Ufe::PathString::path(cubeMeshUfePathString + "/" + kCubeUpperHalfName); testPrimPicking(cubeMeshUfePath, QPoint(0, -25), cubeUpperHalfUfePath); +#endif } TEST(TestGeomSubsetsPicking, fallbackPicking) { +#if PXR_VERSION < 2403 + GTEST_SKIP() << "Skipping test, USD version used does not support GeomSubset prims."; +#else const auto cubeMeshUfePathString = kStageUfePathSegment + "," + kCubeMeshUfePathSegment; const auto cubeMeshUfePath = Ufe::PathString::path(cubeMeshUfePathString); testPrimPicking(cubeMeshUfePath, QPoint(0, 25), cubeMeshUfePath); +#endif } TEST(TestGeomSubsetsPicking, instanceGeomSubsetPicking) { +#if PXR_VERSION < 2403 + GTEST_SKIP() << "Skipping test, USD version used does not support GeomSubset prims."; +#else const auto sphereInstancerUfePathString = kStageUfePathSegment + "," + kSphereInstancerUfePathSegment; const auto sphereInstancerUfePath = Ufe::PathString::path(sphereInstancerUfePathString); @@ -174,10 +185,14 @@ TEST(TestGeomSubsetsPicking, instanceGeomSubsetPicking) const auto sphereUpperHalfUfePath = Ufe::PathString::path(sphereMeshUfePathString + "/" + kSphereUpperHalfName); testInstancePicking(sphereInstancerUfePath, 0, QPoint(0, -25), sphereUpperHalfUfePath); +#endif } TEST(TestGeomSubsetsPicking, instanceFallbackPicking) { +#if PXR_VERSION < 2403 + GTEST_SKIP() << "Skipping test, USD version used does not support GeomSubset prims."; +#else const auto sphereInstancerUfePathString = kStageUfePathSegment + "," + kSphereInstancerUfePathSegment; const auto sphereInstancerUfePath = Ufe::PathString::path(sphereInstancerUfePathString); @@ -185,10 +200,14 @@ TEST(TestGeomSubsetsPicking, instanceFallbackPicking) const auto sphereMeshUfePath = Ufe::PathString::path(sphereMeshUfePathString); testInstancePicking(sphereInstancerUfePath, 0, QPoint(0, 25), sphereMeshUfePath); +#endif } TEST(TestGeomSubsetsPicking, marqueeSelect) { +#if PXR_VERSION < 2403 + GTEST_SKIP() << "Skipping test, USD version used does not support GeomSubset prims."; +#else const SceneIndicesVector& sceneIndices = GetTerminalSceneIndices(); ASSERT_GT(sceneIndices.size(), 0u); SceneIndexInspector inspector(sceneIndices.front()); @@ -229,4 +248,5 @@ TEST(TestGeomSubsetsPicking, marqueeSelect) for (const auto& geomSubsetName : geomSubsetNamesToSelect) { assertSelected(inspector, PrimNamePredicate(geomSubsetName)); } +#endif } From b17499576c90db723360400818b09eb748a881a0 Mon Sep 17 00:00:00 2001 From: debloip Date: Thu, 4 Jul 2024 14:40:35 -0400 Subject: [PATCH 65/75] HYDRA-1058 : Debug OSX and Linux failure #1 --- .../cpp/testUsdPointInstancePicking.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testUsdPointInstancePicking.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testUsdPointInstancePicking.cpp index a153d20476..8e4c3d9b77 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testUsdPointInstancePicking.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testUsdPointInstancePicking.cpp @@ -69,5 +69,21 @@ TEST(TestUsdPointInstancePicking, pickPointInstance) // object is returned. Therefore test that the expected selected path is // in the selection. ASSERT_GE(sn->size(), 1u); + std::cout << "Expected selected path string : " << selected.string() << std::endl; + std::cout << "Actual selected path string : " << sn->front()->path().string() << std::endl; + for (const auto& seg : selected.getSegments()) { + std::cout << "Expected segment rtid : " << seg.runTimeId() << std::endl; + std::cout << "Expected segment separator : " << seg.separator() << std::endl; + for (const auto& comp : seg.components()) { + std::cout << "Expected component string : " << comp.string() << std::endl; + } + } + for (const auto& seg : sn->front()->path().getSegments()) { + std::cout << "Actual segment rtid : " << seg.runTimeId() << std::endl; + std::cout << "Actual segment separator : " << seg.separator() << std::endl; + for (const auto& comp : seg.components()) { + std::cout << "Actual component string : " << comp.string() << std::endl; + } + } ASSERT_TRUE(sn->contains(selected)); } From 8d0e85d3863699571fbeaa00868a5e3e8f009c74 Mon Sep 17 00:00:00 2001 From: debloip Date: Thu, 4 Jul 2024 15:06:09 -0400 Subject: [PATCH 66/75] HYDRA-1058 : Debug OSX and Linux #2 --- .../render/mayaToHydra/cpp/testUsdPointInstancePicking.cpp | 5 +---- .../render/mayaToHydra/cpp/testUsdPointInstancePicking.py | 4 ++-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testUsdPointInstancePicking.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testUsdPointInstancePicking.cpp index 8e4c3d9b77..40d5d8f924 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testUsdPointInstancePicking.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testUsdPointInstancePicking.cpp @@ -65,10 +65,7 @@ TEST(TestUsdPointInstancePicking, pickPointInstance) mouseClick(Qt::MouseButton::LeftButton, active3dView.widget(), primMouseCoords); active3dView.refresh(); - // When picking on the boundary of multiple objects, one Hydra pick hit per - // object is returned. Therefore test that the expected selected path is - // in the selection. - ASSERT_GE(sn->size(), 1u); + ASSERT_EQ(sn->size(), 1u); std::cout << "Expected selected path string : " << selected.string() << std::endl; std::cout << "Actual selected path string : " << sn->front()->path().string() << std::endl; for (const auto& seg : selected.getSegments()) { diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testUsdPointInstancePicking.py b/test/lib/mayaUsd/render/mayaToHydra/cpp/testUsdPointInstancePicking.py index 6c71d965fd..f7586bd1cd 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testUsdPointInstancePicking.py +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testUsdPointInstancePicking.py @@ -40,8 +40,8 @@ def loadUsdScene(self): def setUp(self): super(TestUsdPointInstancePicking, self).setUp() self.loadUsdScene() - cmds.setAttr('persp.translate', 19.3, 13.7, 11.4, type='float3') - cmds.setAttr('persp.rotate', -33.4, 63.0, 0, type='float3') + cmds.setAttr('persp.translate', 15, 15, 10, type='float3') + cmds.setAttr('persp.rotate', -40, 60, 0, type='float3') cmds.refresh() def test_PickPointInstancer(self): From eb9ef7543ff6bbb823092c740a78bb795610f2f6 Mon Sep 17 00:00:00 2001 From: debloip Date: Thu, 4 Jul 2024 15:10:34 -0400 Subject: [PATCH 67/75] MAYA-xxxx --- .../mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp index 454d6e90e0..674b73f1b7 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp @@ -35,6 +35,7 @@ using namespace MayaHydra; namespace { +#if PXR_VERSION >= 2403 const std::string kStageUfePathSegment = "|GeomSubsetsPickingTestScene|GeomSubsetsPickingTestSceneShape"; const std::string kCubeMeshUfePathSegment = "/Root/CubeMeshXform/CubeMesh"; const std::string kSphereMeshUfePathSegment = "/Root/SphereMeshXform/SphereMesh"; @@ -147,6 +148,7 @@ void testInstancePicking(const Ufe::Path& clickInstancerUfePath, int clickInstan ASSERT_TRUE(selectionsSchema.GetElement(0).GetFullySelected()); } } +#endif } // namespace From 829244bb3d317605c50033c4cd6d807efd836c10 Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 5 Jul 2024 10:53:54 -0400 Subject: [PATCH 68/75] HYDRA-1058 : Debug OSX #1 --- .../cpp/testGeomSubsetsPicking.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp index 674b73f1b7..019b3d6213 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp @@ -44,6 +44,18 @@ const std::string kSphereInstancerUfePathSegment = "/Root/SphereInstancer"; const std::string kCubeUpperHalfName = "CubeUpperHalf"; const std::string kSphereUpperHalfName = "SphereUpperHalf"; +void debugPrintUfePath(const std::string varName, const Ufe::Path& path) { + std::cout << "Printing " << varName << std::endl; + std::cout << "\t" << "Path : " << path.string() << std::endl; + for (const auto& seg : path.getSegments()) { + std::cout << "\t\t" << "Segment Rtid : " << seg.runTimeId() << std::endl; + std::cout << "\t\t" << "Segment separator : " << seg.separator() << std::endl; + for (const auto& comp : seg.components()) { + std::cout << "\t\t\t" << "Component : " << comp.string() << std::endl; + } + } +} + void assertUnselected(const SceneIndexInspector& inspector, const FindPrimPredicate& primPredicate) { PrimEntriesVector primEntries = inspector.FindPrims(primPredicate); @@ -80,7 +92,9 @@ void testPrimPicking(const Ufe::Path& clickObjectUfePath, const QPoint& clickOff const auto selectionSceneIndex = findSelectionSceneIndexInTree(inspector.GetSceneIndex()); ASSERT_TRUE(selectionSceneIndex); + debugPrintUfePath("selectedObjectUfePath", selectedObjectUfePath); const auto selectedObjectSceneIndexPath = selectionSceneIndex->SceneIndexPath(selectedObjectUfePath); + std::cout << "selectedObjectSceneIndexPath : " << selectedObjectSceneIndexPath.GetString() << std::endl; HdSceneIndexPrim selectedObjectSceneIndexPrim = inspector.GetSceneIndex()->GetPrim(selectedObjectSceneIndexPath); HdSelectionsSchema selectionsSchema = HdSelectionsSchema::GetFromParent(selectedObjectSceneIndexPrim.dataSource); @@ -88,15 +102,20 @@ void testPrimPicking(const Ufe::Path& clickObjectUfePath, const QPoint& clickOff // Picking M3dView active3dView = M3dView::active3dView(); + debugPrintUfePath("clickObjectUfePath", clickObjectUfePath); const auto clickObjectSceneIndexPath = selectionSceneIndex->SceneIndexPath(clickObjectUfePath); + std::cout << "clickObjectSceneIndexPath : " << clickObjectSceneIndexPath.GetString() << std::endl; auto primMouseCoords = getPrimMouseCoords(inspector.GetSceneIndex()->GetPrim(clickObjectSceneIndexPath), active3dView); primMouseCoords += clickOffset; + std::cout << "primMouseCoords : " << primMouseCoords.x() << ", " << primMouseCoords.y() << std::endl; + std::cout << "viewportSize : " << active3dView.portWidth() << ", " << active3dView.portHeight() << std::endl; mouseClick(Qt::MouseButton::LeftButton, active3dView.widget(), primMouseCoords); active3dView.refresh(); // Postconditions ASSERT_EQ(ufeSelection->size(), 1u); + debugPrintUfePath("ufeSelection->front()->path()", ufeSelection->front()->path()); ASSERT_TRUE(ufeSelection->contains(selectedObjectUfePath)); selectedObjectSceneIndexPrim = inspector.GetSceneIndex()->GetPrim(selectedObjectSceneIndexPath); From dbfd624bfad2faa10b182217420b22b41ee7e636 Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 5 Jul 2024 12:04:05 -0400 Subject: [PATCH 69/75] HYDRA-1058 : Adjust test setup to use markers for clicking --- .../cpp/testGeomSubsetsPicking.cpp | 96 +++++-------------- .../GeomSubsetsPickingTestScene.usda | 24 +++++ 2 files changed, 49 insertions(+), 71 deletions(-) diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp index 019b3d6213..c2c31f2644 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp @@ -44,6 +44,11 @@ const std::string kSphereInstancerUfePathSegment = "/Root/SphereInstancer"; const std::string kCubeUpperHalfName = "CubeUpperHalf"; const std::string kSphereUpperHalfName = "SphereUpperHalf"; +const std::string kCubeUpperHalfMarkerUfePathSegment = "/Root/CubeUpperHalfMarker"; +const std::string kCubeLowerHalfMarkerUfePathSegment = "/Root/CubeLowerHalfMarker"; +const std::string kSphereInstanceUpperHalfMarkerUfePathSegment = "/Root/SphereInstanceUpperHalfMarker"; +const std::string kSphereInstanceLowerHalfMarkerUfePathSegment = "/Root/SphereInstanceLowerHalfMarker"; + void debugPrintUfePath(const std::string varName, const Ufe::Path& path) { std::cout << "Printing " << varName << std::endl; std::cout << "\t" << "Path : " << path.string() << std::endl; @@ -79,53 +84,7 @@ void assertSelected(const SceneIndexInspector& inspector, const FindPrimPredicat } } -void testPrimPicking(const Ufe::Path& clickObjectUfePath, const QPoint& clickOffset, const Ufe::Path& selectedObjectUfePath) -{ - const SceneIndicesVector& sceneIndices = GetTerminalSceneIndices(); - ASSERT_GT(sceneIndices.size(), 0u); - SceneIndexInspector inspector(sceneIndices.front()); - - // Preconditions - auto ufeSelection = Ufe::GlobalSelection::get(); - ASSERT_TRUE(ufeSelection->empty()); - - const auto selectionSceneIndex = findSelectionSceneIndexInTree(inspector.GetSceneIndex()); - ASSERT_TRUE(selectionSceneIndex); - - debugPrintUfePath("selectedObjectUfePath", selectedObjectUfePath); - const auto selectedObjectSceneIndexPath = selectionSceneIndex->SceneIndexPath(selectedObjectUfePath); - std::cout << "selectedObjectSceneIndexPath : " << selectedObjectSceneIndexPath.GetString() << std::endl; - - HdSceneIndexPrim selectedObjectSceneIndexPrim = inspector.GetSceneIndex()->GetPrim(selectedObjectSceneIndexPath); - HdSelectionsSchema selectionsSchema = HdSelectionsSchema::GetFromParent(selectedObjectSceneIndexPrim.dataSource); - ASSERT_EQ(selectionsSchema.IsDefined(), false); - - // Picking - M3dView active3dView = M3dView::active3dView(); - debugPrintUfePath("clickObjectUfePath", clickObjectUfePath); - const auto clickObjectSceneIndexPath = selectionSceneIndex->SceneIndexPath(clickObjectUfePath); - std::cout << "clickObjectSceneIndexPath : " << clickObjectSceneIndexPath.GetString() << std::endl; - auto primMouseCoords = getPrimMouseCoords(inspector.GetSceneIndex()->GetPrim(clickObjectSceneIndexPath), active3dView); - primMouseCoords += clickOffset; - - std::cout << "primMouseCoords : " << primMouseCoords.x() << ", " << primMouseCoords.y() << std::endl; - std::cout << "viewportSize : " << active3dView.portWidth() << ", " << active3dView.portHeight() << std::endl; - mouseClick(Qt::MouseButton::LeftButton, active3dView.widget(), primMouseCoords); - active3dView.refresh(); - - // Postconditions - ASSERT_EQ(ufeSelection->size(), 1u); - debugPrintUfePath("ufeSelection->front()->path()", ufeSelection->front()->path()); - ASSERT_TRUE(ufeSelection->contains(selectedObjectUfePath)); - - selectedObjectSceneIndexPrim = inspector.GetSceneIndex()->GetPrim(selectedObjectSceneIndexPath); - selectionsSchema = HdSelectionsSchema::GetFromParent(selectedObjectSceneIndexPrim.dataSource); - ASSERT_EQ(selectionsSchema.IsDefined(), true); - ASSERT_EQ(selectionsSchema.GetNumElements(), 1u); - ASSERT_TRUE(selectionsSchema.GetElement(0).GetFullySelected()); -} - -void testInstancePicking(const Ufe::Path& clickInstancerUfePath, int clickInstanceIndex, const QPoint& clickOffset, const Ufe::Path& selectedObjectUfePath) +void testPicking(const Ufe::Path& clickMarkerUfePath, const Ufe::Path& selectedObjectUfePath) { const SceneIndicesVector& sceneIndices = GetTerminalSceneIndices(); ASSERT_GT(sceneIndices.size(), 0u); @@ -148,15 +107,19 @@ void testInstancePicking(const Ufe::Path& clickInstancerUfePath, int clickInstan // Picking M3dView active3dView = M3dView::active3dView(); - const auto clickInstancerSceneIndexPath = selectionSceneIndex->SceneIndexPath(clickInstancerUfePath); - auto primMouseCoords = getInstanceMouseCoords(inspector.GetSceneIndex()->GetPrim(clickInstancerSceneIndexPath), clickInstanceIndex, active3dView); - primMouseCoords += clickOffset; + debugPrintUfePath("clickMarkerUfePath", clickMarkerUfePath); + const auto clickMarkerSceneIndexPath = selectionSceneIndex->SceneIndexPath(clickMarkerUfePath); + std::cout << "clickMarkerSceneIndexPath : " << clickMarkerSceneIndexPath.GetString() << std::endl; + auto primMouseCoords = getPrimMouseCoords(inspector.GetSceneIndex()->GetPrim(clickMarkerSceneIndexPath), active3dView); + std::cout << "primMouseCoords : " << primMouseCoords.x() << ", " << primMouseCoords.y() << std::endl; + std::cout << "viewportSize : " << active3dView.portWidth() << ", " << active3dView.portHeight() << std::endl; mouseClick(Qt::MouseButton::LeftButton, active3dView.widget(), primMouseCoords); active3dView.refresh(); // Postconditions ASSERT_EQ(ufeSelection->size(), 1u); + debugPrintUfePath("ufeSelection->front()->path()", ufeSelection->front()->path()); ASSERT_TRUE(ufeSelection->contains(selectedObjectUfePath)); for (const auto& selectedObjectSceneIndexPath : selectedObjectSceneIndexPaths) { @@ -176,10 +139,9 @@ TEST(TestGeomSubsetsPicking, geomSubsetPicking) #if PXR_VERSION < 2403 GTEST_SKIP() << "Skipping test, USD version used does not support GeomSubset prims."; #else - const auto cubeMeshUfePathString = kStageUfePathSegment + "," + kCubeMeshUfePathSegment; - const auto cubeMeshUfePath = Ufe::PathString::path(cubeMeshUfePathString); - const auto cubeUpperHalfUfePath = Ufe::PathString::path(cubeMeshUfePathString + "/" + kCubeUpperHalfName); - testPrimPicking(cubeMeshUfePath, QPoint(0, -25), cubeUpperHalfUfePath); + const auto cubeUpperHalfMarkerUfePath = Ufe::PathString::path(kStageUfePathSegment + "," + kCubeUpperHalfMarkerUfePathSegment); + const auto cubeUpperHalfUfePath = Ufe::PathString::path(kStageUfePathSegment + "," + kCubeMeshUfePathSegment + "/" + kCubeUpperHalfName); + testPicking(cubeUpperHalfMarkerUfePath, cubeUpperHalfUfePath); #endif } @@ -188,9 +150,9 @@ TEST(TestGeomSubsetsPicking, fallbackPicking) #if PXR_VERSION < 2403 GTEST_SKIP() << "Skipping test, USD version used does not support GeomSubset prims."; #else - const auto cubeMeshUfePathString = kStageUfePathSegment + "," + kCubeMeshUfePathSegment; - const auto cubeMeshUfePath = Ufe::PathString::path(cubeMeshUfePathString); - testPrimPicking(cubeMeshUfePath, QPoint(0, 25), cubeMeshUfePath); + const auto cubeLowerHalfMarkerUfePath = Ufe::PathString::path(kStageUfePathSegment + "," + kCubeLowerHalfMarkerUfePathSegment); + const auto cubeMeshUfePath = Ufe::PathString::path(kStageUfePathSegment + "," + kCubeMeshUfePathSegment); + testPicking(cubeLowerHalfMarkerUfePath, cubeMeshUfePath); #endif } @@ -199,13 +161,9 @@ TEST(TestGeomSubsetsPicking, instanceGeomSubsetPicking) #if PXR_VERSION < 2403 GTEST_SKIP() << "Skipping test, USD version used does not support GeomSubset prims."; #else - const auto sphereInstancerUfePathString = kStageUfePathSegment + "," + kSphereInstancerUfePathSegment; - const auto sphereInstancerUfePath = Ufe::PathString::path(sphereInstancerUfePathString); - - const auto sphereMeshUfePathString = kStageUfePathSegment + "," + kSphereMeshUfePathSegment; - const auto sphereUpperHalfUfePath = Ufe::PathString::path(sphereMeshUfePathString + "/" + kSphereUpperHalfName); - - testInstancePicking(sphereInstancerUfePath, 0, QPoint(0, -25), sphereUpperHalfUfePath); + const auto sphereInstanceUpperHalfMarkerUfePath = Ufe::PathString::path(kStageUfePathSegment + "," + kSphereInstanceUpperHalfMarkerUfePathSegment); + const auto sphereUpperHalfUfePath = Ufe::PathString::path(kStageUfePathSegment + "," + kSphereMeshUfePathSegment + "/" + kSphereUpperHalfName); + testPicking(sphereInstanceUpperHalfMarkerUfePath, sphereUpperHalfUfePath); #endif } @@ -214,13 +172,9 @@ TEST(TestGeomSubsetsPicking, instanceFallbackPicking) #if PXR_VERSION < 2403 GTEST_SKIP() << "Skipping test, USD version used does not support GeomSubset prims."; #else - const auto sphereInstancerUfePathString = kStageUfePathSegment + "," + kSphereInstancerUfePathSegment; - const auto sphereInstancerUfePath = Ufe::PathString::path(sphereInstancerUfePathString); - - const auto sphereMeshUfePathString = kStageUfePathSegment + "," + kSphereMeshUfePathSegment; - const auto sphereMeshUfePath = Ufe::PathString::path(sphereMeshUfePathString); - - testInstancePicking(sphereInstancerUfePath, 0, QPoint(0, 25), sphereMeshUfePath); + const auto sphereInstanceLowerHalfMarkerUfePath = Ufe::PathString::path(kStageUfePathSegment + "," + kSphereInstanceLowerHalfMarkerUfePathSegment); + const auto sphereMeshUfePath = Ufe::PathString::path(kStageUfePathSegment + "," + kSphereMeshUfePathSegment); + testPicking(sphereInstanceLowerHalfMarkerUfePath, sphereMeshUfePath); #endif } diff --git a/test/testSamples/testGeomSubsetsPicking/GeomSubsetsPickingTestScene.usda b/test/testSamples/testGeomSubsetsPicking/GeomSubsetsPickingTestScene.usda index 1201b63c3d..85ef2ddba6 100644 --- a/test/testSamples/testGeomSubsetsPicking/GeomSubsetsPickingTestScene.usda +++ b/test/testSamples/testGeomSubsetsPicking/GeomSubsetsPickingTestScene.usda @@ -54,6 +54,30 @@ def Xform "Root" , ] } + + def Xform "CubeUpperHalfMarker" + { + double3 xformOp:translate = (-2, 0.5, 0) + uniform token[] xformOpOrder = ["xformOp:translate"] + } + + def Xform "CubeLowerHalfMarker" + { + double3 xformOp:translate = (-2, -0.5, 0) + uniform token[] xformOpOrder = ["xformOp:translate"] + } + + def Xform "SphereInstanceUpperHalfMarker" + { + double3 xformOp:translate = (2, 0.5, 0) + uniform token[] xformOpOrder = ["xformOp:translate"] + } + + def Xform "SphereInstanceLowerHalfMarker" + { + double3 xformOp:translate = (2, -0.5, 0) + uniform token[] xformOpOrder = ["xformOp:translate"] + } } def Scope "mtl" From a3b032a79e77d955e54703753c4abedcd0a17f1f Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 5 Jul 2024 15:23:16 -0400 Subject: [PATCH 70/75] HYDRA-1058 : Rename resolvePrimAndInstancePicking --- lib/mayaHydra/mayaPlugin/renderOverride.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/mayaHydra/mayaPlugin/renderOverride.cpp b/lib/mayaHydra/mayaPlugin/renderOverride.cpp index bb1ddeaa00..8ad3e020eb 100644 --- a/lib/mayaHydra/mayaPlugin/renderOverride.cpp +++ b/lib/mayaHydra/mayaPlugin/renderOverride.cpp @@ -507,7 +507,7 @@ class UsdPickHandler : public MtohRenderOverride::PickHandlerBase { // Return the closest path and the instance index in the scene index scene // that corresponds to the pick hit. If the pick hit is not an instance, // the instance index will be -1. - HitPath resolvePrimAndInstancePicking(HdRenderIndex& renderIndex, const HdxPickHit& pickHit) const + HitPath resolveInstancePicking(HdRenderIndex& renderIndex, const HdxPickHit& pickHit) const { auto primOrigin = HdxPrimOriginInfo::FromPickHit(&renderIndex, pickHit); @@ -578,13 +578,13 @@ class UsdPickHandler : public MtohRenderOverride::PickHandlerBase { // If we did not find any geomSubset and this is the only pick hit, then fallback to selecting the base prim/instance. if (hitPaths.empty() && pickInput.isSolePickHit) { - hitPaths.push_back(resolvePrimAndInstancePicking(*renderIndex(), pickInput.pickHit)); + hitPaths.push_back(resolveInstancePicking(*renderIndex(), pickInput.pickHit)); } } else { - hitPaths.push_back(resolvePrimAndInstancePicking(*renderIndex(), pickInput.pickHit)); + hitPaths.push_back(resolveInstancePicking(*renderIndex(), pickInput.pickHit)); } #else - hitPaths.push_back(resolvePrimAndInstancePicking(*renderIndex(), pickInput.pickHit)); + hitPaths.push_back(resolveInstancePicking(*renderIndex(), pickInput.pickHit)); #endif size_t nbSelectedUfeItems = 0; From 8b12c6fd49f50030212c915e280af51ead4899df Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 5 Jul 2024 15:28:27 -0400 Subject: [PATCH 71/75] HYDRA-1058 : Fix typo --- scripts/mayaHydra_registerUI_batch_unload.mel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/mayaHydra_registerUI_batch_unload.mel b/scripts/mayaHydra_registerUI_batch_unload.mel index 45b0bf1a56..e11e94084d 100644 --- a/scripts/mayaHydra_registerUI_batch_unload.mel +++ b/scripts/mayaHydra_registerUI_batch_unload.mel @@ -14,7 +14,7 @@ // global proc mayaHydra_registerUI_batch_unload() -// Callback registered with the MFnPlugin for when the plugin is loaded +// Callback registered with the MFnPlugin for when the plugin is unloaded // in batch mode. // Do not currently have anything we need to handle. { From 66f6d14f95748f43572cd47bd1ece966b402c775 Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 5 Jul 2024 15:31:26 -0400 Subject: [PATCH 72/75] HYDRA-1058 : Revert obsolete changes --- .../cpp/testUsdPointInstancePicking.cpp | 16 ----- .../render/mayaToHydra/cpp/testUtils.cpp | 58 ++++--------------- .../render/mayaToHydra/cpp/testUtils.h | 29 ---------- 3 files changed, 12 insertions(+), 91 deletions(-) diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testUsdPointInstancePicking.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testUsdPointInstancePicking.cpp index 40d5d8f924..4eaa058d6b 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testUsdPointInstancePicking.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testUsdPointInstancePicking.cpp @@ -66,21 +66,5 @@ TEST(TestUsdPointInstancePicking, pickPointInstance) active3dView.refresh(); ASSERT_EQ(sn->size(), 1u); - std::cout << "Expected selected path string : " << selected.string() << std::endl; - std::cout << "Actual selected path string : " << sn->front()->path().string() << std::endl; - for (const auto& seg : selected.getSegments()) { - std::cout << "Expected segment rtid : " << seg.runTimeId() << std::endl; - std::cout << "Expected segment separator : " << seg.separator() << std::endl; - for (const auto& comp : seg.components()) { - std::cout << "Expected component string : " << comp.string() << std::endl; - } - } - for (const auto& seg : sn->front()->path().getSegments()) { - std::cout << "Actual segment rtid : " << seg.runTimeId() << std::endl; - std::cout << "Actual segment separator : " << seg.separator() << std::endl; - for (const auto& comp : seg.components()) { - std::cout << "Actual component string : " << comp.string() << std::endl; - } - } ASSERT_TRUE(sn->contains(selected)); } diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.cpp index 95c998729b..3f46e2eb92 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.cpp @@ -23,8 +23,6 @@ #include #include #include -#include -#include #include #include @@ -408,25 +406,6 @@ void mouseClick(Qt::MouseButton mouseButton, QWidget* widget, QPoint localMouseP mouseRelease(mouseButton, widget, localMousePos); } -QPoint worldPositionToMouseCoords(const PXR_NS::GfVec3d& worldPosition, M3dView& view) -{ - MPoint mayaWorldPosition(worldPosition[0], worldPosition[1], worldPosition[2], 1.0); - short viewportX = 0, viewportY = 0; - MStatus worldToViewStatus; - // First assert checks that the point was not clipped, second assert checks the general MStatus - if (!view.worldToView(mayaWorldPosition, viewportX, viewportY, &worldToViewStatus)) { - ADD_FAILURE() << "point was clipped by world to view projection, cannot get mouse coordinates for scene index prim."; - return {}; - } - if (worldToViewStatus != MS::kSuccess) { - ADD_FAILURE() << "M3dView::worldToView() failed, cannot get mouse coordinates for scene index prim."; - return {}; - } - - // Qt and M3dView use opposite Y-coordinates - return QPoint(viewportX, view.portHeight() - viewportY); -} - QPoint getPrimMouseCoords(const HdSceneIndexPrim& prim, M3dView& view) { HdDataSourceBaseHandle xformDataSource = HdContainerDataSource::Get(prim.dataSource, HdXformSchema::GetDefaultLocator()); @@ -439,36 +418,23 @@ QPoint getPrimMouseCoords(const HdSceneIndexPrim& prim, M3dView& view) HdXformSchema xformSchema(xformContainerDataSource); TF_AXIOM(xformSchema.GetMatrix()); GfMatrix4d xformMatrix = xformSchema.GetMatrix()->GetTypedValue(0); + GfVec3d translation = xformMatrix.ExtractTranslation(); - GfVec3d worldPosition = xformMatrix.ExtractTranslation(); - return worldPositionToMouseCoords(worldPosition, view); -} - -QPoint getInstanceMouseCoords(const PXR_NS::HdSceneIndexPrim& instancerPrim, size_t instanceIndex, M3dView& view) -{ - HdDataSourceBaseHandle instancerXformDataSource = HdContainerDataSource::Get(instancerPrim.dataSource, HdXformSchema::GetDefaultLocator()); - if (!instancerXformDataSource) { - ADD_FAILURE() << "Scene index instancer prim has no default locator data source, cannot get mouse coordinates for the instance."; + MPoint worldPosition(translation[0], translation[1], translation[2], 1.0); + short viewportX = 0, viewportY = 0; + MStatus worldToViewStatus; + // First assert checks that the point was not clipped, second assert checks the general MStatus + if (!view.worldToView(worldPosition, viewportX, viewportY, &worldToViewStatus)) { + ADD_FAILURE() << "point was clipped by world to view projection, cannot get mouse coordinates for scene index prim."; return {}; } - HdContainerDataSourceHandle instancerXformContainerDataSource = HdContainerDataSource::Cast(instancerXformDataSource); - TF_AXIOM(instancerXformContainerDataSource); - HdXformSchema instancerXformSchema(instancerXformContainerDataSource); - TF_AXIOM(instancerXformSchema.GetMatrix()); - GfMatrix4d instancerXformMatrix = instancerXformSchema.GetMatrix()->GetTypedValue(0); - - HdDataSourceLocator instanceTranslationsLocator(HdPrimvarsSchemaTokens->primvars, TfToken("hydra:instanceTranslations"), HdPrimvarSchemaTokens->primvarValue); - auto instanceTranslationsDataSource = HdTypedSampledDataSource>::Cast( - HdContainerDataSource::Get(instancerPrim.dataSource, instanceTranslationsLocator) - ); - if (!instanceTranslationsDataSource) { - ADD_FAILURE() << "Scene index instancer prim has no instance translations data source, cannot get mouse coordinates for the instance."; + if (worldToViewStatus != MS::kSuccess) { + ADD_FAILURE() << "M3dView::worldToView() failed, cannot get mouse coordinates for scene index prim."; return {}; } - GfVec3f instanceTranslation = instanceTranslationsDataSource->GetTypedValue(0)[instanceIndex]; - - GfVec3d worldPosition = instancerXformMatrix.ExtractTranslation() + instanceTranslation; - return worldPositionToMouseCoords(worldPosition, view); + + // Qt and M3dView use opposite Y-coordinates + return QPoint(viewportX, view.portHeight() - viewportY); } } // namespace MAYAHYDRA_NS_DEF diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.h b/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.h index 61bc035c68..63a82708cc 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.h +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testUtils.h @@ -446,20 +446,6 @@ void mouseRelease(Qt::MouseButton mouseButton, QWidget* widget, QPoint localMous */ void mouseClick(Qt::MouseButton mouseButton, QWidget* widget, QPoint localMousePos); -/** - * @brief Get the mouse coordinates of a position in the world. - * - * This function will return the mouse coordinates for the given world position, - * based on the given view. Note that the view argument is not changed and is - * passed in by non const reference only because its interface is not - * const-correct. - * - * @param[in] worldPosition The world position for which mouse coordinates must be computed. - * @param[in] view The view for which mouse coordinates are returned. - * @return Mouse coordinates. - */ -QPoint worldPositionToMouseCoords(const PXR_NS::GfVec3d& worldPosition, M3dView& view); - /** * @brief Get the mouse coordinates for a scene index prim. * @@ -474,21 +460,6 @@ QPoint worldPositionToMouseCoords(const PXR_NS::GfVec3d& worldPosition, M3dView& */ QPoint getPrimMouseCoords(const PXR_NS::HdSceneIndexPrim& prim, M3dView& view); -/** - * @brief Get the mouse coordinates for a scene index prim instance. - * - * This function will return the mouse coordinates for the scene index prim instance's - * local coordinate origin. Note that the view argument is not changed and is - * passed in by non const reference only because its interface is not - * const-correct. - * - * @param[in] instancerPrim The scene index instancer prim that owns the relevant instance. - * @param[in] instanceIndex The index of the relevant instance within the instancer prim. - * @param[in] view The view for which mouse coordinates are returned. - * @return Mouse coordinates. - */ -QPoint getInstanceMouseCoords(const PXR_NS::HdSceneIndexPrim& instancerPrim, size_t instanceIndex, M3dView& view); - } // namespace MAYAHYDRA_NS_DEF #endif // MAYAHYDRA_TEST_UTILS_H From fc5eb3f6963599e5a2cc62160d00246e0286629d Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 5 Jul 2024 15:35:28 -0400 Subject: [PATCH 73/75] HYDRA-1058 : Cleanup testGeomSubsetsPicking.cpp --- .../cpp/testGeomSubsetsPicking.cpp | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp index c2c31f2644..2c8a778ac8 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.cpp @@ -37,9 +37,9 @@ namespace { #if PXR_VERSION >= 2403 const std::string kStageUfePathSegment = "|GeomSubsetsPickingTestScene|GeomSubsetsPickingTestSceneShape"; + const std::string kCubeMeshUfePathSegment = "/Root/CubeMeshXform/CubeMesh"; const std::string kSphereMeshUfePathSegment = "/Root/SphereMeshXform/SphereMesh"; -const std::string kSphereInstancerUfePathSegment = "/Root/SphereInstancer"; const std::string kCubeUpperHalfName = "CubeUpperHalf"; const std::string kSphereUpperHalfName = "SphereUpperHalf"; @@ -49,18 +49,6 @@ const std::string kCubeLowerHalfMarkerUfePathSegment = "/Root/CubeLowerHalfMarke const std::string kSphereInstanceUpperHalfMarkerUfePathSegment = "/Root/SphereInstanceUpperHalfMarker"; const std::string kSphereInstanceLowerHalfMarkerUfePathSegment = "/Root/SphereInstanceLowerHalfMarker"; -void debugPrintUfePath(const std::string varName, const Ufe::Path& path) { - std::cout << "Printing " << varName << std::endl; - std::cout << "\t" << "Path : " << path.string() << std::endl; - for (const auto& seg : path.getSegments()) { - std::cout << "\t\t" << "Segment Rtid : " << seg.runTimeId() << std::endl; - std::cout << "\t\t" << "Segment separator : " << seg.separator() << std::endl; - for (const auto& comp : seg.components()) { - std::cout << "\t\t\t" << "Component : " << comp.string() << std::endl; - } - } -} - void assertUnselected(const SceneIndexInspector& inspector, const FindPrimPredicate& primPredicate) { PrimEntriesVector primEntries = inspector.FindPrims(primPredicate); @@ -107,19 +95,14 @@ void testPicking(const Ufe::Path& clickMarkerUfePath, const Ufe::Path& selectedO // Picking M3dView active3dView = M3dView::active3dView(); - debugPrintUfePath("clickMarkerUfePath", clickMarkerUfePath); const auto clickMarkerSceneIndexPath = selectionSceneIndex->SceneIndexPath(clickMarkerUfePath); - std::cout << "clickMarkerSceneIndexPath : " << clickMarkerSceneIndexPath.GetString() << std::endl; auto primMouseCoords = getPrimMouseCoords(inspector.GetSceneIndex()->GetPrim(clickMarkerSceneIndexPath), active3dView); - std::cout << "primMouseCoords : " << primMouseCoords.x() << ", " << primMouseCoords.y() << std::endl; - std::cout << "viewportSize : " << active3dView.portWidth() << ", " << active3dView.portHeight() << std::endl; mouseClick(Qt::MouseButton::LeftButton, active3dView.widget(), primMouseCoords); active3dView.refresh(); // Postconditions ASSERT_EQ(ufeSelection->size(), 1u); - debugPrintUfePath("ufeSelection->front()->path()", ufeSelection->front()->path()); ASSERT_TRUE(ufeSelection->contains(selectedObjectUfePath)); for (const auto& selectedObjectSceneIndexPath : selectedObjectSceneIndexPaths) { From b83f710f63ec2b2822ffbf5a0ae3178b7be880fb Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 5 Jul 2024 16:13:22 -0400 Subject: [PATCH 74/75] HYDRA-1058 : Add link to MayaUSD register strings MEL file --- scripts/mayaHydra_registerUIStrings.mel | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/mayaHydra_registerUIStrings.mel b/scripts/mayaHydra_registerUIStrings.mel index a3a16bcac5..baaba6f144 100644 --- a/scripts/mayaHydra_registerUIStrings.mel +++ b/scripts/mayaHydra_registerUIStrings.mel @@ -13,6 +13,9 @@ // limitations under the License. // +// Largely copied from MayaUSD's mayaUSDRegisterStrings.mel +// See here : https://github.com/Autodesk/maya-usd/blob/d7e4ee276f752a745e563f1dfb54e932b11c013f/plugin/adsk/scripts/mayaUSDRegisterStrings.mel + proc registerMayaHydraString(string $key, string $value) { registerPluginResource("mayaHydra", $key, $value); From d4768e8fcd5d74802d85f6370eb26c48c19e2abb Mon Sep 17 00:00:00 2001 From: debloip Date: Fri, 5 Jul 2024 16:15:39 -0400 Subject: [PATCH 75/75] HYDRA-1058 : Add comment --- .../lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py | 1 + 1 file changed, 1 insertion(+) diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py index 79d8be36bd..ce488048fa 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testGeomSubsetsPicking.py @@ -34,6 +34,7 @@ def setUp(self): cmds.select(clear=True) cmds.optionVar( sv=('mayaHydra_GeomSubsetsPickMode', 'Faces')) + # Used to ensure the fallback picking behavior works when clicking on a non-GeomSubset cmds.optionVar( sv=('mayaUsd_PointInstancesPickMode', 'Prototypes')) cmds.setAttr('persp.translate', 0, 0, 15, type='float3')