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"