From 7111e955279afdbb91f2f539bfb2a995014319f4 Mon Sep 17 00:00:00 2001 From: Jesse Yurkovich Date: Wed, 27 Aug 2025 19:34:46 +0200 Subject: [PATCH] USD: Import UsdNurbsCurves as Curves instead of old Curve Refactor and revamp import and export of `UsdGeomNurbsCurves` prim objects. Fixes #130056, among other things. Summary of changes and enhancements: - Export: - Write out `nurb_weight` attribute as the USD `pointWeights` primvar - Properly write out cyclic NURBS curves data (* see notes) - Import: - Import using the new `Curves` datablock rather than the old `Curve` - Properly read in cyclic NURBS curves data (* see notes) - Tries harder to match incoming knot vector to standard `knots_mode`, will use Custom otherwise - Support import of all custom primvars and data attached to the prim (for use with Geometry Nodes etc.) (* see notes) Tests were added which check a variety of point count, order, knot_mode, and cyclic combinations (generated through Geometry Nodes). A small number of hand-crafted curves were used to test the Custom knots_mode support on import. Additionally, the tests cover the case when there are multiple curves defined for a single object. Notes: - Cyclic NURBS support is reliant on the current, under-spec'd, USD documentation. Changes may be required in the future if/when the USD spec is clarified: https://github.com/PixarAnimationStudios/OpenUSD/issues/3740 - Some Cyclic x knots_mode combinations are not correct and would require more research to determine how to properly address. - Custom attributes are not imported for Cyclic NURBS curves yet. Those will require additional work to function correctly and are also reliant on seeing how the USD spec changes. Pull Request: https://projects.blender.org/blender/blender/pulls/143970 --- .../blender/io/usd/intern/usd_reader_nurbs.cc | 552 ++-- .../blender/io/usd/intern/usd_reader_nurbs.hh | 27 +- .../io/usd/intern/usd_writer_curves.cc | 66 +- .../io/usd/intern/usd_writer_curves.hh | 5 +- tests/files/usd/compare/nurbs-custom.usda | 143 ++ .../usd/compare/nurbs-gen-multiple.blend | 3 + .../files/usd/compare/nurbs-gen-multiple.usda | 59 + .../files/usd/compare/nurbs-gen-single.blend | 3 + tests/files/usd/compare/nurbs-gen-single.usda | 2028 +++++++++++++++ .../usd/compare/reference/nurbs-custom.txt | 126 + .../compare/reference/nurbs-gen-multiple.txt | 83 + .../compare/reference/nurbs-gen-single.txt | 2251 +++++++++++++++++ tests/python/bl_usd_export_test.py | 10 +- tests/python/bl_usd_import_test.py | 39 +- 14 files changed, 5179 insertions(+), 216 deletions(-) create mode 100644 tests/files/usd/compare/nurbs-custom.usda create mode 100644 tests/files/usd/compare/nurbs-gen-multiple.blend create mode 100644 tests/files/usd/compare/nurbs-gen-multiple.usda create mode 100644 tests/files/usd/compare/nurbs-gen-single.blend create mode 100644 tests/files/usd/compare/nurbs-gen-single.usda create mode 100644 tests/files/usd/compare/reference/nurbs-custom.txt create mode 100644 tests/files/usd/compare/reference/nurbs-gen-multiple.txt create mode 100644 tests/files/usd/compare/reference/nurbs-gen-single.txt diff --git a/source/blender/io/usd/intern/usd_reader_nurbs.cc b/source/blender/io/usd/intern/usd_reader_nurbs.cc index 22e4468a7e7..604a90ff1f2 100644 --- a/source/blender/io/usd/intern/usd_reader_nurbs.cc +++ b/source/blender/io/usd/intern/usd_reader_nurbs.cc @@ -7,241 +7,433 @@ #include "usd_reader_nurbs.hh" -#include "BKE_curve.hh" -#include "BKE_geometry_set.hh" -#include "BKE_mesh.hh" -#include "BKE_object.hh" +#include "BKE_curves.hh" -#include "BLI_listbase.h" +#include "BLI_offset_indices.hh" +#include "BLI_span.hh" -#include "DNA_curve_types.h" -#include "DNA_object_types.h" - -#include "MEM_guardedalloc.h" +#include "DNA_curves_types.h" #include #include +#include -static bool set_knots(const pxr::VtDoubleArray &knots, float *&nu_knots) -{ - if (knots.empty()) { - return false; - } - - /* Skip first and last knots, as they are used for padding. */ - const size_t num_knots = knots.size(); - nu_knots = MEM_calloc_arrayN(num_knots, __func__); - - for (size_t i = 0; i < num_knots; i++) { - nu_knots[i] = float(knots[i]); - } - - return true; -} +#include "CLG_log.h" +static CLG_LogRef LOG = {"io.usd"}; namespace blender::io::usd { -void USDNurbsReader::create_object(Main *bmain) +/* Store incoming USD data privately and expose Blender-friendly Spans publicly. */ +struct USDCurveData { + private: + pxr::VtArray points_; + pxr::VtArray counts_; + pxr::VtArray orders_; + pxr::VtArray knots_; + pxr::VtArray weights_; + pxr::VtArray widths_; + pxr::VtArray velocities_; + + public: + Span points() const + { + return Span(points_.cdata(), points_.size()).cast(); + } + Span counts() const + { + return Span(counts_.cdata(), counts_.size()); + } + Span orders() const + { + return Span(orders_.cdata(), orders_.size()); + } + Span knots() const + { + return Span(knots_.cdata(), knots_.size()); + } + Span weights() const + { + return Span(weights_.cdata(), weights_.size()); + } + Span widths() const + { + return Span(widths_.cdata(), widths_.size()); + } + Span velocities() const + { + return Span(velocities_.cdata(), velocities_.size()).cast(); + } + + bool load(const pxr::UsdGeomNurbsCurves &curve_prim, const pxr::UsdTimeCode time) + { + curve_prim.GetCurveVertexCountsAttr().Get(&counts_, time); + curve_prim.GetOrderAttr().Get(&orders_, time); + + if (counts_.size() != orders_.size()) { + CLOG_WARN(&LOG, + "Curve vertex and order size mismatch for NURBS prim %s", + curve_prim.GetPrim().GetPrimPath().GetAsString().c_str()); + return false; + } + + if (std::any_of(counts_.cbegin(), counts_.cend(), [](int value) { return value < 0; }) || + std::any_of(orders_.cbegin(), orders_.cend(), [](int value) { return value < 0; })) + { + CLOG_WARN(&LOG, + "Invalid curve vertex count or order value detected for NURBS prim %s", + curve_prim.GetPrim().GetPrimPath().GetAsString().c_str()); + return false; + } + + curve_prim.GetPointsAttr().Get(&points_, time); + curve_prim.GetKnotsAttr().Get(&knots_, time); + curve_prim.GetWidthsAttr().Get(&widths_, time); + + curve_prim.GetPointWeightsAttr().Get(&weights_, time); + if (!weights_.empty() && points_.size() != weights_.size()) { + CLOG_WARN(&LOG, + "Invalid curve weights count for NURBS prim %s", + curve_prim.GetPrim().GetPrimPath().GetAsString().c_str()); + + /* Only clear, but continue to load other curve data. */ + weights_.clear(); + } + + curve_prim.GetVelocitiesAttr().Get(&velocities_, time); + if (!velocities_.empty() && points_.size() != velocities_.size()) { + CLOG_WARN(&LOG, + "Invalid curve velocity count for NURBS prim %s", + curve_prim.GetPrim().GetPrimPath().GetAsString().c_str()); + + /* Only clear, but continue to load other curve data. */ + velocities_.clear(); + } + + return true; + } +}; + +struct CurveData { + Array blender_offsets; + Array usd_offsets; + Array usd_knot_offsets; + Array is_cyclic; +}; + +static KnotsMode determine_knots_mode(const Span usd_knots, + const int order, + const bool is_cyclic) { - Curve *cu = BKE_curve_add(bmain, name_.c_str(), OB_CURVES_LEGACY); + /* TODO: We have to convert knot values to float for usage in Blender APIs. Look into making + * calculate_multiplicity_sequence a template. */ + Array blender_knots(usd_knots.size()); + for (const int knot_i : usd_knots.index_range()) { + blender_knots[knot_i] = float(usd_knots[knot_i]); + } - cu->flag |= CU_3D; - cu->actvert = CU_ACT_NONE; - cu->resolu = 2; + Vector multiplicity = bke::curves::nurbs::calculate_multiplicity_sequence(blender_knots); + const int head = multiplicity.first(); + const int tail = multiplicity.last(); + const Span inner = multiplicity.as_span().slice(1, multiplicity.size() - 2); - object_ = BKE_object_add_only_object(bmain, OB_CURVES_LEGACY, name_.c_str()); - object_->data = cu; + /* If the knot vector starts and ends with full multiplicity knots, then this is classified as + * Blender's endpoint mode. */ + const int degree = order - 1; + const bool is_endpoint = is_cyclic ? (tail >= degree) : (head == order && tail >= order); + + /* If all of the inner multiplicities are equal to the degree, then this is a Bezier curve. */ + if (degree > 1 && + std::all_of(inner.begin(), inner.end(), [degree](int value) { return value == degree; })) + { + return is_endpoint ? NURBS_KNOT_MODE_ENDPOINT_BEZIER : NURBS_KNOT_MODE_BEZIER; + } + + if (is_endpoint) { + return NURBS_KNOT_MODE_ENDPOINT; + } + + /* If all of the inner knot values are equally spaced, then this is a regular/uniform curve and + * we assume that our normal knot mode will match. Use custom knots otherwise. */ + const Span inner_values = blender_knots.as_span().drop_front(head).drop_back(tail); + if (inner_values.size() > 2) { + const float delta = inner_values[1] - inner_values[0]; + if (delta < 0) { + /* Invalid knot vector. Use normal mode. */ + return NURBS_KNOT_MODE_NORMAL; + } + for (int i = 2; i < inner.size(); i++) { + if (inner_values[i] - inner_values[i - 1] != delta) { + /* The knot values are not equally spaced. Use custom knots. */ + return NURBS_KNOT_MODE_CUSTOM; + } + } + } + + /* Nothing matches. Use normal mode. */ + return NURBS_KNOT_MODE_NORMAL; } -void USDNurbsReader::read_object_data(Main *bmain, const pxr::UsdTimeCode time) +static CurveData calc_curve_offsets(const Span usd_points, + const Span usd_counts, + const Span usd_orders, + const Span usd_knots) { - Curve *cu = (Curve *)object_->data; - read_curve_sample(cu, time); + CurveData data; + data.blender_offsets.reinitialize(usd_counts.size() + 1); + data.usd_offsets.reinitialize(usd_counts.size() + 1); + data.usd_knot_offsets.reinitialize(usd_counts.size() + 1); + data.is_cyclic.reinitialize(usd_counts.size()); - if (curve_prim_.GetPointsAttr().ValueMightBeTimeVarying()) { - add_cache_modifier(); - } + Span usd_remaining_points = usd_points; + Span usd_remaining_knots = usd_knots; - USDXformReader::read_object_data(bmain, time); -} - -void USDNurbsReader::read_curve_sample(Curve *cu, const pxr::UsdTimeCode time) -{ - pxr::UsdAttribute widthsAttr = curve_prim_.GetWidthsAttr(); - pxr::UsdAttribute vertexAttr = curve_prim_.GetCurveVertexCountsAttr(); - pxr::UsdAttribute pointsAttr = curve_prim_.GetPointsAttr(); - - pxr::VtIntArray usdCounts; - vertexAttr.Get(&usdCounts, time); - - pxr::VtVec3fArray usdPoints; - pointsAttr.Get(&usdPoints, time); - - pxr::VtFloatArray usdWidths; - widthsAttr.Get(&usdWidths, time); - - pxr::VtIntArray orders; - curve_prim_.GetOrderAttr().Get(&orders, time); - - pxr::VtDoubleArray knots; - curve_prim_.GetKnotsAttr().Get(&knots, time); - - pxr::VtVec3fArray usdNormals; - curve_prim_.GetNormalsAttr().Get(&usdNormals, time); - - /* If normals, extrude, else bevel. - * Perhaps to be replaced by Blender USD Schema. */ - if (!usdNormals.empty()) { - /* Set extrusion to 1. */ - cu->extrude = 1.0f; - } - else { - /* Set bevel depth to 1. */ - cu->bevel_radius = 1.0f; - } - - size_t idx = 0; - for (size_t i = 0; i < usdCounts.size(); i++) { - const int num_verts = usdCounts[i]; - - Nurb *nu = MEM_callocN(__func__); - nu->flag = CU_SMOOTH; - nu->type = CU_NURBS; - - nu->resolu = cu->resolu; - nu->resolv = cu->resolv; - - nu->pntsu = num_verts; - nu->pntsv = 1; - - if (i < orders.size()) { - nu->orderu = short(orders[i]); + for (const int curve_i : usd_counts.index_range()) { + const int points_num = usd_counts[curve_i]; + const int knots_num = points_num + usd_orders[curve_i]; + const int degree = usd_orders[curve_i] - 1; + const Span usd_current_knots = usd_remaining_knots.take_front(knots_num); + const Span usd_current_points = usd_remaining_points.take_front(points_num); + if (knots_num < 4 || knots_num != usd_current_knots.size()) { + data.is_cyclic[curve_i] = false; } else { - nu->orderu = 4; - nu->orderv = 4; + data.is_cyclic[curve_i] = usd_current_points.take_front(degree) == + usd_current_points.take_back(degree); } - /* TODO(makowalski): investigate setting Cyclic U and Endpoint U options. */ -#if 0 - if (knots.size() > 3) { - if ((knots[0] == knots[1]) && (knots[knots.size()] == knots[knots.size() - 1])) { - nu->flagu |= CU_NURB_ENDPOINT; - } - else { - nu->flagu |= CU_NURB_CYCLIC; - } - } -#endif + int blender_count = usd_counts[curve_i]; - float weight = 1.0f; - - nu->bp = MEM_calloc_arrayN(nu->pntsu, __func__); - BPoint *bp = nu->bp; - - for (int j = 0; j < nu->pntsu; j++, bp++, idx++) { - bp->vec[0] = usdPoints[idx][0]; - bp->vec[1] = usdPoints[idx][1]; - bp->vec[2] = usdPoints[idx][2]; - bp->vec[3] = weight; - bp->f1 = SELECT; - bp->weight = weight; - - float radius = 0.1f; - if (idx < usdWidths.size()) { - radius = usdWidths[idx] / 2.0f; - } - - bp->radius = radius; + /* Account for any repeated degree(order - 1) number of points from USD cyclic curves which + * Blender does not use internally. */ + if (data.is_cyclic[curve_i]) { + blender_count -= degree; } - if (!set_knots(knots, nu->knotsu)) { - BKE_nurb_knot_calc_u(nu); - } + data.blender_offsets[curve_i] = blender_count; + data.usd_offsets[curve_i] = points_num; + data.usd_knot_offsets[curve_i] = knots_num; - BLI_addtail(BKE_curve_nurbs_get(cu), nu); + /* Move to next sequence of values. */ + usd_remaining_points = usd_remaining_points.drop_front(points_num); + usd_remaining_knots = usd_remaining_knots.drop_front(knots_num); } + + offset_indices::accumulate_counts_to_offsets(data.blender_offsets); + offset_indices::accumulate_counts_to_offsets(data.usd_offsets); + offset_indices::accumulate_counts_to_offsets(data.usd_knot_offsets); + return data; } -void USDNurbsReader::read_geometry(bke::GeometrySet &geometry_set, - const USDMeshReadParams params, - const char **r_err_str) +/** Returns true if the number of curves or the number of curve points in each curve differ. */ +static bool curves_topology_changed(const bke::CurvesGeometry &curves, const Span usd_offsets) { - BLI_assert(geometry_set.has_mesh()); - Mesh *new_mesh = read_mesh(nullptr, params, r_err_str); - geometry_set.replace_mesh(new_mesh); + if (curves.offsets() != usd_offsets) { + return true; + } + + return false; } -Mesh *USDNurbsReader::read_mesh(Mesh * /*existing_mesh*/, - const USDMeshReadParams params, - const char ** /*r_err_str*/) +static IndexRange get_usd_points_range_de_dup(IndexRange blender_points_range, + IndexRange usd_points_range) { - pxr::UsdGeomCurves curve_prim(prim_); + /* Take from the front of USD's range to exclude any duplicates at the end. */ + return usd_points_range.take_front(blender_points_range.size()); +}; - pxr::UsdAttribute widthsAttr = curve_prim.GetWidthsAttr(); - pxr::UsdAttribute vertexAttr = curve_prim.GetCurveVertexCountsAttr(); - pxr::UsdAttribute pointsAttr = curve_prim.GetPointsAttr(); +bool USDNurbsReader::is_animated() const +{ + if (curve_prim_.GetPointsAttr().ValueMightBeTimeVarying() || + curve_prim_.GetWidthsAttr().ValueMightBeTimeVarying() || + curve_prim_.GetPointWeightsAttr().ValueMightBeTimeVarying()) + { + return true; + } - pxr::VtIntArray usdCounts; + pxr::UsdGeomPrimvarsAPI pv_api(curve_prim_); + for (const pxr::UsdGeomPrimvar &pv : pv_api.GetPrimvarsWithValues()) { + if (pv.ValueMightBeTimeVarying()) { + return true; + } + } - vertexAttr.Get(&usdCounts, params.motion_sample_time); - int num_subcurves = usdCounts.size(); + return false; +} - pxr::VtVec3fArray usdPoints; - pointsAttr.Get(&usdPoints, params.motion_sample_time); +void USDNurbsReader::read_curve_sample(Curves *curves_id, const pxr::UsdTimeCode time) +{ + USDCurveData usd_data; + if (!usd_data.load(curve_prim_, time)) { + return; + } - int vertex_idx = 0; - int curve_idx; - Curve *curve = static_cast(object_->data); + const Span usd_points = usd_data.points(); + const Span usd_counts = usd_data.counts(); + const Span usd_orders = usd_data.orders(); + const Span usd_knots = usd_data.knots(); + const Span usd_weights = usd_data.weights(); + const Span usd_velocities = usd_data.velocities(); - const int curve_count = BLI_listbase_count(&curve->nurb); - bool same_topology = curve_count == num_subcurves; + /* Calculate and set the Curves topology. */ + CurveData data = calc_curve_offsets(usd_points, usd_counts, usd_orders, usd_knots); - if (same_topology) { - Nurb *nurbs = static_cast(curve->nurb.first); - for (curve_idx = 0; nurbs; nurbs = nurbs->next, curve_idx++) { - const int num_in_usd = usdCounts[curve_idx]; - const int num_in_blender = nurbs->pntsu; + bke::CurvesGeometry &curves = curves_id->geometry.wrap(); + if (curves_topology_changed(curves, data.blender_offsets)) { + curves.resize(data.blender_offsets.last(), usd_counts.size()); + curves.offsets_for_write().copy_from(data.blender_offsets); + curves.fill_curve_types(CurveType::CURVE_TYPE_NURBS); + } - if (num_in_usd != num_in_blender) { - same_topology = false; - break; + /* NOTE: USD contains duplicated points for periodic(cyclic) curves. The indices into each curve + * will differ from what Blender expects so we need to maintain and use separate offsets for + * each. A side effect of this dissonance is that all primvar/attribute loading needs to be + * handled in a special manner vs. what might be seen in our other USD readers. */ + const OffsetIndices blender_points_by_curve = curves.points_by_curve(); + const OffsetIndices usd_points_by_curve = OffsetIndices(data.usd_offsets, + offset_indices::NoSortCheck{}); + const OffsetIndices usd_knots_by_curve = OffsetIndices(data.usd_knot_offsets, + offset_indices::NoSortCheck{}); + + /* TODO: We cannot read custom primvars for cyclic curves at the moment. */ + const bool can_read_primvars = std::all_of( + data.is_cyclic.begin(), data.is_cyclic.end(), [](bool item) { return item == false; }); + + /* Set all curve data. */ + MutableSpan curves_positions = curves.positions_for_write(); + for (const int curve_i : blender_points_by_curve.index_range()) { + const IndexRange blender_points_range = blender_points_by_curve[curve_i]; + const IndexRange usd_points_range_de_dup = get_usd_points_range_de_dup( + blender_points_range, usd_points_by_curve[curve_i]); + + curves_positions.slice(blender_points_range) + .copy_from(usd_points.slice(usd_points_range_de_dup)); + } + + MutableSpan curves_cyclic = curves.cyclic_for_write(); + curves_cyclic.copy_from(data.is_cyclic); + + MutableSpan curves_nurbs_orders = curves.nurbs_orders_for_write(); + for (const int curve_i : blender_points_by_curve.index_range()) { + curves_nurbs_orders[curve_i] = int8_t(usd_orders[curve_i]); + } + + MutableSpan curves_knots_mode = curves.nurbs_knots_modes_for_write(); + for (const int curve_i : blender_points_by_curve.index_range()) { + const IndexRange usd_knots_range = usd_knots_by_curve[curve_i]; + curves_knots_mode[curve_i] = determine_knots_mode( + usd_knots.slice(usd_knots_range), usd_orders[curve_i], data.is_cyclic[curve_i]); + } + + /* Load in the optional weights. */ + if (!usd_weights.is_empty()) { + MutableSpan curves_weights = curves.nurbs_weights_for_write(); + for (const int curve_i : blender_points_by_curve.index_range()) { + const IndexRange blender_points_range = blender_points_by_curve[curve_i]; + const IndexRange usd_points_range_de_dup = get_usd_points_range_de_dup( + blender_points_range, usd_points_by_curve[curve_i]); + + const Span usd_weights_de_dup = usd_weights.slice(usd_points_range_de_dup); + int64_t usd_point_i = 0; + for (const int point_i : blender_points_range) { + curves_weights[point_i] = float(usd_weights_de_dup[usd_point_i]); + usd_point_i++; } } } - if (!same_topology) { - BKE_nurbList_free(&curve->nurb); - read_curve_sample(curve, params.motion_sample_time); + /* Load in the optional velocities. */ + if (!usd_velocities.is_empty()) { + bke::MutableAttributeAccessor attributes = curves.attributes_for_write(); + bke::SpanAttributeWriter curves_velocity = + attributes.lookup_or_add_for_write_only_span("velocity", bke::AttrDomain::Point); + + for (const int curve_i : blender_points_by_curve.index_range()) { + const IndexRange blender_points_range = blender_points_by_curve[curve_i]; + const IndexRange usd_points_range_de_dup = get_usd_points_range_de_dup( + blender_points_range, usd_points_by_curve[curve_i]); + + curves_velocity.span.slice(blender_points_range) + .copy_from(usd_velocities.slice(usd_points_range_de_dup)); + } + + curves_velocity.finish(); } - else { - Nurb *nurbs = static_cast(curve->nurb.first); - for (curve_idx = 0; nurbs; nurbs = nurbs->next, curve_idx++) { - const int totpoint = usdCounts[curve_idx]; - if (nurbs->bp) { - BPoint *point = nurbs->bp; + /* Once all of the curves metadata (orders, cyclic, knots_mode) has been set, we can prepare + * Blender for any custom knots that need to be loaded. */ + MutableSpan blender_custom_knots; + OffsetIndices blender_knots_by_curve; + for (const int curve_i : curves.curves_range()) { + if (curves_knots_mode[curve_i] != NURBS_KNOT_MODE_CUSTOM) { + continue; + } - for (int i = 0; i < totpoint; i++, point++, vertex_idx++) { - point->vec[0] = usdPoints[vertex_idx][0]; - point->vec[1] = usdPoints[vertex_idx][1]; - point->vec[2] = usdPoints[vertex_idx][2]; + /* If this is our first time through, we need to update Blender's topology data to prepare for + * the incoming custom knots. */ + if (blender_custom_knots.is_empty()) { + curves.nurbs_custom_knots_update_size(); + blender_knots_by_curve = curves.nurbs_custom_knots_by_curve(); + blender_custom_knots = curves.nurbs_custom_knots_for_write(); + } + + const IndexRange blender_knots_range = blender_knots_by_curve[curve_i]; + const IndexRange usd_knots_range = usd_knots_by_curve[curve_i]; + const Span usd_knots_values = usd_knots.slice(usd_knots_range); + MutableSpan blender_knots = blender_custom_knots.slice(blender_knots_range); + int usd_knot_i = 0; + for (float &blender_knot : blender_knots) { + blender_knot = usd_knots_values[usd_knot_i] > 0.0 ? float(usd_knots_values[usd_knot_i]) : 0; + usd_knot_i++; + } + } + + /* Curve widths. */ + const Span usd_widths = usd_data.widths(); + if (!usd_widths.is_empty()) { + MutableSpan radii = curves.radius_for_write(); + + const pxr::TfToken widths_interp = curve_prim_.GetWidthsInterpolation(); + if (widths_interp == pxr::UsdGeomTokens->constant || usd_widths.size() == 1) { + radii.fill(usd_widths[0] / 2.0f); + } + else if (widths_interp == pxr::UsdGeomTokens->varying) { + int point_offset = 0; + for (const int curve_i : curves.curves_range()) { + const float usd_curve_radius = usd_widths[curve_i] / 2.0f; + int point_count = usd_counts[curve_i]; + if (curves_cyclic[curve_i]) { + point_count -= usd_orders[curve_i] - 1; + } + for (const int point : IndexRange(point_count)) { + radii[point_offset + point] = usd_curve_radius; } - } - else if (nurbs->bezt) { - BezTriple *bezier = nurbs->bezt; - for (int i = 0; i < totpoint; i++, bezier++, vertex_idx++) { - bezier->vec[1][0] = usdPoints[vertex_idx][0]; - bezier->vec[1][1] = usdPoints[vertex_idx][1]; - bezier->vec[1][2] = usdPoints[vertex_idx][2]; + point_offset += point_count; + } + } + else if (widths_interp == pxr::UsdGeomTokens->vertex) { + for (const int curve_i : curves.curves_range()) { + const IndexRange blender_points_range = blender_points_by_curve[curve_i]; + const IndexRange usd_points_range = usd_points_by_curve[curve_i]; + + /* Take from the front of USD's range to exclude any duplicates at the end. */ + const IndexRange usd_points_range_de_dup = usd_points_range.take_front( + blender_points_range.size()); + + const Span usd_widths_de_dup = usd_widths.slice(usd_points_range_de_dup); + int64_t usd_point_i = 0; + for (const int point_i : blender_points_range) { + radii[point_i] = usd_widths_de_dup[usd_point_i] / 2.0f; + usd_point_i++; } } } } - return BKE_mesh_new_nomain_from_curve(object_); + if (can_read_primvars) { + this->read_custom_data(curves, time); + } } } // namespace blender::io::usd diff --git a/source/blender/io/usd/intern/usd_reader_nurbs.hh b/source/blender/io/usd/intern/usd_reader_nurbs.hh index 0d67c158cdb..6f533a8bfce 100644 --- a/source/blender/io/usd/intern/usd_reader_nurbs.hh +++ b/source/blender/io/usd/intern/usd_reader_nurbs.hh @@ -8,23 +8,29 @@ #pragma once #include "usd.hh" +#include "usd_reader_curve.hh" #include "usd_reader_geom.hh" +#include #include -struct Curve; +struct Curves; + +namespace blender::bke { +class CurvesGeometry; +} // namespace blender::bke namespace blender::io::usd { -class USDNurbsReader : public USDGeomReader { - protected: +class USDNurbsReader : public USDCurvesReader { + private: pxr::UsdGeomNurbsCurves curve_prim_; public: USDNurbsReader(const pxr::UsdPrim &prim, const USDImportParams &import_params, const ImportSettings &settings) - : USDGeomReader(prim, import_params, settings), curve_prim_(prim) + : USDCurvesReader(prim, import_params, settings), curve_prim_(prim) { } @@ -33,17 +39,8 @@ class USDNurbsReader : public USDGeomReader { return bool(curve_prim_); } - void create_object(Main *bmain) override; - void read_object_data(Main *bmain, pxr::UsdTimeCode time) override; - - void read_curve_sample(Curve *cu, pxr::UsdTimeCode time); - - void read_geometry(bke::GeometrySet &geometry_set, - USDMeshReadParams params, - const char **r_err_str) override; - - private: - Mesh *read_mesh(struct Mesh *existing_mesh, USDMeshReadParams params, const char **r_err_str); + void read_curve_sample(Curves *curves_id, pxr::UsdTimeCode time) override; + bool is_animated() const override; }; } // namespace blender::io::usd diff --git a/source/blender/io/usd/intern/usd_writer_curves.cc b/source/blender/io/usd/intern/usd_writer_curves.cc index 72afc1b5683..5afed292026 100644 --- a/source/blender/io/usd/intern/usd_writer_curves.cc +++ b/source/blender/io/usd/intern/usd_writer_curves.cc @@ -270,6 +270,7 @@ static void populate_curve_props_for_nurbs(const bke::CurvesGeometry &curves, pxr::VtIntArray &control_point_counts, pxr::VtArray &widths, pxr::VtArray &knots, + pxr::VtArray &weights, pxr::VtArray &orders, pxr::TfToken &interpolation, const bool is_cyclic) @@ -281,31 +282,54 @@ static void populate_curve_props_for_nurbs(const bke::CurvesGeometry &curves, const Span positions = curves.positions(); const Span custom_knots = curves.nurbs_custom_knots(); + const std::optional> nurbs_weights = curves.nurbs_weights(); VArray geom_orders = curves.nurbs_orders(); VArray knots_modes = curves.nurbs_knots_modes(); + const VArray radii = curves.radius(); const OffsetIndices points_by_curve = curves.points_by_curve(); const OffsetIndices custom_knots_by_curve = curves.nurbs_custom_knots_by_curve(); for (const int i_curve : curves.curves_range()) { const IndexRange points = points_by_curve[i_curve]; + const size_t curr_vert_num = verts.size(); for (const int i_point : points) { verts.push_back( pxr::GfVec3f(positions[i_point][0], positions[i_point][1], positions[i_point][2])); + widths.push_back(radii[i_point] * 2.0f); } - const int tot_points = points.size(); - control_point_counts[i_curve] = tot_points; + if (nurbs_weights) { + for (const int i_point : points) { + weights.push_back((*nurbs_weights)[i_point]); + } + } + + /* Repeat the first degree(order - 1) number of points and weights if curve is cyclic. */ + if (is_cyclic) { + for (const int i_point : points.take_front(geom_orders[i_curve] - 1)) { + verts.push_back( + pxr::GfVec3f(positions[i_point][0], positions[i_point][1], positions[i_point][2])); + widths.push_back(radii[i_point] * 2.0f); + if (nurbs_weights) { + weights.push_back((*nurbs_weights)[i_point]); + } + } + } + + const int tot_blender_points = int(points.size()); + const int tot_usd_points = int(verts.size() - curr_vert_num); + control_point_counts[i_curve] = tot_usd_points; const int8_t order = geom_orders[i_curve]; orders[i_curve] = int(geom_orders[i_curve]); const KnotsMode mode = KnotsMode(knots_modes[i_curve]); - const int knots_num = bke::curves::nurbs::knots_num(tot_points, order, is_cyclic); + const int knots_num = bke::curves::nurbs::knots_num(tot_blender_points, order, is_cyclic); Array temp_knots(knots_num); bke::curves::nurbs::load_curve_knots(mode, - tot_points, + tot_blender_points, order, is_cyclic, custom_knots_by_curve[i_curve], @@ -333,20 +357,22 @@ static void populate_curve_props_for_nurbs(const bke::CurvesGeometry &curves, } } - populate_curve_widths(curves, widths); interpolation = pxr::UsdGeomTokens->vertex; } void USDCurvesWriter::set_writer_attributes_for_nurbs( const pxr::UsdGeomNurbsCurves &usd_nurbs_curves, - const pxr::VtArray &knots, - const pxr::VtArray &orders, + pxr::VtArray &knots, + pxr::VtArray &weights, + pxr::VtArray &orders, const pxr::UsdTimeCode time) { pxr::UsdAttribute attr_knots = usd_nurbs_curves.CreateKnotsAttr(pxr::VtValue(), true); - usd_value_writer_.SetAttribute(attr_knots, pxr::VtValue(knots), time); + set_attribute(attr_knots, knots, time, usd_value_writer_); + pxr::UsdAttribute attr_weights = usd_nurbs_curves.CreatePointWeightsAttr(pxr::VtValue(), true); + set_attribute(attr_weights, weights, time, usd_value_writer_); pxr::UsdAttribute attr_order = usd_nurbs_curves.CreateOrderAttr(pxr::VtValue(), true); - usd_value_writer_.SetAttribute(attr_order, pxr::VtValue(orders), time); + set_attribute(attr_order, orders, time, usd_value_writer_); } void USDCurvesWriter::set_writer_attributes(pxr::UsdGeomCurves &usd_curves, @@ -618,17 +644,24 @@ void USDCurvesWriter::do_write(HierarchyContext &context) break; case CURVE_TYPE_NURBS: { pxr::VtArray knots; + pxr::VtArray weights; pxr::VtArray orders; - orders.resize(curves.curves_num()); usd_nurbs_curves = pxr::UsdGeomNurbsCurves::Define(usd_export_context_.stage, usd_export_context_.usd_path); usd_curves = &usd_nurbs_curves; - populate_curve_props_for_nurbs( - curves, verts, control_point_counts, widths, knots, orders, interpolation, is_cyclic); + populate_curve_props_for_nurbs(curves, + verts, + control_point_counts, + widths, + knots, + weights, + orders, + interpolation, + is_cyclic); - set_writer_attributes_for_nurbs(usd_nurbs_curves, knots, orders, time); + set_writer_attributes_for_nurbs(usd_nurbs_curves, knots, weights, orders, time); break; } @@ -641,8 +674,11 @@ void USDCurvesWriter::do_write(HierarchyContext &context) this->assign_materials(context, *usd_curves); - this->write_velocities(curves, *usd_curves); - this->write_custom_data(curves, *usd_curves); + /* TODO: We cannot write custom privars for cyclic NURBS curves at the moment. */ + if (!is_cyclic || (is_cyclic && curve_type != CURVE_TYPE_NURBS)) { + this->write_velocities(curves, *usd_curves); + this->write_custom_data(curves, *usd_curves); + } auto prim = usd_curves->GetPrim(); write_id_properties(prim, curves_id->id, time); diff --git a/source/blender/io/usd/intern/usd_writer_curves.hh b/source/blender/io/usd/intern/usd_writer_curves.hh index de46632a609..86f8d6348e4 100644 --- a/source/blender/io/usd/intern/usd_writer_curves.hh +++ b/source/blender/io/usd/intern/usd_writer_curves.hh @@ -40,8 +40,9 @@ class USDCurvesWriter final : public USDAbstractWriter { const pxr::TfToken interpolation); void set_writer_attributes_for_nurbs(const pxr::UsdGeomNurbsCurves &usd_nurbs_curves, - const pxr::VtArray &knots, - const pxr::VtArray &orders, + pxr::VtArray &knots, + pxr::VtArray &weights, + pxr::VtArray &orders, const pxr::UsdTimeCode time); void write_generic_data(const bke::CurvesGeometry &curves, diff --git a/tests/files/usd/compare/nurbs-custom.usda b/tests/files/usd/compare/nurbs-custom.usda new file mode 100644 index 00000000000..2ac7ea973ae --- /dev/null +++ b/tests/files/usd/compare/nurbs-custom.usda @@ -0,0 +1,143 @@ +#usda 1.0 +( + defaultPrim = "root" + doc = "HAND CRAFTED!" + metersPerUnit = 1 + upAxis = "Z" +) + +def Xform "root"( + customData = { + dictionary Blender = { + bool generated = 1 + } + } +) +{ + def Xform "NC62Custom" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (0, 0, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [6] + float3[] extent = [(-1.005, 0.45090014, -0.024999999), (0.62499994, 0.915, 0.024999999)] + double[] knots = [0, 1, 2.1, 4.3, 8.7, 17.5, 35.1, 40] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.05, 0.06] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC63Custom" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (0, 1, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [6] + float3[] extent = [(-1.005, 0.45090014, -0.024999999), (0.62499994, 0.915, 0.024999999)] + double[] knots = [0, 1, 3, 9, 27, 28, 30, 31, 32] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.05, 0.06] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC64Custom" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (0, 2, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [6] + float3[] extent = [(-1.005, 0.45090014, -0.024999999), (0.62499994, 0.915, 0.024999999)] + double[] knots = [0, 0, 0, 1, 2, 6, 8, 10, 10, 10] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.05, 0.06] ( + interpolation = "vertex" + ) + } + } + + def Xform "C52Custom" + { + token visibility = "invisible" + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (4, 0, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [6] + float3[] extent = [(-1.005, -0.01, -0.024999999), (1.025, 0.915, 0.024999999)] + double[] knots = [0, 1, 2, 8, 12, 13, 14, 15] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0), (-1, 0.7, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01] ( + interpolation = "vertex" + ) + } + } + + def Xform "C53Custom" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (4, 1, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [7] + float3[] extent = [(-1.005, -0.01, -0.024999999), (1.025, 0.915, 0.024999999)] + double[] knots = [0, 0, 1, 1, 2, 8, 8, 9, 9, 10] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0), (-1, 0.7, 0), (-0.5, 0, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02] ( + interpolation = "vertex" + ) + } + } + + def Xform "C54Custom" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (4, 2, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [8] + float3[] extent = [(-0.7463334, 0.31734136, -0.022387203), (0.76110774, 0.852151, 0.022387203)] + double[] knots = [0, 1, 2, 3, 8, 9, 14, 15, 18, 19, 20, 21] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0), (-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.03] ( + interpolation = "vertex" + ) + } + } +} \ No newline at end of file diff --git a/tests/files/usd/compare/nurbs-gen-multiple.blend b/tests/files/usd/compare/nurbs-gen-multiple.blend new file mode 100644 index 00000000000..f1b8de7c351 --- /dev/null +++ b/tests/files/usd/compare/nurbs-gen-multiple.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bde67970bbae99670b5d7666e544d5237df63a47de67121d8ffc541fee338d74 +size 106217 diff --git a/tests/files/usd/compare/nurbs-gen-multiple.usda b/tests/files/usd/compare/nurbs-gen-multiple.usda new file mode 100644 index 00000000000..7da2b040ef0 --- /dev/null +++ b/tests/files/usd/compare/nurbs-gen-multiple.usda @@ -0,0 +1,59 @@ +#usda 1.0 +( + defaultPrim = "root" + doc = "" + metersPerUnit = 1 + upAxis = "Z" +) + +def Xform "root" ( + customData = { + dictionary Blender = { + bool generated = 1 + } + } +) +{ + def Xform "CAll" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (4, -5, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "CAll" + { + int[] curveVertexCounts = [3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9] + float3[] extent = [(-1.005, -0.01, -0.029999997), (13.029999, 13.915, 0.029999997)] + double[] knots = [0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 1, 2, 3, 3, 4, 4, 0, 0, 1, 1, 1, 2, 2, 3, 0, 1, 1, 2, 3, 3, 4, 4, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 1, 2, 3, 4, 4, 5, 5, 0, 0, 1, 1, 2, 2, 3, 3, 4, 0, 1, 1, 2, 2, 3, 3, 4, 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 1, 1, 1, 2, 3, 3, 3, 4, 5, 5, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 0, 1, 1, 1, 2, 3, 3, 3, 4, 5, 5, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 1, 2, 3, 4, 5, 5, 6, 6, 0, 0, 1, 1, 2, 2, 2, 3, 3, 4, 0, 1, 1, 2, 2, 3, 4, 4, 5, 5, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 1, 1, 2, 3, 4, 4, 4, 5, 6, 6, -1, 0, 1, 1, 1, 2, 2, 3, 3, 3, 4, 5, 1, 1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 1, 1, 2, 3, 4, 5, 6, 6, 7, 7, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 1, 1, 1, 2, 3, 4, 5, 5, 5, 6, 7, 7, -1, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 5, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4] + int[] order = [2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4] + point3f[] points = [(-1, 0.7, 0), (1, 0, 0), (-1, 0.7, 0), (-1, 1.7, 0), (1, 1, 0), (-1, 1.7, 0), (-1, 2.7, 0), (1, 2, 0), (-1, 2.7, 0), (-1, 3.7, 0), (1, 3, 0), (-1, 3.7, 0), (2, 0.7, 0), (3, 0, 0), (4, 0.90000004, 0), (2, 0.7, 0), (2, 1.7, 0), (3, 1, 0), (4, 1.9000001, 0), (2, 1.7, 0), (2, 2.7, 0), (3, 2, 0), (4, 2.9, 0), (2, 2.7, 0), (2, 3.7, 0), (3, 3, 0), (4, 3.9, 0), (2, 3.7, 0), (2, 5.7, 0), (3, 5, 0), (4, 5.9, 0), (2, 5.7, 0), (3, 5, 0), (2, 6.7, 0), (3, 6, 0), (4, 6.9, 0), (2, 6.7, 0), (3, 6, 0), (2, 7.7, 0), (3, 7, 0), (4, 7.9, 0), (2, 7.7, 0), (3, 7, 0), (2, 8.7, 0), (3, 8, 0), (4, 8.9, 0), (2, 8.7, 0), (3, 8, 0), (5, 0.7, 0), (5.6666, 0, 0), (6.3333, 0.90000004, 0), (7, 0.8, 0), (5, 0.7, 0), (5, 1.7, 0), (5.6666, 1, 0), (6.3333, 1.9000001, 0), (7, 1.8, 0), (5, 1.7, 0), (5, 2.7, 0), (5.6666, 2, 0), (6.3333, 2.9, 0), (7, 2.8, 0), (5, 2.7, 0), (5, 3.7, 0), (5.6666, 3, 0), (6.3333, 3.9, 0), (7, 3.8, 0), (5, 3.7, 0), (5, 5.7, 0), (5.6666, 5, 0), (6.3333, 5.9, 0), (7, 5.8, 0), (5, 5.7, 0), (5.6666, 5, 0), (5, 6.7, 0), (5.6666, 6, 0), (6.3333, 6.9, 0), (7, 6.8, 0), (5, 6.7, 0), (5.6666, 6, 0), (5, 7.7, 0), (5.6666, 7, 0), (6.3333, 7.9, 0), (7, 7.8, 0), (5, 7.7, 0), (5.6666, 7, 0), (5, 8.7, 0), (5.6666, 8, 0), (6.3333, 8.9, 0), (7, 8.8, 0), (5, 8.7, 0), (5.6666, 8, 0), (5, 10.7, 0), (5.6666, 10, 0), (6.3333, 10.9, 0), (7, 10.8, 0), (5, 10.7, 0), (5.6666, 10, 0), (6.3333, 10.9, 0), (5, 11.7, 0), (5.6666, 11, 0), (6.3333, 11.9, 0), (7, 11.8, 0), (5, 11.7, 0), (5.6666, 11, 0), (6.3333, 11.9, 0), (5, 12.7, 0), (5.6666, 12, 0), (6.3333, 12.9, 0), (7, 12.8, 0), (5, 12.7, 0), (5.6666, 12, 0), (6.3333, 12.9, 0), (5, 13.7, 0), (5.6666, 13, 0), (6.3333, 13.9, 0), (7, 13.8, 0), (5, 13.7, 0), (5.6666, 13, 0), (6.3333, 13.9, 0), (8, 0.7, 0), (8.5, 0, 0), (9, 0.90000004, 0), (9.5, 0.8, 0), (10, 0.5, 0), (8, 0.7, 0), (8, 1.7, 0), (8.5, 1, 0), (9, 1.9000001, 0), (9.5, 1.8, 0), (10, 1.5, 0), (8, 1.7, 0), (8, 2.7, 0), (8.5, 2, 0), (9, 2.9, 0), (9.5, 2.8, 0), (10, 2.5, 0), (8, 2.7, 0), (8, 3.7, 0), (8.5, 3, 0), (9, 3.9, 0), (9.5, 3.8, 0), (10, 3.5, 0), (8, 3.7, 0), (8, 5.7, 0), (8.5, 5, 0), (9, 5.9, 0), (9.5, 5.8, 0), (10, 5.5, 0), (8, 5.7, 0), (8.5, 5, 0), (8, 6.7, 0), (8.5, 6, 0), (9, 6.9, 0), (9.5, 6.8, 0), (10, 6.5, 0), (8, 6.7, 0), (8.5, 6, 0), (8, 7.7, 0), (8.5, 7, 0), (9, 7.9, 0), (9.5, 7.8, 0), (10, 7.5, 0), (8, 7.7, 0), (8.5, 7, 0), (8, 8.7, 0), (8.5, 8, 0), (9, 8.9, 0), (9.5, 8.8, 0), (10, 8.5, 0), (8, 8.7, 0), (8.5, 8, 0), (8, 10.7, 0), (8.5, 10, 0), (9, 10.9, 0), (9.5, 10.8, 0), (10, 10.5, 0), (8, 10.7, 0), (8.5, 10, 0), (9, 10.9, 0), (8, 11.7, 0), (8.5, 11, 0), (9, 11.9, 0), (9.5, 11.8, 0), (10, 11.5, 0), (8, 11.7, 0), (8.5, 11, 0), (9, 11.9, 0), (8, 12.7, 0), (8.5, 12, 0), (9, 12.9, 0), (9.5, 12.8, 0), (10, 12.5, 0), (8, 12.7, 0), (8.5, 12, 0), (9, 12.9, 0), (8, 13.7, 0), (8.5, 13, 0), (9, 13.9, 0), (9.5, 13.8, 0), (10, 13.5, 0), (8, 13.7, 0), (8.5, 13, 0), (9, 13.9, 0), (11, 0.7, 0), (11.3999, 0, 0), (11.8, 0.90000004, 0), (12.2, 0.8, 0), (12.6, 0.5, 0), (13, 0.1, 0), (11, 0.7, 0), (11, 1.7, 0), (11.3999, 1, 0), (11.8, 1.9000001, 0), (12.2, 1.8, 0), (12.6, 1.5, 0), (13, 1.1, 0), (11, 1.7, 0), (11, 2.7, 0), (11.3999, 2, 0), (11.8, 2.9, 0), (12.2, 2.8, 0), (12.6, 2.5, 0), (13, 2.1, 0), (11, 2.7, 0), (11, 3.7, 0), (11.3999, 3, 0), (11.8, 3.9, 0), (12.2, 3.8, 0), (12.6, 3.5, 0), (13, 3.1, 0), (11, 3.7, 0), (11, 5.7, 0), (11.3999, 5, 0), (11.8, 5.9, 0), (12.2, 5.8, 0), (12.6, 5.5, 0), (13, 5.1, 0), (11, 5.7, 0), (11.3999, 5, 0), (11, 6.7, 0), (11.3999, 6, 0), (11.8, 6.9, 0), (12.2, 6.8, 0), (12.6, 6.5, 0), (13, 6.1, 0), (11, 6.7, 0), (11.3999, 6, 0), (11, 7.7, 0), (11.3999, 7, 0), (11.8, 7.9, 0), (12.2, 7.8, 0), (12.6, 7.5, 0), (13, 7.1, 0), (11, 7.7, 0), (11.3999, 7, 0), (11, 8.7, 0), (11.3999, 8, 0), (11.8, 8.9, 0), (12.2, 8.8, 0), (12.6, 8.5, 0), (13, 8.1, 0), (11, 8.7, 0), (11.3999, 8, 0), (11, 10.7, 0), (11.3999, 10, 0), (11.8, 10.9, 0), (12.2, 10.8, 0), (12.6, 10.5, 0), (13, 10.1, 0), (11, 10.7, 0), (11.3999, 10, 0), (11.8, 10.9, 0), (11, 11.7, 0), (11.3999, 11, 0), (11.8, 11.9, 0), (12.2, 11.8, 0), (12.6, 11.5, 0), (13, 11.1, 0), (11, 11.7, 0), (11.3999, 11, 0), (11.8, 11.9, 0), (11, 12.7, 0), (11.3999, 12, 0), (11.8, 12.9, 0), (12.2, 12.8, 0), (12.6, 12.5, 0), (13, 12.1, 0), (11, 12.7, 0), (11.3999, 12, 0), (11.8, 12.9, 0), (11, 13.7, 0), (11.3999, 13, 0), (11.8, 13.9, 0), (12.2, 13.8, 0), (12.6, 13.5, 0), (13, 13.1, 0), (11, 13.7, 0), (11.3999, 13, 0), (11.8, 13.9, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 1, 1, 0.7071067690849304, 1, 1, 1, 0.7071067690849304, 1, 1, 1, 0.7071067690849304, 1, 1, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.01, 0.01, 0.02, 0.01, 0.01, 0.02, 0.01, 0.01, 0.02, 0.01, 0.01, 0.02, 0.03, 0.01, 0.01, 0.02, 0.03, 0.01, 0.01, 0.02, 0.03, 0.01, 0.01, 0.02, 0.03, 0.01, 0.01, 0.02, 0.03, 0.01, 0.02, 0.01, 0.02, 0.03, 0.01, 0.02, 0.01, 0.02, 0.03, 0.01, 0.02, 0.01, 0.02, 0.03, 0.01, 0.02, 0.01, 0.02, 0.03, 0.04, 0.01, 0.01, 0.02, 0.03, 0.04, 0.01, 0.01, 0.02, 0.03, 0.04, 0.01, 0.01, 0.02, 0.03, 0.04, 0.01, 0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.03, 0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.03, 0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.03, 0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.03, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.03, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.03, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.03, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.03, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02, 0.03, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02, 0.03, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02, 0.03, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02, 0.03] ( + interpolation = "vertex" + ) + } + } + + def Xform "NCAll" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-12, -5, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "NCAll" + { + int[] curveVertexCounts = [2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6] + float3[] extent = [(-1.005, -0.01, -0.029999997), (13.029999, 13.831643, 0.029999997)] + double[] knots = [1, 1, 2, 2, 0, 0, 1, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 1, 2, 3, 3, 0, 0, 1, 2, 2, 1, 1, 2, 3, 3, 0, 0, 1, 2, 2, 1, 1, 2, 3, 4, 4, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 1, 1, 2, 3, 4, 4, 0, 0, 1, 2, 3, 3, 1, 1, 2, 3, 4, 4, 0, 0, 1, 2, 3, 3, 1, 1, 2, 3, 4, 5, 5, 0, 0, 0, 1, 2, 2, 2, 0, 0, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 6, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 5, 0, 0, 1, 2, 3, 4, 4, 1, 1, 2, 3, 4, 5, 5, 0, 0, 1, 2, 3, 4, 4, 1, 1, 2, 3, 4, 5, 6, 6, 0, 0, 0, 1, 2, 3, 3, 3, 0, 0, 1, 1, 2, 2, 3, 3, 0, 0, 0, 1, 1, 2, 2, 2, 1, 1, 2, 3, 4, 5, 6, 7, 7, 0, 0, 0, 0, 1, 2, 2, 2, 2, 0, 0, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 6, 0, 0, 1, 2, 3, 4, 5, 5, 1, 1, 2, 3, 4, 5, 6, 6, 0, 0, 1, 2, 3, 4, 5, 5, 1, 1, 2, 3, 4, 5, 6, 7, 7, 0, 0, 0, 1, 2, 3, 4, 4, 4, 0, 0, 1, 1, 2, 2, 3, 3, 3, 0, 0, 0, 1, 1, 2, 2, 2, 2, 1, 1, 2, 3, 4, 5, 6, 7, 8, 8, 0, 0, 0, 0, 1, 2, 3, 3, 3, 3, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1] + int[] order = [2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4] + point3f[] points = [(-1, 0.7, 0), (1, 0, 0), (-1, 1.7, 0), (1, 1, 0), (-1, 2.7, 0), (1, 2, 0), (-1, 3.7, 0), (1, 3, 0), (2, 0.7, 0), (3, 0, 0), (4, 0.90000004, 0), (2, 1.7, 0), (3, 1, 0), (4, 1.9000001, 0), (2, 2.7, 0), (3, 2, 0), (4, 2.9, 0), (2, 3.7, 0), (3, 3, 0), (4, 3.9, 0), (2, 5.7, 0), (3, 5, 0), (4, 5.9, 0), (2, 6.7, 0), (3, 6, 0), (4, 6.9, 0), (2, 7.7, 0), (3, 7, 0), (4, 7.9, 0), (2, 8.7, 0), (3, 8, 0), (4, 8.9, 0), (5, 0.7, 0), (5.6666, 0, 0), (6.3333, 0.90000004, 0), (7, 0.8, 0), (5, 1.7, 0), (5.6666, 1, 0), (6.3333, 1.9000001, 0), (7, 1.8, 0), (5, 2.7, 0), (5.6666, 2, 0), (6.3333, 2.9, 0), (7, 2.8, 0), (5, 3.7, 0), (5.6666, 3, 0), (6.3333, 3.9, 0), (7, 3.8, 0), (5, 5.7, 0), (5.6666, 5, 0), (6.3333, 5.9, 0), (7, 5.8, 0), (5, 6.7, 0), (5.6666, 6, 0), (6.3333, 6.9, 0), (7, 6.8, 0), (5, 7.7, 0), (5.6666, 7, 0), (6.3333, 7.9, 0), (7, 7.8, 0), (5, 8.7, 0), (5.6666, 8, 0), (6.3333, 8.9, 0), (7, 8.8, 0), (5, 10.7, 0), (5.6666, 10, 0), (6.3333, 10.9, 0), (7, 10.8, 0), (5, 11.7, 0), (5.6666, 11, 0), (6.3333, 11.9, 0), (7, 11.8, 0), (5, 12.7, 0), (5.6666, 12, 0), (6.3333, 12.9, 0), (7, 12.8, 0), (5, 13.7, 0), (5.6666, 13, 0), (6.3333, 13.9, 0), (7, 13.8, 0), (8, 0.7, 0), (8.5, 0, 0), (9, 0.90000004, 0), (9.5, 0.8, 0), (10, 0.5, 0), (8, 1.7, 0), (8.5, 1, 0), (9, 1.9000001, 0), (9.5, 1.8, 0), (10, 1.5, 0), (8, 2.7, 0), (8.5, 2, 0), (9, 2.9, 0), (9.5, 2.8, 0), (10, 2.5, 0), (8, 3.7, 0), (8.5, 3, 0), (9, 3.9, 0), (9.5, 3.8, 0), (10, 3.5, 0), (8, 5.7, 0), (8.5, 5, 0), (9, 5.9, 0), (9.5, 5.8, 0), (10, 5.5, 0), (8, 6.7, 0), (8.5, 6, 0), (9, 6.9, 0), (9.5, 6.8, 0), (10, 6.5, 0), (8, 7.7, 0), (8.5, 7, 0), (9, 7.9, 0), (9.5, 7.8, 0), (10, 7.5, 0), (8, 8.7, 0), (8.5, 8, 0), (9, 8.9, 0), (9.5, 8.8, 0), (10, 8.5, 0), (8, 10.7, 0), (8.5, 10, 0), (9, 10.9, 0), (9.5, 10.8, 0), (10, 10.5, 0), (8, 11.7, 0), (8.5, 11, 0), (9, 11.9, 0), (9.5, 11.8, 0), (10, 11.5, 0), (8, 12.7, 0), (8.5, 12, 0), (9, 12.9, 0), (9.5, 12.8, 0), (10, 12.5, 0), (8, 13.7, 0), (8.5, 13, 0), (9, 13.9, 0), (9.5, 13.8, 0), (10, 13.5, 0), (11, 0.7, 0), (11.3999, 0, 0), (11.8, 0.90000004, 0), (12.2, 0.8, 0), (12.6, 0.5, 0), (13, 0.1, 0), (11, 1.7, 0), (11.3999, 1, 0), (11.8, 1.9000001, 0), (12.2, 1.8, 0), (12.6, 1.5, 0), (13, 1.1, 0), (11, 2.7, 0), (11.3999, 2, 0), (11.8, 2.9, 0), (12.2, 2.8, 0), (12.6, 2.5, 0), (13, 2.1, 0), (11, 3.7, 0), (11.3999, 3, 0), (11.8, 3.9, 0), (12.2, 3.8, 0), (12.6, 3.5, 0), (13, 3.1, 0), (11, 5.7, 0), (11.3999, 5, 0), (11.8, 5.9, 0), (12.2, 5.8, 0), (12.6, 5.5, 0), (13, 5.1, 0), (11, 6.7, 0), (11.3999, 6, 0), (11.8, 6.9, 0), (12.2, 6.8, 0), (12.6, 6.5, 0), (13, 6.1, 0), (11, 7.7, 0), (11.3999, 7, 0), (11.8, 7.9, 0), (12.2, 7.8, 0), (12.6, 7.5, 0), (13, 7.1, 0), (11, 8.7, 0), (11.3999, 8, 0), (11.8, 8.9, 0), (12.2, 8.8, 0), (12.6, 8.5, 0), (13, 8.1, 0), (11, 10.7, 0), (11.3999, 10, 0), (11.8, 10.9, 0), (12.2, 10.8, 0), (12.6, 10.5, 0), (13, 10.1, 0), (11, 11.7, 0), (11.3999, 11, 0), (11.8, 11.9, 0), (12.2, 11.8, 0), (12.6, 11.5, 0), (13, 11.1, 0), (11, 12.7, 0), (11.3999, 12, 0), (11.8, 12.9, 0), (12.2, 12.8, 0), (12.6, 12.5, 0), (13, 12.1, 0), (11, 13.7, 0), (11.3999, 13, 0), (11.8, 13.9, 0), (12.2, 13.8, 0), (12.6, 13.5, 0), (13, 13.1, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.01, 0.02, 0.01, 0.02, 0.01, 0.02, 0.01, 0.02, 0.03, 0.01, 0.02, 0.03, 0.01, 0.02, 0.03, 0.01, 0.02, 0.03, 0.01, 0.02, 0.03, 0.01, 0.02, 0.03, 0.01, 0.02, 0.03, 0.01, 0.02, 0.03, 0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06] ( + interpolation = "vertex" + ) + } + } +} + diff --git a/tests/files/usd/compare/nurbs-gen-single.blend b/tests/files/usd/compare/nurbs-gen-single.blend new file mode 100644 index 00000000000..aea76e0edd8 --- /dev/null +++ b/tests/files/usd/compare/nurbs-gen-single.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b1aa975024d3145867862f671394f1350813684fabb13c914d285f9100e32a5 +size 147899 diff --git a/tests/files/usd/compare/nurbs-gen-single.usda b/tests/files/usd/compare/nurbs-gen-single.usda new file mode 100644 index 00000000000..7f92ad520ff --- /dev/null +++ b/tests/files/usd/compare/nurbs-gen-single.usda @@ -0,0 +1,2028 @@ +#usda 1.0 +( + defaultPrim = "root" + doc = "" + metersPerUnit = 1 + upAxis = "Z" +) + +def Xform "root" ( + customData = { + dictionary Blender = { + bool generated = 1 + } + } +) +{ + def Xform "C220" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (4, -5, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [3] + float3[] extent = [(-1.005, -0.01, -0.01), (1.01, 0.705, 0.01)] + double[] knots = [0, 1, 2, 3, 4] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (1, 0, 0), (-1, 0.7, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.01] ( + interpolation = "vertex" + ) + } + } + + def Xform "C221" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (4, -4, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [3] + float3[] extent = [(-1.005, -0.01, -0.01), (1.01, 0.705, 0.01)] + double[] knots = [0, 1, 2, 3, 4] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (1, 0, 0), (-1, 0.7, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.01] ( + interpolation = "vertex" + ) + } + } + + def Xform "C222" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (4, -3, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [3] + float3[] extent = [(-1.005, -0.01, -0.01), (1.01, 0.705, 0.01)] + double[] knots = [0, 1, 2, 3, 4] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (1, 0, 0), (-1, 0.7, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.01] ( + interpolation = "vertex" + ) + } + } + + def Xform "C223" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (4, -2, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [3] + float3[] extent = [(-1.005, -0.01, -0.01), (1.01, 0.705, 0.01)] + double[] knots = [0, 1, 2, 3, 4] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (1, 0, 0), (-1, 0.7, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.01] ( + interpolation = "vertex" + ) + } + } + + def Xform "C320" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (7, -5, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [4] + float3[] extent = [(-1.005, -0.01, -0.015), (1.015, 0.915, 0.015)] + double[] knots = [0, 1, 2, 3, 4, 5] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (0, 0, 0), (1, 0.90000004, 0), (-1, 0.7, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 1] + float[] widths = [0.01, 0.02, 0.03, 0.01] ( + interpolation = "vertex" + ) + } + } + + def Xform "C321" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (7, -4, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [4] + float3[] extent = [(-1.005, -0.01, -0.015), (1.015, 0.915, 0.015)] + double[] knots = [0, 1, 2, 3, 4, 5] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (0, 0, 0), (1, 0.90000004, 0), (-1, 0.7, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 1] + float[] widths = [0.01, 0.02, 0.03, 0.01] ( + interpolation = "vertex" + ) + } + } + + def Xform "C322" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (7, -3, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [4] + float3[] extent = [(-1.005, -0.01, -0.015), (1.015, 0.915, 0.015)] + double[] knots = [0, 1, 2, 3, 4, 5] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (0, 0, 0), (1, 0.90000004, 0), (-1, 0.7, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 1] + float[] widths = [0.01, 0.02, 0.03, 0.01] ( + interpolation = "vertex" + ) + } + } + + def Xform "C323" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (7, -2, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [4] + float3[] extent = [(-1.005, -0.01, -0.015), (1.015, 0.915, 0.015)] + double[] knots = [0, 1, 2, 3, 4, 5] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (0, 0, 0), (1, 0.90000004, 0), (-1, 0.7, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 1] + float[] widths = [0.01, 0.02, 0.03, 0.01] ( + interpolation = "vertex" + ) + } + } + + def Xform "C330" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (7, 0, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [5] + float3[] extent = [(-0.7215866, 0.24261752, -0.013575812), (0.7287382, 0.8352093, 0.013575812)] + double[] knots = [0, 1, 2, 3, 4, 5, 6, 7] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (0, 0, 0), (1, 0.90000004, 0), (-1, 0.7, 0), (0, 0, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.01, 0.02] ( + interpolation = "vertex" + ) + } + } + + def Xform "C331" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (7, 1, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [5] + float3[] extent = [(-1.005, 0.33002716, -0.013324175), (0.67815953, 0.7846787, 0.013324175)] + double[] knots = [0, 1, 1, 2, 3, 3, 4, 4] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (0, 0, 0), (1, 0.90000004, 0), (-1, 0.7, 0), (0, 0, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.01, 0.02] ( + interpolation = "vertex" + ) + } + } + + def Xform "C332" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (7, 2, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [5] + float3[] extent = [(-1.005, -0.01, -0.015), (1.015, 0.915, 0.015)] + double[] knots = [0, 0, 1, 1, 1, 2, 2, 3] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (0, 0, 0), (1, 0.90000004, 0), (-1, 0.7, 0), (0, 0, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.01, 0.02] ( + interpolation = "vertex" + ) + } + } + + def Xform "C333" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (7, 3, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [5] + float3[] extent = [(-1.005, -0.01, -0.015), (1.015, 0.915, 0.015)] + double[] knots = [0, 1, 1, 2, 3, 3, 4, 4] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (0, 0, 0), (1, 0.90000004, 0), (-1, 0.7, 0), (0, 0, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.01, 0.02] ( + interpolation = "vertex" + ) + } + } + + def Xform "C420" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (10, -5, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [5] + float3[] extent = [(-1.005, -0.01, -0.02), (1.02, 0.915, 0.02)] + double[] knots = [0, 1, 2, 3, 4, 5, 6] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0), (1, 0.8, 0), (-1, 0.7, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.01] ( + interpolation = "vertex" + ) + } + } + + def Xform "C421" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (10, -4, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [5] + float3[] extent = [(-1.005, -0.01, -0.02), (1.02, 0.915, 0.02)] + double[] knots = [0, 1, 2, 3, 4, 5, 6] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0), (1, 0.8, 0), (-1, 0.7, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.01] ( + interpolation = "vertex" + ) + } + } + + def Xform "C422" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (10, -3, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [5] + float3[] extent = [(-1.005, -0.01, -0.02), (1.02, 0.915, 0.02)] + double[] knots = [0, 1, 2, 3, 4, 5, 6] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0), (1, 0.8, 0), (-1, 0.7, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.01] ( + interpolation = "vertex" + ) + } + } + + def Xform "C423" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (10, -2, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [5] + float3[] extent = [(-1.005, -0.01, -0.02), (1.02, 0.915, 0.02)] + double[] knots = [0, 1, 2, 3, 4, 5, 6] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0), (1, 0.8, 0), (-1, 0.7, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.01] ( + interpolation = "vertex" + ) + } + } + + def Xform "C430" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (10, 0, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [6] + float3[] extent = [(-0.8118869, 0.24261752, -0.017652245), (0.7046068, 0.8802426, 0.017652245)] + double[] knots = [0, 1, 2, 3, 4, 5, 6, 7, 8] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0), (1, 0.8, 0), (-1, 0.7, 0), (-0.33339998, 0, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.01, 0.02] ( + interpolation = "vertex" + ) + } + } + + def Xform "C431" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (10, 1, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [6] + float3[] extent = [(-1.005, 0.33002716, -0.017364832), (0.66599506, 0.8802426, 0.017364832)] + double[] knots = [0, 1, 1, 2, 3, 4, 4, 5, 5] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0), (1, 0.8, 0), (-1, 0.7, 0), (-0.33339998, 0, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.01, 0.02] ( + interpolation = "vertex" + ) + } + } + + def Xform "C432" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (10, 2, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [6] + float3[] extent = [(-0.5755015, -0.01, -0.02), (1.02, 0.83401394, 0.02)] + double[] knots = [0, 0, 1, 1, 2, 2, 3, 3, 4] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0), (1, 0.8, 0), (-1, 0.7, 0), (-0.33339998, 0, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.01, 0.02] ( + interpolation = "vertex" + ) + } + } + + def Xform "C433" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (10, 3, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [6] + float3[] extent = [(-1.005, 0.4509001, -0.015787298), (0.45407265, 0.915, 0.015787298)] + double[] knots = [0, 1, 1, 2, 2, 3, 3, 4, 4] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0), (1, 0.8, 0), (-1, 0.7, 0), (-0.33339998, 0, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.01, 0.02] ( + interpolation = "vertex" + ) + } + } + + def Xform "C440" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (10, 5, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [7] + float3[] extent = [(-0.7236948, 0.31736162, -0.016823994), (0.5933415, 0.8565444, 0.016823994)] + double[] knots = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0), (1, 0.8, 0), (-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.03] ( + interpolation = "vertex" + ) + } + } + + def Xform "C441" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (10, 6, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [7] + float3[] extent = [(-1.005, 0.3781014, -0.016453205), (0.5435281, 0.8113272, 0.016453205)] + double[] knots = [0, 1, 1, 1, 2, 3, 3, 3, 4, 5, 5] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0), (1, 0.8, 0), (-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.03] ( + interpolation = "vertex" + ) + } + } + + def Xform "C442" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (10, 7, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [7] + float3[] extent = [(-1.005, -0.01, -0.02), (1.02, 0.915, 0.02)] + double[] knots = [0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0), (1, 0.8, 0), (-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.03] ( + interpolation = "vertex" + ) + } + } + + def Xform "C443" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (10, 8, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [7] + float3[] extent = [(-1.005, -0.01, -0.02), (1.02, 0.915, 0.02)] + double[] knots = [0, 1, 1, 1, 2, 3, 3, 3, 4, 5, 5] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0), (1, 0.8, 0), (-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.03] ( + interpolation = "vertex" + ) + } + } + + def Xform "C520" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (13, -5, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [6] + float3[] extent = [(-1.005, -0.01, -0.024999999), (1.025, 0.915, 0.024999999)] + double[] knots = [0, 1, 2, 3, 4, 5, 6, 7] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0), (-1, 0.7, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01] ( + interpolation = "vertex" + ) + } + } + + def Xform "C521" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (13, -4, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [6] + float3[] extent = [(-1.005, -0.01, -0.024999999), (1.025, 0.915, 0.024999999)] + double[] knots = [0, 1, 2, 3, 4, 5, 6, 7] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0), (-1, 0.7, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01] ( + interpolation = "vertex" + ) + } + } + + def Xform "C522" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (13, -3, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [6] + float3[] extent = [(-1.005, -0.01, -0.024999999), (1.025, 0.915, 0.024999999)] + double[] knots = [0, 1, 2, 3, 4, 5, 6, 7] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0), (-1, 0.7, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01] ( + interpolation = "vertex" + ) + } + } + + def Xform "C523" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (13, -2, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [6] + float3[] extent = [(-1.005, -0.01, -0.024999999), (1.025, 0.915, 0.024999999)] + double[] knots = [0, 1, 2, 3, 4, 5, 6, 7] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0), (-1, 0.7, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01] ( + interpolation = "vertex" + ) + } + } + + def Xform "C530" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (13, 0, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [7] + float3[] extent = [(-0.83909357, 0.24261752, -0.023324175), (0.8557419, 0.8802426, 0.023324175)] + double[] knots = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0), (-1, 0.7, 0), (-0.5, 0, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02] ( + interpolation = "vertex" + ) + } + } + + def Xform "C531" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (13, 1, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [7] + float3[] extent = [(-1.005, 0.33002716, -0.023147766), (0.8379246, 0.8802426, 0.023147766)] + double[] knots = [0, 1, 1, 2, 3, 4, 5, 5, 6, 6] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0), (-1, 0.7, 0), (-0.5, 0, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02] ( + interpolation = "vertex" + ) + } + } + + def Xform "C532" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (13, 2, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [7] + float3[] extent = [(-1.005, -0.01, -0.024999999), (1.025, 0.915, 0.024999999)] + double[] knots = [0, 0, 1, 1, 2, 2, 2, 3, 3, 4] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0), (-1, 0.7, 0), (-0.5, 0, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02] ( + interpolation = "vertex" + ) + } + } + + def Xform "C533" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (13, 3, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [7] + float3[] extent = [(-1.005, -0.01, -0.024999999), (1.025, 0.915, 0.024999999)] + double[] knots = [0, 1, 1, 2, 2, 3, 4, 4, 5, 5] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0), (-1, 0.7, 0), (-0.5, 0, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02] ( + interpolation = "vertex" + ) + } + } + + def Xform "C540" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (13, 5, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [8] + float3[] extent = [(-0.7463334, 0.31734136, -0.022387203), (0.76110774, 0.852151, 0.022387203)] + double[] knots = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0), (-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.03] ( + interpolation = "vertex" + ) + } + } + + def Xform "C541" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (13, 6, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [8] + float3[] extent = [(-1.005, 0.37973455, -0.022024361), (0.7244607, 0.8404016, 0.022024361)] + double[] knots = [0, 1, 1, 1, 2, 3, 4, 4, 4, 5, 6, 6] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0), (-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.03] ( + interpolation = "vertex" + ) + } + } + + def Xform "C542" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (13, 7, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [8] + float3[] extent = [(-1.005, -0.01, -0.024999999), (1.025, 0.915, 0.024999999)] + double[] knots = [-1, 0, 1, 1, 1, 2, 2, 3, 3, 3, 4, 5] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0), (-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.03] ( + interpolation = "vertex" + ) + } + } + + def Xform "C543" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (13, 8, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [8] + float3[] extent = [(-1.005, -0.01, -0.024999999), (1.025, 0.915, 0.024999999)] + double[] knots = [1, 1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0), (-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.01, 0.02, 0.03] ( + interpolation = "vertex" + ) + } + } + + def Xform "C620" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (16, -5, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [7] + float3[] extent = [(-1.005, -0.01, -0.029999997), (1.03, 0.915, 0.029999997)] + double[] knots = [0, 1, 2, 3, 4, 5, 6, 7, 8] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0), (-1, 0.7, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01] ( + interpolation = "vertex" + ) + } + } + + def Xform "C621" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (16, -4, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [7] + float3[] extent = [(-1.005, -0.01, -0.029999997), (1.03, 0.915, 0.029999997)] + double[] knots = [0, 1, 2, 3, 4, 5, 6, 7, 8] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0), (-1, 0.7, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01] ( + interpolation = "vertex" + ) + } + } + + def Xform "C622" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (16, -3, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [7] + float3[] extent = [(-1.005, -0.01, -0.029999997), (1.03, 0.915, 0.029999997)] + double[] knots = [0, 1, 2, 3, 4, 5, 6, 7, 8] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0), (-1, 0.7, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01] ( + interpolation = "vertex" + ) + } + } + + def Xform "C623" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (16, -2, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [7] + float3[] extent = [(-1.005, -0.01, -0.029999997), (1.03, 0.915, 0.029999997)] + double[] knots = [0, 1, 2, 3, 4, 5, 6, 7, 8] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0), (-1, 0.7, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01] ( + interpolation = "vertex" + ) + } + } + + def Xform "C630" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (16, 0, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [8] + float3[] extent = [(-0.87488467, 0.22741997, -0.027437078), (0.82240325, 0.8802426, 0.027437078)] + double[] knots = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0), (-1, 0.7, 0), (-0.6001, 0, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02] ( + interpolation = "vertex" + ) + } + } + + def Xform "C631" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (16, 1, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [8] + float3[] extent = [(-1.005, 0.25936726, -0.027267104), (0.8086355, 0.8802426, 0.027267104)] + double[] knots = [0, 1, 1, 2, 3, 4, 5, 6, 6, 7, 7] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0), (-1, 0.7, 0), (-0.6001, 0, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02] ( + interpolation = "vertex" + ) + } + } + + def Xform "C632" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (16, 2, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [8] + float3[] extent = [(-0.7098612, -0.01, -0.029999997), (1.03, 0.83401394, 0.029999997)] + double[] knots = [0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0), (-1, 0.7, 0), (-0.6001, 0, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02] ( + interpolation = "vertex" + ) + } + } + + def Xform "C633" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (16, 3, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [8] + float3[] extent = [(-1.005, 0.35677534, -0.025464311), (0.66260934, 0.915, 0.025464311)] + double[] knots = [0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0), (-1, 0.7, 0), (-0.6001, 0, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02] ( + interpolation = "vertex" + ) + } + } + + def Xform "C640" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (16, 5, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [9] + float3[] extent = [(-0.803325, 0.2751881, -0.02641032), (0.73923624, 0.852151, 0.02641032)] + double[] knots = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0), (-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02, 0.03] ( + interpolation = "vertex" + ) + } + } + + def Xform "C641" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (16, 6, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [9] + float3[] extent = [(-1.005, 0.30632252, -0.026247429), (0.72604185, 0.8440879, 0.026247429)] + double[] knots = [0, 1, 1, 1, 2, 3, 4, 5, 5, 5, 6, 7, 7] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0), (-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02, 0.03] ( + interpolation = "vertex" + ) + } + } + + def Xform "C642" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (16, 7, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [9] + float3[] extent = [(-0.68935716, -0.01, -0.025377944), (0.6556133, 0.73673767, 0.025377944)] + double[] knots = [-1, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 5] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0), (-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02, 0.03] ( + interpolation = "vertex" + ) + } + } + + def Xform "C643" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (16, 8, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [9] + float3[] extent = [(-1.005, 0.4017877, -0.02381783), (0.5292443, 0.83164406, 0.02381783)] + double[] knots = [1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0), (-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06, 0.01, 0.02, 0.03] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC220" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-12, -5, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [2] + float3[] extent = [(-1.005, -0.01, -0.01), (1.01, 0.705, 0.01)] + double[] knots = [1, 1, 2, 2] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (1, 0, 0)] + double[] pointWeights = [1, 0.7071067690849304] + float[] widths = [0.01, 0.02] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC221" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-12, -4, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [2] + float3[] extent = [(-1.005, -0.01, -0.01), (1.01, 0.705, 0.01)] + double[] knots = [0, 0, 1, 1] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (1, 0, 0)] + double[] pointWeights = [1, 0.7071067690849304] + float[] widths = [0.01, 0.02] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC222" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-12, -3, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [2] + float3[] extent = [(-1.005, -0.01, -0.01), (1.01, 0.705, 0.01)] + double[] knots = [1, 1, 2, 2] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (1, 0, 0)] + double[] pointWeights = [1, 0.7071067690849304] + float[] widths = [0.01, 0.02] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC223" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-12, -2, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [2] + float3[] extent = [(-1.005, -0.01, -0.01), (1.01, 0.705, 0.01)] + double[] knots = [0, 0, 1, 1] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (1, 0, 0)] + double[] pointWeights = [1, 0.7071067690849304] + float[] widths = [0.01, 0.02] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC320" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-9, -5, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [3] + float3[] extent = [(-1.005, -0.01, -0.015), (1.015, 0.915, 0.015)] + double[] knots = [1, 1, 2, 3, 3] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (0, 0, 0), (1, 0.90000004, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC321" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-9, -4, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [3] + float3[] extent = [(-1.005, -0.01, -0.015), (1.015, 0.915, 0.015)] + double[] knots = [0, 0, 1, 2, 2] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (0, 0, 0), (1, 0.90000004, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC322" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-9, -3, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [3] + float3[] extent = [(-1.005, -0.01, -0.015), (1.015, 0.915, 0.015)] + double[] knots = [1, 1, 2, 3, 3] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (0, 0, 0), (1, 0.90000004, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC323" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-9, -2, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [3] + float3[] extent = [(-1.005, -0.01, -0.015), (1.015, 0.915, 0.015)] + double[] knots = [0, 0, 1, 2, 2] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (0, 0, 0), (1, 0.90000004, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC330" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-9, 0, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [3] + float3[] extent = [(-0.5928575, 0.24261752, -0.012928931), (0.5987153, 0.5401367, 0.012928931)] + double[] knots = [1, 1, 2, 3, 4, 4] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (0, 0, 0), (1, 0.90000004, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC331" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-9, 1, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [3] + float3[] extent = [(-1.005, 0.45090014, -0.015), (1.015, 0.915, 0.015)] + double[] knots = [0, 0, 0, 1, 1, 1] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (0, 0, 0), (1, 0.90000004, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC332" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-9, 2, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [3] + float3[] extent = [(-1.005, -0.01, -0.015), (1.015, 0.915, 0.015)] + double[] knots = [0, 0, 1, 1, 2, 2] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (0, 0, 0), (1, 0.90000004, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC333" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-9, 3, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [3] + float3[] extent = [(-1.005, 0.45090014, -0.015), (1.015, 0.915, 0.015)] + double[] knots = [0, 0, 0, 1, 1, 1] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (0, 0, 0), (1, 0.90000004, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC420" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-6, -5, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [4] + float3[] extent = [(-1.005, -0.01, -0.02), (1.02, 0.915, 0.02)] + double[] knots = [1, 1, 2, 3, 4, 4] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0), (1, 0.8, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC421" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-6, -4, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [4] + float3[] extent = [(-1.005, -0.01, -0.02), (1.02, 0.915, 0.02)] + double[] knots = [0, 0, 1, 2, 3, 3] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0), (1, 0.8, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC422" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-6, -3, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [4] + float3[] extent = [(-1.005, -0.01, -0.02), (1.02, 0.915, 0.02)] + double[] knots = [1, 1, 2, 3, 4, 4] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0), (1, 0.8, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC423" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-6, -2, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [4] + float3[] extent = [(-1.005, -0.01, -0.02), (1.02, 0.915, 0.02)] + double[] knots = [0, 0, 1, 2, 3, 3] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0), (1, 0.8, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC430" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-6, 0, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [4] + float3[] extent = [(-0.73095626, 0.24261752, -0.017071066), (0.6265272, 0.8802426, 0.017071066)] + double[] knots = [1, 1, 2, 3, 4, 5, 5] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0), (1, 0.8, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC431" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-6, 1, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [4] + float3[] extent = [(-1.005, 0.33002716, -0.02), (1.02, 0.8450518, 0.02)] + double[] knots = [0, 0, 0, 1, 2, 2, 2] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0), (1, 0.8, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC432" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-6, 2, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [4] + float3[] extent = [(-0.34339994, -0.01, -0.02), (1.02, 0.83401394, 0.02)] + double[] knots = [0, 0, 1, 1, 2, 2, 2] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0), (1, 0.8, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC433" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-6, 3, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [4] + float3[] extent = [(-1.005, 0.45090014, -0.015), (0.34829998, 0.915, 0.015)] + double[] knots = [0, 0, 0, 1, 1, 1, 1] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0), (1, 0.8, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC440" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-6, 5, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [4] + float3[] extent = [(-0.34337923, 0.32137087, -0.014999999), (0.34829998, 0.784398, 0.014999999)] + double[] knots = [1, 1, 2, 3, 4, 5, 6, 6] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0), (1, 0.8, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC441" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-6, 6, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [4] + float3[] extent = [(-1.005, 0.48550388, -0.02), (1.02, 0.83164406, 0.02)] + double[] knots = [0, 0, 0, 0, 1, 1, 1, 1] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0), (1, 0.8, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC442" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-6, 7, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [4] + float3[] extent = [(-1.005, -0.01, -0.02), (1.02, 0.915, 0.02)] + double[] knots = [0, 0, 1, 1, 1, 2, 2, 2] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0), (1, 0.8, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC443" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-6, 8, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [4] + float3[] extent = [(-1.005, 0.48550388, -0.02), (1.02, 0.83164406, 0.02)] + double[] knots = [0, 0, 0, 0, 1, 1, 1, 1] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.33339998, 0, 0), (0.3333, 0.90000004, 0), (1, 0.8, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC520" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-3, -5, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [5] + float3[] extent = [(-1.005, -0.01, -0.024999999), (1.025, 0.915, 0.024999999)] + double[] knots = [1, 1, 2, 3, 4, 5, 5] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC521" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-3, -4, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [5] + float3[] extent = [(-1.005, -0.01, -0.024999999), (1.025, 0.915, 0.024999999)] + double[] knots = [0, 0, 1, 2, 3, 4, 4] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC522" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-3, -3, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [5] + float3[] extent = [(-1.005, -0.01, -0.024999999), (1.025, 0.915, 0.024999999)] + double[] knots = [1, 1, 2, 3, 4, 5, 5] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC523" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-3, -2, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [5] + float3[] extent = [(-1.005, -0.01, -0.024999999), (1.025, 0.915, 0.024999999)] + double[] knots = [0, 0, 1, 2, 3, 4, 4] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC530" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-3, 0, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [5] + float3[] extent = [(-0.79996425, 0.24261752, -0.022928929), (0.8158221, 0.8802426, 0.022928929)] + double[] knots = [1, 1, 2, 3, 4, 5, 6, 6] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC531" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-3, 1, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [5] + float3[] extent = [(-1.005, 0.33002716, -0.024999999), (1.025, 0.8802426, 0.024999999)] + double[] knots = [0, 0, 0, 1, 2, 3, 3, 3] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC532" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-3, 2, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [5] + float3[] extent = [(-0.51, -0.01, -0.02), (0.52, 0.83401394, 0.02)] + double[] knots = [0, 0, 1, 1, 2, 2, 3, 3] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC533" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-3, 3, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [5] + float3[] extent = [(-1.005, 0.45090014, -0.024999999), (1.025, 0.915, 0.024999999)] + double[] knots = [0, 0, 0, 1, 1, 2, 2, 2] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC540" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-3, 5, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [5] + float3[] extent = [(-0.51, 0.32137087, -0.02), (0.52, 0.852151, 0.02)] + double[] knots = [1, 1, 2, 3, 4, 5, 6, 7, 7] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC541" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-3, 6, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [5] + float3[] extent = [(-1.005, 0.37810147, -0.024999999), (1.025, 0.7980174, 0.024999999)] + double[] knots = [0, 0, 0, 0, 1, 2, 2, 2, 2] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC542" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-3, 7, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [5] + float3[] extent = [(-0.51, -0.01, -0.024999999), (1.025, 0.73673767, 0.024999999)] + double[] knots = [0, 0, 1, 1, 1, 2, 2, 2, 2] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC543" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-3, 8, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [5] + float3[] extent = [(-1.005, 0.48550388, -0.02), (0.52, 0.83164406, 0.02)] + double[] knots = [0, 0, 0, 0, 1, 1, 1, 1, 1] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.5, 0, 0), (0, 0.90000004, 0), (0.5, 0.8, 0), (1, 0.5, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC620" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (0, -5, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [6] + float3[] extent = [(-1.005, -0.01, -0.029999997), (1.03, 0.915, 0.029999997)] + double[] knots = [1, 1, 2, 3, 4, 5, 6, 6] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC621" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (0, -4, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [6] + float3[] extent = [(-1.005, -0.01, -0.029999997), (1.03, 0.915, 0.029999997)] + double[] knots = [0, 0, 1, 2, 3, 4, 5, 5] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC622" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (0, -3, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [6] + float3[] extent = [(-1.005, -0.01, -0.029999997), (1.03, 0.915, 0.029999997)] + double[] knots = [1, 1, 2, 3, 4, 5, 6, 6] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC623" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (0, -2, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [6] + float3[] extent = [(-1.005, -0.01, -0.029999997), (1.03, 0.915, 0.029999997)] + double[] knots = [0, 0, 1, 2, 3, 4, 5, 5] + int[] order = [2] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC630" + { + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [6] + float3[] extent = [(-0.841427, 0.24261752, -0.027071066), (0.79275644, 0.8802426, 0.027071066)] + double[] knots = [1, 1, 2, 3, 4, 5, 6, 7, 7] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC631" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (0, 1, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [6] + float3[] extent = [(-1.005, 0.07000001, -0.029999997), (1.03, 0.8802426, 0.029999997)] + double[] knots = [0, 0, 0, 1, 2, 3, 4, 4, 4] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC632" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (0, 2, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [6] + float3[] extent = [(-0.6101, -0.01, -0.029999997), (1.03, 0.83401394, 0.029999997)] + double[] knots = [0, 0, 1, 1, 2, 2, 3, 3, 3] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC633" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (0, 3, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [6] + float3[] extent = [(-1.005, 0.45090014, -0.024999999), (0.62499994, 0.915, 0.024999999)] + double[] knots = [0, 0, 0, 1, 1, 2, 2, 2, 2] + int[] order = [3] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC640" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (0, 5, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [6] + float3[] extent = [(-0.61005855, 0.32137087, -0.024999997), (0.62499994, 0.852151, 0.024999997)] + double[] knots = [1, 1, 2, 3, 4, 5, 6, 7, 8, 8] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC641" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (0, 6, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [6] + float3[] extent = [(-1.005, 0.07000001, -0.029999997), (1.03, 0.8404016, 0.029999997)] + double[] knots = [0, 0, 0, 0, 1, 2, 3, 3, 3, 3] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC642" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (0, 7, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [6] + float3[] extent = [(-0.6101, -0.01, -0.024999999), (0.62499994, 0.73673767, 0.024999999)] + double[] knots = [0, 0, 1, 1, 1, 2, 2, 2, 3, 3] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06] ( + interpolation = "vertex" + ) + } + } + + def Xform "NC643" + { + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (0, 8, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + + def NurbsCurves "Curves" + { + int[] curveVertexCounts = [6] + float3[] extent = [(-1.005, 0.48550388, -0.02), (0.21999998, 0.83164406, 0.02)] + double[] knots = [0, 0, 0, 0, 1, 1, 1, 1, 1, 1] + int[] order = [4] + point3f[] points = [(-1, 0.7, 0), (-0.6001, 0, 0), (-0.19999999, 0.90000004, 0), (0.19999999, 0.8, 0), (0.59999996, 0.5, 0), (1, 0.1, 0)] + double[] pointWeights = [1, 0.7071067690849304, 1, 0.7071067690849304, 1, 0.7071067690849304] + float[] widths = [0.01, 0.02, 0.03, 0.04, 0.049999997, 0.06] ( + interpolation = "vertex" + ) + } + } +} + diff --git a/tests/files/usd/compare/reference/nurbs-custom.txt b/tests/files/usd/compare/reference/nurbs-custom.txt new file mode 100644 index 00000000000..84f59ff8d4f --- /dev/null +++ b/tests/files/usd/compare/reference/nurbs-custom.txt @@ -0,0 +1,126 @@ +==== Curves(new): 5 +- Curve 'C53Custom' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 4 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'C54Custom' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 4 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'NC62Custom' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 4 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'NC63Custom' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 4 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'NC64Custom' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 4 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +==== Objects: 5 +- Obj 'C53Custom' CURVES data:'C53Custom' + - pos 4.000, 1.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C54Custom' CURVES data:'C54Custom' + - pos 4.000, 2.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC62Custom' CURVES data:'NC62Custom' + - pos 0.000, 0.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC63Custom' CURVES data:'NC63Custom' + - pos 0.000, 1.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC64Custom' CURVES data:'NC64Custom' + - pos 0.000, 2.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 + diff --git a/tests/files/usd/compare/reference/nurbs-gen-multiple.txt b/tests/files/usd/compare/reference/nurbs-gen-multiple.txt new file mode 100644 index 00000000000..f57b1fae401 --- /dev/null +++ b/tests/files/usd/compare/reference/nurbs-gen-multiple.txt @@ -0,0 +1,83 @@ +==== Curves(new): 2 +- Curve 'CAll' splines:48 control-points:212 + - attr 'curve_type' INT8 CURVE + - 3 3 3 3 3 3 3 3 3 3 ... 3 3 3 3 3 3 3 3 3 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 1 1 1 1 1 1 1 1 1 ... 1 1 1 1 1 1 1 1 1 1 + - attr 'knots_mode' INT8 CURVE + - 1 1 1 1 1 1 1 1 0 1 ... 1 1 0 1 2 3 0 4 4 3 + - attr 'nurbs_order' INT8 CURVE + - 2 2 2 2 2 2 2 2 3 3 ... 2 2 3 3 3 3 4 4 4 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 1.000 0.707 1.000 0.707 ... 1.000 0.707 1.000 0.707 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (1.000, 0.000, 0.000) + - (-1.000, 1.700, 0.000) + - (1.000, 1.000, 0.000) + - (-1.000, 2.700, 0.000) + - (1.000, 2.000, 0.000) + - (-1.000, 3.700, 0.000) + - (1.000, 3.000, 0.000) + - (2.000, 0.700, 0.000) + - (3.000, 0.000, 0.000) + ... + - (11.800, 12.900, 0.000) + - (12.200, 12.800, 0.000) + - (12.600, 12.500, 0.000) + - (13.000, 12.100, 0.000) + - (11.000, 13.700, 0.000) + - (11.400, 13.000, 0.000) + - (11.800, 13.900, 0.000) + - (12.200, 13.800, 0.000) + - (12.600, 13.500, 0.000) + - (13.000, 13.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.005 0.010 0.005 0.010 0.005 0.010 0.005 0.010 ... 0.015 0.020 0.025 0.030 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'NCAll' splines:48 control-points:212 + - attr 'curve_type' INT8 CURVE + - 3 3 3 3 3 3 3 3 3 3 ... 3 3 3 3 3 3 3 3 3 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0 + - attr 'knots_mode' INT8 CURVE + - 1 1 1 1 1 1 1 1 0 3 ... 1 1 0 1 2 3 0 1 2 3 + - attr 'nurbs_order' INT8 CURVE + - 2 2 2 2 2 2 2 2 3 3 ... 2 2 3 3 3 3 4 4 4 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 1.000 0.707 1.000 0.707 ... 1.000 0.707 1.000 0.707 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (1.000, 0.000, 0.000) + - (-1.000, 1.700, 0.000) + - (1.000, 1.000, 0.000) + - (-1.000, 2.700, 0.000) + - (1.000, 2.000, 0.000) + - (-1.000, 3.700, 0.000) + - (1.000, 3.000, 0.000) + - (2.000, 0.700, 0.000) + - (3.000, 0.000, 0.000) + ... + - (11.800, 12.900, 0.000) + - (12.200, 12.800, 0.000) + - (12.600, 12.500, 0.000) + - (13.000, 12.100, 0.000) + - (11.000, 13.700, 0.000) + - (11.400, 13.000, 0.000) + - (11.800, 13.900, 0.000) + - (12.200, 13.800, 0.000) + - (12.600, 13.500, 0.000) + - (13.000, 13.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.005 0.010 0.005 0.010 0.005 0.010 0.005 0.010 ... 0.015 0.020 0.025 0.030 0.005 0.010 0.015 0.020 0.025 0.030 + +==== Objects: 2 +- Obj 'CAll' CURVES data:'CAll' + - pos 4.000, -5.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NCAll' CURVES data:'NCAll' + - pos -12.000, -5.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 + diff --git a/tests/files/usd/compare/reference/nurbs-gen-single.txt b/tests/files/usd/compare/reference/nurbs-gen-single.txt new file mode 100644 index 00000000000..c4f71fe94e3 --- /dev/null +++ b/tests/files/usd/compare/reference/nurbs-gen-single.txt @@ -0,0 +1,2251 @@ +==== Curves(new): 96 +- Curve 'C220' splines:1 control-points:2 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (1.000, 0.000, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 + +- Curve 'C221' splines:1 control-points:2 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (1.000, 0.000, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 + +- Curve 'C222' splines:1 control-points:2 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (1.000, 0.000, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 + +- Curve 'C223' splines:1 control-points:2 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (1.000, 0.000, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 + +- Curve 'C320' splines:1 control-points:3 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (0.000, 0.000, 0.000) + - (1.000, 0.900, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 + +- Curve 'C321' splines:1 control-points:3 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (0.000, 0.000, 0.000) + - (1.000, 0.900, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 + +- Curve 'C322' splines:1 control-points:3 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (0.000, 0.000, 0.000) + - (1.000, 0.900, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 + +- Curve 'C323' splines:1 control-points:3 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (0.000, 0.000, 0.000) + - (1.000, 0.900, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 + +- Curve 'C330' splines:1 control-points:3 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 0 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (0.000, 0.000, 0.000) + - (1.000, 0.900, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 + +- Curve 'C331' splines:1 control-points:3 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (0.000, 0.000, 0.000) + - (1.000, 0.900, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 + +- Curve 'C332' splines:1 control-points:3 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 0 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (0.000, 0.000, 0.000) + - (1.000, 0.900, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 + +- Curve 'C333' splines:1 control-points:3 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (0.000, 0.000, 0.000) + - (1.000, 0.900, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 + +- Curve 'C420' splines:1 control-points:4 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.333, 0.000, 0.000) + - (0.333, 0.900, 0.000) + - (1.000, 0.800, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 + +- Curve 'C421' splines:1 control-points:4 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.333, 0.000, 0.000) + - (0.333, 0.900, 0.000) + - (1.000, 0.800, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 + +- Curve 'C422' splines:1 control-points:4 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.333, 0.000, 0.000) + - (0.333, 0.900, 0.000) + - (1.000, 0.800, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 + +- Curve 'C423' splines:1 control-points:4 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.333, 0.000, 0.000) + - (0.333, 0.900, 0.000) + - (1.000, 0.800, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 + +- Curve 'C430' splines:1 control-points:4 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 0 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.333, 0.000, 0.000) + - (0.333, 0.900, 0.000) + - (1.000, 0.800, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 + +- Curve 'C431' splines:1 control-points:4 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.333, 0.000, 0.000) + - (0.333, 0.900, 0.000) + - (1.000, 0.800, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 + +- Curve 'C432' splines:1 control-points:4 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 2 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.333, 0.000, 0.000) + - (0.333, 0.900, 0.000) + - (1.000, 0.800, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 + +- Curve 'C433' splines:1 control-points:4 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 3 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.333, 0.000, 0.000) + - (0.333, 0.900, 0.000) + - (1.000, 0.800, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 + +- Curve 'C440' splines:1 control-points:4 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 0 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.333, 0.000, 0.000) + - (0.333, 0.900, 0.000) + - (1.000, 0.800, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 + +- Curve 'C441' splines:1 control-points:4 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 4 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.333, 0.000, 0.000) + - (0.333, 0.900, 0.000) + - (1.000, 0.800, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 + +- Curve 'C442' splines:1 control-points:4 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 0 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.333, 0.000, 0.000) + - (0.333, 0.900, 0.000) + - (1.000, 0.800, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 + +- Curve 'C443' splines:1 control-points:4 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 4 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.333, 0.000, 0.000) + - (0.333, 0.900, 0.000) + - (1.000, 0.800, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 + +- Curve 'C520' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'C521' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'C522' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'C523' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'C530' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 0 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'C531' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'C532' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 4 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'C533' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'C540' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 0 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'C541' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 4 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'C542' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 4 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'C543' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'C620' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'C621' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'C622' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'C623' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'C630' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 0 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'C631' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'C632' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 2 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'C633' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 3 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'C640' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 0 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'C641' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 4 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'C642' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 4 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'C643' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 1 + - attr 'knots_mode' INT8 CURVE + - 3 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'NC220' splines:1 control-points:2 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (1.000, 0.000, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 + +- Curve 'NC221' splines:1 control-points:2 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (1.000, 0.000, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 + +- Curve 'NC222' splines:1 control-points:2 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (1.000, 0.000, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 + +- Curve 'NC223' splines:1 control-points:2 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (1.000, 0.000, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 + +- Curve 'NC320' splines:1 control-points:3 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (0.000, 0.000, 0.000) + - (1.000, 0.900, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 + +- Curve 'NC321' splines:1 control-points:3 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (0.000, 0.000, 0.000) + - (1.000, 0.900, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 + +- Curve 'NC322' splines:1 control-points:3 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (0.000, 0.000, 0.000) + - (1.000, 0.900, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 + +- Curve 'NC323' splines:1 control-points:3 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (0.000, 0.000, 0.000) + - (1.000, 0.900, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 + +- Curve 'NC330' splines:1 control-points:3 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 0 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (0.000, 0.000, 0.000) + - (1.000, 0.900, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 + +- Curve 'NC331' splines:1 control-points:3 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 3 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (0.000, 0.000, 0.000) + - (1.000, 0.900, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 + +- Curve 'NC332' splines:1 control-points:3 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 2 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (0.000, 0.000, 0.000) + - (1.000, 0.900, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 + +- Curve 'NC333' splines:1 control-points:3 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 3 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (0.000, 0.000, 0.000) + - (1.000, 0.900, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 + +- Curve 'NC420' splines:1 control-points:4 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.333, 0.000, 0.000) + - (0.333, 0.900, 0.000) + - (1.000, 0.800, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 + +- Curve 'NC421' splines:1 control-points:4 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.333, 0.000, 0.000) + - (0.333, 0.900, 0.000) + - (1.000, 0.800, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 + +- Curve 'NC422' splines:1 control-points:4 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.333, 0.000, 0.000) + - (0.333, 0.900, 0.000) + - (1.000, 0.800, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 + +- Curve 'NC423' splines:1 control-points:4 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.333, 0.000, 0.000) + - (0.333, 0.900, 0.000) + - (1.000, 0.800, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 + +- Curve 'NC430' splines:1 control-points:4 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 0 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.333, 0.000, 0.000) + - (0.333, 0.900, 0.000) + - (1.000, 0.800, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 + +- Curve 'NC431' splines:1 control-points:4 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.333, 0.000, 0.000) + - (0.333, 0.900, 0.000) + - (1.000, 0.800, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 + +- Curve 'NC432' splines:1 control-points:4 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 2 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.333, 0.000, 0.000) + - (0.333, 0.900, 0.000) + - (1.000, 0.800, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 + +- Curve 'NC433' splines:1 control-points:4 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 3 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.333, 0.000, 0.000) + - (0.333, 0.900, 0.000) + - (1.000, 0.800, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 + +- Curve 'NC440' splines:1 control-points:4 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 0 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.333, 0.000, 0.000) + - (0.333, 0.900, 0.000) + - (1.000, 0.800, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 + +- Curve 'NC441' splines:1 control-points:4 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 3 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.333, 0.000, 0.000) + - (0.333, 0.900, 0.000) + - (1.000, 0.800, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 + +- Curve 'NC442' splines:1 control-points:4 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 2 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.333, 0.000, 0.000) + - (0.333, 0.900, 0.000) + - (1.000, 0.800, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 + +- Curve 'NC443' splines:1 control-points:4 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 3 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.333, 0.000, 0.000) + - (0.333, 0.900, 0.000) + - (1.000, 0.800, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 + +- Curve 'NC520' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'NC521' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'NC522' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'NC523' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'NC530' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 0 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'NC531' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'NC532' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 2 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'NC533' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 3 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'NC540' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 0 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'NC541' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'NC542' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 2 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'NC543' splines:1 control-points:5 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 3 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.500, 0.000, 0.000) + - (0.000, 0.900, 0.000) + - (0.500, 0.800, 0.000) + - (1.000, 0.500, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 + +- Curve 'NC620' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'NC621' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'NC622' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'NC623' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 2 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'NC630' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 0 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'NC631' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'NC632' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 2 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'NC633' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 3 + - attr 'nurbs_order' INT8 CURVE + - 3 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'NC640' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 0 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'NC641' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 1 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'NC642' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 2 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +- Curve 'NC643' splines:1 control-points:6 + - attr 'curve_type' INT8 CURVE + - 3 + - attr 'cyclic' BOOLEAN CURVE + - 0 + - attr 'knots_mode' INT8 CURVE + - 3 + - attr 'nurbs_order' INT8 CURVE + - 4 + - attr 'nurbs_weight' FLOAT POINT + - 1.000 0.707 1.000 0.707 1.000 0.707 + - attr 'position' FLOAT_VECTOR POINT + - (-1.000, 0.700, 0.000) + - (-0.600, 0.000, 0.000) + - (-0.200, 0.900, 0.000) + - (0.200, 0.800, 0.000) + - (0.600, 0.500, 0.000) + - (1.000, 0.100, 0.000) + - attr 'radius' FLOAT POINT + - 0.005 0.010 0.015 0.020 0.025 0.030 + +==== Objects: 96 +- Obj 'C220' CURVES data:'C220' + - pos 4.000, -5.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C221' CURVES data:'C221' + - pos 4.000, -4.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C222' CURVES data:'C222' + - pos 4.000, -3.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C223' CURVES data:'C223' + - pos 4.000, -2.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C320' CURVES data:'C320' + - pos 7.000, -5.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C321' CURVES data:'C321' + - pos 7.000, -4.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C322' CURVES data:'C322' + - pos 7.000, -3.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C323' CURVES data:'C323' + - pos 7.000, -2.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C330' CURVES data:'C330' + - pos 7.000, 0.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C331' CURVES data:'C331' + - pos 7.000, 1.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C332' CURVES data:'C332' + - pos 7.000, 2.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C333' CURVES data:'C333' + - pos 7.000, 3.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C420' CURVES data:'C420' + - pos 10.000, -5.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C421' CURVES data:'C421' + - pos 10.000, -4.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C422' CURVES data:'C422' + - pos 10.000, -3.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C423' CURVES data:'C423' + - pos 10.000, -2.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C430' CURVES data:'C430' + - pos 10.000, 0.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C431' CURVES data:'C431' + - pos 10.000, 1.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C432' CURVES data:'C432' + - pos 10.000, 2.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C433' CURVES data:'C433' + - pos 10.000, 3.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C440' CURVES data:'C440' + - pos 10.000, 5.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C441' CURVES data:'C441' + - pos 10.000, 6.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C442' CURVES data:'C442' + - pos 10.000, 7.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C443' CURVES data:'C443' + - pos 10.000, 8.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C520' CURVES data:'C520' + - pos 13.000, -5.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C521' CURVES data:'C521' + - pos 13.000, -4.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C522' CURVES data:'C522' + - pos 13.000, -3.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C523' CURVES data:'C523' + - pos 13.000, -2.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C530' CURVES data:'C530' + - pos 13.000, 0.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C531' CURVES data:'C531' + - pos 13.000, 1.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C532' CURVES data:'C532' + - pos 13.000, 2.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C533' CURVES data:'C533' + - pos 13.000, 3.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C540' CURVES data:'C540' + - pos 13.000, 5.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C541' CURVES data:'C541' + - pos 13.000, 6.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C542' CURVES data:'C542' + - pos 13.000, 7.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C543' CURVES data:'C543' + - pos 13.000, 8.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C620' CURVES data:'C620' + - pos 16.000, -5.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C621' CURVES data:'C621' + - pos 16.000, -4.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C622' CURVES data:'C622' + - pos 16.000, -3.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C623' CURVES data:'C623' + - pos 16.000, -2.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C630' CURVES data:'C630' + - pos 16.000, 0.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C631' CURVES data:'C631' + - pos 16.000, 1.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C632' CURVES data:'C632' + - pos 16.000, 2.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C633' CURVES data:'C633' + - pos 16.000, 3.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C640' CURVES data:'C640' + - pos 16.000, 5.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C641' CURVES data:'C641' + - pos 16.000, 6.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C642' CURVES data:'C642' + - pos 16.000, 7.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'C643' CURVES data:'C643' + - pos 16.000, 8.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC220' CURVES data:'NC220' + - pos -12.000, -5.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC221' CURVES data:'NC221' + - pos -12.000, -4.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC222' CURVES data:'NC222' + - pos -12.000, -3.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC223' CURVES data:'NC223' + - pos -12.000, -2.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC320' CURVES data:'NC320' + - pos -9.000, -5.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC321' CURVES data:'NC321' + - pos -9.000, -4.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC322' CURVES data:'NC322' + - pos -9.000, -3.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC323' CURVES data:'NC323' + - pos -9.000, -2.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC330' CURVES data:'NC330' + - pos -9.000, 0.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC331' CURVES data:'NC331' + - pos -9.000, 1.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC332' CURVES data:'NC332' + - pos -9.000, 2.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC333' CURVES data:'NC333' + - pos -9.000, 3.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC420' CURVES data:'NC420' + - pos -6.000, -5.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC421' CURVES data:'NC421' + - pos -6.000, -4.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC422' CURVES data:'NC422' + - pos -6.000, -3.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC423' CURVES data:'NC423' + - pos -6.000, -2.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC430' CURVES data:'NC430' + - pos -6.000, 0.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC431' CURVES data:'NC431' + - pos -6.000, 1.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC432' CURVES data:'NC432' + - pos -6.000, 2.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC433' CURVES data:'NC433' + - pos -6.000, 3.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC440' CURVES data:'NC440' + - pos -6.000, 5.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC441' CURVES data:'NC441' + - pos -6.000, 6.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC442' CURVES data:'NC442' + - pos -6.000, 7.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC443' CURVES data:'NC443' + - pos -6.000, 8.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC520' CURVES data:'NC520' + - pos -3.000, -5.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC521' CURVES data:'NC521' + - pos -3.000, -4.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC522' CURVES data:'NC522' + - pos -3.000, -3.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC523' CURVES data:'NC523' + - pos -3.000, -2.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC530' CURVES data:'NC530' + - pos -3.000, 0.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC531' CURVES data:'NC531' + - pos -3.000, 1.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC532' CURVES data:'NC532' + - pos -3.000, 2.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC533' CURVES data:'NC533' + - pos -3.000, 3.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC540' CURVES data:'NC540' + - pos -3.000, 5.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC541' CURVES data:'NC541' + - pos -3.000, 6.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC542' CURVES data:'NC542' + - pos -3.000, 7.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC543' CURVES data:'NC543' + - pos -3.000, 8.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC620' CURVES data:'NC620' + - pos 0.000, -5.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC621' CURVES data:'NC621' + - pos 0.000, -4.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC622' CURVES data:'NC622' + - pos 0.000, -3.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC623' CURVES data:'NC623' + - pos 0.000, -2.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC630' CURVES data:'NC630' + - pos 0.000, 0.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC631' CURVES data:'NC631' + - pos 0.000, 1.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC632' CURVES data:'NC632' + - pos 0.000, 2.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC633' CURVES data:'NC633' + - pos 0.000, 3.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC640' CURVES data:'NC640' + - pos 0.000, 5.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC641' CURVES data:'NC641' + - pos 0.000, 6.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC642' CURVES data:'NC642' + - pos 0.000, 7.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 +- Obj 'NC643' CURVES data:'NC643' + - pos 0.000, 8.000, 0.000 + - rot 0.000, 0.000, 0.000 (XYZ) + - scl 1.000, 1.000, 1.000 + diff --git a/tests/python/bl_usd_export_test.py b/tests/python/bl_usd_export_test.py index e3b30d454e7..72212fb017b 100644 --- a/tests/python/bl_usd_export_test.py +++ b/tests/python/bl_usd_export_test.py @@ -895,9 +895,10 @@ class USDExportTest(AbstractUSDTest): self.assertEqual(self.round_vector(usd_extent[0]), extent[0]) self.assertEqual(self.round_vector(usd_extent[1]), extent[1]) - def check_nurbs_curve(prim, cyclic, orders, vert_counts, knots_count, extent): + def check_nurbs_curve(prim, cyclic, orders, vert_counts, weights, knots_count, extent): self.assertEqual(prim.GetOrderAttr().Get(), orders) self.assertEqual(prim.GetCurveVertexCountsAttr().Get(), vert_counts) + self.assertEqual(self.round_vector(prim.GetPointWeightsAttr().Get()), weights) self.assertEqual(prim.GetWidthsInterpolation(), "vertex") knots = prim.GetKnotsAttr().Get() usd_extent = prim.GetExtentAttr().Get() @@ -936,11 +937,14 @@ class USDExportTest(AbstractUSDTest): # Contains 2 NURBS curves curve = UsdGeom.NurbsCurves(stage.GetPrimAtPath("/root/NurbsCurve/NurbsCurve")) - check_nurbs_curve(curve, False, [4, 4], [6, 6], 10, [[-1.75, -2.6891, -1.0117], [3.0896, 1.9583, 1.0293]]) + weights = [1] * 12 + check_nurbs_curve( + curve, False, [4, 4], [6, 6], weights, 10, [[-1.75, -2.6891, -1.0117], [3.0896, 1.9583, 1.0293]]) # Contains 1 NURBS curve curve = UsdGeom.NurbsCurves(stage.GetPrimAtPath("/root/NurbsCircle/NurbsCircle")) - check_nurbs_curve(curve, True, [3], [8], 13, [[-2.0, -2.0, -1.0], [2.0, 2.0, 1.0]]) + weights = self.round_vector([1, math.sqrt(2) / 2] * 5) + check_nurbs_curve(curve, True, [3], [10], weights, 13, [[-2, -2, -1], [2, 2, 1]]) def test_export_animation(self): bpy.ops.wm.open_mainfile(filepath=str(self.testdir / "usd_anim_test.blend")) diff --git a/tests/python/bl_usd_import_test.py b/tests/python/bl_usd_import_test.py index a13746bd6b3..ba7e53871a3 100644 --- a/tests/python/bl_usd_import_test.py +++ b/tests/python/bl_usd_import_test.py @@ -2018,9 +2018,23 @@ class USDImportComparisonTest(unittest.TestCase): from modules import io_report report = io_report.Report("USD Import", self.output_dir, comparisondir, comparisondir.joinpath("reference")) + io_report.Report.context_lines = 8 + + bpy.utils.register_class(CompareTestSupportHook) for input_file in input_files: - with self.subTest(pathlib.Path(input_file).stem): + input_file_path = pathlib.Path(input_file) + + io_report.Report.side_to_print_single_line = 5 + io_report.Report.side_to_print_multi_line = 3 + + CompareTestSupportHook.reset_config() + if input_file_path.name in ("nurbs-gen-single.usda", "nurbs-gen-multiple.usda", "nurbs-custom.usda"): + CompareTestSupportHook.do_curve_rename = True + io_report.Report.side_to_print_single_line = 10 + io_report.Report.side_to_print_multi_line = 10 + + with self.subTest(input_file_path.stem): bpy.ops.wm.open_mainfile(filepath=str(self.testdir / "empty.blend")) ok = report.import_and_check( input_file, lambda filepath, params: bpy.ops.wm.usd_import( @@ -2028,9 +2042,32 @@ class USDImportComparisonTest(unittest.TestCase): if not ok: self.fail(f"{input_file.stem} import result does not match expectations") + bpy.utils.unregister_class(CompareTestSupportHook) report.finish("io_usd_import") +class CompareTestSupportHook(bpy.types.USDHook): + bl_idname = "CompareTestSupportHook" + bl_label = "Support some Comparison " + + do_curve_rename = False + + @staticmethod + def reset_config(): + CompareTestSupportHook.do_curve_rename = False + + @staticmethod + def on_import(context): + prim_map = context.get_prim_map() + + if CompareTestSupportHook.do_curve_rename: + for prim_path, objects in prim_map.items(): + if isinstance(objects[0], bpy.types.Object): + objects[0].name = prim_path.name + elif isinstance(objects[0], bpy.types.Curves): + objects[0].name = prim_path.GetParentPath().name + + class GetPrimMapUsdImportHook(bpy.types.USDHook): bl_idname = "get_prim_map_usd_import_hook" bl_label = "Get Prim Map Usd Import Hook"