From 45803fb2d7e07cbca598a983467f1a43f4464163 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Thu, 24 Dec 2020 11:59:30 +0000 Subject: [PATCH] Extern : - C3d aggiornamento delle librerie. --- C3d/Include/action.h | 53 +- C3d/Include/action_analysis.h | 30 +- C3d/Include/action_b_shaper.h | 4 +- C3d/Include/action_curve.h | 59 +- C3d/Include/action_curve3d.h | 55 +- C3d/Include/action_mesh.h | 4 +- C3d/Include/action_phantom.h | 15 +- C3d/Include/action_point.h | 14 +- C3d/Include/action_sheet.h | 70 +- C3d/Include/action_shell.h | 28 +- C3d/Include/action_solid.h | 38 +- C3d/Include/action_surface.h | 4 +- C3d/Include/action_surface_curve.h | 226 +- C3d/Include/alg_base.h | 6 +- C3d/Include/alg_curve_delete_part.h | 16 +- C3d/Include/alg_dimension.h | 2 +- C3d/Include/alg_draw.h | 4 +- C3d/Include/alg_indicator.h | 18 +- C3d/Include/alg_mesh_to_brep.h | 4 +- C3d/Include/alg_nurbs_conic.h | 48 +- C3d/Include/alg_polyline.h | 14 +- C3d/Include/assembly.h | 22 +- C3d/Include/assisting_item.h | 8 +- C3d/Include/attr_color.h | 875 ++-- C3d/Include/attr_common_attribute.h | 22 +- C3d/Include/attr_dencity.h | 6 +- C3d/Include/attr_elementary_attribute.h | 10 +- C3d/Include/attr_flange_attribute.h | 10 +- C3d/Include/attr_geometric_attribute.h | 10 +- C3d/Include/attr_identifier.h | 18 +- C3d/Include/attr_product.h | 14 +- C3d/Include/attr_selected.h | 6 +- C3d/Include/attr_stamprib_attribute.h | 10 +- C3d/Include/attr_user_attribute.h | 34 +- C3d/Include/attribute.h | 10 +- C3d/Include/attribute_container.h | 21 +- C3d/Include/cdet_data.h | 31 +- C3d/Include/cdet_utility.h | 70 +- C3d/Include/check_geometry.h | 76 +- C3d/Include/collection.h | 8 +- C3d/Include/constraint.h | 6 +- C3d/Include/contour_graph.h | 20 +- C3d/Include/conv_annotation_item.h | 1756 ++++---- C3d/Include/conv_binary_object.h | 46 +- C3d/Include/conv_exchange_settings.h | 1117 ++--- C3d/Include/conv_model_document.h | 1148 ++--- C3d/Include/conv_model_exchange.h | 2296 +++++----- C3d/Include/conv_plugin_import.h | 827 ++++ C3d/Include/conv_predefined.h | 300 +- C3d/Include/conv_requestor.h | 70 +- C3d/Include/conv_topo_mesh.h | 180 +- C3d/Include/cr_attribute_provider.h | 12 +- C3d/Include/cr_boolean_solid.h | 12 +- C3d/Include/cr_chamfer_solid.h | 4 +- C3d/Include/cr_connecting_curve.h | 20 +- C3d/Include/cr_cutting_solid.h | 10 +- C3d/Include/cr_detach_solid.h | 12 +- C3d/Include/cr_displace_creator.h | 214 + C3d/Include/cr_draft_solid.h | 14 +- C3d/Include/cr_duplication_solid.h | 10 +- C3d/Include/cr_elementary_solid.h | 86 +- C3d/Include/cr_evolution_solid.h | 10 +- C3d/Include/cr_extension_shell.h | 10 +- C3d/Include/cr_extrusion_solid.h | 14 +- C3d/Include/cr_fillet_solid.h | 10 +- C3d/Include/cr_hole_solid.h | 10 +- C3d/Include/cr_intersection_curve.h | 10 +- C3d/Include/cr_join_shell.h | 10 +- C3d/Include/cr_lofted_solid.h | 10 +- C3d/Include/cr_median_shell.h | 12 +- C3d/Include/cr_mesh_shell.h | 10 +- C3d/Include/cr_modified_nurbs_.h | 20 +- C3d/Include/cr_modified_solid.h | 10 +- C3d/Include/cr_nurbs3d.h | 60 +- C3d/Include/cr_nurbs_block_solid.h | 10 +- C3d/Include/cr_nurbs_surfaces_shell.h | 38 +- C3d/Include/cr_nurbs_surfaces_solid.h | 12 +- C3d/Include/cr_offset_curve.h | 137 +- C3d/Include/cr_patch_creator.h | 24 +- C3d/Include/cr_projection_curve.h | 10 +- C3d/Include/cr_revolution_solid.h | 10 +- C3d/Include/cr_rib_solid.h | 10 +- C3d/Include/cr_ruled_shell.h | 10 +- C3d/Include/cr_section_shell.h | 24 +- C3d/Include/cr_sheet_bend_any_solid.h | 10 +- C3d/Include/cr_sheet_bend_by_edge_solid.h | 10 +- C3d/Include/cr_sheet_bend_over_seg_solid.h | 10 +- C3d/Include/cr_sheet_bend_unbend_solid.h | 12 +- C3d/Include/cr_sheet_builder_solid.h | 226 +- C3d/Include/cr_sheet_closed_corner_solid.h | 10 +- C3d/Include/cr_sheet_joint_bend_solid.h | 10 +- C3d/Include/cr_sheet_metal_solid.h | 10 +- C3d/Include/cr_sheet_restored_edges_solid.h | 10 +- C3d/Include/cr_sheet_simplified_flat_solid.h | 10 +- C3d/Include/cr_sheet_union_solid.h | 10 +- C3d/Include/cr_simple_creator.h | 28 +- C3d/Include/cr_smooth_solid.h | 10 +- C3d/Include/cr_split_data.h | 54 +- C3d/Include/cr_split_shell.h | 10 +- C3d/Include/cr_stamp_bead_solid.h | 10 +- C3d/Include/cr_stamp_jalousie_solid.h | 10 +- C3d/Include/cr_stamp_jog_solid.h | 10 +- C3d/Include/cr_stamp_remove_solid.h | 10 +- C3d/Include/cr_stamp_rib_solid.h | 10 +- C3d/Include/cr_stamp_ruled_solid.h | 10 +- C3d/Include/cr_stamp_solid.h | 10 +- C3d/Include/cr_stamp_spherical_solid.h | 10 +- C3d/Include/cr_stamp_user_solid.h | 75 +- C3d/Include/cr_stitch_solid.h | 18 +- C3d/Include/cr_surface_spline.h | 53 +- C3d/Include/cr_swept_solid.h | 10 +- C3d/Include/cr_symmetry_solid.h | 26 +- C3d/Include/cr_thin_sheet.h | 51 +- C3d/Include/cr_thin_shell_solid.h | 10 +- C3d/Include/cr_transformed_solid.h | 10 +- C3d/Include/cr_truncated_shell.h | 42 +- C3d/Include/cr_union_solid.h | 20 +- C3d/Include/creator.h | 44 +- C3d/Include/creator_transaction.h | 20 +- C3d/Include/cur_arc.h | 20 +- C3d/Include/cur_arc3d.h | 24 +- C3d/Include/cur_b_spline.h | 10 +- C3d/Include/cur_bezier.h | 12 +- C3d/Include/cur_bezier3d.h | 18 +- C3d/Include/cur_bridge3d.h | 10 +- C3d/Include/cur_character_curve.h | 10 +- C3d/Include/cur_character_curve3d.h | 20 +- C3d/Include/cur_cone_spiral.h | 10 +- C3d/Include/cur_contour.h | 22 +- C3d/Include/cur_contour3d.h | 32 +- C3d/Include/cur_contour_on_plane.h | 14 +- C3d/Include/cur_contour_on_surface.h | 31 +- C3d/Include/cur_contour_with_breaks.h | 12 +- C3d/Include/cur_cosinusoid.h | 16 +- C3d/Include/cur_crooked_spiral.h | 6 +- C3d/Include/cur_cubic_spline.h | 12 +- C3d/Include/cur_cubic_spline3d.h | 20 +- C3d/Include/cur_curve_spiral.h | 4 +- C3d/Include/cur_hermit.h | 17 +- C3d/Include/cur_hermit3d.h | 27 +- C3d/Include/cur_line.h | 19 +- C3d/Include/cur_line3d.h | 20 +- C3d/Include/cur_line_segment.h | 18 +- C3d/Include/cur_line_segment3d.h | 20 +- C3d/Include/cur_nurbs.h | 139 +- C3d/Include/cur_nurbs3d.h | 212 +- C3d/Include/cur_nurbs_vector.h | 12 +- C3d/Include/cur_nurbs_vector3d.h | 2 +- C3d/Include/cur_offset_curve.h | 14 +- C3d/Include/cur_offset_curve3d.h | 51 +- C3d/Include/cur_plane_curve.h | 28 +- C3d/Include/cur_point_curve.h | 12 +- C3d/Include/cur_polycurve.h | 19 +- C3d/Include/cur_polycurve3d.h | 25 +- C3d/Include/cur_polyline.h | 16 +- C3d/Include/cur_polyline3d.h | 22 +- C3d/Include/cur_projection_curve.h | 30 +- C3d/Include/cur_reparam_curve.h | 18 +- C3d/Include/cur_reparam_curve3d.h | 24 +- C3d/Include/cur_silhouette_curve.h | 26 +- C3d/Include/cur_spiral.h | 12 +- C3d/Include/cur_surface_curve.h | 30 +- C3d/Include/cur_surface_intersection.h | 125 +- C3d/Include/cur_trimmed_curve.h | 12 +- C3d/Include/cur_trimmed_curve3d.h | 22 +- C3d/Include/curve.h | 56 +- C3d/Include/curve3d.h | 94 +- C3d/Include/dxf_converter.h | 924 ++-- C3d/Include/dxf_data.h | 676 +-- C3d/Include/func_analytical_function.h | 4 +- C3d/Include/func_const_function.h | 2 +- C3d/Include/func_cubic_function.h | 4 +- C3d/Include/func_cubic_spline_function.h | 2 +- C3d/Include/func_line_function.h | 2 +- C3d/Include/func_mono_smooth_function.h | 159 + C3d/Include/func_power_function.h | 2 +- C3d/Include/func_serve_function.h | 18 +- C3d/Include/func_sinus_function.h | 2 +- C3d/Include/function.h | 9 +- C3d/Include/gce_api.h | 3852 ++++++++--------- C3d/Include/gce_callback.h | 190 +- C3d/Include/gce_geom.h | 636 ++- C3d/Include/gce_types.h | 1368 +++--- C3d/Include/gcm_api.h | 2170 +++++----- C3d/Include/gcm_constraint.h | 18 +- C3d/Include/gcm_geom.h | 24 +- C3d/Include/gcm_mates_generator.h | 620 +-- C3d/Include/gcm_res_code.h | 313 +- C3d/Include/gcm_types.h | 1075 ++--- C3d/Include/generic_utility.h | 2386 +++++----- C3d/Include/graph_algorithms.h | 2060 ++++----- C3d/Include/iges_basic.h | 706 +-- C3d/Include/iges_structure.h | 1070 ++--- C3d/Include/iges_write.h | 431 +- C3d/Include/instance.h | 14 +- C3d/Include/io_buffer.h | 10 +- C3d/Include/io_memory_buffer.h | 14 +- C3d/Include/io_tape.h | 74 +- C3d/Include/io_tree.h | 12 +- C3d/Include/item_registrator.h | 6 +- C3d/Include/legend.h | 8 +- C3d/Include/lump.h | 6 +- C3d/Include/map_create.h | 30 +- C3d/Include/map_implementation.h | 4 +- C3d/Include/map_lump.h | 88 +- C3d/Include/map_section.h | 10 +- C3d/Include/map_section_complex.h | 7 +- C3d/Include/map_vestige.h | 82 +- C3d/Include/marker.h | 8 +- C3d/Include/math_define.h | 92 +- C3d/Include/math_version.h | 11 +- C3d/Include/mb_class_traits.h | 10 +- C3d/Include/mb_cross_point.h | 2 +- C3d/Include/mb_cube_tree.h | 172 +- C3d/Include/mb_data.h | 75 +- C3d/Include/mb_dimension.h | 24 +- C3d/Include/mb_homogeneous.h | 4 +- C3d/Include/mb_matrix3d.h | 14 +- C3d/Include/mb_matrixnn.h | 184 +- C3d/Include/mb_nurbs_function.h | 290 +- C3d/Include/mb_operation_result.h | 32 +- C3d/Include/mb_placement3d.h | 4 +- C3d/Include/mb_point_mating.h | 217 +- C3d/Include/mb_property.h | 519 ++- C3d/Include/mb_property_title.h | 110 +- C3d/Include/mb_rough.h | 10 +- C3d/Include/mb_symbol.h | 16 +- C3d/Include/mb_thread.h | 36 +- C3d/Include/mb_variables.h | 98 +- C3d/Include/mesh.h | 34 +- C3d/Include/mesh_grid.h | 16 +- C3d/Include/mesh_plane_grid.h | 12 +- C3d/Include/mesh_polygon.h | 4 +- C3d/Include/mesh_primitive.h | 34 +- C3d/Include/mip_curve_properties.h | 12 +- C3d/Include/mip_solid_mass_inertia.h | 62 +- C3d/Include/model.h | 18 +- C3d/Include/model_item.h | 1217 +++--- C3d/Include/model_tree.h | 16 +- C3d/Include/model_tree_data.h | 8 +- C3d/Include/mt_ref_item.h | 129 +- C3d/Include/multiline.h | 16 +- C3d/Include/name_check.h | 12 +- C3d/Include/name_contour_tree.h | 8 +- C3d/Include/name_item.h | 42 +- C3d/Include/op_curve_parameter.h | 111 + C3d/Include/op_duplication_parameter.h | 26 +- C3d/Include/op_shell_parameter.h | 162 +- C3d/Include/op_swept_parameter.h | 4085 +++++++++--------- C3d/Include/pars_equation_tree.h | 12 +- C3d/Include/pars_user_function.h | 2 +- C3d/Include/part_solid.h | 2 +- C3d/Include/plane_instance.h | 22 +- C3d/Include/plane_item.h | 10 +- C3d/Include/point3d.h | 8 +- C3d/Include/point_frame.h | 14 +- C3d/Include/position_data.h | 2 +- C3d/Include/reference_item.h | 140 +- C3d/Include/region.h | 14 +- C3d/Include/sheet_metal_param.h | 266 +- C3d/Include/solid.h | 29 +- C3d/Include/space_instance.h | 8 +- C3d/Include/space_item.h | 8 +- C3d/Include/surf_chamfer_surface.h | 10 +- C3d/Include/surf_channel_surface.h | 2 +- C3d/Include/surf_cone_surface.h | 8 +- C3d/Include/surf_coons_surface.h | 219 +- C3d/Include/surf_coons_surface_.h | 96 +- C3d/Include/surf_corner_surface.h | 10 +- C3d/Include/surf_cover_surface.h | 740 ++-- C3d/Include/surf_curve_bounded_surface.h | 24 +- C3d/Include/surf_cylinder_surface.h | 8 +- C3d/Include/surf_elementary_surface.h | 12 +- C3d/Include/surf_elevation_surface.h | 20 +- C3d/Include/surf_evolution_surface.h | 10 +- C3d/Include/surf_exaction_surface.h | 10 +- C3d/Include/surf_expansion_surface.h | 18 +- C3d/Include/surf_exploration_surface.h | 28 +- C3d/Include/surf_extrusion_surface.h | 12 +- C3d/Include/surf_fillet_surface.h | 12 +- C3d/Include/surf_gregory_surface.h | 10 +- C3d/Include/surf_grid_surface.h | 14 +- C3d/Include/surf_join_surface.h | 8 +- C3d/Include/surf_lofted_surface.h | 22 +- C3d/Include/surf_mesh_surface.h | 32 +- C3d/Include/surf_offset_surface.h | 16 +- C3d/Include/surf_plane.h | 14 +- C3d/Include/surf_polysurface.h | 8 +- C3d/Include/surf_revolution_surface.h | 12 +- C3d/Include/surf_ruled_surface.h | 12 +- C3d/Include/surf_section_surface.h | 130 +- C3d/Include/surf_sector_surface.h | 10 +- C3d/Include/surf_smooth_surface.h | 16 +- C3d/Include/surf_sphere_surface.h | 8 +- C3d/Include/surf_spine.h | 22 +- C3d/Include/surf_spiral_surface.h | 12 +- C3d/Include/surf_spline_surface.h | 18 +- C3d/Include/surf_swept_surface.h | 10 +- C3d/Include/surf_tessellation.h | 8 +- C3d/Include/surf_torus_surface.h | 8 +- C3d/Include/surface.h | 30 +- C3d/Include/system_atomic.h | 5 +- C3d/Include/system_cpp_standard.h | 13 +- C3d/Include/system_types.h | 2 +- C3d/Include/templ_array2.h | 18 +- C3d/Include/templ_balance_tree.h | 52 +- C3d/Include/templ_c_array.h | 12 +- C3d/Include/templ_csp_array.h | 8 +- C3d/Include/templ_css_array.h | 16 +- C3d/Include/templ_dptr.h | 27 +- C3d/Include/templ_fdp_array.h | 26 +- C3d/Include/templ_fdp_array_rw.h | 8 +- C3d/Include/templ_ifc_array.h | 16 +- C3d/Include/templ_im_array.h | 4 +- C3d/Include/templ_iterator.h | 4 +- C3d/Include/templ_kdtree.h | 2 +- C3d/Include/templ_lis_array.h | 4 +- C3d/Include/templ_multimap.h | 12 +- C3d/Include/templ_p_array.h | 26 +- C3d/Include/templ_p_array_rw.h | 6 +- C3d/Include/templ_pointer.h | 33 +- C3d/Include/templ_psrt_array.h | 38 +- C3d/Include/templ_rp_array.h | 6 +- C3d/Include/templ_rp_array_rw.h | 4 +- C3d/Include/templ_rp_stack.h | 6 +- C3d/Include/templ_rw_operator.h | 6 +- C3d/Include/templ_s_array.h | 30 +- C3d/Include/templ_s_array_rw.h | 4 +- C3d/Include/templ_s_list.h | 158 +- C3d/Include/templ_s_queue.h | 18 +- C3d/Include/templ_sfdp_array.h | 40 +- C3d/Include/templ_sfp_array.h | 12 +- C3d/Include/templ_sp_array.h | 12 +- C3d/Include/templ_sparse_array2.h | 614 +++ C3d/Include/templ_sptr.h | 34 +- C3d/Include/templ_stack.h | 2 +- C3d/Include/templ_t_list.h | 2 +- C3d/Include/tool_enabler.h | 16 +- C3d/Include/tool_memory_debug.h | 4 +- C3d/Include/tool_multithreading.h | 90 +- C3d/Include/tool_mutex.h | 8 +- C3d/Include/tool_quick_sort.h | 44 +- C3d/Include/tool_string_util.h | 24 +- C3d/Include/tool_time_test.h | 2 +- C3d/Include/topology.h | 142 +- C3d/Include/topology_faceset.h | 357 +- C3d/Include/topology_item.h | 24 +- C3d/Include/tri_face.h | 10 +- C3d/Include/tri_lump.h | 20 +- C3d/Include/wire_frame.h | 904 ++-- C3d/Lib/x32/Debug/c3d.lib | Bin 8265890 -> 8357876 bytes C3d/Lib/x32/Release/c3d.lib | Bin 9151268 -> 9258066 bytes C3d/Lib/x64/Debug/c3d.lib | Bin 8525260 -> 8619458 bytes C3d/Lib/x64/Release/c3d.lib | Bin 9440438 -> 9549928 bytes 354 files changed, 24318 insertions(+), 20771 deletions(-) create mode 100644 C3d/Include/conv_plugin_import.h create mode 100644 C3d/Include/cr_displace_creator.h create mode 100644 C3d/Include/func_mono_smooth_function.h create mode 100644 C3d/Include/op_curve_parameter.h create mode 100644 C3d/Include/templ_sparse_array2.h diff --git a/C3d/Include/action.h b/C3d/Include/action.h index 6d499c1..3efbb30 100644 --- a/C3d/Include/action.h +++ b/C3d/Include/action.h @@ -77,7 +77,7 @@ MATH_FUNC (bool) IsMultiShell( const MbFaceShell * shell, bool checkNesting = tr \ingroup Algorithms_3D */ // --- -MATH_FUNC (size_t) DetachShells( MbFaceShell & shell, RPArray & parts, bool sort, c3d::IndicesVector * partIndices = C3D_NULL_PTR ); +MATH_FUNC (size_t) DetachShells( MbFaceShell & shell, RPArray & parts, bool sort, c3d::IndicesVector * partIndices = c3d_null ); //------------------------------------------------------------------------------ @@ -102,7 +102,7 @@ MATH_FUNC (size_t) DetachShells( MbFaceShell & shell, RPArray & par \ingroup Algorithms_3D */ // --- -MATH_FUNC (size_t) DetachShells( MbFaceShell & shell, c3d::ShellsVector & parts, bool sort, c3d::IndicesVector * partIndices = C3D_NULL_PTR ); +MATH_FUNC (size_t) DetachShells( MbFaceShell & shell, c3d::ShellsVector & parts, bool sort, c3d::IndicesVector * partIndices = c3d_null ); //------------------------------------------------------------------------------ @@ -127,7 +127,7 @@ MATH_FUNC (size_t) DetachShells( MbFaceShell & shell, c3d::ShellsVector & parts, \ingroup Algorithms_3D */ // --- -MATH_FUNC (size_t) DetachShells( MbFaceShell & shell, c3d::ShellsSPtrVector & parts, bool sort, c3d::IndicesVector * partIndices = C3D_NULL_PTR ); +MATH_FUNC (size_t) DetachShells( MbFaceShell & shell, c3d::ShellsSPtrVector & parts, bool sort, c3d::IndicesVector * partIndices = c3d_null ); //------------------------------------------------------------------------------ @@ -151,15 +151,15 @@ MATH_FUNC (size_t) DetachShells( MbFaceShell & shell, c3d::ShellsSPtrVector & pa template size_t CreateShells( const MbFaceShell & shell, ShellsVector & parts, bool sort = true ) { - c3d::ShellSPtr outer( new MbFaceShell( shell ) ); // new shell on the same faces (новая оболочка с теми же гранями) - - c3d::IndicesVector * partIndices = C3D_NULL_PTR; - - if ( ::DetachShells( *outer, parts, sort, partIndices ) > 0 ) { - parts.push_back( outer ); - ::DetachItem( outer ); - } - + c3d::ShellSPtr outer( new MbFaceShell( shell ) ); // new shell on the same faces (новая оболочка с теми же гранями) + + c3d::IndicesVector * partIndices = c3d_null; + + if ( ::DetachShells( *outer, parts, sort, partIndices ) > 0 ) { + parts.push_back( outer ); + ::DetachItem( outer ); + } + return parts.size(); } @@ -251,21 +251,6 @@ MATH_FUNC (bool) UnifyOwnComplanarFaces( MbFaceShell & shell, bool checkBaseSurfaces ); -//------------------------------------------------------------------------------ -/** \brief \ru Найти и устранить общие поверхности-подложки в гранях. - \en Find and eliminate common underlying surfaces of faces \~ - \details \ru Найти и устранить общие поверхности-подложки в гранях оболочки. \n - \en Find and eliminate common underlying surfaces of a shell faces. \n \~ - \param[in] shell - \ru Модифицируемая оболочка. - \en A shell to be modified. \~ - \return \ru Возвращает true, если оболочка была изменена. - \en Returns 'true' if the shell has been modified. \~ - \ingroup Algorithms_3D -*/ -// --- -MATH_FUNC (bool) CheckIdenticalBaseSufaces( MbFaceShell & shell ); - - //------------------------------------------------------------------------------ /** \brief \ru Захватить грани одним из способов. \en Capture the faces in one of proposed methods. \~ @@ -1254,9 +1239,9 @@ MATH_FUNC (bool) FindTouchedFaces( const MbSolid & solid1, \en To find contacted faces of bodies. \~ \details \ru Разбить контактирующие грани тел, выделив общие области с конечной площадью перекрытия в отдельные грани. \~ \en To find contacted faces of bodies and build a finite overlap contacted area as faces. \~ - \param[in/out] solid1 - \ru Первое тело. + \param[in,out] solid1 - \ru Первое тело. \en The first solid. \~ - \param[in/out] solid2 - \ru Второе тело. + \param[in,out] solid2 - \ru Второе тело. \en The second solid. \~ \param[in] precision - \ru Точность операции. \en The precision of operation. \~ @@ -1344,13 +1329,13 @@ c3d::SolidSPtr GetTransformedSolid( c3d::SolidSPtr & solid, MbeCopyMode & copyMo { c3d::SolidSPtr resSolid( solid ); - if ( (resSolid != NULL) && !matr.IsSingle() ) { + if ( (resSolid != c3d_null) && !matr.IsSingle() ) { MbSNameMaker n( transformedMainName, MbSNameMaker::i_SideNone, 0 ); - MbSolid * resSolidPtr = NULL; + MbSolid * resSolidPtr = c3d_null; TransformValues tv( matr ); ::TransformedSolid( *solid, cm_Copy, tv, n, resSolidPtr ); - if ( resSolidPtr != NULL ) { + if ( resSolidPtr != c3d_null ) { resSolid = resSolidPtr; copyMode = cm_Same; } @@ -1374,10 +1359,10 @@ c3d::SolidSPtr GetTransformedSolid( c3d::SolidSPtr & solid, MbeCopyMode & copyMo */ // --- template -SPtr GetTransformedItem( SPtr & item, const MbMatrix3D & matr, MbRegDuplicate * iDupReg = NULL, MbRegTransform * iTransReg = NULL ) +SPtr GetTransformedItem( SPtr & item, const MbMatrix3D & matr, MbRegDuplicate * iDupReg = c3d_null, MbRegTransform * iTransReg = c3d_null ) { SPtr resItem( item ); - if ( (resItem != NULL) && !matr.IsSingle() ) { + if ( (resItem != c3d_null) && !matr.IsSingle() ) { resItem = static_cast( &item->Duplicate( iDupReg ) ); resItem->Transform( matr, iTransReg ); } diff --git a/C3d/Include/action_analysis.h b/C3d/Include/action_analysis.h index 068ba44..856c287 100644 --- a/C3d/Include/action_analysis.h +++ b/C3d/Include/action_analysis.h @@ -59,7 +59,7 @@ typedef void( *SurfaceFunction )( const MbSurface & surf, // Поверхно MATH_FUNC( void ) MinSurfaceCurvature( const MbSurface & surf, const MbCartPoint & pnt, double & func, - MbVector * der = NULL ); + MbVector * der = c3d_null ); //------------------------------------------------------------------------------ @@ -80,7 +80,7 @@ MATH_FUNC( void ) MinSurfaceCurvature( const MbSurface & surf, MATH_FUNC( void ) MaxSurfaceCurvature( const MbSurface & surf, const MbCartPoint & pnt, double & func, - MbVector * der = NULL ); + MbVector * der = c3d_null ); //------------------------------------------------------------------------------ @@ -101,7 +101,7 @@ MATH_FUNC( void ) MaxSurfaceCurvature( const MbSurface & surf, MATH_FUNC( void ) GaussCurvature( const MbSurface & surf, const MbCartPoint & pnt, double & func, - MbVector * der = NULL ); + MbVector * der = c3d_null ); //------------------------------------------------------------------------------ @@ -122,7 +122,7 @@ MATH_FUNC( void ) GaussCurvature( const MbSurface & surf, MATH_FUNC( void ) MeanCurvature( const MbSurface & surf, const MbCartPoint & pnt, double & func, - MbVector * der = NULL ); + MbVector * der = c3d_null ); //------------------------------------------------------------------------------ @@ -143,7 +143,7 @@ MATH_FUNC( void ) MeanCurvature( const MbSurface & surf, MATH_FUNC( void ) UNormalCurvature( const MbSurface & surf, const MbCartPoint & pnt, double & func, - MbVector * der = NULL ); + MbVector * der = c3d_null ); //------------------------------------------------------------------------------ @@ -164,7 +164,7 @@ MATH_FUNC( void ) UNormalCurvature( const MbSurface & surf, MATH_FUNC( void ) VNormalCurvature( const MbSurface & surf, const MbCartPoint & pnt, double & func, - MbVector * der = NULL ); + MbVector * der = c3d_null ); //------------------------------------------------------------------------------ @@ -172,8 +172,8 @@ MATH_FUNC( void ) VNormalCurvature( const MbSurface & surf, \en Find the points of the surface at which the selected curvature takes the largest in modulus values. \~ \details \ru Ищутся точки, в которых выбранная кривизна принимает на поверхности наибольшее положительное и наименьшее отрицательное значение. \en Looks for points at which the selected curvature takes on the surface the greatest positive and least negative value. \~ - \param[in] surf - \ru Исследуемая поверхность. - \en Test surface. \~ + \param[in] surface - \ru Исследуемая поверхность. + \en Test surface. \~ \param[in] func - \ru Функция расчета кривизны в точке. \en The function of calculating the curvature at a point. \~ \param[out] maxNegCurv - \ru Наибольшее по модулю отрицательное значение кривизны (0, если нет такого). @@ -241,8 +241,8 @@ MATH_FUNC( void ) FacesMinMaxCurvature( const RPArray & faces, \en Find the points on the surface at which the major normal curvatures take the largest values in the module. \~ \details \ru Ищутся точки на поверхности, в которых главные нормальные кривизны принимают наибольшее положительное и наименьшее отрицательное значение. \en Looks for points on the surface at which the major normal curvatures take the largest positive and smallest negative values. \~ - \param[in] surf - \ru Исследуемая поверхность. - \en Test surface. \~ + \param[in] surface - \ru Исследуемая поверхность. + \en Test surface. \~ \param[out] maxNegCurv - \ru Наибольшее по модулю отрицательное значение кривизны (0, если нет такого). \en The largest in modulus value negative curvature (0, if there is no such). \~ \param[out] maxNegLoc - \ru Точка, в которой кривизна принимает наибольшее по модулю отрицательное значение. @@ -321,7 +321,7 @@ MATH_FUNC( void ) FacesMinMaxCurvature( const RPArray & faces, */ MATH_FUNC( double ) CurveOrientedCurvature( const MbCurve3D & curve, double & param, - const MbVector3D * planeNorm = NULL ); + const MbVector3D * planeNorm = c3d_null ); //------------------------------------------------------------------------------ @@ -358,10 +358,10 @@ MATH_FUNC( void ) CurveMinMaxCurvature( const MbCurve3D & curve, double & maxParam, double & minCurv, double & minParam, - c3d::DoubleVector * bendPoints = NULL, - c3d::DoubleVector * maxPoints = NULL, - c3d::DoubleVector * minPoints = NULL, - c3d::DoublePairsVector * rapPoints = NULL ); + c3d::DoubleVector * bendPoints = c3d_null, + c3d::DoubleVector * maxPoints = c3d_null, + c3d::DoubleVector * minPoints = c3d_null, + c3d::DoublePairsVector * rapPoints = c3d_null ); //------------------------------------------------------------------------------ diff --git a/C3d/Include/action_b_shaper.h b/C3d/Include/action_b_shaper.h index 42be300..98bb480 100644 --- a/C3d/Include/action_b_shaper.h +++ b/C3d/Include/action_b_shaper.h @@ -341,8 +341,8 @@ public: To fit surface use corresponding methods SegmentMesh or FitSurfaceToSegment. \n \~ \param[in] idxSegment - \ru Индекс сегмента полигональной сетки. \en Index of a mesh segment. \~ - \return \ru Возвращает указатель на поверхность для сегмента, если поверхность определена, иначе - NULL. - \en Returns pointer to segment surface if it exists, else - NULL. \~ + \return \ru Возвращает указатель на поверхность для сегмента, если поверхность определена, иначе - c3d_null. + \en Returns pointer to segment surface if it exists, else - c3d_null. \~ \ingroup Polygonal_Objects */ virtual const MbSurface * GetSegmentSurface( size_t idxSegment ) const = 0; diff --git a/C3d/Include/action_curve.h b/C3d/Include/action_curve.h index 2e86ae0..3976d69 100644 --- a/C3d/Include/action_curve.h +++ b/C3d/Include/action_curve.h @@ -171,12 +171,14 @@ MATH_FUNC (MbResultType) Segment( const MbCartPoint & point1, */ //--- -MATH_FUNC( MbResultType ) Arc( MbeArcCreateWay createWay, - const MbCartPoint & center, - const std::vector & points, - double & a, double & b, double & c, - bool option, - MbCurve *& result ); +MATH_FUNC( MbResultType ) Arc( MbeArcCreateWay createWay, + const MbCartPoint & center, + const c3d::ParamPointsVector & points, + double & a, + double & b, + double & c, + bool option, + MbCurve *& result ); //------------------------------------------------------------------------------ /**\attention \ru Функция устарела. Вместо неё применять #Arc. @@ -185,11 +187,13 @@ MATH_FUNC( MbResultType ) Arc( MbeArcCreateWay createWay, */ // 2018 //--- -MATH_FUNC( MbResultType ) Arc( const MbCartPoint & centre, +MATH_FUNC( MbResultType ) Arc( const MbCartPoint & centre, const SArray & points, - bool curveClosed, double angle, - double & a, double & b, - MbCurve *& result ); + bool curveClosed, + double angle, + double & a, + double & b, + MbCurve *& result ); //------------------------------------------------------------------------------ @@ -225,8 +229,9 @@ MATH_FUNC( MbResultType ) Arc( const MbCartPoint & centre, */ // --- MATH_FUNC (MbResultType) SplineCurve( const SArray & pointList, - bool curveClosed, MbePlaneType curveType, - MbCurve *& result ); + bool curveClosed, + MbePlaneType curveType, + MbCurve *& result ); //------------------------------------------------------------------------------ @@ -256,9 +261,11 @@ MATH_FUNC (MbResultType) SplineCurve( const SArray & pointList, */ //--- MATH_FUNC (MbResultType) NurbsCurve( const SArray & pointList, - const SArray & weightList, size_t degree, - const SArray & knotList, bool curveClosed, - MbCurve *& result ); + const SArray & weightList, + size_t degree, + const SArray & knotList, + bool curveClosed, + MbCurve *& result ); //------------------------------------------------------------------------------ @@ -430,7 +437,7 @@ MATH_FUNC (MbCurve *) DuplicateCurve( const MbCurve & curve ); // --- MATH_FUNC (MbContour *) DuplicateContour( const MbContour & cntr, bool modifySegments, - MbSNameMaker * names = NULL ); + MbSNameMaker * names = c3d_null ); //------------------------------------------------------------------------------ @@ -694,12 +701,12 @@ MATH_FUNC (MbResultType) SurfaceBoundContour( const MbSurface & surface, or for contour pt_Contour if its first segment is of one of the listed types. \~ \param[in] segment - \ru Изменяемая кривая. \en The modified curve. \~ - \param[in] p1 - \ru Новая начальная точка. - \en A new start point. \~ + \param[in] p - \ru Новая начальная точка. + \en A new start point. \~ \ingroup Algorithms_2D */ // --- -MATH_FUNC (bool) ChangeFirstPoint( MbCurve * segment, const MbCartPoint & p1 ); +MATH_FUNC (bool) ChangeFirstPoint( MbCurve * segment, const MbCartPoint & p ); //------------------------------------------------------------------------------ @@ -717,23 +724,25 @@ MATH_FUNC (bool) ChangeFirstPoint( MbCurve * segment, const MbCartPoint & p1 ); or for contour pt_Contour if its last segment is of one of the listed types. \~ \param[in] segment - \ru Изменяемая кривая. \en The modified curve. \~ - \param[in] p1 - \ru Новая начальная точка. - \en A new start point. \~ + \param[in] p - \ru Новая начальная точка. + \en A new start point. \~ \ingroup Algorithms_2D */ // --- -MATH_FUNC (bool) ChangeLastPoint( MbCurve * segment, const MbCartPoint & p2 ); +MATH_FUNC (bool) ChangeLastPoint( MbCurve * segment, const MbCartPoint & p ); //------------------------------------------------------------------------------ /** \brief \ru Является ли кривая прямолинейной независимо от ее параметризации. - \en Whether the curve is like straight-line regardless of its parameterisation. \~ + \en Whether the curve is like straight-line regardless of its parameterization. \~ \details \ru Является ли кривая прямолинейной независимо от ее параметризации.\n - \en Whether the curve is like straight-line regardless of its parameterisation. \~ + \en Whether the curve is like straight-line regardless of its parameterization. \~ \param[in] curve - \ru Кривая. \en Curve. \~ \param[in] eps - \ru Точность. \en Accuracy. \~ + \return \ru Возвращает true, если кривая геометрически прямолинейна. + \en Returns true, if a curve is geometrically straight. \~ \ingroup Curve_Modeling */ // --- @@ -758,7 +767,7 @@ MATH_FUNC (bool) IsLikeStraightLine( const MbCurve & curve, double eps ); // --- MATH_FUNC( MbContour * ) DeleteDegenerateSegments( const MbContour & cntr, bool modifySegments, - MbSNameMaker * names = NULL ); + MbSNameMaker * names = c3d_null ); #endif // __ACTION_CURVE_H diff --git a/C3d/Include/action_curve3d.h b/C3d/Include/action_curve3d.h index fb759d4..39b4f53 100644 --- a/C3d/Include/action_curve3d.h +++ b/C3d/Include/action_curve3d.h @@ -56,7 +56,7 @@ struct MATH_CLASS EvolutionValues; // --- MATH_FUNC (MbResultType) Line( const MbCartPoint3D & point1, const MbCartPoint3D & point2, - MbCurve3D *& result ); + MbCurve3D *& result ); //------------------------------------------------------------------------------ @@ -77,7 +77,7 @@ MATH_FUNC (MbResultType) Line( const MbCartPoint3D & point1, // --- MATH_FUNC (MbResultType) Segment( const MbCartPoint3D & point1, const MbCartPoint3D & point2, - MbCurve3D *& result ); + MbCurve3D *& result ); //------------------------------------------------------------------------------ @@ -106,11 +106,13 @@ MATH_FUNC (MbResultType) Segment( const MbCartPoint3D & point1, \ingroup Curve3D_Modeling */ //--- -MATH_FUNC (MbResultType) Arc( const MbCartPoint3D & centre, +MATH_FUNC (MbResultType) Arc( const MbCartPoint3D & centre, const SArray & points, - bool curveClosed, double angle, - double & a, double & b, - MbCurve3D *& result ); + bool curveClosed, + double angle, + double & a, + double & b, + MbCurve3D *& result ); //------------------------------------------------------------------------------ @@ -146,9 +148,9 @@ MATH_FUNC (MbResultType) Arc( const MbCartPoint3D & centre, */ // --- MATH_FUNC (MbResultType) SplineCurve( const SArray & pointList, - bool curveClosed, - MbeSpaceType curveType, - MbCurve3D *& result ); + bool curveClosed, + MbeSpaceType curveType, + MbCurve3D *& result ); //------------------------------------------------------------------------------ @@ -178,9 +180,11 @@ MATH_FUNC (MbResultType) SplineCurve( const SArray & pointList, */ //--- MATH_FUNC (MbResultType) NurbsCurve( const SArray & pointList, - const SArray & weightList, size_t degree, - const SArray & knotList, bool curveClosed, - MbCurve3D *& result ); + const SArray & weightList, + size_t degree, + const SArray & knotList, + bool curveClosed, + MbCurve3D *& result ); //------------------------------------------------------------------------------ @@ -279,11 +283,11 @@ MATH_FUNC (MbResultType) SpiralCurve( const MbPlacement3D & place, \details \ru Создать спираль. \n Если spiralAxis == true, то lawCurve - определяет плоскую ось спирали. \n Если spiralAxis == false, то lawCurve - определяет закон изменения радиуса спирали. \n - Если lawCurve == NULL, то строится коническая спираль с углом конусности angle. \n + Если lawCurve == c3d_null, то строится коническая спираль с углом конусности angle. \n \en Create a spiral. \n If 'spiralAxis' == true, 'lawCurve' determines the axis of a spiral. \n If spiralAxis == false, then 'lawCurve' - determines a radius law. \n - If lawCurve == NULL, a conical spiral is created with the specified taper angle. \n \~ + If lawCurve == c3d_null, a conical spiral is created with the specified taper angle. \n \~ \param[in] point0 - \ru Начало локальной системы координат (ЛСК). \en The origin of local coordinate system (LCS). \~ \param[in] point1 - \ru Точка на оси Z ЛСК. @@ -640,7 +644,7 @@ MATH_FUNC (MbResultType) CreatePolyArcCurve3D( const MbCurve3D & curve, MATH_FUNC (bool) GetSpaceCurve( const MbItem & item, bool keepPlacement, SPtr & curve0, - std::vector< SPtr > * curves = NULL ); + std::vector< SPtr > * curves = c3d_null ); //------------------------------------------------------------------------------- @@ -662,9 +666,9 @@ MATH_FUNC (bool) GetSpaceCurve( const MbItem & item, \param[in] deviationAngle - \ru Параметру точности. \en The parameter of accuracy. \~ \return \ru Возвращает указатель на построенную кривую с нулевум счетчиком ссылок \n - или NULL, если не удалось построить развертку для заданных параметров. + или c3d_null, если не удалось построить развертку для заданных параметров. \en The pointer to the constructed curve with zero counter of references\n - return NULL, if unwrap curve can't be construvted for this parameters + return c3d_null, if unwrap curve can't be construvted for this parameters \ingroup Curve3D_Modeling */ // --- @@ -719,6 +723,8 @@ MATH_FUNC (MbResultType) EvolutionSection( const MbSweptData & generCurves, \en Curve. \~ \param[in] eps - \ru Точность. \en Accuracy. \~ + \return \ru Возвращает true, если кривая геометрически прямолинейна. + \en Returns true, if a curve is geometrically straight. \~ \ingroup Curve3D_Modeling */ // --- @@ -1256,11 +1262,14 @@ MATH_FUNC( MbResultType ) AddKnotNurbs( MbNurbs3D * curve, \en Insert a knot into the onesegmented NURBS curve.\n The output parameter of the method is a NURBS curve of first segment. \~ - \param[in] curve - \ru NURBS кривая в произвольном формате. \en NURBS curve in any format. \~ - \param[in] data - \ru Данные построения кривой. \en The curve construction data. \~ - \param[out] result - \ru NURBS Кривая. \en NURBS curve. \~ - \return \ru Возвращает значение результата операции. \en Returns operation result value. - + \param[in] curve - \ru NURBS кривая в произвольном формате. + \en NURBS curve in any format. \~ + \param[in] data - \ru Данные построения кривой. + \en The curve construction data. \~ + \param[out] resCurve - \ru NURBS Кривая. + \en NURBS curve. \~ + \return \ru Возвращает значение результата операции. + \en Returns operation result value. \ingroup Curve3D_Modeling */ MATH_FUNC( MbResultType ) ExtractExtrapolFromSegment( MbNurbs3D * curve, @@ -1310,7 +1319,7 @@ MATH_FUNC(MbResultType) ConicNurbs( MbNurbs3D * curve, \en The curve length evaluation. \~ \param[in] accuracy - \ru Относительная точность рассчёта длины кривой. \en Relative accuracy calculate the length of a curve. \~ - \param[in/out] maxCurvatre - \ru Максимально допустимая кривизна кривой. + \param[in,out] maxCurvatre - \ru Максимально допустимая кривизна кривой. \en The maximum curvature of the resulting curve. \~ \param[out] result - \ru Построенная кривая. \en The resulting curve. \~ diff --git a/C3d/Include/action_mesh.h b/C3d/Include/action_mesh.h index 9f75df8..f35afad 100644 --- a/C3d/Include/action_mesh.h +++ b/C3d/Include/action_mesh.h @@ -61,8 +61,8 @@ MATH_FUNC (void) CalculatePolygon( const MbCurve & curve, локальной системы координат. \en Create a polygonal object for two-dimensional object in the XOY-plane of the local coordinate system. \~ - \param[in] obj - \ru Двумерный объект (если NULL, то объект не создаётся). - \en Two-dimensional object (if NULL, object isn't created). \~ + \param[in] obj - \ru Двумерный объект (если c3d_null, то объект не создаётся). + \en Two-dimensional object (if c3d_null, object isn't created). \~ \param[in] plane - \ru Локальная система координат. \en A local coordinate system. \~ \param[in] sag - \ru Максимальное отклонение полигонального объекта от оригинала по прогибу. diff --git a/C3d/Include/action_phantom.h b/C3d/Include/action_phantom.h index c26309b..b5cc68b 100644 --- a/C3d/Include/action_phantom.h +++ b/C3d/Include/action_phantom.h @@ -184,7 +184,7 @@ MATH_FUNC (MbResultType) OffsetPhantom( const MbSolid & solid, const SweptValues & params, const MbSNameMaker & operNames, MbFaceShell *& result, - size_t * hpShellFaceInd = NULL ); // \ru Номер грани в исходной оболочки для построения хот-точки); \en The face number in the initial shell for a hot-point creation); + size_t * hpShellFaceInd = c3d_null ); // \ru Номер грани в исходной оболочки для построения хот-точки); \en The face number in the initial shell for a hot-point creation); //------------------------------------------------------------------------------ @@ -261,7 +261,7 @@ MATH_FUNC (MbResultType) SmoothPositionData( const MbSolid & sol const SmoothValues & params, RPArray & result, double edgeParam = 0.5, - const MbCurveEdge * dimensionEdge = NULL ); + const MbCurveEdge * dimensionEdge = c3d_null ); //------------------------------------------------------------------------------ @@ -293,7 +293,7 @@ MATH_FUNC (MbResultType) SmoothPositionData( const MbSolid & sol const SmoothValues & params, RPArray & result, double edgeParam = 0.5, - const MbCurveEdge * dimensionEdge = NULL ); + const MbCurveEdge * dimensionEdge = c3d_null ); //------------------------------------------------------------------------------ @@ -303,15 +303,18 @@ MATH_FUNC (MbResultType) SmoothPositionData( const MbSolid & sol \en A function creation for behavior of selected curve coordinate with curve parameter. \n \param[in] curve - \ru Кривая. \en The curve. \~ - \param[in] coordinate - \ru Номер координаты пространства. - \en The number of curve coordinate. \~ + \param[in] place - \ru Локальная система координат, в которой используется кривая. + \en The local coordinate system that uses the curve. \~ + \param[in] coordinate - \ru Номер (0,1,2) координаты кривой в локальной системе координат для построения функции. + \en The number (0,1,2) of the curve coordinate in the local coordinate system for constructing the function. \~ \return \ru Возвращает построенную функцию. \en Returns the created function. \~ \ingroup Algorithms_3D */ // --- MATH_FUNC (MbFunction *) CreateFunction( const MbCurve3D & curve, - size_t coordinate ); + const MbPlacement3D & place, + size_t coordinate ); #endif // __ACTION_PHANTOM_H diff --git a/C3d/Include/action_point.h b/C3d/Include/action_point.h index 43c3a97..70ce11b 100644 --- a/C3d/Include/action_point.h +++ b/C3d/Include/action_point.h @@ -39,8 +39,8 @@ class MATH_CLASS MbFaceShell; \en Number of elements in the array. \~ \param[out] res - \ru Результат операции. \en The operation result. \~ - \return \ru Возвращает массив элементов, если он создан, или NULL в противном случае. - \en Returns an array of elements if it has been created, otherwise returns NULL. \~ + \return \ru Возвращает массив элементов, если он создан, или c3d_null в противном случае. + \en Returns an array of elements if it has been created, otherwise returns c3d_null. \~ \ingroup Algorithms_3D */ // --- @@ -48,11 +48,11 @@ template inline SArray * CreateArray( size_t cnt, MbResultType & res ) { SArray * arr = new SArray ( cnt, 1 ); - if ( arr != NULL && arr->GetAddr() == NULL ) { + if ( arr != c3d_null && arr->GetAddr() == c3d_null ) { delete arr; - arr = NULL; + arr = c3d_null; } - if ( arr == NULL ) + if ( arr == c3d_null ) res = rt_TooManyPoints; return arr; @@ -79,7 +79,7 @@ template inline bool ReserveArray( SArray & arr, size_t n, MbResultType & res ) { arr.Reserve( n ); - if ( arr.GetAddr() == NULL ) { + if ( arr.GetAddr() == c3d_null ) { res = rt_TooManyPoints; return false; } @@ -107,7 +107,7 @@ template inline bool AddItem( SArray & arr, const Type & item, MbResultType & res ) { arr.Add( item ); - if ( arr.GetAddr() == NULL ) { + if ( arr.GetAddr() == c3d_null ) { res = rt_TooManyPoints; return false; } diff --git a/C3d/Include/action_sheet.h b/C3d/Include/action_sheet.h index 92f3f33..d277aee 100644 --- a/C3d/Include/action_sheet.h +++ b/C3d/Include/action_sheet.h @@ -613,7 +613,7 @@ MATH_FUNC (MbResultType) UnbendSheetSolid( MbSolid & sol const MbCartPoint & fixedPoint, const MbSNameMaker & nameMaker, MbSolid *& result, - RPArray * ribContours = NULL ); + RPArray * ribContours = c3d_null ); //------------------------------------------------------------------------------ @@ -958,6 +958,51 @@ MATH_FUNC (MbResultType) CreateStampParts( const MbPlacement3D & placement, MbSolid *& partToSubtract ); +//------------------------------------------------------------------------------ +/** \brief \ru Создание составляющих частей штамповки одного тела другим телом. + \en Stamping with a tool solid (punch or die). \~ + \details \ru Штамповка строится на основе произвольного тела-инструмента и заданной плоской листовой грани. + Штамповка подрезается границами листовой грани, которую пересекает тело.\n + \en The stamping is created based on a tool body and a flat sheet face. + The stamping is trimmed by the boundary of the sheet face which contains the sketch.\n \~ + \param[in] solid - \ru Исходное листовое тело. + \en The source sheet solid. \~ + \param[in] sameShell - \ru Флаг удаления оболочки исходного тела. + \en Whether to delete the shell of the source solid. \~ + \param[in] targetFace - \ru Грань штамповки. + \en The face for stamping. \~ + \param[in] toolSolid - \ru Оболочка тела-инструмента. + \en A shell of tool solid. \~ + \param[in] sameShellTool - \ru Флаг удаления оболочки тела-инструмента. + \en Whether to delete the shell of the tool solid. \~ + \param[in] punch - \ru Является тело-инструмент пуансоном или матрицей. + \en Is tool body a punch or a die. \~ + \param[in] pierceFaces - \ru Вскрываемые для вырубки грани инструмента, + \en Pierce faces of tool body. \~ + \param[in] params - \ru Параметры штамповки. + \en The parameters of stamping. \~ + \param[in] nameMaker - \ru Именователь. + \en An object for naming the new objects. \~ + \param[out] partToAdd - \ru Добавляемая часть штамповки. + \en Added part of the stamp. \~ + \param[out] partToSubtract - \ru Вычитаемая часть штамповки. + \en Deductible part of the stamp. \~ + \ingroup Sheet_Metal_Modeling +*/ +// --- +MATH_FUNC(MbResultType) CreateStampWithToolSolidParts( MbSolid & solid, + MbeCopyMode sameShell, + const MbFace & targetFace, + MbSolid & toolSolid, + MbeCopyMode sameShellTool, + bool punch, + const RPArray& pierceFaces, + const MbToolStampingValues & params, + const MbSNameMaker & nameMaker, + MbSolid * & partsToAdd, + MbSolid * & partsToSubtract ); + + //------------------------------------------------------------------------------ /** \brief \ru Штамповка. \en Stamping. \~ @@ -1176,6 +1221,7 @@ MATH_FUNC (MbResultType) CreateBeadParts( const MbFace * face, //------------------------------------------------------------------------------ // устаревшая // --- +DEPRECATE_DECLARE MATH_FUNC (MbResultType) CreateBeadParts( const MbPlacement3D & placement, const RPArray & contours, const SArray & centers, @@ -1230,6 +1276,7 @@ MATH_FUNC (MbResultType) CreateBead( MbSolid & solid, // устаревшая +DEPRECATE_DECLARE MATH_FUNC (MbResultType) CreateBead( MbSolid & solid, MbeCopyMode sameShell, const MbFace & face, @@ -1281,6 +1328,7 @@ MATH_FUNC (MbResultType) CreateJalousieParts( const MbFace * fac //------------------------------------------------------------------------------ // устаревшая // --- +DEPRECATE_DECLARE MATH_FUNC (MbResultType) CreateJalousieParts( const MbPlacement3D & placement, const RPArray & segments, const MbJalousieValues & params, @@ -1785,6 +1833,24 @@ MATH_FUNC (bool) BuildBends3DAxisLines( const RPArray & bendFac RPArray & axisLineSegments ); +//------------------------------------------------------------------------------ +/** \brief \ru Рассчитать осевые линии разогнутых сгибов. + \en Calculate the centerlines of unfolded bends. \~ + \details \ru Возвращает трёхмерные осевые линии, лежащие на разогнутых гранях сгибов.\n + \en Returns the 3D centerlines that lies on the unbent faces of the bends.\n \~ + \param[in] bendFaces - \ru Грани разогнутых сгибов, для которых строить линии сгиба. + \en Sheet faces of unfolded bends, that need constraction of the axis lines. \~ + \param[out] centerlines - \ru Искомые осевые линии. + \en The required centerlines. \~ + \return \ru true - в случае успеха операции, false - в противном случае. + \en True if the operation succeeded, otherwise false. \~ + \ingroup Sheet_Metal_Modeling +*/ +// --- +MATH_FUNC (bool) BuildBends3DCenterlines( const RPArray & bendFaces, + RPArray & centerlines ); + + //------------------------------------------------------------------------------ /** \brief \ru Рассчитать параметры для замыкания угла. \en Calculate the parameters for the corner closure. \~ @@ -2369,7 +2435,7 @@ MATH_FUNC (MbResultType) RemoveOperationResult( MbSolid & solid, \en The initial face for sheet metall solid building. \~ \param[in] sense - \ru Направление придания толщины относительно нормали исходной грани. \en Direction of sheet metal building relative to initial face normal. \~ - \param[in/out] parameters - \ru Параметры операции. + \param[in,out] parameters - \ru Параметры операции. \en Operation parameters. \~ \param[in] nameMaker - \ru Именователь. \en An object for naming the new objects. \~ diff --git a/C3d/Include/action_shell.h b/C3d/Include/action_shell.h index 9c6487a..524385f 100644 --- a/C3d/Include/action_shell.h +++ b/C3d/Include/action_shell.h @@ -263,17 +263,17 @@ MATH_FUNC (MbResultType) MeshShell( MeshSurfaceValues & pars, \ingroup Shell_Modeling */ // --- -MATH_FUNC (MbResultType) TruncateShell( MbSolid & initSolid, - SArray & selIndices, +MATH_FUNC (MbResultType) TruncateShell( MbSolid & initSolid, + SArray & selIndices, MbeCopyMode initCopyMode, - const MbSNameMaker & operNames, + const MbSNameMaker & operNames, RPArray & truncatingItems, - SArray & truncatingOrients, + SArray & truncatingOrients, bool truncatingSplitMode, MbeCopyMode truncatingCopyMode, - const MbMergingFlags & mergeFlags, - MbSolid *& result, - MbPlacement3D *& resultPlace ); + const MbMergingFlags & mergeFlags, + MbSolid *& result, + MbPlacement3D *& resultPlace ); //------------------------------------------------------------------------------ @@ -652,11 +652,11 @@ MATH_FUNC (MbResultType) SurfaceShell( const MbSurface & surface, /** \brief \ru Разрезать тело силуэтным контуром. \en Cut a solid by a silhouette contour. \~ \details \ru Построить оболочки, полученные в результате разрезания тела его силуэтным контуром. \n - \en Create solids as a result of cutting a solids by its silhouette contour.\n\~ - \param[in] shell - \ru Исходное тело. - \en The solid\~ + \en Create solids as a result of cutting a solids by its silhouette contour. \n \~ + \param[in] solid - \ru Исходное тело. + \en The solid. \~ \param[in] sameShell - \ru Способ передачи данных при копировании оболочек. - \en Methods of transferring data while copying shells \~ + \en Methods of transferring data while copying shells. \~ \param[in] eye - \ru Направление взгляда. \en Eye's direction. \~ \param[in] operNames - \ru Именователь с версией. @@ -859,9 +859,9 @@ MATH_FUNC (MbResultType) RectifyFace( const MbFace & face, \ingroup Shell_Modeling */ // --- -MATH_FUNC (MbResultType) OctaLattice( const MbCartPoint3D & point_0, - const MbCartPoint3D & point_1, - const MbCartPoint3D & point_2, +MATH_FUNC (MbResultType) OctaLattice( const MbCartPoint3D & point0, + const MbCartPoint3D & point1, + const MbCartPoint3D & point2, double xRadius, double yRadius, double zRadius, diff --git a/C3d/Include/action_solid.h b/C3d/Include/action_solid.h index cf77770..99e2a4a 100644 --- a/C3d/Include/action_solid.h +++ b/C3d/Include/action_solid.h @@ -180,7 +180,7 @@ MATH_FUNC (MbResultType) MeshSolid( const MbMesh & mesh, const GridsToShellValues & params, const MbSNameMaker & names, MbSolid *& result, - IProgressIndicator * prog = NULL ); + IProgressIndicator * prog = c3d_null ); //------------------------------------------------------------------------------ @@ -202,7 +202,7 @@ MATH_FUNC (MbResultType) MeshSolid( const MbMesh & mesh, MATH_FUNC (MbResultType) GridSolid( const MbGrid & grid, const MbSNameMaker & names, MbSolid *& result, - IProgressIndicator * prog = NULL ); + IProgressIndicator * prog = c3d_null ); //------------------------------------------------------------------------------ @@ -224,7 +224,7 @@ MATH_FUNC (MbResultType) GridSolid( const MbGrid & grid, MATH_FUNC (MbResultType) CollectionSolid( const MbCollection & grid, const MbSNameMaker & names, MbSolid *& result, - IProgressIndicator * progBar = NULL ); + IProgressIndicator * progBar = c3d_null ); //------------------------------------------------------------------------------ @@ -611,8 +611,8 @@ MATH_FUNC (MbResultType) EvolutionSolid( const MbSweptData & sweptData \en An array of generating contours coordinate systems. \~ \param[in] c - \ru Множество образующих контуров. \en An array of generating contours. \~ - \param[in] spine - \ru Направляющая кривая (может быть NULL). - \en A guide curve (can be NULL). \~ + \param[in] spine - \ru Направляющая кривая (может быть c3d_null). + \en A guide curve (can be c3d_null). \~ \param[in] params - \ru Параметры операции. \en The operation parameters. \~ \param[in] ps - \ru Множество точек на образующих контурах, задающий их начальные точки. @@ -647,8 +647,8 @@ MATH_FUNC (MbResultType) LoftedSolid( SArray & pl, \en An array of generating contours coordinate systems. \~ \param[in] c - \ru Множество образующих контуров. \en An array of generating contours. \~ - \param[in] spine - \ru Осевая кривая (может быть NULL). - \en A guide curve (can be NULL). \~ + \param[in] spine - \ru Осевая кривая (может быть c3d_null). + \en A guide curve (can be c3d_null). \~ \param[in] params - \ru Параметры операции. \en The operation parameters. \~ \param[in] guideCurves - \ru Множество направляющих кривых, задающих траектории соответствующих точек контуров. @@ -668,7 +668,7 @@ MATH_FUNC (MbResultType) LoftedSolid( SArray & pl, // --- MATH_FUNC (MbResultType) LoftedSolid( SArray & pl, RPArray & c, - const MbCurve3D * spine, // осевая линия может быть NULL + const MbCurve3D * spine, // осевая линия может быть c3d_null const LoftedValues & params, RPArray * guideCurves, SArray * ps, @@ -686,8 +686,8 @@ MATH_FUNC (MbResultType) LoftedSolid( SArray & pl, \en An array of surfaces of generating contours. \~ \param[in] c - \ru Множество образующих контуров. \en An array of generating contours. \~ - \param[in] spine - \ru Осевая кривая (может быть NULL). - \en A guide curve (can be NULL). \~ + \param[in] spine - \ru Осевая кривая (может быть c3d_null). + \en A guide curve (can be c3d_null). \~ \param[in] params - \ru Параметры операции. \en The operation parameters. \~ \param[in] guideCurves - \ru Множество направляющих кривых, задающих траектории соответствующих точек контуров. @@ -707,7 +707,7 @@ MATH_FUNC (MbResultType) LoftedSolid( SArray & pl, // --- MATH_FUNC (MbResultType) LoftedSolid( RPArray & surfs, RPArray & c, - const MbCurve3D * spine, // осевая линия может быть NULL + const MbCurve3D * spine, // осевая линия может быть c3d_null const LoftedValues & params, RPArray * guideCurves, SArray * ps, @@ -942,8 +942,8 @@ MATH_FUNC(MbResultType) EvolutionResult( MbSolid & solid, \en An array of generating contours coordinate systems. \~ \param[in] c - \ru Множество образующих контуров. \en An array of generating contours. \~ - \param[in] spine - \ru Направляющая кривая (может быть NULL). - \en A guide curve (can be NULL). \~ + \param[in] spine - \ru Направляющая кривая (может быть c3d_null). + \en A guide curve (can be c3d_null). \~ \param[in] params - \ru Параметры операции. \en The operation parameters. \~ \param[in] oType - \ru Тип булевой операции. @@ -995,8 +995,8 @@ MATH_FUNC(MbResultType) LoftedResult( MbSolid & solid, \en An array of generating contours surfaces. \~ \param[in] c - \ru Множество образующих контуров. \en An array of generating contours. \~ - \param[in] spine - \ru Осевая кривая (может быть NULL). - \en A guide curve (can be NULL). \~ + \param[in] spine - \ru Осевая кривая (может быть c3d_null). + \en A guide curve (can be c3d_null). \~ \param[in] params - \ru Параметры операции. \en The operation parameters. \~ \param[in] oType - \ru Тип булевой операции. @@ -1962,7 +1962,7 @@ MATH_FUNC (MbResultType) UnionResult( MbSolid * solid, const MbSNameMaker & names, bool isArray, MbSolid *& result, - RPArray * notGluedSolids = NULL ); + RPArray * notGluedSolids = c3d_null ); //------------------------------------------------------------------------------ @@ -2005,7 +2005,7 @@ MATH_FUNC (MbResultType) UnionSolid( RPArray & solids, const MbSNameMaker & names, bool isArray, MbSolid *& result, - RPArray * notGluedSolids = NULL ); + RPArray * notGluedSolids = c3d_null ); //------------------------------------------------------------------------------ @@ -2365,8 +2365,8 @@ MATH_FUNC (MbResultType) ThinSolid( const MbSurface & surface, //------------------------------------------------------------------------------ /** \brief \ru Создать отверстие, карман, фигурный паз в теле. \en Create a hole, a pocket, a groove in the solid. \~ - \details \ru Cоздать отверстие, карман, фигурный паз в теле или создать cверло, бобышку, если solid==NULL. \n - \en Create a hole, a pocket, a groove in the solid or create a drill, a boss if 'solid' == NULL. \n \~ + \details \ru Cоздать отверстие, карман, фигурный паз в теле или создать cверло, бобышку, если solid==c3d_null. \n + \en Create a hole, a pocket, a groove in the solid or create a drill, a boss if 'solid' == c3d_null. \n \~ \param[in] solid - \ru Исходное тело. \en The source solid. \~ \param[in] sameShell - \ru Режим копирования тела. diff --git a/C3d/Include/action_surface.h b/C3d/Include/action_surface.h index b216fc8..16a41f1 100644 --- a/C3d/Include/action_surface.h +++ b/C3d/Include/action_surface.h @@ -784,8 +784,8 @@ MATH_FUNC (MbResultType) MiddlePlaces( const MbCurve3D & curve1 \en The first guide curve. \~ \param[in] g2 - \ru Вторая направляющая кривая (g1==g2 совпадает с первой при cs_Round). \en The second guide curve (g1==g2 the same first guide for st_Round). \~ - \param[in] c0 - \ru Дополнительная направляющая кривая (может быть NULL). - \en The additional guide curve (may be NULL). \~ + \param[in] c0 - \ru Дополнительная направляющая кривая (может быть c3d_null). + \en The additional guide curve (may be c3d_null). \~ \param[in] form - \ru Форма сечения поверхности (0, 1, 2, 3). \en The form of the surface section (0, 1, 2, 3). \~ \param[in] sense - \ru Направление нормали поверхности направляющей кривой (для guide1==guide2). diff --git a/C3d/Include/action_surface_curve.h b/C3d/Include/action_surface_curve.h index 2d3dc64..7ad3f83 100644 --- a/C3d/Include/action_surface_curve.h +++ b/C3d/Include/action_surface_curve.h @@ -21,9 +21,11 @@ #include #include #include +#include #include #include #include +#include class MATH_CLASS MbAxis3D; @@ -74,12 +76,15 @@ class MATH_CLASS MbSNameMaker; */ // --- MATH_FUNC (MbResultType) CalculatePipePoints( const MbCartPoint3D & origin1, - const MbVector3D & direction1, - double length1, double radius1, + const MbVector3D & direction1, + double length1, + double radius1, const MbCartPoint3D & origin2, - const MbVector3D & direction2, - double length2, double radius2, - MbCartPoint3D & result1, MbCartPoint3D & result2 ); + const MbVector3D & direction2, + double length2, + double radius2, + MbCartPoint3D & result1, + MbCartPoint3D & result2 ); //------------------------------------------------------------------------------ @@ -89,8 +94,8 @@ MATH_FUNC (MbResultType) CalculatePipePoints( const MbCartPoint3D & origin1, \en Create an offset curve from a planar curve. \n \~ \param[in] curve - \ru Исходная кривая. \en The initial curve. \~ - \param[in] d - \ru Величина эквидистанты. - \en The offset distance. \~ + \param[in] dist - \ru Величина эквидистанты. + \en The offset distance. \~ \param[out] result - \ru Эквидистантная кривая. \en The offset curve. \~ \return \ru Возвращает код результата операции. @@ -98,17 +103,17 @@ MATH_FUNC (MbResultType) CalculatePipePoints( const MbCartPoint3D & origin1, \ingroup Curve3D_Modeling */ // --- -MATH_FUNC (MbResultType) OffsetPlaneCurve( const MbCurve3D & curve, - double d, - MbCurve3D *& result ); +MATH_FUNC (MbResultType) OffsetPlaneCurve( const MbCurve3D & curve, + double dist, + MbCurve3D *& result ); //------------------------------------------------------------------------------ -/** \brief \ru Создать эквидистантную кривую. - \en Create an offset curve. \~ - \details \ru Создать эквидистантную кривую по трехмерной кривой и вектору направления. \n - \en Create an offset curve from a three-dimensional curve and a direction vector. \n \~ - \param[in] initCurve - \ru Постранственная кривая, к которой строится эквидистантная. +/** \brief \ru Создать эквидистантную кривую в пространстве. + \en Create an offset curve in space. \~ + \details \ru Создать эквидистантную кривую в пространстве по трехмерной кривой и вектору направления. \n + \en Create an offset curve in space from a three-dimensional curve and a direction vector. \n \~ + \param[in] initCurve - \ru Пространственная кривая, к которой строится эквидистантная. \en A space curve for which to construct the offset curve. \~ \param[in] offsetVect - \ru Вектор, задающий смещение в точке кривой. \en The displacement vector at a point of the curve. \~ @@ -129,6 +134,7 @@ MATH_FUNC (MbResultType) OffsetPlaneCurve( const MbCurve3D & curve, \ingroup Curve3D_Modeling */ //--- +DEPRECATE_DECLARE MATH_FUNC (MbResultType) OffsetCurve( const MbCurve3D & initCurve, const MbVector3D & offsetVect, const bool useFillet, @@ -140,20 +146,41 @@ MATH_FUNC (MbResultType) OffsetCurve( const MbCurve3D & initCurve, //------------------------------------------------------------------------------ -/** \brief \ru Создать эквидистантную кривую. - \en Create an offset curve. \~ - \details \ru Создать эквидистантную кривую по поверхностной кривой и значению смещения. \n - \en Create an offset curve from a curve on a surface and a shift value. \n \~ +/** \brief \ru Создать эквидистантную кривую в пространстве. + \en Create an offset curve in space. \~ + \details \ru Создать эквидистантную кривую в пространстве по трехмерной кривой и вектору направления. \n + \en Create an offset curve in space from a three-dimensional curve and a direction vector. \n \~ + \param[in] initCurve - \ru Пространственная кривая, к которой строится эквидистантная. + \en A space curve for which to construct the offset curve. \~ + \param[in] params - \ru Параметры. + \en Parameters. \~ + \param[out] result - \ru Каркас с построенными кривыми. + \en The frame with the constructed curves. \~ + \return \ru Возвращает код результата операции. + \en Returns operation result code. \~ + \ingroup Curve3D_Modeling +*/ +//--- +MATH_FUNC (MbResultType) OffsetCurve( const MbCurve3D & initCurve, + const MbSpatialOffsetCurveParams & params, + c3d::WireFrameSPtr & result ); + + +//------------------------------------------------------------------------------ +/** \brief \ru Создать эквидистантную кривую на поверхности. + \en Create an offset curve on a surface. \~ + \details \ru Создать эквидистантную кривую на поверхности по поверхностной кривой и значению смещения. \n + \en Create an offset curve on a surface from a curve on the surface and a shift value. \n \~ \param[in] curve - \ru Кривая на поверхности грани face. \en A curve on face 'face' surface. \~ - \param[in] face - \ru Грань, на которой строится эквидистанта. - \en The edge on which to build the offset curve. \~ + \param[in] face - \ru Грань, на которой строится эквидистанта. + \en The face on which to build the offset curve. \~ \param[in] dirAxis - \ru Направление смещения с точкой приложения. - \en The offset direction with a point of application. \~ - \param[in] dist - \ru Величина смещения. - \en The offset distance. \~ - \param[in] snMaker - \ru Именователь кривых каркаса. - \en An object defining the frame curves names. \~ + \en The offset direction with a reference point. \~ + \param[in] dist - \ru Величина смещения. + \en The offset distance. \~ + \param[in] snMaker - \ru Именователь кривых каркаса. + \en An object defining the frame curves names. \~ \param[out] result - \ru Каркас с построенными кривыми. \en The frame with the constructed curves. \~ \return \ru Возвращает код результата операции. @@ -161,6 +188,7 @@ MATH_FUNC (MbResultType) OffsetCurve( const MbCurve3D & initCurve, \ingroup Curve3D_Modeling */ //--- +DEPRECATE_DECLARE MATH_FUNC (MbResultType) OffsetCurve( const MbCurve3D & curve, const MbFace & face, const MbAxis3D & dirAxis, @@ -169,11 +197,32 @@ MATH_FUNC (MbResultType) OffsetCurve( const MbCurve3D & curve, MbWireFrame *& result ); +//------------------------------------------------------------------------------ +/** \brief \ru Создать эквидистантную кривую на поверхности. + \en Create an offset curve on a surface. \~ + \details \ru Создать эквидистантную кривую на поверхности по поверхностной кривой и значению смещения. \n + \en Create an offset curve on a surface from a curve on the surface and a shift value. \n \~ + \param[in] curve - \ru Кривая на поверхности грани face. + \en A curve on face 'face' surface. \~ + \param[in] params - \ru Параметры. + \en Parameters. \~ + \param[out] result - \ru Каркас с построенными кривыми. + \en The frame with the constructed curves. \~ + \return \ru Возвращает код результата операции. + \en Returns operation result code. \~ + \ingroup Curve3D_Modeling +*/ +//--- +MATH_FUNC (MbResultType) OffsetCurve( const MbCurve3D & curve, + const MbSurfaceOffsetCurveParams & params, + c3d::WireFrameSPtr & result ); + + //------------------------------------------------------------------------------ /** \brief \ru Создать проекцию кривой на поверхность. \en Create a curve projection onto the surface. \~ - \details \ru Создать проекцию кривой curve на поверхность surface (направление проецирования direction может быть NULL). \n - \en Create the projection of a curve onto surface 'surface' (the projection direction 'direction' can be NULL). \n \~ + \details \ru Создать проекцию кривой curve на поверхность surface (направление проецирования direction может быть c3d_null). \n + \en Create the projection of a curve onto surface 'surface' (the projection direction 'direction' can be c3d_null). \n \~ \param[in] surface - \ru Поверхность для проецирования. \en The surface to project onto. \~ \param[in] curve - \ru Проецируемая кривая. @@ -193,13 +242,13 @@ MATH_FUNC (MbResultType) OffsetCurve( const MbCurve3D & curve, \ingroup Curve3D_Modeling */ // --- -MATH_FUNC (MbResultType) CurveProjection( const MbSurface & surface, - const MbCurve3D & curve, - MbVector3D * direction, - bool createExact, - bool truncateByBounds, - RPArray & result, - VERSION version = Math::DefaultMathVersion() ); +MATH_FUNC (MbResultType) CurveProjection( const MbSurface & surface, + const MbCurve3D & curve, + MbVector3D * direction, + bool createExact, + bool truncateByBounds, + RPArray & result, + VERSION version = Math::DefaultMathVersion() ); //------------------------------------------------------------------------------ @@ -222,12 +271,12 @@ MATH_FUNC (MbResultType) CurveProjection( const MbSurface & surface, \ingroup Curve3D_Modeling */ //--- -MATH_FUNC (MbResultType) CurveByTwoProjections( const MbPlacement3D & place1, - const MbCurve & curve1, - const MbPlacement3D & place2, - const MbCurve & curve2, - RPArray & result, - VERSION version = Math::DefaultMathVersion() ); +MATH_FUNC (MbResultType) CurveByTwoProjections( const MbPlacement3D & place1, + const MbCurve & curve1, + const MbPlacement3D & place2, + const MbCurve & curve2, + RPArray & result, + VERSION version = Math::DefaultMathVersion() ); //------------------------------------------------------------------------------ @@ -260,14 +309,14 @@ MATH_FUNC (MbResultType) CurveByTwoProjections( const MbPlacement3D & place1, \ingroup Curve3D_Modeling */ //--- -MATH_FUNC (MbResultType) ProjectionCurve( const MbCurve3D & curve, - const RPArray & faces, - const MbVector3D * dir, - const bool createExact, - const bool truncateByBounds, - const MbSNameMaker & snMaker, - RPArray & result, - SArray * resultIndices ); +MATH_FUNC (MbResultType) ProjectionCurve( const MbCurve3D & curve, + const RPArray & faces, + const MbVector3D * dir, + const bool createExact, + const bool truncateByBounds, + const MbSNameMaker & snMaker, + RPArray & result, + SArray * resultIndices ); //------------------------------------------------------------------------------ @@ -304,16 +353,16 @@ MATH_FUNC (MbResultType) ProjectionCurve( const MbCurve3D & curve, \ingroup Curve3D_Modeling */ //--- -MATH_FUNC (MbResultType) ProjectionCurve( const MbWireFrame & wireFrame, - const bool sameWireFrame, - const MbSolid & solid, - const bool same, - const SArray & faceIndices, - const MbVector3D * dir, - const bool createExact, - const bool truncateByBounds, - const MbSNameMaker & snMaker, - MbWireFrame *& resFrame ); +MATH_FUNC (MbResultType) ProjectionCurve( const MbWireFrame & wireFrame, + const bool sameWireFrame, + const MbSolid & solid, + const bool same, + const SArray & faceIndices, + const MbVector3D * dir, + const bool createExact, + const bool truncateByBounds, + const MbSNameMaker & snMaker, + MbWireFrame *& resFrame ); //------------------------------------------------------------------------------ @@ -330,8 +379,7 @@ MATH_FUNC (MbResultType) ProjectionCurve( const MbWireFrame & wireFrame, \ingroup Curve3D_Modeling */ //--- -MATH_FUNC (bool) EliminateProjectionCurveOverlay( RPArray & curves, - SArray * indices ); +MATH_FUNC (bool) EliminateProjectionCurveOverlay( RPArray & curves, SArray * indices ); //------------------------------------------------------------------------------ @@ -402,7 +450,7 @@ MATH_FUNC (MbResultType) SilhouetteCurve( const MbFace & face, \en The axis of lathe section. \~ \param[in] removeOnSurfaceBounds - \ru Удалить линии очерка, совпадающие с границами поверхности. \en Remove the isocline curves coincident with the surface bounds. \~ - \param[out] result - \ru Выходной массив линий очерка. + \param[out] curves - \ru Выходной массив линий очерка. \en The output array of isocline curves. \~ \param[in] version - \ru Версия построения. \en The version. \~ @@ -686,13 +734,13 @@ MATH_FUNC( MbResultType ) IntersectionCurve( const MbSurface & surf1, bool ext1, \ingroup Curve3D_Modeling */ //--- -MATH_FUNC (MbResultType) SpaceSplineThrough( const SArray & points, - MbeSplineParamType paramType, - size_t degree, - bool closed, - RPArray< MbPntMatingData > & transitions, - const MbSNameMaker & snMaker, - MbWireFrame *& result ); +MATH_FUNC (MbResultType) SpaceSplineThrough( const SArray & points, + MbeSplineParamType paramType, + size_t degree, + bool closed, + RPArray & transitions, + const MbSNameMaker & snMaker, + MbWireFrame *& result ); //------------------------------------------------------------------------------ @@ -724,14 +772,14 @@ MATH_FUNC (MbResultType) SpaceSplineThrough( const SArray & point */ //--- MATH_FUNC (MbResultType) SpaceSplineBy( const SArray & points, - size_t degree, - bool closed, + size_t degree, + bool closed, const SArray * weights, const SArray * knots, - MbPntMatingData * begData, - MbPntMatingData * endData, + c3d::PntMatingData3D * begData, + c3d::PntMatingData3D * endData, const MbSNameMaker & snMaker, - MbWireFrame *& result ); + MbWireFrame *& result ); //------------------------------------------------------------------------------ @@ -776,14 +824,14 @@ MATH_FUNC (MbResultType) SpaceSplineBy( const SArray & points, \ingroup Curve3D_Modeling */ //--- -MATH_FUNC (MbResultType) SurfaceSpline( const MbSurface & surface, - bool throughPoints, - SArray & paramPnts, - SArray & paramWts, - bool paramClosed, - RPArray< MbPntMatingData > & spaceTransitions, - const MbSNameMaker & snMaker, - MbWireFrame *& result ); +MATH_FUNC (MbResultType) SurfaceSpline( const MbSurface & surface, + bool throughPoints, + SArray & paramPnts, + SArray & paramWts, + bool paramClosed, + RPArray & spaceTransitions, + const MbSNameMaker & snMaker, + MbWireFrame *& result ); //------------------------------------------------------------------------------ @@ -936,7 +984,7 @@ MATH_FUNC (MbResultType) ConnectingSpline( const MbCurve3D & curve1, double t1, что начало кривой сопряжения будет находится в точке с параметором t1, t1 и t2 - параметры кривых curve1 и curve2, в соответствующих точках которых начинается и заканчивается скругление. \n Параметр sense - прямое или обратное направление кривой скругления. \n - Кривая filletCurve - это кривая сопряжения, дуга (когда surface == NULL) или кривая на поверхности цилиндра surface. \n + Кривая filletCurve - это кривая сопряжения, дуга (когда surface == c3d_null) или кривая на поверхности цилиндра surface. \n Поверхность surface - это цилиндрическая поверхность, на которой строится кривая сопряжения в общем случае. Для управления жизненным циклом поверхномти следует миспользовать методы ::AddRefItem(surface) и ::ReleaseItem(surface). \n \en Create a fillet curve for curves. \n @@ -952,22 +1000,22 @@ MATH_FUNC (MbResultType) ConnectingSpline( const MbCurve3D & curve1, double t1, that the fillet curve start is at the point with parameter t1, t1 and t2 are parameters of curves 'curve1' and 'curve2' which correspond to the start point and the end point of the fillet. \n Parameter 'sense' determines forward or backward orientation of the fillet curve. \n - Curve filletCurve is a fillet curve, an arc (when 'surface' == NULL) or a curve on a cylindric surface 'surface'. \n + Curve filletCurve is a fillet curve, an arc (when 'surface' == c3d_null) or a curve on a cylindric surface 'surface'. \n Surface 'surface' is a cylindric surface on which the fillet curve is constructed in general case. Use ::AddRefItem(surface) and ::ReleaseItem(surface) methods to manage the surface lifecycle. \n \~ \param[in] curve1 - \ru Соединяемая кривая 1. \en A curve 1 to be connected. \~ - \param[in/out] t1 - \ru Параметр точки на кривой 1 соединения с кривой соединения. + \param[in,out] t1 - \ru Параметр точки на кривой 1 соединения с кривой соединения. \en A point parameter on curve 1 of connection with fillet curve. \~ \param[out] w1 - \ru Параметр края на кривой 1. \en The parameter of curve 1 end point. \~ \param[in] curve2 - \ru Соединяемая кривая 2. \en A curve 2 to be connected. \~ - \param[in/out] t2 - \ru Параметр точки на кривой 2 соединения с кривой соединения. + \param[in,out] t2 - \ru Параметр точки на кривой 2 соединения с кривой соединения. \en A point parameter on curve 2 of connection with fillet curve. \~ \param[out] w2 - \ru Параметр края на кривой 2. \en The parameter of curve 2 end point. \~ - \param[in/out] radius - \ru Радиус дуги или цилиндра. + \param[in,out] radius - \ru Радиус дуги или цилиндра. \en The radius of an arc or a cylinder. \~ \param[in] sense - \ru Прямое (true) или обратное (false) направление кривой скругления. \en The forward (true) or the backward (false) direction of the fillet curve. \~ @@ -977,8 +1025,8 @@ MATH_FUNC (MbResultType) ConnectingSpline( const MbCurve3D & curve1, double t1, \en The fillet type. \~ \param[in] names - \ru Именователь кривых каркаса. \en An object defining the frame curves names. \~ - \param[out] surface - \ru Поверхность, которая будет создана и на которой базируется соединительная кривая, (может быть возращён NULL). - \en A surface on which the fillet curve is based on, it will be created by the method (can be NULL). \~ + \param[out] surface - \ru Поверхность, которая будет создана и на которой базируется соединительная кривая, (может быть возращён c3d_null). + \en A surface on which the fillet curve is based on, it will be created by the method (can be c3d_null). \~ \param[out] result - \ru Каркас с построенными кривыми. \en The frame with the constructed curves. \~ \return \ru Возвращает код результата операции. diff --git a/C3d/Include/alg_base.h b/C3d/Include/alg_base.h index 3f9ef51..39b329e 100644 --- a/C3d/Include/alg_base.h +++ b/C3d/Include/alg_base.h @@ -464,7 +464,7 @@ bool IsMonotonic( const TypeVector & items, bool isAscending, bool allowEqual = isOk = true; if ( allowEqual ) { - for ( size_t k = 1; k < cnt; k++ ) { + for ( size_t k = 1; k < cnt; ++k ) { if ( isAscending && items[k] < items[k-1] ) { isOk = false; break; @@ -476,7 +476,7 @@ bool IsMonotonic( const TypeVector & items, bool isAscending, bool allowEqual = } } else { - for ( size_t k = 1; k < cnt; k++ ) { + for ( size_t k = 1; k < cnt; ++k ) { if ( isAscending && items[k] <= items[k-1] ) { isOk = false; break; @@ -614,7 +614,7 @@ bool IsPlanar( const SpacePointsVector & pnts, MbPlacement3D * place, double mEp } } } - if ( isPlanar && place != NULL ) + if ( isPlanar && place != c3d_null ) place->Init( wrkPlace ); } } diff --git a/C3d/Include/alg_curve_delete_part.h b/C3d/Include/alg_curve_delete_part.h index d141186..3e8d763 100644 --- a/C3d/Include/alg_curve_delete_part.h +++ b/C3d/Include/alg_curve_delete_part.h @@ -92,8 +92,8 @@ MATH_FUNC (MbeState) DeleteCurvePart( const MbCartPoint & p1, \en The point indicating the piece of a curve to be kept. \~ \param[in, out] curve - \ru Изменяемая кривая. \en The curve to be modified. \~ - \param[in, out] part2 - \ru Всегда NULL. - \en This value is always NULL. \~ + \param[in, out] part2 - \ru Всегда c3d_null. + \en This value is always c3d_null. \~ \return \ru Состояние кривой после ее модификации. \en The state of a curve after its modification. \~ \warning \ru Для внутреннего использования. @@ -124,8 +124,8 @@ MATH_FUNC (MbeState) TrimmCurvePart( List & curveList, \en The point indicating the piece of a closed curve to be kept \~ \param[in, out] curve - \ru Изменяемая кривая. \en The curve to be modified. \~ - \param[in, out] part2 - \ru Всегда NULL. - \en This value is always NULL. \~ + \param[in, out] part2 - \ru Всегда c3d_null. + \en This value is always c3d_null. \~ \return \ru Состояние кривой после ее модификации. \en The state of a curve after its modification. \~ \warning \ru Для внутреннего использования. @@ -155,8 +155,8 @@ MATH_FUNC (MbeState) TrimmCurvePart( const MbCartPoint & p1, \en Boundary curve for justification. \~ \param[in] pnt - \ru Точка для выбора нужной части кривой. \en The point for selecting the piece of a curve. \~ - \param[in, out] part2 - \ru Всегда NULL. - \en This value is always NULL. \~ + \param[in, out] part2 - \ru Всегда c3d_null. + \en This value is always c3d_null. \~ \return \ru Состояние кривой после ее модификации. \en The state of a curve after modification. \~ \warning \ru Для внутреннего использования. @@ -222,8 +222,8 @@ MATH_FUNC (MbeState) BreakByClosedCurves( MbCurve & curve, const RPArray & limits, bool inside, PArray & part2, - SArray * cross = NULL, - bool * isEqualCurve = NULL, + SArray * cross = c3d_null, + bool * isEqualCurve = c3d_null, bool cutOnCurve = false ); diff --git a/C3d/Include/alg_dimension.h b/C3d/Include/alg_dimension.h index 3b69601..11ab760 100644 --- a/C3d/Include/alg_dimension.h +++ b/C3d/Include/alg_dimension.h @@ -440,7 +440,7 @@ MATH_FUNC (MbeProcessState) MinMaxDistances( const MbSurface & surface1, MbMinMaxSurfDists & allResults, MbMinMaxSurfDists & minResults, MbMinMaxSurfDists & maxResults, - IProgressIndicator * indicator = NULL ); + IProgressIndicator * indicator = c3d_null ); #endif // __ALG_DIMENSION_H diff --git a/C3d/Include/alg_draw.h b/C3d/Include/alg_draw.h index 8d077cb..538675f 100644 --- a/C3d/Include/alg_draw.h +++ b/C3d/Include/alg_draw.h @@ -95,7 +95,7 @@ public: public: /// \ru Отрисовать объект. \en Draw an any object. - virtual void DrawItem( const MbRefItem * ri, int R, int G, int B, int width = 1 ) = 0; + virtual void DrawItem( const MbRefItem * ri, int R, int G, int B, const MbMatrix3D & from = MbMatrix3D::identity, int width = 1 ) = 0; /// \ru Отрисовать трехмерный геометрический объект. \en Draw a three-dimensional geometric object. virtual void DrawItem( const MbSpaceItem * gi, int R, int G, int B, int width = 1 ) = 0; // Отрисовать трехмерный геометрический объект с размещением по матрице. @@ -1028,7 +1028,7 @@ void DrawVertexEdges( const Vertex * vertex, int vR, int vG, int vB, MbStepData stepData( ist_SpaceStep, Math::visualSag ); MbFormNote note(true, false); for ( size_t k = 0, cnt = edges.size(); k < cnt; ++k ) { - if ( edges[k] != NULL ) { + if ( edges[k] != c3d_null ) { edges[k]->GetCurve().CalculateMesh( stepData, note, edgeMesh ); DrawGI::DrawMesh( &edgeMesh, TRGB_WHITE ); DrawGI::DrawMesh( &edgeMesh, eR, eG, eB ); diff --git a/C3d/Include/alg_indicator.h b/C3d/Include/alg_indicator.h index a6f46ad..658a593 100644 --- a/C3d/Include/alg_indicator.h +++ b/C3d/Include/alg_indicator.h @@ -124,7 +124,7 @@ public: }; -#define EMPTY_STR StrData( NULL ) ///< \ru Создание пустой строки \en Creation of an empty string +#define EMPTY_STR StrData( c3d_null ) ///< \ru Создание пустой строки \en Creation of an empty string //------------------------------------------------------------------------------ @@ -279,14 +279,14 @@ MATH_FUNC (ProgressBarWrapper *) CreateProgressBar( IProgressIndicator * progInd \en The wrapper of the execution progress indicator. \~ \param[in] msg - \ru Данные о строке. \en Data of a string \~ - \return \ru true, если progBar != NULL и удалось задать имя процесса. + \return \ru true, если progBar != c3d_null и удалось задать имя процесса. \en true if 'progBar' is not null and the process name is successfully set. \~ \ingroup Base_Items */ // --- inline bool SetProgressBarName( ProgressBarWrapper * progBar, IStrData & msg ) { - if ( progBar != NULL ) + if ( progBar != c3d_null ) return progBar->SetName( msg ); return false; } @@ -308,7 +308,7 @@ inline bool SetProgressBarName( ProgressBarWrapper * progBar, IStrData & msg ) // --- inline bool SetProgressBarValue( ProgressBarWrapper * progBar, size_t v ) { - if ( progBar != NULL && !progBar->IsCancel() ) + if ( progBar != c3d_null && !progBar->IsCancel() ) return progBar->SetProgress( v ); return false; } @@ -328,7 +328,7 @@ inline bool SetProgressBarValue( ProgressBarWrapper * progBar, size_t v ) // --- inline void FinishProgressBar( ProgressBarWrapper * progBar ) { - if ( progBar != NULL ) { + if ( progBar != c3d_null ) { if ( progBar->IsCancel() ) progBar->Stop(); else progBar->Success(); } @@ -347,7 +347,7 @@ inline void FinishProgressBar( ProgressBarWrapper * progBar ) // --- inline bool StopProgressBar( ProgressBarWrapper * progBar ) { - if ( progBar != NULL && progBar->IsCancel() ) { + if ( progBar != c3d_null && progBar->IsCancel() ) { progBar->Stop(); return true; } @@ -362,14 +362,14 @@ inline bool StopProgressBar( ProgressBarWrapper * progBar ) \en The wrapper of the execution progress indicator. \~ \param[in] useParentName - \ru Флаг использования имени родителя. \en The flag of using the parent name. \~ - \return \ru true, если progBar != NULL. + \return \ru true, если progBar != c3d_null. \en true if 'progBar' is not null. \~ \ingroup Base_Items */ // --- inline bool UseParentName( ProgressBarWrapper * progBar, bool useParentName ) { - if ( progBar != NULL ) { + if ( progBar != c3d_null ) { progBar->UseParentName( useParentName ); return true; } @@ -389,7 +389,7 @@ inline bool UseParentName( ProgressBarWrapper * progBar, bool useParentName ) // --- inline bool IsParentNameUsed( const ProgressBarWrapper * progBar ) { - if ( progBar != NULL ) + if ( progBar != c3d_null ) return progBar->IsParentNameUsed(); return false; diff --git a/C3d/Include/alg_mesh_to_brep.h b/C3d/Include/alg_mesh_to_brep.h index d19605d..fec6646 100644 --- a/C3d/Include/alg_mesh_to_brep.h +++ b/C3d/Include/alg_mesh_to_brep.h @@ -76,7 +76,7 @@ MbFaceShell * ConvertGridToShell( const MbGrid & grid, const GridsToShellValues & params, const MbSNameMaker & snMaker, MbResultType & res, - IProgressIndicator * progBar = NULL ); + IProgressIndicator * progBar = c3d_null ); //------------------------------------------------------------------------------ @@ -86,7 +86,7 @@ MbFaceShell * ConvertMeshToShell( const MbMesh & mesh, const GridsToShellValues & params, const MbSNameMaker & snMaker, MbResultType & res, - IProgressIndicator * progBar = NULL ); + IProgressIndicator * progBar = c3d_null ); //------------------------------------------------------------------------------ diff --git a/C3d/Include/alg_nurbs_conic.h b/C3d/Include/alg_nurbs_conic.h index 637741f..d93d98f 100644 --- a/C3d/Include/alg_nurbs_conic.h +++ b/C3d/Include/alg_nurbs_conic.h @@ -57,9 +57,9 @@ class MbVector3D; \en The discriminant is less than 1. Otherwise it will be set to 0.99999999 automatically. \~ \return \ru Указатель на построенную кривую \n - NULL, если не удалось построить конику для заданных параметров. + c3d_null, если не удалось построить конику для заданных параметров. \en The pointer to the constructed curve \n - is NULL if a try to construct a conic for a given parameters has failed. \~ + is c3d_null if a try to construct a conic for a given parameters has failed. \~ \ingroup Curve3D_Modeling */ // --- @@ -87,9 +87,9 @@ MATH_FUNC ( MbCurve3D * ) NurbsConic_1( const MbCartPoint3D & mbPoint0, const Mb \en The discriminant is less than 1. Otherwise it will be set to 0.99999999 automatically. \~ \return \ru Указатель на построенную кривую \n - NULL, если не удалось построить конику для заданных параметров. + c3d_null, если не удалось построить конику для заданных параметров. \en The pointer to the constructed curve \n - is NULL if a try to construct a conic for a given parameters has failed. \~ + is c3d_null if a try to construct a conic for a given parameters has failed. \~ \ingroup Curve_Modeling */ // --- @@ -113,9 +113,9 @@ MATH_FUNC ( MbCurve * ) NurbsConic_1( const MbCartPoint & mbPoint0, const MbCart \param[in] mbVertex - \ru Координаты вершины угла, в который надо вписать конику. \en Coordinates of the vertex of angle which should be inscribed into the conic. \~ \return \ru Указатель на построенную кривую \n - NULL, если не удалось постороить конику для заданных параметров. + c3d_null, если не удалось постороить конику для заданных параметров. \en The pointer to the constructed curve \n - is NULL if a try to construct a conic for given parameters has failed. \~ + is c3d_null if a try to construct a conic for given parameters has failed. \~ \ingroup Curve3D_Modeling */ // --- @@ -138,9 +138,9 @@ MATH_FUNC ( MbCurve3D * ) NurbsConic_2( std::vector & vmbConicPoi \param[in] mbVertex - \ru Координаты вершины угла, в который надо вписать конику. \en Coordinates of the vertex of angle which should be inscribed into the conic. \~ \return \ru Указатель на построенную кривую \n - NULL, если не удалось постороить конику для заданных параметров. + c3d_null, если не удалось постороить конику для заданных параметров. \en The pointer to the constructed curve \n - is NULL if a try to construct a conic for given parameters has failed. \~ + is c3d_null if a try to construct a conic for given parameters has failed. \~ \ingroup Curve_Modeling */ // --- @@ -165,9 +165,9 @@ MATH_FUNC ( MbCurve * ) NurbsConic_2( std::vector & vmbConicPoints, \param[in] mbTangent2 - \ru Наклон в конце кривой. \en Inclination at end of a curve. \~ \return \ru Указатель на построенную кривую \n - NULL, если не удалось постороить конику для заданных параметров. + c3d_null, если не удалось постороить конику для заданных параметров. \en The pointer to the constructed curve \n - is NULL if a try to construct a conic for given parameters has failed. \~ + is c3d_null if a try to construct a conic for given parameters has failed. \~ \ingroup Curve3D_Modeling */ // --- @@ -193,9 +193,9 @@ MATH_FUNC ( MbCurve3D * ) NurbsConic_3( const std::vector & vmbCo \param[in] mbTangent2 - \ru Наклон в конце кривой. \en Inclination at end of a curve. \~ \return \ru Указатель на построенную кривую \n - NULL, если не удалось постороить конику для заданных параметров. + c3d_null, если не удалось постороить конику для заданных параметров. \en The pointer to the constructed curve \n - is NULL if a try to construct a conic for given parameters has failed. \~ + is c3d_null if a try to construct a conic for given parameters has failed. \~ \ingroup Curve_Modeling */ // --- @@ -224,9 +224,9 @@ MATH_FUNC ( MbCurve * ) NurbsConic_3( const std::vector & vmbConicP \en The discriminant is less than 1. Otherwise it will be set to 0.99999999 automatically. \~ \return \ru Указатель на построенную кривую \n - NULL, если не удалось построить конику для заданных параметров. + c3d_null, если не удалось построить конику для заданных параметров. \en The pointer to the constructed curve \n - is NULL if a try to construct a conic for given parameters has failed. \~ + is c3d_null if a try to construct a conic for given parameters has failed. \~ \ingroup Curve3D_Modeling */ // --- @@ -256,9 +256,9 @@ MATH_FUNC ( MbCurve3D * ) NurbsConic_4( const MbCartPoint3D & mbPoint1, const Mb \en The discriminant is less than 1. Otherwise it will be set to 0.99999999 automatically. \~ \return \ru Указатель на построенную кривую \n - NULL, если не удалось построить конику для заданных параметров. + c3d_null, если не удалось построить конику для заданных параметров. \en The pointer to the constructed curve \n - is NULL if a try to construct a conic for given parameters has failed. \~ + is c3d_null if a try to construct a conic for given parameters has failed. \~ \ingroup Curve_Modeling */ // --- @@ -288,9 +288,9 @@ MATH_FUNC ( MbCurve * ) NurbsConic_4( const MbCartPoint & mbPoint1, const MbCart \param[in] tanPntNb - \ru Номер точке, в которой задан наклон. \en Point number at which the inclination is specified. \~ \return \ru Указатель на построенную кривую \n - NULL, если не удалось постороить конику для заданных параметров. + c3d_null, если не удалось постороить конику для заданных параметров. \en The pointer to the constructed curve \n - is NULL if a try to construct a conic for given parameters has failed. \~ + is c3d_null if a try to construct a conic for given parameters has failed. \~ \ingroup Curve3D_Modeling */ // --- @@ -319,9 +319,9 @@ MATH_FUNC ( MbCurve3D * ) NurbsConic_5( const std::vector & vmbCo \param[in] tanPntNb - \ru Номер точке, в которой задан наклон. \en Point number at which the inclination is specified. \~ \return \ru Указатель на построенную кривую \n - NULL, если не удалось постороить конику для заданных параметров. + c3d_null, если не удалось постороить конику для заданных параметров. \en The pointer to the constructed curve \n - is NULL if a try to construct a conic for given parameters has failed. \~ + is c3d_null if a try to construct a conic for given parameters has failed. \~ \ingroup Curve_Modeling */ // --- @@ -342,9 +342,9 @@ MATH_FUNC ( MbCurve * ) NurbsConic_5( const std::vector & vmbConicP \en The container for points of a conic: the first point is start point, the last point is end point. there should be exactly 5 points. \~ \return \ru Указатель на построенную кривую \n - NULL, если не удалось постороить конику для заданных параметров. + c3d_null, если не удалось постороить конику для заданных параметров. \en The pointer to the constructed curve \n - is NULL if a try to construct a conic for given parameters has failed. \~ + is c3d_null if a try to construct a conic for given parameters has failed. \~ \ingroup Curve3D_Modeling */ // --- @@ -365,9 +365,9 @@ MATH_FUNC ( MbCurve3D * ) NurbsConic_6( const std::vector & vmbCo \en The container for points of a conic: the first point is start point, the last point is end point. there should be exactly 5 points. \~ \return \ru Указатель на построенную кривую \n - NULL, если не удалось постороить конику для заданных параметров. + c3d_null, если не удалось постороить конику для заданных параметров. \en The pointer to the constructed curve \n - is NULL if a try to construct a conic for given parameters has failed. \~ + is c3d_null if a try to construct a conic for given parameters has failed. \~ \ingroup Curve_Modeling */ // --- diff --git a/C3d/Include/alg_polyline.h b/C3d/Include/alg_polyline.h index 2fd6656..b6732f8 100644 --- a/C3d/Include/alg_polyline.h +++ b/C3d/Include/alg_polyline.h @@ -43,14 +43,14 @@ class MATH_CLASS MbCubicSpline3D; радиус скругления в этой точке. При создании заполняются поля m_lineSeg и m_arcSeg. m_lineSeg - это прямолинейный сегмент из этой точки в следующую. Для последней точки и замкнутой ломаной - из последней в первую. m_arcSeg - дуга скругления в данной точке. - Если какой-то сегмент был полностью удален или не создан, то его указатель должен быть NULL. + Если какой-то сегмент был полностью удален или не создан, то его указатель должен быть c3d_null. Объектами m_lineSeg и m_arcSeg не владеет, поэтому и не удаляет их. Объекты из полилинии. \en Some points may be deleted while the construction, therefore the old index is entered, it is filled and used in a model. Parameters of a point are its coordinates and fillet radius in this point. In a time of creation the fields 'm_lineSeg' and 'm_lineSeg' are being filled. 'm_lineSeg' is the straight-line segment from this point to the next point. For the last point and a closed polyline - from the last point to the first point. 'm_arcSeg'is the arc of a fillet in the given point. - If a segment has been fully deleted or it was not created then the pointer should be NULL. + If a segment has been fully deleted or it was not created then the pointer should be c3d_null. Object 'm_lineSeg' and 'm_arcSeg' are not owned, therefore they are not deleted. Objects from a polyline. \~ \ingroup Data_Structures */ @@ -69,8 +69,8 @@ public: : m_oldIndex( SYS_MAX_T ) , m_point () , m_radius ( 0.0 ) - , m_lineSeg ( NULL ) - , m_arcSeg ( NULL ) + , m_lineSeg ( c3d_null ) + , m_arcSeg ( c3d_null ) {} /// \ru Конструктор копирования. \en Copy constructor. Polyline3DPoint( const Polyline3DPoint & other ) @@ -250,9 +250,9 @@ MATH_FUNC (void) CreateSmoothFromBezier( const MbBezier & bez, RPArray /** \brief \ru Создать кривую заданного типа базе NURBS-кривой. \en Create a curve of a given type as NURBS-curve. \~ \details \ru Работает для двух типов: pt_LineSegment и pt_Arc. Если не удалось - аппроксимировать с заданной точностью функция вернет NULL. + аппроксимировать с заданной точностью функция вернет c3d_null. \en It works for the two types: 'pt_LineSegment' and 'pt_Arc'. If approximation with the given tolerance has failed - then the function returns NULL. \~ + then the function returns c3d_null. \~ \param[in] nurbs - \ru Исходная NURBS-кривая. \en The initial NURBS-curve. \~ \param[in] type - \ru Тип кривой, которую требуется создать. @@ -288,7 +288,7 @@ MATH_FUNC (MbCurve *) ConvertNurbsToCurveOfType( const MbNurbs & nurbs, MbePlane */ // --- MATH_FUNC (MbCurve *) GetFlatCurve( const MbCurve3D & curve3D, const MbMatrix3D & into, - MbRect1D * pRgn = NULL, VERSION version = Math::DefaultMathVersion() ); + MbRect1D * pRgn = c3d_null, VERSION version = Math::DefaultMathVersion() ); //------------------------------------------------------------------------------ diff --git a/C3d/Include/assembly.h b/C3d/Include/assembly.h index 971b4c9..62c8ef4 100644 --- a/C3d/Include/assembly.h +++ b/C3d/Include/assembly.h @@ -94,10 +94,10 @@ public: // \ru Общие функции геометрического объекта \en Common functions of a geometric object virtual MbeSpaceType IsA() const; // \ru Тип объекта. \en An object type. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * iReg = NULL ) const; // \ru Создать копию. \en Create a copy. - virtual void Transform( const MbMatrix3D &, MbRegTransform * iReg = NULL ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. - virtual void Move( const MbVector3D &, MbRegTransform * iReg = NULL ); // \ru Сдвинуть вдоль вектора. \en Move along a vector. - virtual void Rotate( const MbAxis3D &, double angle, MbRegTransform * iReg = NULL ); // \ru Повернуть вокруг оси. \en Rotate about an axis. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; // \ru Создать копию. \en Create a copy. + virtual void Transform( const MbMatrix3D &, MbRegTransform * iReg = c3d_null ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. + virtual void Move( const MbVector3D &, MbRegTransform * iReg = c3d_null ); // \ru Сдвинуть вдоль вектора. \en Move along a vector. + virtual void Rotate( const MbAxis3D &, double angle, MbRegTransform * iReg = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate about an axis. virtual bool IsSame( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Являются ли объекты равными? \en Are the objects equal? virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными? \en Are the objects similar? virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать объекты равным \en Make the objects equal @@ -151,11 +151,11 @@ public: virtual const MbItem * GetItemByName( SimpleName n, MbPath & path, MbMatrix3D & from ) const; // \ru Преобразовать согласно матрице c использованием регистратора селектированные содержимые объекты. \en Transform selected objects according to the matrix using the registrator. - virtual void TransformSelected( const MbMatrix3D & matr, MbRegTransform * iReg = NULL ); + virtual void TransformSelected( const MbMatrix3D & matr, MbRegTransform * iReg = c3d_null ); // \ru Сдвинуть вдоль вектора с использованием регистратора селектированные содержимые объекты. \en Move selected objects along the vector using the registrator. - virtual void MoveSelected( const MbVector3D & to, MbRegTransform * iReg = NULL ); + virtual void MoveSelected( const MbVector3D & to, MbRegTransform * iReg = c3d_null ); // \ru Повернуть вокруг оси на заданный угол с использованием регистратора селектированные содержимые объекты. \en Rotate selected objects about the axis by the given angle using the registrator. - virtual void RotateSelected( const MbAxis3D & axis, double angle, MbRegTransform * iReg = NULL ); + virtual void RotateSelected( const MbAxis3D & axis, double angle, MbRegTransform * iReg = c3d_null ); /// \ru Отдать селектированные содержимые объекты. \en Get selected objects. bool DetachSelected( RPArray & items, SArray & matrs, bool selected = true ); /// \ru Отцепить все видимые или невидимые объекты. \en Detach all visible or invisible objects. \~ @@ -310,8 +310,8 @@ template MbAssembly::MbAssembly( const ItemsVector & items ) : MbItem() , assemblyItems() - , constraintSystem( NULL ) - , m_reactor( NULL ) + , constraintSystem( c3d_null ) + , m_reactor( c3d_null ) { #ifdef C3D_DEBUG // Check a condition of the single owner. @@ -336,7 +336,7 @@ MbAssembly::MbAssembly( const ItemsVector & items ) template void MbAssembly::_Init( const ItemsVector & items ) { - C3D_ASSERT( assemblyItems.empty() && (constraintSystem == NULL) ); + C3D_ASSERT( assemblyItems.empty() && (constraintSystem == c3d_null) ); SimpleName idCounter = 0; for ( size_t i = 0, iCount = items.size(); i < iCount; ++i ) @@ -383,7 +383,7 @@ void MbAssembly::GetFacesSet( FacesVector & faces ) const template void MbInstance::GetFacesSet( FacesVector & faces ) const { - if ( item != NULL ) { + if ( item != c3d_null ) { if ( item->IsA() == st_Solid ) static_cast( *item ).GetFacesSet( faces ); else if ( item->IsA() == st_Assembly ) diff --git a/C3d/Include/assisting_item.h b/C3d/Include/assisting_item.h index 73fa9df..06a7861 100644 --- a/C3d/Include/assisting_item.h +++ b/C3d/Include/assisting_item.h @@ -51,10 +51,10 @@ public : // \ru Общие функции геометрического объекта. \en Common functions of a geometric object. virtual MbeSpaceType IsA() const; // \ru Тип объекта. \en An object type. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Создать копию. \en Create a copy. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвинуть вдоль вектора. \en Move along a vector. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate about an axis. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Создать копию. \en Create a copy. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвинуть вдоль вектора. \en Move along a vector. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate about an axis. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Являются ли объекты равными? \en Whether the objects are equal? virtual bool IsSimilar( const MbSpaceItem & init ) const; // \ru Являются ли объекты подобными? \en Whether the objects are similar? virtual bool SetEqual ( const MbSpaceItem & init ); // \ru Сделать объекты равным. \en Make the objects equal. diff --git a/C3d/Include/attr_color.h b/C3d/Include/attr_color.h index 3d9c8f4..6516b24 100644 --- a/C3d/Include/attr_color.h +++ b/C3d/Include/attr_color.h @@ -1,436 +1,439 @@ -//////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru Атрибуты. Цвет. Толщина линий отрисовки. Стиль линий отрисовки. Свойства для OpenGL. - \en Attributes. Color. Thickness of drawing lines. Style of drawing lines. Properties for OpenGL. \~ - -*/ -//////////////////////////////////////////////////////////////////////////////// - -#ifndef __ATTR_COLOR_H -#define __ATTR_COLOR_H - - -#include -#include - - -c3d_constexpr uint __RGB__ = 3; - - -//------------------------------------------------------------------------------ -/** \brief \ru Преобразовать цвет по трём компонентам в uint32. - \en Convert a color by 3 components in uint32. \~ - \details - \warning \ru Значения компонент цвета должны лежать в диапазоне [ 0; 1 ]. - \en Values of color components should belong to the range [ 0; 1 ]. \~ - \ingroup Model_Attributes -*/ -// --- -inline uint32 RGB2uint32( double r, double g, double b ) -{ - const double f1 = 255.0 / 256.0; - uint32 uinturgb[3]; - const uint32 bt = 256; - uinturgb[0] = uint32 ( 256.0 * r * f1 ); - uinturgb[1] = uint32 ( 256.0 * g * f1 ); - uinturgb[2] = uint32 ( 256.0 * b * f1 ); - for ( int n = 0; n < 3; n++ ) - if ( uinturgb[n] >= bt ) { - uinturgb[n] = bt - 1; - C3D_ASSERT_UNCONDITIONAL( false ); - } - return uinturgb[0] + bt * ( uinturgb[1] + bt * uinturgb[2] ); -} - - -//------------------------------------------------------------------------------ -/** \brief \ru Преобразовать цвет по трём компонентам в uint32. - \en Convert a color by 3 components in uint32. \~ - \details - \warning \ru Значения компонент цвета должны лежать в диапазоне [ 0; 1 ]. - \en Values of color components should belong to the range [ 0; 1 ]. \~ - \ingroup Model_Attributes -*/ -// --- -inline uint32 RGB2uint32( float r, float g, float b, float a ) -{ - const float f1 = 255.0 / 256.0; - uint32 uinturgb[4]; - const uint32 bt = 256; - uinturgb[0] = uint32 ( 256.0 * r * f1 ); - uinturgb[1] = uint32 ( 256.0 * g * f1 ); - uinturgb[2] = uint32 ( 256.0 * b * f1 ); - uinturgb[3] = uint32 ( 256.0 * a * f1 ); - for ( int n = 0; n < 4; n++ ) - if ( uinturgb[n] >= bt ) { - uinturgb[n] = bt - 1; - //C3D_ASSERT_UNCONDITIONAL( false ); - } - return uinturgb[0] + bt * ( uinturgb[1] + bt * ( uinturgb[2] + bt * uinturgb[3] ) ); -} - - -//------------------------------------------------------------------------------ -/** \brief \ru Преобразовать unit32 в три компоненты цвета. - \en Convert unit32 to 3 components of color. \~ - \details - \warning \ru Компоненты цветов лежат в диапазоне [ 0; 1 ]. - \en Color components belong to the range [ 0; 1 ]. \~ - \ingroup Model_Attributes -*/ -// --- -template -void uint322RGB( uint32 color, float_t& r, float_t& g, float_t& b ) { - const float_t r255 = float_t(1.0 / 255.0); - const uint32 u256 = (uint32)SYS_MAX_UINT8 + 1; - r = float_t ( color % u256); - g = float_t ( (color / 256) % u256); - b = float_t ( (color / 65536) % u256); - r *= r255; g *= r255; b *= r255; -} - - -//------------------------------------------------------------------------------ -/** \brief \ru Преобразовать цвет из модели HSV в uint32. - \en Convert a color from HSV model in uint32. \~ - \details \ru Преобразовать цвет из модели HSV в uint32. \n - \en Convert a color from HSV model in uint32. \n \~ - \ingroup Model_Attributes -*/ -// --- -inline -uint32 HSV2uint32( double h, double s, double v ) -{ - double hh, p, q, t, ff; - long i; - double r, g, b; - if ( s <= 0.0 ) { - r = v; - g = v; - b = v; - return ::RGB2uint32( r, g, b ); - } - hh = h; - if ( hh >= 360.0 ) - hh = 0.0; - hh /= 60.0; - i = (long)hh; - ff = hh - i; - p = v * (1.0 - s); - q = v * (1.0 - (s * ff)); - t = v * (1.0 - (s * (1.0 - ff))); - - switch ( i ) { - case 0 : { - r = v; - g = t; - b = p; - } break; - case 1 : { - r = q; - g = v; - b = p; - } break; - case 2 : { - r = p; - g = v; - b = t; - } break; - case 3 : { - r = p; - g = q; - b = v; - } break; - case 4 : { - r = t; - g = p; - b = v; - } break; - default : { - r = v; - g = p; - b = q; - } break; - } - return ::RGB2uint32( r, g, b ); -} - - -//------------------------------------------------------------------------------ -/** \brief \ru Цвет. - \en Color. \~ - \details \ru Цвет. \n - \en Color. \n \~ - \ingroup Model_Attributes -*/ -// --- -class MATH_CLASS MbColor : public MbElementaryAttribute { -protected : - uint32 color; ///< \ru Цвет. \en Color. - -protected : - /// \ru Конструктор копирования. \en Copy constructor. - MbColor( const MbColor & init ); -public : - /// \ru Конструктор. \en Constructor. - MbColor( uint32 init ); - /// \ru Деструктор. \en Destructor. - virtual ~MbColor(); - - // \ru Общие функции объекта \en Common functions of object. - - virtual MbeAttributeType AttributeType() const; // \ru Дать подтип атрибута. \en Get subtype of an attribute. - - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. - virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. - virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data. - - /// \ru Установить цвет. \en Set a color. - void Init( uint32 init ) { color = init; } - /// \ru Дать цвет. \en Get a color. - uint32 Color() const { return color; } -//int R() const { return red; } // \ru Красный цвет \en Red color -//int G() const { return green; } // \ru Зеленый цвет \en Green color -//int B() const { return blue; } // \ru Синий цвет \en Blue color - - virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. - virtual size_t SetProperties( const MbProperties & ); // \ru Установить свойства объекта. \en Set properties of object. - virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта. \en Get a name of object property. - -private: - void operator = ( const MbColor & ); // \ru Не реализовано \en Not implemented - -DECLARE_PERSISTENT_CLASS_NEW_DEL( MbColor ) -}; // MbColor - -IMPL_PERSISTENT_OPS( MbColor ) - - -//------------------------------------------------------------------------------ -/** \brief \ru Толщина линий отрисовки. - \en Thickness of drawing lines. \~ - \details \ru Толщина линий отрисовки. \n - \en Thickness of drawing lines. \n \~ - \ingroup Model_Attributes -*/ -// --- -class MATH_CLASS MbWidth : public MbElementaryAttribute { -protected : - int width; ///< \ru Толщина линий отрисовки. \enThickness of drawing lines. - -protected : - /// \ru Конструктор копирования. \en Copy constructor. - MbWidth( const MbWidth & init ); -public : - /// \ru Конструктор. \en Constructor. - MbWidth( int init ); - /// \ru Деструктор. \en Destructor. - virtual ~MbWidth(); - - // \ru Общие функции объекта \en Common functions of object. - - virtual MbeAttributeType AttributeType() const; // \ru Дать подтип атрибута. \en Get subtype of an attribute. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. - virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. - virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data. - - /// \ru Установить толщину. \en Set a thickness. - void Init( int init ) { width = init; } - /// \ru Дать толщину. \en Get a thickness. - int Width() const { return width; } - - virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. - virtual size_t SetProperties( const MbProperties & ); // \ru Установить свойства объекта. \en Set properties of object. - virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта. \en Get a name of object property. - -private: - void operator = ( const MbWidth & ); // \ru Не реализовано \en Not implemented - -DECLARE_PERSISTENT_CLASS_NEW_DEL( MbWidth ) -}; // MbWidth - -IMPL_PERSISTENT_OPS( MbWidth ) - - -//------------------------------------------------------------------------------ -/** \brief \ru Стиль линий отрисовки. - \en Style of drawing lines. \~ - \details \ru Стиль линий отрисовки. \n - \en Style of drawing lines. \n \~ - \ingroup Model_Attributes -*/ -// --- -class MATH_CLASS MbStyle : public MbElementaryAttribute { -protected : - int style; ///< \ru Стиль линий отрисовки. \en Style of drawing lines. - -protected : - /// \ru Конструктор копирования. \en Copy constructor. - MbStyle( const MbStyle & init ); -public : - /// \ru Конструктор. \en Constructor. - MbStyle( int init ); - /// \ru Деструктор. \en Destructor. - virtual ~MbStyle(); - - // \ru Общие функции объекта \en Common functions of object. - - virtual MbeAttributeType AttributeType() const; // \ru Дать подтип атрибута. \en Get subtype of an attribute. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. - virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. - virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data. - - /// \ru Установить стиль линий отрисовки. \en Set style of drawing lines. - void Init( int init ) { style = init; } - /// \ru Дать стиль линий отрисовки. \en Get style of drawing lines. - int Style() const { return style; } - - virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. - virtual size_t SetProperties( const MbProperties & ); // \ru Установить свойства объекта. \en Set properties of object. - virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта. \en Get a name of object property. - -private: - void operator = ( const MbStyle & ); // \ru Не реализовано \en Not implemented - -DECLARE_PERSISTENT_CLASS_NEW_DEL( MbStyle ) -}; // MbStyle - -IMPL_PERSISTENT_OPS( MbStyle ) - - -//------------------------------------------------------------------------------ -/** \brief \ru Свойства для OpenGL. - \en Properties for OpenGL. \~ - \details \ru Свойства для OpenGL для трех цветов: RED, GREEN, BLUE. \n - \en Properties for OpenGL for colors: RED, GREEN, BLUE. \n \~ - \ingroup Model_Attributes -*/ -// --- -class MATH_CLASS MbVisual : public MbElementaryAttribute { -protected : - float ambient[__RGB__]; ///< \ru Коэффициент общего фона для трех цветов: RED, GREEN, BLUE. \en Coefficient of ambient background for colors: RED, GREEN, BLUE, range 0.0 - 1.0. - float diffuse[__RGB__]; ///< \ru Коэффициент диффузного отражения для трех цветов: RED, GREEN, BLUE. \en Coefficient of diffuse reflection for colors: RED, GREEN, BLUE, range 0.0 - 1.0. - float specularity[__RGB__]; ///< \ru Коэффициент зеркального отражения света трех цветов: RED, GREEN, BLUE. \en Coefficient of specular reflection for light colors: RED, GREEN, BLUE, range 0.0 - 1.0. - float shininess; ///< \ru Блеск (показатель степени в законе зеркального отражения). \en Shininess (index according to the law of specular reflection), range 0 - 128. - float opacity; ///< \ru Коэффициент непрозрачности (коэффициент суммарного отражения). \en Opacity coefficient (coefficient of total reflection), range 0.0 (transparent) - 1.0(opaque). - float emission; ///< \ru Коэффициент излучения. \en Emissivity coefficient, range 0.0 - 1.0. - float chrom; ///< \ru Коэффициент зеркального отражения объектов. \en Coefficient of specular reflection for objects, range 0.0 - 1.0. - -protected : - /// \ru Конструктор копирования. \en Copy constructor. - MbVisual( const MbVisual & init ); -public : - /// \ru Конструктор. \en Constructor. - MbVisual( float a = MB_AMBIENT, float d = MB_DIFFUSE, float s = MB_SPECULARITY, - float h = MB_SHININESS, float t = MB_OPACITY, float e = MB_EMISSION ); - /// \ru Деструктор. \en Destructor. - virtual ~MbVisual(); - - // \ru Общие функции объекта \en Common functions of object. - - virtual MbeAttributeType AttributeType() const; // \ru Дать подтип атрибута. \en Get subtype of an attribute. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. - virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. - virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data. - - /// \ru Установить свойства для OpenGL. \en Set properties for OpenGL. - void Init( float a = MB_AMBIENT, float d = MB_DIFFUSE, float s = MB_SPECULARITY, - float h = MB_SHININESS, float t = MB_OPACITY, float e = MB_EMISSION, uint rgb = 0 ) { - ambient[rgb%__RGB__] = a; // \ru Коэффициент общего фона. \en Coefficient of ambient background. - diffuse[rgb%__RGB__] = d; // \ru Коэффициент диффузного отражения. \en Coefficient of diffuse reflection. - specularity[rgb%__RGB__] = s; // \ru Коэффициент зеркального отражения света. \en Coefficient of specular reflection for light. - shininess = h; // \ru Блеск (показатель степени. в законе зеркального отражения). \en Shininess (index according to the law of specular reflection). - opacity = t; // \ru Коэффициент непрозрачности. \en Opacity coefficient. - emission = e; // \ru Коэффициент излучения. \en Emissivity coefficient. - chrom = s; // \ru Коэффициент зеркального отражения объектов. \en Coefficient of specular reflection for objects. - } - /// \ru Дать свойства для OpenGL. \en Get properties for OpenGL. - void Get( float & a, float & d, float & s, float & h, float & t, float & e, uint rgb = 0 ) const { - a = ambient[rgb%__RGB__]; // \ru Коэффициент общего фона. \en Coefficient of ambient background. - d = diffuse[rgb%__RGB__]; // \ru Коэффициент диффузного отражения. \en Coefficient of diffuse reflection. - s = specularity[rgb%__RGB__]; // \ru Коэффициент зеркального отражения света. \en Coefficient of Specular reflection for light. - h = shininess; // \ru Блеск (показатель степени в законе зеркального отражения). \en Shininess (index according to the law of specular reflection). - t = opacity; // \ru Коэффициент непрозрачности. \en Opacity coefficient. - e = emission; // \ru Коэффициент излучения. \en Emissivity coefficient. - } - float Ambient ( uint rgb = 0 ) const { return ambient[rgb%__RGB__]; } // \ru Дать коэффициент общего фона. \en Get a coefficient of ambient background. - float Diffuse ( uint rgb = 0 ) const { return diffuse[rgb%__RGB__]; } // \ru Дать коэффициент диффузного отражения. \en Get a coefficient of diffuse reflection. - float Specularity ( uint rgb = 0 ) const { return specularity[rgb%__RGB__]; } // \ru Дать коэффициент зеркального отражения света. \en Get a coefficient of specular reflection for light. - float Shininess () const { return shininess; } // \ru Дать блеск (показатель степени в законе зеркального отражения). \en Get shininess (index according to the law of specular reflection). - float Opacity () const { return opacity; } // \ru Дать коэффициент непрозрачности. \en Get an opacity coefficient. - float Emission () const { return emission; } // \ru Дать коэффициент излучения. \en Get a coefficient of emissivity. - float Chrom () const { return chrom; } // \ru Дать коэффициент зеркального отражения объектов. \en Get a coefficient of specular reflection for objects. - const float * Ambients () const { return ambient; } // \ru Дать коэффициенты общего фона. \en Get all coefficients of ambient background. - const float * Diffuses () const { return diffuse; } // \ru Дать коэффициенты диффузного отражения. \en Get all coefficients of diffuse reflection. - const float * Specularitys() const { return specularity; } // \ru Дать коэффициенты зеркального отражения света. \en Get all coefficients of specular reflection for light. - - void SetAmbient ( float v, uint rgb = 0 ) { ambient[rgb%__RGB__] = v; } // \ru Установить коэффициент общего фона. \en Set a coefficient of ambient background. - void SetDiffuse ( float v, uint rgb = 0 ) { diffuse[rgb%__RGB__] = v ; } // \ru Установить коэффициент диффузного отражения. \en Set a coefficient of diffuse reflection. - void SetSpecularity ( float v, uint rgb = 0 ) { specularity[rgb%__RGB__] = v; } // \ru Установить коэффициент зеркального отражения света. \en Set a coefficient of specular reflection for light. - void SetShininess ( float v ) { shininess = v; } // \ru Установить блеск (показатель степени в законе зеркального отражения). \en Set shininess (index according to the law of specular reflection). - void SetOpacity ( float v ) { opacity = v; } // \ru Установить коэффициент непрозрачности. \en Set an opacity coefficient. - void SetEmission ( float v ) { emission = v; } // \ru Установить коэффициент излучения. \en Set a coefficient of emissivity. - void SetChrom ( float v ) { chrom = v; } // \ru Установить коэффициент зеркального отражения объектов. \en Set a coefficient of specular reflection for objects. - - virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. - virtual size_t SetProperties( const MbProperties & ); // \ru Установить свойства объекта. \en Set properties of object. - virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта. \en Get a name of object property. - -private: - void operator = ( const MbVisual & ); // \ru Не реализовано \en Not implemented - -DECLARE_PERSISTENT_CLASS_NEW_DEL( MbVisual ) -}; // MbVisual - -IMPL_PERSISTENT_OPS( MbVisual ) - - -//------------------------------------------------------------------------------ -/** \brief \ru Количество u-линий и v-линий отрисовочной сетки. - \en The number of u-mesh and v-mesh drawing lines. \~ - \details \ru Количество u-линий и v-линий отрисовочной сетки. \n - \en The number of u-mesh and v-mesh drawing lines. \n \~ - \ingroup Model_Attributes -*/ -// --- -class MATH_CLASS MbWireCount : public MbElementaryAttribute { -protected : - size_t uMeshCount; ///< \ru Количество u-линий отрисовочной сетки. \en The number of u-mesh lines. - size_t vMeshCount; ///< \ru Количество v-линий отрисовочной сетки. \en The number of v-mesh lines. - -protected : - /// \ru Конструктор копирования. \en Copy constructor. - MbWireCount( const MbWireCount & init ); -public : - /// \ru Конструктор. \en Constructor. - MbWireCount( size_t uCount, size_t vCount ); - /// \ru Деструктор. \en Destructor. - virtual ~MbWireCount(); - - // \ru Общие функции объекта \en Common functions of object. - - virtual MbeAttributeType AttributeType() const; // \ru Дать подтип атрибута. \en Get subtype of an attribute. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. - virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. - virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data. - - /// \ru Установить количество линий отрисовки. \en Set count of drawing lines. - void Init( size_t uCount, size_t vCount ) { uMeshCount = uCount, vMeshCount = vCount; } - /// \ru Выдать количество разбиений по u и v. \en The the number of splittings in u-direction and v-direction. - void Get( size_t & uCount, size_t & vCount ) const { uCount = uMeshCount; vCount = vMeshCount; } - - virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. - virtual size_t SetProperties( const MbProperties & ); // \ru Установить свойства объекта. \en Set properties of object. - virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта. \en Get a name of object property. - -private: - void operator = ( const MbWireCount & ); // \ru Не реализовано \en Not implemented - -DECLARE_PERSISTENT_CLASS_NEW_DEL( MbWireCount ) -}; // MbWireCount - -IMPL_PERSISTENT_OPS( MbWireCount ) - - -#endif // __ATTR_COLOR_H +//////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Атрибуты. Цвет. Толщина линий отрисовки. Стиль линий отрисовки. Свойства для OpenGL. + \en Attributes. Color. Thickness of drawing lines. Style of drawing lines. Properties for OpenGL. \~ + +*/ +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __ATTR_COLOR_H +#define __ATTR_COLOR_H + + +#include +#include + + +c3d_constexpr uint __RGB__ = 3; + + +//------------------------------------------------------------------------------ +/** \brief \ru Преобразовать цвет по трём компонентам в uint32. + \en Convert a color by 3 components in uint32. \~ + \details + \warning \ru Значения компонент цвета должны лежать в диапазоне [ 0; 1 ]. + \en Values of color components should belong to the range [ 0; 1 ]. \~ + \ingroup Model_Attributes +*/ +// --- +inline +uint32 RGB2uint32( double r, double g, double b ) +{ + const double f1 = 255.0 / 256.0; + uint32 uinturgb[3]; + const uint32 bt = 256; + uinturgb[0] = uint32 ( 256.0 * r * f1 ); + uinturgb[1] = uint32 ( 256.0 * g * f1 ); + uinturgb[2] = uint32 ( 256.0 * b * f1 ); + for ( int n = 0; n < 3; n++ ) + if ( uinturgb[n] >= bt ) { + uinturgb[n] = bt - 1; + C3D_ASSERT_UNCONDITIONAL( false ); + } + return uinturgb[0] + bt * ( uinturgb[1] + bt * uinturgb[2] ); +} + + +//------------------------------------------------------------------------------ +/** \brief \ru Преобразовать цвет по трём компонентам в uint32. + \en Convert a color by 3 components in uint32. \~ + \details + \warning \ru Значения компонент цвета должны лежать в диапазоне [ 0; 1 ]. + \en Values of color components should belong to the range [ 0; 1 ]. \~ + \ingroup Model_Attributes +*/ +// --- +inline +uint32 RGB2uint32( float r, float g, float b, float a ) +{ + const float f1 = 255.0 / 256.0; + uint32 uinturgb[4]; + const uint32 bt = 256; + uinturgb[0] = uint32 ( 256.0 * r * f1 ); + uinturgb[1] = uint32 ( 256.0 * g * f1 ); + uinturgb[2] = uint32 ( 256.0 * b * f1 ); + uinturgb[3] = uint32 ( 256.0 * a * f1 ); + for ( int n = 0; n < 4; n++ ) + if ( uinturgb[n] >= bt ) { + uinturgb[n] = bt - 1; + //C3D_ASSERT_UNCONDITIONAL( false ); + } + return uinturgb[0] + bt * ( uinturgb[1] + bt * ( uinturgb[2] + bt * uinturgb[3] ) ); +} + + +//------------------------------------------------------------------------------ +/** \brief \ru Преобразовать unit32 в три компоненты цвета. + \en Convert unit32 to 3 components of color. \~ + \details + \warning \ru Компоненты цветов лежат в диапазоне [ 0; 1 ]. + \en Color components belong to the range [ 0; 1 ]. \~ + \ingroup Model_Attributes +*/ +// --- +template +void uint322RGB( uint32 color, float_t & r, float_t & g, float_t & b ) +{ + const float_t r255 = float_t(1.0 / 255.0); + const uint32 u256 = (uint32)SYS_MAX_UINT8 + 1; + r = float_t ( color % u256); + g = float_t ( (color / 256) % u256); + b = float_t ( (color / 65536) % u256); + r *= r255; g *= r255; b *= r255; +} + + +//------------------------------------------------------------------------------ +/** \brief \ru Преобразовать цвет из модели HSV в uint32. + \en Convert a color from HSV model in uint32. \~ + \details \ru Преобразовать цвет из модели HSV в uint32. \n + \en Convert a color from HSV model in uint32. \n \~ + \ingroup Model_Attributes +*/ +// --- +inline +uint32 HSV2uint32( double h, double s, double v ) +{ + double hh, p, q, t, ff; + long i; + double r, g, b; + if ( s <= 0.0 ) { + r = v; + g = v; + b = v; + return ::RGB2uint32( r, g, b ); + } + hh = h; + if ( hh >= 360.0 ) + hh = 0.0; + hh /= 60.0; + i = (long)hh; + ff = hh - i; + p = v * (1.0 - s); + q = v * (1.0 - (s * ff)); + t = v * (1.0 - (s * (1.0 - ff))); + + switch ( i ) { + case 0 : { + r = v; + g = t; + b = p; + } break; + case 1 : { + r = q; + g = v; + b = p; + } break; + case 2 : { + r = p; + g = v; + b = t; + } break; + case 3 : { + r = p; + g = q; + b = v; + } break; + case 4 : { + r = t; + g = p; + b = v; + } break; + default : { + r = v; + g = p; + b = q; + } break; + } + return ::RGB2uint32( r, g, b ); +} + + +//------------------------------------------------------------------------------ +/** \brief \ru Цвет. + \en Color. \~ + \details \ru Цвет. \n + \en Color. \n \~ + \ingroup Model_Attributes +*/ +// --- +class MATH_CLASS MbColor : public MbElementaryAttribute { +protected : + uint32 color; ///< \ru Цвет. \en Color. + +protected : + /// \ru Конструктор копирования. \en Copy constructor. + MbColor( const MbColor & init ); +public : + /// \ru Конструктор. \en Constructor. + MbColor( uint32 init ); + /// \ru Деструктор. \en Destructor. + virtual ~MbColor(); + + // \ru Общие функции объекта \en Common functions of object. + + virtual MbeAttributeType AttributeType() const; // \ru Дать подтип атрибута. \en Get subtype of an attribute. + + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. + virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data. + + /// \ru Установить цвет. \en Set a color. + void Init( uint32 init ) { color = init; } + /// \ru Дать цвет. \en Get a color. + uint32 Color() const { return color; } +//int R() const { return red; } // \ru Красный цвет \en Red color +//int G() const { return green; } // \ru Зеленый цвет \en Green color +//int B() const { return blue; } // \ru Синий цвет \en Blue color + + virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. + virtual size_t SetProperties( const MbProperties & ); // \ru Установить свойства объекта. \en Set properties of object. + virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта. \en Get a name of object property. + +private: + void operator = ( const MbColor & ); // \ru Не реализовано \en Not implemented + +DECLARE_PERSISTENT_CLASS_NEW_DEL( MbColor ) +}; // MbColor + +IMPL_PERSISTENT_OPS( MbColor ) + + +//------------------------------------------------------------------------------ +/** \brief \ru Толщина линий отрисовки. + \en Thickness of drawing lines. \~ + \details \ru Толщина линий отрисовки. \n + \en Thickness of drawing lines. \n \~ + \ingroup Model_Attributes +*/ +// --- +class MATH_CLASS MbWidth : public MbElementaryAttribute { +protected : + int width; ///< \ru Толщина линий отрисовки. \enThickness of drawing lines. + +protected : + /// \ru Конструктор копирования. \en Copy constructor. + MbWidth( const MbWidth & init ); +public : + /// \ru Конструктор. \en Constructor. + MbWidth( int init ); + /// \ru Деструктор. \en Destructor. + virtual ~MbWidth(); + + // \ru Общие функции объекта \en Common functions of object. + + virtual MbeAttributeType AttributeType() const; // \ru Дать подтип атрибута. \en Get subtype of an attribute. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. + virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data. + + /// \ru Установить толщину. \en Set a thickness. + void Init( int init ) { width = init; } + /// \ru Дать толщину. \en Get a thickness. + int Width() const { return width; } + + virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. + virtual size_t SetProperties( const MbProperties & ); // \ru Установить свойства объекта. \en Set properties of object. + virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта. \en Get a name of object property. + +private: + void operator = ( const MbWidth & ); // \ru Не реализовано \en Not implemented + +DECLARE_PERSISTENT_CLASS_NEW_DEL( MbWidth ) +}; // MbWidth + +IMPL_PERSISTENT_OPS( MbWidth ) + + +//------------------------------------------------------------------------------ +/** \brief \ru Стиль линий отрисовки. + \en Style of drawing lines. \~ + \details \ru Стиль линий отрисовки. \n + \en Style of drawing lines. \n \~ + \ingroup Model_Attributes +*/ +// --- +class MATH_CLASS MbStyle : public MbElementaryAttribute { +protected : + int style; ///< \ru Стиль линий отрисовки. \en Style of drawing lines. + +protected : + /// \ru Конструктор копирования. \en Copy constructor. + MbStyle( const MbStyle & init ); +public : + /// \ru Конструктор. \en Constructor. + MbStyle( int init ); + /// \ru Деструктор. \en Destructor. + virtual ~MbStyle(); + + // \ru Общие функции объекта \en Common functions of object. + + virtual MbeAttributeType AttributeType() const; // \ru Дать подтип атрибута. \en Get subtype of an attribute. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. + virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data. + + /// \ru Установить стиль линий отрисовки. \en Set style of drawing lines. + void Init( int init ) { style = init; } + /// \ru Дать стиль линий отрисовки. \en Get style of drawing lines. + int Style() const { return style; } + + virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. + virtual size_t SetProperties( const MbProperties & ); // \ru Установить свойства объекта. \en Set properties of object. + virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта. \en Get a name of object property. + +private: + void operator = ( const MbStyle & ); // \ru Не реализовано \en Not implemented + +DECLARE_PERSISTENT_CLASS_NEW_DEL( MbStyle ) +}; // MbStyle + +IMPL_PERSISTENT_OPS( MbStyle ) + + +//------------------------------------------------------------------------------ +/** \brief \ru Свойства для OpenGL. + \en Properties for OpenGL. \~ + \details \ru Свойства для OpenGL для трех цветов: RED, GREEN, BLUE. \n + \en Properties for OpenGL for colors: RED, GREEN, BLUE. \n \~ + \ingroup Model_Attributes +*/ +// --- +class MATH_CLASS MbVisual : public MbElementaryAttribute { +protected : + float ambient[__RGB__]; ///< \ru Коэффициент общего фона для трех цветов: RED, GREEN, BLUE. \en Coefficient of ambient background for colors: RED, GREEN, BLUE, range 0.0 - 1.0. + float diffuse[__RGB__]; ///< \ru Коэффициент диффузного отражения для трех цветов: RED, GREEN, BLUE. \en Coefficient of diffuse reflection for colors: RED, GREEN, BLUE, range 0.0 - 1.0. + float specularity[__RGB__]; ///< \ru Коэффициент зеркального отражения света трех цветов: RED, GREEN, BLUE. \en Coefficient of specular reflection for light colors: RED, GREEN, BLUE, range 0.0 - 1.0. + float shininess; ///< \ru Блеск (показатель степени в законе зеркального отражения). \en Shininess (index according to the law of specular reflection), range 0 - 128. + float opacity; ///< \ru Коэффициент непрозрачности (коэффициент суммарного отражения). \en Opacity coefficient (coefficient of total reflection), range 0.0 (transparent) - 1.0(opaque). + float emission; ///< \ru Коэффициент излучения. \en Emissivity coefficient, range 0.0 - 1.0. + float chrom; ///< \ru Коэффициент зеркального отражения объектов. \en Coefficient of specular reflection for objects, range 0.0 - 1.0. + +protected : + /// \ru Конструктор копирования. \en Copy constructor. + MbVisual( const MbVisual & init ); +public : + /// \ru Конструктор. \en Constructor. + MbVisual( float a = MB_AMBIENT, float d = MB_DIFFUSE, float s = MB_SPECULARITY, + float h = MB_SHININESS, float t = MB_OPACITY, float e = MB_EMISSION ); + /// \ru Деструктор. \en Destructor. + virtual ~MbVisual(); + + // \ru Общие функции объекта \en Common functions of object. + + virtual MbeAttributeType AttributeType() const; // \ru Дать подтип атрибута. \en Get subtype of an attribute. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. + virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data. + + /// \ru Установить свойства для OpenGL. \en Set properties for OpenGL. + void Init( float a = MB_AMBIENT, float d = MB_DIFFUSE, float s = MB_SPECULARITY, + float h = MB_SHININESS, float t = MB_OPACITY, float e = MB_EMISSION, uint rgb = 0 ) { + ambient[rgb%__RGB__] = a; // \ru Коэффициент общего фона. \en Coefficient of ambient background. + diffuse[rgb%__RGB__] = d; // \ru Коэффициент диффузного отражения. \en Coefficient of diffuse reflection. + specularity[rgb%__RGB__] = s; // \ru Коэффициент зеркального отражения света. \en Coefficient of specular reflection for light. + shininess = h; // \ru Блеск (показатель степени. в законе зеркального отражения). \en Shininess (index according to the law of specular reflection). + opacity = t; // \ru Коэффициент непрозрачности. \en Opacity coefficient. + emission = e; // \ru Коэффициент излучения. \en Emissivity coefficient. + chrom = s; // \ru Коэффициент зеркального отражения объектов. \en Coefficient of specular reflection for objects. + } + /// \ru Дать свойства для OpenGL. \en Get properties for OpenGL. + void Get( float & a, float & d, float & s, float & h, float & t, float & e, uint rgb = 0 ) const { + a = ambient[rgb%__RGB__]; // \ru Коэффициент общего фона. \en Coefficient of ambient background. + d = diffuse[rgb%__RGB__]; // \ru Коэффициент диффузного отражения. \en Coefficient of diffuse reflection. + s = specularity[rgb%__RGB__]; // \ru Коэффициент зеркального отражения света. \en Coefficient of Specular reflection for light. + h = shininess; // \ru Блеск (показатель степени в законе зеркального отражения). \en Shininess (index according to the law of specular reflection). + t = opacity; // \ru Коэффициент непрозрачности. \en Opacity coefficient. + e = emission; // \ru Коэффициент излучения. \en Emissivity coefficient. + } + float Ambient ( uint rgb = 0 ) const { return ambient[rgb%__RGB__]; } // \ru Дать коэффициент общего фона. \en Get a coefficient of ambient background. + float Diffuse ( uint rgb = 0 ) const { return diffuse[rgb%__RGB__]; } // \ru Дать коэффициент диффузного отражения. \en Get a coefficient of diffuse reflection. + float Specularity ( uint rgb = 0 ) const { return specularity[rgb%__RGB__]; } // \ru Дать коэффициент зеркального отражения света. \en Get a coefficient of specular reflection for light. + float Shininess () const { return shininess; } // \ru Дать блеск (показатель степени в законе зеркального отражения). \en Get shininess (index according to the law of specular reflection). + float Opacity () const { return opacity; } // \ru Дать коэффициент непрозрачности. \en Get an opacity coefficient. + float Emission () const { return emission; } // \ru Дать коэффициент излучения. \en Get a coefficient of emissivity. + float Chrom () const { return chrom; } // \ru Дать коэффициент зеркального отражения объектов. \en Get a coefficient of specular reflection for objects. + const float * Ambients () const { return ambient; } // \ru Дать коэффициенты общего фона. \en Get all coefficients of ambient background. + const float * Diffuses () const { return diffuse; } // \ru Дать коэффициенты диффузного отражения. \en Get all coefficients of diffuse reflection. + const float * Specularitys() const { return specularity; } // \ru Дать коэффициенты зеркального отражения света. \en Get all coefficients of specular reflection for light. + + void SetAmbient ( float v, uint rgb = 0 ) { ambient[rgb%__RGB__] = v; } // \ru Установить коэффициент общего фона. \en Set a coefficient of ambient background. + void SetDiffuse ( float v, uint rgb = 0 ) { diffuse[rgb%__RGB__] = v ; } // \ru Установить коэффициент диффузного отражения. \en Set a coefficient of diffuse reflection. + void SetSpecularity ( float v, uint rgb = 0 ) { specularity[rgb%__RGB__] = v; } // \ru Установить коэффициент зеркального отражения света. \en Set a coefficient of specular reflection for light. + void SetShininess ( float v ) { shininess = v; } // \ru Установить блеск (показатель степени в законе зеркального отражения). \en Set shininess (index according to the law of specular reflection). + void SetOpacity ( float v ) { opacity = v; } // \ru Установить коэффициент непрозрачности. \en Set an opacity coefficient. + void SetEmission ( float v ) { emission = v; } // \ru Установить коэффициент излучения. \en Set a coefficient of emissivity. + void SetChrom ( float v ) { chrom = v; } // \ru Установить коэффициент зеркального отражения объектов. \en Set a coefficient of specular reflection for objects. + + virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. + virtual size_t SetProperties( const MbProperties & ); // \ru Установить свойства объекта. \en Set properties of object. + virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта. \en Get a name of object property. + +private: + void operator = ( const MbVisual & ); // \ru Не реализовано \en Not implemented + +DECLARE_PERSISTENT_CLASS_NEW_DEL( MbVisual ) +}; // MbVisual + +IMPL_PERSISTENT_OPS( MbVisual ) + + +//------------------------------------------------------------------------------ +/** \brief \ru Количество u-линий и v-линий отрисовочной сетки. + \en The number of u-mesh and v-mesh drawing lines. \~ + \details \ru Количество u-линий и v-линий отрисовочной сетки. \n + \en The number of u-mesh and v-mesh drawing lines. \n \~ + \ingroup Model_Attributes +*/ +// --- +class MATH_CLASS MbWireCount : public MbElementaryAttribute { +protected : + size_t uMeshCount; ///< \ru Количество u-линий отрисовочной сетки. \en The number of u-mesh lines. + size_t vMeshCount; ///< \ru Количество v-линий отрисовочной сетки. \en The number of v-mesh lines. + +protected : + /// \ru Конструктор копирования. \en Copy constructor. + MbWireCount( const MbWireCount & init ); +public : + /// \ru Конструктор. \en Constructor. + MbWireCount( size_t uCount, size_t vCount ); + /// \ru Деструктор. \en Destructor. + virtual ~MbWireCount(); + + // \ru Общие функции объекта \en Common functions of object. + + virtual MbeAttributeType AttributeType() const; // \ru Дать подтип атрибута. \en Get subtype of an attribute. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. + virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data. + + /// \ru Установить количество линий отрисовки. \en Set count of drawing lines. + void Init( size_t uCount, size_t vCount ) { uMeshCount = uCount, vMeshCount = vCount; } + /// \ru Выдать количество разбиений по u и v. \en The the number of splittings in u-direction and v-direction. + void Get( size_t & uCount, size_t & vCount ) const { uCount = uMeshCount; vCount = vMeshCount; } + + virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. + virtual size_t SetProperties( const MbProperties & ); // \ru Установить свойства объекта. \en Set properties of object. + virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта. \en Get a name of object property. + +private: + void operator = ( const MbWireCount & ); // \ru Не реализовано \en Not implemented + +DECLARE_PERSISTENT_CLASS_NEW_DEL( MbWireCount ) +}; // MbWireCount + +IMPL_PERSISTENT_OPS( MbWireCount ) + + +#endif // __ATTR_COLOR_H diff --git a/C3d/Include/attr_common_attribute.h b/C3d/Include/attr_common_attribute.h index ae22d14..f8a479b 100644 --- a/C3d/Include/attr_common_attribute.h +++ b/C3d/Include/attr_common_attribute.h @@ -37,7 +37,7 @@ protected : public : virtual MbeAttributeType AttributeFamily() const; // \ru Выдать тип атрибута. \en Get attribute type. virtual MbeAttributeType AttributeType() const = 0; // \ru Выдать подтип атрибута. \en Get subtype of an attribute. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const = 0; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const = 0; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. virtual bool Init( const MbAttribute & ) = 0; // \ru Инициализировать данные по присланным. \en Initialize data. @@ -46,13 +46,13 @@ public : // \ru Выполнить действия при конвертации владельца. \en Perform actions when converting the owner. virtual void OnConvertOwner( const MbAttributeContainer & owner, MbAttributeContainer & other ); // \ru Выполнить действия при трансформировании владельца. \en Perform actions when transforming the owner. - virtual void OnTransformOwner( const MbAttributeContainer & owner, const MbMatrix3D &, MbRegTransform * = NULL ); + virtual void OnTransformOwner( const MbAttributeContainer & owner, const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Выполнить действия при перемещении владельца. \en Perform actions when moving the owner. - virtual void OnMoveOwner( const MbAttributeContainer & owner, const MbVector3D &, MbRegTransform * = NULL ); + virtual void OnMoveOwner( const MbAttributeContainer & owner, const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Выполнить действия при вращении владельца. \en Perform actions when rotating the owner. - virtual void OnRotateOwner( const MbAttributeContainer & owner, const MbAxis3D &, double angle, MbRegTransform * = NULL ); + virtual void OnRotateOwner( const MbAttributeContainer & owner, const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Выполнить действия при копировании владельца. \en Perform actions when copying the owner. - virtual void OnCopyOwner( const MbAttributeContainer & owner, MbAttributeContainer & other, MbRegDuplicate * = NULL ); + virtual void OnCopyOwner( const MbAttributeContainer & owner, MbAttributeContainer & other, MbRegDuplicate * = c3d_null ); // \ru Выполнить действия при объединении владельца. \en Perform actions when merging he owner. virtual void OnMergeOwner( const MbAttributeContainer & owner, MbAttributeContainer & other ); // \ru Выполнить действия при замене владельца. \en Perform actions when replacing the owner. @@ -101,7 +101,7 @@ public: public: virtual MbeAttributeType AttributeType() const; // \ru Выдать подтип атрибута. \en Get subtype of an attribute. virtual void GetCharValue( TCHAR * v ) const; // \ru Выдать строковое значение свойства. \en Get a string value of the property. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data. virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. @@ -137,7 +137,7 @@ public: public: virtual MbeAttributeType AttributeType() const; // \ru Выдать подтип атрибута. \en Get subtype of an attribute. virtual void GetCharValue( TCHAR * v ) const; // \ru Выдать строковое значение свойства. \en Get a string value of the property. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data. virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. @@ -173,7 +173,7 @@ public: public: virtual MbeAttributeType AttributeType() const; // \ru Выдать подтип атрибута. \en Get subtype of an attribute. virtual void GetCharValue( TCHAR * v ) const; // \ru Выдать строковое значение свойства. \en Get a string value of the property. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data. virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. @@ -209,7 +209,7 @@ public: public: virtual MbeAttributeType AttributeType() const; // \ru Выдать подтип атрибута. \en Get subtype of an attribute. virtual void GetCharValue( TCHAR * v ) const; // \ru Выдать строковое значение свойства. \en Get a string value of the property. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data. virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. @@ -243,7 +243,7 @@ public: public: virtual MbeAttributeType AttributeType() const; // \ru Выдать подтип атрибута. \en Get subtype of an attribute. virtual void GetCharValue( TCHAR * v ) const; // \ru Выдать строковое значение свойства. \en Get a string value of the property. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data. virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. @@ -280,7 +280,7 @@ public: public: virtual MbeAttributeType AttributeType() const; // \ru Выдать подтип атрибута. \en Get subtype of an attribute. virtual void GetCharValue( TCHAR * v ) const; // \ru Выдать строковое значение свойства. \en Get a string value of the property. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data. virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. diff --git a/C3d/Include/attr_dencity.h b/C3d/Include/attr_dencity.h index 025963d..06efd72 100644 --- a/C3d/Include/attr_dencity.h +++ b/C3d/Include/attr_dencity.h @@ -38,7 +38,7 @@ public : // \ru Общие функции объекта \en Common functions of object. virtual MbeAttributeType AttributeType() const; // \ru Дать подтип атрибута. \en Get subtype of an attribute. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data. @@ -86,7 +86,7 @@ public : // \ru Общие функции объекта \en Common functions of object. virtual MbeAttributeType AttributeType() const; // \ru Дать подтип атрибута. \en Get subtype of an attribute. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data. @@ -137,7 +137,7 @@ public : // \ru Общие функции объекта \en Common functions of object. virtual MbeAttributeType AttributeType() const; // \ru Дать подтип атрибута. \en Get subtype of an attribute. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data. diff --git a/C3d/Include/attr_elementary_attribute.h b/C3d/Include/attr_elementary_attribute.h index c5fd3bf..a9acab6 100644 --- a/C3d/Include/attr_elementary_attribute.h +++ b/C3d/Include/attr_elementary_attribute.h @@ -30,7 +30,7 @@ public: public : virtual MbeAttributeType AttributeFamily() const; // \ru Тип атрибута \en Type of an attribute virtual MbeAttributeType AttributeType() const = 0; // \ru Выдать подтип атрибута \en Get subtype of an attribute. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const = 0; // \ru Сделать копию элемента \en Create a copy of the element. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const = 0; // \ru Сделать копию элемента \en Create a copy of the element. virtual bool IsSame( const MbAttribute &, double accuracy ) const = 0; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. virtual bool Init( const MbAttribute & ) = 0; // \ru Инициализировать данные по присланным \en Initialize data. @@ -39,13 +39,13 @@ public : // \ru Действия при конвертации владельца. \en Actions when converting the owner. virtual void OnConvertOwner( const MbAttributeContainer & owner, MbAttributeContainer & other ); /// \ru Действия при трансформировании владельца. \en Actions when transforming the owner. - virtual void OnTransformOwner( const MbAttributeContainer & owner, const MbMatrix3D &, MbRegTransform * = NULL ); + virtual void OnTransformOwner( const MbAttributeContainer & owner, const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Действия при перемещении владельца. \en Actions when moving the owner. - virtual void OnMoveOwner( const MbAttributeContainer & owner, const MbVector3D &, MbRegTransform * = NULL ); + virtual void OnMoveOwner( const MbAttributeContainer & owner, const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Действия при вращении владельца. \en Actions when rotating the owner. - virtual void OnRotateOwner( const MbAttributeContainer & owner, const MbAxis3D &, double angle, MbRegTransform * = NULL ); + virtual void OnRotateOwner( const MbAttributeContainer & owner, const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Действия при копировании владельца. \en Actions when copying the owner. - virtual void OnCopyOwner( const MbAttributeContainer & owner, MbAttributeContainer & other, MbRegDuplicate * = NULL ); + virtual void OnCopyOwner( const MbAttributeContainer & owner, MbAttributeContainer & other, MbRegDuplicate * = c3d_null ); // \ru Действия при объединении владельца. \en Actions when merging the owner. virtual void OnMergeOwner( const MbAttributeContainer & owner, MbAttributeContainer & other ); // \ru Действия при замене владельца. \en Actions when replacing the owner. diff --git a/C3d/Include/attr_flange_attribute.h b/C3d/Include/attr_flange_attribute.h index 74c3a00..a7b62bc 100644 --- a/C3d/Include/attr_flange_attribute.h +++ b/C3d/Include/attr_flange_attribute.h @@ -43,20 +43,20 @@ public: // \ru Выдать подтип атрибута. \en Get subtype of an attribute. virtual MbeAttributeType AttributeType() const; // \ru Сделать копию элемента. \en Create a copy of the element. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Инициализировать данные по присланным. \en Initialize data. virtual bool Init( const MbAttribute & ); // \ru Выполнить действия при трансформировании владельца. \en Perform actions when transforming the owner. - virtual void OnTransformOwner( const MbAttributeContainer & owner, const MbMatrix3D &, MbRegTransform * = NULL ); + virtual void OnTransformOwner( const MbAttributeContainer & owner, const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Выполнить действия при перемещении владельца. \en Perform actions when moving the owner. - virtual void OnMoveOwner( const MbAttributeContainer & owner, const MbVector3D &, MbRegTransform * = NULL ); + virtual void OnMoveOwner( const MbAttributeContainer & owner, const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Выполнить действия при вращении владельца. \en Perform actions when rotating the owner. - virtual void OnRotateOwner( const MbAttributeContainer & owner, const MbAxis3D &, double angle, MbRegTransform * = NULL ); + virtual void OnRotateOwner( const MbAttributeContainer & owner, const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Выполнить действия при копировании владельца. \en Perform actions when copying the owner. - virtual void OnCopyOwner( const MbAttributeContainer & owner, MbAttributeContainer & other, MbRegDuplicate * = NULL ); + virtual void OnCopyOwner( const MbAttributeContainer & owner, MbAttributeContainer & other, MbRegDuplicate * = c3d_null ); // \ru Выполнить действия при объединении владельца. \en Perform actions when merging the owner. virtual void OnMergeOwner( const MbAttributeContainer & owner, MbAttributeContainer & other ); diff --git a/C3d/Include/attr_geometric_attribute.h b/C3d/Include/attr_geometric_attribute.h index 05968b1..e229a30 100644 --- a/C3d/Include/attr_geometric_attribute.h +++ b/C3d/Include/attr_geometric_attribute.h @@ -52,19 +52,19 @@ public: // \ru Выдать подтип атрибута. \en Get subtype of an attribute. virtual MbeAttributeType AttributeType() const; // \ru Сделать копию элемента. \en Create a copy of the element. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Инициализировать данные по присланным. \en Initialize data. virtual bool Init( const MbAttribute & ); // \ru Выполнить действия при трансформировании владельца. \en Perform actions when transforming the owner. - virtual void OnTransformOwner( const MbAttributeContainer & owner, const MbMatrix3D &, MbRegTransform * = NULL ); + virtual void OnTransformOwner( const MbAttributeContainer & owner, const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Выполнить действия при перемещении владельца. \en Perform actions when moving the owner. - virtual void OnMoveOwner( const MbAttributeContainer & owner, const MbVector3D &, MbRegTransform * = NULL ); + virtual void OnMoveOwner( const MbAttributeContainer & owner, const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Выполнить действия при вращении владельца. \en Perform actions when rotating the owner. - virtual void OnRotateOwner( const MbAttributeContainer & owner, const MbAxis3D &, double angle, MbRegTransform * = NULL ); + virtual void OnRotateOwner( const MbAttributeContainer & owner, const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Выполнить действия при копировании владельца. \en Perform actions when copying the owner. - virtual void OnCopyOwner( const MbAttributeContainer & owner, MbAttributeContainer & other, MbRegDuplicate * = NULL ); + virtual void OnCopyOwner( const MbAttributeContainer & owner, MbAttributeContainer & other, MbRegDuplicate * = c3d_null ); // \ru Выполнить действия при объединении владельца. \en Perform actions when merging the owner. virtual void OnMergeOwner( const MbAttributeContainer & owner, MbAttributeContainer & other ); diff --git a/C3d/Include/attr_identifier.h b/C3d/Include/attr_identifier.h index adfe68e..637b918 100644 --- a/C3d/Include/attr_identifier.h +++ b/C3d/Include/attr_identifier.h @@ -39,7 +39,7 @@ public : // \ru Общие функции объекта. \en Common functions of object. virtual MbeAttributeType AttributeType() const; // \ru Дать подтип атрибута. \en Get subtype of an attribute. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data. virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. @@ -92,7 +92,7 @@ public : // \ru Общие функции объекта \en Common functions of object. virtual MbeAttributeType AttributeType() const; // \ru Дать подтип атрибута. \en Get subtype of an attribute. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data. @@ -159,7 +159,7 @@ public : // \ru Общие функции объекта \en Common functions of object virtual MbeAttributeType AttributeType() const; // \ru Дать подтип атрибута. \en Get subtype of an attribute. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data. @@ -221,7 +221,7 @@ public : virtual MbeAttributeType AttributeFamily() const; // \ru Дать тип атрибута. \en Get type of an attribute. virtual MbeAttributeType AttributeType() const; // \ru Дать подтип атрибута. \en Get subtype of an attribute. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data. @@ -233,13 +233,13 @@ public : // \ru Выполнить действия при конвертации владельца \en Perform actions when converting the owner. virtual void OnConvertOwner( const MbAttributeContainer & owner, MbAttributeContainer & other ); // \ru Выполнить действия при трансформировании владельца. \en Perform actions when transforming the owner. - virtual void OnTransformOwner( const MbAttributeContainer & owner, const MbMatrix3D &, MbRegTransform * = NULL ); + virtual void OnTransformOwner( const MbAttributeContainer & owner, const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Выполнить действия при перемещении владельца. \en Perform actions when moving the owner. - virtual void OnMoveOwner( const MbAttributeContainer & owner, const MbVector3D &, MbRegTransform * = NULL ); + virtual void OnMoveOwner( const MbAttributeContainer & owner, const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Выполнить действия при вращении владельца. \en Perform actions when rotating the owner. - virtual void OnRotateOwner( const MbAttributeContainer & owner, const MbAxis3D &, double angle, MbRegTransform * = NULL ); + virtual void OnRotateOwner( const MbAttributeContainer & owner, const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Выполнить действия при копировании владельца. \en Perform actions when copying the owner. - virtual void OnCopyOwner( const MbAttributeContainer & owner, MbAttributeContainer & other, MbRegDuplicate * = NULL ); + virtual void OnCopyOwner( const MbAttributeContainer & owner, MbAttributeContainer & other, MbRegDuplicate * = c3d_null ); // \ru Выполнить действия при объединении владельца. \en Perform actions when merging the owner. virtual void OnMergeOwner( const MbAttributeContainer & owner, MbAttributeContainer & other ); // \ru Выполнить действия при замене владельца. \en Perform actions when replacing the owner. @@ -289,7 +289,7 @@ public: // \ru Общие функции объекта. \en Common functions of object. virtual MbeAttributeType AttributeType() const; // \ru Дать подтип атрибута. \en Get subtype of an attribute. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame( const MbAttribute &, double ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по атрибуту. \en Initialize by attribute. virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. diff --git a/C3d/Include/attr_product.h b/C3d/Include/attr_product.h index 2132e73..5dad842 100644 --- a/C3d/Include/attr_product.h +++ b/C3d/Include/attr_product.h @@ -37,7 +37,7 @@ public : // Выдать подтип атрибута (временно). virtual MbeAttributeType AttributeType() const = 0; // Сделать копию элемента. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const = 0; + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const = 0; virtual bool IsSame( const MbAttribute &, double accuracy ) const = 0; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. // Инициализировать данные по присланным. virtual bool Init( const MbAttribute & ) = 0; @@ -49,13 +49,13 @@ public : // Действия при конвертации владельца. virtual void OnConvertOwner( const MbAttributeContainer & owner, MbAttributeContainer & other ); // Действия при трансформировании владельца. - virtual void OnTransformOwner( const MbAttributeContainer & owner, const MbMatrix3D &, MbRegTransform * = NULL ); + virtual void OnTransformOwner( const MbAttributeContainer & owner, const MbMatrix3D &, MbRegTransform * = c3d_null ); // Действия при перемещении владельца. - virtual void OnMoveOwner( const MbAttributeContainer & owner, const MbVector3D &, MbRegTransform * = NULL ); + virtual void OnMoveOwner( const MbAttributeContainer & owner, const MbVector3D &, MbRegTransform * = c3d_null ); // Действия при вращении владельца. - virtual void OnRotateOwner( const MbAttributeContainer & owner, const MbAxis3D &, double angle, MbRegTransform * = NULL ); + virtual void OnRotateOwner( const MbAttributeContainer & owner, const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // Действия при копировании владельца. - virtual void OnCopyOwner( const MbAttributeContainer & owner, MbAttributeContainer & other, MbRegDuplicate * = NULL ); + virtual void OnCopyOwner( const MbAttributeContainer & owner, MbAttributeContainer & other, MbRegDuplicate * = c3d_null ); // Действия при объединении владельца. virtual void OnMergeOwner( const MbAttributeContainer & owner, MbAttributeContainer & other ); // Действия при замене владельца. @@ -100,7 +100,7 @@ public : // Выдать подтип атрибута (временно). virtual MbeAttributeType AttributeType() const; // Сделать копию элемента. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; virtual bool IsSame( const MbAttribute &, double accuracy ) const; // Определить, являются ли объекты равными. // Инициализировать данные по присланным. virtual bool Init( const MbAttribute & ) ; @@ -319,7 +319,7 @@ public : // Выдать подтип атрибута (временно). virtual MbeAttributeType AttributeType() const; // Сделать копию элемента. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const ; + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const ; virtual bool IsSame( const MbAttribute &, double accuracy ) const; // Определить, являются ли объекты равными. // Инициализировать данные по присланным. virtual bool Init( const MbAttribute & ) ; diff --git a/C3d/Include/attr_selected.h b/C3d/Include/attr_selected.h index da48371..f808f21 100644 --- a/C3d/Include/attr_selected.h +++ b/C3d/Include/attr_selected.h @@ -37,7 +37,7 @@ public : // \ru Общие функции объекта. \en Common functions of object. virtual MbeAttributeType AttributeType() const; // \ru Дать подтип атрибута. \en Get subtype of an attribute. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data by given attribute. @@ -83,7 +83,7 @@ public : // \ru Общие функции объекта. \en Common functions of object. virtual MbeAttributeType AttributeType() const; // \ru Дать подтип атрибута. \en Get subtype of an attribute. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data by given attribute. @@ -129,7 +129,7 @@ public : // \ru Общие функции объекта. \en Common functions of object. virtual MbeAttributeType AttributeType() const; // \ru Дать подтип атрибута. \en Get subtype of an attribute. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data by given attribute. diff --git a/C3d/Include/attr_stamprib_attribute.h b/C3d/Include/attr_stamprib_attribute.h index 73c787e..1833d3e 100644 --- a/C3d/Include/attr_stamprib_attribute.h +++ b/C3d/Include/attr_stamprib_attribute.h @@ -49,20 +49,20 @@ public: // \ru Выдать подтип атрибута. \en Get subtype of an attribute. virtual MbeAttributeType AttributeType() const; // \ru Сделать копию элемента. \en Create a copy of the element. - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Инициализировать данные по присланным. \en Initialize data. virtual bool Init( const MbAttribute & ); // \ru Выполнить действия при трансформировании владельца. \en Perform actions when transforming the owner. - virtual void OnTransformOwner( const MbAttributeContainer & owner, const MbMatrix3D &, MbRegTransform * = NULL ); + virtual void OnTransformOwner( const MbAttributeContainer & owner, const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Выполнить действия при перемещении владельца. \en Perform actions when moving the owner. - virtual void OnMoveOwner( const MbAttributeContainer & owner, const MbVector3D &, MbRegTransform * = NULL ); + virtual void OnMoveOwner( const MbAttributeContainer & owner, const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Выполнить действия при вращении владельца. \en Perform actions when rotating the owner. - virtual void OnRotateOwner( const MbAttributeContainer & owner, const MbAxis3D &, double angle, MbRegTransform * = NULL ); + virtual void OnRotateOwner( const MbAttributeContainer & owner, const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Выполнить действия при копировании владельца. \en Perform actions when copying the owner. - virtual void OnCopyOwner( const MbAttributeContainer & owner, MbAttributeContainer & other, MbRegDuplicate * = NULL ); + virtual void OnCopyOwner( const MbAttributeContainer & owner, MbAttributeContainer & other, MbRegDuplicate * = c3d_null ); // \ru Выполнить действия при объединении владельца. \en Perform actions when merging the owner. virtual void OnMergeOwner( const MbAttributeContainer & owner, MbAttributeContainer & other ); diff --git a/C3d/Include/attr_user_attribute.h b/C3d/Include/attr_user_attribute.h index e986818..ecb3a9d 100644 --- a/C3d/Include/attr_user_attribute.h +++ b/C3d/Include/attr_user_attribute.h @@ -108,7 +108,7 @@ public: /// \ru Выдать подтип пользовательского атрибута по пользовательскому типу. \en Get subtype of an user attribute by user-defined type. static MbeAttributeType AttributeType( const MbUserAttribType & userType ); - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame( const MbAttribute &, double accuracy ) const; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. virtual bool Init( const MbAttribute & ); // \ru Инициализировать данные по присланным. \en Initialize data by given attribute. @@ -117,13 +117,13 @@ public: // \ru Выполнить действия при конвертации владельца \en Perform actions when converting the owner virtual void OnConvertOwner( const MbAttributeContainer & owner, MbAttributeContainer & other ); // \ru Выполнить действия при трансформировании владельца \en Perform actions when transforming the owner - virtual void OnTransformOwner( const MbAttributeContainer & owner, const MbMatrix3D &, MbRegTransform * = NULL ); + virtual void OnTransformOwner( const MbAttributeContainer & owner, const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Выполнить действия при перемещении владельца. \en Perform actions when moving the owner. - virtual void OnMoveOwner( const MbAttributeContainer & owner, const MbVector3D &, MbRegTransform * = NULL ); + virtual void OnMoveOwner( const MbAttributeContainer & owner, const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Выполнить действия при вращении владельца. \en Perform actions when rotating the owner. - virtual void OnRotateOwner( const MbAttributeContainer & owner, const MbAxis3D &, double angle, MbRegTransform * = NULL ); + virtual void OnRotateOwner( const MbAttributeContainer & owner, const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Выполнить действия при копировании владельца \en Perform actions when copying the owner. - virtual void OnCopyOwner( const MbAttributeContainer & owner, MbAttributeContainer & other, MbRegDuplicate * = NULL ); + virtual void OnCopyOwner( const MbAttributeContainer & owner, MbAttributeContainer & other, MbRegDuplicate * = c3d_null ); // \ru Выполнить действия при объединении владельца \en Perform actions when merging the owner. virtual void OnMergeOwner( const MbAttributeContainer & owner, MbAttributeContainer & other ); // \ru Выполнить действия при замене владельца. \en Perform actions when replacing the owner. @@ -197,7 +197,7 @@ public : /// \ru Выдать подтип атрибута. \en Get subtype of an attribute. virtual MbUserAttribType AttrTypeEx() const = 0; - virtual MbAttribute & Duplicate( MbRegDuplicate * = NULL ) const = 0; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const = 0; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame( const MbAttribute &, double accuracy ) const = 0; // \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. virtual bool Init( const MbAttribute & ) = 0; // \ru Инициализировать данные по присланным. \en Initialize data. @@ -206,13 +206,13 @@ public : // \ru Выполнить действия при конвертации владельца. \en Perform actions when converting the owner. virtual void OnConvertOwner( const MbAttributeContainer & owner, MbAttributeContainer & other ); // \ru Выполнить действия при трансформировании владельца. \en Perform actions when transforming the owner. - virtual void OnTransformOwner( const MbAttributeContainer & owner, const MbMatrix3D &, MbRegTransform * = NULL ); + virtual void OnTransformOwner( const MbAttributeContainer & owner, const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Выполнить действия при перемещении владельца. \en Perform actions when moving the owner. - virtual void OnMoveOwner( const MbAttributeContainer & owner, const MbVector3D &, MbRegTransform * = NULL ); + virtual void OnMoveOwner( const MbAttributeContainer & owner, const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Выполнить действия при вращении владельца. \en Perform actions when rotating the owner. - virtual void OnRotateOwner( const MbAttributeContainer & owner, const MbAxis3D &, double angle, MbRegTransform * = NULL ); + virtual void OnRotateOwner( const MbAttributeContainer & owner, const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Выполнить действия при копировании владельца. \en Perform actions when copying the owner. - virtual void OnCopyOwner( const MbAttributeContainer & owner, MbAttributeContainer & other, MbRegDuplicate * = NULL ); + virtual void OnCopyOwner( const MbAttributeContainer & owner, MbAttributeContainer & other, MbRegDuplicate * = c3d_null ); // \ru Выполнить действия при объединении владельца. \en Perform actions when merging the owner. virtual void OnMergeOwner( const MbAttributeContainer & owner, MbAttributeContainer & other ); // \ru Выполнить действия при замене владельца. \en Perform actions when replacing the owner. @@ -256,7 +256,7 @@ public: /// \ru Выдать идентификатор атрибута. \en Get attribute identifier. const MbUserAttribType & GetUserAttrId() const { return userAttrId; } /// \ru Выдать атрибуты. \en Get attributes. - const MbAttribute * GetAttribute( size_t k ) const { return ((k < attributes.size()) ? attributes[k] : NULL); } + const MbAttribute * GetAttribute( size_t k ) const { return ((k < attributes.size()) ? attributes[k] : c3d_null); } // \ru Выдать количество атрибутов. \en Get the number of attributes. size_t AttributesCount() const { return attributes.size(); } @@ -300,7 +300,7 @@ MbUserAttribute * UserAttrDefinition::ReduceUserAttrib( const MbExter MbUserAttribute * resAttr = new MbUserAttribute( _T("AttrClass"), attrId ); resAttr->InitActions( source ); { - const char * charBuf = NULL; + const char * charBuf = c3d_null; size_t memLen = 0; { membuf memBuf; @@ -330,7 +330,7 @@ MbUserAttribute * UserAttrDefinition::ReduceUserAttrib( const MbExter template MbExternalAttribute * UserAttrDefinition::AdvanceUserAttrib( const MbUserAttribute & source ) { - AttrClass * resAttr = NULL; + AttrClass * resAttr = c3d_null; MbUserAttribType attrId; source.GetUserAttribId( attrId ); { @@ -360,7 +360,7 @@ MbExternalAttribute * UserAttrDefinition::AdvanceUserAttrib( const Mb // --- template MbFixAttrSet * UserAttrDefinition::DisassembleUserAttrib( const MbExternalAttribute & /*source*/ ) { - return NULL; + return c3d_null; } @@ -379,7 +379,7 @@ bool UserAttrDefinition::ReassembleUserAttrib( const MbFixAttrSet & / template UserAttrDefinitionInstance::UserAttrDefinitionInstance( const MbUserAttribType & type ) : AttrDefInstance( type ) - , attrDef( NULL ) + , attrDef( c3d_null ) { } @@ -390,7 +390,7 @@ UserAttrDefinitionInstance::UserAttrDefinitionInstance( const MbUs template UserAttrDefinitionInstance::~UserAttrDefinitionInstance() { - if ( attrDef != NULL ) + if ( attrDef != c3d_null ) delete attrDef; } @@ -401,7 +401,7 @@ UserAttrDefinitionInstance::~UserAttrDefinitionInstance() template IAttrDefinition * UserAttrDefinitionInstance::GetAttrDefinition() { - if ( attrDef == NULL ) { + if ( attrDef == c3d_null ) { ScopedLock ll( GetLock() ); attrDef = new AttrDefClass(); } diff --git a/C3d/Include/attribute.h b/C3d/Include/attribute.h index 4720c80..a2f4641 100644 --- a/C3d/Include/attribute.h +++ b/C3d/Include/attribute.h @@ -290,7 +290,7 @@ public : /// \ru Выдать подтип атрибута. \en Get subtype of an attribute. virtual MbeAttributeType AttributeType() const = 0; /// \ru Сделать копию элемента. \en Create a copy of the element. - virtual MbAttribute & Duplicate( MbRegDuplicate * iReg = NULL ) const = 0; + virtual MbAttribute & Duplicate( MbRegDuplicate * = c3d_null ) const = 0; /** \brief \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. \~ \details \ru Равными считаются однотипные объекты, все данные которых одинаковы (равны). @@ -335,7 +335,7 @@ public : \en Perform actions when transforming the owner, \n This function is called after transforming the owning object in a case when GetActionForTransform() == trn_Self. The registrator of transformed objects may be passed as input parameter. \~ */ - virtual void OnTransformOwner( const MbAttributeContainer & owner, const MbMatrix3D &, MbRegTransform * = NULL ) = 0; + virtual void OnTransformOwner( const MbAttributeContainer & owner, const MbMatrix3D &, MbRegTransform * = c3d_null ) = 0; /**\ru Выполнить действия при перемещении владельца. \n Вызывается после перемещения владеющего объекта при условии GetActionForTransform() == trn_Self. @@ -343,7 +343,7 @@ public : \en Perform actions when moving the owner. \n This function is called after moving the owning object in a case when GetActionForTransform() == trn_Self. The registrator of transformed objects may be passed as input parameter. \~ */ - virtual void OnMoveOwner( const MbAttributeContainer & owner, const MbVector3D &, MbRegTransform * = NULL ) = 0; + virtual void OnMoveOwner( const MbAttributeContainer & owner, const MbVector3D &, MbRegTransform * = c3d_null ) = 0; /**\ru Выполнить действия при вращении владельца. \n Вызывается после вращения владеющего объекта при условии GetActionForTransform() == trn_Self. @@ -351,7 +351,7 @@ public : \en Perform actions when rotating the owner. \n This function is called after rotating the owning object in a case when GetActionForTransform() == trn_Self. The registrator of transformed objects may be passed as input parameter. \~ */ - virtual void OnRotateOwner( const MbAttributeContainer & owner, const MbAxis3D &, double angle, MbRegTransform * = NULL ) = 0; + virtual void OnRotateOwner( const MbAttributeContainer & owner, const MbAxis3D &, double angle, MbRegTransform * = c3d_null ) = 0; /**\ru Выполнить действия при копировании владельца. \n Вызывается после копирования владеющего объекта при условии GetActionForCopy() == cpy_Self. \n @@ -359,7 +359,7 @@ public : \en Perform actions when copying the owner. \n This function is called after copying the owning object in a case when GetActionForCopy() == cpy_Self. \n The following objects are passed as input parameters: the owning object copy and registrator of copied objects. \~ */ - virtual void OnCopyOwner( const MbAttributeContainer & owner, MbAttributeContainer & other, MbRegDuplicate * = NULL ) = 0; + virtual void OnCopyOwner( const MbAttributeContainer & owner, MbAttributeContainer & other, MbRegDuplicate * = c3d_null ) = 0; /**\ru Выполнить действия при объединении владельца. \n Вызывается перед слиянием владельца при условии GetActionForMerge() == mrg_Self. \n diff --git a/C3d/Include/attribute_container.h b/C3d/Include/attribute_container.h index ad82ea5..cc07b16 100644 --- a/C3d/Include/attribute_container.h +++ b/C3d/Include/attribute_container.h @@ -169,13 +169,13 @@ public: /// \ru Выполнить действия при конвертации атрибутов. \en Perform actions when converting the attributes. void AttributesConvert( MbAttributeContainer & other ) const; /// \ru Выполнить действия при трансформировании атрибутов. \en Perform actions when transforming the attributes. - void AttributesTransform( const MbMatrix3D &, MbRegTransform * = NULL ); + void AttributesTransform( const MbMatrix3D &, MbRegTransform * = c3d_null ); /// \ru Выполнить действия при перемещении атрибутов. \en Perform actions when moving the attributes. - void AttributesMove ( const MbVector3D &, MbRegTransform * = NULL ); + void AttributesMove ( const MbVector3D &, MbRegTransform * = c3d_null ); /// \ru Выполнить действия при вращении атрибутов. \en Perform actions when rotating the attributes. - void AttributesRotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); + void AttributesRotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); /// \ru Выполнить действия при копировании атрибутов. \en Perform actions when copying the attributes. - void AttributesCopy ( MbAttributeContainer & other, MbRegDuplicate * = NULL ) const; + void AttributesCopy ( MbAttributeContainer & other, MbRegDuplicate * = c3d_null ) const; /// \ru Выполнить действия при объединении атрибутов. \en Perform actions when merging the attributes. void AttributesMerge ( MbAttributeContainer & other ); /// \ru Выполнить действия при замене атрибутов. \en Perform actions when replacing the attributes. @@ -226,7 +226,7 @@ public: \return \ru true если есть такой атрибут \n false в противном случае \en True if there is the attribute MbColor \n otherwise false. \~ */ - bool IsColored() const { return (GetSimpleAttribute( at_Color ) != NULL); } + bool IsColored() const { return (GetSimpleAttribute( at_Color ) != c3d_null); } /// \ru Изменить цвет объекта. \en Change color of the object. void SetColor( uint32 ); /// \ru Изменить цвет объекта (0-255). \en Change color of the object (0-255). @@ -293,7 +293,9 @@ OBVIOUS_PRIVATE_COPY( MbAttributeContainer ) \ingroup Model_Attributes */ // --- -MATH_FUNC (bool) GetCommonAttributes( const MbAttributeContainer & attrItem, const c3d::string_t & attrPrompt, c3d::ConstAttrVector & resAttrs ); +MATH_FUNC (bool) GetCommonAttributes( const MbAttributeContainer & attrItem, + const c3d::string_t & attrPrompt, + c3d::ConstAttrVector & resAttrs ); //------------------------------------------------------------------------------ @@ -316,8 +318,11 @@ MATH_FUNC (bool) GetCommonAttributes( const MbAttributeContainer & attrItem, con \ingroup Model_Attributes */ // --- -MATH_FUNC (bool) AddCommonAttributes( const MbAttributeContainer & srcItem, MbeAttributeType attrType, const c3d::string_t & attrPrompt, - MbAttributeContainer & dstItem, c3d::AttrVector * bufAttrs = NULL ); +MATH_FUNC (bool) AddCommonAttributes( const MbAttributeContainer & srcItem, + MbeAttributeType attrType, + const c3d::string_t & attrPrompt, + MbAttributeContainer & dstItem, + c3d::AttrVector * bufAttrs = c3d_null ); //------------------------------------------------------------------------------ /** \brief \ru Удалить обобщенные атрибуты. diff --git a/C3d/Include/cdet_data.h b/C3d/Include/cdet_data.h index 657ae38..c992aaa 100644 --- a/C3d/Include/cdet_data.h +++ b/C3d/Include/cdet_data.h @@ -23,7 +23,7 @@ class MbHRepSolid; */ //---------------------------------------------------------------------------------------- -/// \ru Объект набора для контроля столкновений. \en Object of the set for collision detection. +/// \ru Объект из набора контроля столкновений. \en Object from the set of collision detection. //--- typedef const MbHRepSolid * cdet_item; typedef MbResultType cdet_result; ///< \ru Код результата контроля столкновений. \en Result code of collision queries. @@ -45,18 +45,28 @@ typedef const void * cdet_app_item; //---------------------------------------------------------------------------------------- // Constants //--- -const cdet_item CDET_NULL = C3D_NULL_PTR; ///< \ru Пустой объект набора для контроля столкновений. \en Empty object of the collision query set. -const cdet_app_item CDET_APP_NULL = C3D_NULL_PTR; ///< \ru "Нулевой" объект модели приложения. \en "Null object" of the client app. +const cdet_item CDET_NULL = c3d_null; ///< \ru Пустой объект набора для контроля столкновений. \en Empty object of the collision query set. +const cdet_app_item CDET_APP_NULL = c3d_null; ///< \ru "Нулевой" объект модели приложения. \en "Null object" of the client app. //---------------------------------------------------------------------------------------- -// Base class to implement collision query details +/** \brief \ru Структура данных и обратных вызовов для запроса на поиск соударений. + \en Data structure and callbacks for the collision search request. + \details + \ru Базовый класс, предназначенный для реализации на стороне приложения структуры + запроса к алгоритму поиска соударений. С помощью обратных вызовов приложение + управляет поиском соударений и получает сведения o найденных пересечениях. + \en The base class intended to implement on the application side the structure of a query + to the collision search algorithm. The application uses a callback to control the collision + search and obtain details of detected interferencies. + +*/ //--- struct cdet_query { enum cback_res ///< Result code of the callback function { CBACK_VOID - , CBACK_SUFFICIENT ///< This code means that an app stops collision query for given pair of lamps + , CBACK_SUFFICIENT ///< This code means that an app stops collision query for given pair of lumps , CBACK_SKIP ///< Skip testing a given pair of the lumps , CBACK_BREAK ///< Break search of all collisions of the set , CBACK_SEARCH_MORE = CBACK_VOID ///< This code notifies a collision detector to continue working at cases CDET_INTERSECTED, CDET_TOUCHED. @@ -77,8 +87,8 @@ struct cdet_query const MbRefItem * refItem; const MbMatrix3D * wMatrix; geom_element() - : appItem( C3D_NULL_PTR ) - , refItem( C3D_NULL_PTR ) + : appItem( c3d_null ) + , refItem( c3d_null ) , wMatrix( &MbMatrix3D::identity ) {} }; @@ -117,7 +127,7 @@ struct cdet_query_result: public cdet_query private: static cback_res QueryFunc( cdet_query * query, message code, cback_data & ) { - C3D_ASSERT( C3D_NULL_PTR != query ); + C3D_ASSERT( c3d_null != query ); cdet_query_result * q = static_cast( query ); switch( code ) { @@ -162,7 +172,7 @@ private: { case CDET_QUERY_STARTED: // The collision query is started for all solids of the set { - q->first = q->second = C3D_NULL_PTR; + q->first = q->second = c3d_null; return CBACK_VOID; } case CDET_FINISHED: // A pair of solids is finished. @@ -358,7 +368,7 @@ public: MbCollisionFace( const MbFace & f ) : item( CDET_NULL ) , mathFace( &f ) - , partFace( C3D_NULL_PTR ) + , partFace( c3d_null ) {} const MbFace & Face() const { return *mathFace; } @@ -405,7 +415,6 @@ class MATH_CLASS MbProximityParameters SPtr plane; public: - //cdet_item fstItem, sndItem; // \ru Дескрипторы MbCartPoint3D fstPnt, sndPnt; // \ru Пара точек близости, принадлежащие триангуляционным сеткам. \en The points of the proximity belonging to the triangulation grids. MbCartPoint thePar1, thePar2; // \ru Пара точек близости, заданная в поверхностных координатах граненй. \en The points of the proximity specified in the surface coordinates of the faces. double theDistance; // \ru Расстояние. \en Distance. diff --git a/C3d/Include/cdet_utility.h b/C3d/Include/cdet_utility.h index 0d5e68d..776503e 100644 --- a/C3d/Include/cdet_utility.h +++ b/C3d/Include/cdet_utility.h @@ -15,6 +15,7 @@ class MtRefItem; class MbItem; class MbSolid; +class MbMesh; class MbAssembly; struct MbLumpAndFaces; class MbCollisionDetector; @@ -34,7 +35,7 @@ class MbCollisionDetector; \attention \ru Для гарантированно правильной работы детектора необходимо, чтобы объект типа MbLumpAndFaces, добавляемый в рассмотрение посредством функции AddSolid, имел правильную матрицу преобразования в мир в настоящем его положении, т.е. с самого начала. - \en For the ensure proper functionality of detector it is necessary that + \en For the ensure proper functionality of the detector it is necessary that an object of type MbLumpAndFaces to be added in consideration by function AddSolid will have a correct matrix of transformation to the world coordinate system in its current state, i.e. from the beginning. \~ @@ -54,26 +55,54 @@ public: \en Add a solid with given placement to the collision detection set. \~ \return \ru Дескриптор объекта для контроля столкновений. \en Descriptor of object for collision detection. \~ */ - cdet_item AddItem( const MbSolid & solid, const MbPlacement3D & place, cdet_app_item appItem = CDET_APP_NULL ); + cdet_item AddItem( const MbSolid & solid, const MbPlacement3D & place, cdet_app_item appItem = CDET_APP_NULL ); + /** + \brief \ru Добавить полигональный объект с заданным положением в набор для контроля столкновений. + \en Add a poligonal object with given placement to the collision detection set. \~ + \return \ru Дескриптор объекта для контроля столкновений. \en Descriptor of object for collision detection. \~ + */ + cdet_item AddMesh( const MbMesh & mesh, const MbPlacement3D & place, cdet_app_item appItem = CDET_APP_NULL ); + /** + \brief \ru Добавить новый компонент контроля соударений и параметров близости. + \en Add a new component to track collisions and proximity parameters. \~ + \details \ru Компонент позволяет объединять тела в геометрически-жесткие множества. + \en Component is able to unite solids into the rigid geometric sets. + */ + cdet_item AddComponent( cdet_app_item ); + /** + \brief \ru Добавить новый экземпляр тела в компонент контроля соударений. + \en Add a new instance of a reused solid into the component. \~ + \param[in] compItem - \ru Компонент, которому будет принадлежать экземпляр. + \en A component to witch the instance will belong. + \param[in] solidItem - \ru Оригинальное тело, добавленное методом #AddSolid, по которому изготавливается экземпляр. + \en An original solid added by the method #AddSolid by witch the instance is made. + \param[in] place - \ru Положение, которое занимает тело экземпляра в глобальной СК. + \en The placement that the instance solid takes in global space. + \return \ru Новый экземпляр тела, зарегистрированный с аппарате контроля соударений. + \en The new solid instance registered in the detector. + \note \ru Значение compItem может быть нулевым. Значит просто вставка не будет + принадлежать ни одному компоненту. + \en The value compItem can be CDET_NULL. This just means that the + instance does not belong to any component. + */ + cdet_item AddInstance( cdet_item compItem, cdet_item solidItem, const MbPlacement3D & place ); /** \brief \ru Удалить геометрический объект из набора для контроля столкновений. \en Remove a geometric object from the set of collision detection. \~ */ - void RemoveItem( cdet_item cdItem ); + void RemoveItem( cdet_item cdItem ); /** \brief \ru Поменять текущее положение геометрического объекта в наборе. \en Change current position of a geometric object. \~ */ - void Reposition( cdet_item, const MbPlacement3D & ); + void Reposition( cdet_item, const MbPlacement3D & ); /** \brief \ru Проверить соударения между геометрическими объектами набора. \en Check collisions between geometric objects of the set. \~ \return \ru Функция вернет CDET_RESULT_Intersected при обранужении хотя бы одной коллизии. - \en The function will return CDET_RESULT_Intersected if it detects at least one collision. - + \en The function will return CDET_RESULT_Intersected if it detects at least one collision. */ cdet_result CheckCollisions( cdet_query & ); - /** \brief \ru Проверить соударения между геометрическими объектами набора. \en Check collisions between geometric objects of the set. \~ @@ -98,28 +127,6 @@ public: // the functions below can be deprecated in future version. cdet_item AddSolid( const MbLumpAndFaces & ); /// \ru Добавить тело с заданным положением. \en Add a solid with a given placement. cdet_item AddSolid( const MbSolid &, const MbPlacement3D &, cdet_app_item = CDET_APP_NULL ); - /** - \brief \ru Добавить новый компонент контроля соударений и параметров близости. - \en Add a new component to track collisions and proximity parameters. \~ - */ - cdet_item AddComponent( cdet_app_item ); - /** - \brief \ru Добавить новый экземпляр тела в компонент контроля соударений. - \en Add a new instance of a reused solid into the component. \~ - \param[in] compItem - \ru Компонент, которому будет принадлежать экземпляр. - \en A component to witch the instance will belong. - \param[in] solidItem - \ru Оригинальное тело, добавленное методом #AddSolid, по которому изготавливается экземпляр. - \en An original solid added by the method #AddSolid by witch the instance is made. - \param[in] place - \ru Положение, которое занимает тело экземпляра в глобальной СК. - \en The placement that the instance solid takes in global space. - \return \ru Новый экземпляр тела, зарегистрированный с аппарате контроля соударений. - \en The new solid instance registered in the detector. - \note \ru Значение compItem может быть нулевым. Значит просто вставка не будет - принадлежать ни одному компоненту. - \en The value compItem can be CDET_NULL. This just means that the - instance does not belong to any component. - */ - cdet_item AddInstance( cdet_item compItem, cdet_item solidItem, const MbPlacement3D & place ); /// \ru Удалить твердотельную модель из детектора столкновений. \en Remove a solid model from a collision detector. void RemoveSolid( cdet_item ); /// \ru Выдать количество добавленных твердотельных моделей. \en Get number of added solid models. @@ -155,7 +162,7 @@ public: /* // Use AppItem() insead this cdet_app_item Component( size_t solIdx ) const; // The func is deprecated. Instead, use CheckCollisions - cdet_result InterferenceDetect( void * formalPar = C3D_NULL_PTR ) const; + cdet_result InterferenceDetect( void * formalPar = c3d_null ) const; // The func is deprecated. Use SetDistanceTracking instead. void SetDistanceComputationObjects( const MbLumpAndFaces &, const MbLumpAndFaces & ); // The func is deprecated. Use AddSolid/AddItem instead. @@ -166,6 +173,7 @@ public: /* const MtRefItem * _ComputeBVTree( cdet_item ); private: + /* \brief \ru Добавить объект геометрической модели в набор для контроля столкновений. \en Add an object of geometric model to the set of collision detection control. \~ @@ -189,7 +197,7 @@ inline cdet_result MbCollisionDetectionUtility::CheckCollisions() /// \ru Узел дерева объемов. \en A node of the bounding volume tree. typedef const MtRefItem * cdet_bvt_node; /// \ru Пустое дерево объемов. \en An empty bounding volume tree. -const cdet_bvt_node CDET_BVT_NULL = C3D_NULL_PTR; +const cdet_bvt_node CDET_BVT_NULL = c3d_null; /// \ru Пара ветвей поддерева объемов. \en A pair of branches of the bounding volume subtree. typedef std::pair cdet_bvt_pair; diff --git a/C3d/Include/check_geometry.h b/C3d/Include/check_geometry.h index 46e6fed..a09bb28 100644 --- a/C3d/Include/check_geometry.h +++ b/C3d/Include/check_geometry.h @@ -70,13 +70,13 @@ public: public: /// \ru Пересечение - есть тело. \en Intersection is a solid. - bool IsSolid() const { return ((solid != NULL) || (isSolid && !edges.empty())); } + bool IsSolid() const { return ((solid != c3d_null) || (isSolid && !edges.empty())); } /// \ru Пересечение касательной областью поверхности. \en Intersection by a tangent region of a surface. bool IsSurface() const { return !isTangentCurve && !edges.empty(); } /// \ru Пересечение вдоль касательной линии. \en Intersection along a tangent line. bool IsCurve() const { return isTangentCurve && !edges.empty(); } /// \ru Пересечение точкой (еще не реализовано). \en Intersection is a point (not implemented yet). - bool IsPoint() const { return ((pointFrame != NULL) && (pointFrame->GetVerticesCount() > 0)); } + bool IsPoint() const { return ((pointFrame != c3d_null) && (pointFrame->GetVerticesCount() > 0)); } /// \ru Установить флаг пересечения вдоль касательной линии. \en Set the flag of intersection along a tangent line. //void SetTangent( bool b ) { isTangentCurve = b; } @@ -92,7 +92,7 @@ public: template void GetCurves( EdgesVector & curves ) const; /// \ru Получить указатель на кривую пересечения по индексу. \en Get a pointer to an intersection curve by the index. - const MbCurveEdge * GetCurve( size_t k ) const { return ((k < edges.size()) ? edges[k].get() : NULL); } + const MbCurveEdge * GetCurve( size_t k ) const { return ((k < edges.size()) ? edges[k].get() : c3d_null); } /// \ru Получить номера касающихся граней первого/второго тела. \en Get numbers concerning faces of the first/second solid. template void GetFaceNumbers( bool first, OutputIndicesVector & ) const; @@ -101,7 +101,7 @@ public: void GetFaceNumbersPairs( OutputIndicesPairsVector & ) const; /// \ru Количество точек касания. \en The number of touch points. - size_t GetPointsCount() const { return ((pointFrame != NULL) ? pointFrame->GetVerticesCount() : 0); } + size_t GetPointsCount() const { return ((pointFrame != c3d_null) ? pointFrame->GetVerticesCount() : 0); } /// \ru Получить набор точек касания. \en Get a set of touch points. const MbPointFrame * GetPointFrame() const { return pointFrame; } @@ -117,8 +117,8 @@ MbShellsIntersectionData::MbShellsIntersectionData( const EdgesVector & initEdge : edges ( ) , faceIndices1 ( ) , faceIndices2 ( ) - , solid ( NULL ) - , pointFrame ( NULL ) + , solid ( c3d_null ) + , pointFrame ( c3d_null ) , isTangentCurve( false ) , isSolid ( isSolidEgdes ) { @@ -127,7 +127,7 @@ MbShellsIntersectionData::MbShellsIntersectionData( const EdgesVector & initEdge c3d::EdgeSPtr edge; edges.reserve( addCnt ); for ( size_t k = 0; k < addCnt; ++k ) { - if ( initEdges[k] != NULL ) { + if ( initEdges[k] != c3d_null ) { edge = const_cast( &(*initEdges[k]) ); edges.push_back( edge ); } @@ -146,8 +146,8 @@ MbShellsIntersectionData::MbShellsIntersectionData( const EdgesVector & in : edges ( ) , faceIndices1 ( ) , faceIndices2 ( ) - , solid ( NULL ) - , pointFrame ( NULL ) + , solid ( c3d_null ) + , pointFrame ( c3d_null ) , isTangentCurve( false ) , isSolid ( false ) { @@ -157,7 +157,7 @@ MbShellsIntersectionData::MbShellsIntersectionData( const EdgesVector & in c3d::EdgeSPtr edge; edges.reserve( edgesCnt ); for ( size_t k = 0; k < edgesCnt; ++k ) { - if ( initEdges[k] != NULL ) { + if ( initEdges[k] != c3d_null ) { edge = const_cast(&(*initEdges[k])); edges.push_back( edge ); } @@ -177,8 +177,8 @@ MbShellsIntersectionData::MbShellsIntersectionData( const EdgesVector & : edges ( ) , faceIndices1 ( ) , faceIndices2 ( ) - , solid ( NULL ) - , pointFrame ( NULL ) + , solid ( c3d_null ) + , pointFrame ( c3d_null ) , isTangentCurve( false ) , isSolid ( false ) { @@ -189,7 +189,7 @@ MbShellsIntersectionData::MbShellsIntersectionData( const EdgesVector & edges.reserve( edgesCnt ); size_t k; for ( k = 0; k < edgesCnt; ++k ) { - if ( initEdges[k] != NULL ) { + if ( initEdges[k] != c3d_null ) { edge = const_cast(&(*initEdges[k])); edges.push_back( edge ); } @@ -340,9 +340,9 @@ bool CheckBoundaryEdges( const Edges & allEdges, Edges * boundaryEdges ) if ( boundaryEdges != &allEdges ) { for ( size_t i = 0, cnt = allEdges.size(); i < cnt; ++i ) { - if ( allEdges[i] != NULL && allEdges[i]->IsBoundaryFace( METRIC_PRECISION ) ) { + if ( allEdges[i] != c3d_null && allEdges[i]->IsBoundaryFace( METRIC_PRECISION ) ) { isBoundary = true; - if ( boundaryEdges != NULL ) + if ( boundaryEdges != c3d_null ) boundaryEdges->push_back( allEdges[i] ); else break; @@ -415,9 +415,9 @@ bool CheckInexactVertices( const Vertices & vertArr, double mAcc, Vertices * ine if ( inexactVerts != &vertArr ) { for ( size_t i = 0, icnt = vertArr.size(); i < icnt; ++i ) { MbVertex * v = vertArr[i]; - if ( v != NULL && v->GetTolerance() > mAcc ) { + if ( v != c3d_null && v->GetTolerance() > mAcc ) { isInexactVertex = true; - if ( inexactVerts != NULL ) + if ( inexactVerts != c3d_null ) inexactVerts->push_back( v ); else break; @@ -480,12 +480,12 @@ bool CheckInexactEdges( const Edges & allEdges, double mAcc, Edges * inexactEdge bool isInexactEdge = false; for ( size_t i = 0, icnt = allEdges.size(); i < icnt; ++i ) { - if ( allEdges[i] != NULL) { + if ( allEdges[i] != c3d_null) { bool isSpaceNear = !::IsInexactEdge( *allEdges[i], mAcc ); if ( !isSpaceNear ) { isInexactEdge = true; - if ( inexactEdges != NULL ) + if ( inexactEdges != c3d_null ) inexactEdges->push_back( allEdges[i] ); else break; @@ -498,7 +498,7 @@ bool CheckInexactEdges( const Edges & allEdges, double mAcc, Edges * inexactEdge double mLen = allEdges[i]->GetLengthEvaluation(); if ( mLen > METRIC_PRECISION && mLen > mTol + METRIC_PRECISION ) { isInexactEdge = true; - if ( inexactEdges != NULL ) + if ( inexactEdges != c3d_null ) inexactEdges->push_back( allEdges[i] ); else break; @@ -797,16 +797,42 @@ MATH_FUNC( bool ) RepairEdges( MbFaceShell & shell, bool updateFacesBounds = tru //------------------------------------------------------------------------------ /** \brief \ru Устранить наличие общих подложек поверхностей. \en Remove common surface substrates. \~ - \details \ru Устранить наличие общих подложек поверхностей. \n - \en Remove common surface substrates. \n \~ - \param[in] shell - \ru Оболочка. - \en A shell. \~ + \details \ru Найти и устранить общие поверхности-подложки в гранях оболочки. \n + Функция устарела и будет удалена. Замените вызовы на RemoveCommonSurfaceSubstrates. \n + \en Find and eliminate common underlying surfaces of a shell faces. \n + The function is deprecated and will be removed. Replace calls with RemoveCommonSurfaceSubstrates. \~ + \param[in] shell - \ru Модифицируемая оболочка. + \en A shell to be modified. \~ + \return \ru Возвращает true, если была выполнена модификация оболочки. + \en Returns true if the shell modification was performed. \~ + \ingroup Algorithms_3D +*/ +// --- +DEPRECATE_DECLARE +MATH_FUNC( bool ) CheckIdenticalBaseSufaces( MbFaceShell & shell ); + + +//------------------------------------------------------------------------------ +/** \brief \ru Устранить наличие общих подложек поверхностей. + \en Remove common surface substrates. \~ + \details \ru Найти и устранить общие поверхности-подложки в гранях оболочки. \n + \en Find and eliminate common underlying surfaces of a shell faces. \n \~ + \param[in] shell - \ru Модифицируемая оболочка. + \en A shell to be modified. \~ + \param[in] checkEdges - \ru Выполнить замену в ребрах. + \en Replace in shell edges. \~ \return \ru Возвращает true, если была выполнена модификация оболочки. \en Returns true if the shell modification was performed. \~ \ingroup Algorithms_3D */ //--- -MATH_FUNC( bool ) RemoveCommonSurfaceSubstrates( MbFaceShell & shell ); +MATH_FUNC( bool ) RemoveCommonSurfaceSubstrates( MbFaceShell & shell, bool checkEdges = true ); + + +//------------------------------------------------------------------------------ +// проверка ориентированности оболочки наружу по угловым точкам расширенного габарита +//--- +MATH_FUNC( ThreeStates ) IsOrientedOutward( const MbFaceShell & shell ); #endif // __CHECK_GEOMETRY_H diff --git a/C3d/Include/collection.h b/C3d/Include/collection.h index 57477b0..36f6f05 100644 --- a/C3d/Include/collection.h +++ b/C3d/Include/collection.h @@ -84,10 +84,10 @@ public: // \ru Общие функции геометрического объекта \en Common functions of a geometric object virtual MbeSpaceType IsA() const; // \ru Тип объекта. \en A type of an object. virtual MbeSpaceType Type() const; // \ru Групповой тип объекта. \en Group type of object. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Создать копию. \en Create a copy. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвинуть вдоль вектора. \en Translate along a vector. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate about an axis. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Создать копию. \en Create a copy. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвинуть вдоль вектора. \en Translate along a vector. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate about an axis. virtual bool IsSame ( const MbSpaceItem & init, double accuracy = LENGTH_EPSILON ) const; // \ru Являются ли объекты равными? \en Are the objects equal? virtual bool SetEqual ( const MbSpaceItem & init ); // \ru Сделать объекты равным. \en Make the objects equal. virtual double DistanceToPoint ( const MbCartPoint3D & ) const; // \ru Вычислить расстояние до точки. \en Calculate the distance to a point. diff --git a/C3d/Include/constraint.h b/C3d/Include/constraint.h index b15f24f..dca840d 100644 --- a/C3d/Include/constraint.h +++ b/C3d/Include/constraint.h @@ -42,8 +42,8 @@ public: public: MtGeomArgument( const MbRefItem * p, const MbItem * h ); MtGeomArgument( const MtGeomArgument & ); - MtGeomArgument() : propItem( NULL ), propName( c3d::UNDEFINED_SNAME ) - , hash( c3d::UNDEFINED_SNAME ), item( NULL ), root( NULL ) {} + MtGeomArgument() : propItem( c3d_null ), propName( c3d::UNDEFINED_SNAME ) + , hash( c3d::UNDEFINED_SNAME ), item( c3d_null ), root( c3d_null ) {} public: /** \brief \ru Получить непосредственный объект сборки, содержащий ссылочный объект. @@ -106,7 +106,7 @@ public: public: /// \ru Возвращает true, если ограничение не действительно. \en Return true if the constraint is invalid. - bool IsNull() const { return m_cItem == NULL; } + bool IsNull() const { return m_cItem == c3d_null; } /// \ru Тип сопряжения (геометрического ограничения). \en Type of geometric constraint. MtMateType ConstraintType() const; /// \ru Текущее значение размера. \en Current value of the dimension. diff --git a/C3d/Include/contour_graph.h b/C3d/Include/contour_graph.h index d4fdd11..9b6fe93 100644 --- a/C3d/Include/contour_graph.h +++ b/C3d/Include/contour_graph.h @@ -38,8 +38,8 @@ public: /// \ru Конструктор по точке. \en Constructor by point. MpVertex( const MbCartPoint & initP ) : point( initP ) - , begEdge( NULL ) - , endEdge( NULL ) + , begEdge( c3d_null ) + , endEdge( c3d_null ) {} /// \ru Деструктор. \en Destructor. @@ -398,7 +398,7 @@ public: /// \ru Построить вершины. \en Construct vertices. void CreateVertices(); /// \ru Создать контур по циклу. \en Create a contour by the loop. - MbContour * MakeContour() const; + MbContour * MakeContour( double epsilon = METRIC_ACCURACY ) const; /** \} */ /**\ru \name Операции преобразования. @@ -737,7 +737,7 @@ IMPL_PERSISTENT_OPS( MpGraph ) */ // --- inline void DeleteVertex( MpVertex *& vertex ) { delete vertex; - vertex = NULL; + vertex = c3d_null; } @@ -751,7 +751,7 @@ inline void DeleteVertex( MpVertex *& vertex ) { */ // --- inline void DeleteEdge( MpEdge *& edge ) { delete edge; - edge = NULL; + edge = c3d_null; } @@ -765,7 +765,7 @@ inline void DeleteEdge( MpEdge *& edge ) { */ // --- inline void DeleteLoop( MpLoop *& loop ) { delete loop; - loop = NULL; + loop = c3d_null; } @@ -779,7 +779,7 @@ inline void DeleteLoop( MpLoop *& loop ) { */ // --- inline void DeleteGraph( MpGraph *& graph ) { delete graph; - graph = NULL; + graph = c3d_null; } @@ -848,7 +848,7 @@ MATH_FUNC (MpGraph *) EncloseContoursBuilder( const RPArray & curveLi double accuracy, bool strict, VERSION version, - IProgressIndicator * progInd = NULL ); + IProgressIndicator * progInd = c3d_null ); //------------------------------------------------------------------------------ @@ -886,7 +886,7 @@ MATH_FUNC (MpGraph *) OuterContoursBuilder( const RPArray & curveList, double accuracy, bool strict, VERSION version, - IProgressIndicator * progInd = NULL ); + IProgressIndicator * progInd = c3d_null ); //------------------------------------------------------------------------------ /** \brief \ru Перестроить контуры, построенные ранее вокруг точки. @@ -924,7 +924,7 @@ MATH_FUNC (MpGraph *) ContoursReconstructor( const RPArray & curveLis double accuracy, bool strict, VERSION version, - IProgressIndicator * progInd = NULL ); + IProgressIndicator * progInd = c3d_null ); #endif // __CONTOUR_GRAPH_H diff --git a/C3d/Include/conv_annotation_item.h b/C3d/Include/conv_annotation_item.h index c3c8dbf..98c5565 100644 --- a/C3d/Include/conv_annotation_item.h +++ b/C3d/Include/conv_annotation_item.h @@ -1,878 +1,878 @@ -//////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru Объекты, используемые при импорте и экспорте аннотации и размеров. - \en Objects used for import and export of annotation and dimensions \~ -*/ -//////////////////////////////////////////////////////////////////////////////// - -#ifndef __CONV_ANNOTATION_ITEM_H -#define __CONV_ANNOTATION_ITEM_H - -#include -#include -#include -#include - -#include -#include - -class MbLineSegment3D; -class MbArc3D; -class MbItem; -class MbPlaneItem; - -//------------------------------------------------------------------------------ -/** \brief \ru Тип элемента аннотации. - \en Type of annotation element. \~ -*/ -// --- -enum Mae_AnnotationType { - nt_AnnotationItem, ///< \ru Аннотация без объектов привязки. \en Annotation without binding objects. - nt_Dimension, ///< \ru Размер. \en Dimension - nt_LinearDimension, ///< \ru Линейный размер. \en Linear dimension. - nt_DiameterDimension, ///< \ru Диаметральный размер. \en Diameter dimension. - nt_RadialDimension, ///< \ru Радиальный размер. \en Radial dimension. - nt_AngularDimension, ///< \ru Угловой размер. \en Angular dimension. - nt_Callout, ///< \ru Выноска. \en Callout. - nt_Marking, ///< \ru Обозначение. \en Marking. - nt_Datum, ///< \ru База. \en Datum. - nt_Note, ///< \ru Примечание. \en Note. - nt_Centreline, ///< \ru Осевая линия. \en Centreline. - nt_FeatureControlFrame, ///< \ru Рамка управления характеристиками. \en Feature Control Frame. - nt_ReferencePoint, ///< \ru Точка отсчета. \en Reference Point. - nt_SurfaceRoughness, ///< \ru Шероховатость поверхности. \en Surface roughness. - nt_ShapeTolerance ///< \ru Допуск формы. -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Тип текстового объекта. - \en Type of a text object. \~ -*/ -// --- -enum MaeTextType { - xt_CompositeText, ///< \ru Набор текстовых блоков. \en Set of text blocks. - xt_TextLiteral, ///< \ru Текст с указанием ЛСК, шрифта, выравнивания. \en Text with specification of LCS, font, alignment. - xt_TextLiteralExtent, ///< \ru Текст с указанием ЛСК, шрифта, выравнивания, геометрического размера. \en Text with specification of LCS, font, alignment, geometric dimension. - xt_SpecificSymbol ///< \ru Спецсимвол. \en Specific symbol. -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Тэг, определяющий назначение текстового блока. - \en Purpose tag of a text object. \~ -*/ -// --- -enum MaeTextFormatTag { - xft_Enumeration, ///< \ru Перечисление. \en Enumeration. - xft_Paragraph, ///< \ru Параграф. \en Paragraph. - // Тэги в следующей группе являются взаимосиключающими. Tags of the next group are mutually exclusive. - xft_Ground, ///< \ru Положение текста на базовом уровне. \en Ground level text position. - xft_Upper, ///< \ru Верхний индекс или числитель. \en Upper index or numerator. - xft_Lower, ///< \ru Нижний индекс или знаменатель. \en Lower index or denominator. - // Следующая группа тэгов уточняет смысл тэгов предыдущей группы. Next group of tags gives the exact meaning to the tags frem the previosu group. - xft_Fraction, ///< \ru Дробь. \en Fraction. - xft_Index, ///< \ru Наличие индекс. \en Indexed item. - xft_OverUnder, ///< \ru Наличие надстрочного и подстрочного текста. \en Overline and underline text present. - - xft_Undefined, ///< \ru Неопределённое значение тэга, не назначается. \en Undefined can be never assigned to items. -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Направление текста. - \en Text direction. \~ -*/ -// --- -enum eTextPath { - txp_Left, ///< \ru Налево. \en To the left. - txp_Right,///< \ru Направо. \en To the right. - txp_Up, ///< \ru Вверх. \en Upward. - txp_Down ///< \ru Вниз. \en Downward. -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Спецсимволы. - \en Special symbols. \~ -*/ -enum MbeDefinedDimensionSymbol { - dds_ArcLength, ///< \ru Длина дуги. \en The arc length. - dds_ConicalTaper, ///< \ru Конусность. \en Conicity. - dds_Counterbore, ///< \ru Зенковка. \en Counterbore. - dds_Countersink, ///< \ru Циковка. \en Countersink. - dds_Depth, ///< \ru Глубина. \en Depth. - dds_Diameter, ///< \ru Диаметр. \en Diameter. - dds_PlusMinus, ///< \ru Одинаковая двусторонняя погрешность. \en Equal double-sided tolerance. - dds_Radius, ///< \ru Радиус. \en Radius. - dds_Slope, ///< \ru Склон. \en Slope. - dds_SphericalDiameter, ///< \ru Сферический диаметр. \en Spherical diameter. - dds_SphericalRadius, ///< \ru Сферический радиус. \en Spherical radius. - dds_Square, ///< \ru Квадрат. \en Square. - dds_MetricThread, ///< \ru Метрическая резьба (при экспорте в STEP преобразуется в букву M). \en Metric thread ( in STEP it corresponds M letter ). - - dds_SurfaceCondition, ///< \ru Шереховатость поверхности в нотации STEP (ISO 10303). \en Surface condition in STEP (ISO 10303) codes. - dds_SurfaceCondition_010, - dds_SurfaceCondition_020, - dds_SurfaceCondition_030, - dds_SurfaceCondition_040, - dds_SurfaceCondition_050, - dds_SurfaceCondition_060, - dds_SurfaceCondition_070, - - dds_SurfaceCondition_001, - dds_SurfaceCondition_011, - dds_SurfaceCondition_021, - dds_SurfaceCondition_031, - dds_SurfaceCondition_041, - dds_SurfaceCondition_051, - dds_SurfaceCondition_061, - dds_SurfaceCondition_071, - - dds_SurfaceCondition_100, - dds_SurfaceCondition_110, - dds_SurfaceCondition_120, - dds_SurfaceCondition_130, - dds_SurfaceCondition_140, - dds_SurfaceCondition_150, - dds_SurfaceCondition_160, - dds_SurfaceCondition_170, - - dds_SurfaceCondition_101, - dds_SurfaceCondition_111, - dds_SurfaceCondition_121, - dds_SurfaceCondition_131, - dds_SurfaceCondition_141, - dds_SurfaceCondition_151, - dds_SurfaceCondition_161, - dds_SurfaceCondition_171, - - dds_SurfaceCondition_200, - dds_SurfaceCondition_210, - dds_SurfaceCondition_220, - dds_SurfaceCondition_230, - dds_SurfaceCondition_240, - dds_SurfaceCondition_250, - dds_SurfaceCondition_260, - dds_SurfaceCondition_270, - - dds_SurfaceCondition_201, - dds_SurfaceCondition_211, - dds_SurfaceCondition_221, - dds_SurfaceCondition_231, - dds_SurfaceCondition_241, - dds_SurfaceCondition_251, - dds_SurfaceCondition_261, - dds_SurfaceCondition_271, - - dds_Angularity, ///< \ru Допуск наклона. \en Angularity. - dds_CircularRunout, ///< \ru Допуск биения. \en Circular runout. - dds_Circularity, ///< \ru Допуск круглости. \en Circularity. - dds_Concentricity, ///< \ru Допуск соосности. \en Concentricity. - dds_Cylindricity, ///< \ru Допуск цилиндричности. \en Cylindricity. - dds_DiameterTol, ///< \ru Допуск диаметра. \en Diameter. - dds_Flatness, ///< \ru Допуск плоскостности. \en Flatness. - dds_LeastMaterialCondition, ///< \ru Требование минимума материала. \en Least material condition. - dds_MaximumMaterialCondition, ///< \ru Требование максимума материала. \en Maximum material condition. - dds_Parallelism, ///< \ru Допуск параллельности. \en Parallelism. - dds_Perpendicularity, ///< \ru Допуск перпендикулярности. \en Perpendicularity. - dds_Position, ///< \ru Позиционный допуск. \en Position. - dds_LineProfile, ///< \ru Допуск формы заданного профиля. \en Line profile. - dds_SurfaceProfile, ///< \ru Допуск формы заданной поверхности. \en Surface profile. - dds_ProjectedToleranceZone, ///< \ru Выступающее поле допуска. \en ProejectedToleranceZone. - dds_RegardlessOfFeatureSize, ///< \ru . \en . - dds_Straightness, ///< \ru Допуск прямолинейности. \en Straightness. - dds_Symmetry, ///< \ru Допуск симметричности. \en .Symmetry - dds_TotlaRunout, ///< \ru Допуск полного радиального (либо торцевого) биения. \en Full radial (or face) runout tolerance. -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Тип законцовки. - \en Type of tip. \~ -*/ -enum MbeDefinedTerminatorSymbol { - dts_BlankedArrow, ///< \ru Незакрашенная стрелка. \en Blank arrow. - dts_BlankedBox, ///< \ru Незакрашенный квадрат. \en Blank square. - dts_BlankedDot, ///< \ru Незакрашенная точка. \en Blank point. - dts_DimensionOrigin, ///< \ru Базовsq объект. \en Base object. - dts_FilledArrow, ///< \ru Закрашенная стрелка. \en Filled arrow. - dts_FilledBox, ///< \ru Закрашенный квадрат. \en Filled square. - dts_FilledDot, ///< \ru Закрашенная точка. \en Filled point. - dts_IntegralSymbol, ///< \ru Знак интеграла. \en Integral symbol. - dts_OpenArrow, ///< \ru Открытая стрелка. \en Open arrow. - dts_Slash, ///< \ru Косая черта. \en Slash. - dts_UnfilledArrow ///< \ru Стрелка без заполнения. \en Unfilled arrow. -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Тип кривой с терминаторами. -\en Type of curve with terminators. \~ -*/ -enum MbeDecoratedCurveRole { - dcr_ProjectionCurve, ///< \ru Проекционная кривая размера. \en Projection curve of dimension. - dcr_DimensionCurve, ///< \ru Размерная кривая. \en Dimension curve. - dcr_LeaderCurve, ///< \ru Линия выноски. \en Leader curve. -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Текстовый объект. - \en Text object. \~ -*/ -// --- -class CONV_CLASS MaTextItem : public MbRefItem { -protected: - bool visibility; // \ru Признак видимости. \en Visibility. - std::set purposeTags; // \ru Тэги форматирования. \en Gormat tags. -public: - - MaTextItem(); ///< \ru Конструктор по умолчанию. \en Default constructor. - - void SetVisibility( bool v ); ///< \ru Задать видимость; \en Set visibility. - bool IsVisible() const; ///< \ru Получить видимость; \en Get visibility. - - bool IsTag( MaeTextFormatTag tag ) const; ///< \ru Установлен ли тэг. \en Is a tag set. - bool GetTagIfUnique( MaeTextFormatTag& tag ) const; ///< \ru получить тэг, если он единственный. \en Get the tag provided it id qnique. - void SetTag( MaeTextFormatTag tag ); ///< \ru Установить тэг. \en Set a tag. - void ResetTag( MaeTextFormatTag tag ); ///< \ru Сбросить тэг. \en reset a tag. - bool TagUniqueOrUndefined() const; ///< \ru Назначено ли менее 2 тэгов. \en If less than two tags assinged. - bool NoTag() const; ///< \ru Отсутствуют ли тэги. \en If threre are no tags. - - virtual MaeTextType IsA() const = 0; - virtual SPtr Duplicate() const = 0; - virtual ~MaTextItem(); ///< \ru Деструктор. \en Destructor. - - OBVIOUS_PRIVATE_COPY( MaTextItem ) -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Набор текстовых блоков. - \en Set of text blocks. \~ -*/ -// --- -class CONV_CLASS MaCompositeText : public MaTextItem { - std::vector< SPtr > items; ///< \ru Текстовый блок. \en The text block. - -public: - - MaCompositeText(); ///< \ru Конструктор по умолчанию. \en Default constructor. - - std::vector< SPtr > GetItems() const; ///< \ru Получить элементы. \en Get elements. - void SetItems( const std::vector< SPtr >& it ); ///< \ru Задать элементы. \en Set elements. - void AddItem( MaTextItem* item ); ///< \ru Добавить элемент \en Add an element. - size_t ItemsSize() const; ///< \ru Получить число элементов \en Get count of elements. - MaTextItem* GetItem( size_t idx ); ///< \ru Получить элемент. \en Get element. - const MaTextItem* GetItem( size_t idx ) const; ///< \ru Получить элемент. \en Get element. - - virtual MaeTextType IsA() const; ///< \ru Выдать тип элемента. \en Get element type. - virtual SPtr Duplicate() const; - - /** \brief \ru Вставить объект перед всеми вхождениями указанного. - \en Insert an object before all instances of the specified one. \~ - */ - void InsertBefore( const SPtr& itemToInsert, const SPtr& beforeThis ); - - OBVIOUS_PRIVATE_COPY( MaCompositeText ) -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Текст с указанием ЛСК, шрифта, выравнивания. - \en Text with specification of LCS, font, align. \~ -*/ -// --- -class CONV_CLASS MaTextLiteral : public MaTextItem { -protected: - std::string text; ///< \ru Текст. \en A text. - MbPlacement location; ///< \ru Положение в аннотационной плоскости \en Position in annotation plane - std::string alignment; ///< \ru Выравнивание. \en Alignment. - eTextPath path; ///< \ru Направление текста. \en Text direction. - std::string font; ///< \ru Шрифт текста. \en Text font. - bool isFontExternal; ///< \ru Является ли шрифт нестандартным. \en Is font non-standard. - -public: - - MaTextLiteral(); ///< \ru Конструктор по умолчанию. \en Default constructor. - - MbPlacement & SetLocation(); ///< \ru Получить положение с возможностью модификации. \en Get position with possibility of modification. - const MbPlacement & GetLocation() const; ///< \ru Получить положение. \en Get position. - eTextPath & SetPath(); ///< \ru Получить направление с возможностью модификации. \en Get direction with possibility of modification. - eTextPath GetPath() const; ///< \ru Получить направление. \en Get direction. - void SetFontExternal( bool value ); ///< \ru Задать признак нестандартного шрифта. \en Set the flag of external font. - bool GetFontExternal() const; ///< \ru Получить признак нестандартного шрифта. \en Get the flag of external font. - - void SetText( const std::string& ); ///< \ru Получить текст. \en Get text. - void GetText( std::string& ) const; ///< \ru Задать текст. \en Set text. - void SetAlignment( const std::string& ); ///< \ru Получить выравнивание. \en Get alignment. - void GetAlignment( std::string& ) const; ///< \ru Задать выравнивание. \en Set alignment. - void SetFont( const std::string& ); ///< \ru Получить шрифт. \en Get font. - void GetFont( std::string& ) const; ///< \ru Задать шрифт. \en Set font. - - virtual MaeTextType IsA() const; - virtual SPtr Duplicate() const; - - OBVIOUS_PRIVATE_COPY( MaTextLiteral ) -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Текст с указанием ЛСК, шрифта, выравнивания, размера. - \en Text with specification of LCS, font, alignment, size. \~ -*/ -// --- -class CONV_CLASS MaTextLiteralExtent : public MaTextLiteral { - double sizeX, sizeY; ///< \ru Размеры по x и у. \en Size by x and size by y. -public: - - MaTextLiteralExtent(); ///< \ru Конструктор по умолчанию. \en Default constructor. - - double & SetSizeX(); ///< \ru Получить размер по x. \en Get size by x with possibility of modification. - double & SetSizeY(); ///< \ru Получить размер по y. \en Get size by y with possibility of modification. - double GetSizeX() const; ///< \ru Получить размер по x. \en Get size by x. - double GetSizeY() const; ///< \ru Получить размер по y. \en Get size by y. - - virtual MaeTextType IsA() const; - virtual SPtr Duplicate() const; - - OBVIOUS_PRIVATE_COPY( MaTextLiteralExtent ) -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Спецсимвол. - \en Specific symbol. \~ -*/ -// --- -class CONV_CLASS MaSpecificSymbol : public MaTextItem { - MbPlacement location; ///< \ru Положение в аннотационной плоскости \en Position in annotation plane. - double sizeX; ///< \ru Размер по X. \en Size by x. - double sizeY; ///< \ru Размер по Y. \en Size by Y. - MbeDefinedDimensionSymbol preDefinedSym; ///< \ru Код предопределённого символа. \en The predefined symbol code. -public: - - MaSpecificSymbol( MbeDefinedDimensionSymbol symbol, double szX, double szY ); - - MbeDefinedDimensionSymbol GetSymbol() const; ///< \ru Получить код предопределённого символа. \en Get the predefined symbol code. - bool IsSymbolDimension() const; ///< \ru Является ли символ размерным. \en Is symbol dimension. - bool IsSymbolSurfaceCondition() const; ///< \ru Является ли символ обозначением шероховатости. \en Is symbol surface condition. - bool IsSymbolShapeTolerance() const; ///< \ru Является ли символ допуском формы. \en Is symbol shape tolerance. - MbPlacement& SetLocation(); ///< \ru Получить положение с возможностью модификации. \en Get position with possibility of modification. - const MbPlacement& GetLocation() const; ///< \ru Получить положение. \en Get position. - double GetSizeX() const; ///< \ru Получить размер по x. \en Get size by x. - double GetSizeY() const; ///< \ru Получить размер по y. \en Get size by y. - void GetSize( double& x, double& y ) const; ///< \ru Получить размеры. \en Get sizes. - - OBVIOUS_PRIVATE_COPY( MaSpecificSymbol ) - - virtual MaeTextType IsA() const; - virtual SPtr Duplicate() const; -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Описание законцовочного символа. -\en Description of the terminator symbol. \~ -*/ -struct MaTerminatorSymbol { - MbeDefinedTerminatorSymbol type; ///< \ru Тип символа \en Symbol type - double parameter; ///< \ru Значенеи параметра на размерной кривой. Если не указан, должен быть равен UNDEFINED_DBL. \en Parameter value on the dimensional curve. If not known, must be equal UNDEFINED_DBL. - double sizeX; ///< \ru Размер по x. \en Size by x. - double sizeY; ///< \ru Размер по у. \en Size by y. - /// \ru Признак сонаправленности с касательной к кривой в точке размещения. В случае неопределённого значения параметра - признак направленности внутрь. - /// \en Flag of the same direction with the tangent to the curve at the location point. In case parameter id undefined it shows if the arrow's direction is inner. - bool sameDirection; - - MbCartPoint3D location; ///< \ru Положение в пространстве. \en Location in space. -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Кривая с терминаторами. - \en Curve and terminators. \~ -*/ -class CONV_CLASS MaDecoratedCurve : public MbRefItem { - SPtr curve; - std::vector< MaTerminatorSymbol > terminators; - MbeDecoratedCurveRole curveType; -public: - MaDecoratedCurve( MbeDecoratedCurveRole crvType ); ///< \ru Конструктор. \en Constructor. - MaDecoratedCurve( const MaDecoratedCurve& ); ///< \ru Конструктор копирования. \en Copy constructor. - const MaDecoratedCurve& operator= ( const MaDecoratedCurve& ); ///< \ru Оператор присваивания. \en Assignment operator. - - SPtr GetCurve() const; ///< \ru Получить кривую. \en Get curve. - bool CurveEmpty() const; ///< \ru Пуста ли кривая. \en If curve is empty. - void SetCurve( MbCurve3D* crv ); ///< \ru Задать кривую. \en Set curve. - size_t TerminatorsCount() const; ///< \ru Получить число законцовок. \en Set number of terminators. - bool TerminatorInfo( size_t terminatorIndex, MaTerminatorSymbol& term ) const; ///< \ru Получить законцовку с указанным индексом. \en Get terminator. - void AddTerminator( const MaTerminatorSymbol& term ); ///< \ru Добавить законцовку. \en Add terminator. - - bool IsA( MbeDecoratedCurveRole ) const; ///< \ru Проверка типа кривой. \en Check curve type. - MbeDecoratedCurveRole IsA() const; ///< \ru Проверка типа кривой. \en Check curve type. - - void DuplicateCurve( const MbMatrix3D& transform ); ///< \ru Заменить кривую на преобразованный по матрице дубликат. \en Replace curve by transformed replica. -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Объект аннотации. - \en Annotation object. \~ -*/ -class CONV_CLASS MaAnnotationItem : public MbRefItem { -protected: - MbPlacement3D location; ///< \ru Локальная система координат (ЛСК), в плоскости XY которой расположены объекты аннотации. \en Local coordinate system (LCS) the annotation objects are located in XY plane of. - std::vector< const MbItem* > annotationGeometry; ///< \ru Геометрические объекты аннотации. \en Geometric objects of annotation. - std::vector< SPtr > annotationText; ///< \ru Текстовые аннотационные объекты. \en Text annotation objects. - std::string name; ///< \ru Имя. \en Name. - bool visible; ///< \ru Видим ли объект. \en If object is vivible. - // \ru Аналогичным образом реализовать и символьное представление \en Implement symbolic representation similarly. -public: - /// \ru Конструктор по плоскости аннотации. \en Constructor by annotation plane. - MaAnnotationItem( const MbPlacement3D& loc ); - /// \ru Деструктор. \en Destructor. - virtual ~MaAnnotationItem(); - -public: - /// \ru Получить тип объекта. \en Get the object type. - virtual Mae_AnnotationType IsA() const; - /// \ru Получить групповой тип объекта. \en Get the group type of the object. - virtual Mae_AnnotationType Type() const; - - /// \ru Пусто ли визуальное представление. \en Whether the visual representation is empty. - virtual bool VisualItemsEmpty() const; - - /// \ru Отсутствуют ли геометрические элементы. \en Whether there are no geometric items. - bool GeometryEmpty() const; - - /// \ru Отсутствуют ли текстовые элементы. \en Whether there are no text items. - bool TextEmpty() const; - - /// \ru Добавить геометрический визуальный аннотационный элемент. \en Add the geometric visual annotation element of the kernel. - void AddGeometricAnnotationElement( const MbItem& ); - - /// \ru Добавить собственные геометрические визуальные аннотационный элементы в контейнер. \en Add own geometric visual annotation elements to container. - void AddAnnotationGeometryTo( std::vector< SPtr >& addTo ) const; - - /// \ru Число текстовых элементов. \en Count of text items. - size_t TextItemsCount() const; - - /// \ru Получить текстовый элемент с указанным индексом. \en Get specified text item. - SPtr TextItem( size_t ) const; - - /// \ru Задать аннотационные объекты ядра. \en Set the annotation objects of the kernel. - template< typename In > - void SetAnnotationGeometry( In first, In last ); - /// \ru Выдать аннотационные объекты ядра. У приёмника должен быть определён метод push_back. \en Get the annotation objects of the kernel. Method push_back should be defined for the receiver. - template< typename Out > - void GetAnnotationGeometry( Out dest ) const; - - /// \ru Получить текстовые аннотационные объекты. \en Get the text annotation object. - template< typename In > - void SetAnnotationText( In first, In last ); - /// \ru Выдать текстовые аннотационные объекты. У приёмника должен быть определён метод push_back. \en Get text annotation objects. Method push_back should be defined for the receiver. - template< typename Out > - void GetAnnotationText( Out dest ) const; - - /// \ru Добавить плоские геометрические объекты, преобразуя их в пространственные, используя текущую ЛСК. \en Add planar objects to geometric objects using current location. - void AddPlaneItems( const std::vector >& ); - - /// \ru Задать ЛСК. \en Specify LCS. - void SetLocation( const MbPlacement3D & loc ); - /// \ru Получить ЛСК. \en Get LCS. - MbPlacement3D GetLocation() const; - - /// \ru Задать имя. \en Specify name. - void SetName( const std::string & nm ); - - /// \ru Задать имя. \en Specify name. - void GetName( std::string & nm ) const; - - /// \ru Задать видимость. \en Set visibility. - void SetVisibility( bool v ); - /// \ru Видим ли объект. \en Is object vivible. - bool IsVisible() const; - - /// \ru Создать дубликат и трансформировать его согласно матрице. \en Create a replica then transform it. - virtual SPtr ShallowDuplicateTransform( const MbMatrix3D & ); - - /// \ru Инициализировать все поля за исключением ЛСК данными присланного. \en Init all fields except for location according to the specified item. - void InitExceplLocation( const MaAnnotationItem & init ); - -protected: - - /// \ru Заменить геометрические элементы трансформированными копиями. \en Replace all geometric items by transformed copies. - virtual void DuplicateTransformDeometry( const MbMatrix3D & ); -}; - - -typedef SPtr AnnotationSPtr; - -/** \brief \ru Контейнер объектов аннотации. -\en Container of annotation objects. \~ -\ingroup Exchange_Base -*/ -typedef std::vector vector_of_annotation; -typedef std::vector AnnotationSptrVector; - - -/** \brief \ru Ассоциация наборов аннотационных объектов элементам со счётчиком ссылок. -\en Association of sets of annotation objects with elements with reference counter. \~ -\ingroup Exchange_Base -*/ -typedef std::map< SPtr, AnnotationSptrVector > map_of_visual_items; - - -/** \brief \ru Контейнер текстовых блоков. -\en Container of text blocks. \~ -\ingroup Exchange_Base -*/ -typedef std::vector< SPtr > vector_of_text; - - -//------------------------------------------------------------------------------ -/** \brief \ru Размер - родоначальник классов для размеров различных типов. - \en Dimension is the parent of all classes for dimensions of different types. \~ -*/ -// --- -class CONV_CLASS MaDimension : public MaAnnotationItem { - double value; ///< \ru Значение размера. \en A value of dimension. - double valuePlus; ///< \ru Отклонение размера в сторону увеличения. \en Deviation (increase) of size. - double valueMinus; ///< \ru Отклонение размера в сторону уменьшения. \en Deviation (decrease) of size. - bool isRangeSet; ///< \ru Если false, то задан только диапазон изменения, иначе можно вычислить погрешности в обе стороны. \en If it equals false, then only the range of changing is specified, else the tolerances in both directions can be computed. - bool isValueDefined; ///< \ru Задан ли номинал. \en Whether the nominal is given. -protected: - MaDecoratedCurve dimensionCurve; - - OBVIOUS_PRIVATE_COPY( MaDimension ) -protected: - MaDimension( const MbPlacement3D& loc, MbCurve3D* dimCurve ); - MaDimension( const MbPlacement3D& loc, const MaDecoratedCurve& dimCurve ); -public: - /// \ru Получить тип объекта. \en Get the object type. - virtual Mae_AnnotationType IsA() const; - /// \ru Получить групповой тип объекта. \en Get the group type of the object. - virtual Mae_AnnotationType Type() const; - - /// \ru Получить размерную кривую. \en Get the dimensional curve. - MbCurve3D* GetDimensionCurve() const; - - /// \ru Задать номинал. \en Set a value. - void SetValue( double v ); - /// \ru Задать диапазон и значение. \en Set a range and a value. - void SetRange( double v, double vPlus, double vMinus ); - /// \ru Задать диапазон. \en Set range. - void SetRange( double vPlus, double vMinus ); - /// \ru Получить номинал. \en Get value. - bool GetValue( double& v ); - /// \ru Получить границы диапазона и значение, если они заданы. \en Get bounds of range and a value if they are specified. - bool GetRange( double& v, double& vPlus, double& vMinus ) const; - /// \ru Получить границы диапазона, если они заданы. \en Get bounds of the range if they are specified. - bool GetRange( double& vPlus, double& vMinus ) const; - /// \ru Заданы ли границы диапазона. \en Whether the bounds of range are specified. - bool IsRangeDefined() const; - /// \ru Задано ли значение. \en Whether the value is specified. - bool IsValueDefined() const; - /** \brief \ru Добавить законцовочный символ. - \en Add a terminator. \~ - \param [in] init - \ru Параметры задаваемого символа. - \en Parameters of specified symbol. \~ - \return \ru - true, если задана размерная кривая и хотя бы один из законцовочных символов не был задан. - \en - true, if a dimensional curve is specified and at least one of terminators has not been specified. \~ - */ - bool AddTerminator( const MaTerminatorSymbol& init ); - /// \ru Получить первый законцовочный символ. \en Get the first terminator. - bool GetFirstTerminator( MaTerminatorSymbol& first ) const; - /// \ru Получить второй законцовочный символ. \en Get the second terminator. - bool GetSecondTerminator( MaTerminatorSymbol& second ) const; - - void InitValueTerminators( const MaDimension& init ); -protected: - /// \ru Заменить геометрические элементы трансформированными копиями. \en Replace all geometric items by transformed copies. - virtual void DuplicateTransformDeometry( const MbMatrix3D & ); -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Линейный размер. - \en Linear dimension. \~ -*/ -// --- -class CONV_CLASS MaLinearDimension : public MaDimension { -private: - SPtr bindBase; ///< \ru Первый объект привязки. \en The first binding object. - SPtr bindTarget; ///< \ru Второй объект привязки. \en The second binding object. - MaDecoratedCurve projectionBase; ///< \ru Проекционная кривая к первому объекту привязки в смысле STEP. \en Projection curve to the first binding object in sense of STEP. - MaDecoratedCurve projectionTarget; ///< \ru Проекционная кривая ко второму объекту привязки в смысле STEP. \en Projection curve to the second binding object in sense of STEP. - SPtr path; ///< \ru Кривая, вдоль которой проводится измерение. Если не задана, то размер есть кратчайший. \en A curve along which the measurement is performed. If not specified, then the size is shortest. - - OBVIOUS_PRIVATE_COPY( MaLinearDimension ) -public: - MaLinearDimension ( const MbRefItem* base, const MbRefItem* target, - MbLineSegment3D* projBase, MbLineSegment3D* projTarget, - MbLineSegment3D* dimensionCurve, const MbPlacement3D& loc ); - - MaLinearDimension ( const MbRefItem* base, const MbRefItem* target, - MbLineSegment3D* projBase, MbLineSegment3D* projTarget, - const MaDecoratedCurve dimensionCurve, const MbPlacement3D& loc ); - - virtual Mae_AnnotationType IsA() const; - - virtual bool VisualItemsEmpty() const; - - /// \ru Получить базовый объект привязки. \en Get the base binding object. - const MbRefItem * GetBindBase(); - /// \ru Получить второй объект привязки. \en Get the second binding object. - const MbRefItem * GetBindTarget(); - - /// \ru Получить проекционную кривую к базовому объекту привязки. \en Get projection curve to the base binding object. - MbLineSegment3D* GetProjectionBase() const; - /// \ru Получить проекционную кривую ко второму объекту привязки. \en Get the projection curve to the second binding object. - MbLineSegment3D* GetProjectionTarget() const; - - /// \ru Задать кривую, вдоль которой провдится измерение. \en Set the curve the measurement is performed along. - void SetPath( MbCurve3D* inPath ); - /// \ru Получить кривую, вдоль которой провдится измерение. \en Get the curve the measurement is performed along. - MbCurve3D* GetPath(); - - /// \ru Создать дубликат и трансформировать его согласно матрице. \en Create a replica then transform it. - virtual SPtr ShallowDuplicateTransform( const MbMatrix3D& ); - -protected: - // Заменить геометрические элементы трансформированными копиями. - virtual void DuplicateTransformDeometry( const MbMatrix3D & ); -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Угловой размер. - \en Angular dimension. \~ -*/ -// --- -class CONV_CLASS MaAngularDimension : public MaDimension { -private: - SPtr bindBase; ///< \ru Первый объект привязки. \en The first binding object. - SPtr bindTarget; ///< \ru Второй объект привязки. \en The second binding object. - MaDecoratedCurve projectionBase; ///< \ru Проекционная кривая к первому объекту привязки в смысле STEP. \en Projection curve to the first binding object in sense of STEP. - MaDecoratedCurve projectionTarget; ///< \ru Проекционная кривая ко второму объекту привязки в смысле STEP. \en Projection curve to the second binding object in sense of STEP. - - OBVIOUS_PRIVATE_COPY( MaAngularDimension ) -public: - MaAngularDimension( const MbRefItem* base, const MbRefItem* target, - MbLineSegment3D* projBase, MbLineSegment3D* projTarget, - MbArc3D* dimensionCurve, const MbPlacement3D& loc ); - - MaAngularDimension( const MbRefItem* base, const MbRefItem* target, - MbLineSegment3D* projBase, MbLineSegment3D* projTarget, - const MaDecoratedCurve&, const MbPlacement3D& loc ); - - virtual Mae_AnnotationType IsA() const ; - - virtual bool VisualItemsEmpty() const; - - /// \ru Получить базовый объект привязки. \en Get the base binding object. - const MbRefItem * GetBindBase(); - /// \ru Получить второй объект привязки. \en Get the second binding object. - const MbRefItem * GetBindTarget(); - - /// \ru Получить проекционную кривую к базовому объекту привязки. \en Get projection curve to the base binding object. - MbLineSegment3D * GetProjectionBase() const; - /// \ru Получить проекционную кривую ко второму объекту привязки. \en Get the projection curve to the second binding object. - MbLineSegment3D * GetProjectionTarget() const; - /// \ru Если заданы проекционные кривые и если они не параллельны, получить точку пересечения или скрещивания. Метод работает и за пределеми параметрической области. \en If the projection curves are specified and if they are not parallel, get the point of intersection or crossing. The method works outside the bounds of a parametric region too. - bool NearestBetweenProjections( MbCartPoint3D& pnt ); - /// \ru Создать дубликат и трансформировать его согласно матрице. \en Create a replica then transform it. - virtual SPtr ShallowDuplicateTransform( const MbMatrix3D& ); - -protected: - // Заменить геометрические элементы трансформированными копиями. - virtual void DuplicateTransformDeometry( const MbMatrix3D & ); -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Радиальный размер. - \en Radial dimension. \~ -*/ -// --- -class CONV_CLASS MaRadialDimension : public MaDimension { -private: - SPtr bindBase; ///< \ru Объект привязки. \en Binding object. - MaDecoratedCurve projectionBase; ///< \ru Проекционная кривая к объекту привязки в смысле STEP. \en Projection curve to the binding object in sense of STEP. - - OBVIOUS_PRIVATE_COPY( MaRadialDimension ) -public: - MaRadialDimension( const MbRefItem* base, MbLineSegment3D* projBase, - MbLineSegment3D* dimensionCurve, const MbPlacement3D& loc ); - - MaRadialDimension( const MbRefItem* base, MbLineSegment3D* projBase, - const MaDecoratedCurve& dimensionCurve, const MbPlacement3D& loc ); - - virtual Mae_AnnotationType IsA() const; - - virtual bool VisualItemsEmpty() const; - - /// \ru Получить базовый объект привязки. \en Get the base binding object. - const MbRefItem * GetBindBase(); - /// \ru Получить проекционную кривую к базовому объекту привязки. \en Get projection curve to the base binding object. - MbLineSegment3D * GetProjectionBase() const; - /// \ru Создать дубликат и трансформировать его согласно матрице. \en Create a replica then transform it. - virtual SPtr ShallowDuplicateTransform( const MbMatrix3D& ); - -protected: - // Заменить геометрические элементы трансформированными копиями. - virtual void DuplicateTransformDeometry( const MbMatrix3D & ); -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Диаметральный размер. - \en Diameter dimension. \~ -*/ -// --- -class CONV_CLASS MaDiameterDimension : public MaDimension { -private: - SPtr bindBase; ///< \ru Объект привязки. \en Binding object. - MaDecoratedCurve projectionBase; ///< \ru Первая проекционная кривая к объекту привязки в смысле STEP. \en The first projection curve to binding object in sense of STEP. - MaDecoratedCurve projectionTarget; ///< \ru Вторая проекционная кривая к объекту привязки в смысле STEP. \en The second projection curve to binding object in sense of STEP. - - OBVIOUS_PRIVATE_COPY( MaDiameterDimension ) -public: - MaDiameterDimension( const MbRefItem* base, MbLineSegment3D* projBase, - MbLineSegment3D* projTarget, MbLineSegment3D* dimCurve, - const MbPlacement3D& loc ); - - MaDiameterDimension( const MbRefItem* base, MbLineSegment3D* projBase, - MbLineSegment3D* projTarget, const MaDecoratedCurve& dimCurve, - const MbPlacement3D& loc ); - - virtual Mae_AnnotationType IsA() const; - - virtual bool VisualItemsEmpty() const; - - /// \ru Получить базовый объект привязки. \en Get the base binding object. - const MbRefItem * GetBindBase(); - - /// \ru Получить проекционную кривую к базовому объекту привязки. \en Get projection curve to the base binding object. - MbLineSegment3D * GetProjectionBase() const; - /// \ru Получить вторую проекционную кривую к объекту привязки. \en Get the first projection curve to the binding object. - MbLineSegment3D * GetProjectionTarget() const; - /// \ru Создать дубликат и трансформировать его согласно матрице. \en Create a replica then transform it. - virtual SPtr ShallowDuplicateTransform( const MbMatrix3D& ); - -protected: - // Заменить геометрические элементы трансформированными копиями. - virtual void DuplicateTransformDeometry( const MbMatrix3D & ); -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Выносной элемент - родоначальник классов для обозначений различных типов. -\en Callout is the parent of all classes for callouts of different types. \~ -*/ -// --- -class CONV_CLASS MaCallout : public MaAnnotationItem { - Mae_AnnotationType whatIs; ///< \ru Подтип объекта. \en Object subtype. - std::vector leaderLines; ///< \ru Линии выноски. \en Leader lines. -public: - /// \ru Получить тип объекта. \en Get the object type. - virtual Mae_AnnotationType IsA() const; - /// \ru Получить групповой тип объекта. \en Get the group type of the object. - virtual Mae_AnnotationType Type() const; - /// \ru Создать объект заданного типа объекта. \en Create object of specified type. - static MaCallout* Create( const MbPlacement3D& location, Mae_AnnotationType subtype ); - - void AddLeaderLine( const MaDecoratedCurve& leader ); ///< \ru Добавить линию выноски. \en Add leader line. - void AddLeaderLines( const std::vector& leaders ); ///< \ru Добавить линию выноски. \en Add leader line. - size_t LeaderLinesCount() const; ///< \ru Получить число линий выноски. \en Get number of leader lines. - bool LeaderLineInfo( size_t index, MaDecoratedCurve& callout ) const; ///< \ru Получить линию выноски с указанным индексом. \en Get of leader lines at specified index. -private: - MaCallout( const MbPlacement3D& location, Mae_AnnotationType subtype ); ///< \ru Конструктор. \en Constructor. - - OBVIOUS_PRIVATE_COPY(MaCallout) -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Шероховатость поверхности. -\en Surface condition. \~ -*/ -// --- -class CONV_CLASS MaSurfaceCondition : public MaAnnotationItem { - SPtr< const MbRefItem > baseObject; - double value; -public: - /// \ru Конструктор. \en Constructor. - MaSurfaceCondition( const MbPlacement3D& location ); - - /// \ru Получить тип объекта. \en Get the object type. - virtual Mae_AnnotationType IsA() const; - /// \ru Получить групповой тип объекта. \en Get the group type of the object. - virtual Mae_AnnotationType Type() const; - - OBVIOUS_PRIVATE_COPY( MaSurfaceCondition ) -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Допуск формы. -\en Shape tolerance. \~ -*/ -// --- -class CONV_CLASS MaShapeTolerance : public MaAnnotationItem { - SPtr< const MbRefItem > baseObject; - double value; -public: - /// \ru Конструктор. \en Constructor. - MaShapeTolerance( const MbPlacement3D& location ); - - /// \ru Получить тип объекта. \en Get the object type. - virtual Mae_AnnotationType IsA() const; - /// \ru Получить групповой тип объекта. \en Get the group type of the object. - virtual Mae_AnnotationType Type() const; - - OBVIOUS_PRIVATE_COPY(MaShapeTolerance) -}; - - -//------------------------------------------------------------------------------ -// \ru Задать геометрические объекты аннотации \en Set geometric objects of annotation. -// --- -template< typename In > -void MaAnnotationItem::SetAnnotationGeometry( In first, In last ) { - std::for_each( annotationGeometry.begin(), annotationGeometry.end(), ReleaseItem ); - annotationGeometry.assign( first, last ); - std::for_each( annotationGeometry.begin(), annotationGeometry.end(), AddRefItem ); -} - - -//------------------------------------------------------------------------------ -// \ru Получить геометрические объекты аннотации \en Get geometric objects of annotation. -// --- -template< typename Out > -void MaAnnotationItem::GetAnnotationGeometry( Out dest ) const { - std::copy( annotationGeometry.begin(), annotationGeometry.end(), dest ); -} - - -//------------------------------------------------------------------------------ -// \ru Задать текстовые объекты аннотации \en Set text objects of annotation. -// --- -template< typename In > -void MaAnnotationItem::SetAnnotationText( In first, In last ) { - annotationText.assign( first, last ); -} - - -//------------------------------------------------------------------------------ -// \ru Получить текстовые объекты аннотации \en Get text objects of annotation -// --- -template< typename Out > -void MaAnnotationItem::GetAnnotationText( Out dest ) const { - std::copy( annotationText.begin(), annotationText.end(), dest ); -} - - -#endif // __CONV_ANNOTATION_ITEM_H +//////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Объекты, используемые при импорте и экспорте аннотации и размеров. + \en Objects used for import and export of annotation and dimensions \~ +*/ +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __CONV_ANNOTATION_ITEM_H +#define __CONV_ANNOTATION_ITEM_H + +#include +#include +#include +#include + +#include +#include + +class MbLineSegment3D; +class MbArc3D; +class MbItem; +class MbPlaneItem; + +//------------------------------------------------------------------------------ +/** \brief \ru Тип элемента аннотации. + \en Type of annotation element. \~ +*/ +// --- +enum Mae_AnnotationType { + nt_AnnotationItem, ///< \ru Аннотация без объектов привязки. \en Annotation without binding objects. + nt_Dimension, ///< \ru Размер. \en Dimension + nt_LinearDimension, ///< \ru Линейный размер. \en Linear dimension. + nt_DiameterDimension, ///< \ru Диаметральный размер. \en Diameter dimension. + nt_RadialDimension, ///< \ru Радиальный размер. \en Radial dimension. + nt_AngularDimension, ///< \ru Угловой размер. \en Angular dimension. + nt_Callout, ///< \ru Выноска. \en Callout. + nt_Marking, ///< \ru Обозначение. \en Marking. + nt_Datum, ///< \ru База. \en Datum. + nt_Note, ///< \ru Примечание. \en Note. + nt_Centreline, ///< \ru Осевая линия. \en Centreline. + nt_FeatureControlFrame, ///< \ru Рамка управления характеристиками. \en Feature Control Frame. + nt_ReferencePoint, ///< \ru Точка отсчета. \en Reference Point. + nt_SurfaceRoughness, ///< \ru Шероховатость поверхности. \en Surface roughness. + nt_ShapeTolerance ///< \ru Допуск формы. +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Тип текстового объекта. + \en Type of a text object. \~ +*/ +// --- +enum MaeTextType { + xt_CompositeText, ///< \ru Набор текстовых блоков. \en Set of text blocks. + xt_TextLiteral, ///< \ru Текст с указанием ЛСК, шрифта, выравнивания. \en Text with specification of LCS, font, alignment. + xt_TextLiteralExtent, ///< \ru Текст с указанием ЛСК, шрифта, выравнивания, геометрического размера. \en Text with specification of LCS, font, alignment, geometric dimension. + xt_SpecificSymbol ///< \ru Спецсимвол. \en Specific symbol. +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Тэг, определяющий назначение текстового блока. + \en Purpose tag of a text object. \~ +*/ +// --- +enum MaeTextFormatTag { + xft_Enumeration, ///< \ru Перечисление. \en Enumeration. + xft_Paragraph, ///< \ru Параграф. \en Paragraph. + // Тэги в следующей группе являются взаимосиключающими. Tags of the next group are mutually exclusive. + xft_Ground, ///< \ru Положение текста на базовом уровне. \en Ground level text position. + xft_Upper, ///< \ru Верхний индекс или числитель. \en Upper index or numerator. + xft_Lower, ///< \ru Нижний индекс или знаменатель. \en Lower index or denominator. + // Следующая группа тэгов уточняет смысл тэгов предыдущей группы. Next group of tags gives the exact meaning to the tags frem the previosu group. + xft_Fraction, ///< \ru Дробь. \en Fraction. + xft_Index, ///< \ru Наличие индекс. \en Indexed item. + xft_OverUnder, ///< \ru Наличие надстрочного и подстрочного текста. \en Overline and underline text present. + + xft_Undefined, ///< \ru Неопределённое значение тэга, не назначается. \en Undefined can be never assigned to items. +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Направление текста. + \en Text direction. \~ +*/ +// --- +enum eTextPath { + txp_Left, ///< \ru Налево. \en To the left. + txp_Right,///< \ru Направо. \en To the right. + txp_Up, ///< \ru Вверх. \en Upward. + txp_Down ///< \ru Вниз. \en Downward. +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Спецсимволы. + \en Special symbols. \~ +*/ +enum MbeDefinedDimensionSymbol { + dds_ArcLength, ///< \ru Длина дуги. \en The arc length. + dds_ConicalTaper, ///< \ru Конусность. \en Conicity. + dds_Counterbore, ///< \ru Зенковка. \en Counterbore. + dds_Countersink, ///< \ru Циковка. \en Countersink. + dds_Depth, ///< \ru Глубина. \en Depth. + dds_Diameter, ///< \ru Диаметр. \en Diameter. + dds_PlusMinus, ///< \ru Одинаковая двусторонняя погрешность. \en Equal double-sided tolerance. + dds_Radius, ///< \ru Радиус. \en Radius. + dds_Slope, ///< \ru Склон. \en Slope. + dds_SphericalDiameter, ///< \ru Сферический диаметр. \en Spherical diameter. + dds_SphericalRadius, ///< \ru Сферический радиус. \en Spherical radius. + dds_Square, ///< \ru Квадрат. \en Square. + dds_MetricThread, ///< \ru Метрическая резьба (при экспорте в STEP преобразуется в букву M). \en Metric thread ( in STEP it corresponds M letter ). + + dds_SurfaceCondition, ///< \ru Шереховатость поверхности в нотации STEP (ISO 10303). \en Surface condition in STEP (ISO 10303) codes. + dds_SurfaceCondition_010, + dds_SurfaceCondition_020, + dds_SurfaceCondition_030, + dds_SurfaceCondition_040, + dds_SurfaceCondition_050, + dds_SurfaceCondition_060, + dds_SurfaceCondition_070, + + dds_SurfaceCondition_001, + dds_SurfaceCondition_011, + dds_SurfaceCondition_021, + dds_SurfaceCondition_031, + dds_SurfaceCondition_041, + dds_SurfaceCondition_051, + dds_SurfaceCondition_061, + dds_SurfaceCondition_071, + + dds_SurfaceCondition_100, + dds_SurfaceCondition_110, + dds_SurfaceCondition_120, + dds_SurfaceCondition_130, + dds_SurfaceCondition_140, + dds_SurfaceCondition_150, + dds_SurfaceCondition_160, + dds_SurfaceCondition_170, + + dds_SurfaceCondition_101, + dds_SurfaceCondition_111, + dds_SurfaceCondition_121, + dds_SurfaceCondition_131, + dds_SurfaceCondition_141, + dds_SurfaceCondition_151, + dds_SurfaceCondition_161, + dds_SurfaceCondition_171, + + dds_SurfaceCondition_200, + dds_SurfaceCondition_210, + dds_SurfaceCondition_220, + dds_SurfaceCondition_230, + dds_SurfaceCondition_240, + dds_SurfaceCondition_250, + dds_SurfaceCondition_260, + dds_SurfaceCondition_270, + + dds_SurfaceCondition_201, + dds_SurfaceCondition_211, + dds_SurfaceCondition_221, + dds_SurfaceCondition_231, + dds_SurfaceCondition_241, + dds_SurfaceCondition_251, + dds_SurfaceCondition_261, + dds_SurfaceCondition_271, + + dds_Angularity, ///< \ru Допуск наклона. \en Angularity. + dds_CircularRunout, ///< \ru Допуск биения. \en Circular runout. + dds_Circularity, ///< \ru Допуск круглости. \en Circularity. + dds_Concentricity, ///< \ru Допуск соосности. \en Concentricity. + dds_Cylindricity, ///< \ru Допуск цилиндричности. \en Cylindricity. + dds_DiameterTol, ///< \ru Допуск диаметра. \en Diameter. + dds_Flatness, ///< \ru Допуск плоскостности. \en Flatness. + dds_LeastMaterialCondition, ///< \ru Требование минимума материала. \en Least material condition. + dds_MaximumMaterialCondition, ///< \ru Требование максимума материала. \en Maximum material condition. + dds_Parallelism, ///< \ru Допуск параллельности. \en Parallelism. + dds_Perpendicularity, ///< \ru Допуск перпендикулярности. \en Perpendicularity. + dds_Position, ///< \ru Позиционный допуск. \en Position. + dds_LineProfile, ///< \ru Допуск формы заданного профиля. \en Line profile. + dds_SurfaceProfile, ///< \ru Допуск формы заданной поверхности. \en Surface profile. + dds_ProjectedToleranceZone, ///< \ru Выступающее поле допуска. \en ProejectedToleranceZone. + dds_RegardlessOfFeatureSize, ///< \ru . \en . + dds_Straightness, ///< \ru Допуск прямолинейности. \en Straightness. + dds_Symmetry, ///< \ru Допуск симметричности. \en .Symmetry + dds_TotlaRunout, ///< \ru Допуск полного радиального (либо торцевого) биения. \en Full radial (or face) runout tolerance. +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Тип законцовки. + \en Type of tip. \~ +*/ +enum MbeDefinedTerminatorSymbol { + dts_BlankedArrow, ///< \ru Незакрашенная стрелка. \en Blank arrow. + dts_BlankedBox, ///< \ru Незакрашенный квадрат. \en Blank square. + dts_BlankedDot, ///< \ru Незакрашенная точка. \en Blank point. + dts_DimensionOrigin, ///< \ru Базовsq объект. \en Base object. + dts_FilledArrow, ///< \ru Закрашенная стрелка. \en Filled arrow. + dts_FilledBox, ///< \ru Закрашенный квадрат. \en Filled square. + dts_FilledDot, ///< \ru Закрашенная точка. \en Filled point. + dts_IntegralSymbol, ///< \ru Знак интеграла. \en Integral symbol. + dts_OpenArrow, ///< \ru Открытая стрелка. \en Open arrow. + dts_Slash, ///< \ru Косая черта. \en Slash. + dts_UnfilledArrow ///< \ru Стрелка без заполнения. \en Unfilled arrow. +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Тип кривой с терминаторами. +\en Type of curve with terminators. \~ +*/ +enum MbeDecoratedCurveRole { + dcr_ProjectionCurve, ///< \ru Проекционная кривая размера. \en Projection curve of dimension. + dcr_DimensionCurve, ///< \ru Размерная кривая. \en Dimension curve. + dcr_LeaderCurve, ///< \ru Линия выноски. \en Leader curve. +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Текстовый объект. + \en Text object. \~ +*/ +// --- +class CONV_CLASS MaTextItem : public MbRefItem { +protected: + bool visibility; // \ru Признак видимости. \en Visibility. + std::set purposeTags; // \ru Тэги форматирования. \en Gormat tags. +public: + + MaTextItem(); ///< \ru Конструктор по умолчанию. \en Default constructor. + + void SetVisibility( bool v ); ///< \ru Задать видимость; \en Set visibility. + bool IsVisible() const; ///< \ru Получить видимость; \en Get visibility. + + bool IsTag( MaeTextFormatTag tag ) const; ///< \ru Установлен ли тэг. \en Is a tag set. + bool GetTagIfUnique( MaeTextFormatTag& tag ) const; ///< \ru получить тэг, если он единственный. \en Get the tag provided it id qnique. + void SetTag( MaeTextFormatTag tag ); ///< \ru Установить тэг. \en Set a tag. + void ResetTag( MaeTextFormatTag tag ); ///< \ru Сбросить тэг. \en reset a tag. + bool TagUniqueOrUndefined() const; ///< \ru Назначено ли менее 2 тэгов. \en If less than two tags assinged. + bool NoTag() const; ///< \ru Отсутствуют ли тэги. \en If threre are no tags. + + virtual MaeTextType IsA() const = 0; + virtual SPtr Duplicate() const = 0; + virtual ~MaTextItem(); ///< \ru Деструктор. \en Destructor. + + OBVIOUS_PRIVATE_COPY( MaTextItem ) +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Набор текстовых блоков. + \en Set of text blocks. \~ +*/ +// --- +class CONV_CLASS MaCompositeText : public MaTextItem { + std::vector< SPtr > items; ///< \ru Текстовый блок. \en The text block. + +public: + + MaCompositeText(); ///< \ru Конструктор по умолчанию. \en Default constructor. + + std::vector< SPtr > GetItems() const; ///< \ru Получить элементы. \en Get elements. + void SetItems( const std::vector< SPtr >& it ); ///< \ru Задать элементы. \en Set elements. + void AddItem( MaTextItem* item ); ///< \ru Добавить элемент \en Add an element. + size_t ItemsSize() const; ///< \ru Получить число элементов \en Get count of elements. + MaTextItem* GetItem( size_t idx ); ///< \ru Получить элемент. \en Get element. + const MaTextItem* GetItem( size_t idx ) const; ///< \ru Получить элемент. \en Get element. + + virtual MaeTextType IsA() const; ///< \ru Выдать тип элемента. \en Get element type. + virtual SPtr Duplicate() const; + + /** \brief \ru Вставить объект перед всеми вхождениями указанного. + \en Insert an object before all instances of the specified one. \~ + */ + void InsertBefore( const SPtr& itemToInsert, const SPtr& beforeThis ); + + OBVIOUS_PRIVATE_COPY( MaCompositeText ) +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Текст с указанием ЛСК, шрифта, выравнивания. + \en Text with specification of LCS, font, align. \~ +*/ +// --- +class CONV_CLASS MaTextLiteral : public MaTextItem { +protected: + std::string text; ///< \ru Текст. \en A text. + MbPlacement location; ///< \ru Положение в аннотационной плоскости \en Position in annotation plane + std::string alignment; ///< \ru Выравнивание. \en Alignment. + eTextPath path; ///< \ru Направление текста. \en Text direction. + std::string font; ///< \ru Шрифт текста. \en Text font. + bool isFontExternal; ///< \ru Является ли шрифт нестандартным. \en Is font non-standard. + +public: + + MaTextLiteral(); ///< \ru Конструктор по умолчанию. \en Default constructor. + + MbPlacement & SetLocation(); ///< \ru Получить положение с возможностью модификации. \en Get position with possibility of modification. + const MbPlacement & GetLocation() const; ///< \ru Получить положение. \en Get position. + eTextPath & SetPath(); ///< \ru Получить направление с возможностью модификации. \en Get direction with possibility of modification. + eTextPath GetPath() const; ///< \ru Получить направление. \en Get direction. + void SetFontExternal( bool value ); ///< \ru Задать признак нестандартного шрифта. \en Set the flag of external font. + bool GetFontExternal() const; ///< \ru Получить признак нестандартного шрифта. \en Get the flag of external font. + + void SetText( const std::string& ); ///< \ru Получить текст. \en Get text. + void GetText( std::string& ) const; ///< \ru Задать текст. \en Set text. + void SetAlignment( const std::string& ); ///< \ru Получить выравнивание. \en Get alignment. + void GetAlignment( std::string& ) const; ///< \ru Задать выравнивание. \en Set alignment. + void SetFont( const std::string& ); ///< \ru Получить шрифт. \en Get font. + void GetFont( std::string& ) const; ///< \ru Задать шрифт. \en Set font. + + virtual MaeTextType IsA() const; + virtual SPtr Duplicate() const; + + OBVIOUS_PRIVATE_COPY( MaTextLiteral ) +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Текст с указанием ЛСК, шрифта, выравнивания, размера. + \en Text with specification of LCS, font, alignment, size. \~ +*/ +// --- +class CONV_CLASS MaTextLiteralExtent : public MaTextLiteral { + double sizeX, sizeY; ///< \ru Размеры по x и у. \en Size by x and size by y. +public: + + MaTextLiteralExtent(); ///< \ru Конструктор по умолчанию. \en Default constructor. + + double & SetSizeX(); ///< \ru Получить размер по x. \en Get size by x with possibility of modification. + double & SetSizeY(); ///< \ru Получить размер по y. \en Get size by y with possibility of modification. + double GetSizeX() const; ///< \ru Получить размер по x. \en Get size by x. + double GetSizeY() const; ///< \ru Получить размер по y. \en Get size by y. + + virtual MaeTextType IsA() const; + virtual SPtr Duplicate() const; + + OBVIOUS_PRIVATE_COPY( MaTextLiteralExtent ) +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Спецсимвол. + \en Specific symbol. \~ +*/ +// --- +class CONV_CLASS MaSpecificSymbol : public MaTextItem { + MbPlacement location; ///< \ru Положение в аннотационной плоскости \en Position in annotation plane. + double sizeX; ///< \ru Размер по X. \en Size by x. + double sizeY; ///< \ru Размер по Y. \en Size by Y. + MbeDefinedDimensionSymbol preDefinedSym; ///< \ru Код предопределённого символа. \en The predefined symbol code. +public: + + MaSpecificSymbol( MbeDefinedDimensionSymbol symbol, double szX, double szY ); + + MbeDefinedDimensionSymbol GetSymbol() const; ///< \ru Получить код предопределённого символа. \en Get the predefined symbol code. + bool IsSymbolDimension() const; ///< \ru Является ли символ размерным. \en Is symbol dimension. + bool IsSymbolSurfaceCondition() const; ///< \ru Является ли символ обозначением шероховатости. \en Is symbol surface condition. + bool IsSymbolShapeTolerance() const; ///< \ru Является ли символ допуском формы. \en Is symbol shape tolerance. + MbPlacement& SetLocation(); ///< \ru Получить положение с возможностью модификации. \en Get position with possibility of modification. + const MbPlacement& GetLocation() const; ///< \ru Получить положение. \en Get position. + double GetSizeX() const; ///< \ru Получить размер по x. \en Get size by x. + double GetSizeY() const; ///< \ru Получить размер по y. \en Get size by y. + void GetSize( double& x, double& y ) const; ///< \ru Получить размеры. \en Get sizes. + + OBVIOUS_PRIVATE_COPY( MaSpecificSymbol ) + + virtual MaeTextType IsA() const; + virtual SPtr Duplicate() const; +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Описание законцовочного символа. +\en Description of the terminator symbol. \~ +*/ +struct MaTerminatorSymbol { + MbeDefinedTerminatorSymbol type; ///< \ru Тип символа \en Symbol type + double parameter; ///< \ru Значенеи параметра на размерной кривой. Если не указан, должен быть равен UNDEFINED_DBL. \en Parameter value on the dimensional curve. If not known, must be equal UNDEFINED_DBL. + double sizeX; ///< \ru Размер по x. \en Size by x. + double sizeY; ///< \ru Размер по у. \en Size by y. + /// \ru Признак сонаправленности с касательной к кривой в точке размещения. В случае неопределённого значения параметра - признак направленности внутрь. + /// \en Flag of the same direction with the tangent to the curve at the location point. In case parameter id undefined it shows if the arrow's direction is inner. + bool sameDirection; + + MbCartPoint3D location; ///< \ru Положение в пространстве. \en Location in space. +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Кривая с терминаторами. + \en Curve and terminators. \~ +*/ +class CONV_CLASS MaDecoratedCurve : public MbRefItem { + SPtr curve; + std::vector< MaTerminatorSymbol > terminators; + MbeDecoratedCurveRole curveType; +public: + MaDecoratedCurve( MbeDecoratedCurveRole crvType ); ///< \ru Конструктор. \en Constructor. + MaDecoratedCurve( const MaDecoratedCurve& ); ///< \ru Конструктор копирования. \en Copy constructor. + const MaDecoratedCurve& operator= ( const MaDecoratedCurve& ); ///< \ru Оператор присваивания. \en Assignment operator. + + SPtr GetCurve() const; ///< \ru Получить кривую. \en Get curve. + bool CurveEmpty() const; ///< \ru Пуста ли кривая. \en If curve is empty. + void SetCurve( MbCurve3D* crv ); ///< \ru Задать кривую. \en Set curve. + size_t TerminatorsCount() const; ///< \ru Получить число законцовок. \en Set number of terminators. + bool TerminatorInfo( size_t terminatorIndex, MaTerminatorSymbol& term ) const; ///< \ru Получить законцовку с указанным индексом. \en Get terminator. + void AddTerminator( const MaTerminatorSymbol& term ); ///< \ru Добавить законцовку. \en Add terminator. + + bool IsA( MbeDecoratedCurveRole ) const; ///< \ru Проверка типа кривой. \en Check curve type. + MbeDecoratedCurveRole IsA() const; ///< \ru Проверка типа кривой. \en Check curve type. + + void DuplicateCurve( const MbMatrix3D& transform ); ///< \ru Заменить кривую на преобразованный по матрице дубликат. \en Replace curve by transformed replica. +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Объект аннотации. + \en Annotation object. \~ +*/ +class CONV_CLASS MaAnnotationItem : public MbRefItem { +protected: + MbPlacement3D location; ///< \ru Локальная система координат (ЛСК), в плоскости XY которой расположены объекты аннотации. \en Local coordinate system (LCS) the annotation objects are located in XY plane of. + std::vector< const MbItem* > annotationGeometry; ///< \ru Геометрические объекты аннотации. \en Geometric objects of annotation. + std::vector< SPtr > annotationText; ///< \ru Текстовые аннотационные объекты. \en Text annotation objects. + std::string name; ///< \ru Имя. \en Name. + bool visible; ///< \ru Видим ли объект. \en If object is vivible. + // \ru Аналогичным образом реализовать и символьное представление \en Implement symbolic representation similarly. +public: + /// \ru Конструктор по плоскости аннотации. \en Constructor by annotation plane. + MaAnnotationItem( const MbPlacement3D& loc ); + /// \ru Деструктор. \en Destructor. + virtual ~MaAnnotationItem(); + +public: + /// \ru Получить тип объекта. \en Get the object type. + virtual Mae_AnnotationType IsA() const; + /// \ru Получить групповой тип объекта. \en Get the group type of the object. + virtual Mae_AnnotationType Type() const; + + /// \ru Пусто ли визуальное представление. \en Whether the visual representation is empty. + virtual bool VisualItemsEmpty() const; + + /// \ru Отсутствуют ли геометрические элементы. \en Whether there are no geometric items. + bool GeometryEmpty() const; + + /// \ru Отсутствуют ли текстовые элементы. \en Whether there are no text items. + bool TextEmpty() const; + + /// \ru Добавить геометрический визуальный аннотационный элемент. \en Add the geometric visual annotation element of the kernel. + void AddGeometricAnnotationElement( const MbItem& ); + + /// \ru Добавить собственные геометрические визуальные аннотационный элементы в контейнер. \en Add own geometric visual annotation elements to container. + void AddAnnotationGeometryTo( std::vector< SPtr >& addTo ) const; + + /// \ru Число текстовых элементов. \en Count of text items. + size_t TextItemsCount() const; + + /// \ru Получить текстовый элемент с указанным индексом. \en Get specified text item. + SPtr TextItem( size_t ) const; + + /// \ru Задать аннотационные объекты ядра. \en Set the annotation objects of the kernel. + template< typename In > + void SetAnnotationGeometry( In first, In last ); + /// \ru Выдать аннотационные объекты ядра. У приёмника должен быть определён метод push_back. \en Get the annotation objects of the kernel. Method push_back should be defined for the receiver. + template< typename Out > + void GetAnnotationGeometry( Out dest ) const; + + /// \ru Получить текстовые аннотационные объекты. \en Get the text annotation object. + template< typename In > + void SetAnnotationText( In first, In last ); + /// \ru Выдать текстовые аннотационные объекты. У приёмника должен быть определён метод push_back. \en Get text annotation objects. Method push_back should be defined for the receiver. + template< typename Out > + void GetAnnotationText( Out dest ) const; + + /// \ru Добавить плоские геометрические объекты, преобразуя их в пространственные, используя текущую ЛСК. \en Add planar objects to geometric objects using current location. + void AddPlaneItems( const std::vector >& ); + + /// \ru Задать ЛСК. \en Specify LCS. + void SetLocation( const MbPlacement3D & loc ); + /// \ru Получить ЛСК. \en Get LCS. + MbPlacement3D GetLocation() const; + + /// \ru Задать имя. \en Specify name. + void SetName( const std::string & nm ); + + /// \ru Задать имя. \en Specify name. + void GetName( std::string & nm ) const; + + /// \ru Задать видимость. \en Set visibility. + void SetVisibility( bool v ); + /// \ru Видим ли объект. \en Is object vivible. + bool IsVisible() const; + + /// \ru Создать дубликат и трансформировать его согласно матрице. \en Create a replica then transform it. + virtual SPtr ShallowDuplicateTransform( const MbMatrix3D & ); + + /// \ru Инициализировать все поля за исключением ЛСК данными присланного. \en Init all fields except for location according to the specified item. + void InitExceplLocation( const MaAnnotationItem & init ); + +protected: + + /// \ru Заменить геометрические элементы трансформированными копиями. \en Replace all geometric items by transformed copies. + virtual void DuplicateTransformDeometry( const MbMatrix3D & ); +}; + + +typedef SPtr AnnotationSPtr; + +/** \brief \ru Контейнер объектов аннотации. +\en Container of annotation objects. \~ +\ingroup Exchange_Base +*/ +typedef std::vector vector_of_annotation; +typedef std::vector AnnotationSptrVector; + + +/** \brief \ru Ассоциация наборов аннотационных объектов элементам со счётчиком ссылок. +\en Association of sets of annotation objects with elements with reference counter. \~ +\ingroup Exchange_Base +*/ +typedef std::map< SPtr, AnnotationSptrVector > map_of_visual_items; + + +/** \brief \ru Контейнер текстовых блоков. +\en Container of text blocks. \~ +\ingroup Exchange_Base +*/ +typedef std::vector< SPtr > vector_of_text; + + +//------------------------------------------------------------------------------ +/** \brief \ru Размер - родоначальник классов для размеров различных типов. + \en Dimension is the parent of all classes for dimensions of different types. \~ +*/ +// --- +class CONV_CLASS MaDimension : public MaAnnotationItem { + double value; ///< \ru Значение размера. \en A value of dimension. + double valuePlus; ///< \ru Отклонение размера в сторону увеличения. \en Deviation (increase) of size. + double valueMinus; ///< \ru Отклонение размера в сторону уменьшения. \en Deviation (decrease) of size. + bool isRangeSet; ///< \ru Если false, то задан только диапазон изменения, иначе можно вычислить погрешности в обе стороны. \en If it equals false, then only the range of changing is specified, else the tolerances in both directions can be computed. + bool isValueDefined; ///< \ru Задан ли номинал. \en Whether the nominal is given. +protected: + MaDecoratedCurve dimensionCurve; + + OBVIOUS_PRIVATE_COPY( MaDimension ) +protected: + MaDimension( const MbPlacement3D& loc, MbCurve3D* dimCurve ); + MaDimension( const MbPlacement3D& loc, const MaDecoratedCurve& dimCurve ); +public: + /// \ru Получить тип объекта. \en Get the object type. + virtual Mae_AnnotationType IsA() const; + /// \ru Получить групповой тип объекта. \en Get the group type of the object. + virtual Mae_AnnotationType Type() const; + + /// \ru Получить размерную кривую. \en Get the dimensional curve. + MbCurve3D* GetDimensionCurve() const; + + /// \ru Задать номинал. \en Set a value. + void SetValue( double v ); + /// \ru Задать диапазон и значение. \en Set a range and a value. + void SetRange( double v, double vPlus, double vMinus ); + /// \ru Задать диапазон. \en Set range. + void SetRange( double vPlus, double vMinus ); + /// \ru Получить номинал. \en Get value. + bool GetValue( double& v ); + /// \ru Получить границы диапазона и значение, если они заданы. \en Get bounds of range and a value if they are specified. + bool GetRange( double& v, double& vPlus, double& vMinus ) const; + /// \ru Получить границы диапазона, если они заданы. \en Get bounds of the range if they are specified. + bool GetRange( double& vPlus, double& vMinus ) const; + /// \ru Заданы ли границы диапазона. \en Whether the bounds of range are specified. + bool IsRangeDefined() const; + /// \ru Задано ли значение. \en Whether the value is specified. + bool IsValueDefined() const; + /** \brief \ru Добавить законцовочный символ. + \en Add a terminator. \~ + \param [in] init - \ru Параметры задаваемого символа. + \en Parameters of specified symbol. \~ + \return \ru - true, если задана размерная кривая и хотя бы один из законцовочных символов не был задан. + \en - true, if a dimensional curve is specified and at least one of terminators has not been specified. \~ + */ + bool AddTerminator( const MaTerminatorSymbol& init ); + /// \ru Получить первый законцовочный символ. \en Get the first terminator. + bool GetFirstTerminator( MaTerminatorSymbol& first ) const; + /// \ru Получить второй законцовочный символ. \en Get the second terminator. + bool GetSecondTerminator( MaTerminatorSymbol& second ) const; + + void InitValueTerminators( const MaDimension& init ); +protected: + /// \ru Заменить геометрические элементы трансформированными копиями. \en Replace all geometric items by transformed copies. + virtual void DuplicateTransformDeometry( const MbMatrix3D & ); +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Линейный размер. + \en Linear dimension. \~ +*/ +// --- +class CONV_CLASS MaLinearDimension : public MaDimension { +private: + SPtr bindBase; ///< \ru Первый объект привязки. \en The first binding object. + SPtr bindTarget; ///< \ru Второй объект привязки. \en The second binding object. + MaDecoratedCurve projectionBase; ///< \ru Проекционная кривая к первому объекту привязки в смысле STEP. \en Projection curve to the first binding object in sense of STEP. + MaDecoratedCurve projectionTarget; ///< \ru Проекционная кривая ко второму объекту привязки в смысле STEP. \en Projection curve to the second binding object in sense of STEP. + SPtr path; ///< \ru Кривая, вдоль которой проводится измерение. Если не задана, то размер есть кратчайший. \en A curve along which the measurement is performed. If not specified, then the size is shortest. + + OBVIOUS_PRIVATE_COPY( MaLinearDimension ) +public: + MaLinearDimension ( const MbRefItem* base, const MbRefItem* target, + MbLineSegment3D* projBase, MbLineSegment3D* projTarget, + MbLineSegment3D* dimensionCurve, const MbPlacement3D& loc ); + + MaLinearDimension ( const MbRefItem* base, const MbRefItem* target, + MbLineSegment3D* projBase, MbLineSegment3D* projTarget, + const MaDecoratedCurve dimensionCurve, const MbPlacement3D& loc ); + + virtual Mae_AnnotationType IsA() const; + + virtual bool VisualItemsEmpty() const; + + /// \ru Получить базовый объект привязки. \en Get the base binding object. + const MbRefItem * GetBindBase(); + /// \ru Получить второй объект привязки. \en Get the second binding object. + const MbRefItem * GetBindTarget(); + + /// \ru Получить проекционную кривую к базовому объекту привязки. \en Get projection curve to the base binding object. + MbLineSegment3D* GetProjectionBase() const; + /// \ru Получить проекционную кривую ко второму объекту привязки. \en Get the projection curve to the second binding object. + MbLineSegment3D* GetProjectionTarget() const; + + /// \ru Задать кривую, вдоль которой провдится измерение. \en Set the curve the measurement is performed along. + void SetPath( MbCurve3D* inPath ); + /// \ru Получить кривую, вдоль которой провдится измерение. \en Get the curve the measurement is performed along. + MbCurve3D* GetPath(); + + /// \ru Создать дубликат и трансформировать его согласно матрице. \en Create a replica then transform it. + virtual SPtr ShallowDuplicateTransform( const MbMatrix3D& ); + +protected: + // Заменить геометрические элементы трансформированными копиями. + virtual void DuplicateTransformDeometry( const MbMatrix3D & ); +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Угловой размер. + \en Angular dimension. \~ +*/ +// --- +class CONV_CLASS MaAngularDimension : public MaDimension { +private: + SPtr bindBase; ///< \ru Первый объект привязки. \en The first binding object. + SPtr bindTarget; ///< \ru Второй объект привязки. \en The second binding object. + MaDecoratedCurve projectionBase; ///< \ru Проекционная кривая к первому объекту привязки в смысле STEP. \en Projection curve to the first binding object in sense of STEP. + MaDecoratedCurve projectionTarget; ///< \ru Проекционная кривая ко второму объекту привязки в смысле STEP. \en Projection curve to the second binding object in sense of STEP. + + OBVIOUS_PRIVATE_COPY( MaAngularDimension ) +public: + MaAngularDimension( const MbRefItem* base, const MbRefItem* target, + MbLineSegment3D* projBase, MbLineSegment3D* projTarget, + MbArc3D* dimensionCurve, const MbPlacement3D& loc ); + + MaAngularDimension( const MbRefItem* base, const MbRefItem* target, + MbLineSegment3D* projBase, MbLineSegment3D* projTarget, + const MaDecoratedCurve&, const MbPlacement3D& loc ); + + virtual Mae_AnnotationType IsA() const ; + + virtual bool VisualItemsEmpty() const; + + /// \ru Получить базовый объект привязки. \en Get the base binding object. + const MbRefItem * GetBindBase(); + /// \ru Получить второй объект привязки. \en Get the second binding object. + const MbRefItem * GetBindTarget(); + + /// \ru Получить проекционную кривую к базовому объекту привязки. \en Get projection curve to the base binding object. + MbLineSegment3D * GetProjectionBase() const; + /// \ru Получить проекционную кривую ко второму объекту привязки. \en Get the projection curve to the second binding object. + MbLineSegment3D * GetProjectionTarget() const; + /// \ru Если заданы проекционные кривые и если они не параллельны, получить точку пересечения или скрещивания. Метод работает и за пределеми параметрической области. \en If the projection curves are specified and if they are not parallel, get the point of intersection or crossing. The method works outside the bounds of a parametric region too. + bool NearestBetweenProjections( MbCartPoint3D& pnt ); + /// \ru Создать дубликат и трансформировать его согласно матрице. \en Create a replica then transform it. + virtual SPtr ShallowDuplicateTransform( const MbMatrix3D& ); + +protected: + // Заменить геометрические элементы трансформированными копиями. + virtual void DuplicateTransformDeometry( const MbMatrix3D & ); +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Радиальный размер. + \en Radial dimension. \~ +*/ +// --- +class CONV_CLASS MaRadialDimension : public MaDimension { +private: + SPtr bindBase; ///< \ru Объект привязки. \en Binding object. + MaDecoratedCurve projectionBase; ///< \ru Проекционная кривая к объекту привязки в смысле STEP. \en Projection curve to the binding object in sense of STEP. + + OBVIOUS_PRIVATE_COPY( MaRadialDimension ) +public: + MaRadialDimension( const MbRefItem* base, MbLineSegment3D* projBase, + MbLineSegment3D* dimensionCurve, const MbPlacement3D& loc ); + + MaRadialDimension( const MbRefItem* base, MbLineSegment3D* projBase, + const MaDecoratedCurve& dimensionCurve, const MbPlacement3D& loc ); + + virtual Mae_AnnotationType IsA() const; + + virtual bool VisualItemsEmpty() const; + + /// \ru Получить базовый объект привязки. \en Get the base binding object. + const MbRefItem * GetBindBase(); + /// \ru Получить проекционную кривую к базовому объекту привязки. \en Get projection curve to the base binding object. + MbLineSegment3D * GetProjectionBase() const; + /// \ru Создать дубликат и трансформировать его согласно матрице. \en Create a replica then transform it. + virtual SPtr ShallowDuplicateTransform( const MbMatrix3D& ); + +protected: + // Заменить геометрические элементы трансформированными копиями. + virtual void DuplicateTransformDeometry( const MbMatrix3D & ); +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Диаметральный размер. + \en Diameter dimension. \~ +*/ +// --- +class CONV_CLASS MaDiameterDimension : public MaDimension { +private: + SPtr bindBase; ///< \ru Объект привязки. \en Binding object. + MaDecoratedCurve projectionBase; ///< \ru Первая проекционная кривая к объекту привязки в смысле STEP. \en The first projection curve to binding object in sense of STEP. + MaDecoratedCurve projectionTarget; ///< \ru Вторая проекционная кривая к объекту привязки в смысле STEP. \en The second projection curve to binding object in sense of STEP. + + OBVIOUS_PRIVATE_COPY( MaDiameterDimension ) +public: + MaDiameterDimension( const MbRefItem* base, MbLineSegment3D* projBase, + MbLineSegment3D* projTarget, MbLineSegment3D* dimCurve, + const MbPlacement3D& loc ); + + MaDiameterDimension( const MbRefItem* base, MbLineSegment3D* projBase, + MbLineSegment3D* projTarget, const MaDecoratedCurve& dimCurve, + const MbPlacement3D& loc ); + + virtual Mae_AnnotationType IsA() const; + + virtual bool VisualItemsEmpty() const; + + /// \ru Получить базовый объект привязки. \en Get the base binding object. + const MbRefItem * GetBindBase(); + + /// \ru Получить проекционную кривую к базовому объекту привязки. \en Get projection curve to the base binding object. + MbLineSegment3D * GetProjectionBase() const; + /// \ru Получить вторую проекционную кривую к объекту привязки. \en Get the first projection curve to the binding object. + MbLineSegment3D * GetProjectionTarget() const; + /// \ru Создать дубликат и трансформировать его согласно матрице. \en Create a replica then transform it. + virtual SPtr ShallowDuplicateTransform( const MbMatrix3D& ); + +protected: + // Заменить геометрические элементы трансформированными копиями. + virtual void DuplicateTransformDeometry( const MbMatrix3D & ); +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Выносной элемент - родоначальник классов для обозначений различных типов. +\en Callout is the parent of all classes for callouts of different types. \~ +*/ +// --- +class CONV_CLASS MaCallout : public MaAnnotationItem { + Mae_AnnotationType whatIs; ///< \ru Подтип объекта. \en Object subtype. + std::vector leaderLines; ///< \ru Линии выноски. \en Leader lines. +public: + /// \ru Получить тип объекта. \en Get the object type. + virtual Mae_AnnotationType IsA() const; + /// \ru Получить групповой тип объекта. \en Get the group type of the object. + virtual Mae_AnnotationType Type() const; + /// \ru Создать объект заданного типа объекта. \en Create object of specified type. + static MaCallout* Create( const MbPlacement3D& location, Mae_AnnotationType subtype ); + + void AddLeaderLine( const MaDecoratedCurve& leader ); ///< \ru Добавить линию выноски. \en Add leader line. + void AddLeaderLines( const std::vector& leaders ); ///< \ru Добавить линию выноски. \en Add leader line. + size_t LeaderLinesCount() const; ///< \ru Получить число линий выноски. \en Get number of leader lines. + bool LeaderLineInfo( size_t index, MaDecoratedCurve& callout ) const; ///< \ru Получить линию выноски с указанным индексом. \en Get of leader lines at specified index. +private: + MaCallout( const MbPlacement3D& location, Mae_AnnotationType subtype ); ///< \ru Конструктор. \en Constructor. + + OBVIOUS_PRIVATE_COPY(MaCallout) +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Шероховатость поверхности. +\en Surface condition. \~ +*/ +// --- +class CONV_CLASS MaSurfaceCondition : public MaAnnotationItem { + SPtr< const MbRefItem > baseObject; + double value; +public: + /// \ru Конструктор. \en Constructor. + MaSurfaceCondition( const MbPlacement3D& location ); + + /// \ru Получить тип объекта. \en Get the object type. + virtual Mae_AnnotationType IsA() const; + /// \ru Получить групповой тип объекта. \en Get the group type of the object. + virtual Mae_AnnotationType Type() const; + + OBVIOUS_PRIVATE_COPY( MaSurfaceCondition ) +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Допуск формы. +\en Shape tolerance. \~ +*/ +// --- +class CONV_CLASS MaShapeTolerance : public MaAnnotationItem { + SPtr< const MbRefItem > baseObject; + double value; +public: + /// \ru Конструктор. \en Constructor. + MaShapeTolerance( const MbPlacement3D& location ); + + /// \ru Получить тип объекта. \en Get the object type. + virtual Mae_AnnotationType IsA() const; + /// \ru Получить групповой тип объекта. \en Get the group type of the object. + virtual Mae_AnnotationType Type() const; + + OBVIOUS_PRIVATE_COPY(MaShapeTolerance) +}; + + +//------------------------------------------------------------------------------ +// \ru Задать геометрические объекты аннотации \en Set geometric objects of annotation. +// --- +template< typename In > +void MaAnnotationItem::SetAnnotationGeometry( In first, In last ) { + std::for_each( annotationGeometry.begin(), annotationGeometry.end(), ReleaseItem ); + annotationGeometry.assign( first, last ); + std::for_each( annotationGeometry.begin(), annotationGeometry.end(), AddRefItem ); +} + + +//------------------------------------------------------------------------------ +// \ru Получить геометрические объекты аннотации \en Get geometric objects of annotation. +// --- +template< typename Out > +void MaAnnotationItem::GetAnnotationGeometry( Out dest ) const { + std::copy( annotationGeometry.begin(), annotationGeometry.end(), dest ); +} + + +//------------------------------------------------------------------------------ +// \ru Задать текстовые объекты аннотации \en Set text objects of annotation. +// --- +template< typename In > +void MaAnnotationItem::SetAnnotationText( In first, In last ) { + annotationText.assign( first, last ); +} + + +//------------------------------------------------------------------------------ +// \ru Получить текстовые объекты аннотации \en Get text objects of annotation +// --- +template< typename Out > +void MaAnnotationItem::GetAnnotationText( Out dest ) const { + std::copy( annotationText.begin(), annotationText.end(), dest ); +} + + +#endif // __CONV_ANNOTATION_ITEM_H diff --git a/C3d/Include/conv_binary_object.h b/C3d/Include/conv_binary_object.h index 16290a0..a7fa293 100644 --- a/C3d/Include/conv_binary_object.h +++ b/C3d/Include/conv_binary_object.h @@ -1,24 +1,24 @@ -//////////////////////////////////////////////////////////////////////////////// -// -//////////////////////////////////////////////////////////////////////////////// - -#ifndef __BINOBJ_H -#define __BINOBJ_H - - -//------------------------------------------------------------------------------ -// бинарный объект -// --- -struct BinaryObj { - - void * p; - void * pSort; - - BinaryObj( void *otherId, void *otherP ) : p( otherId ), pSort( otherP ) {} - - bool operator == ( const BinaryObj &o ) const { return pSort == o.pSort; } - bool operator < ( const BinaryObj &o ) const { return pSort < o.pSort; } -}; - - +//////////////////////////////////////////////////////////////////////////////// +// +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __BINOBJ_H +#define __BINOBJ_H + + +//------------------------------------------------------------------------------ +// бинарный объект +// --- +struct BinaryObj { + + void * p; + void * pSort; + + BinaryObj( void *otherId, void *otherP ) : p( otherId ), pSort( otherP ) {} + + bool operator == ( const BinaryObj &o ) const { return pSort == o.pSort; } + bool operator < ( const BinaryObj &o ) const { return pSort < o.pSort; } +}; + + #endif \ No newline at end of file diff --git a/C3d/Include/conv_exchange_settings.h b/C3d/Include/conv_exchange_settings.h index 159e308..23c7f6c 100644 --- a/C3d/Include/conv_exchange_settings.h +++ b/C3d/Include/conv_exchange_settings.h @@ -1,540 +1,577 @@ -//////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru Настройки импорта и экспорта. - \en Settings of import and export procedure. \~ - \details \ru Интерфейс настроек и предопределённая реализация ConvConvertorProperty3D. - \en Interface of settings and pre-defined implementation ConvConvertorProperty3D. \~ -*/ -//////////////////////////////////////////////////////////////////////////////// - -#ifndef __CONV_MODEL_PROPERTIES_H -#define __CONV_MODEL_PROPERTIES_H - -#include -#include -#include -#include - -class MbProductInfo; - -//------------------------------------------------------------------------------ -/** \brief \ru Константы единиц измерения. -\en Length units constants.\~ -\ingroup Data_Interface -*/ -// --- -/// \ru Миллиметры. \en Millimeters. -#define LENGTH_UNIT_MM 1.0 -/// \ru Сантиметры. \en Centimeters. -#define LENGTH_UNIT_CM 10.0 -/// \ru Дециметры. \en Decimeters. -#define LENGTH_UNIT_DM 100.0 -/// \ru Метры. \en Meters. -#define LENGTH_UNIT_METER 1000.0 -/// \ru Дюймы. \en Inches. -#define LENGTH_UNIT_INCH 25.4 - - -//------------------------------------------------------------------------------ -/** \brief \ru Прикладной протокол. -\en Applied protocol.\~ -\ingroup Data_Interface -*/ -// --- -enum MbeImpExpFormat { - ief_STEP203, ///< \ru STEP прикладной протокол 203 ( Проектирование с управляемой конфигурацией ). \en STEP applied protocol STEP 203 (Configuration controlled design). - ief_STEP214, ///< \ru STEP прикладной протокол 214 ( Проектирование автомобилей ). \en STEP applied protocol STEP 214 (Automotive design). - ief_STEP242, ///< \ru STEP прикладной протокол 242 ( Проектирование автомобилей ). \en STEP applied protocol STEP 242 (Automotive design). -}; - - -#define EXPORT_DEFAULT -1 ///< \ru По умолчанию для заданного формата. \en Default for specified format. -#define EXPORT_STEP_203 203 ///< \ru STEP прикладной протокол 203 ( Проектирование с управляемой конфигурацией ). \en STEP applied protocol STEP 203 (Configuration controlled design). -#define EXPORT_STEP_214 214 ///< \ru STEP прикладной протокол 214 ( Проектирование автомобилей ). \en STEP applied protocol STEP 214 (Automotive design). -#define EXPORT_STEP_242 242 ///< \ru STEP прикладной протокол 242. \en STEP applied protocol STEP 242. -#define EXPORT_ACIS_4 4 ///< \ru ACIS версия 4.0. \en ACIS version 4.0. -#define EXPORT_ACIS_7 7 ///< \ru ACIS версия 7.0 (по умолчанию). \en ACIS version 7.0 (default). -#define EXPORT_ACIS_10 10 ///< \ru ACIS версия 10.0. \en ACIS version 10.0. - - -//------------------------------------------------------------------------------ -/** \brief \ru Индексы строк, передаваемых через конвертер. -\en Indices of strings, transmitted through converter.\~ -\ingroup Data_Interface -*/ -// --- -enum MbeConverterStrings { - cvs_BEGIN = 0, ///< \ru Для удобства перебора. \en For lookup only. - cvs_STEPAuthor, ///< \ru Автор для конвертера STEP. \en Author of the document, in STEP. - cvs_STEPOrganization, ///< \ru Организация для конвертера STEP. \en The organization, the author is related with, in STEP. - cvs_STEPComment, ///< \ru Комментарий файла формата STEP. \en Annotation, in STEP. - cvs_CAD_NAME, ///< \ru Название САПР при экспорте. \en CAD Name for export. - cvs_END ///< \ru Для удобства перебора. \en For lookup only. -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Индексы, управляющие разрешением на чтение или запись объектов. -\en Indeces, which filter imported/exported objects or properties.\~ -\ingroup Data_Interface -*/ -// --- -enum MbeIOPermiss { - iop_rSolid = 0, ///< \ru Разрешение на чтение твёрдых тел. \en Import solid solids. - iop_wSolid, ///< \ru Разрешение на запись твёрдых тел. \en Export solid solids. - iop_rSurface, ///< \ru Разрешение на чтение поверхностей. \en Import surfaces. - iop_wSurface, ///< \ru Разрешение на запись поверхностей. \en Export surfaces. - iop_rCurve, ///< \ru Разрешение на чтение кривых. \en Import curves. - iop_wCurve, ///< \ru Разрешение на запись кривых. \en Export curves. - iop_rDrafts, ///< \ru Разрешение на чтение эскизов (не применяется). \en Import drafts (ignored). - iop_wDrafts, ///< \ru Разрешение на запись эскизов. \en Export drafts. - iop_rInvisible, ///< \ru Разрешение на чтение невидимых объектов (не применяется). \en Import invisible objects (not applied). - iop_wInvisible, ///< \ru Разрешение на запись невидимых объектов. \en Export invisible objects. - iop_rPoint, ///< \ru Разрешение на чтение точек. \en Import points. - iop_wPoint, ///< \ru Разрешение на запись точек. \en Export points. - iop_rDocInfo, ///< \ru Разрешение на чтение информации о документе (автор, организация, комментарии). \en Import components info ( author, organization, description ). - iop_wDocInfo, ///< \ru Разрешение на запись информации о документе (автор, организация, комментарии). \en Export components info ( author, organization, description ). - iop_rTextDescription, ///< \ru Разрешение на чтение технических требований. \en Import technical requirements. - iop_wTextDescription, ///< \ru Разрешение на запись технических требований. \en Export technical requirements. - iop_rDimensions, ///< \ru Разрешение на чтение размеров. \en Import dimensions. - iop_wDimensions, ///< \ru Разрешение на запись размеров. \en Export dimensions. - iop_rAttributes, ///< \ru Разрешение на чтение атрибутов. \en Import attributes. - iop_wAttributes, ///< \ru Разрешение на запись атрибутов. \en Export attributes. - iop_rBRep, ///< \ru Разрешение на чтение форм изделий в граничном представлении (только в JT). \en Import shapes in boundary representation (JT only). - iop_wBRep, ///< \ru Разрешение на запись форм изделий в граничном представлении (только в JT). \en Export shapes in boundary representation (JT only). - iop_rPolygonal, ///< \ru Разрешение на чтение полигональных форм изделий. \en Import polygonal shapes. - iop_wPolygonal, ///< \ru Разрешение на запись полигональных форм изделий. \en Export polygonal shapes. - iop_rLOD0, ///< \ru Разрешение на чтение полигональных форм изделий уровня детализации 0. \en Import polygonal shapes of the 0-th LOD. - iop_wLOD0, ///< \ru Разрешение на запись полигональных форм изделий уровня детализации 0. \en Export polygonal shapes of the 0-th LOD. - iop_rAssociated, ///< \ru Разрешение на чтение ассоциированной геометрии (резьбы и др). \en Import associated geometry (threads etc). - iop_wAssociated, ///< \ru Разрешение на запись ассоциированной геометрии (резьбы и др). \en Export associated geometry (threads etc). - iop_rDensity, ///< \ru Разрешение на чтение единиц плотности. \en Import density units. - iop_wDensity, ///< \ru Разрешение на запись единиц плотности. \en Export density units. - iop_rValidationProperties, ///< \ru Разрешение на чтение контрольных параметров - объёма, площади поверхности, центра масс. \en Import validation properties - volume, surface area, centroid. - iop_wValidationProperties, ///< \ru Разрешение на запись контрольных параметров - объёма, площади поверхности, центра масс. \en Export validation properties - volume, surface area, centroid. - iop_rStyle, ///< \ru Разрешение на чтение элементов оформления (цвет, начертание, и т.п.). \en Import appearance. - iop_wStyle, ///< \ru Разрешение на запись элементов оформления (цвет, начертание, и т.п.). \en Export appearance. - iop_END -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Тип сообщения об ошибке при выводе в лог. -\en Type of a log message.\~ -\ingroup Data_Exchange -*/ -// --- -enum eMsgType { - emt_ErrorNoId,///< \ru Ошибка формата. Значение id игнорируется, выводится только текст. \en Error not related with a certain record. The id field is ignored. - emt_TextOnly, ///< \ru Значение id игнорируется, выводится только текст. \en Used to type message only. The id field is ignored. - emt_Info, ///< \ru Рабочая информация. \en Info. - emt_Warning, ///< \ru Предупреждение. \en Warning. - emt_Error ///< \ru Ошибка формата или неустранимая ошибка преобразования. \en Format mismatch or fatal converting error. -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Код подробного сообщения об ошибке при выводе в лог. -\en The key of a detailed log message.\~ -\ingroup Data_Interface -*/ -// --- -enum eMsgDetail { - emd_Title, ///< \ru Заголовок файла. \en File header. - emd_HEADError, ///< \ru Тип сообщения - ошибка. \en Error. - emd_HEADWarinig, ///< \ru Тип сообщения - Предупреждение. \en Warning. - emd_HEADInfo, ///< \ru Тип сообщения - Информация. \en Info. - emd_HEADDefaultMsg, ///< \ru Тип сообщения - Сообщение. \en Message. - - emd_STOPFileOpenError, ///< \ru Ошибка открытия файла. \en Cannot open file. - emd_STOPFileOpenErrorOrEmpty, ///< \ru Ошибка открытия файла или файл пуст. \en Cannot open file or file is empty. - emd_STOPHeaderReadError, ///< \ru Не удалось прочитать заголовок файла. \en Cannot read file header. - emd_STOPNoOrBadData, ///< \ru Файл не содержит данных или их не удалось распознать. \en File body does not exist or incorrect. - emd_STOPIncorrectStructure, ///< \ru Неверная структура файла. \en Incorrect file structure. - emd_STOPAddressConflict, ///< \ru Данный адрес имеют два различных объекта. \en Two or more entities have the same id. - - emd_ErrorNoRootObject, ///< \ru Не найден корневой объект. \en Root object not found. - emd_ErrorSyntaxIncorrectFormFloat, ///< \ru Невозможно прочитать действительную константу. \en Error reading floating-point number. - emd_ErrorEmptyLoop, ///< \ru Цикл грани пуст. \en Face has an empty loop. - emd_ErrorEmptyQueriesList, ///< \ru Список запросов пуст. \en - emd_ErrorEmptyObjectsList, ///< \ru Список объектов пуст. \en List of objects is empty. - emd_ErrorEmptyGeomObjectsList, ///< \ru Список геометрических объектов пуст. \en List of geometric objects is empty. - emd_ErrorEmptyShellsList, ///< \ru Список оболочек пуст. \en List of shells is empty. - emd_ErrorEmptyListOfWrieframes, ///< \ru Список каркасов пуст. \en List of frames is empty. - emd_ErrorEmptyCurveCompositesList, ///< \ru Список компонент составной кривой пуст. \en Composite curve has an empty list of composites. - emd_ErrorEmptyBoundCurvesList, ///< \ru Список граничных кривых пуст. \en List of boundary curves is empty. - emd_ErrorEmptyEdgeList, ///< \ru Список рёбер пуст. \en List of edges is empty. - emd_ErrorEmptyFacesList, ///< \ru Список граней пуст. \en List of faces is empty. - emd_ErrorEmptyReferencesList, ///< \ru Список ссылок пуст. \en List of references is empty. - emd_ErrorEmptyOrMore2ReferencesList,///< \ru Список ссылок пуст или содержит более 2 элементов. \en List of references is empty or contains more than 2 items. - emd_ErrorUndefinedFaceSurfaceRef, ///< \ru Ссылка на базовую поверхность грани не определена. \en Invalid reference to base surface. - emd_ErrorUndefinedBaseCurveRef, ///< \ru Ссылка на базовую кривую не определена. \en Invalid reference to base curve. - emd_ErrorRadiusTooCloseToZero, ///< \ru Радиус слишком мал. \en Too small radius. - emd_ErrorRadiusValueNegative, ///< \ru Отрицательное значение радиуса. \en Negative value of radius. - emd_ErrorEllipseAxisTooCloseToZero, ///< \ru Длина полуоси эллипса слишком мала. \en Ellipse axis is too short. - emd_ErrorEllipseAxisNegative, ///< \ru Отрицательная длина полуоси эллипса. \en Ellipse axis length is negative. - emd_ErrorNegativeDegree, ///< \ru Отрицательный порядок сплайна. \en Negative spline order. - emd_ErrorNegativeUDegree, ///< \ru Отрицательный порядок сплайновой поверхности по U. \en Spline surface order along U is negative. - emd_ErrorNegativeVDegree, ///< \ru Отрицательный порядок сплайновой поверхности по V. \en Spline surface order along V is negative. - emd_ErrorDegreeFixImpossible, ///< \ru Невозможно исправить порядок сплайна. \en Cannot fix spline order. - emd_ErrorPolylinePointListLess2, ///< \ru Список точек ломаной содержит менее 2 элементов. \en Polyline contains less then 2 points. - emd_ErrorPointListLess2, ///< \ru Список точек содержит менее 2 элементов. \en List of points contains less then 2 points. - emd_ErrorKnotsListLess2, ///< \ru Список узлов содержит менее 2 элементов. \en List of knots contains less then 2 values. - emd_ErrorWeightsListLess2, ///< \ru Список весов содержит менее 2 элементов. \en List of weights contains less then 2 values. - emd_ErrorUPointListLess2, ///< \ru Список точек по U содержит менее 2 элементов. \en List of points along U contains less then 2 points. - emd_ErrorUKnotsListLess2, ///< \ru Список узлов по U содержит менее 2 элементов. \en List of knots along U contains less then 2 values. - emd_ErrorUWeightsListLess2, ///< \ru Список весов по U содержит менее 2 элементов. \en List of weights along U contains less then 2 values. - emd_ErrorVPointListLess2, ///< \ru Список точек по V содержит менее 2 элементов. \en List of points along V contains less then 2 points. - emd_ErrorVKnotsListLess2, ///< \ru Список узлов по V содержит менее 2 элементов. \en List of knots along V contains less then 2 values. - emd_ErrorVWeightsListLess2, ///< \ru Список весов по V содержит менее 2 элементов. \en List of weights along V contains less then 2 values. - emd_ErrorListsSizeMismatch, ///< \ru Размеры списков не согласуются. \en Lists size mismatch. - emd_ErrorKnotsWeightsListsOrderMismatch, ///< \ru Размеры списков узлов и весов не согласуются с порядком сплайна. \en Sizes of knots and weights lists do not agree with the spline order. - emd_ErrorKnotsWeightsListsSizeMismatch, ///< \ru Размеры списков узлов и весов не согласуются. \en Size of knots list does not agree with the size of the list of weights. - emd_ErrorUKnotsWeightsListsSizeMismatch, ///< \ru Размеры списков узлов и весов по U не согласуются. \en Sizes of knots and weights lists along U do not agree. - emd_ErrorVKnotsWeightsListsSizeMismatch, ///< \ru Размеры списков узлов и весов по V не согласуются. \en Sizes of knots and weights lists along V do not agree. - emd_ErrorSplineCurveNotCreatedUndefinedKnotsVector, ///< \ru Сплайновая кривая не создана - не определёны узлы. \en Cannot create spline, because knots are not defined. - emd_ErrorSplineSurfaceNotCreatedUndefinedKnotsVectors, ///< \ru Сплайновая поверхность не создана - не определёны узлы. \en Cannot create spline surface, because knots are not defined. - emd_ErrorInCorrectSplineSurfaceData, ///< \ru Неверно заданы параметры NURBS поверхности. \en Spline surface parameters are not valid. - - emd_WarningNoSectionTerminator, ///< \ru Маркер завершения раздела не обнаружен. \en Section terminator not found. - emd_WarningSyntaxMultipleDotInFloat, ///< \ru Повторяющаяся точка в действительном числе. \en Too many dots in a floating-point number. - emd_WarningSyntaxMultipleEInFloat, ///< \ru Повторяющаяся E в действительном числе. \en Too many E signs in a floating-point number. - emd_WarningLoopNotClosed, ///< \ru Цикл не замкнут. \en Loop is not closed. - emd_WarningContourNotClosed, ///< \ru Контур не замкнут. \en contour is not closed. - emd_WarningUndefinedRef, ///< \ru Ссылка не определена. \en Invalid reference. - emd_WarningToroidalSurfaceDegenerated, ///< \ru Тороидальная поверхность вырождена. \en Toroidal surface is degenerate. - emd_WarningUndefinedBasisCurve, ///< \ru Не определена базовая кривая. \en Base curve not defined. - emd_WarningUndefinedSweptCurve, ///< \ru Не определена образующая кривая. \en Generatrix curve is not defined. - emd_WarningUndefinedExtrusionDirection, ///< \ru Не определено направление выдавливания. \en Extrusion direction is not defined. - emd_WarningUndefinedAxis, ///< \ru Не определена ось. \en Axis is not defined. - emd_WarningUndefinedAxisOfRevolution, ///< \ru Не определена ось вращения. \en Rotation axis is not defined. - emd_WarningUndefinedBasisSurface, ///< \ru Не определена базовая поверхность. \en Base surface is not defined. - emd_WarningUndefinedRepresentation, ///< \ru Не определено представление. \en Representation is not defined. - emd_WarningUndefinedTransformationOperator, ///< \ru Не определён оператор преобразования. \en Transformation is not defined. - emd_WarningUndefinedObjectTransformBy, ///< \ru Не определён объект, по которому ведётся преобразование. \en Basic object of transformation is not defined. - emd_WarningUndefinedObjectToTransform, ///< \ru Не определён преобразуемый объект. \en No object to transform is defined. - emd_WarningUndefinedCurve, ///< \ru Не определена кривая. \en Curve is not defined. - emd_WarningUndefinedCompositeSegment, ///< \ru Не определён сегмент составной кривой. \en Composite curve segment is not defined. - emd_WarningUndefinedDirection, ///< \ru Не определено направление. \en Direction is not defined. - emd_WarningUndefinedAxisDirection, ///< \ru Не определено направление оси. \en Axis direction is not defined. - emd_WarningDegeneratedItemWasSkipped, ///< \ru Проигнорирован (пропущен) вырожденный объект. \en Degenerate object was missed. - emd_WarningFloatParceFailureDefaultUsed, ///< \ru Ошибка разпознавания числа с плавающей точкой, подставлено значение по умолчанию. \en Floating point value couldn't be parced; default value was used. - emd_WarningSameShapeEdgeTwiceInLoop, ///< \ru В цикле дважды встречается одинаковое ребро. \en Edge based on same curves twice enters a loop. - emd_WarningIncorrectFaceWasNotAddedToShell, ///< \ru Некорректная грань не была добавлена в оболочку. \en Incorrect face was not added to shell. - emd_WarningBoundsNotConnectedWithSeams, ///< \ru Границы замкнутой грани не стыкуются со швами. \en Bounds of periodic face not connected with seams. - emd_WarningIntCurveWasReplacedBySegment, ///< \ru Кривая пересечения была заменена отрезком. \en Intersection curve was replaced by segment. - - emd_MessageWeightsFilled, ///< \ru Веса заданы. \en Weights are set. - - emd_ErrorSTEPEdgeCurveFlagTSingleRedefinition, ///< \ru При создании ребра в конвертере STEP дважды указана грань с флагом .T.. \en Double .T. face inclusion in STEP. - emd_ErrorSTEPEdgeCurveFlagFSingleRedefinition, ///< \ru При создании ребра в конвертере STEP дважды указана грань с флагом .F.. \en Double .F. face inclusion in STEP. - emd_ErrorSTEPEdgeCurveFlagTMultipleRedefinition, ///< \ru При создании ребра в конвертере STEP более чем дважды указана грань с флагом .T.. \en Multiple .T. face inclusion in STEP. - emd_ErrorSTEPEdgeCurveFlagFMultipleRedefinition, ///< \ru При создании ребра в конвертере STEP более чем дважды указана грань с флагом .F.. \en Multiple .F. face inclusion in STEP. - emd_ErrorSTEPUndefinedFaceGeometry, ///< \ru Не определена геометрия грани в конвертере STEP. \en Face geometry is not defined in STEP. - emd_ErrorSTEPSyntaxMultipleDotInEnum, ///< \ru Синтаксическая ошибка в файле формата STEP - в перечислении символ "." встречается более 1 раза подряд. \en Too many dots in a enumeration record in STEP. - emd_WarningSTEPPointCorrection, ///< \ru Скорректированы координаты точки. \en Point location corrected. ( by BUG_73871 ) - emd_WarningSTEPEdgeCurveByVertices, ///< \ru Кривая ребра скорректирована с учётом координат вершин. \en Edge curve corrected in accordance with vertices. ( by BUG_73871 ) - emd_MessageSTEPFlagChangedToF, ///< \ru Произведена замена флага на .F.. \en Flag was set as .F. in STEP. - emd_MessageSTEPFlagChangedToT, ///< \ru Произведена замена флага на .T.. \en Flag was set as .T. in STEP. - emd_WarningBooleanUndefined, ///< \ru Булево значение не определено. \en Boolean value not defined. - - emd_WarningACISUnsupportedInterpoleCurveType, ///< \ru Данный подтип ACIS интерполяционной кривой не поддерживается. \en Interpolation curve type is not supported by SAT converter. - emd_WarningACISUnsupportedParametricCurveType, ///< \ru Данный подтип ACIS параметрической кривой не поддерживается. \en Parametric curve type is not supported by SAT converter. - emd_ErrorACISUnsupportedVersion, ///< \ru Данная версия ACIS NT не поддерживается. \en Th version of file is not supported by SAT converter. - emd_WarningACISCannotImportEntityId, ///< \ru Не удалось импортировать объект с данным Id. \en Cannot import this object by SAT converter. - emd_WarningACISIncorrectIntAttribute, ///< \ru Некорректный целочисленный атрибут. \en Incorrect integer attribute. - emd_WarningVRMLGridDuplicatesInMeshes, ///< \ru Присутствуют дубликаты объектов в сетках. \en There are grid duplicates in meshes. - emd_WarningACISLawIntCurveIsNotCreated, ///< \ru Кривая по закону не создана. \en Law intersection curve is not created. - - emd_ErrorIGESIncorrectExternalReference, ///< \ru Неверное имя внешней ссылки. \en Invalid external reference in IGES. - - emd_ErrorSTLTooManyTrianglesForBinary, ///< \ru Триангуляция исходной модели содержит больше треугольников, чем допустимо стандартом ( не выражается 32-битным беззнаковым числом ) ( by BUG_71422 ). \en Too many triangles (not represented by unsigned 32-bit number) for export to binary STL. - - emd_ErrorXTUnsupportedVersion, ///< \ru Данная версия X_T не поддерживается. \en Th version of file is not supported by X_T converter. - - emd_ErrorJTUnsupportedVersion ///< \ru Данная версия JT не поддерживается. \en Th version of file is not supported by JT converter. -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Интерфейс генератора однострочного идентификатора компонента. - \en Interface of component's identifier generator. \~ - \details \ru Предназначен для для экспорта в форматы, в которых для идентификации компонента предусмотрено одно строковое значение. - \en Demanded for export to formats having one string field for product inetifier. \~ -\ingroup Exchange_Interface -*/ -struct IProductIdMaker : public MbRefItem -{ - virtual c3d::string_t operator()( const MbProductInfo& ) const = 0; -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Интерфейс свойств конвертера. -\en Interface of converter's properties. \~ -\details \ru Интерфейс свойств конвертера реализует выдачу имени документа и других сведений о нём, таких как автор, -и управление режимами работы - сшивкой поверхностей с возможностью создания твёрдых -тел, фильтрацией объектов, формирование журнала трансляции. -\en Interface of converter's properties realizes getting the document's name and other information about it, such as the author, -and management of modes of operations - stitching of surfaces with possibility of solids creation, -objects filtration, generation of translation journal. \~ -\ingroup Exchange_Interface -*/ -class CONV_CLASS IConvertorProperty3D { -public : - virtual ~IConvertorProperty3D() {} - -public: - /// \ru Получить имя документа. \en Get document's name. - virtual const std::string GetDocumentName () const = 0; //{ return std::string( GetDocName().get_str() ); }; - /// \ru Получить имя файла для конвертирования. \en Get file name for converting. - virtual const c3d::path_string FullFilePath () const = 0 ;//{ return c3d::path_string( GetFileName().c_str() ); }; - /// \ru Является ли файл текстовым. \en Whether the file is a text file. - virtual bool IsFileAscii () const = 0; - /// \ru Получить версию формата при экспорте. \en Get the version of format for export. - virtual long int GetFormatVersion () const { return EXPORT_DEFAULT; }; - /// \ru Задать формат для экспорта \en Set format for export - DEPRECATE_DECLARE virtual MbeImpExpFormat GetFormat () const { return ief_STEP203; } - /// \ru Следует ли экспортировать только поверхности ( введено для работы конвертера IGES ). \en Whether to export only surfaces (introduced for work with converter IGES ). - virtual bool IsOutOnlySurfaces() const = 0; - /// \ru Является ли экспортируемый документ сборкой. \en Whether the document for export is an assembly. - virtual bool IsAssembling () const = 0; - /// \ru Получить значение разрешения на импорт экспорт объектов определенного типа. \en Get the value of permission for import-export of objects of a certain type. - virtual bool GetIoPermission( MbeIOPermiss nPermission ) const = 0; - /// \ru Получить значения разрешений на импорт экспорт объектов определенных типов. \en Get values of permission for import-export of objects of certain types. - virtual void GetIoPermissions( std::vector& ioPermissions ) const = 0; - /// \ru Установить разрешение на импорт экспорт объектов определенного типа. \en Set permission for import-export of objects of a certain type. - virtual void SetIoPermission( MbeIOPermiss nPermission, bool set ) = 0; - /// \ru Получить значение специфичной строки для конвертера. \en Get the value of a certain string for the converter. - virtual bool GetPropertyString ( MbeConverterStrings nString, std::string & propertyString ) const = 0; - /// \ru Установить значение специфичной строки для конвертера. \en Set the value of a certain string for the converter. - virtual void SetPropertyString ( MbeConverterStrings nString, const std::string & propertyString ) = 0; - /// \ru Представление текста в аннотационных объектах. \en Text representation in annotation objects. - virtual eTextForm GetAnnotationTextRepresentation () const { return exf_TextOnly; } - /// \ru Следует ли компоненты экспортировать в разные файлы (если позволяет формат). \en Export components into separate files ( if provided in format). - virtual bool ExportComponentsSeparately() const { return false; } - /// \ru Получить ЛСК, относительно которой позиционирована модель. \en Get the location, the model is placed in. - virtual MbPlacement3D GetOriginLocation() const = 0; - /// \ru Заменять ли принудительно СК компонент на правые. \en Replace components' placements to right-oriented. - virtual bool ReplaceLocationsToRight() const = 0; - /** \brief \ru Сшивать ли поверхности автоматически. - \en If surfaces should be stitched automatically. \~ - \return \ru true - Сшивать поверхности автоматически, false - Спросить пользователя, сшивать ли поверхности. - \en true - Stitch surfaces automatically, false - Ask user first time. \~ - \param[out] stitchPrecision - \ru Точность сшивки. - \en Stitch precision. \~ - */ - virtual bool EnableAutoStitch( double& /*stitchPrecision*/ ) const = 0; - - /** \brief \ru Получить множитель единиц длины по отношению к миллиметру. - \en Get the factor of the length units to millimeters. \~ - \details \ru При импорте, если единицы измерения не заданы явно с помощью средств, предоставляемых обменным форматом, - все размеры (координаты точек, радиусы) умножаются на возвращаемое значение. При экспорте либо с помощью - средств, предоставляемых обменным форматом, задаются единицы измерения, либо все размеры модели (координаты - точек, радиусы) умножаются на возвращаемое значение. - \en During the import all spatial objects (coordinate values, radiuses) are multiplied by the returned value, - unless the scale factor comes from the exchange file. During the export the exchange format facilities are - used to specify the length units or all spatial objects (coordinate values, radiuses) are multiplied by the - returned value. \~ - */ - virtual double LengthUnitsFactor() const { return LENGTH_UNIT_MM; } - - - /** \brief \ru Получить дополнительный множитель единиц длины по отношению к миллиметру в модели приложения. - \en Get addifional factor of the length units to millimeters in the application model. \~ - \details \ru При импорте из всех форматов за исключением JT, если единицы измерения, в том числе и заданные - явно с помощью средств, предоставляемых обменным форматом, все размеры (координаты точек, радиусы) умножаются - на возвращаемое значение. При экспорте либо с помощью средств, предоставляемых обменным форматом, задаются - единицы измерения, либо все размеры модели (координаты точек, радиусы) умножаются на возвращаемое значение. - \en During the import from all formats except for JT all spatial objects (coordinate values, radiuses) are - multiplied by the returned value, even if the scale factor comes from the exchange file. During the export the - exchange format facilities are used to specify the length units or all spatial objects (coordinate values, - radiuses) are multiplied by the returned value. \~ - */ - virtual double AppLengthUnitsFactor() const { return LENGTH_UNIT_MM; } - - /** \brief \ru Сделать запись в журнал конвертирования. - \en Make a record in the converter report. \~ - \param[in] id - \ru Идентификатор элемента внутри файла стороннего формата. - \en Identifier of an element inside the file of a foreign format. \~ - \param[in] msgType - \ru Тип сообщения. - \en Message type. \~ - \param[in] msgText - \ru Код сообщения. - \en Message code. \~ - */ - virtual void LogReport( ptrdiff_t id, eMsgType msgType, eMsgDetail msgText ) = 0; - - // /** \brief \ru Следует ли показывать сообщения и диалоги пользователю. \en Whether to show messages and dialog to the user. \~ - // \details \ru Обеспечивает работу через API. \en Provide possibility for work via API. \~ - // \return \ru true - обычная работа, false - через API. \en true - ordinary work, false - via API. \~ - // */ - virtual bool CanShowMessages() const = 0; - /// \ru Дать данные вычисления триангуляции (для конвертера JT, STL и VRML). \en Get data for step calculation during triangulation (for JT, STL, VRML only). - virtual MbStepData TesselationParameters() const { return MbStepData(); } - /// \ru Дать данные вычисления триангуляции уровня детализации (для конвертера JT). \en Get data for step calculation during triangulation of LOD0 (for JTonly). - virtual MbStepData LOD0TesselationParameters() const { return TesselationParameters(); } - /// \ru Флаг сохранения совпадающих точек швов. (для конвертера STL и VRML). \en Whether to keep coincident points of seams (for STL, VRML only). - virtual bool DualSeams() const { return true; } - /// \ru Флаг сохранения совпадающих точек швов. (для конвертера STL и VRML). \en Whether to keep coincident points of seams (for STL, VRML only). - virtual void DualSeams( bool ) {} - /// \ru Выполнять ли слияние подобных граней. \en Whether to join similar faces. - virtual bool JoinSimilarFaces() const { return true; } - /// \ru Добавлять ли удаленные грани в качестве оболочек. \en Whether to add removed faces as shells. - virtual bool AddRemovedFacesAsShells() const { return false; } - /// \ru Получить генератор однострочного идентификтора изделия. \en Get generator of one-line product identifier. - virtual SPtr ProductIdentifierGenerator() const { return SPtr(); } - - /// \ru Проводить ли аудит траснляции. \en Whether to audit the translation. - virtual bool TotalAudit() const { return false; } - /// \ru Следует ли формировать атрибут на основе идентификатора элемнта в файле. \en Whether to attatch the element's id in file as attribute. - virtual bool AttatchIdAttributes() const { return true; } - -}; // IConvertorProperty3D - - -//------------------------------------------------------------------------------ -/** \brief \ru Реализация генератора однострочного идентификатора компонента. - \en Implementation of component's identifier generator. \~ - \details \ru Реализация по умолчанию предполагает передачу наименования компонента. - \en Default implementatio implies export of component's name. \~ -\ingroup Exchange_Interface -*/ -struct NameProductIdMaker : public IProductIdMaker -{ - virtual c3d::string_t operator()( const MbProductInfo& ) const; -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Предопределённая реализация интерфейса свойств конвертера. - \en Pre-defined implementation of converter's properties. \~ -\ingroup Exchange_Interface -*/ -class CONV_CLASS ConvConvertorProperty3D : public IConvertorProperty3D { -public: - std::string docName; ///< \ru Имя документа. \en Document name. - c3d::path_string fileName; ///< \ru Имя файла. \en File name. - bool fileASCII; ///< \ru Экспортировать ли в текстовый файл (если формат поддерживает двоичный). \en Export to text file (if format supports binary one). - long int formatVersion; /// \ru Версия формата при экспорте. \en The version of format for export. - bool exportIGESTopology; ///< \ru Экспортировать ли топологию в IGES. \en Export topology items into IGES. - std::vector ioPermissions; ///< \ru Фильтр объектов по типам. \en Type objects filter. - std::map propertyStrings; ///< \ru Особые значения сведений о документе. \en Specific values of documents properties. - eTextForm annotTextReprSTEP; ///< \ru Представление текста элементов аннотации. \en Text representation in annotation items. - MbPlacement3D originLocation; ///< \ru ЛСК документа. \en Own placement of the document. - bool replaceLocationsToRight; ///< \ru Следует ли принудительно преобразовывать ЛСК объектов к правым (для форматов, допускающих левые). \en Force replacement of locations to right ones. - bool enableAutostitch; ///< \ru Сшивать ли поверхности автоматически. \en Automatically stitch surfaces into shells. - double autostitchPrecision; ///< \ru Точность сшивки. \en Stitch precision. - bool showMessages; ///< \ru Отображать ли сообщения. \en Invoke messages show. - MbStepData tesseleationStepData; ///< \ru Параметры триангуляции при экспорте в STL и VRML. \en Tessellation parameters for export into STL and VRML. - MbStepData LOD0StepData; ///< \ru Параметры триангуляции при экспорте в JT. \en Tessellation parameters for export into JT. - bool dualSeams; ///< \ru Признак сдваивания швов при экспорте в STL и VRML. \en Make dual seams when export into STL and VRML. - bool joinSimilarFaces; ///< \ru Выполнять ли слияние подобных граней. \en Whether to join similar faces. - bool addRemovedFacesAsShells; ///< \ru Добавлять ли удаленные грани в качестве отдельных оболочек. \en Whether to add removed faces as shells. - double lengthUnitsFactor; ///< \ru Единицы длины модели. \en Length units of the model. - double appUnitsFactor; ///< \ru Единицы длины модели пользовательского приложения. \en Length units of the model used in user application. - bool attatchIdAttributes; ///< \ru Следует ли формировать атрибут на основе идентификатора элемнта в файле. \en Whether to attatch the element's id in file as attribute. - bool auditEnabled; - - /// \ru Сведения о сообщениях конвертера. \en Converter message data. - struct LogRecord { - ptrdiff_t id; ///< \ru Идентификатор записи. \en Record id. - eMsgType msgType; ///< \ru Тип сообщения. \en Message type. - eMsgDetail msgText; ///< \ru Код сообщения. \en Message code. - }; - - std::vector< LogRecord > logRecords; ///< \ru Сообщения конвертера. \en Converter messages. - -public: - - ConvConvertorProperty3D(); ///< \ru Конструктор. \en Constructor. - - /// \ru Получить имя документа. \en Get document's name. - virtual const std::string GetDocumentName () const { return docName; }; - /// \ru Получить имя файла для конвертирования. \en Get file name for converting. - virtual const c3d::path_string FullFilePath () const { return fileName; }; - /// \ru Является ли файл текстовым. \en Whether the file is a text file. - virtual bool IsFileAscii () const; - /// \ru Получить версию формата при экспорте. \en Get the version of format for export. - virtual long int GetFormatVersion () const; - /// \ru Следует ли экспортировать только поверхности ( введено для работы конвертера IGES ). \en Whether to export only surfaces (introduced for work with converter IGES ). - virtual bool IsOutOnlySurfaces() const; - /// \ru Является ли экспортируемый документ сборкой. \en Whether the document for export is an assembly. - virtual bool IsAssembling () const { return true; }; - /// \ru Получить значение разрешения на импорт экспорт объектов определенного типа. \en Get the value of permission for import-export of objects of a certain type. - virtual bool GetIoPermission( MbeIOPermiss nPermission ) const; - /// \ru Получить значения разрешений на импорт экспорт объектов определенных типов. \en Get values of permission for import-export of objects of certain types. - virtual void GetIoPermissions( std::vector& ioPermissions ) const; - /// \ru Установить разрешение на импорт экспорт объектов определенного типа. \en Set permission for import-export of objects of a certain type. - virtual void SetIoPermission( MbeIOPermiss nPermission, bool isSet ); - /// \ru Получить значение специфичной строки для конвертера. \en Get the value of a certain string for the converter. - virtual bool GetPropertyString ( MbeConverterStrings nString, std::string & propertyString ) const; - /// \ru Установить значение специфичной строки для конвертера. \en Set the value of a certain string for the converter. - virtual void SetPropertyString ( MbeConverterStrings nString, const std::string & propertyString ); - /// \ru Представление текста в аннотационных объектах. \en Text representation in annotation objects. - virtual eTextForm GetAnnotationTextRepresentation () const; - /// \ru Следует ли компоненты экспортировать в разные файлы (если позволяет формат). \en Export components into separate files ( if provided in format). - virtual bool ExportComponentsSeparately() const; - /// \ru Получить ЛСК, относительно которой позиционирована модель. \en Get the location, the model is placed in. - virtual MbPlacement3D GetOriginLocation() const; - /// \ru Заменять ли принудительно СК компонент на правые. \en Replace components' placements to right-oriented. - virtual bool ReplaceLocationsToRight() const; - /** \brief \ru Сшивать ли поверхности автоматически. - \en If surfaces should be stitched automatically. \~ - \return \ru true - Сшивать поверхности автоматически, false - Спросить пользователя, сшивать ли поверхности. - \en true - Stitch surfaces automatically, false - Ask user first time. \~ - \param[out] stitchPrecision - \ru Точность сшивки. - \en Stitch precision. \~ - */ virtual bool EnableAutoStitch( double& /*stitchPrecision*/ ) const; - - /// \ru Получить множитель единиц длины по отношению к миллиметру. \en Get the factor of the length units to millimeters. - virtual double LengthUnitsFactor() const; - - /** \brief \ru Получить множитель единиц длины по отношению к миллиметру в модели приложения. - \en Get the factor of the length units to millimeters in the application model. \~ - */ - virtual double AppLengthUnitsFactor() const; - - /** \brief \ru Сделать запись в журнал конвертирования. - \en Make a record in the converter report. \~ - \param[in] id - \ru Идентификатор элемента внутри файла стороннего формата. - \en Identifier of an element inside the file of a foreign format. \~ - \param[in] msgType - \ru Тип сообщения. - \en Message type. \~ - \param[in] msgText - \ru Код сообщения. - \en Message code. \~ - */ - virtual void LogReport( ptrdiff_t id, eMsgType msgType, eMsgDetail msgText ); - -// /** \brief \ru Следует ли показывать сообщения и диалоги пользователю. \en Whether to show messages and dialog to the user. \~ -// \details \ru Обеспечивает работу через API. \en Provide possibility for work via API. \~ -// \return \ru true - обычная работа, false - через API. \en true - ordinary work, false - via API. \~ -// */ - virtual bool CanShowMessages() const; - - /// \ru Дать данные вычисления триангуляции (для конвертера STL и VRML). \en Get data for step calculation during triangulation (for STL, VRML only). - virtual MbStepData TesselationParameters() const; - /// \ru Дать данные вычисления триангуляции уровня детализации (для конвертера JT). \en Get data for step calculation during triangulation of LOD0 (for JTonly). - virtual MbStepData LOD0TesselationParameters() const; - /// \ru Получить флаг сохранения совпадающих точек швов. (для конвертера STL и VRML). \en Whether to keep coincident points of seams (for STL, VRML only). - virtual bool DualSeams() const; - /// \ru Задать флаг сохранения совпадающих точек швов. (для конвертера STL и VRML). \en Whether to keep coincident points of seams (for STL, VRML only). - virtual void DualSeams( bool ); - /// \ru Проводить ли аудит траснляции. \en Whether to audit the translation. - virtual bool TotalAudit() const; - /// \ru Следует ли формировать атрибут на основе идентификатора элемнта в файле. \en Whether to attatch the element's id in file as attribute. - virtual bool AttatchIdAttributes() const; - /// \ru Выполнять ли слияние подобных граней. \en Whether to join similar faces. - virtual bool JoinSimilarFaces() const { return joinSimilarFaces; } - /// \ru Добавлять ли удаленные грани в качестве оболочек. \en Whether to add removed faces as shells. - virtual bool AddRemovedFacesAsShells() const { return addRemovedFacesAsShells; } - /// \ru Получить генератор однострочного идентификтора изделия. \en Get generator of one-line product identifier. - virtual SPtr ProductIdentifierGenerator() const { return SPtr( new NameProductIdMaker() ); } - - OBVIOUS_PRIVATE_COPY( ConvConvertorProperty3D ) - -}; // IConvertorProperty3D - - - -#endif // __CONV_MODEL_PROPERTIES_H +//////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Настройки импорта и экспорта. + \en Settings of import and export procedure. \~ + \details \ru Интерфейс настроек и предопределённая реализация ConvConvertorProperty3D. + \en Interface of settings and pre-defined implementation ConvConvertorProperty3D. \~ +*/ +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __CONV_MODEL_PROPERTIES_H +#define __CONV_MODEL_PROPERTIES_H + +#include +#include +#include +#include + +class MbProductInfo; + +//------------------------------------------------------------------------------ +/** \brief \ru Константы единиц измерения. +\en Length units constants.\~ +\ingroup Data_Interface +*/ +// --- +/// \ru Миллиметры. \en Millimeters. +#define LENGTH_UNIT_MM 1.0 +/// \ru Сантиметры. \en Centimeters. +#define LENGTH_UNIT_CM 10.0 +/// \ru Дециметры. \en Decimeters. +#define LENGTH_UNIT_DM 100.0 +/// \ru Метры. \en Meters. +#define LENGTH_UNIT_METER 1000.0 +/// \ru Дюймы. \en Inches. +#define LENGTH_UNIT_INCH 25.4 + + +//------------------------------------------------------------------------------ +/** \brief \ru Прикладной протокол. +\en Applied protocol.\~ +\ingroup Data_Interface +*/ +// --- +enum MbeImpExpFormat { + ief_STEP203, ///< \ru STEP прикладной протокол 203 ( Проектирование с управляемой конфигурацией ). \en STEP applied protocol STEP 203 (Configuration controlled design). + ief_STEP214, ///< \ru STEP прикладной протокол 214 ( Проектирование автомобилей ). \en STEP applied protocol STEP 214 (Automotive design). + ief_STEP242, ///< \ru STEP прикладной протокол 242 ( Проектирование автомобилей ). \en STEP applied protocol STEP 242 (Automotive design). +}; + + +#define EXPORT_DEFAULT -1 ///< \ru По умолчанию для заданного формата. \en Default for specified format. +#define EXPORT_STEP_203 203 ///< \ru STEP прикладной протокол 203 ( Проектирование с управляемой конфигурацией ). \en STEP applied protocol STEP 203 (Configuration controlled design). +#define EXPORT_STEP_214 214 ///< \ru STEP прикладной протокол 214 ( Проектирование автомобилей ). \en STEP applied protocol STEP 214 (Automotive design). +#define EXPORT_STEP_242 242 ///< \ru STEP прикладной протокол 242. \en STEP applied protocol STEP 242. +#define EXPORT_ACIS_4 4 ///< \ru ACIS версия 4.0. \en ACIS version 4.0. +#define EXPORT_ACIS_7 7 ///< \ru ACIS версия 7.0 (по умолчанию). \en ACIS version 7.0 (default). +#define EXPORT_ACIS_10 10 ///< \ru ACIS версия 10.0. \en ACIS version 10.0. + + +//------------------------------------------------------------------------------ +/** \brief \ru Индексы строк, передаваемых через конвертер. +\en Indices of strings, transmitted through converter.\~ +\ingroup Data_Interface +*/ +// --- +enum MbeConverterStrings { + cvs_BEGIN = 0, ///< \ru Для удобства перебора. \en For lookup only. + cvs_STEPAuthor, ///< \ru Автор для конвертера STEP. \en Author of the document, in STEP. + cvs_STEPOrganization, ///< \ru Организация для конвертера STEP. \en The organization, the author is related with, in STEP. + cvs_STEPComment, ///< \ru Комментарий файла формата STEP. \en Annotation, in STEP. + cvs_CAD_NAME, ///< \ru Название САПР при экспорте. \en CAD Name for export. + cvs_END ///< \ru Для удобства перебора. \en For lookup only. +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Индексы, управляющие разрешением на чтение или запись объектов. +\en Indeces, which filter imported/exported objects or properties.\~ +\ingroup Data_Interface +*/ +// --- +enum MbeIOPermiss { + iop_rSolid = 0, ///< \ru Разрешение на чтение твёрдых тел. \en Import solid solids. + iop_wSolid, ///< \ru Разрешение на запись твёрдых тел. \en Export solid solids. + iop_rSurface, ///< \ru Разрешение на чтение поверхностей. \en Import surfaces. + iop_wSurface, ///< \ru Разрешение на запись поверхностей. \en Export surfaces. + iop_rCurve, ///< \ru Разрешение на чтение кривых. \en Import curves. + iop_wCurve, ///< \ru Разрешение на запись кривых. \en Export curves. + iop_rDrafts, ///< \ru Разрешение на чтение эскизов (не применяется). \en Import drafts (ignored). + iop_wDrafts, ///< \ru Разрешение на запись эскизов. \en Export drafts. + iop_rInvisible, ///< \ru Разрешение на чтение невидимых объектов (не применяется). \en Import invisible objects (not applied). + iop_wInvisible, ///< \ru Разрешение на запись невидимых объектов. \en Export invisible objects. + iop_rPoint, ///< \ru Разрешение на чтение точек. \en Import points. + iop_wPoint, ///< \ru Разрешение на запись точек. \en Export points. + iop_rDocInfo, ///< \ru Разрешение на чтение информации о документе (автор, организация, комментарии). \en Import components info ( author, organization, description ). + iop_wDocInfo, ///< \ru Разрешение на запись информации о документе (автор, организация, комментарии). \en Export components info ( author, organization, description ). + iop_rTextDescription, ///< \ru Разрешение на чтение технических требований. \en Import technical requirements. + iop_wTextDescription, ///< \ru Разрешение на запись технических требований. \en Export technical requirements. + iop_rDimensions, ///< \ru Разрешение на чтение размеров. \en Import dimensions. + iop_wDimensions, ///< \ru Разрешение на запись размеров. \en Export dimensions. + iop_rAttributes, ///< \ru Разрешение на чтение атрибутов. \en Import attributes. + iop_wAttributes, ///< \ru Разрешение на запись атрибутов. \en Export attributes. + iop_rBRep, ///< \ru Разрешение на чтение форм изделий в граничном представлении (только в JT). \en Import shapes in boundary representation (JT only). + iop_wBRep, ///< \ru Разрешение на запись форм изделий в граничном представлении (только в JT). \en Export shapes in boundary representation (JT only). + iop_rPolygonal, ///< \ru Разрешение на чтение полигональных форм изделий. \en Import polygonal shapes. + iop_wPolygonal, ///< \ru Разрешение на запись полигональных форм изделий. \en Export polygonal shapes. + iop_rLOD0, ///< \ru Разрешение на чтение полигональных форм изделий уровня детализации 0. \en Import polygonal shapes of the 0-th LOD. + iop_wLOD0, ///< \ru Разрешение на запись полигональных форм изделий уровня детализации 0. \en Export polygonal shapes of the 0-th LOD. + iop_rAssociated, ///< \ru Разрешение на чтение ассоциированной геометрии (резьбы и др). \en Import associated geometry (threads etc). + iop_wAssociated, ///< \ru Разрешение на запись ассоциированной геометрии (резьбы и др). \en Export associated geometry (threads etc). + iop_rDensity, ///< \ru Разрешение на чтение единиц плотности. \en Import density units. + iop_wDensity, ///< \ru Разрешение на запись единиц плотности. \en Export density units. + iop_rValidationProperties, ///< \ru Разрешение на чтение контрольных параметров - объёма, площади поверхности, центра масс. \en Import validation properties - volume, surface area, centroid. + iop_wValidationProperties, ///< \ru Разрешение на запись контрольных параметров - объёма, площади поверхности, центра масс. \en Export validation properties - volume, surface area, centroid. + iop_rStyle, ///< \ru Разрешение на чтение элементов оформления (цвет, начертание, и т.п.). \en Import appearance. + iop_wStyle, ///< \ru Разрешение на запись элементов оформления (цвет, начертание, и т.п.). \en Export appearance. + iop_END +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Тип сообщения об ошибке при выводе в лог. +\en Type of a log message.\~ +\ingroup Data_Exchange +*/ +// --- +enum eMsgType { + emt_ErrorNoId,///< \ru Ошибка формата. Значение id игнорируется, выводится только текст. \en Error not related with a certain record. The id field is ignored. + emt_TextOnly, ///< \ru Значение id игнорируется, выводится только текст. \en Used to type message only. The id field is ignored. + emt_Info, ///< \ru Рабочая информация. \en Info. + emt_Warning, ///< \ru Предупреждение. \en Warning. + emt_Error ///< \ru Ошибка формата или неустранимая ошибка преобразования. \en Format mismatch or fatal converting error. +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Код подробного сообщения об ошибке при выводе в лог. +\en The key of a detailed log message.\~ +\ingroup Data_Interface +*/ +// --- +enum eMsgDetail { + emd_Title, ///< \ru Заголовок файла. \en File header. + emd_HEADError, ///< \ru Тип сообщения - ошибка. \en Error. + emd_HEADWarinig, ///< \ru Тип сообщения - Предупреждение. \en Warning. + emd_HEADInfo, ///< \ru Тип сообщения - Информация. \en Info. + emd_HEADDefaultMsg, ///< \ru Тип сообщения - Сообщение. \en Message. + + emd_STOPFileOpenError, ///< \ru Ошибка открытия файла. \en Cannot open file. + emd_STOPFileOpenErrorOrEmpty, ///< \ru Ошибка открытия файла или файл пуст. \en Cannot open file or file is empty. + emd_STOPHeaderReadError, ///< \ru Не удалось прочитать заголовок файла. \en Cannot read file header. + emd_STOPNoOrBadData, ///< \ru Файл не содержит данных или их не удалось распознать. \en File body does not exist or incorrect. + emd_STOPIncorrectStructure, ///< \ru Неверная структура файла. \en Incorrect file structure. + emd_STOPAddressConflict, ///< \ru Данный адрес имеют два различных объекта. \en Two or more entities have the same id. + + emd_ErrorNoRootObject, ///< \ru Не найден корневой объект. \en Root object not found. + emd_ErrorSyntaxIncorrectFormFloat, ///< \ru Невозможно прочитать действительную константу. \en Error reading floating-point number. + emd_ErrorEmptyLoop, ///< \ru Цикл грани пуст. \en Face has an empty loop. + emd_ErrorEmptyQueriesList, ///< \ru Список запросов пуст. \en + emd_ErrorEmptyObjectsList, ///< \ru Список объектов пуст. \en List of objects is empty. + emd_ErrorEmptyGeomObjectsList, ///< \ru Список геометрических объектов пуст. \en List of geometric objects is empty. + emd_ErrorEmptyShellsList, ///< \ru Список оболочек пуст. \en List of shells is empty. + emd_ErrorEmptyListOfWrieframes, ///< \ru Список каркасов пуст. \en List of frames is empty. + emd_ErrorEmptyCurveCompositesList, ///< \ru Список компонент составной кривой пуст. \en Composite curve has an empty list of composites. + emd_ErrorEmptyBoundCurvesList, ///< \ru Список граничных кривых пуст. \en List of boundary curves is empty. + emd_ErrorEmptyEdgeList, ///< \ru Список рёбер пуст. \en List of edges is empty. + emd_ErrorEmptyFacesList, ///< \ru Список граней пуст. \en List of faces is empty. + emd_ErrorEmptyReferencesList, ///< \ru Список ссылок пуст. \en List of references is empty. + emd_ErrorEmptyOrMore2ReferencesList,///< \ru Список ссылок пуст или содержит более 2 элементов. \en List of references is empty or contains more than 2 items. + emd_ErrorUndefinedFaceSurfaceRef, ///< \ru Ссылка на базовую поверхность грани не определена. \en Invalid reference to base surface. + emd_ErrorUndefinedBaseCurveRef, ///< \ru Ссылка на базовую кривую не определена. \en Invalid reference to base curve. + emd_ErrorRadiusTooCloseToZero, ///< \ru Радиус слишком мал. \en Too small radius. + emd_ErrorRadiusValueNegative, ///< \ru Отрицательное значение радиуса. \en Negative value of radius. + emd_ErrorEllipseAxisTooCloseToZero, ///< \ru Длина полуоси эллипса слишком мала. \en Ellipse axis is too short. + emd_ErrorEllipseAxisNegative, ///< \ru Отрицательная длина полуоси эллипса. \en Ellipse axis length is negative. + emd_ErrorNegativeDegree, ///< \ru Отрицательный порядок сплайна. \en Negative spline order. + emd_ErrorNegativeUDegree, ///< \ru Отрицательный порядок сплайновой поверхности по U. \en Spline surface order along U is negative. + emd_ErrorNegativeVDegree, ///< \ru Отрицательный порядок сплайновой поверхности по V. \en Spline surface order along V is negative. + emd_ErrorDegreeFixImpossible, ///< \ru Невозможно исправить порядок сплайна. \en Cannot fix spline order. + emd_ErrorPolylinePointListLess2, ///< \ru Список точек ломаной содержит менее 2 элементов. \en Polyline contains less then 2 points. + emd_ErrorPointListLess2, ///< \ru Список точек содержит менее 2 элементов. \en List of points contains less then 2 points. + emd_ErrorKnotsListLess2, ///< \ru Список узлов содержит менее 2 элементов. \en List of knots contains less then 2 values. + emd_ErrorWeightsListLess2, ///< \ru Список весов содержит менее 2 элементов. \en List of weights contains less then 2 values. + emd_ErrorUPointListLess2, ///< \ru Список точек по U содержит менее 2 элементов. \en List of points along U contains less then 2 points. + emd_ErrorUKnotsListLess2, ///< \ru Список узлов по U содержит менее 2 элементов. \en List of knots along U contains less then 2 values. + emd_ErrorUWeightsListLess2, ///< \ru Список весов по U содержит менее 2 элементов. \en List of weights along U contains less then 2 values. + emd_ErrorVPointListLess2, ///< \ru Список точек по V содержит менее 2 элементов. \en List of points along V contains less then 2 points. + emd_ErrorVKnotsListLess2, ///< \ru Список узлов по V содержит менее 2 элементов. \en List of knots along V contains less then 2 values. + emd_ErrorVWeightsListLess2, ///< \ru Список весов по V содержит менее 2 элементов. \en List of weights along V contains less then 2 values. + emd_ErrorListsSizeMismatch, ///< \ru Размеры списков не согласуются. \en Lists size mismatch. + emd_ErrorKnotsWeightsListsOrderMismatch, ///< \ru Размеры списков узлов и весов не согласуются с порядком сплайна. \en Sizes of knots and weights lists do not agree with the spline order. + emd_ErrorKnotsWeightsListsSizeMismatch, ///< \ru Размеры списков узлов и весов не согласуются. \en Size of knots list does not agree with the size of the list of weights. + emd_ErrorUKnotsWeightsListsSizeMismatch, ///< \ru Размеры списков узлов и весов по U не согласуются. \en Sizes of knots and weights lists along U do not agree. + emd_ErrorVKnotsWeightsListsSizeMismatch, ///< \ru Размеры списков узлов и весов по V не согласуются. \en Sizes of knots and weights lists along V do not agree. + emd_ErrorSplineCurveNotCreatedUndefinedKnotsVector, ///< \ru Сплайновая кривая не создана - не определёны узлы. \en Cannot create spline, because knots are not defined. + emd_ErrorSplineSurfaceNotCreatedUndefinedKnotsVectors, ///< \ru Сплайновая поверхность не создана - не определёны узлы. \en Cannot create spline surface, because knots are not defined. + emd_ErrorInCorrectSplineSurfaceData, ///< \ru Неверно заданы параметры NURBS поверхности. \en Spline surface parameters are not valid. + + emd_WarningNoSectionTerminator, ///< \ru Маркер завершения раздела не обнаружен. \en Section terminator not found. + emd_WarningSyntaxMultipleDotInFloat, ///< \ru Повторяющаяся точка в действительном числе. \en Too many dots in a floating-point number. + emd_WarningSyntaxMultipleEInFloat, ///< \ru Повторяющаяся E в действительном числе. \en Too many E signs in a floating-point number. + emd_WarningLoopNotClosed, ///< \ru Цикл не замкнут. \en Loop is not closed. + emd_WarningContourNotClosed, ///< \ru Контур не замкнут. \en contour is not closed. + emd_WarningUndefinedRef, ///< \ru Ссылка не определена. \en Invalid reference. + emd_WarningToroidalSurfaceDegenerated, ///< \ru Тороидальная поверхность вырождена. \en Toroidal surface is degenerate. + emd_WarningUndefinedBasisCurve, ///< \ru Не определена базовая кривая. \en Base curve not defined. + emd_WarningUndefinedSweptCurve, ///< \ru Не определена образующая кривая. \en Generatrix curve is not defined. + emd_WarningUndefinedExtrusionDirection, ///< \ru Не определено направление выдавливания. \en Extrusion direction is not defined. + emd_WarningUndefinedAxis, ///< \ru Не определена ось. \en Axis is not defined. + emd_WarningUndefinedAxisOfRevolution, ///< \ru Не определена ось вращения. \en Rotation axis is not defined. + emd_WarningUndefinedBasisSurface, ///< \ru Не определена базовая поверхность. \en Base surface is not defined. + emd_WarningUndefinedRepresentation, ///< \ru Не определено представление. \en Representation is not defined. + emd_WarningUndefinedTransformationOperator, ///< \ru Не определён оператор преобразования. \en Transformation is not defined. + emd_WarningUndefinedObjectTransformBy, ///< \ru Не определён объект, по которому ведётся преобразование. \en Basic object of transformation is not defined. + emd_WarningUndefinedObjectToTransform, ///< \ru Не определён преобразуемый объект. \en No object to transform is defined. + emd_WarningUndefinedCurve, ///< \ru Не определена кривая. \en Curve is not defined. + emd_WarningUndefinedCompositeSegment, ///< \ru Не определён сегмент составной кривой. \en Composite curve segment is not defined. + emd_WarningUndefinedDirection, ///< \ru Не определено направление. \en Direction is not defined. + emd_WarningUndefinedAxisDirection, ///< \ru Не определено направление оси. \en Axis direction is not defined. + emd_WarningDegeneratedItemWasSkipped, ///< \ru Проигнорирован (пропущен) вырожденный объект. \en Degenerate object was missed. + emd_WarningFloatParceFailureDefaultUsed, ///< \ru Ошибка разпознавания числа с плавающей точкой, подставлено значение по умолчанию. \en Floating point value couldn't be parced; default value was used. + emd_WarningSameShapeEdgeTwiceInLoop, ///< \ru В цикле дважды встречается одинаковое ребро. \en Edge based on same curves twice enters a loop. + emd_WarningIncorrectFaceWasNotAddedToShell, ///< \ru Некорректная грань не была добавлена в оболочку. \en Incorrect face was not added to shell. + emd_WarningBoundsNotConnectedWithSeams, ///< \ru Границы замкнутой грани не стыкуются со швами. \en Bounds of periodic face not connected with seams. + emd_WarningIntCurveWasReplacedBySegment, ///< \ru Кривая пересечения была заменена отрезком. \en Intersection curve was replaced by segment. + + emd_MessageWeightsFilled, ///< \ru Веса заданы. \en Weights are set. + + emd_ErrorSTEPEdgeCurveFlagTSingleRedefinition, ///< \ru При создании ребра в конвертере STEP дважды указана грань с флагом .T.. \en Double .T. face inclusion in STEP. + emd_ErrorSTEPEdgeCurveFlagFSingleRedefinition, ///< \ru При создании ребра в конвертере STEP дважды указана грань с флагом .F.. \en Double .F. face inclusion in STEP. + emd_ErrorSTEPEdgeCurveFlagTMultipleRedefinition, ///< \ru При создании ребра в конвертере STEP более чем дважды указана грань с флагом .T.. \en Multiple .T. face inclusion in STEP. + emd_ErrorSTEPEdgeCurveFlagFMultipleRedefinition, ///< \ru При создании ребра в конвертере STEP более чем дважды указана грань с флагом .F.. \en Multiple .F. face inclusion in STEP. + emd_ErrorSTEPUndefinedFaceGeometry, ///< \ru Не определена геометрия грани в конвертере STEP. \en Face geometry is not defined in STEP. + emd_ErrorSTEPSyntaxMultipleDotInEnum, ///< \ru Синтаксическая ошибка в файле формата STEP - в перечислении символ "." встречается более 1 раза подряд. \en Too many dots in a enumeration record in STEP. + emd_WarningSTEPPointCorrection, ///< \ru Скорректированы координаты точки. \en Point location corrected. ( by BUG_73871 ) + emd_WarningSTEPEdgeCurveByVertices, ///< \ru Кривая ребра скорректирована с учётом координат вершин. \en Edge curve corrected in accordance with vertices. ( by BUG_73871 ) + emd_MessageSTEPFlagChangedToF, ///< \ru Произведена замена флага на .F.. \en Flag was set as .F. in STEP. + emd_MessageSTEPFlagChangedToT, ///< \ru Произведена замена флага на .T.. \en Flag was set as .T. in STEP. + emd_WarningBooleanUndefined, ///< \ru Булево значение не определено. \en Boolean value not defined. + + emd_WarningACISUnsupportedInterpoleCurveType, ///< \ru Данный подтип ACIS интерполяционной кривой не поддерживается. \en Interpolation curve type is not supported by SAT converter. + emd_WarningACISUnsupportedParametricCurveType, ///< \ru Данный подтип ACIS параметрической кривой не поддерживается. \en Parametric curve type is not supported by SAT converter. + emd_ErrorACISUnsupportedVersion, ///< \ru Данная версия ACIS NT не поддерживается. \en Th version of file is not supported by SAT converter. + emd_WarningACISCannotImportEntityId, ///< \ru Не удалось импортировать объект с данным Id. \en Cannot import this object by SAT converter. + emd_WarningACISIncorrectIntAttribute, ///< \ru Некорректный целочисленный атрибут. \en Incorrect integer attribute. + emd_WarningVRMLGridDuplicatesInMeshes, ///< \ru Присутствуют дубликаты объектов в сетках. \en There are grid duplicates in meshes. + emd_WarningACISLawIntCurveIsNotCreated, ///< \ru Кривая по закону не создана. \en Law intersection curve is not created. + + emd_ErrorIGESIncorrectExternalReference, ///< \ru Неверное имя внешней ссылки. \en Invalid external reference in IGES. + + emd_ErrorSTLTooManyTrianglesForBinary, ///< \ru Триангуляция исходной модели содержит больше треугольников, чем допустимо стандартом ( не выражается 32-битным беззнаковым числом ) ( by BUG_71422 ). \en Too many triangles (not represented by unsigned 32-bit number) for export to binary STL. + + emd_ErrorXTUnsupportedVersion, ///< \ru Данная версия X_T не поддерживается. \en Th version of file is not supported by X_T converter. + + emd_ErrorJTUnsupportedVersion, ///< \ru Данная версия JT не поддерживается. \en Th version of file is not supported by JT converter. + + emd_ErrorStringEncoding, ///< \ru Ошибка кодировки строки. \en String encoding error. + + emd_WarningCurveParametrizationCorrected ///< \ru Исправлена параметризация кривой. \en Curve parameterization was corrected. + +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Интерфейс генератора однострочного идентификатора компонента. + \en Interface of component's identifier generator. \~ + \details \ru Предназначен для для экспорта в форматы, в которых для идентификации компонента предусмотрено одно строковое значение. + \en Demanded for export to formats having one string field for product inetifier. \~ +\ingroup Exchange_Interface +*/ +struct IProductIdMaker : public MbRefItem +{ + virtual c3d::string_t operator()( const MbProductInfo& ) const = 0; +}; + +//------------------------------------------------------------------------------ +/** \brief \ru Интерфейс для преобразования строк. + \en An interface for string encoding. \~ + \ingroup Base_Tools_String +*/ +class IC3DCharEncodingTransformer : public MbRefItem +{ +public: + virtual ~IC3DCharEncodingTransformer() {} + + //------------------------------------------------------------------------------ + /** \brief \ru Преобразование строки из wchar_t* в char*. + \en Transform string from wchar_t* to char*. \~ + \ingroup Base_Tools_String + */ + virtual bool StdToC3D( const c3d::string_t& from, std::string& to ) = 0; + + //------------------------------------------------------------------------------ + /** \brief \ru Преобразование строки из char* в wchar_t*. + \en Transform string from char* в wchar_t*. \~ + \ingroup Base_Tools_String + */ + virtual bool C3DToStd( const std::string& from, c3d::string_t& to ) = 0; +}; + +//------------------------------------------------------------------------------ +/** \brief \ru Интерфейс свойств конвертера. +\en Interface of converter's properties. \~ +\details \ru Интерфейс свойств конвертера реализует выдачу имени документа и других сведений о нём, таких как автор, +и управление режимами работы - сшивкой поверхностей с возможностью создания твёрдых +тел, фильтрацией объектов, формирование журнала трансляции. +\en Interface of converter's properties realizes getting the document's name and other information about it, such as the author, +and management of modes of operations - stitching of surfaces with possibility of solids creation, +objects filtration, generation of translation journal. \~ +\ingroup Exchange_Interface +*/ +class CONV_CLASS IConvertorProperty3D { +public : + virtual ~IConvertorProperty3D() {} + +public: + /// \ru Получить имя документа. \en Get document's name. + virtual const std::string GetDocumentName () const = 0; //{ return std::string( GetDocName().get_str() ); }; + /// \ru Получить имя файла для конвертирования. \en Get file name for converting. + virtual const c3d::path_string FullFilePath () const = 0 ;//{ return c3d::path_string( GetFileName().c_str() ); }; + /// \ru Является ли файл текстовым. \en Whether the file is a text file. + virtual bool IsFileAscii () const = 0; + /// \ru Получить версию формата при экспорте. \en Get the version of format for export. + virtual long int GetFormatVersion () const { return EXPORT_DEFAULT; }; + /// \ru Задать формат для экспорта \en Set format for export + DEPRECATE_DECLARE virtual MbeImpExpFormat GetFormat () const { return ief_STEP203; } + /// \ru Следует ли экспортировать только поверхности ( введено для работы конвертера IGES ). \en Whether to export only surfaces (introduced for work with converter IGES ). + virtual bool IsOutOnlySurfaces() const = 0; + /// \ru Является ли экспортируемый документ сборкой. \en Whether the document for export is an assembly. + virtual bool IsAssembling () const = 0; + /// \ru Получить значение разрешения на импорт экспорт объектов определенного типа. \en Get the value of permission for import-export of objects of a certain type. + virtual bool GetIoPermission( MbeIOPermiss nPermission ) const = 0; + /// \ru Получить значения разрешений на импорт экспорт объектов определенных типов. \en Get values of permission for import-export of objects of certain types. + virtual void GetIoPermissions( std::vector& ioPermissions ) const = 0; + /// \ru Установить разрешение на импорт экспорт объектов определенного типа. \en Set permission for import-export of objects of a certain type. + virtual void SetIoPermission( MbeIOPermiss nPermission, bool set ) = 0; + /// \ru Получить значение специфичной строки для конвертера. \en Get the value of a certain string for the converter. + virtual bool GetPropertyString ( MbeConverterStrings nString, std::string & propertyString ) const = 0; + /// \ru Установить значение специфичной строки для конвертера. \en Set the value of a certain string for the converter. + virtual void SetPropertyString ( MbeConverterStrings nString, const std::string & propertyString ) = 0; + /// \ru Представление текста в аннотационных объектах. \en Text representation in annotation objects. + virtual eTextForm GetAnnotationTextRepresentation () const { return exf_TextOnly; } + /// \ru Следует ли компоненты экспортировать в разные файлы (если позволяет формат). \en Export components into separate files ( if provided in format). + virtual bool ExportComponentsSeparately() const { return false; } + /// \ru Получить ЛСК, относительно которой позиционирована модель. \en Get the location, the model is placed in. + virtual MbPlacement3D GetOriginLocation() const = 0; + /// \ru Заменять ли принудительно СК компонент на правые. \en Replace components' placements to right-oriented. + virtual bool ReplaceLocationsToRight() const = 0; + /** \brief \ru Сшивать ли поверхности автоматически. + \en If surfaces should be stitched automatically. \~ + \return \ru true - Сшивать поверхности автоматически, false - Спросить пользователя, сшивать ли поверхности. + \en true - Stitch surfaces automatically, false - Ask user first time. \~ + \param[out] stitchPrecision - \ru Точность сшивки. + \en Stitch precision. \~ + */ + virtual bool EnableAutoStitch( double& /*stitchPrecision*/ ) const = 0; + + /** \brief \ru Получить множитель единиц длины по отношению к миллиметру. + \en Get the factor of the length units to millimeters. \~ + \details \ru При импорте, если единицы измерения не заданы явно с помощью средств, предоставляемых обменным форматом, + все размеры (координаты точек, радиусы) умножаются на возвращаемое значение. При экспорте либо с помощью + средств, предоставляемых обменным форматом, задаются единицы измерения, либо все размеры модели (координаты + точек, радиусы) умножаются на возвращаемое значение. + \en During the import all spatial objects (coordinate values, radiuses) are multiplied by the returned value, + unless the scale factor comes from the exchange file. During the export the exchange format facilities are + used to specify the length units or all spatial objects (coordinate values, radiuses) are multiplied by the + returned value. \~ + */ + virtual double LengthUnitsFactor() const { return LENGTH_UNIT_MM; } + + + /** \brief \ru Получить дополнительный множитель единиц длины по отношению к миллиметру в модели приложения. + \en Get addifional factor of the length units to millimeters in the application model. \~ + \details \ru При импорте из всех форматов за исключением JT, если единицы измерения, в том числе и заданные + явно с помощью средств, предоставляемых обменным форматом, все размеры (координаты точек, радиусы) умножаются + на возвращаемое значение. При экспорте либо с помощью средств, предоставляемых обменным форматом, задаются + единицы измерения, либо все размеры модели (координаты точек, радиусы) умножаются на возвращаемое значение. + \en During the import from all formats except for JT all spatial objects (coordinate values, radiuses) are + multiplied by the returned value, even if the scale factor comes from the exchange file. During the export the + exchange format facilities are used to specify the length units or all spatial objects (coordinate values, + radiuses) are multiplied by the returned value. \~ + */ + virtual double AppLengthUnitsFactor() const { return LENGTH_UNIT_MM; } + + /** \brief \ru Сделать запись в журнал конвертирования. + \en Make a record in the converter report. \~ + \param[in] id - \ru Идентификатор элемента внутри файла стороннего формата. + \en Identifier of an element inside the file of a foreign format. \~ + \param[in] msgType - \ru Тип сообщения. + \en Message type. \~ + \param[in] msgText - \ru Код сообщения. + \en Message code. \~ + */ + virtual void LogReport( ptrdiff_t id, eMsgType msgType, eMsgDetail msgText ) = 0; + + // /** \brief \ru Следует ли показывать сообщения и диалоги пользователю. \en Whether to show messages and dialog to the user. \~ + // \details \ru Обеспечивает работу через API. \en Provide possibility for work via API. \~ + // \return \ru true - обычная работа, false - через API. \en true - ordinary work, false - via API. \~ + // */ + virtual bool CanShowMessages() const = 0; + /// \ru Дать данные вычисления триангуляции (для конвертера JT, STL и VRML). \en Get data for step calculation during triangulation (for JT, STL, VRML only). + virtual MbStepData TesselationParameters() const { return MbStepData(); } + /// \ru Дать данные вычисления триангуляции уровня детализации (для конвертера JT). \en Get data for step calculation during triangulation of LOD0 (for JTonly). + virtual MbStepData LOD0TesselationParameters() const { return TesselationParameters(); } + /// \ru Флаг сохранения совпадающих точек швов. (для конвертера STL и VRML). \en Whether to keep coincident points of seams (for STL, VRML only). + virtual bool DualSeams() const { return true; } + /// \ru Флаг сохранения совпадающих точек швов. (для конвертера STL и VRML). \en Whether to keep coincident points of seams (for STL, VRML only). + virtual void DualSeams( bool ) {} + /// \ru Выполнять ли слияние подобных граней. \en Whether to join similar faces. + virtual bool JoinSimilarFaces() const { return true; } + /// \ru Добавлять ли удаленные грани в качестве оболочек. \en Whether to add removed faces as shells. + virtual bool AddRemovedFacesAsShells() const { return false; } + /// \ru Получить генератор однострочного идентификтора изделия. \en Get generator of one-line product identifier. + virtual SPtr ProductIdentifierGenerator() const { return SPtr(); } + + /// \ru Проводить ли аудит траснляции. \en Whether to audit the translation. + virtual bool TotalAudit() const { return false; } + /// \ru Следует ли формировать атрибут на основе идентификатора элемнта в файле. \en Whether to attatch the element's id in file as attribute. + virtual bool AttatchIdAttributes() const { return true; } + + /// \ru Получить пользовательский преобразователь строк. \en Get user string transformer. + virtual SPtr GetUserCharEncodingTransformer() const { return SPtr(c3d_null); } + +}; // IConvertorProperty3D + + +//------------------------------------------------------------------------------ +/** \brief \ru Реализация генератора однострочного идентификатора компонента. + \en Implementation of component's identifier generator. \~ + \details \ru Реализация по умолчанию предполагает передачу наименования компонента. + \en Default implementatio implies export of component's name. \~ +\ingroup Exchange_Interface +*/ +struct NameProductIdMaker : public IProductIdMaker +{ + virtual c3d::string_t operator()( const MbProductInfo& ) const; +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Предопределённая реализация интерфейса свойств конвертера. + \en Pre-defined implementation of converter's properties. \~ +\ingroup Exchange_Interface +*/ +class CONV_CLASS ConvConvertorProperty3D : public IConvertorProperty3D { +public: + std::string docName; ///< \ru Имя документа. \en Document name. + c3d::path_string fileName; ///< \ru Имя файла. \en File name. + bool fileASCII; ///< \ru Экспортировать ли в текстовый файл (если формат поддерживает двоичный). \en Export to text file (if format supports binary one). + long int formatVersion; /// \ru Версия формата при экспорте. \en The version of format for export. + bool exportIGESTopology; ///< \ru Экспортировать ли топологию в IGES. \en Export topology items into IGES. + std::vector ioPermissions; ///< \ru Фильтр объектов по типам. \en Type objects filter. + SPtr userEncodingTransformer; ///< \ru Пользовательский преобразователь строк. \en User string transformer. + std::map propertyStrings; ///< \ru Особые значения сведений о документе. \en Specific values of documents properties. + eTextForm annotTextReprSTEP; ///< \ru Представление текста элементов аннотации. \en Text representation in annotation items. + MbPlacement3D originLocation; ///< \ru ЛСК документа. \en Own placement of the document. + bool replaceLocationsToRight; ///< \ru Следует ли принудительно преобразовывать ЛСК объектов к правым (для форматов, допускающих левые). \en Force replacement of locations to right ones. + bool enableAutostitch; ///< \ru Сшивать ли поверхности автоматически. \en Automatically stitch surfaces into shells. + double autostitchPrecision; ///< \ru Точность сшивки. \en Stitch precision. + bool showMessages; ///< \ru Отображать ли сообщения. \en Invoke messages show. + MbStepData tesseleationStepData; ///< \ru Параметры триангуляции при экспорте в STL и VRML. \en Tessellation parameters for export into STL and VRML. + MbStepData LOD0StepData; ///< \ru Параметры триангуляции при экспорте в JT. \en Tessellation parameters for export into JT. + bool dualSeams; ///< \ru Признак сдваивания швов при экспорте в STL и VRML. \en Make dual seams when export into STL and VRML. + bool joinSimilarFaces; ///< \ru Выполнять ли слияние подобных граней. \en Whether to join similar faces. + bool addRemovedFacesAsShells; ///< \ru Добавлять ли удаленные грани в качестве отдельных оболочек. \en Whether to add removed faces as shells. + double lengthUnitsFactor; ///< \ru Единицы длины модели. \en Length units of the model. + double appUnitsFactor; ///< \ru Единицы длины модели пользовательского приложения. \en Length units of the model used in user application. + bool attatchIdAttributes; ///< \ru Следует ли формировать атрибут на основе идентификатора элемнта в файле. \en Whether to attatch the element's id in file as attribute. + bool auditEnabled; + + /// \ru Сведения о сообщениях конвертера. \en Converter message data. + struct LogRecord { + ptrdiff_t id; ///< \ru Идентификатор записи. \en Record id. + eMsgType msgType; ///< \ru Тип сообщения. \en Message type. + eMsgDetail msgText; ///< \ru Код сообщения. \en Message code. + }; + + std::vector< LogRecord > logRecords; ///< \ru Сообщения конвертера. \en Converter messages. + +public: + + ConvConvertorProperty3D(); ///< \ru Конструктор. \en Constructor. + virtual ~ConvConvertorProperty3D() {};///< \ru Деструктор. \en Destructor. + + /// \ru Получить имя документа. \en Get document's name. + virtual const std::string GetDocumentName () const { return docName; }; + /// \ru Получить имя файла для конвертирования. \en Get file name for converting. + virtual const c3d::path_string FullFilePath () const { return fileName; }; + /// \ru Является ли файл текстовым. \en Whether the file is a text file. + virtual bool IsFileAscii () const; + /// \ru Получить версию формата при экспорте. \en Get the version of format for export. + virtual long int GetFormatVersion () const; + /// \ru Следует ли экспортировать только поверхности ( введено для работы конвертера IGES ). \en Whether to export only surfaces (introduced for work with converter IGES ). + virtual bool IsOutOnlySurfaces() const; + /// \ru Является ли экспортируемый документ сборкой. \en Whether the document for export is an assembly. + virtual bool IsAssembling () const { return true; }; + /// \ru Получить значение разрешения на импорт экспорт объектов определенного типа. \en Get the value of permission for import-export of objects of a certain type. + virtual bool GetIoPermission( MbeIOPermiss nPermission ) const; + /// \ru Получить значения разрешений на импорт экспорт объектов определенных типов. \en Get values of permission for import-export of objects of certain types. + virtual void GetIoPermissions( std::vector& ioPermissions ) const; + /// \ru Установить разрешение на импорт экспорт объектов определенного типа. \en Set permission for import-export of objects of a certain type. + virtual void SetIoPermission( MbeIOPermiss nPermission, bool isSet ); + /// \ru Получить значение специфичной строки для конвертера. \en Get the value of a certain string for the converter. + virtual bool GetPropertyString ( MbeConverterStrings nString, std::string & propertyString ) const; + /// \ru Установить значение специфичной строки для конвертера. \en Set the value of a certain string for the converter. + virtual void SetPropertyString ( MbeConverterStrings nString, const std::string & propertyString ); + /// \ru Представление текста в аннотационных объектах. \en Text representation in annotation objects. + virtual eTextForm GetAnnotationTextRepresentation () const; + /// \ru Следует ли компоненты экспортировать в разные файлы (если позволяет формат). \en Export components into separate files ( if provided in format). + virtual bool ExportComponentsSeparately() const; + /// \ru Получить ЛСК, относительно которой позиционирована модель. \en Get the location, the model is placed in. + virtual MbPlacement3D GetOriginLocation() const; + /// \ru Заменять ли принудительно СК компонент на правые. \en Replace components' placements to right-oriented. + virtual bool ReplaceLocationsToRight() const; + /** \brief \ru Сшивать ли поверхности автоматически. + \en If surfaces should be stitched automatically. \~ + \return \ru true - Сшивать поверхности автоматически, false - Спросить пользователя, сшивать ли поверхности. + \en true - Stitch surfaces automatically, false - Ask user first time. \~ + \param[out] stitchPrecision - \ru Точность сшивки. + \en Stitch precision. \~ + */ virtual bool EnableAutoStitch( double& /*stitchPrecision*/ ) const; + + /// \ru Получить множитель единиц длины по отношению к миллиметру. \en Get the factor of the length units to millimeters. + virtual double LengthUnitsFactor() const; + + /** \brief \ru Получить множитель единиц длины по отношению к миллиметру в модели приложения. + \en Get the factor of the length units to millimeters in the application model. \~ + */ + virtual double AppLengthUnitsFactor() const; + + /** \brief \ru Сделать запись в журнал конвертирования. + \en Make a record in the converter report. \~ + \param[in] id - \ru Идентификатор элемента внутри файла стороннего формата. + \en Identifier of an element inside the file of a foreign format. \~ + \param[in] msgType - \ru Тип сообщения. + \en Message type. \~ + \param[in] msgText - \ru Код сообщения. + \en Message code. \~ + */ + virtual void LogReport( ptrdiff_t id, eMsgType msgType, eMsgDetail msgText ); + +// /** \brief \ru Следует ли показывать сообщения и диалоги пользователю. \en Whether to show messages and dialog to the user. \~ +// \details \ru Обеспечивает работу через API. \en Provide possibility for work via API. \~ +// \return \ru true - обычная работа, false - через API. \en true - ordinary work, false - via API. \~ +// */ + virtual bool CanShowMessages() const; + + /// \ru Дать данные вычисления триангуляции (для конвертера STL и VRML). \en Get data for step calculation during triangulation (for STL, VRML only). + virtual MbStepData TesselationParameters() const; + /// \ru Дать данные вычисления триангуляции уровня детализации (для конвертера JT). \en Get data for step calculation during triangulation of LOD0 (for JTonly). + virtual MbStepData LOD0TesselationParameters() const; + /// \ru Получить флаг сохранения совпадающих точек швов. (для конвертера STL и VRML). \en Whether to keep coincident points of seams (for STL, VRML only). + virtual bool DualSeams() const; + /// \ru Задать флаг сохранения совпадающих точек швов. (для конвертера STL и VRML). \en Whether to keep coincident points of seams (for STL, VRML only). + virtual void DualSeams( bool ); + /// \ru Проводить ли аудит траснляции. \en Whether to audit the translation. + virtual bool TotalAudit() const; + /// \ru Следует ли формировать атрибут на основе идентификатора элемнта в файле. \en Whether to attatch the element's id in file as attribute. + virtual bool AttatchIdAttributes() const; + /// \ru Выполнять ли слияние подобных граней. \en Whether to join similar faces. + virtual bool JoinSimilarFaces() const { return joinSimilarFaces; } + /// \ru Добавлять ли удаленные грани в качестве оболочек. \en Whether to add removed faces as shells. + virtual bool AddRemovedFacesAsShells() const { return addRemovedFacesAsShells; } + /// \ru Получить генератор однострочного идентификтора изделия. \en Get generator of one-line product identifier. + virtual SPtr ProductIdentifierGenerator() const { return SPtr( new NameProductIdMaker() ); } + + /// \ru Получить пользовательский преобразователь строк. \en Get user string transformer. + virtual SPtr GetUserCharEncodingTransformer() const; + + OBVIOUS_PRIVATE_COPY( ConvConvertorProperty3D ) + +}; // IConvertorProperty3D + + + +#endif // __CONV_MODEL_PROPERTIES_H diff --git a/C3d/Include/conv_model_document.h b/C3d/Include/conv_model_document.h index 2f704a3..bf5307b 100644 --- a/C3d/Include/conv_model_document.h +++ b/C3d/Include/conv_model_document.h @@ -1,575 +1,575 @@ -//////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru Сущности конвертерной модели: документ, деталь, сборка, вставка. - \en Entities of converter-compatible model: document, part, assembly, instance. \~ - \details \ru Интерфейсы сущностей и предопределённая реализация модельного документа C3dModelDocument. - \en Interfaces of entities and pre-defined implementation of model document C3dModelDocument. \~ -*/ -//////////////////////////////////////////////////////////////////////////////// - -#ifndef __CONV_MODEL_DOCUMENT_H -#define __CONV_MODEL_DOCUMENT_H - -#include -#include -#include -#include -#include -#include -#include - - - -class MbPlacement3D; -class MbName; - -class MbAttributeContainer; - -class ItModelAssembly; -class ItModelPart; -class ItModelInstance; - -class IProgressIndicator; - -typedef SPtr ModelAssemblyPtr; -typedef SPtr ModelPartPtr; -typedef SPtr ModelInstancePtr; - - - -//------------------------------------------------------------------------------ -/** \brief \ru Интерфейс документа модели сборки или детали. -\en Interface of document of an assembly model or a part model. \~ -\ingroup Exchange_Interface -*/ -// --- -class CONV_CLASS ItModelDocument : public MbRefItem -{ -public: - /// \ru Это сборка? \en Is it an assembly? - virtual bool IsAssembly() const = 0; - /// \ru Это ни сборка, ни деталь? \en Is it neither an assembly nor a part? - virtual bool IsEmpty() const = 0; - - /** \brief \ru Прообраз новой интерфейсной функции - задать модель ЛСК, относительно которой позиционируется модель. - \en Prototype of a new interface function - get the placement the model is defined in. \~ - */ - //virtual MbPlacement3D GetOriginLocation() const = 0; - - /** \brief \ru Прообраз новой интерфейсной функции - задать модель для наполнения. - \en Prototype of a new interface function - set a model to fill. \~ - */ - virtual void SetContent( MbItem* /*content*/) = 0; - - /** \brief \ru Прообраз новой интерфейсной функции - получить наполнение. - \en Prototype of a new interface function - get the filling. \~ - */ - virtual MbItem * GetContent() /*{ return NULL; }*/ = 0; - - /** \brief \ru Создать документ с новой сборкой при импорте. - \en Create a document with a new assembly while importing. \~ - \details \ru Увеличить счётчик ссылок результирующего документа на 1. - \en Increase the reference counter of the resultant document by 1. \~ - \param[in] fileName - \ru Имя сборки. - \en Assembly name. \~ - \param[in] solids - \ru Тела, добавляемые в сборку. - \en Solids to add into the assembly. \~ - \return \ru Экземпляр сборки, если операция прошла успешно, NULL в противном случае. - \en Instance of an assembly if the operation succeeded, NULL - otherwise. \~ - */ - virtual ModelAssemblyPtr CreateAssembly( const c3d::ItemsSPtrVector & componentItems, const c3d::string_t& fileName ) = 0; - - - /** \brief \ru Создать документ с новой деталью при импорте. - \en Create a document with a new part while importing. \~ - \details \ru Увеличить счётчик ссылок результирующего документа на 1. - \en Increase the reference counter of the resultant document by 1. \~ - \param[in] solids - \ru Тела, добавляемые в деталь. - \en Solids to add into a part. \~ - \param[in] fileName - \ru Имя детали. - \en A part name. \~ - \return \ru Экземпляр детали, если операция прошла успешно, NULL в противном случае. - \en Instance of the part if the operation succeeded, NULL - otherwise. \~ - */ - virtual ModelPartPtr CreatePart( const c3d::ItemsSPtrVector & componentItems, const c3d::string_t& fileName ) = 0; - - /** \brief \ru Получить сборку для экспорта. - \en Get an assembly for export. \~ - \details \ru Увеличить счётчик ссылок результирующей сборки на 1. - \en Increase the reference counter of the resultant assembly by 1. \~ - \return \ru Экземпляр сборки, если операция прошла успешно, NULL в противном случае. - \en Instance of an assembly if the operation succeeded, NULL - otherwise. \~ - */ - virtual ModelAssemblyPtr GetInstanceAssembly( ) = 0; - - - /** \brief \ru Получить деталь для экспорта. - \en Get the detail for export. \~ - \details \ru Увеличить счётчик ссылок результирующей детали на 1. - \en Increase the reference counter of the resultant part by 1. \~ - \return \ru Экземпляр детали, если операция прошла успешно, NULL в противном случае. - \en Instance of the part if the operation succeeded, NULL - otherwise. \~ - */ - virtual ModelPartPtr GetInstancePart( ) = 0; - - /** \brief \ru Завершить импорт и сохранить документ. - \en Complete the import and save the document. \~ - \return \ru true, если операция прошла успешно, false в противном случае. - \en true if the operation succeeded, false - otherwise. \~ - \param[in] \ru indicator Объект для отображения хода процесса. - \en indicator An object indicating a process progress. \~ - */ - virtual bool FinishImport( IProgressIndicator * indicator ) = 0; - - /** \brief \ru Получить элементы аннотации, соответствующие элементам геометрической модели. - \en Get elements of annotation, corresponding items of geometric model. \~ - \param[in] eTextForm - \ru Форма представления текста. - \en Text representation form. \~ - \return \ru Контейнер объектов аннотации. - \en Vector of annotation objects. \~ - */ - virtual map_of_visual_items GetAnnotationItems( eTextForm ) const = 0; - - /// \ru Задать размеры. \en Set sizes. - virtual void SetAnnotationItems( const map_of_visual_items& ) = 0; - - /// \ru Открыть документ. \en Open a document. - virtual void OpenDocument() = 0; - -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Формирователь геометрического представления текста. -\en Generator of text element's geometry shape. \~ -\ingroup Exchange_Interface -*/ -// --- -class CONV_CLASS C3DSymbolToItem : public MbRefItem { -public: - virtual SPtr TextToItem( const MaTextItem*, const MbPlacement3D& location ) const; - virtual SPtr TerminatorToItem( const MaTerminatorSymbol*, const MbPlacement3D& location ) const; - - virtual ~C3DSymbolToItem(); -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Формирователь геометрического представления PMI. -\en Generator of PMI's geometry shape. \~ -\ingroup Exchange_Interface -*/ -// --- -class CONV_CLASS C3DPmiToItem : public MbRefItem { - SPtr symToItem; -public: - C3DPmiToItem( SPtr = SPtr() ); - virtual SPtr operator() ( const MaAnnotationItem* ) const; - - virtual ~C3DPmiToItem(); -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Реализация документа модели, формирующая регулярную структуру. -\en Implementation of model document which has regular structure. \~ -\ingroup Exchange_Interface -*/ -// --- -class CONV_CLASS C3dModelDocument: public ItModelDocument { - - ModelPartPtr part; ///< \ru Представление в виде детали. \en Representation as detail. - ModelAssemblyPtr assembly; ///< \ru Представление в виде сборки. \en Representation as assembly. - map_of_visual_items visualItems; ///< \ru Элементы аннотации. \en Annotation items. - c3d::ItemSPtr rawContent; ///< \ru Передаваемый модельный элемент. \en Converted model item. - SPtr pmiToItem; ///< \ru Включены ли элементы аннотации непосредственно в модельный элемент. \en Model item contains PMI. -public: - - C3dModelDocument( SPtr pmiToContent = SPtr() ); ///< \ru Конструктор. \en Conscructor. - - virtual ~C3dModelDocument(); ///< \ru Деструктор. \en Descructor. - - // Является ли сборкой. - virtual bool IsAssembly() const; - // Пуст ли. - virtual bool IsEmpty() const; - // Задать модель напрямую. - virtual void SetContent( MbItem* /*content*/); - // Выдать модель напрямую. - virtual MbItem * GetContent(); - // Создать сборку. - virtual ModelAssemblyPtr CreateAssembly( const c3d::ItemsSPtrVector & componentItems, const c3d::string_t& fileName ); - // Создать деталь. - virtual ModelPartPtr CreatePart( const c3d::ItemsSPtrVector & componentItems, const c3d::string_t& fileName ); - // Выдать сборку. - virtual ModelAssemblyPtr GetInstanceAssembly( ); - // Выдать деталь. - virtual ModelPartPtr GetInstancePart( ); - // Завершить импорт. - virtual bool FinishImport( IProgressIndicator * ); - // Выдать элементы аннотации. - virtual map_of_visual_items GetAnnotationItems( eTextForm ) const; - // Задать элементы аннотации. - virtual void SetAnnotationItems( const map_of_visual_items& vi ); - // Открыть документ. - virtual void OpenDocument(); - - /// \ru Включены ли PMI в элемент модели. \en If PMI is included into model item. - SPtrPmiInContent() const; - - /// \ru Зарегистрировать элемент аннотации. \en Register annotation object. - void RegisterAnnotation( c3d::ItemSPtr component, const AnnotationSptrVector& annotation, const AnnotationSptrVector& requirements ); -}; - - -typedef C3dModelDocument RegularModelDocument; -typedef C3dModelDocument ConvModelDocument; - - -//------------------------------------------------------------------------------ -/** \brief \ru Интерфейс свойств вставки, подсборки или детали. -\en Interface of properties of an instance, a subassembly or a part. \~ -\ingroup Exchange_Interface -*/ -// --- -class ItModelInstanceProperties : public MbRefItem -{ -public: - - /// \ru Атрибуты. \en Attributes. - - /// \ru Задать атрибуты. \en Set attributes. - virtual bool SetAttributes( const c3d::AttrSPtrVector& /*attributes*/ ) = 0; - - /// \ru Получить атрибуты. \en Get attributes. - virtual c3d::AttrSPtrVector GetAttributes( ) const = 0;// { return c3d::AttrSPtrVector(); } - - - /// \ru Технические требования. \en Technical requirements. - - /// \ru Получить технические требования. \en Get technical requirements. - virtual void GetRequirements( AnnotationSptrVector &, eTextForm ) const = 0; - - /// \ru Задать технические требования. \en Set technical requirements. - virtual void SetRequirements( const AnnotationSptrVector & ) = 0; - - /// \ru Наименование. \en Name. - - /// \ru Задать имя документа. \en Set document's name. - DEPRECATE_DECLARE virtual bool SetName( const std::string& /*name*/ ) { return false; }; - /// \ru Получить имя документа. \en Get document's name. - DEPRECATE_DECLARE virtual std::string Name() const { return std::string(); }; - - /// \ru Обозначение. \en Marking. - - /// \ru Задать обозначение документа. \en Set document marking. - DEPRECATE_DECLARE virtual bool SetMarking( const std::string& /*name*/ ) { return false; }; - /// \ru Получить обозначение документа. \en Get document marking. - DEPRECATE_DECLARE virtual std::string Marking() const { return std::string(); }; - - /// \ru Автор. \en Author. - - /// \ru Задать имя автора. \en Set author's name. - DEPRECATE_DECLARE virtual bool SetAuthor( const std::string& /*name*/ ) { return false; }; - /// \ru Получить имя автора. \en Get author's name. - DEPRECATE_DECLARE virtual std::string Author() const { return std::string(); }; - - /// \ru Организация. \en Organization. - - /// \ru Задать имя автора. \en Set author's name. - DEPRECATE_DECLARE virtual bool SetOrganization( const std::string& /*name*/ ) { return false; }; - /// \ru Получить имя автора. \en Get author's name. - DEPRECATE_DECLARE virtual std::string Organization() const { return std::string(); }; - - /// \ru Комментарий. \en Comment. - - /// \ru Задать комментарии. \en Set the comments. - DEPRECATE_DECLARE virtual bool SetComments( const std::vector< std::string > & /*comments*/ ) { return false; }; - /// \ru Получить следующий комментарий. \en Get the next comment. - DEPRECATE_DECLARE virtual std::vector< std::string > GetComments( ) const { return std::vector< std::string >(); }; - - /// \ru Цвет сборки, детали или вставки. \en Color of an assembly, a part or an instance. - - /// \ru Задать цветовые свойства. \en Set color properties. - DEPRECATE_DECLARE virtual bool SetColor( const MbAttributeContainer & ) { return false; }; - /// \ru Получить цветовые свойства. \en Get color properties. - DEPRECATE_DECLARE virtual bool GetColor( MbAttributeContainer & ) const { return false; }; - - /// \ru Цвет тела. \en Solid color. - - /// \ru Задать цветовые свойства оболочки. \en Set color properties of a shell. - DEPRECATE_DECLARE virtual bool SetColor( const MbAttributeContainer &, size_t ) { return false; }; - - /// \ru Цвет грани. \en Face color. - - /// \ru Задать цветовые свойства грани \en Set color properties of a face. - DEPRECATE_DECLARE virtual bool SetColor( const MbAttributeContainer &, const MbName & ) { return false; }; - /// \ru Получить цветовые свойства грани. \en Get color properties of a face. - DEPRECATE_DECLARE virtual bool GetColor( MbAttributeContainer &, const MbName & ) const { return false; }; -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Интерфейс вставки компоненты. -\en Interface of the component instance. \~ -\ingroup Exchange_Interface -*/ -// --- -class ItModelInstance : public ItModelInstanceProperties -{ -public: - // \ru Выдать идентификатор сборки или детали \en Get identifier of an assembly or a part - virtual void * GetId() = 0; - /// \ru Выдать расположение этой вставки в координатах родителя. \en Get the placement of this instance in parent's coordinates. - virtual bool GetPlacement( MbPlacement3D & ) const = 0; - /// \ru Это сборка? \en Is it an assembly? - virtual bool IsAssembly() const = 0; - /// \ru Это ни сборка, ни деталь? \en Is it neither an assembly nor a part? - virtual bool IsEmpty() const = 0; - - /** \brief \ru Создать пустую сборку при импорте и увеличить счётчик ссылок на 1. - \en Create an empty assembly while importing and increase the reference counter by 1. \~ - \param[in] place - \ru ЛСК сборки в родительской модели. - \en LCS of the assembly in the parent's model. \~ - \param[in] fileName - \ru Имя сборки. - \en Assembly name. \~ - \return \ru Экземпляр сборки, если операция прошла успешно, NULL в противном случае. - \en Instance of an assembly if the operation succeeded, NULL - otherwise. \~ - */ - virtual ModelAssemblyPtr CreateAssembly( const MbPlacement3D &place, const c3d::ItemsSPtrVector & componentItems, const c3d::string_t& fileName ) = 0; - - /** \brief \ru Создать деталь при импорте. - \en Create a part while importing. \~ - \details \ru Увеличить счётчик ссылок детали на 1. - \en Increase the reference counter of a part by 1. \~ - \param[in] place - \ru ЛСК детали. - \en LCS of a part. \~ - \param[in] solids - \ru Тела, включаемые в деталь. - \en Solids included in the part. \~ - \param[in] fileName - \ru Название детали. - \en Solid's name. \~ - \return \ru Экземпляр детали, если операция прошла успешно, NULL в противном случае. - \en Instance of the part if the operation succeeded, NULL - otherwise. \~ - */ - virtual ModelPartPtr CreatePart( const MbPlacement3D &place, const c3d::ItemsSPtrVector & componentItems, const c3d::string_t& fileName ) = 0; - - /** \brief \ru Получить сборку для экспорта. - \en Get an assembly for export. \~ - \return \ru Экземпляр сборки, если операция прошла успешно, NULL в противном случае. - \en Instance of an assembly if the operation succeeded, NULL - otherwise. \~ - */ - virtual ModelAssemblyPtr GetInstanceAssembly( ) = 0; - - - /** \brief \ru Получить деталь для экспорта. - \en Get the detail for export. \~ - \return \ru Экземпляр детали, если операция прошла успешно, NULL в противном случае. - \en Instance of the part if the operation succeeded, NULL - otherwise. \~ - */ - virtual ModelPartPtr GetInstancePart( ) = 0; - - /** \brief \ru Создать подсборку при импорте, и её вставку. - \en Create a subassembly and its instance while importing. \~ - \param[in] place - \ru ЛСК сборки в родительской модели. - \en LCS of the assembly in the parent's model. \~ - \param[in] existing - \ru Сборка, подлежащая вставке. - \en An assembly to insert. \~ - \return \ru true, если операция прошла успешно, false в противном случае. - \en true if the operation succeeded, false - otherwise. \~ - */ - virtual bool SetAssembly( const MbPlacement3D & place, const ItModelAssembly * existing ) = 0; - - /** \brief \ru Создать деталь при импорте, и её вставку. - \en Create a part while importing and its instance. \~ - \param[in] place - \ru ЛСК детали в родительской модели. - \en LCS of a part in the parent's model. \~ - \param[in] existing - \ru Деталь, подлежащая вставке. - \en Detail to insert. \~ - \return \ru true, если операция прошла успешно, false в противном случае. - \en true if the operation succeeded, false - otherwise. \~ - */ - virtual bool SetPart( const MbPlacement3D & place, const ItModelPart * existing ) = 0; - -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Тип объектов, которые необходимо выдать для экспорта или добавить при импорте. -\en Type of objects to be returned for export or to be added while importing. \~ -\ingroup Data_Interface -*/ -// --- -enum MbeGettingItemType { - git_Item = 0, ///< \ru Получить элементы всех типов. \en Get items of all types. - git_Solid, ///< \ru Получить тела. \en Get solids. - git_Surface, ///< \ru Получить поверхности. \en Get surfaces. - git_WireFrame, ///< \ru Получить проволочные каркасы. \en Get wire frames. - git_PlaneInstance, ///< \ru Получить вставки плоских объектов (эскизы). \en Get plane instances (drafts). - git_PointFrame, ///< \ru Получить точечные каркасы. \en Get point frames. - git_AssociatedGeometry ///< \ru Получить ассоциированные геометрические объекты (резьбы). \en Get associated geometry objects (threads). -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Интерфейс сборки. -\en Interface of the assembly. \~ -\details \ru Экземпляр должен порождаться в методах CreateAssembly реализаций -интерфейсов ItModelDocument и ItModelAInstance. Собственные элементы детали -должны передаваться как параметры конструктора. \~ \en The object should be -created in the CreateAssembly method of the implementations of the -ItModelDocument and ItModelInstance interfaces. Own Items of the detail should -be arguments of the constructor. -\ingroup Exchange_Interface -*/ -// --- -class ItModelAssembly : public ItModelInstanceProperties -{ -public: - /** \brief \ru Получить имя файла сборки без пути и расширения для экспорта. - \en Get the file name of an assembly without the path and the extension for export. \~ - \return \ru Имя файла сборки. - \en An assembly file name. \~ - */ - virtual c3d::path_string PureFileName() const = 0; - - /** \brief \ru Получить пустой интерфейс вставки для создания подсборки или детали при импорте. - \en Get an empty interface of the insertion for creation of subassembly or a part while importing. \~ - \details \ru Увеличить счётчик ссылок на 1. - \en Increase the reference counter by 1. \~ - \return \ru Интерфейс вставки, если операция прошла успешно или NULL в противном случае. - \en Interface of the instance if the operation succeeded and NULL otherwise. \~ - */ - virtual ModelInstancePtr PrepareInstance() = 0; - - /** \brief \ru Получить интерфейс следующей вставки для создания подсборки или детали при экспорте. - \en Get the interface of the next insertion for creation of a subassembly or a part while exporting. \~ - \return \ru Интерфейс вставки, если операция прошла успешно или NULL в противном случае. - \en Interface of the insertion if the operation succeeded and NULL otherwise. \~ - */ - virtual ModelInstancePtr NextInstance( bool includeInvisible ) = 0; - - /// \ru Выдать ЛСК, общую для элементов компонента. \en Get the placement, which all the items of the component use for transformation. - virtual bool GetPlacement( MbPlacement3D & ) const { return false; }; - - /** \brief \ru Получить объекты из корня сборки при экспорте. - \en Get objects from the assembly root while exporting. \~ - \param[out] items - \ru Наполняемый массив (состоит из объектов классов MbSolid, MbCurve3D, MbCartPoint3D). - \en Array to fill (consist of objects of classes MbSolid, MbCurve3D, MbCartPoint3D). \~ - \param[in] includeInvisible - \ru Если true, то выдаются все тела, включая невидимые, если false - только видимые. - \en If true, then all the solids are returned, including invisible ones, if false - only visible ones. \~ - */ - virtual void GetItems( c3d::ItemsSPtrVector & items, MbeGettingItemType itemType, bool includeInvisible ) const = 0; - - /** \brief \ru Добавить объекты в корень сборки при импорте. - \en Add objects to the assembly root while importing. \~ - \param[in] items - \ru Объекты, добавляемые в модель (тела, кривые и точки). - \en Objects to add to the model (solids, curves and points). \~ - */ - virtual void AddItems( const c3d::ItemsSPtrVector & items ) = 0; - - /** \brief \ru Получить элементы аннотации из сборки. - \en Get elements of annotation from the assembly. \~ - \param[in] eTextForm - \ru Форма представления текста. - \en Text representation form. \~ - \param[in] includeInvisible - \ru Если true, то выдаются все объекты аннотации, включая невидимые, если false - только видимые. - \en If true, all the annotation objects are returned, including invisible ones, if false - only visible ones. \~ - \return \ru Контейнер объектов аннотации. - \en Vector of annotation objects. \~ - */ - virtual AnnotationSptrVector GetAnnotationItems( eTextForm, bool ) const { return AnnotationSptrVector(); }; // Реализация будет удалена после того, как она будет осуществлена на стороне 3D - virtual AnnotationSptrVector GetAnnotationItems( eTextForm ) const { return AnnotationSptrVector(); }; // Будет удалена после её реализации на стороне 3D - - /** \brief \ru Задать элементы аннотации в сборке. - \en Set elements of annotation in the assembly. \~ - \param[in] sourceDim - \ru Элементы аннотации - \en Elements of annotation. \~ - */ - virtual void SetAnnotationItems( const AnnotationSptrVector & ) = 0; - -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Интерфейс детали. -\en Interface of a part. \~ -\details \ru Экземпляр должен порождаться в методах CreatePart реализаций -интерфейсов ItModelDocument и ItModelAInstance. Собственные элементы детали -должны передаваться как параметры конструктора. \~ \en The object should be -created in the CreatePart method of the implementations of the -ItModelDocument and ItModelInstance interfaces. Own Items of the detail should -be arguments of the constructor. -\ingroup Exchange_Interface -*/ -// --- -class ItModelPart : public ItModelInstanceProperties -{ -public: - /** \brief \ru Получить имя файла детали без пути и расширения для экспорта. - \en Get the file name of a part without the path and extension for export. \~ - \return \ru Имя файла детали. - \en A part file name. \~ - */ - virtual c3d::path_string PureFileName() const = 0; - - /** \brief \ru Получить пустой интерфейс вставки для создания подсборки или детали при импорте. - \en Get an empty interface of the insertion for creation of subassembly or a part while importing. \~ - \details \ru Увеличить счётчик ссылок на 1. - \en Increase the reference counter by 1. \~ - \return \ru Интерфейс вставки, если операция прошла успешно или NULL в противном случае. - \en Interface of the instance if the operation succeeded and NULL otherwise. \~ - */ - virtual ModelInstancePtr PrepareInstance() = 0; - - /** \brief \ru Получить интерфейс следующей вставки для создания подсборки или детали при экспорте. - \en Get the interface of the next insertion for creation of a subassembly or a part while exporting. \~ - \return \ru Интерфейс вставки, если операция прошла успешно или NULL в противном случае. - \en Interface of the insertion if the operation succeeded and NULL otherwise. \~ - */ - virtual ModelInstancePtr NextInstance( bool includeInvisible ) = 0; - - /// \ru Выдать ЛСК, общую для элементов компонента. \en Get the placement, which all the items of the component use for transformation. - virtual bool GetPlacement( MbPlacement3D & ) const { return false; }; - - /** \brief \ru Получить объекты из детали при экспорте. - \en Get objects from the part while exporting. \~ - \param[out] items - \ru Наполняемый массив (состоит из объектов классов MbSolid, MbWireFrame, MbPointFrame). - \en Array to fill (consists of objects of classes MbSolid, MbWireFrame, MbPointFrame). \~ - \param[in] itemType - \ru Тип объектов, которыми нужно наполнить массив. - \en Type of objects the array should be filled with. \~ - \param[in] includeInvisible - \ru Если true, то выдаются все тела, включая невидимые, если false - только видимые. - \en If true, all the solids are returned, including invisible ones, if false - only visible ones. \~ - */ - virtual void GetItems( c3d::ItemsSPtrVector & items, MbeGettingItemType itemType, bool includeInvisible ) const = 0; - - /** \brief \ru Добавить объекты в деталь при импорте. - \en Add objects to a part while importing. \~ - \param[in] items - \ru Объекты, добавляемые в модель (кривые и точки). - \en Objects to be added to the model (curves and points). \~ - */ - virtual void AddItems( const c3d::ItemsSPtrVector & items ) = 0; - - /** \brief \ru Получить элементы аннотации из детали. - \en Get elements of annotation from the detail. \~ - \param[in] eTextForm - \ru Форма представления текста. - \en Text representation form. \~ - \param[in] includeInvisible - \ru Если true, то выдаются все объекты аннотации, включая невидимые, если false - только видимые. - \en If true, all the annotation objects are returned, including invisible ones, if false - only visible ones. \~ - \return \ru Контейнер объектов аннотации. - \en Vector of annotation objects. \~ - */ - virtual AnnotationSptrVector GetAnnotationItems( eTextForm, bool ) const { return AnnotationSptrVector(); }; // Реализация будет удалена после того, как она будет осуществлена на стороне 3D - virtual AnnotationSptrVector GetAnnotationItems( eTextForm ) const { return AnnotationSptrVector(); }; // Будет удалена после её реализации на стороне 3D - - - /** \brief \ru Задать элементы аннотации в детали. - \en Set elements of annotation in the part. \~ - \param[in] sourceDim - \ru Элементы аннотации - \en Elements of annotation. \~ - */ - virtual void SetAnnotationItems( const AnnotationSptrVector & ) = 0; - -}; - - +//////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Сущности конвертерной модели: документ, деталь, сборка, вставка. + \en Entities of converter-compatible model: document, part, assembly, instance. \~ + \details \ru Интерфейсы сущностей и предопределённая реализация модельного документа C3dModelDocument. + \en Interfaces of entities and pre-defined implementation of model document C3dModelDocument. \~ +*/ +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __CONV_MODEL_DOCUMENT_H +#define __CONV_MODEL_DOCUMENT_H + +#include +#include +#include +#include +#include +#include +#include + + + +class MbPlacement3D; +class MbName; + +class MbAttributeContainer; + +class ItModelAssembly; +class ItModelPart; +class ItModelInstance; + +class IProgressIndicator; + +typedef SPtr ModelAssemblyPtr; +typedef SPtr ModelPartPtr; +typedef SPtr ModelInstancePtr; + + + +//------------------------------------------------------------------------------ +/** \brief \ru Интерфейс документа модели сборки или детали. +\en Interface of document of an assembly model or a part model. \~ +\ingroup Exchange_Interface +*/ +// --- +class CONV_CLASS ItModelDocument : public MbRefItem +{ +public: + /// \ru Это сборка? \en Is it an assembly? + virtual bool IsAssembly() const = 0; + /// \ru Это ни сборка, ни деталь? \en Is it neither an assembly nor a part? + virtual bool IsEmpty() const = 0; + + /** \brief \ru Прообраз новой интерфейсной функции - задать модель ЛСК, относительно которой позиционируется модель. + \en Prototype of a new interface function - get the placement the model is defined in. \~ + */ + //virtual MbPlacement3D GetOriginLocation() const = 0; + + /** \brief \ru Прообраз новой интерфейсной функции - задать модель для наполнения. + \en Prototype of a new interface function - set a model to fill. \~ + */ + virtual void SetContent( MbItem* /*content*/) = 0; + + /** \brief \ru Прообраз новой интерфейсной функции - получить наполнение. + \en Prototype of a new interface function - get the filling. \~ + */ + virtual MbItem * GetContent() /*{ return c3d_null; }*/ = 0; + + /** \brief \ru Создать документ с новой сборкой при импорте. + \en Create a document with a new assembly while importing. \~ + \details \ru Увеличить счётчик ссылок результирующего документа на 1. + \en Increase the reference counter of the resultant document by 1. \~ + \param[in] fileName - \ru Имя сборки. + \en Assembly name. \~ + \param[in] solids - \ru Тела, добавляемые в сборку. + \en Solids to add into the assembly. \~ + \return \ru Экземпляр сборки, если операция прошла успешно, c3d_null в противном случае. + \en Instance of an assembly if the operation succeeded, c3d_null - otherwise. \~ + */ + virtual ModelAssemblyPtr CreateAssembly( const c3d::ItemsSPtrVector & componentItems, const c3d::string_t& fileName ) = 0; + + + /** \brief \ru Создать документ с новой деталью при импорте. + \en Create a document with a new part while importing. \~ + \details \ru Увеличить счётчик ссылок результирующего документа на 1. + \en Increase the reference counter of the resultant document by 1. \~ + \param[in] solids - \ru Тела, добавляемые в деталь. + \en Solids to add into a part. \~ + \param[in] fileName - \ru Имя детали. + \en A part name. \~ + \return \ru Экземпляр детали, если операция прошла успешно, c3d_null в противном случае. + \en Instance of the part if the operation succeeded, c3d_null - otherwise. \~ + */ + virtual ModelPartPtr CreatePart( const c3d::ItemsSPtrVector & componentItems, const c3d::string_t& fileName ) = 0; + + /** \brief \ru Получить сборку для экспорта. + \en Get an assembly for export. \~ + \details \ru Увеличить счётчик ссылок результирующей сборки на 1. + \en Increase the reference counter of the resultant assembly by 1. \~ + \return \ru Экземпляр сборки, если операция прошла успешно, c3d_null в противном случае. + \en Instance of an assembly if the operation succeeded, c3d_null - otherwise. \~ + */ + virtual ModelAssemblyPtr GetInstanceAssembly( ) = 0; + + + /** \brief \ru Получить деталь для экспорта. + \en Get the detail for export. \~ + \details \ru Увеличить счётчик ссылок результирующей детали на 1. + \en Increase the reference counter of the resultant part by 1. \~ + \return \ru Экземпляр детали, если операция прошла успешно, c3d_null в противном случае. + \en Instance of the part if the operation succeeded, c3d_null - otherwise. \~ + */ + virtual ModelPartPtr GetInstancePart( ) = 0; + + /** \brief \ru Завершить импорт и сохранить документ. + \en Complete the import and save the document. \~ + \return \ru true, если операция прошла успешно, false в противном случае. + \en true if the operation succeeded, false - otherwise. \~ + \param[in] \ru indicator Объект для отображения хода процесса. + \en indicator An object indicating a process progress. \~ + */ + virtual bool FinishImport( IProgressIndicator * indicator ) = 0; + + /** \brief \ru Получить элементы аннотации, соответствующие элементам геометрической модели. + \en Get elements of annotation, corresponding items of geometric model. \~ + \param[in] eTextForm - \ru Форма представления текста. + \en Text representation form. \~ + \return \ru Контейнер объектов аннотации. + \en Vector of annotation objects. \~ + */ + virtual map_of_visual_items GetAnnotationItems( eTextForm ) const = 0; + + /// \ru Задать размеры. \en Set sizes. + virtual void SetAnnotationItems( const map_of_visual_items& ) = 0; + + /// \ru Открыть документ. \en Open a document. + virtual void OpenDocument() = 0; + +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Формирователь геометрического представления текста. +\en Generator of text element's geometry shape. \~ +\ingroup Exchange_Interface +*/ +// --- +class CONV_CLASS C3DSymbolToItem : public MbRefItem { +public: + virtual SPtr TextToItem( const MaTextItem*, const MbPlacement3D& location ) const; + virtual SPtr TerminatorToItem( const MaTerminatorSymbol*, const MbPlacement3D& location ) const; + + virtual ~C3DSymbolToItem(); +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Формирователь геометрического представления PMI. +\en Generator of PMI's geometry shape. \~ +\ingroup Exchange_Interface +*/ +// --- +class CONV_CLASS C3DPmiToItem : public MbRefItem { + SPtr symToItem; +public: + C3DPmiToItem( SPtr = SPtr() ); + virtual SPtr operator() ( const MaAnnotationItem* ) const; + + virtual ~C3DPmiToItem(); +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Реализация документа модели, формирующая регулярную структуру. +\en Implementation of model document which has regular structure. \~ +\ingroup Exchange_Interface +*/ +// --- +class CONV_CLASS C3dModelDocument: public ItModelDocument { + + ModelPartPtr part; ///< \ru Представление в виде детали. \en Representation as detail. + ModelAssemblyPtr assembly; ///< \ru Представление в виде сборки. \en Representation as assembly. + map_of_visual_items visualItems; ///< \ru Элементы аннотации. \en Annotation items. + c3d::ItemSPtr rawContent; ///< \ru Передаваемый модельный элемент. \en Converted model item. + SPtr pmiToItem; ///< \ru Включены ли элементы аннотации непосредственно в модельный элемент. \en Model item contains PMI. +public: + + C3dModelDocument( SPtr pmiToContent = SPtr() ); ///< \ru Конструктор. \en Conscructor. + + virtual ~C3dModelDocument(); ///< \ru Деструктор. \en Descructor. + + // Является ли сборкой. + virtual bool IsAssembly() const; + // Пуст ли. + virtual bool IsEmpty() const; + // Задать модель напрямую. + virtual void SetContent( MbItem* /*content*/); + // Выдать модель напрямую. + virtual MbItem * GetContent(); + // Создать сборку. + virtual ModelAssemblyPtr CreateAssembly( const c3d::ItemsSPtrVector & componentItems, const c3d::string_t& fileName ); + // Создать деталь. + virtual ModelPartPtr CreatePart( const c3d::ItemsSPtrVector & componentItems, const c3d::string_t& fileName ); + // Выдать сборку. + virtual ModelAssemblyPtr GetInstanceAssembly( ); + // Выдать деталь. + virtual ModelPartPtr GetInstancePart( ); + // Завершить импорт. + virtual bool FinishImport( IProgressIndicator * ); + // Выдать элементы аннотации. + virtual map_of_visual_items GetAnnotationItems( eTextForm ) const; + // Задать элементы аннотации. + virtual void SetAnnotationItems( const map_of_visual_items& vi ); + // Открыть документ. + virtual void OpenDocument(); + + /// \ru Включены ли PMI в элемент модели. \en If PMI is included into model item. + SPtrPmiInContent() const; + + /// \ru Зарегистрировать элемент аннотации. \en Register annotation object. + void RegisterAnnotation( c3d::ItemSPtr component, const AnnotationSptrVector& annotation, const AnnotationSptrVector& requirements ); +}; + + +typedef C3dModelDocument RegularModelDocument; +typedef C3dModelDocument ConvModelDocument; + + +//------------------------------------------------------------------------------ +/** \brief \ru Интерфейс свойств вставки, подсборки или детали. +\en Interface of properties of an instance, a subassembly or a part. \~ +\ingroup Exchange_Interface +*/ +// --- +class ItModelInstanceProperties : public MbRefItem +{ +public: + + /// \ru Атрибуты. \en Attributes. + + /// \ru Задать атрибуты. \en Set attributes. + virtual bool SetAttributes( const c3d::AttrSPtrVector& /*attributes*/ ) = 0; + + /// \ru Получить атрибуты. \en Get attributes. + virtual c3d::AttrSPtrVector GetAttributes( ) const = 0;// { return c3d::AttrSPtrVector(); } + + + /// \ru Технические требования. \en Technical requirements. + + /// \ru Получить технические требования. \en Get technical requirements. + virtual void GetRequirements( AnnotationSptrVector &, eTextForm ) const = 0; + + /// \ru Задать технические требования. \en Set technical requirements. + virtual void SetRequirements( const AnnotationSptrVector & ) = 0; + + /// \ru Наименование. \en Name. + + /// \ru Задать имя документа. \en Set document's name. + DEPRECATE_DECLARE virtual bool SetName( const std::string& /*name*/ ) { return false; }; + /// \ru Получить имя документа. \en Get document's name. + DEPRECATE_DECLARE virtual std::string Name() const { return std::string(); }; + + /// \ru Обозначение. \en Marking. + + /// \ru Задать обозначение документа. \en Set document marking. + DEPRECATE_DECLARE virtual bool SetMarking( const std::string& /*name*/ ) { return false; }; + /// \ru Получить обозначение документа. \en Get document marking. + DEPRECATE_DECLARE virtual std::string Marking() const { return std::string(); }; + + /// \ru Автор. \en Author. + + /// \ru Задать имя автора. \en Set author's name. + DEPRECATE_DECLARE virtual bool SetAuthor( const std::string& /*name*/ ) { return false; }; + /// \ru Получить имя автора. \en Get author's name. + DEPRECATE_DECLARE virtual std::string Author() const { return std::string(); }; + + /// \ru Организация. \en Organization. + + /// \ru Задать имя автора. \en Set author's name. + DEPRECATE_DECLARE virtual bool SetOrganization( const std::string& /*name*/ ) { return false; }; + /// \ru Получить имя автора. \en Get author's name. + DEPRECATE_DECLARE virtual std::string Organization() const { return std::string(); }; + + /// \ru Комментарий. \en Comment. + + /// \ru Задать комментарии. \en Set the comments. + DEPRECATE_DECLARE virtual bool SetComments( const std::vector< std::string > & /*comments*/ ) { return false; }; + /// \ru Получить следующий комментарий. \en Get the next comment. + DEPRECATE_DECLARE virtual std::vector< std::string > GetComments( ) const { return std::vector< std::string >(); }; + + /// \ru Цвет сборки, детали или вставки. \en Color of an assembly, a part or an instance. + + /// \ru Задать цветовые свойства. \en Set color properties. + DEPRECATE_DECLARE virtual bool SetColor( const MbAttributeContainer & ) { return false; }; + /// \ru Получить цветовые свойства. \en Get color properties. + DEPRECATE_DECLARE virtual bool GetColor( MbAttributeContainer & ) const { return false; }; + + /// \ru Цвет тела. \en Solid color. + + /// \ru Задать цветовые свойства оболочки. \en Set color properties of a shell. + DEPRECATE_DECLARE virtual bool SetColor( const MbAttributeContainer &, size_t ) { return false; }; + + /// \ru Цвет грани. \en Face color. + + /// \ru Задать цветовые свойства грани \en Set color properties of a face. + DEPRECATE_DECLARE virtual bool SetColor( const MbAttributeContainer &, const MbName & ) { return false; }; + /// \ru Получить цветовые свойства грани. \en Get color properties of a face. + DEPRECATE_DECLARE virtual bool GetColor( MbAttributeContainer &, const MbName & ) const { return false; }; +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Интерфейс вставки компоненты. +\en Interface of the component instance. \~ +\ingroup Exchange_Interface +*/ +// --- +class ItModelInstance : public ItModelInstanceProperties +{ +public: + // \ru Выдать идентификатор сборки или детали \en Get identifier of an assembly or a part + virtual void * GetId() = 0; + /// \ru Выдать расположение этой вставки в координатах родителя. \en Get the placement of this instance in parent's coordinates. + virtual bool GetPlacement( MbPlacement3D & ) const = 0; + /// \ru Это сборка? \en Is it an assembly? + virtual bool IsAssembly() const = 0; + /// \ru Это ни сборка, ни деталь? \en Is it neither an assembly nor a part? + virtual bool IsEmpty() const = 0; + + /** \brief \ru Создать пустую сборку при импорте и увеличить счётчик ссылок на 1. + \en Create an empty assembly while importing and increase the reference counter by 1. \~ + \param[in] place - \ru ЛСК сборки в родительской модели. + \en LCS of the assembly in the parent's model. \~ + \param[in] fileName - \ru Имя сборки. + \en Assembly name. \~ + \return \ru Экземпляр сборки, если операция прошла успешно, c3d_null в противном случае. + \en Instance of an assembly if the operation succeeded, c3d_null - otherwise. \~ + */ + virtual ModelAssemblyPtr CreateAssembly( const MbPlacement3D &place, const c3d::ItemsSPtrVector & componentItems, const c3d::string_t& fileName ) = 0; + + /** \brief \ru Создать деталь при импорте. + \en Create a part while importing. \~ + \details \ru Увеличить счётчик ссылок детали на 1. + \en Increase the reference counter of a part by 1. \~ + \param[in] place - \ru ЛСК детали. + \en LCS of a part. \~ + \param[in] solids - \ru Тела, включаемые в деталь. + \en Solids included in the part. \~ + \param[in] fileName - \ru Название детали. + \en Solid's name. \~ + \return \ru Экземпляр детали, если операция прошла успешно, c3d_null в противном случае. + \en Instance of the part if the operation succeeded, c3d_null - otherwise. \~ + */ + virtual ModelPartPtr CreatePart( const MbPlacement3D &place, const c3d::ItemsSPtrVector & componentItems, const c3d::string_t& fileName ) = 0; + + /** \brief \ru Получить сборку для экспорта. + \en Get an assembly for export. \~ + \return \ru Экземпляр сборки, если операция прошла успешно, c3d_null в противном случае. + \en Instance of an assembly if the operation succeeded, c3d_null - otherwise. \~ + */ + virtual ModelAssemblyPtr GetInstanceAssembly( ) = 0; + + + /** \brief \ru Получить деталь для экспорта. + \en Get the detail for export. \~ + \return \ru Экземпляр детали, если операция прошла успешно, c3d_null в противном случае. + \en Instance of the part if the operation succeeded, c3d_null - otherwise. \~ + */ + virtual ModelPartPtr GetInstancePart( ) = 0; + + /** \brief \ru Создать подсборку при импорте, и её вставку. + \en Create a subassembly and its instance while importing. \~ + \param[in] place - \ru ЛСК сборки в родительской модели. + \en LCS of the assembly in the parent's model. \~ + \param[in] existing - \ru Сборка, подлежащая вставке. + \en An assembly to insert. \~ + \return \ru true, если операция прошла успешно, false в противном случае. + \en true if the operation succeeded, false - otherwise. \~ + */ + virtual bool SetAssembly( const MbPlacement3D & place, const ItModelAssembly * existing ) = 0; + + /** \brief \ru Создать деталь при импорте, и её вставку. + \en Create a part while importing and its instance. \~ + \param[in] place - \ru ЛСК детали в родительской модели. + \en LCS of a part in the parent's model. \~ + \param[in] existing - \ru Деталь, подлежащая вставке. + \en Detail to insert. \~ + \return \ru true, если операция прошла успешно, false в противном случае. + \en true if the operation succeeded, false - otherwise. \~ + */ + virtual bool SetPart( const MbPlacement3D & place, const ItModelPart * existing ) = 0; + +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Тип объектов, которые необходимо выдать для экспорта или добавить при импорте. +\en Type of objects to be returned for export or to be added while importing. \~ +\ingroup Data_Interface +*/ +// --- +enum MbeGettingItemType { + git_Item = 0, ///< \ru Получить элементы всех типов. \en Get items of all types. + git_Solid, ///< \ru Получить тела. \en Get solids. + git_Surface, ///< \ru Получить поверхности. \en Get surfaces. + git_WireFrame, ///< \ru Получить проволочные каркасы. \en Get wire frames. + git_PlaneInstance, ///< \ru Получить вставки плоских объектов (эскизы). \en Get plane instances (drafts). + git_PointFrame, ///< \ru Получить точечные каркасы. \en Get point frames. + git_AssociatedGeometry ///< \ru Получить ассоциированные геометрические объекты (резьбы). \en Get associated geometry objects (threads). +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Интерфейс сборки. +\en Interface of the assembly. \~ +\details \ru Экземпляр должен порождаться в методах CreateAssembly реализаций +интерфейсов ItModelDocument и ItModelAInstance. Собственные элементы детали +должны передаваться как параметры конструктора. \~ \en The object should be +created in the CreateAssembly method of the implementations of the +ItModelDocument and ItModelInstance interfaces. Own Items of the detail should +be arguments of the constructor. +\ingroup Exchange_Interface +*/ +// --- +class ItModelAssembly : public ItModelInstanceProperties +{ +public: + /** \brief \ru Получить имя файла сборки без пути и расширения для экспорта. + \en Get the file name of an assembly without the path and the extension for export. \~ + \return \ru Имя файла сборки. + \en An assembly file name. \~ + */ + virtual c3d::path_string PureFileName() const = 0; + + /** \brief \ru Получить пустой интерфейс вставки для создания подсборки или детали при импорте. + \en Get an empty interface of the insertion for creation of subassembly or a part while importing. \~ + \details \ru Увеличить счётчик ссылок на 1. + \en Increase the reference counter by 1. \~ + \return \ru Интерфейс вставки, если операция прошла успешно или c3d_null в противном случае. + \en Interface of the instance if the operation succeeded and c3d_null otherwise. \~ + */ + virtual ModelInstancePtr PrepareInstance() = 0; + + /** \brief \ru Получить интерфейс следующей вставки для создания подсборки или детали при экспорте. + \en Get the interface of the next insertion for creation of a subassembly or a part while exporting. \~ + \return \ru Интерфейс вставки, если операция прошла успешно или c3d_null в противном случае. + \en Interface of the insertion if the operation succeeded and c3d_null otherwise. \~ + */ + virtual ModelInstancePtr NextInstance( bool includeInvisible ) = 0; + + /// \ru Выдать ЛСК, общую для элементов компонента. \en Get the placement, which all the items of the component use for transformation. + virtual bool GetPlacement( MbPlacement3D & ) const { return false; }; + + /** \brief \ru Получить объекты из корня сборки при экспорте. + \en Get objects from the assembly root while exporting. \~ + \param[out] items - \ru Наполняемый массив (состоит из объектов классов MbSolid, MbCurve3D, MbCartPoint3D). + \en Array to fill (consist of objects of classes MbSolid, MbCurve3D, MbCartPoint3D). \~ + \param[in] includeInvisible - \ru Если true, то выдаются все тела, включая невидимые, если false - только видимые. + \en If true, then all the solids are returned, including invisible ones, if false - only visible ones. \~ + */ + virtual void GetItems( c3d::ItemsSPtrVector & items, MbeGettingItemType itemType, bool includeInvisible ) const = 0; + + /** \brief \ru Добавить объекты в корень сборки при импорте. + \en Add objects to the assembly root while importing. \~ + \param[in] items - \ru Объекты, добавляемые в модель (тела, кривые и точки). + \en Objects to add to the model (solids, curves and points). \~ + */ + virtual void AddItems( const c3d::ItemsSPtrVector & items ) = 0; + + /** \brief \ru Получить элементы аннотации из сборки. + \en Get elements of annotation from the assembly. \~ + \param[in] eTextForm - \ru Форма представления текста. + \en Text representation form. \~ + \param[in] includeInvisible - \ru Если true, то выдаются все объекты аннотации, включая невидимые, если false - только видимые. + \en If true, all the annotation objects are returned, including invisible ones, if false - only visible ones. \~ + \return \ru Контейнер объектов аннотации. + \en Vector of annotation objects. \~ + */ + virtual AnnotationSptrVector GetAnnotationItems( eTextForm, bool ) const { return AnnotationSptrVector(); }; // Реализация будет удалена после того, как она будет осуществлена на стороне 3D + virtual AnnotationSptrVector GetAnnotationItems( eTextForm ) const { return AnnotationSptrVector(); }; // Будет удалена после её реализации на стороне 3D + + /** \brief \ru Задать элементы аннотации в сборке. + \en Set elements of annotation in the assembly. \~ + \param[in] sourceDim - \ru Элементы аннотации + \en Elements of annotation. \~ + */ + virtual void SetAnnotationItems( const AnnotationSptrVector & ) = 0; + +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Интерфейс детали. +\en Interface of a part. \~ +\details \ru Экземпляр должен порождаться в методах CreatePart реализаций +интерфейсов ItModelDocument и ItModelAInstance. Собственные элементы детали +должны передаваться как параметры конструктора. \~ \en The object should be +created in the CreatePart method of the implementations of the +ItModelDocument and ItModelInstance interfaces. Own Items of the detail should +be arguments of the constructor. +\ingroup Exchange_Interface +*/ +// --- +class ItModelPart : public ItModelInstanceProperties +{ +public: + /** \brief \ru Получить имя файла детали без пути и расширения для экспорта. + \en Get the file name of a part without the path and extension for export. \~ + \return \ru Имя файла детали. + \en A part file name. \~ + */ + virtual c3d::path_string PureFileName() const = 0; + + /** \brief \ru Получить пустой интерфейс вставки для создания подсборки или детали при импорте. + \en Get an empty interface of the insertion for creation of subassembly or a part while importing. \~ + \details \ru Увеличить счётчик ссылок на 1. + \en Increase the reference counter by 1. \~ + \return \ru Интерфейс вставки, если операция прошла успешно или c3d_null в противном случае. + \en Interface of the instance if the operation succeeded and c3d_null otherwise. \~ + */ + virtual ModelInstancePtr PrepareInstance() = 0; + + /** \brief \ru Получить интерфейс следующей вставки для создания подсборки или детали при экспорте. + \en Get the interface of the next insertion for creation of a subassembly or a part while exporting. \~ + \return \ru Интерфейс вставки, если операция прошла успешно или c3d_null в противном случае. + \en Interface of the insertion if the operation succeeded and c3d_null otherwise. \~ + */ + virtual ModelInstancePtr NextInstance( bool includeInvisible ) = 0; + + /// \ru Выдать ЛСК, общую для элементов компонента. \en Get the placement, which all the items of the component use for transformation. + virtual bool GetPlacement( MbPlacement3D & ) const { return false; }; + + /** \brief \ru Получить объекты из детали при экспорте. + \en Get objects from the part while exporting. \~ + \param[out] items - \ru Наполняемый массив (состоит из объектов классов MbSolid, MbWireFrame, MbPointFrame). + \en Array to fill (consists of objects of classes MbSolid, MbWireFrame, MbPointFrame). \~ + \param[in] itemType - \ru Тип объектов, которыми нужно наполнить массив. + \en Type of objects the array should be filled with. \~ + \param[in] includeInvisible - \ru Если true, то выдаются все тела, включая невидимые, если false - только видимые. + \en If true, all the solids are returned, including invisible ones, if false - only visible ones. \~ + */ + virtual void GetItems( c3d::ItemsSPtrVector & items, MbeGettingItemType itemType, bool includeInvisible ) const = 0; + + /** \brief \ru Добавить объекты в деталь при импорте. + \en Add objects to a part while importing. \~ + \param[in] items - \ru Объекты, добавляемые в модель (кривые и точки). + \en Objects to be added to the model (curves and points). \~ + */ + virtual void AddItems( const c3d::ItemsSPtrVector & items ) = 0; + + /** \brief \ru Получить элементы аннотации из детали. + \en Get elements of annotation from the detail. \~ + \param[in] eTextForm - \ru Форма представления текста. + \en Text representation form. \~ + \param[in] includeInvisible - \ru Если true, то выдаются все объекты аннотации, включая невидимые, если false - только видимые. + \en If true, all the annotation objects are returned, including invisible ones, if false - only visible ones. \~ + \return \ru Контейнер объектов аннотации. + \en Vector of annotation objects. \~ + */ + virtual AnnotationSptrVector GetAnnotationItems( eTextForm, bool ) const { return AnnotationSptrVector(); }; // Реализация будет удалена после того, как она будет осуществлена на стороне 3D + virtual AnnotationSptrVector GetAnnotationItems( eTextForm ) const { return AnnotationSptrVector(); }; // Будет удалена после её реализации на стороне 3D + + + /** \brief \ru Задать элементы аннотации в детали. + \en Set elements of annotation in the part. \~ + \param[in] sourceDim - \ru Элементы аннотации + \en Elements of annotation. \~ + */ + virtual void SetAnnotationItems( const AnnotationSptrVector & ) = 0; + +}; + + #endif // __CONV_MODEL_DOCUMENT_H \ No newline at end of file diff --git a/C3d/Include/conv_model_exchange.h b/C3d/Include/conv_model_exchange.h index b1d4550..1b9a8ef 100644 --- a/C3d/Include/conv_model_exchange.h +++ b/C3d/Include/conv_model_exchange.h @@ -1,1137 +1,1159 @@ -//////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru Общий интерфейс конвертера. - \en Common API of the converter. \~ - \details \ru Функции чтения и записи в буфер и файл с автоопределением формата по - расширению файла, класс-конвертер с методами для каждого формата и возможностью - подключения плагина, функции для работы с каждым форматом. - \en Functions for export and import from buffer and file using file's extension - for format detection, class of converter for format-specific methods and API for - plugin, format-specific import and export functions. \~ -*/ -//////////////////////////////////////////////////////////////////////////////// - -#ifndef __CONV_I_CONVERTER_H -#define __CONV_I_CONVERTER_H - -#include -#include -#include - -class IProgressIndicator; -struct IScaleRequestor; -class ItModelDocument; -class IConvertorProperty3D; - -/** - \addtogroup Exchange_Interface - \{ -*/ - -//------------------------------------------------------------------------------ -/** \brief \ru Обменный формат модели. -\en Model exchange format.\~ -\ingroup Data_Interface -*/ -// --- -enum MbeModelExchangeFormat { - mxf_autodetect, ///< \ru Интерпретировать содержимое по расширению файла. \en File extension defines format. - mxf_ACIS, ///< \ru Интерпретировать содержимое как ACIS (.sat). \en Read data from buffer as ACIS (.sat). - mxf_IGES, ///< \ru Интерпретировать содержимое как IGES (.igs или .iges). \en Read data from buffer as IGES (.igs or .iges). - mxf_JT, ///< \ru Интерпретировать содержимое как JT (.jt). \en Read data from buffer as JT (.jt). - mxf_Parasolid, ///< \ru Интерпретировать содержимое как Parasolid (.x_t, .x_b, .xmt_txt, .xmp_txt, .xmt_bin или .xmp_bin ). \en Read data from buffer as Parasolid (.x_t, .x_b, .xmt_txt, .xmp_txt, .xmt_bin or .xmp_bin ). - mxf_STEP, ///< \ru Интерпретировать содержимое как STEP (.stp или .step). \en Read data from buffer as STEP (.stp or .step). - mxf_STL, ///< \ru Интерпретировать содержимое как STL (.stl). \en Read data from buffer as STL (.stl). - mxf_VRML, ///< \ru Интерпретировать содержимое как VRML (.wrl). \en Read data from buffer as VRML (.wrl). - mxf_GRDECL, ///< \ru Интерпретировать содержимое как GRDECL (.grdecl). \en Read data from buffer as GRDECL (.grdecl). - mxf_ASCIIPoint, ///< \ru Интерпретировать содержимое как облако точек в ASCII (.txt, .asc или .xyz). \en Read data from buffer as ASCII point cloud (.txt, .asc or .xyz). - mxf_C3D, ///< \ru Интерпретировать содержимое как C3D (.c3d). \en Read data from buffer as C3D (.c3d). -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Результат конвертирования. -\en Result of converting operation. -\ingroup Data_Interface -*/ -// --- -enum MbeConvResType { - cnv_Success = 0, ///< \ru Успешное завершение. \en Success. - cnv_Error, ///< \ru Ошибка в процессе конвертирования. \en Error. - cnv_UserCanceled, ///< \ru Процесс прерван пользователем. \en Process interrupted by user. - cnv_NoBody, ///< \ru Не найдено тел. \en No solids found. - cnv_NoObjects, ///< \ru Не найдено объектов. \en No objects found. - cnv_FileOpenError, ///< \ru Ошибка открытия файла. \en File open error. - cnv_FileWriteError, ///< \ru Ошибка записи файла. \en File write error. - cnv_FileDeleteError, ///< \ru Ошибка удаления файла. \en Could not delete file. - cnv_ImpossibleReadAssembly,///< \ru Не поддерживает работу со сборками. \en Assemblies are not supported. - cnv_LicenseNotFound, ///< \ru Ошибка получения лицензии. \en License check failure. - cnv_NotEnoughMemory, ///< \ru Недостаточно памяти. \en Not enough memory. - cnv_UnknownExtension ///< \ru Неизвестное расширение файла. \en Unknown file extenstion. -}; - - -namespace c3d { - - class C3DExchangeBuffer; - - /** \brief \ru Прочитать файл обменного формата в модель. - \en Read a file of an exchange format into model. \~ - \details \ru Если свойства конвертера заданы, аргумент fileName игнорируется, а имя файла берётся из свойств конвертера. - В противном случае импорт идёт с умолчательными параметрами, соответствующими реализации ConvConvertorProperty3D. \~ - \en The fileName argument is not used if converter properties are defined obviously, file path comes from the FullFilePath - method. Otherwise default parameters corresponding ConvConvertorProperty3D implementation are used for import. - \param[out] model - \ru Модель. - \en The model. \~ - \param[in] filePath - \ru Путь файла. - \en File path. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup Exchange_Interface - */ - CONV_FUNC (MbeConvResType) ImportFromFile( MbModel & model, - const path_string & fileName, - IConvertorProperty3D * prop = C3D_NULL_PTR, - IProgressIndicator * indicator = C3D_NULL_PTR ); - - - /** \brief \ru Прочитать файл обменного формата в элемент. - \en Read a file of an exchange format into element. \~ - \details \ru Если свойства конвертера заданы, аргумент fileName игнорируется, а имя файла берётся из свойств конвертера. - В противном случае импорт идёт с умолчательными параметрами, соответствующими реализации ConvConvertorProperty3D. \~ - \en The fileName argument is not used if converter properties are defined obviously, file path comes from the FullFilePath - method. Otherwise default parameters corresponding ConvConvertorProperty3D implementation are used for import. - \param[out] item - \ru Замещаемый элемент. - \en The element to replace. \~ - \param[in] filePath - \ru Путь файла. - \en File path. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup Exchange_Interface - */ - CONV_FUNC (MbeConvResType) ImportFromFile( c3d::ItemSPtr& item, - const path_string& filePath, - IConvertorProperty3D* prop = C3D_NULL_PTR, - IProgressIndicator* indicator = C3D_NULL_PTR ); - - /** \brief \ru Прочитать файл обменного формата в модель. - \en Read a file of an exchange format into model. \~ - \details \ru Если свойства конвертера заданы, аргумент fileName игнорируется, а имя файла берётся из свойств конвертера. - В противном случае импорт идёт с умолчательными параметрами, соответствующими реализации ConvConvertorProperty3D. \~ - \en The fileName argument is not used if converter properties are defined obviously, file path comes from the FullFilePath - method. Otherwise default parameters corresponding ConvConvertorProperty3D implementation are used for import. - \param[out] mDoc - \ru Модельный документ. - \en The model. \~ - \param[in] filePath - \ru Путь файла. - \en File path. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup Exchange_Interface - */ - CONV_FUNC (MbeConvResType) ImportFromFile( ItModelDocument & mDoc, - const path_string & filePath, - IConvertorProperty3D * prop = C3D_NULL_PTR, - IProgressIndicator * indicator = C3D_NULL_PTR ); - - /** \brief \ru Записать модель в файл обменного формата. - \en Write the model into an exchange format file. \~ - \details \ru Если свойства конвертера заданы, аргумент fileName игнорируется, а имя файла берётся из свойств конвертера. - В противном случае экспорт идёт с умолчательными параметрами, соответствующими реализации ConvConvertorProperty3D. \~ - \en The fileName argument is not used if converter properties are defined obviously, file path comes from the FullFilePath - method. Otherwise default parameters corresponding ConvConvertorProperty3D implementation are used for export. - \param[out] model - \ru Модель. - \en The model. \~ - \param[in] filePath - \ru Путь файла. - \en File path. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup Exchange_Interface - */ - CONV_FUNC (MbeConvResType) ExportIntoFile( MbModel & model, - const path_string & filePath, - IConvertorProperty3D * prop = C3D_NULL_PTR, - IProgressIndicator * indicator = C3D_NULL_PTR ); - - /** \brief \ru Записать модель в файл обменного формата. - \en Write the model into an exchange format file. \~ - \details \ru Если свойства конвертера заданы, аргумент fileName игнорируется, а имя файла берётся из свойств конвертера. - В противном случае экспорт идёт с умолчательными параметрами, соответствующими реализации ConvConvertorProperty3D. \~ - \en The fileName argument is not used if converter properties are defined obviously, file path comes from the FullFilePath - method. Otherwise default parameters corresponding ConvConvertorProperty3D implementation are used for export. - \param[out] model - \ru Экспортируемый лемент. - \en The exported element. \~ - \param[in] filePath - \ru Путь файла. - \en File path. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup Exchange_Interface - */ - CONV_FUNC (MbeConvResType ) ExportIntoFile( MbItem& item, - const path_string& filePath, - IConvertorProperty3D* prop = C3D_NULL_PTR, - IProgressIndicator* indicator = C3D_NULL_PTR ); - - /** \brief \ru Записать модельный документ в файл обменного формата. - \en Write the model into an exchange format file. \~ - \details \ru Если свойства конвертера заданы, аргумент fileName игнорируется, а имя файла берётся из свойств конвертера. - В противном случае экспорт идёт с умолчательными параметрами, соответствующими реализации ConvConvertorProperty3D. \~ - \en The fileName argument is not used if converter properties are defined obviously, file path comes from the FullFilePath - method. Otherwise default parameters corresponding ConvConvertorProperty3D implementation are used for export. - \param[in] mDoc - \ru Экспортируемый модельный документ. - \en The exported model document. \~ - \param[in] filePath - \ru Путь файла. - \en File path. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup Exchange_Interface - */ - CONV_FUNC (MbeConvResType ) ExportIntoFile( ItModelDocument& mDoc, - const path_string& filePath, - IConvertorProperty3D* prop = C3D_NULL_PTR, - IProgressIndicator* indicator = C3D_NULL_PTR ); - - - /** \brief \ru Импортировать данные из буфера в модель. - \en Import data from buffer into model. \~ - \param[out] model - \ru Модель. - \en The model. \~ - \param[in] buffer - \ru Буфер. - \en Buffer. \~ - \param[in] modelFormat - \ru Формат модели. - \en Model format. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup Exchange_Interface - */ - CONV_FUNC (MbeConvResType) ImportFromBuffer( MbModel & model, - const C3DExchangeBuffer& buffer, - MbeModelExchangeFormat modelFormat, - IConvertorProperty3D * prop = C3D_NULL_PTR, - IProgressIndicator * indicator = C3D_NULL_PTR ); - - - /** \brief \ru Импортировать данные из буфера в модель. - \en Import data from buffer into model. \~ - \param[out] item - \ru Замещаемый элемент. - \en The item to replace. \~ - \param[in] buffer - \ru Буфер. - \en Buffer. \~ - \param[in] modelFormat - \ru Формат модели. - \en Model format. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup Exchange_Interface - */ - CONV_FUNC(MbeConvResType) ImportFromBuffer( c3d::ItemSPtr& item, - const C3DExchangeBuffer& buffer, - MbeModelExchangeFormat modelFormat, - IConvertorProperty3D* prop = C3D_NULL_PTR, - IProgressIndicator* indicator = C3D_NULL_PTR ); - - - /** \brief \ru Экспортировать модель в буфер. - \en Export model into buffer. \~ - \param[in] model - \ru Модель. - \en The model. \~ - \param[in] modelFormat - \ru Формат модели. - \en Model format. \~ - \param[out] buffer - \ru Буфер. - \en Buffer. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup Exchange_Interface - */ - CONV_FUNC (MbeConvResType) ExportIntoBuffer( MbModel & model, - MbeModelExchangeFormat modelFormat, - C3DExchangeBuffer& buffer, - IConvertorProperty3D * prop = C3D_NULL_PTR, - IProgressIndicator * indicator = C3D_NULL_PTR ); - - - /** \brief \ru Экспортировать модель в буфер. - \en Export model into buffer. \~ - \param[in] item - \ru Экспортируемый элемент. - \en The item to export. \~ - \param[in] modelFormat - \ru Формат модели. - \en Model format. \~ - \param[out] buffer - \ru Буфер. - \en Buffer. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup Exchange_Interface - */ - CONV_FUNC(MbeConvResType) ExportIntoBuffer( MbItem& item, - MbeModelExchangeFormat modelFormat, - C3DExchangeBuffer& buffer, - IConvertorProperty3D* prop = C3D_NULL_PTR, - IProgressIndicator* indicator = C3D_NULL_PTR ); - - - //------------------------------------------------------------------------------ - /** \brief \ru Буфер для обмена. - \en Memory buffer for data exchange. \~ - \details \ru Обеспечивает обмен данными через оперативную память с контролем выделения и освобождения. - \en Prvides data exchange with memory allocation and deallocation control. \~ - \ingroup Exchange_Interface - */ - class C3DExchangeBuffer { - char* data; ///< \ru Адрес буфера. \en Buffer address. - size_t count; ///< \ru Число байт. \en Bytes count. - public: - - // \ru Конструктор. \en Constructor. - C3DExchangeBuffer() - : data( C3D_NULL_PTR ) - , count( 0 ) { - } - - // \ru Деструктор. \en Destructor. - ~C3DExchangeBuffer() { - Clear(); - } - - // \ru Очистить. \en Clear. - inline void Clear() { - delete[] data; - count = 0; - } - - // \ru Инициализировать буфер. \en Initialize buffer. - inline void Init( const char* init, size_t size ) { - Clear(); - data = new char[size]; - count = size; - ::memcpy( data, init, count ); - } - - // \ru Инициализировать буфер. \en Initialize buffer. - inline void Swap( char*& init, size_t& size ) { - std::swap( init, data ); - std::swap( size, count ); - } - - // \ru Получить адрес буфера. \en Get buffer address. - inline const char* Data() const { - return data; - } - - // \ru Получить число байт. \en Get count of bytes. - inline size_t Count() const { - return count; - } - }; -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Интерфейс конвертера. - \en Converter's interface. \~ - \details \ru Интерфейс конвертера реализует методы экспорта модели в файлы обменных форматов - и импорта из них. - \en Converter's interface implements methods of export of the model to files of exchange formats - and import from them. \~ -*/ -class IConvertor3D { -public: - virtual ~IConvertor3D() {} - -public: - /** \brief \ru Прочитать файл формата SAT. - \en Read a file of SAT format. \~ - \details \ru Прочитать файл формата SAT или указанный поток. - Если задан поток, то запись производится в присланный поток. - Если поток не задан (нулевой), то открывается поток для файла, заданного в свойствах конвертера. \n - \en Read a file of SAT format or a specified stream. - If a stream is specified, then the record is performed to the given stream. - If a stream is not specified (null), then a stream is being opened for file specified in the properties of the converter. \n \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ - \param[in] stream - \ru Поток, из которого производится чтение (может быть NULL). - \en Stream from which reading is performed (can be NULL). \~ - \param[in] indicator - \ru Индикатор хода процесса (может быть NULL). - \en The process progress indicator (can be NULL). \~ - \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей. - \en Dialog of request for stitching the surfaces. \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup ACIS_Exchange - */ - virtual MbeConvResType SATRead ( IConvertorProperty3D & prop, ItModelDocument & idoc, std::iostream * stream, IProgressIndicator * indicator, MbRefItem * qeuryStitch ) = 0; - - /** \brief \ru Записать файл формата SAT. - \en Write file of SAT format. \~ - \details \ru Записать файл формата SAT или указанный поток. - Если задан поток, то запись производится в присланный поток. - Если поток не задан (нулевой), то открывается поток для файла, заданного в свойствах конвертера. \n - \en Write file of SAT format or the specified stream. - If a stream is specified, then the record is performed to the given stream. - If a stream is not specified (null), then a stream is being opened for file specified in the properties of the converter. \n \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ - \param[in] stream - \ru Поток, в который производится запись (может быть NULL). - \en Stream in which the record is performed (can be NULL). \~ - \param[in] indicator - \ru Индикатор хода процесса (может быть NULL). - \en The process progress indicator (can be NULL). \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup ACIS_Exchange - */ - virtual MbeConvResType SATWrite ( IConvertorProperty3D & prop, ItModelDocument & idoc, std::iostream * stream, IProgressIndicator * indicator ) = 0; - - /** \brief \ru Прочитать файл формата SAT. - \en Read a file of SAT format. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей. - \en Dialog of request for stitching the surfaces. \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup ACIS_Exchange - */ - virtual MbeConvResType SATRead ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0, MbRefItem * qeuryStitch = 0 ) = 0; - - /** \brief \ru Записать файл формата SAT. - \en Write file of SAT format. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). - \en Dialog of request for stitching the surfaces (not used). \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup ACIS_Exchange - */ - virtual MbeConvResType SATWrite ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0, MbRefItem * qeuryStitch = 0 ) = 0; - - /** \brief \ru Прочитать файл формата IGES. - \en Read a file of IGES format. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей. - \en Dialog of request for stitching the surfaces. \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup IGES_Exchange - */ - virtual MbeConvResType IGSRead ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0, MbRefItem * qeuryStitch = 0 ) = 0; - - /** \brief \ru Записать файл формата IGES. - \en Write a file of IGES format. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). - \en Dialog of request for stitching the surfaces (not used). \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup IGES_Exchange - */ - virtual MbeConvResType IGSWrite ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0, MbRefItem * qeuryStitch = 0 ) = 0; - - /** \brief \ru Прочитать файл формата JT. - \en Read a file of JT format. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей. - \en Dialog of request for stitching the surfaces. \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup IGES_Exchange - */ - virtual MbeConvResType JTRead ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0, MbRefItem * qeuryStitch = 0 ) = 0; - - /** \brief \ru Записать файл формата JT. - \en Write a file of JT format. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). - \en Dialog of request for stitching the surfaces (not used). \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup IGES_Exchange - */ - virtual MbeConvResType JTWrite ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0, MbRefItem * qeuryStitch = 0 ) = 0; - - /** \brief \ru Прочитать файл формата Parasolid. - \en Read a file of Parasolid format. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей. - \en Dialog of request for stitching the surfaces. \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup Parasolid_Exchange - */ - virtual MbeConvResType XTRead ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0, MbRefItem * qeuryStitch = 0 ) = 0; - - /** \brief \ru Записать файл формата Parasolid. - \en Write a file of Parasolid format. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей. - \en Dialog of request for stitching the surfaces. \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup Parasolid_Exchange - */ - virtual MbeConvResType XTWrite ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0, MbRefItem * qeuryStitch = 0 ) = 0; - - /** \brief \ru Прочитать файл формата STEP. - \en Read a file of STEP format. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). - \en Dialog of request for stitching the surfaces (not used). \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup STEP_Exchange - */ - virtual MbeConvResType STEPRead ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0, MbRefItem * qeuryStitch = 0 ) = 0; - - /** \brief \ru Записать файл формата STEP. - \en Write a file of STEP format. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). - \en Dialog of request for stitching the surfaces (not used). \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup STEP_Exchange - */ - virtual MbeConvResType STEPWrite( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0, MbRefItem * qeuryStitch = 0 ) = 0; - - /** \brief \ru Прочитать файл формата STL. - \en Read a file of STL format. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). - \en Dialog of request for stitching the surfaces (not used). \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup STL_Exchange - */ - virtual MbeConvResType STLRead ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0, MbRefItem * qeuryStitch = 0 ) = 0; - - /** \brief \ru Записать файл формата STL. - \en Write a file of STL format. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). - \en Dialog of request for stitching the surfaces (not used). \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup STL_Exchange - */ - virtual MbeConvResType STLWrite ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0, MbRefItem * qeuryStitch = 0 ) = 0; - - /** \brief \ru Прочитать файл формата VRML. - \en Read a file of VRML format. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). - \en Dialog of request for stitching the surfaces (not used). \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup VRML_Exchange - */ - virtual MbeConvResType VRMLRead ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0, MbRefItem * qeuryStitch = 0 ) = 0; - - /** \brief \ru Записать файл формата VRML. - \en Write a file of VRML format. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). - \en Dialog of request for stitching the surfaces (not used). \~ - \param[in] devSag - \ru Угловой шаг для расчёта триангуляционной сетки. - \en Deviate sag requiref for grid calculateion. \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup VRML_Exchange - */ - virtual MbeConvResType VRMLWrite( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0, MbRefItem * qeuryStitch = 0 ) = 0; - - /** \brief \ru Прочитать файл формата GRDECL. - \en Read a file of GRDECL format. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). - \en Dialog of request for stitching the surfaces (not used). \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup VRML_Exchange - */ - virtual MbeConvResType GRDECLRead ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0, MbRefItem * qeuryStitch = 0 ) = 0; - - /** \brief \ru Записать файл формата GRDECL. - \en Write a file of GRDECL format. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). - \en Dialog of request for stitching the surfaces (not used). \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup STL_Exchange - */ - virtual MbeConvResType GRDECLWrite ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0, MbRefItem * qeuryStitch = 0 ) = 0; - - /** \brief \ru Прочитать файл с облаком точек в формате ASCII. - \en Read a file of ASCII Point Cloud format. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). - \en Dialog of request for stitching the surfaces (not used). \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup ASCII_Exchange - */ - virtual MbeConvResType ASCIIPointCloudRead ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0, MbRefItem * qeuryStitch = 0 ) = 0; - - /** \brief \ru Записать файл с облаком точек в формате ASCII.. - \en Write a point cloud file of ASCII format. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). - \en Dialog of request for stitching the surfaces (not used). \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup ASCII_Exchange - */ - virtual MbeConvResType ASCIIPointCloudWrite ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0, MbRefItem * qeuryStitch = 0 ) = 0; - - - /** \brief \ru Загрузить плагин получения данных для построения модели. - \en Load plugin for getting information necessary to build model. \~ - \param[in] pluginName - \ru Имя подключаемого файла. - \en Name of the file to link. \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup ASCII_Exchange - */ - virtual MbeConvResType LoadForeignReader( const c3d::path_string& pluginName ) = 0; - - - /** \brief \ru Отключить загруженный плагин получения данных для построения модели. - \en Release the loaded plugin for getting information necessary to build model. \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup ASCII_Exchange - */ - virtual MbeConvResType ReleaseForeignReader() = 0; - - /** \brief \ru Прочитать файл с использованием плагина. - \en Read a file using plugin. \~ - \param[in] path - \ru ПУть к файлу, который нужно прочитать. - \en Path of the file to read. \~ - \param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup ASCII_Exchange - */ - virtual MbeConvResType ImportForeign( const c3d::path_string& path, ItModelDocument & idoc, IConvertorProperty3D * prop = 0, IProgressIndicator * indicator = 0 ) = 0; - -}; // IConvertor3D - - -//------------------------------------------------------------------------------ -/** \brief \ru Получить интерфейс конвертера. - \en Get the converter interface. \~ -\ingroup Exchange_Interface -*/ -CONV_FUNC (IConvertor3D *) GetConvertor3D(); - - -//------------------------------------------------------------------------------ -/** \brief \ru Освободить интерфейс конвертера. - \en Release the converter interface. \~ -\ingroup Exchange_Interface -*/ -CONV_FUNC( void ) ReleaseConvertor3D( IConvertor3D* ); - - -/** \brief \ru Прочитать файл формата SAT. - \en Read a file of SAT format. \~ -\param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ -\param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ -\param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ -\return \ru Код завершения операции. - \en Code of the operation termination. \~ -\ingroup ACIS_Exchange -*/ -CONV_FUNC (MbeConvResType ) SATRead ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator ); - -/** \brief \ru Записать файл формата SAT. - \en Write file of SAT format. \~ -\details \ru Записать файл формата SAT или указанный поток. - Если задан поток, то запись производится в присланный поток. - Если поток не задан (нулевой), то открывается поток для файла, заданного в свойствах конвертера. \n - \en Write file of SAT format or the specified stream. - If a stream is specified, then the record is performed to the given stream. - If a stream is not specified (null), then a stream is being opened for file specified in the properties of the converter. \n \~ -\param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ -\param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ -\param[in] indicator - \ru Индикатор хода процесса (может быть NULL). - \en The process progress indicator (can be NULL). \~ -\return \ru Код завершения операции. - \en Code of the operation termination. \~ -\ingroup ACIS_Exchange -*/ -CONV_FUNC (MbeConvResType ) SATWrite ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator ); -/** \brief \ru Прочитать файл формата IGES. - \en Read a file of IGES format. \~ -\param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ -\param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ -\param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ -\return \ru Код завершения операции. - \en Code of the operation termination. \~ -\ingroup IGES_Exchange -*/ -CONV_FUNC (MbeConvResType ) IGSRead ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0 ); - -/** \brief \ru Записать файл формата IGES. - \en Write a file of IGES format. \~ -\param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ -\param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ -\param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ -\return \ru Код завершения операции. - \en Code of the operation termination. \~ -\ingroup IGES_Exchange -*/ -CONV_FUNC (MbeConvResType ) IGSWrite ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0 ); - -/** \brief \ru Прочитать файл формата JT. - \en Read a file of JT format. \~ -\param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ -\param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ -\param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ -\return \ru Код завершения операции. - \en Code of the operation termination. \~ -\ingroup IGES_Exchange -*/ -CONV_FUNC (MbeConvResType ) JTRead ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0 ); - -/** \brief \ru Записать файл формата JT. - \en Write a file of JT format. \~ -\param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ -\param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ -\param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ -\return \ru Код завершения операции. - \en Code of the operation termination. \~ -\ingroup IGES_Exchange -*/ -CONV_FUNC (MbeConvResType ) JTWrite ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0 ); - -/** \brief \ru Прочитать файл формата Parasolid. - \en Read a file of Parasolid format. \~ -\param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ -\param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ -\param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~\~ -\return \ru Код завершения операции. - \en Code of the operation termination. \~ -\ingroup Parasolid_Exchange -*/ -CONV_FUNC (MbeConvResType ) XTRead ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0 ); - -/** \brief \ru Записать файл формата Parasolid. - \en Write a file of Parasolid format. \~ -\param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ -\param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ -\param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ -\return \ru Код завершения операции. - \en Code of the operation termination. \~ -\ingroup Parasolid_Exchange -*/ -CONV_FUNC (MbeConvResType ) XTWrite ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0 ); - -/** \brief \ru Прочитать файл формата STEP. - \en Read a file of STEP format. \~ -\param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ -\param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ -\param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ -\return \ru Код завершения операции. - \en Code of the operation termination. \~ -\ingroup STEP_Exchange -*/ -CONV_FUNC (MbeConvResType ) STEPRead ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0 ); - -/** \brief \ru Записать файл формата STEP. - \en Write a file of STEP format. \~ -\param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ -\param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ -\param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ -\return \ru Код завершения операции. - \en Code of the operation termination. \~ -\ingroup STEP_Exchange -*/ -CONV_FUNC (MbeConvResType ) STEPWrite( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0 ); - -/** \brief \ru Прочитать файл формата STL. - \en Read a file of STL format. \~ -\param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ -\param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ -\param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ -\return \ru Код завершения операции. - \en Code of the operation termination. \~ -\ingroup STL_Exchange -*/ -CONV_FUNC (MbeConvResType ) STLRead ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0 ); - -/** \brief \ru Записать файл формата STL. - \en Write a file of STL format. \~ -\param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ -\param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ -\param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ -\return \ru Код завершения операции. - \en Code of the operation termination. \~ -\ingroup STL_Exchange -*/ -CONV_FUNC (MbeConvResType ) STLWrite ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0 ); - -/** \brief \ru Прочитать файл формата VRML. - \en Read a file of VRML format. \~ -\param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ -\param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ -\param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ -\return \ru Код завершения операции. - \en Code of the operation termination. \~ -\ingroup VRML_Exchange -*/ -CONV_FUNC (MbeConvResType ) VRMLRead ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0 ); - -/** \brief \ru Прочитать файл формата GRDECL. - \en Read a file of GRDECL format. \~ -\param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ -\param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ -\param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ -\return \ru Код завершения операции. - \en Code of the operation termination. \~ -\ingroup VRML_Exchange -*/ -CONV_FUNC (MbeConvResType ) GRDECLRead ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0 ); - -/** \brief \ru Записать файл формата GRDECL. - \en Write a file of GRDECL format. \~ -\param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ -\param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ -\param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ -\return \ru Код завершения операции. - \en Code of the operation termination. \~ -\ingroup STL_Exchange -*/ -CONV_FUNC (MbeConvResType ) GRDECLWrite ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0 ); - -/** \brief \ru Записать файл формата VRML. - \en Write a file of VRML format. \~ -\param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ -\param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ -\param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ -\return \ru Код завершения операции. - \en Code of the operation termination. \~ -\ingroup VRML_Exchange -*/ -CONV_FUNC (MbeConvResType ) VRMLWrite( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0 ); - - -/** \brief \ru Прочитать файл с облаком точек в формате ASCII. - \en Read a file of ASCII Point Cloud format. \~ -\param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ -\param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ -\param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ -\return \ru Код завершения операции. - \en Code of the operation termination. \~ -\ingroup ASCII_Exchange -*/ -CONV_FUNC (MbeConvResType ) ASCIIPointCloudRead ( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0 ); - - -/** \brief \ru Записать файл с облаком точек в формате ASCII.. - \en Write a point cloud file of ASCII format. \~ -\param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ -\param[in] idoc - \ru Реализация интерфейса документа. - \en Implementation of document interface. \~ -\param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ -\return \ru Код завершения операции. - \en Code of the operation termination. \~ -\ingroup ASCII_Exchange -*/ -CONV_FUNC (MbeConvResType ) ASCIIPointCloudWrite( IConvertorProperty3D & prop, ItModelDocument & idoc, IProgressIndicator * indicator = 0 ); - - -namespace c3d { - - /** \brief \ru Импортировать данные из буфера в модель. - \en Import data from buffer into model. \~ - \param[out] model - \ru Модель. - \en The model. \~ - \param[in] data - \ru Буфер. - \en Buffer. \~ - \param[in] length - \ru Размер буфера. - \en Buffer size. \~ - \param[in] modelFormat - \ru Формат модели. - \en Model format. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup Exchange_Interface - */ - DEPRECATE_DECLARE CONV_FUNC (MbeConvResType) ImportFromBuffer( MbModel & model, - const char* data, - size_t length, - MbeModelExchangeFormat modelFormat, - IConvertorProperty3D * prop = 0, - IProgressIndicator * indicator = 0 ); - - /** \brief \ru Импортировать данные из буфера в модель. - \en Import data from buffer into model. \~ - \param[out] item - \ru Замещаемый элемент. - \en The item to replace. \~ - \param[in] data - \ru Буфер. - \en Buffer. \~ - \param[in] length - \ru Размер буфера. - \en Buffer size. \~ - \param[in] modelFormat - \ru Формат модели. - \en Model format. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup Exchange_Interface - */ - DEPRECATE_DECLARE CONV_FUNC(MbeConvResType) ImportFromBuffer( c3d::ItemSPtr& item, - const char* data, - size_t length, - MbeModelExchangeFormat modelFormat, - IConvertorProperty3D* prop = NULL, IProgressIndicator* indicator = NULL); - - /** \brief \ru Экспортировать модель в буфер. - \en Export model into buffer. \~ - \param[in] model - \ru Модель. - \en The model. \~ - \param[in] modelFormat - \ru Формат модели. - \en Model format. \~ - \param[out] data - \ru Буфер. - \en Buffer. \~ - \param[out] length - \ru Размер буфера. - \en Buffer size. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup Exchange_Interface - */ - DEPRECATE_DECLARE CONV_FUNC (MbeConvResType) ExportIntoBuffer( MbModel & model, - MbeModelExchangeFormat modelFormat, - char*& data, - size_t& length, - IConvertorProperty3D * prop = 0, - IProgressIndicator * indicator = 0 ); - - - /** \brief \ru Экспортировать модель в буфер. - \en Export model into buffer. \~ - \param[in] item - \ru Экспортируемый элемент. - \en The item to export. \~ - \param[in] modelFormat - \ru Формат модели. - \en Model format. \~ - \param[out] data - \ru Буфер. - \en Buffer. \~ - \param[out] length - \ru Размер буфера. - \en Buffer size. \~ - \param[in] prop - \ru Реализация интерфейса свойств конвертера. - \en Implementation of converter's properties interface. \~ - \param[in] indicator - \ru Индикатор хода процесса. - \en The process progress indicator. \~ - \return \ru Код завершения операции. - \en Code of the operation termination. \~ - \ingroup Exchange_Interface - */ - DEPRECATE_DECLARE CONV_FUNC(MbeConvResType) ExportIntoBuffer( MbItem& item, MbeModelExchangeFormat modelFormat, - char*& data, - size_t& length, - IConvertorProperty3D* prop = NULL, IProgressIndicator* indicator = NULL); - -} - - -/** \} */ - - -#endif // __CONV_I_CONVERTER_H +//////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Общий интерфейс конвертера. + \en Common API of the converter. \~ + \details \ru Функции чтения и записи в буфер и файл с автоопределением формата по + расширению файла, класс-конвертер с методами для каждого формата и возможностью + подключения плагина, функции для работы с каждым форматом. + \en Functions for export and import from buffer and file using file's extension + for format detection, class of converter for format-specific methods and API for + plugin, format-specific import and export functions. \~ +*/ +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __CONV_I_CONVERTER_H +#define __CONV_I_CONVERTER_H + +#include +#include +#include + +#include + +class IProgressIndicator; +struct IScaleRequestor; +class ItModelDocument; +class IConvertorProperty3D; + +/** + \addtogroup Exchange_Interface + \{ +*/ + +//------------------------------------------------------------------------------ +/** \brief \ru Обменный формат модели. +\en Model exchange format.\~ +\ingroup Data_Interface +*/ +// --- +enum MbeModelExchangeFormat { + mxf_autodetect, ///< \ru Интерпретировать содержимое по расширению файла. \en File extension defines format. + mxf_ACIS, ///< \ru Интерпретировать содержимое как ACIS (.sat). \en Read data from buffer as ACIS (.sat). + mxf_IGES, ///< \ru Интерпретировать содержимое как IGES (.igs или .iges). \en Read data from buffer as IGES (.igs or .iges). + mxf_JT, ///< \ru Интерпретировать содержимое как JT (.jt). \en Read data from buffer as JT (.jt). + mxf_Parasolid, ///< \ru Интерпретировать содержимое как Parasolid (.x_t, .x_b, .xmt_txt, .xmp_txt, .xmt_bin или .xmp_bin ). \en Read data from buffer as Parasolid (.x_t, .x_b, .xmt_txt, .xmp_txt, .xmt_bin or .xmp_bin ). + mxf_STEP, ///< \ru Интерпретировать содержимое как STEP (.stp или .step). \en Read data from buffer as STEP (.stp or .step). + mxf_STL, ///< \ru Интерпретировать содержимое как STL (.stl). \en Read data from buffer as STL (.stl). + mxf_VRML, ///< \ru Интерпретировать содержимое как VRML (.wrl). \en Read data from buffer as VRML (.wrl). + mxf_GRDECL, ///< \ru Интерпретировать содержимое как GRDECL (.grdecl). \en Read data from buffer as GRDECL (.grdecl). + mxf_ASCIIPoint, ///< \ru Интерпретировать содержимое как облако точек в ASCII (.txt, .asc или .xyz). \en Read data from buffer as ASCII point cloud (.txt, .asc or .xyz). + mxf_C3D, ///< \ru Интерпретировать содержимое как C3D (.c3d). \en Read data from buffer as C3D (.c3d). +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Результат конвертирования. +\en Result of converting operation. +\ingroup Data_Interface +*/ +// --- +enum MbeConvResType { + cnv_Success = 0, ///< \ru Успешное завершение. \en Success. + cnv_Error, ///< \ru Ошибка в процессе конвертирования. \en Error. + cnv_UserCanceled, ///< \ru Процесс прерван пользователем. \en Process interrupted by user. + cnv_NoBody, ///< \ru Не найдено тел. \en No solids found. + cnv_NoObjects, ///< \ru Не найдено объектов. \en No objects found. + cnv_FileOpenError, ///< \ru Ошибка открытия файла. \en File open error. + cnv_FileWriteError, ///< \ru Ошибка записи файла. \en File write error. + cnv_FileDeleteError, ///< \ru Ошибка удаления файла. \en Could not delete file. + cnv_ImpossibleReadAssembly,///< \ru Не поддерживает работу со сборками. \en Assemblies are not supported. + cnv_LicenseNotFound, ///< \ru Ошибка получения лицензии. \en License check failure. + cnv_NotEnoughMemory, ///< \ru Недостаточно памяти. \en Not enough memory. + cnv_UnknownExtension ///< \ru Неизвестное расширение файла. \en Unknown file extenstion. +}; + + +namespace c3d { + + class C3DExchangeBuffer; + + typedef std::map optionNameValuePairs_t; ///< \ru Набор имеованных значений опций. \en The container of named values of options. + + /** \brief \ru Прочитать файл обменного формата в модель. + \en Read a file of an exchange format into model. \~ + \details \ru Если свойства конвертера заданы, аргумент fileName игнорируется, а имя файла берётся из свойств конвертера. + В противном случае импорт идёт с умолчательными параметрами, соответствующими реализации ConvConvertorProperty3D. \~ + \en The fileName argument is not used if converter properties are defined obviously, file path comes from the FullFilePath + method. Otherwise default parameters corresponding ConvConvertorProperty3D implementation are used for import. + \param[out] model - \ru Модель. + \en The model. \~ + \param[in] filePath - \ru Путь файла. + \en File path. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup Exchange_Interface + */ + CONV_FUNC( MbeConvResType ) ImportFromFile( MbModel& model, + const path_string& fileName, + IConvertorProperty3D* prop = c3d_null, + IProgressIndicator* indicator = c3d_null ); + + + /** \brief \ru Прочитать файл обменного формата в элемент. + \en Read a file of an exchange format into element. \~ + \details \ru Если свойства конвертера заданы, аргумент fileName игнорируется, а имя файла берётся из свойств конвертера. + В противном случае импорт идёт с умолчательными параметрами, соответствующими реализации ConvConvertorProperty3D. \~ + \en The fileName argument is not used if converter properties are defined obviously, file path comes from the FullFilePath + method. Otherwise default parameters corresponding ConvConvertorProperty3D implementation are used for import. + \param[out] item - \ru Замещаемый элемент. + \en The element to replace. \~ + \param[in] filePath - \ru Путь файла. + \en File path. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup Exchange_Interface + */ + CONV_FUNC( MbeConvResType ) ImportFromFile( c3d::ItemSPtr& item, + const path_string& filePath, + IConvertorProperty3D* prop = c3d_null, + IProgressIndicator* indicator = c3d_null ); + + /** \brief \ru Прочитать файл обменного формата в модель. + \en Read a file of an exchange format into model. \~ + \details \ru Если свойства конвертера заданы, аргумент fileName игнорируется, а имя файла берётся из свойств конвертера. + В противном случае импорт идёт с умолчательными параметрами, соответствующими реализации ConvConvertorProperty3D. \~ + \en The fileName argument is not used if converter properties are defined obviously, file path comes from the FullFilePath + method. Otherwise default parameters corresponding ConvConvertorProperty3D implementation are used for import. + \param[out] mDoc - \ru Модельный документ. + \en The model. \~ + \param[in] filePath - \ru Путь файла. + \en File path. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup Exchange_Interface + */ + CONV_FUNC( MbeConvResType ) ImportFromFile( ItModelDocument& mDoc, + const path_string& filePath, + IConvertorProperty3D* prop = c3d_null, + IProgressIndicator* indicator = c3d_null ); + + /** \brief \ru Записать модель в файл обменного формата. + \en Write the model into an exchange format file. \~ + \details \ru Если свойства конвертера заданы, аргумент fileName игнорируется, а имя файла берётся из свойств конвертера. + В противном случае экспорт идёт с умолчательными параметрами, соответствующими реализации ConvConvertorProperty3D. \~ + \en The fileName argument is not used if converter properties are defined obviously, file path comes from the FullFilePath + method. Otherwise default parameters corresponding ConvConvertorProperty3D implementation are used for export. + \param[out] model - \ru Модель. + \en The model. \~ + \param[in] filePath - \ru Путь файла. + \en File path. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup Exchange_Interface + */ + CONV_FUNC( MbeConvResType ) ExportIntoFile( MbModel& model, + const path_string& filePath, + IConvertorProperty3D* prop = c3d_null, + IProgressIndicator* indicator = c3d_null ); + + /** \brief \ru Записать модель в файл обменного формата. + \en Write the model into an exchange format file. \~ + \details \ru Если свойства конвертера заданы, аргумент fileName игнорируется, а имя файла берётся из свойств конвертера. + В противном случае экспорт идёт с умолчательными параметрами, соответствующими реализации ConvConvertorProperty3D. \~ + \en The fileName argument is not used if converter properties are defined obviously, file path comes from the FullFilePath + method. Otherwise default parameters corresponding ConvConvertorProperty3D implementation are used for export. + \param[out] model - \ru Экспортируемый лемент. + \en The exported element. \~ + \param[in] filePath - \ru Путь файла. + \en File path. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup Exchange_Interface + */ + CONV_FUNC( MbeConvResType ) ExportIntoFile( MbItem& item, + const path_string& filePath, + IConvertorProperty3D* prop = c3d_null, + IProgressIndicator* indicator = c3d_null ); + + /** \brief \ru Записать модельный документ в файл обменного формата. + \en Write the model into an exchange format file. \~ + \details \ru Если свойства конвертера заданы, аргумент fileName игнорируется, а имя файла берётся из свойств конвертера. + В противном случае экспорт идёт с умолчательными параметрами, соответствующими реализации ConvConvertorProperty3D. \~ + \en The fileName argument is not used if converter properties are defined obviously, file path comes from the FullFilePath + method. Otherwise default parameters corresponding ConvConvertorProperty3D implementation are used for export. + \param[in] mDoc - \ru Экспортируемый модельный документ. + \en The exported model document. \~ + \param[in] filePath - \ru Путь файла. + \en File path. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup Exchange_Interface + */ + CONV_FUNC( MbeConvResType ) ExportIntoFile( ItModelDocument& mDoc, + const path_string& filePath, + IConvertorProperty3D* prop = c3d_null, + IProgressIndicator* indicator = c3d_null ); + + + /** \brief \ru Импортировать данные из буфера в модель. + \en Import data from buffer into model. \~ + \param[out] model - \ru Модель. + \en The model. \~ + \param[in] buffer - \ru Буфер. + \en Buffer. \~ + \param[in] modelFormat - \ru Формат модели. + \en Model format. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup Exchange_Interface + */ + CONV_FUNC( MbeConvResType ) ImportFromBuffer( MbModel& model, + const C3DExchangeBuffer& buffer, + MbeModelExchangeFormat modelFormat, + IConvertorProperty3D* prop = c3d_null, + IProgressIndicator* indicator = c3d_null ); + + + /** \brief \ru Импортировать данные из буфера в модель. + \en Import data from buffer into model. \~ + \param[out] item - \ru Замещаемый элемент. + \en The item to replace. \~ + \param[in] buffer - \ru Буфер. + \en Buffer. \~ + \param[in] modelFormat - \ru Формат модели. + \en Model format. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup Exchange_Interface + */ + CONV_FUNC( MbeConvResType ) ImportFromBuffer( c3d::ItemSPtr& item, + const C3DExchangeBuffer& buffer, + MbeModelExchangeFormat modelFormat, + IConvertorProperty3D* prop = c3d_null, + IProgressIndicator* indicator = c3d_null ); + + + /** \brief \ru Экспортировать модель в буфер. + \en Export model into buffer. \~ + \param[in] model - \ru Модель. + \en The model. \~ + \param[in] modelFormat - \ru Формат модели. + \en Model format. \~ + \param[out] buffer - \ru Буфер. + \en Buffer. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup Exchange_Interface + */ + CONV_FUNC( MbeConvResType ) ExportIntoBuffer( MbModel& model, + MbeModelExchangeFormat modelFormat, + C3DExchangeBuffer& buffer, + IConvertorProperty3D* prop = c3d_null, + IProgressIndicator* indicator = c3d_null ); + + + /** \brief \ru Экспортировать модель в буфер. + \en Export model into buffer. \~ + \param[in] item - \ru Экспортируемый элемент. + \en The item to export. \~ + \param[in] modelFormat - \ru Формат модели. + \en Model format. \~ + \param[out] buffer - \ru Буфер. + \en Buffer. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup Exchange_Interface + */ + CONV_FUNC( MbeConvResType ) ExportIntoBuffer( MbItem& item, + MbeModelExchangeFormat modelFormat, + C3DExchangeBuffer& buffer, + IConvertorProperty3D* prop = c3d_null, + IProgressIndicator* indicator = c3d_null ); + + + //------------------------------------------------------------------------------ + /** \brief \ru Буфер для обмена. + \en Memory buffer for data exchange. \~ + \details \ru Обеспечивает обмен данными через оперативную память с контролем выделения и освобождения. + \en Prvides data exchange with memory allocation and deallocation control. \~ + \ingroup Exchange_Interface + */ + class C3DExchangeBuffer { + char* data; ///< \ru Адрес буфера. \en Buffer address. + size_t count; ///< \ru Число байт. \en Bytes count. + public: + + // \ru Конструктор. \en Constructor. + C3DExchangeBuffer() + : data( c3d_null ) + , count( 0 ) { + } + + // \ru Деструктор. \en Destructor. + ~C3DExchangeBuffer() { + Clear(); + } + + // \ru Очистить. \en Clear. + inline void Clear() { + delete[] data; + count = 0; + } + + // \ru Инициализировать буфер. \en Initialize buffer. + inline void Init( const char* init, size_t size ) { + Clear(); + data = new char[size]; + count = size; + ::memcpy( data, init, count ); + } + + // \ru Инициализировать буфер. \en Initialize buffer. + inline void Swap( char*& init, size_t& size ) { + std::swap( init, data ); + std::swap( size, count ); + } + + // \ru Получить адрес буфера. \en Get buffer address. + inline const char* Data() const { + return data; + } + + // \ru Получить число байт. \en Get count of bytes. + inline size_t Count() const { + return count; + } + }; +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Интерфейс конвертера. + \en Converter's interface. \~ + \details \ru Интерфейс конвертера реализует методы экспорта модели в файлы обменных форматов + и импорта из них. + \en Converter's interface implements methods of export of the model to files of exchange formats + and import from them. \~ +*/ +class IConvertor3D { +public: + virtual ~IConvertor3D() {} + +public: + /** \brief \ru Прочитать файл формата SAT. + \en Read a file of SAT format. \~ + \details \ru Прочитать файл формата SAT или указанный поток. + Если задан поток, то запись производится в присланный поток. + Если поток не задан (нулевой), то открывается поток для файла, заданного в свойствах конвертера. \n + \en Read a file of SAT format or a specified stream. + If a stream is specified, then the record is performed to the given stream. + If a stream is not specified (null), then a stream is being opened for file specified in the properties of the converter. \n \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ + \param[in] stream - \ru Поток, из которого производится чтение (может быть c3d_null). + \en Stream from which reading is performed (can be c3d_null). \~ + \param[in] indicator - \ru Индикатор хода процесса (может быть c3d_null). + \en The process progress indicator (can be c3d_null). \~ + \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей. + \en Dialog of request for stitching the surfaces. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup ACIS_Exchange + */ + virtual MbeConvResType SATRead( IConvertorProperty3D& prop, ItModelDocument& idoc, std::iostream* stream, IProgressIndicator* indicator, MbRefItem* qeuryStitch ) = 0; + + /** \brief \ru Записать файл формата SAT. + \en Write file of SAT format. \~ + \details \ru Записать файл формата SAT или указанный поток. + Если задан поток, то запись производится в присланный поток. + Если поток не задан (нулевой), то открывается поток для файла, заданного в свойствах конвертера. \n + \en Write file of SAT format or the specified stream. + If a stream is specified, then the record is performed to the given stream. + If a stream is not specified (null), then a stream is being opened for file specified in the properties of the converter. \n \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ + \param[in] stream - \ru Поток, в который производится запись (может быть c3d_null). + \en Stream in which the record is performed (can be c3d_null). \~ + \param[in] indicator - \ru Индикатор хода процесса (может быть c3d_null). + \en The process progress indicator (can be c3d_null). \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup ACIS_Exchange + */ + virtual MbeConvResType SATWrite( IConvertorProperty3D& prop, ItModelDocument& idoc, std::iostream* stream, IProgressIndicator* indicator ) = 0; + + /** \brief \ru Прочитать файл формата SAT. + \en Read a file of SAT format. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей. + \en Dialog of request for stitching the surfaces. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup ACIS_Exchange + */ + virtual MbeConvResType SATRead( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0, MbRefItem* qeuryStitch = 0 ) = 0; + + /** \brief \ru Записать файл формата SAT. + \en Write file of SAT format. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). + \en Dialog of request for stitching the surfaces (not used). \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup ACIS_Exchange + */ + virtual MbeConvResType SATWrite( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0, MbRefItem* qeuryStitch = 0 ) = 0; + + /** \brief \ru Прочитать файл формата IGES. + \en Read a file of IGES format. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей. + \en Dialog of request for stitching the surfaces. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup IGES_Exchange + */ + virtual MbeConvResType IGSRead( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0, MbRefItem* qeuryStitch = 0 ) = 0; + + /** \brief \ru Записать файл формата IGES. + \en Write a file of IGES format. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). + \en Dialog of request for stitching the surfaces (not used). \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup IGES_Exchange + */ + virtual MbeConvResType IGSWrite( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0, MbRefItem* qeuryStitch = 0 ) = 0; + + /** \brief \ru Прочитать файл формата JT. + \en Read a file of JT format. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей. + \en Dialog of request for stitching the surfaces. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup IGES_Exchange + */ + virtual MbeConvResType JTRead( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0, MbRefItem* qeuryStitch = 0 ) = 0; + + /** \brief \ru Записать файл формата JT. + \en Write a file of JT format. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). + \en Dialog of request for stitching the surfaces (not used). \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup IGES_Exchange + */ + virtual MbeConvResType JTWrite( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0, MbRefItem* qeuryStitch = 0 ) = 0; + + /** \brief \ru Прочитать файл формата Parasolid. + \en Read a file of Parasolid format. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей. + \en Dialog of request for stitching the surfaces. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup Parasolid_Exchange + */ + virtual MbeConvResType XTRead( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0, MbRefItem* qeuryStitch = 0 ) = 0; + + /** \brief \ru Записать файл формата Parasolid. + \en Write a file of Parasolid format. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей. + \en Dialog of request for stitching the surfaces. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup Parasolid_Exchange + */ + virtual MbeConvResType XTWrite( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0, MbRefItem* qeuryStitch = 0 ) = 0; + + /** \brief \ru Прочитать файл формата STEP. + \en Read a file of STEP format. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). + \en Dialog of request for stitching the surfaces (not used). \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup STEP_Exchange + */ + virtual MbeConvResType STEPRead( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0, MbRefItem* qeuryStitch = 0 ) = 0; + + /** \brief \ru Записать файл формата STEP. + \en Write a file of STEP format. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). + \en Dialog of request for stitching the surfaces (not used). \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup STEP_Exchange + */ + virtual MbeConvResType STEPWrite( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0, MbRefItem* qeuryStitch = 0 ) = 0; + + /** \brief \ru Прочитать файл формата STL. + \en Read a file of STL format. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). + \en Dialog of request for stitching the surfaces (not used). \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup STL_Exchange + */ + virtual MbeConvResType STLRead( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0, MbRefItem* qeuryStitch = 0 ) = 0; + + /** \brief \ru Записать файл формата STL. + \en Write a file of STL format. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). + \en Dialog of request for stitching the surfaces (not used). \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup STL_Exchange + */ + virtual MbeConvResType STLWrite( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0, MbRefItem* qeuryStitch = 0 ) = 0; + + /** \brief \ru Прочитать файл формата VRML. + \en Read a file of VRML format. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). + \en Dialog of request for stitching the surfaces (not used). \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup VRML_Exchange + */ + virtual MbeConvResType VRMLRead( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0, MbRefItem* qeuryStitch = 0 ) = 0; + + /** \brief \ru Записать файл формата VRML. + \en Write a file of VRML format. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). + \en Dialog of request for stitching the surfaces (not used). \~ + \param[in] devSag - \ru Угловой шаг для расчёта триангуляционной сетки. + \en Deviate sag requiref for grid calculateion. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup VRML_Exchange + */ + virtual MbeConvResType VRMLWrite( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0, MbRefItem* qeuryStitch = 0 ) = 0; + + /** \brief \ru Прочитать файл формата GRDECL. + \en Read a file of GRDECL format. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). + \en Dialog of request for stitching the surfaces (not used). \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup VRML_Exchange + */ + virtual MbeConvResType GRDECLRead( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0, MbRefItem* qeuryStitch = 0 ) = 0; + + /** \brief \ru Записать файл формата GRDECL. + \en Write a file of GRDECL format. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). + \en Dialog of request for stitching the surfaces (not used). \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup STL_Exchange + */ + virtual MbeConvResType GRDECLWrite( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0, MbRefItem* qeuryStitch = 0 ) = 0; + + /** \brief \ru Прочитать файл с облаком точек в формате ASCII. + \en Read a file of ASCII Point Cloud format. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). + \en Dialog of request for stitching the surfaces (not used). \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup ASCII_Exchange + */ + virtual MbeConvResType ASCIIPointCloudRead( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0, MbRefItem* qeuryStitch = 0 ) = 0; + + /** \brief \ru Записать файл с облаком точек в формате ASCII.. + \en Write a point cloud file of ASCII format. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \param[in] qeuryStitch - \ru Диалог запроса на сшивку поверхностей (не используется). + \en Dialog of request for stitching the surfaces (not used). \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup ASCII_Exchange + */ + virtual MbeConvResType ASCIIPointCloudWrite( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0, MbRefItem* qeuryStitch = 0 ) = 0; + + + /** \brief \ru Загрузить плагин получения данных для построения модели. + \en Load plugin for getting information necessary to build model. \~ + \note \ru Экспериментальное API. \en Expereimental API. \~ + \param[in] pluginName - \ru Имя подключаемого файла. + \en Name of the file to link. \~ + \param[in] thirdPartyLocation - \ru Расположение стороннего компонента, который подключается с помощью плагина. + \en Location of the third-party component linked by plugin. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup ASCII_Exchange + */ + virtual MbeConvResType LoadForeignReader( const c3d::path_string& pluginName, const c3d::path_string& thirdPartyLocation = c3d::path_string() ) = 0; + + /** \brief \ru Загрузить плагин получения данных для построения модели. + \en Load plugin for getting information necessary to build model. \~ + \details \ru Описание специфичных для плагина настроек следует получить у поставщика комопонента. + \en The description of plugin-specific settings shoud be taken from the plugin's vendor. \~ + \note \ru Экспериментальное API. \en Expereimental API. \~ + \param[in] pluginName - \ru Имя подключаемого файла. + \en Name of the file to link. \~ + \param[in] pluginSpecificSettings - \ru Специфические для плагина настройки. + \en Plugin-specific settings. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup ASCII_Exchange + */ + virtual MbeConvResType LoadForeignReader( const c3d::path_string& pluginName, const c3d::optionNameValuePairs_t& pluginSpecificSettings ) = 0; + + + /** \brief \ru Отключить загруженный плагин получения данных для построения модели. + \en Release the loaded plugin for getting information necessary to build model. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup ASCII_Exchange + */ + virtual MbeConvResType ReleaseForeignReader() = 0; + + /** \brief \ru Прочитать файл с использованием плагина. + \en Read a file using plugin. \~ + \param[in] path - \ru ПУть к файлу, который нужно прочитать. + \en Path of the file to read. \~ + \param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup ASCII_Exchange + */ + virtual MbeConvResType ImportForeign( const c3d::path_string& path, ItModelDocument& idoc, IConvertorProperty3D* prop = 0, IProgressIndicator* indicator = 0 ) = 0; + +}; // IConvertor3D + + +//------------------------------------------------------------------------------ +/** \brief \ru Получить интерфейс конвертера. + \en Get the converter interface. \~ +\ingroup Exchange_Interface +*/ +CONV_FUNC( IConvertor3D* ) GetConvertor3D(); + + +//------------------------------------------------------------------------------ +/** \brief \ru Освободить интерфейс конвертера. + \en Release the converter interface. \~ +\ingroup Exchange_Interface +*/ +CONV_FUNC( void ) ReleaseConvertor3D( IConvertor3D* ); + + +/** \brief \ru Прочитать файл формата SAT. + \en Read a file of SAT format. \~ +\param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ +\param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ +\param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ +\return \ru Код завершения операции. + \en Code of the operation termination. \~ +\ingroup ACIS_Exchange +*/ +CONV_FUNC( MbeConvResType ) SATRead( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator ); + +/** \brief \ru Записать файл формата SAT. + \en Write file of SAT format. \~ +\details \ru Записать файл формата SAT или указанный поток. + Если задан поток, то запись производится в присланный поток. + Если поток не задан (нулевой), то открывается поток для файла, заданного в свойствах конвертера. \n + \en Write file of SAT format or the specified stream. + If a stream is specified, then the record is performed to the given stream. + If a stream is not specified (null), then a stream is being opened for file specified in the properties of the converter. \n \~ +\param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ +\param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ +\param[in] indicator - \ru Индикатор хода процесса (может быть c3d_null). + \en The process progress indicator (can be c3d_null). \~ +\return \ru Код завершения операции. + \en Code of the operation termination. \~ +\ingroup ACIS_Exchange +*/ +CONV_FUNC( MbeConvResType ) SATWrite( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator ); +/** \brief \ru Прочитать файл формата IGES. + \en Read a file of IGES format. \~ +\param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ +\param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ +\param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ +\return \ru Код завершения операции. + \en Code of the operation termination. \~ +\ingroup IGES_Exchange +*/ +CONV_FUNC( MbeConvResType ) IGSRead( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0 ); + +/** \brief \ru Записать файл формата IGES. + \en Write a file of IGES format. \~ +\param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ +\param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ +\param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ +\return \ru Код завершения операции. + \en Code of the operation termination. \~ +\ingroup IGES_Exchange +*/ +CONV_FUNC( MbeConvResType ) IGSWrite( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0 ); + +/** \brief \ru Прочитать файл формата JT. + \en Read a file of JT format. \~ +\param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ +\param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ +\param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ +\return \ru Код завершения операции. + \en Code of the operation termination. \~ +\ingroup IGES_Exchange +*/ +CONV_FUNC( MbeConvResType ) JTRead( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0 ); + +/** \brief \ru Записать файл формата JT. + \en Write a file of JT format. \~ +\param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ +\param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ +\param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ +\return \ru Код завершения операции. + \en Code of the operation termination. \~ +\ingroup IGES_Exchange +*/ +CONV_FUNC( MbeConvResType ) JTWrite( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0 ); + +/** \brief \ru Прочитать файл формата Parasolid. + \en Read a file of Parasolid format. \~ +\param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ +\param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ +\param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~\~ +\return \ru Код завершения операции. + \en Code of the operation termination. \~ +\ingroup Parasolid_Exchange +*/ +CONV_FUNC( MbeConvResType ) XTRead( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0 ); + +/** \brief \ru Записать файл формата Parasolid. + \en Write a file of Parasolid format. \~ +\param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ +\param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ +\param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ +\return \ru Код завершения операции. + \en Code of the operation termination. \~ +\ingroup Parasolid_Exchange +*/ +CONV_FUNC( MbeConvResType ) XTWrite( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0 ); + +/** \brief \ru Прочитать файл формата STEP. + \en Read a file of STEP format. \~ +\param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ +\param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ +\param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ +\return \ru Код завершения операции. + \en Code of the operation termination. \~ +\ingroup STEP_Exchange +*/ +CONV_FUNC( MbeConvResType ) STEPRead( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0 ); + +/** \brief \ru Записать файл формата STEP. + \en Write a file of STEP format. \~ +\param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ +\param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ +\param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ +\return \ru Код завершения операции. + \en Code of the operation termination. \~ +\ingroup STEP_Exchange +*/ +CONV_FUNC( MbeConvResType ) STEPWrite( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0 ); + +/** \brief \ru Прочитать файл формата STL. + \en Read a file of STL format. \~ +\param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ +\param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ +\param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ +\return \ru Код завершения операции. + \en Code of the operation termination. \~ +\ingroup STL_Exchange +*/ +CONV_FUNC( MbeConvResType ) STLRead( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0 ); + +/** \brief \ru Записать файл формата STL. + \en Write a file of STL format. \~ +\param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ +\param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ +\param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ +\return \ru Код завершения операции. + \en Code of the operation termination. \~ +\ingroup STL_Exchange +*/ +CONV_FUNC( MbeConvResType ) STLWrite( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0 ); + +/** \brief \ru Прочитать файл формата VRML. + \en Read a file of VRML format. \~ +\param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ +\param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ +\param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ +\return \ru Код завершения операции. + \en Code of the operation termination. \~ +\ingroup VRML_Exchange +*/ +CONV_FUNC( MbeConvResType ) VRMLRead( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0 ); + +/** \brief \ru Прочитать файл формата GRDECL. + \en Read a file of GRDECL format. \~ +\param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ +\param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ +\param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ +\return \ru Код завершения операции. + \en Code of the operation termination. \~ +\ingroup VRML_Exchange +*/ +CONV_FUNC( MbeConvResType ) GRDECLRead( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0 ); + +/** \brief \ru Записать файл формата GRDECL. + \en Write a file of GRDECL format. \~ +\param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ +\param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ +\param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ +\return \ru Код завершения операции. + \en Code of the operation termination. \~ +\ingroup STL_Exchange +*/ +CONV_FUNC( MbeConvResType ) GRDECLWrite( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0 ); + +/** \brief \ru Записать файл формата VRML. + \en Write a file of VRML format. \~ +\param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ +\param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ +\param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ +\return \ru Код завершения операции. + \en Code of the operation termination. \~ +\ingroup VRML_Exchange +*/ +CONV_FUNC( MbeConvResType ) VRMLWrite( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0 ); + + +/** \brief \ru Прочитать файл с облаком точек в формате ASCII. + \en Read a file of ASCII Point Cloud format. \~ +\param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ +\param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ +\param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ +\return \ru Код завершения операции. + \en Code of the operation termination. \~ +\ingroup ASCII_Exchange +*/ +CONV_FUNC( MbeConvResType ) ASCIIPointCloudRead( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0 ); + + +/** \brief \ru Записать файл с облаком точек в формате ASCII.. + \en Write a point cloud file of ASCII format. \~ +\param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ +\param[in] idoc - \ru Реализация интерфейса документа. + \en Implementation of document interface. \~ +\param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ +\return \ru Код завершения операции. + \en Code of the operation termination. \~ +\ingroup ASCII_Exchange +*/ +CONV_FUNC( MbeConvResType ) ASCIIPointCloudWrite( IConvertorProperty3D& prop, ItModelDocument& idoc, IProgressIndicator* indicator = 0 ); + + +namespace c3d { + + /** \brief \ru Импортировать данные из буфера в модель. + \en Import data from buffer into model. \~ + \param[out] model - \ru Модель. + \en The model. \~ + \param[in] data - \ru Буфер. + \en Buffer. \~ + \param[in] length - \ru Размер буфера. + \en Buffer size. \~ + \param[in] modelFormat - \ru Формат модели. + \en Model format. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup Exchange_Interface + */ + DEPRECATE_DECLARE CONV_FUNC( MbeConvResType ) ImportFromBuffer( MbModel& model, + const char* data, + size_t length, + MbeModelExchangeFormat modelFormat, + IConvertorProperty3D* prop = 0, + IProgressIndicator* indicator = 0 ); + + /** \brief \ru Импортировать данные из буфера в модель. + \en Import data from buffer into model. \~ + \param[out] item - \ru Замещаемый элемент. + \en The item to replace. \~ + \param[in] data - \ru Буфер. + \en Buffer. \~ + \param[in] length - \ru Размер буфера. + \en Buffer size. \~ + \param[in] modelFormat - \ru Формат модели. + \en Model format. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup Exchange_Interface + */ + DEPRECATE_DECLARE CONV_FUNC( MbeConvResType ) ImportFromBuffer( c3d::ItemSPtr& item, + const char* data, + size_t length, + MbeModelExchangeFormat modelFormat, + IConvertorProperty3D* prop = c3d_null, IProgressIndicator* indicator = c3d_null ); + + /** \brief \ru Экспортировать модель в буфер. + \en Export model into buffer. \~ + \param[in] model - \ru Модель. + \en The model. \~ + \param[in] modelFormat - \ru Формат модели. + \en Model format. \~ + \param[out] data - \ru Буфер. + \en Buffer. \~ + \param[out] length - \ru Размер буфера. + \en Buffer size. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup Exchange_Interface + */ + DEPRECATE_DECLARE CONV_FUNC( MbeConvResType ) ExportIntoBuffer( MbModel& model, + MbeModelExchangeFormat modelFormat, + char*& data, + size_t& length, + IConvertorProperty3D* prop = 0, + IProgressIndicator* indicator = 0 ); + + + /** \brief \ru Экспортировать модель в буфер. + \en Export model into buffer. \~ + \param[in] item - \ru Экспортируемый элемент. + \en The item to export. \~ + \param[in] modelFormat - \ru Формат модели. + \en Model format. \~ + \param[out] data - \ru Буфер. + \en Buffer. \~ + \param[out] length - \ru Размер буфера. + \en Buffer size. \~ + \param[in] prop - \ru Реализация интерфейса свойств конвертера. + \en Implementation of converter's properties interface. \~ + \param[in] indicator - \ru Индикатор хода процесса. + \en The process progress indicator. \~ + \return \ru Код завершения операции. + \en Code of the operation termination. \~ + \ingroup Exchange_Interface + */ + DEPRECATE_DECLARE CONV_FUNC( MbeConvResType ) ExportIntoBuffer( MbItem& item, MbeModelExchangeFormat modelFormat, + char*& data, + size_t& length, + IConvertorProperty3D* prop = c3d_null, IProgressIndicator* indicator = c3d_null ); + +} + + +/** \} */ + + +#endif // __CONV_I_CONVERTER_H diff --git a/C3d/Include/conv_plugin_import.h b/C3d/Include/conv_plugin_import.h new file mode 100644 index 0000000..c3045ff --- /dev/null +++ b/C3d/Include/conv_plugin_import.h @@ -0,0 +1,827 @@ +//////////////////////////////////////////////////////////////////////////////// +/** +\file +\brief \ru API для передачи моделей, прочитанных сторонним модулем. +\en API for models read by 3d party component.\~ +\details \ru Определен интерфейс, который должен реализовать модуль и структуры +для передачи информации о модели, топологии, геометрии. +\en Declared API the module has to implement and structures for structure, +topology and geomentry transmission.\~ +*/ +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __CONV_PUGIN_IMPORT_H +#define __CONV_PUGIN_IMPORT_H + +#include + +//////////////////////////////////////////////////////////////////////////////// +// +// Dynamic-link library API +// +//////////////////////////////////////////////////////////////////////////////// + +//------------------------------------------------------------------------------ +/** \brief \ru Имена функций инициализации и завершения работы плагина. + \en Initialize and release functions of plugin.\~ +\ingroup Data_Interface +*/ +// --- +#define C3D_PLUGIN_INIT_SOURCE InitSource +#define C3D_PLUGIN_C_SET_PLUGIN_OPTION CSetPluginOption +#define C3D_PLUGIN_W_SET_PLUGIN_OPTION WSetPluginOption +#define C3D_PLUGIN_RELEASE_SOURCE ReleaseSource + +//------------------------------------------------------------------------------ +/** \brief \ru Имена функций инициализации и завершения работы плагина. + \en Initialize and release functions of plugin.\~ +\ingroup Data_Interface +*/ +// --- +#define C3D_PLUGIN_INIT_SOURCE_NAME "InitSource" +#define C3D_PLUGIN_C_SET_PLUGIN_OPTION_NAME "CSetPluginOption" +#define C3D_PLUGIN_W_SET_PLUGIN_OPTION_NAME "WSetPluginOption" +#define C3D_PLUGIN_RELEASE_SOURCE_NAME "ReleaseSource" + + +struct ObModelSource; + + +//------------------------------------------------------------------------------ +/** \brief \ru Объявление функций инициализации и завершения работы плагина. + \en Declare initialize and release functions of plugin.\~ +\ingroup Data_Interface +*/ +// --- +#ifdef WIN32 +#define C3D_PLUGIN_INIT_EXPORT_DECLARE extern "C" __declspec( dllexport ) ObModelSource* _cdecl C3D_PLUGIN_INIT_SOURCE ( const char*, const char* ); +#define C3D_PLUGIN_C_SET_PLUGIN_OPTION_DECLARE extern "C" __declspec( dllexport ) void _cdecl C3D_PLUGIN_C_SET_PLUGIN_OPTION ( const char*, const char* ); +#define C3D_PLUGIN_W_SET_PLUGIN_OPTION_DECLARE extern "C" __declspec( dllexport ) void _cdecl C3D_PLUGIN_W_SET_PLUGIN_OPTION ( const wchar_t*, const wchar_t* ); +#define C3D_PLUGIN_RELEASE_EXPORT_DECLARE extern "C" __declspec( dllexport ) void _cdecl C3D_PLUGIN_RELEASE_SOURCE ( ObModelSource* ); +#else +#define C3D_PLUGIN_INIT_EXPORT_DECLARE ObModelSource* C3D_PLUGIN_INIT_SOURCE ( const char*, const char* ); +#define C3D_PLUGIN_C_SET_PLUGIN_OPTION_DECLARE void C3D_PLUGIN_C_SET_PLUGIN_OPTION ( const char*, const char* ); +#define C3D_PLUGIN_W_SET_PLUGIN_OPTION_DECLARE void C3D_PLUGIN_W_SET_PLUGIN_OPTION ( const wchar_t*, const wchar_t* ); +#define C3D_PLUGIN_RELEASE_EXPORT_DECLARE void C3D_PLUGIN_RELEASE_SOURCE ( ObModelSource* ); +#endif // WIN32 + + +//------------------------------------------------------------------------------ +/** \brief \ru Объявление типа функций инициализации и завершения работы плагина. + \en Declare types of initialize and release functions of plugin.\~ +\ingroup Data_Interface +*/ +// --- +#ifdef WIN32 +typedef ObModelSource* ( _cdecl* C3D_PLUGIN_INIT_SOURCE_CALL ) ( const char*, const char* ); +typedef void ( _cdecl* C3D_PLUGIN_C_SET_OPTION_CALL ) ( const char*, const char* ); +typedef void ( _cdecl* C3D_PLUGIN_W_SET_OPTION_CALL ) ( const wchar_t*, const wchar_t* ); +typedef void ( _cdecl* C3D_PLUGIN_RELEASE_SOURCE_CALL )( ObModelSource* ); +#else +typedef ObModelSource* ( * C3D_PLUGIN_INIT_SOURCE_CALL ) ( const char*, const char* ); +typedef void ( * C3D_PLUGIN_C_SET_OPTION_CALL ) ( const char*, const char* ); +typedef void ( * C3D_PLUGIN_W_SET_OPTION_CALL ) ( const wchar_t*, const wchar_t* ); +typedef void ( * C3D_PLUGIN_RELEASE_SOURCE_CALL ) ( ObModelSource* ); +#endif // WIN32 + + +//////////////////////////////////////////////////////////////////////////////// +// +// Plugin types +// +//////////////////////////////////////////////////////////////////////////////// + + +//------------------------------------------------------------------------------ +/** \brief \ru Объявление булевых значений. +\en Declare boolean values.\~ +\ingroup Data_Interface +*/ +// --- +#define C3D_PLUGIN_BOOL int +#define C3D_PLUGIN_TRUE 1 +#define C3D_PLUGIN_FALSE 0 + +//#define C3D_SYMBOL_COMPOSITE_TEXT 3 +#define C3D_SYMBOL_TEXT_LINE 0 +//#define C3D_SYMBOL_PRREDEFINED 1 + +#define C3D_SYMBOL_ARC_LENGTH 1 +#define C3D_SYMBOL_CONICAL_TAPER 2 +#define C3D_SYMBOL_COUNTERBORE 3 +#define C3D_SYMBOL_COUNTERSINK 4 +#define C3D_SYMBOL_DEPTH 5 +#define C3D_SYMBOL_DIAMETER 6 +#define C3D_SYMBOL_PLUS_MINUS 7 +#define C3D_SYMBOL_SLOPE 8 +#define C3D_SYMBOL_SPHERICAL_DIAMETER 9 +#define C3D_SYMBOL_SPHERICAL_RADIUS 10 +#define C3D_SYMBOL_SQUARE 11 +#define C3D_SYMBOL_ANGULARITY 12 +#define C3D_SYMBOL_CIRCULAR_RUNOUT 13 +#define C3D_SYMBOL_CIRCULARITY 14 +#define C3D_SYMBOL_CONCENTRICITY 15 +#define C3D_SYMBOL_CYLINDRICITY 16 +#define C3D_SYMBOL_FLATNESS 17 +#define C3D_SYMBOL_PARALLELISM 18 +#define C3D_SYMBOL_PERPENDICULARITY 19 +#define C3D_SYMBOL_POSITION 20 +#define C3D_SYMBOL_LINE_PROFILE 21 +#define C3D_SYMBOL_SURFACE_PROFILE 22 +#define C3D_SYMBOL_STRAIGHTNESS 23 +#define C3D_SYMBOL_SYMMETRY 24 +#define C3D_SYMBOL_TOTAL_RUNOUT 25 + + +#define C3D_CALLOUT_GENERAL 0 +#define C3D_CALLOUT_DIMENSION 1 +#define C3D_CALLOUT_PROJECTION 2 + + +#define C3D_TERMINATOR_EMPTY 0 +#define C3D_TERMINATOR_BLANKED_ARROW 1 +#define C3D_TERMINATOR_BLANKED_BOX 2 +#define C3D_TERMINATOR_BLANKED_DOT 3 +#define C3D_TERMINATOR_DIMENSION_ORIGIN 4 +#define C3D_TERMINATOR_FILLED_ARROW 5 +#define C3D_TERMINATOR_FILLED_BOX 6 +#define C3D_TERMINATOR_FILLED_DOT 7 +#define C3D_TERMINATOR_INTEGRAL_SYMBOL 8 +#define C3D_TERMINATOR_OPEN_ARROW 9 +#define C3D_TERMINATOR_SLASH 10 +#define C3D_TERMINATOR_UNFILLED_ARROW 11 + + +#define C3D_DIMENSION_GENERAL 0 +#define C3D_DIMENSION_LINEAR 1 +#define C3D_DIMENSION_ANGULAR 2 + + + +//////////////////////////////////////////////////////////////////////////////// +// +// Curves +// +//////////////////////////////////////////////////////////////////////////////// + + +//------------------------------------------------------------------------------ +/** \brief \ru Примитив трехмерного пространства (точка либо вектор). + \en Spatial primitive (point or vector).\~ +\ingroup Data_Interface +*/ +// --- +struct ObPrimitive3D { + double x, y, z; + + ObPrimitive3D() + : x( 0.0 ), y( 0.0 ), z( 0.0 ) + {} +}; + + +//------------------------------------------------------------------------------ +// Инициализировать примитив +// --- +inline void SetObPrimitiveZero( ObPrimitive3D& ob ) { + ob.x = ob.y = ob.z = 0.0; +} + + +//------------------------------------------------------------------------------ +// Инициализировать примитив +// --- +inline bool IsObPrimitiveZero( const ObPrimitive3D& ob ) { + return (ob.x == 0.0) && (ob.y == 0.0) && (ob.z == 0.0); +} + + +//------------------------------------------------------------------------------ +/** \brief \ru Локальная система координат в трехмерном пространстве. + \en Spatial placement.\~ +\ingroup Data_Interface +*/ +// --- +struct ObLocation3D { + ObPrimitive3D origin, axisX, axisY, axisZ; + + ObLocation3D() + : origin(), axisX(), axisY(), axisZ() + {} +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Одномерный диапазон. + \en One dimensional range.\~ +\ingroup Data_Interface +*/ +// --- +struct ObRange1D { + double start, end; + + ObRange1D() + : start( 0.0 ), end( 0.0 ) + {} +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Трехмерный отрезок. + \en Spatial line segment.\~ +\ingroup Data_Interface +*/ +// --- +struct ObSegment3D { + static const int CurveType = 1; + ObRange1D domain; + ObPrimitive3D start, end; + + ObSegment3D() + : domain(), start(), end() + {} +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Трехмерная полилиния. + \en Spatial polyline.\~ +\ingroup Data_Interface +*/ +// --- +struct ObPolyline3D { + static const int CurveType = 2; + int pointsArrayId; + + ObPolyline3D() + : pointsArrayId( 0 ) + {} +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Трехмерная дуга. + \en Spatial arc.\~ +\ingroup Data_Interface +*/ +// --- +struct ObArc3D { + static const int CurveType = 3; + ObLocation3D location; + double majorAxis, minorAxis; + ObRange1D domain; + + ObArc3D() + : location(), majorAxis( 0.0 ), minorAxis( 0.0 ), domain() + {} +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Трехмерная парабола. + \en Spatial parabola.\~ +\ingroup Data_Interface +*/ +// --- +struct ObParabola3D { + static const int CurveType = 4; + ObLocation3D location; + double focalLength; + ObRange1D domain; + + ObParabola3D() + : location(), focalLength( 0.0 ), domain() + {} +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Трехмерная дуга. + \en Spatial arc.\~ +\ingroup Data_Interface +*/ +// --- +struct ObHyperbola3D { + static const int CurveType = 5; + ObLocation3D location; + double majorSemiAxis, minorSemiAxis; + ObRange1D domain; + + ObHyperbola3D() + : location(), majorSemiAxis( 0.0 ), minorSemiAxis( 0.0 ), domain() + {} +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Трехмерный сплайн. + \en Spatial spline.\~ +\ingroup Data_Interface +*/ +// --- +struct ObSplineCurve3D { + static const int CurveType = 6; + int knotsId, vertcisId; + int degree; + int closed; + + ObSplineCurve3D() + : knotsId( 0 ), vertcisId( 0 ), degree( 0 ), closed( 0 ) + {} +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Трехмерный NURBS. + \en Spatial NURBS.\~ +\ingroup Data_Interface +*/ +// --- +struct ObNURBSCurve3D { + static const int CurveType = 7; + int knotsId, vertcisId, weightsId; + int degree; + C3D_PLUGIN_BOOL closed; + ObRange1D domain; + + ObNURBSCurve3D() + : knotsId( 0 ), vertcisId( 0 ), weightsId( 0 ), degree( 0 ), closed( 0 ), domain() + {} +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Трехмерная составная кривая. + \en Spatial composite curve.\~ +\ingroup Data_Interface +*/ +// --- +struct ObCompositeCurve3D { + static const int CurveType = 8; + int segmentsArrIndicis; + + ObCompositeCurve3D() + : segmentsArrIndicis( 0 ) + {} +}; + + +//////////////////////////////////////////////////////////////////////////////// +// +// Surfaces +// +//////////////////////////////////////////////////////////////////////////////// + + +//------------------------------------------------------------------------------ +/** \brief \ru Плоскость. + \en Plane.\~ +\ingroup Data_Interface +*/ +// --- +struct ObPlane { + static const int SurfaceType = 1; + ObLocation3D location; + ObRange1D uDomain, vDomain; + + ObPlane() + : location(), uDomain(), vDomain() + {} +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Цилиндрическая поверхность. + \en Cylinder surface.\~ +\ingroup Data_Interface +*/ +// --- +struct ObCylinder { + static const int SurfaceType = 2; + ObLocation3D location; + double r, h; + ObRange1D uDomain, vDomain; + + ObCylinder() + : location(), r( 0.0 ), h( 0.0 ), uDomain(), vDomain() + {} +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Коническая поверхность. + \en Cone surface.\~ +\ingroup Data_Interface +*/ +// --- +struct ObCone { + static const int SurfaceType = 3; + ObLocation3D location; + double r, h, halfAngle; + ObRange1D uDomain, vDomain; + + ObCone() + : location(), r( 0.0 ), h( 0.0 ), halfAngle( 0.0 ), uDomain(), vDomain() + {} +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Сферическая поверхность. + \en Sphere surface.\~ +\ingroup Data_Interface +*/ +// --- +struct ObSphere { + static const int SurfaceType = 4; + ObLocation3D location; + double r; + ObRange1D uDomain, vDomain; + + ObSphere() + : location(), r( 0.0 ), uDomain(), vDomain() + {} +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Тороидальная поверхность. + \en Torus surface.\~ +\ingroup Data_Interface +*/ +// --- +struct ObTorus { + static const int SurfaceType = 5; + ObLocation3D location; + double rMin, rMax; + ObRange1D uDomain, vDomain; + + ObTorus() + : location(), rMin( 0.0 ), rMax( 0.0 ), uDomain(), vDomain() + {} +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Поверхность выдавливания. + \en Extrusion surface.\~ +\ingroup Data_Interface +*/ +// --- +struct ObExtrusion { + static const int SurfaceType = 6; + int curve; + ObPrimitive3D direction; + + ObExtrusion() + : curve( 0 ), direction() + {} +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Поверхность вращения. + \en Revolution surface.\~ +\ingroup Data_Interface +*/ +// --- +struct ObRevolution { + static const int SurfaceType = 7; + int curveId; + ObPrimitive3D axisOrigin, axisDirection; + ObRange1D vRange; + + ObRevolution() + : curveId( 0 ), axisOrigin(), axisDirection(), vRange() + {} +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Линейчатая поверхность. + \en Ruled surface.\~ +\ingroup Data_Interface +*/ +// --- +struct ObRuled { + static const int SurfaceType = 8; + int curve1, curve2; + + ObRuled() + : curve1( 0 ), curve2( 0 ) + {} +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Сплайновая поверхность. + \en Spline surface.\~ +\ingroup Data_Interface +*/ +// --- +struct ObSplineSurface { + static const int SurfaceType = 9; + int knotsUId, knotsVId, verticisListId; + int degreeU, degreeV; + int closedU, closedV; + + ObSplineSurface() + : knotsUId( 0 ), knotsVId( 0 ), verticisListId( 0 ), degreeU( 0 ), degreeV( 0 ), closedU( 0 ), closedV( 0 ) + {} +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Сплайновая поверхность. + \en Spline surface.\~ +\ingroup Data_Interface +*/ +// --- +struct ObNURBSSurface { + static const int SurfaceType = 10; + int knotsUId, knotsVId, verticisListListId, weightsListListId; + int degreeU, degreeV; + C3D_PLUGIN_BOOL closedU, closedV; + + ObNURBSSurface() + : knotsUId( 0 ), knotsVId( 0 ), verticisListListId( 0 ), weightsListListId( 0 ), degreeU( 0 ), degreeV( 0 ), closedU( 0 ), closedV( 0 ) + {} +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Смещённая поверхность. + \en Offset surface.\~ +\ingroup Data_Interface +*/ +// --- +struct ObOffsetSurface { + static const int SurfaceType = 11; + int baseSurface; + double offset; + + ObOffsetSurface() + : baseSurface( 0 ), offset( 0.0 ) + {} +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Цвет. + \en Colour.\~ +\ingroup Data_Interface +*/ +// --- +struct ObColour { + double red, green, blue; + + ObColour() + : red( 0.0 ), green( 0.0 ), blue( 0.0 ) + {} +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Неопределённый компонент цвета. + \en Undefined component of colour.\~ +\ingroup Data_Interface +*/ +// --- +const double ObUndefinedColourComponent = -1.0; + + +//------------------------------------------------------------------------------ +/** \brief \ru Элемент аннотации. + \en PMI item.\~ +\ingroup Data_Interface +*/ +// --- +struct ObPMI { + ObLocation3D location; + int visualArray; + int textBlockIdArray; + + ObPMI() + : location(), visualArray( 0 ), textBlockIdArray( 0 ) + {} +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Элемент текста. + \en Text item.\~ +\ingroup Data_Interface +*/ +// --- +struct ObTextBlock { + double originX, originY; + double dirX, dirY; + double extentX, extentY; + + ObTextBlock() + : originX( 0.0 ), originY( 0.0 ), dirX( 0.0 ), dirY( 0.0 ), extentX( 0.0 ), extentY( 0.0 ) + {} +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Размер. + \en Dimension.\~ +\ingroup Data_Interface +*/ +// --- +struct ObDimension { + double value; + double deviationMin, deviationMax; + int type; + int calloutArrId; + + ObDimension() + : value( 0.0 ), deviationMin( 0.0 ), deviationMax( 0.0 ), type( 0 ), calloutArrId( 0 ) + {} +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Особая линия. + \en Special line.\~ +\ingroup Data_Interface +*/ +// --- +struct ObPMICallout { + int type; + //int geometry; + ObPrimitive3D head, tail; + bool isArc; + ObPrimitive3D center; + int terminatorHead; + int terminatorTail; + + ObPMICallout() + : type( 0 ), head(), tail(), isArc( false ), center(), terminatorHead( 0 ), terminatorTail( 0 ) + {} +}; + + +//////////////////////////////////////////////////////////////////////////////// +// +// Model source plugin. Basic interface. +// +//////////////////////////////////////////////////////////////////////////////// + + +//------------------------------------------------------------------------------ +/** \brief \ru Источник данных модели. + \en Model source.\~ +\ingroup Data_Interface +*/ +// --- +struct ObModelSource { + + virtual ~ObModelSource() {}; + + virtual C3D_PLUGIN_BOOL LastOperationSuccess() = 0; + + // Операции с файлом + virtual C3D_PLUGIN_BOOL IsPathWCS() = 0; + virtual C3D_PLUGIN_BOOL Open( const char* ) = 0; + virtual C3D_PLUGIN_BOOL Open( const wchar_t* ) = 0; + virtual void Close() = 0; + + // Значение неопределённого идентификатора. + virtual int UndefinedId() = 0; + + // Управление трассировкой событий + virtual void EnableLog() = 0; + virtual void DisableLog() = 0; + + // Контейнеры + + virtual unsigned int ArrayCount ( int arrayId ) = 0; + virtual int ArrayIdentifier ( int arrayId, unsigned int index ) = 0; + virtual double ArrayFloat ( int arrayId, unsigned int index ) = 0; + virtual ObPrimitive3D ArrayPrimitive ( int arrayId, unsigned int index ) = 0; + + virtual ObColour ItemColour( int itemId ) = 0; + + // Модель + virtual int ModelPart() = 0; + + virtual unsigned int PartInstanceCount( int partId ) = 0; + virtual int PartInstance( int partId, unsigned int inst ) = 0; + + virtual const wchar_t* WPartName( int partId ) = 0; + virtual const wchar_t* WPartLabel( int partId ) = 0; + virtual const wchar_t* WPartAuthor( int partId ) = 0; + virtual const wchar_t* WPartOrganization( int partId ) = 0; + virtual const wchar_t* WPartDescription( int partId ) = 0; + + virtual const char* CPartName( int partId ) = 0; + virtual const char* CPartLabel( int partId ) = 0; + virtual const char* CPartAuthor( int partId ) = 0; + virtual const char* CPartOrganization( int partId ) = 0; + virtual const char* CPartDescription( int partId ) = 0; + + virtual int InstancePart( int instanceId ) = 0; + virtual ObLocation3D InstanceLocation( int instanceId ) = 0; + + virtual unsigned int SolidsCount( int partId ) = 0; + + // Топология граничного представления + virtual int Solid( int partId, unsigned int solid ) = 0; + virtual ObLocation3D SolidLocation( int solidId ) = 0; + + virtual unsigned int SpaceCurvesCount( int partId ) = 0; + virtual int SpaceCurve( int partId, unsigned int curve ) = 0; + + virtual unsigned int ShellsCount( int solidId ) = 0; + virtual int Shell( int solid, unsigned int shell ) = 0; + + virtual C3D_PLUGIN_BOOL ShellClosed( int shellId ) = 0; + virtual unsigned int ShellFacesCount( int shellId ) = 0; + virtual int ShellFace( int shellId, unsigned int face ) = 0; + + virtual unsigned int FaceBoundsCount( int faceId ) = 0; + virtual int FaceBound( int faceId, unsigned int bound ) = 0; + virtual C3D_PLUGIN_BOOL FaceSurfaceSameOriented( int faceId ) = 0; + + virtual int BoundType( int boundId ) = 0; + virtual unsigned int BoundCoedgesCount( int boundId ) = 0; + virtual int BoundCoedge( int boundId, unsigned int coedge ) = 0; + + virtual int CoedgeEdge( int coedgeId ) = 0; + virtual C3D_PLUGIN_BOOL CoedgeEdgeSameOriented( int coedgeId ) = 0; + + virtual int EdgeStartVertex( int edgeId ) = 0; + virtual int EdgeEndVertex( int edgeId ) = 0; + + // Методы получения геометрии + + virtual int FaceGeometry( int faceId ) = 0; + virtual int EdgeGeometry( int edgeId ) = 0; + virtual ObPrimitive3D VertexGeometry( int vertexId ) = 0; + + // Типы геометрических объектов + + virtual int SurfaceType( int surfaceId ) = 0; + virtual int Curve3DType( int curveId ) = 0; + + // Данные геометрии + + // Пространственные кривые + + virtual ObSegment3D LineSegment3D( int curveId ) = 0; + virtual ObPolyline3D Polyline3D( int curveId ) = 0; + virtual ObArc3D Arc3D( int curveId ) = 0; + virtual ObParabola3D Parabola3D( int curveId ) = 0; + virtual ObHyperbola3D Hyperbola3D( int curveId ) = 0; + virtual ObSplineCurve3D SplineCurve3D( int curveId ) = 0; + virtual ObNURBSCurve3D NURBSCurve3D( int curveId ) = 0; + virtual ObCompositeCurve3D CompositeCurve3D( int curveId ) = 0; + + virtual unsigned int CompositeCurveSegmentsCount( int curveId ) = 0; + virtual int CompositeCurveSegment( int curveId, unsigned int index ) = 0; + virtual C3D_PLUGIN_BOOL CompositeCurveSegmentsSameOriented( int curveId, unsigned int index ) = 0; + + // Поверхности + + virtual ObPlane Plane( int surfaceId ) = 0; + virtual ObCylinder Cylinder( int surfaceId ) = 0; + virtual ObCone Cone( int surfaceId ) = 0; + virtual ObSphere Sphere( int surfaceId ) = 0; + virtual ObTorus Torus( int surfaceId ) = 0; + virtual ObExtrusion Extrusion( int surfaceId ) = 0; + virtual ObRevolution Revolution( int surfaceId ) = 0; + virtual ObRuled Ruled( int surfaceId ) = 0; + virtual ObSplineSurface SplineSurface( int surfaceId ) = 0; + virtual ObNURBSSurface NURBSSurface( int surfaceId ) = 0; + virtual ObOffsetSurface OffsetSurface( int surfaceId ) = 0; + + virtual unsigned int PartPMICount( int partIdId ) = 0; + virtual int PartPMI( int partId, unsigned int index ) = 0; + virtual ObPMI PMI( int pmiId ) = 0; + + virtual bool IsDimension( int pmiId ) = 0; + virtual bool Dimension( int pmiId, ObDimension& dim ) = 0; + + virtual ObPMICallout PMICallout( int calloutId ) = 0; + + virtual unsigned int PMITextCount( int textId ) = 0; + virtual int PMIText( int textId, unsigned int index ) = 0; + + virtual int PMITextType( int textBlockId ) = 0; + virtual ObTextBlock PMITextLocation( int textBlockId ) = 0; + virtual int PMITextSymbol( int textBlockId ) = 0; + virtual const wchar_t* WPMIText( int textId ) = 0; + virtual const char* CPMIText( int textBlockId ) = 0; + virtual unsigned int CompositeTextCount( int textId ) = 0; + virtual int CompositeText( int textId, unsigned int index ) = 0; + + virtual unsigned int PMICalloutCount( int pmiId ) = 0; + virtual ObPMICallout PMICallout( int pmiId, unsigned int index ) = 0; + +}; + + +#endif // __CONV_PUGIN_IMPORT_H + diff --git a/C3d/Include/conv_predefined.h b/C3d/Include/conv_predefined.h index bec7f66..f218121 100644 --- a/C3d/Include/conv_predefined.h +++ b/C3d/Include/conv_predefined.h @@ -1,151 +1,151 @@ -//////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru Перечисления, используемые при импорте и экспорте. - \en Enumerations for import/export operations.\~ - \details \ru Определены перечисления, определяющие результат конвертирования, - разрешение на чтение и запись различных объектов и передаваемых черезх конвертер строк. - \en Converting result, objects and properties filters, special strings - of enumerations are defined.\~ -*/ -//////////////////////////////////////////////////////////////////////////////// - -#ifndef __CONV_ERROR_RESULT_H -#define __CONV_ERROR_RESULT_H - - -#include - - -//------------------------------------------------------------------------------ -/** \brief \ru Представление текста при экспорте. -\en Representation of exported text.\~ -\ingroup Data_Exchange -*/ -// --- -enum eTextForm { - exf_TextOnly, ///< \ru Только текст. \en Text only. - exf_GeometryOnly, ///< \ru Только геометрия. \en Geometry only. -}; - -//------------------------------------------------------------------------------ -/** \brief \ru Предопределённые ключи атрибутов для передачи контрольных параметров. -\en Predefined key of attributes used for validation properties' exchange.\~ -\ingroup Data_Interface -*/ -// --- -/// \ru Объём. \en Volume. -#define C3D_CAD_VALIDATION_PROPERTY_VOLUME c3d::c3dStr_ValidationPropertyVolumeExchange -/// \ru Площать поверхости. \en Surface area. -#define C3D_CAD_VALIDATION_PROPERTY_AREA c3d::c3dStr_ValidationPropertySurfaceAreaExchange -/// \ru Масса. \en Mass. -#define C3D_CAD_VALIDATION_PROPERTY_MASS c3d::c3dStr_ValidationPropertyMassExchange -/// \ru Идентификатор элемента. \en Item Identifier. -#define C3D_CAD_ITEM_IDENTIFIER c3d::c3dStr_ItemIdentifierExchange - - -//------------------------------------------------------------------------------ -/** \brief \ru Типы линий, передаваемых через конвертер. -\en Types of lines passed via converter. \~ -\ingroup Data_Interface -*/ -// --- -enum MbeLineFontPattern { - lfp_BEGIN = 0, ///< \ru Для удобства перебора. \en For the convenient search. - lfp_STEPcontinuous, ///< \ru Непрерывная в конвертерах STEP и IGES. \en Continuous line in STEP and IGES (Solid) converters. - lfp_STEPchain, ///< \ru Штрих-пунктирная в конвертерах STEP и IGES. \en Chain line( dash-dotted) in STEP and IGES converters. - lfp_STEPchainDoubleDash, ///< \ru Штриховая с двумя пунктирами в конвертерах STEP и IGES. \en Dash-double-dot line in STEP and IGES (Phantom) converter. - lfp_STEPdashed, ///< \ru Штриховая в конвертерах STEP и IGES. \en Dash line in STEP and IGES converters. - lfp_STEPdotted, ///< \ru Пунктирная в конвертерах STEP и IGES. \en Dotted line in STEP and IGES converters. - lfp_END ///< \ru Для удобства перебора. \en For search -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Отображение точек, передаваемых через конвертер. -\en Representation of points passed via converter. \~ -\ingroup Data_Interface -*/ -// --- -enum MbeDotMarkerSymbol { - dms_BEGIN = 0, ///< \ru Для удобства перебора. \en For the convenient search. - dms_STEPdot, ///< \ru Точка. \en A point. - dms_STEPx, ///< \ru Косой крест. \en x - cross. - dms_STEPplus, ///< \ru Прямой крест. \en Plus. - dms_STEPasterisk, ///< \ru Звёздочка. \en Asterisk. - dms_STEPring, ///< \ru Кольцо. \en Ring. - dms_STEPsquare, ///< \ru Квадрат. \en Square. - dms_STEPtriangle, ///< \ru Треугольник. \en Triangle. - dms_END ///< \ru Для удобства перебора. \en For the convenient search. -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Ключи строк, соответствующих названию специальных атрибутов. - \en Keys of the strings, which mark special attributes.\~ -\ingroup Data_Interface -*/ -// --- -enum ePromtAttributeKey { - pac_GConverterInternalIsDummy, ///< \ru Является ли элемент пустышкой.\~ - pac_GeneralIsAssembly, ///< \ru Является ли элемент сборкой. \en Is item assembly.\~ - pac_GeneralFileName, ///< \ru Имя файла. \en File name.\~ - pac_STEPHeader, ///< \ru Заголовок STEP. \en STEP header.\~ - pac_STEPProduct, ///< \ru Изделие STEP. \en STEP product.\~ - pac_STEPPersonOrganization, ///< \ru Лицо и организация STEP. \en STEP person and organization.\~ - pac_STEPAssignedRole ///< \ru Назначенная роль STEP. \en The role, assigned to the person.\~ -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Идентификаторы сообщений индикатора прогресса выполнения конвертации данных. - \en Identifiers of the execution progress indicator messages converters data exchange \~ -\ingroup Data_Exchange -*/ -//--- -enum MbeProgBarId_Converters { - pbarId_Cnv_Beg = pbarId_PointsSurface_End + 1, - - pbarId_Cnv_Parse_Data, // \ru Синтаксический анализ... \en Syntactic analysis... - pbarId_Cnv_Create_Objects, // \ru Создание объектов... \en Creation of objects... - pbarId_Cnv_Process_Surfaces, // \ru Обработка поверхностей... \en Surfaces processing... - pbarId_Cnv_Process_Annotation,// \ru Обработка аннотации... \en Annotation processing... - pbarId_Cnv_Create_Model, // \ru Создание модели... \en Creation of model... - pbarId_Cnv_Write_Model, // \ru Запись модели... \en Writing of model... - - pbarId_Cnv_End, -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Идентификаторы сообщений индикатора прогресса выполнения триангуляции при выполнении конвертации данных. - \en Identifiers of the execution progress indicator messages triangulation. \~ -\ingroup Data_Exchange -*/ -//--- -enum MbeProgBarId_Triangulation { - pbarId_Triangulation_Beg = pbarId_Cnv_End + 1, - - pbarId_Calc_Triangulation, // \ru Расчет триангуляции \en Calculating of triangulation - - pbarId_Triangulation_End, -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Идентификаторы сообщений индикатора прогресса выполнения расчёта - масс-инерционные характеристики детали или сборки при выполнении конвертации данных. - \en Identifiers of the execution progress indicator messages of mass-inertial properties of assembly or a detail. \~ -\ingroup Data_Exchange -*/ -//--- -enum MbeProgBarId_MassInertiaProperties { - pbarId_MassInertiaProperties_Beg = pbarId_Triangulation_End + 1, - - pbarId_Calc_MassInertiaProperties, // \ru Расчет масс-инерционных характеристик \en Mass-inertial properties calculation - - pbarId_MassInertiaProperties_End, -}; - - +//////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Перечисления, используемые при импорте и экспорте. + \en Enumerations for import/export operations.\~ + \details \ru Определены перечисления, определяющие результат конвертирования, + разрешение на чтение и запись различных объектов и передаваемых черезх конвертер строк. + \en Converting result, objects and properties filters, special strings + of enumerations are defined.\~ +*/ +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __CONV_ERROR_RESULT_H +#define __CONV_ERROR_RESULT_H + + +#include + + +//------------------------------------------------------------------------------ +/** \brief \ru Представление текста при экспорте. +\en Representation of exported text.\~ +\ingroup Data_Exchange +*/ +// --- +enum eTextForm { + exf_TextOnly, ///< \ru Только текст. \en Text only. + exf_GeometryOnly, ///< \ru Только геометрия. \en Geometry only. +}; + +//------------------------------------------------------------------------------ +/** \brief \ru Предопределённые ключи атрибутов для передачи контрольных параметров. +\en Predefined key of attributes used for validation properties' exchange.\~ +\ingroup Data_Interface +*/ +// --- +/// \ru Объём. \en Volume. +#define C3D_CAD_VALIDATION_PROPERTY_VOLUME c3d::c3dStr_ValidationPropertyVolumeExchange +/// \ru Площать поверхости. \en Surface area. +#define C3D_CAD_VALIDATION_PROPERTY_AREA c3d::c3dStr_ValidationPropertySurfaceAreaExchange +/// \ru Масса. \en Mass. +#define C3D_CAD_VALIDATION_PROPERTY_MASS c3d::c3dStr_ValidationPropertyMassExchange +/// \ru Идентификатор элемента. \en Item Identifier. +#define C3D_CAD_ITEM_IDENTIFIER c3d::c3dStr_ItemIdentifierExchange + + +//------------------------------------------------------------------------------ +/** \brief \ru Типы линий, передаваемых через конвертер. +\en Types of lines passed via converter. \~ +\ingroup Data_Interface +*/ +// --- +enum MbeLineFontPattern { + lfp_BEGIN = 0, ///< \ru Для удобства перебора. \en For the convenient search. + lfp_STEPcontinuous, ///< \ru Непрерывная в конвертерах STEP и IGES. \en Continuous line in STEP and IGES (Solid) converters. + lfp_STEPchain, ///< \ru Штрих-пунктирная в конвертерах STEP и IGES. \en Chain line( dash-dotted) in STEP and IGES converters. + lfp_STEPchainDoubleDash, ///< \ru Штриховая с двумя пунктирами в конвертерах STEP и IGES. \en Dash-double-dot line in STEP and IGES (Phantom) converter. + lfp_STEPdashed, ///< \ru Штриховая в конвертерах STEP и IGES. \en Dash line in STEP and IGES converters. + lfp_STEPdotted, ///< \ru Пунктирная в конвертерах STEP и IGES. \en Dotted line in STEP and IGES converters. + lfp_END ///< \ru Для удобства перебора. \en For search +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Отображение точек, передаваемых через конвертер. +\en Representation of points passed via converter. \~ +\ingroup Data_Interface +*/ +// --- +enum MbeDotMarkerSymbol { + dms_BEGIN = 0, ///< \ru Для удобства перебора. \en For the convenient search. + dms_STEPdot, ///< \ru Точка. \en A point. + dms_STEPx, ///< \ru Косой крест. \en x - cross. + dms_STEPplus, ///< \ru Прямой крест. \en Plus. + dms_STEPasterisk, ///< \ru Звёздочка. \en Asterisk. + dms_STEPring, ///< \ru Кольцо. \en Ring. + dms_STEPsquare, ///< \ru Квадрат. \en Square. + dms_STEPtriangle, ///< \ru Треугольник. \en Triangle. + dms_END ///< \ru Для удобства перебора. \en For the convenient search. +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Ключи строк, соответствующих названию специальных атрибутов. + \en Keys of the strings, which mark special attributes.\~ +\ingroup Data_Interface +*/ +// --- +enum ePromtAttributeKey { + pac_GConverterInternalIsDummy, ///< \ru Является ли элемент пустышкой.\~ + pac_GeneralIsAssembly, ///< \ru Является ли элемент сборкой. \en Is item assembly.\~ + pac_GeneralFileName, ///< \ru Имя файла. \en File name.\~ + pac_STEPHeader, ///< \ru Заголовок STEP. \en STEP header.\~ + pac_STEPProduct, ///< \ru Изделие STEP. \en STEP product.\~ + pac_STEPPersonOrganization, ///< \ru Лицо и организация STEP. \en STEP person and organization.\~ + pac_STEPAssignedRole ///< \ru Назначенная роль STEP. \en The role, assigned to the person.\~ +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Идентификаторы сообщений индикатора прогресса выполнения конвертации данных. + \en Identifiers of the execution progress indicator messages converters data exchange \~ +\ingroup Data_Exchange +*/ +//--- +enum MbeProgBarId_Converters { + pbarId_Cnv_Beg = pbarId_PointsSurface_End + 1, + + pbarId_Cnv_Parse_Data, // \ru Синтаксический анализ... \en Syntactic analysis... + pbarId_Cnv_Create_Objects, // \ru Создание объектов... \en Creation of objects... + pbarId_Cnv_Process_Surfaces, // \ru Обработка поверхностей... \en Surfaces processing... + pbarId_Cnv_Process_Annotation,// \ru Обработка аннотации... \en Annotation processing... + pbarId_Cnv_Create_Model, // \ru Создание модели... \en Creation of model... + pbarId_Cnv_Write_Model, // \ru Запись модели... \en Writing of model... + + pbarId_Cnv_End, +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Идентификаторы сообщений индикатора прогресса выполнения триангуляции при выполнении конвертации данных. + \en Identifiers of the execution progress indicator messages triangulation. \~ +\ingroup Data_Exchange +*/ +//--- +enum MbeProgBarId_Triangulation { + pbarId_Triangulation_Beg = pbarId_Cnv_End + 1, + + pbarId_Calc_Triangulation, // \ru Расчет триангуляции \en Calculating of triangulation + + pbarId_Triangulation_End, +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Идентификаторы сообщений индикатора прогресса выполнения расчёта + масс-инерционные характеристики детали или сборки при выполнении конвертации данных. + \en Identifiers of the execution progress indicator messages of mass-inertial properties of assembly or a detail. \~ +\ingroup Data_Exchange +*/ +//--- +enum MbeProgBarId_MassInertiaProperties { + pbarId_MassInertiaProperties_Beg = pbarId_Triangulation_End + 1, + + pbarId_Calc_MassInertiaProperties, // \ru Расчет масс-инерционных характеристик \en Mass-inertial properties calculation + + pbarId_MassInertiaProperties_End, +}; + + #endif // __CONV_ERROR_RESULT_H \ No newline at end of file diff --git a/C3d/Include/conv_requestor.h b/C3d/Include/conv_requestor.h index f53d5d3..61057ac 100644 --- a/C3d/Include/conv_requestor.h +++ b/C3d/Include/conv_requestor.h @@ -1,35 +1,35 @@ -//////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru Интерфейс запроса масштаба. Интерфейс запроса сшивки. - \en Interface of scale request. Interface of stitching request. \~ - -*/ -//////////////////////////////////////////////////////////////////////////////// - -#ifndef __CONV_REQUESTOR_H -#define __CONV_REQUESTOR_H - - -#include - - -//------------------------------------------------------------------------------ -/// \ru Интерфейс запроса масштаба. \en Interface of scale request. -// --- -struct IScaleRequestor : public MbRefItem -{ - virtual double ScaleRequest() = 0; -}; - - -//------------------------------------------------------------------------------ -/// \ru Интерфейс запроса сшивки. \en Interface of stitching request. -// --- -struct IStitchRequestor : public MbRefItem -{ - virtual bool StitchRequest() = 0; -}; - - -#endif // __CONV_REQUESTOR_H +//////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Интерфейс запроса масштаба. Интерфейс запроса сшивки. + \en Interface of scale request. Interface of stitching request. \~ + +*/ +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __CONV_REQUESTOR_H +#define __CONV_REQUESTOR_H + + +#include + + +//------------------------------------------------------------------------------ +/// \ru Интерфейс запроса масштаба. \en Interface of scale request. +// --- +struct IScaleRequestor : public MbRefItem +{ + virtual double ScaleRequest() = 0; +}; + + +//------------------------------------------------------------------------------ +/// \ru Интерфейс запроса сшивки. \en Interface of stitching request. +// --- +struct IStitchRequestor : public MbRefItem +{ + virtual bool StitchRequest() = 0; +}; + + +#endif // __CONV_REQUESTOR_H diff --git a/C3d/Include/conv_topo_mesh.h b/C3d/Include/conv_topo_mesh.h index d5e2ad9..d3c23bc 100644 --- a/C3d/Include/conv_topo_mesh.h +++ b/C3d/Include/conv_topo_mesh.h @@ -1,90 +1,90 @@ -//////////////////////////////////////////////////////////////////////////////// -/** -\file -\brief Преобразователь сетки к форме, сохраняющей связи граней и полигонов. -*/ -//////////////////////////////////////////////////////////////////////////////// - -#ifndef __CONV_TOPO_MESH_H -#define __CONV_TOPO_MESH_H - -#include - -#include -#include - -#include -#include - -class MbMesh; - -namespace JTC { - - class TopoMesh; - class TopoGrid; - class TopoLoop; - class TopoVertex; - class MeshVertex; - class MeshPolygon; - - typedef SPtr TopoMeshPtr; - typedef SPtr TopoGridPtr; - typedef SPtr TopoLoopPtr; - typedef SPtr TopoVertexPtr; - typedef SPtr MeshVertexPtr; - typedef SPtr MeshPolygonPtr; - - typedef std::vector RawTopoGridVector; - typedef std::vector TopoGridVector; - typedef std::vector TopoLoopVector; - typedef std::vector TopoVertexVector; - typedef std::vector MeshVertexVector; - typedef std::vector MeshPolygonVector; - - - //------------------------------------------------------------------------------ - // Сетка с топологической информацией - // --- - class CONV_CLASS TopoMesh : public MbRefItem { - SPtr mesh; - TopoGridVector grids; - MeshVertexVector ownPoints; - MeshPolygonVector ownFacePolygons; - std::map< size_t, std::vector > degeneratedTriangles; - std::vector boundaryPoints; - double metricTolerance; - public: - TopoMesh(); // Конструктор - - virtual ~TopoMesh(); //Деструктор - - bool Init( const MbMesh& mesh, bool enableDiagnostics = false ); // Инициализировать - - const MbMesh* GetMesh() const; // Получить сетку - - size_t MeshPolygonsCount() const; // Число полигонов - - MeshPolygonPtr Polygon( size_t index ) const; // Получить полигон - - size_t MeshVerticisCount() const; // Число вершин - - MeshVertexPtr Vertex( size_t index ) const; // Получить вершину - - std::map< size_t, std::vector > GetDegeneratedTriangles() const; // Получить вырожденные треуголники - - std::vector GetBoundaryPoints() const; // Получить граничные точки сетки - - void Reset(); // Сбросить все данные - - size_t NextBoundaryVertex( size_t indexBoundaryVertex, const std::vector& allBoundary ) const; // Получить следующую в цепочке граничную вершину. - - bool InitVoidBoundFrom( std::vector& freeBoundaryVerticis ); // Сформировать внешнюю границу начиная с указанной вершины. - - double MetricTolerance() const; // Получить точность задания расстояния. - - OBVIOUS_PRIVATE_COPY( TopoMesh ) - }; - -}; - -#endif // !__CONV_TOPO_MESH_H +//////////////////////////////////////////////////////////////////////////////// +/** +\file +\brief Преобразователь сетки к форме, сохраняющей связи граней и полигонов. +*/ +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __CONV_TOPO_MESH_H +#define __CONV_TOPO_MESH_H + +#include + +#include +#include + +#include +#include + +class MbMesh; + +namespace JTC { + + class TopoMesh; + class TopoGrid; + class TopoLoop; + class TopoVertex; + class MeshVertex; + class MeshPolygon; + + typedef SPtr TopoMeshPtr; + typedef SPtr TopoGridPtr; + typedef SPtr TopoLoopPtr; + typedef SPtr TopoVertexPtr; + typedef SPtr MeshVertexPtr; + typedef SPtr MeshPolygonPtr; + + typedef std::vector RawTopoGridVector; + typedef std::vector TopoGridVector; + typedef std::vector TopoLoopVector; + typedef std::vector TopoVertexVector; + typedef std::vector MeshVertexVector; + typedef std::vector MeshPolygonVector; + + + //------------------------------------------------------------------------------ + // Сетка с топологической информацией + // --- + class CONV_CLASS TopoMesh : public MbRefItem { + SPtr mesh; + TopoGridVector grids; + MeshVertexVector ownPoints; + MeshPolygonVector ownFacePolygons; + std::map< size_t, std::vector > degeneratedTriangles; + std::vector boundaryPoints; + double metricTolerance; + public: + TopoMesh(); // Конструктор + + virtual ~TopoMesh(); //Деструктор + + bool Init( const MbMesh& mesh, bool enableDiagnostics = false ); // Инициализировать + + const MbMesh* GetMesh() const; // Получить сетку + + size_t MeshPolygonsCount() const; // Число полигонов + + MeshPolygonPtr Polygon( size_t index ) const; // Получить полигон + + size_t MeshVerticisCount() const; // Число вершин + + MeshVertexPtr Vertex( size_t index ) const; // Получить вершину + + std::map< size_t, std::vector > GetDegeneratedTriangles() const; // Получить вырожденные треуголники + + std::vector GetBoundaryPoints() const; // Получить граничные точки сетки + + void Reset(); // Сбросить все данные + + size_t NextBoundaryVertex( size_t indexBoundaryVertex, const std::vector& allBoundary ) const; // Получить следующую в цепочке граничную вершину. + + bool InitVoidBoundFrom( std::vector& freeBoundaryVerticis ); // Сформировать внешнюю границу начиная с указанной вершины. + + double MetricTolerance() const; // Получить точность задания расстояния. + + OBVIOUS_PRIVATE_COPY( TopoMesh ) + }; + +}; + +#endif // !__CONV_TOPO_MESH_H diff --git a/C3d/Include/cr_attribute_provider.h b/C3d/Include/cr_attribute_provider.h index 086e2e3..b01d81b 100644 --- a/C3d/Include/cr_attribute_provider.h +++ b/C3d/Include/cr_attribute_provider.h @@ -70,20 +70,20 @@ public: ~MbAttributeProvider(); virtual MbeCreatorType IsA() const; // \ru Выдать тип элемента. \en Get an element type. - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move( const MbVector3D & to, MbRegTransform * = NULL ); // \ru Сдвинуть вдоль вектора. \en Move along a vector. - virtual void Rotate( const MbAxis3D & axis, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate about an axis. + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move( const MbVector3D & to, MbRegTransform * = c3d_null ); // \ru Сдвинуть вдоль вектора. \en Move along a vector. + virtual void Rotate( const MbAxis3D & axis, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate about an axis. virtual bool IsSame( const MbCreator &, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & ) const; // \ru Определить, являются ли объекты подобными. \en Determine whether the objects are similar. virtual bool SetEqual( const MbCreator & ); // \ru Сделать равным. \en Make equal. - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию. \en Create a copy. + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию. \en Create a copy. virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта. \en Set properties of the object. virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта. \en Get a name of object property. virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction. + RPArray * items = c3d_null ); // \ru Построение \en Construction. // \ru Добавить отдельный атрибут (забрать во владение) \en Add a separate attribute. void AddAttribute( const MbName & name, MbAttribute * attr ); @@ -125,7 +125,7 @@ public: /// \ru Записать полученные атрибуты. \en Save the received attributes. void ReceiveAttributes ( c3d::AttrVector & attrs ); /// \ru Скопировать атрибуты. \en Copy attributes. - void DuplicateAttributes( c3d::AttrVector & attrs, MbRegDuplicate * iReg = NULL ) const; + void DuplicateAttributes( c3d::AttrVector & attrs, MbRegDuplicate * iReg = c3d_null ) const; /// \ru Дать количество атрибутов. \en Get the attributes count. size_t AttributesCount() const { return attributes.size(); } /// \ru Добавить атрибут. \en Add an attribute. diff --git a/C3d/Include/cr_boolean_solid.h b/C3d/Include/cr_boolean_solid.h index d8953c1..1f3e3dc 100644 --- a/C3d/Include/cr_boolean_solid.h +++ b/C3d/Include/cr_boolean_solid.h @@ -67,10 +67,10 @@ public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента. \en A type of element. - virtual void Transform( const MbMatrix3D &, MbRegTransform * ireg = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * ireg = NULL ); // \ru Сдвиг. \en Translation. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * ireg = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const ; // \ru Сделать копию \en Create a copy + virtual void Transform( const MbMatrix3D &, MbRegTransform * ireg = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * ireg = c3d_null ); // \ru Сдвиг. \en Translation. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * ireg = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const ; // \ru Сделать копию \en Create a copy virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта \en Get a name of object property. virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. @@ -90,7 +90,7 @@ public : // \ru Общие функции твердого тела. \en Common functions of solid. virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction virtual void SetYourVersion( VERSION version, bool forAll ); @@ -107,7 +107,7 @@ public: /// \ru Общее количество строителей. \en Total count of creators. size_t GetCreatorsCount() const { return creators.size(); } /// \ru Дать строитель. \en Get the creator. - const MbCreator * GetCreator( size_t k ) const { return ( (k < creators.size()) ? creators[k] : NULL ); } + const MbCreator * GetCreator( size_t k ) const { return ( (k < creators.size()) ? creators[k] : c3d_null ); } /// \ru Удалить из журнала строители первого тела. \en Delete first-solid creators from the history tree. bool DeleteFirstCreators(); private : diff --git a/C3d/Include/cr_chamfer_solid.h b/C3d/Include/cr_chamfer_solid.h index 5f74396..f311a8b 100644 --- a/C3d/Include/cr_chamfer_solid.h +++ b/C3d/Include/cr_chamfer_solid.h @@ -39,7 +39,7 @@ public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const ; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const ; // \ru Сделать копию \en Create a copy virtual void GetProperties( MbProperties &properties ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties &properties ); // \ru Записать свойства объекта \en Set properties of the object @@ -51,7 +51,7 @@ public : // \ru Общие функции твердого тела \en Common functions of solid virtual bool CreateShell( MbFaceShell *&shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction private : virtual void ReadDistances ( reader &in ); diff --git a/C3d/Include/cr_connecting_curve.h b/C3d/Include/cr_connecting_curve.h index f9c196b..657a176 100644 --- a/C3d/Include/cr_connecting_curve.h +++ b/C3d/Include/cr_connecting_curve.h @@ -59,15 +59,15 @@ public : // \ru Общие функции строителя \en The common functions of the creator virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * iReg = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame ( const MbCreator &, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & ) const; // \ru Являются ли объекты подобными \en Whether the objects are similar virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual MbePrompt GetPropertyName(); // \ru Дать имя свойства объекта \en Get the object property name virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object @@ -77,7 +77,7 @@ public : virtual void SetBasisPoints( const MbControlData3D & ); // \ru Изменить объект по контрольным точкам. \en Change the object by control points. // \ru Построить кривую по журналу построения \en Create a curve from the history tree - virtual bool CreateSpaceCurve( MbWireFrame *&, MbeCopyMode, RPArray * items = NULL ); + virtual bool CreateSpaceCurve( MbWireFrame *&, MbeCopyMode, RPArray * items = c3d_null ); /** \} */ @@ -97,13 +97,13 @@ IMPL_PERSISTENT_OPS( MbConnectingCurveCreator ) \en Create two curves fillet constructor.\n \~ \param[in] curve1 - \ru Кривая 1. \en Curve 1. \~ - \param[in/out] t1 - \ru Параметр точки на кривой 1 соединения с кривой соединения. + \param[in,out] t1 - \ru Параметр точки на кривой 1 соединения с кривой соединения. \en A point parameter on curve 1 of connection with fillet curve. \~ \param[in] curve2 - \ru Кривая 2. \en Curve 2. \~ - \param[in/out] t2 - \ru Параметр точки на кривой 2 соединения с кривой соединения. + \param[in,out] t2 - \ru Параметр точки на кривой 2 соединения с кривой соединения. \en A point parameter on curve 2 of connection with fillet curve. \~ - \param[in/out] radius - \ru Радиус дуги или цилиндра. + \param[in,out] radius - \ru Радиус дуги или цилиндра. \en The radius of an arc or a cylinder. \~ \param[in] type - \ru Тип скругления. \en The fillet type. \~ @@ -111,8 +111,8 @@ IMPL_PERSISTENT_OPS( MbConnectingCurveCreator ) \en An object defining the edges names. \~ \param[out] res - \ru Код результата операции. \en Operation result code. \~ - \param[out] surface - \ru Поверхность, которая будет создана и на которой базируется соединительная кривая, (может быть возращён NULL). - \en A surface on which the fillet curve is based on, it will be created by the method (can be NULL). \~ + \param[out] surface - \ru Поверхность, которая будет создана и на которой базируется соединительная кривая, (может быть возращён c3d_null). + \en A surface on which the fillet curve is based on, it will be created by the method (can be c3d_null). \~ \result \ru Возвращает строитель. \en Returns the constructor. \~ \ingroup Curve3D_Modeling diff --git a/C3d/Include/cr_cutting_solid.h b/C3d/Include/cr_cutting_solid.h index ffc5c89..af52814 100644 --- a/C3d/Include/cr_cutting_solid.h +++ b/C3d/Include/cr_cutting_solid.h @@ -66,10 +66,10 @@ public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта \en Get a name of object property virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object @@ -85,7 +85,7 @@ public : // \ru Общие функции твердого тела \en Common functions of solid virtual bool CreateShell( MbFaceShell *&, MbeCopyMode sameShell, - RPArray * = NULL ); // \ru Построение \en Construction + RPArray * = c3d_null ); // \ru Построение \en Construction // \ru Оставляемая часть (если part больше 0, то оставляем часть тела со стороны нормали поверхности). \en A part to be kept (if part is bigger than 0, then keep a part of solid from the side of surface normal). ThreeStates GetPart() const { return part; } diff --git a/C3d/Include/cr_detach_solid.h b/C3d/Include/cr_detach_solid.h index a933875..c61ebd2 100644 --- a/C3d/Include/cr_detach_solid.h +++ b/C3d/Include/cr_detach_solid.h @@ -42,10 +42,10 @@ public : \en \name Common functions of the mathematical object. \{ */ virtual MbeCreatorType IsA() const; // \ru Тип элемента \en Type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const ; // \ru Сделать копию \en Create a copy - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector3D & to, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbAxis3D & axis, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const ; // \ru Сделать копию \en Create a copy + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector3D & to, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbAxis3D & axis, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта \en Set properties of the object @@ -56,7 +56,7 @@ public : virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным. \en Make equal. virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction /** \} */ /** \ru \name Функции строителя, разделяющие отдельные части оболочки. \en \name Functions of the creator subdividing separate parts of the shell. @@ -183,7 +183,7 @@ MbCreator * CreateDetach( MbFaceShell & solid, MbResultType & res ) { res = rt_Error; - MbCreator * result = NULL; + MbCreator * result = c3d_null; ::MakeDetachShells( solid, partSolid, sort ); diff --git a/C3d/Include/cr_displace_creator.h b/C3d/Include/cr_displace_creator.h new file mode 100644 index 0000000..0159523 --- /dev/null +++ b/C3d/Include/cr_displace_creator.h @@ -0,0 +1,214 @@ +//////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Строители перемещения объектов в пространстве. + \en Constructors of displacement of an object. +*/ +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __CR_DISPLACE_CREATOR_H +#define __CR_DISPLACE_CREATOR_H + + +#include +#include +#include + + +//------------------------------------------------------------------------------ +/** \brief \ru Перемещение объекта вдоль вектора. + \en The shift of an object. \~ + \details \ru Строитель перемещает объект вдоль вектора на его длину. \n + \en Constructor displaces an object along the vector by its length. \n \~ + \ingroup Model_Creators +*/ +// --- +class MATH_CLASS MbMotionMaker : public MbCreator { +protected: + MbVector3D vector; ///< \ru Вектор перемещения. \en The displacement vector. + +public: // \ru Конструктор по параметрам. \en Constructor by parameters. + MbMotionMaker( const MbVector3D & ); +private: // \ru Конструктор дублирующий. \en Duplication constructor. + MbMotionMaker( const MbMotionMaker &, MbRegDuplicate * ireg ); + // \ru Объявление конструктора копирования без реализации, чтобы не было копирования по умолчанию. \en Declaration without implementation of the copy-constructor to prevent copying by default. + MbMotionMaker( const MbMotionMaker & ); + +public: // \ru Деструктор \en Destructor + ~MbMotionMaker(); + +public: // \ru Общие функции математического объекта \en Common functions of the mathematical object + virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element + virtual MbeCreatorType Type() const; // \ru Получить групповой тип объекта. \en Get the group type of the object. + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy + virtual bool IsSame( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? + virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать по матрице \en Transform according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг по вектору \en Translation by a vector + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis + + virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта \en Get a name of object property + virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object + virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта \en Set properties of the object + + /// \ru Построение оболочки \en Creation of a shell. + virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, + RPArray * items = c3d_null ); + /// \ru Построение каркаса кривых. \en Creation of a wire-frame. + virtual bool CreateWireFrame( MbWireFrame *& frame, MbeCopyMode sameShell, + RPArray * items = c3d_null ); + /// \ru Построение каркаса точек. \en Creation of a point-frame. + virtual bool CreatePointFrame( MbPointFrame *& frame, MbeCopyMode sameShell, + RPArray * items = c3d_null ); + /// \ru Переместить строитель. \en Displace the creator. + virtual bool Perform( MbCreator * ) const; + + // \ru Добавить перемещение объекта вдоль вектора. \en Add a displacement vector. + void AddVector( const MbVector3D & ); + // \ru Дать параметры. \en Get the parameters. + void GetVector( MbVector3D & m ) const { m = vector; } + // \ru Установить параметры. \en Set the parameters. + void SetVector( const MbVector3D & m ) { vector = m; } + +private: + // \ru Объявление оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration of the assignment operator without implementation to prevent an assignment by default. + void operator = ( const MbMotionMaker & ); + + DECLARE_PERSISTENT_CLASS_NEW_DEL( MbMotionMaker ) +}; + +IMPL_PERSISTENT_OPS( MbMotionMaker ) + + +//------------------------------------------------------------------------------ +/** \brief \ru Поворот объекта вокруг оси. + \en Rotate an object around an axis. \~ + \details \ru Строитель поворачивает объект вокруг оси на заданный угол. \n + \en Constructor rotates an object around the axis by the specified angle. \n \~ + \ingroup Model_Creators +*/ +// --- +class MATH_CLASS MbRotationMaker : public MbCreator { +protected: + MbAxis3D axis; ///< \ru Ось вращения. \en The axis. + double angle; ///< \ru Угол поворота. \en The angle of rotatation. + +public: // \ru Конструктор по параметрам. \en Constructor by parameters. + MbRotationMaker( const MbAxis3D & ax, double an ); +private: // \ru Конструктор дублирующий. \en Duplication constructor. + MbRotationMaker( const MbRotationMaker &, MbRegDuplicate * ireg ); + // \ru Объявление конструктора копирования без реализации, чтобы не было копирования по умолчанию. \en Declaration without implementation of the copy-constructor to prevent copying by default. + MbRotationMaker( const MbRotationMaker & ); + +public: // \ru Деструктор \en Destructor + ~MbRotationMaker(); + +public: // \ru Общие функции математического объекта \en Common functions of the mathematical object + virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element + virtual MbeCreatorType Type() const; // \ru Получить групповой тип объекта. \en Get the group type of the object. + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy + virtual bool IsSame( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? + virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать по матрице \en Transform according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг по вектору \en Translation by a vector + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis + + virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта \en Get a name of object property + virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object + virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта \en Set properties of the object + + /// \ru Построение оболочки \en Creation of a shell. + virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, + RPArray * items = c3d_null ); + /// \ru Построение каркаса кривых. \en Creation of a wire-frame. + virtual bool CreateWireFrame( MbWireFrame *& frame, MbeCopyMode sameShell, + RPArray * items = c3d_null ); + /// \ru Построение каркаса точек. \en Creation of a point-frame. + virtual bool CreatePointFrame( MbPointFrame *& frame, MbeCopyMode sameShell, + RPArray * items = c3d_null ); + /// \ru Переместить строитель. \en Displace the creator. + virtual bool Perform( MbCreator * ) const; + + // \ru Добавить поворот вокруг оси. \en Add an angle of rotatation. + bool AddAngle( const MbAxis3D & ax, double an ); + // \ru Дать параметры. \en Get the parameters. + void GetAxis3D( MbAxis3D & m ) const { m = axis; } + // \ru Установить параметры. \en Set the parameters. + void SetAxis3D( const MbAxis3D & m ) { axis = m; } + +private: + // \ru Объявление оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration of the assignment operator without implementation to prevent an assignment by default. + void operator = ( const MbRotationMaker & ); + + DECLARE_PERSISTENT_CLASS_NEW_DEL( MbRotationMaker ) +}; + +IMPL_PERSISTENT_OPS( MbRotationMaker ) + + +//------------------------------------------------------------------------------ +/** \brief \ru Трансформация объекта по матрице. + \en Transformation of an object by matrix. \~ + \details \ru Строитель трансформирует объект по матрице. \n + \en Constructor transforms an object by the matrix. \n \~ + \ingroup Model_Creators +*/ +// --- +class MATH_CLASS MbTransformationMaker : public MbCreator { +protected: + MbMatrix3D matrix; ///< \ru Матрица преобразования. \en The transform matrix. + +public: // \ru Конструктор по параметрам. \en Constructor by parameters. + MbTransformationMaker( const MbMatrix3D & ); +private: // \ru Конструктор дублирующий. \en Duplication constructor. + MbTransformationMaker( const MbTransformationMaker &, MbRegDuplicate * ireg ); + // \ru Объявление конструктора копирования без реализации, чтобы не было копирования по умолчанию. \en Declaration without implementation of the copy-constructor to prevent copying by default. + MbTransformationMaker( const MbTransformationMaker & ); + +public: // \ru Деструктор \en Destructor + ~MbTransformationMaker(); + +public: // \ru Общие функции математического объекта \en Common functions of the mathematical object + virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element + virtual MbeCreatorType Type() const; // \ru Получить групповой тип объекта. \en Get the group type of the object. + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy + virtual bool IsSame( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? + virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать по матрице \en Transform according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг по вектору \en Translation by a vector + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis + + virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта \en Get a name of object property + virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object + virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта \en Set properties of the object + + /// \ru Построение оболочки \en Creation of a shell. + virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, + RPArray * items = c3d_null ); + /// \ru Построение каркаса кривых. \en Creation of a wire-frame. + virtual bool CreateWireFrame( MbWireFrame *& frame, MbeCopyMode sameShell, + RPArray * items = c3d_null ); + /// \ru Построение каркаса точек. \en Creation of a point-frame. + virtual bool CreatePointFrame( MbPointFrame *& frame, MbeCopyMode sameShell, + RPArray * items = c3d_null ); + /// \ru Переместить строитель. \en Displace the creator. + virtual bool Perform( MbCreator * ) const; + + // \ru Добавить модификацию по матрице \en Add a modification by a matrix + void AddMatrix( const MbMatrix3D & ); + // \ru Дать параметры. \en Get the parameters. + void GetMatrix( MbMatrix3D & m ) const { m = matrix; } + // \ru Установить параметры. \en Set the parameters. + void SetMatrix( const MbMatrix3D & m ) { matrix = m; } + +private: + // \ru Объявление оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration of the assignment operator without implementation to prevent an assignment by default. + void operator = ( const MbTransformationMaker & ); + + DECLARE_PERSISTENT_CLASS_NEW_DEL( MbTransformationMaker ) +}; + +IMPL_PERSISTENT_OPS( MbTransformationMaker ) + + +#endif // __CR_DISPLACE_CREATOR_H diff --git a/C3d/Include/cr_draft_solid.h b/C3d/Include/cr_draft_solid.h index c15ef1f..b7c916b 100644 --- a/C3d/Include/cr_draft_solid.h +++ b/C3d/Include/cr_draft_solid.h @@ -47,7 +47,7 @@ public: , fp ( faceProp ) , np ( new MbPlacement3D( nPlace ) ) , edgeNb ( -1 ) - , pl ( NULL ) + , pl ( c3d_null ) , reverse ( rev ) , step ( false ) { @@ -65,7 +65,7 @@ public: , angle ( ang ) , faceIndices( ) , fp ( faceProp ) - , np ( nPlace ? new MbPlacement3D( *nPlace ) : NULL ) + , np ( nPlace ? new MbPlacement3D( *nPlace ) : c3d_null ) , edgeNb ( edgeInd ) , pl ( new SArray( partLines ) ) , reverse ( rev ) @@ -82,10 +82,10 @@ public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта \en Set properties of the object @@ -98,7 +98,7 @@ public : // \ru Общие функции твердого тела \en Common functions of solid virtual bool CreateShell( MbFaceShell *&, MbeCopyMode sameShell, - RPArray * = NULL ); // \ru Построение \en Construction + RPArray * = c3d_null ); // \ru Построение \en Construction private : // \ru Объявление оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration of the assignment operator without implementation to prevent an assignment by default. diff --git a/C3d/Include/cr_duplication_solid.h b/C3d/Include/cr_duplication_solid.h index 5a81df9..03636fe 100644 --- a/C3d/Include/cr_duplication_solid.h +++ b/C3d/Include/cr_duplication_solid.h @@ -46,10 +46,10 @@ public: \{ */ /// \ru Получить регистрационный тип (для копирования, дублирования). \en Get the registration type (for copying, duplication). virtual MbeCreatorType IsA() const; - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const ; // \ru сделать копию \en create a copy - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const ; // \ru сделать копию \en create a copy + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual void GetProperties( MbProperties & ); // \ru выдать свойства объекта \en get properties of the object virtual void SetProperties( const MbProperties & ); // \ru записать свойства объекта \en set properties of the object @@ -60,7 +60,7 @@ public: virtual bool SetEqual ( const MbCreator & ); // \ru сделать равным \en make equal virtual bool CreateShell( MbFaceShell *&, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction /** \} */ private : diff --git a/C3d/Include/cr_elementary_solid.h b/C3d/Include/cr_elementary_solid.h index 43f630c..f68766b 100644 --- a/C3d/Include/cr_elementary_solid.h +++ b/C3d/Include/cr_elementary_solid.h @@ -10,11 +10,9 @@ #ifndef __CR_ELEMENTARY_SOLID_H #define __CR_ELEMENTARY_SOLID_H - #include #include - class MATH_CLASS MbElementarySurface; @@ -46,17 +44,17 @@ class MATH_CLASS MbElementarySurface; // --- class MATH_CLASS MbElementarySolid : public MbCreator { protected : - SArray points; ///< \ru Опорные точки оболочки тела. \en Support points of a solid shell. - ElementaryShellType type; ///< \ru Тип тела. \en Type of a solid. - MbPlacement3D position; ///< \ru Локальная система координат тела. \en Local coordinate system оf a solid. - double radius; ///< \ru Радиус основания тела. \en Radius of the base of the solid. - double minorRadius; ///< \ru Малый радиус основания тела. \en Small radius of the base of the solid. - double height; ///< \ru Высота тела. \en Height of a solid. - double length; ///< \ru Длина тела. \en Length of a solid. - double minorLength; ///< \ru Малая длина тела. \en Small length of a solid. - double width; ///< \ru Ширина тела. \en Width of a solid. - double angle; ///< \ru Угол между осью position.axisZ и боковой образующей. \en Angle between position.axisZ axis and lateral generatrix. - double ratio; ///< \ru Коэффициент растяжения. \en Stretch factor. + SArray points; ///< \ru Опорные точки оболочки тела. \en Support points of a solid shell. + ElementaryShellType type; ///< \ru Тип тела. \en Type of a solid. + MbPlacement3D position; ///< \ru Локальная система координат тела. \en Local coordinate system оf a solid. + double radius; ///< \ru Радиус основания тела. \en Radius of the base of the solid. + double minorRadius; ///< \ru Малый радиус основания тела. \en Small radius of the base of the solid. + double height; ///< \ru Высота тела. \en Height of a solid. + double length; ///< \ru Длина тела. \en Length of a solid. + double minorLength; ///< \ru Малая длина тела. \en Small length of a solid. + double width; ///< \ru Ширина тела. \en Width of a solid. + double angle; ///< \ru Угол между осью position.axisZ и боковой образующей. \en Angle between position.axisZ axis and lateral generatrix. + double ratio; ///< \ru Коэффициент растяжения. \en Stretch factor. public : /** \brief \ru Конструктор. \en Constructor. \~ @@ -97,13 +95,13 @@ public : \param[in] n - \ru Именователь операции. \en An object defining names generation in the operation. \~ */ - template - MbElementarySolid( const Points & pnts, ElementaryShellType t, const MbSNameMaker & n ); - + template + MbElementarySolid( const PointsVector & pnts, ElementaryShellType t, const MbSNameMaker & n ); private : - MbElementarySolid( const MbElementarySolid &, MbRegDuplicate * iReg ); // \ru Конструктор копирования с регистратором \en Copy-constructor with the registrator - // \ru Объявление конструктора копирования без реализации, чтобы не было копирования по умолчанию. \en Declaration without implementation of the copy-constructor to prevent copying by default. + /// \ru Конструктор копирования с регистратором. \en Copy-constructor with the registrator. + MbElementarySolid( const MbElementarySolid &, MbRegDuplicate * ); + /// \ru Объявление конструктора копирования без реализации, чтобы не было копирования по умолчанию. \en Declaration without implementation of the copy-constructor to prevent copying by default. MbElementarySolid( const MbElementarySolid & ); public : /// \ru Деструктор. \en Destructor. @@ -113,15 +111,15 @@ public : \en \name Common functions of the shell creator. \{ */ virtual MbeCreatorType IsA() const; // \ru Тип элемента \en Type of element - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта \en Get a name of object property - virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object - virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта \en Set properties of the object - virtual void GetBasisItems( RPArray & s ); // \ru Дать базовые объекты \en Get the basis objects + virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object + virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта \en Set properties of the object + virtual void GetBasisItems( RPArray & ); // \ru Дать базовые объекты \en Get the basis objects virtual void GetBasisPoints( MbControlData3D & ) const; // \ru Выдать контрольные точки объекта. \en Get control points of object. virtual void SetBasisPoints( const MbControlData3D & ); // \ru Изменить объект по контрольным точкам. \en Change the object by control points. @@ -130,9 +128,12 @@ public : virtual bool SetEqual( const MbCreator & ); // \ru Сделать равным \en Make equal virtual bool CreateShell( MbFaceShell *&, MbeCopyMode sameShell, - RPArray * = NULL ); // \ru Построение \en Construction + RPArray * = c3d_null ); // \ru Построение \en Construction /** \} */ +private: + /// \ru Установить параметры по типу и набору точек. \en Set parameters by type and points. + bool SetParameters(); private : // \ru Объявление оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration of the assignment operator without implementation to prevent an assignment by default. void operator = ( const MbElementarySolid & ); @@ -142,6 +143,35 @@ private : IMPL_PERSISTENT_OPS( MbElementarySolid ) + +//------------------------------------------------------------------------------ +// \ru Конструктор по точкам и типу тела. При этом, по массиву точек тела и его типу, заполняются соответствующие его параметры. +// \en Constructor by points and type of solid. +// --- +template +MbElementarySolid::MbElementarySolid( const PointsVector & pnts, ElementaryShellType t, const MbSNameMaker & n ) + : MbCreator ( n ) + , points ( ) + , type ( t ) + , position ( ) + , radius ( 0.0 ) + , minorRadius( 0.0 ) + , height ( 0.0 ) + , length ( 0.0 ) + , minorLength( 0.0 ) + , width ( 0.0 ) + , angle ( 0.0 ) + , ratio ( 0.0 ) +{ + size_t cnt = pnts.size(); + points.reserve( cnt ); + for ( size_t k = 0; k < cnt; ++k ) { + points.push_back( pnts[k] ); + } + SetParameters(); +} + + //------------------------------------------------------------------------------ /** \brief \ru Создать оболочку элементарного тела. \en Create a shell of an elementary solid. \~ @@ -186,7 +216,7 @@ MATH_FUNC (MbCreator *) CreateElementary( const SArray & points, const ElementaryShellType t, const MbSNameMaker & n, MbResultType & res, - MbFaceShell *& shell ); + c3d::ShellSPtr & shell ); //------------------------------------------------------------------------------ @@ -214,7 +244,7 @@ MATH_FUNC (MbCreator *) CreateElementary( const SArray & points, MATH_FUNC (MbCreator *) CreateElementary( const MbElementarySurface & surface, const MbSNameMaker & n, MbResultType & res, - MbFaceShell *& shell ); + c3d::ShellSPtr & shell ); #endif // __CR_ELEMENTARY_SOLID_H diff --git a/C3d/Include/cr_evolution_solid.h b/C3d/Include/cr_evolution_solid.h index 127abf3..f2e211a 100644 --- a/C3d/Include/cr_evolution_solid.h +++ b/C3d/Include/cr_evolution_solid.h @@ -27,7 +27,7 @@ class MATH_CLASS MbCurveEvolutionSolid : public MbCurveSweptSolid { protected : MbSweptData sweptData; ///< \ru Данные об образующей. \en Generating curve data. SPtr spineCurve; ///< \ru Направляющая кривая. \en Spine curve. - SPtr directionCurve; ///< \ru Кривая вектора ориентации матрицы преобразования (может быть NULL для простой траектории). \en A curve of the transformation matrix orientation (it may be NULL for a simple trajectory). + SPtr directionCurve; ///< \ru Кривая вектора ориентации матрицы преобразования (может быть c3d_null для простой траектории). \en A curve of the transformation matrix orientation (it may be c3d_null for a simple trajectory). MbVector3D direction; ///< \ru Вектор ориентации матрицы преобразования (может быть нулевой, в случае автоопределения). \en Vector of transformation matrix orientation (it's equal zero in the mode of automatic direction calculation). SPtr spineNames; ///< \ru Именователь направляющей. \en An object defining the name of the spine curve. EvolutionValues parameters; ///< \ru Параметры. \en Parameters. @@ -128,10 +128,10 @@ public : \en \name Common functions of the mathematical object. \{ */ virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const ; // \ru Сделать копию \en Create a copy - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const ; // \ru Сделать копию \en Create a copy + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта \en Set properties of the object diff --git a/C3d/Include/cr_extension_shell.h b/C3d/Include/cr_extension_shell.h index a906d9e..bf2a62c 100644 --- a/C3d/Include/cr_extension_shell.h +++ b/C3d/Include/cr_extension_shell.h @@ -46,10 +46,10 @@ public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en Type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector3D & to, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbAxis3D & axis, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector3D & to, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbAxis3D & axis, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта \en Set properties of the object @@ -62,7 +62,7 @@ public : // \ru Общие функции твердого тела \en Common functions of solid solid virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction // \ru Дать параметры. \en Get the parameters. void GetParameters( ExtensionValues & params ) const { params = parameters; } diff --git a/C3d/Include/cr_extrusion_solid.h b/C3d/Include/cr_extrusion_solid.h index ef6c1de..93e122d 100644 --- a/C3d/Include/cr_extrusion_solid.h +++ b/C3d/Include/cr_extrusion_solid.h @@ -59,7 +59,7 @@ public : OperationType oType, const MbSNameMaker & operNames, const RPArray & contoursNames, - const c3d::CreatorsSPtrVector * creators = NULL, + const c3d::CreatorsSPtrVector * creators = c3d_null, bool sameCreators = true ); private : @@ -73,10 +73,10 @@ public : \en \name Common functions of the mathematical object. \{ */ virtual MbeCreatorType IsA() const; // \ru Тип элемента. \en A type of element. - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Cделать копию. \en Make a copy. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг. \en Move. - virtual void Rotate( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Cделать копию. \en Make a copy. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг. \en Move. + virtual void Rotate( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта. \en Set properties of the object. @@ -94,7 +94,7 @@ public : \en \name Common functions of the rigid solid (forming operations). \{ */ virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение. \en Construction. + RPArray * items = c3d_null ); // \ru Построение. \en Construction. virtual MbFaceShell * InitShell( bool in ); virtual void InitBasis( RPArray & items ); @@ -139,7 +139,7 @@ IMPL_PERSISTENT_OPS( MbCurveExtrusionSolid ) \en Face set the construction is complemented with respect to. \~ \param[in] sameShell - \ru Способ копирования граней. \en The method of copying faces. \~ - \param[in] creators - \ru Строители тела solid. + \param[in] solidCreators - \ru Строители тела solid. \en Creators of the solid. \~ \param[in] sweptData - \ru Данные об образующей. \en The generating curve data. \~ diff --git a/C3d/Include/cr_fillet_solid.h b/C3d/Include/cr_fillet_solid.h index b12681a..1bea799 100644 --- a/C3d/Include/cr_fillet_solid.h +++ b/C3d/Include/cr_fillet_solid.h @@ -60,10 +60,10 @@ public : // \ru Общие функции математического объекта. \en Common functions of the mathematical object. virtual MbeCreatorType IsA() const; // \ru Тип элемента. \en A type of element. - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const ; // \ru Сделать копию \en Create a copy - virtual void Transform( const MbMatrix3D &matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector3D &to, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbAxis3D &axis, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const ; // \ru Сделать копию \en Create a copy + virtual void Transform( const MbMatrix3D &matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector3D &to, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbAxis3D &axis, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта. \en Set properties of the object. @@ -76,7 +76,7 @@ public : // \ru Общие функции твердого тела \en Common functions of solid virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction private : virtual void ReadDistances ( reader &in ); diff --git a/C3d/Include/cr_hole_solid.h b/C3d/Include/cr_hole_solid.h index df9908d..66aa257 100644 --- a/C3d/Include/cr_hole_solid.h +++ b/C3d/Include/cr_hole_solid.h @@ -69,10 +69,10 @@ public : // \ru Переопределение функций базового класса \en The base class functions override virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const ; // \ru Сделать копию \en Create a copy - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector3D & to, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbAxis3D & axis, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const ; // \ru Сделать копию \en Create a copy + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector3D & to, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbAxis3D & axis, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта \en Set properties of the object @@ -88,7 +88,7 @@ public : // \ru Общие функции твердого тела \en Common functions of solid virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction virtual MbFaceShell * InitShell( bool in ); virtual void InitBasis( RPArray & items ); diff --git a/C3d/Include/cr_intersection_curve.h b/C3d/Include/cr_intersection_curve.h index b9eacc6..eec1a5b 100644 --- a/C3d/Include/cr_intersection_curve.h +++ b/C3d/Include/cr_intersection_curve.h @@ -39,15 +39,15 @@ public: // \ru Общие функции строителя. \en The common functions of the creator. virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * iReg = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame ( const MbCreator &, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & ) const; // \ru Являются ли объекты подобными \en Whether the objects are similar virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual MbePrompt GetPropertyName(); // \ru Дать имя свойства объекта \en Get the object property name virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object @@ -57,7 +57,7 @@ public: virtual void SetBasisPoints( const MbControlData3D & ); // \ru Изменить объект по контрольным точкам. \en Change the object by control points. // \ru Построить кривую по журналу построения \en Create a curve from the history tree - virtual bool CreateWireFrame( MbWireFrame *&, MbeCopyMode, RPArray * items = NULL ); + virtual bool CreateWireFrame( MbWireFrame *&, MbeCopyMode, RPArray * items = c3d_null ); /** \} */ diff --git a/C3d/Include/cr_join_shell.h b/C3d/Include/cr_join_shell.h index b8a3999..8058e1e 100644 --- a/C3d/Include/cr_join_shell.h +++ b/C3d/Include/cr_join_shell.h @@ -39,10 +39,10 @@ public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA () const; ///< \ru Тип элемента \en Element type - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; ///< \ru Сделать копию \en Make a copy - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); ///< \ru Преобразовать элемент согласно матрице \en Transform an element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); ///< \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); ///< \ru Поворот вокруг оси \en Rotation about an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; ///< \ru Сделать копию \en Make a copy + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); ///< \ru Преобразовать элемент согласно матрице \en Transform an element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); ///< \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); ///< \ru Поворот вокруг оси \en Rotation about an axis virtual bool IsSame( const MbCreator &, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & ) const; // \ru Являются ли объекты подобными. \en Whether the objects are similar @@ -58,7 +58,7 @@ public : // \ru Общие функции твердого тела \en Common functions of solid solid virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); ///< \ru Построение \en Construction + RPArray * items = c3d_null ); ///< \ru Построение \en Construction // \ru Дать параметры. \en Get the parameters. diff --git a/C3d/Include/cr_lofted_solid.h b/C3d/Include/cr_lofted_solid.h index 3407b37..52e35be 100644 --- a/C3d/Include/cr_lofted_solid.h +++ b/C3d/Include/cr_lofted_solid.h @@ -29,7 +29,7 @@ protected : RPArray curves; ///< \ru Плоские сечения. \en Plane sections. SPtr spine; ///< \ru Осевая линия (может отсутствовать). \en Spine curve (can be absent). LoftedValues parameters; ///< \ru Параметры. \en Parameters. - RPArray * guideCurves; ///< \ru Массив направляющих кривых (может быть NULL). \en An array of guide curves (can be NULL). + RPArray * guideCurves; ///< \ru Массив направляющих кривых (может быть c3d_null). \en An array of guide curves (can be c3d_null). SArray * userPnts; ///< \ru Пользовательские точки на сечениях. \en Custom points on the sections. public: @@ -64,10 +64,10 @@ public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const ; // \ru Сделать копию \en Create a copy - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать \en Transform - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const ; // \ru Сделать копию \en Create a copy + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать \en Transform + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта \en Set properties of the object diff --git a/C3d/Include/cr_median_shell.h b/C3d/Include/cr_median_shell.h index edda9cf..4c4105d 100644 --- a/C3d/Include/cr_median_shell.h +++ b/C3d/Include/cr_median_shell.h @@ -48,13 +48,13 @@ private: public: virtual MbeCreatorType IsA() const; // \ru Тип элемента \en Type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame( const MbCreator &, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & ) const; // \ru Являются ли объекты подобными \en Whether the objects are similar virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта \en Set properties of the object @@ -62,7 +62,7 @@ public: // \ru Построение оболочки по исходным данным \en Construction of a shell from the given data virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); + RPArray * items = c3d_null ); /// \ru Дать параметры. \en Get the parameters. void GetParameters( MedianShellValues & params ) const { params = parameters; } @@ -89,7 +89,7 @@ IMPL_PERSISTENT_OPS( MbMedianShell ) The function simultaneously creates the shell and its constructor.\n \~ \param[in] solid - \ru Исходное тело. \en The initial solid. \~ - \param[in] faces - \ru Выбранные пары граней. + \param[in] faceIndexes - \ru Выбранные пары граней. \en Selected face pairs. \~ \param[in] parameters - \ru Параметры операции. \en Parameters of operation. \~ diff --git a/C3d/Include/cr_mesh_shell.h b/C3d/Include/cr_mesh_shell.h index 5b59c37..d0097ca 100644 --- a/C3d/Include/cr_mesh_shell.h +++ b/C3d/Include/cr_mesh_shell.h @@ -42,12 +42,12 @@ public: public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; ///< \ru Тип элемента \en Element type - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; ///< \ru Сделать копию \en Make a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; ///< \ru Сделать копию \en Make a copy virtual bool IsSame( const MbCreator &, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool SetEqual ( const MbCreator & ); ///< \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); ///< \ru Преобразовать по матрице \en Transform according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); ///< \ru Сдвиг по вектору \en Translation by the vector - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); ///< \ru Поворот вокруг оси \en Rotation about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); ///< \ru Преобразовать по матрице \en Transform according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); ///< \ru Сдвиг по вектору \en Translation by the vector + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); ///< \ru Поворот вокруг оси \en Rotation about an axis virtual MbePrompt GetPropertyName(); ///< \ru Выдать заголовок свойства объекта \en Get name of object property virtual void GetProperties( MbProperties & ); ///< \ru Выдать свойства объекта \en Get properties of the object @@ -59,7 +59,7 @@ public: // \ru Общие функции математического объе public: /// \ru Построение оболочки \en Creation of a shell virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); + RPArray * items = c3d_null ); // \ru Дать параметры. \en Get the parameters. void GetParameters( MeshSurfaceValues & params ) const; // \ru Установить параметры. \en Set the parameters. diff --git a/C3d/Include/cr_modified_nurbs_.h b/C3d/Include/cr_modified_nurbs_.h index 7e5ca95..e42dfbf 100644 --- a/C3d/Include/cr_modified_nurbs_.h +++ b/C3d/Include/cr_modified_nurbs_.h @@ -41,12 +41,12 @@ public: // \ru деструктор \en destructor public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru сделать копию \en create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru сделать копию \en create a copy virtual bool IsSame( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool SetEqual ( const MbCreator & ); // \ru сделать равным \en make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать по матрице \en Transform according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru сдвиг по вектору \en translation by a vector - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать по матрице \en Transform according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru сдвиг по вектору \en translation by a vector + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual MbePrompt GetPropertyName(); // \ru выдать заголовок свойства объекта \en get a name of object property virtual void GetProperties( MbProperties & properties ); // \ru выдать свойства объекта \en get properties of the object @@ -56,7 +56,7 @@ public: // \ru Общие функции математического объе /// \ru Построение оболочки. \en creation of a shell virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); + RPArray * items = c3d_null ); virtual void Refresh( MbFaceShell & outer ); ///< \ru обновить форму оболочки \en update shape of the shell // \ru Выдать базовые объекты. \en Get basis objects. virtual void GetBasisItems( RPArray & s ); @@ -106,12 +106,12 @@ public: // \ru деструктор \en destructor public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru сделать копию \en create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru сделать копию \en create a copy virtual bool IsSame( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool SetEqual ( const MbCreator & ); // \ru сделать равным \en make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать по матрице \en Transform according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru сдвиг по вектору \en translation by a vector - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать по матрице \en Transform according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru сдвиг по вектору \en translation by a vector + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual MbePrompt GetPropertyName(); // \ru выдать заголовок свойства объекта \en get a name of object property virtual void GetProperties( MbProperties & properties ); // \ru выдать свойства объекта \en get properties of the object @@ -121,7 +121,7 @@ public: // \ru Общие функции математического объе /// \ru построение оболочки \en creation of a shell virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); + RPArray * items = c3d_null ); virtual void Refresh( MbFaceShell & outer ); ///< \ru обновить форму оболочки \en update shape of the shell // \ru Выдать базовые объекты. \en Get basis objects. virtual void GetBasisItems( RPArray & s ); diff --git a/C3d/Include/cr_modified_solid.h b/C3d/Include/cr_modified_solid.h index 02954b1..981e0d9 100644 --- a/C3d/Include/cr_modified_solid.h +++ b/C3d/Include/cr_modified_solid.h @@ -62,12 +62,12 @@ public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать по матрице \en Transform according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг по вектору \en Translation by the vector - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать по матрице \en Transform according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг по вектору \en Translation by the vector + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта \en Get a name of object property virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object @@ -77,7 +77,7 @@ public: /// \ru Построение оболочки \en Creation of a shell virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); + RPArray * items = c3d_null ); virtual void Refresh( MbFaceShell & outer ); ///< \ru Обновить форму оболочки \en Update shape of the shell // \ru Дать параметры. \en Get the parameters. diff --git a/C3d/Include/cr_nurbs3d.h b/C3d/Include/cr_nurbs3d.h index 48ba21e..23d8e42 100644 --- a/C3d/Include/cr_nurbs3d.h +++ b/C3d/Include/cr_nurbs3d.h @@ -11,6 +11,7 @@ #include +#include #include @@ -24,14 +25,14 @@ // --- class MATH_CLASS MbNurbs3DCreator : public MbCreator { private: - SArray points; // \ru Точки, через которые проходит сплайн \en Points which the spline passes through - SArray weights; // \ru Веса \en Weights - SArray knots; // \ru Узлы \en Knots - RPArray< MbPntMatingData > matingData; // \ru Данные сопряжения в точках \en Data about mating in the points - MbeSplineParamType paramType; // \ru Тип параметризации \en Parametrization type - size_t degree; // \ru Степень сплайна \en Spline degree - bool closed; // \ru Замкнутость сплайна \en Spline closedness - bool throughPnts; // \ru через точки \en Through points + SArray points; // \ru Точки, через которые проходит сплайн \en Points which the spline passes through + SArray weights; // \ru Веса \en Weights + SArray knots; // \ru Узлы \en Knots + RPArray matingData; // \ru Данные сопряжения в точках \en Data about mating in the points + MbeSplineParamType paramType; // \ru Тип параметризации \en Parametrization type + size_t degree; // \ru Степень сплайна \en Spline degree + bool closed; // \ru Замкнутость сплайна \en Spline closedness + bool throughPnts; // \ru через точки \en Through points protected: MbNurbs3DCreator( const MbNurbs3DCreator &, MbRegDuplicate * iReg ); // \ru Конструктор копирования \en Copy-constructor @@ -42,24 +43,24 @@ public: MbeSplineParamType paramType, size_t degree, bool closed, const SArray * weights, const SArray * knots, - const RPArray< MbPntMatingData > & matingData, + const RPArray & matingData, const MbSNameMaker & snMaker ); public: virtual ~MbNurbs3DCreator(); // \ru Общие функции строителя. \en The common functions of the creator. virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * iReg = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame ( const MbCreator &, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & ) const; // \ru Являются ли объекты подобными \en Whether the objects are similar virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis - virtual MbePrompt GetPropertyName(); // \ru Дать имя свойства объекта \en Get the object property name + virtual MbePrompt GetPropertyName(); // \ru Дать имя свойства объекта \en Get the object property name virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта \en Set properties of the object virtual void GetBasisItems ( RPArray & ); // \ru Дать базовые объекты \en Get the basis objects @@ -67,7 +68,7 @@ public: virtual void SetBasisPoints( const MbControlData3D & ); // \ru Изменить объект по контрольным точкам. \en Change the object by control points. // \ru Построить кривую по журналу построения \en Create a curve from the history tree - virtual bool CreateWireFrame( MbWireFrame *&, MbeCopyMode, RPArray * items = NULL ); + virtual bool CreateWireFrame( MbWireFrame *&, MbeCopyMode, RPArray * items = c3d_null ); /** \} */ @@ -80,6 +81,7 @@ private: IMPL_PERSISTENT_OPS( MbNurbs3DCreator ) + //------------------------------------------------------------------------------ /** \brief \ru Создать пространственный сплайн через точки и с сопряжениями. \en Create a spatial spline through points and with the given tangents. \~ @@ -94,14 +96,14 @@ IMPL_PERSISTENT_OPS( MbNurbs3DCreator ) \ingroup Curve3D_Modeling */ //--- -MATH_FUNC (MbCreator *) CreateSplineThrough( const SArray & points, // \ru Точки \en Points - MbeSplineParamType paramType, // \ru Тип параметризации \en Parametrization type - size_t degree, // \ru Порядок сплайна \en Spline degree - bool closed, // \ru Замкнуть \en Make close - RPArray< MbPntMatingData > & transitions, // \ru Сопряжения \en Tangents - const MbSNameMaker & snMaker, // \ru Именователь \en An object for naming the new objects - MbResultType & resType, - MbCurve3D *& resCurve ); +MATH_FUNC (MbCreator *) CreateSplineThrough( const SArray & points, // \ru Точки \en Points + MbeSplineParamType paramType, // \ru Тип параметризации \en Parametrization type + size_t degree, // \ru Порядок сплайна \en Spline degree + bool closed, // \ru Замкнуть \en Make close + RPArray & transitions, // \ru Сопряжения \en Tangents + const MbSNameMaker & snMaker, // \ru Именователь \en An object for naming the new objects + MbResultType & resType, + MbCurve3D *& resCurve ); //------------------------------------------------------------------------------ @@ -115,15 +117,15 @@ MATH_FUNC (MbCreator *) CreateSplineThrough( const SArray & point */ //--- MATH_FUNC (MbCreator *) CreateSplineBy( const SArray & points, // \ru Точки \en Points - size_t degree, // \ru Порядок сплайна \en Spline degree - bool closed, // \ru Замкнуть \en Make close + size_t degree, // \ru Порядок сплайна \en Spline degree + bool closed, // \ru Замкнуть \en Make close const SArray * weights, // \ru Веса \en Weights const SArray * knots, // \ru Узлы \en Knots - MbPntMatingData * begData, // \ru Сопряжение в начале \en Tangent at the start point - MbPntMatingData * endData, // \ru Сопряжение в конце \en Tangent at the end point + c3d::PntMatingData3D * begData, // \ru Сопряжение в начале \en Tangent at the start point + c3d::PntMatingData3D * endData, // \ru Сопряжение в конце \en Tangent at the end point const MbSNameMaker & snMaker, // \ru Именователь \en An object for naming the new objects - MbResultType & resType, - MbCurve3D *& resCurve ); + MbResultType & resType, + MbCurve3D *& resCurve ); #endif // __CR_NURBS3D_H diff --git a/C3d/Include/cr_nurbs_block_solid.h b/C3d/Include/cr_nurbs_block_solid.h index 1b2aeff..6c4f70c 100644 --- a/C3d/Include/cr_nurbs_block_solid.h +++ b/C3d/Include/cr_nurbs_block_solid.h @@ -40,12 +40,12 @@ public: // \ru Деструктор \en Destructor public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать по матрице \en Transform according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг по вектору \en Translation by a vector - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать по матрице \en Transform according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг по вектору \en Translation by a vector + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта \en Get a name of object property virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object @@ -57,7 +57,7 @@ public: // \ru Общие функции математического объе public: /// \ru Построение оболочки \en Creation of a shell virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); + RPArray * items = c3d_null ); virtual void Refresh( MbFaceShell & outer ); ///< \ru Обновить форму оболочки \en Update shape of the shell private: diff --git a/C3d/Include/cr_nurbs_surfaces_shell.h b/C3d/Include/cr_nurbs_surfaces_shell.h index 02a0ede..dc84e16 100644 --- a/C3d/Include/cr_nurbs_surfaces_shell.h +++ b/C3d/Include/cr_nurbs_surfaces_shell.h @@ -24,38 +24,36 @@ class IProgressIndicator; \en Construct a shell from NURBS-surfaces. \~ \details \ru Построить оболочку из NURBS-поверхностей MbSplineSurface по заданному множеству точек условно расположенных в узлах четырехугольной сетки. \n \en Construct a shell from NURBS-surfaces MbSplineSurface by a given set of points conventionally located at the nodes of a quadrangle grid. \n \~ - \param[in] parameters - \ru Параметры построения. - \en Parameters of a shell creation. \~ + \param[in] params - \ru Параметры построения. + \en Parameters of a shell creation. \~ \param[in] operNames - \ru Именователь граней. \en An object for naming faces. \~ \param[in] isPhantom - \ru Режим создания фантома. \en Create in the phantom mode. \~ \param[out] res - \ru Код результата операции. \en Operation result code. \~ - \param[out] shell - \ru Построенная оболочка. - \en The resultant shell. \~ \param[out] indicator - \ru Индикатор хода построения позволяющий прервать построение. \en Construction process indicator which allow to interrupt the construction. \~ - \result \ru Возвращает оболочку. - \en Returns the constructуed shell. \~ + \result \ru Возвращает построенную оболочку. + \en Returns the constructed shell. \~ \ingroup Model_Creators */ // --- -MATH_FUNC (MbFaceShell *) CreateNurbsSurfacesShell( NurbsSurfaceValues & params, - const MbSNameMaker & operNames, - bool isPhantom, - MbResultType & res, - IProgressIndicator * = NULL ); +MATH_FUNC (MbFaceShell *) CreateNurbsSurfacesShell( NurbsSurfaceValues & params, + const MbSNameMaker & operNames, + bool isPhantom, + MbResultType & res, + IProgressIndicator * indicator = c3d_null ); //------------------------------------------------------------------------------ -// проверить оболочку из нурбс-поверхностей -/** \brief \ru Построить оболочку из NURBS-поверхностей. - \en Construct a shell from NURBS-surfaces. \~ - \details \ru Построить оболочку из NURBS-поверхностей MbSplineSurface по заданному множеству точек условно расположенных в узлах четырехугольной сетки. \n - \en Construct a shell from NURBS-surfaces MbSplineSurface by a given set of points conventionally located at the nodes of a quadrangle grid. \n \~ - \param[in] parameters - \ru Параметры построения. - \en Parameters of a shell creation. \~ +// Проверить оболочку из нурбс-поверхностей +/** \brief \ru Проверить оболочку из NURBS-поверхностей. + \en Check a shell from NURBS-surfaces. \~ + \details \ru Проверить построенную оболочку из NURBS-поверхностей MbSplineSurface по заданному множеству точек условно расположенных в узлах четырехугольной сетки. \n + \en Check a constructed shell from NURBS-surfaces MbSplineSurface by a given set of points conventionally located at the nodes of a quadrangle grid. \n \~ + \param[in] params - \ru Параметры построения. + \en Parameters of a shell creation. \~ \param[in] shell - \ru Оболочка, построенная по заданным параметрам. \en The shell constructed by given parameters. \~ \param[out] indicator - \ru Индикатор хода построения позволяющий прервать построение. @@ -66,8 +64,8 @@ MATH_FUNC (MbFaceShell *) CreateNurbsSurfacesShell( NurbsSurfaceValues & params, */ // --- MATH_FUNC (MbResultType) CheckNurbsSurfacesShell( const NurbsSurfaceValues & params, - const MbFaceShell & shell, - IProgressIndicator * = NULL ); + const MbFaceShell & shell, + IProgressIndicator * indicator = c3d_null ); #endif // __NURBS_SURFACES_SHELL_H diff --git a/C3d/Include/cr_nurbs_surfaces_solid.h b/C3d/Include/cr_nurbs_surfaces_solid.h index 6cec11e..d4d335b 100644 --- a/C3d/Include/cr_nurbs_surfaces_solid.h +++ b/C3d/Include/cr_nurbs_surfaces_solid.h @@ -50,12 +50,12 @@ public: public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en Type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru сделать копию \en create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru сделать копию \en create a copy virtual bool IsSame( const MbCreator &, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool SetEqual ( const MbCreator & ); // \ru сделать равным \en make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать по матрице \en Transform according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru сдвиг по вектору \en translation by a vector - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать по матрице \en Transform according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru сдвиг по вектору \en translation by a vector + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual MbePrompt GetPropertyName(); // \ru выдать заголовок свойства объекта \en get a name of object property virtual void GetProperties( MbProperties & properties ); // \ru выдать свойства объекта \en get properties of the object @@ -67,7 +67,7 @@ public: // \ru Общие функции математического объе public: /// \ru построение оболочки \en creation of a shell virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); + RPArray * items = c3d_null ); virtual void Refresh( MbFaceShell & outer ); ///< \ru обновить форму оболочки \en update shape of the shell // \ru Дать параметры. \en Get the parameters. @@ -110,7 +110,7 @@ MATH_FUNC (MbCreator *) CreateNurbsShell( NurbsSurfaceValues & parameters, bool isPhantom, MbResultType & res, MbFaceShell *& shell, - IProgressIndicator * indicator = NULL ); + IProgressIndicator * indicator = c3d_null ); #endif // __CR_NURBS_SURFACES_SOLID_H diff --git a/C3d/Include/cr_offset_curve.h b/C3d/Include/cr_offset_curve.h index 7cfd3fc..5d4082f 100644 --- a/C3d/Include/cr_offset_curve.h +++ b/C3d/Include/cr_offset_curve.h @@ -12,6 +12,7 @@ #include #include +#include #include @@ -29,46 +30,74 @@ class MATH_CLASS MbCurve3D; class MATH_CLASS MbOffsetCurveCreator : public MbCreator { private: // \ru Основные параметры \en The basic parameters - SPtr curve; // \ru Исходная кривая. \en The initial curve. - MbVector3D dir; // \ru Направление смещения. \en The offset direction. - double dist; // \ru Величина смещения. \en The offset distance. - bool fromBeg; // \ru Вектор смещения привязан к началу кривой (иначе к концу). \en The translation vector is associated with the beginning (with the end otherwise). + c3d::SpaceCurveSPtr curve; ///< \ru Исходная кривая. \en The initial curve. + MbVector3D dir; ///< \ru Направление смещения. \en The offset direction. + double dist; ///< \ru Величина смещения. \en The offset distance. + bool fromBeg; ///< \ru Вектор смещения привязан к началу кривой (иначе к концу). \en The translation vector is associated with the beginning (with the end otherwise). // \ru Дополнительные параметры (эквидистанта в пространстве) \en Auxiliary parameters (spatial offset) - bool useFillet; // \ru Заполнять ли разрывы скруглениями (иначе продлять сегменты). \en Whether to fill the gaps with fillets (extend segments otherwise). - bool keepRadius; // \ru Сохранять ли радиусы в скруглениях. \en Whether to keep the radii at fillets. - bool bluntAngle; // \ru Притуплять острые углы стыков сегментов \en Whether to blunt the sharp edges of segments joints. + bool useFillet; ///< \ru Заполнять ли разрывы скруглениями (иначе продлять сегменты). \en Whether to fill the gaps with fillets (extend segments otherwise). + bool keepRadius; ///< \ru Сохранять ли радиусы в скруглениях. \en Whether to keep the radii at fillets. + bool bluntAngle; ///< \ru Притуплять острые углы стыков сегментов \en Whether to blunt the sharp edges of segments joints. + bool bySurfaceNormal; ///< \ru Эквидистанта согласована с нормалью к поверхности. \en Offset point is moved according to surface normal. + c3d::SurfaceSPtr surface; ///< \ru Поверхность кривой или подобная ей. \en Curve's surface or similar to such surface. // \ru Дополнительные параметры (эквидистанта на поверхности грани оболочки) \en Auxiliary parameters (offset on the shell face surface) - c3d::CreatorsSPtrVector shellCreators; // \ru Журнал построения оболочки. \en The shell history tree. + c3d::CreatorsSPtrVector shellCreators; ///< \ru Журнал построения оболочки. \en The shell history tree. protected: MbOffsetCurveCreator( const MbOffsetCurveCreator &, MbRegDuplicate * iReg ); // \ru Конструктор копирования \en Copy-constructor MbOffsetCurveCreator( const MbOffsetCurveCreator & ); // \ru Не реализовано \en Not implemented MbOffsetCurveCreator(); // \ru Не реализовано \en Not implemented public: - // \ru Конструктор эквидистанты в пространстве \en Constructor of offset in the space - MbOffsetCurveCreator( const MbCurve3D &, bool fromBeg, const MbVector3D & dir, double dist, - bool useFillet, bool keepRadius, bool bluntAngle, - const MbSNameMaker & snMaker ); - // \ru Конструктор эквидистанты на поверхности грани оболочки \en Constructor of offset on the shell face surface - MbOffsetCurveCreator( const MbCurve3D &, bool fromBeg, const MbVector3D & dir, double dist, - const RPArray & shellCreators, bool sameCreators, - const MbSNameMaker & snMaker ); + /** \brief \ru Конструктор эквидистанты в пространстве. + \en Constructor of offset in the space. \~ + \details \ru Конструктор эквидистанты в пространстве. \n + \en Constructor of offset in the space. \n \~ + \param[in] curve - \ru Базовая кривая. + \en The base curve. \~ + \param[in] params - \ru Параметры. + \en Parameters. \~ + \param[in] snMaker - \ru Именователь с версия исполнения. + \en Names makers with a version. \~ + */ + MbOffsetCurveCreator( const MbCurve3D & curve, + const MbSpatialOffsetCurveParams & params, + const MbSNameMaker & snMaker ); + /** \brief \ru Конструктор эквидистанты на поверхности грани оболочки. + \en Constructor of offset on the shell face surface. \~ + \details \ru Конструктор эквидистанты на поверхности грани оболочки. \n + \en Constructor of offset on the shell face surface. \n \~ + \param[in] curve - \ru Базовая кривая. + \en The base curve. \~ + \param[in] params - \ru Параметры. + \en Parameters. \~ + \param[in] shellCreators - \ru Построители тела. + \en Creators of a solid. \~ + \param[in] sameCreators - \ru Признак использования оригиналов построителей. + \en Flag of using the original creators. \~ + \param[in] snMaker - \ru Именователь с версия исполнения. + \en Names makers with a version. \~ + */ + MbOffsetCurveCreator( const MbCurve3D & curve, + const MbSurfaceOffsetCurveParams & params, + const c3d::CreatorsSPtrVector & shellCreators, + bool sameCreators, + const MbSNameMaker & snMaker ); public : virtual ~MbOffsetCurveCreator(); // \ru Общие функции строителя. \en The common functions of the creator. virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * iReg = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame ( const MbCreator &, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & ) const; // \ru Являются ли объекты подобными \en Whether the objects are similar virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual MbePrompt GetPropertyName(); // \ru Дать имя свойства объекта \en Get the object property name virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object @@ -81,7 +110,7 @@ public : virtual bool SetInternalCreators( MbeCreatorType, c3d::CreatorsSPtrVector & ); // \ru Получить внутренние построители по типу. \en Get internal creators by type. // \ru Построить кривую по журналу построения \en Create a curve from the history tree - virtual bool CreateWireFrame( MbWireFrame *&, MbeCopyMode, RPArray * items = NULL ); + virtual bool CreateWireFrame( MbWireFrame *&, MbeCopyMode, RPArray * items = c3d_null ); /** \} */ @@ -89,7 +118,7 @@ private: // \ru Объявление оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration of the assignment operator without implementation, to prevent an assignment by default. void operator = ( const MbOffsetCurveCreator & ); // \ru Не реализовано!!! \en Not implemented!!! - DECLARE_PERSISTENT_CLASS_NEW_DEL( MbOffsetCurveCreator ) +DECLARE_PERSISTENT_CLASS_NEW_DEL( MbOffsetCurveCreator ) }; IMPL_PERSISTENT_OPS( MbOffsetCurveCreator ) @@ -97,22 +126,14 @@ IMPL_PERSISTENT_OPS( MbOffsetCurveCreator ) //------------------------------------------------------------------------------ /** \brief \ru Создать офсетную кривую по трехмерной кривой и вектору направления. \en Create an offset curve from three-dimensional curve and direction. \~ - \details \ru Создать офсетную кривую по трехмерной кривой и вектору направления. \n - \en Create an offset curve from three-dimensional curve and direction. \n \~ - \param[in] initCurve - \ru Постранственная кривая, к которой строится эквидистантная. + \details \ru Создать офсетную кривую в пространстве по трехмерной кривой и вектору направления. \n + \en Create an offset curve in space from three-dimensional curve and direction. \n \~ + \param[in] initCurve - \ru Пространственная кривая, к которой строится эквидистантная. \en A space curve for which to construct the offset curve. \~ - \param[in] offsetVect - \ru Вектор, задающий смещение в точке кривой. - \en The displacement vector at a point of the curve. \~ - \param[in] useFillet - \ru Если true, то разрывы заполнять скруглением, иначе продолженными кривыми. - \en If 'true', the gaps are to be filled with fillet, otherwise with the extended curves. \~ - \param[in] keepRadius - \ru Если true, то в существующих скруглениях сохранять радиусы. - \en If 'true', the existent fillet radii are to be kept. \~ - \param[in] fromBeg - \ru Вектор смещения привязан к началу. - \en The translation vector is associated with the beginning. \~ - \param[in] snMaker - \ru Именователь кривых каркаса. - \en An object defining the frame curves names. \~ - \param[out] resType - \ru Код результата операции - \en Operation result code \~ + \param[in] params - \ru Параметры. + \en Parameters. \~ + \param[out] resType - \ru Код результата операции + \en Operation result code \~ \param[out] resCurve - \ru Эквидистантная кривая. \en The offset curve. \~ \return \ru Возвращает строитель. @@ -120,15 +141,10 @@ IMPL_PERSISTENT_OPS( MbOffsetCurveCreator ) \ingroup Curve3D_Modeling */ //--- -MATH_FUNC (MbCreator *) CreateOffsetCurve( const MbCurve3D & initCurve, - const MbVector3D & offsetVect, - const bool useFillet, - const bool keepRadius, - const bool bluntAngle, - const bool fromBeg, - const MbSNameMaker & snMaker, - MbResultType & resType, - MbCurve3D *& resCurve ); +MATH_FUNC (MbCreator *) CreateOffsetCurve( const MbCurve3D & initCurve, + const MbSpatialOffsetCurveParams & params, + MbResultType & resType, + MbCurve3D *& resCurve ); //------------------------------------------------------------------------------ @@ -136,18 +152,12 @@ MATH_FUNC (MbCreator *) CreateOffsetCurve( const MbCurve3D & initCurve, \en Create an offset curve from a spatial curve and offset value. \~ \details \ru Создать офсетную кривую по поверхностной кривой и значению смещения. \n \en Create an offset curve from a spatial curve and offset value. \n \~ - \param[in] curve - \ru Кривая на поверхности грани face. - \en A curve on face 'face' surface. \~ - \param[in] face - \ru Грань, на которой строится эквидистанта. - \en The edge on which to build the offset curve. \~ - \param[in] dirAxis - \ru Направление смещения с точкой приложения. - \en The offset direction with a point of application. \~ - \param[in] dist - \ru Величина смещения. - \en The offset distance. \~ - \param[in] snMaker - \ru Именователь кривых каркаса. - \en An object defining the frame curves names. \~ - \param[out] resType - \ru Код результата операции - \en Operation result code \~ + \param[in] curve - \ru Кривая на поверхности грани face. + \en A curve on face 'face' surface. \~ + \param[in] params - \ru Параметры. + \en Parameters. \~ + \param[out] resType - \ru Код результата операции + \en Operation result code \~ \param[out] resCurves - \ru Множество эквидистантных кривых. \en Offset curve array. \~ \return \ru Возвращает строитель. @@ -155,13 +165,10 @@ MATH_FUNC (MbCreator *) CreateOffsetCurve( const MbCurve3D & initCurve, \ingroup Curve3D_Modeling */ //--- -MATH_FUNC (MbCreator *) CreateOffsetCurve( const MbCurve3D & curve, - const MbFace & face, - const MbAxis3D & dirAxis, - double dist, - const MbSNameMaker & snMaker, - MbResultType & resType, - RPArray & resCurves ); +MATH_FUNC (MbCreator *) CreateOffsetCurve( const MbCurve3D & curve, + const MbSurfaceOffsetCurveParams & params, + MbResultType & resType, + RPArray & resCurves ); #endif // __CR_OFFSET_CURVE_H diff --git a/C3d/Include/cr_patch_creator.h b/C3d/Include/cr_patch_creator.h index 249e62f..cfd14bc 100644 --- a/C3d/Include/cr_patch_creator.h +++ b/C3d/Include/cr_patch_creator.h @@ -54,10 +54,10 @@ public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en Type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const ; - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const ; + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта \en Get a name of object property virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object @@ -72,7 +72,7 @@ public : // \ru Построение оболочки по исходным данным \en Construction of a shell from the given data virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); + RPArray * items = c3d_null ); // \ru Дать параметры. \en Get the parameters. void GetParameters( PatchValues & params ) const { params = parameters; } @@ -145,8 +145,8 @@ MATH_FUNC (MbCreator *) CreatePatchSet( const RPArray & initEdges, Одновременно с построением оболочки функция создает её строитель.\n \en Construct a patch-shaped shell from the given curves. The function simultaneously creates the shell and its constructor.\n \~ - \param[in] initEdges - \ru Кривые, определяющие края заплатки. - \en Curves determining the bounds of the patch. \~ + \param[in] initCurves - \ru Кривые, определяющие края заплатки. + \en Curves determining the bounds of the patch. \~ \param[in] parameters - \ru Параметры построения. \en Parameters of shell creation. \~ \param[in] operNames - \ru Именователь граней. @@ -160,11 +160,11 @@ MATH_FUNC (MbCreator *) CreatePatchSet( const RPArray & initEdges, \ingroup Model_Creators */ // --- -MATH_FUNC (MbCreator *)CreatePatchSet( const RPArray & initCurves, - const PatchValues & parameters, - const MbSNameMaker & operNames, - MbResultType & res, - MbFaceShell *& shell ); +MATH_FUNC (MbCreator *) CreatePatchSet( const RPArray & initCurves, + const PatchValues & parameters, + const MbSNameMaker & operNames, + MbResultType & res, + MbFaceShell *& shell ); #endif // __CR_PATCH_CREATOR_H diff --git a/C3d/Include/cr_projection_curve.h b/C3d/Include/cr_projection_curve.h index 0fcbee4..847cbd9 100644 --- a/C3d/Include/cr_projection_curve.h +++ b/C3d/Include/cr_projection_curve.h @@ -49,15 +49,15 @@ public: // \ru Общие функции строителя. \en The common functions of the creator. virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * iReg = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame ( const MbCreator &, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & ) const; // \ru Являются ли объекты подобными \en Whether the objects are similar virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual MbePrompt GetPropertyName(); // \ru Дать имя свойства объекта \en Get the object property name virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object @@ -70,7 +70,7 @@ public: virtual bool SetInternalCreators( MbeCreatorType, c3d::CreatorsSPtrVector & ); // \ru Получить внутренние построители по типу. \en Get internal creators by type. // \ru Построить кривую по журналу построения \en Create a curve from the history tree - virtual bool CreateWireFrame( MbWireFrame *&, MbeCopyMode, RPArray * items = NULL ); + virtual bool CreateWireFrame( MbWireFrame *&, MbeCopyMode, RPArray * items = c3d_null ); /** \} */ diff --git a/C3d/Include/cr_revolution_solid.h b/C3d/Include/cr_revolution_solid.h index 0ead11a..c645843 100644 --- a/C3d/Include/cr_revolution_solid.h +++ b/C3d/Include/cr_revolution_solid.h @@ -65,10 +65,10 @@ public : \en \name Common functions of the mathematical object. \{ */ virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const ; // \ru Сделать копию \en Create a copy - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const ; // \ru Сделать копию \en Create a copy + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта \en Set properties of the object @@ -156,7 +156,7 @@ MATH_FUNC (MbCreator *) CreateCurveRevolution( MbFaceShell * sol const MbSNameMaker & operNames, const RPArray & contoursNames, MbResultType & resType, - MbFaceShell *& shell ); + c3d::ShellSPtr & shell ); #endif // __CR_REVOLUTION_SOLID_H diff --git a/C3d/Include/cr_rib_solid.h b/C3d/Include/cr_rib_solid.h index 3744a18..d2ca4c2 100644 --- a/C3d/Include/cr_rib_solid.h +++ b/C3d/Include/cr_rib_solid.h @@ -43,10 +43,10 @@ public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA () const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy - virtual void Transform ( const MbMatrix3D & matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D & to, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy + virtual void Transform ( const MbMatrix3D & matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D & to, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта \en Set properties of the object @@ -59,7 +59,7 @@ public : // \ru Общие функции твердого тела \en Common functions of solid virtual bool CreateShell( MbFaceShell *&shell, MbeCopyMode sameShell, - RPArray *items = NULL ); // \ru Построение \en Construction + RPArray *items = c3d_null ); // \ru Построение \en Construction // \ru Дать параметры. \en Get the parameters. void GetParameters( RibValues & params ) const { params = parameters; } diff --git a/C3d/Include/cr_ruled_shell.h b/C3d/Include/cr_ruled_shell.h index 5d8b130..06d1c5b 100644 --- a/C3d/Include/cr_ruled_shell.h +++ b/C3d/Include/cr_ruled_shell.h @@ -46,12 +46,12 @@ public: public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; ///< \ru Тип элемента \en Element type - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; ///< \ru Сделать копию \en Make a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; ///< \ru Сделать копию \en Make a copy virtual bool IsSame( const MbCreator &, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool SetEqual ( const MbCreator & ); ///< \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); ///< \ru Преобразовать по матрице \en Transform according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); ///< \ru Сдвиг по вектору \en Translation by the vector - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); ///< \ru Поворот вокруг оси \en Rotation about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); ///< \ru Преобразовать по матрице \en Transform according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); ///< \ru Сдвиг по вектору \en Translation by the vector + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); ///< \ru Поворот вокруг оси \en Rotation about an axis virtual void GetProperties( MbProperties & properties ); ///< \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & properties ); ///< \ru Записать свойства объекта \en Write properties of the object @@ -63,7 +63,7 @@ public: // \ru Общие функции математического объе public: /// \ru Построение оболочки \en Creation of a shell virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); + RPArray * items = c3d_null ); // \ru Дать параметры. \en Get the parameters. void GetParameters( RuledSurfaceValues & params ) const; // \ru Установить параметры. \en Set the parameters. diff --git a/C3d/Include/cr_section_shell.h b/C3d/Include/cr_section_shell.h index a2fafd4..3626994 100644 --- a/C3d/Include/cr_section_shell.h +++ b/C3d/Include/cr_section_shell.h @@ -2,7 +2,7 @@ /** \file \brief \ru Строитель оболочки на поверхности переменного сечения. - \en Constructor of shell of evolution solid. \~ + \en Constructor of shell on mutable section surface. \~ */ //////////////////////////////////////////////////////////////////////////////// @@ -22,7 +22,7 @@ class MATH_CLASS MbFaceShell; //------------------------------------------------------------------------------ /** \brief \ru Строитель оболочки на поверхности переменного сечения. - \en Constructor of the shell on swept mutable section surface. \~ + \en Constructor of the shell on mutable section surface. \~ \details \ru Грань оболочки строится путём движения переменного сечения по опорной кривой. \n \en Constructor of face by moving generating curve along a reference spine curve. \n \~ \ingroup Model_Creators @@ -30,13 +30,13 @@ class MATH_CLASS MbFaceShell; // --- class MATH_CLASS MbSectionShell : public MbCreator { protected : - MbSectionData sectionData; ///< \ru Данные о поверхности переменного сечения. \en Data about swept mutable section surface. - MbSectionCode sectionCode; ///< \ru Данные о поверхности переменного сечения. \en Data about swept mutable section surface. + MbSectionData sectionData; ///< \ru Данные о поверхности переменного сечения. \en Data about mutable section surface. + MbSectionCode sectionCode; ///< \ru Данные о поверхности переменного сечения. \en Data about mutable section surface. /** \brief \ru Конструктор. \en Constructor. \~ \param[in] data - \ru Данные о поверхности переменного сечения. - \en Data about swept mutable section surface. \~ + \en Data about mutable section surface. \~ \param[in] names - \ru Именователь грани оболочки. \en Generating face names. \~ */ @@ -54,10 +54,10 @@ public : \en \name Common functions of the mathematical object. \{ */ virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const ; // \ru Сделать копию \en Create a copy - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const ; // \ru Сделать копию \en Create a copy + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта \en Set properties of the object @@ -75,7 +75,7 @@ public : \en \name Common functions of the rigid solid (forming operations). \{ */ virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction virtual void SetYourVersion( VERSION version ); /** \} */ @@ -94,7 +94,7 @@ public : /** \} */ /** \brief \ru Создать оболочку на поверхности переменного сечения. - \en Create a shell on swept mutable section surface. \~ + \en Create a shell on mutable section surface. \~ \details \ru Построить оболочку путём движения образующей кривой по направляющей кривой и выполнить булеву операцию с оболочкой, если последняя задана. \n Одновременно с построением оболочки функция создаёт её строитель.\n @@ -106,7 +106,7 @@ public : \param[in] sameShell - \ru Способ копирования граней. \en The method of copying faces. \~ \param[in] data - \ru Данные о поверхности переменного сечения. - \en Data about swept mutable section surface. \~ + \en Data about mutable section surface. \~ \param[in] names - \ru Именователь грани оболочки. \en Generating face names. \~ \param[out] res - \ru Код результата операции. diff --git a/C3d/Include/cr_sheet_bend_any_solid.h b/C3d/Include/cr_sheet_bend_any_solid.h index e1e4136..09eb4bb 100644 --- a/C3d/Include/cr_sheet_bend_any_solid.h +++ b/C3d/Include/cr_sheet_bend_any_solid.h @@ -47,15 +47,15 @@ public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en Type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame ( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & item ) const; // \ru Являются ли объекты подобными? \en Determine whether an object is similar? virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта \en Set properties of the object @@ -65,7 +65,7 @@ public: virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction private: // \ru Объявление оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration of the assignment operator without implementation to prevent an assignment by default. diff --git a/C3d/Include/cr_sheet_bend_by_edge_solid.h b/C3d/Include/cr_sheet_bend_by_edge_solid.h index ebda627..2786936 100644 --- a/C3d/Include/cr_sheet_bend_by_edge_solid.h +++ b/C3d/Include/cr_sheet_bend_by_edge_solid.h @@ -58,14 +58,14 @@ public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en Type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame ( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & item ) const; // \ru Являются ли объекты подобными? \en Determine whether an object is similar? virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D & to, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D & to, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта \en Set properties of the object @@ -76,7 +76,7 @@ public: virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction // \ru Дать параметры. \en Get the parameters. void GetParameters( MbBendByEdgeValues & params ) const { params = parameters; } diff --git a/C3d/Include/cr_sheet_bend_over_seg_solid.h b/C3d/Include/cr_sheet_bend_over_seg_solid.h index be76c67..8617fdc 100644 --- a/C3d/Include/cr_sheet_bend_over_seg_solid.h +++ b/C3d/Include/cr_sheet_bend_over_seg_solid.h @@ -49,15 +49,15 @@ public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en Type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame ( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & item ) const; // \ru Являются ли объекты подобными? \en Determine whether an object is similar? virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта \en Get a name of object property virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object @@ -69,7 +69,7 @@ public: // \ru Общие функции твердого тела \en Common functions of solid solid virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction // \ru Дать параметры. \en Get the parameters. void GetParameters( MbBendOverSegValues & params ) const { params = parameters; } diff --git a/C3d/Include/cr_sheet_bend_unbend_solid.h b/C3d/Include/cr_sheet_bend_unbend_solid.h index e012990..a6be1a7 100644 --- a/C3d/Include/cr_sheet_bend_unbend_solid.h +++ b/C3d/Include/cr_sheet_bend_unbend_solid.h @@ -50,15 +50,15 @@ public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en Type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame ( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & item ) const; // \ru Являются ли объекты подобными? \en Determine whether an object is similar? virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D & to, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D & to, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта \en Set properties of the object @@ -68,7 +68,7 @@ public: virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction private: // \ru Объявление оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration of the assignment operator without implementation to prevent an assignment by default. @@ -122,7 +122,7 @@ MATH_FUNC (MbCreator *) CreateBendUnbend( SPtr & init const MbSNameMaker & names, MbResultType & res, MbFaceShell *& shell, - RPArray * ribContours = NULL ); + RPArray * ribContours = c3d_null ); diff --git a/C3d/Include/cr_sheet_builder_solid.h b/C3d/Include/cr_sheet_builder_solid.h index a0d52e1..6f551b9 100644 --- a/C3d/Include/cr_sheet_builder_solid.h +++ b/C3d/Include/cr_sheet_builder_solid.h @@ -1,114 +1,114 @@ -//////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru Строитель оболочки из листового материала на основе произвольного тела. - \en Constructor of the sheet metal shell based on an arbitrary solid. -*/ -//////////////////////////////////////////////////////////////////////////////// - -#ifndef __CR_SHEET_BUILDER_SOLID_H -#define __CR_SHEET_BUILDER_SOLID_H - - -#include -#include - - -//------------------------------------------------------------------------------ -/** \brief \ru Строитель оболочки из листового материала на основе произвольного тела. - \en Constructor of the sheet metal shell based on an arbitrary solid. \~ - \details \ru Строитель оболочки из листового материала на основе граней и ребер произвольного тела.\n - Оболочка строится на базе исходной плоской грани и указанных ребер сгиба и разреза. - \en Constructor of the sheet metal shell based on faces and edges of an arbitrary solid. \n - Shell builds based on initial planar face and given edges of bend and corner enclosure. \~ - \ingroup Model_Creators -*/ -// --- -class MATH_CLASS MbBuildSheetMetalSolid : public MbCreator { -private: - MbItemIndex faceIndex; ///< \ru Индекс исходной грани для построения листового тела. \en Index of initial face for sheet metal solid creation. - bool sense; ///< \ru Признак совпадения придания толщины с нормалью исходной грани. \en Attribute of coincidence of extrusion direction to the normal of the initial face. - MbSolidToSheetMetalValues parameters; ///< \ru Параметры построения листового тела по произвольному телу. \en The parameters of sheet metal solid building based on an arbitrary solid. - -public : - MbBuildSheetMetalSolid( const MbItemIndex & faceIndex, - const bool sense, - const MbSolidToSheetMetalValues & params, - const MbSNameMaker & names ); -private: - MbBuildSheetMetalSolid( const MbBuildSheetMetalSolid &, MbRegDuplicate * iReg ); - -public: - virtual ~MbBuildSheetMetalSolid(); - - // \ru Общие функции математического объекта. \en Common functions of the mathematical object. - - virtual MbeCreatorType IsA() const; // \ru Тип элемента. \en A type of element. - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию. \en Create a copy. - - virtual bool IsSame ( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? - virtual bool IsSimilar( const MbCreator & item ) const; // \ru Являются ли объекты подобными? \en Determine whether an object is similar? - virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным. \en Make equal. - - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг. \en Translation. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. - - virtual void GetProperties ( MbProperties & properties ); // \ru Выдать свойства объекта. \en Get properties of the object. - virtual void SetProperties ( const MbProperties & properties ); // \ru Записать свойства объекта. \en Set properties of the object. - virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта. \en Get a name of object property. - - // \ru Общие функции твердого тела. \en Common functions of solid. - - // \ru Построение оболочки листового тела. \en Construction of a sheet metal shell. - virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, RPArray *items = NULL ); - // \ru Получить параметры. \en Get the parameters. - void GetParameters( MbSolidToSheetMetalValues & params ) const { params = parameters; } - // \ru Установить параметры. \en Set the parameters. - void SetParameters( const MbSolidToSheetMetalValues & params ) { parameters = params; } - -private: - OBVIOUS_PRIVATE_COPY( MbBuildSheetMetalSolid ) - DECLARE_PERSISTENT_CLASS_NEW_DEL( MbBuildSheetMetalSolid ) -}; - -IMPL_PERSISTENT_OPS( MbBuildSheetMetalSolid ) - - -//------------------------------------------------------------------------------ -/** \brief \ru Строитель оболочки из листового материала на основе произвольного тела. - \en Constructor of the sheet metal shell based on an arbitrary solid. \~ - \details \ru На базе исходной произвольной оболочки построить оболочку из листового материала. \n - Одновременно с построением оболочки функция создаёт её строитель.\n - \en A shell is to be constructed on the basis of the source arbitary shell. \n - The function simultaneously creates the shell and its constructor.\n \~ - \param[in] solid - \ru Исходная оболочка. - \en The source shell. \~ - \param[in] sameShell - \ru Режим копирования исходной оболочки. - \en Mode of copying the source shell. \~ - \param[in] initFace - \ru Исходная грань для построения листового тела. - \en The initial face for sheet metal solid construction. \~ - \param[in] sense - \ru Признак совпадения направления придания толщины с нормалью исходной грани. - \en Attribute of coincidence of extrusion direction to the normal of the initial face. \~ - \param[in] params - \ru Параметры построения листового тела по произвольному телу. - \en The parameters of sheet metal solid building based on an arbitrary solid. \~ - \param[in] nameMaker - \ru Именователь. - \en An object for naming the new objects. \~ - \param[out] result - \ru Результирующее тело. - \en The resultant solid. \~ - \result \ru Возвращает строитель оболочки. - \en Returns the shell constructor. \~ - \ingroup Model_Creators -*/ -// --- -MATH_FUNC (MbCreator *) ConvertShellToSheetMetall( MbFaceShell * initialShell, // Исходная оболочка, - const MbeCopyMode sameShell, // флаг способа использования исходной оболочки, - const MbFace & initFace, // базовая грань, относительно которой будет строиться листовое тело, - bool sense, // признак совпадения придания толщины с нормалью базовой грани, - MbSolidToSheetMetalValues & params, // параметры построения листового тела, - const MbSNameMaker & nameMaker, // именователь, - MbResultType & res, // флаг успешности операции, - SPtr & resultShell ); // результирующая оболочка. - - +//////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Строитель оболочки из листового материала на основе произвольного тела. + \en Constructor of the sheet metal shell based on an arbitrary solid. +*/ +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __CR_SHEET_BUILDER_SOLID_H +#define __CR_SHEET_BUILDER_SOLID_H + + +#include +#include + + +//------------------------------------------------------------------------------ +/** \brief \ru Строитель оболочки из листового материала на основе произвольного тела. + \en Constructor of the sheet metal shell based on an arbitrary solid. \~ + \details \ru Строитель оболочки из листового материала на основе граней и ребер произвольного тела.\n + Оболочка строится на базе исходной плоской грани и указанных ребер сгиба и разреза. + \en Constructor of the sheet metal shell based on faces and edges of an arbitrary solid. \n + Shell builds based on initial planar face and given edges of bend and corner enclosure. \~ + \ingroup Model_Creators +*/ +// --- +class MATH_CLASS MbBuildSheetMetalSolid : public MbCreator { +private: + MbItemIndex faceIndex; ///< \ru Индекс исходной грани для построения листового тела. \en Index of initial face for sheet metal solid creation. + bool sense; ///< \ru Признак совпадения придания толщины с нормалью исходной грани. \en Attribute of coincidence of extrusion direction to the normal of the initial face. + MbSolidToSheetMetalValues parameters; ///< \ru Параметры построения листового тела по произвольному телу. \en The parameters of sheet metal solid building based on an arbitrary solid. + +public : + MbBuildSheetMetalSolid( const MbItemIndex & faceIndex, + const bool sense, + const MbSolidToSheetMetalValues & params, + const MbSNameMaker & names ); +private: + MbBuildSheetMetalSolid( const MbBuildSheetMetalSolid &, MbRegDuplicate * iReg ); + +public: + virtual ~MbBuildSheetMetalSolid(); + + // \ru Общие функции математического объекта. \en Common functions of the mathematical object. + + virtual MbeCreatorType IsA() const; // \ru Тип элемента. \en A type of element. + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию. \en Create a copy. + + virtual bool IsSame ( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? + virtual bool IsSimilar( const MbCreator & item ) const; // \ru Являются ли объекты подобными? \en Determine whether an object is similar? + virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным. \en Make equal. + + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг. \en Translation. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + + virtual void GetProperties ( MbProperties & properties ); // \ru Выдать свойства объекта. \en Get properties of the object. + virtual void SetProperties ( const MbProperties & properties ); // \ru Записать свойства объекта. \en Set properties of the object. + virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта. \en Get a name of object property. + + // \ru Общие функции твердого тела. \en Common functions of solid. + + // \ru Построение оболочки листового тела. \en Construction of a sheet metal shell. + virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, RPArray *items = c3d_null ); + // \ru Получить параметры. \en Get the parameters. + void GetParameters( MbSolidToSheetMetalValues & params ) const { params = parameters; } + // \ru Установить параметры. \en Set the parameters. + void SetParameters( const MbSolidToSheetMetalValues & params ) { parameters = params; } + +private: + OBVIOUS_PRIVATE_COPY( MbBuildSheetMetalSolid ) + DECLARE_PERSISTENT_CLASS_NEW_DEL( MbBuildSheetMetalSolid ) +}; + +IMPL_PERSISTENT_OPS( MbBuildSheetMetalSolid ) + + +//------------------------------------------------------------------------------ +/** \brief \ru Строитель оболочки из листового материала на основе произвольного тела. + \en Constructor of the sheet metal shell based on an arbitrary solid. \~ + \details \ru На базе исходной произвольной оболочки построить оболочку из листового материала. \n + Одновременно с построением оболочки функция создаёт её строитель.\n + \en A shell is to be constructed on the basis of the source arbitary shell. \n + The function simultaneously creates the shell and its constructor.\n \~ + \param[in] solid - \ru Исходная оболочка. + \en The source shell. \~ + \param[in] sameShell - \ru Режим копирования исходной оболочки. + \en Mode of copying the source shell. \~ + \param[in] initFace - \ru Исходная грань для построения листового тела. + \en The initial face for sheet metal solid construction. \~ + \param[in] sense - \ru Признак совпадения направления придания толщины с нормалью исходной грани. + \en Attribute of coincidence of extrusion direction to the normal of the initial face. \~ + \param[in] params - \ru Параметры построения листового тела по произвольному телу. + \en The parameters of sheet metal solid building based on an arbitrary solid. \~ + \param[in] nameMaker - \ru Именователь. + \en An object for naming the new objects. \~ + \param[out] result - \ru Результирующее тело. + \en The resultant solid. \~ + \result \ru Возвращает строитель оболочки. + \en Returns the shell constructor. \~ + \ingroup Model_Creators +*/ +// --- +MATH_FUNC (MbCreator *) ConvertShellToSheetMetall( MbFaceShell * initialShell, // Исходная оболочка, + const MbeCopyMode sameShell, // флаг способа использования исходной оболочки, + const MbFace & initFace, // базовая грань, относительно которой будет строиться листовое тело, + bool sense, // признак совпадения придания толщины с нормалью базовой грани, + MbSolidToSheetMetalValues & params, // параметры построения листового тела, + const MbSNameMaker & nameMaker, // именователь, + MbResultType & res, // флаг успешности операции, + SPtr & resultShell ); // результирующая оболочка. + + #endif // __CR_SHEET_BUILDER_SOLID_H \ No newline at end of file diff --git a/C3d/Include/cr_sheet_closed_corner_solid.h b/C3d/Include/cr_sheet_closed_corner_solid.h index 3dc6773..fa86c6c 100644 --- a/C3d/Include/cr_sheet_closed_corner_solid.h +++ b/C3d/Include/cr_sheet_closed_corner_solid.h @@ -50,15 +50,15 @@ public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en Type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame ( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & item ) const; // \ru Являются ли объекты подобными? \en Determine whether an object is similar? virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта \en Set properties of the object @@ -68,7 +68,7 @@ public: virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction // \ru Дать параметры. \en Get the parameters. void GetParameters( MbClosedCornerValues & params ) const { params = parameters; } diff --git a/C3d/Include/cr_sheet_joint_bend_solid.h b/C3d/Include/cr_sheet_joint_bend_solid.h index 45c4b60..1e7dc69 100644 --- a/C3d/Include/cr_sheet_joint_bend_solid.h +++ b/C3d/Include/cr_sheet_joint_bend_solid.h @@ -57,15 +57,15 @@ public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en Type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame ( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & item ) const; // \ru Являются ли объекты подобными? \en Determine whether an object is similar? virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D & to, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D & to, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта \en Set properties of the object @@ -74,7 +74,7 @@ public: // \ru Общие функции твердого тела \en Common functions of solid solid virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction // \ru Дать параметры. \en Get the parameters. void GetParameters( MbJointBendValues & params ) const { params = parameters; } diff --git a/C3d/Include/cr_sheet_metal_solid.h b/C3d/Include/cr_sheet_metal_solid.h index 8e9dadb..0b96d9f 100644 --- a/C3d/Include/cr_sheet_metal_solid.h +++ b/C3d/Include/cr_sheet_metal_solid.h @@ -82,10 +82,10 @@ public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en Type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector3D & to, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbAxis3D & axis, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector3D & to, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbAxis3D & axis, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта \en Get a name of object property virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object @@ -101,7 +101,7 @@ public : // \ru Общие функции твердого тела \en Common functions of solid solid virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction virtual MbFaceShell * InitShell( bool in ); diff --git a/C3d/Include/cr_sheet_restored_edges_solid.h b/C3d/Include/cr_sheet_restored_edges_solid.h index 8066fc3..08839eb 100644 --- a/C3d/Include/cr_sheet_restored_edges_solid.h +++ b/C3d/Include/cr_sheet_restored_edges_solid.h @@ -45,15 +45,15 @@ public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en Type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame ( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & item ) const; // \ru Являются ли объекты подобными? \en Determine whether an object is similar? virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D & to, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D & to, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта \en Set properties of the object @@ -63,7 +63,7 @@ public: virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction private: // \ru Объявление оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration of the assignment operator without implementation to prevent an assignment by default. diff --git a/C3d/Include/cr_sheet_simplified_flat_solid.h b/C3d/Include/cr_sheet_simplified_flat_solid.h index d3d9c96..0e73ead 100644 --- a/C3d/Include/cr_sheet_simplified_flat_solid.h +++ b/C3d/Include/cr_sheet_simplified_flat_solid.h @@ -42,15 +42,15 @@ public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en Type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame ( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & item ) const; // \ru Являются ли объекты подобными? \en Determine whether an object is similar? virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта \en Set properties of the object @@ -60,7 +60,7 @@ public: virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction private: // \ru Объявление оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration of the assignment operator without implementation to prevent an assignment by default. diff --git a/C3d/Include/cr_sheet_union_solid.h b/C3d/Include/cr_sheet_union_solid.h index fb19969..18b4a26 100644 --- a/C3d/Include/cr_sheet_union_solid.h +++ b/C3d/Include/cr_sheet_union_solid.h @@ -43,10 +43,10 @@ public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en Type of element - virtual void Transform( const MbMatrix3D &, MbRegTransform * ireg = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * ireg = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * ireg = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const ; // \ru Сделать копию \en Create a copy + virtual void Transform( const MbMatrix3D &, MbRegTransform * ireg = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * ireg = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * ireg = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const ; // \ru Сделать копию \en Create a copy virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта \en Get a name of object property virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object @@ -62,7 +62,7 @@ public : // \ru Общие функции твердого тела \en Common functions of solid virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction virtual void SetYourVersion( VERSION version, bool forAll ); diff --git a/C3d/Include/cr_simple_creator.h b/C3d/Include/cr_simple_creator.h index 638eb1e..23a94c6 100644 --- a/C3d/Include/cr_simple_creator.h +++ b/C3d/Include/cr_simple_creator.h @@ -68,10 +68,10 @@ public : \en \name Common functions of the shell creator. \{ */ virtual MbeCreatorType IsA() const; // \ru Тип элемента \en Type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const ; // \ru Сделать копию \en Create a copy - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const ; // \ru Сделать копию \en Create a copy + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта \en Get a name of object property virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object @@ -85,7 +85,7 @@ public : virtual bool SetEqual( const MbCreator & ); // \ru Сделать равным \en Make equal virtual bool CreateShell( MbFaceShell *&shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction /** \} */ const MbFaceShell * GetShell() const { return outer; } /// \ru Дать оболочку. \en Get a shell. @@ -158,7 +158,7 @@ bool MbSimpleCreator::DeleteShellCopies( const CreatorsVector & creators ) size_t i; for ( i = 0; i < creatorsCnt; ++i ) { MbCreator * creator = creators[i]; - if ( creator != NULL ) { + if ( creator != c3d_null ) { if ( creator->IsA() == ct_SimpleCreator ) { MbSimpleCreator * simpleCreator = static_cast(creator); simpleShells.push_back( std::make_pair( i, simpleCreator->GetShell() ) ); @@ -184,7 +184,7 @@ bool MbSimpleCreator::DeleteShellCopies( const CreatorsVector & creators ) if ( shell1 && shell2 && (shell1 != shell2) ) { if ( shell1->IsSame( *shell2, LENGTH_EPSILON ) ) { sc2.SetShell( *shell1 ); - simpleShells[j].second = NULL; + simpleShells[j].second = c3d_null; isReplaced = true; } } @@ -194,7 +194,7 @@ bool MbSimpleCreator::DeleteShellCopies( const CreatorsVector & creators ) std::sort( simpleShells.begin(), simpleShells.end(), ::SortByShellPointers ); simpleShells.erase( std::unique( simpleShells.begin(), simpleShells.end(), ::AreEqualShellPointers ), simpleShells.end() ); if ( simpleShells.size() > 1 ) { - if ( simpleShells.front().second == NULL ) + if ( simpleShells.front().second == c3d_null ) simpleShells.erase( simpleShells.begin() ); } } @@ -215,7 +215,7 @@ bool MbSimpleCreator::IsThisShell( const MbFaceShell & shell, const CreatorsVect if ( creators.size() > 0 ) { for ( size_t i = creators.size(); i--; ) { const MbCreator * creator = creators[i]; - if ( (creator != NULL) && (creator->IsA() == ct_SimpleCreator) ) { + if ( (creator != c3d_null) && (creator->IsA() == ct_SimpleCreator) ) { const MbSimpleCreator & simpleCreator = static_cast(*creator); if ( simpleCreator.GetShell() == &shell ) { res = true; @@ -253,10 +253,10 @@ public : \en \name Common functions of the shell creator. \{ */ virtual MbeCreatorType IsA() const; // \ru Тип элемента \en Type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const ; // \ru Сделать копию \en Create a copy - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const ; // \ru Сделать копию \en Create a copy + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта \en Get a name of object property virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object @@ -267,7 +267,7 @@ public : virtual bool IsSimilar ( const MbCreator & ) const; // \ru Являются ли объекты подобными \en Whether the objects are similar virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction /** \} */ DECLARE_PERSISTENT_CLASS_NEW_DEL( MbReverseCreator ) diff --git a/C3d/Include/cr_smooth_solid.h b/C3d/Include/cr_smooth_solid.h index 3956d04..d41ce33 100644 --- a/C3d/Include/cr_smooth_solid.h +++ b/C3d/Include/cr_smooth_solid.h @@ -42,10 +42,10 @@ public : virtual MbeCreatorType IsA() const = 0; // \ru Тип элемента \en A type of element virtual MbeCreatorType Type() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate *iReg = NULL ) const = 0; // \ru Сделать копию \en Create a copy - virtual void Transform( const MbMatrix3D &matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector3D &to, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbAxis3D &axis, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual MbCreator & Duplicate( MbRegDuplicate *iReg = c3d_null ) const = 0; // \ru Сделать копию \en Create a copy + virtual void Transform( const MbMatrix3D &matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector3D &to, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbAxis3D &axis, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void GetProperties( MbProperties & ) = 0; // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & ) = 0; // \ru Записать свойства объекта \en Set properties of the object @@ -58,7 +58,7 @@ public : // \ru Общие функции твердого тела \en Common functions of solid virtual bool CreateShell( MbFaceShell *&shell, MbeCopyMode sameShell, - RPArray * items = NULL ) = 0; // \ru Построение \en Construction + RPArray * items = c3d_null ) = 0; // \ru Построение \en Construction /// \ru Дать параметры. \en Get the parameters. void GetParameters( SmoothValues & params ) const { params = parameters; } diff --git a/C3d/Include/cr_split_data.h b/C3d/Include/cr_split_data.h index ea8a9a5..b1d4102 100644 --- a/C3d/Include/cr_split_data.h +++ b/C3d/Include/cr_split_data.h @@ -91,7 +91,7 @@ public: , spaceCurves ( ) , surfaces ( ) , creators ( ) - , solidShell ( NULL ) + , solidShell ( c3d_null ) { } /// \ru Конструктор по двумерному контуру в локальной системе координат. \en Constructor by two-dimensional contour in the local coordinate system. @@ -103,7 +103,7 @@ public: , spaceCurves ( ) , surfaces ( ) , creators ( ) - , solidShell ( NULL ) + , solidShell ( c3d_null ) { SPtr sketchContour; sketchContour = same ? const_cast(&item) : static_cast(&item.Duplicate()); @@ -118,7 +118,7 @@ public: , spaceCurves ( ) , surfaces ( ) , creators ( ) - , solidShell ( NULL ) + , solidShell ( c3d_null ) { C3D_ASSERT( (direction.MaxFactor() < LENGTH_EPSILON) || !direction.Orthogonal( place.GetAxisZ(), ANGLE_EPSILON ) ); @@ -136,7 +136,7 @@ public: , spaceCurves ( ) , surfaces ( ) , creators ( ) - , solidShell ( NULL ) + , solidShell ( c3d_null ) { ::AddRefItems( items, same, sketchContours ); } @@ -150,7 +150,7 @@ public: , spaceCurves ( ) , surfaces ( ) , creators ( ) - , solidShell ( NULL ) + , solidShell ( c3d_null ) { C3D_ASSERT( (direction.MaxFactor() < LENGTH_EPSILON) || !direction.Orthogonal( place.GetAxisZ(), ANGLE_EPSILON ) ); @@ -165,7 +165,7 @@ public: , spaceCurves ( ) , surfaces ( ) , creators ( ) - , solidShell ( NULL ) + , solidShell ( c3d_null ) { ::AddRefItems( items, same, spaceCurves ); } @@ -178,7 +178,7 @@ public: , spaceCurves ( ) , surfaces ( ) , creators ( ) - , solidShell ( NULL ) + , solidShell ( c3d_null ) { ::AddRefItems( items, same, spaceCurves ); } @@ -191,7 +191,7 @@ public: , spaceCurves ( ) , surfaces ( ) , creators ( ) - , solidShell ( NULL ) + , solidShell ( c3d_null ) { SPtr surface; surface = same ? const_cast(&item) : static_cast(&item.Duplicate()); @@ -206,7 +206,7 @@ public: , spaceCurves ( ) , surfaces ( ) , creators ( ) - , solidShell ( NULL ) + , solidShell ( c3d_null ) { ::AddRefItems( items, same, surfaces ); } @@ -219,7 +219,7 @@ public: , spaceCurves ( ) , surfaces ( ) , creators ( ) - , solidShell ( NULL ) + , solidShell ( c3d_null ) { ::AddRefItems( items, same, surfaces ); } @@ -322,12 +322,12 @@ public: DeleteItems(); size_t creatorsCnt = solidCreators.size(); if ( creatorsCnt > 0 ) { - MbRegDuplicate * iReg = NULL; + MbRegDuplicate * iReg = c3d_null; MbAutoRegDuplicate autoReg( iReg ); SPtr creator; creators.reserve( creatorsCnt ); for ( size_t k = 0; k < creatorsCnt; ++k ) { - if ( solidCreators[k] != NULL ) { + if ( solidCreators[k] != c3d_null ) { creator = sameCreators ? &const_cast( *solidCreators[k] ) : static_cast( &solidCreators[k]->Duplicate( iReg ) ); creators.push_back( creator ); ::DetachItem( creator ); @@ -343,17 +343,17 @@ public: /// \ru Являются ли объекты подобными. \en Determine whether the objects are similar. bool IsSimilar( const MbSplitData & ) const; /// \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); + void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); /// \ru Сдвинуть по вектору. \en Shift by a vector. - void Move ( const MbVector3D &, MbRegTransform * = NULL ); + void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); /// \ru Повернуть вокруг оси. \en Rotate about an axis. - void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); + void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); /// \ru Отсутствуют ли объекты? \en Are the objects absent? bool IsEmpty() const { return ( sketchContours.empty() && spaceCurves.empty() && surfaces.empty() && - (creators.empty() && (solidShell == NULL)) ); } + (creators.empty() && (solidShell == c3d_null)) ); } /// \ru Являются ли объекты равными? \en Determine whether an object is equal? bool IsSame( const MbSplitData &, double accuracy ) const; @@ -377,9 +377,9 @@ public: /// \ru Установить направление выдавливания двумерных кривых. \en Set extrusion direction of two-dimensional curves. void SetSketchSense( MbeSenseValue zdir ) { sense = zdir; } /// \ru Получить двумерную кривую по индексу. \en Get two-dimensional curve by index. - const MbContour * GetSketchCurve( size_t k ) const { return ((k < sketchContours.size()) ? sketchContours[k].get() : NULL ); } + const MbContour * GetSketchCurve( size_t k ) const { return ((k < sketchContours.size()) ? sketchContours[k].get() : c3d_null ); } /// \ru Получить двумерную кривую по индексу. \en Get two-dimensional curve by index. - MbContour * SetSketchCurve( size_t k ) { return ((k < sketchContours.size()) ? sketchContours[k].get() : NULL ); } + MbContour * SetSketchCurve( size_t k ) { return ((k < sketchContours.size()) ? sketchContours[k].get() : c3d_null ); } /// \ru Получить все двумерные кривые. \en Get all two-dimensional curves. template void GetSketchCurves( PlaneContoursVector & curvs ) const @@ -401,9 +401,9 @@ public: /// \ru Выдать количество пространственных кривых. \en Get number of spatial curves. size_t GetSpaceCurvesCount() const { return spaceCurves.size(); } /// \ru Получить пространственную кривую по индексу. \en Get a spatial curve by index. - const MbCurve3D * GetSpaceCurve( size_t k ) const { return ((k < spaceCurves.size()) ? spaceCurves[k].get() : NULL ); } + const MbCurve3D * GetSpaceCurve( size_t k ) const { return ((k < spaceCurves.size()) ? spaceCurves[k].get() : c3d_null ); } /// \ru Получить пространственную кривую по индексу. \en Get a spatial curve by index. - MbCurve3D * SetSpaceCurve( size_t k ) { return ((k < spaceCurves.size()) ? spaceCurves[k].get() : NULL ); } + MbCurve3D * SetSpaceCurve( size_t k ) { return ((k < spaceCurves.size()) ? spaceCurves[k].get() : c3d_null ); } /// \ru Получить все пространственные кривые. \en Get all spatial curves. template void GetSpaceCurves( SpaceCurvesVector & curvs ) const @@ -425,9 +425,9 @@ public: /// \ru Выдать количество поверхностей. \en Get number of surfaces. size_t GetSurfacesCount() const { return surfaces.size(); } /// \ru Получить поверхность по индексу. \en Get a surface by index. - const MbSurface * GetSurface( size_t k ) const { return ((k < surfaces.size()) ? surfaces[k].get() : NULL); } + const MbSurface * GetSurface( size_t k ) const { return ((k < surfaces.size()) ? surfaces[k].get() : c3d_null); } /// \ru Получить поверхность по индексу. \en Get a surface by index. - MbSurface * SetSurface( size_t k ) { return ((k < surfaces.size()) ? surfaces[k].get() : NULL); } + MbSurface * SetSurface( size_t k ) { return ((k < surfaces.size()) ? surfaces[k].get() : c3d_null); } /// \ru Получить все поверхности. \en Get all surfaces. template void GetSurfaces( SurfacesVector & surfs ) const @@ -449,9 +449,9 @@ public: /// \ru Выдать количество строителей тела. \en Get number of solid creators. size_t GetCreatorsCount() const { return creators.size(); } /// \ru Получить строитель по индексу. \en Get constructor by index. - const MbCreator * GetCreator( size_t k ) const { return ((k < creators.size()) ? creators[k].get() : NULL ); } + const MbCreator * GetCreator( size_t k ) const { return ((k < creators.size()) ? creators[k].get() : c3d_null ); } /// \ru Получить строитель по индексу. \en Get constructor by index. - MbCreator * SetCreator( size_t k ) { return ((k < creators.size()) ? creators[k].get() : NULL ); } + MbCreator * SetCreator( size_t k ) { return ((k < creators.size()) ? creators[k].get() : c3d_null ); } /// \ru Получить все строители. \en Get all creators. template void GetCreators( CreatorsVector & crs ) const @@ -468,17 +468,17 @@ public: template void GetCreatorsCopies( CreatorsVector & crs ) const { - MbRegDuplicate * iReg = NULL; + MbRegDuplicate * iReg = c3d_null; MbAutoRegDuplicate autoReg( iReg ); crs.reserve( crs.size() + creators.size() ); c3d::CreatorSPtr creator; for ( size_t k = 0, addCnt = creators.size(); k < addCnt; ++k ) { - if ( creators[k] != NULL ) + if ( creators[k] != c3d_null ) creator = static_cast( &creators[k]->Duplicate( iReg ) ); crs.push_back( creator ); ::DetachItem( creator ); - creator = NULL; + creator = c3d_null; } } /// \ru Получить все строители. \en Get all creators. diff --git a/C3d/Include/cr_split_shell.h b/C3d/Include/cr_split_shell.h index 04fcadb..bf977ee 100644 --- a/C3d/Include/cr_split_shell.h +++ b/C3d/Include/cr_split_shell.h @@ -41,10 +41,10 @@ public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA () const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта \en Get a name of object property virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object @@ -58,7 +58,7 @@ public : // \ru Общие функции твердого тела \en Common functions of solid virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction private: // \ru Не реализовано \en Not implemented // \ru Объявление конструктора копирования без реализации, чтобы не было копирования по умолчанию. \en Declaration without implementation of the copy-constructor to prevent copying by default. diff --git a/C3d/Include/cr_stamp_bead_solid.h b/C3d/Include/cr_stamp_bead_solid.h index 7aaf46d..d75828a 100644 --- a/C3d/Include/cr_stamp_bead_solid.h +++ b/C3d/Include/cr_stamp_bead_solid.h @@ -67,15 +67,15 @@ public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA () const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame ( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & item ) const; // \ru Являются ли объекты подобными? \en Determine whether an object is similar? virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта \en Get a name of object property virtual void GetProperties ( MbProperties &properties ); // \ru Выдать свойства объекта \en Get properties of the object @@ -87,7 +87,7 @@ public: // \ru Общие функции твердого тела \en Common functions of solid virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction // \ru Дать параметры. \en Get the parameters. void GetParameters( MbBeadValues & params ) const { params = parameters; } diff --git a/C3d/Include/cr_stamp_jalousie_solid.h b/C3d/Include/cr_stamp_jalousie_solid.h index 492280f..5173b53 100644 --- a/C3d/Include/cr_stamp_jalousie_solid.h +++ b/C3d/Include/cr_stamp_jalousie_solid.h @@ -66,13 +66,13 @@ public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA () const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame ( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & item ) const; // \ru Являются ли объекты подобными? \en Determine whether an object is similar? virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void GetProperties ( MbProperties &properties ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties ( const MbProperties &properties ); // \ru Записать свойства объекта \en Set properties of the object @@ -84,7 +84,7 @@ public: // \ru Общие функции твердого тела \en Common functions of solid virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction // \ru Дать параметры. \en Get the parameters. void GetParameters( MbJalousieValues & params ) const { params = parameters; } diff --git a/C3d/Include/cr_stamp_jog_solid.h b/C3d/Include/cr_stamp_jog_solid.h index d65403c..b3ce5c2 100644 --- a/C3d/Include/cr_stamp_jog_solid.h +++ b/C3d/Include/cr_stamp_jog_solid.h @@ -63,13 +63,13 @@ public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame ( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & item ) const; // \ru Являются ли объекты подобными? \en Determine whether an object is similar? virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта \en Set properties of the object @@ -82,7 +82,7 @@ public: virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction // \ru Дать параметры. \en Get the parameters. void GetParameters( MbJogValues & params ) const { params = jogParameters; } diff --git a/C3d/Include/cr_stamp_remove_solid.h b/C3d/Include/cr_stamp_remove_solid.h index ee56931..d555811 100644 --- a/C3d/Include/cr_stamp_remove_solid.h +++ b/C3d/Include/cr_stamp_remove_solid.h @@ -43,15 +43,15 @@ public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en Type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame ( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & item ) const; // \ru Являются ли объекты подобными? \en Determine whether an object is similar? virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта \en Set properties of the object @@ -61,7 +61,7 @@ public: virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction private: // \ru Объявление оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration of the assignment operator without implementation to prevent an assignment by default. diff --git a/C3d/Include/cr_stamp_rib_solid.h b/C3d/Include/cr_stamp_rib_solid.h index 1f945cb..615d611 100644 --- a/C3d/Include/cr_stamp_rib_solid.h +++ b/C3d/Include/cr_stamp_rib_solid.h @@ -46,10 +46,10 @@ public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA () const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy - virtual void Transform ( const MbMatrix3D & matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D & to, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy + virtual void Transform ( const MbMatrix3D & matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D & to, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта \en Set properties of the object @@ -62,7 +62,7 @@ public : // \ru Общие функции твердого тела \en Common functions of solid virtual bool CreateShell( MbFaceShell *&shell, MbeCopyMode sameShell, - RPArray *items = NULL ); // \ru Построение \en Construction + RPArray *items = c3d_null ); // \ru Построение \en Construction // \ru Дать параметры. \en Get the parameters. void GetParameters( SheetRibValues & params ) const { params = parameters; } diff --git a/C3d/Include/cr_stamp_ruled_solid.h b/C3d/Include/cr_stamp_ruled_solid.h index c30dbc7..6ddb86a 100644 --- a/C3d/Include/cr_stamp_ruled_solid.h +++ b/C3d/Include/cr_stamp_ruled_solid.h @@ -49,15 +49,15 @@ public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame ( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & item ) const; // \ru Являются ли объекты подобными? \en Determine whether an object is similar? virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта \en Set properties of the object @@ -69,7 +69,7 @@ public: virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction // \ru Дать базовые объекты. \en Get the base objects. virtual void GetBasisItems( RPArray & s ); diff --git a/C3d/Include/cr_stamp_solid.h b/C3d/Include/cr_stamp_solid.h index 8f4950d..546710c 100644 --- a/C3d/Include/cr_stamp_solid.h +++ b/C3d/Include/cr_stamp_solid.h @@ -65,15 +65,15 @@ public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame ( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & item ) const; // \ru Являются ли объекты подобными? \en Determine whether an object is similar? virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void GetProperties ( MbProperties &properties ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties ( const MbProperties &properties ); // \ru Записать свойства объекта \en Set properties of the object @@ -85,7 +85,7 @@ public: // \ru Общие функции твердого тела \en Common functions of solid virtual bool CreateShell( MbFaceShell *&shell, MbeCopyMode sameShell, - RPArray *items = NULL ); // \ru Построение \en Construction + RPArray *items = c3d_null ); // \ru Построение \en Construction // \ru Дать параметры. \en Get the parameters. void GetParameters( MbStampingValues & params ) const { params = parameters; } diff --git a/C3d/Include/cr_stamp_spherical_solid.h b/C3d/Include/cr_stamp_spherical_solid.h index 7dd0871..f83ff7e 100644 --- a/C3d/Include/cr_stamp_spherical_solid.h +++ b/C3d/Include/cr_stamp_spherical_solid.h @@ -60,15 +60,15 @@ public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame ( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & item ) const; // \ru Являются ли объекты подобными? \en Determine whether an object is similar? virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void GetProperties ( MbProperties &properties ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties ( const MbProperties &properties ); // \ru Записать свойства объекта \en Set properties of the object @@ -80,7 +80,7 @@ public: // \ru Общие функции твердого тела \en Common functions of solid virtual bool CreateShell( MbFaceShell *&shell, MbeCopyMode sameShell, - RPArray *items = NULL ); // \ru Построение \en Construction + RPArray *items = c3d_null ); // \ru Построение \en Construction // \ru Дать параметры. \en Get the parameters. void GetParameters( MbStampingValues & params ) const { params = parameters; } diff --git a/C3d/Include/cr_stamp_user_solid.h b/C3d/Include/cr_stamp_user_solid.h index 4e1f13f..d27ee72 100644 --- a/C3d/Include/cr_stamp_user_solid.h +++ b/C3d/Include/cr_stamp_user_solid.h @@ -60,15 +60,15 @@ public: // \ru Общие функции математического объекта. \en Common functions of the mathematical object. virtual MbeCreatorType IsA() const; // \ru Тип элемента. \en A type of element. - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию. \en Create a copy. + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию. \en Create a copy. virtual bool IsSame ( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & item ) const; // \ru Являются ли объекты подобными? \en Determine whether an object is similar? virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным. \en Make equal. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг. \en Translation. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг. \en Translation. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual void GetProperties ( MbProperties &properties ); // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties ( const MbProperties &properties ); // \ru Записать свойства объекта. \en Set properties of the object. @@ -77,7 +77,7 @@ public: // \ru Общие функции твердого тела. \en Common functions of solid. virtual bool CreateShell( MbFaceShell *&shell, MbeCopyMode sameShell, - RPArray *items = NULL ); // \ru Построение оболочки штамповки. \en Construction of a stamping shell. + RPArray *items = c3d_null ); // \ru Построение оболочки штамповки. \en Construction of a stamping shell. // \ru Получить параметры. \en Get the parameters. void GetParameters( MbToolStampingValues & params ) const { params = parameters; } @@ -124,18 +124,59 @@ IMPL_PERSISTENT_OPS( MbUserStampSolid ) \ingroup Model_Creators */ // --- -MATH_FUNC (MbCreator *) CreateUserStamp( MbFaceShell * initialShell, // Исходная оболочка, - const MbeCopyMode sameShell, // флаг способа использования исходной оболочки, - const MbFace & targetFace, // грань штамповки, - const RPArray & creatorsTool, // журнал построения инструмента, - MbFaceShell & toolShell, // оболочка тела-инструмента, - const MbeCopyMode sameShellTool, // флаг способа использования оболочки инструмента, - bool isPunch, // является инструмент пуансоном или матрицей, - const RPArray & pierceFaces, // вскрываемые для вырубки грани инструмента, - const MbToolStampingValues & params, // параметры штамповки, - const MbSNameMaker & nameMaker, // именователь, - MbResultType & res, // флаг успешности операции, - SPtr & resultShell ); // результирующая оболочка. +MATH_FUNC (MbCreator *) CreateUserStamp( MbFaceShell * initialShell, // Исходная оболочка, + const MbeCopyMode sameShell, // флаг способа использования исходной оболочки, + const MbFace & targetFace, // грань штамповки, + const RPArray & creatorsTool, // журнал построения инструмента, + MbFaceShell & toolShell, // оболочка тела-инструмента, + const MbeCopyMode sameShellTool, // флаг способа использования оболочки инструмента, + bool isPunch, // является инструмент пуансоном или матрицей, + const RPArray & pierceFaces, // вскрываемые для вырубки грани инструмента, + const MbToolStampingValues & params, // параметры штамповки, + const MbSNameMaker & nameMaker, // именователь, + MbResultType & res, // флаг успешности операции, + SPtr & resultShell ); // результирующая оболочка + +//------------------------------------------------------------------------------ +/** \brief \ru Построение результирующей оболочки. + \en Construction of result shell. \~ + \details \ru На базе исходной оболочки из листового материала построить оболочку методом закрытой или открытой штамповки. \n + Одновременно с построением оболочки функция создаёт её строитель.\n + \en A shell is to be constructed on the basis of the source shell by the method of closed or open stamping. \n + The function simultaneously creates the shell and its constructor.\n \~ + \param[in] initialShell - \ru Исходная оболочка. + \en The source shell. \~ + \param[in] sameShell - \ru Режим копирования исходной оболочки. + \en Mode of copying the source shell. \~ + \param[in] targetFace - \ru Грань штамповки. + \en The face for stamping. \~ + \param[in] toolShell - \ru Оболочка тела-инструмента. + \en A shell of tool solid. \~ + \param[in] sameShellTool - \ru Режим копирования оболочки тела-инструмента. + \en Mode of copying the tool shell. \~ + \param[in] isPunch - \ru Является тело-инструмент пуансоном или матрицей. + \en Is tool body a punch or a die. \~ + \param[in] pierceFaces - \ru Вскрываемые для вырубки грани инструмента, + \en Pierce faces of tool body. \~ + \param[in] params - \ru Параметры штамповки. + \en The parameters of stamping. \~ + \param[in] nameMaker - \ru Именователь. + \en An object for naming the new objects. \~ + \result \ru - тело со штамповкой. + \en - The solid with stamping. \~ + \ingroup Model_Creators +*/ +// --- +MbFaceShell * MakeUserStampShellForStampParts ( MbFaceShell * initialShell, // Исходная оболочка, + const MbeCopyMode sameShell, // флаг способа использования исходной оболочки, + const MbFace & targetFace, // грань штамповки, + MbFaceShell & toolShell, // оболочка тела-инструмента, + const MbeCopyMode sameShellTool, // флаг способа использования оболочки инструмента, + bool isPunch, // является инструмент пуансоном или матрицей, + const RPArray & pierceFaces, // вскрываемые для вырубки грани инструмента, + const MbToolStampingValues & params, // параметры штамповки, + const MbSNameMaker & nameMaker ); // именователь, + #endif // __CR_USERSTAMP_SOLID_H diff --git a/C3d/Include/cr_stitch_solid.h b/C3d/Include/cr_stitch_solid.h index 94f6894..656074d 100644 --- a/C3d/Include/cr_stitch_solid.h +++ b/C3d/Include/cr_stitch_solid.h @@ -78,11 +78,11 @@ public : size_t estSimpleCnt = 0; for ( i = 0; i < setsCnt; ++i ) { Creators * creatorsSet = creatorsData[i]; - if ( creatorsSet != NULL ) { + if ( creatorsSet != c3d_null ) { size_t count = creatorsSet->size(); for ( size_t j = 0; j < count; ++j ) { MbCreator * creator = (*creatorsSet)[j]; - if ( creator != NULL ) + if ( creator != c3d_null ) estSimpleCnt += creator->GetCreatorsCount( ct_SimpleCreator ); } } @@ -93,13 +93,13 @@ public : c3d::CreatorSPtr creator; for ( i = 0; i < setsCnt; ++i ) { Creators * creatorsSet = creatorsData[i]; - if ( creatorsSet != NULL ) { + if ( creatorsSet != c3d_null ) { size_t count = creatorsSet->size(); RPArray * creators = new RPArray( count, 1 ); creatorsArray.push_back( creators ); for ( size_t j = 0; j < count; ++j ) { // важен порядок перебора creator = (*creatorsSet)[j]; - if ( creator != NULL ) { + if ( creator != c3d_null ) { creators->push_back( creator ); if ( creator->IsA() == ct_SimpleCreator ) simpleCreators.push_back( creator ); @@ -125,12 +125,12 @@ public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта \en Set properties of the object @@ -146,7 +146,7 @@ public: virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction virtual void SetYourVersion( VERSION version, bool forAll ); diff --git a/C3d/Include/cr_surface_spline.h b/C3d/Include/cr_surface_spline.h index ccbe886..20e3008 100644 --- a/C3d/Include/cr_surface_spline.h +++ b/C3d/Include/cr_surface_spline.h @@ -31,12 +31,12 @@ class MATH_CLASS MbSurface; // --- class MATH_CLASS MbSurfaceSplineCreator : public MbCreator { private: - MbSurface * surface; // \ru Поверхность \en Surface - bool throughPnts; // \ru через точки \en Through points - SArray paramPnts; // \ru Параметрические точки \en Parametric points - SArray paramWts; // \ru Веса параметрических точек \en Parametric points weights - bool paramClosed; // \ru Замкнуть параметрический сплайн \en Make the parametric spline close - RPArray< MbPntMatingData > spaceTransitions; // \ru Сопряжения в точках \en Tangents at the points + MbSurface * surface; // \ru Поверхность \en Surface + bool throughPnts; // \ru через точки \en Through points + SArray paramPnts; // \ru Параметрические точки \en Parametric points + SArray paramWts; // \ru Веса параметрических точек \en Parametric points weights + bool paramClosed; // \ru Замкнуть параметрический сплайн \en Make the parametric spline close + RPArray spaceTransitions; // \ru Сопряжения в точках \en Tangents at the points protected: MbSurfaceSplineCreator( const MbSurfaceSplineCreator &, MbRegDuplicate * iReg ); // \ru Конструктор копирования \en Copy-constructor @@ -44,25 +44,28 @@ protected: MbSurfaceSplineCreator(); // \ru Не реализовано \en Not implemented public: - MbSurfaceSplineCreator( const MbSurface &, bool sameSurf, bool thrPnts, - const SArray & pnts, - const SArray & wts, bool parCls, - RPArray< MbPntMatingData > & transitions, - const MbSNameMaker & snMaker ); + MbSurfaceSplineCreator( const MbSurface & surface, + bool sameSurf, + bool thrPnts, + const SArray & pnts, + const SArray & wts, + bool parCls, + RPArray & transitions, + const MbSNameMaker & snMaker ); public : virtual ~MbSurfaceSplineCreator(); // \ru Общие функции строителя. \en The common functions of the creator. virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * iReg = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame ( const MbCreator &, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & ) const; // \ru Являются ли объекты подобными \en Whether the objects are similar virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual MbePrompt GetPropertyName(); // \ru Дать имя свойства объекта \en Get the object property name virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object @@ -72,7 +75,7 @@ public : virtual void SetBasisPoints( const MbControlData3D & ); // \ru Изменить объект по контрольным точкам. \en Change the object by control points. // \ru Построить кривую по журналу построения \en Create a curve from the history tree - virtual bool CreateWireFrame( MbWireFrame *&, MbeCopyMode, RPArray * items = NULL ); + virtual bool CreateWireFrame( MbWireFrame *&, MbeCopyMode, RPArray * items = c3d_null ); /** \} */ @@ -127,15 +130,15 @@ IMPL_PERSISTENT_OPS( MbSurfaceSplineCreator ) \ingroup Curve3D_Modeling */ //--- -MATH_FUNC (MbCreator *) CreateSurfaceSpline( const MbSurface & surface, - bool throughPoints, - SArray & paramPnts, - SArray & paramWts, - bool paramClosed, - RPArray< MbPntMatingData > & spaceTransitions, - const MbSNameMaker & snMaker, - MbResultType & resType, - RPArray & resCurves ); +MATH_FUNC (MbCreator *) CreateSurfaceSpline( const MbSurface & surface, + bool throughPoints, + SArray & paramPnts, + SArray & paramWts, + bool paramClosed, + RPArray & spaceTransitions, + const MbSNameMaker & snMaker, + MbResultType & resType, + RPArray & resCurves ); #endif // __CR_SURFACE_SPLINE_H diff --git a/C3d/Include/cr_swept_solid.h b/C3d/Include/cr_swept_solid.h index bcd499c..fc14a99 100644 --- a/C3d/Include/cr_swept_solid.h +++ b/C3d/Include/cr_swept_solid.h @@ -78,10 +78,10 @@ public : \{ */ virtual MbeCreatorType IsA() const = 0; // \ru Тип элемента \en A type of element virtual MbeCreatorType Type() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const = 0; // \ru Сделать копию \en Create a copy - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ) = 0; // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ) = 0; // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ) = 0; // \ru Повернуть вокруг оси \en Rotate around an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const = 0; // \ru Сделать копию \en Create a copy + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ) = 0; // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ) = 0; // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ) = 0; // \ru Повернуть вокруг оси \en Rotate around an axis virtual bool IsSame( const MbCreator &, double accuracy ) const = 0; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSimilar( const MbCreator & ) const = 0; // \ru Являются ли объекты подобными. \en Whether the objects are similar @@ -99,7 +99,7 @@ public : \en \name Common functions of the rigid solid (forming operations). \{ */ virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction virtual MbFaceShell * InitShell( bool in ) = 0; virtual void InitBasis( RPArray & ) = 0; diff --git a/C3d/Include/cr_symmetry_solid.h b/C3d/Include/cr_symmetry_solid.h index 0044ef6..03e8f13 100644 --- a/C3d/Include/cr_symmetry_solid.h +++ b/C3d/Include/cr_symmetry_solid.h @@ -44,10 +44,10 @@ public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const ; // \ru Сделать копию \en Create a copy - virtual void Transform( const MbMatrix3D &matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector3D &to, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbAxis3D &axis, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const ; // \ru Сделать копию \en Create a copy + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта \en Set properties of the object @@ -60,7 +60,7 @@ public : // \ru Общие функции твердого тела \en Common functions of solid virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction private : // \ru Объявление оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration of the assignment operator without implementation to prevent an assignment by default. @@ -105,15 +105,15 @@ IMPL_PERSISTENT_OPS( MbSymmetrySolid ) \ingroup Model_Creators */ // --- -MATH_FUNC (MbCreator *) CreateSymmetry( MbFaceShell * solid, - MbeCopyMode sameShell, +MATH_FUNC (MbCreator *) CreateSymmetry( MbFaceShell * solid, + MbeCopyMode sameShell, const MbCartPoint3D & origin, - const MbVector3D & axisX, - const MbVector3D & axisY, - int side, - const MbSNameMaker & operNames, - MbResultType & res, - MbFaceShell *& shell ); + const MbVector3D & axisX, + const MbVector3D & axisY, + int side, + const MbSNameMaker & operNames, + MbResultType & res, + MbFaceShell *& shell ); #endif // __CR_SYMMETRY_SOLID_H diff --git a/C3d/Include/cr_thin_sheet.h b/C3d/Include/cr_thin_sheet.h index c6bf0d3..160fc0b 100644 --- a/C3d/Include/cr_thin_sheet.h +++ b/C3d/Include/cr_thin_sheet.h @@ -31,10 +31,10 @@ protected : SimpleName name; ///< \ru Имя операции. \en Operation name. public : - MbThinShellCreator( const MbSurface & surf, bool sense, SweptValues p, + MbThinShellCreator( const MbSurface & surf, bool sense, const SweptValues & p, bool same, const MbSNameMaker & n, SimpleName & m ); private : - MbThinShellCreator( const MbThinShellCreator &, MbRegDuplicate *ireg ); + MbThinShellCreator( const MbThinShellCreator &, MbRegDuplicate * ); // \ru Объявление конструктора копирования без реализации, чтобы не было копирования по умолчанию. \en Declaration without implementation of the copy-constructor to prevent copying by default. MbThinShellCreator( const MbThinShellCreator & ); public : @@ -43,15 +43,15 @@ public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en Type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy - virtual void Transform( const MbMatrix3D &matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector3D &to, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbAxis3D &axis, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis - virtual void GetProperties( MbProperties &properties ); // \ru Выдать свойства объекта \en Get properties of the object - virtual void SetProperties( const MbProperties &properties ); // \ru Записать свойства объекта \en Set properties of the object + virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object + virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта \en Set properties of the object virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта \en Get a name of object property - virtual void GetBasisItems ( RPArray & s ); // \ru Дать базовые объекты \en Get the base objects + virtual void GetBasisItems ( RPArray & ); // \ru Дать базовые объекты \en Get the base objects virtual void GetBasisPoints( MbControlData3D & ) const; // \ru Выдать контрольные точки объекта. \en Get control points of object. virtual void SetBasisPoints( const MbControlData3D & ); // \ru Изменить объект по контрольным точкам. \en Change the object by control points. @@ -62,7 +62,7 @@ public : // \ru Общие функции твердого тела \en Common functions of solid solid virtual bool CreateShell( MbFaceShell *&shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction // \ru Дать параметры. \en Get the parameters. void GetParameters( SweptValues & params ) const { params = parameters; } @@ -78,6 +78,7 @@ private : IMPL_PERSISTENT_OPS( MbThinShellCreator ) + //------------------------------------------------------------------------------ /** \brief \ru Построить оболочку по поверхности. \en Construct a shell from a surface. \~ @@ -106,14 +107,14 @@ IMPL_PERSISTENT_OPS( MbThinShellCreator ) \ingroup Model_Creators */ // --- -MATH_FUNC (MbCreator *) CreateThinShell( const MbSurface & surface, - bool sense, - const SweptValues & parameters, - bool same, +MATH_FUNC (MbCreator *) CreateThinShell( const MbSurface & surface, + bool sense, + const SweptValues & parameters, + bool same, const MbSNameMaker & operNames, - SimpleName & name, - MbResultType & res, - MbFaceShell *& shell ); + SimpleName & name, + MbResultType & res, + MbFaceShell *& shell ); //------------------------------------------------------------------------------ @@ -141,10 +142,10 @@ MATH_FUNC (MbCreator *) CreateThinShell( const MbSurface & surface, */ // --- MATH_FUNC (MbCreator *) CreateLoftedShell( const RPArray< SArray > & points, - const MbSNameMaker & operNames, - SimpleName & name, - MbResultType & res, - MbFaceShell *& shell ); + const MbSNameMaker & operNames, + SimpleName & name, + MbResultType & res, + MbFaceShell *& shell ); //------------------------------------------------------------------------------ @@ -172,10 +173,10 @@ MATH_FUNC (MbCreator *) CreateLoftedShell( const RPArray< SArray */ // --- MATH_FUNC (MbCreator *) CreateLoftedShell( const RPArray & curves, - const MbSNameMaker & operNames, - SimpleName & name, - MbResultType & res, - MbFaceShell *& shell ); + const MbSNameMaker & operNames, + SimpleName & name, + MbResultType & res, + MbFaceShell *& shell ); #endif // __CR_THIN_SHEET_H diff --git a/C3d/Include/cr_thin_shell_solid.h b/C3d/Include/cr_thin_shell_solid.h index 564eb75..9ff8943 100644 --- a/C3d/Include/cr_thin_shell_solid.h +++ b/C3d/Include/cr_thin_shell_solid.h @@ -64,10 +64,10 @@ private : public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const ; // \ru Сделать копию \en Create a copy - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const ; // \ru Сделать копию \en Create a copy + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта \en Set properties of the object @@ -79,7 +79,7 @@ public : // \ru Общие функции твердого тела \en Common functions of solid virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction /// \ru Дать параметры. \en Get the parameters. void GetParameters( SweptValues & params ) const { params = parameters; } diff --git a/C3d/Include/cr_transformed_solid.h b/C3d/Include/cr_transformed_solid.h index d7b1c5f..938c151 100644 --- a/C3d/Include/cr_transformed_solid.h +++ b/C3d/Include/cr_transformed_solid.h @@ -43,12 +43,12 @@ public: // \ru Деструктор \en Destructor public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy virtual bool IsSame( const MbCreator & other, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool SetEqual ( const MbCreator & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать по матрице \en Transform according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг по вектору \en Translation by a vector - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать по матрице \en Transform according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг по вектору \en Translation by a vector + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта \en Get a name of object property virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object @@ -58,7 +58,7 @@ public: // \ru Общие функции математического объе /// \ru Построение оболочки \en Creation of a shell virtual bool CreateShell( MbFaceShell *&, MbeCopyMode sameShell, - RPArray * items = NULL ); + RPArray * items = c3d_null ); virtual void Refresh( MbFaceShell & ); ///< \ru Обновить форму оболочки \en Update shape of the shell // \ru Добавить модификацию по матрице \en Add a modification by a matrix void AddMatrix( MbFaceShell &, const MbMatrix3D & ); diff --git a/C3d/Include/cr_truncated_shell.h b/C3d/Include/cr_truncated_shell.h index 8f4da09..ca2993a 100644 --- a/C3d/Include/cr_truncated_shell.h +++ b/C3d/Include/cr_truncated_shell.h @@ -43,20 +43,20 @@ class MATH_CLASS MbTruncatedShell : public MbCreator { private : std::vector selIndices; ///< \ru Идентификаторы выбранных граней усекаемой оболочки. \en Identifiers of selected faces of the shell being truncated. MbSplitData splitItems; ///< \ru Усекающие элементы c ориентациями. \en Truncating elements with orientations. - SArray orients; ///< \ru Ориентация усекающих элементов. \en Orientation of truncating elements. + c3d::BoolVector orients; ///< \ru Ориентация усекающих элементов. \en Orientation of truncating elements. bool mergeFaces; ///< \ru Сливать подобные грани (true). \en Whether to merge similar faces (true). bool mergeEdges; ///< \ru Сливать подобные ребра (true). \en Whether to merge similar edges (true). public: /// \ru Конструктор по двумерным кривым. \en Constructor by two-dimensional curves. MbTruncatedShell( const MbPlacement3D &, const RPArray &, bool same, - const SArray & orients, const MbMergingFlags &, const MbSNameMaker & ); + const c3d::BoolVector & orients, const MbMergingFlags &, const MbSNameMaker & ); /// \ru Конструктор по трехмерным кривым. \en Constructor by three-dimensional curves. MbTruncatedShell( const RPArray &, bool same, - const SArray & orients, const MbMergingFlags &, const MbSNameMaker & ); + const c3d::BoolVector & orients, const MbMergingFlags &, const MbSNameMaker & ); /// \ru Конструктор по поверхностям. \en Constructor by surfaces. MbTruncatedShell( const RPArray &, bool same, - const SArray & orients, const MbMergingFlags &, const MbSNameMaker & ); + const c3d::BoolVector & orients, const MbMergingFlags &, const MbSNameMaker & ); /// \ru Конструктор по строителям тела. \en Constructor by solid creators. MbTruncatedShell( const MbSolid &, bool same, bool keepShell, bool orient, const MbMergingFlags &, const MbSNameMaker & ); @@ -68,11 +68,11 @@ private: public: virtual MbeCreatorType IsA() const; // \ru Тип элемента \en Type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию \en Create a copy + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию \en Create a copy - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта \en Set properties of the object @@ -90,7 +90,7 @@ public: // \ru Построение оболочки по исходным данным \en Construction of a shell from the given data virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); + RPArray * items = c3d_null ); // \ru Установить номера выбраных граней усекаемого тела \en Set indices of selected faces of the solid being truncated. void SetSelIndices( const std::vector & selInds ); @@ -139,18 +139,18 @@ IMPL_PERSISTENT_OPS( MbTruncatedShell ) \ingroup Model_Creators */ // --- -MATH_FUNC (MbCreator *) TruncateSurfacesSol( MbSolid & initSolid, - SArray & selIndices, - MbeCopyMode sameShell, - const MbSNameMaker & operNames, - RPArray & items, - SArray & orients, - bool curvesSplitMode, - MbeCopyMode solidsCopyMode, - const MbMergingFlags & mergeFlags, // флаги слияния граней и ребер - MbResultType & res, - MbFaceShell *& resShell, - MbPlacement3D *& resDir ); +MATH_FUNC (MbCreator *) TruncateSurfacesSol( MbSolid & initSolid, + SArray & selIndices, + MbeCopyMode sameShell, + const MbSNameMaker & operNames, + RPArray & items, + c3d::BoolVector & orients, + bool curvesSplitMode, + MbeCopyMode solidsCopyMode, + const MbMergingFlags & mergeFlags, // флаги слияния граней и ребер + MbResultType & res, + MbFaceShell *& resShell, + MbPlacement3D *& resDir ); #endif // __TRUNCATED_SHELL_H diff --git a/C3d/Include/cr_union_solid.h b/C3d/Include/cr_union_solid.h index b0851e5..0dd7d06 100644 --- a/C3d/Include/cr_union_solid.h +++ b/C3d/Include/cr_union_solid.h @@ -79,10 +79,10 @@ public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeCreatorType IsA() const; // \ru Тип элемента \en A type of element - virtual MbCreator & Duplicate( MbRegDuplicate * = NULL ) const ; // \ru Сделать копию \en Create a copy - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual MbCreator & Duplicate( MbRegDuplicate * = c3d_null ) const ; // \ru Сделать копию \en Create a copy + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual MbePrompt GetPropertyName(); // \ru Выдать заголовок свойства объекта \en Get a name of object property virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object @@ -102,7 +102,7 @@ public : // \ru Общие функции твердого тела \en Common functions of solid virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); // \ru Построение \en Construction + RPArray * items = c3d_null ); // \ru Построение \en Construction virtual void SetYourVersion( VERSION version, bool forAll ); @@ -115,7 +115,9 @@ public: /// \ru Общее количество строителей. \en Total count of creators. size_t GetCreatorsCount() const { return creators.size(); } /// \ru Дать строитель. \en Get the creator. - const MbCreator * GetCreator( size_t k ) const { return ((k < creators.size()) ? &(*creators[k]) : NULL); } + const MbCreator * GetCreator( size_t k ) const { return ((k < creators.size()) ? &(*creators[k]) : c3d_null); } + /// \ru Дать строитель. \en Get the creator. + MbCreator * SetCreator( size_t k ) { return ((k < creators.size()) ? &(*creators[k]) : c3d_null); } public: /// \ru Собрать группы общих строителей тел. \en Collect groups of shared creators. @@ -140,8 +142,8 @@ IMPL_PERSISTENT_OPS( MbUnionSolid ) Before the operation a shell set is united into a single shell which contains all the faces of shell set. Union of the intersected shells is performed if necessary. The function simultaneously constructs the shell and creates its constructor. \n \~ - \param[in] solid - \ru Оболочка, с которой выполняется булева операция объединённого множества оболочек (может быть NULL). - \en The shell the Boolean operation of the united shell set is performed with (can be NULL). \~ + \param[in] solid - \ru Оболочка, с которой выполняется булева операция объединённого множества оболочек (может быть c3d_null). + \en The shell the Boolean operation of the united shell set is performed with (can be c3d_null). \~ \param[in] sameShell - \ru Способ копирования граней оболочки. \en Method of shell faces copying. \~ \param[in] creators - \ru Строители набора оболочек. @@ -186,7 +188,7 @@ MATH_FUNC (MbCreator *) CreateUnion( MbFaceShell * solid, bool isArray, // \ru Флаг массива \en Flag of array MbResultType & res, MbFaceShell *& shell, - RPArray * notGluedShells = NULL ); + RPArray * notGluedShells = c3d_null ); //------------------------------------------------------------------------------ diff --git a/C3d/Include/creator.h b/C3d/Include/creator.h index 2526f85..0f2af4b 100644 --- a/C3d/Include/creator.h +++ b/C3d/Include/creator.h @@ -69,6 +69,10 @@ enum MbeCreatorType { ct_Undefined = 0, ///< \ru Неизвестный объект. \en Unknown object. ct_Creator = 1, ///< \ru Строитель объекта. \en Constructor of object. \n + ct_DisplaceMaker = 10, ///< \ru Строитель изменённого объекта. \en Constructor of a changed object. \n + ct_MotionMaker = 11, ///< \ru Строитель перемещенного объекта. \en Constructor of a moved object. \n + ct_RotationMaker = 12, ///< \ru Строитель Повёрнутого вокруг оси объекта. \en Constructor of a rotated object. \n + ct_TransformationMaker = 13, ///< \ru Строитель трансформированного объекта. \en Constructor of a transformed object. \n // \ru Строители точек. \en Creators of points. ct_PointsCreator = 101, ///< \ru Строитель точечного каркаса. \en Constructor of point-frame. \n @@ -247,7 +251,7 @@ public : \return \ru Копия объекта. \en The object copy. \~ */ - virtual MbCreator & Duplicate( MbRegDuplicate * iReg = NULL ) const = 0; + virtual MbCreator & Duplicate( MbRegDuplicate * iReg = c3d_null ) const = 0; /** \brief \ru Преобразовать согласно матрице. \en Transform according to the matrix. \~ @@ -270,7 +274,7 @@ public : \param[in] iReg - \ru Регистратор. \en Registrator. \~ */ - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * iReg = NULL ) = 0; + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * iReg = c3d_null ) = 0; /** \brief \ru Сдвинуть вдоль вектора. \en Translate along a vector. \~ @@ -293,7 +297,7 @@ public : \param[in] iReg - \ru Регистратор. \en Registrator. \~ */ - virtual void Move ( const MbVector3D & to, MbRegTransform * iReg = NULL ) = 0; + virtual void Move ( const MbVector3D & to, MbRegTransform * iReg = c3d_null ) = 0; /** \brief \ru Повернуть объект вокруг оси. \en Rotate an object about the axis. \~ @@ -318,7 +322,7 @@ public : \param[in] iReg - \ru Регистратор. \en Registrator. \~ */ - virtual void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * iReg = NULL ) = 0; + virtual void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * iReg = c3d_null ) = 0; /** \brief \ru Являются ли объекты равными? \en Determine whether an object is equal? \~ @@ -356,13 +360,13 @@ public : \en A shell to be modified or a new shell. \~ \param[in] sameShell - \ru Полнота копирования элементов при построении. \en Whether to perform complete copying of elements while constructing. \~ - \param[in] items - \ru Контейнер для складывания элементов невыполненных построений (может быть NULL). - \en Container for the elements of not performed constructions (can be NULL). \~ + \param[in] items - \ru Контейнер для складывания элементов невыполненных построений (может быть c3d_null). + \en Container for the elements of not performed constructions (can be c3d_null). \~ \return \ru Выполнено ли построение. \en Whether the construction is performed. \~ */ virtual bool CreateShell( MbFaceShell *& shell, MbeCopyMode sameShell, - RPArray * items = NULL ); + RPArray * items = c3d_null ); /** \brief \ru Построить оболочку по исходным данным. \en Create a shell from the initial data. \~ @@ -372,13 +376,13 @@ public : \en A shell to be modified or a new shell. \~ \param[in] sameShell - \ru Полнота копирования элементов при построении. \en Whether to perform complete copying of elements while constructing. \~ - \param[in] items - \ru Контейнер для складывания элементов невыполненных построений (может быть NULL). - \en Container for the elements of not performed constructions (can be NULL). \~ + \param[in] items - \ru Контейнер для складывания элементов невыполненных построений (может быть c3d_null). + \en Container for the elements of not performed constructions (can be c3d_null). \~ \return \ru Выполнено ли построение. \en Whether the construction is performed. \~ */ bool CreateShell( c3d::ShellSPtr & shell, MbeCopyMode sameShell, - RPArray * items = NULL ); + RPArray * items = c3d_null ); /** \brief \ru Построить проволочный каркас по исходным данным. \en Create a wire-frame from the source data. \~ @@ -388,13 +392,13 @@ public : \en A frame to be modified or a new frame. \~ \param[in] sameShell - \ru Полнота копирования элементов при построении. \en Whether to perform complete copying of elements while constructing. \~ - \param[in] items - \ru Контейнер для складывания элементов невыполненных построений (может быть NULL). - \en Container for the elements of not performed constructions (can be NULL). \~ + \param[in] items - \ru Контейнер для складывания элементов невыполненных построений (может быть c3d_null). + \en Container for the elements of not performed constructions (can be c3d_null). \~ \return \ru Выполнено ли построение. \en Whether the construction is performed. \~ */ virtual bool CreateWireFrame( MbWireFrame *& frame, MbeCopyMode sameShell, - RPArray * items = NULL ); + RPArray * items = c3d_null ); /** \brief \ru Построить проволочный каркас по исходным данным. \en Create a wire-frame from the source data. \~ @@ -417,13 +421,13 @@ public : \en A frame to be modified or a new frame. \~ \param[in] sameShell - \ru Полнота копирования элементов при построении. \en Whether to perform complete copying of elements while constructing. \~ - \param[in] items - \ru Контейнер для складывания элементов невыполненных построений (может быть NULL). - \en Container for the elements of not performed constructions (can be NULL). \~ + \param[in] items - \ru Контейнер для складывания элементов невыполненных построений (может быть c3d_null). + \en Container for the elements of not performed constructions (can be c3d_null). \~ \return \ru Выполнено ли построение. \en Whether the construction is performed. \~ */ virtual bool CreatePointFrame( MbPointFrame *& frame, MbeCopyMode sameShell, - RPArray * items = NULL ); + RPArray * items = c3d_null ); /** \brief \ru Построить точечный каркас по исходным данным. \en Create a point-frame from the source data. \~ @@ -455,11 +459,13 @@ public : /// \ru Изменить объект по контрольным точкам. \en Change the object by control points. virtual void SetBasisPoints( const MbControlData3D & ); /// \ru Посчитать внутренние построители по типу. \en Count internal creators by type. - virtual size_t GetCreatorsCount( MbeCreatorType ct ) const { return (IsA() == ct) ? 1 : 0; } + virtual size_t GetCreatorsCount( MbeCreatorType ct ) const; // { return (IsA() == ct) ? 1 : 0; } /// \ru Получить внутренние построители по типу. \en Get internal creators by type. - virtual bool GetInternalCreators( MbeCreatorType, c3d::ConstCreatorsSPtrVector & ) const { return false; } + virtual bool GetInternalCreators( MbeCreatorType, c3d::ConstCreatorsSPtrVector & ) const; /// \ru Получить внутренние построители по типу. \en Get internal creators by type. - virtual bool SetInternalCreators( MbeCreatorType, c3d::CreatorsSPtrVector & ) { return false; } + virtual bool SetInternalCreators( MbeCreatorType, c3d::CreatorsSPtrVector & ); + /// \ru Переместить/Изменить строитель. \en Displace/Change the creator. + virtual bool Perform( MbCreator * ) const; /// \ru Установить версию объектов. \en Set the objects version. virtual void SetYourVersion( VERSION version, bool forAll ); diff --git a/C3d/Include/creator_transaction.h b/C3d/Include/creator_transaction.h index b241d19..bb5a16b 100644 --- a/C3d/Include/creator_transaction.h +++ b/C3d/Include/creator_transaction.h @@ -68,7 +68,7 @@ public: transactions.reserve( iCount ); for ( size_t i = 0; i < iCount; i++ ) { MbCreator * creator = const_cast( creators[i] ); - if ( creator != NULL ) { + if ( creator != c3d_null ) { creator->AddRef(); transactions.push_back( creator ); } @@ -84,19 +84,21 @@ public: virtual bool RebuildItem( MbeCopyMode sameShell, RPArray * items, IProgressIndicator * progInd ); /// \ru Очистить присланный журнал и скопировать в него строители. \en Clear the given history tree and copy the creators to it. - void CreatorsCopy ( MbTransactions & other, MbRegDuplicate * iReg = NULL ) const; + void CreatorsCopy ( MbTransactions & other, MbRegDuplicate * iReg = c3d_null ) const; /// \ru Очистить журнал и скопировать в него строители из присланного журнала. \en Clear the history tree and copy the creators from the given history tree to it. void CreatorsAssign ( const MbTransactions & other ); /// \ru Сделать строители равными соответствующим строителям присланного журнала, если строители подобны. \en Make the creators equal to the creators from the given history tree if the creators are similar. bool SetCreatorsEqual ( const MbTransactions & other ); /// \ru Проверить, являются ли соответствующие строители присланного журнала подобными. \en Check whether the corresponding creators of the given history tree are similar. bool IsCreatorsSimilar( const MbTransactions & other ) const; + // Посчитать внутренние построители по типу. \en Count internal creators by type. + size_t GetCreatorsCount( MbeCreatorType ct ) const; /// \ru Преобразовать согласно матрице строители. \en Transform the creators according to the matrix. - void CreatorsTransform( const MbMatrix3D &, MbRegTransform * = NULL ); + void CreatorsTransform( const MbMatrix3D &, MbRegTransform * = c3d_null ); /// \ru Сдвинуть вдоль вектора строители. \en Move creators along the vector. - void CreatorsMove ( const MbVector3D &, MbRegTransform * = NULL ); + void CreatorsMove ( const MbVector3D &, MbRegTransform * = c3d_null ); /// \ru Повернуть вокруг оси строители на заданный угол. \en Rotate the creators about the axis by the given angle. - void CreatorsRotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); + void CreatorsRotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); /// \ru Выдать количество строителей. \en Get the creators count. size_t GetCreatorsCount() const { return transactions.size(); } /// \ru Зарезервировать место для строителей. \en Reserve space for creators. @@ -111,7 +113,7 @@ public: virtual bool GetCreators( c3d::CreatorsSPtrVector & ) const; /// \ru Добавить копии своих строителей в присланный массив. \en Add copies of your own creators to the given array. template - bool GetCreatorsCopies( CreatorsVector & creators ) const + bool GetCreatorsCopies( CreatorsVector & creators, MbRegDuplicate * iReg ) const { bool res = false; size_t addCnt = transactions.size(); @@ -119,8 +121,8 @@ public: c3d::CreatorSPtr creator; creators.reserve( creators.size() + addCnt ); for ( size_t i = 0; i < addCnt; ++i ) { - if ( transactions[i] != NULL ) { - creator = static_cast(&transactions[i]->Duplicate()); + if ( transactions[i] != c3d_null ) { + creator = static_cast(&transactions[i]->Duplicate( iReg )); creators.push_back( creator ); ::DetachItem( creator ); res = true; @@ -143,7 +145,7 @@ public: c3d::CreatorSPtr creator; for ( size_t i = 0, addCnt = creators.size(); i < addCnt; ++i ) { creator = creators[i]; - if ( creator != NULL ) { + if ( creator != c3d_null ) { creator->AddRef(); transactions.push_back( creator ); ::DetachItem( creator ); diff --git a/C3d/Include/cur_arc.h b/C3d/Include/cur_arc.h index b622cb6..ca20731 100644 --- a/C3d/Include/cur_arc.h +++ b/C3d/Include/cur_arc.h @@ -377,12 +377,12 @@ public : \en \name Common functions of a geometric object. \{ */ virtual MbePlaneType IsA() const; // \ru Тип элемента \en A type of element - virtual MbPlaneItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbPlaneItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual bool IsSame ( const MbPlaneItem & other, double accuracy = LENGTH_EPSILON ) const; virtual bool SetEqual ( const MbPlaneItem & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix & matr, MbRegTransform * ireg = NULL, const MbSurface * newSurface = NULL ); // \ru Преобразовать согласно матрице \en Transform according to the matrix - virtual void Move ( const MbVector &, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Поворот \en Rotation + virtual void Transform( const MbMatrix & matr, MbRegTransform * ireg = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Преобразовать согласно матрице \en Transform according to the matrix + virtual void Move ( const MbVector &, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Поворот \en Rotation virtual double DistanceToPoint( const MbCartPoint & ) const;// \ru Расстояние до точки \en Distance to a point virtual bool DistanceToPointIfLess( const MbCartPoint & toP, double & d ) const; // \ru Расстояние до точки, если оно меньше d \en Distance to a point if it is less than 'd' virtual void AddYourGabaritTo( MbRect & r ) const; // \ru Добавь свой габарит в прямой прям-к \en Add own bounding rectangle to an upright bounding rectangle @@ -445,7 +445,7 @@ public : /** \ru \name Общие функции кривой \en \name Common functions of the curve \{ */ - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual double GetMetricLength() const; // \ru Выдать метрическую длину кривой \en Get the metric length of the curve virtual double CalculateMetricLength() const; // \ru Посчитать метрическую длину \en Calculate metric length @@ -459,7 +459,7 @@ public : virtual double PointProjection( const MbCartPoint & pnt ) const; // \ru Проекция точки на кривую \en Projection of a point onto the curve virtual bool NearPointProjection( const MbCartPoint & pnt, double xEpsilon, double yEpsilon, - double & t, bool ext, MbRect1D * tRange = NULL ) const; // \ru Проекция точки на кривую или её продолжение в области поиска проекции \en Projection of the point onto the curve or its extension in the projection region + double & t, bool ext, MbRect1D * tRange = c3d_null ) const; // \ru Проекция точки на кривую или её продолжение в области поиска проекции \en Projection of the point onto the curve or its extension in the projection region // \ru Вычисление всех касательных к кривой из данной точки \en Calculation of all the tangents to the curve from a given point virtual void TangentPoint( const MbCartPoint & pnt, SArray & tFind ) const; // \ru Вычисление всех перпендикуляров к кривой из данной точки \en Calculation of all the perpendiculars to the curve from a given point @@ -949,15 +949,15 @@ public : void Init( const MbCartPoint & pc, const MbCartPoint & p1, const MbCartPoint & p2, int initSense ); // \ru Инициализация по начальной и конечной точкам и 1/2 угла раствора дуги \en Initialization by the starting and end points and 1/2 of the arc opening angle - // \ru Если diskrData != NULL, то округлить радиус и скорректировать первую \en If diskrData != NULL, then round the radius and correct the first + // \ru Если diskrData != c3d_null, то округлить радиус и скорректировать первую \en If diskrData != c3d_null, then round the radius and correct the first // \ru Или вторую точку (зависит от correctFirstPnt) \en Or the second point (depends on correctFirstPnt) /** \brief \ru Инициализировать дугу окружность. \en Initialize a circular arc. \~ \details \ru Инициализация происходит по начальной и конечной точкам и 1/2 угла раствора дуги. - Если diskrData != NULL, радиус округляется и корректируется первая + Если diskrData != c3d_null, радиус округляется и корректируется первая или вторая точка (зависит от correctFirstPnt). \en The initialization is performed by the starting and end points and 1/2 of the arc opening angle. - If diskrData != NULL, the radius is rounded and the first + If diskrData != c3d_null, the radius is rounded and the first or the second point is corrected (depends on correctFirstPnt). \~ \param[in] a2 - \ru 1/2 угла раствора дуги окружности. \en 1/2 of the circular arc opening angle. \~ @@ -973,7 +973,7 @@ public : correctFirstPnt == true - the first point is to be corrected. \~ */ void Init( double a2, MbCartPoint & p1, MbCartPoint & p2, - const DiskreteLengthData * diskrData = NULL, + const DiskreteLengthData * diskrData = c3d_null, bool correctFirstPnt = true ); // \ru Инициализация эллипса \en Ellipse initialization /** \brief \ru Инициализировать эллипс. diff --git a/C3d/Include/cur_arc3d.h b/C3d/Include/cur_arc3d.h index f9c35e1..3af393d 100644 --- a/C3d/Include/cur_arc3d.h +++ b/C3d/Include/cur_arc3d.h @@ -300,10 +300,10 @@ public : \en \name Common functions of a geometric object. \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента \en A type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным \en Make equal virtual double DistanceToPoint( const MbCartPoint3D & ) const;// \ru Расстояние до точки \en Distance to a point @@ -356,13 +356,13 @@ public : virtual void Explore( double & t, bool ext, MbCartPoint3D & pnt, MbVector3D & fir, MbVector3D * sec, MbVector3D * thir ) const; /** \} */ - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual double Step ( double t, double sag ) const; // \ru Вычисление шага по стрелке прогиба. \en Calculation of parameter step by the sag. virtual double DeviationStep( double t, double angle ) const; // \ru Вычисление шага по углу отклонения нормали. \en Calculation of parameter step by the deviation angle. virtual double MetricStep ( double t, double length ) const; // \ru Вычисление шага параметра по длине. \en Calculation of parameter step by the given length. // \ru Все проекции точки на кривую \en All the projections of a point onto the curve - virtual bool NearPointProjection( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = NULL ) const; // \ru Ближайшая проекция точки на кривую \en The closest projection of a point onto the curve + virtual bool NearPointProjection( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = c3d_null ) const; // \ru Ближайшая проекция точки на кривую \en The closest projection of a point onto the curve virtual MbNurbs3D * NurbsCurve( const MbCurveIntoNurbsInfo & ) const; virtual MbCurve3D * NurbsCurve( const MbNurbsParameters & ) const; // \ru Построить Nurbs-копию кривой \en Construct NURBS-copy of the curve @@ -377,15 +377,15 @@ public : virtual size_t GetCount() const; virtual void GetPointsByEvenLengthDelta( size_t n, std::vector & pnts ) const; // \ru Выдать n точек кривой с равными интервалами по длине дуги \en Get n points of curves equally spaced by the arc length - virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = NULL, - VERSION version = Math::DefaultMathVersion(), bool * coincParams = NULL ) const; // \ru Дать плоскую проекцию кривой \en Get a planar projection of a curve + virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = c3d_null, + VERSION version = Math::DefaultMathVersion(), bool * coincParams = c3d_null ) const; // \ru Дать плоскую проекцию кривой \en Get a planar projection of a curve virtual MbCurve * GetMapPsp( const MbMatrix3D &, double zNear, - MbRect1D * pRgn = NULL ) const; + MbRect1D * pRgn = c3d_null ) const; virtual double GetRadius() const; // \ru Дать физический радиус объекта или ноль, если это невозможно. \en Get the physical radius of the object or null if it impossible. virtual bool GetCircleAxis ( MbAxis3D & ) const; // \ru Дать ось кривой \en Get the axis of the curve // \ru Дать плоскую кривую и плейсмент, если пространственная кривая плоская (после использования вызывать DeleteItem на двумерную кривую) \en Get a planar curve and placement, if the spatial curve is planar (after using the DeleteItem must be called on a three-dimensional curve) - virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, PlanarCheckParams params = PlanarCheckParams() ) const; virtual void CalculateGabarit( MbCube & ) const; // \ru Вычислить габарит кривой \en Calculate bounding box of curve virtual void CalculateLocalGabarit( const MbMatrix3D &, MbCube & ) const; // \ru Рассчитать габарит относительно л.с.к. \en Calculate bounding box relative to local coordinate system @@ -413,9 +413,9 @@ public : void AlignXAxis(); ///< \ru Повернуть плейсмент круговой дуги так, чтобы ось ox указывала в начальную точку дуги. \en Rotate the placement of a circular arc so as the ox-axis points to the start point of the arc. /// \ru Является ли кривая плоской? \en Whether the curve is planar? - virtual bool IsPlanar() const; + virtual bool IsPlanar( double accuracy = METRIC_EPSILON ) const; /// \ru Заполнить плейсемент, если кривая плоская. \en Fill the placement if a curve is planar. - virtual bool GetPlacement( MbPlacement3D & place, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlacement( MbPlacement3D & place, PlanarCheckParams params = PlanarCheckParams() ) const; const MbPlacement3D & GetPlacement() const { return position; } MbPlacement3D & SetPlacement() { return position; } diff --git a/C3d/Include/cur_b_spline.h b/C3d/Include/cur_b_spline.h index 199e50e..3f5ed6f 100644 --- a/C3d/Include/cur_b_spline.h +++ b/C3d/Include/cur_b_spline.h @@ -56,12 +56,12 @@ public: // \ru Общие функции математического объекта \en The common functions of the mathematical object virtual MbeSpaceType IsA() const; // \ru Тип элемента \en A type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual bool IsSame( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; virtual bool SetEqual( const MbSpaceItem & init ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector3D & to, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbAxis3D & axis, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector3D & to, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbAxis3D & axis, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual void CalculateMesh( const MbStepData & stepData, const MbFormNote & note, MbMesh & mesh ) const; // \ru Построить полигональную копию mesh. \en Build polygonal copy mesh. virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object @@ -87,7 +87,7 @@ public: virtual MbNurbs3D * NurbsCurve( const MbCurveIntoNurbsInfo & ) const; - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction void CalculateOnePolygon( size_t i, const MbStepData & stepData, MbPolygon3D * polygon ) const; // \ru Pассчитать полигон по параметру T \en Calculate polygon of the parameter T // \ru Расчет весовых функций и их первых, вторых и третьих производных \en Calculation of the weight functions and their first, second and third derivatives diff --git a/C3d/Include/cur_bezier.h b/C3d/Include/cur_bezier.h index be2e5c9..04e1d93 100644 --- a/C3d/Include/cur_bezier.h +++ b/C3d/Include/cur_bezier.h @@ -220,10 +220,10 @@ public : virtual MbePlaneType IsA() const; // \ru Тип элемента \en A type of element virtual bool SetEqual( const MbPlaneItem & ); // \ru Сделать элементы равными \en Make the elements equal virtual bool IsSame( const MbPlaneItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли кривая curve копией данной кривой ? \en Whether the 'curve' curve is duplicate of current curve. - virtual void Transform( const MbMatrix & matr, MbRegTransform * ireg = NULL, const MbSurface * newSurface = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector & to, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Поворот \en Rotation - virtual MbPlaneItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual void Transform( const MbMatrix & matr, MbRegTransform * ireg = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector & to, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Поворот \en Rotation + virtual MbPlaneItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element /** \} */ /** \ru \name Функции инициализации сплайна. \en \name Spline initialization functions. @@ -310,7 +310,7 @@ public : virtual MbCurve * Trimmed( double t1, double t2, int sense ) const; virtual MbContour * NurbsContour() const; - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменение направления кривой на противоположное \en Change to the opposite direction of a curve + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменение направления кривой на противоположное \en Change to the opposite direction of a curve virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта \en Set properties of the object @@ -472,7 +472,7 @@ public : virtual bool DistanceAlong( double & t, double len, int curveDir, double eps = Math::LengthEps, VERSION version = Math::DefaultMathVersion() ) const; - virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = NULL, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? + virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = c3d_null, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? // \ru Устранить разрывы первых производных по длине. \en Eliminate the discontinuities of the first derivative at length. virtual bool SetContinuousDerivativeLength( VERSION version, double epsilon = EPSILON ); diff --git a/C3d/Include/cur_bezier3d.h b/C3d/Include/cur_bezier3d.h index 445a1ca..6695acf 100644 --- a/C3d/Include/cur_bezier3d.h +++ b/C3d/Include/cur_bezier3d.h @@ -112,12 +112,12 @@ public : // \ru Общие функции математического объекта \en The common functions of the mathematical object virtual MbeSpaceType IsA() const; // \ru Тип элемента \en A type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Поворот \en Rotation + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Поворот \en Rotation virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта \en Set properties of the object @@ -137,7 +137,7 @@ public : virtual double Step( double t, double sag ) const; // \ru Вычисление шага аппроксимации \en Calculate step of approximation virtual double DeviationStep( double t, double angle ) const; - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual bool Break( MbBezier3D &, double t1, double t2 ) const; // \ru Разбить на две части \en Split into two parts @@ -147,7 +147,7 @@ public : virtual MbCurve3D * TrimmBreak( double t1, double t2, int sense ) const; // \ru Дать плоскую кривую и плейсмент, если пространственная кривая плоская (после использования вызывать DeleteItem на двумерную кривую) // \en Give a planar curve and placement, if the spatial curve is planar (after using the DeleteItem must be called for a two-dimensional curve) - virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, PlanarCheckParams params = PlanarCheckParams() ) const; /// \ru Получить границы участков кривой, которые описываются одной аналитической функцией. /// \en Get the boundaries of the curve sections that are described by one analytical function. \~ @@ -180,8 +180,8 @@ public : ptrdiff_t GetSplinesCount() const { return splinesCount; } // \ru Количество сплайнов \en The number of splines // \ru Функции только 3D кривой \en Function for 3D-curve - virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = NULL, - VERSION version = Math::DefaultMathVersion(), bool * coincParams = NULL ) const; // \ru Дать плоскую проекцию кривой \en Get a planar projection of curve + virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = c3d_null, + VERSION version = Math::DefaultMathVersion(), bool * coincParams = c3d_null ) const; // \ru Дать плоскую проекцию кривой \en Get a planar projection of curve virtual size_t GetCount() const; @@ -191,7 +191,7 @@ public : virtual bool DistanceAlong( double & t, double len, int curveDir, double eps = Math::metricPrecision, VERSION version = Math::DefaultMathVersion() ) const; - virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = NULL, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? + virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = c3d_null, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? // \ru Устранить разрывы первых производных по длине. \en Eliminate the discontinuities of the first derivative at length. virtual bool SetContinuousDerivativeLength( VERSION version, double epsilon = EPSILON ); diff --git a/C3d/Include/cur_bridge3d.h b/C3d/Include/cur_bridge3d.h index fecd521..a3db18c 100644 --- a/C3d/Include/cur_bridge3d.h +++ b/C3d/Include/cur_bridge3d.h @@ -67,13 +67,13 @@ public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeSpaceType IsA() const; // \ru Тип элемента \en A type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли объект копией \en Whether the object is a copy virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным \en Make equal virtual bool IsSimilar( const MbSpaceItem & init ) const; // \ru Сделать элементы равными \en Make the elements equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void AddYourGabaritTo( MbCube & ) const; // \ru Добавь свой габарит в куб \en Add own bounding box into a bounding box virtual void Refresh(); // \ru Сбросить все временные данные \en Flush all the temporary data virtual void PrepareIntegralData( const bool forced ) const; // \ru Рассчитать временные (mutable) данные объекта. \en Calculate temporary (mutable) data of an object. @@ -97,7 +97,7 @@ public: virtual void Explore( double & t, bool ext, MbCartPoint3D & pnt, MbVector3D & fir, MbVector3D * sec, MbVector3D * thir ) const; - virtual void Inverse ( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse ( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual double Step ( double t, double sag ) const; // \ru Вычисление шага аппроксимации \en Calculation of the approximation step virtual double DeviationStep( double t, double angle ) const; diff --git a/C3d/Include/cur_character_curve.h b/C3d/Include/cur_character_curve.h index ce9dccb..630c735 100644 --- a/C3d/Include/cur_character_curve.h +++ b/C3d/Include/cur_character_curve.h @@ -71,12 +71,12 @@ public: // \ru Общие функции геометрического объекта. \en Common functions of a geometric object. virtual MbePlaneType IsA() const; // \ru Тип элемента \en A type of element - virtual MbPlaneItem & Duplicate ( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbPlaneItem & Duplicate ( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual bool IsSame ( const MbPlaneItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Кривая есть копия этой кривой ? \en Is a curve a copy of this curve? virtual bool SetEqual ( const MbPlaneItem & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix &, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector &, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual void Transform( const MbMatrix &, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector &, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void AddYourGabaritTo( MbRect & ) const; // \ru Добавь в прям-к свой габарит \en Add own bounding rectangle to the bounding rectangle virtual void PrepareIntegralData( const bool forced ) const; // \ru Рассчитать временные (mutable) данные объекта. \en Calculate temporary (mutable) data of an object. @@ -103,7 +103,7 @@ public: virtual double GetLengthEvaluation() const; // \ru Оценка метрической длины кривой \en Metric length evaluation of a curve virtual void CalculateGabarit( MbRect & ) const; // \ru Определить габаритный прямоугольник кривой. - virtual void Inverse ( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse ( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual size_t GetCount () const; // \ru Определить количество разбиений для прохода в операциях. \en Define the number of splittings for one passage in operations. virtual MbNurbs * NurbsCurve ( const MbCurveIntoNurbsInfo & ) const; diff --git a/C3d/Include/cur_character_curve3d.h b/C3d/Include/cur_character_curve3d.h index 84382ba..2fd24e3 100644 --- a/C3d/Include/cur_character_curve3d.h +++ b/C3d/Include/cur_character_curve3d.h @@ -79,12 +79,12 @@ public: VISITING_CLASS( MbCharacterCurve3D ) virtual MbeSpaceType IsA () const; // \ru Тип элемента \en A type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Кривая есть копия этой кривой ? \en Is a curve a copy of this curve? virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным \en Make equal - virtual void Transform ( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual void Transform ( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void AddYourGabaritTo( MbCube & ) const; virtual void PrepareIntegralData( const bool forced ) const; // \ru Рассчитать временные (mutable) данные объекта. \en Calculate temporary (mutable) data of an object. @@ -110,16 +110,16 @@ public: virtual double Step ( double t, double sag ) const; ///< \ru Вычисление шага параметра по величине прогиба кривой \en Calculation of parameter step by value of sag of the curve virtual double DeviationStep( double t, double ang ) const; ///< \ru Вычисление шага параметра по углу отклонения касательной \en Calculation of parameter by the angle of tangent deviation - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual double GetMetricLength() const; // \ru Метрическая длина кривой \en Metric length of a curve virtual double GetLengthEvaluation() const; - virtual bool IsPlanar() const; // \ru Является ли кривая плоской \en Whether the curve is planar - virtual bool GetPlacement( MbPlacement3D & place, VERSION version = Math::DefaultMathVersion() ) const; // \ru Заполнить плейсемент, если кривая плоская \en Fill the placement if curve is planar + virtual bool IsPlanar( double accuracy = METRIC_EPSILON ) const; // \ru Является ли кривая плоской \en Whether the curve is planar + virtual bool GetPlacement( MbPlacement3D & place, PlanarCheckParams params = PlanarCheckParams() ) const; // \ru Заполнить плейсемент, если кривая плоская \en Fill the placement if curve is planar // \ru Дать плоскую кривую и плейсмент, если пространственная кривая плоская (после использования вызывать DeleteItem на двумерную кривую) \en Get a planar curve and placement, if the spatial curve is planar (after using the DeleteItem must be called on a three-dimensional curve) - virtual bool GetPlaneCurve ( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, VERSION version = Math::DefaultMathVersion() ) const; - virtual MbCurve * GetMap( const MbMatrix3D & into, MbRect1D * pRegion = NULL, - VERSION version = Math::DefaultMathVersion(), bool * coincParams = NULL ) const; // \ru Дать плоскую проекцию кривой \en Get a planar projection of curve + virtual bool GetPlaneCurve ( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, PlanarCheckParams params = PlanarCheckParams() ) const; + virtual MbCurve * GetMap( const MbMatrix3D & into, MbRect1D * pRegion = c3d_null, + VERSION version = Math::DefaultMathVersion(), bool * coincParams = c3d_null ) const; // \ru Дать плоскую проекцию кривой \en Get a planar projection of curve // \ru Определить количество разбиений для прохода в операциях. \en Define the number of splittings for one passage in operations. virtual size_t GetCount() const; virtual MbNurbs3D * NurbsCurve( const MbCurveIntoNurbsInfo & ) const; diff --git a/C3d/Include/cur_cone_spiral.h b/C3d/Include/cur_cone_spiral.h index dc5b0c2..61cd5da 100644 --- a/C3d/Include/cur_cone_spiral.h +++ b/C3d/Include/cur_cone_spiral.h @@ -197,7 +197,7 @@ public: public: // \ru Общие функции математического объекта. \en The common functions of the mathematical object. virtual MbeSpaceType IsA() const; // \ru Получить тип. \en Get a type. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Создать копию. \en Create a copy. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Создать копию. \en Create a copy. virtual bool IsSame( const MbSpaceItem &, double accuracy = LENGTH_EPSILON ) const; virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. @@ -223,18 +223,18 @@ public: virtual double DeviationStep( double t, double angle ) const; // \ru Вычисление шага по углу отклонения нормали. \en Calculation of parameter step by the deviation angle. virtual double MetricStep ( double t, double length ) const; // \ru Вычисление шага параметра по длине. \en Calculation of parameter step by the given length. - virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = NULL, - VERSION version = Math::DefaultMathVersion(), bool * coincParams = NULL ) const; + virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = c3d_null, + VERSION version = Math::DefaultMathVersion(), bool * coincParams = c3d_null ) const; virtual MbCurve3D * Trimmed( double t1, double t2, int sense ) const; // \ru Создание усеченной кривой. \en Creation of a trimmed curve. - virtual void Inverse( MbRegTransform * = NULL ); // \ru Изменить направление. \en Change the direction. + virtual void Inverse( MbRegTransform * = c3d_null ); // \ru Изменить направление. \en Change the direction. virtual MbNurbs3D * NurbsCurve( const MbCurveIntoNurbsInfo & ) const; virtual double CalculateLength( double t1, double t2 ) const; // \ru Ближайшая проекция точки на спираль. \en The nearest point projection on the spiral. - virtual bool NearPointProjection( const MbCartPoint3D & p, double & t, bool ext, MbRect1D * tRange = NULL ) const; + virtual bool NearPointProjection( const MbCartPoint3D & p, double & t, bool ext, MbRect1D * tRange = c3d_null ) const; // \ru Частные функции спирали. \en Special functions for spiral. virtual bool SetStep( double s ); // \ru Изменить шаг. \en Change the step. diff --git a/C3d/Include/cur_contour.h b/C3d/Include/cur_contour.h index 6d6e66c..abeef2f 100644 --- a/C3d/Include/cur_contour.h +++ b/C3d/Include/cur_contour.h @@ -102,13 +102,13 @@ public: virtual MbePlaneType IsA() const; // \ru Тип элемента \en A type of element virtual MbePlaneType Type() const; // \ru Тип элемента \en A type of element - virtual MbPlaneItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element. + virtual MbPlaneItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element. virtual bool IsSimilar ( const MbPlaneItem & ) const; // \ru Являются ли элементы подобными \en Whether the elements are similar. virtual bool SetEqual( const MbPlaneItem & ); // \ru Сделать элементы равными \en Make equal elements. virtual bool IsSame( const MbPlaneItem &, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли кривая curve копией данной кривой ? \en Whether the curve "curve" is a copy of a given curve? - virtual void Transform( const MbMatrix &, MbRegTransform * ireg = NULL, const MbSurface * newSurface = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix. - virtual void Move( const MbVector &, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Сдвиг \en Translation. - virtual void Rotate( const MbCartPoint &, const MbDirection & angle, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Поворот \en Rotation. + virtual void Transform( const MbMatrix &, MbRegTransform * ireg = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix. + virtual void Move( const MbVector &, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Сдвиг \en Translation. + virtual void Rotate( const MbCartPoint &, const MbDirection & angle, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Поворот \en Rotation. /** \brief \ru Построить эквидистантную кривую, смещённую на заданное расстояние. \en Construct the equidistant curve which is shifted by the given value. \~ @@ -128,8 +128,8 @@ public: You can use the OffsetContour function instead this function. \~ \param[in] rad - \ru Величина эквидистантного смещения. \en Equidistant offset. \~ - \return \ru Возвращает эквидистантный контур, если получилось его построить, иначе - NULL. - \en Returns the equidistant curve if it's possible to build it, otherwise - NULL. \~ + \return \ru Возвращает эквидистантный контур, если получилось его построить, иначе - c3d_null. + \en Returns the equidistant curve if it's possible to build it, otherwise - c3d_null. \~ */ virtual MbCurve * Offset( double rad ) const; // \ru Смещение контура. \en Shift of a contour @@ -300,7 +300,7 @@ public: virtual double PointProjection( const MbCartPoint & ) const; // \ru Проекция точки на кривую \en Point projection on the curve virtual bool NearPointProjection( const MbCartPoint &, double xEpsilon, double yEpsilon, - double & t, bool ext, MbRect1D * tRange = NULL ) const; // \ru Проекция точки на кривую или её продолжение в области поиска проекции \en Point projection on the curve or its extension in the projection search area + double & t, bool ext, MbRect1D * tRange = c3d_null ) const; // \ru Проекция точки на кривую или её продолжение в области поиска проекции \en Point projection on the curve or its extension in the projection search area /** \brief \ru Параметрическое расстояние до ближайшей границы. \en Parametric distance to the nearest boundary. @@ -416,7 +416,7 @@ public: void SetSense( int sense ); // \ru Изменить направление обхода контура \en Change the traverse direction of the contour - virtual void Inverse( MbRegTransform * = NULL ); + virtual void Inverse( MbRegTransform * = c3d_null ); // \ru Согласовать параметризацию сегментов, если до инвертации она была согласованной. \en Agree on segment parameterization, if it was consistent before inversion. bool NormalizeReparametrization(); virtual size_t GetCount() const; // \ru Количество разбиений для прохода в операциях \en The number of partitions for passage in the operations @@ -464,7 +464,7 @@ public: \param[in] epsilon - \ru Погрешность вычисления. \en The accuracy of the calculation. \~ */ - virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = NULL, double epsilon = EPSILON ) const; + virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = c3d_null, double epsilon = EPSILON ) const; /** \brief \ru Устранить разрывы производных по длине в стыках сегментов. \en Eliminate the discontinuities of the derivatives of the length of the joints of the segments. @@ -778,13 +778,13 @@ void MbContour::GetCornerParams( Params & params ) const double pLength = 0.0; const MbCurve * segment = GetSegment( 0 ); - if ( segment != NULL ) + if ( segment != c3d_null ) pLength = segment->GetParamLength(); for ( size_t segInd = 1; segInd < segCount; ++segInd ) { params.push_back( pLength ); segment = GetSegment( segInd ); - if ( segment != NULL ) + if ( segment != c3d_null ) pLength += segment->GetParamLength(); } } diff --git a/C3d/Include/cur_contour3d.h b/C3d/Include/cur_contour3d.h index 9ea1a2f..08acdf2 100644 --- a/C3d/Include/cur_contour3d.h +++ b/C3d/Include/cur_contour3d.h @@ -92,13 +92,13 @@ public: virtual MbeSpaceType IsA() const; // \ru Тип элемента \en Type of element virtual MbeSpaceType Type() const; // \ru Групповой тип элемента \en Group element type - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли объект копией \en Whether the object is a copy virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным \en Make equal virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными \en Whether the objects are similar - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual double DistanceToPoint( const MbCartPoint3D & ) const; // \ru Расстояние до точки \en Distance to a point virtual void PrepareIntegralData( const bool forced ) const; // \ru Рассчитать временные (mutable) данные объекта. \en Calculate temporary (mutable) data of an object. @@ -172,7 +172,7 @@ public: virtual MbNurbs3D * NurbsCurve( const MbCurveIntoNurbsInfo & ) const; virtual MbCurve3D * Trimmed( double t1, double t2, int sense ) const; // \ru Создание усеченной кривой \en Creation of a trimmed curve // \ru Изменить направление \en Change direction - virtual void Inverse( MbRegTransform * iReg = NULL ); + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Согласовать параметризацию сегментов, если до инвертации она была согласованной. \en Agree on segment parameterization, if it was consistent before inversion. bool NormalizeReparametrization(); /// \ru Подобные ли кривые для объединения (слива). \en Whether the curves to union (joining) are similar. @@ -180,7 +180,7 @@ public: // \ru Все проекции точки на кривую \en All point projections on the curve // \ru Ближайшая проекция точки на кривую \en The nearest point projection to the curve - virtual bool NearPointProjection( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = NULL ) const; + virtual bool NearPointProjection( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = c3d_null ) const; virtual double CalculateMetricLength() const; // \ru Посчитать метрическую длину \en Calculate the metric length virtual double CalculateLength( double t1, double t2 ) const; @@ -190,18 +190,18 @@ public: virtual void CalculateLocalGabarit( const MbMatrix3D &, MbCube & ) const; // \ru Рассчитать габарит относительно л.с.к. \en Calculate bounding box relative to the local coordinate system. virtual void CalculateGabarit( MbCube & ) const; // \ru Вычислить габарит кривой \en Calculate the bounding box of curve - virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = NULL, - VERSION version = Math::DefaultMathVersion(), bool * coincParams = NULL ) const; // \ru Дать плоскую проекцию кривой \en Get a planar projection of curve + virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = c3d_null, + VERSION version = Math::DefaultMathVersion(), bool * coincParams = c3d_null ) const; // \ru Дать плоскую проекцию кривой \en Get a planar projection of curve virtual MbCurve * GetProjection( const MbPlacement3D & place, VERSION version ) const; // \ru Дать проекцию ребра на плоскость. \en Get the edge projection onto plane. virtual size_t GetCount() const; virtual void ChangeCarrier( const MbSpaceItem & item, MbSpaceItem & init ); // \ru Изменение носителя \en Changing of carrier virtual double GetRadius() const; // \ru Дать физический радиус объекта или ноль, если это невозможно. \en Get the physical radius of the object or null if it impossible. - virtual bool IsPlanar () const; // \ru Является ли кривая плоской \en Whether the curve is planar? - virtual bool GetPlacement( MbPlacement3D & place, VERSION version = Math::DefaultMathVersion() ) const; // \ru Заполнить плейсемент, ести кривая плоская \en Fill the placement if curve is planar + virtual bool IsPlanar ( double accuracy = METRIC_EPSILON ) const; // \ru Является ли кривая плоской \en Whether the curve is planar? + virtual bool GetPlacement( MbPlacement3D & place, PlanarCheckParams params = PlanarCheckParams() ) const; // \ru Заполнить плейсемент, ести кривая плоская \en Fill the placement if curve is planar // \ru Дать плоскую кривую и плейсмент, если пространственная кривая плоская (после использования вызывать DeleteItem на двумерную кривую) \en Give a planar curve and placement, if the spatial curve is planar (after using the DeleteItem must be called on a three-dimensional curve) - virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, PlanarCheckParams params = PlanarCheckParams() ) const; /// \ru Дать поверхностную кривую, если пространственная кривая поверхностная (после использования вызывать DeleteItem на аргументы). \en Get surface curve if the space curve is surface (after the using call DeleteItem for arguments) virtual bool GetSurfaceCurve( MbCurve *& curve2d, MbSurface *& surface, VERSION version = Math::DefaultMathVersion() ) const; virtual void GetWeightCentre( MbCartPoint3D & ) const; @@ -229,7 +229,7 @@ public: \param[in] epsilon - \ru Погрешность вычисления. \en The accuracy of the calculation. \~ */ - virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = NULL, double epsilon = EPSILON ) const; + virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = c3d_null, double epsilon = EPSILON ) const; /** \brief \ru Устранить разрывы производных по длине в стыках сегментов. \en Eliminate the discontinuities of the derivatives of the length of the joints of the segments. @@ -403,11 +403,11 @@ MbContour3D::MbContour3D( const CurvesVector & initSegments, bool sameCurves ) const size_t count = initSegments.size(); if ( count > 0 ) { - MbRegDuplicate * ireg = NULL; + MbRegDuplicate * ireg = c3d_null; MbAutoRegDuplicate autoreg( ireg ); for ( size_t i = 0; i < count; ++i ) { const MbCurve3D * initSegment = initSegments[i]; - if ( initSegment != NULL ) { + if ( initSegment != c3d_null ) { C3D_ASSERT( initSegment->GetSubstrate().Type() != st_Contour3D ); // \ru Использование контура не по назначению. \en Wrong contour use as contours container. MbCurve3D * segment = sameCurves ? const_cast(initSegment) : static_cast(&initSegment->Duplicate( ireg )); segments.push_back( segment ); @@ -430,7 +430,7 @@ bool MbContour3D::Init( const CurvesVector & initSegments, bool sameCurves, bool ::AddRefItems( initSegments ); DeleteSegments(); for ( size_t i = 0; i < count; ++i ) { - if ( initSegments[i] != NULL ) { + if ( initSegments[i] != c3d_null ) { C3D_ASSERT( initSegments[i]->GetSubstrate().Type() != st_Contour3D ); // \ru Использование контура не по назначению. \en Wrong contour use as contours container. MbCurve3D * initSegment = &const_cast( *initSegments[i] ); MbCurve3D * segment = sameCurves ? initSegment : static_cast(&initSegment->Duplicate()); @@ -481,7 +481,7 @@ void MbContour3D::GetSegments( CurvesVector & curves ) const SPtr curve; for ( size_t k = 0; k < segmentsCnt; ++k ) { curve = const_cast(segments[k]); - if ( curve != NULL ) { + if ( curve != c3d_null ) { curves.push_back( curve ); ::DetachItem( curve ); } diff --git a/C3d/Include/cur_contour_on_plane.h b/C3d/Include/cur_contour_on_plane.h index ed15544..dfa9009 100644 --- a/C3d/Include/cur_contour_on_plane.h +++ b/C3d/Include/cur_contour_on_plane.h @@ -63,7 +63,7 @@ public : // \ru Общие функции математического объекта. \en The common functions of the mathematical object. virtual MbeSpaceType IsA() const; // \ru Дать тип элемента. \en Get a type of the element. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const ; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const ; // \ru Сделать копию элемента. \en Create a copy of the element. virtual MbContourOnSurface & CurvesDuplicate() const; // \ru Сделать копию со старой подложкой. \en Make a copy with old substrate. virtual bool IsSame( const MbSpaceItem &, double accuracy = LENGTH_EPSILON ) const; // \ru Определить, является ли копией данного объекта? \en Determine whether the object is copy of a given object. @@ -98,11 +98,11 @@ public : virtual bool ChangeSurface( const MbSurface & newsurf ); // \ru Заменить поверхность контура. \en Replace the surface of contour. virtual void ChangeCarrier( const MbSpaceItem & item, MbSpaceItem & init ); // \ru Изменить носителя. \en Change the carrier. - virtual bool IsPlanar() const; // \ru Является ли кривая плоской? \en Whether the curve is planar? + virtual bool IsPlanar( double accuracy = METRIC_EPSILON ) const; // \ru Является ли кривая плоской? \en Whether the curve is planar? // \ru Дать плоскую кривую и плейсмент, если пространственная кривая плоская (после использования вызывать DeleteItem на двумерную кривую). \en Get planar curve and placement if the space curve is planar (after the using call DeleteItem for two-dimensional curves) - virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place3d, bool saveParams, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place3d, bool saveParams, PlanarCheckParams params = PlanarCheckParams() ) const; // \ru Заполнить плейсмент, если кривая плоская. \en Fill the placement if curve is planar. - virtual bool GetPlacement( MbPlacement3D & place, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlacement( MbPlacement3D & place, PlanarCheckParams params = PlanarCheckParams() ) const; virtual double GetRadius() const; // \ru Дать физический радиус объекта или ноль, если это невозможно. \en Get the physical radius of the object or null if it impossible. virtual bool GetCircleAxis( MbAxis3D & ) const; // \ru Дать ось кривой. \en Get the curve axis. @@ -112,8 +112,8 @@ public : virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Определить, является ли линия прямолинейной? \en Determine whether the line is straight. - virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D *pRgn = NULL, - VERSION version = Math::DefaultMathVersion(), bool * coincParams = NULL ) const; // \ru Дать плоскую проекцию кривой. \en Get a planar projection of curve. + virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D *pRgn = c3d_null, + VERSION version = Math::DefaultMathVersion(), bool * coincParams = c3d_null ) const; // \ru Дать плоскую проекцию кривой. \en Get a planar projection of curve. virtual void GetPointsByEvenLengthDelta( size_t n, std::vector & pnts ) const; // \ru Выдать n точек кривой с равными интервалами по длине дуги. \en Get n points of curve with equal intervals along the length of the arc. @@ -129,7 +129,7 @@ public : /// \ru Заменить локальную систему координат плоскости. \en Replace the local coordinate system of a plane. void SetPlacement( const MbPlacement3D & ); /// \ru Инвертировать нормаль плоскости. \en Invert the normal of plane. - void InvertNormal( MbRegTransform * = NULL ); + void InvertNormal( MbRegTransform * = c3d_null ); private: void operator = ( const MbContourOnPlane & ); // \ru Не реализовано !!! \en Not implemented !!! diff --git a/C3d/Include/cur_contour_on_surface.h b/C3d/Include/cur_contour_on_surface.h index 8c969f2..bf11c49 100644 --- a/C3d/Include/cur_contour_on_surface.h +++ b/C3d/Include/cur_contour_on_surface.h @@ -44,8 +44,8 @@ class MbSegmentsSearchTree; class MATH_CLASS MbContourOnSurface : public MbCurve3D { protected : - MbSurface * surface; ///< \ru Указатель на базовую поверхность (всегда не NULL). \en The pointer to the base surface (this value is never NULL). - MbContour * contour; ///< \ru Указатель на 2D-контур в плоскости параметров поверхности (всегда не NULL). \en The pointer to 2D-contour in the plane of the surface parameters (this value is never NULL). + MbSurface * surface; ///< \ru Указатель на базовую поверхность (всегда не c3d_null). \en The pointer to the base surface (this value is never c3d_null). + MbContour * contour; ///< \ru Указатель на 2D-контур в плоскости параметров поверхности (всегда не c3d_null). \en The pointer to 2D-contour in the plane of the surface parameters (this value is never c3d_null). mutable double area; ///< \ru Площадь 2D-контура со знаком. \en The area of 2D-contour with sign. mutable MbCube cube; ///< \ru Габаритный куб. \en Bounding box. mutable double metricLength; ///< \ru Метрическая длина. \en The metric length. @@ -99,15 +99,15 @@ public : virtual MbeSpaceType IsA() const; // \ru Дать тип элемента. \en Get a type of the element. virtual MbeSpaceType Type() const; // \ru Дать тип элемента. \en Get a type of the element. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. /// \ru Сделать копию на той же поверхности. \en Create a copy on the same surface. virtual MbContourOnSurface & CurvesDuplicate() const; virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Определить, является ли копией данного объекта? \en Determine whether the object is copy of a given object. virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным. \en Make equal. virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Определить, являются ли объекты подобными. \en Determine whether the objects are similar. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвинуть вдоль вектора. \en Move along a vector. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвинуть вдоль вектора. \en Move along a vector. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual double DistanceToPoint( const MbCartPoint3D & ) const; // \ru Вычислить расстояние до точки. \en Calculate the distance to a point. virtual void AddYourGabaritTo( MbCube &r ) const; // \ru Добавить габарит в куб. \en Add bounding box into a cube. virtual void CalculateMesh( const MbStepData & stepData, const MbFormNote & note, MbMesh & mesh ) const; // \ru Построить полигональную копию mesh. \en Build polygonal copy mesh. @@ -140,7 +140,7 @@ public : MbCartPoint3D & pnt, MbVector3D & fir, MbVector3D * sec, MbVector3D * thir ) const; /// \ru Изменить ориентацию контура относительно поверхности. \en Change the contour orientation relative to a surface. - virtual void Inverse( MbRegTransform * iReg = NULL ); + virtual void Inverse( MbRegTransform * iReg = c3d_null ); virtual MbNurbs3D * NurbsCurve( const MbCurveIntoNurbsInfo & ) const; // \ru Установить параметры NURBS. \en Set the NURBS parameters. @@ -167,25 +167,25 @@ public : virtual bool ChangeSurface( const MbSurface & ); /// \ru Заменить двумерный контур. \en Replace the two-dimensional contour. void ChangeContour( MbContour & ); - virtual bool IsPlanar() const; // \ru Определить, является ли кривая плоской. \en Determine whether the curve is planar. + virtual bool IsPlanar( double accuracy = METRIC_EPSILON ) const; // \ru Определить, является ли кривая плоской. \en Determine whether the curve is planar. virtual bool IsSmoothConnected( double angleEps ) const; // \ru Определить, является ли контур гладким. \en Define whether the contour is smooth. // \ru Дать плоскую кривую и плейсмент, если пространственная кривая плоская (после использования вызывать DeleteItem на двумерную кривую). \en Get planar curve and placement if the space curve is planar (after the using call DeleteItem for two-dimensional curves) - virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place3d, bool saveParams, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place3d, bool saveParams, PlanarCheckParams params = PlanarCheckParams() ) const; // \ru Дать поверхностную кривую, если пространственная кривая поверхностная (после использования вызывать DeleteItem на аргументы). \en Get surface curve if the space curve is surface (after the using call DeleteItem for arguments) virtual bool GetSurfaceCurve( MbCurve *& curve2d, MbSurface *& surface, VERSION version = Math::DefaultMathVersion() ) const; // \ru Заполнить плейсмент, если кривая плоская. \en Fill the placement if curve is planar. - virtual bool GetPlacement( MbPlacement3D & place, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlacement( MbPlacement3D & place, PlanarCheckParams params = PlanarCheckParams() ) const; - virtual bool NearPointProjection( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = NULL ) const; // \ru Вычислить ближайшую проекцию точки на кривую. \en Calculate the nearest projection of the point on the curve. + virtual bool NearPointProjection( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = c3d_null ) const; // \ru Вычислить ближайшую проекцию точки на кривую. \en Calculate the nearest projection of the point on the curve. virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Определить, является ли линия прямолинейной. \en Determine whether the line is straight. - virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = NULL, - VERSION version = Math::DefaultMathVersion(), bool * coincParams = NULL ) const; // \ru Дать плоскую проекцию кривой. \en Get a planar projection of curve. + virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = c3d_null, + VERSION version = Math::DefaultMathVersion(), bool * coincParams = c3d_null ) const; // \ru Дать плоскую проекцию кривой. \en Get a planar projection of curve. /// \ru Найти все особые точки функции кривизны кривой. /// \en Find all the special points of the curvature function of the curve. virtual void GetCurvatureSpecialPoints( std::vector & points ) const; - virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = NULL, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? + virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = c3d_null, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? // \ru Устранить разрывы первых производных по длине. \en Eliminate the discontinuities of the first derivative at length. virtual bool SetContinuousDerivativeLength( VERSION version, double epsilon = EPSILON ); @@ -211,6 +211,9 @@ public : /// \ru Вычислить нормали к поверхности по параметру кривой. \en Calculate normals to the surface in the curve parameter. void SurfaceNormal( double t, MbVector3D & n ) const; + /// \ru Кривизна поверхности в поперечном направлении к вектору tau. \en The surface curvature in the transverse direction to the vector tau. + double SurfaceTransversalCurvature( double t, const MbVector3D & tau ) const; + /** \brief \ru Найти сегмент контура. \en Find a contour segment. \~ \details \ru Найти сегмент контура по параметру контура. \n diff --git a/C3d/Include/cur_contour_with_breaks.h b/C3d/Include/cur_contour_with_breaks.h index 456155e..173d886 100644 --- a/C3d/Include/cur_contour_with_breaks.h +++ b/C3d/Include/cur_contour_with_breaks.h @@ -84,10 +84,10 @@ public : \en \name Common functions of a geometric object. \{ */ virtual MbePlaneType IsA() const; // \ru Тип элемента. \en A type of element. - virtual void Transform( const MbMatrix & matr, MbRegTransform * ireg = NULL, const MbSurface * newSurface = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move( const MbVector & to, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Сдвиг. \en Move. - virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Поворот. \en Rotation. - virtual MbPlaneItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual void Transform( const MbMatrix & matr, MbRegTransform * ireg = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move( const MbVector & to, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Сдвиг. \en Move. + virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Поворот. \en Rotation. + virtual MbPlaneItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. /** \} */ /**\ru \name Функции доступа к данным: разрывы. \en \name Functions for access to data: breaks. @@ -160,11 +160,11 @@ public : \en Invisible part by the number of break. \~ \details \ru Невидимая часть по номеру разрыва.\n Номер проверяется на корректность. - В случае, если номер не меньше числа разрывов, функция вернет NULL.\n + В случае, если номер не меньше числа разрывов, функция вернет c3d_null.\n После использования полученный контур нужно удалить. \en Invisible part by the number of break. \n A number Is checked for correctness. - If the number is not less than the number of breaks, the function returns NULL. \n + If the number is not less than the number of breaks, the function returns c3d_null. \n The resulting contour is to be deleted after use. \~ \param[in] i - \ru Номер разрыва, должен быть меньше количества видимых частей. \en The number of break must be less than the number of visible parts. \~ diff --git a/C3d/Include/cur_cosinusoid.h b/C3d/Include/cur_cosinusoid.h index b9fb77b..5c745cd 100644 --- a/C3d/Include/cur_cosinusoid.h +++ b/C3d/Include/cur_cosinusoid.h @@ -90,11 +90,11 @@ public: virtual MbePlaneType IsA() const; // \ru Тип элемента \en Type of element virtual bool SetEqual ( const MbPlaneItem & ); // \ru Сделать элементы равными \en Make the elements equal virtual bool IsBounded () const { return true; } // \ru Ограниченность кривой \en Bounded curve - virtual void Transform ( const MbMatrix & matr, MbRegTransform * ireg = NULL, const MbSurface * newSurface = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector & to, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Поворот \en Rotation + virtual void Transform ( const MbMatrix & matr, MbRegTransform * ireg = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector & to, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Поворот \en Rotation virtual bool IsSame ( const MbPlaneItem & other, double accuracy = LENGTH_EPSILON ) const; - virtual MbPlaneItem & Duplicate ( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbPlaneItem & Duplicate ( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual void Refresh(); // \ru Сбросить все временные данные \en Reset all temporary data virtual void PrepareIntegralData( const bool forced ) const; // \ru Рассчитать временные (mutable) данные объекта. \en Calculate temporary (mutable) data of an object. @@ -124,7 +124,7 @@ public: virtual bool HasLength ( double & length ) const; virtual double GetMetricLength() const; // \ru Метрическая длина \en The metric length - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменение направления кривой на противоположное \en Change to the opposite direction of a curve + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменение направления кривой на противоположное \en Change to the opposite direction of a curve virtual MbNurbs * NurbsCurve( const MbCurveIntoNurbsInfo & ) const; @@ -140,7 +140,7 @@ public: virtual double PointProjection( const MbCartPoint & pnt ) const; // \ru Проекция точки на кривую \en Point projection on the curve virtual bool NearPointProjection( const MbCartPoint & pnt, double xEpsilon, double yEpsilon, - double & t, bool ext, MbRect1D * tRange = NULL ) const; // \ru Проекция точки на кривую или её продолжение в области поиска проекции \en Point projection on the curve or its extension in the projection search area + double & t, bool ext, MbRect1D * tRange = c3d_null ) const; // \ru Проекция точки на кривую или её продолжение в области поиска проекции \en Point projection on the curve or its extension in the projection search area virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта \en Set properties of the object @@ -173,10 +173,10 @@ public: void Init1( CosinusoidPar & par, MbCartPoint & p1, MbCartPoint & p2, double & len, double & angle ); void Init2( CosinusoidPar & par, const MbCartPoint & p1, MbCartPoint & p2, const double & len, double & angle ); void Init3( CosinusoidPar & par, const MbCartPoint & p1, MbCartPoint & p2, double & len, const double & angle, - const DiskreteLengthData * = NULL ); + const DiskreteLengthData * = c3d_null ); void Init4( CosinusoidPar & par, MbCartPoint & p1, const MbCartPoint & p2, const double & len, double & angle ); void Init5( CosinusoidPar & par, MbCartPoint & p1, const MbCartPoint & p2, double & len, const double & angle, - const DiskreteLengthData * = NULL ); + const DiskreteLengthData * = c3d_null ); void Init6( CosinusoidPar & par, const MbCartPoint & p1, MbCartPoint & p2, const double & len, const double & angle ); void Init7( CosinusoidPar & par, MbCartPoint & p1, const MbCartPoint & p2, const double & len, const double & angle ); void Init8( CosinusoidPar & par, MbCartPoint & p1, MbCartPoint & p2, double & len, double & angle, diff --git a/C3d/Include/cur_crooked_spiral.h b/C3d/Include/cur_crooked_spiral.h index a01898f..e45da06 100644 --- a/C3d/Include/cur_crooked_spiral.h +++ b/C3d/Include/cur_crooked_spiral.h @@ -57,7 +57,7 @@ class MATH_CLASS MbCrookedSpiral : public MbSpiral { typedef std::vector CurveParams; protected: - MbCurve * curve; ///< \ru Кривая, задающая ось спирали, (не может быть NULL). \en The curve which determines the axis of the spiral, (can not be NULL). + MbCurve * curve; ///< \ru Кривая, задающая ось спирали, (не может быть c3d_null). \en The curve which determines the axis of the spiral, (can not be c3d_null). double radius; ///< \ru Радиус спирали. \en A spiral radius. double wMin; ///< \ru Минимальное значение параметра curve. \en Minimal value of parameter "curve". double wMax; ///< \ru Максимальное значение параметра curve. \en Maximal value of parameter "curve". @@ -84,7 +84,7 @@ public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeSpaceType IsA() const; // \ru Тип элемента \en Type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual bool IsSame( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; virtual bool SetEqual( const MbSpaceItem & init ); // \ru Сделать равным \en Make equal @@ -108,7 +108,7 @@ public : virtual void Explore( double & t, bool ext, MbCartPoint3D & pnt, MbVector3D & fir, MbVector3D * sec, MbVector3D * thir ) const; - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual MbCurve3D * Trimmed( double t1, double t2, int sense ) const; // \ru Создание усеченной кривой \en Creation of a trimmed curve virtual double CalculateLength( double t1, double t2 ) const; diff --git a/C3d/Include/cur_cubic_spline.h b/C3d/Include/cur_cubic_spline.h index 29a8393..183e803 100644 --- a/C3d/Include/cur_cubic_spline.h +++ b/C3d/Include/cur_cubic_spline.h @@ -194,11 +194,11 @@ public : \{ */ virtual MbePlaneType IsA () const; // \ru Тип элемента \en Type of element virtual bool SetEqual ( const MbPlaneItem & ); // \ru Сделать элементы равными \en Make equal elements - virtual bool IsSame ( const MbPlaneItem &, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли кривая curve копией данной кривой \en Whether the curve "curve" is a copy of a given curve - virtual void Transform( const MbMatrix &, MbRegTransform * ireg = NULL, const MbSurface * newSurface = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector &, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbCartPoint &, const MbDirection &, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Поворот \en Rotation - virtual MbPlaneItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual bool IsSame ( const MbPlaneItem &, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли кривая curve копией данной кривой \en Whether the curve "curve" is a copy of a given curve + virtual void Transform( const MbMatrix &, MbRegTransform * ireg = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector &, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbCartPoint &, const MbDirection &, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Поворот \en Rotation + virtual MbPlaneItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element /** \} */ /** \ru \name Функции описания области определения кривой. @@ -246,7 +246,7 @@ public : \{ */ virtual void Rebuild (); // \ru Пересчитать Безье кривую \en Recalculate Bezier curve virtual void SetClosed( bool cls ); // \ru Установить признак замкнутости. \en Set attribute of closedness. - virtual void Inverse ( MbRegTransform * iReg = NULL ); // \ru Изменение направления кривой на противоположное \en Change to the opposite direction of a curve + virtual void Inverse ( MbRegTransform * iReg = c3d_null ); // \ru Изменение направления кривой на противоположное \en Change to the opposite direction of a curve /** \brief \ru Построить усеченную кривую. \en Construct a trimmed curve. \~ diff --git a/C3d/Include/cur_cubic_spline3d.h b/C3d/Include/cur_cubic_spline3d.h index 5253207..6954681 100644 --- a/C3d/Include/cur_cubic_spline3d.h +++ b/C3d/Include/cur_cubic_spline3d.h @@ -247,13 +247,13 @@ public: void Init( const MbCubicSpline &, const MbPlacement3D & ); // \ru Общие функции математического объекта \en Common functions of the mathematical object - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual MbeSpaceType IsA() const; // \ru Тип элемента \en Type of element virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта \en Set properties of the object @@ -277,19 +277,19 @@ public: virtual MbNurbs3D * NurbsCurve( const MbCurveIntoNurbsInfo & ) const; virtual MbCurve3D * NurbsCurve( const MbNurbsParameters & ) const; - virtual void Inverse ( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse ( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual size_t GetCount() const; virtual void Rebuild (); // \ru Перестроить кривую \en Rebuild the curve virtual void SetClosed( bool cls ); // \ru Установить признак замкнутости. \en Set attribute of closedness. virtual bool IsDegenerate( double eps = METRIC_PRECISION ) const; virtual MbCurve3D * TrimmBreak( double t1, double t2, int sense ) const; // \ru Создать усеченную кривую \en Create the trimmed curve - virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = NULL, - VERSION version = Math::DefaultMathVersion(), bool * coincParams = NULL ) const; + virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = c3d_null, + VERSION version = Math::DefaultMathVersion(), bool * coincParams = c3d_null ) const; - virtual bool IsPlanar () const; // \ru Является ли кривая плоской \en Whether a curve is planar - virtual bool GetPlacement( MbPlacement3D & place, VERSION version = Math::DefaultMathVersion() ) const; // \ru Заполнить плейсемент, ести кривая плоская \en Fill the placement if curve is planar + virtual bool IsPlanar ( double accuracy = METRIC_EPSILON ) const; // \ru Является ли кривая плоской \en Whether a curve is planar + virtual bool GetPlacement( MbPlacement3D & place, PlanarCheckParams params = PlanarCheckParams() ) const; // \ru Заполнить плейсемент, ести кривая плоская \en Fill the placement if curve is planar // \ru Дать плоскую кривую и плейсмент, если пространственная кривая плоская (после использования вызывать DeleteItem на двумерную кривую) \en Give a planar curve and placement, if the spatial curve is planar (after using the DeleteItem must be called for a two-dimensional curve) - virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, PlanarCheckParams params = PlanarCheckParams() ) const; // \ru Посчитать метрическую длину \en Calculate the metric length virtual double CalculateMetricLength() const; diff --git a/C3d/Include/cur_curve_spiral.h b/C3d/Include/cur_curve_spiral.h index 31e391a..2c539f4 100644 --- a/C3d/Include/cur_curve_spiral.h +++ b/C3d/Include/cur_curve_spiral.h @@ -88,7 +88,7 @@ public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeSpaceType IsA() const; // \ru Тип элемента \en Type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual bool IsSame( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; virtual bool SetEqual( const MbSpaceItem & init ); // \ru Сделать равным \en Make equal @@ -112,7 +112,7 @@ public: virtual void Explore( double & t, bool ext, MbCartPoint3D & pnt, MbVector3D & fir, MbVector3D * sec, MbVector3D * thir ) const; - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual MbCurve3D * Trimmed( double t1, double t2, int sense ) const; // \ru Создание усеченной кривой \en Creation of a trimmed curve diff --git a/C3d/Include/cur_hermit.h b/C3d/Include/cur_hermit.h index 28f5186..f99372f 100644 --- a/C3d/Include/cur_hermit.h +++ b/C3d/Include/cur_hermit.h @@ -211,11 +211,11 @@ public : virtual MbePlaneType IsA() const; // \ru Тип элемента \en Type of element virtual bool SetEqual( const MbPlaneItem & ); // \ru Сделать элементы равными \en Make the elements equal - virtual void Transform( const MbMatrix & matr, MbRegTransform * ireg = NULL, const MbSurface * newSurface = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector & to, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Поворот \en Rotation + virtual void Transform( const MbMatrix & matr, MbRegTransform * ireg = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector & to, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Поворот \en Rotation virtual bool IsSame( const MbPlaneItem & other, double accuracy = LENGTH_EPSILON ) const; - virtual MbPlaneItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbPlaneItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element /** \} */ /** \ru \name Общие функции кривой @@ -246,7 +246,7 @@ public : virtual void Explore( double & t, bool ext, MbCartPoint & pnt, MbVector & fir, MbVector * sec, MbVector * thir ) const; - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual double Step( double t, double sag ) const; // \ru Вычисление шага аппроксимации с учетом радиуса кривизны \en Calculation of approximation step with consideration of curvature radius virtual double DeviationStep( double t, double angle ) const; // \ru Вычисление шага аппроксимации по угловой толерантности \en Calculation of approximation step by angular tolerance virtual void IntersectHorizontal( double y, SArray & ) const; // \ru Пересечение кривой с горизонтальной прямой \en Intersection of a curve with a horizontal line @@ -254,7 +254,7 @@ public : virtual double PointProjection( const MbCartPoint & pnt ) const; // \ru Проекция точки на кривую \en Point projection on the curve virtual bool NearPointProjection( const MbCartPoint & pnt, double xEpsilon, double yEpsilon, - double & t, bool ext, MbRect1D * tRange = NULL ) const; // \ru Проекция точки на кривую или её продолжение в области поиска проекции \en Point projection on the curve or its extension in the projection search area + double & t, bool ext, MbRect1D * tRange = c3d_null ) const; // \ru Проекция точки на кривую или её продолжение в области поиска проекции \en Point projection on the curve or its extension in the projection search area virtual double CalculateMetricLength() const; // \ru Посчитать метрическую длину разомкнутой \en Calculate the open metric length virtual bool GetWeightCentre( MbCartPoint & wc ) const; // \ru Посчитать центр тяжести кривой \en Calculate the gravity center of the curve virtual void CalculateGabarit( MbRect & r ) const; // \ru Определить габариты \en Calculate bounding box @@ -305,7 +305,10 @@ public : const MbHermit & init, double t1, double w1, double koef, bool checkClosed ) const; size_t GetVectorListCount() const { return vectorList.Count(); } - void GetVectorList( SArray & vectors ) const { vectors = vectorList; } + + template + void GetVectorList( VectorsVector & vectors ) const { vectors.assign( vectorList.begin(), vectorList.end() ); } + const MbVector & _GetVectorList( size_t i ) const { return vectorList[i]; } MbVector & _SetVectorList( size_t i ) { MbPolyCurve::Refresh(); return vectorList[i]; } diff --git a/C3d/Include/cur_hermit3d.h b/C3d/Include/cur_hermit3d.h index 9a53d3f..cf7a5c5 100644 --- a/C3d/Include/cur_hermit3d.h +++ b/C3d/Include/cur_hermit3d.h @@ -211,12 +211,12 @@ public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeSpaceType IsA() const; // \ru Тип элемента \en Type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать \en Transform. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Поворот \en Rotation + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать \en Transform. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Поворот \en Rotation virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта \en Set properties of the object @@ -236,7 +236,7 @@ public : virtual void Explore( double & t, bool ext, MbCartPoint3D & pnt, MbVector3D & fir, MbVector3D * sec, MbVector3D * thir ) const; - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual double Step ( double t, double sag ) const; // \ru Вычисление шага аппроксимации \en Calculation of approximation step virtual double DeviationStep( double t, double angle ) const; @@ -246,12 +246,12 @@ public : virtual MbCurve3D * Trimmed( double t1, double t2, int sense ) const; // \ru Создание усеченной кривой \en Creation of a trimmed curve virtual MbCurve3D * TrimmBreak( double t1, double t2, int sense ) const; // \ru Создание усеченной кривой \en Creation of a trimmed curve - virtual bool IsPlanar () const; // \ru Является ли кривая плоской \en Whether a curve is planar. + virtual bool IsPlanar ( double accuracy = METRIC_EPSILON ) const; // \ru Является ли кривая плоской \en Whether a curve is planar. virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Признак прямолинейности кривой \en An attribute of curve straightness - virtual bool GetPlacement( MbPlacement3D & place, VERSION version = Math::DefaultMathVersion() ) const; // \ru Заполнить плейсемент, ести кривая плоская \en Fill the placement if curve is planar + virtual bool GetPlacement( MbPlacement3D & place, PlanarCheckParams params = PlanarCheckParams() ) const; // \ru Заполнить плейсемент, ести кривая плоская \en Fill the placement if curve is planar // \ru Дать плоскую кривую и плейсмент, если пространственная кривая плоская (после использования вызывать DeleteItem на двумерную кривую) \en Give a planar curve and placement, if the spatial curve is planar (after using the DeleteItem must be called for a two-dimensional curve) - virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, PlanarCheckParams params = PlanarCheckParams() ) const; /// \ru Получить границы участков кривой, которые описываются одной аналитической функцией. /// \en Get the boundaries of the curve sections that are described by one analytical function. \~ @@ -276,7 +276,7 @@ public : virtual bool CheckParam ( double & t, ptrdiff_t & i0, ptrdiff_t & i1, double & t0, double & t1 ) const; // \ru Загнать параметр получить локальный индексы и параметры \en Move parameter into domain, get local indices and parameters virtual double GetParam( ptrdiff_t i ) const; // \ru Выдать параметр для точки с номером \en Get parameter for point with index - virtual bool NearPointProjection ( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = NULL ) const; // \ru Ближайшая проекция точки на кривую \en The nearest point projection to the curve + virtual bool NearPointProjection ( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = c3d_null ) const; // \ru Ближайшая проекция точки на кривую \en The nearest point projection to the curve virtual double CalculateMetricLength() const; // \ru Посчитать метрическую длину \en Calculate the metric length virtual void GetWeightCentre( MbCartPoint3D &wc ) const; // \ru Посчитать центр тяжести кривой \en Calculate the gravity center of the curve virtual void CalculateGabarit( MbCube & gab ) const; // \ru Вычислить габарит кривой \en Calculate the bounding box of curve @@ -284,8 +284,8 @@ public : VERSION version = Math::DefaultMathVersion() ) const; // \ru Сдвинуть параметр t на расстояние len по направлению \en Shift the parameter t by the distance 'len' in the direction // \ru Функции только 3D кривой \en Function for 3D-curve - virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = NULL, - VERSION version = Math::DefaultMathVersion(), bool * coincParams = NULL ) const; // \ru Дать плоскую проекцию кривой \en Get a planar projection of curve + virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = c3d_null, + VERSION version = Math::DefaultMathVersion(), bool * coincParams = c3d_null ) const; // \ru Дать плоскую проекцию кривой \en Get a planar projection of curve virtual size_t GetCount() const; // \ru Установить область изменения параметра. \en Set range of parameter. @@ -294,7 +294,10 @@ public : void SetLimitVector( ptrdiff_t n, const MbVector3D & v ); size_t GetVectorListCount() const { return vectorList.size(); } - void GetVectorList( SArray & vectors ) const { vectors = vectorList; } + + template + void GetVectorList( VectorsVector & vectors ) const { vectors.assign( vectorList.begin(), vectorList.end() ); } + const MbVector3D & _GetVectorList( size_t i ) const { return vectorList[i]; } MbVector3D & _SetVectorList( size_t i ) { MbPolyCurve3D::Refresh(); return vectorList[i]; } diff --git a/C3d/Include/cur_line.h b/C3d/Include/cur_line.h index 86b5356..b7e086b 100644 --- a/C3d/Include/cur_line.h +++ b/C3d/Include/cur_line.h @@ -71,11 +71,11 @@ public : virtual bool IsSimilar( const MbPlaneItem & ) const; // \ru Являются ли элементы подобными \en Whether the elements are similar virtual bool SetEqual ( const MbPlaneItem & ); // \ru Сделать элементы равными \en Make equal elements virtual bool IsSame ( const MbPlaneItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли кривая curve копией данной кривой ? \en Whether the 'curve' curve is duplicate of current curve. - virtual void Transform( const MbMatrix &, MbRegTransform * ireg = NULL, const MbSurface * newSurface = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector &, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Поворот \en Rotation + virtual void Transform( const MbMatrix &, MbRegTransform * ireg = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector &, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Поворот \en Rotation - virtual MbPlaneItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbPlaneItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual void AddYourGabaritTo ( MbRect & ) const; // \ru Добавь свой габарит в прямой прям-к \en Add bounding box into a straight box virtual void AddYourGabaritMtr( MbRect &, const MbMatrix & ) const; // \ru Добавь в прям-к свой габарит с учетом матрицы \en Add bounding rectangle into a box with consideration of the matrix @@ -149,7 +149,7 @@ public : // \ru Вычисление минимальной длины кривой между двумя точками на ней \en Calculation of minimal length of a curve between two points on it virtual double LengthBetween2Points( MbCartPoint & p1, MbCartPoint & p2, - MbCartPoint * pc = NULL ) const; + MbCartPoint * pc = c3d_null ) const; virtual bool DistanceAlong( double & t, double len, int curveDir, double eps = Math::LengthEps, VERSION version = Math::DefaultMathVersion() ) const; // \ru Сдвинуть параметр t на расстояние len по направлению \en Shift the parameter t by the distance 'len' in the direction @@ -166,7 +166,7 @@ public : virtual MbeItemLocation PointRelative ( const MbCartPoint & p, double eps = Math::LengthEps ) const; virtual double PointProjection ( const MbCartPoint & ) const; // \ru Проекция точки на кривую \en Point projection on the curve virtual bool NearPointProjection( const MbCartPoint & pnt, double xEpsilon, double yEpsilon, - double & t, bool ext, MbRect1D * tRange = NULL ) const; // \ru Проекция точки на кривую или её продолжение в области поиска проекции \en Point projection on the curve or its extension in the projection search area + double & t, bool ext, MbRect1D * tRange = c3d_null ) const; // \ru Проекция точки на кривую или её продолжение в области поиска проекции \en Point projection on the curve or its extension in the projection search area // \ru Вычисление всех перпендикуляров к кривой из данной точки \en Calculation of all perpendiculars to the curve from a given point virtual void PerpendicularPoint( const MbCartPoint & pnt, SArray & tFind ) const; @@ -186,7 +186,7 @@ public : virtual void IntersectHorizontal( double y, SArray & cross ) const; // \ru Пересечение с горизонтальной прямой \en Intersection with the horizontal line virtual void IntersectVertical ( double x, SArray & cross ) const; // \ru Пересечение с вертикальной прямой \en Intersection with the vertical line - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменение направления кривой на противоположное \en Change to the opposite direction of a curve + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменение направления кривой на противоположное \en Change to the opposite direction of a curve virtual bool IsClosed() const; // \ru Проверка замкнутости \en Check for closedness virtual bool IsBounded() const; // \ru Определить, является ли кривая ограниченной. \en Define whether the curve is bounded. virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Признак прямолинейности кривой \en An attribute of curve straightness @@ -308,6 +308,11 @@ inline bool LineLineCrossParams( const MbCartPoint & origin1, const MbVector & d return true; } + if ( origin1.IsSame(origin2, EPSILON) ) { // KOMPAS-41917 + t1 = 0.0; + t2 = 0.0; + return true; + } // \ru Для параллельных прямых определяем параметры точки по середине между origin1 и origin2. \en Definition the parameters for the middle point between origin 1 and origin 2 for parallel lines. MbCartPoint middle; middle.Set( origin1, 0.5, origin2, 0.5 ); diff --git a/C3d/Include/cur_line3d.h b/C3d/Include/cur_line3d.h index d6e8904..6f0b635 100644 --- a/C3d/Include/cur_line3d.h +++ b/C3d/Include/cur_line3d.h @@ -56,12 +56,12 @@ public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeSpaceType IsA() const; // \ru Тип элемента \en Type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать \en Transform - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать \en Transform + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual double DistanceToPoint( const MbCartPoint3D & ) const; // \ru Расстояние до точки \en Distance to a point virtual void AddYourGabaritTo( MbCube & ) const; // \ru Добавить габарит кривой в куб. \en Add a bounding box of a curve to a cube. @@ -98,7 +98,7 @@ public : virtual bool DistanceAlong( double & t, double len, int curveDir, double eps = Math::metricPrecision, VERSION version = Math::DefaultMathVersion() ) const; - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual double GetMetricLength() const; // \ru Метрическая длина кривой \en Metric length of a curve virtual double Step ( double t, double sag ) const; // \ru Вычисление шага по стрелке прогиба. \en Calculation of parameter step by the sag. virtual double DeviationStep( double t, double angle ) const; // \ru Вычисление шага по углу отклонения нормали. \en Calculation of parameter step by the deviation angle. @@ -110,7 +110,7 @@ public : virtual void CalculateLocalGabarit( const MbMatrix3D & into, MbCube & ) const; // \ru Ближайшая проекция точки на кривую \en The nearest point projection to the curve - virtual bool NearPointProjection( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = NULL ) const; + virtual bool NearPointProjection( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = c3d_null ) const; bool operator == ( const MbLine3D & with ) const; // \ru Проверка на равенство \en Check for equality bool operator != ( const MbLine3D & with ) const; // \ru Проверка на неравенство \en Check for inequality @@ -118,16 +118,16 @@ public : virtual void GetCentre ( MbCartPoint3D & c ) const; // \ru Выдать центр кривой \en Get the center of curve virtual void GetWeightCentre( MbCartPoint3D & wc ) const; // \ru Выдать центр тяжести кривой \en Get the center of gravity of the curve virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Является ли линия прямолинейной \en Whether the line is straight - virtual bool IsPlanar () const; // \ru Является ли кривая плоской \en Whether a curve is planar + virtual bool IsPlanar ( double accuracy = METRIC_EPSILON ) const; // \ru Является ли кривая плоской \en Whether a curve is planar virtual double GetParamToUnit() const; // \ru Дать приращение параметра, осреднённо соответствующее единичной длине в пространстве \en Get increment of parameter, corresponding to the unit length in space virtual double GetParamToUnit( double t ) const; // \ru Дать приращение параметра, соответствующее единичной длине в пространстве \en Get increment of parameter, corresponding to the unit length in space // \ru Дать плоскую проекцию кривой \en Get a planar projection of curve - virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = NULL, - VERSION version = Math::DefaultMathVersion(), bool * coincParams = NULL ) const; + virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = c3d_null, + VERSION version = Math::DefaultMathVersion(), bool * coincParams = c3d_null ) const; virtual MbCurve * GetMapPsp( const MbMatrix3D &, double zNear, - MbRect1D * pRgn = NULL ) const; + MbRect1D * pRgn = c3d_null ) const; virtual void CalculatePolygon( const MbStepData & stepData, MbPolygon3D & ) const; // \ru pассчитать полигон \en Calculate a polygon virtual bool IsSimilarToCurve( const MbCurve3D & curve, double precision = METRIC_PRECISION ) const; // \ru Подобные ли кривые для объединения (слива) \en Whether the curves for union (joining) are similar diff --git a/C3d/Include/cur_line_segment.h b/C3d/Include/cur_line_segment.h index f27ab7d..4d67a2d 100644 --- a/C3d/Include/cur_line_segment.h +++ b/C3d/Include/cur_line_segment.h @@ -68,10 +68,10 @@ public : void Init1( const MbCartPoint &p1, const MbCartPoint &p2, double &len, double &angle ); void Init2( const MbCartPoint &p1, MbCartPoint &p2, const double &len, double &angle ); void Init3( const MbCartPoint &p1, MbCartPoint &p2, double &len, const double &angle, - const DiskreteLengthData * diskrData = NULL ); + const DiskreteLengthData * diskrData = c3d_null ); void Init4( MbCartPoint &p1, const MbCartPoint &p2, const double &len, double &angle ); void Init5( MbCartPoint &p1, const MbCartPoint &p2, double &len, const double &angle, - const DiskreteLengthData * diskrData = NULL ); + const DiskreteLengthData * diskrData = c3d_null ); void Init6( const MbCartPoint &p1, MbCartPoint &p2, const double &len, const double &angle ); void Init7( MbCartPoint &p1, const MbCartPoint &p2, const double &len, const double &angle ); void Init8( MbCartPoint &p1, MbCartPoint &p2, double &len, double &angle, @@ -86,10 +86,10 @@ public : virtual MbePlaneType IsA() const; // \ru Тип элемента \en Type of element virtual bool IsSame ( const MbPlaneItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли кривая curve копией данной кривой ? \en Whether the 'curve' curve is duplicate of current curve. virtual bool SetEqual( const MbPlaneItem & ); // \ru Сделать элементы равными \en Make equal elements - virtual MbPlaneItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element - virtual void Transform( const MbMatrix &, MbRegTransform * ireg = NULL, const MbSurface * newSurface = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector &, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Поворот \en Rotation + virtual MbPlaneItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual void Transform( const MbMatrix &, MbRegTransform * ireg = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector &, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Поворот \en Rotation virtual void AddYourGabaritTo ( MbRect & ) const; // \ru Добавь свой габарит в прямой прям-к \en Add bounding box into a straight box virtual void CalculateGabarit ( MbRect & ) const; // \ru Определить габариты кривой \en Determine the bounding box of the curve virtual void CalculateLocalGabarit( const MbMatrix & into, MbRect & local ) const ; // \ru Добавь в прям-к свой габарит с учетом матрицы \en Add bounding box into a box with consideration of the matrix @@ -155,7 +155,7 @@ public : \en \name Common function of curve. \{ */ virtual double Curvature( double t ) const; // \ru Кривизна усеченной кривой \en Curvature of a trimmed curve - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление кривой \en Change direction of a curve + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление кривой \en Change direction of a curve virtual MbCurve * Offset( double rad ) const; // \ru Смещение отрезка \en Shift of a line segment virtual MbCurve * Trimmed( double t1, double t2, int sense ) const; @@ -179,7 +179,7 @@ public : virtual MbeItemLocation PointRelative( const MbCartPoint & pnt, double eps = Math::LengthEps ) const; virtual double PointProjection( const MbCartPoint & pnt ) const; // \ru Проекция точки на отрезок \en Point projection on the line segment virtual bool NearPointProjection( const MbCartPoint & pnt, double xEpsilon, double yEpsilon, - double & t, bool ext, MbRect1D * tRange = NULL ) const; // \ru Проекция точки на кривую или её продолжение в области поиска проекции \en Point projection on the curve or its extension in the projection search area + double & t, bool ext, MbRect1D * tRange = c3d_null ) const; // \ru Проекция точки на кривую или её продолжение в области поиска проекции \en Point projection on the curve or its extension in the projection search area virtual void PerpendicularPoint( const MbCartPoint & pnt, SArray & tFind ) const; // \ru Вычисление всех перпендикуляров к кривой из данной точки \en Calculation of all perpendiculars to the curve from a given point virtual void IntersectHorizontal( double y, SArray & cross ) const; // \ru Пересечение с горизонтальной прямой \en Intersection with the horizontal line virtual void IntersectVertical ( double x, SArray & cross ) const; // \ru Пересечение с вертикальной прямой \en Intersection with the vertical line @@ -188,7 +188,7 @@ public : virtual double GetMetricLength() const; // \ru Метрическая длина \en The metric length virtual double GetLengthEvaluation() const; // \ru Оценка метрической длины кривой \en Evaluation of the metric length of the curve // \ru Вычисление минимальной длины кривой между двумя точками на ней \en Calculation of minimal length of a curve between two points on it - virtual double LengthBetween2Points( MbCartPoint & p1, MbCartPoint & p2, MbCartPoint * pc = NULL ) const; + virtual double LengthBetween2Points( MbCartPoint & p1, MbCartPoint & p2, MbCartPoint * pc = c3d_null ) const; virtual bool DistanceAlong( double & t, double len, int curveDir, double eps = Math::LengthEps, VERSION version = Math::DefaultMathVersion() ) const; diff --git a/C3d/Include/cur_line_segment3d.h b/C3d/Include/cur_line_segment3d.h index 29532ea..2797dc0 100644 --- a/C3d/Include/cur_line_segment3d.h +++ b/C3d/Include/cur_line_segment3d.h @@ -64,12 +64,12 @@ public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeSpaceType IsA() const; // \ru Тип элемента \en Type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта \en Set properties of the object @@ -100,7 +100,7 @@ public : virtual MbCurve3D * NurbsCurve( const MbNurbsParameters & ) const; // \ru Построить Nurbs-копию кривой \en Construct NURBS copy of the curve virtual MbCurve3D * Trimmed( double t1, double t2, int sense ) const; - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual double CalculateMetricLength() const; // \ru Метрическая длина кривой \en Metric length of a curve virtual double GetLengthEvaluation() const; virtual double CalculateLength( double t1, double t2 ) const; @@ -111,19 +111,19 @@ public : virtual void GetCentre ( MbCartPoint3D & wc ) const; // \ru Посчитать центр кривой \en Calculate a center of curve virtual void GetWeightCentre( MbCartPoint3D & wc ) const; // \ru Посчитать центр тяжести кривой \en Calculate the gravity center of the curve virtual double Curvature( double t ) const; // \ru Кривизна усеченной кривой \en Curvature of a trimmed curve - virtual bool NearPointProjection ( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = NULL ) const; // \ru Ближайшая проекция точки на кривую \en The nearest point projection to the curve + virtual bool NearPointProjection ( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = c3d_null ) const; // \ru Ближайшая проекция точки на кривую \en The nearest point projection to the curve virtual double Step ( double t, double sag ) const; // \ru Вычисление шага по стрелке прогиба. \en Calculation of parameter step by the sag. virtual double DeviationStep( double t, double angle ) const; // \ru Вычисление шага по углу отклонения нормали. \en Calculation of parameter step by the deviation angle. virtual double MetricStep ( double t, double length ) const; // \ru Вычисление шага параметра по длине. \en Calculation of parameter step by the given length. - virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = NULL, - VERSION version = Math::DefaultMathVersion(), bool * coincParams = NULL ) const; // \ru Дать плоскую проекцию кривой. \en Get a planar projection of curve. - virtual MbCurve * GetMapPsp( const MbMatrix3D &, double zNear, MbRect1D * pRgn = NULL ) const; // \ru Дать перспективную плоскую проекцию кривой. \en Get a planar geometric projection of curve. + virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = c3d_null, + VERSION version = Math::DefaultMathVersion(), bool * coincParams = c3d_null ) const; // \ru Дать плоскую проекцию кривой. \en Get a planar projection of curve. + virtual MbCurve * GetMapPsp( const MbMatrix3D &, double zNear, MbRect1D * pRgn = c3d_null ) const; // \ru Дать перспективную плоскую проекцию кривой. \en Get a planar geometric projection of curve. virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Является ли линия прямолинейной \en Whether the line is straight virtual size_t GetCount () const; - virtual bool IsPlanar () const; // \ru Является ли кривая плоской \en Whether a curve is planar + virtual bool IsPlanar ( double accuracy = METRIC_EPSILON ) const; // \ru Является ли кривая плоской \en Whether a curve is planar virtual bool DistanceAlong( double & t, double len, int curveDir, double eps = Math::metricPrecision, VERSION version = Math::DefaultMathVersion() ) const; // \ru Сдвинуть параметр t на расстояние len по направлению \en Shift the parameter t by the distance 'len' in the direction virtual void CalculatePolygon( const MbStepData & stepData, MbPolygon3D & polygon ) const; // \ru Рассчитать полигон \en Calculate a polygon diff --git a/C3d/Include/cur_nurbs.h b/C3d/Include/cur_nurbs.h index e9786a2..524e4e8 100644 --- a/C3d/Include/cur_nurbs.h +++ b/C3d/Include/cur_nurbs.h @@ -399,7 +399,7 @@ public : uppIndex = (ptrdiff_t)initPoints.size() - 1; pointList.assign( initPoints.begin(), initPoints.end() ); - if ( initWeights != NULL ) { + if ( initWeights != c3d_null ) { if ( (ptrdiff_t)initWeights->size() == uppIndex + 1 ) weights.assign( initWeights->begin(), initWeights->end() ); else { @@ -477,6 +477,7 @@ public : */ bool Init( size_t degree, bool cls, const CcArray & points, const CcArray & knots, ptrdiff_t nPoints, ptrdiff_t nKnots ); + /** \brief \ru Инициализация. \en Initialization. \~ \details \ru Сплайн, проходящий через заданные точки при заданных параметрах.\n @@ -492,8 +493,29 @@ public : \param[in] params - \ru Последовательность узловых параметров. \en Sequence of knot parameters. \~ */ - bool InitThrough( size_t degree, bool cls, const SArray & points, - const SArray & params ); + bool InitThrough( size_t degree, + bool cls, + const SArray & points, + const SArray & params ); + /** \brief \ru Инициализация. + \en Initialization. \~ + \details \ru Сплайн, проходящий через заданные точки при заданных параметрах.\n + В случае замкнутости нужно передавать массив с совпадением первой и последней точек.\n + \en Spline passing through given points at given parameters.\n + In case of closedness it is necessary to pass the array with coincidence of the first and the last points.\n \~ + \param[in] degree - \ru Порядок сплайна. + \en A spline order. \~ + \param[in] cls - \ru Признак замкнутости. + \en A closedness attribute. \~ + \param[in] points - \ru Набор точек, через которые проходит сплайн. + \en Set of points which the spline passes through. \~ + \param[in] params - \ru Последовательность узловых параметров. + \en Sequence of knot parameters. \~ + */ + bool InitThrough( size_t degree, + bool cls, + const c3d::ParamPointsVector & points, + const c3d::DoubleVector & params ); /** \brief \ru Инициализация. \en Initialization. \~ @@ -535,16 +557,16 @@ public : /// \ru Создать кубический NURBS по точкам, через которые он проходит, и параметрам сопряжения. \en Create cubic NURBS by parameters of conjugation and points which it passes through. static MbNurbs * CreateNURBS4( const SArray &, MbeSplineParamType spType, - const MbPntMatingData & begData, - const MbPntMatingData & endData ); + const c3d::PntMatingData2D & begData, + const c3d::PntMatingData2D & endData ); /// \ru Создать кубический NURBS по интерполяционным точкам и данным сопряжения в каждой точке. \en Create cubic NURBS by interpolation points and data of conjugation at each point. static MbNurbs * CreateNURBS4( const SArray &, MbeSplineParamType spType, bool closed, - RPArray< MbPntMatingData > & ); + RPArray & ); /// \ru Создать кубический NURBS по интерполяционным точкам, их параметрам и данным сопряжения в каждой точке. \en Create cubic NURBS by interpolation points, parameters and data of conjugation at each point. static MbNurbs * CreateNURBS4( const SArray &, const SArray &, bool closed, - RPArray< MbPntMatingData > & ); + RPArray & ); /** \brief \ru Интерполяция. \en Interpolation. \~ \details \ru Создать плоский сплайн четвертого порядка по точкам, признаку замкнутости и типу параметризации.\n @@ -607,14 +629,42 @@ public : static MbNurbs * CreateNURBS4( const MbBezier & ); /// \ru Установить сопряжение на конце. \en Set conjugation at the end. - bool AttachG( MbPntMatingData & connectData, bool beg ); + bool AttachG( c3d::PntMatingData2D & connectData, bool beg ); - /// \ru Увеличить порядок кривой, не изменяя ее геометрическую форму и параметризацию. \en Increase order of curve without changing its geometric shape and parametrization. - bool RaiseDegree ( size_t, double relEps = Math::paramEpsilon ); - /// \ru Уменьшить порядок кривой на 1, не изменяя ее геометрическую форму и параметризацию. \en Decrease order of curve by 1 without changing its geometric shape and parametrization. + /** \brief \ru Увеличить порядок кривой, не изменяя ее геометрическую форму и параметризацию. + \en Increase order of curve without changing its geometric shape and parametrization. \~ + \details \ru Увеличить порядок кривой, не изменяя ее геометрическую форму и параметризацию. \n + \en Increase order of curve without changing its geometric shape and parametrization. \n \~ + \param[in] newDegree - \ru Новый порядок сплайна. + \en New order of spline. \~ + \param[in] relEps - \ru Допустимая погрешность изменения формы. + \en Permissible shape error. \~ + \return \ru Возвращает true, если порядок сплайна был изменен. + \en Returns true if the order of the spline was changed. \~ + */ + bool RaiseDegree( size_t newDegree, double relEps = Math::paramEpsilon ); + /** \brief \ru Уменьшить порядок кривой на 1, не изменяя ее геометрическую форму и параметризацию. + \en Decrease order of nurbs curve by 1 without changing its geometric shape and parametrization. \~ + \details \ru Уменьшить порядок кривой на 1, не изменяя ее геометрическую форму и параметризацию. \n + \en Decrease order of nurbs curve by 1 without changing its geometric shape and parametrization. \n \~ + \param[in] relEps - \ru Допустимая погрешность изменения формы. + \en Permissible shape error. \~ + \return \ru Возвращает true, если порядок сплайна был изменен. + \en Returns true if the order of the spline was changed. \~ + */ bool ReductionDegree( double relEps = Math::paramEpsilon ); - /// \ru Задать порядок сплайна. \en Set the spline order. - void SetDegree( size_t newDegree ); + /** \brief \ru Задать порядок сплайна. + \en Set the spline order. \~ + \details \ru Задать порядок сплайна. \n + При изменении порядка параметризация сплайна сбрасывается на равномерную, форма сплайна меняется. \n + \en Set the spline order. \n + When you change the order, the parameterization of the spline is reset to uniform, the shape of the spline changes. \n \~ + \param[in] newDegree - \ru Новый порядок сплайна. + \en A new spline order. \~ + \return \ru Возвращает true, если порядок сплайна был изменен. + \en Returns true if the order of the spline was changed. \~ + */ + bool SetDegree( size_t newDegree ); /// \ru Увеличить порядок на 1. \en Increase the order by 1. void DegreeIncrease(); /// \ru Установить тип формы. \en Set the type of shape. @@ -627,12 +677,12 @@ public : \en \name Common functions of geometric object. \{ */ virtual MbePlaneType IsA() const; // \ru Тип элемента. \en A type of element. - virtual MbPlaneItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbPlaneItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual bool IsSame( const MbPlaneItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли кривая other копией данной кривой? \en Whether the curve is duplicate of current curve. virtual bool SetEqual( const MbPlaneItem & ); // \ru Сделать элементы равными. \en Make elements equal. - virtual void Transform( const MbMatrix & matr, MbRegTransform * ireg = NULL, const MbSurface * newSurface = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move( const MbVector & to, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Сдвиг. \en Translation. - virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Поворот. \en Rotation. + virtual void Transform( const MbMatrix & matr, MbRegTransform * ireg = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move( const MbVector & to, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Сдвиг. \en Translation. + virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Поворот. \en Rotation. virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта. \en Set properties of the object. @@ -705,7 +755,7 @@ public : virtual MbCurve * Trimmed( double t1, double t2, int sense ) const; virtual void Refresh(); // \ru Сбросить все временные данные. \en Reset all temporary data. - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменение направления кривой на противоположное. \en Set the opposite direction of curve. + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменение направления кривой на противоположное. \en Set the opposite direction of curve. // \ru Определить, является ли кривая репараметризованно такой же. \en Define whether a reparameterized curve is the same. virtual bool IsReparamSame( const MbCurve & curve, double & factor ) const; @@ -766,9 +816,9 @@ public : virtual double PointProjection( const MbCartPoint & pnt ) const; // \ru Найти проекцию точки на кривую. \en Find the point projection to the curve. virtual bool NearPointProjection( const MbCartPoint & pnt, double xEpsilon, double yEpsilon, - double & t, bool ext, MbRect1D * tRange = NULL ) const; + double & t, bool ext, MbRect1D * tRange = c3d_null ) const; - virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = NULL, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? + virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = c3d_null, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? // \ru Устранить разрывы первых производных по длине. \en Eliminate the discontinuities of the first derivative at length. virtual bool SetContinuousDerivativeLength( VERSION version, double epsilon = EPSILON ); @@ -831,11 +881,11 @@ public : /// \ru Установить признак замкнутости. \en Set the closedness attribute. void LtSetClosed( bool cls ) { C3D_ASSERT_UNCONDITIONAL( false ); if ( form == ncf_Unspecified ) { closed = cls; } } /// \ru Изменить степень, замкнутость и тип формы. \en Change degree, closedness and type of shape. - void LtSetData( size_t d, bool c, MbeNurbsCurveForm f ); + void LtSetData( size_t d, bool c, MbeNurbsCurveForm f ); /// \ru Перестроить сплайн после накачки из библиотеки. \en Rebuild the spline. bool LtRebuild(); /// \ru Инициализация. \en Initialization. - void LtInit(); + void LtInit(); // \ru Преобразование кусочно степенной формы в NURBS-кривую. \en Convert a piecewise exponential form to a NURBS-curve. bool LtInitPowerArc(); bool LtTrimmed( double t1, double t2, int sense = 1 ); @@ -850,7 +900,7 @@ public : void SetWeight( ptrdiff_t pointNumber, double newWeight ); /// \ru Получить кратность узла. \en Get the knot multiplicity. - size_t KnotMultiplicity( ptrdiff_t knotIndex ) const; + size_t KnotMultiplicity( ptrdiff_t knotIndex ) const; /// \ru Определение базисного узлового вектора. \en Determination of basis knot vector. void DefineKnotsVector(); /// \ru Переопределение базисного узлового вектора из Close в Open. \en Redetermination of the basis knot vector from Close to Open. @@ -888,7 +938,7 @@ public : void AddCurves( NurbsCurves & curves ) { for ( size_t i = 0, icount = curves.size(); i < icount; ++i ) { - if ( curves[i] != NULL ) + if ( curves[i] != c3d_null ) AddCurve( *curves[i] ); } } @@ -907,7 +957,7 @@ public : /// \ru Расширить незамкнутую NURBS-кривую по касательным. \en Extend open NURBS-curve by tangents. bool ExtendNurbs( double, double, bool bmerge = false ); - /** \brief \ru Замкнуть кривую. + /** \brief \ru Замкнуть кривую. \en Make curve closed. \~ \details \ru Замкнуть фактически замкнутую кривую.\n То есть если первая и последняя точки кривой совпадают, но она реализована как незамкнутая, @@ -932,6 +982,27 @@ private: // \ru Системные методы. \en System methods. void CalculateSplineWeight( double & t, ptrdiff_t n, MbNurbsAuxiliaryData * cache ) const; bool InitSegments( MbNurbsAuxiliaryData * cache ) const; + /** \brief \ru Инициализация. + \en Initialization. \~ + \details \ru Сплайн, проходящий через заданные точки при заданных параметрах.\n + В случае замкнутости нужно передавать массив с совпадением первой и последней точек.\n + \en Spline passing through given points at given parameters.\n + In case of closedness it is necessary to pass the array with coincidence of the first and the last points.\n \~ + \param[in] degree - \ru Порядок сплайна. + \en A spline order. \~ + \param[in] cls - \ru Признак замкнутости. + \en A closedness attribute. \~ + \param[in] points - \ru Набор точек, через которые проходит сплайн. + \en Set of points which the spline passes through. \~ + \param[in] params - \ru Последовательность узловых параметров. + \en Sequence of knot parameters. \~ + */ + template + bool InitThroughTempl( size_t degree, + bool cls, + const PointsVector & points, + const ParamsVector & params ); + // \ru Служебные аналоги публичных функций, которые используют заданный кэш. \en Service analogs of public functions that use a given cache. void PointOn( double & t, MbCartPoint & pnt, MbNurbsAuxiliaryData * ucache ) const; // \ru Точка на кривой. \en Point on the curve. void FirstDer( double & t, MbVector & fd, MbNurbsAuxiliaryData * ucache ) const; // \ru Первая производная. \en First derivative. @@ -946,7 +1017,7 @@ private: // \ru Системные методы. \en System methods. // \ru Расчет весовых функций и их первых производных. \en Calculation of weight functions and its first derivatives. ptrdiff_t WeightFunctions( double & x, CcArray & ) const; // \ru Вычисление шага аппроксимации в обе стороны. \en Calculation of approximation step in both directions. - double StepD( double & t, double sag, bool checkAngle = false, double angle = 0.0, MbNurbsAuxiliaryData * cache = NULL ) const; + double StepD( double & t, double sag, bool checkAngle = false, double angle = 0.0, MbNurbsAuxiliaryData * cache = c3d_null ) const; // \ru Вычисление шага аппроксимации сплайна второго порядка. \en Calculation of approximation step of second order spline. double PolylineStep( double t, bool half, MbNurbsAuxiliaryData * cache ) const; // \ru Уточнить проекцию \en Specify projection. @@ -981,12 +1052,12 @@ MbNurbs::MbNurbs( size_t initDegree, bool initClosed, const PointsVector & initP closed = initClosed; degree = initDegree; // Степень В-сплайна. - if ( initWeights != NULL ) + if ( initWeights != c3d_null ) weights.assign( initWeights->begin(), initWeights->end() ); else weights.assign( initPoints.size(), 1.0 ); - if ( initKnots != NULL ) { + if ( initKnots != c3d_null ) { knots.assign( initKnots->begin(), initKnots->end() ); uppKnotsIndex = (ptrdiff_t)knots.size() - 1; } @@ -1019,15 +1090,13 @@ bool IsStraightNurbs( const Nurbs & nurbs, double mEps = METRIC_EPSILON ) bool isStraight = false; if ( !nurbs.IsClosed() ) { - SArray wts( 0, 1 ); - nurbs.GetWeights( wts ); - size_t wtsCnt = wts.size(); + size_t wtsCnt = nurbs.GetWeightsCount(); isStraight = true; if ( wtsCnt > 1 ) { - double wt0 = wts[0]; + double wt0 = nurbs.GetWeight(0); for ( size_t k = 1; k < wtsCnt; k++ ) { - double wt = wts[k]; + double wt = nurbs.GetWeight(k); if ( ::fabs(wt0 - wt) > EXTENT_EQUAL ) { isStraight = false; break; @@ -1036,8 +1105,8 @@ bool IsStraightNurbs( const Nurbs & nurbs, double mEps = METRIC_EPSILON ) } if ( isStraight ) { isStraight = false; - SArray pnts( 0, 1 ); - nurbs.GetPointList( pnts ); + std::vector pnts; + pnts.reserve( nurbs.GetPointsCount() ); if ( c3d::ArePointsOnLine( pnts, mEps ) ) isStraight = true; } diff --git a/C3d/Include/cur_nurbs3d.h b/C3d/Include/cur_nurbs3d.h index 442bec4..25925f0 100644 --- a/C3d/Include/cur_nurbs3d.h +++ b/C3d/Include/cur_nurbs3d.h @@ -127,7 +127,7 @@ protected: */ MbNurbs3D( size_t deg, bool cls, const SArray & points, - const SArray * weights = NULL, const SArray * knots = NULL ); + const SArray * weights = c3d_null, const SArray * knots = c3d_null ); MbNurbs3D( const MbNurbs3D & ); public : virtual ~MbNurbs3D(); @@ -171,7 +171,7 @@ public : \en Returns pointer to the created object or null pointer in case of failure. \~ */ static MbNurbs3D * Create( size_t degree, const SArray & points, bool closed, - const SArray * weights = NULL ); + const SArray * weights = c3d_null ); /** \brief \ru Создать сплайн. \en Create spline. \~ \details \ru Создать сплайн и установить параметры сплайна.\n @@ -238,7 +238,28 @@ public : \en Returns pointer to the created object or null pointer in case of failure. \~ */ static MbNurbs3D * CreateThrough( size_t degree, bool cls, const SArray & points, - const SArray & params, SArray * aKnots = NULL ); + const SArray & params, SArray * aKnots = c3d_null ); + /** \brief \ru Создать сплайн. + \en Create spline. \~ + \details \ru Сплайн, проходящий через заданные точки при заданных параметрах.\n + В случае замкнутости нужно передавать массив с совпадением первой и последней точек.\n + \en Spline passing through the given points at the given parameters.\n + In case of closedness it is necessary to pass the array with coincidence of the first and the last points.\n \~ + \param[in] degree - \ru Порядок сплайна. + \en A spline order. \~ + \param[in] cls - \ru Признак замкнутости. + \en Closedness attribute. \~ + \param[in] points - \ru Набор точек, через которые проходит сплайн. + \en Set of points which the spline passes through. \~ + \param[in] params - \ru Последовательность узловых параметров. + \en Sequence of knot parameters. \~ + \param[in] aKnots - \ru Неубывающая последовательность узлов. + \en Nondecreasing sequence of knots. \~ + \return \ru Возвращает указатель на созданный объект или нулевой указатель в случае неудачи. + \en Returns pointer to the created object or null pointer in case of failure. \~ + */ + static MbNurbs3D * CreateThrough( size_t degree, bool cls, const c3d::SpacePointsVector & points, + const c3d::DoubleVector & params, c3d::DoubleVector * aKnots = c3d_null ); /** \brief \ru Заполнить NURBS по данным parasolid. \en Fill NURBS by parasolid data. \~ \details \ru Заполнить NURBS по данным parasolid.\n @@ -294,7 +315,7 @@ public: \en Closedness attribute. \~ */ bool Init( size_t degree, const SArray & points, bool closed, - const SArray * weights = NULL ); + const SArray * weights = c3d_null ); /** \brief \ru Инициализация. \en Initialization. \~ \details \ru Установить параметры сплайна.\n @@ -386,9 +407,11 @@ public: \param[in] endData - \ru Параметр сопряжения в конечной точке сплайна. \en Parameter of conjugation at the end point of the spline. \~ */ - bool Init( size_t degree, const SArray & points, const SArray & weights, - MbPntMatingData & begData, - MbPntMatingData & endData ); + bool Init( size_t degree, + const SArray & points, + const SArray & weights, + c3d::PntMatingData3D & begData, + c3d::PntMatingData3D & endData ); /** \brief \ru Инициализация. \en Initialization. \~ \details \ru Установить параметры сплайна.\n @@ -422,29 +445,55 @@ public: \en Set of points which the spline passes through. \~ \param[in] params - \ru Последовательность узловых параметров. \en Sequence of knot parameters. \~ - \param[in] aKnots - \ru Неубывающая последовательность узлов. + \param[in] knots - \ru Неубывающая последовательность узлов. \en Nondecreasing sequence of knots. \~ */ - bool InitThrough( size_t degree, bool cls, const SArray & points, - const SArray & params, SArray * aKnots = NULL ); + bool InitThrough( size_t degree, + bool cls, + const SArray & points, + const SArray & params, + SArray * aKnots = c3d_null ); + /** \brief \ru Инициализация. + \en Initialization. \~ + \details \ru Сплайн, проходящий через заданные точки при заданных параметрах.\n + В случае замкнутости нужно передавать массив с совпадением первой и последней точек.\n + \en Spline passing through the given points at the given parameters.\n + In case of closedness it is necessary to pass the array with coincidence of the first and the last points.\n \~ + \param[in] degree - \ru Порядок сплайна. + \en A spline order. \~ + \param[in] cls - \ru Признак замкнутости. + \en Closedness attribute. \~ + \param[in] points - \ru Набор точек, через которые проходит сплайн. + \en Set of points which the spline passes through. \~ + \param[in] params - \ru Последовательность узловых параметров. + \en Sequence of knot parameters. \~ + \param[in] knots - \ru Неубывающая последовательность узлов. + \en Nondecreasing sequence of knots. \~ + */ + bool InitThrough( size_t degree, + bool cls, + const c3d::SpacePointsVector & points, + const c3d::DoubleVector & params, + c3d::DoubleVector * knots = c3d_null ); + /// \ru Установить тип формы. \en Set the type of shape. void SetFormType( MbeNurbsCurveForm f ) { form = f; } // \ru Общие функции математического объекта. \en The common functions of the mathematical object. virtual MbeSpaceType IsA() const; // \ru Тип элемента. \en A type of element. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const ; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const ; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли кривая копией данной кривой? \en Whether the curve is a duplicate of the current curve. virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным. \en Make equal. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг. \en Move. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг. \en Move. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта. \en Set properties of the object. virtual void GetBasisPoints( MbControlData3D & ) const; // \ru Выдать контрольные точки объекта. \en Get control points of object. virtual void SetBasisPoints( const MbControlData3D & ); // \ru Изменить объект по контрольным точкам. \en Change the object by control points. - void GetControlPoints( SArray & s ) const; // \ru Выдать контрольные точки объекта. \en Get control points of object. + void GetControlPoints( SArray & ) const; // \ru Выдать контрольные точки объекта. \en Get control points of object. // \ru Общие функции кривой. \en Common functions of curve. @@ -475,12 +524,12 @@ public: virtual double GetRadius() const; // \ru Дать физический радиус объекта или ноль, если это невозможно. \en Get the physical radius of the object or null if it impossible. virtual bool GetCircleAxis ( MbAxis3D & ) const; // \ru Дать ось кривой \en Get the axis of the curve // \ru Дать плоскую кривую и плейсмент, если пространственная кривая плоская (после использования вызывать DeleteItem на двумерную кривую). \en Get a planar curve and placement, if the spatial curve is planar (after using the DeleteItem must be called for a two-dimensional curve) - virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, PlanarCheckParams params = PlanarCheckParams() ) const; // \ru Ближайшая проекция точки на кривую. \en The nearest projection of a point onto the curve. - virtual bool NearPointProjection( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = NULL ) const; + virtual bool NearPointProjection( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = c3d_null ) const; virtual void Refresh(); // \ru Сбросить все временные данные. \en Reset all temporary data. - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление. \en Change the direction. + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление. \en Change the direction. // \ru Определить, является ли кривая репараметризованно такой же. \en Determine whether a reparameterized curve is the same. virtual bool IsReparamSame( const MbCurve3D & curve, double & factor ) const; @@ -521,7 +570,7 @@ public: virtual double GetParam( ptrdiff_t i ) const; // \ru Выдать параметр для точки с заданным номером. \en Get parameter for a point with the given index. virtual void ResetTCalc() const; // \ru Сбросить текущее значение параметра \en Reset the current value of the parameter - virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = NULL, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? + virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = c3d_null, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? // \ru Устранить разрывы первых производных по длине. \en Eliminate the discontinuities of the first derivative at length. virtual bool SetContinuousDerivativeLength( VERSION version, double epsilon = EPSILON ); @@ -550,9 +599,27 @@ public: /// \ru Преобразовать данный NURBS в форму кривой Безье. \en Transform current NURBS into Bezier curve. bool DecomposeCurve(); - /// \ru Увеличить порядок NURBS-кривой, не меняя ее геометрическую форму и парамеризацию. \en Increase the order of a NURBS-curve without changing its geometric shape and parameterization. - bool RaiseDegree ( size_t, double relEps = Math::paramEpsilon ); - /// \ru Уменьшить порядок кривой на 1. \en Decrease the order of a curve by 1. + /** \brief \ru Увеличить порядок кривой, не изменяя ее геометрическую форму и параметризацию. + \en Increase order of curve without changing its geometric shape and parametrization. \~ + \details \ru Увеличить порядок кривой, не изменяя ее геометрическую форму и параметризацию. \n + \en Increase order of curve without changing its geometric shape and parametrization. \n \~ + \param[in] newDegree - \ru Новый порядок сплайна. + \en New order of spline. \~ + \param[in] relEps - \ru Допустимая погрешность изменения формы. + \en Permissible shape error. \~ + \return \ru Возвращает true, если порядок сплайна был изменен. + \en Returns true if the order of the spline was changed. \~ + */ + bool RaiseDegree( size_t newDegree, double relEps = Math::paramEpsilon ); + /** \brief \ru Уменьшить порядок кривой на 1, не изменяя ее геометрическую форму и параметризацию. + \en Decrease order of nurbs curve by 1 without changing its geometric shape and parametrization. \~ + \details \ru Уменьшить порядок кривой на 1, не изменяя ее геометрическую форму и параметризацию. \n + \en Decrease order of nurbs curve by 1 without changing its geometric shape and parametrization. \n \~ + \param[in] relEps - \ru Допустимая погрешность изменения формы. + \en Permissible shape error. \~ + \return \ru Возвращает true, если порядок сплайна был изменен. + \en Returns true if the order of the spline was changed. \~ + */ bool ReductionDegree( double relEps = Math::paramEpsilon ); /// \ru Получить кратность узла с заданным номером. \en Get multiplicity of a knot with a given index. @@ -605,28 +672,30 @@ public: // \ru Функции только 3D кривой. \en Functions of 3D curve only. - virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = NULL, - VERSION version = Math::DefaultMathVersion(), bool * coincParams = NULL ) const; // \ru Дать плоскую проекцию кривой. \en Get a planar projection of a curve. + virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = c3d_null, + VERSION version = Math::DefaultMathVersion(), bool * coincParams = c3d_null ) const; // \ru Дать плоскую проекцию кривой. \en Get a planar projection of a curve. virtual size_t GetCount() const; // \ru Количество разбиений для прохода в операциях с поверхностями. \en Count of subdivisions for pass in operations with surfaces. /// \ru Установить сопряжение на конце. \en Set conjugation at the end. - bool AttachG( MbPntMatingData & connectData, bool beg, bool isWrongAttachG1_K12 = false ); + bool AttachG( c3d::PntMatingData3D & connectData, bool beg, bool isWrongAttachG1_K12 = false ); /// \ru Создать кубический NURBS по точкам, через которые он проходит, и параметрам сопряжения. \en Create cubic NURBS by parameters of conjugation and points which it passes through. - static MbNurbs3D * CreateNURBS4( const SArray &, MbeSplineParamType spType, - const MbPntMatingData & begData, - const MbPntMatingData & endData, - MbeSplineCreateType useInitThrough ); + static MbNurbs3D * CreateNURBS4( const SArray & points, + MbeSplineParamType spType, + const c3d::PntMatingData3D & begData, + const c3d::PntMatingData3D & endData, + MbeSplineCreateType useInitThrough ); /// \ru Создать кубический NURBS по интерполяционным точкам и данным сопряжения в каждой точке. \en Create cubic NURBS by interpolation points and data of conjugation at each point. - static MbNurbs3D * CreateNURBS4( const SArray &, MbeSplineParamType spType, - bool closed, - RPArray< MbPntMatingData > &, - MbeSplineCreateType useInitThrough ); + static MbNurbs3D * CreateNURBS4( const SArray & points, + MbeSplineParamType spType, + bool closed, + RPArray & matingData, + MbeSplineCreateType useInitThrough ); /// \ru Создать кубический NURBS по интерполяционным точкам, их параметрам и данным сопряжения в каждой точке. \en Create cubic NURBS by interpolation points, parameters and data of conjugation at each point. static MbNurbs3D * CreateNURBS4( const SArray &, const SArray &, bool closed, - RPArray< MbPntMatingData > &, + RPArray &, MbeSplineCreateType useInitThrough ); /// \ru Создать кубический NURBS по точкам, через которые он проходит, и признаку замкнутости. \en Create a cubic NURBS by the attribute of closedness and points which it passes through. static MbNurbs3D * CreateNURBS4( const SArray &, bool cls, MbeSplineParamType spType, @@ -690,9 +759,11 @@ public: \details \ru Создать сплайн произвольного порядка через точки, с управлением касательными и кривизной в этих точках. \en Create a spline of any order containing the given points with managing of tangent and curvature at these points.\~ */ - static MbNurbs3D * CreateNURBS( size_t initDegree, const SArray & initPoints, - const SArray & initParams, bool initClosed, - RPArray> & matingData ); + static MbNurbs3D * CreateNURBS( size_t initDegree, + const SArray & initPoints, + const SArray & initParams, + bool initClosed, + RPArray & matingData ); /** \brief \ru Разбить кривую. \en Split the curve. \~ \details \ru Разбить недифференцируемую NURBS-кривую четвертой степени в трижды кратном внутреннем узле.\n @@ -745,41 +816,68 @@ private: MbNurbs3D * NurbsPlus( double tin, double tax ) const; + /** \brief \ru Инициализация. + \en Initialization. \~ + \details \ru Сплайн, проходящий через заданные точки при заданных параметрах.\n + В случае замкнутости нужно передавать массив с совпадением первой и последней точек.\n + \en Spline passing through the given points at the given parameters.\n + In case of closedness it is necessary to pass the array with coincidence of the first and the last points.\n \~ + \param[in] degree - \ru Порядок сплайна. + \en A spline order. \~ + \param[in] cls - \ru Признак замкнутости. + \en Closedness attribute. \~ + \param[in] points - \ru Набор точек, через которые проходит сплайн. + \en Set of points which the spline passes through. \~ + \param[in] params - \ru Последовательность узловых параметров. + \en Sequence of knot parameters. \~ + \param[in] knots - \ru Неубывающая последовательность узлов. + \en Nondecreasing sequence of knots. \~ + */ + template + bool InitThroughTempl( size_t degree, + bool cls, + const PointsVector & points, + const ParamsVector & params, + ParamsVector * knots ); + // \ru BEG: Внутренние функции CreateNURBS4 по двум сопряжениям. \en BEG: Internal CreateNURBS4 functions by two conjugations. // \ru Создать интерполяционный кубический NURBS, удовлетворяющий условиям сопряжения по касательным. \en Create an interpolation cubic NURBS meeting conditions of conjugation by tangents. - bool AttachG1_NURBS4( const SArray &, const SArray & params, - const MbPntMatingData & begData, - const MbPntMatingData & endData ); + bool AttachG1_NURBS4( const SArray & points, + const SArray & params, + const c3d::PntMatingData3D & begData, + const c3d::PntMatingData3D & endData ); // \ru Создать интерполяционный кубический NURBS, удовлетворяющий условиям сопряжения со вторым порядком гладкости. \en Create an interpolation cubic NURBS meeting conditions of conjugation with the second order of smoothness. - bool AttachG2_NURBS4( const SArray &, const SArray & params, - const MbPntMatingData & begData, - const MbPntMatingData & endData ); + bool AttachG2_NURBS4( const SArray & points, + const SArray & params, + const c3d::PntMatingData3D & begData, + const c3d::PntMatingData3D & endData ); // \ru END: Внутренние функции CreateNURBS4 по двум сопряжениям. \en END: Internal CreateNURBS4 functions by two conjugations. // \ru BEG: Внутренние функции CreateNURBS4 по массиву сопряжений. \en BEG: Internal CreateNURBS4 functions by an array of conjugations. // \ru Построение интерполяционного NURBS4 с возможными заданными управляющими параметрами. \en Create an interpolation NURBS4 with possibly given driving parameters. - bool CreateC2_NURBS4( const SArray &, MbeSplineParamType spType, - RPArray< MbPntMatingData > &, - const SArray &, - MbeSplineCreateType useInitThrough, - bool cls = false ); + bool CreateC2_NURBS4( const SArray & points, + MbeSplineParamType spType, + RPArray & inferredData, + const SArray & params, + MbeSplineCreateType useInitThrough, + bool cls = false ); // \ru Построение интерполяционного незамкнутого NURBS4 в общем случае \en Create an interpolation open NURBS4 in general case // \ru С возможными заданными управляющими параметрами в средних точках. \en With possibly given driving parameters at middle points. // \ru Считаем, что данные для сопряжений заданы корректно. Этот факт проверяется до запуска функции. \en Consider that the given data for conjugations is correct. This fact is checked before calling the function. - static MbNurbs3D * CreateC2Nurbs4Common( const SArray & arPoints, - RPArray< MbPntMatingData > & inferredData, - const SArray & arParams, - const SArray & arKnots, - size_t addCount, - bool cls, - MbeSplineCreateType useInitThrough, - size_t deg = 4 ); + static MbNurbs3D * CreateC2Nurbs4Common( const SArray & points, + RPArray & inferredData, + const SArray & params, + const SArray & knots, + size_t addCount, + bool cls, + MbeSplineCreateType useInitThrough, + size_t deg = 4 ); // \ru END: Внутренние функции CreateNURBS4 по массиву сопряжений. \en END: Internal CreateNURBS4 functions by an array of conjugations. // \ru Расчет весовых функций и их первых производных. \en Calculation of weight functions and their first derivatives. ptrdiff_t WeightFunctions ( double & x, CcArray & m ) const; /// \ru Вычисление шага аппроксимации. \en Calculation of a step of approximation. - double StepD( double t, double sag, bool checkAngle, double angle = Math::lowRenderAng, MbNurbs3DAuxiliaryData * cache = NULL ) const; + double StepD( double t, double sag, bool checkAngle, double angle = Math::lowRenderAng, MbNurbs3DAuxiliaryData * cache = c3d_null ) const; // \ru Вычисление шага аппроксимации сплайна второго порядка. \en Calculation of approximation step of second order spline. double PolylineStep( double t, bool half, MbNurbs3DAuxiliaryData * cache ) const; // \ru Уточнить проекцию \en Specify projection. diff --git a/C3d/Include/cur_nurbs_vector.h b/C3d/Include/cur_nurbs_vector.h index 2832663..fb15fd8 100644 --- a/C3d/Include/cur_nurbs_vector.h +++ b/C3d/Include/cur_nurbs_vector.h @@ -29,7 +29,7 @@ public: double * w; public: - MbNURBSVector2D() : x( NULL ), y( NULL ), w( NULL ) {} + MbNURBSVector2D() : x( c3d_null ), y( c3d_null ), w( c3d_null ) {} ~MbNURBSVector2D(); // \ru освободить память \en free memory public: @@ -51,7 +51,7 @@ private: // // --- inline void MbNURBSVector2D::Init( ptrdiff_t i, const MbCartPoint &ip, double iw ) { - if ( w != NULL ) { + if ( w != c3d_null ) { x[i] = ( ip.x * iw ); y[i] = ( ip.y * iw ); w[i] = iw; @@ -69,7 +69,7 @@ inline void MbNURBSVector2D::Init( ptrdiff_t i, const MbCartPoint &ip, double iw inline void MbNURBSVector2D::SetZero( ptrdiff_t i ) { x[i] = 0.0; y[i] = 0.0; - if ( w != NULL ) + if ( w != c3d_null ) w[i] = 0.0; } @@ -80,7 +80,7 @@ inline void MbNURBSVector2D::SetZero( ptrdiff_t i ) { inline void MbNURBSVector2D::Set( ptrdiff_t i, const MbNURBSVector2D &p, ptrdiff_t ip ) { x[i] = p.x[ip]; y[i] = p.y[ip]; - if ( w != NULL ) + if ( w != c3d_null ) w[i] = p.w[ip]; } @@ -95,7 +95,7 @@ inline void MbNURBSVector2D::Dec( ptrdiff_t i, { x[i] = ( (p2.x[ip2] - p1.x[ip1]) * kk ); y[i] = ( (p2.y[ip2] - p1.y[ip1]) * kk ); - if ( w != NULL ) + if ( w != c3d_null ) w[i] = ( (p2.w[ip2] - p1.w[ip1]) * kk ); } @@ -107,7 +107,7 @@ inline void MbNURBSVector2D::Set( ptrdiff_t i, const MbNURBSVector2D & p, ptrdif { x[i] = ( p.x[ip] * kk ); y[i] = ( p.y[ip] * kk ); - if ( w != NULL ) + if ( w != c3d_null ) w[i] = ( p.w[ip] * kk ); } diff --git a/C3d/Include/cur_nurbs_vector3d.h b/C3d/Include/cur_nurbs_vector3d.h index 0476a22..2a2c85f 100644 --- a/C3d/Include/cur_nurbs_vector3d.h +++ b/C3d/Include/cur_nurbs_vector3d.h @@ -212,7 +212,7 @@ inline void MbNURBSVector::Set( ptrdiff_t i, const MbNURBSVector & p, ptrdiff_t inline void MbNURBSVector::Set( ptrdiff_t i, const DoubleTriple * t, double * ww, ptrdiff_t ip ) { _vec[i].Init( t[ip].x , t[ip].y , t[ip].z ); - if ( useWeights && ww != NULL ) + if ( useWeights && ww != c3d_null ) w(i) = ww[ip]; } diff --git a/C3d/Include/cur_offset_curve.h b/C3d/Include/cur_offset_curve.h index 00e0471..7ef7470 100644 --- a/C3d/Include/cur_offset_curve.h +++ b/C3d/Include/cur_offset_curve.h @@ -40,7 +40,7 @@ class MbRegTransform; // --- class MATH_CLASS MbOffsetCurve : public MbCurve { protected : - MbCurve * basisCurve; ///< \ru Базовая кривая (всегда не NULL) \en Base curve (always not NULL). + MbCurve * basisCurve; ///< \ru Базовая кривая (всегда не c3d_null) \en Base curve (always not c3d_null). double tmin; ///< \ru Начальный параметр basisCurve. \en Start parameter of basisCurve. double tmax; ///< \ru Конечный параметр basisCurve. \en End parameter of basisCurve. bool closed; ///< \ru Замкнутость basisCurve. \en Closedness of basisCurve. @@ -102,10 +102,10 @@ public : virtual MbePlaneType IsA() const; // \ru Тип элемента \en Type of element virtual bool IsSimilar ( const MbPlaneItem & ) const; // \ru Являются ли элементы подобными \en Whether the elements are similar virtual bool SetEqual( const MbPlaneItem & ); // \ru Сделать элементы равными \en Make equal elements - virtual MbPlaneItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element - virtual void Transform( const MbMatrix & matr, MbRegTransform * ireg = NULL, const MbSurface * newSurface = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector & to, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Поворот \en Rotation + virtual MbPlaneItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual void Transform( const MbMatrix & matr, MbRegTransform * ireg = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector & to, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Поворот \en Rotation virtual bool IsSame( const MbPlaneItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли кривая curve копией данной кривой ? \en Whether the 'curve' curve is duplicate of current curve. virtual void AddYourGabaritTo( MbRect & ) const; // \ru Добавь свой габарит в прямой прям-к \en Add bounding box into a straight box @@ -192,7 +192,7 @@ public : \{ */ virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Является ли линия прямолинейной \en Whether the line is straight virtual MbCurve * Offset( double rad ) const; // \ru Смещение смещенной кривой \en Offset of the offset curve - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменение направления кривой на противоположное \en Change to the opposite direction of a curve + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменение направления кривой на противоположное \en Change to the opposite direction of a curve virtual void Refresh(); // \ru Сбросить все временные данные \en Reset all temporary data virtual void PrepareIntegralData( const bool forced ) const; // \ru Рассчитать временные (mutable) данные объекта. \en Calculate temporary (mutable) data of an object. @@ -237,7 +237,7 @@ public : virtual void GetBasisPoints( MbControlData & ) const; // \ru Выдать контрольные точки объекта. \en Get control points of object. virtual void SetBasisPoints( const MbControlData & ); // \ru Изменить объект по контрольным точкам. \en Change the object by control points. - virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = NULL, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? + virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = c3d_null, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? // \ru Устранить разрывы первых производных по длине. \en Eliminate the discontinuities of the first derivative at length. virtual bool SetContinuousDerivativeLength( VERSION version, double epsilon = EPSILON ); diff --git a/C3d/Include/cur_offset_curve3d.h b/C3d/Include/cur_offset_curve3d.h index 2cf0a1a..0a7938e 100644 --- a/C3d/Include/cur_offset_curve3d.h +++ b/C3d/Include/cur_offset_curve3d.h @@ -12,6 +12,7 @@ #include +#include #include #include @@ -62,14 +63,40 @@ public : \en Constructor. \~ \details \ru Конструктор эквидистантной кривой по спайну и вектору.\n \en Constructor by a curve and offset vector in start point.\n \~ - \param[in] c - \ru Базовая кривая. \en The base curve. \~ - \param[in] off - \ru Вектор смещения начальной точки кривой. \en Offset in start point. \~ - \param[in] same - \ru Использовать присланную кривую (true) или ее копию (false). - \en Use same curve (true) or copy (false). \~ - \param[in] ort - \ru Ортогонализовать вектор к касательной кривой в начальной точке. - \en Ortogonalize offset vector (true) or same vector (false). \~ + \param[in] baseCurve - \ru Базовая кривая. + \en The base curve. \~ + \param[in] offsetVector - \ru Вектор смещения начальной точки кривой. + \en Offset in start point. \~ + \param[in] sameCurve - \ru Использовать присланную кривую (true) или ее копию (false). + \en Use same curve (true) or copy (false). \~ + \param[in] ort - \ru Ортогонализовать вектор к касательной кривой в начальной точке. + \en Ortogonalize offset vector (true) or same vector (false). \~ + \param[in] version - \ru Версия исполнения. + \en The version. \~ */ - MbOffsetCurve3D( const MbCurve3D & c, const MbVector3D & off, bool same, bool ort, VERSION version = Math::DefaultMathVersion() ); + MbOffsetCurve3D( const MbCurve3D & baseCurve, const MbVector3D & offsetVector, bool sameCurve, bool ort, VERSION version = Math::DefaultMathVersion() ); + /** \brief \ru Конструктор. + \en Constructor. \~ + \details \ru Конструктор эквидистантной кривой по спайну и вектору в режим по нормали к поверхности. \n + Если кривая не является поверхностной кривой, то будет выполнена инициализация без использования поверхности. \n + Поверхность в аргументах нужна для выбора нужной поверхности, если кривая является кривой пересечения двух разных поверхностей. \n + \en Constructor by a surface curve and offset vector in start point.\n + If the curve is not a curve on surface, it will be initialized without using the surface. \n + A surface in arguments is needed to select the desired surface if the curve is a curve of intersection of two different surfaces. \n \~ + \param[in] baseCurve - \ru Базовая кривая. + \en The base curve. \~ + \param[in] sameCurve - \ru Использовать присланную кривую (true) или ее копию (false). + \en Use same curve (true) or copy (false). \~ + \param[in] surface - \ru Поверхность кривой или поверхность, подобная поверхности кривой. + \en Curve surface or surface similar to curve surface. \~ + \param[in] offsetVector - \ru Вектор смещения начальной точки кривой. + \en Offset in start point. \~ + \param[in] ort - \ru Ортогонализовать вектор к касательной кривой в начальной точке. + \en Ortogonalize offset vector (true) or same vector (false). \~ + \param[in] version - \ru Версия исполнения. + \en The version. \~ + */ + MbOffsetCurve3D( const MbCurve3D & baseCurve, bool sameCurve, c3d::ConstSurfaceSPtr & surface, const MbVector3D & offsetVector, bool ort, VERSION version = Math::DefaultMathVersion() ); private : MbOffsetCurve3D( const MbOffsetCurve3D & ); // \ru Не реализовано. \en Not implemented. protected: @@ -103,7 +130,7 @@ public: // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeSpaceType IsA() const; // \ru Тип элемента \en Type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным \en Make equal virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными \en Whether the objects are similar @@ -147,16 +174,16 @@ public: virtual const MbCurve3D & GetBasisCurve() const; virtual MbCurve3D & SetBasisCurve(); //virtual MbCurve3D * Trimmed( double t1, double t2, int sense ) const; // \ru Создание усеченной кривой \en Creation of a trimmed curve - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual size_t GetCount() const; virtual void ChangeCarrier( const MbSpaceItem & item, MbSpaceItem & init ); // \ru Изменение носителя \en Changing of carrier virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Является ли линия прямолинейной \en Whether the line is straight - virtual bool IsPlanar () const; // \ru Является ли кривая плоской \en Whether a curve is planar + virtual bool IsPlanar ( double accuracy = METRIC_EPSILON ) const; // \ru Является ли кривая плоской \en Whether a curve is planar - virtual bool GetPlacement( MbPlacement3D & place, VERSION version = Math::DefaultMathVersion() ) const; // \ru Заполнить плейсемент, ести кривая плоская \en Fill the placement if curve is planar + virtual bool GetPlacement( MbPlacement3D & place, PlanarCheckParams params = PlanarCheckParams() ) const; // \ru Заполнить плейсемент, ести кривая плоская \en Fill the placement if curve is planar - virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = NULL, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? + virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = c3d_null, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? // \ru Устранить разрывы первых производных по длине. \en Eliminate the discontinuities of the first derivative at length. virtual bool SetContinuousDerivativeLength( VERSION version, double epsilon = EPSILON ); diff --git a/C3d/Include/cur_plane_curve.h b/C3d/Include/cur_plane_curve.h index fef1f09..c5b1632 100644 --- a/C3d/Include/cur_plane_curve.h +++ b/C3d/Include/cur_plane_curve.h @@ -36,7 +36,7 @@ class MATH_CLASS MbContour; class MATH_CLASS MbPlaneCurve : public MbCurve3D { protected : MbPlacement3D position; ///< \ru Локальная система координат, в плоскости XY которой расположена кривая. \en The local coordinate system in XY plane of which the curve is located. - MbCurve * curve; ///< \ru Двумерная кривая (не может быть NULL). \en A two-dimensional uv-curve (can not be NULL). + MbCurve * curve; ///< \ru Двумерная кривая (не может быть c3d_null). \en A two-dimensional uv-curve (can not be c3d_null). public : /// \ru same = false - копировать кривую init. \en Same = false - copy the curve "init". @@ -55,13 +55,13 @@ public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeSpaceType IsA() const; // \ru Тип элемента \en Type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const ; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const ; // \ru Сделать копию элемента \en Create a copy of the element virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли объект копией \en Whether the object is a copy virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным \en Make equal virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными \en Whether the objects are similar - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать \en Transform. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать \en Transform. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual double DistanceToPoint( const MbCartPoint3D & ) const; // \ru Расстояние до точки \en Distance to a point virtual void PrepareIntegralData( const bool forced ) const; // \ru Рассчитать временные (mutable) данные объекта. \en Calculate temporary (mutable) data of an object. @@ -101,8 +101,8 @@ public : virtual MbCurve3D * Trimmed( double t1, double t2, int sense ) const; // \ru Создание усеченной кривой \en Creation of a trimmed curve - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction - virtual bool NearPointProjection( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = NULL ) const; // \ru Ближайшая проекция точки на кривую \en The nearest point projection to the curve + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction + virtual bool NearPointProjection( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = c3d_null ) const; // \ru Ближайшая проекция точки на кривую \en The nearest point projection to the curve virtual double Curvature( double ) const; // \ru Кривизна кривой \en Curvature of the curve virtual double Step ( double t, double sag ) const; // \ru Вычисление шага по стрелке прогиба. \en Calculation of parameter step by the sag. virtual double DeviationStep( double t, double angle ) const; // \ru Вычисление шага по углу отклонения нормали. \en Calculation of parameter step by the deviation angle. @@ -119,15 +119,15 @@ public : /// \en Get the boundaries of the curve sections that are described by one analytical function. \~ virtual void GetAnalyticalFunctionsBounds( std::vector & params ) const; - virtual bool IsPlanar() const; // \ru Является ли кривая плоской \en Whether a curve is planar + virtual bool IsPlanar( double accuracy = METRIC_EPSILON ) const; // \ru Является ли кривая плоской \en Whether a curve is planar virtual bool IsSmoothConnected( double angleEps ) const; // \ru Являются ли стыки контура\кривой гладкими? \en Whether the joints of contour\curve are smooth. // \ru Ближайшая точка кривой к плейсменту \en The nearest point of a curve by the placement virtual double DistanceToPlace( const MbPlacement3D & place, double & t0, double & angle ) const; - virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = NULL, - VERSION version = Math::DefaultMathVersion(), bool * coincParams = NULL ) const; // \ru Дать плоскую проекцию кривой \en Get a planar projection of curve + virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = c3d_null, + VERSION version = Math::DefaultMathVersion(), bool * coincParams = c3d_null ) const; // \ru Дать плоскую проекцию кривой \en Get a planar projection of curve virtual MbCurve * GetMapPsp( const MbMatrix3D &, double zNear, - MbRect1D * pRgn = NULL ) const; + MbRect1D * pRgn = c3d_null ) const; virtual double GetRadius() const; // \ru Дать физический радиус объекта или ноль, если это невозможно. \en Get the physical radius of the object or null if it impossible. virtual bool GetCircleAxis ( MbAxis3D & ) const; // \ru Дать ось кривой \en Get the curve axis @@ -141,11 +141,11 @@ public : virtual void CalculateLocalGabarit( const MbMatrix3D &, MbCube & ) const; // \ru Рассчитать габарит относительно л.с.к. \en Calculate bounding box relative to the local coordinate system. // \ru Дать плоскую кривую и плейсмент, если пространственная кривая плоская (после использования вызывать DeleteItem на двумерную кривую) \en Give a planar curve and placement, if the spatial curve is planar (after using the DeleteItem must be called for a two-dimensional curve) - virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, PlanarCheckParams params = PlanarCheckParams() ) const; // \ru Дать поверхностную кривую, если пространственная кривая поверхностная (после использования вызывать DeleteItem на аргументы) \en Get a surface curve if spatial curve is lying on the surface (after the using call DeleteItem for arguments) virtual bool GetSurfaceCurve( MbCurve *& curve2d, MbSurface *& surface, VERSION version = Math::DefaultMathVersion() ) const; // \ru Заполнить плейсемент, если кривая плоская \en Fill the placement if curve is planar - virtual bool GetPlacement( MbPlacement3D & place, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlacement( MbPlacement3D & place, PlanarCheckParams params = PlanarCheckParams() ) const; MbCurve * GetCurve ( const MbPlacement3D & , MbMatrix & ) const; // \ru Дать плоскую кривую \en Get the plane curve MbCurve * MakeCurve( const MbPlacement3D & ) const; @@ -163,7 +163,7 @@ public : virtual bool IsShift( const MbSpaceItem &, MbVector3D &, bool & isSame, double accuracy = LENGTH_EPSILON ) const; virtual bool IsSimilarToCurve( const MbCurve3D & curve, double precision = METRIC_PRECISION ) const; // \ru Подобные ли кривые для объединения (слива) \en Whether the curves are similar for merge (joining) - virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = NULL, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? + virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = c3d_null, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? // \ru Устранить разрывы первых производных по длине. \en Eliminate the discontinuities of the first derivative at length. virtual bool SetContinuousDerivativeLength( VERSION version, double epsilon = EPSILON ); diff --git a/C3d/Include/cur_point_curve.h b/C3d/Include/cur_point_curve.h index 3488e36..44908b9 100644 --- a/C3d/Include/cur_point_curve.h +++ b/C3d/Include/cur_point_curve.h @@ -65,10 +65,10 @@ public : virtual MbePlaneType IsA() const; // \ru Тип элемента \en Type of element virtual bool SetEqual( const MbPlaneItem & ); // \ru Сделать элементы равными \en Make equal elements - virtual MbPlaneItem & Duplicate( MbRegDuplicate * = NULL ) const; - virtual void Move ( const MbVector &, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); - virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Поворот \en Rotation - virtual void Transform( const MbMatrix &, MbRegTransform * ireg = NULL, const MbSurface * newSurface = NULL ); + virtual MbPlaneItem & Duplicate( MbRegDuplicate * = c3d_null ) const; + virtual void Move ( const MbVector &, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); + virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Поворот \en Rotation + virtual void Transform( const MbMatrix &, MbRegTransform * ireg = c3d_null, const MbSurface * newSurface = c3d_null ); virtual void AddYourGabaritTo ( MbRect & ) const; // \ru Добавь свой габарит в прямой прям-к \en Add bounding box into a straight box virtual void CalculateLocalGabarit( const MbMatrix & into, MbRect & local ) const; // \ru Добавь в прям-к свой габарит с учетом матрицы \en Add bounding box into a box with consideration of the matrix virtual double DistanceToPoint( const MbCartPoint & to ) const; // \ru Расстояние до точки \en Distance to a point @@ -131,7 +131,7 @@ public : \en \name Common function of curve \{ */ virtual double Curvature( double t ) const; // \ru Кривизна усеченной кривой \en Curvature of a trimmed curve - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление кривой \en Change direction of a curve + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление кривой \en Change direction of a curve virtual bool IsDegenerate( double eps = Math::LengthEps ) const; // \ru Проверка вырожденности \en Check for degeneracy virtual bool HasLength( double & length ) const; @@ -154,7 +154,7 @@ public : virtual MbeItemLocation PointRelative( const MbCartPoint & pnt, double eps = Math::LengthEps ) const; virtual double PointProjection( const MbCartPoint & pnt ) const; // \ru Проекция точки на отрезок \en Point projection on the line segment virtual bool NearPointProjection( const MbCartPoint & pnt, double xEpsilon, double yEpsilon, - double & t, bool ext, MbRect1D * tRange = NULL ) const; // \ru Проекция точки на кривую или её продолжение в области поиска проекции \en Point projection on the curve or its extension in the projection search area + double & t, bool ext, MbRect1D * tRange = c3d_null ) const; // \ru Проекция точки на кривую или её продолжение в области поиска проекции \en Point projection on the curve or its extension in the projection search area virtual void IntersectHorizontal( double y, SArray & cross ) const; // \ru Пересечение с горизонтальной прямой \en Intersection with the horizontal line virtual void IntersectVertical ( double x, SArray & cross ) const; // \ru Пересечение с вертикальной прямой \en Intersection with the vertical line diff --git a/C3d/Include/cur_polycurve.h b/C3d/Include/cur_polycurve.h index b0e9227..e267ea7 100644 --- a/C3d/Include/cur_polycurve.h +++ b/C3d/Include/cur_polycurve.h @@ -54,10 +54,10 @@ public : virtual MbePlaneType Type() const; // \ru Тип элемента \en Type of element virtual bool SetEqual( const MbPlaneItem & ) = 0; // \ru Сделать элементы равными \en Make the elements equal virtual bool IsSame( const MbPlaneItem & other, double accuracy = LENGTH_EPSILON ) const = 0; // \ru Является ли кривая curve копией данной кривой ? \en Whether curve 'curve' is a duplicate of the current curve. - virtual void Transform( const MbMatrix & matr, MbRegTransform * ireg = NULL, const MbSurface * newSurface = NULL ) = 0; // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector & to, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ) = 0; // \ru Сдвиг \en Translation - virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ) = 0; // \ru Поворот \en Rotation - virtual MbPlaneItem & Duplicate( MbRegDuplicate * = NULL ) const = 0; // \ru Сделать копию элемента \en Create a copy of the element + virtual void Transform( const MbMatrix & matr, MbRegTransform * ireg = c3d_null, const MbSurface * newSurface = c3d_null ) = 0; // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector & to, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ) = 0; // \ru Сдвиг \en Translation + virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ) = 0; // \ru Поворот \en Rotation + virtual MbPlaneItem & Duplicate( MbRegDuplicate * = c3d_null ) const = 0; // \ru Сделать копию элемента \en Create a copy of the element virtual void AddYourGabaritTo( MbRect & r ) const; // \ru Добавь свой габарит в прямой прям-к \en Add your own gabarit into the given bounding rectangle virtual void Refresh(); // \ru Сбросить все временные данные \en Reset all temporary data virtual void PrepareIntegralData( const bool forced ) const; // \ru Рассчитать временные (mutable) данные объекта. \en Calculate temporary (mutable) data of an object. @@ -94,7 +94,7 @@ public : virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Признак прямолинейности кривой \en An attribute of curve straightness. virtual bool HasLength( double & length ) const; - virtual void Inverse( MbRegTransform * iReg = NULL ) = 0; // \ru Изменение направления кривой на противоположное \en Change curve direction to the opposite one + virtual void Inverse( MbRegTransform * iReg = c3d_null ) = 0; // \ru Изменение направления кривой на противоположное \en Change curve direction to the opposite one virtual MbeState Deformation( const MbRect &, const MbMatrix & ); // \ru Деформация \en Deformation virtual bool IsInRectForDeform( const MbRect & r ) const; // \ru Виден ли объект в заданном прямоугольнике для деформации \en Whether the object is visible in the given rectangle for deformation @@ -298,9 +298,12 @@ public : size_t GetPointListCount() const { return pointList.Count(); } ///< \ru Выдать количество характерный точек. \en Get count of control points. ptrdiff_t GetPointListMaxIndex() const { return pointList.MaxIndex(); } ///< \ru Выдать максимальный индекс массива контрольных точек. \en Get maximal index of array of control points. - template - void GetPoints( Points & pnts ) const { std::copy( pointList.begin(), pointList.end(), std::back_inserter( pnts ) ); } ///< \ru Вернуть массив контрольных точек. \en Get array of control points. - void GetPointList( SArray & pnts ) const { pnts = pointList; } ///< \ru Вернуть массив контрольных точек. \en Get array of control points. + + template + void GetPoints( PointsVector & pnts ) const { std::copy( pointList.begin(), pointList.end(), std::back_inserter( pnts ) ); } ///< \ru Вернуть массив контрольных точек. \en Get array of control points. + void GetPointList( SArray & pnts ) const { pnts.assign( pointList.begin(), pointList.end() ); } ///< \ru Вернуть массив контрольных точек. \en Get array of control points. + void GetPointList( c3d::ParamPointsVector & pnts ) const { pnts.assign( pointList.begin(), pointList.end() ); } ///< \ru Вернуть массив контрольных точек. \en Get array of control points. + bool ReplacePoints( const SArray & pnts ); ///< \ru Заменить набор контрольных точек. \en Replace the set of control points. bool ReplacePoints( const std::vector & pnts ); ///< \ru Заменить набор контрольных точек. \en Replace the set of control points. diff --git a/C3d/Include/cur_polycurve3d.h b/C3d/Include/cur_polycurve3d.h index a5bdf62..99d259a 100644 --- a/C3d/Include/cur_polycurve3d.h +++ b/C3d/Include/cur_polycurve3d.h @@ -47,12 +47,12 @@ public : virtual MbeSpaceType IsA() const = 0; // \ru Тип элемента \en Type of element virtual MbeSpaceType Type() const; // \ru Тип элемента \en Type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const = 0; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const = 0; // \ru Сделать копию элемента \en Create a copy of the element virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const = 0; virtual bool SetEqual ( const MbSpaceItem & ) = 0; // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ) = 0; // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ) = 0; // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ) = 0; // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ) = 0; // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ) = 0; // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ) = 0; // \ru Повернуть вокруг оси \en Rotate about an axis virtual void AddYourGabaritTo( MbCube & ) const; // \ru Добавь свой габарит в куб \en Add your own bounding box into the cube virtual void PrepareIntegralData( const bool forced ) const; // \ru Рассчитать временные (mutable) данные объекта. \en Calculate temporary (mutable) data of an object. @@ -82,15 +82,15 @@ public : virtual double GetTMax() const = 0; // \ru Вернуть максимальное значение параметра \en Get the maximum value of parameter virtual double GetTMin() const = 0; // \ru Вернуть минимальное значение параметра \en Get the minimum value of parameter virtual bool IsClosed() const; // \ru Замкнутость кривой \en A curve closedness - virtual void Inverse( MbRegTransform * iReg = NULL ) = 0; // \ru Изменить направление \en Change direction + virtual void Inverse( MbRegTransform * iReg = c3d_null ) = 0; // \ru Изменить направление \en Change direction virtual double GetMetricLength() const; // \ru Выдать метрическую длину ограниченной кривой \en Get metric length of bounded curve virtual double GetLengthEvaluation() const; // \ru Оценка метрической длины кривой \en Estimation of metric length of the curve - virtual bool IsPlanar () const; // \ru Является ли кривая плоской \en Whether the curve is planar - virtual bool GetPlacement( MbPlacement3D & place, VERSION version = Math::DefaultMathVersion() ) const; // \ru Заполнить плейсемент, ести кривая плоская \en Fill the placement if the curve is planar + virtual bool IsPlanar ( double accuracy = METRIC_EPSILON ) const; // \ru Является ли кривая плоской \en Whether the curve is planar + virtual bool GetPlacement( MbPlacement3D & place, PlanarCheckParams params = PlanarCheckParams() ) const; // \ru Заполнить плейсемент, ести кривая плоская \en Fill the placement if the curve is planar // \ru Дать плоскую кривую и плейсмент, если пространственная кривая плоская (после использования вызывать DeleteItem на двумерную кривую) \en Get the planar curve and placement if the spatial curve is planar (call DeleteItem for two-dimensional curve after using) - virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, VERSION version = Math::DefaultMathVersion() ) const = 0; + virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, PlanarCheckParams params = PlanarCheckParams() ) const = 0; // \ru Общие функции полигональной кривой \en Common functions of polygonal curve @@ -119,9 +119,12 @@ public : size_t GetPointListCount() const { return pointList.Count(); } ptrdiff_t GetPointListMaxIndex() const { return pointList.MaxIndex(); } - template - void GetPoints( Points & pnts ) const { std::copy( pointList.begin(), pointList.end(), std::back_inserter( pnts ) ); } ///< \ru Вернуть массив контрольных точек. \en Get array of control points. - void GetPointList( SArray & pnts ) const { pnts = pointList; } // \ru Получить характерные точки \en Get control points + + template + void GetPoints( PointsVector & pnts ) const { std::copy( pointList.begin(), pointList.end(), std::back_inserter( pnts ) ); } ///< \ru Вернуть массив контрольных точек. \en Get array of control points. + void GetPointList( SArray & pnts ) const { pnts.assign( pointList.begin(), pointList.end() ); } // \ru Получить характерные точки \en Get control points + void GetPointList( c3d::SpacePointsVector & pnts ) const { pnts.assign( pointList.begin(), pointList.end() ); } // \ru Получить характерные точки \en Get control points + const MbCartPoint3D & GetPointList( size_t i ) const { return pointList[i]; } // \ru Характерные точки \en Control points MbCartPoint3D & SetPointList( size_t i ) { return pointList[i]; } // \ru Характерные точки \en Control points diff --git a/C3d/Include/cur_polyline.h b/C3d/Include/cur_polyline.h index 616db77..9087c8c 100644 --- a/C3d/Include/cur_polyline.h +++ b/C3d/Include/cur_polyline.h @@ -51,7 +51,7 @@ public : MbPolyline( const MbCartPoint & p1, const MbCartPoint & p2 ) : MbPolyCurve() , segmentsCount( 1 ) - , searchTree( NULL ) + , searchTree( c3d_null ) { pointList.reserve( 2 ); pointList.push_back( p1 ); @@ -64,7 +64,7 @@ public : MbPolyline( const Points & initList, bool cls ) : MbPolyCurve() , segmentsCount( UNDEFINED_INT_T ) - , searchTree( NULL ) + , searchTree( c3d_null ) { Init( initList, cls ); } @@ -87,10 +87,10 @@ public : virtual MbePlaneType IsA() const; // \ru Тип элемента \en Type of element virtual bool SetEqual( const MbPlaneItem & ); // \ru Сделать элементы равными \en Make the elements equal virtual bool IsSame( const MbPlaneItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли кривая curve копией данной кривой ? \en Whether curve 'curve' is a duplicate of the current curve. - virtual void Transform( const MbMatrix & matr, MbRegTransform * ireg = NULL, const MbSurface * newSurface = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector & to, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Поворот \en Rotation - virtual MbPlaneItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual void Transform( const MbMatrix & matr, MbRegTransform * ireg = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector & to, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Поворот \en Rotation + virtual MbPlaneItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual void Refresh(); // \ru Сбросить все временные данные \en Reset all temporary data /** \} */ @@ -189,7 +189,7 @@ public : virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Признак прямолинейности кривой \en An attribute of curve straightness. - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменение направления кривой на противоположное \en Change curve direction to the opposite one + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменение направления кривой на противоположное \en Change curve direction to the opposite one virtual double CalculateMetricLength() const; // \ru Посчитать метрическую длину \en Calculate the metric length virtual double GetLengthEvaluation() const; // \ru Оценка метрической длины кривой \en Estimation of metric length of the curve @@ -253,7 +253,7 @@ public : virtual bool IsDegenerate( double eps = Math::LengthEps ) const; // \ru Проверка вырожденности кривой \en Check for curve degeneracy virtual bool IsSmoothConnected( double angleEps ) const; // \ru Являются ли стыки контура\кривой гладкими? \en Whether the joints of a contour\curve are smooth. - virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = NULL, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? + virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = c3d_null, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? // \ru Устранить разрывы первых производных по длине. \en Eliminate the discontinuities of the first derivative at length. virtual bool SetContinuousDerivativeLength( VERSION version, double epsilon = EPSILON ); diff --git a/C3d/Include/cur_polyline3d.h b/C3d/Include/cur_polyline3d.h index 25dfea8..a9168e2 100644 --- a/C3d/Include/cur_polyline3d.h +++ b/C3d/Include/cur_polyline3d.h @@ -99,12 +99,12 @@ public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeSpaceType IsA() const; // \ru Тип элемента \en Type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const ; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const ; // \ru Сделать копию элемента \en Create a copy of the element virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать \en Transform - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать \en Transform + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual double DistanceToPoint( const MbCartPoint3D & ) const;// \ru Расстояние до точки \en Distance to a point virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object @@ -130,7 +130,7 @@ public : virtual double GetTMin() const; // \ru Вернуть минимальное значение параметра \en Get the minimum value of the parameter virtual double GetTMax() const; // \ru Вернуть максимальное значение параметра \en Get the maximum value of parameter - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual double Step ( double t, double sag ) const; // \ru Шаг параметра с учетом радиуса кривизны \en Step of parameter with consideration of curvature virtual double DeviationStep( double t, double angle ) const; // \ru Шаг параметра по заданному углу отклонения касательной \en Step of parameter by a given angle of deviation of tangent @@ -144,7 +144,7 @@ public : virtual void GetCentre ( MbCartPoint3D & wc ) const; // \ru Посчитать центр кривой \en Calculate the center of a curve virtual void GetWeightCentre( MbCartPoint3D & wc ) const; // \ru Посчитать центр тяжести кривой \en Calculate the gravity center of the curve // \ru Дать плоскую кривую и плейсмент, если пространственная кривая плоская (после использования вызывать DeleteItem на двумерную кривую) \en Get the planar curve and placement if the spatial curve is planar (call DeleteItem for two-dimensional curve after using) - virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, PlanarCheckParams params = PlanarCheckParams() ) const; // \ru Общие функции полигональной кривой \en Common functions of polygonal curve @@ -152,7 +152,7 @@ public : virtual void GetRuleInterval( ptrdiff_t index, double & t1, double & t2 ) const; // \ru Выдать интервал влияния точки кривой \en Get the interval of point influence // \ru Функции только 3D кривой \en Functions of 3D curve only - virtual bool NearPointProjection( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = NULL ) const; // \ru Ближайшая проекция точки на кривую \en The nearest point projection to the curve + virtual bool NearPointProjection( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = c3d_null ) const; // \ru Ближайшая проекция точки на кривую \en The nearest point projection to the curve virtual void InsertPoint( ptrdiff_t index, const MbCartPoint3D & ); // \ru Добавить точку \en Add a point virtual void InsertPoint( double t, const MbCartPoint3D &, double ); // \ru Добавить точку \en Add a point virtual bool CheckParam ( double & t, ptrdiff_t & i0, ptrdiff_t & i1, double & t0, double & t1 ) const; // \ru Установить параметр \en Set parameter @@ -162,14 +162,14 @@ public : //virtual bool GoThroughPoint( double t, MbCartPoint3D & p ); // \ru Пройти через точку \en Pass through point - virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = NULL, - VERSION version = Math::DefaultMathVersion(), bool * coincParams = NULL ) const; // \ru Дать плоскую проекцию кривой. \en Get a planar projection of a curve. - virtual MbCurve * GetMapPsp( const MbMatrix3D &, double zNear, MbRect1D * pRgn = NULL ) const; // \ru Дать перспективную плоскую проекцию кривой. \en Get a planar geometric projection of a curve. + virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = c3d_null, + VERSION version = Math::DefaultMathVersion(), bool * coincParams = c3d_null ) const; // \ru Дать плоскую проекцию кривой. \en Get a planar projection of a curve. + virtual MbCurve * GetMapPsp( const MbMatrix3D &, double zNear, MbRect1D * pRgn = c3d_null ) const; // \ru Дать перспективную плоскую проекцию кривой. \en Get a planar geometric projection of a curve. virtual size_t GetCount() const; virtual bool IsSmoothConnected( double angleEps ) const; // \ru Являются ли стыки контура\кривой гладкими? \en Whether the joints of a contour\curve are smooth. - virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = NULL, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? + virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = c3d_null, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? // \ru Устранить разрывы первых производных по длине. \en Eliminate the discontinuities of the first derivative at length. virtual bool SetContinuousDerivativeLength( VERSION version, double epsilon = EPSILON ); diff --git a/C3d/Include/cur_projection_curve.h b/C3d/Include/cur_projection_curve.h index a49155c..a4d679a 100644 --- a/C3d/Include/cur_projection_curve.h +++ b/C3d/Include/cur_projection_curve.h @@ -43,9 +43,9 @@ class MbCurveIntoNurbsInfo; // --- class MATH_CLASS MbProjCurve : public MbCurve { private : - MbCurve3D * spaceCurve; ///< \ru Пространственная кривая (всегда не NULL). \en Spatial curve (always not NULL). - MbSurface * surface; ///< \ru Поверхность (всегда не NULL). \en Surface (always not NULL). - MbCurve * curve; ///< \ru Проекция пространственной кривой на поверхность (служит начальным приближением), всегда не NULL. \en Projection of a spatial curve onto a surface (is used as initial approximation), always not NULL. + MbCurve3D * spaceCurve; ///< \ru Пространственная кривая (всегда не c3d_null). \en Spatial curve (always not c3d_null). + MbSurface * surface; ///< \ru Поверхность (всегда не c3d_null). \en Surface (always not c3d_null). + MbCurve * curve; ///< \ru Проекция пространственной кривой на поверхность (служит начальным приближением), всегда не c3d_null. \en Projection of a spatial curve onto a surface (is used as initial approximation), always not c3d_null. MbMatrix3D * into; ///< \ru Матрица пересчета в систему координат плоскости. Для случая плоской поверхности surface. Вычисляется заново при изменении поверхности. \en A matrix of transformation to the plane coordinate system. In case of planar surface 'surface'. Recalculated at surface change. bool belong; ///< \ru Проецируемая кривая лежит на поверхности. \en Projecting curve lies on the surface. @@ -117,7 +117,7 @@ public : MbProjCurve( const MbCurve3D & sCurve, bool sameSpaceCurve, const MbSurface & surface, const MbCurve & pCurve, bool samePlaneCurve, - MbRegDuplicate * iReg = NULL ); + MbRegDuplicate * iReg = c3d_null ); private: MbProjCurve( const MbProjCurve &, MbRegDuplicate * ireg ); @@ -136,13 +136,13 @@ public : virtual bool IsSimilar ( const MbPlaneItem & ) const; // \ru Являются ли элементы подобными \en Whether the elements are similar virtual bool SetEqual ( const MbPlaneItem & ); // \ru Сделать элементы равными \en Make the elements equal virtual bool IsSame( const MbPlaneItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли кривая curve копией данной кривой ? \en Whether curve 'curve' is a duplicate of the current curve. - virtual void Transform( const MbMatrix &, MbRegTransform * ireg = NULL, const MbSurface * newSurface = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Transform( const MbMatrix3D &, MbRegTransform * ireg = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D & to, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis - virtual void Move ( const MbVector &, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Поворот \en Rotation - virtual MbPlaneItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual void Transform( const MbMatrix &, MbRegTransform * ireg = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Transform( const MbMatrix3D &, MbRegTransform * ireg = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D & to, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Move ( const MbVector &, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Поворот \en Rotation + virtual MbPlaneItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual void Refresh(); // \ru Сбросить все временные данные \en Reset all temporary data virtual void PrepareIntegralData( const bool forced ) const; // \ru Рассчитать временные (mutable) данные объекта. \en Calculate temporary (mutable) data of an object. @@ -204,7 +204,7 @@ public : \{ */ virtual double PointProjection( const MbCartPoint & pnt ) const; // \ru Проекция точки на кривую. \en Point projection on the curve. virtual bool NearPointProjection( const MbCartPoint & pnt, double xEpsilon, double yEpsilon, - double & t, bool ext, MbRect1D * tRange = NULL ) const; // \ru Проекция точки на кривую или её продолжение в области поиска проекции. \en Projection of a point onto the curve or its extension in the projection region. + double & t, bool ext, MbRect1D * tRange = c3d_null ) const; // \ru Проекция точки на кривую или её продолжение в области поиска проекции. \en Projection of a point onto the curve or its extension in the projection region. virtual bool HasLength( double & ) const; // \ru Метрическая длина кривой. \en Metric length of a curve. virtual double GetMetricLength() const; // \ru Метрическая длина кривой. \en Metric length of a curve. @@ -216,7 +216,7 @@ public : virtual bool GetMiddlePoint( MbCartPoint & ) const; // \ru Вычислить среднюю точку кривой. \en Calculate mid-point of curve. - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменение направления кривой на противоположное \en Change curve direction to the opposite one + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменение направления кривой на противоположное \en Change curve direction to the opposite one virtual MbNurbs * NurbsCurve( const MbCurveIntoNurbsInfo & ) const; @@ -238,12 +238,12 @@ public : bool IsBelong() const { return belong; } ///< \ru Лежит ли проецируемая кривая на поверхности. \en Whether the projecting curve lies on the surface. - bool InvertNormal( MbRegTransform * = NULL ); ///< \ru Инвертировать нормаль, если поверхность - плоскость. \en Invert normal if the surface is a plane. + bool InvertNormal( MbRegTransform * = c3d_null ); ///< \ru Инвертировать нормаль, если поверхность - плоскость. \en Invert normal if the surface is a plane. bool ChangeCarrierBorne( const MbSurface & item, MbSurface & init, const MbMatrix & matr ); ///< \ru Изменение носителя. \en Change a carrier. /// \ru Получить 2d сплайн с данной относительной точностью аппроксимирующий данную кривую. \en Get 2d spline which approximates given curve with a given relative tolerance. - MbCurve * CreateSpline( double relEps, MbRect1D * pRgn = NULL ) const; + MbCurve * CreateSpline( double relEps, MbRect1D * pRgn = c3d_null ) const; /// \ru Создать кривую путём сращивания части данной кривой с частью другой кривой. \en Create a curve by joining a part of this curve with a part of other curve. MbProjCurve * AddCurve( const MbProjCurve &, double accuracy, VERSION version = Math::DefaultMathVersion() ) const; diff --git a/C3d/Include/cur_reparam_curve.h b/C3d/Include/cur_reparam_curve.h index 5a28df2..33c4cf7 100644 --- a/C3d/Include/cur_reparam_curve.h +++ b/C3d/Include/cur_reparam_curve.h @@ -80,12 +80,12 @@ public : virtual MbePlaneType IsA() const; // \ru Тип элемента \en Type of element virtual bool IsSimilar( const MbPlaneItem & ) const; // \ru Являются ли элементы подобными \en Whether the elements are similar virtual bool SetEqual ( const MbPlaneItem & ); // \ru Сделать элементы равными \en Make the elements equal - virtual void Transform( const MbMatrix &, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector &, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbCartPoint &, const MbDirection & angle, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Поворот \en Rotation + virtual void Transform( const MbMatrix &, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector &, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbCartPoint &, const MbDirection & angle, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Поворот \en Rotation virtual bool IsSame( const MbPlaneItem &, double accuracy = LENGTH_EPSILON ) const; virtual MbCurve * Offset( double rad ) const; // \ru Смещение усеченной кривой \en Shift of a trimmed curve - virtual MbPlaneItem & Duplicate( MbRegDuplicate * = NULL ) const; + virtual MbPlaneItem & Duplicate( MbRegDuplicate * = c3d_null ) const; virtual MbCurve * Trimmed( double t1, double t2, int sense ) const; virtual MbContour * NurbsContour() const; // \ru Построить контур \en Create a contour virtual void AddYourGabaritTo( MbRect & ) const; // \ru Добавь свой габарит в прямой прям-к \en Add your own gabarit into the given bounding rectangle @@ -153,7 +153,7 @@ public : /** \ru \name Общие функции кривой \en \name Common functions of curve \{ */ - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменение направления кривой на противоположное \en Change curve direction to the opposite one + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменение направления кривой на противоположное \en Change curve direction to the opposite one virtual double DistanceToPoint( const MbCartPoint & toP ) const; // \ru Расстояние до точки \en Distance to a point virtual bool DistanceToPointIfLess( const MbCartPoint & toP, double & d ) const; // \ru Расстояние до точки, если оно меньше d \en Distance to a point if it is less than 'd' virtual MbeState Deformation( const MbRect &, const MbMatrix & ); // \ru Деформация \en Deformation @@ -188,7 +188,7 @@ public : virtual double PointProjection( const MbCartPoint & ) const; // \ru Проекция точки на кривую \en Point projection on the curve virtual bool NearPointProjection( const MbCartPoint & pnt, double xEpsilon, double yEpsilon, - double & t, bool ext, MbRect1D * tRange = NULL ) const; // \ru Проекция точки на кривую или её продолжение в области поиска проекции \en Projection of a point onto the curve or its extension in the projection region + double & t, bool ext, MbRect1D * tRange = c3d_null ) const; // \ru Проекция точки на кривую или её продолжение в области поиска проекции \en Projection of a point onto the curve or its extension in the projection region // \ru Вычисление всех перпендикуляров к кривой из данной точки \en Calculation of all the perpendiculars to the curve from a given point virtual void PerpendicularPoint( const MbCartPoint & pnt, SArray & tFind ) const; virtual bool SmallestPerpendicular( const MbCartPoint & pnt, double & tProj ) const; // \ru Нахождение ближайшего перпендикуляра к кривой из данной точки \en Calculation of the closest perpendicular to the curve from the given point @@ -202,7 +202,7 @@ public : virtual bool GetMiddlePoint( MbCartPoint & ) const; // \ru Выдать среднюю точку кривой \en Get mid-point of a curve virtual bool GoThroughPoint( MbCartPoint & p0 ); // \ru Вычисление минимальной длины кривой между двумя точками на ней \en Calculate the minimal curve length between two points on it - virtual double LengthBetween2Points( MbCartPoint & p1, MbCartPoint & p2, MbCartPoint * pc = NULL ) const; + virtual double LengthBetween2Points( MbCartPoint & p1, MbCartPoint & p2, MbCartPoint * pc = c3d_null ) const; virtual bool GetSpecificPoint( const MbCartPoint & from, double & dmax, MbCartPoint & pnt ) const; // \ru Выдать характерную точку кривой если она ближе чем dmax \en Get control point of curve if it is closer than 'dmax' virtual bool GetWeightCentre( MbCartPoint & c ) const; // \ru Выдать центр тяжести кривой \en Get the center of gravity of the curve virtual bool GetCentre( MbCartPoint & c ) const; // \ru Выдать центр кривой \en Get center of curve @@ -227,7 +227,7 @@ public : virtual const MbCurve & GetBasisCurve() const; virtual MbCurve & SetBasisCurve(); - bool SetBasisCurve( const MbCurve &, const MbRect1D * tRange = NULL ); ///< \ru Заменить плоскую кривую \en Replace the planar curve + bool SetBasisCurve( const MbCurve &, const MbRect1D * tRange = c3d_null ); ///< \ru Заменить плоскую кривую \en Replace the planar curve double Tmin() const; ///< \ru Начальный параметр. \en Start parameter. double Tmax() const; ///< \ru Конечный параметр. \en End parameter. double Dt() const; ///< \ru Производная параметра кривой basisCurve по параметру. \en Derivative of parameter of 'basisCurve' curve by parameter. @@ -249,7 +249,7 @@ public : virtual void GetBasisPoints( MbControlData & ) const; // \ru Выдать контрольные точки объекта. \en Get control points of object. virtual void SetBasisPoints( const MbControlData & ); // \ru Изменить объект по контрольным точкам. \en Change the object by control points. - virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = NULL, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? + virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = c3d_null, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? // \ru Устранить разрывы первых производных по длине. \en Eliminate the discontinuities of the first derivative at length. virtual bool SetContinuousDerivativeLength( VERSION version, double epsilon = EPSILON ); diff --git a/C3d/Include/cur_reparam_curve3d.h b/C3d/Include/cur_reparam_curve3d.h index 412260d..042a5d0 100644 --- a/C3d/Include/cur_reparam_curve3d.h +++ b/C3d/Include/cur_reparam_curve3d.h @@ -75,13 +75,13 @@ public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeSpaceType IsA() const; // \ru Тип элемента \en Type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли объект копией \en Whether the object is a copy virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным \en Make equal virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными \en Whether the objects are similar - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual double DistanceToPoint( const MbCartPoint3D & ) const; // \ru Расстояние до точки \en Distance to a point virtual void PrepareIntegralData( const bool forced ) const; // \ru Рассчитать временные (mutable) данные объекта. \en Calculate temporary (mutable) data of an object. @@ -122,7 +122,7 @@ public : virtual MbCurve3D & SetBasisCurve(); virtual MbCurve3D * Trimmed( double t1, double t2, int sense ) const; // \ru Создание усеченной кривой \en Create a trimmed curve - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual double GetMetricLength() const; // \ru Метрическая длина кривой \en Metric length of a curve virtual double CalculateMetricLength() const; // \ru Метрическая длина кривой \en Metric length of a curve @@ -148,7 +148,7 @@ public : virtual void GetPointsByEvenLengthDelta( size_t n, std::vector & pnts ) const; // \ru Выдать n точек кривой с равными интервалами по длине дуги \en Get n points of curve equally spaced by the arc length // \ru Ближайшая проекция точки на кривую \en The nearest projection of a point onto the curve - virtual bool NearPointProjection( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = NULL ) const; + virtual bool NearPointProjection( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = c3d_null ) const; // \ru Определение точек касания изоклины \en Determination of tangent points of isocline virtual void GetIsoclinal( const MbVector3D & nor, SArray & tIso ) const; /// \ru Найти все особые точки функции кривизны кривой. @@ -160,12 +160,12 @@ public : // \ru Касание кривой через точку с заданной производной \en Tangent of curve through point with the given derivative //virtual bool GoThroughPointWithDerive( double t, MbCartPoint3D & p0, MbVector3D & v0 ); - virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = NULL, - VERSION version = Math::DefaultMathVersion(), bool * coincParams = NULL ) const; // \ru Дать плоскую проекцию кривой \en Get a planar projection of a curve + virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = c3d_null, + VERSION version = Math::DefaultMathVersion(), bool * coincParams = c3d_null ) const; // \ru Дать плоскую проекцию кривой \en Get a planar projection of a curve virtual size_t GetCount() const; virtual void ChangeCarrier( const MbSpaceItem & item, MbSpaceItem & init ); // \ru Изменение носителя \en Change a carrier - virtual bool IsPlanar () const; // \ru Является ли кривая плоской \en Whether the curve is planar + virtual bool IsPlanar ( double accuracy = METRIC_EPSILON ) const; // \ru Является ли кривая плоской \en Whether the curve is planar virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Является ли линия прямолинейной \en Whether the line is straight virtual double GetRadius() const; // \ru Дать физический радиус объекта или ноль, если это невозможно. \en Get the physical radius of the object or null if it impossible. virtual bool GetCircleAxis ( MbAxis3D & ) const; // \ru Дать ось кривой \en Get axis of curve @@ -188,9 +188,9 @@ public : virtual void SubstrateToCurve( double & ) const; // \ru Преобразовать параметр подложки в параметр кривой \en Transform a substrate parameter to the curve parameter virtual void CurveToSubstrate( double & ) const; // \ru Преобразовать параметр кривой в параметр подложки \en Transform a curve parameter to the substrate parameter // \ru Заполнить плейсемент, ести кривая плоская \en Fill the placement if the curve is planar - virtual bool GetPlacement( MbPlacement3D & place, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlacement( MbPlacement3D & place, PlanarCheckParams params = PlanarCheckParams() ) const; // \ru Дать плоскую кривую и плейсмент, если пространственная кривая плоская (после использования вызывать DeleteItem на двумерную кривую) \en Get the planar curve and placement if the spatial curve is planar (call DeleteItem for two-dimensional curve after using) - virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, PlanarCheckParams params = PlanarCheckParams() ) const; // \ru Дать поверхностную кривую, если пространственная кривая поверхностная (после использования вызывать DeleteItem на аргументы) \en Get a surface curve if a spatial curve is on a surface (call DeleteItem for arguments after using ) virtual bool GetSurfaceCurve( MbCurve *& curve2d, MbSurface *& surface, VERSION version = Math::DefaultMathVersion() ) const; @@ -198,7 +198,7 @@ public : virtual bool IsShift( const MbSpaceItem &, MbVector3D &, bool & isSame, double accuracy = LENGTH_EPSILON ) const; virtual bool IsSimilarToCurve( const MbCurve3D & curve, double precision = METRIC_PRECISION ) const; // \ru Подобные ли кривые для объединения (слива) \en Whether the curves for union (joining) are similar - virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = NULL, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? + virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = c3d_null, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? // \ru Устранить разрывы первых производных по длине. \en Eliminate the discontinuities of the first derivative at length. virtual bool SetContinuousDerivativeLength( VERSION version, double epsilon = EPSILON ); diff --git a/C3d/Include/cur_silhouette_curve.h b/C3d/Include/cur_silhouette_curve.h index fff5ad0..ee87c17 100644 --- a/C3d/Include/cur_silhouette_curve.h +++ b/C3d/Include/cur_silhouette_curve.h @@ -77,7 +77,7 @@ public : const MbMatrix3D & m, bool p ); /// \ru Конструктор по поверхности, двумерной кривой, типу кривой, вектору взгляда и флагу перспективы. \en Constructor by surface, two-dimensional curve, type of curve, vector of view and flag of perspective. MbSilhouetteCurve( const MbSurface & surf, const MbCurve & crv, MbeCurveBuildType _species, - const MbVector3D & e, bool p, const MbAxis3D * axis = NULL ); + const MbVector3D & e, bool p, const MbAxis3D * axis = c3d_null ); protected: /// \ru Конструктор копирования. \en Copy-constructor. MbSilhouetteCurve( const MbSilhouetteCurve &, MbRegDuplicate * ); @@ -92,13 +92,13 @@ public: // \ru Общие функции геометрического объекта. \en Common functions of a geometric object. virtual MbeSpaceType IsA() const; // \ru Дать тип элемента. \en Get element type. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Определить, являются ли объекты одинаковыми. \en Determine whether objects are equal. virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным. \en Make equal. virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Определить, являются ли объекты подобными. \en Determine whether the objects are similar. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвинуть вдоль вектора. \en Move along a vector. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate about an axis. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвинуть вдоль вектора. \en Move along a vector. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate about an axis. virtual void Refresh(); // \ru Сбросить все временные данные. \en Reset all temporary data. virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта. \en Set properties of the object. @@ -125,19 +125,19 @@ public: // \ru Вычислить габарит кривой. \en Calculate bounding box of a curve. virtual void CalculateGabarit( MbCube & ) const; // \ru Определить, является ли кривая плоской. \en Determine whether the curve is planar. - virtual bool IsPlanar() const; + virtual bool IsPlanar( double accuracy = METRIC_EPSILON ) const; // \ru Заполнить плейсмент, если кривая плоская. \en Fill the placement if the curve is planar. - virtual bool GetPlacement( MbPlacement3D & place, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlacement( MbPlacement3D & place, PlanarCheckParams params = PlanarCheckParams() ) const; // \ru Дать плоскую кривую и плейсмент, если пространственная кривая плоская (после использования вызывать DeleteItem на двумерную кривую). \en Get the planar curve and placement if the spatial curve is planar (call DeleteItem for two-dimensional curve after using ). - virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place3d, bool saveParams, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place3d, bool saveParams, PlanarCheckParams params = PlanarCheckParams() ) const; // \ru Дать поверхностную кривую, если пространственная кривая поверхностная (после использования вызывать DeleteItem на аргументы). \en Get a surface curve if a spatial curve is on a surface (call DeleteItem for arguments after use). virtual bool GetSurfaceCurve( MbCurve *& curve2d, MbSurface *& surface, VERSION version = Math::DefaultMathVersion() ) const; // \ru Создать усеченную кривую. \en Create a trimmed curve virtual MbCurve3D * Trimmed( double t1, double t2, int sense ) const; // \ru Дать плоскую проекцию кривой(локальная система координат, шаг, параметрическая область). \en Get the planar projection of a curve (local coordinate system, step, parametric region). - virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = NULL, - VERSION version = Math::DefaultMathVersion(), bool * coincParams = NULL ) const; + virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = c3d_null, + VERSION version = Math::DefaultMathVersion(), bool * coincParams = c3d_null ) const; virtual double GetMetricLength() const; // \ru Метрическая длина кривой \en Metric length of a curve virtual double GetLengthEvaluation() const; // \ru Оценить метрическую длину кривой. \en Estimate the metric length of a curve. @@ -145,16 +145,16 @@ public: virtual double GetParamToUnit() const; // \ru Дать приращение параметра, осреднённо соответствующее единичной длине в пространстве. \en Get parameter increment which averagingly corresponds to the unit length in space. virtual double GetParamToUnit( double t ) const; // \ru Дать приращение параметра, соответствующее единичной длине в пространстве. \en Get parameter increment which corresponds to the unit length in space. - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление. \en Change the direction. + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление. \en Change the direction. virtual MbeCurveBuildType GetBuildType() const; // \ru Дать тип кривой. \en Get type of curve. virtual bool InsertPoint( double & t ); // \ru Вставить точку и выдать её параметр. \en Insert point and get its parameter. virtual bool IsSimilarToCurve( const MbCurve3D & curve, double precision = METRIC_PRECISION ) const; // \ru Определить, подобные ли кривые для объединения (слива). \en Determine whether the curves for union (joining) are similar. /// \ru Определить, существует ли точное пространственное представление линии очерка. \en Determine whether the exact spatial representation of isocline curve exists. - bool IsExactSpaceCurve() const { return (approxExact && approxCurve != NULL); } + bool IsExactSpaceCurve() const { return (approxExact && approxCurve != c3d_null); } /// \ru Получить указатель на кривую точного пространственное представление линии очерка. (Может и не быть). \en Get a pointer to the curve of exact spatial representation of isocline curve. (Can be absent). - const MbCurve3D * GetExactSpaceCurve() const { return approxExact ? approxCurve : NULL; } + const MbCurve3D * GetExactSpaceCurve() const { return approxExact ? approxCurve : c3d_null; } /// \ru Дать пространственную копию линии очерка. \en Construct a new spatial copy of isocline curve. const MbCurve3D * GetApproxCurve() const { return approxCurve; } diff --git a/C3d/Include/cur_spiral.h b/C3d/Include/cur_spiral.h index bca6c0d..e605fa4 100644 --- a/C3d/Include/cur_spiral.h +++ b/C3d/Include/cur_spiral.h @@ -95,12 +95,12 @@ public : virtual MbeSpaceType IsA() const = 0; // \ru Тип элемента \en Type of element virtual MbeSpaceType Type() const; // \ru Тип элемента \en Type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const = 0; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const = 0; // \ru Сделать копию элемента \en Create a copy of the element virtual bool IsSame( const MbSpaceItem &, double accuracy = LENGTH_EPSILON ) const; virtual bool SetEqual( const MbSpaceItem & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual void AddYourGabaritTo( MbCube & ) const; // \ru Добавь свой габарит в куб \en Add your own bounding box into the cube virtual void PrepareIntegralData( const bool forced ) const; // \ru Рассчитать временные (mutable) данные объекта. \en Calculate temporary (mutable) data of an object. @@ -125,7 +125,7 @@ public : virtual void Explore( double & t, bool ext, MbCartPoint3D & pnt, MbVector3D & fir, MbVector3D * sec, MbVector3D * thir ) const = 0; - virtual void Inverse( MbRegTransform * iReg = NULL ) = 0; // \ru Изменить направление \en Change direction + virtual void Inverse( MbRegTransform * iReg = c3d_null ) = 0; // \ru Изменить направление \en Change direction virtual double GetMetricLength() const; // \ru Выдать метрическую длину ограниченной кривой \en Get metric length of bounded curve virtual double GetLengthEvaluation() const; // \ru Оценка метрической длины кривой \en Estimation of metric length of the curve @@ -140,7 +140,7 @@ public : double GetSpiralPeriod() const; // \ru Вернуть период \en Get period // \ru Заполнить плейсемент, если кривая плоская \en Fill the placement if the curve is planar - virtual bool GetPlacement( MbPlacement3D & place, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlacement( MbPlacement3D & place, PlanarCheckParams params = PlanarCheckParams() ) const; /// \ru Является ли объект смещением \en Whether the object is a shift virtual bool IsShift( const MbSpaceItem &, MbVector3D &, bool & isSame, double accuracy = LENGTH_EPSILON ) const; diff --git a/C3d/Include/cur_surface_curve.h b/C3d/Include/cur_surface_curve.h index 6c3fba6..7256023 100644 --- a/C3d/Include/cur_surface_curve.h +++ b/C3d/Include/cur_surface_curve.h @@ -61,8 +61,8 @@ class MbCurveIntoNurbsInfo; // --- class MATH_CLASS MbSurfaceCurve : public MbCurve3D { protected : - MbCurve * curve; ///< \ru Плоская кривая в uv-пространстве (всегда не NULL). \en Planar curve in uv-space (always not NULL). - MbSurface * surface; ///< \ru Указатель на поверхность (всегда не NULL). \en Pointer to the surface (always not NULL). + MbCurve * curve; ///< \ru Плоская кривая в uv-пространстве (всегда не c3d_null). \en Planar curve in uv-space (always not c3d_null). + MbSurface * surface; ///< \ru Указатель на поверхность (всегда не c3d_null). \en Pointer to the surface (always not c3d_null). bool closed; ///< \ru Флаг замкнутости поверхностной кривой. \en An attribute of closedness of surface of curve. /** \brief \ru Вспомогательные данные. @@ -105,7 +105,7 @@ protected : public : /// \ru Конструктор кривой на поверхности. \en Constructor of curve on surface. - MbSurfaceCurve( const MbSurface &, const MbCurve &, bool sameCurve, MbRegDuplicate * iReg = NULL ); + MbSurfaceCurve( const MbSurface &, const MbCurve &, bool sameCurve, MbRegDuplicate * iReg = c3d_null ); /// \ru Конструктор отрезка прямой на поверхности. \en Constructor of a line segment on surface. MbSurfaceCurve( const MbSurface &, const MbCartPoint & p0, const MbCartPoint & p1, MbePlaneType type = pt_Curve ); /// \ru Конструктор граничной кривой поверхности. \en Constructor of boundary curve of surface. @@ -131,15 +131,15 @@ public: virtual MbeSpaceType IsA() const; // \ru Дать тип элемента. \en Get element type. virtual MbeSpaceType Type() const; // \ru Дать тип элемента. \en Get element type. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. /// \ru Копия кривой с той же поверхностью. \en Copy of curve with the same surface. MbSurfaceCurve & CurvesDuplicate() const; virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Определить, являются ли объекты одинаковыми. \en Determine whether objects are equal. virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным. \en Make equal. virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Определить, являются ли объекты подобными. \en Determine whether the objects are similar. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвинуть вдоль вектора. \en Move along a vector. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate about an axis. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвинуть вдоль вектора. \en Move along a vector. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate about an axis. virtual void AddYourGabaritTo( MbCube & r ) const; // \ru Добавить свой габарит в куб. \en Add your own bounding box into a cube. virtual void Refresh(); // \ru Сбросить все временные данные. \en Reset all temporary data. virtual void PrepareIntegralData( const bool forced ) const; // \ru Рассчитать временные (mutable) данные объекта. \en Calculate temporary (mutable) data of an object. @@ -180,16 +180,16 @@ public: virtual MbCurve3D * Trimmed( double t1, double t2, int sense ) const; // \ru Создать усеченную кривую. \en Create a trimmed curve // \ru Вычислить ближайшую проекцию точки на кривую. \en Calculate the nearest projection of a point onto the curve. - virtual bool NearPointProjection( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = NULL ) const; - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление. \en Change the direction. + virtual bool NearPointProjection( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = c3d_null ) const; + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление. \en Change the direction. virtual double Step ( double t, double sag ) const; // \ru Вычисление шага по стрелке прогиба. \en Calculation of parameter step by the sag. virtual double DeviationStep( double t, double angle ) const; // \ru Вычисление шага по углу отклонения нормали. \en Calculation of parameter step by the deviation angle. void SetTesselation( const MbContourOnSurface & contour, size_t indSegment ); // \ru Установить разбиение из контура. \en Set tessellation from contour. virtual double MetricStep ( double t, double length ) const; // \ru Вычисление шага параметра по длине. \en Calculation of parameter step by the given length. - virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = NULL, - VERSION version = Math::DefaultMathVersion(), bool * coincParams = NULL ) const; // \ru Дать плоскую проекцию кривой. \en Get a planar projection of a curve. + virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = c3d_null, + VERSION version = Math::DefaultMathVersion(), bool * coincParams = c3d_null ) const; // \ru Дать плоскую проекцию кривой. \en Get a planar projection of a curve. /// \ru Вычислить плоскую проекцию кривой в частных случаях. \en Calculate planar projection of a curve in special cases. MbCurve * GetParticularMap( const MbMatrix3D & into, MbRect1D * pRgn, VERSION version ) const; @@ -197,7 +197,7 @@ public: virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Определить, является ли линия прямолинейной. \en Determine whether the line is straight. virtual void ChangeCarrier ( const MbSpaceItem & item, MbSpaceItem & init ); // \ru Изменить носитель. \en Change the carrier. virtual bool ChangeCarrierBorne( const MbSpaceItem &, MbSpaceItem &, const MbMatrix & matr ); // \ru Изменить носимые элементы. \en Change a carrier elements. - virtual bool IsPlanar() const; // \ru Определить, является ли кривая плоской. Прямолинейные кривые являются плоскими, но без определённой ЛСК. \en Determine whether the curve is planar. Straight lines is planar but without certain placement. + virtual bool IsPlanar( double accuracy = METRIC_EPSILON ) const; // \ru Определить, является ли кривая плоской. Прямолинейные кривые являются плоскими, но без определённой ЛСК. \en Determine whether the curve is planar. Straight lines is planar but without certain placement. virtual bool IsSmoothConnected( double angleEps ) const; // \ru Определить, являются ли стыки контура\кривой гладкими. \en Determine whether the joints of contour\curve are smooth. virtual void CalculateGabarit( MbCube & ) const; // \ru Вычислить габарит кривой. \en Calculate bounding box of a curve. virtual double GetMetricLength() const; // \ru Вычислить метрическую длину кривой. \en Calculate the metric length of a curve. @@ -210,11 +210,11 @@ public: // \ru Вычислить ближайшую точку кривой к плейсменту. \en Calculate the curve point nearest to a placement. virtual double DistanceToPlace( const MbPlacement3D & place, double & t0, double & angle ) const; // \ru Дать плоскую кривую и плейсмент, если пространственная кривая плоская (после использования вызывать DeleteItem на двумерную кривую). \en Get the planar curve and placement if the spatial curve is planar (call DeleteItem for two-dimensional curve after using ). - virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place3d, bool saveParams, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place3d, bool saveParams, PlanarCheckParams params = PlanarCheckParams() ) const; // \ru Дать поверхностную кривую, если пространственная кривая поверхностная (после использования вызывать DeleteItem на аргументы). \en Get a surface curve if a spatial curve is on a surface (call DeleteItem for arguments after use). virtual bool GetSurfaceCurve( MbCurve *& curve2d, MbSurface *& surface, VERSION version = Math::DefaultMathVersion() ) const; // \ru Заполнить плейсмент, если кривая плоская. \en Fill the placement if the curve is planar. - virtual bool GetPlacement( MbPlacement3D & place, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlacement( MbPlacement3D & place, PlanarCheckParams params = PlanarCheckParams() ) const; /// \ru Дать тип кривой. \en Get type of curve. virtual MbeCurveBuildType GetBuildType() const; @@ -242,7 +242,7 @@ public: /// \en Get the boundaries of the curve sections that are described by one analytical function. \~ virtual void GetAnalyticalFunctionsBounds( std::vector & params ) const; - virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = NULL, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? + virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = c3d_null, double epsilon = EPSILON ) const; // \ru Непрерывна ли первая производная? \en Have the first derivative the continuous? // \ru Устранить разрывы первых производных по длине. \en Eliminate the discontinuities of the first derivative at length. virtual bool SetContinuousDerivativeLength( VERSION version, double epsilon = EPSILON ); diff --git a/C3d/Include/cur_surface_intersection.h b/C3d/Include/cur_surface_intersection.h index 0899832..96cd261 100644 --- a/C3d/Include/cur_surface_intersection.h +++ b/C3d/Include/cur_surface_intersection.h @@ -114,12 +114,33 @@ namespace c3d // namespace C3D // --- class MATH_CLASS MbSurfaceIntersectionCurve : public MbCurve3D { private : + + //------------------------------------------------------------------------------ + /** \brief \ru Кэш для пространственной аппроксимационной кривой. + \en Cache for the spatial approximating curve. \~ + \details \ru Кэш служит для потокобезопасности операций с аппроксимационной кривой. + \en The cache is used for thread-safety of operations with the approximating curve. \n \~ + */ + // --- + struct SpaceCurveAuxiliaryData : public AuxiliaryData + { + MbCurve3D * spaceCurve; ///< \ru Пространственная аппроксимационная кривая. \en The spatial approximating curve. \~ + SpaceCurveAuxiliaryData() : spaceCurve( c3d_null ) {} + SpaceCurveAuxiliaryData( const SpaceCurveAuxiliaryData & c ) : spaceCurve( c3d_null ) { + if ( c.spaceCurve != c3d_null ) { + spaceCurve = static_cast( &c.spaceCurve->Duplicate() ); + spaceCurve->AddRef(); + } + } + ~SpaceCurveAuxiliaryData() { ::ReleaseItem( spaceCurve ); } + }; + mutable CacheManager spaceCurveCache; ///< \ru Кэш пространственной аппроксимационной кривой. \en Cache of a spatial approximating curve. \~ + MbSurfaceCurve curveOne; ///< \ru Кривая на первой поверхности. \en Curve on the first surface. MbSurfaceCurve curveTwo; ///< \ru Кривая на второй поверхности. \en Curve on the second surface. MbeCurveBuildType buildType; ///< \ru Тип кривой по построению. \en A curve type by construction. mutable MbeCurveGlueType glueType; ///< \ru Тип кривой по топологии. \en A curve type by topology. - mutable MbCurve3D * spaceCurve; ///< \ru Пространственная аппроксимационная кривая. \en The spatial approximating curve. \~ mutable double tolerance; ///< \ru Погрешность построения кривой. \en The tolerance of curve construction. \~ mutable MbCube cube; ///< \ru Габаритный куб кривой. \en Bounding box of a curve. \~ mutable double metricLength; ///< \ru Метрическая длина кривой. \en Metric length of a curve. \~ @@ -146,7 +167,7 @@ private : MbIntersectionCurveAuxiliaryData(); MbIntersectionCurveAuxiliaryData( const MbIntersectionCurveAuxiliaryData & ); - virtual ~MbIntersectionCurveAuxiliaryData(); + virtual ~MbIntersectionCurveAuxiliaryData() {} void Init(); void Init( const MbIntersectionCurveAuxiliaryData & ); @@ -180,7 +201,7 @@ public : MbSurfaceIntersectionCurve( const MbSurface & surf1, const MbCurve & curve1, const MbSurface & surf2, const MbCurve & curve2, MbeCurveBuildType buildType, bool sameOne, bool sameTwo, - MbRegDuplicate * iReg = NULL ); + MbRegDuplicate * iReg = c3d_null ); /** \brief \ru Конструктор по поверхностям и двумерным точкам. \en Constructor by surfaces and two-dimensional points. \~ \details \ru Конструктор кривой пересечения по поверхностям и двумерным точкам. \n @@ -284,15 +305,15 @@ public: \{ */ virtual MbeSpaceType IsA() const; // \ru Дать тип элемента. \en Get element type. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. /// \ru Сделать копию кривой на тех же поверхностях. \en Create a copy of a curve on the same surfaces. - MbSurfaceIntersectionCurve & CurvesDuplicate() const; + MbSurfaceIntersectionCurve & CurvesDuplicate() const { return *new MbSurfaceIntersectionCurve( this ); } virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Определить, равны ли объекты. \en Determine whether the objects are equal. virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным. \en Make equal. virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Определить, являются ли объекты подобными. \en Determine whether the objects are similar. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвинуть вдоль вектора. \en Move along a vector. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate about an axis. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвинуть вдоль вектора. \en Move along a vector. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate about an axis. virtual void AddYourGabaritTo( MbCube & r ) const; // \ru Добавить свой габарит в куб. \en Add your own bounding box into a cube. virtual void CalculateMesh( const MbStepData & stepData, const MbFormNote & note, MbMesh & mesh ) const; // \ru Построить полигональную копию mesh. \en Build polygonal copy mesh. virtual void Refresh(); // \ru Сбросить все временные данные. \en Reset all temporary data. @@ -330,7 +351,7 @@ public: // \ru Функции приближённого быстрого вычисления точки и производных на кривой. \en Functions of approximate fast calculation of point and derivatives on the curve. virtual void FastApproxExplore( double & t, MbCartPoint3D & pnt, MbVector3D & fir, MbVector3D * sec ) const; - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление. \en Change the direction. + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление. \en Change the direction. // \ru Функции движения по кривой. \en Functions of moving along the curve. // \ru Вычислить шаг параметра по величине прогиба кривой. \en Calculate step of parameter by value of sag of curve. @@ -377,8 +398,8 @@ public: virtual void CalculatePolygon( const MbStepData & stepData, MbPolygon3D &polygon ) const; // \ru Рассчитать полигон. \en Calculate a polygon. // \ru Построить плоскую проекцию некоторой части пространственной кривой. \en Construct a planar projection of a piece of a space curve. - virtual MbCurve * GetMap( const MbMatrix3D & into, MbRect1D * pRegion = NULL, - VERSION version = Math::DefaultMathVersion(), bool * coincParams = NULL ) const; + virtual MbCurve * GetMap( const MbMatrix3D & into, MbRect1D * pRegion = c3d_null, + VERSION version = Math::DefaultMathVersion(), bool * coincParams = c3d_null ) const; // \ru Дать проекцию ребра на плоскость. \en Get the edge projection onto plane. virtual MbCurve * GetProjection( const MbPlacement3D & place, VERSION version ) const; @@ -388,14 +409,14 @@ public: virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Определить, является ли линия прямолинейной. \en Determine whether the line is straight. virtual void ChangeCarrier ( const MbSpaceItem & item, MbSpaceItem & init ); // \ru Изменить носитель. \en Change the carrier. virtual bool ChangeCarrierBorne( const MbSpaceItem & item, MbSpaceItem & init, const MbMatrix & matr ); // \ru Изменение носимые элементы. \en Change a carrier elements. - virtual bool IsPlanar() const; // \ru Определить, является ли кривая плоской. \en Determine whether the curve is planar. + virtual bool IsPlanar( double accuracy = METRIC_EPSILON ) const; // \ru Определить, является ли кривая плоской. \en Determine whether the curve is planar. virtual bool IsSmoothConnected( double angleEps ) const; // \ru Определить, являются ли стыки контура\кривой гладкими. \en Determine whether the joints of contour\curve are smooth. virtual double DistanceToPlace( const MbPlacement3D & place, double & t0, double & angle ) const; // \ru Вычислить ближайшую точку кривой к плейсменту. \en Calculate the curve point nearest to a placement. // \ru Дать плоскую кривую и плейсмент, если пространственная кривая плоская (после использования вызывать DeleteItem на двумерную кривую). \en Get the planar curve and placement if the spatial curve is planar (call DeleteItem for two-dimensional curve after using ). - virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place3d, bool saveParams, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place3d, bool saveParams, PlanarCheckParams params = PlanarCheckParams() ) const; // \ru Заполнить плейсмент, если кривая плоская. \en Fill the placement if the curve is planar. - virtual bool GetPlacement( MbPlacement3D & place, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlacement( MbPlacement3D & place, PlanarCheckParams params = PlanarCheckParams() ) const; // \ru Дать поверхностную кривую, если пространственная кривая поверхностная (после использования вызывать DeleteItem на аргументы). \en Get a surface curve if a spatial curve is on a surface (call DeleteItem for arguments after use). virtual bool GetSurfaceCurve( MbCurve *& curve2d, MbSurface *& surface, VERSION version = Math::DefaultMathVersion() ) const; @@ -645,7 +666,7 @@ public: /// \ru Дать точную пространственную копию или себя. \en Get exact spatial copy or itself. const MbCurve3D & GetExactCurve( bool saveParams = true ) const; /// \ru Удалить пространственную кривую. \en Remove a spatial curve. - void ReleaseSpaceCurve(); + void ReleaseSpaceCurve() const; /// \ru Разрезать кривую пересечения на три части по заданным параметрам и вернуть одну из крайних частей в зависимости от sense. \en Cutaway an intersection curve into three pieces by given parameters and return one of end pieces depending on 'sense'. MbSurfaceIntersectionCurve * BreakWithGap( double tt, double ttP, bool sense ); // \ru Используется в конвертерах. \en Used in converters. @@ -682,7 +703,7 @@ private: // \ru Вычислить толерантность кривой. \en Calculate tolerance of the curve. void CalculateTolerance() const; // \ru Создать пространственную кривую по проекционной кривой. \en Create a spatial curve from a projection curve. - void TryProjection() const; + bool TryProjection() const; // \ru Создать явную пространственную кривую. \en Create an explicit spatial curve. bool CreateSpaceCurve( VERSION version = Math::DefaultMathVersion() ) const; // \ru Создать аппроксимационную кривую по кривой пересечения \en Create an approximating curve by an intersection curve @@ -742,9 +763,14 @@ inline bool MbSurfaceIntersectionCurve::CopyReadyMutable( const MbSurfaceInterse cube = s.cube; changed = true; } - if ( spaceCurve == NULL && s.spaceCurve != NULL ) { - spaceCurve = (MbCurve3D *)&s.spaceCurve->Duplicate(); - spaceCurve->AddRef(); + MbCurve3D * sspaceCurve = s.spaceCurveCache()->spaceCurve; + if ( sspaceCurve != c3d_null && spaceCurveCache.LongTerm()->spaceCurve == c3d_null ) { + { + ScopedLock cacheLock( spaceCurveCache.GetLock() ); + spaceCurveCache.LongTerm()->spaceCurve = (MbCurve3D *)&sspaceCurve->Duplicate(); + } + spaceCurveCache.LongTerm()->spaceCurve->AddRef(); + spaceCurveCache.Reset(); changed = true; } @@ -809,5 +835,66 @@ inline void MbSurfaceIntersectionCurve::GetFirstDer( double & t, MbVector3D & fd fd.Set( vect1, 0.5, vect2, 0.5 ); } +//------------------------------------------------------------------------------ +// \ru Конструктор вспомогательных данных. \en Auxiliary data constructor. +// --- +inline MbSurfaceIntersectionCurve::MbIntersectionCurveAuxiliaryData::MbIntersectionCurveAuxiliaryData() + : AuxiliaryData() + , t( UNDEFINED_DBL ) + , res( false ) + , uv1( UNDEFINED_DBL, 0 ) + , uv2( UNDEFINED_DBL, 0 ) + , pnt( UNDEFINED_DBL, 0, 0 ) + , fder( UNDEFINED_DBL, 0, 0 ) + , sder( UNDEFINED_DBL, 0, 0 ) + , tder( UNDEFINED_DBL, 0, 0 ) +{ +} + +//------------------------------------------------------------------------------ +// \ru Конструктор копирования вспомогательных данных. \en Copy constructor of auxiliary data. +// --- +inline MbSurfaceIntersectionCurve::MbIntersectionCurveAuxiliaryData::MbIntersectionCurveAuxiliaryData( const MbIntersectionCurveAuxiliaryData & init ) + : AuxiliaryData() + , t( init.t ) + , res( init.res ) + , uv1( init.uv1 ) + , uv2( init.uv2 ) + , pnt( init.pnt ) + , fder( init.fder ) + , sder( init.sder ) + , tder( init.tder ) +{ +} + +//------------------------------------------------------------------------------ +// \ru Инициализация вспомогательных данных. \en Initialization of auxiliary data. +// --- +inline void MbSurfaceIntersectionCurve::MbIntersectionCurveAuxiliaryData::Init() +{ + t = UNDEFINED_DBL; + res = false; + uv1.Init( UNDEFINED_DBL, 0 ); + uv2.Init( UNDEFINED_DBL, 0 ); + pnt.Init( UNDEFINED_DBL, 0, 0 ); + fder.Init( UNDEFINED_DBL, 0, 0 ); + sder.Init( UNDEFINED_DBL, 0, 0 ); + tder.Init( UNDEFINED_DBL, 0, 0 ); +} + +//------------------------------------------------------------------------------ +// \ru Инициализация вспомогательных данных. \en Initialization of auxiliary data. +// --- +inline void MbSurfaceIntersectionCurve::MbIntersectionCurveAuxiliaryData::Init( const MbIntersectionCurveAuxiliaryData & init ) +{ + t = init.t; + res = init.res; + uv1.Init( init.uv1 ); + uv2.Init( init.uv2 ); + pnt.Init( init.pnt ); + fder.Init( init.fder ); + sder.Init( init.sder ); + tder.Init( init.tder ); +} #endif // __CUR_SURFACE_INTERSECTION_H diff --git a/C3d/Include/cur_trimmed_curve.h b/C3d/Include/cur_trimmed_curve.h index e981bf8..c9921b2 100644 --- a/C3d/Include/cur_trimmed_curve.h +++ b/C3d/Include/cur_trimmed_curve.h @@ -42,7 +42,7 @@ class MbRegTransform; class MATH_CLASS MbTrimmedCurve : public MbCurve { // \ru Усечение может быть на продолжении кривой (внесенные изменения помечены как E13865) \en Trimming can be on curve extension (made changes are marked as E13865) protected : - MbCurve * basisCurve; ///< \ru Базовая кривая (не может быть NULL). \en Base curve (can't be NULL). + MbCurve * basisCurve; ///< \ru Базовая кривая (не может быть c3d_null). \en Base curve (can't be c3d_null). double trim1; ///< \ru Параметры начальной точки \en Parameters of start point double trim2; ///< \ru Параметры конечной точки \en Parameters of end point int sense; ///< \ru Флаг совпадения направления с направлением базовой кривой (sense==0 не допускается) \en Flag of coincidence of the direction with the direction of the base curve (sense==0 isn't allowed) @@ -75,10 +75,10 @@ public : virtual bool IsSimilar( const MbPlaneItem & ) const; // \ru Являются ли элементы подобными \en Whether the elements are similar virtual bool SetEqual ( const MbPlaneItem & ); // \ru Сделать элементы равными \en Make the elements equal virtual bool IsSame ( const MbPlaneItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли кривая curve копией данной кривой ? \en Whether curve 'curve' is a duplicate of the current curve. - virtual void Transform( const MbMatrix &, MbRegTransform * ireg = NULL, const MbSurface * newSurface = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector &, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Поворот \en Rotation - virtual MbPlaneItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual void Transform( const MbMatrix &, MbRegTransform * ireg = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector &, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Поворот \en Rotation + virtual MbPlaneItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual void AddYourGabaritTo( MbRect & ) const; // \ru Добавь свой габарит в прямой прям-к \en Add your own gabarit into the given bounding rectangle virtual void CalculateGabarit( MbRect & ) const; // \ru Определить габаритный прямоугольник кривой. \en Detect the bounding box of a curve. virtual bool IsInRectForDeform( const MbRect & r ) const; // \ru Виден ли объект в заданном прямоугольнике для деформации \en Whether the object is visible in the given rectangle for deformation @@ -189,7 +189,7 @@ public : void SetTrim1( double t ) { trim1 = t; InitParam( trim1, trim2, sense ); } void SetTrim2( double t ) { trim2 = t; InitParam( trim1, trim2, sense ); } - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление кривой \en Change direction of a curve + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление кривой \en Change direction of a curve virtual bool GetAxisPoint( MbCartPoint & p ) const; // \ru Точка для построения оси \en Point for the axis construction virtual bool IsSimilarToCurve( const MbCurve & curve, double precision = PARAM_PRECISION ) const; // \ru Подобные ли кривые для объединения (слива) \en Whether the curves for union (joining) are similar virtual double GetRadius() const; // \ru Дать физический радиус объекта или ноль, если это невозможно. \en Get the physical radius of the object or null if it impossible. diff --git a/C3d/Include/cur_trimmed_curve3d.h b/C3d/Include/cur_trimmed_curve3d.h index a8dcdfd..651c99a 100644 --- a/C3d/Include/cur_trimmed_curve3d.h +++ b/C3d/Include/cur_trimmed_curve3d.h @@ -59,13 +59,13 @@ public : // \ru Общие функции математического объекта \en Common functions of the mathematical object virtual MbeSpaceType IsA() const; // \ru Тип элемента \en Type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли объект копией \en Whether the object is a copy virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным \en Make equal virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными \en Whether the objects are similar - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual void Refresh(); // \ru Сбросить все временные данные \en Reset all temporary data virtual void PrepareIntegralData( const bool forced ) const; // \ru Рассчитать временные (mutable) данные объекта. \en Calculate temporary (mutable) data of an object. @@ -104,18 +104,18 @@ public : virtual MbCurve3D & SetBasisCurve(); virtual MbCurve3D * Trimmed( double t1, double t2, int sense ) const; // \ru Создание усеченной кривой \en Create a trimmed curve - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual double Curvature ( double ) const; // \ru Кривизна усеченной кривой \en Curvature of a trimmed curve virtual double Step ( double t, double sag ) const; // \ru Вычисление шага по стрелке прогиба. \en Calculation of parameter step by the sag. virtual double DeviationStep( double t, double angle ) const; // \ru Вычисление шага по углу отклонения нормали. \en Calculation of parameter step by the deviation angle. virtual double MetricStep ( double t, double length ) const; // \ru Вычисление шага параметра по длине. \en Calculation of parameter step by the given length. virtual bool IsDegenerate( double eps = METRIC_PRECISION ) const; // \ru Проверка вырожденности кривой \en Check for curve degeneracy - virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = NULL, - VERSION version = Math::DefaultMathVersion(), bool * coincParams = NULL ) const; // \ru Дать плоскую проекцию кривой \en Get a planar projection of a curve + virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = c3d_null, + VERSION version = Math::DefaultMathVersion(), bool * coincParams = c3d_null ) const; // \ru Дать плоскую проекцию кривой \en Get a planar projection of a curve virtual size_t GetCount() const; virtual void ChangeCarrier( const MbSpaceItem & item, MbSpaceItem & init ); // \ru Изменение носителя \en Change a carrier - virtual bool IsPlanar () const; // \ru Является ли кривая плоской \en Whether the curve is planar + virtual bool IsPlanar ( double accuracy = METRIC_EPSILON ) const; // \ru Является ли кривая плоской \en Whether the curve is planar virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Является ли линия прямолинейной \en Whether the line is straight virtual double GetRadius() const; // \ru Дать физический радиус объекта или ноль, если это невозможно. \en Get the physical radius of the object or null if it impossible. virtual bool GetCircleAxis ( MbAxis3D & ) const; // \ru Дать ось кривой \en Get axis of curve @@ -137,7 +137,7 @@ public : bool IsBaseParamOn( double t ) const; // \ru Находится ли параметр базовой кривой в диапазоне усеченной кривой \en Whether the parameter of base curve is in range of a trimmed curve // \ru Ближайшая проекция точки на кривую. \en The nearest projection of a point onto the curve. - virtual bool NearPointProjection( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = NULL ) const; // \ru Ближайшая проекция точки на кривую \en The nearest projection of a point onto the curve + virtual bool NearPointProjection( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = c3d_null ) const; // \ru Ближайшая проекция точки на кривую \en The nearest projection of a point onto the curve /// \ru Найти все особые точки функции кривизны кривой. /// \en Find all the special points of the curvature function of the curve. virtual void GetCurvatureSpecialPoints( std::vector & points ) const; @@ -153,9 +153,9 @@ public : virtual void CurveToSubstrate( double & ) const; // \ru Преобразовать параметр кривой в параметр подложки \en Transform a curve parameter to the substrate parameter // \ru Заполнить плейсемент, ести кривая плоская \en Fill the placement if the curve is planar - virtual bool GetPlacement( MbPlacement3D & place, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlacement( MbPlacement3D & place, PlanarCheckParams params = PlanarCheckParams() ) const; // \ru Дать плоскую кривую и плейсмент, если пространственная кривая плоская (после использования вызывать DeleteItem на двумерную кривую) \en Get the planar curve and placement if the spatial curve is planar (call DeleteItem for two-dimensional curve after using) - virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, PlanarCheckParams params = PlanarCheckParams() ) const; // \ru Дать поверхностную кривую, если пространственная кривая поверхностная (после использования вызывать DeleteItem на аргументы) \en Get a surface curve if a spatial curve is on a surface (call DeleteItem for arguments after using ) virtual bool GetSurfaceCurve( MbCurve *& curve2d, MbSurface *& surface, VERSION version = Math::DefaultMathVersion() ) const; diff --git a/C3d/Include/curve.h b/C3d/Include/curve.h index 7c6659f..9203c64 100644 --- a/C3d/Include/curve.h +++ b/C3d/Include/curve.h @@ -61,15 +61,19 @@ typedef std::vector ConstPlaneCurvesSPtrVector; для плоского моделирования,\n для описания области определения параметров поверхности,\n для построения кривых на поверхностях,\n - для построения кривых пересечения поверхностей. + для построения кривых пересечения поверхностей.\n + Нормаль к кривой - это перпендикуляр к касательной. \n + Для вычисления направления нормали с учётом кривизны нужно умножить нормаль на знак кривизны. \en A curve in two-dimensional space is a vector function of a scalar parameter, given on a finite one-dimensional space. A curve is continuous mapping of some piece of numeric axis to two-dimensional space.\n - Two-dimensional curve is used:\n - for planar modeling,\n - for description of surface parameters domain,\n - for construction of curves on surfaces,\n - for constructing of surfaces intersection curves. \~ + Two-dimensional curve is used: \n + for planar modeling, \n + for description of surface parameters domain, \n + for construction of curves on surfaces, \n + for constructing of surfaces intersection curves. \n + Normal vector to a curve is perpendicular to tangent. \n + To calculate the direction of normal according curvature, multiply this normal vector by the curvature sign. \~ \ingroup Curves_2D */ // --- @@ -94,10 +98,10 @@ public : virtual MbePlaneType IsA() const = 0; // \ru Тип элемента. \en A type of element. virtual MbePlaneType Type() const; // \ru Групповой тип элемента. \en Group element type. virtual MbePlaneType Family() const; // \ru Семейство объекта. \en Family of object. - virtual MbPlaneItem & Duplicate( MbRegDuplicate * = NULL ) const = 0; // \ru Создать копию. \en Create a copy. - virtual void Transform( const MbMatrix &, MbRegTransform * ireg = NULL, const MbSurface * newSurface = NULL ) = 0; // \ru Преобразовать согласно матрице. \en Transform according to the matrix. - virtual void Move ( const MbVector &, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ) = 0; // \ru Сдвинуть вдоль вектора. \en Move along a vector. - virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ) = 0; // \ru Поворот вокруг точки на угол. \en Rotation at angle around a point. + virtual MbPlaneItem & Duplicate( MbRegDuplicate * = c3d_null ) const = 0; // \ru Создать копию. \en Create a copy. + virtual void Transform( const MbMatrix &, MbRegTransform * ireg = c3d_null, const MbSurface * newSurface = c3d_null ) = 0; // \ru Преобразовать согласно матрице. \en Transform according to the matrix. + virtual void Move ( const MbVector &, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ) = 0; // \ru Сдвинуть вдоль вектора. \en Move along a vector. + virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ) = 0; // \ru Поворот вокруг точки на угол. \en Rotation at angle around a point. virtual bool SetEqual( const MbPlaneItem & ) = 0; // \ru Сделать объект равным данному. \en Make an object equal to a given one. virtual bool IsSame( const MbPlaneItem & other, double accuracy = LENGTH_EPSILON ) const = 0; // \ru Является ли кривая curve копией данной кривой? \en Is a curve a copy of a given curve? virtual void Refresh(); // \ru Сбросить все временные данные. \en Reset all temporary data. @@ -331,9 +335,9 @@ public : \param[out] fir - \ru Производная. \en Derivative with respect to t. \~ \param[out] sec - \ru Вторая производная по t, если не ноль. - \en Second derivative with respect to t, if not NULL. \~ + \en Second derivative with respect to t, if not c3d_null. \~ \param[out] thir - \ru Третья производная по t, если не ноль. - \en Third derivative with respect to t, if not NULL. \~ + \en Third derivative with respect to t, if not c3d_null. \~ \ingroup Curves_3D */ virtual void Explore( double & t, bool ext, @@ -472,7 +476,7 @@ public : /// \ru Сбросить текущее значение параметра. \en Reset the current value of parameter. virtual void ResetTCalc() const; /// \ru Изменить направления кривой на противоположное. \en Set the opposite direction of curve. - virtual void Inverse( MbRegTransform * iReg = NULL ) = 0; + virtual void Inverse( MbRegTransform * iReg = c3d_null ) = 0; /// \ru Построить эквидистантную кривую, смещённую на заданное расстояние. \en Construct the equidistant curve which is shifted by the given value. virtual MbCurve * Offset( double rad ) const; @@ -545,10 +549,10 @@ public : \en A constructed NURBS-curve. \~ \param[in] nInfo - \ru Параметры преобразования кривой в NURBS. \en Parameters of conversion of a curve to NURBS. \~ - \result \ru Построенная NURBS кривая или NULL при неуспешном построении. - \en The constructed NURBS curve or NULL in a case of failure. \~ + \result \ru Построенная NURBS кривая или c3d_null при неуспешном построении. + \en The constructed NURBS curve or c3d_null in a case of failure. \~ */ - MbNurbs * NurbsCurve( const MbCurveIntoNurbsInfo * nInfo = NULL ) const; + MbNurbs * NurbsCurve( const MbCurveIntoNurbsInfo * nInfo = c3d_null ) const; /** \brief \ru Построить NURBS копию кривой. \en Construct a NURBS copy of a curve. \~ @@ -570,8 +574,8 @@ public : 'sense' > 0 - direction coincide. \~ \param[in] nInfo - \ru Параметры преобразования кривой в NURBS. \en Parameters of conversion of a curve to NURBS. \~ - \result \ru Построенная NURBS кривая или NULL при неуспешном построении. - \en The constructed NURBS curve or NULL in a case of failure. \~ + \result \ru Построенная NURBS кривая или c3d_null при неуспешном построении. + \en The constructed NURBS curve or c3d_null in a case of failure. \~ */ virtual MbNurbs * NurbsCurve( const MbCurveIntoNurbsInfo & nInfo ) const = 0; @@ -585,8 +589,8 @@ public : If the flag of accurate approximation is not set in parameters then NURBS without multiple knots is constructed. \~ \param[in] tParameters - \ru Параметры построения NURBS копии кривой. \en Parameters for the construction of a NURBS copy of the curve. \~ - \result \ru Построенная NURBS кривая или NULL при неуспешном построении. - \en The constructed NURBS curve or NULL in a case of failure. \~ + \result \ru Построенная NURBS кривая или c3d_null при неуспешном построении. + \en The constructed NURBS curve or c3d_null in a case of failure. \~ */ virtual MbCurve * NurbsCurve( const MbNurbsParameters & tParameters ) const; @@ -703,10 +707,10 @@ public : \en End parameter of trimming. \~ \param[in, out] part2 - \ru Может заполниться результатом усечения, если не смогли изменить саму кривую. В этом случае возвращаемый результат dp_Degenerated. - Иначе = NULL. + Иначе = c3d_null. \en This may be filled by a result of trimming if the curve was not changed. In this case the returned value is dp_Degenerated. - Otherwise NULL is returned. \~ + Otherwise c3d_null is returned. \~ \result \ru Состояние кривой после модификации:\n dp_Degenerated - кривая выродилась, может быть три варианта: кривая не была изменена, так как в результате преобразования она бы выродилась, @@ -798,7 +802,7 @@ public : \en True - if there is found a projection which satisfies to all input conditions. \~ */ virtual bool NearPointProjection( const MbCartPoint & pnt, double xEpsilon, double yEpsilon, - double & t, bool ext, MbRect1D * tRange = NULL ) const; + double & t, bool ext, MbRect1D * tRange = c3d_null ) const; /** \brief \ru Вычислить проекцию точки на кривую. \en Calculate the point projection to the curve. \~ @@ -1046,7 +1050,7 @@ public : \en A length of a curve between points. \~ */ virtual double LengthBetween2Points( MbCartPoint & p1, MbCartPoint & p2, - MbCartPoint * pc = NULL ) const; + MbCartPoint * pc = c3d_null ) const; /// \ru Вычислить центр тяжести кривой. \en Calculate the center of gravity of a curve. virtual bool GetWeightCentre ( MbCartPoint & ) const; @@ -1263,7 +1267,7 @@ public : \param[in] epsilon - \ru Погрешность вычисления. \en The accuracy of the calculation. \~ */ - virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = NULL, double epsilon = EPSILON ) const; + virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = c3d_null, double epsilon = EPSILON ) const; /** \brief \ru Устранить разрывы первых производных по длине. \en Eliminate the discontinuities of the first derivative at length. @@ -1431,7 +1435,7 @@ inline void MbCurve::Normal( double & t, MbVector & v ) const //------------------------------------------------------------------------------ // \ru Вычислить нормальный вектор. \en Calculate the normal vector. // --- -inline void MbCurve::Normal( double &t, MbDirection &norm ) const { +inline void MbCurve::Normal( double & t, MbDirection & norm ) const { Tangent( t, norm ); norm.Perpendicular(); } diff --git a/C3d/Include/curve3d.h b/C3d/Include/curve3d.h index 60f3190..e4266a0 100644 --- a/C3d/Include/curve3d.h +++ b/C3d/Include/curve3d.h @@ -69,12 +69,18 @@ typedef std::pair ConstSpaceCurvesSetRet; принимающего значения на конечной одномерной области. Координаты точки кривой являются однозначными непрерывными функциями параметра кривой. Кривая представляет собой непрерывное отображение некоторого участка числовой оси в трёхмерное пространство.\n - Кривые используются для построения поверхностей. + Кривые используются для построения поверхностей. \n + Нормаль к кривой вычисляется с учетом кривизны (второй производной). \n + Для прямолинейных кривых это вектор нулевой за исключением плоских прямолинейных кривых, + где он перпендикулярен нормали плоскости этой кривой. \en A curve in space is a vector function of a scalar parameter, which is set on a finite one-dimensional space. Coordinates of the point are single-valued continuous functions of curve parameter. A curve is continuous mapping from a piece of numeric axis to the three-dimensional space.\n - Curves are used to construct surfaces. \~ + Curves are used to construct surfaces. \n + Normal to a curve is calculated taking into account curvature (second derivative). \n + For rectilinear curves it's a zero vector except for flat rectilinear curves, + where it's perpendicular to a normal of curve plane. \~ \ingroup Curves_3D */ // --- @@ -101,14 +107,14 @@ public : virtual MbeSpaceType IsA() const = 0; // \ru Тип элемента. \en A type of element. virtual MbeSpaceType Type() const; // \ru Групповой тип элемента. \en Group element type. virtual MbeSpaceType Family() const; // \ru Семейство объекта. \en Family of object. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const = 0; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const = 0; // \ru Сделать копию элемента. \en Create a copy of the element. /// \ru Сделать копию с измененным направлением. \en Create a copy with changed direction. virtual MbCurve3D & InverseDuplicate() const; virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const = 0; // \ru Являются ли объекты равными. \en Determine whether objects are equal. virtual bool SetEqual ( const MbSpaceItem & ) = 0; // \ru Сделать равным. \en Make equal. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ) = 0; // \ru Преобразовать объект согласно матрице. \en Transform an object according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ) = 0; // \ru Сдвинуть объект вдоль вектора. \en Move an object along a vector. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ) = 0; // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ) = 0; // \ru Преобразовать объект согласно матрице. \en Transform an object according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ) = 0; // \ru Сдвинуть объект вдоль вектора. \en Move an object along a vector. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ) = 0; // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual double DistanceToPoint( const MbCartPoint3D & ) const; // \ru Вычислить расстояние до точки. \en Calculate the distance to a point. virtual void AddYourGabaritTo( MbCube & ) const; // \ru Добавить габарит кривой в куб. \en Add a bounding box of a curve to a cube. /// \ru Перевести все временные (mutable) данные объекта в неопределённое (исходное) состояние. \en Translate all the time (mutable) data objects in an inconsistent (initial) state. @@ -256,9 +262,9 @@ public : \param[out] fir - \ru Производная. \en Derivative with respect to t. \~ \param[out] sec - \ru Вторая производная по t, если не ноль. - \en Second derivative with respect to t, if not NULL. \~ + \en Second derivative with respect to t, if not c3d_null. \~ \param[out] thir - \ru Третья производная по t, если не ноль. - \en Third derivative with respect to t, if not NULL. \~ + \en Third derivative with respect to t, if not c3d_null. \~ \ingroup Curves_3D */ virtual void Explore( double & t, bool ext, @@ -267,9 +273,9 @@ public : /** \brief \ru Вычислить точку и производные на кривой. \en Calculate point and derivatives on the curve. \~ \details \ru Функция перегружена у MbSurfaceIntersectionCurve и MbSilhouetteCurve для приближённого быстрого вычисления точки и производных. - В остальных поверхностях эквивалентна функции Explore(t,false,pnt,fir,sec,NULL). + В остальных поверхностях эквивалентна функции Explore(t,false,pnt,fir,sec,c3d_null). \en The function is overloaded in MbSurfaceIntersectionCurve and MbSilhouetteCurve for the fast approximated calculation of a point and derivatives. - In other surfaces it is equivalent to the function Explore(t,false,pnt,fir,sec,NULL). \~ + In other surfaces it is equivalent to the function Explore(t,false,pnt,fir,sec,c3d_null). \~ \param[in] t - \ru Параметр. \en Parameter. \~ \param[out] pnt - \ru Вычисленная точка. @@ -277,7 +283,7 @@ public : \param[out] fir - \ru Производная. \en Derivative with respect to t. \~ \param[out] sec - \ru Вторая производная по t, если не ноль. - \en Second derivative with respect to t, if not NULL. \~ + \en Second derivative with respect to t, if not c3d_null. \~ \ingroup Curves_3D */ virtual void FastApproxExplore( double & t, MbCartPoint3D & pnt, MbVector3D & fir, MbVector3D * sec ) const; @@ -362,7 +368,7 @@ public : /// \ru Сбросить текущее значение параметра. \en Reset the current value of parameter. virtual void ResetTCalc() const; /// \ru Изменить направление кривой. \en Change direction of a curve. - virtual void Inverse( MbRegTransform * iReg = NULL ) = 0; + virtual void Inverse( MbRegTransform * iReg = c3d_null ) = 0; /// \ru Вернуть базовую кривую, если есть, или себя \en Returns the base curve if exists or itself virtual const MbCurve3D & GetBasisCurve() const; /// \ru Вернуть базовую кривую, если есть, или себя \en Returns the base curve if exists or itself @@ -382,10 +388,10 @@ public : The number of knots for NURBS is defined depending on the curve. \~ \param[in] nInfo - \ru Параметры преобразования кривой в NURBS. \en Parameters of conversion of a curve to NURBS. \~ - \result \ru Построенная NURBS кривая или NULL при неуспешном построении. - \en The constructed NURBS curve or NULL in a case of failure. \~ + \result \ru Построенная NURBS кривая или c3d_null при неуспешном построении. + \en The constructed NURBS curve or c3d_null in a case of failure. \~ */ - MbNurbs3D * NurbsCurve( const MbCurveIntoNurbsInfo * nInfo = NULL ) const; + MbNurbs3D * NurbsCurve( const MbCurveIntoNurbsInfo * nInfo = c3d_null ) const; /** \brief \ru Построить NURBS копию кривой. \en Construct a NURBS copy of a curve. \~ @@ -405,8 +411,8 @@ public : 'sense' > 0 - direction coincide. \~ \param[in] nInfo - \ru Параметры преобразования кривой в NURBS. \en Parameters of conversion of a curve to NURBS. \~ - \result \ru Построенная NURBS кривая или NULL при неуспешном построении. - \en The constructed NURBS curve or NULL in a case of failure. \~ + \result \ru Построенная NURBS кривая или c3d_null при неуспешном построении. + \en The constructed NURBS curve or c3d_null in a case of failure. \~ */ virtual MbNurbs3D * NurbsCurve( const MbCurveIntoNurbsInfo & nInfo ) const; @@ -420,8 +426,8 @@ public : If the flag of accurate approximation is not set in parameters then NURBS without multiple knots is constructed. \~ \param[in] tParameters - \ru Параметры построения NURBS копии кривой. \en Parameters for the construction of a NURBS copy of the curve. \~ - \result \ru Построенная NURBS кривая или NULL при неуспешном построении. - \en The constructed NURBS curve or NULL in a case of failure. \~ + \result \ru Построенная NURBS кривая или c3d_null при неуспешном построении. + \en The constructed NURBS curve or c3d_null in a case of failure. \~ \ingroup Curves_3D */ virtual MbCurve3D * NurbsCurve( const MbNurbsParameters & tParameters ) const; @@ -434,8 +440,8 @@ public : \en Parameters for the construction of a NURBS copy of the curve. \~ \param[in] epsilon - \ru Точность аппроксимации. \en The tolerance of approximation. \~ - \result \ru Построенная NURBS кривая или NULL при неуспешном построении. - \en The constructed NURBS curve or NULL in a case of failure. \~ + \result \ru Построенная NURBS кривая или c3d_null при неуспешном построении. + \en The constructed NURBS curve or c3d_null in a case of failure. \~ */ virtual size_t NurbsCurveMinPoints( const MbNurbsParameters & tParameters, double epsilon = c3d::METRIC_DELTA ) const; @@ -552,7 +558,7 @@ public : /// \ru Является ли линия прямолинейной? \en Whether the line is straight? virtual bool IsStraight( bool ignoreParams = false ) const; /// \ru Является ли кривая плоской? \en Is a curve planar? - virtual bool IsPlanar () const; + virtual bool IsPlanar ( double accuracy = METRIC_EPSILON ) const; /// \ru Являются ли стыки контура/кривой гладкими? \en Are joints of contour/curve smooth? virtual bool IsSmoothConnected( double angleEps ) const; /// \ru Изменить носитель. Для поверхностных кривых. \en Change the carrier. For surface curves. @@ -588,19 +594,20 @@ public : Если кривая представляет собой контур, то узловые точки контура дублируются. \en Get an array of drawn points with a given sag. If the cure is a contour then knots of a contour are duplicated. \~ - \param[in] sag - \ru Максимальная величина прогиба. - \en Maximal value of sag. \~ - \param[in, out] poligon - \ru Полигон рассчитанных точек на кривой. + \param[in] stepData - \ru Данные для вычисления шага. + \en Data for step calculation. \~ + \param[in, out] polygon - \ru Полигон рассчитанных точек на кривой. \en A polygon of calculated points on a curve. \~ \ingroup Curves_3D */ - virtual void CalculatePolygon( const MbStepData & stepData, MbPolygon3D & poligon ) const; // \ru Рассчитать полигон. \en Calculate a polygon. - void CalculatePolygon( double sag, MbPolygon3D & poligon ) const; // The method deprecated. It will be removed at 2018. Use CalculatePolygon( MbStepData(ist_SpaceStep,sag), poligon ); \~ + virtual void CalculatePolygon( const MbStepData & stepData, MbPolygon3D & polygon ) const; // \ru Рассчитать полигон. \en Calculate a polygon. + + DEPRECATE_DECLARE void CalculatePolygon( double, MbPolygon3D & ) const; // The method deprecated. It will be removed at 2018. Use CalculatePolygon( MbStepData(ist_SpaceStep,sag), poligon ); \~ /// \ru Выдать центр кривой. \en Give the curve center. - virtual void GetCentre ( MbCartPoint3D & c ) const; + virtual void GetCentre ( MbCartPoint3D & ) const; /// \ru Выдать центр тяжести кривой. \en Give the gravity center of a curve. - virtual void GetWeightCentre( MbCartPoint3D & wc ) const; + virtual void GetWeightCentre( MbCartPoint3D & ) const; // \ru Проекция точки на кривую (метод Ньютона). \en Point projection on a curve (the Newton method). /** \brief \ru Найти проекцию точки на кривую. @@ -644,7 +651,7 @@ public : \en True - if there is found a projection which satisfies to all input conditions. \~ \ingroup Curves_3D */ - virtual bool NearPointProjection ( const MbCartPoint3D &pnt, double & t, bool ext, MbRect1D * tRange = NULL ) const; + virtual bool NearPointProjection ( const MbCartPoint3D &pnt, double & t, bool ext, MbRect1D * tRange = c3d_null ) const; // \ru Изоклины кривой (метод Ньютона). \en Isoclines of a curve (Newton method). /** \brief \ru Найти изоклины кривой. @@ -716,17 +723,17 @@ public : \param[in] version - \ru Версия, по умолчанию - последняя. \en Version, last by default. \~ \param[in, out] coincParams - \ru Флаг совпадения параметризации исходной кривой и ее проекции \n - если coincParams != NULL, функция попытается сделать проекцию с совпадающей параметризацией \n + если coincParams != c3d_null, функция попытается сделать проекцию с совпадающей параметризацией \n если в результате *coincParams = true, у проекции параметризация совпадает с параметрицацией исходной кривой. \en A flag of coincidence between parameterization of initial curve and its projection \n - if coincParams != NULL then the function tries to create a projection with coincident parameterization \n + if coincParams != c3d_null then the function tries to create a projection with coincident parameterization \n if *coincParams = true then parameterization of projection coincides with parameterization of initial curve. \~ \return \ru Двумерная проекция кривой. \en Two-dimensional projection of a curve \~ \ingroup Curves_3D */ - virtual MbCurve * GetMap( const MbMatrix3D & into, MbRect1D * pRegion = NULL, - VERSION version = Math::DefaultMathVersion(), bool * coincParams = NULL ) const; + virtual MbCurve * GetMap( const MbMatrix3D & into, MbRect1D * pRegion = c3d_null, + VERSION version = Math::DefaultMathVersion(), bool * coincParams = c3d_null ) const; /** \brief \ru Построить плоскую проекцию некоторой части пространственной кривой. \en Construct a planar projection of a piece of a space curve. \~ @@ -743,7 +750,7 @@ public : \ingroup Curves_3D */ virtual MbCurve * GetMapPsp( const MbMatrix3D & into, double zNear, - MbRect1D * pRegion = NULL ) const; + MbRect1D * pRegion = c3d_null ) const; /** \brief \ru Построить плоскую проекцию пространственной кривой на плоскость. \en Construct a planar projection of a space curve to a plane. \~ @@ -783,7 +790,7 @@ public : \param[in] epsilon - \ru Погрешность вычисления. \en The accuracy of the calculation. \~ */ - virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = NULL, double epsilon = EPSILON ) const; + virtual bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = c3d_null, double epsilon = EPSILON ) const; /** \brief \ru Устранить разрывы первых производных по длине. \en Eliminate the discontinuities of the first derivative at length. @@ -975,11 +982,11 @@ public : virtual void CurveToSubstrate( double & ) const; /// \ru Дать плоскую кривую и плейсмент, если пространственная кривая плоская (после использования вызывать DeleteItem на двумерную кривую). \en Get planar curve and placement if the space curve is planar (after the using call DeleteItem for two-dimensional curves) - virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlaneCurve( MbCurve *& curve2d, MbPlacement3D & place, bool saveParams, PlanarCheckParams params = PlanarCheckParams() ) const; /// \ru Дать плоскую кривую и плейсмент, если пространственная кривая плоская (после использования вызывать DeleteItem на двумерную кривую). \en Get planar curve and placement if the space curve is planar (after the using call DeleteItem for two-dimensional curves) - bool GetPlaneCurve( SPtr & curve2d, MbPlacement3D & place, bool saveParams, VERSION version = Math::DefaultMathVersion() ) const; + bool GetPlaneCurve( SPtr & curve2d, MbPlacement3D & place, bool saveParams, PlanarCheckParams params = PlanarCheckParams() ) const; /// \ru Дать плоскую кривую и плейсмент, если пространственная кривая плоская (после использования вызывать DeleteItem на двумерную кривую). \en Get planar curve and placement if the space curve is planar (after the using call DeleteItem for two-dimensional curves) - bool GetPlaneCurve( SPtr & curve2d, MbPlacement3D & place, bool saveParams, VERSION version = Math::DefaultMathVersion() ) const; + bool GetPlaneCurve( SPtr & curve2d, MbPlacement3D & place, bool saveParams, PlanarCheckParams params = PlanarCheckParams() ) const; /// \ru Дать поверхностную кривую, если пространственная кривая поверхностная (после использования вызывать DeleteItem на аргументы). \en Get surface curve if the space curve is surface (after the using call DeleteItem for arguments) virtual bool GetSurfaceCurve( MbCurve *& curve2d, MbSurface *& surface, VERSION version = Math::DefaultMathVersion() ) const; /// \ru Дать поверхностную кривую, если пространственная кривая поверхностная (после использования вызывать DeleteItem на аргументы). \en Get surface curve if the space curve is surface (after the using call DeleteItem for arguments) @@ -987,7 +994,7 @@ public : /// \ru Дать поверхностную кривую, если пространственная кривая поверхностная (после использования вызывать DeleteItem на аргументы). \en Get surface curve if the space curve is surface (after the using call DeleteItem for arguments) bool GetSurfaceCurve( SPtr & curve2d, SPtr & surface, VERSION version = Math::DefaultMathVersion() ) const; /// \ru Заполнить плейсемент, если кривая плоская. \en Fill the placement if a curve is planar. - virtual bool GetPlacement( MbPlacement3D & place, VERSION version = Math::DefaultMathVersion() ) const; + virtual bool GetPlacement( MbPlacement3D & place, PlanarCheckParams params = PlanarCheckParams() ) const; /// \ru Является ли объект смещением. \en Is the object is a shift? virtual bool IsShift( const MbSpaceItem &, MbVector3D &, bool & isSame, double accuracy = LENGTH_EPSILON ) const; /// \ru Подобные ли кривые для объединения (слива). \en Whether the curves to union (joining) are similar. @@ -1117,15 +1124,16 @@ MATH_FUNC (MbeNewtonResult) CurveCrossNewton( const MbCurve3D & curve1, bool ext \en Calculate polygon points of curve. \n \~ \param[in] curve - \ru Кривая. \en Curve. \~ - \param[in] sag - \ru Максимальная величина прогиба. - \en Maximal value of sag. \~ + \param[in] stepData - \ru Данные для вычисления шага. + \en Data for step calculation. \~ \param[out] paramPoints - \ru Массив параметров и точек. \en Array of parameters and points. \~ \ingroup Curves_3D */ // --- MATH_FUNC (void) CalculatePolygon( const MbCurve3D & curve, const MbStepData & stepData, std::vector< std::pair > & paramPoints ); -DEPRECATE_DECLARE MATH_FUNC (void) CalculatePolygon( const MbCurve3D & curve, double sag, std::vector< std::pair > & paramPoints ); // The method deprecated. It will be removed at 2018. Use ::CalculatePolygon( curve, MbStepData(ist_SpaceStep,sag), paramPoints ); \~ + +DEPRECATE_DECLARE MATH_FUNC (void) CalculatePolygon( const MbCurve3D &, double, std::vector< std::pair > & ); // The method deprecated. It will be removed at 2018. Use ::CalculatePolygon( curve, MbStepData(ist_SpaceStep,sag), paramPoints ); \~ #endif // __CURVE3D_H diff --git a/C3d/Include/dxf_converter.h b/C3d/Include/dxf_converter.h index 7f16a81..99f0093 100644 --- a/C3d/Include/dxf_converter.h +++ b/C3d/Include/dxf_converter.h @@ -1,463 +1,463 @@ -//////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru DXF - конвертер. - \en DXF - converter. \~ - -*/ -//////////////////////////////////////////////////////////////////////////////// - -#ifndef __DXF_CONVERTER_H -#define __DXF_CONVERTER_H - -#include -#include -#include -#include -#include - - -class IConvertorProperty3D; -class IProgressIndicator; -class ColorProperties; -class ItModelInstanceProperties; -class ItModelDocument; -class ItModelInstance; -class DXFConverter; -class DXFCompositeRef; -class MbGrid; - - -//------------------------------------------------------------------------------ -/** \brief \ru Уникальный (в пределах документа) идентификатор объекта. - \en Unique (in the document) object identifier. \~ - \ingroup DXF_Exchange -*/ -class CONV_CLASS DXFHandle { - -private: - int64 thisId; ///< \ru Уникальное 64-битное число, соответствующее модельному объекту. \en Unique 64-bit number corresponding to the model object. - -public: - DXFHandle ( ); - DXFHandle ( int64 & id ); - DXFHandle ( const unsigned char id[8] ); - ~DXFHandle(); - - const DXFHandle & operator = ( const DXFHandle & id ); - - bool IsDefined() const { return thisId != -1 ; } - - // \ru операторы сравнения \en compare operators - friend bool operator > ( const DXFHandle & left, const DXFHandle & right ); - friend bool operator == ( const DXFHandle & left, const DXFHandle & right ); -}; - - -//------------------------------------------------------------------------------ -/// \ru Сравнение thisId. \en Comparison of thisId. -//--- -inline -bool operator > ( const DXFHandle & left, const DXFHandle & right ) { - return left.thisId > right.thisId; -} - - -//------------------------------------------------------------------------------ -/// \ru Равенство thisId. \en Equality of thisId. -//--- -inline -bool operator ==( const DXFHandle & left, const DXFHandle & right ) { - return left.IsDefined() && right.IsDefined() && left.thisId == right.thisId; -} - - -/** - \addtogroup DXF_Exchange - \{ -*/ - - -//------------------------------------------------------------------------------ -// \ru Тело. \en A solid. -//--- -class CONV_CLASS DXFSolidBody { -private: - MbPlacement3D placement; ///< \ru Локальная система координат. \en Local coordinate system. - std::vector > solids; ///< \ru Тела. \en Solids. - std::vector< SPtr > faces; ///< \ru Грани. \en Faces. - -public: - DXFSolidBody( MbPlacement3D & placement ); - DXFSolidBody( const DXFSolidBody &); - ~DXFSolidBody(); - -public: - bool IsEmpty () const; - - bool IsSingle () const; - MbPlacement3D GetPlacement() const; - - void MakePlacementIdentical( const MbPlacement3D& ownComponentLocation = MbPlacement3D::global ); - void FillSolids ( std::vector > & solids ) const; - void Flush (); - void AddSolids ( const std::vector > & mSolids ); - void AddFaces ( const std::vector< SPtr > & mFaces ); - void SetPlacement ( const MbPlacement3D & place ); - - size_t GetSolidsCount() const { return solids.size(); } - void GetSolids ( std::vector > & mSolids ) const; - - size_t GetFacesCount () const { return faces.size(); } - void GetFaces ( std::vector< SPtr > & mFaces ) const; -private: - //DXFSolidBody ( const DXFSolidBody & ); // \ru не реализовано \en not implemented - DXFSolidBody & operator = ( const DXFSolidBody & ); // \ru не реализовано \en not implemented - -}; - - -//------------------------------------------------------------------------------ -// -// --- -inline -void DXFSolidBody::SetPlacement( const MbPlacement3D & place ) { - placement = place; -} - - -//------------------------------------------------------------------------------ -// \ru Поверхность. \en The surface. -//--- -class CONV_CLASS DXFSurfaceBody { -private: - MbPlacement3D placement; ///< \ru Локальная система координат. \en Local coordinate system. - std::vector< SRef > faces; ///< \ru Грани. \en Faces. - SPtr mesh; - -public: - DXFSurfaceBody(); - DXFSurfaceBody( MbPlacement3D & placement ); - ~DXFSurfaceBody(); - -public: - bool IsEmpty () const; - bool IsSingle () const; - MbPlacement3D GetPlacement() const; - - void Flush(); - void AddFace ( MbFace & face ); - void AddGrid ( MbGrid & grid ); - void AddFaces( const std::vector< SPtr > & mFaces ); - - size_t GetFacesCount() const { return faces.size(); } - -private: - void FillFaces( RPArray & faces ) const; - void GetFaces( std::vector< SPtr > & mFaces ) const; -public: - - SPtr GetMesh(); - - std::vector > GenerateItems( bool stitch ); - -private: - - - DXFSurfaceBody ( const DXFSurfaceBody & ); // \ru не реализовано \en not implemented - DXFSurfaceBody & operator = ( const DXFSurfaceBody & ); // \ru не реализовано \en not implemented - -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Свойства блока. - \en Block properties. \~ -\ingroup DXF_Exchange -*/ -class CONV_CLASS DXFCompositeData { -private: - DXFHandle thisId; ///< \ru Идентификатор блока. \en Block identifier. - MbVector3D m_scalesId; ///< \ru Масштабы блока по осям координат, (нужны только для идентификация блока с thisId); связано с отказом от использования левых плейсментов в подсборках (err. 56646). \en Block scales by coordinate axes, (they are necessary only for the identification of the block with thisId); this is related with the decision not to use left placements in subassemblies (err. 56646). 56646). - c3d::string_t name; ///< \ru Имя блока. \en Block name. - MbVector3D scales; ///< \ru Масштабы блока по осям координат (нужны при создании сборки). \en Scales of block by coordinate axes (they are necessary for assembly creation). - - MbMatrix3D m_TranslateRotate; ///< \ru Преобразование блока для текущей вставки блока, но без учета масштабных коэффициентов самой вставки блока. \en Transformation of a block for the current block insertion without taking into account the scale factors of this block insertion. - MbMatrix3D m_sumTransform; ///< \ru Преобразование всех внешних блоков. \en Transformation of all external blocks. - -public: - DXFCompositeData(); - DXFCompositeData( const DXFHandle & chandle, const TCHAR * cname ); - DXFCompositeData( const DXFHandle & chandle, const TCHAR * cname, - const MbVector3D &, - const MbMatrix3D & tr, - const MbMatrix3D & sumTr ); - // DXFCompositeData( const TCHAR * cname ); - DXFCompositeData( const DXFCompositeData & cname ); - ~DXFCompositeData(); - -public: - const TCHAR * GetName() const { return name.c_str(); } - std::string Name() const { return c3d::ToSTDstring( name ); } - c3d::string_t NamePath() const { return c3d::string_t( name.c_str() ); } - const DXFHandle & ThisId () const { return thisId; } - const MbVector3D & Scales () const { return scales; } - MbVector3D & Scales () { return scales; } - size_t NameLength() const { return name.length(); } - MbVector3D & ScalesId() { return m_scalesId; } - MbVector3D GetScalesId()const { return m_scalesId; } - const MbMatrix3D & GetTranslateRotate() const { return m_TranslateRotate; } - const MbMatrix3D & GetSumTransform () const { return m_sumTransform; } - - /// \ru Cравнение с другими данными. \en Comparison with other data. - bool operator == ( const DXFCompositeData & ) const ; - - DXFCompositeData & operator=( const DXFCompositeData & ) { C3D_ASSERT_UNCONDITIONAL( false ); return *this; } -}; - - -//------------------------------------------------------------------------------ -/// \ru Cравнение с другими данными по thisId. \en Comparison with other data by thisId. -//---- -inline -bool DXFCompositeData::operator == ( const DXFCompositeData & comp ) const { - // \ru для различения блока используется идентификационный номер и масштабный коэффициент \en an identification number and a scale factor are used to distinguish the block - return thisId == comp.thisId && m_scalesId == comp.m_scalesId; - // return thisId == comp.thisId && scales == comp.scales; -} - - -/////////////////////////////////////////////////////////////////////////////// -// -/** - \ingroup DXF_Exchange - */ -// -/////////////////////////////////////////////////////////////////////////////// - - -//------------------------------------------------------------------------------ -// \ru Блок \en Block -//--- -class CONV_CLASS DXFComposite : public MbRefItem { -private: - PArray composites; ///< \ru Составляющие. \en Components. - PArray solid_bodies; ///< \ru Тела. \en Solids. - std::vector< SPtr > space_curves; ///< \ru Кривые. \en Curves. - DXFSurfaceBody surface_body; ///< \ru Поверхностное тело. \en Surface solid. - DXFCompositeData data; ///< \ru Данные для слива блока. \en Data of the block for union. - SPtr insert; ///< \ru Готовая вставка блока в модельный документ. \en Prepared insert of the block to the model document. - -public: - DXFComposite(); - DXFComposite( const DXFCompositeData & data ); - ~DXFComposite(); - -public: - bool IsEmpty () const; - void Complete ( DXFConverter & converter ); - void AddComposite ( DXFCompositeRef * composite ); - ptrdiff_t GetObjectsCount (); - void FlushSolidBodies (); - - void AddFace ( MbFace & m_face ); - void AddGrid ( MbGrid & m_grid ); - void AddSpaceCurve ( MbCurve3D & space_curves ); - void AddSolidBody ( MbPlacement3D & placement, const std::vector > & m_solids, - const std::vector< SPtr > & m_faces ); - - size_t GetSolidBodiesCount() const { return solid_bodies.Count(); } - const DXFSolidBody * GetSolidBody( size_t k ) const { return ((k < solid_bodies.Count()) ? solid_bodies[k] : NULL); } - DXFSolidBody * SetSolidBody( size_t k ) { return ((k < solid_bodies.Count()) ? solid_bodies[k] : NULL); } - - const DXFCompositeData & GetData() const { return data;} - - bool SetToModel( const MbPlacement3D & where, - ItModelInstance & instance ); - /// \ru Высвободить и обнулить вставку. \en Free the insert and set it to null. - void ReleaseInsert(); - - /// \ru Добавить геометрию (solid_bodies и surface_body) из ob. \en Add to geometry (solid_bodies and surface_body) from ob. - void AddGeometryFrom( const DXFComposite & ob ); -private: - friend class DXFConverter; - friend class DXFCompositeRef; - void CompleteDocument ( ItModelDocument & model_document, DXFConverter & converter ); - void CompleteInstance ( ItModelInstance & model_instance, DXFConverter & converter, - MbPlacement3D * place, MbVector3D & scales ); - - void CompleteComponent( const MbPlacement3D & place, - ItModelInstance & model_instance, - DXFConverter & converter, const MbVector3D& scalesBase ); - - DXFComposite * FindObj( const DXFCompositeData & ); - void CheckPlacementsByGabarits( MbPlacement3D & ); - - void CheckIdenticalBaserSurfaces(); // Контроль одинаковых поверхностей в гранях. - void CollectOwnItems( std::vector >& ownItems ); // Собрать собственные элементы комопнента -private: - DXFComposite ( const DXFComposite & ); // \ru не реализовано \en not implemented - DXFComposite & operator = ( const DXFComposite & ); // \ru не реализовано \en not implemented - -}; - - -//------------------------------------------------------------------------------ -// \ru Ссылка на блок \en Reference to a block -//--- -class CONV_CLASS DXFCompositeRef { -private: - MbPlacement3D place; ///< \ru Локальная система координат. \en Local coordinate system. - DXFComposite * composite; ///< \ru Блок. \en Block. -public: - DXFCompositeRef ( ); - DXFCompositeRef ( DXFComposite & composite , const MbPlacement3D & cplace ); - DXFCompositeRef ( DXFComposite & composite ); - ~DXFCompositeRef( ); - - /// \ru Заполнить документ модели. \en Fill the model document. - void CompleteInstance ( ItModelInstance & model_instance, - DXFConverter & converter, - MbVector3D & overallScales ); - /// \ru Создать документ \en Create a document - void CompleteDocument ( ItModelDocument & model_document, DXFConverter & converter ); - - const MbPlacement3D & GetPlacement() const { return place; } - void SetPlacement( const MbPlacement3D & pl ) { place = pl; } - DXFComposite * operator->() { return composite; } - DXFComposite * operator* () { return composite; } - - /// \ru Для явной записи. \en For explicit record. - DXFComposite * GetComposite() const { return composite; } -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru DXF-конвертер. - \en DXF - converter. \~ -*/ -class CONV_CLASS DXFConverter { -private: - PArray composites; ///< \ru Составляющие блок подблоки, тела, поверхности. \en Subblocks, solids, surfaces forming the block. - DXFCompositeRef * model_space; ///< \ru Корневой блок. \en Root block. - PArraySort readComposites; ///< \ru Идентификаторы прочтенных блоков. \en Identifiers of read blocks. - IConvertorProperty3D * property; ///< \ru Свойства конвертера. \en Converter properties. - int stitch; ///< \ru Нет информации. \en No information. - double factor; ///< \ru Нет информации. \en No information. - IProgressIndicator * indicator; ///< \ru Индикатор хода процесса преобразования. \en Transformation progress indicator. - ptrdiff_t indicator_delta; ///< \ru Приращение индикатора на одну условную операцию. \en Increment of the indicator by one unit operation. - ptrdiff_t indicator_count; ///< \ru Значение счётчика индикатора. \en Value of the indicator counter. - -#ifdef C3D_DEBUG - uint32 prev_mili_sec; - uint32 current_mili_sec; - uint32 delta_mili_sec; -#endif // C3D_DEBUG - -public: - DXFConverter(); - ~DXFConverter(); - - /// \ru Задать признак сшивки. \en Set a flag of stitching. - void SetStitch ( bool stitch ); - /// \ru Получить признак сшивки. \en Get flag of stitching. - bool IsStitch () const; - /// \ru Задать значение множителя. \en Set a value of multiplier. - void SetFactor ( double factor ); - /// \ru Получить значение множителя. \en Get value of multiplier. - double GetFactor () const; - /// \ru Задать свойства конвертера. \en Specify converter properties. - void SetProperty ( IConvertorProperty3D * property ); - /// \ru Получить свойства конвертера. \en Get converter properties. - IConvertorProperty3D * GetProperty (); - /// \ru Инициировать пустой блок. \en Initialize an empty block. - void BeginComposite (); - /**\brief \ru Инициировать блок с данными. - \en Initialize block with data. \~ - \param[in] matr - \ru Матрица, преобразующая данные блока к СК объемлющего блока. - \en Matrix transforming block data to coordinate system of the enclosing block. \~ - \param[in] data - \ru Данные самого блока. - \en Data of the block. \~ - */ - bool BeginComposite ( MbMatrix3D &matr, const DXFCompositeData & data ); - - /** \brief \ru Завершить создание составного элемента. - \en Complete creation of a composite element. \~ - \details \ru Если у последнего составного элемента:\n - - нет идентификатора;\n - - внутри нет вставок,\n - то это признак того, что этот блок создан только для сшивки геометрии. - В этом случае последний блок объединяется с предпоследним: - в предпоследний переносится геометрия, последний удаляется. - \en If the last composite element has:\n - - no identifier;\n - - no inserts,\n - then it is a creterion that the block is created only for stitching the geometry. - In this case the last block is united with the last but one: - the geometry is moved to the last but one, the last one is deleted. \~ - */ - bool EndComposite (); - /// \ru Очистить конвертер. \en Clear the converter. - void Reset (); - /// \ru Отобразить текующее состояние хода операции. \en Show the current state of operation progress. - bool Indicate ( ptrdiff_t count ); - - /** \brief \ru Завершить создание документа. - \en Complete the document creation. \~ - */ - void CompleteDocument ( ItModelDocument & model_document, - IProgressIndicator * indicator = NULL ); - - /// \ru Отобразить текующее состояние хода операции. \en Show the current state of operation progress. - void ConvertLastComposite( uint32 defaultColor ); - - /// \ru Добавить модельную грань. \en Add the model face. - void AddFace ( MbFace & m_face ); - - /// \ru Добавить модельную грань. \en Add the model face. - void AddGrid ( MbGrid & m_grid ); - - /**\brief \ru Добавить тело. - \en Add a solid. \~ - \param[in] placement - \ru Положение тела в ЛСК. - \en Position of the solid in LCS. \~ - \param[in] model_solids - \ru Модельные тела. - \en Model solids. \~ - \param[in] model_faces - \ru Модельные грани. - \en Model solids. \~ - */ - void AddSolidBody ( MbPlacement3D & placement, - const std::vector > & m_solids, - const std::vector< SPtr > & m_faces ); - /// \ru Добавить пространственную кривую. \en Add a spatial curves. - void AddSpaceCurve ( MbCurve3D & spaceCurve ); - /// \ru Удалить значение из списка прочитанных идентификатров. \en Delete a value from the list of read identifiers. - void RemoveData ( const DXFCompositeData & data ); - -private: - /**\brief \ru Cоздать модельные грани по свойствам старых модельных тел. - \en Create model faces from properties of old model solids. \~ - \param[in] solids - \ru Положение тела в ЛСК. - \en Position of the solid in LCS. \~ - \param[in] stitchedSolids - \ru Модельные тела. - \en Model solids. \~ - \param[in] defaultColor - \ru Цвет по умолчанию. - \en Default color. \~ - \param[in] model_faces - \ru Модельные грани. - \en Model solids. \~ - */ - void CreateModelFacesFromOldSolids( const std::vector > & solids, - const std::vector< SPtr > & stitchedSolids, - uint32 defaultColor, - std::vector< SPtr > & modelFaces ) ; - private: - DXFConverter ( const DXFConverter & ); // \ru не реализовано \en not implemented - DXFConverter & operator = ( const DXFConverter & ); // \ru не реализовано \en not implemented - -}; - - -/** \} */ - - +//////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru DXF - конвертер. + \en DXF - converter. \~ + +*/ +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __DXF_CONVERTER_H +#define __DXF_CONVERTER_H + +#include +#include +#include +#include +#include + + +class IConvertorProperty3D; +class IProgressIndicator; +class ColorProperties; +class ItModelInstanceProperties; +class ItModelDocument; +class ItModelInstance; +class DXFConverter; +class DXFCompositeRef; +class MbGrid; + + +//------------------------------------------------------------------------------ +/** \brief \ru Уникальный (в пределах документа) идентификатор объекта. + \en Unique (in the document) object identifier. \~ + \ingroup DXF_Exchange +*/ +class CONV_CLASS DXFHandle { + +private: + int64 thisId; ///< \ru Уникальное 64-битное число, соответствующее модельному объекту. \en Unique 64-bit number corresponding to the model object. + +public: + DXFHandle ( ); + DXFHandle ( int64 & id ); + DXFHandle ( const unsigned char id[8] ); + ~DXFHandle(); + + const DXFHandle & operator = ( const DXFHandle & id ); + + bool IsDefined() const { return thisId != -1 ; } + + // \ru операторы сравнения \en compare operators + friend bool operator > ( const DXFHandle & left, const DXFHandle & right ); + friend bool operator == ( const DXFHandle & left, const DXFHandle & right ); +}; + + +//------------------------------------------------------------------------------ +/// \ru Сравнение thisId. \en Comparison of thisId. +//--- +inline +bool operator > ( const DXFHandle & left, const DXFHandle & right ) { + return left.thisId > right.thisId; +} + + +//------------------------------------------------------------------------------ +/// \ru Равенство thisId. \en Equality of thisId. +//--- +inline +bool operator ==( const DXFHandle & left, const DXFHandle & right ) { + return left.IsDefined() && right.IsDefined() && left.thisId == right.thisId; +} + + +/** + \addtogroup DXF_Exchange + \{ +*/ + + +//------------------------------------------------------------------------------ +// \ru Тело. \en A solid. +//--- +class CONV_CLASS DXFSolidBody { +private: + MbPlacement3D placement; ///< \ru Локальная система координат. \en Local coordinate system. + std::vector > solids; ///< \ru Тела. \en Solids. + std::vector< SPtr > faces; ///< \ru Грани. \en Faces. + +public: + DXFSolidBody( MbPlacement3D & placement ); + DXFSolidBody( const DXFSolidBody &); + ~DXFSolidBody(); + +public: + bool IsEmpty () const; + + bool IsSingle () const; + MbPlacement3D GetPlacement() const; + + void MakePlacementIdentical( const MbPlacement3D& ownComponentLocation = MbPlacement3D::global ); + void FillSolids ( std::vector > & solids ) const; + void Flush (); + void AddSolids ( const std::vector > & mSolids ); + void AddFaces ( const std::vector< SPtr > & mFaces ); + void SetPlacement ( const MbPlacement3D & place ); + + size_t GetSolidsCount() const { return solids.size(); } + void GetSolids ( std::vector > & mSolids ) const; + + size_t GetFacesCount () const { return faces.size(); } + void GetFaces ( std::vector< SPtr > & mFaces ) const; +private: + //DXFSolidBody ( const DXFSolidBody & ); // \ru не реализовано \en not implemented + DXFSolidBody & operator = ( const DXFSolidBody & ); // \ru не реализовано \en not implemented + +}; + + +//------------------------------------------------------------------------------ +// +// --- +inline +void DXFSolidBody::SetPlacement( const MbPlacement3D & place ) { + placement = place; +} + + +//------------------------------------------------------------------------------ +// \ru Поверхность. \en The surface. +//--- +class CONV_CLASS DXFSurfaceBody { +private: + MbPlacement3D placement; ///< \ru Локальная система координат. \en Local coordinate system. + std::vector< SRef > faces; ///< \ru Грани. \en Faces. + SPtr mesh; + +public: + DXFSurfaceBody(); + DXFSurfaceBody( MbPlacement3D & placement ); + ~DXFSurfaceBody(); + +public: + bool IsEmpty () const; + bool IsSingle () const; + MbPlacement3D GetPlacement() const; + + void Flush(); + void AddFace ( MbFace & face ); + void AddGrid ( MbGrid & grid ); + void AddFaces( const std::vector< SPtr > & mFaces ); + + size_t GetFacesCount() const { return faces.size(); } + +private: + void FillFaces( RPArray & faces ) const; + void GetFaces( std::vector< SPtr > & mFaces ) const; +public: + + SPtr GetMesh(); + + std::vector > GenerateItems( bool stitch ); + +private: + + + DXFSurfaceBody ( const DXFSurfaceBody & ); // \ru не реализовано \en not implemented + DXFSurfaceBody & operator = ( const DXFSurfaceBody & ); // \ru не реализовано \en not implemented + +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Свойства блока. + \en Block properties. \~ +\ingroup DXF_Exchange +*/ +class CONV_CLASS DXFCompositeData { +private: + DXFHandle thisId; ///< \ru Идентификатор блока. \en Block identifier. + MbVector3D m_scalesId; ///< \ru Масштабы блока по осям координат, (нужны только для идентификация блока с thisId); связано с отказом от использования левых плейсментов в подсборках (err. 56646). \en Block scales by coordinate axes, (they are necessary only for the identification of the block with thisId); this is related with the decision not to use left placements in subassemblies (err. 56646). 56646). + c3d::string_t name; ///< \ru Имя блока. \en Block name. + MbVector3D scales; ///< \ru Масштабы блока по осям координат (нужны при создании сборки). \en Scales of block by coordinate axes (they are necessary for assembly creation). + + MbMatrix3D m_TranslateRotate; ///< \ru Преобразование блока для текущей вставки блока, но без учета масштабных коэффициентов самой вставки блока. \en Transformation of a block for the current block insertion without taking into account the scale factors of this block insertion. + MbMatrix3D m_sumTransform; ///< \ru Преобразование всех внешних блоков. \en Transformation of all external blocks. + +public: + DXFCompositeData(); + DXFCompositeData( const DXFHandle & chandle, const TCHAR * cname ); + DXFCompositeData( const DXFHandle & chandle, const TCHAR * cname, + const MbVector3D &, + const MbMatrix3D & tr, + const MbMatrix3D & sumTr ); + // DXFCompositeData( const TCHAR * cname ); + DXFCompositeData( const DXFCompositeData & cname ); + ~DXFCompositeData(); + +public: + const TCHAR * GetName() const { return name.c_str(); } + std::string Name() const { return c3d::ToSTDstring( name ); } + c3d::string_t NamePath() const { return c3d::string_t( name.c_str() ); } + const DXFHandle & ThisId () const { return thisId; } + const MbVector3D & Scales () const { return scales; } + MbVector3D & Scales () { return scales; } + size_t NameLength() const { return name.length(); } + MbVector3D & ScalesId() { return m_scalesId; } + MbVector3D GetScalesId()const { return m_scalesId; } + const MbMatrix3D & GetTranslateRotate() const { return m_TranslateRotate; } + const MbMatrix3D & GetSumTransform () const { return m_sumTransform; } + + /// \ru Cравнение с другими данными. \en Comparison with other data. + bool operator == ( const DXFCompositeData & ) const ; + + DXFCompositeData & operator=( const DXFCompositeData & ) { C3D_ASSERT_UNCONDITIONAL( false ); return *this; } +}; + + +//------------------------------------------------------------------------------ +/// \ru Cравнение с другими данными по thisId. \en Comparison with other data by thisId. +//---- +inline +bool DXFCompositeData::operator == ( const DXFCompositeData & comp ) const { + // \ru для различения блока используется идентификационный номер и масштабный коэффициент \en an identification number and a scale factor are used to distinguish the block + return thisId == comp.thisId && m_scalesId == comp.m_scalesId; + // return thisId == comp.thisId && scales == comp.scales; +} + + +/////////////////////////////////////////////////////////////////////////////// +// +/** + \ingroup DXF_Exchange + */ +// +/////////////////////////////////////////////////////////////////////////////// + + +//------------------------------------------------------------------------------ +// \ru Блок \en Block +//--- +class CONV_CLASS DXFComposite : public MbRefItem { +private: + PArray composites; ///< \ru Составляющие. \en Components. + PArray solid_bodies; ///< \ru Тела. \en Solids. + std::vector< SPtr > space_curves; ///< \ru Кривые. \en Curves. + DXFSurfaceBody surface_body; ///< \ru Поверхностное тело. \en Surface solid. + DXFCompositeData data; ///< \ru Данные для слива блока. \en Data of the block for union. + SPtr insert; ///< \ru Готовая вставка блока в модельный документ. \en Prepared insert of the block to the model document. + +public: + DXFComposite(); + DXFComposite( const DXFCompositeData & data ); + ~DXFComposite(); + +public: + bool IsEmpty () const; + void Complete ( DXFConverter & converter ); + void AddComposite ( DXFCompositeRef * composite ); + ptrdiff_t GetObjectsCount (); + void FlushSolidBodies (); + + void AddFace ( MbFace & m_face ); + void AddGrid ( MbGrid & m_grid ); + void AddSpaceCurve ( MbCurve3D & space_curves ); + void AddSolidBody ( MbPlacement3D & placement, const std::vector > & m_solids, + const std::vector< SPtr > & m_faces ); + + size_t GetSolidBodiesCount() const { return solid_bodies.Count(); } + const DXFSolidBody * GetSolidBody( size_t k ) const { return ((k < solid_bodies.Count()) ? solid_bodies[k] : c3d_null); } + DXFSolidBody * SetSolidBody( size_t k ) { return ((k < solid_bodies.Count()) ? solid_bodies[k] : c3d_null); } + + const DXFCompositeData & GetData() const { return data;} + + bool SetToModel( const MbPlacement3D & where, + ItModelInstance & instance ); + /// \ru Высвободить и обнулить вставку. \en Free the insert and set it to null. + void ReleaseInsert(); + + /// \ru Добавить геометрию (solid_bodies и surface_body) из ob. \en Add to geometry (solid_bodies and surface_body) from ob. + void AddGeometryFrom( const DXFComposite & ob ); +private: + friend class DXFConverter; + friend class DXFCompositeRef; + void CompleteDocument ( ItModelDocument & model_document, DXFConverter & converter ); + void CompleteInstance ( ItModelInstance & model_instance, DXFConverter & converter, + MbPlacement3D * place, MbVector3D & scales ); + + void CompleteComponent( const MbPlacement3D & place, + ItModelInstance & model_instance, + DXFConverter & converter, const MbVector3D& scalesBase ); + + DXFComposite * FindObj( const DXFCompositeData & ); + void CheckPlacementsByGabarits( MbPlacement3D & ); + + void CheckIdenticalBaserSurfaces(); // Контроль одинаковых поверхностей в гранях. + void CollectOwnItems( std::vector >& ownItems ); // Собрать собственные элементы комопнента +private: + DXFComposite ( const DXFComposite & ); // \ru не реализовано \en not implemented + DXFComposite & operator = ( const DXFComposite & ); // \ru не реализовано \en not implemented + +}; + + +//------------------------------------------------------------------------------ +// \ru Ссылка на блок \en Reference to a block +//--- +class CONV_CLASS DXFCompositeRef { +private: + MbPlacement3D place; ///< \ru Локальная система координат. \en Local coordinate system. + DXFComposite * composite; ///< \ru Блок. \en Block. +public: + DXFCompositeRef ( ); + DXFCompositeRef ( DXFComposite & composite , const MbPlacement3D & cplace ); + DXFCompositeRef ( DXFComposite & composite ); + ~DXFCompositeRef( ); + + /// \ru Заполнить документ модели. \en Fill the model document. + void CompleteInstance ( ItModelInstance & model_instance, + DXFConverter & converter, + MbVector3D & overallScales ); + /// \ru Создать документ \en Create a document + void CompleteDocument ( ItModelDocument & model_document, DXFConverter & converter ); + + const MbPlacement3D & GetPlacement() const { return place; } + void SetPlacement( const MbPlacement3D & pl ) { place = pl; } + DXFComposite * operator->() { return composite; } + DXFComposite * operator* () { return composite; } + + /// \ru Для явной записи. \en For explicit record. + DXFComposite * GetComposite() const { return composite; } +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru DXF-конвертер. + \en DXF - converter. \~ +*/ +class CONV_CLASS DXFConverter { +private: + PArray composites; ///< \ru Составляющие блок подблоки, тела, поверхности. \en Subblocks, solids, surfaces forming the block. + DXFCompositeRef * model_space; ///< \ru Корневой блок. \en Root block. + PArraySort readComposites; ///< \ru Идентификаторы прочтенных блоков. \en Identifiers of read blocks. + IConvertorProperty3D * property; ///< \ru Свойства конвертера. \en Converter properties. + int stitch; ///< \ru Нет информации. \en No information. + double factor; ///< \ru Нет информации. \en No information. + IProgressIndicator * indicator; ///< \ru Индикатор хода процесса преобразования. \en Transformation progress indicator. + ptrdiff_t indicator_delta; ///< \ru Приращение индикатора на одну условную операцию. \en Increment of the indicator by one unit operation. + ptrdiff_t indicator_count; ///< \ru Значение счётчика индикатора. \en Value of the indicator counter. + +#ifdef C3D_DEBUG + uint32 prev_mili_sec; + uint32 current_mili_sec; + uint32 delta_mili_sec; +#endif // C3D_DEBUG + +public: + DXFConverter(); + ~DXFConverter(); + + /// \ru Задать признак сшивки. \en Set a flag of stitching. + void SetStitch ( bool stitch ); + /// \ru Получить признак сшивки. \en Get flag of stitching. + bool IsStitch () const; + /// \ru Задать значение множителя. \en Set a value of multiplier. + void SetFactor ( double factor ); + /// \ru Получить значение множителя. \en Get value of multiplier. + double GetFactor () const; + /// \ru Задать свойства конвертера. \en Specify converter properties. + void SetProperty ( IConvertorProperty3D * property ); + /// \ru Получить свойства конвертера. \en Get converter properties. + IConvertorProperty3D * GetProperty (); + /// \ru Инициировать пустой блок. \en Initialize an empty block. + void BeginComposite (); + /**\brief \ru Инициировать блок с данными. + \en Initialize block with data. \~ + \param[in] matr - \ru Матрица, преобразующая данные блока к СК объемлющего блока. + \en Matrix transforming block data to coordinate system of the enclosing block. \~ + \param[in] data - \ru Данные самого блока. + \en Data of the block. \~ + */ + bool BeginComposite ( MbMatrix3D &matr, const DXFCompositeData & data ); + + /** \brief \ru Завершить создание составного элемента. + \en Complete creation of a composite element. \~ + \details \ru Если у последнего составного элемента:\n + - нет идентификатора;\n + - внутри нет вставок,\n + то это признак того, что этот блок создан только для сшивки геометрии. + В этом случае последний блок объединяется с предпоследним: + в предпоследний переносится геометрия, последний удаляется. + \en If the last composite element has:\n + - no identifier;\n + - no inserts,\n + then it is a creterion that the block is created only for stitching the geometry. + In this case the last block is united with the last but one: + the geometry is moved to the last but one, the last one is deleted. \~ + */ + bool EndComposite (); + /// \ru Очистить конвертер. \en Clear the converter. + void Reset (); + /// \ru Отобразить текующее состояние хода операции. \en Show the current state of operation progress. + bool Indicate ( ptrdiff_t count ); + + /** \brief \ru Завершить создание документа. + \en Complete the document creation. \~ + */ + void CompleteDocument ( ItModelDocument & model_document, + IProgressIndicator * indicator = c3d_null ); + + /// \ru Отобразить текующее состояние хода операции. \en Show the current state of operation progress. + void ConvertLastComposite( uint32 defaultColor ); + + /// \ru Добавить модельную грань. \en Add the model face. + void AddFace ( MbFace & m_face ); + + /// \ru Добавить модельную грань. \en Add the model face. + void AddGrid ( MbGrid & m_grid ); + + /**\brief \ru Добавить тело. + \en Add a solid. \~ + \param[in] placement - \ru Положение тела в ЛСК. + \en Position of the solid in LCS. \~ + \param[in] model_solids - \ru Модельные тела. + \en Model solids. \~ + \param[in] model_faces - \ru Модельные грани. + \en Model solids. \~ + */ + void AddSolidBody ( MbPlacement3D & placement, + const std::vector > & m_solids, + const std::vector< SPtr > & m_faces ); + /// \ru Добавить пространственную кривую. \en Add a spatial curves. + void AddSpaceCurve ( MbCurve3D & spaceCurve ); + /// \ru Удалить значение из списка прочитанных идентификатров. \en Delete a value from the list of read identifiers. + void RemoveData ( const DXFCompositeData & data ); + +private: + /**\brief \ru Cоздать модельные грани по свойствам старых модельных тел. + \en Create model faces from properties of old model solids. \~ + \param[in] solids - \ru Положение тела в ЛСК. + \en Position of the solid in LCS. \~ + \param[in] stitchedSolids - \ru Модельные тела. + \en Model solids. \~ + \param[in] defaultColor - \ru Цвет по умолчанию. + \en Default color. \~ + \param[in] model_faces - \ru Модельные грани. + \en Model solids. \~ + */ + void CreateModelFacesFromOldSolids( const std::vector > & solids, + const std::vector< SPtr > & stitchedSolids, + uint32 defaultColor, + std::vector< SPtr > & modelFaces ) ; + private: + DXFConverter ( const DXFConverter & ); // \ru не реализовано \en not implemented + DXFConverter & operator = ( const DXFConverter & ); // \ru не реализовано \en not implemented + +}; + + +/** \} */ + + #endif // __DXF_CONVERTER_H \ No newline at end of file diff --git a/C3d/Include/dxf_data.h b/C3d/Include/dxf_data.h index fe772cf..41825a2 100644 --- a/C3d/Include/dxf_data.h +++ b/C3d/Include/dxf_data.h @@ -1,339 +1,339 @@ -//////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru DXF - конвертер. - \en DXF - converter. \~ -*/ -//////////////////////////////////////////////////////////////////////////////// - -#ifndef __DXF_DATA_H -#define __DXF_DATA_H - -#include -#include -#include -#include -#include -#include -#include - - -class MbCartPoint; -class MbCurve; -class MbCartPoint3D; -class MbVector3D; -class MbPlacement3D; -class MbCurve3D; -class MbSolid; -class MbFace; -class MbGrid; -class DXFConverter; - - -//------------------------------------------------------------------------------ -/** \brief \ru Объект формата DXF. - \en Object of DXF format. \~ - \ingroup DXF_Exchange -*/ -// --- -class CONV_CLASS DXFEntity { -protected: - MbAttributeContainer attributes; ///< \ru Атрибуты. \en Attributes. - -protected: - // \ru Конструктор. \en Constructor. - DXFEntity(); - // \ru Деструктор. \en Destructor. - virtual ~DXFEntity(); - -public: - /// \ru Установить цветовые атрибуты. \en Set color attributes. - void SetAttributes( MbAttributeContainer & attribs ); - virtual bool Convert ( DXFConverter & converter ) = 0; - -private: - DXFEntity ( const DXFEntity & ); // \ru не реализовано \en not implemented - DXFEntity & operator = ( const DXFEntity & ); // \ru не реализовано \en not implemented - -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Анализатор потока SAT. - \en SAT stream analyzer. \~ - \ingroup DXF_Exchange -*/ -// --- -class CONV_CLASS DXFModelerGeometry : public DXFEntity { -private: - std::iostream & out; ///< \ru анализируемый поток. \en stream being analyzed. - -public: - DXFModelerGeometry( std::iostream & out ); - virtual ~DXFModelerGeometry(); - - virtual bool Convert( DXFConverter & converter ); - -private: - DXFModelerGeometry ( const DXFModelerGeometry & ); // \ru не реализовано \en not implemented - DXFModelerGeometry & operator = ( const DXFModelerGeometry & ); // \ru не реализовано \en not implemented - -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Грань. - \en Face. \~ - \ingroup DXF_Exchange -*/ -// --- -class CONV_CLASS DXFFace : public DXFEntity { -private: - /** \brief \ru Цикл. - \en Loop. \~ - \details \ru Цикл объявлен внутри DXFFace. - \en The Loop is declared inside DXFFace. \~ - \ingroup DXF_Exchange -*/ - class CONV_CLASS DXFLoop { - public: - SArray points; ///< \ru Набор точек. \en Point set. - - public: - DXFLoop( const SArray & points ); - ~DXFLoop(); - - private: - DXFLoop ( const DXFLoop & ); // \ru не реализовано \en not implemented - DXFLoop & operator = ( const DXFLoop & ); // \ru не реализовано \en not implemented - - }; - -private: - PArray loops; ///< \ru Набор циклов. \en Loop set. - -public: - DXFFace( const SArray & points ); - virtual ~DXFFace(); - - virtual bool Convert ( DXFConverter & converter ); - MbFace * MakeFace( ) const; - MbGrid* MakeGrid( ) const; - void AddHole ( const SArray & points ); - void Scale ( double factor ); - -private: - DXFFace ( const DXFFace & ); // \ru не реализовано \en not implemented - DXFFace & operator = ( const DXFFace & ); // \ru не реализовано \en not implemented - -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Сеть на основе граней. - \en Mesh on the base of faces. \~ - \ingroup DXF_Exchange -*/ -// --- -class CONV_CLASS DXFPolyfaceMesh : public DXFEntity { -private: - const PArray & faces; ///< \ru Набор граней. \en Face set. - -public: - DXFPolyfaceMesh( const PArray & faces ); - virtual ~DXFPolyfaceMesh(); - - virtual bool Convert( DXFConverter & converter ); - void Scale ( double factor ); - -private: - DXFPolyfaceMesh ( const DXFPolyfaceMesh & ); // \ru не реализовано \en not implemented - DXFPolyfaceMesh & operator = ( const DXFPolyfaceMesh & ); // \ru не реализовано \en not implemented - -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Сеть на основе вершин DXF. - \en Mesh on the base of DXF vertices. \~ - \ingroup DXF_Exchange -*/ -// --- -class CONV_CLASS DXFPolygonMesh : public DXFEntity { -private: - Array2 & points; ///< \ru Набор вершин. \en Vertex set. - bool uclosed; ///< \ru Признак замкнутости по u. \en Flag of closedness by u. - bool vclosed; ///< \ru Признак замкнутости по v. \en Flag of closedness by v. - -public: - DXFPolygonMesh( Array2 & points, bool uclosed, bool vclosed ); - virtual ~DXFPolygonMesh(); - - virtual bool Convert( DXFConverter & converter ); - void Scale ( double factor ); - -private: - DXFPolygonMesh ( const DXFPolygonMesh & ); // \ru не реализовано \en not implemented - DXFPolygonMesh & operator = ( const DXFPolygonMesh & ); // \ru не реализовано \en not implemented -}; - - -//------------------------------------------------------------------------------ -/**\brief \ru Составная кривая. - \en Polyline. \~ - \ingroup DXF_Exchange -*/ -// --- -class CONV_CLASS DXFPolyline : public DXFEntity { -public: - /**\brief \ru Сегмент составной кривой. - \en Polyline segment. \~ - \details \ru Класс объявлен внутри DXFPolyline; - \en The class is declared inside DXFPolyline; \~ - \ingroup DXF_Exchange -*/ - class CONV_CLASS DXFSegment { - private: - MbCurve & curve; ///< \ru Кривая. \en A curve. - double width1; ///< \ru Толщина. \en The thickness. - double width2; ///< \ru Толщина. \en The thickness. - - mutable SPtr left; - mutable SPtr right; - mutable SPtr top; - mutable SPtr bottom; - - public: - DXFSegment( MbCurve & _curve, double _width1, double _width2 ); - ~DXFSegment(); - - const MbCurve & Curve () const { return curve; } - double Width1 () const { return width1; } - double Width2 () const { return width2; } - bool IsWidth1Zero() const { return (width1 < NULL_EPSILON); } - bool IsWidth2Zero() const { return (width2 < NULL_EPSILON); } - void ChangeLeft ( MbCurve & left ) const; - void ChangeRight ( MbCurve & right ) const; - void ChangeTop ( MbCurve & top ) const; - void ChangeBottom( MbCurve & bottom ) const; - const MbCurve * GetLeft () const { return left; } - const MbCurve * GetRight () const { return right; } - const MbCurve * GetTop () const { return top; } - const MbCurve * GetBottom () const { return bottom; } - void MakeContours( std::vector< SPtr > & contours ) const; - - private: - DXFSegment ( const DXFSegment & ); // \ru не реализовано \en not implemented - DXFSegment & operator = ( const DXFSegment & ); // \ru не реализовано \en not implemented - - }; - -private: - const PArray & segments; ///< \ru Сегменты. \en Segments. - bool closed; ///< \ru Признак замкнутости. \en Flag of closedness. - MbPlacement3D placement; ///< \ru Локальная система координат. \en Local coordinate system. - MbVector3D direction; ///< \ru Направление. \en Direction. - -public: - DXFPolyline( const PArray & _segments, bool _closed, const MbPlacement3D & _placement, const MbVector3D & _direction ); - virtual ~DXFPolyline(); - - virtual bool Convert( DXFConverter & converter ); - void Scale ( double factor ); - -private: - DXFPolyline ( const DXFPolyline & ); // \ru не реализовано \en not implemented - DXFPolyline & operator = ( const DXFPolyline & ); // \ru не реализовано \en not implemented - -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Кривая. - \en A curve. \~ - \ingroup DXF_Exchange -*/ -// --- -class CONV_CLASS DXFCurve : public DXFEntity { -private: - MbCurve3D & curve; ///< \ru Кривая. \en A curve. - MbVector3D direction; ///< \ru Направление. \en Direction. - -public: - DXFCurve( MbCurve3D & _curve, const MbVector3D & _direction ); - virtual ~DXFCurve(); - - virtual bool Convert( DXFConverter & converter ); - void Scale ( double factor ); - -private: - DXFCurve ( const DXFCurve & ); // \ru не реализовано \en not implemented - DXFCurve & operator = ( const DXFCurve & ); // \ru не реализовано \en not implemented - -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Пространственная кривая. - \en A space curve. \~ - \details \ru Используется для передачи каркасных моделей. - \en Used for wireframe models transfer. \~ - \ingroup DXF_Exchange -*/ -// --- -class CONV_CLASS DXFCurve3D : public DXFEntity { -private: - MbCurve3D & curve; ///< \ru Кривая. \en A curve. - -public: - DXFCurve3D( MbCurve3D & _curve ); - virtual ~DXFCurve3D(); - - virtual bool Convert( DXFConverter & converter ); - void Scale ( double factor ); - -private: - DXFCurve3D ( const DXFCurve3D & ); // \ru не реализовано \en not implemented - DXFCurve3D & operator = ( const DXFCurve3D & ); // \ru не реализовано \en not implemented - -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Точка. - \en Point. \~ - \ingroup DXF_Exchange -*/ -// --- -class CONV_CLASS DXFPoint : public DXFEntity { -private: - MbCartPoint3D point; ///< \ru Точка. \en A point. - MbVector3D direction; ///< \ru Направление. \en Direction. - -public: - DXFPoint( const MbCartPoint3D & _point, const MbVector3D & _direction ); - virtual ~DXFPoint(); - - virtual bool Convert( DXFConverter & converter ); - void Scale ( double factor ); - -private: - DXFPoint ( const DXFPoint & ); // \ru не реализовано \en not implemented - DXFPoint & operator = ( const DXFPoint & ); // \ru не реализовано \en not implemented - -}; - - -//------------------------------------------------------------------------------ -// -// --- -void StitchFacesAndCreateSolids( const RPArray & faces, std::vector< SPtr > & solids ); - - -//------------------------------------------------------------------------------ -// -// --- -void UnStitchFacesAndCreateSolids( const RPArray & faces, std::vector< SPtr > & solids ); - - +//////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru DXF - конвертер. + \en DXF - converter. \~ +*/ +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __DXF_DATA_H +#define __DXF_DATA_H + +#include +#include +#include +#include +#include +#include +#include + + +class MbCartPoint; +class MbCurve; +class MbCartPoint3D; +class MbVector3D; +class MbPlacement3D; +class MbCurve3D; +class MbSolid; +class MbFace; +class MbGrid; +class DXFConverter; + + +//------------------------------------------------------------------------------ +/** \brief \ru Объект формата DXF. + \en Object of DXF format. \~ + \ingroup DXF_Exchange +*/ +// --- +class CONV_CLASS DXFEntity { +protected: + MbAttributeContainer attributes; ///< \ru Атрибуты. \en Attributes. + +protected: + // \ru Конструктор. \en Constructor. + DXFEntity(); + // \ru Деструктор. \en Destructor. + virtual ~DXFEntity(); + +public: + /// \ru Установить цветовые атрибуты. \en Set color attributes. + void SetAttributes( MbAttributeContainer & attribs ); + virtual bool Convert ( DXFConverter & converter ) = 0; + +private: + DXFEntity ( const DXFEntity & ); // \ru не реализовано \en not implemented + DXFEntity & operator = ( const DXFEntity & ); // \ru не реализовано \en not implemented + +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Анализатор потока SAT. + \en SAT stream analyzer. \~ + \ingroup DXF_Exchange +*/ +// --- +class CONV_CLASS DXFModelerGeometry : public DXFEntity { +private: + std::iostream & out; ///< \ru анализируемый поток. \en stream being analyzed. + +public: + DXFModelerGeometry( std::iostream & out ); + virtual ~DXFModelerGeometry(); + + virtual bool Convert( DXFConverter & converter ); + +private: + DXFModelerGeometry ( const DXFModelerGeometry & ); // \ru не реализовано \en not implemented + DXFModelerGeometry & operator = ( const DXFModelerGeometry & ); // \ru не реализовано \en not implemented + +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Грань. + \en Face. \~ + \ingroup DXF_Exchange +*/ +// --- +class CONV_CLASS DXFFace : public DXFEntity { +private: + /** \brief \ru Цикл. + \en Loop. \~ + \details \ru Цикл объявлен внутри DXFFace. + \en The Loop is declared inside DXFFace. \~ + \ingroup DXF_Exchange +*/ + class CONV_CLASS DXFLoop { + public: + SArray points; ///< \ru Набор точек. \en Point set. + + public: + DXFLoop( const SArray & points ); + ~DXFLoop(); + + private: + DXFLoop ( const DXFLoop & ); // \ru не реализовано \en not implemented + DXFLoop & operator = ( const DXFLoop & ); // \ru не реализовано \en not implemented + + }; + +private: + PArray loops; ///< \ru Набор циклов. \en Loop set. + +public: + DXFFace( const SArray & points ); + virtual ~DXFFace(); + + virtual bool Convert ( DXFConverter & converter ); + MbFace * MakeFace( ) const; + MbGrid* MakeGrid( ) const; + void AddHole ( const SArray & points ); + void Scale ( double factor ); + +private: + DXFFace ( const DXFFace & ); // \ru не реализовано \en not implemented + DXFFace & operator = ( const DXFFace & ); // \ru не реализовано \en not implemented + +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Сеть на основе граней. + \en Mesh on the base of faces. \~ + \ingroup DXF_Exchange +*/ +// --- +class CONV_CLASS DXFPolyfaceMesh : public DXFEntity { +private: + const PArray & faces; ///< \ru Набор граней. \en Face set. + +public: + DXFPolyfaceMesh( const PArray & faces ); + virtual ~DXFPolyfaceMesh(); + + virtual bool Convert( DXFConverter & converter ); + void Scale ( double factor ); + +private: + DXFPolyfaceMesh ( const DXFPolyfaceMesh & ); // \ru не реализовано \en not implemented + DXFPolyfaceMesh & operator = ( const DXFPolyfaceMesh & ); // \ru не реализовано \en not implemented + +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Сеть на основе вершин DXF. + \en Mesh on the base of DXF vertices. \~ + \ingroup DXF_Exchange +*/ +// --- +class CONV_CLASS DXFPolygonMesh : public DXFEntity { +private: + Array2 & points; ///< \ru Набор вершин. \en Vertex set. + bool uclosed; ///< \ru Признак замкнутости по u. \en Flag of closedness by u. + bool vclosed; ///< \ru Признак замкнутости по v. \en Flag of closedness by v. + +public: + DXFPolygonMesh( Array2 & points, bool uclosed, bool vclosed ); + virtual ~DXFPolygonMesh(); + + virtual bool Convert( DXFConverter & converter ); + void Scale ( double factor ); + +private: + DXFPolygonMesh ( const DXFPolygonMesh & ); // \ru не реализовано \en not implemented + DXFPolygonMesh & operator = ( const DXFPolygonMesh & ); // \ru не реализовано \en not implemented +}; + + +//------------------------------------------------------------------------------ +/**\brief \ru Составная кривая. + \en Polyline. \~ + \ingroup DXF_Exchange +*/ +// --- +class CONV_CLASS DXFPolyline : public DXFEntity { +public: + /**\brief \ru Сегмент составной кривой. + \en Polyline segment. \~ + \details \ru Класс объявлен внутри DXFPolyline; + \en The class is declared inside DXFPolyline; \~ + \ingroup DXF_Exchange +*/ + class CONV_CLASS DXFSegment { + private: + MbCurve & curve; ///< \ru Кривая. \en A curve. + double width1; ///< \ru Толщина. \en The thickness. + double width2; ///< \ru Толщина. \en The thickness. + + mutable SPtr left; + mutable SPtr right; + mutable SPtr top; + mutable SPtr bottom; + + public: + DXFSegment( MbCurve & _curve, double _width1, double _width2 ); + ~DXFSegment(); + + const MbCurve & Curve () const { return curve; } + double Width1 () const { return width1; } + double Width2 () const { return width2; } + bool IsWidth1Zero() const { return (width1 < NULL_EPSILON); } + bool IsWidth2Zero() const { return (width2 < NULL_EPSILON); } + void ChangeLeft ( MbCurve & left ) const; + void ChangeRight ( MbCurve & right ) const; + void ChangeTop ( MbCurve & top ) const; + void ChangeBottom( MbCurve & bottom ) const; + const MbCurve * GetLeft () const { return left; } + const MbCurve * GetRight () const { return right; } + const MbCurve * GetTop () const { return top; } + const MbCurve * GetBottom () const { return bottom; } + void MakeContours( std::vector< SPtr > & contours ) const; + + private: + DXFSegment ( const DXFSegment & ); // \ru не реализовано \en not implemented + DXFSegment & operator = ( const DXFSegment & ); // \ru не реализовано \en not implemented + + }; + +private: + const PArray & segments; ///< \ru Сегменты. \en Segments. + bool closed; ///< \ru Признак замкнутости. \en Flag of closedness. + MbPlacement3D placement; ///< \ru Локальная система координат. \en Local coordinate system. + MbVector3D direction; ///< \ru Направление. \en Direction. + +public: + DXFPolyline( const PArray & _segments, bool _closed, const MbPlacement3D & _placement, const MbVector3D & _direction ); + virtual ~DXFPolyline(); + + virtual bool Convert( DXFConverter & converter ); + void Scale ( double factor ); + +private: + DXFPolyline ( const DXFPolyline & ); // \ru не реализовано \en not implemented + DXFPolyline & operator = ( const DXFPolyline & ); // \ru не реализовано \en not implemented + +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Кривая. + \en A curve. \~ + \ingroup DXF_Exchange +*/ +// --- +class CONV_CLASS DXFCurve : public DXFEntity { +private: + MbCurve3D & curve; ///< \ru Кривая. \en A curve. + MbVector3D direction; ///< \ru Направление. \en Direction. + +public: + DXFCurve( MbCurve3D & _curve, const MbVector3D & _direction ); + virtual ~DXFCurve(); + + virtual bool Convert( DXFConverter & converter ); + void Scale ( double factor ); + +private: + DXFCurve ( const DXFCurve & ); // \ru не реализовано \en not implemented + DXFCurve & operator = ( const DXFCurve & ); // \ru не реализовано \en not implemented + +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Пространственная кривая. + \en A space curve. \~ + \details \ru Используется для передачи каркасных моделей. + \en Used for wireframe models transfer. \~ + \ingroup DXF_Exchange +*/ +// --- +class CONV_CLASS DXFCurve3D : public DXFEntity { +private: + MbCurve3D & curve; ///< \ru Кривая. \en A curve. + +public: + DXFCurve3D( MbCurve3D & _curve ); + virtual ~DXFCurve3D(); + + virtual bool Convert( DXFConverter & converter ); + void Scale ( double factor ); + +private: + DXFCurve3D ( const DXFCurve3D & ); // \ru не реализовано \en not implemented + DXFCurve3D & operator = ( const DXFCurve3D & ); // \ru не реализовано \en not implemented + +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Точка. + \en Point. \~ + \ingroup DXF_Exchange +*/ +// --- +class CONV_CLASS DXFPoint : public DXFEntity { +private: + MbCartPoint3D point; ///< \ru Точка. \en A point. + MbVector3D direction; ///< \ru Направление. \en Direction. + +public: + DXFPoint( const MbCartPoint3D & _point, const MbVector3D & _direction ); + virtual ~DXFPoint(); + + virtual bool Convert( DXFConverter & converter ); + void Scale ( double factor ); + +private: + DXFPoint ( const DXFPoint & ); // \ru не реализовано \en not implemented + DXFPoint & operator = ( const DXFPoint & ); // \ru не реализовано \en not implemented + +}; + + +//------------------------------------------------------------------------------ +// +// --- +void StitchFacesAndCreateSolids( const RPArray & faces, std::vector< SPtr > & solids ); + + +//------------------------------------------------------------------------------ +// +// --- +void UnStitchFacesAndCreateSolids( const RPArray & faces, std::vector< SPtr > & solids ); + + #endif // __DXF_DATA_H \ No newline at end of file diff --git a/C3d/Include/func_analytical_function.h b/C3d/Include/func_analytical_function.h index 8b19060..c946b99 100644 --- a/C3d/Include/func_analytical_function.h +++ b/C3d/Include/func_analytical_function.h @@ -77,7 +77,7 @@ public : virtual void Explore( double & t, bool ext, double & val, double & fir, double * sec, double * thr ) const; - virtual void Inverse ( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse ( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual double Step ( double t, double sag ) const; virtual double DeviationStep( double t, double angle ) const; @@ -162,7 +162,7 @@ public : virtual double SecondDer ( double & t ) const; // \ru Вторая производная по t \en The second derivative with respect to t virtual double ThirdDer ( double & t ) const; // \ru Третья производная по t \en The third derivative with respect to t - virtual void Inverse ( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse ( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual double Step ( double t, double sag ) const; virtual double DeviationStep ( double t, double angle ) const; diff --git a/C3d/Include/func_const_function.h b/C3d/Include/func_const_function.h index 559a468..9fcb2ba 100644 --- a/C3d/Include/func_const_function.h +++ b/C3d/Include/func_const_function.h @@ -61,7 +61,7 @@ public: virtual void Explore( double & t, bool ext, double & val, double & fir, double * sec, double * thr ) const; - virtual void Inverse ( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse ( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual double Step( double t, double sag ) const; virtual double DeviationStep( double t, double angle ) const; diff --git a/C3d/Include/func_cubic_function.h b/C3d/Include/func_cubic_function.h index 73a3667..5c4cae7 100644 --- a/C3d/Include/func_cubic_function.h +++ b/C3d/Include/func_cubic_function.h @@ -54,6 +54,8 @@ public: /// \ru Инициализация по точкам, параметрам и признаку замкнутости. \en Initialization by points, parameters and an attribute of closedness. void Init( const SArray & values, const SArray & params, bool cls ); + /// \ru Инициализация монотонного сплайна. \en Monotone spline initialization. + bool InitMonotonic( const SArray & values, const SArray & params, bool valClosed ); public: // \ru Общие функции математического объекта \en Common functions of mathematical object virtual MbeFunctionType IsA () const; // \ru Тип элемента \en A type of element @@ -83,7 +85,7 @@ public: // \ru Вычислить аргумент t по значению функции. \en Calculate the argument t by the function value. virtual double Argument( double & val ) const; - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual double Step( double t, double sag ) const; virtual double DeviationStep( double t, double angle ) const; diff --git a/C3d/Include/func_cubic_spline_function.h b/C3d/Include/func_cubic_spline_function.h index efd89b7..5294a29 100644 --- a/C3d/Include/func_cubic_spline_function.h +++ b/C3d/Include/func_cubic_spline_function.h @@ -72,7 +72,7 @@ public: virtual void Explore( double & t, bool ext, double & val, double & fir, double * sec, double * thr ) const; - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual double Step( double t, double sag ) const; virtual double DeviationStep( double t, double angle ) const; diff --git a/C3d/Include/func_line_function.h b/C3d/Include/func_line_function.h index 137012d..17897c2 100644 --- a/C3d/Include/func_line_function.h +++ b/C3d/Include/func_line_function.h @@ -67,7 +67,7 @@ public: // \ru Вычислить аргумент t по значению функции. \en Calculate the argument t by the function value. virtual double Argument( double & val ) const; - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual double Step( double t, double sag ) const; virtual double DeviationStep( double t, double angle ) const; diff --git a/C3d/Include/func_mono_smooth_function.h b/C3d/Include/func_mono_smooth_function.h new file mode 100644 index 0000000..6ff8c53 --- /dev/null +++ b/C3d/Include/func_mono_smooth_function.h @@ -0,0 +1,159 @@ +//////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Монотонная сплайн интерполяция класса c2 на основе + однопараметрических групп диффеоморфизмов (Н.В.Осадченко). + \en Monotone spline interpolation class c2 based + one-parameter groups of diffeomorphisms (N.V. Osadchenko). \~ + +*/ +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __FUNC_MONO_SMOOTH_FUNCTION_H +#define __FUNC_MONO_SMOOTH_FUNCTION_H + + +#include +#include + + +//------------------------------------------------------------------------------ +/** \brief \ru Монотонная сплайн интерполяция класса c2 на основе + однопараметрических групп диффеоморфизмов (Н.В.Осадченко). + \en Monotone spline interpolation class c2 based + one-parameter groups of diffeomorphisms (N.V. Osadchenko). \~ + \details \ru Класс описывает сплайн-функцию, которая строится по возрастающему \n + набору параметров и монотонно возрастающему/убывающему набору значений. \n + Функция гарантирует однозначное соответствие параметр-значение. При этом \n + аналичиские функции, описывающие сплайн на каждом участке, стыкуются \n + между собой с сохранением непрерывности первой и второй производной. \n + (Если от функции не требуется второй порядок непрерывности, то монотонную функцию \n + можно построить с помощью кубической функции MbCubicFunction через инициализацию \n + InitMonotonic). Данная функция может быть использована, как функция репараметризации. \n + При этом, если репараметризуемый объект обладает свойством замкнутости, то \n + функция может учесть это свойство, обеспечив также второй порядок непрерывности \n + через шов. Функция принимает на вход при инициализации массив параметров и \n + значений, имеющих одинаковую размерность вне зависимости от параметра \n + замкнутости. Репараметризующая функция построена в виде 3х вложенных друг в друга \n + рациональных функций y(x)=y1+(y2-y1)*Fb(Fg(Fb((x-x1)/(x2-x1)))). Подробно ознакомится \n + с данным типом сплайна можно по ссылке. + http://www.stfi.ru/journal/STFI_2017_03/STFI_2017_03_Osadchenko.pdf + \en The class describes a spline function, which is built from an increasing set \n + of parameters and a monotonically increasing / decreasing set of values. The \n + function guarantees a one-to-one parameter-value match. In this case, the \n + analytical functions describing the spline in each section are joined together \n + while maintaining the continuity of the first and second derivatives. (If the \n + function does not require the second order of continuity, then a monotonic \n + function can be built using the MbCubicFunction cubic function through the \n + InitMonotonic initialization). This function can be used as a reparameterization \n + function. Moreover, if the reparameterizable object has the property of being \n + closed, then the function can take this property into account, providing also \n + the second order of continuity through the seam. During initialization, the \n + function accepts an array of parameters and values ​​that have the same dimension, \n + regardless of the closure parameter. The reparametrizing function is built in \n + the form of 3 nested rational functions \n + y (x) = y1 + (y2-y1) * Fb (Fg (Fb ((x-x1) / (x2-x1)))). \n + You can learn more about this type of spline here. \n + http://www.stfi.ru/journal/STFI_2017_03/STFI_2017_03_Osadchenko.pdf \~ + \ingroup Functions +*/ +// --- +class MATH_CLASS MbMonoSmoothFunction : public MbFunction { +protected: + c3d::DoubleVector x; ///< \ru Возрастающий набор параметров. \en Increasing set of parameters. + c3d::DoubleVector y; ///< \ru Монотонный набор значений. \en Monotonic set of values. + c3d::DoubleVector bet; ///< \ru Параметры beta-функций. \en Parameters of beta functions. + c3d::DoubleVector gam; ///< \ru Параметры gamma-функций. \en Parameters of gamma functions. + bool cls; ///< \ru Периодичность набора значений.\en Periodicity of the set of values. + +private: + /// \ru Конструктор. \en Constructor. + MbMonoSmoothFunction(); + /// \ru Конструктор копии. \en Copy constructor. + MbMonoSmoothFunction( const MbMonoSmoothFunction & ); +public : + virtual ~MbMonoSmoothFunction(); + +public: + /// \ru Создание объекта. \en Object creation. + static MbFunction * Create( const c3d::DoubleVector & pars, const c3d::DoubleVector & vals, bool yCls ); + /** \brief \ru Инициализация сплайна. + \en Spline initialization. \~ + \param[in] pars - \ru Возрастающий набор параметров. + \en Increasing set of parameters. \~ + \param[in] vals - \ru Монотонный набор значений. + \en Monotonic set of values. \~ + \param[in] valCls - \ru Периодичность набора значений. + \en Periodicity of the set of values. \~ + \return \ru Статус операции. + \en Operation status. \~ + */ + bool Init ( const c3d::DoubleVector & pars, const c3d::DoubleVector & vals, bool valCls ); +public: + // \ru Общие функции математического объекта \en Common functions of mathematical object + virtual MbeFunctionType IsA () const; // \ru Тип элемента \en A type of element + virtual MbFunction & Duplicate() const; // \ru Сделать копию элемента \en Create a copy of the element + virtual bool IsSame ( const MbFunction & other, double accuracy = LENGTH_EPSILON ) const; // \ru Являются ли объекты равными \en Determine whether objects are equal + virtual bool SetEqual ( const MbFunction & ); // \ru Сделать равным \en Make equal + virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of object + virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта \en Set properties of object + + virtual double GetTMax () const; // \ru Вернуть максимальное значение параметра \en Get the maximum value of parameter + virtual double GetTMin () const; // \ru Вернуть минимальное значение параметра \en Get the minimum value of parameter + virtual bool IsClosed () const; // \ru Замкнутость кривой \en A curve closeness + virtual void SetClosed( bool ); // \ru Замкнутость функции \en A function closeness + + virtual double Value ( double & t ) const; // \ru Значение функции для t \en The value of function for a given t + virtual double FirstDer ( double & t ) const; // \ru Первая производная по t \en The first derivative with respect to t + virtual double SecondDer ( double & t ) const; // \ru Вторая производная по t \en The second derivative with respect to t + virtual double ThirdDer ( double & t ) const; // \ru Третья производная по t \en The third derivative with respect to t + + virtual double _Value ( double t ) const; // \ru Значение функции для t \en The value of function for a given t + virtual double _FirstDer ( double t ) const; // \ru Первая производная по t \en The first derivative with respect to t + virtual double _SecondDer ( double t ) const; // \ru Вторая производная по t \en The second derivative with respect to t + virtual double _ThirdDer ( double t ) const; // \ru Третья производная по t \en The third derivative with respect to t + // \ru Вычислить значение и производные. \en Calculate value and derivatives of object for given parameter. \~ + virtual void Explore( double & t, bool ext, double & val, double & fir, double * sec, double * thr ) const; + + size_t GetListCount() const { return x.size(); } // \ru Количество точек в наборе \en Number of points in a set. + double GetValue(size_t ind ) const { return y[ind]; } // \ru Получить значение по индексу. \en Get value by index. + double GetParam(size_t ind ) const { return x[ind]; } // \ru Получить параметр по индексу. \en Get parameter by index. + + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction + virtual double Step( double t, double sag ) const; + virtual double DeviationStep( double t, double angle ) const; + + virtual double MinValue ( double & t ) const; // \ru Минимальное значение функции \en The minimum value of function + virtual double MaxValue ( double & t ) const; // \ru Максимальное значение функции \en The maximum value of function + virtual double MidValue () const; // \ru Среднее значение функции \en The middle value of function + virtual bool IsGood () const; // \ru Корректность функции \en Correctness of function + + virtual bool IsConst() const; + virtual bool IsLine () const; + + virtual void SetOffsetFunc( double distOld, double distNew ); // \ru Сместить функцию \en Shift a function + virtual bool SetLimitParam( double, double ); // \ru Установить область изменения параметра \en Set range of parameter + virtual void SetLimitValue( size_t n, double); // \ru Установить значение на конце ( 1 - в начале, 2 - в конце) \en Set the value at the end (1 - at start point, 2 - at end point) + virtual double GetLimitValue( size_t n ) const; // \ru Дать значение на конце ( 1 - в начале, 2 - в конце) \en Get the value at the end (1 - at start point, 2 - at end point) + virtual bool InsertValue( double x, double y); // \ru Установить значение для параметра t. \en Set the value for the pdrdmeter t. + + // \ru Создать функцию из части функции между параметрами t1 и t2 c выбором направления sense. \en Create a function in part of the function between the parameters t1 and t2 choosing the direction. + virtual MbFunction * Trimmed( double t1, double t2, int sense ) const; + // \ru Разбить функцию точкой с параметром t и вернуть отрезанную часть. \en Function break by the parameter t, and cut off part of the function: begs == true - save the initial half, beg == false - save the final half. + virtual MbFunction * BreakFunction( double t, bool beg ); + MbFunction * Break( double t1, double t2 ) const; ///< \ru Выделить часть функции. \en Select a part of a function. + +private: + void CheckParam( double & t ) const; // \ru Установить параметр в область определения. \en Set the parameter to the domain. + void DivExplore( size_t ord, double( &P )[4], double( &T )[4], double( &res )[4] ) const; // \ru Найти производные частного P/T. \en Find the derivatives of the quotient P / T. + void ExploreBet( double b, size_t ord, double( &res )[4] ) const; // \ru Расчитать производные beta функции. \en Calculate the derivatives of the beta function. + void ExploreGam( double b, size_t ord, double( &res )[4] ) const;// \ru Расчитать производные gamma функции. \en Calculate the derivatives of the gamma function. + void Explore( double x, size_t ord, double( &res )[4] ) const;// \ru Расчитать производные сплайна. \en Calculate the derivatives of the spline. + void operator = ( const MbMonoSmoothFunction & ); // \ru Не реализовано \en Not implemented + + DECLARE_PERSISTENT_CLASS_NEW_DEL( MbMonoSmoothFunction ) +}; + +IMPL_PERSISTENT_OPS( MbCubicSplineFunction ) + +#endif // __FUNC_MONO_SMOOTH_FUNCTION_H diff --git a/C3d/Include/func_power_function.h b/C3d/Include/func_power_function.h index c00ee31..3018514 100644 --- a/C3d/Include/func_power_function.h +++ b/C3d/Include/func_power_function.h @@ -67,7 +67,7 @@ public: virtual void Explore( double & t, bool ext, double & val, double & fir, double * sec, double * thr ) const; - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual double Step( double t, double sag ) const; virtual double DeviationStep( double t, double angle ) const; diff --git a/C3d/Include/func_serve_function.h b/C3d/Include/func_serve_function.h index 3c4072d..c199777 100644 --- a/C3d/Include/func_serve_function.h +++ b/C3d/Include/func_serve_function.h @@ -32,10 +32,10 @@ public : public : ///< \ru Конструктор по умолчанию. \en Default constructor. - MbServeFunction(); + MbServeFunction(); private: ///< \ru Конструктор по параметрам. \en Constructor by parameters. - MbServeFunction( double ka, double kb, double kc, double t1, double t2 ); + MbServeFunction( double ka, double kb, double kc, double t1, double t2 ); ///< \ru Конструктор копировния. \en Copy constructor. MbServeFunction( const MbServeFunction & ); public : @@ -48,7 +48,7 @@ public: \param[in] t1, t2 - \ru Область определения репараметризованной кривой \en Parametric region of the reparameterized curve. \~ */ - void InitLinear( double basisTMin, double basisTMax, double t1, double t2 ); + void InitLinear( double basisTMin, double basisTMax, double t1, double t2 ); /** \brief \ru Инициализация переменных для репараметризации с заданной производной в начале. \en Initialization of variables for reparameterization with a given derivative at the beginning. \~ @@ -60,11 +60,11 @@ public: \en The derivative of the base curve parameter at the beginning of the curve. \~ \return - \ru true - если репараметризация выполнена успешно, false - если репараметризация оказалась вырожденной и была сведена к линейной. - \en true - if reparameterization is successful, + \en true - if reparameterization is successful, false - if the reparametrization is degenerate and reduced to linear. \~ */ - bool InitQuadratic( double basisTMin, double basisTMax, double t1, double t2, double begDer ); - + bool InitQuadratic( double basisTMin, double basisTMax, double t1, double t2, double begDer ); + /** \brief \ru Репараметризация, обеспечивающая на концах новой кривой указаные производные параметра. \en Reparametrization providing the indicated derivatives of the parameter at the ends of the new curve. \~ \details \ru Параметрическая ширина будет подобрана автоматически, исходя из значений производных. @@ -75,10 +75,10 @@ public: \en Derivatives of the base curve parameter at the beginning and end of the curve. \~ \return - \ru true - репараметризация выполнена успешно, false - репараметризация оказалась вырожденной и была сведена к линейной. - \en true - reparameterization is successful, + \en true - reparameterization is successful, false - reparametrization is degenerate and reduced to linear. \~ */ - bool InitScaledEnds( double basisTMin, double basisTMax, double dt1, double dt2); + bool InitScaledEnds( double basisTMin, double basisTMax, double dt1, double dt2); public: // \ru Общие функции математического объекта \en Common functions of mathematical object virtual MbeFunctionType IsA() const; // \ru Тип элемента \en A type of element @@ -108,7 +108,7 @@ public: // \ru Вычислить аргумент t по значению функции. \en Calculate the argument t by the function value. virtual double Argument( double & val ) const; - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual double Step( double t, double sag ) const; virtual double DeviationStep( double t, double angle ) const; diff --git a/C3d/Include/func_sinus_function.h b/C3d/Include/func_sinus_function.h index 2a93ef0..0bb33ef 100644 --- a/C3d/Include/func_sinus_function.h +++ b/C3d/Include/func_sinus_function.h @@ -67,7 +67,7 @@ public: virtual void Explore( double & t, bool ext, double & val, double & fir, double * sec, double * thr ) const; - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction + virtual void Inverse( MbRegTransform * iReg = c3d_null ); // \ru Изменить направление \en Change direction virtual double Step( double t, double sag ) const; virtual double DeviationStep( double t, double angle ) const; diff --git a/C3d/Include/function.h b/C3d/Include/function.h index 59e88eb..a92065c 100644 --- a/C3d/Include/function.h +++ b/C3d/Include/function.h @@ -41,6 +41,7 @@ enum MbeFunctionType { ft_PowerFunction = 6, ///< \ru Степенная функция. \en Power function. ft_SinusFunction = 7, ///< \ru Синусоидальная функция. \en Sinusoidal function. ft_ServeFunction = 8, ///< \ru Служебная функция. \en Service function. + ft_C2MonoSplineFunction= 9, ///< \ru Кубическая сплайновая функция. \en A cubic spline function. ft_CharacterFunction = 101, ///< \ru Символьная функция. \en A symbolic function. ft_AnalyticalFunction = 102, ///< \ru Символьная функция на модельном выражении. \en A symbolic function in model expression. @@ -130,9 +131,9 @@ public: \param[out] fir - \ru Производная. \en Derivative with respect to t. \~ \param[out] sec - \ru Вторая производная по t, если не ноль. - \en Second derivative with respect to t, if not NULL. \~ + \en Second derivative with respect to t, if not c3d_null. \~ \param[out] thr - \ru Третья производная по t, если не ноль. - \en Third derivative with respect to t, if not NULL. \~ + \en Third derivative with respect to t, if not c3d_null. \~ \ingroup Curves_3D */ virtual void Explore( double & t, bool ext, @@ -144,7 +145,7 @@ public: virtual double Argument( double & val ) const; /// \ru Изменить направление. \en Change direction. - virtual void Inverse( MbRegTransform * iReg = NULL ) = 0; + virtual void Inverse( MbRegTransform * iReg = c3d_null ) = 0; /// \ru Вычислить шаг по прогибу для заданного параметра t. \en Calculate a step by the sag for a given parameter t. virtual double Step( double t, double sag ) const = 0; /// \ru Вычислить шаг по угловому отклонению для заданного параметра t. \en Calculate a step by the angular deviation for a given parameter t. @@ -191,6 +192,8 @@ public: virtual void GetCharacteristicParams( std::vector & tSpecific, double t1, double t2 ); /** \} */ + /// \ru Вернуть середину параметрического диапазона. \en Return the middle of parametric range. + double GetTMid() const { return ((GetTMin() + GetTMax()) * 0.5); } /// \ru Параметрическая длина. \en The parametric length. double GetParamLength () const { return GetTMax()-GetTMin(); } /// \ru Находится ли параметр в области определения функции. \en Whether the parameter belongs to the function domain. diff --git a/C3d/Include/gce_api.h b/C3d/Include/gce_api.h index 7231e8d..33d1e7a 100644 --- a/C3d/Include/gce_api.h +++ b/C3d/Include/gce_api.h @@ -1,1926 +1,1926 @@ -////////////////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru Программный интерфейс решателя геометрических ограничений. - \en Program interface of geometric constraints solver. \~ - \details \ru Программный интерфейс геометрического решателя представляет - собой набор типов данных и функций, необходимых для решения - задачи геометрических ограничений. Предметная область решателя - предусматривает такие типы, как "геометрический объект", - "геометрическое ограничение", "система ограничений". Базовые типы - решателя объявлены в заголовочном файле . Вызовы функций - и их аргументы подобраны таким образом, что бы наиболее удобно - осуществлять формулировку задачи для решателя в терминах объектов - и ограничений. Названия многих типов данных и вызовов API начинаются - префиксом GCE, сокращенно Geometric Constraint Engine. \n - - Функции API решателя можно подразделить на такие группы: - 1) Функции #GCE_CreateSystem, #GCE_ClearSystem, #GCE_RemoveSystem - позволяют создавать и удалять систему ограничений в целом - (должны вызываться в однопоточном режиме);\n - 2) С помощью функций вида GCE_Add_XXXXXXX осуществляется формулировка - задачи ограничений, с их помощью в систему добавляются объекты и - ограничения (могут использоваться в параллельном режиме);\n - 3) Функции вида GCE_Change_XXXXXXX, GCE_Set_XXXXXXX позволяют менять - размеры и состояние объектов (могут использоваться в параллельном режиме);\n - 4) Функции для запросов такие, как GCE_Get_XXXXXXX, #GCE_SplinePoint, - GCE_IsXXXXX, #GCE_PointDOF и т.д. позволяют осуществлять запросы - о состоянии объектов или их свойств, узнать степень свободы объектов - и прочие характеристики (могут использоваться в параллельном режиме);\n - 5) Метод #GCE_Evaluate вычисляет состояния системы ограничений, в котором - все ограничения удовлетворены, или возвращает код ошибки при невозможности - найти решение (должна вызываться в однопоточном режиме).\n - 6) Другая группа вызовов отвечает за способы управления недоопределенной - системой ограничений. Вызовы #GCE_PrepareDraggingPoint, #GCE_MovePoint - обеспечивают интерактивную манипуляцию объектами чертежа/эскиза.\n - - \en A program interface of geometric solver represents - a set of data types and functions necessary for solution - of a problem of geometric constraints. Subject area of the solver - provides such types as "geometric object", "geometric constraint", - "constraint system". Base types of the solver are declared in the header - file . Calls of functions and their arguments are chosen - in such way that the formulation of the problem for the solver in terms - of objects and constraints could be performed by the most convenient way. - The names of many data types and API calls begins with a prefix 'GCE', - abbreviation for Geometric Constraint Engine. \n - - API functions of solver can be subdivided into the following groups: - 1) Functions #GCE_CreateSystem, GCE_ClearSystem, GCE_RemoveSystem - allow to create and delete the system of constraints in general - (should be called in sequential code);\n - 2) The problems of constraints are formulated with a function of a kind GCE_Add_XXXXXXX, - by using them the objects and constraints are added to the system - (could be called in multi-threaded mode);\n - 3) Functions of a kind GCE_Change_XXXXXXX, GCE_Set_XXXXXXX allow to change dimensions - and objects states (could be called in multi-threaded mode);\n - 4) Functions for requests, such as #GCE_Get_XXXXXXX, #GCE_SplinePoint, - #GCE_IsXXXXX, #GCE_PointDOF etc, allow to perform requests - about the states of objects or their properties, find the objects degree of freedom - and other characteristics could be called in multi-threaded mode;\n - 5) The method #GCE_Evaluate calculates the state of the constraint system, where - all constraints are satisfied or returns an error code if it is not possible - to find a solution (should be called in sequential code). \n - 6) Other group of calls responses for the ways of control of underdetermined - system of constraints. Calls of #GCE_PrepareDraggingPoint, #GCE_MovePoint - provide interactive manipulation with objects of drawing/sketch.\n \~ -*/ -////////////////////////////////////////////////////////////////////////////////////////// - -#ifndef __GCE_API_H -#define __GCE_API_H - -#include -#include -#include - -class MATH_CLASS MbMatrix; -class MATH_CLASS MbCurve; - -/** - \addtogroup Constraints2D_API - \{ -*/ - -//---------------------------------------------------------------------------------------- -/** \brief \ru Создать пустую систему ограничений. - \en Create a simple constraint system. \~ - \details \ru Вызов создает пустую систему ограничений. Кроме того, в памяти - создаются внутренние структуры данных геометрического решателя, обслуживающего - систему ограничений. Функция возвращает специальный дескриптор, по которому - система ограничений доступна для различных манипуляций: добавление или удаление - геометрических объектов, ограничений, варьирование размеров, драггинг недоопределенных - объектов и т.д. - \en The call creates a simple constraint system. Besides, inside the memory - there are created internal data structures of geometric solver maintaining - the system of constraints. The functions returns a special descriptor by which - the constraint system is available for various manipulations: addition and deletion - of geometric objects, constraints, variation of sizes, dragging underconstrained objects - etc. \~ - - \return \ru Дескриптор системы ограничений. - \en Descriptor of constraint system. \~ -*/ -//--- -GCE_FUNC(GCE_system) GCE_CreateSystem(); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Сделать систему ограничений пустой. - \en Make the constraint system empty. \~ - \details \ru Данный метод делает систему ограничений пустой при этом - дескриптор gSys остается действительным, т.е. можно осуществлять дальнейшую - работу с системой ограничений. - \en This method makes the constraint system empty while - the descriptor gSys remains valid, i.e. it is possible to perform the further - work with the constraint system. \~ - - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \sa #GCE_RemoveSystem -*/ -//--- -GCE_FUNC(void) GCE_ClearSystem( GCE_system gSys ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Удалить систему ограничений. - \en Delete system of constraints. \~ - \details \ru Данный метод освобождает память от внутренних структур данных, обслуживающих - систему ограничений. Удаляемая система ограничений становится недействительной после - данного вызова. - \en This method releases memory from internal data structures maintaining - the constraint system. The removed constraint system is invalidated after this call. - \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \sa #GCE_ClearSystem -*/ -//--- -GCE_FUNC(void) GCE_RemoveSystem( GCE_system gSys ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Добавить в систему ограничений точку. - \en Add point to the constraint system. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] pVal - \ru Координаты точки. - \en Point coordinates. \~ - \return \ru Дескриптор зарегистрированной точки. - \en Descriptor of registered point. \~ -*/ -//--- -GCE_FUNC(geom_item) GCE_AddPoint( GCE_system gSys, GCE_point pVal ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Добавить в систему ограничений прямую. - \en Add line to the constraint system. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] lVal - \ru Координаты прямой. - \en Line coordinates. \~ - \return \ru Дескриптор зарегистрированной прямой. - \en Descriptor of registered line. \~ -*/ -//--- -GCE_FUNC(geom_item) GCE_AddLine( GCE_system gSys, const GCE_line & lVal ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Добавить в систему ограничений отрезок прямой, заданный парой концевых точек. - \en Add a line segment specified by pair of end points to the constraint system. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] p - \ru Дескрипторы конечных точек отрезка. - \en Descriptors of end points of the line segment. \~ - \return \ru Дескриптор зарегистрированного отрезка. - \en Descriptor of registered segment. \~ - \details \ru Для отрезка, созданного через данный вызов, действительны все типы - ограничений, которые применимы для прямой, создаваемой вызовом GCE_AddLine. - \en All types of constraints which are applicable to the line created by GCE_AddLine - are valid for the segment created by this call. \~ -*/ -//--- -GCE_FUNC(geom_item) GCE_AddLineSeg( GCE_system gSys, geom_item p[2] ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Добавить в систему ограничений окружность. - \en Add circle to the constraint system. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] cVal - \ru Координаты окружности. - \en Coordinates of a circle. \~ - \return \ru Дескриптор зарегистрированной окружности. - \en Descriptor of the registered circle. \~ -*/ -//--- -GCE_FUNC(geom_item) GCE_AddCircle( GCE_system gSys, const GCE_circle & cVal ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Добавить в систему ограничений эллипс. - \en Add ellipse to the constraint system. \~ - \param[in] \ru gSys Система ограничений. - \en gSys System of constraints. \~ - \param[in] \ru eVal Координаты эллипса. - \en eVal Ellipse coordinates. \~ - \return \ru Дескриптор зарегистрированного эллипса. - \en Descriptor of registered ellipse. \~ -*/ -//--- -GCE_FUNC(geom_item) GCE_AddEllipse( GCE_system gSys, const GCE_ellipse & eVal ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Добавить в систему ограничений сплайн (NURBS) - \en Add spline (NURBS) to the constraint system \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] spl - \ru Координаты сплайна. - \en Spline coordinates. \~ - \return \ru Дескриптор зарегистрированного сплайна. - \en Descriptor of registered spline. \~ -*/ -//--- -GCE_FUNC(geom_item) GCE_AddSpline( GCE_system gSys, const GCE_spline & spl ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Добавить в систему ограничений параметрическую кривую. - \en Add parametric curve to the constraint system. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] crv - \ru Математическое описание параметрической кривой. - \en Mathematical description of parametric curve. \~ - \return \ru Дескриптор зарегистрированной параметрической кривой. - \en Descriptor of registered parametric curve. \~ - \attention \ru Время жизни экземпляра класса crv опирается на счетчик ссылок, т.е. - решатель его увеличивает при добавлении параметрической кривой и - декрементирует при удалении кривой из решателя. - \en The lifetime of the instance of the class 'crv' is based on the reference counter, i.e. - the solver increases it when adding a parametric curve and - decreases when deleting a curve from the solver. \~ -*/ -//--- -GCE_FUNC(geom_item) GCE_AddParametricCurve( GCE_system gSys, const MbCurve & crv ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Добавить в систему граничную кривую, ограниченную парой точек. - \en Add a curve bounded by a pair of points to the constraint system. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] crv - \ru Дескриптор базовой геометрической кривой. Базовой кривой может - быть только кривая одного из следующих типов: прямая, окружность, - эллипс, сплайн или параметрическая кривая. - \en Descriptor of base geometric curve. Base curve may - be only one curve from the following types: line, circle, - ellipse, spline or parametric curve. \~ - \param[in] p - \ru Пара дескрипторов начальной и конечной точек участка кривой. - \en A pair of descriptors of the beginning and ending points of curve piece. \~ - \return \ru Дескриптор зарегистрированной ограниченной кривой. - \en Descriptor of registered bounded curve. \~ -*/ -//--- -GCE_FUNC(geom_item) GCE_AddBoundedCurve( GCE_system gSys, geom_item curve, geom_item p[2] ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Добавить в систему жёсткое множество геометрических объектов. - \en Add a rigid set of geometric objects to the system. \~ - \details \ru Жёсткое множество - это массив геометрических объектов, зафиксированных друг относительно друга. - Жёсткое множество представляет собой геометрический объект, для которого доступен весь функционал - работы с геометрическими объектами. Например, у него можно спросить тип (#GCE_GeomType -> GCE_SET) или запросить - положение. С помощью вызовов #GCE_GetPoint и #GCE_GetCoordValue можно получить начало координат и направление оси OX - ЛСК жёсткого множества. Чтобы удалить жёсткое множество, надо, как и для любого другого геометрического объекта, - вызвать функцию #GCE_RemoveGeom. При этом составляющие жёсткое множество объекты (geoms) при удалении жёсткого - множества не удаляются и могут далее быть использованы в решателе. С геометрическими объектами, образующими - жёсткое множество, нужно работать точно так же, как и до их добавления в жёсткое множество. Например, для наложения - ограничения между элементом жёсткого множества и любым другим геометрическим объектом необходимо в - качестве аргумента ограничения указывать не дескриптор жёсткого множества, которому данный объект принадлежит, а - дескриптор самого геометрического объекта из массива geoms, на который накладывается ограничение. - \en A rigid set is an array of geometric objects which are fixed relative to each other. It is considered as a - geometric object and hence all the functionality for working with geometric objects is available for it. For - example, it's possible to request its type (#GCE_GeomType -> GCE_SET) or get its position invoking #GCE_GetPoint - and #GCE_GetCoordValue to get the origin and the direction of the OX axis of the LCS of the rigid set. To remove - a rigid set it's necessary to call the function #GCE_RemoveGeom. Geometric objects (geoms) are not deleted together - with a rigid set and can be used in the solver after it will be deleted. With geometric objects that have been - included in a rigid set it is necessary to continue to work just as before adding them to a rigid set. For - instance, to specify a constraint between an element of a rigid set and any other geometric object, it is necessary - to specify as the constraint argument not the descriptor of the rigid set to which the object belongs but the - descriptor of the geometric object from the geoms array on which the constraint is specified.\~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] geoms - \ru Массив дескрипторов геометрических объектов, образующих жёсткое множество. - \en \~ - \return \ru Дескриптор зарегистрированного жёсткого множества объектов. - \en Descriptor of registered bounded curve. \~ -*/ -// --- -GCE_FUNC(geom_item) GCE_AddRigidSet( GCE_system gSys, const std::vector & geoms ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Добавить в систему ограничений переменную. - \en Add a variable to the constraint system. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] val - \ru Начальное значение переменной. - \en A start value of the variable. \~ - \return \ru Дескриптор зарегистрированной переменной. - \en Descriptor of registered variable. \~ -*/ -//--- -GCE_FUNC(var_item) GCE_AddVariable( GCE_system gSys, double val ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Тип геометрического объекта. - \en A type of geometric object. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g - \ru Дескриптор геометрического объекта. - \en Descriptor of geometric object \~ - \return \ru Тип геометрического объекта. - \en A type of geometric object. \~ -*/ -//--- -GCE_FUNC(geom_type) GCE_GeomType( GCE_system gSys, geom_item g ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Тип геометрической кривой. - \en A type of geometric curve. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g - \ru Дескриптор кривой. - \en Descriptor of curve \~ - \return \ru Тип геометрического объекта. - \en A type of geometric object. \~ - \details \ru The function returns geometric type of a curve 'crv' or type - of a base curve if 'crv' has type #GCE_BOUNDED_CURVE. - \en Функция вернет геометрический тип кривой 'crv' либо тип базовой кривой, - если 'crv' имеет тип #GCE_BOUNDED_CURVE. \~ -*/ -//--- -GCE_FUNC(geom_type) GCE_BaseCurveType( GCE_system gSys, geom_item crv ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Удалить переменную из системы ограничений. - \en Delete variable from the constraint system. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] var - \ru Дескриптор переменной. - \en Descriptor of variable. \~ - \return \ru true, если переменная var действительно удалена. - \en it equals true if the variable var is actually deleted. \~ -*/ -//--- -GCE_FUNC(bool) GCE_RemoveVariable( GCE_system gSys, var_item var ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Удалить геометрический объект из системы ограничений. - \en Delete geometric object from the constraint system. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g - \ru Дескриптор геометрического объекта. - \en Descriptor of geometric object \~ - \return \ru true, если геометрический объект g действительно удален. - \en it equals true if the geometric object g is actually deleted. \~ -*/ -//--- -GCE_FUNC(bool) GCE_RemoveGeom( GCE_system gSys, geom_item g ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Удалить ограничение из системы. - \en Delete a constraint from the system. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] con - \ru Дескриптор ограничения. - \en Descriptor of constraint. \~ - \return \ru true, если ограничение con действительно удалено. - \en it equals true if the constraint con is actually deleted. \~ -*/ -//--- -GCE_FUNC(bool) GCE_RemoveConstraint( GCE_system gSys, constraint_item con ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Запросить дескриптор контрольной точки объекта. - \en Request of the object control point descriptor. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g - \ru Дескриптор объекта. - \en Descriptor of object. \~ - \param[in] pnt - \ru Имя контрольной точки объекта. - \en Name of the object control point. \~ - \return \ru Дескриптор контрольной точки объекта. - \en Descriptor of the object control point. \~ - - \details \ru Дескриптор, полученный по значению этой функции, имеет автоматическое - время жизни, т.е. нет необходимости вызывать для него метод #GCE_RemoveGeom. - \en Descriptor obtained by the value of this function, it has automatical - lifetime, i.e. there is no reason to call the method #GCE_RemoveGeom for it. \~ -*/ -//--- -GCE_FUNC(geom_item) GCE_PointOf( GCE_system gSys, geom_item g, point_type pnt ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Дескриптор контрольной точки сплайна по индексу. - \en Descriptor of spline control point by index \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] spl - \ru Дескриптор сплайна. - \en Descriptor of spline. \~ - \param[in] pntIdx - \ru Индекс контрольной точки. - \en A control point index. \~ - \return \ru Дескриптор контрольной точки сплайна. - \en Descriptor of spline control point. \~ - - \details \ru Дескриптор, полученный по значению этой функции, имеет автоматическое - время жизни, т.е. нет необходимости вызывать для него метод #GCE_RemoveGeom. - \en Descriptor obtained by the value of this function, it has automatical - lifetime, i.e. there is no reason to call the method #GCE_RemoveGeom for it. \~ -*/ -//--- -GCE_FUNC(geom_item) GCE_SplinePoint( GCE_system gSys, geom_item spl, size_t pntIdx ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Получить текущие координаты вектора. - \en Get the current coordinates of vector. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g - \ru Дескриптор вектора или иного геометрического объекта. - \en Descriptor of vector or other geometric object. \~ - \param[in] vType - \ru Идентификатор вектора, принадлежащего объекту (в настоящий момент равен или GCE_DIRECTION, или GCE_ORIENTATION). - GCE_DIRECTION возвращает направляющую прямой, отрезка или главной полуоси эллипса. - \en Identifier of vector belonging to the object (currently it equals GCE_DIRECTION or GCE_ORIENTATION). - In case of GCE_DIRECTION function returns direction vector for line, line segment or ellipse major axis.\~ - \return \ru Координаты вектора. - \en Vector coordinates. \~ -*/ -//--- -GCE_FUNC(GCE_vec2d) GCE_GetVectorValue( GCE_system gSys, geom_item g, query_geom_type vType ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Получить текущие координаты точки. - \en Get the current coordinates of point. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g - \ru Дескриптор точки или иного геометрического объекта. - \en Descriptor of point or other geometric object. \~ - \param[in] pName - \ru Идентификатор точки, принадлежащей объекту. - \en Identifier of a point belonging to the object. \~ - \return \ru Координаты точки. - \en Point coordinates \~ -*/ -//--- -GCE_FUNC(GCE_point) GCE_GetPointXY( GCE_system gSys, geom_item g, point_type pName = GCE_PROPER_POINT ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Получить текущее значение координаты геометрического объекта. - \en Get the current value of geometric object's coordinate. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g - \ru Дескриптор объекта. - \en Descriptor of object. \~ - \param[in] cName - \ru Обозначение параметра объекта. - \en Denotation of object parameter. \~ - \return \ru Координаты точки. - \en Point coordinates \~ - \details \ru Получить текущее значение координаты геометрического объекта. Например, - с помощью данной функции можно узнать текущее значение большой или малой - полуоси эллипса, радиус окружности и т.д. - \en Get the current value of geometric object's coordinate. For example, - by using this function one can find the current value of the major or the minor - semi-axis of ellipse, circle radius etc. \~ -*/ -//--- -GCE_FUNC(double) GCE_GetCoordValue( GCE_system gSys, geom_item g, coord_name cName ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Получить текущее значение переменной. - \en Get the current value of variable. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] var - \ru Дескриптор переменной. - \en Descriptor of variable. \~ - \return \ru Значение переменной. - \en A value of variable. \~ -*/ -//--- -GCE_FUNC(double) GCE_GetVarValue( GCE_system gSys, var_item var ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать текущие координаты точки. - \en Set the current coordinates of point. \~ - - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g - \ru Дескриптор точки или иного геометрического объекта. - \en Descriptor of point or other geometric object. \~ - \param[in] pName - \ru Идентификатор точки, принадлежащей объекту. - \en Identifier of a point belonging to the object. \~ - \param[in] xyVal - \ru Новое значение координат точки. - \en New value of point coordinates. \~ - \return \ru true, если операция выполнена успешно. - \en true if operation succeeded. \~ - - \details \ru Метод присваивает точке или контрольной точке объекта g c - атрибутом pName новое состояние координат (параметр xyVal). Следует учитывать, - что вызов #GCE_SetPointXY не решает системы ограничений, а только меняет состояние - геометрического объекта. При этом система ограничений может стать неудовлетворенной. - Состояние точки, присвоенное вызовом GCE_SetPointXY не обязано сохранятся после - вызова #GCE_Evaluate, если точка не фиксированная или не замороженная. - \en The method assigns to the point or the control point of the object g with - the attribute pName a new state of coordinates (the parameter xyVal). It should be taken into account - that the call of #GCE_SetPointXY doesn't solve the constraint system but only changes the state - of geometric object. At the same time the constraint system may become unsatisfied. - The state of a point assigned by the call of GCE_SetPointXY should not be saved after - the call of #GCE_Evaluate if the point is not fixed or not frozen. \~ -*/ -//--- -GCE_FUNC(bool) GCE_SetPointXY( GCE_system gSys, geom_item g, point_type pName, GCE_point xyVal ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать текущее значение координаты геометрического объекта. - \en Set the current value of geometric object's coordinate. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g - \ru Дескриптор объекта. - \en Descriptor of object. \~ - \param[in] cName - \ru Обозначение параметра объекта. - \en Denotation of object parameter. \~ - \param[in] crdVal - \ru Новое значение координаты. - \en New value of coordinate. \~ - \return \ru true, если операция выполнена успешно. - \en true if operation succeeded. \~ - - \details \ru Метод присваивает координате объекта g c атрибутом cName новое значение. - Следует учитывать, что вызов #GCE_SetCoordValue не решает системы ограничений, - а только меняет состояние геометрического объекта. При этом система ограничений - может стать неудовлетворенной. Состояние координаты, присвоенное этим методом - не обязано сохранятся после вызова #GCE_Evaluate, если точка не фиксированная - или не замороженная. - \en The method assigns a new value to the coordinate of the object g with the attribute cName. - It should be taken into account that the call of #GCE_SetCoordValue doesn't solve the constraint system - but only changes the state of geometric object. At the same time the constraint system - may become unsatisfied. The state of coordinate assigned by this method - should not be saved after the call of #GCE_Evaluate if the point is not fixed - or not frozen. \~ -*/ -//--- -GCE_FUNC(bool) GCE_SetCoordValue( GCE_system gSys, geom_item g, coord_name cName, double crdVal ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать текущее значение переменной. - \en Set the current value of variable. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] var - \ru Дескриптор переменной. - \en Descriptor of variable. \~ - \param[in] val - \ru Новое значение переменной. - \en New value of variable. \~ - \return \ru true, если операция выполнена успешно. - \en true if operation succeeded. \~ -*/ -//--- -GCE_FUNC(bool) GCE_SetVarValue( GCE_system gSys, var_item var, double val ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Заморозить геометрический объект. - \en Freeze geometric object. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g - \ru Геометрический объект. - \en Geometric object. \~ - \return \ru true, если операция выполнена успешно. - \en true if operation succeeded. \~ - - \details - - \ru Функция лишает объект всей степени свободы. Отдельно можно заметить, что - функция GCE_IsConstrainedGeom для замороженного объекта вернет false, если - объект не был связан другими ограничениями. Т.е. заморозка не считается - ограничением.\n - Решатель не может менять замороженную геометрию, но её может поменять - клиентское приложение методами GCE_SetCoordValue или GCE_SetPointXY. - Замороженные объекты следует рассматривать в качестве независимых входных - параметров системы ограничений. - - \en The function deprives the object of all degrees of freedom. Note that - the function GCE_IsConstrainedGeom returns false for the frozen object if - the object was not connected with other constraints. I.e. the freezing is not considered - as a constraint.\n - The solver cannot change the frozen geometry but the user application can change it - with the methods GCE_SetCoordValue or GCE_SetPointXY. Frozen objects should be - considered as independent input parameters of constraint system. \~ - - \note - \ru Обычно на стороне САПР эта команда применяется для фиксации проекционной геометрии - в ассоциативных чертежах или в эскизах с проекциями трехмерных объектов. - \en Usually, in CAD applications this command is used only for fixation of projection - geometry in associative drawings or sketches with projections of 3D-objects. \~ -*/ -//--- -GCE_FUNC(bool) GCE_FreezeGeom( GCE_system gSys, geom_item g ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Функция отвечает на вопрос: Связан ли геометрический объект ограничениями? - \en The function answers the question: Is geometric object connected with constraints? \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g - \ru Дескриптор геометрического объекта. - \en Descriptor of geometric object. \~ - \return \ru true, если для объекта g задано хотя бы одно ограничение. - \en true if at least one constraint is set for the object g. \~ - \sa GCE_RemoveGeom, GCE_RemoveConstraint -*/ -//--- -GCE_FUNC(bool) GCE_IsConstrainedGeom( GCE_system gSys, geom_item g ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Выполнить проверку удовлетворенности ограничения. - \en Perform a check that a constraint is satisfied. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] cItem - \ru Дескриптор ограничения. - \en Descriptor of constraint. \~ - \return \ru true, если ограничение удовлетворено. - \en true if a constraint is satisfied. \~ -*/ -//--- -GCE_FUNC(bool) GCE_IsSatisfied( GCE_system gSys, constraint_item cItem ); - -//---------------------------------------------------------------------------------------- -/** - \brief \ru Статус ограничения в системе. - \en Status of constraint inn the system. - \details - \ru Вызов показывает результат диагностики, которая выделяет в системе ограничений - хорошо-обусловленные части и части, содержащие переопределения и противоречия. В результате - диагностики или попытки решения каждое ограничение помечается одним из статусов, - перечисленных в наборе GCE_c_status. - - \en The call shows the result of the diagnostic, which highlights the constraint system - well-conditioned parts and parts containing redundancies and inconsistencies. As a result - diagnosing or evaluating each constraint is marked with one of the statuses enumerated by - GCE_c_status enum. - - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] cItem - \ru Дескриптор ограничения. - \en Descriptor of constraint. \~ - \return \ru Статус ограничения в результате диагностики на противоречия или переопределения. - \en The status of the constraint as a result of diagnostics on inconsistence and overdefining. \~ - -*/ -// --- -GCE_FUNC(GCE_c_status) GCE_ConstraintStatus( GCE_system gSys, constraint_item cItem ); - -//---------------------------------------------------------------------------------------- -/** - brief \ru Выполнить диагностику геометрических объектов. - \en Diagnose geometry. \~ - \details - \ru Если в ходе решения системы ограничений вырождаются какие-то геометрические объекты - (функция #GCE_Evaluate возвращает GCE_RESULT_InvalidGeometry ), то данная функция возвращает - массив индексов, под которыми эти объекты зарегистрированы в решателе. - Если вырождающихся объектов нет, то функция вернет пустой массив. - \en If some geometrical objects are degenerate in the course of solving the system of constraints - (function #GCE_Evaluate returns GCE_RESULT_InvalidGeometry ), this function returns an array of indices - by which these geometric objects are registered in the solver. - If geometrical objects do not degenerate, then the function returns an empty array. \~ - \param[in] gcSys - \ru Система ограничений. - \en System of constraints. \~ - \return \ru Вектор индексов объектов с вырожденной геометрией. - \en Vector of indices of objects with invalid geometry. \~ -*/// --- -GCE_FUNC(std::vector) GCE_DiagnoseGeometry( GCE_system gcSys ); - -//---------------------------------------------------------------------------------------- -/** - \brief \ru Вычислить степень свободы точки. - \en Calculate point's degree of freedom. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g - \ru Дескриптор геометрического объекта. - \en Descriptor of geometric object \~ - \param[in] cp - \ru Код контрольной точки объекта g. - \en The code of control point of the object g. \~ - \param[out] dofDir- \ru Угловое направление свободы перемещения точки в радианах. - \en Angular direction of point moving freedom in radians. \~ - \return \ru Функция возвращает степень свободы точки; Если возвращается значение < 0, - то вычислить степень свободы не удалось. - \en The function returns degree of freedom of the point; If a negative value is returned, - then it is failed to calculate the degree of freedom. \~ - - \details \ru Данная функция возвращает степень свободы точки и может принимать - одно из следующих значений:\n - (-1) - Означает, что функция не определила степень свободы;\n - 0 - Означает, что точка неподвижна в системе ограничений;\n - 1 - Означает, что точка имеет свободу перемещения вдоль некоторой траектории, причем - через параметр dofDir возвращается направление тангенциального вектора перемещения - точки;\n - 2 - Означает, что точка имеет свободу перемещения в некоторой 2D-области.\n - Если направление перемещения определить не удалось, то dofDir принимает значение < 0. - - \en This function returns the point's degree of freedom and may take - one of the following values:\n - (-1) - It means that the function didn't determine the degree of freedom;\n - 0 - It means that the point is fixed in constraint system. - 1 - It means that the point has a freedom of movement along some trajectory, besides - the direction of point movement tangent vector is returned via the parameter dotDir;\n - 2 - It means that the point has a movement freedom inside some two-dimensional region.\n - If the direction of movement was not determined, then dotDir takes a negative value. \~ -*/ -//-- -GCE_FUNC(ptrdiff_t) GCE_GetPointDOF( GCE_system gSys, geom_item g, point_type cp, double & dofDir ); - -//---------------------------------------------------------------------------------------- -/** - \brief \ru Вычислить степень свободы точки. - \en Calculate point's degree of freedom. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] pnt - \ru Дескриптор точки. - \en Descriptor of point \~ - \param[out] dofDir- \ru Угловое направление свободы перемещения точки в радианах. - \en Angular direction of point moving freedom in radians. \~ - \return \ru Функция возвращает структуру #GCE_point_dof, которая описывает - степень свободы точки, её целочисленное значение и вектор перемещения. - Если возвращается значение dof < 0, то вычислить степень свободы не удалось. - \en The function returns a structure #GCE_point_dof, which describes degree - of freedom of the point, namely its integral value (dof) and direction - vector of point moving freedom (dir). If a negative value (dof) is returned, - then it is failed to calculate the degree of freedom. \~ - - \details \ru Данная функция возвращает степень свободы точки и может принимать - одно из следующих значений:\n - dof = (-1) - Означает, что функция не определила степень свободы;\n - dof = 0 - Означает, что точка неподвижна в системе ограничений;\n - dof = 1 - Означает, что точка имеет свободу перемещения вдоль некоторой траектории, - причем через параметр "dir" (в структуре #GCE_point_dof ) возвращается направление - тангенциального вектора перемещения точки;\n - dof = 2 - Означает, что точка имеет свободу перемещения в некоторой 2D-области.\n - Если направление перемещения определить не удалось, то "dof" принимает значение < 0. - - \en This function returns the point's degree of freedom and may take - one of the following values:\n - dof = (-1) - It means that the function didn't determine the degree of freedom;\n - dof = 0 - It means that the point is fixed in constraint system. - dof = 1 - It means that the point has a freedom of movement along some trajectory, besides - the direction of point movement tangent vector is returned via the parameter "dir" - of data structure #GCE_point_dof;\n - dof = 2 - It means that the point has a movement freedom inside some two-dimensional region.\n - If the direction of movement was not determined, then "dof" takes a negative value. \~ -*/ -//-- -GCE_FUNC(GCE_point_dof) GCE_PointDOF( GCE_system gSys, geom_item pnt ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Выдать степень свободы геометрической координаты. - \en Get the degree of freedom of geometric coordinate. - - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g - \ru Дескриптор геометрического объекта. - \en Descriptor of a geometric object. \~ - \param[in] cName - \ru Обозначение геометрической координаты. - \en Denotation of geometric coordinate. \~ - \return \ru Степень свободы координаты: 1-для недоопределенной координаты, 0-для полно-заданной координаты. - \en Degree of freedom: 1 for underdefined coordinate, 0 for well-defined coordinate.\~ - - \details - \ru Функция возвращает степень свободы координаты, а именно одно из возможных - значений: 1, 0 и -1. Если возвращается значение < 0, то вычислить степень - свободы не удалось. - \en The function returns degree of freedom of the coordinate, namely one of the - possible values: 1, 0 and -1. If a negative value is returned, then it is - failed to calculate the degree of freedom. \~ - -*/ -//--- -GCE_FUNC(int) GCE_CoordDOF( GCE_system gSys, geom_item g, coord_name cName ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение для одного объекта (унарное ограничение). - \en Set a constraint on single object (unary constraint). \~ - - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] cType - \ru Значение одного из следующих типов ограничений: GCE_FIX_GEOM; GCE_VERTICAL; GCE_HORIZONTAL; GCE_ANGLE_OX; GCE_LENGTH. - \en The value of one of the following types of constraints: GCE_FIX_GEOM; GCE_VERTICAL; GCE_HORIZONTAL; GCE_ANGLE_OX; GCE_LENGTH. \~ - \param[in] g - \ru Дескриптор геометрического объекта. - \en Descriptor of geometric object \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - \details - \ru Функция задает унарное ограничение, а именно ограничение, относящееся к одному из типов, - действительных для одного геометрического объекта. - \en The function specifies an unary constraint, namely constraint which has one of types - that are valid for single geometric object. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddUnaryConstraint( GCE_system gSys, constraint_type cType, geom_item geom ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Совпадение". - \en Set the constraint "Coincidence". \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g - \ru Дескрипторы пары геометрических объектов. - \en Descriptors of geom objects pair. \~ - \details - \ru Если ограничение совпадение задано для точки и кривой, то предполагается, что точка - лежит на кривой. Если совпадение задано для геометрических объектов одного и того - же типа, то совпадение подразумевает, что они равны. - \en If a coincident constraint is defined between a point and a curve then this implies - that the point lies on the curve. A coincident constraint defined between two - geometries of the same type implies that they are equal. - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - - \attention - \ru В текущей версии решателя применение этого ограничения возможно - только для двух точек либо для точки и кривой. На будущее планируется расширить - его применения для других типов. - \en In the current version of solver using of this constraint is possible only for - two points either for a point and a curve. It is planned to extend its application - area for other types. \~ -*/ -// --- -GCE_FUNC(constraint_item) GCE_AddCoincidence( GCE_system gSys, geom_item g[2] ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Ограничение "Точка на участке кривой по коэффициенту его параметрической длины". - \en The constraint "Point on a piece of a curve by the coefficient of its parametric range". \~ - - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] curve - \ru Дескриптор кривой. - \en Descriptor of a curve. \~ - \param[in] pnt - \ru Дескрипторы точек: две крайние точки участка и точка между. - \en Descriptors of points: two boundary points of a piece and a point between. \~ - \param[in] k - \ru Долевой коэффициент от параметрической длины участка. - \en Coefficient for a part of parametric range of piece. \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - - \details \ru Предполагается, что для кривой curve и точек pnt[0], pnt[1], обеспечивается - инцидентность другими ограничениями, зарегистрированными в решателе, или эти - точки априори принадлежат кривой. Для точки pnt[2] инцидентность с кривой задавать - не требуется, т.к. данное ограничение уже обеспечивает это. Если pnt[0] = pnt[1] = GCE_NULL_G, то участок - кривой, для которого исчисляется процент k, совпадает со всей параметрической - областью кривой. Например, для окружности параметрическая область равна - интервалу [-PI ... PI]. Область значений k из интервала от 0 до 1 отображается - на параметрическую область участка кривой, соответственно k = 0 прикрепит точку - pnt[2] к началу участка, а k = 1.0 к концу участка. - - \en It is assumed that for the curve 'curve' and the points pnt[0], pnt[1] an incidence - is provided with the other constraints registered in solver or these - points a priori belong to a curve. An incidence between pnt[2] and 'curve' is not required because - this constraint already provides an incidence. If pnt[0] = pnt[1] = GCE_NULL_G, then the piece - of a curve for which the percentage k is calculated coincides with the whole parametric - region of a curve. For example, in a case of circle the parametric range is equal - to the interval [-PI ... PI]. The range of values of k from the interval from 0 to 1 is mapped - to the parametric region of curve's piece, k = 0 attaches the point - pnt[2] to the beginning of the piece and k = 1.0 - to the end of the piece. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddPointOnPercent( GCE_system gSys, geom_item curve, geom_item pnt[3], double k ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Ограничение "Точка на участке кривой по коэффициенту его длины". - \en The constraint "Point on a piece of a curve by the coefficient of its length". \~ - - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] curve - \ru Дескриптор кривой. - \en Descriptor of a curve. \~ - \param[in] pnt - \ru Дескрипторы точек: две крайние и точка между ними. - \en Descriptors of points: two boundary points and a point between them. \~ - \param[in] k - \ru Значение доли от метрической длины между заданными точками. - \en Value of a part (proportion) of the arc length between the two points. \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - - \details \ru Метод создает в системе ограничение, задающее положение точки на - участке кривой, заданное коэффициентом от его длины. Предполагается, - что для кривой curve и точек pnt[0], pnt[1], обеспечивается инцидентность другими, - зарегистрированными в решателе, ограничениями или эти точки априори принадлежат - кривой. Если pnt[0] = pnt[1] = GCE_NULL_G, то участок кривой, для которого - исчисляется процент k, совпадает со всей параметрической областью кривой. - Например, для окружности параметрическая область равна интервалу [-PI ... PI]. - Если k = 0, то ограничение прикрепит точку pnt[2] к началу участка, если k = 1.0, - то ограничение прикрепит точку pnt[2] к концу участка. - - \en The method creates a constraint specifying the point location on - a piece of a curve which is set by the coefficient (proportional) of its arc length. - It is assumed that for the curve 'curve' and the points pnt[0], pnt[1] an incidence - is provided with the other constraints registered in the solver or these points belong to - the curve a priori. If pnt[0] = pnt[1] = GCE_NULL_G, then the piece of a curve for which - the percentage k is calculated coincides with the whole parametric region of a curve. - For example, in a case of circle the parametric range is equal to the interval [-PI ... PI]. - If k = 0, then the constraint attaches the point pnt[2] to the beginning of the piece, if k = 1.0, - then the constraint attaches the point pnt[2] to the end of the piece. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddPointByMetricPercent( GCE_system gSys, geom_item curve, geom_item pnt[3], double k ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Фиксация положения точки, лежащей на кривой". - \en Set the constraint "Fixation of location of the point lying on a curve". \~ - - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] curve - \ru Дескриптор кривой. - \en Descriptor of a curve. \~ - \param[in] pnt - \ru Дескрипторы точки. - \en Descriptors of a point. \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - - \details \ru Данная функция создает ограничение, прикрепляющее точку к кривой в текущем - месте. Точка локализуется, опираясь на параметрическое представление кривой, с помощью - параметра вдоль кривой, где она расположена. Требуется, что бы к моменту вызова функции, - точка лежала на кривой, а для точки и кривой curve должна обеспечиваться инцидентность - с помощью других ограничений или эта точка априори должна принадлежать кривой. - \en This function creates a constraint attaching a point to the curve in the current - location. The point is localized according to the parametric representation of a curve with a help of - parameter along a curve where it is located. It is required that at the moment when the function is called - the point is lying on the curve, and coincidence between the point and the curve should be provided - by other constraints or this point should belong to the curve a priori. \~ - - \attention \ru В Cad-системе КОМПАС данная функция применяется только для фиксации концов - участка (bounded curve) параметрической кривой, полученной проецированием из 3D-модели. - Для таких ограничений, как "средняя точка" рекомендуется применять более - нативную функцию #GCE_AddMiddlePoint. - \en In CAD system KOMPAS this function is used only for fixation of ends of - a piece ('bounded curve') of a parametric curve obtained by projecting from 3D model. - It is recommended to apply the more native function - #GCE_AddMiddlePoint for such constraints as "middle point". \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddFixCurvePoint( GCE_system gSys, geom_item curve, geom_item pnt ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Точка на параметрическом эллипсе". - \en Set the constraint "Point on parametric ellipse". \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] pnt - \ru Дескриптор точки. - \en Descriptor of a point. \~ - \param[in] ellipse - \ru Дескриптор эллипса. - \en Descriptor of ellipse. \~ - \param[in] \ru t Значение параметра на эллипсе из области [-PI,PI]. - \en t The value of parameter on ellipse from the region [-PI,PI]. \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - \details \ru Данная функция действительна только для кривых, относящихся типу - "эллипс", функция создает ограничение, обеспечивающее совпадение точки pnt с - точкой эллипса, заданной параметром t из параметрической области эллипса, - равной интервалу [-PI,PI]. - \en This function is valid only for curves of the type - "ellipse", the function creates a constraint which provides coincidence between the point pnt and - the ellipse point set by the parameter t from the ellipse parametric region - which is equal to the interval [-PI,PI]. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddPointOnParEllipse( GCE_system gSys, geom_item pnt, geom_item ellipse, double t ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Точка на кривой по параметру". - \en Specify a constraint "Point on curve at a given parameter". \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] pnt - \ru Дескриптор точки. - \en Descriptor of a point. \~ - \param[in] curve - \ru Дескриптор кривой. - \en Descriptor of a curve. \~ - \param[in] t - \ru Дескриптор параметра кривой. - \en Descriptor of a curve parameter. \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - \details \ru Функция отличается от #GCE_AddCoincidence тем, что позволяет связать точку с параметрической - кривой через значение параметра и управлять её положением на кривой через этот параметр. - Ограничение доступно для следующих типов кривой: #GCE_ELLIPSE, #GCE_SPLINE, - #GCE_PARAMETRIC_CURVE и #GCE_BOUNDED_CURVE, основанной на кривой одного из перечисленных - типов. - \en This function differs from #GCE_AddCoincidence in that it allows to link a point with a - parametric curve through a parameter value and control its position on the curve through this - parameter. The constraint is available for the following curve types: #GCE_ELLIPSE, - #GCE_SPLINE, #GCE_PARAMETRIC_CURVE and #GCE_BOUNDED_CURVE, based on the curve of one of the - listed types. -*/ -// --- -GCE_FUNC(constraint_item) GCE_AddParPointOnCurve( GCE_system gSys, geom_item pnt, geom_item curve, var_item t ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Выравнивание точек вдоль заданного направления". - \en Set the constraint "Alignment of points along the given direction". \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] p - \ru Дескрипторы пары точек. - \en Descriptors of point pair. \~ - \param[in] ang - \ru Угол, задающий направление выравнивания, радианы. - \en An angle specifying alignment direction, in radians. \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddAlignPoints( GCE_system gSys, geom_item p[2], double ang ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Угловой размер между двумя прямыми". - \en Set the constraint "Angular dimension between two lines". \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] l1 - \ru Дескриптор первого линейного геометрического объекта. - \en Descriptor of the first linear geometric object. \~ - \param[in] l2 - \ru Дескриптор второго линейного геометрического объекта. - \en Descriptor of the second linear geometric object. \~ - \param[in] dPars - \ru Параметры углового размера (подробности см.#GCE_adim_pars). - \en Parameters of angular dimension (see #GCE_adim_pars). \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - \details \ru Угловой размер для пары линейных геометрических объектов. Аргументами - ограничения могут быть объекты, принадлежащие типам: "прямая", "отрезок" или - "Bounded curve", основанной на прямой. - \en Angular dimension for a pair of linear geometric objects. Arguments - of constraint are objects of the following types: "line", "segment" or - "Bounded curve" based on line. \~ - -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddAngle( GCE_system gSys, geom_item l1, geom_item l2 - , const GCE_adim_pars & dPars ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Биссектриса". - \en Set the constraint "Bisector of angle". \~ - \param[in] \ru gSys Система ограничений. - \en gSys System of constraints. \~ - \param[in] \ru bl отрезок, биссектриса между двумя прямыми. - \en bl a segment, bisector of angle between two lines. \~ - \param[in] \ru l1, l2 прямые или отрезки, между которыми устанавливается биссектриса. - \en l1, l2 lines or segments a bisector of angle is set between. \~ - \param[in] \ru variant вариант решения для биссектрисы. - \en variant variant of solution for bisector of angle. \~ - \return \ru дескриптор нового ограничения. - \en descriptor of new constraint. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddAngleBisector( GCE_system gSys - , geom_item l1, geom_item l2 - , geom_item bl - , GCE_bisec_variant variant ); - -//---------------------------------------------------------------------------------------- -/// \ru Задать угловой размер для четырех точек. \en Specify angular dimension for four points. -/**\ru Конструируется угловой размер для двух отрезков с точками p1-p2, p3-p4. - \en Angular dimension is constructed for two segments with points p1-p2, p3-p4. \~ - \param[in] \ru gSys - Система ограничений. - \en gSys - System of constraints. \~ - \param[in] \ru fPair - Первая пара точек (первый отрезок). - \en sPair - First pair of points (first segment).\~ - \\param[in] \ru fPair - Вторая пара точек (второй отрезок). - \en sPair - Second pair of points (second segment).\~ - \param[in] dPars - \ru Параметры углового размера (подробности см.#GCE_adim_pars). - \en Parameters of angular dimension (see #GCE_adim_pars). \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddAngle4P( GCE_system gSys, geom_item fPair[2] - , geom_item sPair[2], const GCE_adim_pars & dPars ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Коллинеарность". - \en Set the constraint "Colinearity". \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g - \ru Дескрипторы пары линейных объектов. - \en Descriptors of a pair of linear objects. \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - \details \ru Ограничение делает пару объектов, принадлежащими общей прямой, применяется - для прямых или отрезков. - \en Constraint makes a pair of objects belonging to the common line, it is used - for lines or segments. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddColinear( GCE_system gSys, geom_item g[2] ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Коллинеарность трех точек". - \en Set the constraint "Colinearity of three points". \~ - \details \ru Задать для трех точек отношение, такое что точки лежат на одной прямой. - \en Set such a constraint for three points that points should lie on the same line. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] pnt - \ru Тройка точек, лежащих на одной прямой. - \en A triplet of points lying on the same line. \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddColinear3Points( GCE_system gcSys, geom_item pnt[3] ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Равенство длин" для отрезков. - \en Set the constraint "Equality of lengths" for segments. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] ls1 - \ru Дескриптор первого отрезка. - \en Descriptor of the first segment. \~ - \param[in] ls2 - \ru Дескриптор второго отрезка. - \en Descriptor of the second segment. \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - \details \ru Ограничение применимо для отрезков или участков прямых, созданных с помощью - функции #GCE_AddBoundedCurve или #GCE_AddLineSeg. - \en The constraint is applicable for segments or line pieces created by - the function #GCE_AddBoundedCurve or #GCE_AddLineSeg. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddEqualLength( GCE_system gSys, geom_item ls1, geom_item ls2 ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Равенство радиусов" для двух окружностей (дуг) - \en Set the constraint "Equality of radii" for two circles (arcs) \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] c1 - \ru Дескриптор первой окружности. - \en Descriptor of the first circle. \~ - \param[in] c2 - \ru Дескриптор второй окружности. - \en Descriptor of the second circle. \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddEqualRadius( GCE_system gSys, geom_item c1, geom_item c2 ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Равенство кривизны двух кривых в заданных точках". - \en Specify a constraint "Equality of curvature of two curves at given points". \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] curves - \ru Дескрипторы пары кривых. - \en Descriptors of a pair of curves. \~ - \param[in] tPars - \ru Дескрипторы параметров параметрических кривых, в которых должно выполняется - равенство кривизны. - \en Descriptors of parameters of parametric curves in which the equality of curvature - must be satisfied. \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - - \note \ru Если тип кривой #GCE_CIRCLE или #GCE_BOUNDED_CURVE, базовой кривой которой является окружность, - то соответствующее этой кривой значение tPars[i] может равняться #GCE_NULL_V, т.к. кривизна - окружности одинакова во всех её точках. - \en If curve has a type #GCE_CIRCLE or #GCE_BOUNDED_CURVE which is based on circle then the - corresponding value of tPars[i] may be equal to #GCE_NULL_V because the curvature of circle - is the same in all its points. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddEqualCurvature( GCE_system gSys, geom_item curves[2], var_item tPars[2] ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Радиусный размер". - \en Specify a "Radius dimension" constraint. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] cir - \ru Дескриптор окружности. - \en Descriptor of circle. \~ - \param[in] dPar - \ru Параметры линейного размера (подробности см.#GCE_dim_pars). - \en Parameters of linear dimension (see #GCE_dim_pars). \~ - - \return \ru Дескриптор радиусного ограничения. - \en Descriptor of radius constraint. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddRadiusDimension( GCE_system gSys, geom_item cir, GCE_dim_pars dPar ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Диаметральный размер". - \en Specify a "Diameter dimension" constraint. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] cir - \ru Дескриптор окружности. - \en Descriptor of circle. \~ - \param[in] dPar - \ru Параметры линейного размера (подробности см.#GCE_dim_pars). - \en Parameters of linear dimension (see #GCE_dim_pars). \~ - - \return \ru Дескриптор диаметрального ограничения. - \en Descriptor of diameter constraint. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddDiameter( GCE_system gSys, geom_item cir, GCE_dim_pars dPar ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Длина кривой". - \en Specify a "Curve Length" constraint. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] curve - \ru Дескриптор кривой. - \en Descriptor of curve. \~ - \param[in] dPar - \ru Параметры линейного размера (подробности см.#GCE_dim_pars). - \en Parameters of linear dimension (see #GCE_dim_pars). \~ - - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - - \details \ru У кривой должны быть начальная и конечная точки (#GCE_FIRST_END и #GCE_SECOND_END). - Ограничение поддерживается для линейных объектов и дуг окружностей. - \en The curve must have a start and end points (#GCE_FIRST_END и #GCE_SECOND_END). - Constraint is supported for linear objects and circular arcs.\~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddLength( GCE_system gSys, geom_item curve, GCE_dim_pars dPar ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Управляющий параметр" или "Фиксация переменной" - \en Set the constraint "Driving parameter" or "Fixation of variable" \~ - - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] var - \ru Дескриптор переменной. - \en Descriptor of variable. \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - \note \ru Созданное с помощью этой функции, ограничение может управляться - через вызов GCE_ChangeDrivingDimension. - \en A constraint created with this function can be driven - via the call of GCE_ChangeDrivingDimension. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_FixVariable( GCE_system gSys, var_item var ); - -//---------------------------------------------------------------------------------------- -/** - \brief \ru Задать ограничение "Фиксация геометрического объекта". - \en Set the constraint "Fixation of geom" \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g - \ru Дескриптор геометрического объекта. - \en Descriptor of geometric object \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ -*/ -// --- -GCE_FUNC(constraint_item) GCE_FixGeom( GCE_system gSys, geom_item g ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Фиксированная длина отрезка" - \en Set the constraint "Fixation of segment length" \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] ls - \ru Дескриптор отрезка. - \en Descriptor of segment. \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - - \details \ru У кривой должны быть начальная и конечная точки (#GCE_FIRST_END и #GCE_SECOND_END). - Ограничение поддерживается для линейных объектов и дуг окружностей. - \en The curve must have a start and end points (#GCE_FIRST_END и #GCE_SECOND_END). - Constraint is supported for linear objects and circular arcs.\~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_FixLength( GCE_system gSys, geom_item ls ); - -//---------------------------------------------------------------------------------------- -/** - \brief \ru Задать ограничение "Фиксированный радиус". - \en Set the constraint "Fixation of radius" \~ - \details \ru Ограничение применимо для фиксации радиуса окружности или полуоси эллипса. - \en The constraint is applicable to fix radius of circle or semiaxis of ellipse. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] circ - \ru Дескриптор окружности или эллипса. - \en Descriptor of circle or ellipse. \~ - \param[in] cName- \ru Тип фиксируемой координаты. Может быть радиус, большая или малая полуось эллипса. - \en Type of fixed coordinate. It can be #GCE_RADIUS, - #GCE_MAJOR_RADIUS or #GCE_MINOR_RADIUS.\~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ -*/ -// --- -GCE_FUNC(constraint_item) GCE_FixRadius( GCE_system gSys, geom_item circ, coord_name cName = GCE_RADIUS ); - -//---------------------------------------------------------------------------------------- -/** - \brief - \ru Задать ограничение "Зафиксировать производную сплайна в заданной точке". - \en Set the constraint "Fixation of derivative vector of the spline at a given point". \~ - \param[in] gSys - \ru Система ограничений. \en System of constraints. \~ - \param[in] spline - \ru Дескриптор сплайна. \en Descriptor of spline. \~ - \param[in] par - \ru Значение параметра, в котором надо зафиксировать производную. - \ \en Parameter value in which it is necessary to record a derivative. \~ - \param[in] derOrder - \ru Порядок производной, которую надо зафиксировать. \en Order of the derivative which must be fixed. \~ - \param[in] fixVal - \ru Значение, к которому надо приравнять производную. \en The value to which it is necessary to equate the derivative. \~ - \return \ru Дескриптор нового ограничения. \en Descriptor of a new constraint. \~ - \details - \ru Точка фиксации задается через значение параметра, соответствующего ей. \n - Порядок фиксируемой производной может равняться 0 (фиксация точки), 1, 2 или 3. \n - Если fixVal равен NULL, будет зафиксировано текущее значение производной, - иначе фиксируемой производной будет присвоено значение fixVal. - \en - Fixation point is specified via the parameter value corresponding to it. \n - The order of a fixed derivative can be equal 0 (point fixing), 1, 2 or 3. \n - If fixVal is NULL current value of the derivative vector will be fixed. - Otherwise the derivative vector will be fixed at fixVal value. \~ - */ -//--- -GCE_FUNC(constraint_item) GCE_FixSplineDerivative( GCE_system gSys, geom_item spline - , double par, uint derOrder, GCE_vec2d * fixVal = NULL ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Средняя точка". - \en Set the constraint "Middle point". \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] pnt - \ru Дескрипторы трех точек. - \en Descriptors of point triplet. \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - \details \ru Для данных трех точек, задать отношение, связывающее тройку точек, - так, что третья точка лежит на середине отрезка между pnt[0] и pnt[1]. - \en For the given three points set the relation connecting the point triplet - in such way that the third point lies in the middle of points pnt[0] and pnt[1]. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddMiddlePoint( GCE_system gcSys, geom_item pnt[3] ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Параллельность". - \en Set the constraint "Parallelism". \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g - \ru Дескрипторы пары линейных объектов. - \en Descriptors of a pair of linear objects. \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - \details \ru Ограничение применяется для прямых или отрезков. - \en The constraint is used for lines or segments. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddParallel( GCE_system gSys, geom_item g[2] ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Перпендикулярность". - \en Set the constraint "Perpendicularity". \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g - \ru Дескрипторы пары линейных объектов. - \en Descriptors of a pair of linear objects. \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - \details \ru Ограничение применяется для прямых или отрезков. - \en The constraint is used for lines or segments. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddPerpendicular( GCE_system gSys, geom_item g[2] ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Симметрия относительно линейного объекта". - \en Set the constraint "Symmetry relative to the linear object". \~ - - \param[in] gSys - \ru Система ограничений. - gSys - \en System of constraints. \~ - \param[in] g - \ru Дескрипторы пары симметричных объектов. - g - \en Descriptors pair of symmetrical objects.. \~ - \param[in] lObj - \ru Дескриптор оси симметрии. - lObj - \en Descriptor of the axis of symmetry. \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - - \attention \ru В настоящий момент данное ограничение применимо только для симметрии точек. - \en Currently, this restriction only applies to the symmetry of the points. \~ - */ -//--- -GCE_FUNC(constraint_item) GCE_AddSymmetry( GCE_system gSys, geom_item g[2], geom_item lObj ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Касание двух кривых". - \en Set the constraint "Tangency of two curves". \~ - \param[in] \ru gSys Система ограничений. - \en gSys System of constraints. \~ - \param[in] \ru g Дескрипторы пары кривых или прямых. - \en g Descriptors of a pair of curves or lines. \~ - \param[in] \ru tPar Дескрипторы параметров касания для параметрических кривых. - \en tPar Descriptors of parameters of tangency for parametric curves. \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - \details - \par \ru Вспомогательные параметры касания - \en Help parameters of tangency - \ru Дескрипторы переменных tPar[0] и tPar[1] задают вспомогательные значения, параметризующие - точку касания на первой и второй кривой. Одна или обе tPar могут быть равными GCE_NULL_V, - если соответствующая кривая не является сплайном или параметрической кривой, либо - пользователь согласен, что точка касания будет локализована автоматически по ближайшему решению. - - \en Variable descriptors tPar[0], tPar[1] specify help values parametrizing a tangent point - on the first and the second curve. One of both tPar can be equal GCE_NULL_V. - - \note \ru tPar[0] или tPar[1] могут быть равными GCE_NULL_V, если параметры - касания не предусмотрены или кривые не имеют параметрического представления. - Параметрическое представление имеют пока только два типа: - GCE_SPLINE и GCE_PARAMETRIC_CURVE. - \en tPar[0] or tPar[1] may be equal to GCE_NULL_V if parameters - of tangency are not provided or curves have no parametric representation. - There are only two types having parametric representation: - GCE_SPLINE and GCE_PARAMETRIC_CURVE. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddTangent( GCE_system gSys, geom_item g[2], var_item tPar[2] ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать размерное ограничение "Расстояние между объектами". - \en Set the dimensional constraint "Distance between objects". \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g - \ru Дескрипторы пары геометрических объектов. - \en Descriptors of a pair of geometric objects. \~ - \param[in] dPars - \ru Параметры линейного размера (подробности см.#GCE_ldim_pars). - \en Parameters of linear dimension (see #GCE_adim_ldim). \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - \details \ru Задать линейный размер для пары геометрических объектов. - \en Set linear dimension for a pair of geometric objects. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddDistance( GCE_system gSys, geom_item g[2], const GCE_ldim_pars & dPars ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Расстояние между точками". - \en Set the constraint "Distance between points". \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] p - \ru Дескрипторы пары точек. - \en Descriptors of point pair. \~ - \param[in] dPars - \ru Параметры размерного ограничения. - \en Parameters of dimensional constraint. \~ - - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddDistance2P( GCE_system gSys, geom_item p[2], const GCE_dim_pars & dPars ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Расстояние от точки до отрезка". - \en Set the constraint "Distance from a point to a segment". \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] p - \ru Дескрипторы тройки точек. - \en Descriptors of point triplet. \~ - \param[in] dPars - \ru Параметры размерного ограничения. - \en Parameters of dimensional constraint. \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - \details \ru Линейный размер от точки p1 до отрезка . Размер чувствителен к знаку - величины размера. - \en Linear dimension from the point p1 to the segment . - The dimension is sensitive to a sign of its value. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddDistancePLs( GCE_system gSys, geom_item p[3] - , const GCE_dim_pars & dPars ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Ориентированное расстояние между точками". - \en Set the constraint "Directed distance between points". \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] p - \ru Дескрипторы пары точек. - \en Descriptors of point pair. \~ - \param[in] dPars - \ru Параметры размерного ограничения. - \en Parameters of dimensional constraint. \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - \details \ru Параметр dPars.dirAngle задает направление размера в радианах. - Управляя dPars.dirAngle, можно задать вертикальный или - горизонтальный размеры. Так размер параметром dPars.dirAngle = 0 - создаст "горизонтальный размер", а dPars.dirAngle, равный PI/2 радиан - будет соответствовать "вертикальному" размеру. - - \en The constraint represents the dimension type that dimensions the - distance between two points in plane when they are projected onto a line - at an angle specified by parameter dPars dirAngle, which sets the direction - of dimension in radians. With driving dPars.dirAngle it is possible to - set the vertical or the horizontal dimension. So a dimension with an angle - equal to 0 radians specifies a "horizontal". The angle equal to PI/2 radians - corresponds to "vertical" dimension. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddDirectedDistance( GCE_system gSys, geom_item p[2] - , const GCE_ldim_pars & dPars ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать линейное уравнение. - \en Set the linear equation. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] a - \ru Вектор коэффициентов линейного уравнения. - \en Vector of coefficients of linear equation. \~ - \param[in] v - \ru Дескрипторы переменных уравнения. - \en Descriptors of variables of equation. \~ - \param[in] n - \ru Количество переменных. - \en Quantity of variables.\~ - \param[in] c - \ru Коэффициент без переменной. - \en Free coefficient. \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - \details \ru Задать линейное уравнение в виде a1*v1 + a2*v2 + .. + an*vn + c = 0. - \en Set a linear equation in form of a1*v1 + a2*v2 + .. + an*vn + c = 0. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddLinearEquation( GCE_system gSys, const double * a - , const var_item * v, size_t n, double c ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Изменить значение управляющего размера. - \en Change the value of driving dimension. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] dItem - \ru Дескриптор размерного ограничения. - \en Descriptor of dimensional constraint. \~ - \param[in] dVal - \ru Требуемое значение размера. - \en Required value of constraint. \~ - \return \ru Код результата операции. - \en Operation result code. \~ - \details \ru Функция применяется только для управляющих размеров или управляющих параметров. - Если управляющий размер или параметр является угловым, то параметр dVal задается в радианах.\n - Следует учитывать, что настоящая функция не осуществляет вычислений, а только - подготавливает изменение размера. Что бы изменения вступили в силу, необходимо вызвать - функцию #GCE_Evaluate. - \en The function is used only for driving dimensions or driving parameters. - If the driving dimension or parameter is angular, then the parameter dVal is specified in radians. \n - It should be taken into account that the function doesn't perform computations but only - prepares the changing of dimension. For the changes to take effect it is required - to call the function #GCE_Evaluate. \~ -*/ -//--- -GCE_FUNC(GCE_result) GCE_ChangeDrivingDimension( GCE_system gSys, constraint_item dItem, double dVal ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Отклонить ограничение от точки решения. - \en Deviate the constraint from the point of solution. \~ - \param[in] dItem - \ru Дескриптор геометрического ограничения. - \en Descriptor of geometric constraint. \~ - \param[in] delta - \ru Величина отклонения. - \en Deviation value. \~ - \return errCode - \ru Результат решения системы ограничений. - \en Solution of constraint system. \~ - - \details \ru Функция применяется для диагностики избыточности ограничения, основанной - на отклонении области решений ограничения. Работает только для размерных ограничений - и некоторых типов геометрических ограничений, таких как "Выравнивание точек", - "Горизонтальность" и т.д. Применимость к тому или иному типу не задокументирована и - определяется опытным путем. - Если было возвращено значение GCE_RESULT_None, то ограничение не отклонялось. - \en The function is used for the diagnostics of constraints redundancy based - on the deviation of the region of solution of the constraint. It works only for dimensional constraints - and other types of geometric constraints such as "Points alignment", - "Horizontality" etc. The applicability to a certain type was not documented and - it is defined only empirically. - If GCE_RESULT_None is returned, the constraint wasn't deviated. \~ -*/ -// --- -GCE_FUNC(GCE_result) GCE_DeviateDimension( GCE_system gSys, constraint_item dItem, double delta ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Тест избыточности ограничения, основанный на отклонении его от точки решения. - \en Test for redundancy of constraint based on the deviation the constraint from the point of solution. \~ - \param[in] dItem - \ru Дескриптор геометрического ограничения. - \en Descriptor of geometric constraint. \~ - \param[in] delta - \ru Величина отклонения. - \en Deviation value. \~ - \return - \ru Результат решения системы ограничений. - \en Solution of constraint system. \~ - - \details \ru Функция применяется для диагностики избыточности ограничения, основанной - на отклонении области решений ограничения. Работает только для размерных ограничений - и некоторых типов геометрических ограничений, таких как "Выравнивание точек", - "Горизонтальность" и т.д. Применимость к тому или иному типу (кроме размерных) не - задокументирована и определяется опытным путем. - Если было возвращено значение GCE_RESULT_None, то ограничение не отклонялось. - \en The function is used for the diagnostics of constraints redundancy based - on the deviation of the region of solution of the constraint. It works only for dimensional constraints - and other types of geometric constraints such as "Points alignment", - "Horizontality" etc. The applicability to a certain type (for non dimensional) - was not documented and it is defined only empirically. - If GCE_RESULT_None is returned, the constraint wasn't deviated. \~ - - \note \ru В отличии от #GCE_DeviateDimension не меняется состояние системы ограничений. - \en Unlike #GCE_DeviateDimension this function does not change state of geometric constraint system. -*/ -// --- -GCE_FUNC(GCE_result) GCE_DeviationTest( GCE_system gSys, constraint_item dItem, double delta ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Текущее значение размерного параметра. - \en A current value of the dimension parameter. - \details \ru Функция выдает текущее значение размерного параметра ограничения. Если - ограничение не размерное, то функция вернет GCE_UNDEFINED_DBL. Для управляющих размеров - будет выдано значение управляющего параметра, которое было задано при создании размера - или последним вызовом GCE_ChangeDrivingDimension. - \en The function returns a value of dimension parameter of the constraint. - If the constraint is a driving dimension, the function returns a value of dimension - parameter specified when creating the constraint or last call of #GCE_ChangeDrivingDimension. -*/ -//--- -GCE_FUNC(double) GCE_DimensionParameter( GCE_system gSys, constraint_item dItem ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Вычислить систему ограничений. - \en Calculate the constraint system. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \return \ru Код результата вычислений. - \en Calculation result code. \~ - \details \ru Функция решает задачу ограничений. Задача ограничений формулируется - функциями API геометрического решателя; функции вида GCE_Add_XXXXXXX добавляют новые - объекты, функции вида GCE_Change_XXXXXXX, GCE_Set_XXXXXXX изменяют состояние - объектов. Таким образом, что бы все такие изменения вступили в силу, нужно - вызвать метод #GCE_Evaluate.\n - Алгоритмы GCE_Evaluate учитывают удовлетворенность систем ограничений; если - все ограничения уже решены, то функция не тратит время на вычисления, а - состояние геометрических объектов остается неизменным. - \en The function solves problem of constraints. The problem of constraint is formulated - by API functions of geometric solver; the functions of a kind GCE_Add_XXXXXXX add a new - object, the functions of kinds GCE_Change_XXXXXXX and GCE_Set_XXXXXXX change a state - of objects. Thus, for all changes to take effect it is necessary - to call the method #GCE_Evaluate.\n - The algorithms GCE_Evaluate take into account whether constraint systems are satisfied, if - all constraints have been already solved, then the function doesn't spend time for calculations, and - the state of geometric objects remains unchanged. \~ -*/ -//--- -GCE_FUNC(GCE_result) GCE_Evaluate( GCE_system gSys ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Инициализировать режим драггинга контрольной точки объекта. - \en Initialize the dragging mode of the object control point. \~ - \param[in] \ru gSys Система ограничений. - \en gSys System of constraints. \~ - \param[in] \ru obj Геометрический объект. - \en obj Geometric object. \~ - \param[in] \ru pntId Обозначение передвигаемой контрольной точки объекта. - \en pntId Denotation of the dragged control point of the object. \~ - \param[in] \ru curXY Координаты курсора, куда следует перемещаемая точка. - \en curXY Coordinates of cursor where the moving point follows. \~ - \return \ru Код ошибки. Вернет код GCE_RESULT_Ok, если подготовка режима драггина прошла успешна. - \en Error code. Returns GCE_RESULT_Ok if preparing the dragging mode was successful.\~ -*/ -//--- -GCE_FUNC(GCE_result) GCE_PrepareMovingOfPoint( GCE_system gSys, geom_item obj - , point_type pntId, GCE_point curXY ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Инициализировать режим драггинга контрольной точки объекта. - \en Initialize the dragging mode of the object control point. \~ - - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] drgPnt - \ru Контрольная точка объекта. - \en A geom control point. \~ - \param[in] curXY - \ru Координаты точки драггинга. - \en Coordinates of dragging point. \~ - \return \ru Код ошибки. Вернет код GCE_RESULT_Ok, если подготовка режима драггина прошла успешна. - \en Error code. Returns GCE_RESULT_Ok if preparing the dragging mode was successful.\~ -*/ -//--- -GCE_FUNC(GCE_result) GCE_PrepareDraggingPoint( GCE_system gSys, GCE_dragging_point drgPnt - , GCE_point curXY ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Инициализировать режим драггинга контрольной точки множества объектов. - \en Initialize the dragging mode of the control point of object set. \~ - \details \ru Этот метод предназначен для группового редактирования (драггинг) - нескольких объектов с "общей" hot-точкой. Под "общей" hot-точкой подразумевается - не обязательно одна точка (с одним дескриптором), а множество точек с разными - дескрипторами, но имеющих одинаковые координаты. - \en This method is intended for the group dragging of few objects with - the "common" hot-point. A "common" hot-point is not necessarily the only point - (with the only descriptor), but a set of points with different descriptors but - with equal coordinates. \~ - - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] cPntArr - \ru Множество геометрически одинаковых контрольных точек. - \en A set of geometrically equal control points. \~ - \param[in] curXY - \ru Координаты точки драггинга. - \en Coordinates of dragging point. \~ - \return \ru Код ошибки. Вернет код GCE_RESULT_Ok, если подготовка режима драггина прошла успешна. - \en Error code. Returns GCE_RESULT_Ok if preparing the dragging mode was successful.\~ -*/ -//--- -GCE_FUNC(GCE_result) GCE_PrepareDraggingPoint( GCE_system gSys - , const std::vector & cPntArr - , GCE_point curXY ); - -//---------------------------------------------------------------------------------------- -/** - \brief \ru Инициализировать режим перетаскивания множества объектов. - \en Initialize mode of moving a set of objects. - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param geoms - \ru Множество геометрических объектов. - \en Set of geometric objects. \~ - \param curXY - \ru Координаты точки драггинга. - \en Coordinates of dragging point. \~ - \return \ru Код ошибки. Вернет код GCE_RESULT_Ok, если подготовка режима драггина прошла успешна. - \en Error code. Returns GCE_RESULT_Ok if preparing the dragging mode was successful.\~ - -*/ -//--- -GCE_FUNC(GCE_result) GCE_PrepareMovingGeoms( GCE_system gSys - , std::vector & geoms - , GCE_point curXY ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Переместить точку драггинга. - \en Move a dragging point. \~ - \param[in] gcSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] curXY - \ru Текущие координаты курсора. - \en Current coordinates of cursor. \~ - \return \ru Код ошибки. Вернет код GCE_RESULT_Ok, если подготовка режима драггина прошла успешна. - \en Error code. Returns GCE_RESULT_Ok if preparing the dragging mode was successful.\~ - - \details \ru Процедура обслуживает режим драггинга, с ее помощью геометрический решатель - отслеживает положение курсора. Этот вызов позволяет осуществлять двух-координатное - управление не доопределенной моделью. Если функция возвращает код ошибки, - не равный #GCE_RESULT_Ok, то гарантируется, что состояние геометрических объектов - останется неизменным. Если функция вернула #GCE_RESULT_Ok, то решатель содержит - новое состояние геометрических объектов, удовлетворяющее всем ранее наложенным - ограничениям (новое решение). В этом случае вызывать #GCE_Evaluate для приведения - объектов в решенное состояние не требуется. - \en The procedure services the dragging mode, with a help of it a geometric solver - tracks the cursor location. This call allows to perform a two-coordinate - control of an underdetermined model. If the function returns an error code, - which is not #GCE_RESULT_Ok, then it is guaranteed that the state of geometric objects - will remain the same. If the function returned #GCE_RESULT_Ok, then the solver contains - a new state of geometric objects satisfying to all the constraints created before - (a new solution). In this case it not required to call #GCE_Evaluate for the conversion - of objects to the solved state. \~ -*/ -//--- -GCE_FUNC(GCE_result) GCE_MovePoint( GCE_system gcSys, GCE_point curXY ); - -//---------------------------------------------------------------------------------------- -/** - brief \ru Трансформировать геометрические объекты согласно заданной матрице. - \en Transform geometric objects according to a given matrix. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] geoms - \ru Множество геометрических объектов. - \en Set of geometric objects. \~ - \param[in] mat - \ru Матрица преобразования. - \en Transformation matrix. \~ - \return \ru Код ошибки. \en Error code. \~ - - \details \ru Режим динамической трансформации для данного набора геометрических объектов - включается при первом вызове функции #GCE_DynamicTransform. При этом запоминаются начальные - положения геометрических объектов и далее трансформации при каждом новом вызове - #GCE_DynamicTransform выполняются относительно их первоначального положения до тех пор, пока - режим динамической трансформации не будет выключен. Выключается режим динамической - трансформации геометрических объектов при вызове любой другой функции API или при вызове - функции #GCE_DynamicTransform для другого набора геометрических объектов. - \en The dynamic transformation mode for given set of geometric objects is turned on - after the first time the #GCE_DynamicTransform function is called. In this case, the initial - positions of geometric objects are remembered and then the transformations for each new call - of the #GCE_DynamicTransform are performed relative to their initial position until the dynamic - transformation mode is turned off. The mode of dynamic transformation of geometric objects is - turned off when calling any other API function or when calling the #GCE_DynamicTransform - function for another set of geometric objects. \~ -*/// --- -GCE_FUNC(GCE_result) GCE_DynamicTransform( GCE_system gSys, const std::vector & geoms, const MbMatrix & mat ); - -//---------------------------------------------------------------------------------------- -/** - brief \ru Трансформировать геометрию системы ограничений согласно заданной матрице. - \en Transform the geometry of the constraints system according to a given matrix. \~ - \details \ru Если преобразование несобственное, т.е. включает в себя отражение, то изменится - направление кривых, ограниченных двумя точками, у которых базовая кривая замкнутая. - Это значит, что после преобразования, запрос #GCE_PointOf для таких кривых в качестве #GCE_FIRST_END - будет возвращать точку, которую до преобразования выдавал в качестве #GCE_SECOND_END и наоброт. - \en If the transformation is improper, i.e. includes reflection, direction of bounded curves - for which the base curve is closed will be changed. This means that after transformation, - the request #GCE_PointOf for such curves will return as a #GCE_FIRST_END a point that - before transformation returned as #GCE_SECOND_END and vice versa.\~ - - - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] mat - \ru Матрица преобразования. - \en Transformation matrix. \~ - \return \ru Код ошибки. \en Error code. \~ -*/// --- -GCE_FUNC(GCE_result) GCE_Transform( GCE_system gSys, const MbMatrix & mat ); - -//---------------------------------------------------------------------------------------- -/** - \brief \ru Включить журналирование и назначить файл для записи журнала вызовов API. - \en Switch on the journalling and specify the file for recording a journal of GCE API calls. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] fName - \ru Имя файла назначения с полным путем. - \en Name of destination file with a full path. \~ - \return true, if journalling has been successfully switched on. - \attention - \ru Файл журнала будет записан только после завершения сеанса работы с системой - ограничений, а именно сразу после вызова GCE_RemoveSystem. - \en The journal file will be written only when a session of work with the - constraint system is finished, i.e. immediately after calling the - GCE_RemoveSystem method. -*/ -//--- -GCE_FUNC(bool) GCE_SetJournal( GCE_system gSys, const char * fName ); - -#define FB_NULL_GEOM 0 - -//---------------------------------------------------------------------------------------- -/** - \brief \ru Устаревшая функция. Вызов будет удален в одной из следующих версий. - Рекомендуется использовать новую функцию: #GCE_DeviateDimension( GCE_system gSys, constraint_item dItem, double delta ) - \en An obsolete function. The call will be removed in one of the next versions. - It's recommended to use new version of this function: #GCE_DeviateDimension( GCE_system gSys, constraint_item dItem, double delta )\~ - */ -// --- -GCE_FUNC(bool) GCE_DeviateDimension( GCE_system gSys, constraint_item dItem - , double delta, GCE_result & errCode ); - -//---------------------------------------------------------------------------------------- -/** - \brief \ru Устаревшая функция. Вызов будет удален в одной из следующих версий. - Рекомендуется использовать новую функцию: #GCE_DeviationTest( GCE_system gSys, constraint_item dItem, double delta ) - \en An obsolete function. The call will be removed in one of the next versions. - It's recommended to use new version of this function: #GCE_DeviationTest( GCE_system gSys, constraint_item dItem, double delta )\~ - */ -// --- -GCE_FUNC(bool) GCE_DeviationTest( GCE_system gSys, constraint_item dItem - , double delta, GCE_result & errCode ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Устаревшая функция. Вызов будет удален в одной из следующих версий. - \en An obsolete function. The call will be removed in one of the next versions. \~ - - \attention \ru Время жизни экземпляра класса crv опирается на счетчик ссылок, т.е. - решатель его увеличивает при добавлении кривой и декрементирует при удалении кривой из решателя. - \en The lifetime of the instance of the class 'crv' is based on the reference counter, i.e. - the solver increases it when adding a curve and decreases when deleting a curve from the solver. \~ -*/ -//--- -class MbPolyCurve; -GCE_FUNC(geom_item) GCE_AddSpline( GCE_system gSys, const MbPolyCurve & crv ); - -//---------------------------------------------------------------------------------------- -/** - \attention \ru Устаревшая функция. Вызов будет удален в одной из следующих версий. - \en An obsolete function. The call will be removed in one of the next versions. \~ -*/ -//--- -inline geom_item GCE_AddPoint( GCE_system gSys, GCE_point pVal, int ) -{ - return GCE_AddPoint( gSys, pVal ); -} - -//---------------------------------------------------------------------------------------- -/** - \attention \ru Устаревшая функция. Вызов будет удален в одной из следующих версий. - \en An obsolete function. The call will be removed in one of the next versions. \~ -*/ -//--- -GCE_FUNC(GCE_system) GCE_CreateSystem( void * ); - -//---------------------------------------------------------------------------------------- -/** - \attention \ru Устаревшая функция. Вызов будет удален в одной из следующих версий (2016). - \en An obsolete function. The call will be removed in one of the next versions (2016). \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddDirectedDistance2P( GCE_system gSys, geom_item p[2] - , const GCE_ldim_pars & dPars ); - -//---------------------------------------------------------------------------------------- -/** - \attention \ru Устаревшая функция. Вызов будет удален в одной из следующих версий. - \en An obsolete function. The call will be removed in one of the next versions. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddAlignPoints( GCE_system gSys, geom_item p[2], bool hor ); - -//---------------------------------------------------------------------------------------- -/** - \attention \ru Функция устарела. Вместо неё применять #GCE_FixLength. - \en The function is obsolete. Use #GCE_FixLength instead. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddFixedLength( GCE_system, geom_item ); - -//---------------------------------------------------------------------------------------- -/** - \attention \ru Функция устарела. Вместо неё применять #GCE_FixVariable. - \en The function is obsolete. Use #GCE_FixVariable instead. \~ -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddFixVariable( GCE_system, var_item ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение "Точка на кривой". - \en Set the constraint "Point on curve". \~ - \attention This call is deprecated. Call #GCE_AddCoincidence instead. -*/ -//--- -GCE_FUNC(constraint_item) GCE_AddIncidence( GCE_system, geom_item, geom_item ); - -//---------------------------------------------------------------------------------------- -/** - \attention - \ru Устаревшая функция. Вызов будет удален в одной из следующих версий. - Используйте #GCE_PrepareMovingOfPoint( GCE_system gSys, const std::vector & cPntArr, GCE_point curXY ) - взамен. - \en An obsolete function. The call will be removed in one of the next versions. - Use GCE_PrepareDraggingPoint( GCE_system gSys, const std::vector & cPntArr, GCE_point curXY ) instead of this. \~ -*/ -//--- -GCE_FUNC(GCE_result) GCE_PrepareMovingOfPoint( GCE_system gSys - , const std::vector & cPntArr - , GCE_point curXY ); - -/** \} */ - -#endif // __GCE_API_H - -// eof +////////////////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Программный интерфейс решателя геометрических ограничений. + \en Program interface of geometric constraints solver. \~ + \details \ru Программный интерфейс геометрического решателя представляет + собой набор типов данных и функций, необходимых для решения + задачи геометрических ограничений. Предметная область решателя + предусматривает такие типы, как "геометрический объект", + "геометрическое ограничение", "система ограничений". Базовые типы + решателя объявлены в заголовочном файле . Вызовы функций + и их аргументы подобраны таким образом, что бы наиболее удобно + осуществлять формулировку задачи для решателя в терминах объектов + и ограничений. Названия многих типов данных и вызовов API начинаются + префиксом GCE, сокращенно Geometric Constraint Engine. \n + + Функции API решателя можно подразделить на такие группы: + 1) Функции #GCE_CreateSystem, #GCE_ClearSystem, #GCE_RemoveSystem + позволяют создавать и удалять систему ограничений в целом + (должны вызываться в однопоточном режиме);\n + 2) С помощью функций вида GCE_Add_XXXXXXX осуществляется формулировка + задачи ограничений, с их помощью в систему добавляются объекты и + ограничения (могут использоваться в параллельном режиме);\n + 3) Функции вида GCE_Change_XXXXXXX, GCE_Set_XXXXXXX позволяют менять + размеры и состояние объектов (могут использоваться в параллельном режиме);\n + 4) Функции для запросов такие, как GCE_Get_XXXXXXX, #GCE_SplinePoint, + GCE_IsXXXXX, #GCE_PointDOF и т.д. позволяют осуществлять запросы + о состоянии объектов или их свойств, узнать степень свободы объектов + и прочие характеристики (могут использоваться в параллельном режиме);\n + 5) Метод #GCE_Evaluate вычисляет состояния системы ограничений, в котором + все ограничения удовлетворены, или возвращает код ошибки при невозможности + найти решение (должна вызываться в однопоточном режиме).\n + 6) Другая группа вызовов отвечает за способы управления недоопределенной + системой ограничений. Вызовы #GCE_PrepareDraggingPoint, #GCE_MovePoint + обеспечивают интерактивную манипуляцию объектами чертежа/эскиза.\n + + \en A program interface of geometric solver represents + a set of data types and functions necessary for solution + of a problem of geometric constraints. Subject area of the solver + provides such types as "geometric object", "geometric constraint", + "constraint system". Base types of the solver are declared in the header + file . Calls of functions and their arguments are chosen + in such way that the formulation of the problem for the solver in terms + of objects and constraints could be performed by the most convenient way. + The names of many data types and API calls begins with a prefix 'GCE', + abbreviation for Geometric Constraint Engine. \n + + API functions of solver can be subdivided into the following groups: + 1) Functions #GCE_CreateSystem, GCE_ClearSystem, GCE_RemoveSystem + allow to create and delete the system of constraints in general + (should be called in sequential code);\n + 2) The problems of constraints are formulated with a function of a kind GCE_Add_XXXXXXX, + by using them the objects and constraints are added to the system + (could be called in multi-threaded mode);\n + 3) Functions of a kind GCE_Change_XXXXXXX, GCE_Set_XXXXXXX allow to change dimensions + and objects states (could be called in multi-threaded mode);\n + 4) Functions for requests, such as #GCE_Get_XXXXXXX, #GCE_SplinePoint, + #GCE_IsXXXXX, #GCE_PointDOF etc, allow to perform requests + about the states of objects or their properties, find the objects degree of freedom + and other characteristics could be called in multi-threaded mode;\n + 5) The method #GCE_Evaluate calculates the state of the constraint system, where + all constraints are satisfied or returns an error code if it is not possible + to find a solution (should be called in sequential code). \n + 6) Other group of calls responses for the ways of control of underdetermined + system of constraints. Calls of #GCE_PrepareDraggingPoint, #GCE_MovePoint + provide interactive manipulation with objects of drawing/sketch.\n \~ +*/ +////////////////////////////////////////////////////////////////////////////////////////// + +#ifndef __GCE_API_H +#define __GCE_API_H + +#include +#include +#include + +class MATH_CLASS MbMatrix; +class MATH_CLASS MbCurve; + +/** + \addtogroup Constraints2D_API + \{ +*/ + +//---------------------------------------------------------------------------------------- +/** \brief \ru Создать пустую систему ограничений. + \en Create a simple constraint system. \~ + \details \ru Вызов создает пустую систему ограничений. Кроме того, в памяти + создаются внутренние структуры данных геометрического решателя, обслуживающего + систему ограничений. Функция возвращает специальный дескриптор, по которому + система ограничений доступна для различных манипуляций: добавление или удаление + геометрических объектов, ограничений, варьирование размеров, драггинг недоопределенных + объектов и т.д. + \en The call creates a simple constraint system. Besides, inside the memory + there are created internal data structures of geometric solver maintaining + the system of constraints. The functions returns a special descriptor by which + the constraint system is available for various manipulations: addition and deletion + of geometric objects, constraints, variation of sizes, dragging underconstrained objects + etc. \~ + + \return \ru Дескриптор системы ограничений. + \en Descriptor of constraint system. \~ +*/ +//--- +GCE_FUNC(GCE_system) GCE_CreateSystem(); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Сделать систему ограничений пустой. + \en Make the constraint system empty. \~ + \details \ru Данный метод делает систему ограничений пустой при этом + дескриптор gSys остается действительным, т.е. можно осуществлять дальнейшую + работу с системой ограничений. + \en This method makes the constraint system empty while + the descriptor gSys remains valid, i.e. it is possible to perform the further + work with the constraint system. \~ + + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \sa #GCE_RemoveSystem +*/ +//--- +GCE_FUNC(void) GCE_ClearSystem( GCE_system gSys ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Удалить систему ограничений. + \en Delete system of constraints. \~ + \details \ru Данный метод освобождает память от внутренних структур данных, обслуживающих + систему ограничений. Удаляемая система ограничений становится недействительной после + данного вызова. + \en This method releases memory from internal data structures maintaining + the constraint system. The removed constraint system is invalidated after this call. + \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \sa #GCE_ClearSystem +*/ +//--- +GCE_FUNC(void) GCE_RemoveSystem( GCE_system gSys ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Добавить в систему ограничений точку. + \en Add point to the constraint system. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] pVal - \ru Координаты точки. + \en Point coordinates. \~ + \return \ru Дескриптор зарегистрированной точки. + \en Descriptor of registered point. \~ +*/ +//--- +GCE_FUNC(geom_item) GCE_AddPoint( GCE_system gSys, GCE_point pVal ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Добавить в систему ограничений прямую. + \en Add line to the constraint system. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] lVal - \ru Координаты прямой. + \en Line coordinates. \~ + \return \ru Дескриптор зарегистрированной прямой. + \en Descriptor of registered line. \~ +*/ +//--- +GCE_FUNC(geom_item) GCE_AddLine( GCE_system gSys, const GCE_line & lVal ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Добавить в систему ограничений отрезок прямой, заданный парой концевых точек. + \en Add a line segment specified by pair of end points to the constraint system. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] p - \ru Дескрипторы конечных точек отрезка. + \en Descriptors of end points of the line segment. \~ + \return \ru Дескриптор зарегистрированного отрезка. + \en Descriptor of registered segment. \~ + \details \ru Для отрезка, созданного через данный вызов, действительны все типы + ограничений, которые применимы для прямой, создаваемой вызовом GCE_AddLine. + \en All types of constraints which are applicable to the line created by GCE_AddLine + are valid for the segment created by this call. \~ +*/ +//--- +GCE_FUNC(geom_item) GCE_AddLineSeg( GCE_system gSys, geom_item p[2] ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Добавить в систему ограничений окружность. + \en Add circle to the constraint system. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] cVal - \ru Координаты окружности. + \en Coordinates of a circle. \~ + \return \ru Дескриптор зарегистрированной окружности. + \en Descriptor of the registered circle. \~ +*/ +//--- +GCE_FUNC(geom_item) GCE_AddCircle( GCE_system gSys, const GCE_circle & cVal ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Добавить в систему ограничений эллипс. + \en Add ellipse to the constraint system. \~ + \param[in] \ru gSys Система ограничений. + \en gSys System of constraints. \~ + \param[in] \ru eVal Координаты эллипса. + \en eVal Ellipse coordinates. \~ + \return \ru Дескриптор зарегистрированного эллипса. + \en Descriptor of registered ellipse. \~ +*/ +//--- +GCE_FUNC(geom_item) GCE_AddEllipse( GCE_system gSys, const GCE_ellipse & eVal ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Добавить в систему ограничений сплайн (NURBS) + \en Add spline (NURBS) to the constraint system \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] spl - \ru Координаты сплайна. + \en Spline coordinates. \~ + \return \ru Дескриптор зарегистрированного сплайна. + \en Descriptor of registered spline. \~ +*/ +//--- +GCE_FUNC(geom_item) GCE_AddSpline( GCE_system gSys, const GCE_spline & spl ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Добавить в систему ограничений параметрическую кривую. + \en Add parametric curve to the constraint system. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] crv - \ru Математическое описание параметрической кривой. + \en Mathematical description of parametric curve. \~ + \return \ru Дескриптор зарегистрированной параметрической кривой. + \en Descriptor of registered parametric curve. \~ + \attention \ru Время жизни экземпляра класса crv опирается на счетчик ссылок, т.е. + решатель его увеличивает при добавлении параметрической кривой и + декрементирует при удалении кривой из решателя. + \en The lifetime of the instance of the class 'crv' is based on the reference counter, i.e. + the solver increases it when adding a parametric curve and + decreases when deleting a curve from the solver. \~ +*/ +//--- +GCE_FUNC(geom_item) GCE_AddParametricCurve( GCE_system gSys, const MbCurve & crv ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Добавить в систему граничную кривую, ограниченную парой точек. + \en Add a curve bounded by a pair of points to the constraint system. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] crv - \ru Дескриптор базовой геометрической кривой. Базовой кривой может + быть только кривая одного из следующих типов: прямая, окружность, + эллипс, сплайн или параметрическая кривая. + \en Descriptor of base geometric curve. Base curve may + be only one curve from the following types: line, circle, + ellipse, spline or parametric curve. \~ + \param[in] p - \ru Пара дескрипторов начальной и конечной точек участка кривой. + \en A pair of descriptors of the beginning and ending points of curve piece. \~ + \return \ru Дескриптор зарегистрированной ограниченной кривой. + \en Descriptor of registered bounded curve. \~ +*/ +//--- +GCE_FUNC(geom_item) GCE_AddBoundedCurve( GCE_system gSys, geom_item curve, geom_item p[2] ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Добавить в систему жёсткое множество геометрических объектов. + \en Add a rigid set of geometric objects to the system. \~ + \details \ru Жёсткое множество - это массив геометрических объектов, зафиксированных друг относительно друга. + Жёсткое множество представляет собой геометрический объект, для которого доступен весь функционал + работы с геометрическими объектами. Например, у него можно спросить тип (#GCE_GeomType -> GCE_SET) или запросить + положение. С помощью вызовов #GCE_GetPoint и #GCE_GetCoordValue можно получить начало координат и направление оси OX + ЛСК жёсткого множества. Чтобы удалить жёсткое множество, надо, как и для любого другого геометрического объекта, + вызвать функцию #GCE_RemoveGeom. При этом составляющие жёсткое множество объекты (geoms) при удалении жёсткого + множества не удаляются и могут далее быть использованы в решателе. С геометрическими объектами, образующими + жёсткое множество, нужно работать точно так же, как и до их добавления в жёсткое множество. Например, для наложения + ограничения между элементом жёсткого множества и любым другим геометрическим объектом необходимо в + качестве аргумента ограничения указывать не дескриптор жёсткого множества, которому данный объект принадлежит, а + дескриптор самого геометрического объекта из массива geoms, на который накладывается ограничение. + \en A rigid set is an array of geometric objects which are fixed relative to each other. It is considered as a + geometric object and hence all the functionality for working with geometric objects is available for it. For + example, it's possible to request its type (#GCE_GeomType -> GCE_SET) or get its position invoking #GCE_GetPoint + and #GCE_GetCoordValue to get the origin and the direction of the OX axis of the LCS of the rigid set. To remove + a rigid set it's necessary to call the function #GCE_RemoveGeom. Geometric objects (geoms) are not deleted together + with a rigid set and can be used in the solver after it will be deleted. With geometric objects that have been + included in a rigid set it is necessary to continue to work just as before adding them to a rigid set. For + instance, to specify a constraint between an element of a rigid set and any other geometric object, it is necessary + to specify as the constraint argument not the descriptor of the rigid set to which the object belongs but the + descriptor of the geometric object from the geoms array on which the constraint is specified.\~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] geoms - \ru Массив дескрипторов геометрических объектов, образующих жёсткое множество. + \en \~ + \return \ru Дескриптор зарегистрированного жёсткого множества объектов. + \en Descriptor of registered bounded curve. \~ +*/ +// --- +GCE_FUNC(geom_item) GCE_AddRigidSet( GCE_system gSys, const std::vector & geoms ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Добавить в систему ограничений переменную. + \en Add a variable to the constraint system. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] val - \ru Начальное значение переменной. + \en A start value of the variable. \~ + \return \ru Дескриптор зарегистрированной переменной. + \en Descriptor of registered variable. \~ +*/ +//--- +GCE_FUNC(var_item) GCE_AddVariable( GCE_system gSys, double val ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Тип геометрического объекта. + \en A type of geometric object. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g - \ru Дескриптор геометрического объекта. + \en Descriptor of geometric object \~ + \return \ru Тип геометрического объекта. + \en A type of geometric object. \~ +*/ +//--- +GCE_FUNC(geom_type) GCE_GeomType( GCE_system gSys, geom_item g ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Тип геометрической кривой. + \en A type of geometric curve. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g - \ru Дескриптор кривой. + \en Descriptor of curve \~ + \return \ru Тип геометрического объекта. + \en A type of geometric object. \~ + \details \ru The function returns geometric type of a curve 'crv' or type + of a base curve if 'crv' has type #GCE_BOUNDED_CURVE. + \en Функция вернет геометрический тип кривой 'crv' либо тип базовой кривой, + если 'crv' имеет тип #GCE_BOUNDED_CURVE. \~ +*/ +//--- +GCE_FUNC(geom_type) GCE_BaseCurveType( GCE_system gSys, geom_item crv ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Удалить переменную из системы ограничений. + \en Delete variable from the constraint system. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] var - \ru Дескриптор переменной. + \en Descriptor of variable. \~ + \return \ru true, если переменная var действительно удалена. + \en it equals true if the variable var is actually deleted. \~ +*/ +//--- +GCE_FUNC(bool) GCE_RemoveVariable( GCE_system gSys, var_item var ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Удалить геометрический объект из системы ограничений. + \en Delete geometric object from the constraint system. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g - \ru Дескриптор геометрического объекта. + \en Descriptor of geometric object \~ + \return \ru true, если геометрический объект g действительно удален. + \en it equals true if the geometric object g is actually deleted. \~ +*/ +//--- +GCE_FUNC(bool) GCE_RemoveGeom( GCE_system gSys, geom_item g ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Удалить ограничение из системы. + \en Delete a constraint from the system. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] con - \ru Дескриптор ограничения. + \en Descriptor of constraint. \~ + \return \ru true, если ограничение con действительно удалено. + \en it equals true if the constraint con is actually deleted. \~ +*/ +//--- +GCE_FUNC(bool) GCE_RemoveConstraint( GCE_system gSys, constraint_item con ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Запросить дескриптор контрольной точки объекта. + \en Request of the object control point descriptor. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g - \ru Дескриптор объекта. + \en Descriptor of object. \~ + \param[in] pnt - \ru Имя контрольной точки объекта. + \en Name of the object control point. \~ + \return \ru Дескриптор контрольной точки объекта. + \en Descriptor of the object control point. \~ + + \details \ru Дескриптор, полученный по значению этой функции, имеет автоматическое + время жизни, т.е. нет необходимости вызывать для него метод #GCE_RemoveGeom. + \en Descriptor obtained by the value of this function, it has automatical + lifetime, i.e. there is no reason to call the method #GCE_RemoveGeom for it. \~ +*/ +//--- +GCE_FUNC(geom_item) GCE_PointOf( GCE_system gSys, geom_item g, point_type pnt ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Дескриптор контрольной точки сплайна по индексу. + \en Descriptor of spline control point by index \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] spl - \ru Дескриптор сплайна. + \en Descriptor of spline. \~ + \param[in] pntIdx - \ru Индекс контрольной точки. + \en A control point index. \~ + \return \ru Дескриптор контрольной точки сплайна. + \en Descriptor of spline control point. \~ + + \details \ru Дескриптор, полученный по значению этой функции, имеет автоматическое + время жизни, т.е. нет необходимости вызывать для него метод #GCE_RemoveGeom. + \en Descriptor obtained by the value of this function, it has automatical + lifetime, i.e. there is no reason to call the method #GCE_RemoveGeom for it. \~ +*/ +//--- +GCE_FUNC(geom_item) GCE_SplinePoint( GCE_system gSys, geom_item spl, size_t pntIdx ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Получить текущие координаты вектора. + \en Get the current coordinates of vector. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g - \ru Дескриптор вектора или иного геометрического объекта. + \en Descriptor of vector or other geometric object. \~ + \param[in] vType - \ru Идентификатор вектора, принадлежащего объекту (в настоящий момент равен или GCE_DIRECTION, или GCE_ORIENTATION). + GCE_DIRECTION возвращает направляющую прямой, отрезка или главной полуоси эллипса. + \en Identifier of vector belonging to the object (currently it equals GCE_DIRECTION or GCE_ORIENTATION). + In case of GCE_DIRECTION function returns direction vector for line, line segment or ellipse major axis.\~ + \return \ru Координаты вектора. + \en Vector coordinates. \~ +*/ +//--- +GCE_FUNC(GCE_vec2d) GCE_GetVectorValue( GCE_system gSys, geom_item g, query_geom_type vType ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Получить текущие координаты точки. + \en Get the current coordinates of point. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g - \ru Дескриптор точки или иного геометрического объекта. + \en Descriptor of point or other geometric object. \~ + \param[in] pName - \ru Идентификатор точки, принадлежащей объекту. + \en Identifier of a point belonging to the object. \~ + \return \ru Координаты точки. + \en Point coordinates \~ +*/ +//--- +GCE_FUNC(GCE_point) GCE_GetPointXY( GCE_system gSys, geom_item g, point_type pName = GCE_PROPER_POINT ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Получить текущее значение координаты геометрического объекта. + \en Get the current value of geometric object's coordinate. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g - \ru Дескриптор объекта. + \en Descriptor of object. \~ + \param[in] cName - \ru Обозначение параметра объекта. + \en Denotation of object parameter. \~ + \return \ru Координаты точки. + \en Point coordinates \~ + \details \ru Получить текущее значение координаты геометрического объекта. Например, + с помощью данной функции можно узнать текущее значение большой или малой + полуоси эллипса, радиус окружности и т.д. + \en Get the current value of geometric object's coordinate. For example, + by using this function one can find the current value of the major or the minor + semi-axis of ellipse, circle radius etc. \~ +*/ +//--- +GCE_FUNC(double) GCE_GetCoordValue( GCE_system gSys, geom_item g, coord_name cName ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Получить текущее значение переменной. + \en Get the current value of variable. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] var - \ru Дескриптор переменной. + \en Descriptor of variable. \~ + \return \ru Значение переменной. + \en A value of variable. \~ +*/ +//--- +GCE_FUNC(double) GCE_GetVarValue( GCE_system gSys, var_item var ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать текущие координаты точки. + \en Set the current coordinates of point. \~ + + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g - \ru Дескриптор точки или иного геометрического объекта. + \en Descriptor of point or other geometric object. \~ + \param[in] pName - \ru Идентификатор точки, принадлежащей объекту. + \en Identifier of a point belonging to the object. \~ + \param[in] xyVal - \ru Новое значение координат точки. + \en New value of point coordinates. \~ + \return \ru true, если операция выполнена успешно. + \en true if operation succeeded. \~ + + \details \ru Метод присваивает точке или контрольной точке объекта g c + атрибутом pName новое состояние координат (параметр xyVal). Следует учитывать, + что вызов #GCE_SetPointXY не решает системы ограничений, а только меняет состояние + геометрического объекта. При этом система ограничений может стать неудовлетворенной. + Состояние точки, присвоенное вызовом GCE_SetPointXY не обязано сохранятся после + вызова #GCE_Evaluate, если точка не фиксированная или не замороженная. + \en The method assigns to the point or the control point of the object g with + the attribute pName a new state of coordinates (the parameter xyVal). It should be taken into account + that the call of #GCE_SetPointXY doesn't solve the constraint system but only changes the state + of geometric object. At the same time the constraint system may become unsatisfied. + The state of a point assigned by the call of GCE_SetPointXY should not be saved after + the call of #GCE_Evaluate if the point is not fixed or not frozen. \~ +*/ +//--- +GCE_FUNC(bool) GCE_SetPointXY( GCE_system gSys, geom_item g, point_type pName, GCE_point xyVal ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать текущее значение координаты геометрического объекта. + \en Set the current value of geometric object's coordinate. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g - \ru Дескриптор объекта. + \en Descriptor of object. \~ + \param[in] cName - \ru Обозначение параметра объекта. + \en Denotation of object parameter. \~ + \param[in] crdVal - \ru Новое значение координаты. + \en New value of coordinate. \~ + \return \ru true, если операция выполнена успешно. + \en true if operation succeeded. \~ + + \details \ru Метод присваивает координате объекта g c атрибутом cName новое значение. + Следует учитывать, что вызов #GCE_SetCoordValue не решает системы ограничений, + а только меняет состояние геометрического объекта. При этом система ограничений + может стать неудовлетворенной. Состояние координаты, присвоенное этим методом + не обязано сохранятся после вызова #GCE_Evaluate, если точка не фиксированная + или не замороженная. + \en The method assigns a new value to the coordinate of the object g with the attribute cName. + It should be taken into account that the call of #GCE_SetCoordValue doesn't solve the constraint system + but only changes the state of geometric object. At the same time the constraint system + may become unsatisfied. The state of coordinate assigned by this method + should not be saved after the call of #GCE_Evaluate if the point is not fixed + or not frozen. \~ +*/ +//--- +GCE_FUNC(bool) GCE_SetCoordValue( GCE_system gSys, geom_item g, coord_name cName, double crdVal ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать текущее значение переменной. + \en Set the current value of variable. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] var - \ru Дескриптор переменной. + \en Descriptor of variable. \~ + \param[in] val - \ru Новое значение переменной. + \en New value of variable. \~ + \return \ru true, если операция выполнена успешно. + \en true if operation succeeded. \~ +*/ +//--- +GCE_FUNC(bool) GCE_SetVarValue( GCE_system gSys, var_item var, double val ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Заморозить геометрический объект. + \en Freeze geometric object. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g - \ru Геометрический объект. + \en Geometric object. \~ + \return \ru true, если операция выполнена успешно. + \en true if operation succeeded. \~ + + \details + + \ru Функция лишает объект всей степени свободы. Отдельно можно заметить, что + функция GCE_IsConstrainedGeom для замороженного объекта вернет false, если + объект не был связан другими ограничениями. Т.е. заморозка не считается + ограничением.\n + Решатель не может менять замороженную геометрию, но её может поменять + клиентское приложение методами GCE_SetCoordValue или GCE_SetPointXY. + Замороженные объекты следует рассматривать в качестве независимых входных + параметров системы ограничений. + + \en The function deprives the object of all degrees of freedom. Note that + the function GCE_IsConstrainedGeom returns false for the frozen object if + the object was not connected with other constraints. I.e. the freezing is not considered + as a constraint.\n + The solver cannot change the frozen geometry but the user application can change it + with the methods GCE_SetCoordValue or GCE_SetPointXY. Frozen objects should be + considered as independent input parameters of constraint system. \~ + + \note + \ru Обычно на стороне САПР эта команда применяется для фиксации проекционной геометрии + в ассоциативных чертежах или в эскизах с проекциями трехмерных объектов. + \en Usually, in CAD applications this command is used only for fixation of projection + geometry in associative drawings or sketches with projections of 3D-objects. \~ +*/ +//--- +GCE_FUNC(bool) GCE_FreezeGeom( GCE_system gSys, geom_item g ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Функция отвечает на вопрос: Связан ли геометрический объект ограничениями? + \en The function answers the question: Is geometric object connected with constraints? \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g - \ru Дескриптор геометрического объекта. + \en Descriptor of geometric object. \~ + \return \ru true, если для объекта g задано хотя бы одно ограничение. + \en true if at least one constraint is set for the object g. \~ + \sa GCE_RemoveGeom, GCE_RemoveConstraint +*/ +//--- +GCE_FUNC(bool) GCE_IsConstrainedGeom( GCE_system gSys, geom_item g ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Выполнить проверку удовлетворенности ограничения. + \en Perform a check that a constraint is satisfied. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] cItem - \ru Дескриптор ограничения. + \en Descriptor of constraint. \~ + \return \ru true, если ограничение удовлетворено. + \en true if a constraint is satisfied. \~ +*/ +//--- +GCE_FUNC(bool) GCE_IsSatisfied( GCE_system gSys, constraint_item cItem ); + +//---------------------------------------------------------------------------------------- +/** + \brief \ru Статус ограничения в системе. + \en Status of constraint inn the system. + \details + \ru Вызов показывает результат диагностики, которая выделяет в системе ограничений + хорошо-обусловленные части и части, содержащие переопределения и противоречия. В результате + диагностики или попытки решения каждое ограничение помечается одним из статусов, + перечисленных в наборе GCE_c_status. + + \en The call shows the result of the diagnostic, which highlights the constraint system + well-conditioned parts and parts containing redundancies and inconsistencies. As a result + diagnosing or evaluating each constraint is marked with one of the statuses enumerated by + GCE_c_status enum. + + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] cItem - \ru Дескриптор ограничения. + \en Descriptor of constraint. \~ + \return \ru Статус ограничения в результате диагностики на противоречия или переопределения. + \en The status of the constraint as a result of diagnostics on inconsistence and overdefining. \~ + +*/ +// --- +GCE_FUNC(GCE_c_status) GCE_ConstraintStatus( GCE_system gSys, constraint_item cItem ); + +//---------------------------------------------------------------------------------------- +/** + brief \ru Выполнить диагностику геометрических объектов. + \en Diagnose geometry. \~ + \details + \ru Если в ходе решения системы ограничений вырождаются какие-то геометрические объекты + (функция #GCE_Evaluate возвращает GCE_RESULT_InvalidGeometry ), то данная функция возвращает + массив индексов, под которыми эти объекты зарегистрированы в решателе. + Если вырождающихся объектов нет, то функция вернет пустой массив. + \en If some geometrical objects are degenerate in the course of solving the system of constraints + (function #GCE_Evaluate returns GCE_RESULT_InvalidGeometry ), this function returns an array of indices + by which these geometric objects are registered in the solver. + If geometrical objects do not degenerate, then the function returns an empty array. \~ + \param[in] gcSys - \ru Система ограничений. + \en System of constraints. \~ + \return \ru Вектор индексов объектов с вырожденной геометрией. + \en Vector of indices of objects with invalid geometry. \~ +*/// --- +GCE_FUNC(std::vector) GCE_DiagnoseGeometry( GCE_system gcSys ); + +//---------------------------------------------------------------------------------------- +/** + \brief \ru Вычислить степень свободы точки. + \en Calculate point's degree of freedom. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g - \ru Дескриптор геометрического объекта. + \en Descriptor of geometric object \~ + \param[in] cp - \ru Код контрольной точки объекта g. + \en The code of control point of the object g. \~ + \param[out] dofDir- \ru Угловое направление свободы перемещения точки в радианах. + \en Angular direction of point moving freedom in radians. \~ + \return \ru Функция возвращает степень свободы точки; Если возвращается значение < 0, + то вычислить степень свободы не удалось. + \en The function returns degree of freedom of the point; If a negative value is returned, + then it is failed to calculate the degree of freedom. \~ + + \details \ru Данная функция возвращает степень свободы точки и может принимать + одно из следующих значений:\n + (-1) - Означает, что функция не определила степень свободы;\n + 0 - Означает, что точка неподвижна в системе ограничений;\n + 1 - Означает, что точка имеет свободу перемещения вдоль некоторой траектории, причем + через параметр dofDir возвращается направление тангенциального вектора перемещения + точки;\n + 2 - Означает, что точка имеет свободу перемещения в некоторой 2D-области.\n + Если направление перемещения определить не удалось, то dofDir принимает значение < 0. + + \en This function returns the point's degree of freedom and may take + one of the following values:\n + (-1) - It means that the function didn't determine the degree of freedom;\n + 0 - It means that the point is fixed in constraint system. + 1 - It means that the point has a freedom of movement along some trajectory, besides + the direction of point movement tangent vector is returned via the parameter dotDir;\n + 2 - It means that the point has a movement freedom inside some two-dimensional region.\n + If the direction of movement was not determined, then dotDir takes a negative value. \~ +*/ +//-- +GCE_FUNC(ptrdiff_t) GCE_GetPointDOF( GCE_system gSys, geom_item g, point_type cp, double & dofDir ); + +//---------------------------------------------------------------------------------------- +/** + \brief \ru Вычислить степень свободы точки. + \en Calculate point's degree of freedom. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] pnt - \ru Дескриптор точки. + \en Descriptor of point \~ + \param[out] dofDir- \ru Угловое направление свободы перемещения точки в радианах. + \en Angular direction of point moving freedom in radians. \~ + \return \ru Функция возвращает структуру #GCE_point_dof, которая описывает + степень свободы точки, её целочисленное значение и вектор перемещения. + Если возвращается значение dof < 0, то вычислить степень свободы не удалось. + \en The function returns a structure #GCE_point_dof, which describes degree + of freedom of the point, namely its integral value (dof) and direction + vector of point moving freedom (dir). If a negative value (dof) is returned, + then it is failed to calculate the degree of freedom. \~ + + \details \ru Данная функция возвращает степень свободы точки и может принимать + одно из следующих значений:\n + dof = (-1) - Означает, что функция не определила степень свободы;\n + dof = 0 - Означает, что точка неподвижна в системе ограничений;\n + dof = 1 - Означает, что точка имеет свободу перемещения вдоль некоторой траектории, + причем через параметр "dir" (в структуре #GCE_point_dof ) возвращается направление + тангенциального вектора перемещения точки;\n + dof = 2 - Означает, что точка имеет свободу перемещения в некоторой 2D-области.\n + Если направление перемещения определить не удалось, то "dof" принимает значение < 0. + + \en This function returns the point's degree of freedom and may take + one of the following values:\n + dof = (-1) - It means that the function didn't determine the degree of freedom;\n + dof = 0 - It means that the point is fixed in constraint system. + dof = 1 - It means that the point has a freedom of movement along some trajectory, besides + the direction of point movement tangent vector is returned via the parameter "dir" + of data structure #GCE_point_dof;\n + dof = 2 - It means that the point has a movement freedom inside some two-dimensional region.\n + If the direction of movement was not determined, then "dof" takes a negative value. \~ +*/ +//-- +GCE_FUNC(GCE_point_dof) GCE_PointDOF( GCE_system gSys, geom_item pnt ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Выдать степень свободы геометрической координаты. + \en Get the degree of freedom of geometric coordinate. + + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g - \ru Дескриптор геометрического объекта. + \en Descriptor of a geometric object. \~ + \param[in] cName - \ru Обозначение геометрической координаты. + \en Denotation of geometric coordinate. \~ + \return \ru Степень свободы координаты: 1-для недоопределенной координаты, 0-для полно-заданной координаты. + \en Degree of freedom: 1 for underdefined coordinate, 0 for well-defined coordinate.\~ + + \details + \ru Функция возвращает степень свободы координаты, а именно одно из возможных + значений: 1, 0 и -1. Если возвращается значение < 0, то вычислить степень + свободы не удалось. + \en The function returns degree of freedom of the coordinate, namely one of the + possible values: 1, 0 and -1. If a negative value is returned, then it is + failed to calculate the degree of freedom. \~ + +*/ +//--- +GCE_FUNC(int) GCE_CoordDOF( GCE_system gSys, geom_item g, coord_name cName ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение для одного объекта (унарное ограничение). + \en Set a constraint on single object (unary constraint). \~ + + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] cType - \ru Значение одного из следующих типов ограничений: GCE_FIX_GEOM; GCE_VERTICAL; GCE_HORIZONTAL; GCE_ANGLE_OX; GCE_LENGTH. + \en The value of one of the following types of constraints: GCE_FIX_GEOM; GCE_VERTICAL; GCE_HORIZONTAL; GCE_ANGLE_OX; GCE_LENGTH. \~ + \param[in] g - \ru Дескриптор геометрического объекта. + \en Descriptor of geometric object \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + \details + \ru Функция задает унарное ограничение, а именно ограничение, относящееся к одному из типов, + действительных для одного геометрического объекта. + \en The function specifies an unary constraint, namely constraint which has one of types + that are valid for single geometric object. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddUnaryConstraint( GCE_system gSys, constraint_type cType, geom_item geom ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Совпадение". + \en Set the constraint "Coincidence". \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g - \ru Дескрипторы пары геометрических объектов. + \en Descriptors of geom objects pair. \~ + \details + \ru Если ограничение совпадение задано для точки и кривой, то предполагается, что точка + лежит на кривой. Если совпадение задано для геометрических объектов одного и того + же типа, то совпадение подразумевает, что они равны. + \en If a coincident constraint is defined between a point and a curve then this implies + that the point lies on the curve. A coincident constraint defined between two + geometries of the same type implies that they are equal. + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + + \attention + \ru В текущей версии решателя применение этого ограничения возможно + только для двух точек либо для точки и кривой. На будущее планируется расширить + его применения для других типов. + \en In the current version of solver using of this constraint is possible only for + two points either for a point and a curve. It is planned to extend its application + area for other types. \~ +*/ +// --- +GCE_FUNC(constraint_item) GCE_AddCoincidence( GCE_system gSys, geom_item g[2] ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Ограничение "Точка на участке кривой по коэффициенту его параметрической длины". + \en The constraint "Point on a piece of a curve by the coefficient of its parametric range". \~ + + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] curve - \ru Дескриптор кривой. + \en Descriptor of a curve. \~ + \param[in] pnt - \ru Дескрипторы точек: две крайние точки участка и точка между. + \en Descriptors of points: two boundary points of a piece and a point between. \~ + \param[in] k - \ru Долевой коэффициент от параметрической длины участка. + \en Coefficient for a part of parametric range of piece. \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + + \details \ru Предполагается, что для кривой curve и точек pnt[0], pnt[1], обеспечивается + инцидентность другими ограничениями, зарегистрированными в решателе, или эти + точки априори принадлежат кривой. Для точки pnt[2] инцидентность с кривой задавать + не требуется, т.к. данное ограничение уже обеспечивает это. Если pnt[0] = pnt[1] = GCE_NULL_G, то участок + кривой, для которого исчисляется процент k, совпадает со всей параметрической + областью кривой. Например, для окружности параметрическая область равна + интервалу [-PI ... PI]. Область значений k из интервала от 0 до 1 отображается + на параметрическую область участка кривой, соответственно k = 0 прикрепит точку + pnt[2] к началу участка, а k = 1.0 к концу участка. + + \en It is assumed that for the curve 'curve' and the points pnt[0], pnt[1] an incidence + is provided with the other constraints registered in solver or these + points a priori belong to a curve. An incidence between pnt[2] and 'curve' is not required because + this constraint already provides an incidence. If pnt[0] = pnt[1] = GCE_NULL_G, then the piece + of a curve for which the percentage k is calculated coincides with the whole parametric + region of a curve. For example, in a case of circle the parametric range is equal + to the interval [-PI ... PI]. The range of values of k from the interval from 0 to 1 is mapped + to the parametric region of curve's piece, k = 0 attaches the point + pnt[2] to the beginning of the piece and k = 1.0 - to the end of the piece. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddPointOnPercent( GCE_system gSys, geom_item curve, geom_item pnt[3], double k ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Ограничение "Точка на участке кривой по коэффициенту его длины". + \en The constraint "Point on a piece of a curve by the coefficient of its length". \~ + + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] curve - \ru Дескриптор кривой. + \en Descriptor of a curve. \~ + \param[in] pnt - \ru Дескрипторы точек: две крайние и точка между ними. + \en Descriptors of points: two boundary points and a point between them. \~ + \param[in] k - \ru Значение доли от метрической длины между заданными точками. + \en Value of a part (proportion) of the arc length between the two points. \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + + \details \ru Метод создает в системе ограничение, задающее положение точки на + участке кривой, заданное коэффициентом от его длины. Предполагается, + что для кривой curve и точек pnt[0], pnt[1], обеспечивается инцидентность другими, + зарегистрированными в решателе, ограничениями или эти точки априори принадлежат + кривой. Если pnt[0] = pnt[1] = GCE_NULL_G, то участок кривой, для которого + исчисляется процент k, совпадает со всей параметрической областью кривой. + Например, для окружности параметрическая область равна интервалу [-PI ... PI]. + Если k = 0, то ограничение прикрепит точку pnt[2] к началу участка, если k = 1.0, + то ограничение прикрепит точку pnt[2] к концу участка. + + \en The method creates a constraint specifying the point location on + a piece of a curve which is set by the coefficient (proportional) of its arc length. + It is assumed that for the curve 'curve' and the points pnt[0], pnt[1] an incidence + is provided with the other constraints registered in the solver or these points belong to + the curve a priori. If pnt[0] = pnt[1] = GCE_NULL_G, then the piece of a curve for which + the percentage k is calculated coincides with the whole parametric region of a curve. + For example, in a case of circle the parametric range is equal to the interval [-PI ... PI]. + If k = 0, then the constraint attaches the point pnt[2] to the beginning of the piece, if k = 1.0, + then the constraint attaches the point pnt[2] to the end of the piece. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddPointByMetricPercent( GCE_system gSys, geom_item curve, geom_item pnt[3], double k ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Фиксация положения точки, лежащей на кривой". + \en Set the constraint "Fixation of location of the point lying on a curve". \~ + + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] curve - \ru Дескриптор кривой. + \en Descriptor of a curve. \~ + \param[in] pnt - \ru Дескрипторы точки. + \en Descriptors of a point. \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + + \details \ru Данная функция создает ограничение, прикрепляющее точку к кривой в текущем + месте. Точка локализуется, опираясь на параметрическое представление кривой, с помощью + параметра вдоль кривой, где она расположена. Требуется, что бы к моменту вызова функции, + точка лежала на кривой, а для точки и кривой curve должна обеспечиваться инцидентность + с помощью других ограничений или эта точка априори должна принадлежать кривой. + \en This function creates a constraint attaching a point to the curve in the current + location. The point is localized according to the parametric representation of a curve with a help of + parameter along a curve where it is located. It is required that at the moment when the function is called + the point is lying on the curve, and coincidence between the point and the curve should be provided + by other constraints or this point should belong to the curve a priori. \~ + + \attention \ru В Cad-системе КОМПАС данная функция применяется только для фиксации концов + участка (bounded curve) параметрической кривой, полученной проецированием из 3D-модели. + Для таких ограничений, как "средняя точка" рекомендуется применять более + нативную функцию #GCE_AddMiddlePoint. + \en In CAD system KOMPAS this function is used only for fixation of ends of + a piece ('bounded curve') of a parametric curve obtained by projecting from 3D model. + It is recommended to apply the more native function + #GCE_AddMiddlePoint for such constraints as "middle point". \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddFixCurvePoint( GCE_system gSys, geom_item curve, geom_item pnt ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Точка на параметрическом эллипсе". + \en Set the constraint "Point on parametric ellipse". \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] pnt - \ru Дескриптор точки. + \en Descriptor of a point. \~ + \param[in] ellipse - \ru Дескриптор эллипса. + \en Descriptor of ellipse. \~ + \param[in] \ru t Значение параметра на эллипсе из области [-PI,PI]. + \en t The value of parameter on ellipse from the region [-PI,PI]. \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + \details \ru Данная функция действительна только для кривых, относящихся типу + "эллипс", функция создает ограничение, обеспечивающее совпадение точки pnt с + точкой эллипса, заданной параметром t из параметрической области эллипса, + равной интервалу [-PI,PI]. + \en This function is valid only for curves of the type + "ellipse", the function creates a constraint which provides coincidence between the point pnt and + the ellipse point set by the parameter t from the ellipse parametric region + which is equal to the interval [-PI,PI]. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddPointOnParEllipse( GCE_system gSys, geom_item pnt, geom_item ellipse, double t ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Точка на кривой по параметру". + \en Specify a constraint "Point on curve at a given parameter". \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] pnt - \ru Дескриптор точки. + \en Descriptor of a point. \~ + \param[in] curve - \ru Дескриптор кривой. + \en Descriptor of a curve. \~ + \param[in] t - \ru Дескриптор параметра кривой. + \en Descriptor of a curve parameter. \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + \details \ru Функция отличается от #GCE_AddCoincidence тем, что позволяет связать точку с параметрической + кривой через значение параметра и управлять её положением на кривой через этот параметр. + Ограничение доступно для следующих типов кривой: #GCE_ELLIPSE, #GCE_SPLINE, + #GCE_PARAMETRIC_CURVE и #GCE_BOUNDED_CURVE, основанной на кривой одного из перечисленных + типов. + \en This function differs from #GCE_AddCoincidence in that it allows to link a point with a + parametric curve through a parameter value and control its position on the curve through this + parameter. The constraint is available for the following curve types: #GCE_ELLIPSE, + #GCE_SPLINE, #GCE_PARAMETRIC_CURVE and #GCE_BOUNDED_CURVE, based on the curve of one of the + listed types. +*/ +// --- +GCE_FUNC(constraint_item) GCE_AddParPointOnCurve( GCE_system gSys, geom_item pnt, geom_item curve, var_item t ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Выравнивание точек вдоль заданного направления". + \en Set the constraint "Alignment of points along the given direction". \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] p - \ru Дескрипторы пары точек. + \en Descriptors of point pair. \~ + \param[in] ang - \ru Угол, задающий направление выравнивания, радианы. + \en An angle specifying alignment direction, in radians. \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddAlignPoints( GCE_system gSys, geom_item p[2], double ang ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Угловой размер между двумя прямыми". + \en Set the constraint "Angular dimension between two lines". \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] l1 - \ru Дескриптор первого линейного геометрического объекта. + \en Descriptor of the first linear geometric object. \~ + \param[in] l2 - \ru Дескриптор второго линейного геометрического объекта. + \en Descriptor of the second linear geometric object. \~ + \param[in] dPars - \ru Параметры углового размера (подробности см.#GCE_adim_pars). + \en Parameters of angular dimension (see #GCE_adim_pars). \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + \details \ru Угловой размер для пары линейных геометрических объектов. Аргументами + ограничения могут быть объекты, принадлежащие типам: "прямая", "отрезок" или + "Bounded curve", основанной на прямой. + \en Angular dimension for a pair of linear geometric objects. Arguments + of constraint are objects of the following types: "line", "segment" or + "Bounded curve" based on line. \~ + +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddAngle( GCE_system gSys, geom_item l1, geom_item l2 + , const GCE_adim_pars & dPars ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Биссектриса". + \en Set the constraint "Bisector of angle". \~ + \param[in] \ru gSys Система ограничений. + \en gSys System of constraints. \~ + \param[in] \ru bl отрезок, биссектриса между двумя прямыми. + \en bl a segment, bisector of angle between two lines. \~ + \param[in] \ru l1, l2 прямые или отрезки, между которыми устанавливается биссектриса. + \en l1, l2 lines or segments a bisector of angle is set between. \~ + \param[in] \ru variant вариант решения для биссектрисы. + \en variant variant of solution for bisector of angle. \~ + \return \ru дескриптор нового ограничения. + \en descriptor of new constraint. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddAngleBisector( GCE_system gSys + , geom_item l1, geom_item l2 + , geom_item bl + , GCE_bisec_variant variant ); + +//---------------------------------------------------------------------------------------- +/// \ru Задать угловой размер для четырех точек. \en Specify angular dimension for four points. +/**\ru Конструируется угловой размер для двух отрезков с точками p1-p2, p3-p4. + \en Angular dimension is constructed for two segments with points p1-p2, p3-p4. \~ + \param[in] \ru gSys - Система ограничений. + \en gSys - System of constraints. \~ + \param[in] \ru fPair - Первая пара точек (первый отрезок). + \en sPair - First pair of points (first segment).\~ + \\param[in] \ru fPair - Вторая пара точек (второй отрезок). + \en sPair - Second pair of points (second segment).\~ + \param[in] dPars - \ru Параметры углового размера (подробности см.#GCE_adim_pars). + \en Parameters of angular dimension (see #GCE_adim_pars). \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddAngle4P( GCE_system gSys, geom_item fPair[2] + , geom_item sPair[2], const GCE_adim_pars & dPars ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Коллинеарность". + \en Set the constraint "Colinearity". \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g - \ru Дескрипторы пары линейных объектов. + \en Descriptors of a pair of linear objects. \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + \details \ru Ограничение делает пару объектов, принадлежащими общей прямой, применяется + для прямых или отрезков. + \en Constraint makes a pair of objects belonging to the common line, it is used + for lines or segments. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddColinear( GCE_system gSys, geom_item g[2] ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Коллинеарность трех точек". + \en Set the constraint "Colinearity of three points". \~ + \details \ru Задать для трех точек отношение, такое что точки лежат на одной прямой. + \en Set such a constraint for three points that points should lie on the same line. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] pnt - \ru Тройка точек, лежащих на одной прямой. + \en A triplet of points lying on the same line. \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddColinear3Points( GCE_system gcSys, geom_item pnt[3] ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Равенство длин" для отрезков. + \en Set the constraint "Equality of lengths" for segments. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] ls1 - \ru Дескриптор первого отрезка. + \en Descriptor of the first segment. \~ + \param[in] ls2 - \ru Дескриптор второго отрезка. + \en Descriptor of the second segment. \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + \details \ru Ограничение применимо для отрезков или участков прямых, созданных с помощью + функции #GCE_AddBoundedCurve или #GCE_AddLineSeg. + \en The constraint is applicable for segments or line pieces created by + the function #GCE_AddBoundedCurve or #GCE_AddLineSeg. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddEqualLength( GCE_system gSys, geom_item ls1, geom_item ls2 ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Равенство радиусов" для двух окружностей (дуг) + \en Set the constraint "Equality of radii" for two circles (arcs) \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] c1 - \ru Дескриптор первой окружности. + \en Descriptor of the first circle. \~ + \param[in] c2 - \ru Дескриптор второй окружности. + \en Descriptor of the second circle. \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddEqualRadius( GCE_system gSys, geom_item c1, geom_item c2 ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Равенство кривизны двух кривых в заданных точках". + \en Specify a constraint "Equality of curvature of two curves at given points". \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] curves - \ru Дескрипторы пары кривых. + \en Descriptors of a pair of curves. \~ + \param[in] tPars - \ru Дескрипторы параметров параметрических кривых, в которых должно выполняется + равенство кривизны. + \en Descriptors of parameters of parametric curves in which the equality of curvature + must be satisfied. \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + + \note \ru Если тип кривой #GCE_CIRCLE или #GCE_BOUNDED_CURVE, базовой кривой которой является окружность, + то соответствующее этой кривой значение tPars[i] может равняться #GCE_NULL_V, т.к. кривизна + окружности одинакова во всех её точках. + \en If curve has a type #GCE_CIRCLE or #GCE_BOUNDED_CURVE which is based on circle then the + corresponding value of tPars[i] may be equal to #GCE_NULL_V because the curvature of circle + is the same in all its points. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddEqualCurvature( GCE_system gSys, geom_item curves[2], var_item tPars[2] ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Радиусный размер". + \en Specify a "Radius dimension" constraint. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] cir - \ru Дескриптор окружности. + \en Descriptor of circle. \~ + \param[in] dPar - \ru Параметры линейного размера (подробности см.#GCE_dim_pars). + \en Parameters of linear dimension (see #GCE_dim_pars). \~ + + \return \ru Дескриптор радиусного ограничения. + \en Descriptor of radius constraint. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddRadiusDimension( GCE_system gSys, geom_item cir, GCE_dim_pars dPar ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Диаметральный размер". + \en Specify a "Diameter dimension" constraint. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] cir - \ru Дескриптор окружности. + \en Descriptor of circle. \~ + \param[in] dPar - \ru Параметры линейного размера (подробности см.#GCE_dim_pars). + \en Parameters of linear dimension (see #GCE_dim_pars). \~ + + \return \ru Дескриптор диаметрального ограничения. + \en Descriptor of diameter constraint. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddDiameter( GCE_system gSys, geom_item cir, GCE_dim_pars dPar ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Длина кривой". + \en Specify a "Curve Length" constraint. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] curve - \ru Дескриптор кривой. + \en Descriptor of curve. \~ + \param[in] dPar - \ru Параметры линейного размера (подробности см.#GCE_dim_pars). + \en Parameters of linear dimension (see #GCE_dim_pars). \~ + + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + + \details \ru У кривой должны быть начальная и конечная точки (#GCE_FIRST_END и #GCE_SECOND_END). + Ограничение поддерживается для линейных объектов и дуг окружностей. + \en The curve must have a start and end points (#GCE_FIRST_END и #GCE_SECOND_END). + Constraint is supported for linear objects and circular arcs.\~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddLength( GCE_system gSys, geom_item curve, GCE_dim_pars dPar ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Управляющий параметр" или "Фиксация переменной" + \en Set the constraint "Driving parameter" or "Fixation of variable" \~ + + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] var - \ru Дескриптор переменной. + \en Descriptor of variable. \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + \note \ru Созданное с помощью этой функции, ограничение может управляться + через вызов GCE_ChangeDrivingDimension. + \en A constraint created with this function can be driven + via the call of GCE_ChangeDrivingDimension. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_FixVariable( GCE_system gSys, var_item var ); + +//---------------------------------------------------------------------------------------- +/** + \brief \ru Задать ограничение "Фиксация геометрического объекта". + \en Set the constraint "Fixation of geom" \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g - \ru Дескриптор геометрического объекта. + \en Descriptor of geometric object \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ +*/ +// --- +GCE_FUNC(constraint_item) GCE_FixGeom( GCE_system gSys, geom_item g ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Фиксированная длина отрезка" + \en Set the constraint "Fixation of segment length" \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] ls - \ru Дескриптор отрезка. + \en Descriptor of segment. \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + + \details \ru У кривой должны быть начальная и конечная точки (#GCE_FIRST_END и #GCE_SECOND_END). + Ограничение поддерживается для линейных объектов и дуг окружностей. + \en The curve must have a start and end points (#GCE_FIRST_END и #GCE_SECOND_END). + Constraint is supported for linear objects and circular arcs.\~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_FixLength( GCE_system gSys, geom_item ls ); + +//---------------------------------------------------------------------------------------- +/** + \brief \ru Задать ограничение "Фиксированный радиус". + \en Set the constraint "Fixation of radius" \~ + \details \ru Ограничение применимо для фиксации радиуса окружности или полуоси эллипса. + \en The constraint is applicable to fix radius of circle or semiaxis of ellipse. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] circ - \ru Дескриптор окружности или эллипса. + \en Descriptor of circle or ellipse. \~ + \param[in] cName- \ru Тип фиксируемой координаты. Может быть радиус, большая или малая полуось эллипса. + \en Type of fixed coordinate. It can be #GCE_RADIUS, + #GCE_MAJOR_RADIUS or #GCE_MINOR_RADIUS.\~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ +*/ +// --- +GCE_FUNC(constraint_item) GCE_FixRadius( GCE_system gSys, geom_item circ, coord_name cName = GCE_RADIUS ); + +//---------------------------------------------------------------------------------------- +/** + \brief + \ru Задать ограничение "Зафиксировать производную сплайна в заданной точке". + \en Set the constraint "Fixation of derivative vector of the spline at a given point". \~ + \param[in] gSys - \ru Система ограничений. \en System of constraints. \~ + \param[in] spline - \ru Дескриптор сплайна. \en Descriptor of spline. \~ + \param[in] par - \ru Значение параметра, в котором надо зафиксировать производную. + \ \en Parameter value in which it is necessary to record a derivative. \~ + \param[in] derOrder - \ru Порядок производной, которую надо зафиксировать. \en Order of the derivative which must be fixed. \~ + \param[in] fixVal - \ru Значение, к которому надо приравнять производную. \en The value to which it is necessary to equate the derivative. \~ + \return \ru Дескриптор нового ограничения. \en Descriptor of a new constraint. \~ + \details + \ru Точка фиксации задается через значение параметра, соответствующего ей. \n + Порядок фиксируемой производной может равняться 0 (фиксация точки), 1, 2 или 3. \n + Если fixVal равен c3d_null, будет зафиксировано текущее значение производной, + иначе фиксируемой производной будет присвоено значение fixVal. + \en + Fixation point is specified via the parameter value corresponding to it. \n + The order of a fixed derivative can be equal 0 (point fixing), 1, 2 or 3. \n + If fixVal is c3d_null current value of the derivative vector will be fixed. + Otherwise the derivative vector will be fixed at fixVal value. \~ + */ +//--- +GCE_FUNC(constraint_item) GCE_FixSplineDerivative( GCE_system gSys, geom_item spline + , double par, uint derOrder, GCE_vec2d * fixVal = c3d_null ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Средняя точка". + \en Set the constraint "Middle point". \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] pnt - \ru Дескрипторы трех точек. + \en Descriptors of point triplet. \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + \details \ru Для данных трех точек, задать отношение, связывающее тройку точек, + так, что третья точка лежит на середине отрезка между pnt[0] и pnt[1]. + \en For the given three points set the relation connecting the point triplet + in such way that the third point lies in the middle of points pnt[0] and pnt[1]. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddMiddlePoint( GCE_system gcSys, geom_item pnt[3] ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Параллельность". + \en Set the constraint "Parallelism". \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g - \ru Дескрипторы пары линейных объектов. + \en Descriptors of a pair of linear objects. \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + \details \ru Ограничение применяется для прямых или отрезков. + \en The constraint is used for lines or segments. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddParallel( GCE_system gSys, geom_item g[2] ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Перпендикулярность". + \en Set the constraint "Perpendicularity". \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g - \ru Дескрипторы пары линейных объектов. + \en Descriptors of a pair of linear objects. \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + \details \ru Ограничение применяется для прямых или отрезков. + \en The constraint is used for lines or segments. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddPerpendicular( GCE_system gSys, geom_item g[2] ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Симметрия относительно линейного объекта". + \en Set the constraint "Symmetry relative to the linear object". \~ + + \param[in] gSys - \ru Система ограничений. + gSys - \en System of constraints. \~ + \param[in] g - \ru Дескрипторы пары симметричных объектов. + g - \en Descriptors pair of symmetrical objects.. \~ + \param[in] lObj - \ru Дескриптор оси симметрии. + lObj - \en Descriptor of the axis of symmetry. \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + + \attention \ru В настоящий момент данное ограничение применимо только для симметрии точек. + \en Currently, this restriction only applies to the symmetry of the points. \~ + */ +//--- +GCE_FUNC(constraint_item) GCE_AddSymmetry( GCE_system gSys, geom_item g[2], geom_item lObj ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Касание двух кривых". + \en Set the constraint "Tangency of two curves". \~ + \param[in] \ru gSys Система ограничений. + \en gSys System of constraints. \~ + \param[in] \ru g Дескрипторы пары кривых или прямых. + \en g Descriptors of a pair of curves or lines. \~ + \param[in] \ru tPar Дескрипторы параметров касания для параметрических кривых. + \en tPar Descriptors of parameters of tangency for parametric curves. \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + \details + \par \ru Вспомогательные параметры касания + \en Help parameters of tangency + \ru Дескрипторы переменных tPar[0] и tPar[1] задают вспомогательные значения, параметризующие + точку касания на первой и второй кривой. Одна или обе tPar могут быть равными GCE_NULL_V, + если соответствующая кривая не является сплайном или параметрической кривой, либо + пользователь согласен, что точка касания будет локализована автоматически по ближайшему решению. + + \en Variable descriptors tPar[0], tPar[1] specify help values parametrizing a tangent point + on the first and the second curve. One of both tPar can be equal GCE_NULL_V. + + \note \ru tPar[0] или tPar[1] могут быть равными GCE_NULL_V, если параметры + касания не предусмотрены или кривые не имеют параметрического представления. + Параметрическое представление имеют пока только два типа: + GCE_SPLINE и GCE_PARAMETRIC_CURVE. + \en tPar[0] or tPar[1] may be equal to GCE_NULL_V if parameters + of tangency are not provided or curves have no parametric representation. + There are only two types having parametric representation: + GCE_SPLINE and GCE_PARAMETRIC_CURVE. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddTangent( GCE_system gSys, geom_item g[2], var_item tPar[2] ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать размерное ограничение "Расстояние между объектами". + \en Set the dimensional constraint "Distance between objects". \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g - \ru Дескрипторы пары геометрических объектов. + \en Descriptors of a pair of geometric objects. \~ + \param[in] dPars - \ru Параметры линейного размера (подробности см.#GCE_ldim_pars). + \en Parameters of linear dimension (see #GCE_adim_ldim). \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + \details \ru Задать линейный размер для пары геометрических объектов. + \en Set linear dimension for a pair of geometric objects. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddDistance( GCE_system gSys, geom_item g[2], const GCE_ldim_pars & dPars ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Расстояние между точками". + \en Set the constraint "Distance between points". \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] p - \ru Дескрипторы пары точек. + \en Descriptors of point pair. \~ + \param[in] dPars - \ru Параметры размерного ограничения. + \en Parameters of dimensional constraint. \~ + + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddDistance2P( GCE_system gSys, geom_item p[2], const GCE_dim_pars & dPars ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Расстояние от точки до отрезка". + \en Set the constraint "Distance from a point to a segment". \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] p - \ru Дескрипторы тройки точек. + \en Descriptors of point triplet. \~ + \param[in] dPars - \ru Параметры размерного ограничения. + \en Parameters of dimensional constraint. \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + \details \ru Линейный размер от точки p1 до отрезка . Размер чувствителен к знаку + величины размера. + \en Linear dimension from the point p1 to the segment . + The dimension is sensitive to a sign of its value. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddDistancePLs( GCE_system gSys, geom_item p[3] + , const GCE_dim_pars & dPars ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Ориентированное расстояние между точками". + \en Set the constraint "Directed distance between points". \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] p - \ru Дескрипторы пары точек. + \en Descriptors of point pair. \~ + \param[in] dPars - \ru Параметры размерного ограничения. + \en Parameters of dimensional constraint. \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + \details \ru Параметр dPars.dirAngle задает направление размера в радианах. + Управляя dPars.dirAngle, можно задать вертикальный или + горизонтальный размеры. Так размер параметром dPars.dirAngle = 0 + создаст "горизонтальный размер", а dPars.dirAngle, равный PI/2 радиан + будет соответствовать "вертикальному" размеру. + + \en The constraint represents the dimension type that dimensions the + distance between two points in plane when they are projected onto a line + at an angle specified by parameter dPars dirAngle, which sets the direction + of dimension in radians. With driving dPars.dirAngle it is possible to + set the vertical or the horizontal dimension. So a dimension with an angle + equal to 0 radians specifies a "horizontal". The angle equal to PI/2 radians + corresponds to "vertical" dimension. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddDirectedDistance( GCE_system gSys, geom_item p[2] + , const GCE_ldim_pars & dPars ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать линейное уравнение. + \en Set the linear equation. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] a - \ru Вектор коэффициентов линейного уравнения. + \en Vector of coefficients of linear equation. \~ + \param[in] v - \ru Дескрипторы переменных уравнения. + \en Descriptors of variables of equation. \~ + \param[in] n - \ru Количество переменных. + \en Quantity of variables.\~ + \param[in] c - \ru Коэффициент без переменной. + \en Free coefficient. \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + \details \ru Задать линейное уравнение в виде a1*v1 + a2*v2 + .. + an*vn + c = 0. + \en Set a linear equation in form of a1*v1 + a2*v2 + .. + an*vn + c = 0. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddLinearEquation( GCE_system gSys, const double * a + , const var_item * v, size_t n, double c ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Изменить значение управляющего размера. + \en Change the value of driving dimension. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] dItem - \ru Дескриптор размерного ограничения. + \en Descriptor of dimensional constraint. \~ + \param[in] dVal - \ru Требуемое значение размера. + \en Required value of constraint. \~ + \return \ru Код результата операции. + \en Operation result code. \~ + \details \ru Функция применяется только для управляющих размеров или управляющих параметров. + Если управляющий размер или параметр является угловым, то параметр dVal задается в радианах.\n + Следует учитывать, что настоящая функция не осуществляет вычислений, а только + подготавливает изменение размера. Что бы изменения вступили в силу, необходимо вызвать + функцию #GCE_Evaluate. + \en The function is used only for driving dimensions or driving parameters. + If the driving dimension or parameter is angular, then the parameter dVal is specified in radians. \n + It should be taken into account that the function doesn't perform computations but only + prepares the changing of dimension. For the changes to take effect it is required + to call the function #GCE_Evaluate. \~ +*/ +//--- +GCE_FUNC(GCE_result) GCE_ChangeDrivingDimension( GCE_system gSys, constraint_item dItem, double dVal ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Отклонить ограничение от точки решения. + \en Deviate the constraint from the point of solution. \~ + \param[in] dItem - \ru Дескриптор геометрического ограничения. + \en Descriptor of geometric constraint. \~ + \param[in] delta - \ru Величина отклонения. + \en Deviation value. \~ + \return errCode - \ru Результат решения системы ограничений. + \en Solution of constraint system. \~ + + \details \ru Функция применяется для диагностики избыточности ограничения, основанной + на отклонении области решений ограничения. Работает только для размерных ограничений + и некоторых типов геометрических ограничений, таких как "Выравнивание точек", + "Горизонтальность" и т.д. Применимость к тому или иному типу не задокументирована и + определяется опытным путем. + Если было возвращено значение GCE_RESULT_None, то ограничение не отклонялось. + \en The function is used for the diagnostics of constraints redundancy based + on the deviation of the region of solution of the constraint. It works only for dimensional constraints + and other types of geometric constraints such as "Points alignment", + "Horizontality" etc. The applicability to a certain type was not documented and + it is defined only empirically. + If GCE_RESULT_None is returned, the constraint wasn't deviated. \~ +*/ +// --- +GCE_FUNC(GCE_result) GCE_DeviateDimension( GCE_system gSys, constraint_item dItem, double delta ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Тест избыточности ограничения, основанный на отклонении его от точки решения. + \en Test for redundancy of constraint based on the deviation the constraint from the point of solution. \~ + \param[in] dItem - \ru Дескриптор геометрического ограничения. + \en Descriptor of geometric constraint. \~ + \param[in] delta - \ru Величина отклонения. + \en Deviation value. \~ + \return - \ru Результат решения системы ограничений. + \en Solution of constraint system. \~ + + \details \ru Функция применяется для диагностики избыточности ограничения, основанной + на отклонении области решений ограничения. Работает только для размерных ограничений + и некоторых типов геометрических ограничений, таких как "Выравнивание точек", + "Горизонтальность" и т.д. Применимость к тому или иному типу (кроме размерных) не + задокументирована и определяется опытным путем. + Если было возвращено значение GCE_RESULT_None, то ограничение не отклонялось. + \en The function is used for the diagnostics of constraints redundancy based + on the deviation of the region of solution of the constraint. It works only for dimensional constraints + and other types of geometric constraints such as "Points alignment", + "Horizontality" etc. The applicability to a certain type (for non dimensional) + was not documented and it is defined only empirically. + If GCE_RESULT_None is returned, the constraint wasn't deviated. \~ + + \note \ru В отличии от #GCE_DeviateDimension не меняется состояние системы ограничений. + \en Unlike #GCE_DeviateDimension this function does not change state of geometric constraint system. +*/ +// --- +GCE_FUNC(GCE_result) GCE_DeviationTest( GCE_system gSys, constraint_item dItem, double delta ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Текущее значение размерного параметра. + \en A current value of the dimension parameter. + \details \ru Функция выдает текущее значение размерного параметра ограничения. Если + ограничение не размерное, то функция вернет GCE_UNDEFINED_DBL. Для управляющих размеров + будет выдано значение управляющего параметра, которое было задано при создании размера + или последним вызовом GCE_ChangeDrivingDimension. + \en The function returns a value of dimension parameter of the constraint. + If the constraint is a driving dimension, the function returns a value of dimension + parameter specified when creating the constraint or last call of #GCE_ChangeDrivingDimension. +*/ +//--- +GCE_FUNC(double) GCE_DimensionParameter( GCE_system gSys, constraint_item dItem ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Вычислить систему ограничений. + \en Calculate the constraint system. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \return \ru Код результата вычислений. + \en Calculation result code. \~ + \details \ru Функция решает задачу ограничений. Задача ограничений формулируется + функциями API геометрического решателя; функции вида GCE_Add_XXXXXXX добавляют новые + объекты, функции вида GCE_Change_XXXXXXX, GCE_Set_XXXXXXX изменяют состояние + объектов. Таким образом, что бы все такие изменения вступили в силу, нужно + вызвать метод #GCE_Evaluate.\n + Алгоритмы GCE_Evaluate учитывают удовлетворенность систем ограничений; если + все ограничения уже решены, то функция не тратит время на вычисления, а + состояние геометрических объектов остается неизменным. + \en The function solves problem of constraints. The problem of constraint is formulated + by API functions of geometric solver; the functions of a kind GCE_Add_XXXXXXX add a new + object, the functions of kinds GCE_Change_XXXXXXX and GCE_Set_XXXXXXX change a state + of objects. Thus, for all changes to take effect it is necessary + to call the method #GCE_Evaluate.\n + The algorithms GCE_Evaluate take into account whether constraint systems are satisfied, if + all constraints have been already solved, then the function doesn't spend time for calculations, and + the state of geometric objects remains unchanged. \~ +*/ +//--- +GCE_FUNC(GCE_result) GCE_Evaluate( GCE_system gSys ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Инициализировать режим драггинга контрольной точки объекта. + \en Initialize the dragging mode of the object control point. \~ + \param[in] \ru gSys Система ограничений. + \en gSys System of constraints. \~ + \param[in] \ru obj Геометрический объект. + \en obj Geometric object. \~ + \param[in] \ru pntId Обозначение передвигаемой контрольной точки объекта. + \en pntId Denotation of the dragged control point of the object. \~ + \param[in] \ru curXY Координаты курсора, куда следует перемещаемая точка. + \en curXY Coordinates of cursor where the moving point follows. \~ + \return \ru Код ошибки. Вернет код GCE_RESULT_Ok, если подготовка режима драггина прошла успешна. + \en Error code. Returns GCE_RESULT_Ok if preparing the dragging mode was successful.\~ +*/ +//--- +GCE_FUNC(GCE_result) GCE_PrepareMovingOfPoint( GCE_system gSys, geom_item obj + , point_type pntId, GCE_point curXY ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Инициализировать режим драггинга контрольной точки объекта. + \en Initialize the dragging mode of the object control point. \~ + + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] drgPnt - \ru Контрольная точка объекта. + \en A geom control point. \~ + \param[in] curXY - \ru Координаты точки драггинга. + \en Coordinates of dragging point. \~ + \return \ru Код ошибки. Вернет код GCE_RESULT_Ok, если подготовка режима драггина прошла успешна. + \en Error code. Returns GCE_RESULT_Ok if preparing the dragging mode was successful.\~ +*/ +//--- +GCE_FUNC(GCE_result) GCE_PrepareDraggingPoint( GCE_system gSys, GCE_dragging_point drgPnt + , GCE_point curXY ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Инициализировать режим драггинга контрольной точки множества объектов. + \en Initialize the dragging mode of the control point of object set. \~ + \details \ru Этот метод предназначен для группового редактирования (драггинг) + нескольких объектов с "общей" hot-точкой. Под "общей" hot-точкой подразумевается + не обязательно одна точка (с одним дескриптором), а множество точек с разными + дескрипторами, но имеющих одинаковые координаты. + \en This method is intended for the group dragging of few objects with + the "common" hot-point. A "common" hot-point is not necessarily the only point + (with the only descriptor), but a set of points with different descriptors but + with equal coordinates. \~ + + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] cPntArr - \ru Множество геометрически одинаковых контрольных точек. + \en A set of geometrically equal control points. \~ + \param[in] curXY - \ru Координаты точки драггинга. + \en Coordinates of dragging point. \~ + \return \ru Код ошибки. Вернет код GCE_RESULT_Ok, если подготовка режима драггина прошла успешна. + \en Error code. Returns GCE_RESULT_Ok if preparing the dragging mode was successful.\~ +*/ +//--- +GCE_FUNC(GCE_result) GCE_PrepareDraggingPoint( GCE_system gSys + , const std::vector & cPntArr + , GCE_point curXY ); + +//---------------------------------------------------------------------------------------- +/** + \brief \ru Инициализировать режим перетаскивания множества объектов. + \en Initialize mode of moving a set of objects. + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param geoms - \ru Множество геометрических объектов. + \en Set of geometric objects. \~ + \param curXY - \ru Координаты точки драггинга. + \en Coordinates of dragging point. \~ + \return \ru Код ошибки. Вернет код GCE_RESULT_Ok, если подготовка режима драггина прошла успешна. + \en Error code. Returns GCE_RESULT_Ok if preparing the dragging mode was successful.\~ + +*/ +//--- +GCE_FUNC(GCE_result) GCE_PrepareMovingGeoms( GCE_system gSys + , std::vector & geoms + , GCE_point curXY ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Переместить точку драггинга. + \en Move a dragging point. \~ + \param[in] gcSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] curXY - \ru Текущие координаты курсора. + \en Current coordinates of cursor. \~ + \return \ru Код ошибки. Вернет код GCE_RESULT_Ok, если подготовка режима драггина прошла успешна. + \en Error code. Returns GCE_RESULT_Ok if preparing the dragging mode was successful.\~ + + \details \ru Процедура обслуживает режим драггинга, с ее помощью геометрический решатель + отслеживает положение курсора. Этот вызов позволяет осуществлять двух-координатное + управление не доопределенной моделью. Если функция возвращает код ошибки, + не равный #GCE_RESULT_Ok, то гарантируется, что состояние геометрических объектов + останется неизменным. Если функция вернула #GCE_RESULT_Ok, то решатель содержит + новое состояние геометрических объектов, удовлетворяющее всем ранее наложенным + ограничениям (новое решение). В этом случае вызывать #GCE_Evaluate для приведения + объектов в решенное состояние не требуется. + \en The procedure services the dragging mode, with a help of it a geometric solver + tracks the cursor location. This call allows to perform a two-coordinate + control of an underdetermined model. If the function returns an error code, + which is not #GCE_RESULT_Ok, then it is guaranteed that the state of geometric objects + will remain the same. If the function returned #GCE_RESULT_Ok, then the solver contains + a new state of geometric objects satisfying to all the constraints created before + (a new solution). In this case it not required to call #GCE_Evaluate for the conversion + of objects to the solved state. \~ +*/ +//--- +GCE_FUNC(GCE_result) GCE_MovePoint( GCE_system gcSys, GCE_point curXY ); + +//---------------------------------------------------------------------------------------- +/** + brief \ru Трансформировать геометрические объекты согласно заданной матрице. + \en Transform geometric objects according to a given matrix. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] geoms - \ru Множество геометрических объектов. + \en Set of geometric objects. \~ + \param[in] mat - \ru Матрица преобразования. + \en Transformation matrix. \~ + \return \ru Код ошибки. \en Error code. \~ + + \details \ru Режим динамической трансформации для данного набора геометрических объектов + включается при первом вызове функции #GCE_DynamicTransform. При этом запоминаются начальные + положения геометрических объектов и далее трансформации при каждом новом вызове + #GCE_DynamicTransform выполняются относительно их первоначального положения до тех пор, пока + режим динамической трансформации не будет выключен. Выключается режим динамической + трансформации геометрических объектов при вызове любой другой функции API или при вызове + функции #GCE_DynamicTransform для другого набора геометрических объектов. + \en The dynamic transformation mode for given set of geometric objects is turned on + after the first time the #GCE_DynamicTransform function is called. In this case, the initial + positions of geometric objects are remembered and then the transformations for each new call + of the #GCE_DynamicTransform are performed relative to their initial position until the dynamic + transformation mode is turned off. The mode of dynamic transformation of geometric objects is + turned off when calling any other API function or when calling the #GCE_DynamicTransform + function for another set of geometric objects. \~ +*/// --- +GCE_FUNC(GCE_result) GCE_DynamicTransform( GCE_system gSys, const std::vector & geoms, const MbMatrix & mat ); + +//---------------------------------------------------------------------------------------- +/** + brief \ru Трансформировать геометрию системы ограничений согласно заданной матрице. + \en Transform the geometry of the constraints system according to a given matrix. \~ + \details \ru Если преобразование несобственное, т.е. включает в себя отражение, то изменится + направление кривых, ограниченных двумя точками, у которых базовая кривая замкнутая. + Это значит, что после преобразования, запрос #GCE_PointOf для таких кривых в качестве #GCE_FIRST_END + будет возвращать точку, которую до преобразования выдавал в качестве #GCE_SECOND_END и наоброт. + \en If the transformation is improper, i.e. includes reflection, direction of bounded curves + for which the base curve is closed will be changed. This means that after transformation, + the request #GCE_PointOf for such curves will return as a #GCE_FIRST_END a point that + before transformation returned as #GCE_SECOND_END and vice versa.\~ + + + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] mat - \ru Матрица преобразования. + \en Transformation matrix. \~ + \return \ru Код ошибки. \en Error code. \~ +*/// --- +GCE_FUNC(GCE_result) GCE_Transform( GCE_system gSys, const MbMatrix & mat ); + +//---------------------------------------------------------------------------------------- +/** + \brief \ru Включить журналирование и назначить файл для записи журнала вызовов API. + \en Switch on the journalling and specify the file for recording a journal of GCE API calls. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] fName - \ru Имя файла назначения с полным путем. + \en Name of destination file with a full path. \~ + \return true, if journalling has been successfully switched on. + \attention + \ru Файл журнала будет записан только после завершения сеанса работы с системой + ограничений, а именно сразу после вызова GCE_RemoveSystem. + \en The journal file will be written only when a session of work with the + constraint system is finished, i.e. immediately after calling the + GCE_RemoveSystem method. +*/ +//--- +GCE_FUNC(bool) GCE_SetJournal( GCE_system gSys, const char * fName ); + +#define FB_NULL_GEOM 0 + +//---------------------------------------------------------------------------------------- +/** + \brief \ru Устаревшая функция. Вызов будет удален в одной из следующих версий. + Рекомендуется использовать новую функцию: #GCE_DeviateDimension( GCE_system gSys, constraint_item dItem, double delta ) + \en An obsolete function. The call will be removed in one of the next versions. + It's recommended to use new version of this function: #GCE_DeviateDimension( GCE_system gSys, constraint_item dItem, double delta )\~ + */ +// --- +GCE_FUNC(bool) GCE_DeviateDimension( GCE_system gSys, constraint_item dItem + , double delta, GCE_result & errCode ); + +//---------------------------------------------------------------------------------------- +/** + \brief \ru Устаревшая функция. Вызов будет удален в одной из следующих версий. + Рекомендуется использовать новую функцию: #GCE_DeviationTest( GCE_system gSys, constraint_item dItem, double delta ) + \en An obsolete function. The call will be removed in one of the next versions. + It's recommended to use new version of this function: #GCE_DeviationTest( GCE_system gSys, constraint_item dItem, double delta )\~ + */ +// --- +GCE_FUNC(bool) GCE_DeviationTest( GCE_system gSys, constraint_item dItem + , double delta, GCE_result & errCode ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Устаревшая функция. Вызов будет удален в одной из следующих версий. + \en An obsolete function. The call will be removed in one of the next versions. \~ + + \attention \ru Время жизни экземпляра класса crv опирается на счетчик ссылок, т.е. + решатель его увеличивает при добавлении кривой и декрементирует при удалении кривой из решателя. + \en The lifetime of the instance of the class 'crv' is based on the reference counter, i.e. + the solver increases it when adding a curve and decreases when deleting a curve from the solver. \~ +*/ +//--- +class MbPolyCurve; +GCE_FUNC(geom_item) GCE_AddSpline( GCE_system gSys, const MbPolyCurve & crv ); + +//---------------------------------------------------------------------------------------- +/** + \attention \ru Устаревшая функция. Вызов будет удален в одной из следующих версий. + \en An obsolete function. The call will be removed in one of the next versions. \~ +*/ +//--- +inline geom_item GCE_AddPoint( GCE_system gSys, GCE_point pVal, int ) +{ + return GCE_AddPoint( gSys, pVal ); +} + +//---------------------------------------------------------------------------------------- +/** + \attention \ru Устаревшая функция. Вызов будет удален в одной из следующих версий. + \en An obsolete function. The call will be removed in one of the next versions. \~ +*/ +//--- +GCE_FUNC(GCE_system) GCE_CreateSystem( void * ); + +//---------------------------------------------------------------------------------------- +/** + \attention \ru Устаревшая функция. Вызов будет удален в одной из следующих версий (2016). + \en An obsolete function. The call will be removed in one of the next versions (2016). \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddDirectedDistance2P( GCE_system gSys, geom_item p[2] + , const GCE_ldim_pars & dPars ); + +//---------------------------------------------------------------------------------------- +/** + \attention \ru Устаревшая функция. Вызов будет удален в одной из следующих версий. + \en An obsolete function. The call will be removed in one of the next versions. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddAlignPoints( GCE_system gSys, geom_item p[2], bool hor ); + +//---------------------------------------------------------------------------------------- +/** + \attention \ru Функция устарела. Вместо неё применять #GCE_FixLength. + \en The function is obsolete. Use #GCE_FixLength instead. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddFixedLength( GCE_system, geom_item ); + +//---------------------------------------------------------------------------------------- +/** + \attention \ru Функция устарела. Вместо неё применять #GCE_FixVariable. + \en The function is obsolete. Use #GCE_FixVariable instead. \~ +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddFixVariable( GCE_system, var_item ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение "Точка на кривой". + \en Set the constraint "Point on curve". \~ + \attention This call is deprecated. Call #GCE_AddCoincidence instead. +*/ +//--- +GCE_FUNC(constraint_item) GCE_AddIncidence( GCE_system, geom_item, geom_item ); + +//---------------------------------------------------------------------------------------- +/** + \attention + \ru Устаревшая функция. Вызов будет удален в одной из следующих версий. + Используйте #GCE_PrepareMovingOfPoint( GCE_system gSys, const std::vector & cPntArr, GCE_point curXY ) + взамен. + \en An obsolete function. The call will be removed in one of the next versions. + Use GCE_PrepareDraggingPoint( GCE_system gSys, const std::vector & cPntArr, GCE_point curXY ) instead of this. \~ +*/ +//--- +GCE_FUNC(GCE_result) GCE_PrepareMovingOfPoint( GCE_system gSys + , const std::vector & cPntArr + , GCE_point curXY ); + +/** \} */ + +#endif // __GCE_API_H + +// eof diff --git a/C3d/Include/gce_callback.h b/C3d/Include/gce_callback.h index e994b3b..939838a 100644 --- a/C3d/Include/gce_callback.h +++ b/C3d/Include/gce_callback.h @@ -1,96 +1,96 @@ -////////////////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru Функции и типы данных для обратных вызовов двухмерного геометрического решателя. - \en Functions and data types for callbacks of the 2D-solver. \~ -*/ -////////////////////////////////////////////////////////////////////////////////////////// - -#ifndef __GCE_CALLBACK_H -#define __GCE_CALLBACK_H - -#include - -/** - \addtogroup Constraints2D_API - \{ -*/ - -/* - Application data types for callback queries -*/ -typedef void* GCE_app_geom; ///< Geometric object of the application using the solver -//typedef void* GCE_app_client; -const GCE_app_geom GCE_NOGEOM = 0; ///< \en Specifies an undefined object of the user's app. \ru Означает неопределенный объект пользовательского приложения. - -/* - Callback enquiries -*/ -typedef void ( *GCE_geom_registered )( GCE_app_geom ag ); ///< Application geom was registered in the solver. -typedef void ( *GCE_geom_unregistered )( GCE_app_geom ag ); -typedef bool ( *GCE_allow_zero_radius )( GCE_app_geom ag ); ///< -typedef bool ( *GCE_abort )(); ///< Query to interrupt calculations - -//---------------------------------------------------------------------------------------- -/** \brief \ru Структура, объединяющая обратные вызовы двухмерного решателя. - \en The structure uniting 2D-solver callbacks. - \details \ru Таблица функций, определяемых на стороне пользовательского приложения - для "тонкой настройки" решателя. - \en Table of user-defined callbacks tuning the 2D-solver. \~ -*/ -//--- -typedef struct -{ - /* - General system callbacks; - */ - GCE_geom_registered gRegister; - GCE_geom_unregistered gUnregister; - GCE_abort abortFunc; - - /* - Geometry properties - */ - GCE_allow_zero_radius allowZeroRadius; ///< Permit circle to have zero radius. -} GCE_callback_table; - -//---------------------------------------------------------------------------------------- -/** \brief \ru Установить и вернуть структуру с функциями обратного вызова по умолчанию. - \en Set and return default callback functions. \~ - \details \ru GCE_callback_table - простая структура в стиле C, не имеющая конструктора. - Функция GCE_InitCallbacks позволяет придать структуре начальное значение - что бы избежать некорректных значений в памяти. - \en GCE_callback_table is a plain old data structure with no constructor. - The function is able to set an initial value of the structure to avoid - incorrect work with memory. -*/ -//--- -GCE_FUNC(GCE_callback_table&) GCE_InitCallbacks( GCE_callback_table & ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Зарегистрировать таблицу обратных вызовов для новой системы ограничений. - \en Register callback table for new constraint system. \~ - \param[in] gSys - \ru Система ограничений. - \en Constraint system. \~ - \param[in] cbTable - \ru Таблица обратных вызовов. - \en Table of callbacks. \~ - \return \ru Вернет GCE_RESULT_Ok, если регистрация выполнена. - \en Returns GCE_RESULT_Ok if the registration fulfilled. \~ - -*/ -//--- -GCE_FUNC(GCE_result) GCE_Register( GCE_system gSys, const GCE_callback_table & cbTable ); - -//---------------------------------------------------------------------------------------- -/// Associate an application geometry and a solver's descriptor. -//--- -GCE_FUNC(void) GCE_Bind( GCE_system, geom_item, GCE_app_geom ); - -/** - \} - Constraints2D_API -*/ - -#endif // __GCE_CALLBACK_H - +////////////////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Функции и типы данных для обратных вызовов двухмерного геометрического решателя. + \en Functions and data types for callbacks of the 2D-solver. \~ +*/ +////////////////////////////////////////////////////////////////////////////////////////// + +#ifndef __GCE_CALLBACK_H +#define __GCE_CALLBACK_H + +#include + +/** + \addtogroup Constraints2D_API + \{ +*/ + +/* + Application data types for callback queries +*/ +typedef void* GCE_app_geom; ///< Geometric object of the application using the solver +//typedef void* GCE_app_client; +const GCE_app_geom GCE_NOGEOM = 0; ///< \en Specifies an undefined object of the user's app. \ru Означает неопределенный объект пользовательского приложения. + +/* + Callback enquiries +*/ +typedef void ( *GCE_geom_registered )( GCE_app_geom ag ); ///< Application geom was registered in the solver. +typedef void ( *GCE_geom_unregistered )( GCE_app_geom ag ); +typedef bool ( *GCE_allow_zero_radius )( GCE_app_geom ag ); ///< +typedef bool ( *GCE_abort )(); ///< Query to interrupt calculations + +//---------------------------------------------------------------------------------------- +/** \brief \ru Структура, объединяющая обратные вызовы двухмерного решателя. + \en The structure uniting 2D-solver callbacks. + \details \ru Таблица функций, определяемых на стороне пользовательского приложения + для "тонкой настройки" решателя. + \en Table of user-defined callbacks tuning the 2D-solver. \~ +*/ +//--- +typedef struct +{ + /* + General system callbacks; + */ + GCE_geom_registered gRegister; + GCE_geom_unregistered gUnregister; + GCE_abort abortFunc; + + /* + Geometry properties + */ + GCE_allow_zero_radius allowZeroRadius; ///< Permit circle to have zero radius. +} GCE_callback_table; + +//---------------------------------------------------------------------------------------- +/** \brief \ru Установить и вернуть структуру с функциями обратного вызова по умолчанию. + \en Set and return default callback functions. \~ + \details \ru GCE_callback_table - простая структура в стиле C, не имеющая конструктора. + Функция GCE_InitCallbacks позволяет придать структуре начальное значение + что бы избежать некорректных значений в памяти. + \en GCE_callback_table is a plain old data structure with no constructor. + The function is able to set an initial value of the structure to avoid + incorrect work with memory. +*/ +//--- +GCE_FUNC(GCE_callback_table&) GCE_InitCallbacks( GCE_callback_table & ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Зарегистрировать таблицу обратных вызовов для новой системы ограничений. + \en Register callback table for new constraint system. \~ + \param[in] gSys - \ru Система ограничений. + \en Constraint system. \~ + \param[in] cbTable - \ru Таблица обратных вызовов. + \en Table of callbacks. \~ + \return \ru Вернет GCE_RESULT_Ok, если регистрация выполнена. + \en Returns GCE_RESULT_Ok if the registration fulfilled. \~ + +*/ +//--- +GCE_FUNC(GCE_result) GCE_Register( GCE_system gSys, const GCE_callback_table & cbTable ); + +//---------------------------------------------------------------------------------------- +/// Associate an application geometry and a solver's descriptor. +//--- +GCE_FUNC(void) GCE_Bind( GCE_system, geom_item, GCE_app_geom ); + +/** + \} + Constraints2D_API +*/ + +#endif // __GCE_CALLBACK_H + // eof \ No newline at end of file diff --git a/C3d/Include/gce_geom.h b/C3d/Include/gce_geom.h index 6665a79..c7d41bd 100644 --- a/C3d/Include/gce_geom.h +++ b/C3d/Include/gce_geom.h @@ -1,329 +1,309 @@ -////////////////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru Программный интерфейс для системы КОМПАС - \en Program interface for KOMPAS system. \~ - \details \ru Данный файл содержит классы и методы, ориентированные на типы - данных CAD-системы КОМПАС. Для других приложений это API может оказаться - не удобным, а его методы могут быть удалены или изменены в будущих - версиях. Рекомендуется применять эту часть API решателя, только если - не удасться найти требуемую функциональность в заголовочных файлах - gce_api.h или gce_types.h. - \en This file contains classes and methods oriented to - data types of CAD-system KOMPAS. For other applications this API can be - inconvenient and its methods can be deleted or modified in future - versions. It is recommended to apply this part of solver API only if - the required functionality is not found in header files - gce_api.h or gce_types.h. \~ -*/ -////////////////////////////////////////////////////////////////////////////////////////// - -#ifndef __GCE_GEOM_H -#define __GCE_GEOM_H -// -#include -#include -#include -// -#include "gce_types.h" - - -class MATH_CLASS MbPolyCurve; -struct IfGeomPoint2d; - -//---------------------------------------------------------------------------------------- -// \ru Перечисление параметрических объектов \en Enumeration of parametric objects. -//--- -enum GcGeomType -{ - vt_NULL, ///< \ru Несуществующий тип. \en Nonexistent type. - gt_Point2d, ///< \ru Точка. \en Point. - gt_Line2d, ///< \ru Прямая. \en Line. - gt_LineSegment2d, ///< \ru Отрезок. \en Segment. - gt_Circle2d, ///< \ru Окружность. \en Circle. - gt_Arc2d, ///< \ru Дуга. \en Arc. - gt_Ellipse2d, ///< \ru Эллипс. \en Ellipse. - gt_EllipseArc2d, ///< \ru Дуга эллипса. \en Ellipse arc. - // gt_ViewPointerArrow, ///< \ru Отрезок. \en Segment. -}; - -//---------------------------------------------------------------------------------------- -// \ru Макросы \en Macros -// --- -#define CAST_PTR(T) IfGeom2dPtr // \ru Указатель с функцией приведения типов \en Pointer with function of type conversion -#define GEOM_PTR(T) IfGeom2dPtr // \ru Указатель с функцией приведения типов \en Pointer with function of type conversion -#define CAST2PTR(T,arg) (arg) != NULL ? (T*)((arg)->GetInterfacingGeom(iidr_ ## T)) : NULL // \ru Привести к другому типу \en Convert to another type - -////////////////////////////////////////////////////////////////////////////////////////// -// \ru Координата геометрического объекта или переменной \en Coordinate of a geometric object or a variable -////////////////////////////////////////////////////////////////////////////////////////// -struct ItGeomCoord : public ItCoord -{ - virtual refcount_t AddRef() const = 0; - virtual refcount_t Release() const = 0; -}; - -////////////////////////////////////////////////////////////////////////////////////////// -/*\ru Надкласс примитивных геометрических объектов решателя - Внимание: Применяется только для САПР КОМПАС. Рекомендуется вместо него использовать вызовы API из gce_api.h - объектом IfSomething. Вместо макроса IFPTR применять GEOM_PTR.\n - После того, как MdViewObj будет наконец-то, освобождать память по правилам - IfSomething, нужно:\n - 1) Все слова IfSomethingGeom2d заменить на IfSomething;\n - 2) Все слова GetInterfacingGeom заменить на QueryInterface;\n - 3) Удалить этот класс;\n - 4) Компилятор сам подскажет, какие места нужно доправить;\n - - \en Used while there is no correct work with MdViewObj in 2D model - as with object IfSomething. GEOM_PTR is to be applied instead of macro IFPTR.\n - After MdViewObj has been implemented it is required to free memory by rules IfSomething, - it is necessary to:\n - 1) All words IfSomethingGeom2d replace by IfSomething;\n - 2) All words GetInterfacingGeom replace by QueryInterface;\n - 3) Delete this class;\n - 4) Compiler will prompt which places are to be corrected;\n \~ -*/ -////////////////////////////////////////////////////////////////////////////////////////// -struct IfSomethingGeom2d -{ - virtual IfSomethingGeom2d * GetInterfacingGeom( unsigned int iid ) = 0; -}; - -////////////////////////////////////////////////////////////////////////////////////////// -// \ru Геометрический объект параметризации \en Geometric object of parametrization -/*\ru Этот тип и его подтипы соответствуют словарю типов решателя, а не типам пользователя. - \en This type and its subtypes correspond to the dictionary of types of the solver but not to the user types. \~ -*/ -////////////////////////////////////////////////////////////////////////////////////////// -struct IfGeom2d: public IfSomethingGeom2d -{ - virtual GcGeomType GetGeomType() const = 0; - /// \ru Выдать обозначение контрольной точки, принадлежащей объекту \en Get notation of the control point belonging to the object - virtual point_type IdentCtrlPoint( const IfGeomPoint2d & ) const = 0; - /// \ru Выдать обозначение координаты, принадлежащей объекту \en Get notation of coordinate belonging to the object - virtual coord_name IdentCoord( const ItGeomCoord & ) const = 0; -}; - -////////////////////////////////////////////////////////////////////////////////////////// -// \ru Точка на плоскости \en Point on the plane -////////////////////////////////////////////////////////////////////////////////////////// -struct GCE_CLASS IfGeomPoint2d: public IfGeom2d -{ - virtual GcGeomType GetGeomType() const { return gt_Point2d; } - virtual ItGeomCoord * GetXCoord() const = 0; - virtual ItGeomCoord * GetYCoord() const = 0; - /// \ru Выдать обозначение контрольной точки, принадлежащей объекту \en Get notation of the control point belonging to the object - virtual coord_name IdentCoord( const ItGeomCoord & ) const; - -public: - inline MbCartPoint GetValue() const; -}; - -////////////////////////////////////////////////////////////////////////////////////////// -// Deprecated (2017). Use GCE_AddLine instead this. -/* - КОМПАС отвязан от этого интерфейса. -*/ -////////////////////////////////////////////////////////////////////////////////////////// -struct GCE_CLASS IfGeomLine2d: public IfGeom2d -{ - virtual GcGeomType GetGeomType() const { return gt_Line2d; } - virtual ItGeomCoord * GetACoord() = 0; ///< \ru Выдать угол нормали прямой \en Get angle of line normal - virtual ItGeomCoord * GetDCoord() = 0; ///< \ru Выдать расстояние до начала СК в направлении нормали \en Get distance to the coordinate system origin in the normal direction - /// \ru Выдать обозначение контрольной точки, принадлежащей объекту \en Get notation of the control point belonging to the object - virtual coord_name IdentCoord( const ItGeomCoord & ) const; -}; - -////////////////////////////////////////////////////////////////////////////////////////// -// \ru Отрезок на плоскости \en Segment on the plane -////////////////////////////////////////////////////////////////////////////////////////// -struct GCE_CLASS IfGeomLineSeg2d: public IfGeom2d -{ - virtual GcGeomType GetGeomType() const { return gt_LineSegment2d; } - virtual IfGeomPoint2d * GetEnd( int nb ) = 0; ///< \ru Выдать конец отрезка 1,2 \en Get end of segment 1,2 - virtual bool IsFixedLength() = 0; ///< \ru Признак отрезка постоянной длины (для стрелки взгляда) \en Flag of segment of constant length (for the view vector) - // \ru Выдать обозначение контрольной точки, принадлежащей объекту \en Get notation of the control point belonging to the object - virtual coord_name IdentCoord( const ItGeomCoord & ) const { return GCE_NULL_CRD; } - inline GCE_point EndPoint( int nb ); ///< \ru Выдать конец отрезка 1,2 \en Get end of segment 1,2 -}; - -////////////////////////////////////////////////////////////////////////////////////////// -// Deprecated (2017). Use GCE_AddCircle instead this. -/* - КОМПАС отвязан от этого интерфейса. -*/ -////////////////////////////////////////////////////////////////////////////////////////// -struct GCE_CLASS IfGeomCircle2d: public IfGeom2d -{ - virtual GcGeomType GetGeomType() const { return gt_Circle2d; } - virtual IfGeomPoint2d * GetCentre() = 0; - virtual ItGeomCoord * GetRadius() = 0; - // \ru Выдать обозначение контрольной точки, принадлежащей объекту \en Get notation of the control point belonging to the object - virtual coord_name IdentCoord( const ItGeomCoord & ) const; -}; - -////////////////////////////////////////////////////////////////////////////////////////// -// \ru Эллипс на плоскости \en Ellipse on the plane -////////////////////////////////////////////////////////////////////////////////////////// -struct GCE_CLASS IfGeomEllipse2d: public IfGeom2d -{ - virtual GcGeomType GetGeomType() const { return gt_Ellipse2d; } - virtual IfGeomPoint2d * GetCentre() = 0; // \ru Выдать центр эллипса \en Get ellipse center - virtual ItGeomCoord * GetACoord() = 0; // \ru Выдать размер полуоси а \en Get size of semiaxis a - virtual ItGeomCoord * GetBCoord() = 0; // \ru Выдать размер полуоси b \en Get size of semiaxis b - virtual ItGeomCoord * GetPhiCoord() = 0; // \ru Выдать угол оси a \en Get angle of axis a - virtual coord_name IdentCoord( const ItGeomCoord & ) const; // \ru Выдать обозначение контрольной точки, принадлежащей объекту \en Get notation of the control point belonging to the object - virtual bool IsClockwise() const = 0; // \ru Вернет true, усли параметризация эллипса по часовой стрелке. \en Returns true if the ellipse parametrization is directed clockwise. -}; - -////////////////////////////////////////////////////////////////////////////////////////// -// \ru Дуга эллипса на плоскости \en Elliptical arc on the plane -////////////////////////////////////////////////////////////////////////////////////////// -struct GCE_CLASS IfGeomEllipseArc2d: public IfGeomEllipse2d -{ - virtual GcGeomType GetGeomType() const { return gt_EllipseArc2d; } - virtual IfGeomPoint2d * GetEnd( int nb ) = 0; - inline MbCartPoint GetEndValue( int nb ) - { - if ( const IfGeomPoint2d * bnd = GetEnd(nb) ) - { - return bnd->GetValue(); - } - return MbCartPoint(); - } -}; - -//---------------------------------------------------------------------------------------- -// \ru Выдать true, если оба указателя представляют одну и ту же точку параметрическую точку \en Return true if both pointers represent the same parametric point -/*\ru Поведение соответствует ParPoint::IsEqual - \en Behavior corresponds to ParPoint::IsEqual \~ -*/ -//--- -inline bool SamePoints( const IfGeomPoint2d * p1, const IfGeomPoint2d * p2 ) -{ - if ( p2 == p1 ) - { - return true; - } - if ( p1 && p2 ) - { - if ( p1->GetXCoord() == p2->GetXCoord() ) - { - return true; - } - } - - return false; -} - -//---------------------------------------------------------------------------------------- -// -//--- -inline MbCartPoint IfGeomPoint2d::GetValue() const -{ - MbCartPoint val; - if ( const ItGeomCoord * x = GetXCoord() ) - { - if ( const ItGeomCoord * y = GetYCoord() ) - { - val.Init( x->GetValue(), y->GetValue() ); - } - } - return val; -} - -//---------------------------------------------------------------------------------------- -// -//--- -inline GCE_point IfGeomLineSeg2d::EndPoint( int nb ) -{ - GCE_point val; - if ( IfGeomPoint2d * pnt = GetEnd(nb) ) - { - const MbCartPoint xy = pnt->GetValue(); - val.x = xy.x; - val.y = xy.y; - } - return val; -}; - - -////////////////////////////////////////////////////////////////////////////////////////// -// \ru Аналог IfPtr без работы со счетчиком ссылок \en Analog of IfPtr without working with reference counter -/*\ru Указатель с сервисом приведения типов - \en Pointer with type conversion service \~ -*/ -////////////////////////////////////////////////////////////////////////////////////////// - -template -class IfGeom2dPtr -{ - T * m_pI; - -public: - IfGeom2dPtr() : m_pI(0) {} - IfGeom2dPtr( T * pI ): m_pI(pI) {} - IfGeom2dPtr( IfSomethingGeom2d * pI ) : m_pI(0) { if ( pI != 0 ) m_pI = (T*)pI->GetInterfacingGeom(iid); } - IfGeom2dPtr( const IfGeom2dPtr & o ) : m_pI( o.m_pI ) {} - -public: - unsigned int GetIid() const { return iid; } - operator T*() const { return m_pI; } - T& operator *() { C3D_ASSERT(m_pI != 0); return *m_pI; } - T** operator &() { C3D_ASSERT(m_pI == 0); return &m_pI; } - T* operator->() { C3D_ASSERT(m_pI != 0); return m_pI; } - T* operator->() const { C3D_ASSERT(m_pI != 0); return m_pI; } - T* Get() const { return m_pI; } - T* operator= ( T* pI ) { m_pI = pI; } - T* operator= ( const IfGeom2dPtr & o ) { return operator=(o.m_pI); } - T* operator= ( IfSomethingGeom2d * pI ); -}; - -//---------------------------------------------------------------------------------------- -// \ru Присвоить другой интерфейс \en Assign another interface -// --- -template -inline T* IfGeom2dPtr::operator = ( IfSomethingGeom2d * pI ) { - T * pOld = m_pI; - m_pI = 0; - if ( pI != 0 ) - m_pI = (T*)pI->GetInterfacingGeom( iid ); - - return m_pI; -} - -//---------------------------------------------------------------------------------------- -// \ru Идентификаторы интерфейсов решателя сопряжений \en Identifiers of constraint solver interfaces -//--- -typedef enum -{ - // \ru Геометрические объекты \en Geometrical objects - iidr_IfSomethingGeom2d, - iidr_IfGeom2d, ///< \ru Плоский геометрический объект \en Planar geometric object - iidr_IfGeomPoint2d, - iidr_IfGeomLine2d, - iidr_IfGeomLineSeg2d, - iidr_IfGeomCircle2d, - iidr_IfGeomArc2d, - iidr_IfGeomEllipse2d, - iidr_IfGeomEllipseArc2d, - iidr_ParSolvingObj, ///< \ru Интерфейс неизвестного чертежного объекта, не обязательно примитивного, \en Interface of unknown drawing object, not necessary primitive -} EIfIDRolesMathGC; - -////////////////////////////////////////////////////////////////////////////////////////// -// Deprecated (2016). Use GCE_AddBoundedCurve with GCE_AddCircle instead this. -/* - КОМПАС отвязан от этого интерфейса. -*/ -////////////////////////////////////////////////////////////////////////////////////////// -struct IfGeomArc2d: public IfGeomCircle2d -{ -private: - virtual GcGeomType GetGeomType() const { return gt_Arc2d; } - virtual bool GetClockwise() const = 0; - virtual IfGeomPoint2d * GetEnd( int nb ) = 0; -}; - -#endif - +////////////////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Вспомогательный программный интерфейс решателя. + \en Auxiliary programming interface of the solver. \~ + \details + \ru Данный файл содержит устаревшие классы и вызовы. Данное API может оказаться + не удобным, а его методы могут быть удалены или изменены в будущих версиях. + Настоящее взаимодействие с 2D-решателем осуществляется через типы данных и вызовы, + опубликованные в заголовочных файлах gce_api.h, gce_types.h. + \en This file contains deprecrated classes and calls. This API can be inconvenient + and its methods can be deleted or modified in the future versions. + The actual interaction with the 2D-solver is througt the data types and calls + declared in gce_api.h, gce_types.h. \~ +*/ +////////////////////////////////////////////////////////////////////////////////////////// + +#ifndef __GCE_GEOM_H +#define __GCE_GEOM_H +// +#include +#include +#include +// +#include "gce_types.h" + +struct IfGeomPoint2d; + +//---------------------------------------------------------------------------------------- +// \ru Перечисление параметрических объектов \en Enumeration of parametric objects. +//--- +enum GcGeomType +{ + vt_NULL, ///< \ru Неопределенный тип. \en Undefined type. + gt_Point2d, ///< \ru Точка. \en Point. + gt_Line2d, ///< \ru Прямая. \en Line. + gt_LineSegment2d, ///< \ru Отрезок. \en Segment. + gt_Circle2d, ///< \ru Окружность. \en Circle. + gt_Arc2d, ///< \ru Дуга. \en Arc. + gt_Ellipse2d, ///< \ru Эллипс. \en Ellipse. + gt_EllipseArc2d, ///< \ru Дуга эллипса. \en Ellipse arc. +}; + +//---------------------------------------------------------------------------------------- +// \ru Макросы \en Macros +// --- +#define CAST_PTR(T) IfGeom2dPtr // \ru Указатель с функцией приведения типов \en Pointer with function of type conversion +#define GEOM_PTR(T) IfGeom2dPtr // \ru Указатель с функцией приведения типов \en Pointer with function of type conversion +#define CAST2PTR(T,arg) (arg) != c3d_null ? (T*)((arg)->GetInterfacingGeom(iidr_ ## T)) : c3d_null // \ru Привести к другому типу \en Convert to another type + +////////////////////////////////////////////////////////////////////////////////////////// +// \ru Координата геометрического объекта или переменной \en Coordinate of a geometric object or a variable +////////////////////////////////////////////////////////////////////////////////////////// +struct ItGeomCoord : public ItCoord +{ + virtual refcount_t AddRef() const = 0; + virtual refcount_t Release() const = 0; +}; + +////////////////////////////////////////////////////////////////////////////////////////// +/* + \ru Надкласс примитивных геометрических объектов решателя + Внимание: Применяется только для САПР КОМПАС. Рекомендуется вместо него использовать вызовы API из gce_api.h + объектом IfSomething. Вместо макроса IFPTR применять GEOM_PTR.\n + После того, как MdViewObj будет наконец-то, освобождать память по правилам + IfSomething, нужно:\n + 1) Все слова IfSomethingGeom2d заменить на IfSomething;\n + 2) Все слова GetInterfacingGeom заменить на QueryInterface;\n + 3) Удалить этот класс;\n + 4) Компилятор сам подскажет, какие места нужно доправить;\n + + \en Used while there is no correct work with MdViewObj in 2D model + as with object IfSomething. GEOM_PTR is to be applied instead of macro IFPTR.\n + After MdViewObj has been implemented it is required to free memory by rules IfSomething, + it is necessary to:\n + 1) All words IfSomethingGeom2d replace by IfSomething;\n + 2) All words GetInterfacingGeom replace by QueryInterface;\n + 3) Delete this class;\n + 4) Compiler will prompt which places are to be corrected;\n \~ +*/ +////////////////////////////////////////////////////////////////////////////////////////// +struct IfSomethingGeom2d +{ + virtual IfSomethingGeom2d * GetInterfacingGeom( unsigned int iid ) = 0; +}; + +////////////////////////////////////////////////////////////////////////////////////////// +// \ru Геометрический объект параметризации \en Geometric object of parametrization +/*\ru Этот тип и его подтипы соответствуют словарю типов решателя, а не типам пользователя. + \en This type and its subtypes correspond to the dictionary of types of the solver but not to the user types. \~ +*/ +////////////////////////////////////////////////////////////////////////////////////////// +struct IfGeom2d: public IfSomethingGeom2d +{ + virtual GcGeomType GetGeomType() const = 0; + /// \ru Выдать обозначение контрольной точки, принадлежащей объекту \en Get notation of the control point belonging to the object + virtual point_type IdentCtrlPoint( const IfGeomPoint2d & ) const = 0; + /// \ru Выдать обозначение координаты, принадлежащей объекту \en Get notation of coordinate belonging to the object + virtual coord_name IdentCoord( const ItGeomCoord & ) const = 0; +}; + +////////////////////////////////////////////////////////////////////////////////////////// +// \ru Точка на плоскости \en Point on the plane +////////////////////////////////////////////////////////////////////////////////////////// +struct GCE_CLASS IfGeomPoint2d: public IfGeom2d +{ + virtual GcGeomType GetGeomType() const { return gt_Point2d; } + virtual ItGeomCoord * GetXCoord() const = 0; + virtual ItGeomCoord * GetYCoord() const = 0; + /// \ru Выдать обозначение контрольной точки, принадлежащей объекту \en Get notation of the control point belonging to the object + virtual coord_name IdentCoord( const ItGeomCoord & ) const; + +public: + inline MbCartPoint GetValue() const; +}; + +////////////////////////////////////////////////////////////////////////////////////////// +// Deprecated (2017). Use GCE_AddLine instead this. +/* + КОМПАС отвязан от этого интерфейса. +*/ +////////////////////////////////////////////////////////////////////////////////////////// +struct GCE_CLASS IfGeomLine2d: public IfGeom2d +{ + virtual GcGeomType GetGeomType() const { return gt_Line2d; } + virtual ItGeomCoord * GetACoord() = 0; ///< \ru Выдать угол нормали прямой \en Get angle of line normal + virtual ItGeomCoord * GetDCoord() = 0; ///< \ru Выдать расстояние до начала СК в направлении нормали \en Get distance to the coordinate system origin in the normal direction + /// \ru Выдать обозначение контрольной точки, принадлежащей объекту \en Get notation of the control point belonging to the object + virtual coord_name IdentCoord( const ItGeomCoord & ) const; +}; + +////////////////////////////////////////////////////////////////////////////////////////// +// \ru Отрезок на плоскости \en Segment on the plane +////////////////////////////////////////////////////////////////////////////////////////// +struct GCE_CLASS IfGeomLineSeg2d: public IfGeom2d +{ + virtual GcGeomType GetGeomType() const { return gt_LineSegment2d; } + virtual IfGeomPoint2d * GetEnd( int nb ) = 0; ///< \ru Выдать конец отрезка 1,2 \en Get end of segment 1,2 + virtual bool IsFixedLength() = 0; ///< \ru Признак отрезка постоянной длины (для стрелки взгляда) \en Flag of segment of constant length (for the view vector) + // \ru Выдать обозначение контрольной точки, принадлежащей объекту \en Get notation of the control point belonging to the object + virtual coord_name IdentCoord( const ItGeomCoord & ) const { return GCE_NULL_CRD; } + inline GCE_point EndPoint( int nb ); ///< \ru Выдать конец отрезка 1,2 \en Get end of segment 1,2 +}; + +////////////////////////////////////////////////////////////////////////////////////////// +// Deprecated (2017). Use GCE_AddCircle instead this. +/* + КОМПАС отвязан от этого интерфейса. +*/ +////////////////////////////////////////////////////////////////////////////////////////// +struct GCE_CLASS IfGeomCircle2d: public IfGeom2d +{ + virtual GcGeomType GetGeomType() const { return gt_Circle2d; } + virtual IfGeomPoint2d * GetCentre() = 0; + virtual ItGeomCoord * GetRadius() = 0; + // \ru Выдать обозначение контрольной точки, принадлежащей объекту \en Get notation of the control point belonging to the object + virtual coord_name IdentCoord( const ItGeomCoord & ) const; +}; + +////////////////////////////////////////////////////////////////////////////////////////// +// \ru Эллипс на плоскости \en Ellipse on the plane +////////////////////////////////////////////////////////////////////////////////////////// +struct GCE_CLASS IfGeomEllipse2d: public IfGeom2d +{ + virtual GcGeomType GetGeomType() const { return gt_Ellipse2d; } + virtual IfGeomPoint2d * GetCentre() = 0; // \ru Выдать центр эллипса \en Get ellipse center + virtual ItGeomCoord * GetACoord() = 0; // \ru Выдать размер полуоси а \en Get size of semiaxis a + virtual ItGeomCoord * GetBCoord() = 0; // \ru Выдать размер полуоси b \en Get size of semiaxis b + virtual ItGeomCoord * GetPhiCoord() = 0; // \ru Выдать угол оси a \en Get angle of axis a + virtual coord_name IdentCoord( const ItGeomCoord & ) const; // \ru Выдать обозначение контрольной точки, принадлежащей объекту \en Get notation of the control point belonging to the object + virtual bool IsClockwise() const = 0; // \ru Вернет true, усли параметризация эллипса по часовой стрелке. \en Returns true if the ellipse parametrization is directed clockwise. +}; + +////////////////////////////////////////////////////////////////////////////////////////// +// \ru Дуга эллипса на плоскости \en Elliptical arc on the plane +////////////////////////////////////////////////////////////////////////////////////////// +struct GCE_CLASS IfGeomEllipseArc2d: public IfGeomEllipse2d +{ + virtual GcGeomType GetGeomType() const { return gt_EllipseArc2d; } + virtual IfGeomPoint2d * GetEnd( int nb ) = 0; + inline MbCartPoint GetEndValue( int nb ) + { + if ( const IfGeomPoint2d * bnd = GetEnd(nb) ) + { + return bnd->GetValue(); + } + return MbCartPoint(); + } +}; + +//---------------------------------------------------------------------------------------- +// \ru Выдать true, если оба указателя представляют одну и ту же точку параметрическую точку \en Return true if both pointers represent the same parametric point +/*\ru Поведение соответствует ParPoint::IsEqual + \en Behavior corresponds to ParPoint::IsEqual \~ +*/ +//--- +inline bool SamePoints( const IfGeomPoint2d * p1, const IfGeomPoint2d * p2 ) +{ + if ( p2 == p1 ) + { + return true; + } + if ( p1 && p2 ) + { + if ( p1->GetXCoord() == p2->GetXCoord() ) + { + return true; + } + } + + return false; +} + +//---------------------------------------------------------------------------------------- +// +//--- +inline MbCartPoint IfGeomPoint2d::GetValue() const +{ + MbCartPoint val; + if ( const ItGeomCoord * x = GetXCoord() ) + { + if ( const ItGeomCoord * y = GetYCoord() ) + { + val.Init( x->GetValue(), y->GetValue() ); + } + } + return val; +} + +//---------------------------------------------------------------------------------------- +// +//--- +inline GCE_point IfGeomLineSeg2d::EndPoint( int nb ) +{ + GCE_point val; + if ( IfGeomPoint2d * pnt = GetEnd(nb) ) + { + const MbCartPoint xy = pnt->GetValue(); + val.x = xy.x; + val.y = xy.y; + } + return val; +}; + + +////////////////////////////////////////////////////////////////////////////////////////// +// \ru Аналог IfPtr без работы со счетчиком ссылок \en Analog of IfPtr without working with reference counter +/*\ru Указатель с сервисом приведения типов + \en Pointer with type conversion service \~ +*/ +////////////////////////////////////////////////////////////////////////////////////////// + +template +class IfGeom2dPtr +{ + T * m_pI; + +public: + IfGeom2dPtr() : m_pI(c3d_null) {} + IfGeom2dPtr( T * pI ): m_pI(pI) {} + IfGeom2dPtr( IfSomethingGeom2d * pI ) : m_pI(c3d_null) { if ( pI != c3d_null ) m_pI = (T*)pI->GetInterfacingGeom(iid); } + IfGeom2dPtr( const IfGeom2dPtr & o ) : m_pI( o.m_pI ) {} + +public: + unsigned int GetIid() const { return iid; } + operator T*() const { return m_pI; } + T& operator *() { C3D_ASSERT(m_pI != c3d_null); return *m_pI; } + T** operator &() { C3D_ASSERT(m_pI == c3d_null); return &m_pI; } + T* operator->() { C3D_ASSERT(m_pI != c3d_null); return m_pI; } + T* operator->() const { C3D_ASSERT(m_pI != c3d_null); return m_pI; } + T* Get() const { return m_pI; } + T* operator= ( T* pI ) { m_pI = pI; } + T* operator= ( const IfGeom2dPtr & o ) { return operator=(o.m_pI); } + T* operator= ( IfSomethingGeom2d * pI ); +}; + +//---------------------------------------------------------------------------------------- +// \ru Присвоить другой интерфейс \en Assign another interface +// --- +template +inline T* IfGeom2dPtr::operator = ( IfSomethingGeom2d * pI ) { + T * pOld = m_pI; + m_pI = c3d_null; + if ( pI != c3d_null ) + m_pI = (T*)pI->GetInterfacingGeom( iid ); + + return m_pI; +} + +//---------------------------------------------------------------------------------------- +// \ru Идентификаторы интерфейсов решателя сопряжений \en Identifiers of constraint solver interfaces +//--- +typedef enum +{ + // \ru Геометрические объекты \en Geometrical objects + iidr_IfSomethingGeom2d, + iidr_IfGeom2d, ///< \ru Плоский геометрический объект \en Planar geometric object + iidr_IfGeomPoint2d, + iidr_IfGeomLine2d, + iidr_IfGeomLineSeg2d, + iidr_IfGeomCircle2d, + iidr_IfGeomEllipse2d, + iidr_IfGeomEllipseArc2d, + iidr_ParSolvingObj, ///< \ru Интерфейс неизвестного чертежного объекта, не обязательно примитивного, \en Interface of unknown drawing object, not necessary primitive +} EIfIDRolesMathGC; + +#endif + // eof \ No newline at end of file diff --git a/C3d/Include/gce_types.h b/C3d/Include/gce_types.h index 37ffdb4..5383d8e 100644 --- a/C3d/Include/gce_types.h +++ b/C3d/Include/gce_types.h @@ -1,685 +1,683 @@ -////////////////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru Типы данных двумерного геометрического решателя. - \en Data types of the two-dimensional geometric solver. \~ - \details \ru Этот файл представляет собой набор типов данных, необходимых для - взаимодействия геометрического решателя с клиентским приложением. - \en This file contains set of data types necessary for interaction - of the geometrical solver with user application. \~ -*/ -////////////////////////////////////////////////////////////////////////////////////////// - -#ifndef __GCE_TYPES_H -#define __GCE_TYPES_H - -#include -#include -#include -#include -#include -#include -#ifndef C3D_WINDOWS //_MSC_VER -#include -#endif //C3D_WINDOWS - -class MATH_CLASS MbNurbs; - -/** - \addtogroup Constraints2D_API - \{ -*/ - -//---------------------------------------------------------------------------------------- -/** \brief \ru Система геометрических ограничений. - \en Geometric constraints system. \~ - \details \ru GCE_system является типом данных, который обозначает систему ограничений, - которая создается с помощью вызова #GCE_CreateSystem. Реально, этот тип является - указателем на внутреннюю структуру данных, где содержится система ограничений и различные - рабочие данные, определяющие её внутреннее состояние. Время жизни системы ограничений - заканчивается только, когда к ней будет применен вызов API #GCE_RemoveSystem, после чего - значение GCE_system становится недействительным. - \en GCE_system is data type which denotes a system of constraints created by - call #GCE_CreateSystem. Actually this type is a pointer to an internal data structure with - a system of constraints and various working data determining its internal state. Lifetime - of the constraint system finishes only when a call of API #GCE_RemoveSystem - is applied to it, thereafter the value of GCE_system becomes invalid. \~ -*/ -typedef void * GCE_system; - -//---------------------------------------------------------------------------------------- -// \ru Типы данных. \en Data types. -//--- -/// \ru Дескриптор геометрического объекта, зарегистрированного в контексте решателя. \en Descriptor of geometrical object registered in the solver context. -typedef size_t geom_item; -/// \ru Дескриптор ограничения, зарегистрированного в решателе. \en Descriptor of a constraint registered in the solver. -typedef size_t constraint_item; -/// \ru Дескриптор переменной, зарегистрированной в решателе. \en Descriptor of a variable registered in the solver. -typedef size_t var_item; - -//---------------------------------------------------------------------------------------- -// \ru Константы. \en Constants. -//--- -/// \ru Неопределенное значение дескриптора или пустого объекта. \en Undefined value of descriptor or an empty object. -const size_t GCE_NULL = SYS_MAX_T; -/// \ru Неопределенное значение дескриптора типа #geom_item. \en Undefined value of #geom_item type. -const geom_item GCE_NULL_G = GCE_NULL; -/// \ru Неопределенное значение дескриптора типа #var_item. \en Undefined value of #var_item type. -const var_item GCE_NULL_V = GCE_NULL; -/// \ru Неопределенное значение дескриптора типа #constraint_item. \en Undefined value of #constraint_item type. -const constraint_item GCE_NULL_C = GCE_NULL; -/// \ru Не определенное значение числа double. \en An undefined value of double. -const double GCE_UNDEFINED_DBL = UNDEFINED_DBL; - -//---------------------------------------------------------------------------------------- -/// \ru Словарь типов геометрических примитивов. \en Dictionary of geometric primitives types. -//--- -typedef enum -{ - GCE_ANY_GEOM, ///< \ru Неизвестный тип. \en Unknown type. - - // \ru Основные типы. \en Basic types. - GCE_POINT, ///< \ru Точка на плоскости. \en Point on plane. - GCE_LINE, ///< \ru Прямая на плоскости. \en Line on plane. - GCE_CIRCLE, ///< \ru Окружность на плоскости. \en Circle on plane. - GCE_ELLIPSE, ///< \ru Эллипс на плоскости. \en Ellipse on plane. - GCE_SPLINE, ///< \ru Сплайн на плоскости. \en Spline on plane. - GCE_PARAMETRIC_CURVE, ///< \ru Параметрическая кривая на плоскости. \en Parametric curve on plane. - GCE_BOUNDED_CURVE, ///< \ru Ограниченная двумя точками, кривая. \en Curve bounded by two points. - - // \ru Дополнительные типы. \en Additional types. - GCE_LINE_SEGMENT, ///< \ru Отрезок прямой. \en Line segment. - GCE_SET, ///< \ru Подмножество геометрических объектов. \en Subset of geometric objects. -} geom_type; - - -//---------------------------------------------------------------------------------------- -/** \brief \ru Варианты контрольных точек, запрашиваемых у геометрического объекта. - \en Variants of control point requested from a geometric object. - \details \ru Это перечисление применяется для запроса дескриптора характерных точке объекта, - таких как центр окружности, концевая точка кривой и т.д... - \en This enum is used to request a descriptor of control point of an object, - such as center of circle, bounding point of a curve etc... - \see #GCE_PointOf -*/ -//--- -typedef enum -{ - /* - (!) Don't change the integer values of these names. It may be written to a file permanently. - */ - GCE_FIRST_PTYPE = 0 ///< \ru Значение начинающее последовательность вариантов. \en The value of beginning of the sequence. - , GCE_IMPROPER_POINT = 0 ///< \ru Точка, не принадлежащая объекту. \en Point not belonging to the object. - , GCE_FIRST_END ///< \ru Первый конец ограниченной кривой. \en The first end of bounded curve. - , GCE_SECOND_END ///< \ru Второй конец ограниченной кривой. \en The second end of bounded curve. - , GCE_CENTRE ///< \ru Центр окружности (дуги) или эллипса. \en Center of circle (arc) or ellipse. - , GCE_PROPER_POINT ///< \ru Собственно точка. \en Proper point. - , GCE_Q1 ///< \ru Квадрантная точка эллипса (3 часа). \en Quadrant point of ellipse (3 o'clock). - , GCE_Q2 ///< \ru Квадрантная точка эллипса (12 часов). \en Quadrant point of ellipse (12 o'clock). - , GCE_Q3 ///< \ru Квадрантная точка эллипса (6 часов). \en Quadrant point of ellipse (6 o'clock). - , GCE_Q4 ///< \ru Квадрантная точка эллипса (9 часов). \en Quadrant point of ellipse (9 o'clock). - , GCE_LOCATION_POINT ///< \ru Точка размещения геометрического объекта. \en Location point of geometric object. - , GCE_LAST_PTYPE ///< \ru Значение завершающее последовательность вариантов. \en The value of variants completes the sequence. - /* - The values below are used only within the solver. - */ - , GCE_DIRECTION ///< \ru Направляющий вектор эллипса (направление "большой" полуоси ). \en Vector of ellipse direction (direction of "major" semiaxis). - /** \brief \ru Единичный вектор ориентации: Нормаль прямой, направление "большой" полуоси эллипса. - \en Unit vector of orientation: Normal of a line, direction of "major" semiaxis of ellipse. \~ - */ - , GCE_ORIENTATION - -} query_geom_type; - -//---------------------------------------------------------------------------------------- -/** \brief \ru Тип запрашиваемой точки (используется, как подмножество значений query_geom_type). - \en Type of the requested point (used as subset of values query_geom_type). -*/ -//--- -typedef query_geom_type point_type; - -//---------------------------------------------------------------------------------------- -/** \brief \ru Перечисление координат геометрических объектов. - \en Enumeration of geom's coordinates. -*/ -//--- -typedef enum -{ - GCE_X, GCE_Y ///< \ru Координаты точки или вектора. \en Coordinates of a point or a vector. - , GCE_ACRD ///< \ru Угол нормали прямой, угол наклона эллипса. \en Angle of line normal, slope angle of ellipse. - , GCE_DCRD ///< \ru Координата смещения прямой, расстояние от начала координат до прямой. \en Coordinate of line shift, distance from CS origin to line. - , GCE_RADIUS ///< \ru Радиус окружности. \en Circle radius. - , GCE_MAJOR_RADIUS ///< \ru "Главная" полуось эллипса. \en "Major" semiaxis of ellipse. - , GCE_MINOR_RADIUS ///< \ru "Малая" полуось эллипса. \en "Minor" semiaxis of ellipse. - , GCE_NULL_CRD ///< \ru Пустая (несуществующая) координата. \en Empty (nonexistent) coordinate. -} coord_name; - -typedef coord_name coord_type; - -//---------------------------------------------------------------------------------------- -/** \brief \ru Идентификатор типа 2D ограничения. - \en Identifier of 2D constraint type. \~ - \attention \ru На самом деле решатель поддерживает другие ограничения, кроме перечисленных. - См. вызовы API в 'gce_api.h' - \en Actually, the solver provides more constraint types than is given in the enum. - See the API calls in 'gce_api.h' \~ -*/ -typedef enum -{ - // \ru Унарные геометрические ограничения: \en Unary geometric constraints: - GCE_FIX_GEOM - , GCE_HORIZONTAL ///< \ru Горизонтальность прямой или отрезка. \en Horizontality of a linear object. - , GCE_VERTICAL ///< \ru Вертикальность прямой или отрезка. \en Verticality of a linear object. - , GCE_LENGTH ///< \ru Фиксация длины отрезка. \en Fixation of length of a line segment. - , GCE_ANGLE_OX - - // \ru Бинарные геометрические ограничения: "constr( geom1, geom2 )" \en Binary geometric constraints: "constr( geom1, geom2 )" - , GCE_COINCIDENT ///< \ru Совпадение пары геометрических объектов. \en Coincidence of a pair of geometric objects. - , GCE_EQUAL_LENGTH ///< \ru Равенство длин пары отрезков. \en Equality of two segments lengths. - , GCE_EQUAL_RADIUS ///< \ru Равенство радиусов пары окружностей. \en Equality of two circles lengths. - , GCE_PARALLEL ///< \ru Параллельность пары прямых или отрезков. \en Parallelism of two lines or segments. - , GCE_PERPENDICULAR ///< \ru Перпендикулярность пары прямых или отрезков. \en Perpendicularity of two lines or segments. - , GCE_TANGENT ///< \ru Касание пары кривых. \en Tangency of two curves. - , GCE_COLINEAR ///< \ru Коллинеарность пары прямых или отрезков. \en Collinearity of a pair of lines or segments. - , GCE_ALIGN_2P ///< \ru Выравнивание пары точек вдоль направления. \en Alignment of a pair of points along the direction. - , GCE_CURVATURE_EQUALITY ///< \ru Равенство кривизны кривых в точках. \en Equality of curves curvature in given points. - - // \ru Тернарные геометрические ограничения. \en Ternary geometric constraints. - , GCE_ANGLE_BISECTOR ///< \ru Биссектриса угла. \en Bisector of angle. - , GCE_MIDDLE_POINT ///< \ru Средняя точка. \en Middle point. - , GCE_COLINEAR_3P ///< \ru Коллинеарность тройки точек. \en Collinearity of a point triple. - , GCE_SYMMETRIC ///< \ru Симметричность. \en Symmetry. - - , GCE_PERCENT_POINT ///< \ru \en - , GCE_EQUATION ///< \ru Уравнение. \en Equation. - // \ru Размерные геометрические ограничения \en Dimensional geometric constraints - , GCE_DISTANCE - , GCE_RADIUS_DIM - , GCE_DIAMETER - , GCE_ANGLE - , GCE_CONSTRAINTS_COUNT ///< \ru Количество типов. \en Number of types. - , GCE_UNKNOWN = GCE_CONSTRAINTS_COUNT ///< \ru Неизвестный тип ограничения. \en Unknown constraint type. - , GCE_UNKNOWN_CON = GCE_UNKNOWN -} constraint_type; - -//---------------------------------------------------------------------------------------- -/** \brief \ru Диагностические коды выполнения функций геометрического решателя. - \en Diagnostic codes of the geometric solver functions execution. \~ -*/ -//--- -typedef enum -{ - GCE_RESULT_None = 0, ///< \ru Нет результата (пустое сообщение). \en No result (empty message). - GCE_RESULT_Ok = 1, ///< \ru Успешный результат. \en Successful result. - GCE_RESULT_Satisfied = 1, ///< \ru Ограничение удовлетворено. \en The constraint is satisfied. - GCE_RESULT_Not_Satisfied = 2, ///< \ru Система ограничений не решена. \en The system of constraints is not solved. - GCE_RESULT_Overconstrained = 3, ///< \ru Переопределенная (несовместная) система ограничений. \en Overdetermined (inconsistent) system of constraints. - GCE_RESULT_InvalidGeometry = 4, ///< \ru Решение привело в нарушению геометрии. \en Solution leaded to violation of geometry. - GCE_RESULT_MovingOfFixedGeom = 5, ///< \ru Попытка перемещения фиксированного объекта. \en Attempt of a fixed object translation. - GCE_RESULT_Unregistered = 6, ///< \ru Обращение к недействительному объекту. \en Access to invalid object. - GCE_RESULT_SystemError = 7, ///< \ru Внутренняя системная ошибка. \en Internal system error. - GCE_RESULT_NullSystem = 8, ///< \ru Обращение к недействительной системе ограничений. \en Access to invalid system of constraints. - GCE_RESULT_CircleCantStretched = 9, ///< \ru Окружность не может быть масштабирована с разными коэффициентами по осям (растяжение). \en The circle can't be scaled with different scaling factors for each axis (stretching). - GCE_RESULT_SingularMatrix = 10, ///< \ru Прислали вырожденную матрицу трансформации. \en A singular transform matrix was received. - GCE_RESULT_DegenerateScalingFactor = 11, ///< \ru Вырожденный коэффициент масштабирования. \en Degenerate scaling factor. - GCE_RESULT_InvalidDimensionTransform = 12, ///< \ru Неудачное преобразование размера. \en Invalid dimension transformation. - GCE_RESULT_Aborted = 13, ///< \ru Процесс вычислений был прерван по запросу приложения. \en The evaluation process aborted by the application. \~ - GCE_RESULT_IsNotDrivingDimension = 14, ///< \ru Данное ограничение должно быть управляющим размером. \en Given constraint should be a driving dimension. - GCE_RESULT_UnsupportedConstraint = 15, ///< \ru На геометрические объекты было наложено невозможное ограничение. \en An impossible constraint was set on geometric objects. - GCE_RESULT_AnisotropicScaling = 16, ///< \ru Анизотропное масштабирование. \en Anisotropic scaling. -} GCE_result; - -//---------------------------------------------------------------------------------------- -/** - \brief \ru Статус геометрического ограничения. - \en Status of a geometric constraint. - \details - \ru Статус ограничения подразумевает деление системы ограничения на подмножества, - которые маркируются следующим образом:\n - Ограничения, помеченые GCE_STATUS_WellTreated и GCE_STATUS_WellConditioned образуют - хорошо-обрабатываемую решателем часть системы ограничений, не содержащую переопределений - и обычно вычисляемую без противоречий.\n - Ограничения, помеченные статусами GCE_STATUS_WellConditioned и GCE_STATUS_IllConditioned - вместе образуют группу взаимосвязанных ограничений, которые обычно решаются без противоречий, - но потенциально могут противоречить друг другу при участии размеров. - Те из них, что помечены GCE_STATUS_IllConditioned создают условия для решаемости хуже, - чем GCE_STATUS_WellConditioned.\n - Статусом GCE_STATUS_Redundant решатель помечает лишние ограничения, которые можно удалить - из системы ограничений. Обычно такие ограничения исполняются за счет других ограничений - или создают ситуацию переопределенности (несовместная система ограничений).\n - Статусом GCE_STATUS_OverConstrained помечаются те из ограничений, которые остались не - решенными по причине несовместной переопределенности. Ограничения со статусами - GCE_STATUS_Redundant и GCE_STATUS_OverConstrained могут находится в противоречии с другими - ограничениями кроме тех, что помечены GCE_STATUS_WellTreated. - - The status of a constraint implies the division of the system into subsets, which are - labeled as follows: \n - Constraints marked by GCE_STATUS_WellTreated and GCE_STATUS_WellConditioned together form - well-resolved part that does not contain overdefining constraints and usually computed - without contradiction. \n - Constraints marked with GCE_STATUS_WellConditioned and GCE_STATUS_IllConditioned statuses - together form a group of interrelated constraints that are usually resolved without - contradiction, but potentially contradictory with dimensions. - Those that are labeled GCE_STATUS_IllConditioned make conditions for evaluating worse, - than GCE_STATUS_WellConditioned. \n - The status of GCE_STATUS_Redundant solver marks the extra constraints that can be removed. - from the constraint system. Usually such constraints are enforced by other constraints. - or create an overdefined situation (incompatible constraint system). \n - The status GCE_STATUS_OverConstrained marks those of constraints that was not solved - due to inconsistent overdefining. Constraints with GCE_STATUS_Redundant and - GCE_STATUS_OverConstrained statuses may conflict with other constraints except those - marked with GCE_STATUS_WellTreated. -*/ -//--- -typedef enum -{ - GCE_STATUS_Undefined = 0 - /* - Statuses indicating which of constraints belong to well-treated - or redundancy parts of the constraint system. - */ - , GCE_STATUS_WellTreated = 1 // Ограничение принадлежит рабочей части системы ограничений без переопределений. - , GCE_STATUS_WellConditioned = 2 // Ограничение принадлежит хорошо-обусловленной части уравнений. - , GCE_STATUS_IllConditioned = 3 ///< /ru Ограничения из плохо-обусловленной части. /en A constraint of ill-condition - , GCE_STATUS_Redundant = 4 ///< /ru Ограничение игнорируется решателем по причине избыточности. // en A constraint is ignored by the solving process beacause of the redundancy. - - /* - Statuses resulting the evaluation (call GCE_Evaluate). - */ - , GCE_STATUS_Solved // Ограничение решено - , GCE_STATUS_NotSolved // Не решено по каким-то причинам - , GCE_STATUS_NotConsistent // Не решено из-за противоречия с другими ограничениями. - , GCE_STATUS_OverConstrained // Не решено избыточное ограничение, противоречащее другим. - -} GCE_c_status; - -//---------------------------------------------------------------------------------------- -/// \ru Вернет 'true' в случае успешного результата. \en Return true, if the result code is successful. -// --- -inline bool OK( GCE_result resCode ) -{ - return resCode == GCE_RESULT_Ok; -} - -//---------------------------------------------------------------------------------------- -/// \ru Вариант решения биссектрисы для двух прямых. \en Variant of a bisector for two lines. -/* - \ru Идентификаторы не менять (возможна запись в файлы)! - \en Don't change identifiers (record to files is possible)! -*/ -//--- -typedef enum -{ - GCE_BISEC_CLOSEST = 0 ///< \ru Неопределенное направление (ближайшее решение). \en Undefined direction (nearest solution). - , GCE_BISEC_MINUS = 1 ///< \ru Биссектриса вдоль суммы направлений прямых/отрезков. \en Bisector along the difference of directions of lines/segments. - , GCE_BISEC_PLUS = 2 ///< \ru Биссектриса вдоль разности нормалей прямых/отрезков. \en Bisector along sum of directions of lines/segments. - -} GCE_bisec_variant; - -//---------------------------------------------------------------------------------------- -/// \ru Координаты вектора. \en Vector coordinates. -//--- -struct GCE_vec2d -{ - double x, y; - GCE_vec2d() { x = y = 0; } -}; - -//---------------------------------------------------------------------------------------- -/// \ru Координаты вектора n-й размерности. \en Coordinates of n-dimensional vector. -//--- -struct GCE_vecNd -{ - size_t size; - double * arg; - GCE_vecNd(): arg(0), size(0) {} -}; - -//---------------------------------------------------------------------------------------- -/// \ru Координаты точки на плоскости. \en Coordinates of a point on plane. -//--- -struct GCE_point -{ - double x, y; ///< \ru Декартовы координаты на плоскости \en Cartesian coordinates on the plane - GCE_point() { x = y = 0; } -}; - -//---------------------------------------------------------------------------------------- -/// \ru Степень свободы точки. \en Degree of freedom of a point. -//--- -struct GCE_point_dof -{ - int dof; ///< Degree of freedom of the point. - GCE_vec2d dir; ///< Direction of point moving freedom. - GCE_point_dof(): dof(-1), dir() {} -}; - -//---------------------------------------------------------------------------------------- -/// \ru Координаты прямой на плоскости. \en Coordinate of a line on the plane. -//--- -struct GCE_line -{ - GCE_point p; - GCE_vec2d norm; - GCE_line() : p(), norm() {} -}; - -//---------------------------------------------------------------------------------------- -/// \ru Координаты окружности. \en Coordinates of a circle. -//--- -struct GCE_circle -{ - GCE_point centre; ///< \ru Центр окружности. \en Circle center. - double radius; ///< \ru Радиус окружности. \en Circle radius. - GCE_circle() : centre(), radius( 0.0 ) {} -}; - -//---------------------------------------------------------------------------------------- -/// \ru Координаты эллипса. \en Coordinates of an ellipse. -//--- -struct GCE_ellipse -{ - GCE_point centre; ///< \ru Центр эллипса. \en Ellipse center. - GCE_vec2d direct; ///< \ru Направляющий вектор главной полуоси. \en Vector of the major semiaxis direction. - double majorR; ///< \ru Главная полуось. \en Major semiaxis. - double minorR; ///< \ru Вторая полуось. \en Second semiaxis. - - GCE_ellipse() - : centre() - , direct() - , majorR( 0.0 ) - , minorR( 0.0 ) - {} -}; - -//---------------------------------------------------------------------------------------- -/** \brief \ru Координаты и характеристики сплайна. - \en Coordinates and characteristics of a spline.\~ - \details \ru - Сплайн можно задавать тремя способами: \n - 1) По уже существующему объекту MbNurbs. \n - 2) По уже существующему объекту MbNurbs и набору интерполяционных точек. \n - 3) По набору интерполяционных точек, соответствующих им параметров, порядку и признаку замкнутости. - \en - The spline can be specified in three ways: \n - 1) Using already existing object of MbNurbs. \n - 2) Using already existing object of MbNurbs and a set of interpolation points. \n - 3) Using a set of interpolation points, corresponding parameters, order and closedness attribute.\~ - \ingroup Constraints2D_API -*/ -// --- -struct GCE_CLASS GCE_spline -{ - size_t degree; ///< \ru Порядок В-сплайна. \en Order of B-spline. - bool isClosed; ///< \ru Признак замкнутости кривой. \en An attribute of curve closedness. - std::vector controlPoints; ///< \ru Множество контрольных точек. \en Set of control points. - std::vector controlWeights; ///< \ru Множество весов контрольных точек. \en Set of weights of the control points. - std::vector controlKnots; ///< \ru Узловой вектор. \en Knot vector. - std::vector interpPoints; ///< \ru Множество интерполяционных точек. \en Set of interpolation points. - std::vector interpParams; ///< \ru Множество значений параметров, соответствующих интерполяционным точкам. \en Set of the parameter values corresponding to interpolation points. - MbeNurbsCurveForm form; ///< \ru Форма кривой. \en Form of curve. - - GCE_spline() - : degree( Math::curveDegree ) - , isClosed( false ) - , controlPoints() - , controlWeights() - , controlKnots() - , interpPoints() - , interpParams() - , form( ncf_Unspecified ) - {} - explicit GCE_spline( const MbNurbs & nurbs ); - GCE_spline( const MbNurbs & nurbs, const std::vector & interp ); - GCE_spline( size_t deg, bool cls, const std::vector & interp, const std::vector & pars ); - -private: - GCE_spline( const GCE_spline & ); - GCE_spline & operator = ( const GCE_spline & ); -}; - -//---------------------------------------------------------------------------------------- -/** \brief \ru Параметры размерного ограничения. - \en Parameters of dimensional constraint. \~ - \details - \ru Все размерные ограничения задаются над геометрическими объектами; кроме них - размер определяется дополнительными параметрами, которые передаются через - структуру #GCE_dim_pars. - \en All dimensional constraints are specified on geometrical objects; in addition - dimension is specified by additional parameters which are passed via - the structure #GCE_dim_pars. \~ - - \par - \ru Функции, в которые GCE_dim_pars передается в качестве аргумента: - #GCE_AddDistance, #GCE_AddDistance2P, #GCE_AddDistancePLs, #GCE_AddDistancePLs, - #GCE_AddDirectedDistance, #GCE_FormCirDimension. - \en Functions into which GCE_dim_pars is passed as argument: - #GCE_AddDistance, #GCE_AddDistance2P, #GCE_AddDistancePLs, #GCE_AddDistancePLs, - #GCE_AddDirectedDistance, #GCE_FormCirDimension. \~ - - \par \ru Размеры - - Размер - это числовая функция, аргументами которой являются геометрические объекты, - а возвращаемым значением является число. На основе размеров определяются - 'размерные ограничения'. Все 'размерные ограничения' связывают геометрические - объекты с числом, называемым значением размера. Если ограничение удовлетворено, - то его числовой параметр равен значению размера. Числовой параметр размера - задается либо фиксированным числом (константой), либо числовой переменной.\n - Решатель ограничений обрабатывает два типа размеров: Управляющие и вариационные.\n - - \en Dimensions - - Dimension is a numerical function which arguments are geometric - objects and return value is a number. 'Dimensional constraints' are defined - on the base of dimensions. All 'dimensional constraints' associate geometric - objects with a number called a value of dimension. If the constraint is satisfied, - then its numerical parameter is equal to the value of dimension. Numerical parameter of the dimension - is specified by a fixed number (a constant) or by a numerical variable.\n - The solver of constraints treats two types of dimensions: Driving and variational.\n \~ - - - \par \ru Виды размеров - - "Управляющий" размер - это размерное ограничение, задающее положение - геометрическим объектам согласно константного значения размера;\n - "Вариационный" размер - это ограничение, связывающее геометрические - объекты и переменную, равную значению размера. Под воздействием вариационного - размера может меняться и геометрия и переменная размера.\n - Размеры могу быть направленные, например, расстояние между - точками по горизонтали или по вертикали (функция #GCE_AddDirectedDistance). - - \en Kinds of dimension - - "Driving" dimension is a dimensional constraint specifying position of - geometric objects subject to a constant value of dimension;\n - "Variational" dimension is a constraint associating geometric - objects and a variable which is equal to the dimension value. Both geometry and variable of dimension - can vary under the influence of variational dimension.\n - Dimensions can be directed, for instance, horizontal or vertical distance between - points(function #GCE_AddDirectedDistance). \~ - - - \par \ru Параметры - var - дескриптор переменной, задающей значение размера (градусы, если размер угловой); \n - dimValue - параметр, задающий значение размера; \n - - Если var != GCE_NULL_V, это означает, что размер "вариационный". - Если var == GCE_NULL_V, то значение размера = dimValue, иначе значение размера - тождественно равно числовой переменной 'var', т.е. размер управляющий. - - \en Parameters - - var - descriptor of variable specifying the value of dimension (degrees if the dimension is angular); \n - dimValue - parameter specifying the value of dimension; \n - - If var != GCE_NULL_V, it means that the dimension is "variational" - If var == GCE_NULL_V, then the value of dimension equals dimValue, else the value of dimension - is identically equal to a numerical variable 'var', i.e. the dimension is driving; \~ -*/ -//--- -struct GCE_dim_pars -{ - var_item var; ///< \ru Значение размера, заданное переменной. \en Value of dimension specified by the variable. - double dimValue; ///< \ru Значение размера. \en Value of dimension. - - GCE_dim_pars() - : dimValue( 0.0 ) - , var( GCE_NULL_V ) - {} -}; - -//---------------------------------------------------------------------------------------- -/** \brief \ru Параметры углового размерного ограничения. - \en Parameters of angular dimensional constraint. - - \details \ru Структура данных передает настройки для создания угловых размеров. Помимо - общих настроек, передаваемых через структуру #GCE_dim_pars, здесь добавлен флаг - типа угла и множитель пересчета угла в переменную. \n - - factor - множитель для пересчета из присланного угла в переменную. - Используется для создания кратных углов, например двойного.\n - adjacent - смежный угол. Соответствует углу (M_PI - a), где 'a' - угол - между векторами, задающими направление линейного объекта.\n - - Угловой размер можно задать для любых комбинаций линейных объектов. - - \en The data structure passes settings for creation of angular dimensions. - In addition to the general settings passed via structure #GCE_dim_pars there is a flag - of angle type and factor of conversion of angle to variable here. \n - - 'factor' is a factor for converting from a given angle to variable. - It is used for creation of multiple angles, for instance, double angle.\n - 'adjacent' - adjacent angle. It corresponds to angle (M_PI - a), where 'a' is an angle - between vectors specifying the direction of a linear object.\n - - Angular dimension can be specified for any combination of linear objects. \~ -*/ -//--- -struct GCE_adim_pars -{ - GCE_dim_pars dPars; ///< \ru Общие настройки размера. \en General settings of dimension. - double factor; ///< \ru Множитель для пересчета из угла в переменную. \en Factor for converting from angle to variable. - bool adjacent; ///< \ru Смежный угол. \en Adjacent angle. - - GCE_adim_pars() : dPars(), factor( 1.0 ), adjacent( false ) - {} -}; - -//---------------------------------------------------------------------------------------- -/** \brief \ru Параметры линейного размерного ограничения. - \en Parameters of distance constraint. - - \details - \ru dirAngle - значение угла в радианах, задающее направление ориентируемых размеров. Пока - используется только для #GCE_AddDirectedDistance2P. \n - \en dirAngle - value of angle in radians specifying the direction of oriented dimensions. - Now it is used only for #GCE_AddDirectedDistance2P. \n \~ -*/ -//--- -struct GCE_ldim_pars -{ - GCE_dim_pars dPars; ///< \ru Числовое значение размера, заданное переменной или числом double. \en Numeric value of dimension specified as a variable or simple double. - double dirAngle; ///< \ru Направление измерения (Используется только для ориентируемых размеров) \en Direction of dimension (It is used for oriented dimensions only) - geom_item hp[2]; ///< \ru Пара дескрипторов вспомогательных точек размера. \en A pair of descriptors of help points of dimension. - - GCE_ldim_pars() : dPars(), dirAngle( 0.0 ) - { - hp[0] = hp[1] = GCE_NULL_G; - } -}; - -//---------------------------------------------------------------------------------------- -/** \brief \ru Контрольная точка драггинга. - \en Control point of the dragging. - \details - \ru GCE_dragging_point::geom - Дескриптор геометрического объекта, выбранного для воздействия - с помощью функции драггинга ( #GCE_PrepareDraggingPoint).\n - GCE_dragging_point::point - Дескриптор контрольной точки геометрического объекта драггинга. - - \en GCE_dragging_point::geom - Descriptor of a geometric object chosen to interact through - a dragging function (#GCE_PrepareDraggingPoint).\n - GCE_dragging_point::point - Descriptor of control point of the dragging geometric object. - \~ - \see #GCE_PrepareDraggingPoint, #GCE_MovePoint. -*/ -//--- -struct GCE_dragging_point -{ - geom_item geom; ///< \ru Дескриптор геометрического объекта. \en Descriptor of the geometric object. - geom_item point; ///< \ru Дескриптор контрольной точки геометрического объекта. \en Descriptor of the geometric object control point. - GCE_dragging_point() : geom( GCE_NULL ), point( GCE_NULL ) {} - GCE_dragging_point( geom_item g, geom_item pnt ) : geom( g ), point( pnt ) {} -}; - -//---------------------------------------------------------------------------------------- -/** \brief \ru Диагностические характеристики системы ограничений. - \en Diagnostic characteristics of constraint system. \~ - \note Used only for testing -*/ -//--- -struct GCE_diagnostic_pars -{ - size_t consCount; // A number of registered constraints. - size_t inConsCount; // A number of internal constraints. - double reductCoef; // Reduction ration of decomposition methods [percentage]. - GCE_diagnostic_pars() : consCount( 0 ), inConsCount( 0 ), reductCoef( 0. ) {} -}; - -//---------------------------------------------------------------------------------------- -/** \brief \ru Диагностические характеристики системы ограничений. - \en Diagnostic characteristics of constraint system. \~ - \note Used only for testing -*/ -//--- -struct GCT_diagnostic_pars -{ - size_t consCount; // A number of registered constraints. - size_t inConsCount; // A number of internal constraints. - double reductCoef; // Reduction ratio of decomposition methods [percentage]. - size_t dof; // Degree of freedom of a constraint system. - GCT_diagnostic_pars() - : consCount(0) - , inConsCount(0) - , reductCoef(0) - , dof(0) - {} -}; - -/** - \} - Constraints2D_API -*/ - -//---------------------------------------------------------------------------------------- -// \ru Дескриптор контрольной точки объекта. \en Descriptor of the object control point. -/* - The data structure is deprecated. -*/ -//--- -struct geom_point -{ - geom_item geom; ///< \ru Дескриптор геометрического объекта \en Descriptor of the geometric object - point_type pntName; ///< \ru Имя контрольной точки геометрического объекта \en Name of the geometric object control point - geom_point() : geom( GCE_NULL ), pntName( GCE_IMPROPER_POINT ) {} - geom_point( geom_item g, point_type pnt ) : geom( g ), pntName( pnt ) {} -}; - -/* - The values below will be deleted (deprecated names). -*/ -const constraint_type GCE_INCIDENT = GCE_COINCIDENT; -const geom_type GCE_ARC = GCE_ANY_GEOM; -const geom_type GCE_ELLIPSE_ARC = GCE_ANY_GEOM; - -/* - The values below are deprecated. -*/ - -const query_geom_type GCE_EllipseQ1 = GCE_Q1; -const query_geom_type GCE_EllipseQ2 = GCE_Q2; -const query_geom_type GCE_EllipseQ3 = GCE_Q3; -const query_geom_type GCE_EllipseQ4 = GCE_Q4; - -#endif // __GCE_TYPES_H - -// eof +////////////////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Типы данных двумерного геометрического решателя. + \en Data types of the two-dimensional geometric solver. \~ + \details \ru Этот файл представляет собой набор типов данных, необходимых для + взаимодействия геометрического решателя с клиентским приложением. + \en This file contains set of data types necessary for interaction + of the geometrical solver with user application. \~ +*/ +////////////////////////////////////////////////////////////////////////////////////////// + +#ifndef __GCE_TYPES_H +#define __GCE_TYPES_H + +#include +#include +#include +#include +#include +#include +#ifndef C3D_WINDOWS //_MSC_VER +#include +#endif //C3D_WINDOWS + +class MATH_CLASS MbNurbs; + +/** + \addtogroup Constraints2D_API + \{ +*/ + +//---------------------------------------------------------------------------------------- +/** \brief \ru Система геометрических ограничений. + \en Geometric constraints system. \~ + \details \ru GCE_system является типом данных, который обозначает систему ограничений, + которая создается с помощью вызова #GCE_CreateSystem. Реально, этот тип является + указателем на внутреннюю структуру данных, где содержится система ограничений и различные + рабочие данные, определяющие её внутреннее состояние. Время жизни системы ограничений + заканчивается только, когда к ней будет применен вызов API #GCE_RemoveSystem, после чего + значение GCE_system становится недействительным. + \en GCE_system is data type which denotes a system of constraints created by + call #GCE_CreateSystem. Actually this type is a pointer to an internal data structure with + a system of constraints and various working data determining its internal state. Lifetime + of the constraint system finishes only when a call of API #GCE_RemoveSystem + is applied to it, thereafter the value of GCE_system becomes invalid. \~ +*/ +typedef void * GCE_system; + +//---------------------------------------------------------------------------------------- +// \ru Типы данных. \en Data types. +//--- +/// \ru Дескриптор геометрического объекта, зарегистрированного в контексте решателя. \en Descriptor of geometrical object registered in the solver context. +typedef size_t geom_item; +/// \ru Дескриптор ограничения, зарегистрированного в решателе. \en Descriptor of a constraint registered in the solver. +typedef size_t constraint_item; +/// \ru Дескриптор переменной, зарегистрированной в решателе. \en Descriptor of a variable registered in the solver. +typedef size_t var_item; + +//---------------------------------------------------------------------------------------- +// \ru Константы. \en Constants. +//--- +/// \ru Неопределенное значение дескриптора или пустого объекта. \en Undefined value of descriptor or an empty object. +const size_t GCE_NULL = SYS_MAX_T; +/// \ru Неопределенное значение дескриптора типа #geom_item. \en Undefined value of #geom_item type. +const geom_item GCE_NULL_G = GCE_NULL; +/// \ru Неопределенное значение дескриптора типа #var_item. \en Undefined value of #var_item type. +const var_item GCE_NULL_V = GCE_NULL; +/// \ru Неопределенное значение дескриптора типа #constraint_item. \en Undefined value of #constraint_item type. +const constraint_item GCE_NULL_C = GCE_NULL; +/// \ru Не определенное значение числа double. \en An undefined value of double. +const double GCE_UNDEFINED_DBL = UNDEFINED_DBL; + +//---------------------------------------------------------------------------------------- +/// \ru Словарь типов геометрических примитивов. \en Dictionary of geometric primitives types. +//--- +typedef enum +{ + GCE_ANY_GEOM, ///< \ru Неизвестный тип. \en Unknown type. + + // \ru Основные типы. \en Basic types. + GCE_POINT, ///< \ru Точка на плоскости. \en Point on plane. + GCE_LINE, ///< \ru Прямая на плоскости. \en Line on plane. + GCE_CIRCLE, ///< \ru Окружность на плоскости. \en Circle on plane. + GCE_ELLIPSE, ///< \ru Эллипс на плоскости. \en Ellipse on plane. + GCE_SPLINE, ///< \ru Сплайн на плоскости. \en Spline on plane. + GCE_PARAMETRIC_CURVE, ///< \ru Параметрическая кривая на плоскости. \en Parametric curve on plane. + GCE_BOUNDED_CURVE, ///< \ru Ограниченная двумя точками, кривая. \en Curve bounded by two points. + + // \ru Дополнительные типы. \en Additional types. + GCE_LINE_SEGMENT, ///< \ru Отрезок прямой. \en Line segment. + GCE_SET, ///< \ru Подмножество геометрических объектов. \en Subset of geometric objects. +} geom_type; + + +//---------------------------------------------------------------------------------------- +/** \brief \ru Варианты контрольных точек, запрашиваемых у геометрического объекта. + \en Variants of control point requested from a geometric object. + \details \ru Это перечисление применяется для запроса дескриптора характерных точке объекта, + таких как центр окружности, концевая точка кривой и т.д... + \en This enum is used to request a descriptor of control point of an object, + such as center of circle, bounding point of a curve etc... + \see #GCE_PointOf +*/ +//--- +typedef enum +{ + /* + (!) Don't change the integer values of these names. It may be written to a file permanently. + */ + GCE_FIRST_PTYPE = 0 ///< \ru Значение начинающее последовательность вариантов. \en The value of beginning of the sequence. + , GCE_IMPROPER_POINT = 0 ///< \ru Точка, не принадлежащая объекту. \en Point not belonging to the object. + , GCE_FIRST_END ///< \ru Первый конец ограниченной кривой. \en The first end of bounded curve. + , GCE_SECOND_END ///< \ru Второй конец ограниченной кривой. \en The second end of bounded curve. + , GCE_CENTRE ///< \ru Центр окружности (дуги) или эллипса. \en Center of circle (arc) or ellipse. + , GCE_PROPER_POINT ///< \ru Собственно точка. \en Proper point. + , GCE_Q1 ///< \ru Квадрантная точка эллипса (3 часа). \en Quadrant point of ellipse (3 o'clock). + , GCE_Q2 ///< \ru Квадрантная точка эллипса (12 часов). \en Quadrant point of ellipse (12 o'clock). + , GCE_Q3 ///< \ru Квадрантная точка эллипса (6 часов). \en Quadrant point of ellipse (6 o'clock). + , GCE_Q4 ///< \ru Квадрантная точка эллипса (9 часов). \en Quadrant point of ellipse (9 o'clock). + , GCE_LOCATION_POINT ///< \ru Точка размещения геометрического объекта. \en Location point of geometric object. + , GCE_LAST_PTYPE ///< \ru Значение завершающее последовательность вариантов. \en The value of variants completes the sequence. + /* + The values below are used only within the solver. + */ + , GCE_DIRECTION ///< \ru Направляющий вектор эллипса (направление "большой" полуоси ). \en Vector of ellipse direction (direction of "major" semiaxis). + /** \brief \ru Единичный вектор ориентации: Нормаль прямой, направление "большой" полуоси эллипса. + \en Unit vector of orientation: Normal of a line, direction of "major" semiaxis of ellipse. \~ + */ + , GCE_ORIENTATION + +} query_geom_type; + +//---------------------------------------------------------------------------------------- +/** \brief \ru Тип запрашиваемой точки (используется, как подмножество значений query_geom_type). + \en Type of the requested point (used as subset of values query_geom_type). +*/ +//--- +typedef query_geom_type point_type; + +//---------------------------------------------------------------------------------------- +/** \brief \ru Перечисление координат геометрических объектов. + \en Enumeration of geom's coordinates. +*/ +//--- +typedef enum +{ + GCE_X, GCE_Y ///< \ru Координаты точки или вектора. \en Coordinates of a point or a vector. + , GCE_ACRD ///< \ru Угол нормали прямой, угол наклона эллипса. \en Angle of line normal, slope angle of ellipse. + , GCE_DCRD ///< \ru Координата смещения прямой, расстояние от начала координат до прямой. \en Coordinate of line shift, distance from CS origin to line. + , GCE_RADIUS ///< \ru Радиус окружности. \en Circle radius. + , GCE_MAJOR_RADIUS ///< \ru "Главная" полуось эллипса. \en "Major" semiaxis of ellipse. + , GCE_MINOR_RADIUS ///< \ru "Малая" полуось эллипса. \en "Minor" semiaxis of ellipse. + , GCE_NULL_CRD ///< \ru Пустая (несуществующая) координата. \en Empty (nonexistent) coordinate. +} coord_name; + +typedef coord_name coord_type; + +//---------------------------------------------------------------------------------------- +/** \brief \ru Идентификатор типа 2D ограничения. + \en Identifier of 2D constraint type. \~ + \attention \ru На самом деле решатель поддерживает другие ограничения, кроме перечисленных. + См. вызовы API в 'gce_api.h' + \en Actually, the solver provides more constraint types than is given in the enum. + See the API calls in 'gce_api.h' \~ +*/ +typedef enum +{ + // \ru Унарные геометрические ограничения: \en Unary geometric constraints: + GCE_FIX_GEOM + , GCE_HORIZONTAL ///< \ru Горизонтальность прямой или отрезка. \en Horizontality of a linear object. + , GCE_VERTICAL ///< \ru Вертикальность прямой или отрезка. \en Verticality of a linear object. + , GCE_LENGTH ///< \ru Фиксация длины отрезка. \en Fixation of length of a line segment. + , GCE_ANGLE_OX + + // \ru Бинарные геометрические ограничения: "constr( geom1, geom2 )" \en Binary geometric constraints: "constr( geom1, geom2 )" + , GCE_COINCIDENT ///< \ru Совпадение пары геометрических объектов. \en Coincidence of a pair of geometric objects. + , GCE_EQUAL_LENGTH ///< \ru Равенство длин пары отрезков. \en Equality of two segments lengths. + , GCE_EQUAL_RADIUS ///< \ru Равенство радиусов пары окружностей. \en Equality of two circles lengths. + , GCE_PARALLEL ///< \ru Параллельность пары прямых или отрезков. \en Parallelism of two lines or segments. + , GCE_PERPENDICULAR ///< \ru Перпендикулярность пары прямых или отрезков. \en Perpendicularity of two lines or segments. + , GCE_TANGENT ///< \ru Касание пары кривых. \en Tangency of two curves. + , GCE_COLINEAR ///< \ru Коллинеарность пары прямых или отрезков. \en Collinearity of a pair of lines or segments. + , GCE_ALIGN_2P ///< \ru Выравнивание пары точек вдоль направления. \en Alignment of a pair of points along the direction. + , GCE_CURVATURE_EQUALITY ///< \ru Равенство кривизны кривых в точках. \en Equality of curves curvature in given points. + + // \ru Тернарные геометрические ограничения. \en Ternary geometric constraints. + , GCE_ANGLE_BISECTOR ///< \ru Биссектриса угла. \en Bisector of angle. + , GCE_MIDDLE_POINT ///< \ru Средняя точка. \en Middle point. + , GCE_COLINEAR_3P ///< \ru Коллинеарность тройки точек. \en Collinearity of a point triple. + , GCE_SYMMETRIC ///< \ru Симметричность. \en Symmetry. + + , GCE_PERCENT_POINT ///< \ru \en + , GCE_EQUATION ///< \ru Уравнение. \en Equation. + // \ru Размерные геометрические ограничения \en Dimensional geometric constraints + , GCE_DISTANCE + , GCE_RADIUS_DIM + , GCE_DIAMETER + , GCE_ANGLE + , GCE_CONSTRAINTS_COUNT ///< \ru Количество типов. \en Number of types. + , GCE_UNKNOWN = GCE_CONSTRAINTS_COUNT ///< \ru Неизвестный тип ограничения. \en Unknown constraint type. + , GCE_UNKNOWN_CON = GCE_UNKNOWN +} constraint_type; + +//---------------------------------------------------------------------------------------- +/** \brief \ru Диагностические коды выполнения функций геометрического решателя. + \en Diagnostic codes of the geometric solver functions execution. \~ +*/ +//--- +typedef enum +{ + GCE_RESULT_None = 0, ///< \ru Нет результата (пустое сообщение). \en No result (empty message). + GCE_RESULT_Ok = 1, ///< \ru Успешный результат. \en Successful result. + GCE_RESULT_Satisfied = 1, ///< \ru Ограничение удовлетворено. \en The constraint is satisfied. + GCE_RESULT_Not_Satisfied = 2, ///< \ru Система ограничений не решена. \en The system of constraints is not solved. + GCE_RESULT_Overconstrained = 3, ///< \ru Переопределенная (несовместная) система ограничений. \en Overdetermined (inconsistent) system of constraints. + GCE_RESULT_InvalidGeometry = 4, ///< \ru Решение привело в нарушению геометрии. \en Solution leaded to violation of geometry. + GCE_RESULT_MovingOfFixedGeom = 5, ///< \ru Попытка перемещения фиксированного объекта. \en Attempt of a fixed object translation. + GCE_RESULT_Unregistered = 6, ///< \ru Обращение к недействительному объекту. \en Access to invalid object. + GCE_RESULT_SystemError = 7, ///< \ru Внутренняя системная ошибка. \en Internal system error. + GCE_RESULT_NullSystem = 8, ///< \ru Обращение к недействительной системе ограничений. \en Access to invalid system of constraints. + GCE_RESULT_CircleCantStretched = 9, ///< \ru Окружность не может быть масштабирована с разными коэффициентами по осям (растяжение). \en The circle can't be scaled with different scaling factors for each axis (stretching). + GCE_RESULT_SingularMatrix = 10, ///< \ru Прислали вырожденную матрицу трансформации. \en A singular transform matrix was received. + GCE_RESULT_DegenerateScalingFactor = 11, ///< \ru Вырожденный коэффициент масштабирования. \en Degenerate scaling factor. + GCE_RESULT_InvalidDimensionTransform = 12, ///< \ru Неудачное преобразование размера. \en Invalid dimension transformation. + GCE_RESULT_Aborted = 13, ///< \ru Процесс вычислений был прерван по запросу приложения. \en The evaluation process aborted by the application. \~ + GCE_RESULT_IsNotDrivingDimension = 14, ///< \ru Данное ограничение должно быть управляющим размером. \en Given constraint should be a driving dimension. + GCE_RESULT_UnsupportedConstraint = 15, ///< \ru На геометрические объекты было наложено невозможное ограничение. \en An impossible constraint was set on geometric objects. + GCE_RESULT_AnisotropicScaling = 16, ///< \ru Анизотропное масштабирование. \en Anisotropic scaling. +} GCE_result; + +//---------------------------------------------------------------------------------------- +/** + \brief \ru Статус геометрического ограничения. + \en Status of a geometric constraint. + \details + \ru Статус ограничения подразумевает деление системы ограничения на подмножества, + которые маркируются следующим образом:\n + Ограничения, помеченые GCE_STATUS_WellTreated и GCE_STATUS_WellConditioned образуют + хорошо-обрабатываемую решателем часть системы ограничений, не содержащую переопределений + и обычно вычисляемую без противоречий.\n + Ограничения, помеченные статусами GCE_STATUS_WellConditioned и GCE_STATUS_IllConditioned + вместе образуют группу взаимосвязанных ограничений, которые обычно решаются без противоречий, + но потенциально могут противоречить друг другу при участии размеров. + Те из них, что помечены GCE_STATUS_IllConditioned создают условия для решаемости хуже, + чем GCE_STATUS_WellConditioned.\n + Статусом GCE_STATUS_Redundant решатель помечает лишние ограничения, которые можно удалить + из системы ограничений. Обычно такие ограничения исполняются за счет других ограничений + или создают ситуацию переопределенности (несовместная система ограничений).\n + Статусом GCE_STATUS_OverConstrained помечаются те из ограничений, которые остались не + решенными по причине несовместной переопределенности. Ограничения со статусами + GCE_STATUS_Redundant и GCE_STATUS_OverConstrained могут находится в противоречии с другими + ограничениями кроме тех, что помечены GCE_STATUS_WellTreated. + + The status of a constraint implies the division of the system into subsets, which are + labeled as follows: \n + Constraints marked by GCE_STATUS_WellTreated and GCE_STATUS_WellConditioned together form + well-resolved part that does not contain overdefining constraints and usually computed + without contradiction. \n + Constraints marked with GCE_STATUS_WellConditioned and GCE_STATUS_IllConditioned statuses + together form a group of interrelated constraints that are usually resolved without + contradiction, but potentially contradictory with dimensions. + Those that are labeled GCE_STATUS_IllConditioned make conditions for evaluating worse, + than GCE_STATUS_WellConditioned. \n + The status of GCE_STATUS_Redundant solver marks the extra constraints that can be removed. + from the constraint system. Usually such constraints are enforced by other constraints. + or create an overdefined situation (incompatible constraint system). \n + The status GCE_STATUS_OverConstrained marks those of constraints that was not solved + due to inconsistent overdefining. Constraints with GCE_STATUS_Redundant and + GCE_STATUS_OverConstrained statuses may conflict with other constraints except those + marked with GCE_STATUS_WellTreated. +*/ +//--- +typedef enum +{ + GCE_STATUS_Undefined = 0 + /* + Statuses indicating which of constraints belong to well-treated + or redundancy parts of the constraint system. + */ + , GCE_STATUS_WellTreated = 1 // Ограничение принадлежит рабочей части системы ограничений без переопределений. + , GCE_STATUS_WellConditioned = 2 // Ограничение принадлежит хорошо-обусловленной части уравнений. + , GCE_STATUS_IllConditioned = 3 ///< /ru Ограничения из плохо-обусловленной части. /en A constraint of ill-condition + , GCE_STATUS_Redundant = 4 ///< /ru Ограничение игнорируется решателем по причине избыточности. // en A constraint is ignored by the solving process beacause of the redundancy. + + /* + Statuses resulting the evaluation (call GCE_Evaluate). + */ + , GCE_STATUS_Solved // Ограничение решено + , GCE_STATUS_NotSolved // Не решено по каким-то причинам + , GCE_STATUS_NotConsistent // Не решено из-за противоречия с другими ограничениями. + , GCE_STATUS_OverConstrained // Не решено избыточное ограничение, противоречащее другим. + +} GCE_c_status; + +//---------------------------------------------------------------------------------------- +/// \ru Вернет 'true' в случае успешного результата. \en Return true, if the result code is successful. +// --- +inline bool OK( GCE_result resCode ) +{ + return resCode == GCE_RESULT_Ok; +} + +//---------------------------------------------------------------------------------------- +/// \ru Вариант решения биссектрисы для двух прямых. \en Variant of a bisector for two lines. +/* + \ru Идентификаторы не менять (возможна запись в файлы)! + \en Don't change identifiers (record to files is possible)! +*/ +//--- +typedef enum +{ + GCE_BISEC_CLOSEST = 0 ///< \ru Неопределенное направление (ближайшее решение). \en Undefined direction (nearest solution). + , GCE_BISEC_MINUS = 1 ///< \ru Биссектриса вдоль суммы направлений прямых/отрезков. \en Bisector along the difference of directions of lines/segments. + , GCE_BISEC_PLUS = 2 ///< \ru Биссектриса вдоль разности нормалей прямых/отрезков. \en Bisector along sum of directions of lines/segments. + +} GCE_bisec_variant; + +//---------------------------------------------------------------------------------------- +/// \ru Координаты вектора. \en Vector coordinates. +//--- +struct GCE_vec2d +{ + double x, y; + GCE_vec2d() { x = y = 0; } +}; + +//---------------------------------------------------------------------------------------- +/// \ru Координаты вектора n-й размерности. \en Coordinates of n-dimensional vector. +//--- +struct GCE_vecNd +{ + size_t size; + double * arg; + GCE_vecNd(): arg(0), size(0) {} +}; + +//---------------------------------------------------------------------------------------- +/// \ru Координаты точки на плоскости. \en Coordinates of a point on plane. +//--- +struct GCE_point +{ + double x, y; ///< \ru Декартовы координаты на плоскости \en Cartesian coordinates on the plane + GCE_point() { x = y = 0; } +}; + +//---------------------------------------------------------------------------------------- +/// \ru Степень свободы точки. \en Degree of freedom of a point. +//--- +struct GCE_point_dof +{ + int dof; ///< Degree of freedom of the point. + GCE_vec2d dir; ///< Direction of point moving freedom. + GCE_point_dof(): dof(-1), dir() {} +}; + +//---------------------------------------------------------------------------------------- +/// \ru Координаты прямой на плоскости. \en Coordinate of a line on the plane. +//--- +struct GCE_line +{ + GCE_point p; + GCE_vec2d norm; + GCE_line() : p(), norm() {} +}; + +//---------------------------------------------------------------------------------------- +/// \ru Координаты окружности. \en Coordinates of a circle. +//--- +struct GCE_circle +{ + GCE_point centre; ///< \ru Центр окружности. \en Circle center. + double radius; ///< \ru Радиус окружности. \en Circle radius. + GCE_circle() : centre(), radius( 0.0 ) {} +}; + +//---------------------------------------------------------------------------------------- +/// \ru Координаты эллипса. \en Coordinates of an ellipse. +//--- +struct GCE_ellipse +{ + GCE_point centre; ///< \ru Центр эллипса. \en Ellipse center. + GCE_vec2d direct; ///< \ru Направляющий вектор главной полуоси. \en Vector of the major semiaxis direction. + double majorR; ///< \ru Главная полуось. \en Major semiaxis. + double minorR; ///< \ru Вторая полуось. \en Second semiaxis. + + GCE_ellipse() + : centre() + , direct() + , majorR( 0.0 ) + , minorR( 0.0 ) + {} +}; + +//---------------------------------------------------------------------------------------- +/** \brief \ru Координаты и характеристики сплайна. + \en Coordinates and characteristics of a spline.\~ + \details \ru + Сплайн можно задавать тремя способами: \n + 1) По уже существующему объекту MbNurbs. \n + 2) По уже существующему объекту MbNurbs и набору интерполяционных точек. \n + 3) По набору интерполяционных точек, соответствующих им параметров, порядку и признаку замкнутости. + \en + The spline can be specified in three ways: \n + 1) Using already existing object of MbNurbs. \n + 2) Using already existing object of MbNurbs and a set of interpolation points. \n + 3) Using a set of interpolation points, corresponding parameters, order and closedness attribute.\~ + \ingroup Constraints2D_API +*/ +// --- +struct GCE_CLASS GCE_spline +{ + size_t degree; ///< \ru Порядок В-сплайна. \en Order of B-spline. + bool isClosed; ///< \ru Признак замкнутости кривой. \en An attribute of curve closedness. + std::vector controlPoints; ///< \ru Множество контрольных точек. \en Set of control points. + std::vector controlWeights; ///< \ru Множество весов контрольных точек. \en Set of weights of the control points. + std::vector controlKnots; ///< \ru Узловой вектор. \en Knot vector. + std::vector interpPoints; ///< \ru Множество интерполяционных точек. \en Set of interpolation points. + std::vector interpParams; ///< \ru Множество значений параметров, соответствующих интерполяционным точкам. \en Set of the parameter values corresponding to interpolation points. + MbeNurbsCurveForm form; ///< \ru Форма кривой. \en Form of curve. + + GCE_spline() + : degree( Math::curveDegree ) + , isClosed( false ) + , controlPoints() + , controlWeights() + , controlKnots() + , interpPoints() + , interpParams() + , form( ncf_Unspecified ) + {} + explicit GCE_spline( const MbNurbs & nurbs ); + GCE_spline( const MbNurbs & nurbs, const std::vector & interp ); + GCE_spline( size_t deg, bool cls, const std::vector & interp, const std::vector & pars ); + + OBVIOUS_PRIVATE_COPY( GCE_spline ); +}; + +//---------------------------------------------------------------------------------------- +/** \brief \ru Параметры размерного ограничения. + \en Parameters of dimensional constraint. \~ + \details + \ru Все размерные ограничения задаются над геометрическими объектами; кроме них + размер определяется дополнительными параметрами, которые передаются через + структуру #GCE_dim_pars. + \en All dimensional constraints are specified on geometrical objects; in addition + dimension is specified by additional parameters which are passed via + the structure #GCE_dim_pars. \~ + + \par + \ru Функции, в которые GCE_dim_pars передается в качестве аргумента: + #GCE_AddDistance, #GCE_AddDistance2P, #GCE_AddDistancePLs, #GCE_AddDistancePLs, + #GCE_AddDirectedDistance, #GCE_FormCirDimension. + \en Functions into which GCE_dim_pars is passed as argument: + #GCE_AddDistance, #GCE_AddDistance2P, #GCE_AddDistancePLs, #GCE_AddDistancePLs, + #GCE_AddDirectedDistance, #GCE_FormCirDimension. \~ + + \par \ru Размеры + + Размер - это числовая функция, аргументами которой являются геометрические объекты, + а возвращаемым значением является число. На основе размеров определяются + 'размерные ограничения'. Все 'размерные ограничения' связывают геометрические + объекты с числом, называемым значением размера. Если ограничение удовлетворено, + то его числовой параметр равен значению размера. Числовой параметр размера + задается либо фиксированным числом (константой), либо числовой переменной.\n + Решатель ограничений обрабатывает два типа размеров: Управляющие и вариационные.\n + + \en Dimensions + + Dimension is a numerical function which arguments are geometric + objects and return value is a number. 'Dimensional constraints' are defined + on the base of dimensions. All 'dimensional constraints' associate geometric + objects with a number called a value of dimension. If the constraint is satisfied, + then its numerical parameter is equal to the value of dimension. Numerical parameter of the dimension + is specified by a fixed number (a constant) or by a numerical variable.\n + The solver of constraints treats two types of dimensions: Driving and variational.\n \~ + + + \par \ru Виды размеров + + "Управляющий" размер - это размерное ограничение, задающее положение + геометрическим объектам согласно константного значения размера;\n + "Вариационный" размер - это ограничение, связывающее геометрические + объекты и переменную, равную значению размера. Под воздействием вариационного + размера может меняться и геометрия и переменная размера.\n + Размеры могу быть направленные, например, расстояние между + точками по горизонтали или по вертикали (функция #GCE_AddDirectedDistance). + + \en Kinds of dimension + + "Driving" dimension is a dimensional constraint specifying position of + geometric objects subject to a constant value of dimension;\n + "Variational" dimension is a constraint associating geometric + objects and a variable which is equal to the dimension value. Both geometry and variable of dimension + can vary under the influence of variational dimension.\n + Dimensions can be directed, for instance, horizontal or vertical distance between + points(function #GCE_AddDirectedDistance). \~ + + + \par \ru Параметры + var - дескриптор переменной, задающей значение размера (градусы, если размер угловой); \n + dimValue - параметр, задающий значение размера; \n + + Если var != GCE_NULL_V, это означает, что размер "вариационный". + Если var == GCE_NULL_V, то значение размера = dimValue, иначе значение размера + тождественно равно числовой переменной 'var', т.е. размер управляющий. + + \en Parameters + + var - descriptor of variable specifying the value of dimension (degrees if the dimension is angular); \n + dimValue - parameter specifying the value of dimension; \n + + If var != GCE_NULL_V, it means that the dimension is "variational" + If var == GCE_NULL_V, then the value of dimension equals dimValue, else the value of dimension + is identically equal to a numerical variable 'var', i.e. the dimension is driving; \~ +*/ +//--- +struct GCE_dim_pars +{ + var_item var; ///< \ru Значение размера, заданное переменной. \en Value of dimension specified by the variable. + double dimValue; ///< \ru Значение размера. \en Value of dimension. + + GCE_dim_pars() + : dimValue( 0.0 ) + , var( GCE_NULL_V ) + {} +}; + +//---------------------------------------------------------------------------------------- +/** \brief \ru Параметры углового размерного ограничения. + \en Parameters of angular dimensional constraint. + + \details \ru Структура данных передает настройки для создания угловых размеров. Помимо + общих настроек, передаваемых через структуру #GCE_dim_pars, здесь добавлен флаг + типа угла и множитель пересчета угла в переменную. \n + + factor - множитель для пересчета из присланного угла в переменную. + Используется для создания кратных углов, например двойного.\n + adjacent - смежный угол. Соответствует углу (M_PI - a), где 'a' - угол + между векторами, задающими направление линейного объекта.\n + + Угловой размер можно задать для любых комбинаций линейных объектов. + + \en The data structure passes settings for creation of angular dimensions. + In addition to the general settings passed via structure #GCE_dim_pars there is a flag + of angle type and factor of conversion of angle to variable here. \n + + 'factor' is a factor for converting from a given angle to variable. + It is used for creation of multiple angles, for instance, double angle.\n + 'adjacent' - adjacent angle. It corresponds to angle (M_PI - a), where 'a' is an angle + between vectors specifying the direction of a linear object.\n + + Angular dimension can be specified for any combination of linear objects. \~ +*/ +//--- +struct GCE_adim_pars +{ + GCE_dim_pars dPars; ///< \ru Общие настройки размера. \en General settings of dimension. + double factor; ///< \ru Множитель для пересчета из угла в переменную. \en Factor for converting from angle to variable. + bool adjacent; ///< \ru Смежный угол. \en Adjacent angle. + + GCE_adim_pars() : dPars(), factor( 1.0 ), adjacent( false ) + {} +}; + +//---------------------------------------------------------------------------------------- +/** \brief \ru Параметры линейного размерного ограничения. + \en Parameters of distance constraint. + + \details + \ru dirAngle - значение угла в радианах, задающее направление ориентируемых размеров. Пока + используется только для #GCE_AddDirectedDistance2P. \n + \en dirAngle - value of angle in radians specifying the direction of oriented dimensions. + Now it is used only for #GCE_AddDirectedDistance2P. \n \~ +*/ +//--- +struct GCE_ldim_pars +{ + GCE_dim_pars dPars; ///< \ru Числовое значение размера, заданное переменной или числом double. \en Numeric value of dimension specified as a variable or simple double. + double dirAngle; ///< \ru Направление измерения (Используется только для ориентируемых размеров) \en Direction of dimension (It is used for oriented dimensions only) + geom_item hp[2]; ///< \ru Пара дескрипторов вспомогательных точек размера. \en A pair of descriptors of help points of dimension. + + GCE_ldim_pars() : dPars(), dirAngle( 0.0 ) + { + hp[0] = hp[1] = GCE_NULL_G; + } +}; + +//---------------------------------------------------------------------------------------- +/** \brief \ru Контрольная точка драггинга. + \en Control point of the dragging. + \details + \ru GCE_dragging_point::geom - Дескриптор геометрического объекта, выбранного для воздействия + с помощью функции драггинга ( #GCE_PrepareDraggingPoint).\n + GCE_dragging_point::point - Дескриптор контрольной точки геометрического объекта драггинга. + + \en GCE_dragging_point::geom - Descriptor of a geometric object chosen to interact through + a dragging function (#GCE_PrepareDraggingPoint).\n + GCE_dragging_point::point - Descriptor of control point of the dragging geometric object. + \~ + \see #GCE_PrepareDraggingPoint, #GCE_MovePoint. +*/ +//--- +struct GCE_dragging_point +{ + geom_item geom; ///< \ru Дескриптор геометрического объекта. \en Descriptor of the geometric object. + geom_item point; ///< \ru Дескриптор контрольной точки геометрического объекта. \en Descriptor of the geometric object control point. + GCE_dragging_point() : geom( GCE_NULL ), point( GCE_NULL ) {} + GCE_dragging_point( geom_item g, geom_item pnt ) : geom( g ), point( pnt ) {} +}; + +//---------------------------------------------------------------------------------------- +/** \brief \ru Диагностические характеристики системы ограничений. + \en Diagnostic characteristics of constraint system. \~ + \note Used only for testing +*/ +//--- +struct GCE_diagnostic_pars +{ + size_t consCount; // A number of registered constraints. + size_t inConsCount; // A number of internal constraints. + double reductCoef; // Reduction ration of decomposition methods [percentage]. + GCE_diagnostic_pars() : consCount( 0 ), inConsCount( 0 ), reductCoef( 0. ) {} +}; + +//---------------------------------------------------------------------------------------- +/** \brief \ru Диагностические характеристики системы ограничений. + \en Diagnostic characteristics of constraint system. \~ + \note Used only for testing +*/ +//--- +struct GCT_diagnostic_pars +{ + size_t consCount; // A number of registered constraints. + size_t inConsCount; // A number of internal constraints. + double reductCoef; // Reduction ratio of decomposition methods [percentage]. + size_t dof; // Degree of freedom of a constraint system. + GCT_diagnostic_pars() + : consCount(0) + , inConsCount(0) + , reductCoef(0) + , dof(0) + {} +}; + +/** + \} + Constraints2D_API +*/ + +//---------------------------------------------------------------------------------------- +// \ru Дескриптор контрольной точки объекта. \en Descriptor of the object control point. +/* + The data structure is deprecated. +*/ +//--- +struct geom_point +{ + geom_item geom; ///< \ru Дескриптор геометрического объекта \en Descriptor of the geometric object + point_type pntName; ///< \ru Имя контрольной точки геометрического объекта \en Name of the geometric object control point + geom_point() : geom( GCE_NULL ), pntName( GCE_IMPROPER_POINT ) {} + geom_point( geom_item g, point_type pnt ) : geom( g ), pntName( pnt ) {} +}; + +/* + The values below will be deleted (deprecated names). +*/ +const constraint_type GCE_INCIDENT = GCE_COINCIDENT; +const geom_type GCE_ARC = GCE_ANY_GEOM; +const geom_type GCE_ELLIPSE_ARC = GCE_ANY_GEOM; + +/* + The values below are deprecated. +*/ + +const query_geom_type GCE_EllipseQ1 = GCE_Q1; +const query_geom_type GCE_EllipseQ2 = GCE_Q2; +const query_geom_type GCE_EllipseQ3 = GCE_Q3; +const query_geom_type GCE_EllipseQ4 = GCE_Q4; + +#endif // __GCE_TYPES_H + +// eof diff --git a/C3d/Include/gcm_api.h b/C3d/Include/gcm_api.h index 0d4fd5a..26e1cd0 100644 --- a/C3d/Include/gcm_api.h +++ b/C3d/Include/gcm_api.h @@ -1,1085 +1,1085 @@ -////////////////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru Программный интерфейс 3D решателя геометрических ограничений. - \en Program interface of three-dimensional geometric constraints solver. \~ -*/ -////////////////////////////////////////////////////////////////////////////////////////// - -#ifndef __GCM_API_H -#define __GCM_API_H - -#include -// -#include -#include -#include - -class reader; -class writer; - -/** - \addtogroup GCM_3D_API - \{ -*/ - -/* - Constructing and deleting a constraint system -*/ - -//---------------------------------------------------------------------------------------- -/** \brief \ru Создать пустую систему ограничений. - \en Create a simple constraint system. \~ - \details \ru Вызов создает пустую систему ограничений. Кроме того, в памяти создаются - внутренние структуры данных геометрического решателя, обслуживающего систему ограничений. - Функция возвращает специальный дескриптор, по которому система ограничений доступна для - различных манипуляций: добавление или удаление геометрических объектов, ограничений, - варьирование размеров, драггинг недоопределенных объектов и т.д. - \en The call creates a simple constraint system. Besides, there are created - internal data structures of geometric solver maintaining the system of constraints. - The function returns a special descriptor by which the constraint system is available - for various manipulations: addition and deletion of geometric objects, constraints, - variation of sizes, dragging underconstrained objects etc. \~ - - \return \ru Дескриптор системы ограничений. - \en Descriptor of constraint system. \~ -*/ -//--- -GCM_FUNC(GCM_system) GCM_CreateSystem(); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Сделать систему ограничений пустой. - \en Make the constraint system empty. \~ - \details \ru Данный метод делает систему ограничений пустой при этом дескриптор gSys - остается действительным, т.е. можно осуществлять дальнейшую работу с системой ограничений. - \en This method makes the constraint system empty while the descriptor gSys - remains valid, i.e. it is possible to perform the further work with the constraint system. \~ - - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \sa #GCM_RemoveSystem -*/ -//--- -GCM_FUNC(void) GCM_ClearSystem( GCM_system gSys ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Удалить систему ограничений. - \en Delete system of constraints. \~ - \details \ru Данный метод делает систему ограничений недействительной. Осуществляется - освобождение ОЗУ от внутренних структур данных, обслуживающих систему ограничений. - \en This method makes the constraint system invalid. Deallocation of RAM - from the internal data structures maintaining the system of constraints is performed. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \sa #GCM_ClearSystem -*/ -//--- -GCM_FUNC(void) GCM_RemoveSystem( GCM_system gSys ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Читать систему ограничений из потока - \en Read constraint system from stream. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] in - \ru Поток для чтения. - \en Stream for reading. \~ -*/ -//--- -GCM_FUNC(bool) GCM_ReadSystem( GCM_system gSys, reader & in ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Запись системы ограничений в поток - \en Write constraint system to stream. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] out - \ru Поток для записи. - \en Stream for writing. \~ -*/ -//--- -GCM_FUNC(bool) GCM_WriteSystem( GCM_system gSys, writer & out ); - -//---------------------------------------------------------------------------------------- -/// Query to interrupt calculations -//--- -typedef bool ( *GCM_abort )(); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Назначить функцию прерывания вычислений - \en Set a callback to interrupt the calculations. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] cbFunc - \ru Функция обратного вызова для прерывания операций. - \en A callback to interrupt the calculation. \~ -*/ -//--- -GCM_FUNC(void) GCM_SetCallback( GCM_system gSys, GCM_abort cbFunc ); - - -/* - Specifying geometry data structures (GCM_g_record) -*/ - -//---------------------------------------------------------------------------------------- -/** \brief \ru Выдать запись пустого геометрического объекта. - \en Give the record of empty geometric object. \~ -*/ -//--- -GCM_FUNC(GCM_g_record) GCM_NullGeom(); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Выдать запись точки из типа MbCartPoint3D в типе GCM_g_record. - \en Get a record of point from the type MbCartPoint3D to the type GCM_g_record. \~ -*/ -//--- -GCM_FUNC(GCM_g_record) GCM_Point( const MbCartPoint3D & ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Запись прямой, заданной её точкой и направляющим вектором. - \en Record of line specified by the point and direction vector. \~ -*/ -//--- -GCM_FUNC(GCM_g_record) GCM_Line( const MbCartPoint3D & org - , const MbVector3D & axisZ ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Запись плоскости, заданной точкой и нормалью. - \en Record of plane specified by the point and normal vector. \~ -*/ -//--- -GCM_FUNC(GCM_g_record) GCM_Plane( const MbCartPoint3D & org, const MbVector3D & axisZ ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Получить запись конуса по заданному набору параметров. - \en Get data record of cone for the given set of parameters. \~ - \param[in] centre - \ru Центр окружности-основания конуса. - \en Center of base circle of the cone. \~ - \param[in] axis - \ru Направляющий вектор оси конуса. - \en Direction vector of the cone axis. \~ - \param[in] radiusA - \ru Радиус основания конуса. - \en Radius of the base circle. \~ - \param[in] radiusB - \ru Радиус сечения конуса ("малый" радиус). - \en Radius of section of circle ("minor" radius). \~ - \return \ru Запись конуса. - \en Record of cone. \~ - - \details \ru Предполагается, что параметры конуса описывают воображаемый усеченный конус, - высота которого всегда равна единице длины. При этом radiusA - это радиус - основания конуса, а radiusB - радиус его сечения. - \en It is assumed that the parameters describe the imaginary cone frustum, - whose height is always unit of length. In this radiusA - is the radius of - the base of the cone, and radiusB - the radius of its cross-section. -*/ -//--- -GCM_FUNC(GCM_g_record) GCM_Cone( const MbCartPoint3D & centre, const MbVector3D & axis - , double radiusA, double radiusB ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Получить запись цилиндра по заданному набору параметров. - \en Get data record of cylinder for the given set of parameters. \~ - \param[in] centre - \ru Центр окружности-основания цилиндра. - \en Center of base circle of the cylinder. \~ - \param[in] axis - \ru Направляющий вектор оси цилиндра. - \en Direction vector of the cylinder axis. \~ - \param[in] radius - \ru Радиус основания цилиндра. - \en Radius of the base circle. \~ - \return \ru Запись цилиндра. - \en Record of cylinder. \~ -*/ -//--- -GCM_FUNC(GCM_g_record) GCM_Cylinder( const MbCartPoint3D & centre, const MbVector3D & axis - , double radius ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Получить запись окружности, заданной набором параметров. - \en Get record of circle specified by the set of parameters. \~ - \param[in] centre - \ru Центр окружности. - \en Center of the circle. \~ - \param[in] axis - \ru Направляющий вектор оси окружности. - \en Direction vector of the circle axis. \~ - \param[in] radius - \ru Радиус окружности. - \en Radius of the circle. \~ - \return \ru Запись данных об окружности. - \en Data record of the circle. \~ -*/ -//--- -GCM_FUNC(GCM_g_record) GCM_Circle( const MbCartPoint3D & centre, const MbVector3D & axis, double radius ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Получить запись тороида по заданному набору параметров. - \en Get data record of torus for the given set of parameters. \~ - \param[in] centre - \ru Центр тора. - \en Center of torus. \~ - \param[in] axis - \ru Направляющий вектор оси вращения. - \en Direction vector of the rotation axis. \~ - \param[in] majorR - \ru "Большой" радиус тора - радиус окружности, описывающей вращение центра сечения. - \en "Major" radius is the radius of circle sweeping center of the rotating section. - \~ - \param[in] minorR - \ru Радиус окружности вращения ("малый" радиус). - \en Radius of section of circle ("minor" radius). \~ - - \details \ru Таким образом предполагается, что тор это воображаемая поверхность вращения, образованная - вращением окружности с радиусом minorR, лежащей в одной плоскости с осью вращения и центром, - расположенном на расстоянии majorR от оси тора. - \en Thus, it is assumed that the torus is an imaginary surface formed by - rotation of a circle of "minor radius" lying in the same plane as the axis - of rotation and the center located at a distance of majorR from the axis. -*/ -//--- -GCM_FUNC(GCM_g_record) GCM_Torus( const MbCartPoint3D & centre, const MbVector3D & axis - , double majorR, double minorR ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Получить запись данных о сфере, заданной центром и радиусом. - \en Get data record of sphere specified by center and radius. \~ - \param[in] centre - \ru Центр сферы. - \en Center of the sphere. \~ - \param[in] radius - \ru Радиус сферы. - \en Radius of the sphere. \~ - \return \ru Запись данных о сфере. - \en Data record of the sphere. \~ -*/ -//--- -GCM_FUNC(GCM_g_record) GCM_Sphere( const MbCartPoint3D & centre, double radius ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Получить запись данных твердого тела, заданной началом координат и осями Z, X. - \en Get a data record of solid specified by its origin of coordinates, Z-axis and X-axis. \~ - \details - \ru Результат, который возвращает данная функция, используется для задания - в системе ограничений твердого тела (кластера) с помощью вызовов - GCM_AddGeom или #GCM_SubGeom. - \en The result, which returns this function, is used to specify a rigid body - (cluster) in the system by calling #GCM_AddGeom or #GCM_SubGeom. \~ -*/ -//--- -GCM_FUNC(GCM_g_record) GCM_SolidLCS( const MbCartPoint3D & org - , const MbVector3D & axisZ = MbVector3D::zAxis - , const MbVector3D & axisX = MbVector3D::xAxis ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Получить запись данных системы координат твердого тела. - \en Get a data record of the solid coordinate system by its placement. \~ - \details - \ru Результат, который возвращает данная функция, используется для задания - в системе ограничений твердого тела (кластера) с помощью вызовов - GCM_AddGeom или GCM_SubGeom. - \en The result, which returns this function, is used to specify a rigid body - (cluster) in the system by calling #GCM_AddGeom or #GCM_SubGeom. \~ -*/ -//--- -GCM_FUNC(GCM_g_record) GCM_SolidLCS( const MbPlacement3D & ); - -/* - Defining geometry of constraint system -*/ - -//---------------------------------------------------------------------------------------- -/** \brief \ru Добавить в систему ограничений точку. - \en Add point to the constraint system. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] pVal - \ru Координаты точки. - \en Coordinates of a point. \~ - \return \ru Дескриптор зарегистрированной точки. - \en Descriptor of registered point. \~ -*/ -//--- -GCM_FUNC(GCM_geom) GCM_AddPoint( GCM_system gSys, const MbCartPoint3D & pVal ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Добавить в систему ограничений геометрический объект. - \en Add geometric object to the constraint system. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] gRec - \ru Запись геометрического объекта. - \en Record of geometric record. \~ - \return \ru Дескриптор зарегистрированного объекта. - \en Descriptor of registered object. \~ -*/ -//--- -GCM_FUNC(GCM_geom) GCM_AddGeom( GCM_system gSys, const GCM_g_record & gRec ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Добавить в систему ограничений геометрический объект. - \en Add geometric object to the constraint system. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] gType - \ru Тип геометрического объекта. - \en Type of geometric object. \~ - \param[in] gMat - \ru Прямая матрица ЛСК объекта. - \en Direct matrix of geometric object. \~ - \param[in] radiusA - \ru Радиус окружности, цилиндра, сферы, а также "мажорный" радиус конуса и тора. - \en Radius of circle, cylinder, sphere, also "major" radius of cone and torus. \~ - \param[in] radiusB - \ru "Минорный" радиус конуса или тора. - \en "Minor" radius of cone and torus. \~ - \return \ru Дескриптор зарегистрированного объекта. - \en Descriptor of registered object. \~ -*/ -//-- -GCM_FUNC(GCM_geom) GCM_AddGeom( GCM_system gSys, GCM_g_type gType - , const MbMatrix3D & gMat - , double radiusA, double radiusB ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Добавить в подсистему твердого тела (кластера) подчиненный геометрический объект. - \en Include a geometric sub-object to the subsystem of a solid (rigid cluster). \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] sol - \ru Твердое тело или кластер. - \en Solid or rigid cluster. \~ - \param[in] gRec - \ru Запись геометрического подчиненного объекта, заданного в ЛСК тела. - \en Record of geometric sub-object, which is given in LCS of the solid. \~ - \return \ru Дескриптор подчиненного объекта из подмножества тела. - \en Descriptor of sub-object in subset of the solid. \~ -*/ -//--- -GCM_FUNC(GCM_geom) GCM_SubGeom( GCM_system gSys, GCM_geom sol, const GCM_g_record & gRec ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Выдать кластер (тело), в который включен данный геометрический объект. - \en Give a cluster (solid) in which a geometric object is included. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] subGeom -\ru Геометрический объект, принадлежащий кластеру. - \en A geometric object belonging to the cluster.. \~ - \return \ru Дескриптор кластера, которому принадлежит данный геометрический объект. - \en Descriptor of the cluster that owns this geometric object. \~ -*/ -//--- -GCM_FUNC(GCM_geom) GCM_Parent( GCM_system gSys, GCM_geom subGeom ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Тип геометрического объекта. - \en A type of geometric object. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g - \ru Дескриптор геометрического объекта. - \en Descriptor of geometric object \~ - \return \ru Геометрический тип объекта. - \en Geometric type of an object. \~ -*/ -//--- -GCM_FUNC(GCM_g_type) GCM_GeomType( GCM_system gSys, GCM_geom g ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Удалить геометрический объект из системы ограничений. - \en Delete a geometric object from the constraint system. \~ - \param gSys - \ru Система ограничений. - \en System of constraints. \~ - \param g - \ru Дескриптор геометрического объекта. - \en Descriptor of geometric object \~ - \details \ru После применения этой функции дескриптор объекта становится недействительным. - Надо заметить, что удаляемый геометрический объект может все еще участвовать в других - объектах и ограничениях. В этом случае удаляемый объект, хотя и считается удаленным, - фактически продолжает действовать до тех пор, пока другие объекты, связанные с ним, - не будут удалены. - \en After using this function the object descriptor 'g' will be invalidated. - It should be noted that the removed geometric object can still involved in other - objects and constraints. In this case, the object to be deleted, although it is considered - removed actually remains in effect until other objects connected with will be deleted. -*/ -//--- -GCE_FUNC(void) GCM_RemoveGeom( GCM_system gSys, GCM_geom g ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Вернет true, если объект все еще действительный. - \en Returns true if the object is still valid. \~ -*/ -//--- -//GCE_FUNC(bool) GCM_IsValid( GCM_system gSys, GCM_geom g ); - -/* - Defining a system of constraints -*/ - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать бинарное ограничение для пары геометрических объектов. - \en Set a binary constraint for two geometric objects. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g1 - \ru Дескриптор первого объекта. - \en Descriptors of first object. \~ - \param[in] g2 - \ru Дескриптор второго объекта. - \en Descriptors of second object. \~ - \param[in] aVal - \ru Опция выравнивания. - \en Alignment option. \~ - \param[in] tVar - \ru Вариант касания для ограничения c типом 'GCM_TANGENT'. - \en Variant of tangency for constraint of type 'GCM_TANGENT'. \~ - - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - \details - \ru Эта функция применяется для задания в системе бинарного ограничения любого - типа кроме размерных, а именно ограничения следующих типов: GCM_COINCIDENT, GCM_PARALLEL, - GCM_PERPENDICULAR, GCM_TANGENT, GCM_CONCENTRIC, GCM_IN_PLACE. В случае неудавшегося вызова, - функция вернет дескриптор пустого объекта GCM_NULL. - - \en The function is used to set a binary constraint of any type except - dimensional constraints, namely one of the following types: GCM_COINCIDENT, GCM_PARALLEL, - GCM_PERPENDICULAR, GCM_TANGENT, GCM_CONCENTRIC, GCM_IN_PLACE. In a case of failure, - the function returns a handle to an empty object GCM_NULL. \~ -*/ -//--- -GCM_FUNC(GCM_constraint) GCM_AddBinConstraint( GCM_system gSys, GCM_c_type cType - , GCM_geom g1, GCM_geom g2, GCM_alignment aVal = GCM_CLOSEST - , GCM_tan_choice tVar = GCM_TAN_POINT ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение, устанавливающее расстояние между парой геометрических объектов. - \en Set a constraint which specifies distance between a pair of geometric objects. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g1 - \ru Дескриптор первого объекта. - \en Descriptors of first object. \~ - \param[in] g2 - \ru Дескриптор второго объекта. - \en Descriptors of second object. \~ - \param[in] dVal - \ru Значение размера. - \en The value of dimension. \~ - \param[in] aVal - \ru Опция выравнивания. - \en Alignment option. \~ - \return \ru Дескриптор нового ограничения c типом GCM_DISTANCE. - \en Descriptor of the created constraint of type GCM_DISTANCE. \~ - - \details \ru Эта функция создает в системе размерное ограничение с типом GCM_DISTANCE, - которое задает линейный размер между двумя геометрическими объектами. - В случае неудачного вызова, функция вернет дескриптор пустого объекта GCM_NULL. - \en The function creates a dimensional constraint of type GCM_DISTANCE, which - specifies linear dimension between two geometric objects. - In a failed call, the function returns a handle to an empty object GCM_NULL.\~ - - \note \ru Значение dVal может быть знакопеременным для ориентируемых объектов. - \en Value of dVal can be positive as well as negative for oriented objects. \~ -*/ -//--- -GCM_FUNC(GCM_constraint) GCM_AddDistance( GCM_system gSys, GCM_geom g1, GCM_geom g2 - , double dVal, GCM_alignment aVal = GCM_CLOSEST ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение, устанавливающее угол между двумя геометрическими объектами. - \en Set a constraint which specifies angle between a pair of geometric objects. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g1 - \ru Дескриптор первого объекта. - \en Descriptors of first object. \~ - \param[in] g2 - \ru Дескриптор второго объекта. - \en Descriptors of second object. \~ - \param[in] axis - \ru Дескриптор объекта, задающего ось вращения угла. Может быть = GCM_NULL. - \en Descriptor of an object that specifying the rotation axis of angle. It can be GCM_NULL. \~ - \param[in] dVal - \ru Значение размера (радианы). - \en The value of dimension (radians). \~ - \return \ru Дескриптор нового ограничения c типом GCM_ANGLE. - \en Descriptor of the created constraint of type GCM_ANGLE. \~ - - \details \ru Эта функция создает в системе размерное ограничение с типом GCM_ANGLE, - которое задает угол между направлениями двух геометрических объектов. - Если ось вращения axis задана (т.е. != GCM_NULL), то угол имеет планарный - способ измерения (0 ... 2пи). В этом случае направления 'g1' и 'g2' обязаны - лежать в плоскости с нормалью заданной осью axis (оба направления перпендикулярны оси). - В случае неудавшегося вызова, функция вернет дескриптор пустого объекта GCM_NULL. - \en The function creates a dimensional constraint of type GCM_ANGLE, which - specifies angle between the directions of two geometric objects. - If the rotational axis is specified (i.e. != GCM_NULL), the angle has an - planar method of measurement (0 ... 2пи). In this case directions of - 'g1' and 'g2' must lie on a plane which has a normal specified by - the 'axis' parameter (both directions perpendicular to the axis ). - In a failed call, the function returns a handle to an empty object GCM_NULL. \~ -*/ -//--- -GCM_FUNC(GCM_constraint) GCM_AddAngle( GCM_system gSys, GCM_geom g1, GCM_geom g2, GCM_geom axis, double dVal ); -GCM_FUNC(GCM_constraint) GCM_AddAngle( GCM_system gSys, GCM_geom g1, GCM_geom g2, double dVal ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение, устанавливающее радиус геометрического объекта. - \en To create a constraint which specifies a radius of geometric objects. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g1 - \ru Дескриптор геометрического объекта, обладающего ненулевым радиусом. - \en Descriptor of the first object which has nonzero radius. \~ - \return \ru Дескриптор нового ограничения c типом GCM_RADIUS. - \en Descriptor of the created constraint which has a type GCM_RADIUS. \~ - - \details \ru Эта функция позволяет задать радиус геометрического объекта. Изменить величину - радиуса можно с помощью функции #GCM_ChangeDrivingDimension. Удаляется - радиальный размер вызовом функции #GCM_RemoveConstraint. - В случае неудачного вызова, функция вернет дескриптор пустого объекта GCM_NULL. - \en This function allows to specify a radius of the geometric object. To change - radius value use the function #GCM_ChangeDrivingDimension. To remove limitation - on radius of the geometric object use the function #GCM_RemoveConstraint. - In a case of failure, the function returns a handle to an empty object GCM_NULL. \~ -*/ -//--- -GCM_FUNC(GCM_constraint) GCM_FixRadius( GCM_system gSys, GCM_geom g1 ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать управляющий планарный угол между двумя геометрическими объектами. - \en Set a driving planar angle between a pair of geometric objects. \~ - \details \ru Функция аналогична вызову GCM_AddAngle, однако требует ось 'axis', - задающую плоскость откладывания угла. - \en This is the same call GCM_AddAngle, but requires an axis, which defines - a plane in which the angle is measured. \~ -*/ -//--- -GCM_FUNC(GCM_constraint) GCM_AddPlanarAngle( GCM_system gSys, GCM_geom g1, GCM_geom g2 - , GCM_geom axis, double dVal ); - -//---------------------------------------------------------------------------------------- -// Not yet documented -//--- -GCM_FUNC(GCM_constraint) GCM_AddSymmeric( GCM_system gSys, GCM_geom g1, GCM_geom g2 - , GCM_geom plane, GCM_alignment aVal = GCM_NO_ALIGNMENT ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать линейный паттерн. - \en Create a linear pattern constraint. \~ - \details \ru Ограничение "Линейный Паттерн" задаёт закон, согласно которому группа - геометрических объектов, добавленных в этот паттерн с помощью функции - #GCM_AddGeomToPattern, располагается на заданной прямой. Кроме направляющей - прямой, для создания Линейного Паттерна требуется задать геометрический объект, - называемый образцом. Этот объект определяет начало координат (нулевую точку) - направляющей прямой. Таким образом в системе координат направляющей прямой - Линейного Паттерна образец всегда остаётся неподвижным относительно любых - трансляций, поворотов и деформаций. Положение любого добавляемого в паттерн - объекта (копии) определяется его положением на прямой, направленной вдоль - заданной оси, началом координат которой является начало координат ЛСК образца. - \en The Linear Pattern constraint defines the law under which geometric objects - added to this pattern using #GCM_AddGeomToPattern function are located on the - given line (guide line). In addition to the guide line to create a Linear - Pattern constraint it's necessary to specify a geometric object called a - Sample. This object defines the starting point of the guide line of the Linear - Pattern. Thus, Sample always remains stationary relative to any translations, - rotations and deformations in the coordinate system of the Linear Pattern guide - line. The position of any object (called a Copy) to be added to the pattern is - determined by its position on the guide line with the origin coinciding with the - origin of the LCS of the Sample.\~ - \par \ru Порядок удаления - Чтобы удалить Линейный Паттерн целиком нужно воспользоваться функцией - #GCM_RemoveConstraint. При этом не требуется удалять ограничения, созданные при - добавлении новых элементов в паттерн с помощью функции #GCM_AddGeomToPattern: - они будут удалены автоматически. - \en Removal procedure - To remove the Linear Pattern completely It's necessary to use the - #GCM_RemoveConstraint function. There is no need to remove constraints that were - created by the addition of new Copies to the pattern using the function - #GCM_AddGeomToPattern. They will be deleted automatically. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g1 - \ru Дескриптор образца. - \en Descriptor of the sample. \~ - \param[in] g2 - \ru Дескриптор направляющей оси линейного паттерна. - \en Descriptor of the direction axis of the Linear Pattern. \~ - \param[in] align - \ru Опция выравнивания образца относительно направляющей оси. Если задана - опция GCM_ALIGN_WITH_AXIAL_GEOM, то образец g1 будет лежать на направлеющей - прямой(оси) линейного паттерна. - \en Option of alignment of a sample g1 relative to the direction axis. If the - option #GCM_ALIGN_WITH_AXIAL_GEOM is given the sample g1 will be coincident - with the direction line(axis). \~ - \return \ru Дескриптор нового ограничения c типом GCM_LINEAR_PATTERN. - \en Descriptor of the created constraint which has a type GCM_LINEAR_PATTERN. \~ -*/ -// --- -GCM_FUNC(GCM_pattern) GCM_AddLinearPattern( GCM_system gSys, GCM_geom g1, GCM_geom g2, GCM_alignment align=GCM_NO_ALIGNMENT ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать угловой паттерн. - \en Create an angular pattern constraint. \~ - \details \ru Ограничение "Угловой Паттерн" задаёт закон, согласно которому группа - геометрических объектов, добавленных в этот паттерн с помощью функции - #GCM_AddGeomToPattern, располагается на некоторой окружности. Окружность эта - лежит в плоскости перпендикулярной заданной оси, а центр окружности лежит на - этой оси. Кроме оси вращения для создания Углового Паттерна требуется задать - геометрический объект, называемый образцом. Этот объект определяет нулевой угол - и начальный радиус окружности. Таким образом положение любого добавляемого в - паттерн объекта (копии) определяется вращением вокруг заданной оси, начиная от - образца. При этом радиус окружности (расстояние от копии или образца до оси) не - не является константой и может варьироваться (изменяться) в ходе решения. - \en The Angular Pattern constraint defines the law under which geometric objects - added to this pattern using #GCM_AddGeomToPattern function are located on the - given circle. This circle lies in a plane that is perpendicular to the given - axis, and the center of this circle lies on this axis. In addition to the axis - to create an Angular Pattern constraint it's necessary to specify a geometric - object called a Sample. This object defines the zero angle and the initial - radius of the circle for the Angular Pattern. The position of any object (called - a Copy) to be added to the pattern is determined by the rotation around the - given axis, starting from the Sample. The radius of the circle (the distance - from the Copy or the Sample to the axis) is not constant and can vary in the - process of solving the system of equations. \~ - - \par \ru Порядок удаления - Чтобы удалить Угловой Паттерн целиком нужно воспользоваться функцией - #GCM_RemoveConstraint. При этом не требуется удалять ограничения, созданные при - добавлении новых элементов в паттерн с помощью #GCM_AddGeomToPattern: они будут - удалены автоматически. - \en Removal procedure - To remove the Angular Pattern completely It's necessary to use the - #GCM_RemoveConstraint function. There is no need to remove constraints that were - created by the addition of new Copies to the pattern using the function - #GCM_AddGeomToPattern. They will be deleted automatically. \~ - - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] smp - \ru Дескриптор образца. - \en Descriptor of the sample. \~ - \param[in] axial - \ru Дескриптор оси вращения углового паттерна. - \en Descriptor of the rotation axis of the Angular Pattern. \~ - \param[in] align - \ru Опция выравнивания образца относительно направляющей оси. Если задана - опция GCM_ALIGN_WITH_AXIAL_GEOM, то образец 'smp' будет лежать в плоскости - XY направляющего обекта (оси вращения), и если направляющий объект имеет - радиус (например, это окружность), то расстояние от объектов Углового - Паттерна до оси вращения будет равно радиусу направляющего объекта - (например, радиусу окружности). - \en Option of alignment of a sample relative to the direction axis. - If the GCM_ALIGN_WITH_AXIAL_GEOM option is specified sample g1 will lie in - the XY plane of the direction axis object (rotation axis) and if the - direction axis object has a radius (for example, this is a circle) the - distance from the Angle Pattern objects to the rotation axis will be equal - to the radius of the direction axis object (for example, radius of a circle). \~ - \return \ru Дескриптор нового ограничения c типом GCM_ANGULAR_PATTERN. - \en Descriptor of the created constraint which has a type GCM_ANGULAR_PATTERN. \~ -*/ -// --- -GCM_FUNC(GCM_pattern) GCM_AddAngularPattern( GCM_system gSys, GCM_geom smp, GCM_geom axial, GCM_alignment align=GCM_NO_ALIGNMENT ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Добавить геометрический объект в паттерн. - \en Add geometric object to the pattern. \~ - \details \ru Объект, добавляемый в паттерн, назовём копией. - Если копия добавляется в Линейный Паттерн, то требуется указать расстояние от - копии до образца. Оно может быть положительным или отрицательным и определяется - требуемым положением копии относительно образца с учётом направляющей оси. Так - же можно опционально задать выравнивание ЛСК копии относительно ЛСК образца. - Если копия добавляется в Угловой Паттерн, то требуется указать угол поворота - копии относительно образца, вокруг оси вращения паттерна. Так же можно - опционально задать выравнивание копии относительно образца. Возможны 2 типа - выравнивания: GCM_ALIGNED - выравнивание ЛСК копии и образца и GCM_ROTATED - - выравнивание ЛСК копии с ЛСК образца, повёрнутого вокруг оси вращения на тот же - угол, что и копия. - Расстояние (или угол поворота) от образца до копии по умолчанию фиксировано, - но может быть варьируемым при задании соответствующей опции #GCM_scale. - \en Let's call a Copy the object that is added to the pattern. - If the Copy is added to the Linear Pattern it's necessary to specify the - distance from the Copy to the Sample. It can be positive or negative and is - determined by the required position of the Copy relative to the Sample taking - into account the guide axis. It's optionally possible to specify alignment of - the Copy LCS relative to the Sample LCS. - If the Copy is added to the Angular Pattern it's necessary to specify the - angle of rotation of the Copy relative to the Sample around the pattern rotation - axis. It's optionally possible to specify alignment of the Copy relative to the - Sample. There are 2 types of alignment: GCM_ALIGNED - alignment of the local - coordinate systems of the Copy and the Sample, GCM_ROTATED - the alignment of - the local coordinate system of the Copy with the local coordinate system of the - Sample that is rotated around the axis of rotation at the same angle as the Copy. - The distance (or angle of rotation) from the sample to the copy is fixed by default, -                 but can be varied by specifying the appropriate #GCM_scale option.\~ - - \par \ru Порядок удаления. - Чтобы удалить копию из паттерна используйте функцию #GCM_RemoveConstraint. Если - же вам надо удалить паттерн целиком, то вам не требуется удалять каждую копию из - паттерна, просто удалите паттерн. - \en Removal procedure - To remove a Copy from the pattern use the function #GCM_RemoveConstraint. If - it's necessary to remove the pattern completely there is no need to remove each - copy from the pattern. Just remove the pattern constraint. \~ - - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] ptrn - \ru Дескриптор паттерна, в который добавляем копию. - \en Descriptor of the pattern. \~ - \param[in] geom - \ru Дескриптор добавляемого геометрического объекта (копии). - \en Descriptor of the copy. \~ - \param[in] position - \ru Переменная, задающая положение добавляемой копии в паттерне (расстояние или угол). - \en Variable that specifies the position of the copy in the pattern (distance or angle). \~ - \param[in] align - \ru Опция, задающая выравнивание копии по отношению к образцу. - \en Option that specifies the alignment of copy relative to the sample. \~ - \param[in] scale - \ru Тип масштабирования элемента паттерна. - \en Scaling type of pattern element. \~ - \return \ru Дескриптор нового ограничения c типом GCM_PATTERNED. - \en Descriptor of the created constraint which has a type GCM_PATTERNED. \~ -*/ -// --- -GCM_FUNC(GCM_constraint) GCM_AddGeomToPattern( GCM_system gSys, GCM_pattern ptrn, GCM_geom geom, double position, - GCM_alignment align = GCM_NO_ALIGNMENT, GCM_scale scale = GCM_RIGID ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать ограничение. - \en Set a constraint. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] cRec - \ru Унифицированная запись ограничения. - \en Uniform record of a constraint. \~ - \return \ru Дескриптор нового ограничения. - \en Descriptor of a new constraint. \~ - \details - \ru Эта функция применяется только для автоматического тестирования решателя, - поэтому подробно не документировалась. - \en This function is used only for the automated testing of the solver therefore not documented. -*/ -//--- -GCM_FUNC(GCM_constraint) GCM_AddConstraint( GCM_system gSys, const GCM_c_record & cRec ); - -//---------------------------------------------------------------------------------------- -// Not yet documented -//--- -GCM_FUNC(GCM_geom) GCM_SetDependent( GCM_system gSys, GCM_constraint con, GCM_geom g ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Удалить ограничение из системы. - \en Delete a constraint from the system. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] con - \ru Дескриптор ограничения. - \en Descriptor of constraint. \~ -*/ -//--- -GCE_FUNC(void) GCM_RemoveConstraint( GCM_system gSys, GCM_constraint con ); - - -/* - Fixation and freeing of a geometry -*/ - -//---------------------------------------------------------------------------------------- -// Create fixing constraint of the geom -//--- -GCM_FUNC(GCM_constraint) GCM_FixGeom_( GCM_system gSys, GCM_geom g ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Сделать геометрический объект неподвижным. - \en Set a geometric object fixed. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g - \ru Дескриптор геометрического объекта. - \en Descriptors of geometric object. \~ - - \details - \ru Эта функция делает объект неподвижным лишая его всех степеней свобод. Если геометрический - объект является суб-объектом тела (кластера), то объект замораживается только в рамках кластера, - однако в глобальной системе координат объект имеет такую же свободу как и кластер, - которому он принадлежит. - \en Thе function makes the object fixed depriving it of all degrees of freedom. If the geometric object - is a sub geom of a solid (cluster), the object is frozen only in the framework of the cluster, - but in the global coordinate system the object has the same freedom as the cluster - to which it belongs. - \~ - \note \ru На будущее планируется, что данная функция будет возвращать дескриптор ограничения. - \en In the future this function will be returning a descriptor of constraint, i.e. will create a fixing constraint. \~ - \sa GCM_FreeGeom -*/ -//--- -GCM_FUNC(bool) GCM_FreezeGeom( GCM_system gSys, GCM_geom g ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Освободить объект, зафиксированный методом GCM_FreezeGeom. - \en Set free geometric object fixed by GCM_FreezeGeom call. \~ - \sa GCM_FreezeGeom -*/ -//--- -GCM_FUNC(void) GCM_FreeGeom( GCM_system gSys, GCM_geom g ); - -/* - Evaluating methods -*/ - -//---------------------------------------------------------------------------------------- -/** \brief \ru Вычислить систему ограничений. - \en Calculate the constraint system. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \return \ru Код результата вычислений. - \en Calculation result code. \~ - \details \ru Функция решает задачу ограничений. Задача ограничений формулируется - функциями API геометрического решателя; функции вида GCM_Add_XXXXXXX добавляют новые - объекты, функции вида GCM_Change_XXXXXXX, GCM_Set_XXXXXXX изменяют состояние объектов. - Таким образом, что бы все такие изменения вступили в силу, нужно вызвать - метод #GCM_Evaluate.\n - Алгоритмы GCM_Evaluate учитывают удовлетворенность систем ограничений; если - все ограничения уже решены, то функция не тратит время на вычисления, а - состояние геометрических объектов остается неизменным. - \en The function solves problem of constraints. The problem of constraint is - formulated by API functions of geometric solver; the functions of a kind GCM_Add_XXXXXXX - add a new object, the functions of kinds GCM_Change_XXXXXXX and GCM_Set_XXXXXXX change - a state of objects. Thus, for all changes to take effect it is necessary to call the - method #GCM_Evaluate.\n - The algorithms GCM_Evaluate take into account whether constraint systems are satisfied, - if all constraints have been already solved, then the function does not spend time - for calculations, and the state of geometric objects remains unchanged. \~ -*/ -//--- -GCM_FUNC(GCM_result) GCM_Evaluate( GCM_system gSys ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Получить код результата вычисления ограничения. - \en Get result code of the evaluation of constraint. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] cItem - \ru Дескриптор ограничения, принадлежащего системе gSys. - \en Descriptor of constraint belonging to the system gSys. \~ - \note \ru Если система еще не вычислялась, то функция вернет код GCM_RESULT_None. - \en If the system has not yet been evaluated then the function will return - the code GCM_RESULT_None. \~ - \return \ru Диагностический код хранящийся в системе после последней вызова GCM_Evaluate. - \en Diagnostic code stored in the system after the last call GCM_Evaluate. \~ -*/ -//--- -GCM_FUNC(GCM_result) GCM_EvaluationResult( GCM_system gSys, GCM_constraint cItem ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Выполнить проверку удовлетворенности ограничения. - \en Perform a check that a constraint is satisfied. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] cItem - \ru Дескриптор ограничения. - \en Descriptor of constraint. \~ - \return \ru true, если ограничение удовлетворено. - \en true if a constraint is satisfied. \~ -*/ -//--- -GCM_FUNC(bool) GCM_IsSatisfied( GCM_system gSys, GCM_constraint cItem ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Выдать текущее положение (решение) геометрического объекта. - \en Get current placement (solution) of the geometric object. -*/ -//--- -GCM_FUNC(MbPlacement3D) GCM_Placement( GCM_system gSys, GCM_geom g ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Выдать начало СК геометрического объекта. - \en Get an LCS origin of the geometric object. - \details \ru Функция вернет координаты начала ЛСК объекта. Данный вызов может быть - использован для любых типов геометрии. Например, для окружности данный вызов вернет ее - центр, для плоскости - точку, лежащую на плоскости, для цилиндра - центр основания - цилиндра и т.д. - \en The function returns coordinates of the origin of the LCS. The call can be applied - to any type of geometry. For example, for a circle the call will return its center, - for a plane - it is a point laying on the plane, - for a cylinder - it is a center of its foundation circle and so on. - -*/ -//--- -GCM_FUNC(MbCartPoint3D) GCM_Origin( GCM_system gSys, GCM_geom g ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Текущее значение радиуса геометрического объекта. - \en Current radius value of the geometric object. -*/ -//--- -GCM_FUNC(double) GCM_Radius( GCM_system gSys, GCM_geom g ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Текущее значение "большого" радиуса тора или конуса. - \en Current "major" radius value of torus or cone. -*/ -//--- -GCM_FUNC(double) GCM_RadiusA( GCM_system gSys, GCM_geom g ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Текущее значение "малого" радиуса тора или конуса. - \en Current "minor" radius value of torus or cone. -*/ -//--- -GCM_FUNC(double) GCM_RadiusB( GCM_system gSys, GCM_geom g ); - -/* - Changing methods -*/ - -//---------------------------------------------------------------------------------------- -/** \brief \ru Изменить значение управляющего размера. - \en Change the value of driving dimension. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] dItem - \ru Дескриптор размерного ограничения. - \en Descriptor of dimensional constraint. \~ - \param[in] dVal - \ru Требуемое значение размера. - \en Required value of constraint. \~ - \return \ru Код результата операции. - \en Operation result code. \~ - \details \ru Функция применяется только для управляющих размеров. Если управляющий размер - является угловым, то параметр dVal задается в радианах.\n - Следует учитывать, что настоящая функция не осуществляет вычислений, а только подготавливает - изменение размера. Что бы изменения вступили в силу, необходимо вызвать функцию #GCE_Evaluate. - \en The function is used only for driving dimensions. If the driving dimension - is angular, then the parameter dVal is specified in radians. \n - It should be noted that the function doesn't perform computations but only prepares - the changing of dimension. For the changes to take effect it is required to call - the function #GCM_Evaluate. \~ -*/ -//--- -GCM_FUNC(GCM_result) GCM_ChangeDrivingDimension( GCM_system gSys, GCM_constraint dItem, double dVal ); - -//---------------------------------------------------------------------------------------- -/** \brief \ru Задать текущее положение геометрического объекта. - \en Set current placement of the geometric object. - \note \ru Эта функция только придает объекту новое состояние без переоценки системы - ограничений. Вызов GCM_Evaluate может поменять заданное состояние, если - имеются не удовлетворенные ограничения. - \en The function only impart new state of the object without the revaluation - of constraints. Call GCM_Evaluate can change the given state to satisfy - constraints of this object. \~ -*/ -//--- -GCM_FUNC(void) GCM_SetPlacement( GCM_system gSys, GCM_geom g, const MbPlacement3D & place ); - - -/* - Dragging functions -*/ - -//---------------------------------------------------------------------------------------- -/** - \brief \ru Инициализировать режим перетаскивания объектов в плоскости экрана. - \en Initialize mode of object moving in the screen plane. - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] movGeom - \ru Компонент, деталь, которой манипулируют. - \en Component, part which is manipulated. \~ - \param[in] projPlane - \ru Плоскость экрана, заданная в ГСК сборки. - \en Plane of the screen given in the WCS of assembly. \~ - \param[in] curPnt - \ru Точка, принадлежащая компоненту, которая проецируется на плоскость - экрана в положение курсора, и за которую осуществляется 'перетаскивание'. - curPnt задана в ЛСК геом.объекта movGeom. - \en Point of the component which is projected onto plane of the screen to - cursor position and is 'dragging'. curPnt given in the LCS of - the geometric object movGeom; \~ - \return \ru Код результата. \en Result code. \~ - - \details - \ru Функция запускается однократно перед входом в режим перетаскивания компонент, который управляется - (по движению мыши) через команду #GCM_SolveReposition(GCM_system, const MbCartPoint3D &). Режим - прекращается вызовом любой иной команды, кроме #GCM_PrepareReposition. Также есть специальная - функция для выхода из режима "перетаскивания" - #GCM_FinishReposition, для явного сбрасывания - режима перемещения. - \en The function runs once to start the dragging mode of components, which is controlled - (by movement of the mouse) by the command #GCM_SolveReposition(GCM_system, const MbCartPoint3D &). - Mode is stopped by the calling any other command except #GCM_PrepareReposition. There is also - the special function to exit from the dragging mode explicitly - #GCM_FinishReposition. \~ -*/ -//--- -GCM_FUNC(GCM_result) GCM_PrepareReposition( GCM_system gSys, GCM_geom movGeom, - const MbPlacement3D & projPlane, const MbCartPoint3D & curPnt ); - -/** \brief \ru Инициализировать режим вращения компонента вокруг фиксированной оси. - \en To initialize the rotation mode of the component around a fixed axis. -*/ -GCM_FUNC(GCM_result) GCM_PrepareReposition( GCM_system gSys, GCM_geom rotGeom, const MbCartPoint3D & org, const MbVector3D & axis ); - -/// \ru Завершить режим "перетаскивания". \en Finish the dragging mode. -GCM_FUNC(void) GCM_FinishReposition( GCM_system gSys ); - -/** \brief \ru Выдать объект манипуляции, с которым работает решатель, находясь в режиме вращения/перемещения объектом (драггинг). - \en Get manipulation object with which the Solver works when being in the dragging mode (rotating or moving). -*/ -GCM_FUNC(GCM_geom) GCM_GetMovingGeom( GCM_system gSys ); - -/** - \brief \ru Решить систему для произвольного изменения положения одного тела. - \en Solve the system for an arbitrary change of position of one solid. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] g - \ru Тело, положение которого меняется. - \en Solid, the position of which is changed. \~ - \param[in] newPos - \ru Новое пололожение тела. - \en New position of a solid. \~ - \param[in] movType - \ru Код желаемого поведения - \en Code of the desired behavior \~ - \return \ru Код результата. \en Result code. \~ - - \note \ru Эта функция не позволяет вывести систему сопряжений из состояния решаемости, - кроме случаев, когда до вызова функции система уже находилась в нерешенном - состоянии. Если новое положение 'newPos' не позволяет удовлетворять системе сопряжений, - то новое положение тела окажется наиболее близким к newPos (при сохранении решаемости). - \en This function doesn't allow to take out constraint system from decided state, - except when before call of function the system was already unsolved. If new position - 'newPos' doesn't allow to satisfy the system of constraints, then new position of solid - will be the most nearest to newPos (while preserving solvability). \~ -*/ -GCM_FUNC(GCM_result) GCM_SolveReposition( GCM_system gSys, GCM_geom g, - const MbPlacement3D & newPos, GCM_reposition movType ); - -/** - \brief \ru Решить систему сопряжений для новой позиции курсора в режиме драггинга. - \en Solve the system of constraints for new position of cursor in the dragging mode. - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] curPos - \ru Текущее положение курсора в ГСК. - \en Current position of a cursor in the WCS. \~ - \return \ru Код результата. \en Result code. \~ - - \details \ru Процедура, управляющая режимом перетаскивания, который прекращается вызовом любой иной команды. - \en Procedure that controls dragging mode which are stopped after calling any other command. \~ -*/ -GCM_FUNC(GCM_result) GCM_SolveReposition( GCM_system gSys, const MbCartPoint3D & curPos ); - -/** - \brief \ru Решить систему в режиме драггинга с одно-параметрическим управлением. - \en Solve the system under one-parametric driving in the dragging mode. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] alpha - \ru Управляющий параметр (зачастую задается в радианах). - \en Driving parameter (this is ussualy an angle given in radians). \~ - \return \ru Код результата. \en Result code. \~ - - \details \ru Это функция, управляющая режимом динамического перепозиционирования - (см. #GCM_PrepareReposition), в котором положение тела управляется изменением одной - координаты, например, угла вращения вокруг оси. Режим прекращается вызовом - #GCM_FinishReposition или любой иной командой, меняющей состояние решетеля, например, - #GCM_AddConstraint. - \en This function controls dynamic reposition mode (see #GCM_PrepareReposition), - in which the position of the solid is driven by changing one coordinate. For example - the angle of rotation around an axis. Mode is stopped by calling #GCM_FinishReposition - or any other command, which is changes state of the Solver, for example #GCM_AddConstraint. - \~ -*/ -GCM_FUNC(GCM_result) GCM_SolveReposition( GCM_system gSys, double alpha ); - -/* - Journaling functions -*/ - -//---------------------------------------------------------------------------------------- -/** - \brief \ru Включить журналирование и назначить файл для записи журнала вызовов API. - \en Switch on the journaling and specify the file for recording a journal of GCE API calls. \~ - \param[in] gSys - \ru Система ограничений. - \en System of constraints. \~ - \param[in] fName - \ru Имя файла назначения с полным путем. - \en Name of destination file with a full path. \~ - \return true, if journaling has been successfully switched on. - - \attention - \ru Файл журнала будет записан только после завершения сеанса работы с системой - ограничений, а именно сразу после вызова GCM_RemoveSystem. - \en The journal file will be written only when a session of work with the - constraint system is finished, i.e. immediately after calling the - GCM_RemoveSystem method. - \ru Добавление записей в журнал из параллельного кода не происходит. - \en Adding records to the journal from parallel code does not occur. -*/ -//--- -GCE_FUNC(bool) GCM_SetJournal( GCM_system gSys, const char * fName ); - - -/** \} */ // GCM_3D_API - -struct GCT_diagnostic_pars; -//---------------------------------------------------------------------------------------- -/* - It's used for testing purposes only. -*/ -//--- -GCM_FUNC(const GCT_diagnostic_pars &) GCM_DiagnosticPars( GCM_system gSys ); - -//---------------------------------------------------------------------------------------- -// Use GCM_FreezeGeom instead this (2019). -//--- -GCM_FUNC(void) GCM_FixGeom( GCM_system gSys, GCM_geom g ); - -//---------------------------------------------------------------------------------------- -// Deprecated -//--- -GCM_FUNC(bool) GCM_IsFixed( GCM_system gSys, GCM_geom g ); - - -#endif // __GCM_API_H - -// eof +////////////////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Программный интерфейс 3D решателя геометрических ограничений. + \en Program interface of three-dimensional geometric constraints solver. \~ +*/ +////////////////////////////////////////////////////////////////////////////////////////// + +#ifndef __GCM_API_H +#define __GCM_API_H + +#include +// +#include +#include +#include + +class reader; +class writer; + +/** + \addtogroup GCM_3D_API + \{ +*/ + +/* + Constructing and deleting a constraint system +*/ + +//---------------------------------------------------------------------------------------- +/** \brief \ru Создать пустую систему ограничений. + \en Create a simple constraint system. \~ + \details \ru Вызов создает пустую систему ограничений. Кроме того, в памяти создаются + внутренние структуры данных геометрического решателя, обслуживающего систему ограничений. + Функция возвращает специальный дескриптор, по которому система ограничений доступна для + различных манипуляций: добавление или удаление геометрических объектов, ограничений, + варьирование размеров, драггинг недоопределенных объектов и т.д. + \en The call creates a simple constraint system. Besides, there are created + internal data structures of geometric solver maintaining the system of constraints. + The function returns a special descriptor by which the constraint system is available + for various manipulations: addition and deletion of geometric objects, constraints, + variation of sizes, dragging underconstrained objects etc. \~ + + \return \ru Дескриптор системы ограничений. + \en Descriptor of constraint system. \~ +*/ +//--- +GCM_FUNC(GCM_system) GCM_CreateSystem(); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Сделать систему ограничений пустой. + \en Make the constraint system empty. \~ + \details \ru Данный метод делает систему ограничений пустой при этом дескриптор gSys + остается действительным, т.е. можно осуществлять дальнейшую работу с системой ограничений. + \en This method makes the constraint system empty while the descriptor gSys + remains valid, i.e. it is possible to perform the further work with the constraint system. \~ + + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \sa #GCM_RemoveSystem +*/ +//--- +GCM_FUNC(void) GCM_ClearSystem( GCM_system gSys ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Удалить систему ограничений. + \en Delete system of constraints. \~ + \details \ru Данный метод делает систему ограничений недействительной. Осуществляется + освобождение ОЗУ от внутренних структур данных, обслуживающих систему ограничений. + \en This method makes the constraint system invalid. Deallocation of RAM + from the internal data structures maintaining the system of constraints is performed. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \sa #GCM_ClearSystem +*/ +//--- +GCM_FUNC(void) GCM_RemoveSystem( GCM_system gSys ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Читать систему ограничений из потока + \en Read constraint system from stream. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] in - \ru Поток для чтения. + \en Stream for reading. \~ +*/ +//--- +GCM_FUNC(bool) GCM_ReadSystem( GCM_system gSys, reader & in ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Запись системы ограничений в поток + \en Write constraint system to stream. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] out - \ru Поток для записи. + \en Stream for writing. \~ +*/ +//--- +GCM_FUNC(bool) GCM_WriteSystem( GCM_system gSys, writer & out ); + +//---------------------------------------------------------------------------------------- +/// Query to interrupt calculations +//--- +typedef bool ( *GCM_abort )(); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Назначить функцию прерывания вычислений + \en Set a callback to interrupt the calculations. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] cbFunc - \ru Функция обратного вызова для прерывания операций. + \en A callback to interrupt the calculation. \~ +*/ +//--- +GCM_FUNC(void) GCM_SetCallback( GCM_system gSys, GCM_abort cbFunc ); + + +/* + Specifying geometry data structures (GCM_g_record) +*/ + +//---------------------------------------------------------------------------------------- +/** \brief \ru Выдать запись пустого геометрического объекта. + \en Give the record of empty geometric object. \~ +*/ +//--- +GCM_FUNC(GCM_g_record) GCM_NullGeom(); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Выдать запись точки из типа MbCartPoint3D в типе GCM_g_record. + \en Get a record of point from the type MbCartPoint3D to the type GCM_g_record. \~ +*/ +//--- +GCM_FUNC(GCM_g_record) GCM_Point( const MbCartPoint3D & ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Запись прямой, заданной её точкой и направляющим вектором. + \en Record of line specified by the point and direction vector. \~ +*/ +//--- +GCM_FUNC(GCM_g_record) GCM_Line( const MbCartPoint3D & org + , const MbVector3D & axisZ ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Запись плоскости, заданной точкой и нормалью. + \en Record of plane specified by the point and normal vector. \~ +*/ +//--- +GCM_FUNC(GCM_g_record) GCM_Plane( const MbCartPoint3D & org, const MbVector3D & axisZ ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Получить запись конуса по заданному набору параметров. + \en Get data record of cone for the given set of parameters. \~ + \param[in] centre - \ru Центр окружности-основания конуса. + \en Center of base circle of the cone. \~ + \param[in] axis - \ru Направляющий вектор оси конуса. + \en Direction vector of the cone axis. \~ + \param[in] radiusA - \ru Радиус основания конуса. + \en Radius of the base circle. \~ + \param[in] radiusB - \ru Радиус сечения конуса ("малый" радиус). + \en Radius of section of circle ("minor" radius). \~ + \return \ru Запись конуса. + \en Record of cone. \~ + + \details \ru Предполагается, что параметры конуса описывают воображаемый усеченный конус, + высота которого всегда равна единице длины. При этом radiusA - это радиус + основания конуса, а radiusB - радиус его сечения. + \en It is assumed that the parameters describe the imaginary cone frustum, + whose height is always unit of length. In this radiusA - is the radius of + the base of the cone, and radiusB - the radius of its cross-section. +*/ +//--- +GCM_FUNC(GCM_g_record) GCM_Cone( const MbCartPoint3D & centre, const MbVector3D & axis + , double radiusA, double radiusB ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Получить запись цилиндра по заданному набору параметров. + \en Get data record of cylinder for the given set of parameters. \~ + \param[in] centre - \ru Центр окружности-основания цилиндра. + \en Center of base circle of the cylinder. \~ + \param[in] axis - \ru Направляющий вектор оси цилиндра. + \en Direction vector of the cylinder axis. \~ + \param[in] radius - \ru Радиус основания цилиндра. + \en Radius of the base circle. \~ + \return \ru Запись цилиндра. + \en Record of cylinder. \~ +*/ +//--- +GCM_FUNC(GCM_g_record) GCM_Cylinder( const MbCartPoint3D & centre, const MbVector3D & axis + , double radius ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Получить запись окружности, заданной набором параметров. + \en Get record of circle specified by the set of parameters. \~ + \param[in] centre - \ru Центр окружности. + \en Center of the circle. \~ + \param[in] axis - \ru Направляющий вектор оси окружности. + \en Direction vector of the circle axis. \~ + \param[in] radius - \ru Радиус окружности. + \en Radius of the circle. \~ + \return \ru Запись данных об окружности. + \en Data record of the circle. \~ +*/ +//--- +GCM_FUNC(GCM_g_record) GCM_Circle( const MbCartPoint3D & centre, const MbVector3D & axis, double radius ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Получить запись тороида по заданному набору параметров. + \en Get data record of torus for the given set of parameters. \~ + \param[in] centre - \ru Центр тора. + \en Center of torus. \~ + \param[in] axis - \ru Направляющий вектор оси вращения. + \en Direction vector of the rotation axis. \~ + \param[in] majorR - \ru "Большой" радиус тора - радиус окружности, описывающей вращение центра сечения. + \en "Major" radius is the radius of circle sweeping center of the rotating section. + \~ + \param[in] minorR - \ru Радиус окружности вращения ("малый" радиус). + \en Radius of section of circle ("minor" radius). \~ + + \details \ru Таким образом предполагается, что тор это воображаемая поверхность вращения, образованная + вращением окружности с радиусом minorR, лежащей в одной плоскости с осью вращения и центром, + расположенном на расстоянии majorR от оси тора. + \en Thus, it is assumed that the torus is an imaginary surface formed by + rotation of a circle of "minor radius" lying in the same plane as the axis + of rotation and the center located at a distance of majorR from the axis. +*/ +//--- +GCM_FUNC(GCM_g_record) GCM_Torus( const MbCartPoint3D & centre, const MbVector3D & axis + , double majorR, double minorR ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Получить запись данных о сфере, заданной центром и радиусом. + \en Get data record of sphere specified by center and radius. \~ + \param[in] centre - \ru Центр сферы. + \en Center of the sphere. \~ + \param[in] radius - \ru Радиус сферы. + \en Radius of the sphere. \~ + \return \ru Запись данных о сфере. + \en Data record of the sphere. \~ +*/ +//--- +GCM_FUNC(GCM_g_record) GCM_Sphere( const MbCartPoint3D & centre, double radius ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Получить запись данных твердого тела, заданной началом координат и осями Z, X. + \en Get a data record of solid specified by its origin of coordinates, Z-axis and X-axis. \~ + \details + \ru Результат, который возвращает данная функция, используется для задания + в системе ограничений твердого тела (кластера) с помощью вызовов + GCM_AddGeom или #GCM_SubGeom. + \en The result, which returns this function, is used to specify a rigid body + (cluster) in the system by calling #GCM_AddGeom or #GCM_SubGeom. \~ +*/ +//--- +GCM_FUNC(GCM_g_record) GCM_SolidLCS( const MbCartPoint3D & org + , const MbVector3D & axisZ = MbVector3D::zAxis + , const MbVector3D & axisX = MbVector3D::xAxis ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Получить запись данных системы координат твердого тела. + \en Get a data record of the solid coordinate system by its placement. \~ + \details + \ru Результат, который возвращает данная функция, используется для задания + в системе ограничений твердого тела (кластера) с помощью вызовов + GCM_AddGeom или GCM_SubGeom. + \en The result, which returns this function, is used to specify a rigid body + (cluster) in the system by calling #GCM_AddGeom or #GCM_SubGeom. \~ +*/ +//--- +GCM_FUNC(GCM_g_record) GCM_SolidLCS( const MbPlacement3D & ); + +/* + Defining geometry of constraint system +*/ + +//---------------------------------------------------------------------------------------- +/** \brief \ru Добавить в систему ограничений точку. + \en Add point to the constraint system. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] pVal - \ru Координаты точки. + \en Coordinates of a point. \~ + \return \ru Дескриптор зарегистрированной точки. + \en Descriptor of registered point. \~ +*/ +//--- +GCM_FUNC(GCM_geom) GCM_AddPoint( GCM_system gSys, const MbCartPoint3D & pVal ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Добавить в систему ограничений геометрический объект. + \en Add geometric object to the constraint system. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] gRec - \ru Запись геометрического объекта. + \en Record of geometric record. \~ + \return \ru Дескриптор зарегистрированного объекта. + \en Descriptor of registered object. \~ +*/ +//--- +GCM_FUNC(GCM_geom) GCM_AddGeom( GCM_system gSys, const GCM_g_record & gRec ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Добавить в систему ограничений геометрический объект. + \en Add geometric object to the constraint system. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] gType - \ru Тип геометрического объекта. + \en Type of geometric object. \~ + \param[in] gMat - \ru Прямая матрица ЛСК объекта. + \en Direct matrix of geometric object. \~ + \param[in] radiusA - \ru Радиус окружности, цилиндра, сферы, а также "мажорный" радиус конуса и тора. + \en Radius of circle, cylinder, sphere, also "major" radius of cone and torus. \~ + \param[in] radiusB - \ru "Минорный" радиус конуса или тора. + \en "Minor" radius of cone and torus. \~ + \return \ru Дескриптор зарегистрированного объекта. + \en Descriptor of registered object. \~ +*/ +//-- +GCM_FUNC(GCM_geom) GCM_AddGeom( GCM_system gSys, GCM_g_type gType + , const MbMatrix3D & gMat + , double radiusA, double radiusB ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Добавить в подсистему твердого тела (кластера) подчиненный геометрический объект. + \en Include a geometric sub-object to the subsystem of a solid (rigid cluster). \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] sol - \ru Твердое тело или кластер. + \en Solid or rigid cluster. \~ + \param[in] gRec - \ru Запись геометрического подчиненного объекта, заданного в ЛСК тела. + \en Record of geometric sub-object, which is given in LCS of the solid. \~ + \return \ru Дескриптор подчиненного объекта из подмножества тела. + \en Descriptor of sub-object in subset of the solid. \~ +*/ +//--- +GCM_FUNC(GCM_geom) GCM_SubGeom( GCM_system gSys, GCM_geom sol, const GCM_g_record & gRec ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Выдать кластер (тело), в который включен данный геометрический объект. + \en Give a cluster (solid) in which a geometric object is included. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] subGeom -\ru Геометрический объект, принадлежащий кластеру. + \en A geometric object belonging to the cluster.. \~ + \return \ru Дескриптор кластера, которому принадлежит данный геометрический объект. + \en Descriptor of the cluster that owns this geometric object. \~ +*/ +//--- +GCM_FUNC(GCM_geom) GCM_Parent( GCM_system gSys, GCM_geom subGeom ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Тип геометрического объекта. + \en A type of geometric object. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g - \ru Дескриптор геометрического объекта. + \en Descriptor of geometric object \~ + \return \ru Геометрический тип объекта. + \en Geometric type of an object. \~ +*/ +//--- +GCM_FUNC(GCM_g_type) GCM_GeomType( GCM_system gSys, GCM_geom g ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Удалить геометрический объект из системы ограничений. + \en Delete a geometric object from the constraint system. \~ + \param gSys - \ru Система ограничений. + \en System of constraints. \~ + \param g - \ru Дескриптор геометрического объекта. + \en Descriptor of geometric object \~ + \details \ru После применения этой функции дескриптор объекта становится недействительным. + Надо заметить, что удаляемый геометрический объект может все еще участвовать в других + объектах и ограничениях. В этом случае удаляемый объект, хотя и считается удаленным, + фактически продолжает действовать до тех пор, пока другие объекты, связанные с ним, + не будут удалены. + \en After using this function the object descriptor 'g' will be invalidated. + It should be noted that the removed geometric object can still involved in other + objects and constraints. In this case, the object to be deleted, although it is considered + removed actually remains in effect until other objects connected with will be deleted. +*/ +//--- +GCE_FUNC(void) GCM_RemoveGeom( GCM_system gSys, GCM_geom g ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Вернет true, если объект все еще действительный. + \en Returns true if the object is still valid. \~ +*/ +//--- +//GCE_FUNC(bool) GCM_IsValid( GCM_system gSys, GCM_geom g ); + +/* + Defining a system of constraints +*/ + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать бинарное ограничение для пары геометрических объектов. + \en Set a binary constraint for two geometric objects. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g1 - \ru Дескриптор первого объекта. + \en Descriptors of first object. \~ + \param[in] g2 - \ru Дескриптор второго объекта. + \en Descriptors of second object. \~ + \param[in] aVal - \ru Опция выравнивания. + \en Alignment option. \~ + \param[in] tVar - \ru Вариант касания для ограничения c типом 'GCM_TANGENT'. + \en Variant of tangency for constraint of type 'GCM_TANGENT'. \~ + + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + \details + \ru Эта функция применяется для задания в системе бинарного ограничения любого + типа кроме размерных, а именно ограничения следующих типов: GCM_COINCIDENT, GCM_PARALLEL, + GCM_PERPENDICULAR, GCM_TANGENT, GCM_CONCENTRIC, GCM_IN_PLACE. В случае неудавшегося вызова, + функция вернет дескриптор пустого объекта GCM_NULL. + + \en The function is used to set a binary constraint of any type except + dimensional constraints, namely one of the following types: GCM_COINCIDENT, GCM_PARALLEL, + GCM_PERPENDICULAR, GCM_TANGENT, GCM_CONCENTRIC, GCM_IN_PLACE. In a case of failure, + the function returns a handle to an empty object GCM_NULL. \~ +*/ +//--- +GCM_FUNC(GCM_constraint) GCM_AddBinConstraint( GCM_system gSys, GCM_c_type cType + , GCM_geom g1, GCM_geom g2, GCM_alignment aVal = GCM_CLOSEST + , GCM_tan_choice tVar = GCM_TAN_POINT ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение, устанавливающее расстояние между парой геометрических объектов. + \en Set a constraint which specifies distance between a pair of geometric objects. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g1 - \ru Дескриптор первого объекта. + \en Descriptors of first object. \~ + \param[in] g2 - \ru Дескриптор второго объекта. + \en Descriptors of second object. \~ + \param[in] dVal - \ru Значение размера. + \en The value of dimension. \~ + \param[in] aVal - \ru Опция выравнивания. + \en Alignment option. \~ + \return \ru Дескриптор нового ограничения c типом GCM_DISTANCE. + \en Descriptor of the created constraint of type GCM_DISTANCE. \~ + + \details \ru Эта функция создает в системе размерное ограничение с типом GCM_DISTANCE, + которое задает линейный размер между двумя геометрическими объектами. + В случае неудачного вызова, функция вернет дескриптор пустого объекта GCM_NULL. + \en The function creates a dimensional constraint of type GCM_DISTANCE, which + specifies linear dimension between two geometric objects. + In a failed call, the function returns a handle to an empty object GCM_NULL.\~ + + \note \ru Значение dVal может быть знакопеременным для ориентируемых объектов. + \en Value of dVal can be positive as well as negative for oriented objects. \~ +*/ +//--- +GCM_FUNC(GCM_constraint) GCM_AddDistance( GCM_system gSys, GCM_geom g1, GCM_geom g2 + , double dVal, GCM_alignment aVal = GCM_CLOSEST ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение, устанавливающее угол между двумя геометрическими объектами. + \en Set a constraint which specifies angle between a pair of geometric objects. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g1 - \ru Дескриптор первого объекта. + \en Descriptors of first object. \~ + \param[in] g2 - \ru Дескриптор второго объекта. + \en Descriptors of second object. \~ + \param[in] axis - \ru Дескриптор объекта, задающего ось вращения угла. Может быть = GCM_NULL. + \en Descriptor of an object that specifying the rotation axis of angle. It can be GCM_NULL. \~ + \param[in] dVal - \ru Значение размера (радианы). + \en The value of dimension (radians). \~ + \return \ru Дескриптор нового ограничения c типом GCM_ANGLE. + \en Descriptor of the created constraint of type GCM_ANGLE. \~ + + \details \ru Эта функция создает в системе размерное ограничение с типом GCM_ANGLE, + которое задает угол между направлениями двух геометрических объектов. + Если ось вращения axis задана (т.е. != GCM_NULL), то угол имеет планарный + способ измерения (0 ... 2пи). В этом случае направления 'g1' и 'g2' обязаны + лежать в плоскости с нормалью заданной осью axis (оба направления перпендикулярны оси). + В случае неудавшегося вызова, функция вернет дескриптор пустого объекта GCM_NULL. + \en The function creates a dimensional constraint of type GCM_ANGLE, which + specifies angle between the directions of two geometric objects. + If the rotational axis is specified (i.e. != GCM_NULL), the angle has an + planar method of measurement (0 ... 2пи). In this case directions of + 'g1' and 'g2' must lie on a plane which has a normal specified by + the 'axis' parameter (both directions perpendicular to the axis ). + In a failed call, the function returns a handle to an empty object GCM_NULL. \~ +*/ +//--- +GCM_FUNC(GCM_constraint) GCM_AddAngle( GCM_system gSys, GCM_geom g1, GCM_geom g2, GCM_geom axis, double dVal ); +GCM_FUNC(GCM_constraint) GCM_AddAngle( GCM_system gSys, GCM_geom g1, GCM_geom g2, double dVal ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение, устанавливающее радиус геометрического объекта. + \en To create a constraint which specifies a radius of geometric objects. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g1 - \ru Дескриптор геометрического объекта, обладающего ненулевым радиусом. + \en Descriptor of the first object which has nonzero radius. \~ + \return \ru Дескриптор нового ограничения c типом GCM_RADIUS. + \en Descriptor of the created constraint which has a type GCM_RADIUS. \~ + + \details \ru Эта функция позволяет задать радиус геометрического объекта. Изменить величину + радиуса можно с помощью функции #GCM_ChangeDrivingDimension. Удаляется + радиальный размер вызовом функции #GCM_RemoveConstraint. + В случае неудачного вызова, функция вернет дескриптор пустого объекта GCM_NULL. + \en This function allows to specify a radius of the geometric object. To change + radius value use the function #GCM_ChangeDrivingDimension. To remove limitation + on radius of the geometric object use the function #GCM_RemoveConstraint. + In a case of failure, the function returns a handle to an empty object GCM_NULL. \~ +*/ +//--- +GCM_FUNC(GCM_constraint) GCM_FixRadius( GCM_system gSys, GCM_geom g1 ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать управляющий планарный угол между двумя геометрическими объектами. + \en Set a driving planar angle between a pair of geometric objects. \~ + \details \ru Функция аналогична вызову GCM_AddAngle, однако требует ось 'axis', + задающую плоскость откладывания угла. + \en This is the same call GCM_AddAngle, but requires an axis, which defines + a plane in which the angle is measured. \~ +*/ +//--- +GCM_FUNC(GCM_constraint) GCM_AddPlanarAngle( GCM_system gSys, GCM_geom g1, GCM_geom g2 + , GCM_geom axis, double dVal ); + +//---------------------------------------------------------------------------------------- +// Not yet documented +//--- +GCM_FUNC(GCM_constraint) GCM_AddSymmeric( GCM_system gSys, GCM_geom g1, GCM_geom g2 + , GCM_geom plane, GCM_alignment aVal = GCM_NO_ALIGNMENT ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать линейный паттерн. + \en Create a linear pattern constraint. \~ + \details \ru Ограничение "Линейный Паттерн" задаёт закон, согласно которому группа + геометрических объектов, добавленных в этот паттерн с помощью функции + #GCM_AddGeomToPattern, располагается на заданной прямой. Кроме направляющей + прямой, для создания Линейного Паттерна требуется задать геометрический объект, + называемый образцом. Этот объект определяет начало координат (нулевую точку) + направляющей прямой. Таким образом в системе координат направляющей прямой + Линейного Паттерна образец всегда остаётся неподвижным относительно любых + трансляций, поворотов и деформаций. Положение любого добавляемого в паттерн + объекта (копии) определяется его положением на прямой, направленной вдоль + заданной оси, началом координат которой является начало координат ЛСК образца. + \en The Linear Pattern constraint defines the law under which geometric objects + added to this pattern using #GCM_AddGeomToPattern function are located on the + given line (guide line). In addition to the guide line to create a Linear + Pattern constraint it's necessary to specify a geometric object called a + Sample. This object defines the starting point of the guide line of the Linear + Pattern. Thus, Sample always remains stationary relative to any translations, + rotations and deformations in the coordinate system of the Linear Pattern guide + line. The position of any object (called a Copy) to be added to the pattern is + determined by its position on the guide line with the origin coinciding with the + origin of the LCS of the Sample.\~ + \par \ru Порядок удаления + Чтобы удалить Линейный Паттерн целиком нужно воспользоваться функцией + #GCM_RemoveConstraint. При этом не требуется удалять ограничения, созданные при + добавлении новых элементов в паттерн с помощью функции #GCM_AddGeomToPattern: + они будут удалены автоматически. + \en Removal procedure + To remove the Linear Pattern completely It's necessary to use the + #GCM_RemoveConstraint function. There is no need to remove constraints that were + created by the addition of new Copies to the pattern using the function + #GCM_AddGeomToPattern. They will be deleted automatically. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g1 - \ru Дескриптор образца. + \en Descriptor of the sample. \~ + \param[in] g2 - \ru Дескриптор направляющей оси линейного паттерна. + \en Descriptor of the direction axis of the Linear Pattern. \~ + \param[in] align - \ru Опция выравнивания образца относительно направляющей оси. Если задана + опция GCM_ALIGN_WITH_AXIAL_GEOM, то образец g1 будет лежать на направлеющей + прямой(оси) линейного паттерна. + \en Option of alignment of a sample g1 relative to the direction axis. If the + option #GCM_ALIGN_WITH_AXIAL_GEOM is given the sample g1 will be coincident + with the direction line(axis). \~ + \return \ru Дескриптор нового ограничения c типом GCM_LINEAR_PATTERN. + \en Descriptor of the created constraint which has a type GCM_LINEAR_PATTERN. \~ +*/ +// --- +GCM_FUNC(GCM_pattern) GCM_AddLinearPattern( GCM_system gSys, GCM_geom g1, GCM_geom g2, GCM_alignment align=GCM_NO_ALIGNMENT ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать угловой паттерн. + \en Create an angular pattern constraint. \~ + \details \ru Ограничение "Угловой Паттерн" задаёт закон, согласно которому группа + геометрических объектов, добавленных в этот паттерн с помощью функции + #GCM_AddGeomToPattern, располагается на некоторой окружности. Окружность эта + лежит в плоскости перпендикулярной заданной оси, а центр окружности лежит на + этой оси. Кроме оси вращения для создания Углового Паттерна требуется задать + геометрический объект, называемый образцом. Этот объект определяет нулевой угол + и начальный радиус окружности. Таким образом положение любого добавляемого в + паттерн объекта (копии) определяется вращением вокруг заданной оси, начиная от + образца. При этом радиус окружности (расстояние от копии или образца до оси) не + не является константой и может варьироваться (изменяться) в ходе решения. + \en The Angular Pattern constraint defines the law under which geometric objects + added to this pattern using #GCM_AddGeomToPattern function are located on the + given circle. This circle lies in a plane that is perpendicular to the given + axis, and the center of this circle lies on this axis. In addition to the axis + to create an Angular Pattern constraint it's necessary to specify a geometric + object called a Sample. This object defines the zero angle and the initial + radius of the circle for the Angular Pattern. The position of any object (called + a Copy) to be added to the pattern is determined by the rotation around the + given axis, starting from the Sample. The radius of the circle (the distance + from the Copy or the Sample to the axis) is not constant and can vary in the + process of solving the system of equations. \~ + + \par \ru Порядок удаления + Чтобы удалить Угловой Паттерн целиком нужно воспользоваться функцией + #GCM_RemoveConstraint. При этом не требуется удалять ограничения, созданные при + добавлении новых элементов в паттерн с помощью #GCM_AddGeomToPattern: они будут + удалены автоматически. + \en Removal procedure + To remove the Angular Pattern completely It's necessary to use the + #GCM_RemoveConstraint function. There is no need to remove constraints that were + created by the addition of new Copies to the pattern using the function + #GCM_AddGeomToPattern. They will be deleted automatically. \~ + + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] smp - \ru Дескриптор образца. + \en Descriptor of the sample. \~ + \param[in] axial - \ru Дескриптор оси вращения углового паттерна. + \en Descriptor of the rotation axis of the Angular Pattern. \~ + \param[in] align - \ru Опция выравнивания образца относительно направляющей оси. Если задана + опция GCM_ALIGN_WITH_AXIAL_GEOM, то образец 'smp' будет лежать в плоскости + XY направляющего обекта (оси вращения), и если направляющий объект имеет + радиус (например, это окружность), то расстояние от объектов Углового + Паттерна до оси вращения будет равно радиусу направляющего объекта + (например, радиусу окружности). + \en Option of alignment of a sample relative to the direction axis. + If the GCM_ALIGN_WITH_AXIAL_GEOM option is specified sample g1 will lie in + the XY plane of the direction axis object (rotation axis) and if the + direction axis object has a radius (for example, this is a circle) the + distance from the Angle Pattern objects to the rotation axis will be equal + to the radius of the direction axis object (for example, radius of a circle). \~ + \return \ru Дескриптор нового ограничения c типом GCM_ANGULAR_PATTERN. + \en Descriptor of the created constraint which has a type GCM_ANGULAR_PATTERN. \~ +*/ +// --- +GCM_FUNC(GCM_pattern) GCM_AddAngularPattern( GCM_system gSys, GCM_geom smp, GCM_geom axial, GCM_alignment align=GCM_NO_ALIGNMENT ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Добавить геометрический объект в паттерн. + \en Add geometric object to the pattern. \~ + \details \ru Объект, добавляемый в паттерн, назовём копией. + Если копия добавляется в Линейный Паттерн, то требуется указать расстояние от + копии до образца. Оно может быть положительным или отрицательным и определяется + требуемым положением копии относительно образца с учётом направляющей оси. Так + же можно опционально задать выравнивание ЛСК копии относительно ЛСК образца. + Если копия добавляется в Угловой Паттерн, то требуется указать угол поворота + копии относительно образца, вокруг оси вращения паттерна. Так же можно + опционально задать выравнивание копии относительно образца. Возможны 2 типа + выравнивания: GCM_ALIGNED - выравнивание ЛСК копии и образца и GCM_ROTATED - + выравнивание ЛСК копии с ЛСК образца, повёрнутого вокруг оси вращения на тот же + угол, что и копия. + Расстояние (или угол поворота) от образца до копии по умолчанию фиксировано, + но может быть варьируемым при задании соответствующей опции #GCM_scale. + \en Let's call a Copy the object that is added to the pattern. + If the Copy is added to the Linear Pattern it's necessary to specify the + distance from the Copy to the Sample. It can be positive or negative and is + determined by the required position of the Copy relative to the Sample taking + into account the guide axis. It's optionally possible to specify alignment of + the Copy LCS relative to the Sample LCS. + If the Copy is added to the Angular Pattern it's necessary to specify the + angle of rotation of the Copy relative to the Sample around the pattern rotation + axis. It's optionally possible to specify alignment of the Copy relative to the + Sample. There are 2 types of alignment: GCM_ALIGNED - alignment of the local + coordinate systems of the Copy and the Sample, GCM_ROTATED - the alignment of + the local coordinate system of the Copy with the local coordinate system of the + Sample that is rotated around the axis of rotation at the same angle as the Copy. + The distance (or angle of rotation) from the sample to the copy is fixed by default, + but can be varied by specifying the appropriate #GCM_scale option.\~ + + \par \ru Порядок удаления. + Чтобы удалить копию из паттерна используйте функцию #GCM_RemoveConstraint. Если + же вам надо удалить паттерн целиком, то вам не требуется удалять каждую копию из + паттерна, просто удалите паттерн. + \en Removal procedure + To remove a Copy from the pattern use the function #GCM_RemoveConstraint. If + it's necessary to remove the pattern completely there is no need to remove each + copy from the pattern. Just remove the pattern constraint. \~ + + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] ptrn - \ru Дескриптор паттерна, в который добавляем копию. + \en Descriptor of the pattern. \~ + \param[in] geom - \ru Дескриптор добавляемого геометрического объекта (копии). + \en Descriptor of the copy. \~ + \param[in] position - \ru Переменная, задающая положение добавляемой копии в паттерне (расстояние или угол). + \en Variable that specifies the position of the copy in the pattern (distance or angle). \~ + \param[in] align - \ru Опция, задающая выравнивание копии по отношению к образцу. + \en Option that specifies the alignment of copy relative to the sample. \~ + \param[in] scale - \ru Тип масштабирования элемента паттерна. + \en Scaling type of pattern element. \~ + \return \ru Дескриптор нового ограничения c типом GCM_PATTERNED. + \en Descriptor of the created constraint which has a type GCM_PATTERNED. \~ +*/ +// --- +GCM_FUNC(GCM_constraint) GCM_AddGeomToPattern( GCM_system gSys, GCM_pattern ptrn, GCM_geom geom, double position, + GCM_alignment align = GCM_NO_ALIGNMENT, GCM_scale scale = GCM_RIGID ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать ограничение. + \en Set a constraint. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] cRec - \ru Унифицированная запись ограничения. + \en Uniform record of a constraint. \~ + \return \ru Дескриптор нового ограничения. + \en Descriptor of a new constraint. \~ + \details + \ru Эта функция применяется только для автоматического тестирования решателя, + поэтому подробно не документировалась. + \en This function is used only for the automated testing of the solver therefore not documented. +*/ +//--- +GCM_FUNC(GCM_constraint) GCM_AddConstraint( GCM_system gSys, const GCM_c_record & cRec ); + +//---------------------------------------------------------------------------------------- +// Not yet documented +//--- +GCM_FUNC(GCM_geom) GCM_SetDependent( GCM_system gSys, GCM_constraint con, GCM_geom g ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Удалить ограничение из системы. + \en Delete a constraint from the system. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] con - \ru Дескриптор ограничения. + \en Descriptor of constraint. \~ +*/ +//--- +GCE_FUNC(void) GCM_RemoveConstraint( GCM_system gSys, GCM_constraint con ); + + +/* + Fixation and freeing of a geometry +*/ + +//---------------------------------------------------------------------------------------- +// Create fixing constraint of the geom +//--- +GCM_FUNC(GCM_constraint) GCM_FixGeom_( GCM_system gSys, GCM_geom g ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Сделать геометрический объект неподвижным. + \en Set a geometric object fixed. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g - \ru Дескриптор геометрического объекта. + \en Descriptors of geometric object. \~ + + \details + \ru Эта функция делает объект неподвижным лишая его всех степеней свобод. Если геометрический + объект является суб-объектом тела (кластера), то объект замораживается только в рамках кластера, + однако в глобальной системе координат объект имеет такую же свободу как и кластер, + которому он принадлежит. + \en Thе function makes the object fixed depriving it of all degrees of freedom. If the geometric object + is a sub geom of a solid (cluster), the object is frozen only in the framework of the cluster, + but in the global coordinate system the object has the same freedom as the cluster + to which it belongs. + \~ + \note \ru На будущее планируется, что данная функция будет возвращать дескриптор ограничения. + \en In the future this function will be returning a descriptor of constraint, i.e. will create a fixing constraint. \~ + \sa GCM_FreeGeom +*/ +//--- +GCM_FUNC(bool) GCM_FreezeGeom( GCM_system gSys, GCM_geom g ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Освободить объект, зафиксированный методом GCM_FreezeGeom. + \en Set free geometric object fixed by GCM_FreezeGeom call. \~ + \sa GCM_FreezeGeom +*/ +//--- +GCM_FUNC(void) GCM_FreeGeom( GCM_system gSys, GCM_geom g ); + +/* + Evaluating methods +*/ + +//---------------------------------------------------------------------------------------- +/** \brief \ru Вычислить систему ограничений. + \en Calculate the constraint system. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \return \ru Код результата вычислений. + \en Calculation result code. \~ + \details \ru Функция решает задачу ограничений. Задача ограничений формулируется + функциями API геометрического решателя; функции вида GCM_Add_XXXXXXX добавляют новые + объекты, функции вида GCM_Change_XXXXXXX, GCM_Set_XXXXXXX изменяют состояние объектов. + Таким образом, что бы все такие изменения вступили в силу, нужно вызвать + метод #GCM_Evaluate.\n + Алгоритмы GCM_Evaluate учитывают удовлетворенность систем ограничений; если + все ограничения уже решены, то функция не тратит время на вычисления, а + состояние геометрических объектов остается неизменным. + \en The function solves problem of constraints. The problem of constraint is + formulated by API functions of geometric solver; the functions of a kind GCM_Add_XXXXXXX + add a new object, the functions of kinds GCM_Change_XXXXXXX and GCM_Set_XXXXXXX change + a state of objects. Thus, for all changes to take effect it is necessary to call the + method #GCM_Evaluate.\n + The algorithms GCM_Evaluate take into account whether constraint systems are satisfied, + if all constraints have been already solved, then the function does not spend time + for calculations, and the state of geometric objects remains unchanged. \~ +*/ +//--- +GCM_FUNC(GCM_result) GCM_Evaluate( GCM_system gSys ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Получить код результата вычисления ограничения. + \en Get result code of the evaluation of constraint. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] cItem - \ru Дескриптор ограничения, принадлежащего системе gSys. + \en Descriptor of constraint belonging to the system gSys. \~ + \note \ru Если система еще не вычислялась, то функция вернет код GCM_RESULT_None. + \en If the system has not yet been evaluated then the function will return + the code GCM_RESULT_None. \~ + \return \ru Диагностический код хранящийся в системе после последней вызова GCM_Evaluate. + \en Diagnostic code stored in the system after the last call GCM_Evaluate. \~ +*/ +//--- +GCM_FUNC(GCM_result) GCM_EvaluationResult( GCM_system gSys, GCM_constraint cItem ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Выполнить проверку удовлетворенности ограничения. + \en Perform a check that a constraint is satisfied. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] cItem - \ru Дескриптор ограничения. + \en Descriptor of constraint. \~ + \return \ru true, если ограничение удовлетворено. + \en true if a constraint is satisfied. \~ +*/ +//--- +GCM_FUNC(bool) GCM_IsSatisfied( GCM_system gSys, GCM_constraint cItem ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Выдать текущее положение (решение) геометрического объекта. + \en Get current placement (solution) of the geometric object. +*/ +//--- +GCM_FUNC(MbPlacement3D) GCM_Placement( GCM_system gSys, GCM_geom g ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Выдать начало СК геометрического объекта. + \en Get an LCS origin of the geometric object. + \details \ru Функция вернет координаты начала ЛСК объекта. Данный вызов может быть + использован для любых типов геометрии. Например, для окружности данный вызов вернет ее + центр, для плоскости - точку, лежащую на плоскости, для цилиндра - центр основания + цилиндра и т.д. + \en The function returns coordinates of the origin of the LCS. The call can be applied + to any type of geometry. For example, for a circle the call will return its center, + for a plane - it is a point laying on the plane, + for a cylinder - it is a center of its foundation circle and so on. + +*/ +//--- +GCM_FUNC(MbCartPoint3D) GCM_Origin( GCM_system gSys, GCM_geom g ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Текущее значение радиуса геометрического объекта. + \en Current radius value of the geometric object. +*/ +//--- +GCM_FUNC(double) GCM_Radius( GCM_system gSys, GCM_geom g ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Текущее значение "большого" радиуса тора или конуса. + \en Current "major" radius value of torus or cone. +*/ +//--- +GCM_FUNC(double) GCM_RadiusA( GCM_system gSys, GCM_geom g ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Текущее значение "малого" радиуса тора или конуса. + \en Current "minor" radius value of torus or cone. +*/ +//--- +GCM_FUNC(double) GCM_RadiusB( GCM_system gSys, GCM_geom g ); + +/* + Changing methods +*/ + +//---------------------------------------------------------------------------------------- +/** \brief \ru Изменить значение управляющего размера. + \en Change the value of driving dimension. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] dItem - \ru Дескриптор размерного ограничения. + \en Descriptor of dimensional constraint. \~ + \param[in] dVal - \ru Требуемое значение размера. + \en Required value of constraint. \~ + \return \ru Код результата операции. + \en Operation result code. \~ + \details \ru Функция применяется только для управляющих размеров. Если управляющий размер + является угловым, то параметр dVal задается в радианах.\n + Следует учитывать, что настоящая функция не осуществляет вычислений, а только подготавливает + изменение размера. Что бы изменения вступили в силу, необходимо вызвать функцию #GCE_Evaluate. + \en The function is used only for driving dimensions. If the driving dimension + is angular, then the parameter dVal is specified in radians. \n + It should be noted that the function doesn't perform computations but only prepares + the changing of dimension. For the changes to take effect it is required to call + the function #GCM_Evaluate. \~ +*/ +//--- +GCM_FUNC(GCM_result) GCM_ChangeDrivingDimension( GCM_system gSys, GCM_constraint dItem, double dVal ); + +//---------------------------------------------------------------------------------------- +/** \brief \ru Задать текущее положение геометрического объекта. + \en Set current placement of the geometric object. + \note \ru Эта функция только придает объекту новое состояние без переоценки системы + ограничений. Вызов GCM_Evaluate может поменять заданное состояние, если + имеются не удовлетворенные ограничения. + \en The function only impart new state of the object without the revaluation + of constraints. Call GCM_Evaluate can change the given state to satisfy + constraints of this object. \~ +*/ +//--- +GCM_FUNC(void) GCM_SetPlacement( GCM_system gSys, GCM_geom g, const MbPlacement3D & place ); + + +/* + Dragging functions +*/ + +//---------------------------------------------------------------------------------------- +/** + \brief \ru Инициализировать режим перетаскивания объектов в плоскости экрана. + \en Initialize mode of object moving in the screen plane. + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] movGeom - \ru Компонент, деталь, которой манипулируют. + \en Component, part which is manipulated. \~ + \param[in] projPlane - \ru Плоскость экрана, заданная в ГСК сборки. + \en Plane of the screen given in the WCS of assembly. \~ + \param[in] curPnt - \ru Точка, принадлежащая компоненту, которая проецируется на плоскость + экрана в положение курсора, и за которую осуществляется 'перетаскивание'. + curPnt задана в ЛСК геом.объекта movGeom. + \en Point of the component which is projected onto plane of the screen to + cursor position and is 'dragging'. curPnt given in the LCS of + the geometric object movGeom; \~ + \return \ru Код результата. \en Result code. \~ + + \details + \ru Функция запускается однократно перед входом в режим перетаскивания компонент, который управляется + (по движению мыши) через команду #GCM_SolveReposition(GCM_system, const MbCartPoint3D &). Режим + прекращается вызовом любой иной команды, кроме #GCM_PrepareReposition. Также есть специальная + функция для выхода из режима "перетаскивания" - #GCM_FinishReposition, для явного сбрасывания + режима перемещения. + \en The function runs once to start the dragging mode of components, which is controlled + (by movement of the mouse) by the command #GCM_SolveReposition(GCM_system, const MbCartPoint3D &). + Mode is stopped by the calling any other command except #GCM_PrepareReposition. There is also + the special function to exit from the dragging mode explicitly - #GCM_FinishReposition. \~ +*/ +//--- +GCM_FUNC(GCM_result) GCM_PrepareReposition( GCM_system gSys, GCM_geom movGeom, + const MbPlacement3D & projPlane, const MbCartPoint3D & curPnt ); + +/** \brief \ru Инициализировать режим вращения компонента вокруг фиксированной оси. + \en To initialize the rotation mode of the component around a fixed axis. +*/ +GCM_FUNC(GCM_result) GCM_PrepareReposition( GCM_system gSys, GCM_geom rotGeom, const MbCartPoint3D & org, const MbVector3D & axis ); + +/// \ru Завершить режим "перетаскивания". \en Finish the dragging mode. +GCM_FUNC(void) GCM_FinishReposition( GCM_system gSys ); + +/** \brief \ru Выдать объект манипуляции, с которым работает решатель, находясь в режиме вращения/перемещения объектом (драггинг). + \en Get manipulation object with which the Solver works when being in the dragging mode (rotating or moving). +*/ +GCM_FUNC(GCM_geom) GCM_GetMovingGeom( GCM_system gSys ); + +/** + \brief \ru Решить систему для произвольного изменения положения одного тела. + \en Solve the system for an arbitrary change of position of one solid. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] g - \ru Тело, положение которого меняется. + \en Solid, the position of which is changed. \~ + \param[in] newPos - \ru Новое пололожение тела. + \en New position of a solid. \~ + \param[in] movType - \ru Код желаемого поведения + \en Code of the desired behavior \~ + \return \ru Код результата. \en Result code. \~ + + \note \ru Эта функция не позволяет вывести систему сопряжений из состояния решаемости, + кроме случаев, когда до вызова функции система уже находилась в нерешенном + состоянии. Если новое положение 'newPos' не позволяет удовлетворять системе сопряжений, + то новое положение тела окажется наиболее близким к newPos (при сохранении решаемости). + \en This function doesn't allow to take out constraint system from decided state, + except when before call of function the system was already unsolved. If new position + 'newPos' doesn't allow to satisfy the system of constraints, then new position of solid + will be the most nearest to newPos (while preserving solvability). \~ +*/ +GCM_FUNC(GCM_result) GCM_SolveReposition( GCM_system gSys, GCM_geom g, + const MbPlacement3D & newPos, GCM_reposition movType ); + +/** + \brief \ru Решить систему сопряжений для новой позиции курсора в режиме драггинга. + \en Solve the system of constraints for new position of cursor in the dragging mode. + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] curPos - \ru Текущее положение курсора в ГСК. + \en Current position of a cursor in the WCS. \~ + \return \ru Код результата. \en Result code. \~ + + \details \ru Процедура, управляющая режимом перетаскивания, который прекращается вызовом любой иной команды. + \en Procedure that controls dragging mode which are stopped after calling any other command. \~ +*/ +GCM_FUNC(GCM_result) GCM_SolveReposition( GCM_system gSys, const MbCartPoint3D & curPos ); + +/** + \brief \ru Решить систему в режиме драггинга с одно-параметрическим управлением. + \en Solve the system under one-parametric driving in the dragging mode. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] alpha - \ru Управляющий параметр (зачастую задается в радианах). + \en Driving parameter (this is ussualy an angle given in radians). \~ + \return \ru Код результата. \en Result code. \~ + + \details \ru Это функция, управляющая режимом динамического перепозиционирования + (см. #GCM_PrepareReposition), в котором положение тела управляется изменением одной + координаты, например, угла вращения вокруг оси. Режим прекращается вызовом + #GCM_FinishReposition или любой иной командой, меняющей состояние решетеля, например, + #GCM_AddConstraint. + \en This function controls dynamic reposition mode (see #GCM_PrepareReposition), + in which the position of the solid is driven by changing one coordinate. For example + the angle of rotation around an axis. Mode is stopped by calling #GCM_FinishReposition + or any other command, which is changes state of the Solver, for example #GCM_AddConstraint. + \~ +*/ +GCM_FUNC(GCM_result) GCM_SolveReposition( GCM_system gSys, double alpha ); + +/* + Journaling functions +*/ + +//---------------------------------------------------------------------------------------- +/** + \brief \ru Включить журналирование и назначить файл для записи журнала вызовов API. + \en Switch on the journaling and specify the file for recording a journal of GCE API calls. \~ + \param[in] gSys - \ru Система ограничений. + \en System of constraints. \~ + \param[in] fName - \ru Имя файла назначения с полным путем. + \en Name of destination file with a full path. \~ + \return true, if journaling has been successfully switched on. + + \attention + \ru Файл журнала будет записан только после завершения сеанса работы с системой + ограничений, а именно сразу после вызова GCM_RemoveSystem. + \en The journal file will be written only when a session of work with the + constraint system is finished, i.e. immediately after calling the + GCM_RemoveSystem method. + \ru Добавление записей в журнал из параллельного кода не происходит. + \en Adding records to the journal from parallel code does not occur. +*/ +//--- +GCE_FUNC(bool) GCM_SetJournal( GCM_system gSys, const char * fName ); + + +/** \} */ // GCM_3D_API + +struct GCT_diagnostic_pars; +//---------------------------------------------------------------------------------------- +/* + It's used for testing purposes only. +*/ +//--- +GCM_FUNC(const GCT_diagnostic_pars &) GCM_DiagnosticPars( GCM_system gSys ); + +//---------------------------------------------------------------------------------------- +// Use GCM_FreezeGeom instead this (2019). +//--- +GCM_FUNC(void) GCM_FixGeom( GCM_system gSys, GCM_geom g ); + +//---------------------------------------------------------------------------------------- +// Deprecated +//--- +GCM_FUNC(bool) GCM_IsFixed( GCM_system gSys, GCM_geom g ); + + +#endif // __GCM_API_H + +// eof diff --git a/C3d/Include/gcm_constraint.h b/C3d/Include/gcm_constraint.h index 703cdd7..e679e97 100644 --- a/C3d/Include/gcm_constraint.h +++ b/C3d/Include/gcm_constraint.h @@ -30,7 +30,7 @@ struct GCM_geom_axis ItGeomPtr geomPtr; ///< \ru Тело, которому принадлежит ось планарного угла. \en solid the axis of a planar angle belongs to. GCM_geom_axis() : axis( MbVector3D::zero ) - , geomPtr( NULL ) {} + , geomPtr( c3d_null ) {} }; //---------------------------------------------------------------------------------------- @@ -131,7 +131,7 @@ public: /* \en Callback function which defines a law of positioning of the first geometric object which is dependent on positions of other objects. */ - virtual GCM_dependent_func Function() const { return NULL; } + virtual GCM_dependent_func Function() const { return c3d_null; } virtual GCM_extra_param ExtraParam() const { return GCM_extra_param(); } public: /* @@ -309,7 +309,7 @@ inline void ItConstraintItem::GetParams( GCM_c_params & pars ) const //--- inline ItGeomPtr ItConstraintItem::DependentGeom() const { - return (ConstraintType() == GCM_DEPENDENT) ? GeomItem(1) : NULL; + return (ConstraintType() == GCM_DEPENDENT) ? GeomItem(1) : c3d_null; } //---------------------------------------------------------------------------------------- @@ -320,18 +320,18 @@ inline ItGeomPtr ItConstraintItem::DependentGeom() const //--- struct ItMateTransmission { - enum Motion ///< \ru Тип движения \en Type of motion + enum Motion ///< \ru Тип движения. \en Type of motion. { - NoDefined, ///< \ru Не задано \en Not specified - Translation, ///< \ru Линейное перемещение \en Linear increment - Rotation, ///< \ru Вращение \en Rotation + NoDefined, ///< \ru Не задано. \en Not specified. + Translation, ///< \ru Линейное перемещение. \en Linear increment. + Rotation, ///< \ru Вращение. \en Rotation. }; /// \ru Выдать первое или второе тело (nb -номер тела 1,2); \en Get the first or the second solid (ng is the number of solid 1,2); virtual ItGeomPtr GetGeom( short nb ) const = 0; /// \ru Выдать первое или второе тело, задающее направление вращения/перемещения (nb - номер тела 1,2); \en Get the first or the second solid specifying the direction of rotation/translation (nb is the number of solid 1,2); virtual ItGeomPtr GetDirectionGeom( short nb ) const = 0; - /// \ru Выдать направление и тип движения для первого или второго тела, axis задается в ЛСК тела GetDirectionGeom(); \en Get direction and type of motion for the first or the second solid, axis is specified in LCS of solid GetDirectionGeom(); + /// \ru Выдать направление и тип движения для первого или второго тела, axis задается в ЛСК тела GetDirectionGeom(). \en Get direction and type of motion for the first or the second solid, axis is specified in LCS of solid GetDirectionGeom(). virtual Motion GetAxis( short nb, MbAxis3D & axis ) const = 0; /// \ru Выдать соотношение N1:N2; \en Get ratio N1:N2; virtual double GetRatio() const = 0; @@ -474,7 +474,7 @@ GCM_FUNC(void) PrevSolution( GCM_alignment & ); //--- inline ItGeomPtr ItConstraintItem::_GArg( int geomN ) const { - return size_t(geomN-1) < m_args.size() ? m_args[geomN-1] : ItGeomPtr( NULL ); + return size_t(geomN-1) < m_args.size() ? m_args[geomN-1] : ItGeomPtr( c3d_null ); } //---------------------------------------------------------------------------------------- diff --git a/C3d/Include/gcm_geom.h b/C3d/Include/gcm_geom.h index 646c62b..7c70d77 100644 --- a/C3d/Include/gcm_geom.h +++ b/C3d/Include/gcm_geom.h @@ -130,12 +130,12 @@ class MtParGeom; class GCM_CLASS MtGeomVariant { public: - MtGeomVariant() : m_value( NULL ) {} + MtGeomVariant() : m_value( c3d_null ) {} MtGeomVariant( const MbCartPoint3D & ); MtGeomVariant( const MtGeomVariant & ); - MtGeomVariant( const MtParGeom & g ) : m_value( NULL ) { Assign(g); } + MtGeomVariant( const MtParGeom & g ) : m_value( c3d_null ) { Assign(g); } MtGeomVariant( const GCM_g_type ); - MtGeomVariant( MtParGeom & g ) : m_value( NULL ) { Share(g); } + MtGeomVariant( MtParGeom & g ) : m_value( c3d_null ) { Share(g); } MtGeomVariant & operator = ( const MtGeomVariant & gVar ) { return Assign( gVar ); } ~MtGeomVariant(); @@ -230,9 +230,9 @@ private: public: MtMatingGeometry() - : myGeom( NULL ) + : myGeom( c3d_null ) , myOrientation( Unoriented ) - , myLCSMatrix( NULL ) + , myLCSMatrix( c3d_null ) {} ~MtMatingGeometry() { @@ -244,7 +244,7 @@ public: MtGeomType GetGeomType() const { return myGeomType; } /// \ru Выдать ориентацию; \en Get orientation; Orient GetOrientation() const { return myOrientation; } - /// \ru Выдать геометрический объект сопряжения. Если =NULL, то это точка, заданная MtMatingGeometry::myMatingPoint; \en Get geometric object of the mating. If =NULL, then this is a point specified by MtMatingGeometry::myMatingPoint; + /// \ru Выдать геометрический объект сопряжения. Если =c3d_null, то это точка, заданная MtMatingGeometry::myMatingPoint; \en Get geometric object of the mating. If =c3d_null, then this is a point specified by MtMatingGeometry::myMatingPoint; const MbSpaceItem * GetMatingGeom() const { return myGeom; } /// \ru Выдать матрицу ЛСК, в которой задан геометрический объект сопряжения \en Get matrix of LCS in which the geometric object of the mating is specified const MbMatrix3D & LCSMatrix() const; @@ -314,7 +314,7 @@ private: // \ru Реализовать при необходимости \en Imp //--- inline const MbMatrix3D & MtMatingGeometry::LCSMatrix() const { - if ( myLCSMatrix != NULL ) + if ( myLCSMatrix != c3d_null ) return *myLCSMatrix; return MbMatrix3D::identity; } @@ -371,7 +371,7 @@ inline void MtMatingGeometry::SetAsMarker( const MbCartPoint3D & org, const MbVe inline void MtMatingGeometry::SetAsLCS( const MbPlacement3D & lcs ) { myGeomType = GCM_LCS; - myGeom = NULL; // new MbMarker( MbCartPoint::origin, MbVector3D::zAxis, MbVector3D::xAxis ); + myGeom = c3d_null; // new MbMarker( MbCartPoint::origin, MbVector3D::zAxis, MbVector3D::xAxis ); myOrientation = Unoriented; _SetLCSMatrix( lcs.GetMatrixFrom() ); } @@ -397,11 +397,11 @@ inline void MtMatingGeometry::SetAsMatingGeomItem( SPtr gIte //--- inline void MtMatingGeometry::_ClearMatrix() { - if ( myLCSMatrix != NULL ) + if ( myLCSMatrix != c3d_null ) { delete myLCSMatrix; } - myLCSMatrix = NULL; + myLCSMatrix = c3d_null; } //---------------------------------------------------------------------------------------- @@ -415,7 +415,7 @@ inline void MtMatingGeometry::_SetLCSMatrix( const MbMatrix3D & gSpan ) } else { - if ( myLCSMatrix == NULL ) + if ( myLCSMatrix == c3d_null ) myLCSMatrix = new MbMatrix3D( gSpan ); else *myLCSMatrix = gSpan; @@ -428,7 +428,7 @@ inline void MtMatingGeometry::_SetLCSMatrix( const MbMatrix3D & gSpan ) inline void MtMatingGeometry::SetNull() { myGeomType = GCM_NULL_GTYPE; - myGeom = NULL; + myGeom = c3d_null; myOrientation = Unoriented; _ClearMatrix(); } diff --git a/C3d/Include/gcm_mates_generator.h b/C3d/Include/gcm_mates_generator.h index 5a0edee..654e690 100644 --- a/C3d/Include/gcm_mates_generator.h +++ b/C3d/Include/gcm_mates_generator.h @@ -1,310 +1,310 @@ -////////////////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru Тестовый генератор 3D-сопряжений - \en Test generator of 3D-mates \~ -*/ -////////////////////////////////////////////////////////////////////////////////////////// - -#ifndef __GCM_MATES_GENERATOR_H -#define __GCM_MATES_GENERATOR_H - -#include -#include -#include -#include -#include -#include - -#include - -class MtGeomSolver; - -//---------------------------------------------------------------------------------------- -// Параметры сопряжений. -// --- -struct TMParameters -{ - typedef GCM_alignment AlignCondition; - - GCM_c_type matetype; // Constraint type. - GCM_alignment align; // Alignment condition. - double realpar; // Dimension value. - - TMParameters( AlignCondition al, MtMateType mtype, double par = 0. ) - : align ( al ) - , matetype( mtype ) - , realpar ( par ) - {} - TMParameters( GCM_c_type mtype, double par = 0.0, GCM_alignment al = GCM_NO_ALIGNMENT ) - : align ( al ) - , matetype( mtype ) - , realpar ( par ) - {} -}; - -//---------------------------------------------------------------------------------------- -/// \ru Размеры кирпича. \en Box sizes. -// --- -struct TMBoxSize -{ -public: - double length; ///< \ru Длина (вдоль OX). \en Length (along OX). - double width; ///< \ru Ширина (вдоль OY). \en Width (along OY). - double height; ///< \ru Высота (вдоль OZ). \en Height (along OZ). - double radius; ///< \ru Радиус отверстия посередине. Если < MIN_RADIUS, значит сплошной кирпич без отверстий. \en Radius of hole in the middle. If < MIN_RADIUS therefore a solid box without holes. - -public: - TMBoxSize() - : length( 30. ) - , width ( 60. ) - , height( 90. ) - , radius( 20. ) - {} - - TMBoxSize( double l, double w, double h, double r ) - : length( l ) - , width ( w ) - , height( h ) - , radius( r ) - {} -}; - -//---------------------------------------------------------------------------------------- -// \ru Элементарный кирпич для наложения сопряжений. \en Elementary box for the overlay of mates. -// --- -class MATH_CLASS TMBox : public ItGeom - , public MtRefItem -{ -public: - enum MateMarker ///< \ru маркер для наложения сопряжения. \en marker for overlay of mate. - { - front, - back, - left, - right, - up, - down, - axis, - distance - }; - -private: - MbPlacement3D place; // \ru ЛСК кирпича. \en LCS of box. - TMBoxSize size; // \ru Размер кирпича. \en Box size. - c3d::mt_string name; // \ru Имя. \en Name. - -public: - TMBox( const MbPlacement3D & p, const TMBoxSize & sz, const c3d::mt_char * n = _T("B") ); // \ru Конструктор. \en Constructor. - -public: - /// \ru Задать новую ЛСК. \en Set the new LCS. - void SetPlacement( const MbPlacement3D & p ) { place.Init( p ); } - void SetName( const c3d::mt_char * n ) { name = n; } // \ru Задать имя. \en Set the name. - double Length() const { return size.length; } // \ru Выдать длину. \en Get the length. - double Width() const { return size.width; } // \ru Выдать ширину. \en Get the width. - double Height() const { return size.height; } // \ru Выдать высоту. \en Get the height. - double Radius() const { return size.radius; } // \ru Выдать радиус. \en Get the radius. - bool IsHoled() const { return size.radius > c3d::MIN_RADIUS - GcPrecision::lengthRegion; } // \ru С цилиндром ли кирпич. \en Whether there is a hole. - MbVector3D CylinderAxis() const { return place.GetAxisX(); } // \ru выдать ось цилиндра. \en Get the cylinder axis. - -public: // Реализация ItGeom - - /// \ru Выдать положение объекта ItGeom; \en Get position of ItGeom object; - virtual void GetPlacement( MbPlacement3D & p ) const { p.Init(place); } - /// \ru Выдать null-terminated строку имени геометрического объекта \en Get null-terminated name string of geometric object - virtual const c3d::mt_char * GetName() const { return name.c_str(); } - virtual refcount_t AddRef() const { return MtRefItem::AddRef(); } - virtual refcount_t Release() const { return MtRefItem::Release(); } - -private: - TMBox(); - TMBox( const TMBox & ); - TMBox & operator = ( const TMBox & ); -}; - - -//---------------------------------------------------------------------------------------- -// \ru Наложение сопряжения на 2 кирпича. \en Overlaying mate onto two boxes. -// --- -class MATH_CLASS MtBoxConstraint : public MtRefItem - , public ItConstraintItem -{ - SPtr box1; // \ru Кирпич 1. \en Box 1. - SPtr box2; // \ru Кирпич 2. \en Box 2. - TMBox::MateMarker side1; // \ru Маркер сопряжения 1. \en Marker of mate 1. - TMBox::MateMarker side2; // \ru Маркер сопряжения 2. \en Marker of mate 2. - GCM_alignment aligncond; // \ru Условие выравнивания. \en Condition of alignment. - MtMateType matetype; // \ru Тип сопряжения. \en The mate type. - double realpar; // \ru Расстояние. \en Distance. - MtResultCode3D rescode; // \ru Коды ошибки сопряжения. \en Error code of mate. - -public: - MtBoxConstraint( TMBox & b1, TMBox::MateMarker s1, TMBox & b2, TMBox::MateMarker s2, TMParameters ); - -public: // \ru Запросы (const-методы) \en Requests (const-methods) - virtual GCM_alignment AlignType() const { return aligncond; } // \ru Выдать параметр условия выравнивания \en Get the parameter of alignment condition - virtual GCM_angle_type AngleType() const { return GCM_NONE_ANGLE; } // \ru Выдать тип угла (3D или планарный) \en Get the angle type (3D or planar) - virtual GCM_geom_axis AxisOfPlanarAngle() const { return GCM_geom_axis(); } // \ru Выдать ось для планарного углового сопряжения, заданную в ЛСК некоторого тела \en Get the axis for planar angular mate. Axis is given in the LCS of some solid - virtual MbVector3D AxisOf3DAngleType() const { return MbVector3D::zero; } // \ru Взять ось для планарного углового сопряжения \en Get the axis for planar angular mate - virtual MtMateType ConstraintType() const { return matetype; } // \ru Выдать тип сопряжения \en Get the mate type - virtual ItGeomPtr GeomItem( int nb ) const { return (nb==1)? box1.get(): box2.get(); } // \ru Выдать первый сопрягаемый объект \en Get the first mating object - virtual double DimParameter() const { return realpar; } // \ru Выдать вещественный параметр \en Get the real parameter - virtual GCM_tan_choice TangencyChoice() const { return GCM_TAN_NONE; } // \ru Выдать вариант касания \en Get the tangency choice - /// \ru Диагностический код ошибки, прикрепленный к данному ограничению. \en Diagnostic error code attached to this constraint. - virtual MtResultCode3D ErrorCode() const { return rescode; } - virtual VERSION Version() const { return GetCurrentMathFileVersion(); } // \ru Выдать версию сопряжения, которая совпадает с версией потока \en Get the mate version which same as the stream version - -public: - void SetDistance( double dist ) { realpar = dist; } - -public: // \ru Методы для обратной связи (задающие) \en Callback methods - /// \ru Задать код ошибки для неудовлетворенного сопряжения \en Set the error code for unsatisfied mate - virtual void SetErrorCode( MtResultCode3D res ) { rescode = res; } - /// \ru Задать ось для углового сопряжения с трехмерным типом измерения; \en Set axis for angular mate with three-dimensional type of dimension; - virtual void SetAxisOf3DAngleType( const MbVector3D & /*axis*/ ) { /*planarang.axis = axis;*/ } - -public: // \ru Методы для Smart-указателей \en The methods for Smart-pointers - virtual refcount_t AddRef() const { return MtRefItem::AddRef(); } - virtual refcount_t Release() const { return MtRefItem::Release(); } - -private: - virtual MtGeomVariant _LinkageItem( int geomNb ) const; - -private: - MtBoxConstraint(); - MtBoxConstraint( const MtBoxConstraint & ); - MtBoxConstraint & operator = ( const MtBoxConstraint & ); -}; - -//---------------------------------------------------------------------------------------- -// \ru Земля. \en Ground. -// --- -class MATH_CLASS TMGround : public ItGeom - , public MtRefItem -{ -private: - MbPlacement3D place; - -public: - explicit TMGround( const MbPlacement3D & p ); - -public: - /// \ru Выдать null-terminated строку имени геометрического объекта \en Get null-terminated name string of geometric object - virtual const TCHAR * GetName() const; - virtual refcount_t AddRef() const { return MtRefItem::AddRef(); } - virtual refcount_t Release() const { return MtRefItem::Release(); } - -private: - /// \ru Выдать положение объекта ItGeom; \en Get position of ItGeom object; - virtual void GetPlacement( MbPlacement3D & p ) const { p.Init(place); } - -private: - TMGround(); - TMGround( const TMGround & ); - TMGround & operator = ( const TMGround & ); -}; - -//---------------------------------------------------------------------------------------- -// \ru Управление положением в сборке. \en Position control in the assembly. -// --- -struct MATH_CLASS TMBoxPositioner : public MtRefItem - , public ItPositionManager -{ -private: - TMGround & ground; - -public: - explicit TMBoxPositioner( TMGround & ); - TMBoxPositioner( const TMBoxPositioner & ); - -public: - /// \ru Установить новое положение объекта \en Set new position of the object - virtual void Reposition( ItGeom & geom, const MbPlacement3D & pos ); - /// \ru Выдать геометрический объект-земля, со степенью свободы = 0 (жёстко привязанный к ГСК); \en Get geometric object- ground with the degree of freedom = 0 (hard bound to GCS); - virtual ItGeom & GetGround() const { return ground; } - /// \ru Выдать характер связи для пары сопрягаемых тел (направленность соединения) \en Get the link character for pair of mating solids (direct connection) - virtual GCM_dependency GetJointStatus( const ItGeom &, const ItGeom & ) const { return GCM_NO_DEPENDENCY; } - virtual refcount_t AddRef() const { return MtRefItem::AddRef(); } - virtual refcount_t Release() const { return MtRefItem::Release(); } - -private: - TMBoxPositioner(); - TMBoxPositioner & operator = ( const TMBoxPositioner & ); -}; - -typedef std::vector > MtBoxVector; -typedef std::vector MtBlocksVector; - -//---------------------------------------------------------------------------------------- -/// \ru Генератор сборок. \en Assembly generator. -// --- -class MATH_CLASS AssemblyGenerator -{ -public: - enum TMMateType ///< \ru Тип связи между блоками в сборке. \en Type of connection between the bricks in the assembly. - { - tmt_Rigid1Brick = 1, - tmt_Rigid3Bricks, - tmt_Rigid2Axis, - tmt_NonRigid2Axis, - tmt_NonRigidAxisDist, - tmt_NonRigidAxis - }; - - enum TMBrickMateType ///< \ru Тип связи между кирпичами. \en Type of connection between the boxes. - { - tbmt_1Mate = 1, ///< \ru Совпадение протипоположных плоскостей. \en Coincidence of opposite planes. - tbmt_2Mate = 2, ///< \ru Совпадение протипоположных плоскостей + 1-ой пары сонаправленных. \en Coincidence of opposite planes + 1-pair of codirected. - tbmt_3Mate = 3, ///< \ru Совпадение протипоположных плоскостей + 2-ух пар сонаправленных (жесткая связь). \en Coincidence of opposite planes + 2-pairs of codirected (hard link). - tbmt_Rigid = tbmt_3Mate ///< \ru Жесткая связь. \en Rigid link. - }; - -public: - std::list > dimConstrs; - -private: - MtGeomSolver & manager; ///< \ru Решатель сборки. \en Solver of the assembly. - -public: - AssemblyGenerator( MtGeomSolver & m ) : manager( m ), dimConstrs() {} - -private: - AssemblyGenerator(); - AssemblyGenerator( const AssemblyGenerator & ); - AssemblyGenerator & operator = ( const AssemblyGenerator & ); - -public: - /// \ru Сгенерировать линию из кирпичей. \en Generate a line from boxes. - size_t GenerateLine( MtBoxVector & line, size_t n, TMBrickMateType mttype = tbmt_Rigid ); - /// \ru Сгенерировать стенку из кирпичей. \en Generate a wall from boxes. - size_t GenerateWall( MtBoxVector & wall, size_t n, TMBrickMateType mttype = tbmt_Rigid ); - /// \ru Сгенерировать куб из кирпичей. \en Generate a cube from boxes. - size_t GenerateCube( MtBoxVector & cube, size_t n, TMBrickMateType mttype = tbmt_Rigid ); - /// \ru Сгенерировать фрактал. \en Generate fractal. - size_t GenerateFractal( MtBlocksVector & fractal, size_t n, TMMateType mttype = tmt_Rigid3Bricks, TMBrickMateType bmttype = tbmt_3Mate ); - /// \ru Сгенерировать нежестко сопряженную сборку с распределенными степенями свободы. \en Generate a non-rigid mating assembly with distributed degrees of freedom. - size_t NonRigidDistributedDoF( MtBlocksVector & assembly, size_t nBlocks - , TMMateType mttype = tmt_NonRigidAxis, TMBrickMateType bmttype = tbmt_3Mate ); - /// \ru Сгенерировать жестко сопряженную сборку с распределенными степенями свободы. \en Generate a rigid mating assembly with distributed degrees of freedom. - size_t RigidDistributedDoF( MtBlocksVector & assembly, size_t nRings, size_t nBlocksInRing - , TMMateType matetype = tmt_Rigid2Axis, TMBrickMateType bmttype = tbmt_3Mate, double dist = 0. ); - - /// \ru Передвинуть кирпичи. \en Shift boxes. - void ShiftBoxes( MtBoxVector & boxes, const MbVector3D & shift, bool comulative, bool shiftfirst = false ); - /// \ru Передвинуть блоки. \en Shift blocks. - void ShiftBoxes( MtBlocksVector & boxes, const MbVector3D & shift, bool comulative, bool shiftfirst = false ); - /// \ru Повернуть кирпичи. \en Rotate boxes. - void RotateBoxes( MtBoxVector & boxes, const MbVector3D & angles, bool comulative ); - /// \ru Повернуть блоки. \en Rotate blocks. - void RotateBoxes( MtBlocksVector & boxes, const MbVector3D & angles, bool comulative ); - -private: - /// \ru Сгенерировать N кирпичей. \en Generate N boxes. - void GenerateNBoxes( MtBoxVector & boxes, size_t n, const TMBoxSize & size ) const; - void SetBoxesNames( const MtBoxVector & boxes ); // \ru Задать имена кирпичей. \en Set names for boxes. - size_t CreateBlock( MtBoxVector & block, TMBrickMateType bmttype, bool solve = true ); // \ru Создать блок. \en Create a block. - void GetFractal( size_t & mtCnt, MtBlocksVector & boxes, size_t nBlocks, TMMateType mttype, TMBrickMateType bmttype, size_t ind = 0 ); // \ru Создать фрактал. \en Create a fractal. -}; - -#endif // __GCM_MATES_GENERATOR_H +////////////////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Тестовый генератор 3D-сопряжений + \en Test generator of 3D-mates \~ +*/ +////////////////////////////////////////////////////////////////////////////////////////// + +#ifndef __GCM_MATES_GENERATOR_H +#define __GCM_MATES_GENERATOR_H + +#include +#include +#include +#include +#include +#include + +#include + +class MtGeomSolver; + +//---------------------------------------------------------------------------------------- +// Параметры сопряжений. +// --- +struct TMParameters +{ + typedef GCM_alignment AlignCondition; + + GCM_c_type matetype; // Constraint type. + GCM_alignment align; // Alignment condition. + double realpar; // Dimension value. + + TMParameters( AlignCondition al, MtMateType mtype, double par = 0. ) + : align ( al ) + , matetype( mtype ) + , realpar ( par ) + {} + TMParameters( GCM_c_type mtype, double par = 0.0, GCM_alignment al = GCM_NO_ALIGNMENT ) + : align ( al ) + , matetype( mtype ) + , realpar ( par ) + {} +}; + +//---------------------------------------------------------------------------------------- +/// \ru Размеры кирпича. \en Box sizes. +// --- +struct TMBoxSize +{ +public: + double length; ///< \ru Длина (вдоль OX). \en Length (along OX). + double width; ///< \ru Ширина (вдоль OY). \en Width (along OY). + double height; ///< \ru Высота (вдоль OZ). \en Height (along OZ). + double radius; ///< \ru Радиус отверстия посередине. Если < MIN_RADIUS, значит сплошной кирпич без отверстий. \en Radius of hole in the middle. If < MIN_RADIUS therefore a solid box without holes. + +public: + TMBoxSize() + : length( 30. ) + , width ( 60. ) + , height( 90. ) + , radius( 20. ) + {} + + TMBoxSize( double l, double w, double h, double r ) + : length( l ) + , width ( w ) + , height( h ) + , radius( r ) + {} +}; + +//---------------------------------------------------------------------------------------- +// \ru Элементарный кирпич для наложения сопряжений. \en Elementary box for the overlay of mates. +// --- +class MATH_CLASS TMBox : public ItGeom + , public MtRefItem +{ +public: + enum MateMarker ///< \ru маркер для наложения сопряжения. \en marker for overlay of mate. + { + front, + back, + left, + right, + up, + down, + axis, + distance + }; + +private: + MbPlacement3D place; // \ru ЛСК кирпича. \en LCS of box. + TMBoxSize size; // \ru Размер кирпича. \en Box size. + c3d::mt_string name; // \ru Имя. \en Name. + +public: + TMBox( const MbPlacement3D & p, const TMBoxSize & sz, const c3d::mt_char * n = _T("B") ); // \ru Конструктор. \en Constructor. + +public: + /// \ru Задать новую ЛСК. \en Set the new LCS. + void SetPlacement( const MbPlacement3D & p ) { place.Init( p ); } + void SetName( const c3d::mt_char * n ) { name = n; } // \ru Задать имя. \en Set the name. + double Length() const { return size.length; } // \ru Выдать длину. \en Get the length. + double Width() const { return size.width; } // \ru Выдать ширину. \en Get the width. + double Height() const { return size.height; } // \ru Выдать высоту. \en Get the height. + double Radius() const { return size.radius; } // \ru Выдать радиус. \en Get the radius. + bool IsHoled() const { return size.radius > c3d::MIN_RADIUS - GcPrecision::lengthRegion; } // \ru С цилиндром ли кирпич. \en Whether there is a hole. + MbVector3D CylinderAxis() const { return place.GetAxisX(); } // \ru выдать ось цилиндра. \en Get the cylinder axis. + +public: // Реализация ItGeom + + /// \ru Выдать положение объекта ItGeom; \en Get position of ItGeom object; + virtual void GetPlacement( MbPlacement3D & p ) const { p.Init(place); } + /// \ru Выдать null-terminated строку имени геометрического объекта \en Get null-terminated name string of geometric object + virtual const c3d::mt_char * GetName() const { return name.c_str(); } + virtual refcount_t AddRef() const { return MtRefItem::AddRef(); } + virtual refcount_t Release() const { return MtRefItem::Release(); } + +private: + TMBox(); + TMBox( const TMBox & ); + TMBox & operator = ( const TMBox & ); +}; + + +//---------------------------------------------------------------------------------------- +// \ru Наложение сопряжения на 2 кирпича. \en Overlaying mate onto two boxes. +// --- +class MATH_CLASS MtBoxConstraint : public MtRefItem + , public ItConstraintItem +{ + SPtr box1; // \ru Кирпич 1. \en Box 1. + SPtr box2; // \ru Кирпич 2. \en Box 2. + TMBox::MateMarker side1; // \ru Маркер сопряжения 1. \en Marker of mate 1. + TMBox::MateMarker side2; // \ru Маркер сопряжения 2. \en Marker of mate 2. + GCM_alignment aligncond; // \ru Условие выравнивания. \en Condition of alignment. + MtMateType matetype; // \ru Тип сопряжения. \en The mate type. + double realpar; // \ru Расстояние. \en Distance. + MtResultCode3D rescode; // \ru Коды ошибки сопряжения. \en Error code of mate. + +public: + MtBoxConstraint( TMBox & b1, TMBox::MateMarker s1, TMBox & b2, TMBox::MateMarker s2, TMParameters ); + +public: // \ru Запросы (const-методы) \en Requests (const-methods) + virtual GCM_alignment AlignType() const { return aligncond; } // \ru Выдать параметр условия выравнивания \en Get the parameter of alignment condition + virtual GCM_angle_type AngleType() const { return GCM_NONE_ANGLE; } // \ru Выдать тип угла (3D или планарный) \en Get the angle type (3D or planar) + virtual GCM_geom_axis AxisOfPlanarAngle() const { return GCM_geom_axis(); } // \ru Выдать ось для планарного углового сопряжения, заданную в ЛСК некоторого тела \en Get the axis for planar angular mate. Axis is given in the LCS of some solid + virtual MbVector3D AxisOf3DAngleType() const { return MbVector3D::zero; } // \ru Взять ось для планарного углового сопряжения \en Get the axis for planar angular mate + virtual MtMateType ConstraintType() const { return matetype; } // \ru Выдать тип сопряжения \en Get the mate type + virtual ItGeomPtr GeomItem( int nb ) const { return (nb==1)? box1.get(): box2.get(); } // \ru Выдать первый сопрягаемый объект \en Get the first mating object + virtual double DimParameter() const { return realpar; } // \ru Выдать вещественный параметр \en Get the real parameter + virtual GCM_tan_choice TangencyChoice() const { return GCM_TAN_NONE; } // \ru Выдать вариант касания \en Get the tangency choice + /// \ru Диагностический код ошибки, прикрепленный к данному ограничению. \en Diagnostic error code attached to this constraint. + virtual MtResultCode3D ErrorCode() const { return rescode; } + virtual VERSION Version() const { return GetCurrentMathFileVersion(); } // \ru Выдать версию сопряжения, которая совпадает с версией потока \en Get the mate version which same as the stream version + +public: + void SetDistance( double dist ) { realpar = dist; } + +public: // \ru Методы для обратной связи (задающие) \en Callback methods + /// \ru Задать код ошибки для неудовлетворенного сопряжения \en Set the error code for unsatisfied mate + virtual void SetErrorCode( MtResultCode3D res ) { rescode = res; } + /// \ru Задать ось для углового сопряжения с трехмерным типом измерения; \en Set axis for angular mate with three-dimensional type of dimension; + virtual void SetAxisOf3DAngleType( const MbVector3D & /*axis*/ ) { /*planarang.axis = axis;*/ } + +public: // \ru Методы для Smart-указателей \en The methods for Smart-pointers + virtual refcount_t AddRef() const { return MtRefItem::AddRef(); } + virtual refcount_t Release() const { return MtRefItem::Release(); } + +private: + virtual MtGeomVariant _LinkageItem( int geomNb ) const; + +private: + MtBoxConstraint(); + MtBoxConstraint( const MtBoxConstraint & ); + MtBoxConstraint & operator = ( const MtBoxConstraint & ); +}; + +//---------------------------------------------------------------------------------------- +// \ru Земля. \en Ground. +// --- +class MATH_CLASS TMGround : public ItGeom + , public MtRefItem +{ +private: + MbPlacement3D place; + +public: + explicit TMGround( const MbPlacement3D & p ); + +public: + /// \ru Выдать null-terminated строку имени геометрического объекта \en Get null-terminated name string of geometric object + virtual const TCHAR * GetName() const; + virtual refcount_t AddRef() const { return MtRefItem::AddRef(); } + virtual refcount_t Release() const { return MtRefItem::Release(); } + +private: + /// \ru Выдать положение объекта ItGeom; \en Get position of ItGeom object; + virtual void GetPlacement( MbPlacement3D & p ) const { p.Init(place); } + +private: + TMGround(); + TMGround( const TMGround & ); + TMGround & operator = ( const TMGround & ); +}; + +//---------------------------------------------------------------------------------------- +// \ru Управление положением в сборке. \en Position control in the assembly. +// --- +struct MATH_CLASS TMBoxPositioner : public MtRefItem + , public ItPositionManager +{ +private: + TMGround & ground; + +public: + explicit TMBoxPositioner( TMGround & ); + TMBoxPositioner( const TMBoxPositioner & ); + +public: + /// \ru Установить новое положение объекта \en Set new position of the object + virtual void Reposition( ItGeom & geom, const MbPlacement3D & pos ); + /// \ru Выдать геометрический объект-земля, со степенью свободы = 0 (жёстко привязанный к ГСК); \en Get geometric object- ground with the degree of freedom = 0 (hard bound to GCS); + virtual ItGeom & GetGround() const { return ground; } + /// \ru Выдать характер связи для пары сопрягаемых тел (направленность соединения) \en Get the link character for pair of mating solids (direct connection) + virtual GCM_dependency GetJointStatus( const ItGeom &, const ItGeom & ) const { return GCM_NO_DEPENDENCY; } + virtual refcount_t AddRef() const { return MtRefItem::AddRef(); } + virtual refcount_t Release() const { return MtRefItem::Release(); } + +private: + TMBoxPositioner(); + TMBoxPositioner & operator = ( const TMBoxPositioner & ); +}; + +typedef std::vector > MtBoxVector; +typedef std::vector MtBlocksVector; + +//---------------------------------------------------------------------------------------- +/// \ru Генератор сборок. \en Assembly generator. +// --- +class MATH_CLASS AssemblyGenerator +{ +public: + enum TMMateType ///< \ru Тип связи между блоками в сборке. \en Type of connection between the bricks in the assembly. + { + tmt_Rigid1Brick = 1, + tmt_Rigid3Bricks, + tmt_Rigid2Axis, + tmt_NonRigid2Axis, + tmt_NonRigidAxisDist, + tmt_NonRigidAxis + }; + + enum TMBrickMateType ///< \ru Тип связи между кирпичами. \en Type of connection between the boxes. + { + tbmt_1Mate = 1, ///< \ru Совпадение протипоположных плоскостей. \en Coincidence of opposite planes. + tbmt_2Mate = 2, ///< \ru Совпадение протипоположных плоскостей + 1-ой пары сонаправленных. \en Coincidence of opposite planes + 1-pair of codirected. + tbmt_3Mate = 3, ///< \ru Совпадение протипоположных плоскостей + 2-ух пар сонаправленных (жесткая связь). \en Coincidence of opposite planes + 2-pairs of codirected (hard link). + tbmt_Rigid = tbmt_3Mate ///< \ru Жесткая связь. \en Rigid link. + }; + +public: + std::list > dimConstrs; + +private: + MtGeomSolver & manager; ///< \ru Решатель сборки. \en Solver of the assembly. + +public: + AssemblyGenerator( MtGeomSolver & m ) : manager( m ), dimConstrs() {} + +private: + AssemblyGenerator(); + AssemblyGenerator( const AssemblyGenerator & ); + AssemblyGenerator & operator = ( const AssemblyGenerator & ); + +public: + /// \ru Сгенерировать линию из кирпичей. \en Generate a line from boxes. + size_t GenerateLine( MtBoxVector & line, size_t n, TMBrickMateType mttype = tbmt_Rigid ); + /// \ru Сгенерировать стенку из кирпичей. \en Generate a wall from boxes. + size_t GenerateWall( MtBoxVector & wall, size_t n, TMBrickMateType mttype = tbmt_Rigid ); + /// \ru Сгенерировать куб из кирпичей. \en Generate a cube from boxes. + size_t GenerateCube( MtBoxVector & cube, size_t n, TMBrickMateType mttype = tbmt_Rigid ); + /// \ru Сгенерировать фрактал. \en Generate fractal. + size_t GenerateFractal( MtBlocksVector & fractal, size_t n, TMMateType mttype = tmt_Rigid3Bricks, TMBrickMateType bmttype = tbmt_3Mate ); + /// \ru Сгенерировать нежестко сопряженную сборку с распределенными степенями свободы. \en Generate a non-rigid mating assembly with distributed degrees of freedom. + size_t NonRigidDistributedDoF( MtBlocksVector & assembly, size_t nBlocks + , TMMateType mttype = tmt_NonRigidAxis, TMBrickMateType bmttype = tbmt_3Mate ); + /// \ru Сгенерировать жестко сопряженную сборку с распределенными степенями свободы. \en Generate a rigid mating assembly with distributed degrees of freedom. + size_t RigidDistributedDoF( MtBlocksVector & assembly, size_t nRings, size_t nBlocksInRing + , TMMateType matetype = tmt_Rigid2Axis, TMBrickMateType bmttype = tbmt_3Mate, double dist = 0. ); + + /// \ru Передвинуть кирпичи. \en Shift boxes. + void ShiftBoxes( MtBoxVector & boxes, const MbVector3D & shift, bool comulative, bool shiftfirst = false ); + /// \ru Передвинуть блоки. \en Shift blocks. + void ShiftBoxes( MtBlocksVector & boxes, const MbVector3D & shift, bool comulative, bool shiftfirst = false ); + /// \ru Повернуть кирпичи. \en Rotate boxes. + void RotateBoxes( MtBoxVector & boxes, const MbVector3D & angles, bool comulative ); + /// \ru Повернуть блоки. \en Rotate blocks. + void RotateBoxes( MtBlocksVector & boxes, const MbVector3D & angles, bool comulative ); + +private: + /// \ru Сгенерировать N кирпичей. \en Generate N boxes. + void GenerateNBoxes( MtBoxVector & boxes, size_t n, const TMBoxSize & size ) const; + void SetBoxesNames( const MtBoxVector & boxes ); // \ru Задать имена кирпичей. \en Set names for boxes. + size_t CreateBlock( MtBoxVector & block, TMBrickMateType bmttype, bool solve = true ); // \ru Создать блок. \en Create a block. + void GetFractal( size_t & mtCnt, MtBlocksVector & boxes, size_t nBlocks, TMMateType mttype, TMBrickMateType bmttype, size_t ind = 0 ); // \ru Создать фрактал. \en Create a fractal. +}; + +#endif // __GCM_MATES_GENERATOR_H diff --git a/C3d/Include/gcm_res_code.h b/C3d/Include/gcm_res_code.h index 71eb7e4..7942185 100644 --- a/C3d/Include/gcm_res_code.h +++ b/C3d/Include/gcm_res_code.h @@ -1,156 +1,157 @@ -////////////////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru Коды ошибок геометрического решателя для 3D - \en Error codes of geometric solver for 3D \~ -*/ -////////////////////////////////////////////////////////////////////////////////////////// - -#ifndef __GCM_RES_CODE_H -#define __GCM_RES_CODE_H - -#include - -//---------------------------------------------------------------------------------------- -// \ru Приоритетность кода ошибки \en Priority of the error code. -/* - \ru Функция выдает критерий, т.е. целое число, которое позволяет выбрать какую из - двух ошибок, обнаруженных решателем в отношении одного и того же сопряжения, - лучше показать пользователю. Ошибка с более высоким приоритетом поглощает ошибку - с более низким приоритетом. - \en Function gives a criterion, i.e. an integer which allows to choose which of - the two errors detected by solver with respect to the same mate - better to show to the user. Error with the highest priority error absorbs error - with lower priority. \~ - \param \ru resCode Код ошибки - \en resCode Error code \~ - \return \ru Целочисленная величина приоритетности кода ошибки для пользователя - \en The integer value of the priority of the error code to the user \~ -*/ -//--- -inline int PriorityLevel( GCM_result resCode ) -{ - switch ( resCode ) - { - case GCM_RESULT_Ok: return 0; // \ru Хороший результат - самый низкий приоритет потому, что всегда поглащается любым плохим результатом \en Good result - the lowest priority because it always is absorbed by any bad result - case GCM_RESULT_None: return 1; // \ru Нет результат - тоже низкий приоритет, поскольку мало информативен; \en None result - too low a priority as not enough informative; - case GCM_RESULT_Error: return 2; // \ru Неустановленная ошибка, малоинформативная ошибка. Unknown error, uninformative error. - - case GCM_RESULT_Duplicated: return 3; // \ru Эта ошибка не делает систему не решаемой, поэтому покажем её только если нет других проблем, связанных с нерешаемостью; \en This error does not make the unsolved system therefore it will be shown only if there are no other problems with unsolvable; - case GCM_RESULT_Not_Satisfied: return 4; // \ru Приоритет меньше, чем GCM_RESULT_Unsolvable, поскольку меньше информативность; //-V112 \en Priority is less than GCM_RESULT_Unsolvable because less informativeness; //-V112 - case GCM_RESULT_Unsolvable: return 5; // \ru Приоритет должен быть выше, чем у mtResCode_Not_Satisfied - дает больше информации пользователю; \en Priority must be higher than mtResCode_Not_Satisfied - gives more information to the user; - case GCM_RESULT_InconsistentAlignment: return 6; // \ru Приоритет должен быть меньше, чем у GCM_RESULT_Overconstrained, потому, что правильность диагностики гарантируется только при осутствии сообщения mtResCode_OverConstraint; \en Priority must be less than mtResCode_OverConstraint because the correct diagnosis can be guaranteed if there is not message GCM_RESULT_Overconstrained; - case GCM_RESULT_Overconstrained: return 7; // \ru Приоритет выше, чем у GCM_RESULT_Unsolvable, поскольку точнее выявлена причина не решаемости; \en Priority higher than that of GCM_RESULT_Unsolvable because unsolvable reason have been found; - - /* - \ru Более высокий приоритет у группы ошибок, связанных с некорректными - зависимостями для черных ящиков - такие ошибки нужно устранять в - первую очередь. - \en Higher priority for the group errors associated with incorrect - dependencies for black boxes - first of all such errors must - be eliminated. - */ - - case GCM_RESULT_MultiDependedGeom: // \ru Задана входящая зависимость для выходного объекта черного ящика; \en Given an incoming dependence of the output object of a black box; - case GCM_RESULT_OverconstrainingDependedGeoms: // \ru Задана зависимость между экземплярами массива (выходными); \en Given dependence between copies of the pattern (output); - case GCM_RESULT_DependedGeomCantBeFixed: // The depended geom can't be fixed. - return 8; - - case GCM_RESULT_CyclicDependence: // \ru Задана циклическая зависимость \en Given a cyclic dependence - return 9; - - /* - Группа ошибок, связанная с некорректно заданным сопряжением. - Group of errors related to incorrectly specified constraint. - */ - case GCM_RESULT_InappropriateArgument: - case GCM_RESULT_InappropriateAlignment: // - case GCM_RESULT_InvalidArguments: // \ru В ограничении не заданы аргументы (пустые аргументы). \en Constraint has invalid or undefined (void) arguments. - case GCM_RESULT_IncompatibleArguments: - case mtResCode_UnsupportedTangencyChoice: // \ru Для сопряжения касание - опция выбора по окружности или по образующей не поддреживается \en For mate the option of tangency choice by circle or generating curve is unsupported - case mtResCode_IsNoPossibleForCircTanChoice: // \ru Для данной пары поверхностей касание по окружности геометрически не возможно \en For a given pair of surfaces the touching along the circle is geometrically impossible - case GCM_RESULT_InconsistentPlanarAngle: // \ru Не соблюдаются условия планарного угла (векторы от пары тел должны быть перпендикулярны оси) \en Planar angle conditions are not met (vectors from a pair of solids should be perpendicular to the axis) - case mtResCode_InconsistentFollowerAxis: - case mtResCode_CoaxialMtGearTransmissionIsNotAvalable: - return 10; - - /* - The group of system error codes. Priority overlapping all other errors. - */ - case GCM_RESULT_InternalError: - case GCM_RESULT_Aborted: - case GCM_RESULT_ItsNotDrivingDimension: - case GCM_RESULT_Unregistered: - return 99; - - /* - \ru Все остальные геометрические ошибки (Самый информативный для пользователя вариант); - \en All other geometric errors (the most informative variant for the user); - */ - - default: return 90; - } -} - -/** - \addtogroup GCM_3D_Routines - \{ -*/ - -//---------------------------------------------------------------------------------------- -// -// --- -inline bool OK( GCM_result res ) -{ - return res == mtResCode_Ok; -} - -//---------------------------------------------------------------------------------------- -// -// --- -inline GCM_result ResCode( bool ok ) -{ - return ok ? mtResCode_Ok : mtResCode_None; -} - -//---------------------------------------------------------------------------------------- -/** \brief \ru Выбрать "худший" результат. - \en Select "the worst" result code. \~ - \details \ru Функция выбирает из двух сообщений об ошибке, то которое нуждается во - внимании пользователя прежде другого. - \en The function selects from two error messages, something that needs - attention before another error. -*/ -//--- -inline GCM_result WorseResult( GCM_result res1, GCM_result res2 ) -{ - return PriorityLevel( res1 ) > PriorityLevel( res2 ) ? res1 : res2; -} - -//---------------------------------------------------------------------------------------- -/** \brief \ru Суммировать результирующий код. \en Summarize the resulting code. - \details \ru Оператор выбирает из потока ошибок, то которое нуждается во - внимании пользователя прежде других. - \en The operator selects from stream of error messages, something that needs - attention before anything else. - -*/ -//--- -inline GCM_result & operator << ( GCM_result & sumRes, const GCM_result r ) -{ - if ( r == GCM_RESULT_None ) - { - return sumRes; - } - if ( PriorityLevel(r) > PriorityLevel(sumRes) || (sumRes==GCM_RESULT_None) ) - { - sumRes = r; - } - return sumRes; -} - -/** \} */ // GCM_3D_Routines - -#endif // __GCM_RES_CODE_H - -// eof +////////////////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Коды ошибок геометрического решателя для 3D + \en Error codes of geometric solver for 3D \~ +*/ +////////////////////////////////////////////////////////////////////////////////////////// + +#ifndef __GCM_RES_CODE_H +#define __GCM_RES_CODE_H + +#include + +//---------------------------------------------------------------------------------------- +// \ru Приоритетность кода ошибки \en Priority of the error code. +/* + \ru Функция выдает критерий, т.е. целое число, которое позволяет выбрать какую из + двух ошибок, обнаруженных решателем в отношении одного и того же сопряжения, + лучше показать пользователю. Ошибка с более высоким приоритетом поглощает ошибку + с более низким приоритетом. + \en Function gives a criterion, i.e. an integer which allows to choose which of + the two errors detected by solver with respect to the same mate + better to show to the user. Error with the highest priority error absorbs error + with lower priority. \~ + \param \ru resCode Код ошибки + \en resCode Error code \~ + \return \ru Целочисленная величина приоритетности кода ошибки для пользователя + \en The integer value of the priority of the error code to the user \~ +*/ +//--- +inline int PriorityLevel( GCM_result resCode ) +{ + switch ( resCode ) + { + case GCM_RESULT_Ok: return 0; // \ru Хороший результат - самый низкий приоритет потому, что всегда поглащается любым плохим результатом \en Good result - the lowest priority because it always is absorbed by any bad result + case GCM_RESULT_None: return 1; // \ru Нет результат - тоже низкий приоритет, поскольку мало информативен; \en None result - too low a priority as not enough informative; + case GCM_RESULT_Error: return 2; // \ru Неустановленная ошибка, малоинформативная ошибка. Unknown error, uninformative error. + + case GCM_RESULT_Duplicated: return 3; // \ru Эта ошибка не делает систему не решаемой, поэтому покажем её только если нет других проблем, связанных с нерешаемостью; \en This error does not make the unsolved system therefore it will be shown only if there are no other problems with unsolvable; + case GCM_RESULT_Not_Satisfied: return 4; // \ru Приоритет меньше, чем GCM_RESULT_Unsolvable, поскольку меньше информативность; //-V112 \en Priority is less than GCM_RESULT_Unsolvable because less informativeness; + case GCM_RESULT_Unsolvable: return 5; // \ru Приоритет должен быть выше, чем у GCM_RESULT_Not_Satisfied - дает больше информации пользователю; \en Priority must be higher than GCM_RESULT_Not_Satisfied - gives more information to the user; + case GCM_RESULT_InconsistentAlignment: return 6; // \ru Приоритет должен быть меньше, чем у GCM_RESULT_Overconstrained, потому, что правильность диагностики гарантируется только при осутствии сообщения mtResCode_OverConstraint; \en Priority must be less than mtResCode_OverConstraint because the correct diagnosis can be guaranteed if there is not message GCM_RESULT_Overconstrained; + case GCM_RESULT_Overconstrained: return 7; // \ru Приоритет выше, чем у GCM_RESULT_Unsolvable, поскольку точнее выявлена причина не решаемости; \en Priority higher than that of GCM_RESULT_Unsolvable because unsolvable reason have been found; + + /* + \ru Более высокий приоритет у группы ошибок, связанных с некорректными + зависимостями для черных ящиков - такие ошибки нужно устранять в + первую очередь. + \en Higher priority for the group errors associated with incorrect + dependencies for black boxes - first of all such errors must + be eliminated. + */ + + case GCM_RESULT_MultiDependedGeom: // \ru Задана входящая зависимость для выходного объекта черного ящика; \en Given an incoming dependence of the output object of a black box; + case GCM_RESULT_OverconstrainingDependedGeoms: // \ru Задана зависимость между экземплярами массива (выходными); \en Given dependence between copies of the pattern (output); + case GCM_RESULT_DependedGeomCantBeFixed: // The depended geom can't be fixed. + return 8; + + case GCM_RESULT_CyclicDependence: // \ru Задана циклическая зависимость \en Given a cyclic dependence + return 9; + + /* + Группа ошибок, связанная с некорректно заданным сопряжением. + Group of errors related to incorrectly specified constraint. + */ + case GCM_RESULT_InappropriateArgument: + case GCM_RESULT_InappropriateAlignment: // + case GCM_RESULT_InvalidArguments: // \ru В ограничении не заданы аргументы (пустые аргументы). \en Constraint has invalid or undefined (void) arguments. + case GCM_RESULT_IncompatibleArguments: + case mtResCode_UnsupportedTangencyChoice: // \ru Для сопряжения касание - опция выбора по окружности или по образующей не поддреживается \en For mate the option of tangency choice by circle or generating curve is unsupported + case GCM_RESULT_UnsupportedFollowerSurface: + case mtResCode_IsNoPossibleForCircTanChoice: // \ru Для данной пары поверхностей касание по окружности геометрически не возможно \en For a given pair of surfaces the touching along the circle is geometrically impossible + case GCM_RESULT_InconsistentPlanarAngle: // \ru Не соблюдаются условия планарного угла (векторы от пары тел должны быть перпендикулярны оси) \en Planar angle conditions are not met (vectors from a pair of solids should be perpendicular to the axis) + case GCM_RESULT_InconsistentFollowerAxis: + case mtResCode_CoaxialMtGearTransmissionIsNotAvalable: + return 10; + + /* + The group of system error codes. Priority overlapping all other errors. + */ + case GCM_RESULT_InternalError: + case GCM_RESULT_Aborted: + case GCM_RESULT_ItsNotDrivingDimension: + case GCM_RESULT_Unregistered: + return 99; + + /* + \ru Все остальные геометрические ошибки (Самый информативный для пользователя вариант); + \en All other geometric errors (the most informative variant for the user); + */ + + default: return 90; + } +} + +/** + \addtogroup GCM_3D_Routines + \{ +*/ + +//---------------------------------------------------------------------------------------- +// +// --- +inline bool OK( GCM_result res ) +{ + return res == mtResCode_Ok; +} + +//---------------------------------------------------------------------------------------- +// +// --- +inline GCM_result ResCode( bool ok ) +{ + return ok ? GCM_RESULT_Ok : GCM_RESULT_None; +} + +//---------------------------------------------------------------------------------------- +/** \brief \ru Выбрать "худший" результат. + \en Select "the worst" result code. \~ + \details \ru Функция выбирает из двух сообщений об ошибке, то которое нуждается во + внимании пользователя прежде другого. + \en The function selects from two error messages, something that needs + attention before another error. +*/ +//--- +inline GCM_result WorseResult( GCM_result res1, GCM_result res2 ) +{ + return PriorityLevel( res1 ) > PriorityLevel( res2 ) ? res1 : res2; +} + +//---------------------------------------------------------------------------------------- +/** \brief \ru Суммировать результирующий код. \en Summarize the resulting code. + \details \ru Оператор выбирает из потока ошибок, то которое нуждается во + внимании пользователя прежде других. + \en The operator selects from stream of error messages, something that needs + attention before anything else. + +*/ +//--- +inline GCM_result & operator << ( GCM_result & sumRes, const GCM_result r ) +{ + if ( r == GCM_RESULT_None ) + { + return sumRes; + } + if ( PriorityLevel(r) > PriorityLevel(sumRes) || (sumRes==GCM_RESULT_None) ) + { + sumRes = r; + } + return sumRes; +} + +/** \} */ // GCM_3D_Routines + +#endif // __GCM_RES_CODE_H + +// eof diff --git a/C3d/Include/gcm_types.h b/C3d/Include/gcm_types.h index 23a3080..f0ff680 100644 --- a/C3d/Include/gcm_types.h +++ b/C3d/Include/gcm_types.h @@ -1,535 +1,540 @@ -////////////////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru Типы данных геометрического решателя - \en Data types of geometric solver \~ -*/ -////////////////////////////////////////////////////////////////////////////////////////// - -#ifndef __GCM_TYPES_H -#define __GCM_TYPES_H - -#include - -class MtGeomSolver; -class MbPlacement3D; - -#define GCM_ID_TYPE 1 // 1 - MtObjectId is a struct, 0 - MtObjectId is simple integer. - -#if ( GCM_ID_TYPE == 1 ) - -typedef struct { uint32 id; } MtObjectId; -const MtObjectId _GCM_NULL = { SYS_MAX_UINT32 }; -const MtObjectId _GCM_GROUND = { 0 }; - -#else // GCM_ID_TYPE - -typedef uint32 MtObjectId; -const MtObjectId _GCM_NULL = SYS_MAX_UINT32; -const MtObjectId _GCM_GROUND = 0; - -#endif // GCM_ID_TYPE - -/** \addtogroup GCM_3D_API - \{ -*/ - -/// \ru Система геометрических ограничений. \en System of geometric constraints. \~ -typedef MtGeomSolver* GCM_system; -/// \ru Дескриптор геометрического объекта, зарегистрированного в контексте решателя. \en Descriptor of geometrical object registered in the solver context. -typedef MtObjectId GCM_object; -/// \ru Дескриптор геометрического объекта, зарегистрированного в контексте решателя. \en Descriptor of geometrical object registered in the solver context. -typedef GCM_object GCM_geom; -/// \ru Дескриптор ограничения, зарегистрированного в решателе. \en Descriptor of a constraint registered in the solver. -typedef GCM_object GCM_constraint; -/// \ru Дескриптор паттерна, зарегистрированного в решателе. \en Descriptor of a pattern registered in the solver. -typedef GCM_object GCM_pattern; -/// \ru Дескриптор пустого объекта или ограничения. \en Descriptor of empty object or constraint. \~ -const GCM_object GCM_NULL = _GCM_NULL; -/** \brief \ru Дескриптор неподвижного подмножества объектов, заданных в глобальной системой координат. - \en Descriptor of rigid subset of objects which are given in global coordinate system. \~ -*/ -const GCM_geom GCM_GROUND = _GCM_GROUND; - -//---------------------------------------------------------------------------------------- -/** \brief \ru Словарь типов геометрических примитивов. - \en Dictionary of geometric primitives types. \~ -*/ -// --- -typedef enum -{ - /* - (!) Do not change the integral constants (they are written to file permanently). - */ - - GCM_NULL_GTYPE = 0 ///< \ru Пустой геометрический объект. \en Empty geometric object. - , GCM_POINT ///< \ru Точка. \en Point. - , GCM_LINE ///< \ru Прямая. \en Line. - , GCM_PLANE ///< \ru Плоскость. \en Plane. - , GCM_CYLINDER ///< \ru Цилиндр. \en Cylinder. - , GCM_CONE ///< \ru Конус. \en Cone. - , GCM_SPHERE ///< \ru Сферическая поверхность. \en Spherical surface. - , GCM_TORUS ///< \ru Тороидальная поверхность. \en Toroidal surface. - , GCM_CIRCLE ///< \ru Окружность. \en Circle. - , GCM_LCS ///< \ru Система координат. \en Coordinate system. - , GCM_MARKER ///< \ru Точка и пара ортонормированных векторов. \en Point and pair of orthonormalized vectors. - , GCM_SPLINE ///< \ru Сплайновая кривая. \en Spline curve. - , GCM_VECTOR // Unit vector (internal use only) - , GCM_AXIS // Point with unit vector (internal use only) - , GCM_UNKNOWN_GTYPE // \ru Геометрический тип, не поддерживаемый решателем. \en Some geometric type, which is not supported by the solver. \~ - , GCM_LAST_GTYPE // \ru Количество типов. \en The count of types. -} GCM_g_type; - -//---------------------------------------------------------------------------------------- -/** \brief \ru Словарь типов ограничения. - \en Dictionary of constraint types. \~ - - \note \ru Значения этого перечисления могут быть использованы для постоянного - хранения и останутся неизменными в следующих версиях. - \en Values of this enum can be used for permanent storage - and will be kept in the future versions. \~ -*/ -//--- -typedef enum -{ - /* - (!) Do not change the integral constants (they are written to file permanently). - */ - GCM_UNKNOWN = -1 ///< \ru Не определенный тип. \en Unknown type. - , GCM_COINCIDENT = 0 ///< \ru Геометрическое совпадение. \en Coincidence of loci. - , GCM_PARALLEL = 1 ///< \ru Параллельность двух объектов, имеющих направление. \en Parallelism of two objects which have a direction vector. - , GCM_PERPENDICULAR = 2 ///< \ru Перпендикулярность двух объектов, имеющих направление. \en Perpendicularity of two objects which have a direction vector. - , GCM_TANGENT = 3 ///< \ru Касание двух поверхностей или кривых. \en Tangency of two objects, surfaces and curves. - , GCM_CONCENTRIC = 4 ///< \ru Концентричность двух объектов, имеющих ось или центр. \en Concentricity of two objects having a center or an axis. - , GCM_DISTANCE = 5 ///< \ru Линейное размер между объектами. \en Linear dimension between objects. - , GCM_ANGLE = 6 ///< \ru Угловой размер между векторными объектами. \en Angular dimension between directed objects (vectors). - , GCM_TRANSMITTION = 9 ///< \ru Механическая передача. \en Mechanical transmission. - , GCM_CAM_MECHANISM = 10 ///< \ru Кулачковый механизм. \en Cam mechanism. - , GCM_SYMMETRIC = 11 ///< \ru Симметричность. \en Symmetry. - , GCM_DEPENDENT = 14 ///< \ru Зависимый объект. \en Dependent object. - , GCM_PATTERNED = 15 ///< \ru Элемент паттерна. \en Patterned object. - , GCM_LINEAR_PATTERN = 16 ///< \ru Линейный паттерн. \en Linear pattern. - , GCM_ANGULAR_PATTERN = 17 ///< \ru Угловой паттерн. \en Angular pattern. - , GCM_RADIUS = 18 ///< \ru Радиальный размер. \en Radial dimension. - , GCM_LAST_CTYPE - , GCM_IN_PLACE = 7 // Deprecated -} GCM_c_type; - -//---------------------------------------------------------------------------------------- -/** \brief \ru Варианты выравнивания направлений. - \en Variants of alignment. \~ - \note \ru Значения этого перечисления могут быть использованы для постоянного - хранения и останутся неизменными в следующих версиях. - \en Values of this enum can be used for permanent storage - and will be kept in the future versions. \~ -*/ -//--- -typedef enum -{ - /* - (!) Do not change the constants (they are written to file permanently). - */ - GCM_MIN_ALIGNMENT= -1, // Minimum value of this enum - GCM_OPPOSITE = -1, ///< \ru Противонаправленные. \en Anti-align the directions. \~ - GCM_CLOSEST = 0, ///< \ru Ориентация согласно ближайшего решения. \en Orientation according to the nearest solution. \~ - GCM_COORIENTED = 1, ///< \ru Сонаправленные. \en Cooriented directions. \~ - GCM_NO_ALIGNMENT = 2, ///< \ru Нет определенной ориентации. \en No defined orientation. \~ - /* - Additional variants of alignment (they are used for tangency variants) - */ - GCM_ALIGNED_0 = GCM_COORIENTED, - GCM_ALIGNED_1 = 3, - GCM_ALIGNED_2 = 4, - GCM_ALIGNED_3 = 5, - GCM_REVERSE_0 = GCM_OPPOSITE, - GCM_REVERSE_1 = 6, - GCM_REVERSE_2 = 7, - GCM_REVERSE_3 = 8, - /* - Additional variants of alignment (they are used for patterns and symmetry) - */ - GCM_ALIGNED = 1, ///< \ru ЛСК с одинаковой ориентацией. \en Axis aligned local coordinate systems. \~ - GCM_ROTATED = 9, ///< Ротационное (вращательной) выравнивание элементов паттерна. - GCM_ALIGN_WITH_AXIAL_GEOM = 10, ///< Выровнять с объектом, задающим ось. - - GCM_MAX_ALIGNMENT, // Maximum value of this enum - -} GCM_alignment; - -//---------------------------------------------------------------------------------------- -/** \brief \ru Вариант углового размера. - \en Variant of angular dimension. \~ - \note \ru Значения этого перечисления могут быть использованы для постоянного - хранения данных приложения и останутся неизменными в следующих версиях. - \en Values of this enum can be used for permanent storing of app data - and will be kept in the future versions. \~ -*/ -//--- -typedef enum -{ - GCM_NONE_ANGLE = 0, ///< \ru Неопределен \en Undefined - GCM_2D_ANGLE = 1, ///< \ru Угол для планарных соединений (0 .. 360 градусов) \en Angle of planar joints (0 .. 360 degrees) - GCM_3D_ANGLE = 2, ///< \ru Угол в пространстве (0 .. 180 градусов) \en Angle in space (0 .. 180 degrees) - GCM_PLANAR_ANGLE = GCM_2D_ANGLE -} GCM_angle_type; - -//---------------------------------------------------------------------------------------- -/** \brief \ru Варианты касания поверхностей или кривых. - \en Variants of tangency of surfaces or curves. \~ - \note \ru Значения этого перечисления могут быть использованы для постоянного - хранения данных приложения и останутся неизменными в следующих версиях. - \en Values of this enum can be used for permanent storage of app data and will - be kept in the future versions. \~ -*/ -//--- -typedef enum -{ - /* - (!) Do not change the constants - */ - GCM_TAN_NONE = 0x00 ///< \ru Не выбрано. \en Not chosen. - , GCM_TAN_POINT = 0x01 ///< \ru Касание в общем случае (контакт точкой). \en Tangency in general case (contact at a point). - , GCM_TAN_LINE = 0x02 ///< \ru Касание по образующей прямой (например два цилиндра с параллельными осями). \en Tangency by a generating line (for instance, two cylinders with parallel axes). - , GCM_TAN_CIRCLE = 0x04 ///< \ru Касание по окружности (например сфера в конусе). \en Tangency by a circle (for instance, a sphere inside a cone). -} GCM_tan_choice; - - -//---------------------------------------------------------------------------------------- -/** \brief \ru Диагностические коды 3d-решателя. \en Diagnostic codes of 3D-solver. \~ - \details \ru GCM_result перечисляет значения, возвращаемые вызовами API компонента GCM, - включая диагностические коды решения геометрических ограничений. Значения данного типа - возвращаются такими функциями, как GCM_Evaluate и GCM_EvaluationResult. - \en GCM_result enumerates the values returned by the GCM API calls including - the diagnostic codes of solving geometric constraints. Values of this type are returned - by functions such as GCM_Evaluate and GCM_EvaluationResult. - \note \ru Значения этого перечисления могут быть использованы для постоянного - хранения данных приложения и останутся неизменными в следующих версиях. - \en Values of this enum can be used for permanent storage of app data and will - be kept in the future versions. \~ -*/ -//--- -typedef enum -{ - GCM_RESULT_None = 0 ///< \ru Код неопределенного результата или состояния. \en Code of undefined result or status. \~ - , GCM_RESULT_Ok = 1 ///< \ru Успешный результат вызова API компонента GCM. \en The successful result of GCM API call. \~ - , GCM_RESULT_Satisfied = GCM_RESULT_Ok ///< \ru Ограничение или система ограничения решены. \en Constraint or system of constraints are fulfilled. \~ - , GCM_RESULT_Overconstrained = 2 ///< \ru Ограничение переопределяет систему и противоречит другим условиям. \en Constraint is redundant and contradicts the other conditions. \~ - , GCM_RESULT_MatedFixation = 3 ///< \ru Заданы ограничения для пары фиксированных объектов. \en Constraints are specified for pair of fixed objects. \~ - , GCM_RESULT_DraggingFailed = 4 ///< \ru Неудачная попытка перемещения фиксированного объекта (равно, как объекта жестко-связанного с фиксированным). \en Failed attempt to move a fixed object (as the object rigidly connected with fixed). \~ - , GCM_RESULT_Not_Satisfied = 5 ///< \ru Ограничение(я) не решено (по неизвестным причинам). \en Constraint(s) has not been solved (for unknown reasons). \~ - , GCM_RESULT_Unsolvable = 6 ///< \ru Ограничение(я) не разрешимо. \en Constraint(s) is not solvable. \~ - - /** - \brief \ru Ограничение GCM_DEPENDENT не вычислено или ее независимые аргументы находятся вне области решений. - \en The GCM_DEPENDENT constraint is not solved or its independent arguments are out of the solution domain. - \note \ru Ситуация возникает, когда функция GCM_dependent_func возвращает false. - \en The situation occurs when the GCM_dependent_func function returns false. - */ - , GCM_RESULT_DependentConstraintUnsolved = 7 - , GCM_RESULT_Error = 8 ///< \ru Неизвестная ошибка, как правило, не связанная с процессом решения. \en Unknown error is usually not related to the solving. \~ - , GCM_RESULT_InappropriateAlignment = 9 ///< \ru Опция выравнивания не подходит для данного типа ограничения. \en The alignment option is inappropriate to a given constraint type. \~ - , GCM_RESULT_InappropriateArgument = 10 ///< \ru Геометрический тип аргумента не подходит для данного ограничения. \en Geometric type of an argument is inappropriate to the constraint. \~ - - /* - Additional message codes. - */ - - , GCM_RESULT_IncompatibleArguments = 3001 ///< \ru Несовместные типы аргументов ограничения. \en Inconsistent types of constraint arguments. \~ - , GCM_RESULT_InconsistentAngleType ///< \ru Угловая опция несовместима со степенью свободы соединения (планарный тип угла применим только для соединения, оставляющего единственную степень свободы вращения). \en Angular option is inconsistent with the degree of freedom of the joint (planar type of angle is only applicable for the joint leaving only one degree of freedom of rotation); \~ - , GCM_RESULT_InconsistentAlignment ///< \ru Величина ориентации несовместна с другими сопряжениями. \en The orientation value is inconsistent with other mates. \~ - , GCM_RESULT_Duplicated ///< \ru Ограничение дублирует другое. \en Constraint duplicates another. - , GCM_RESULT_CyclicDependence ///< \ru Неразрешимая циклическая зависимость. \en Unsolvable cyclic dependence. - , GCM_RESULT_MultiDependedGeom ///< \ru Объект является зависимым от двух и более ограничений 'GCM_DEPENDED'. \en A geometric object is dependent on two or more constraints of 'GCM_DEPENDED' type. - , GCM_RESULT_OverconstrainingDependedGeoms ///< \ru Избыточное ограничение между зависимыми объектами. \en A redundancy constraint between depended geoms. \~ - , GCM_RESULT_DependedGeomCantBeFixed ///< \ru Зависимый аргумент ограничения 'GCM_DEPENDED' не может быть зафиксирован. \en The depended argument of 'GCM_DEPENDED' can't be fixed. - , GCM_RESULT_InvalidArguments ///< \ru В ограничении не заданы аргументы (пустые аргументы). \en Constraint has invalid or undefined (void) arguments. - , mtResCode_UnsupportedTangencyChoice ///< \ru Для сопряжения касание - опция выбора по окружности или по образующей не поддреживается \en For mate the option of tangency choice by circle or generating curve is unsupported. - , mtResCode_IsNoPossibleForCircTanChoice ///< \ru Для данной пары поверхностей касание по окружности геометрически не возможно \en For a given pair of surfaces the touching along the circle is geometrically impossible. - , mtResCode_CoaxialMtGearTransmissionIsNotAvalable ///< \ru Механическая передача вращения компонентов с совпадающими осями не поддерживается \en Mechanical transmission of components rotation with the same axis is not supported - , mtResCode_NoSeparatedSolutionForCamGear ///< \ru В сборке присутствуют сопряжения (геометрические условия), создающие зависимость движения толкателя от движения кулачка, помимо самого кулачкового механизма \en The assembly contains mates (geometric conditions) creating dependence of the motion of the pusher from the motion of cam in addition to the cam gear - , mtResCode_CyclicDependenceForTwoOrMoreCamGears ///< \ru Задана циклическая зависимость для двух или более кулачковых механизмов \en Given the cyclic dependence for two or more cam gears - , mtResCode_InconsistentFollowerAxis ///< \ru Заданные сопряжения для толкателя не соответствую его оси движения \en Given mates for pusher doesn't correspond to its motion axis - , GCM_RESULT_InconsistentPlanarAngle ///< \ru Не соблюдаются условия планарного угла (векторы сторон угла должны быть перпендикулярны оси). \en Planar angle conditions are not met (vectors from the sides of angle should be perpendicular to the axis). - /* - ATTENTION: New error messages should be added only before this line. - */ - - /* - \ru Сообщения о некорректных результатах вызовов API решателя (не вычислительные). - \en Messages about incorrect results of the solver API calls (not computational). \~ - */ - , GCM_RESULT_ItsNotDrivingDimension ///< \ru Данное ограничение должно быть управляющим размером. \en Given constraint should be a driving dimension. - , GCM_RESULT_Unregistered ///< \ru Обращение к недействительному объекту. \en Access to invalid object. - , GCM_RESULT_InternalError - , GCM_RESULT_Aborted ///< \ru Процесс вычислений был прерван по запросу приложения. \en The evaluation process aborted by the application. \~ - , GCM_RESULT_Last_ // The last error code of user for mates (adding before this line) -} GCM_result; - -//---------------------------------------------------------------------------------------- -/// \ru Характер зависимости пары тел (geoms) \en Dependency character of solid pair (geoms) -// --- -typedef enum -{ - GCM_NO_DEPENDENCY = 0 ///< \ru Нет односторонней зависимости. \en It means no one-directed dependency. - , GCM_1ST_DEPENDENT = 2 ///< \ru Первый объект зависит от другого(других). \en The first object is dependent on the other(s). - , GCM_2ND_DEPENDENT = 1 ///< \ru Второй объект зависит от другого(других). \en The second object is dependent on the other(s). -} GCM_dependency; - -//---------------------------------------------------------------------------------------- -/// \ru Тип связи между элементами в паттерне. \en The type of relationship between elements in the pattern. -// --- -typedef enum -{ - GCM_NO_SCALE = 0, - GCM_RIGID = 1, ///< \ru Шаг между элементами константен. Паттерн не масштабируется (не растягивается). \en Distance between elements is constant. The pattern is not scaled. - GCM_LINEAR_SCALE = 2 ///< \ru Шаг между элементами линейно масштабируется при растяжениях. \en Distance between elements is linearly scaled when stretching. -} GCM_scale; - -//---------------------------------------------------------------------------------------- -/** - \brief \ru Режим поведения при манипулировании недоопределенной системой. - \en Mode of the behavior when manipulating the undeconstrained system. \~ -*/ -// --- -typedef enum -{ - /* - Произвольное поведение (arbitrary behavior). - */ - GCM_REPOSITION_FreeRotation ///< \ru Произвольная репозиция с преимуществом вращения. \en Arbitrary reposition with predominant rotation. - , GCM_REPOSITION_FreeMoving ///< \ru Произвольная репозиция с преимуществом перемещения. \en Arbitrary reposition with predominant moving. - - /* - Строгое поведение (strict behavior). - */ - , GCM_REPOSITION_Dragging ///< \ru Перетаскивание в плоскости "экрана". \en Dragging in the plane of the screen. - , GCM_REPOSITION_Rotation ///< \ru Вращение вокруг неподвижной оси. \en Rotation around fixed axis. - - /** \brief \ru Перенос только для одного твердого тела. \en Shift only one solid. - \note \ru Этот режим был задуман для процессов вставки нового тела в сборку САПР. - \en This mode have been intended for insertion processes of a new solid in the CAD assembly. - */ - , GCM_REPOSITION_Transfer - -} GCM_reposition; - -//---------------------------------------------------------------------------------------- -/// \ru Координаты 3D-вектора. \en Coordinates of 3D-vector. -//--- -struct GCM_vec3d { double x, y, z; }; - -//---------------------------------------------------------------------------------------- -/// \ru Координаты точки 3D пространства. \en Coordinates of point in three-dimensional space. -//--- -struct GCM_point { double x, y, z; }; - -//---------------------------------------------------------------------------------------- -/** \brief \ru Структура полей данных, представляющих геометрический объект. - \en Structure of data fields representing a geometric object. \~ - \details \ru Эта простая структура данных представляет варианты геометрических типов, - с которыми работает решатель.\n - \en This plain data structure represents variants of geometric data types that - the solver works with.\n - \~ - \par - \ru Кортежи, соответствующие типам геометрии:\n - \en Corresponding tuples of geometric types:\n - - \~ { GCM_POINT origin } - simple point;\n - { GCM_SPHERE origin radiusA } - center and radius of a sphere;\n - { GCM_LINE origin axisZ } - point and direction of a line;\n - { GCM_PLANE origin axisZ } - point and normal of a plane;\n - { GCM_CIRCLE origin axisZ radiusA } - center, rotation axis and radius;\n - { GCM_CYLINDER origin axisZ radiusA } - center, rotation axis and radius;\n - { GCM_CONE origin axisZ radiusA radiusB } - center, rotation axis and two radiuses;\n - { GCM_TORUS origin axisZ radiusA radiusB };\n - { GCM_LCS origin axisZ axisX axisY } - local coordinate system that specify a solid position.\n -*/ -//--- -struct GCM_g_record -{ - GCM_g_type type; ///< \ru Тип геометрии. \en Type of geometric object. - GCM_point origin; ///< \ru Точка позиционирования геометрического объекта. \en Location of a geometric object. - GCM_vec3d axisZ; ///< \ru Направляющий вектор прямой или вектор нормали плоскости. \en Direction of line, normal of plane, Z-axis of a local coordinate frame. - GCM_vec3d axisX; ///< \ru Ось X локальной системы координат. \en X-axis of local coordinate frame . - GCM_vec3d axisY; ///< \ru Ось Y локальной системы координат. \en Y-axis of local coordinate frame. - double radiusA; ///< \ru Радиус окружности, сферы или цилиндра либо радиус основания конуса, "большой" радиус тора. \en Radius of circle, sphere and cylinder or major radius of cone and torus. - double radiusB; ///< \ru "Малый" радиус тора или конуса. \en Minor radius of cone and torus. -}; - -//---------------------------------------------------------------------------------------- -/** \brief \ru Дополнительный параметр для функций типа #GCM_dependent_func. - \en Additional parameter for functions of type #GCM_dependent_func. \~ - \sa #GCM_dependent_geom_func, #GCM_dependent_func -*/ -//--- -struct GCM_extra_param -{ - size_t funcId; // integral identifier of a user-defined callback - void * funcData; // pointer to an application data structure - GCM_extra_param() { funcId = 0, funcData = 0; } -}; - -//---------------------------------------------------------------------------------------- -// The function calculates position of a dependent geom regarding to other independent geoms. -/* - Note: The dependent geom is first element of argument list inGeoms, and others are independent. - argNb Number of arguments of dependency constraint, equals to size of inGeoms. - g1 = f( g2 g3 ... gn ); -*/ -//--- -typedef bool (*GCM_dependent_func) ( MbPlacement3D gPlaces[] - , size_t gPlacesSize - , GCM_extra_param exPar ); - -//---------------------------------------------------------------------------------------- -/// \~ Alternative typename of #GCM_dependent_func -//--- -typedef GCM_dependent_func GCM_dependent_geom_func; - -/** \} */ // GCM_3D_API - -//---------------------------------------------------------------------------------------- -// Argument of constraint to record in type 'GCM_c_record' -//-- -struct GCM_c_arg -{ - union - { - GCM_object geom; // Geometric object. - GCM_alignment alignVal; // Variant of alignment. - GCM_tan_choice tanChoice; // Option for tangency constraint only. - GCM_angle_type angType; // Option for angular constraint only. - GCM_scale scale; // Option for pattern constraint only. - double dimValue; // Numeric value of a dimension. - int enumVal; - }; - GCM_c_arg & operator = ( double val ) - { - dimValue = val; - return *this; - } - template - GCM_c_arg & operator = ( const _Enum & val ) - { - enumVal = static_cast( val ); - return *this; - } - GCM_c_arg & operator = ( const GCM_geom & gId ) - { - geom = gId; - return *this; - } - GCM_c_arg() { dimValue = 0.0; } -}; - -//---------------------------------------------------------------------------------------- -/** \brief \en Structure of geometric constraint record. - \ru Структура записи геометрического ограничения. \~ -*/ -/* - The argument tuples of each constraint type: - { GCM_c_type GCM_c_arg ... GCM_c_arg } - -------------------|------------------------------- - { GCM_COINCIDENT GCM_geom GCM_geom GCM_alignment } - { GCM_CONCENTRIC GCM_geom GCM_geom GCM_alignment } - { GCM_PARALLEL GCM_geom GCM_geom GCM_alignment } - { GCM_PERPENDICULAR GCM_geom GCM_geom GCM_alignment } - { GCM_IN_PLACE GCM_geom GCM_geom GCM_NO_ALIGNMENT } - { GCM_DISTANCE GCM_geom GCM_geom double GCM_alignment } - { GCM_TANGENT GCM_geom GCM_geom GCM_alignment GCM_tan_choice } - { GCM_ANGLE GCM_geom GCM_geom GCM_geom double GCM_alignment } - planar kind of angle - { GCM_ANGLE GCM_geom GCM_geom GCM_NULL double GCM_alignment } - 3d kind of angle - { GCM_SYMMETRIC GCM_geom GCM_geom GCM_geom GCM_alignment } - { GCM_PATTERNED GCM_geom GCM_geom GCM_geom double GCM_alignment GCM_scale } - { GCM_LINEAR_PATTERN GCM_geom GCM_geom GCM_geom GCM_alignment } - { GCM_ANGULAR_PATTERN GCM_geom GCM_geom GCM_geom GCM_alignment } - { GCM_TRANSMITTION not specified } - { GCM_CAM_MECHANISM not specified } - { GCM_RADIUS GCM_geom double } - { GCM_UNKNOWN } - Sample of the journal line: (GCM_AddConstraint (GCM_COINCIDENT #1 #2 GCM_CLOSEST) #3) -*/ -struct GCM_c_record -{ - static const size_t argsN = 5; - GCM_c_type type; // \ru Тип ограничения. \en Type of constraint. - GCM_c_arg args[argsN]; // \ru Аргументы ограничения. \en Arguments of constraint. -}; - -#if ( GCM_ID_TYPE == 1 ) - -inline bool operator == ( const MtObjectId & f, const MtObjectId & s ) { return f.id == s.id; } -inline bool operator != ( const MtObjectId & f, const MtObjectId & s ) { return f.id != s.id; } -inline bool operator < ( const MtObjectId & f, const MtObjectId & s ) { return f.id < s.id; } -inline uint32 & _id( MtObjectId & obj ) { return obj.id; } -inline const uint32 & _id( const MtObjectId & obj ) { return obj.id; } - -#else // GCM_ID_TYPE - -inline uint32 & _id( MtObjectId & obj ) { return obj; } -inline const uint32 & _id( const MtObjectId & obj ) { return obj; } - -#endif // GCM_ID_TYPE - -typedef GCM_alignment MtAlignType; -typedef GCM_g_type MtGeometryType; -typedef GCM_result MtResultCode3D; - -/* - The constants below are deprecated (2015) -*/ - -static const GCM_alignment GCM_NOT_ORIENTED = GCM_NO_ALIGNMENT; -static const GCM_alignment GCM_Opposite = GCM_OPPOSITE; -static const GCM_alignment GCM_Closest = GCM_CLOSEST; -static const GCM_alignment GCM_Cooriented = GCM_COORIENTED; -static const GCM_alignment GCM_None = GCM_NO_ALIGNMENT; -static const GCM_alignment GCM_Min = GCM_OPPOSITE; -static const GCM_alignment GCM_Max = GCM_MAX_ALIGNMENT; - -static const GCM_g_type GCM_FIRST_GTYPE = GCM_NULL_GTYPE; -static const GCM_g_type mgt_Cylinder = GCM_CYLINDER; -static const GCM_c_type mct_Coincidence = GCM_COINCIDENT; -static const GCM_c_type mct_Parallel = GCM_PARALLEL; -static const GCM_c_type mct_Perpendicular = GCM_PERPENDICULAR; -static const GCM_c_type mct_Tangency = GCM_TANGENT; -static const GCM_c_type mct_Concentric = GCM_CONCENTRIC; -static const GCM_c_type mct_Distance = GCM_DISTANCE; -static const GCM_c_type mct_Angle = GCM_ANGLE; -static const GCM_c_type mct_InPlace = GCM_IN_PLACE; -static const GCM_c_type mct_Unknown = GCM_UNKNOWN; -static const GCM_c_type mct_CamMechanism = GCM_CAM_MECHANISM; -static const GCM_c_type mct_Symmetry = GCM_SYMMETRIC; -static const GCM_c_type mct_Symmetric = GCM_SYMMETRIC; -static const GCM_c_type mct_Parallelism = GCM_PARALLEL; - -static const GCM_result mtResCode_None = GCM_RESULT_None; -static const GCM_result mtResCode_Ok = GCM_RESULT_Ok; -static const GCM_result mtResCode_Satisfied = GCM_RESULT_Ok; -static const GCM_result mtResCode_SystemError = GCM_RESULT_Error; -static const GCM_result mtResCode_Error = GCM_RESULT_Error; -static const GCM_result mtResCode_Overconstrained = GCM_RESULT_Overconstrained; -static const GCM_result mtResCode_Not_Satisfied = GCM_RESULT_Not_Satisfied; -static const GCM_result mtResCode_MovingOfFixedGeom = GCM_RESULT_DraggingFailed; -static const GCM_result mtResCode_InvalidAxisOfPlanarAngle = GCM_RESULT_InconsistentPlanarAngle; -static const GCM_result mtResCode_CyclicDependence = GCM_RESULT_CyclicDependence; -static const GCM_result mtResCode_InvalidDependenceForOutGeom = GCM_RESULT_MultiDependedGeom; -static const GCM_result mtResCode_InvalidDependenceForOutGeoms = GCM_RESULT_OverconstrainingDependedGeoms; // (2018) -static const GCM_result mtResCode_InvalidDependenceForFixGeom = GCM_RESULT_DependedGeomCantBeFixed; - -const GCM_dependency GCM_2ST_DEPENDENT = GCM_2ND_DEPENDENT; - -/* - Deprecated names of a dynamic reposition modes (2019) -*/ -const GCM_reposition rep_FreeRotation = GCM_REPOSITION_FreeRotation; -const GCM_reposition rep_FreeMoving = GCM_REPOSITION_FreeMoving; -const GCM_reposition rep_MovingToPoint = GCM_REPOSITION_Dragging; -const GCM_reposition rep_RotationAboutAxis = GCM_REPOSITION_Rotation; -const GCM_reposition rep_TransferOneGeomOnly = GCM_REPOSITION_Transfer; - - -#endif - -// eof +////////////////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Типы данных геометрического решателя + \en Data types of geometric solver \~ +*/ +////////////////////////////////////////////////////////////////////////////////////////// + +#ifndef __GCM_TYPES_H +#define __GCM_TYPES_H + +#include + +class MtGeomSolver; +class MbPlacement3D; + +#define GCM_ID_TYPE 1 // 1 - MtObjectId is a struct, 0 - MtObjectId is simple integer. + +#if ( GCM_ID_TYPE == 1 ) + +typedef struct { uint32 id; } MtObjectId; +const MtObjectId _GCM_NULL = { SYS_MAX_UINT32 }; +const MtObjectId _GCM_GROUND = { 0 }; + +#else // GCM_ID_TYPE + +typedef uint32 MtObjectId; +const MtObjectId _GCM_NULL = SYS_MAX_UINT32; +const MtObjectId _GCM_GROUND = 0; + +#endif // GCM_ID_TYPE + +/** \addtogroup GCM_3D_API + \{ +*/ + +/// \ru Система геометрических ограничений. \en System of geometric constraints. \~ +typedef MtGeomSolver* GCM_system; +/// \ru Дескриптор геометрического объекта, зарегистрированного в контексте решателя. \en Descriptor of geometrical object registered in the solver context. +typedef MtObjectId GCM_object; +/// \ru Дескриптор геометрического объекта, зарегистрированного в контексте решателя. \en Descriptor of geometrical object registered in the solver context. +typedef GCM_object GCM_geom; +/// \ru Дескриптор ограничения, зарегистрированного в решателе. \en Descriptor of a constraint registered in the solver. +typedef GCM_object GCM_constraint; +/// \ru Дескриптор паттерна, зарегистрированного в решателе. \en Descriptor of a pattern registered in the solver. +typedef GCM_object GCM_pattern; +/// \ru Дескриптор пустого объекта или ограничения. \en Descriptor of empty object or constraint. \~ +const GCM_object GCM_NULL = _GCM_NULL; +/** \brief \ru Дескриптор неподвижного подмножества объектов, заданных в глобальной системой координат. + \en Descriptor of rigid subset of objects which are given in global coordinate system. \~ +*/ +const GCM_geom GCM_GROUND = _GCM_GROUND; + +//---------------------------------------------------------------------------------------- +/** \brief \ru Словарь типов геометрических примитивов. + \en Dictionary of geometric primitives types. \~ +*/ +// --- +typedef enum +{ + /* + (!) Do not change the integral constants (they are written to file permanently). + */ + + GCM_NULL_GTYPE = 0 ///< \ru Пустой геометрический объект. \en Empty geometric object. + , GCM_POINT ///< \ru Точка. \en Point. + , GCM_LINE ///< \ru Прямая. \en Line. + , GCM_PLANE ///< \ru Плоскость. \en Plane. + , GCM_CYLINDER ///< \ru Цилиндр. \en Cylinder. + , GCM_CONE ///< \ru Конус. \en Cone. + , GCM_SPHERE ///< \ru Сферическая поверхность. \en Spherical surface. + , GCM_TORUS ///< \ru Тороидальная поверхность. \en Toroidal surface. + , GCM_CIRCLE ///< \ru Окружность. \en Circle. + , GCM_LCS ///< \ru Система координат. \en Coordinate system. + , GCM_MARKER ///< \ru Точка и пара ортонормированных векторов. \en Point and pair of orthonormalized vectors. + , GCM_SPLINE ///< \ru Сплайновая кривая. \en Spline curve. + , GCM_VECTOR // Unit vector (internal use only) + , GCM_AXIS // Point with unit vector (internal use only) + , GCM_UNKNOWN_GTYPE // \ru Геометрический тип, не поддерживаемый решателем. \en Some geometric type, which is not supported by the solver. \~ + , GCM_LAST_GTYPE // \ru Количество типов. \en The count of types. +} GCM_g_type; + +//---------------------------------------------------------------------------------------- +/** \brief \ru Словарь типов ограничения. + \en Dictionary of constraint types. \~ + + \note \ru Значения этого перечисления могут быть использованы для постоянного + хранения и останутся неизменными в следующих версиях. + \en Values of this enum can be used for permanent storage + and will be kept in the future versions. \~ +*/ +//--- +typedef enum +{ + /* + (!) Do not change the integral constants (they are written to file permanently). + */ + GCM_UNKNOWN = -1 ///< \ru Не определенный тип. \en Unknown type. + , GCM_COINCIDENT = 0 ///< \ru Геометрическое совпадение. \en Coincidence of loci. + , GCM_PARALLEL = 1 ///< \ru Параллельность двух объектов, имеющих направление. \en Parallelism of two objects which have a direction vector. + , GCM_PERPENDICULAR = 2 ///< \ru Перпендикулярность двух объектов, имеющих направление. \en Perpendicularity of two objects which have a direction vector. + , GCM_TANGENT = 3 ///< \ru Касание двух поверхностей или кривых. \en Tangency of two objects, surfaces and curves. + , GCM_CONCENTRIC = 4 ///< \ru Концентричность двух объектов, имеющих ось или центр. \en Concentricity of two objects having a center or an axis. + , GCM_DISTANCE = 5 ///< \ru Линейное размер между объектами. \en Linear dimension between objects. + , GCM_ANGLE = 6 ///< \ru Угловой размер между векторными объектами. \en Angular dimension between directed objects (vectors). + , GCM_TRANSMITTION = 9 ///< \ru Механическая передача. \en Mechanical transmission. + , GCM_CAM_MECHANISM = 10 ///< \ru Кулачковый механизм. \en Cam mechanism. + , GCM_SYMMETRIC = 11 ///< \ru Симметричность. \en Symmetry. + , GCM_DEPENDENT = 14 ///< \ru Зависимый объект. \en Dependent object. + , GCM_PATTERNED = 15 ///< \ru Элемент паттерна. \en Patterned object. + , GCM_LINEAR_PATTERN = 16 ///< \ru Линейный паттерн. \en Linear pattern. + , GCM_ANGULAR_PATTERN = 17 ///< \ru Угловой паттерн. \en Angular pattern. + , GCM_RADIUS = 18 ///< \ru Радиальный размер. \en Radial dimension. + , GCM_LAST_CTYPE + , GCM_IN_PLACE = 7 // Deprecated +} GCM_c_type; + +//---------------------------------------------------------------------------------------- +/** \brief \ru Варианты выравнивания направлений. + \en Variants of alignment. \~ + \note \ru Значения этого перечисления могут быть использованы для постоянного + хранения и останутся неизменными в следующих версиях. + \en Values of this enum can be used for permanent storage + and will be kept in the future versions. \~ +*/ +//--- +typedef enum +{ + /* + (!) Do not change the constants (they are written to file permanently). + */ + GCM_MIN_ALIGNMENT= -1, // Minimum value of this enum + GCM_OPPOSITE = -1, ///< \ru Противонаправленные. \en Anti-align the directions. \~ + GCM_CLOSEST = 0, ///< \ru Ориентация согласно ближайшего решения. \en Orientation according to the nearest solution. \~ + GCM_COORIENTED = 1, ///< \ru Сонаправленные. \en Cooriented directions. \~ + GCM_NO_ALIGNMENT = 2, ///< \ru Нет определенной ориентации. \en No defined orientation. \~ + /* + Additional variants of alignment (they are used for tangency variants) + */ + GCM_ALIGNED_0 = GCM_COORIENTED, + GCM_ALIGNED_1 = 3, + GCM_ALIGNED_2 = 4, + GCM_ALIGNED_3 = 5, + GCM_REVERSE_0 = GCM_OPPOSITE, + GCM_REVERSE_1 = 6, + GCM_REVERSE_2 = 7, + GCM_REVERSE_3 = 8, + /* + Additional variants of alignment (they are used for patterns and symmetry) + */ + GCM_ALIGNED = 1, ///< \ru ЛСК с одинаковой ориентацией. \en Axis aligned local coordinate systems. \~ + GCM_ROTATED = 9, ///< Ротационное (вращательной) выравнивание элементов паттерна. + GCM_ALIGN_WITH_AXIAL_GEOM = 10, ///< Выровнять с объектом, задающим ось. + + GCM_MAX_ALIGNMENT, // Maximum value of this enum + +} GCM_alignment; + +//---------------------------------------------------------------------------------------- +/** \brief \ru Вариант углового размера. + \en Variant of angular dimension. \~ + \note \ru Значения этого перечисления могут быть использованы для постоянного + хранения данных приложения и останутся неизменными в следующих версиях. + \en Values of this enum can be used for permanent storing of app data + and will be kept in the future versions. \~ +*/ +//--- +typedef enum +{ + GCM_NONE_ANGLE = 0, ///< \ru Неопределен \en Undefined + GCM_2D_ANGLE = 1, ///< \ru Угол для планарных соединений (0 .. 360 градусов) \en Angle of planar joints (0 .. 360 degrees) + GCM_3D_ANGLE = 2, ///< \ru Угол в пространстве (0 .. 180 градусов) \en Angle in space (0 .. 180 degrees) + GCM_PLANAR_ANGLE = GCM_2D_ANGLE +} GCM_angle_type; + +//---------------------------------------------------------------------------------------- +/** \brief \ru Варианты касания поверхностей или кривых. + \en Variants of tangency of surfaces or curves. \~ + \note \ru Значения этого перечисления могут быть использованы для постоянного + хранения данных приложения и останутся неизменными в следующих версиях. + \en Values of this enum can be used for permanent storage of app data and will + be kept in the future versions. \~ +*/ +//--- +typedef enum +{ + /* + (!) Do not change the constants + */ + GCM_TAN_NONE = 0x00 ///< \ru Не выбрано. \en Not chosen. + , GCM_TAN_POINT = 0x01 ///< \ru Касание в общем случае (контакт точкой). \en Tangency in general case (contact at a point). + , GCM_TAN_LINE = 0x02 ///< \ru Касание по образующей прямой (например два цилиндра с параллельными осями). \en Tangency by a generating line (for instance, two cylinders with parallel axes). + , GCM_TAN_CIRCLE = 0x04 ///< \ru Касание по окружности (например сфера в конусе). \en Tangency by a circle (for instance, a sphere inside a cone). +} GCM_tan_choice; + + +//---------------------------------------------------------------------------------------- +/** \brief \ru Диагностические коды 3d-решателя. \en Diagnostic codes of 3D-solver. \~ + \details \ru GCM_result перечисляет значения, возвращаемые вызовами API компонента GCM, + включая диагностические коды решения геометрических ограничений. Значения данного типа + возвращаются такими функциями, как GCM_Evaluate и GCM_EvaluationResult. + \en GCM_result enumerates the values returned by the GCM API calls including + the diagnostic codes of solving geometric constraints. Values of this type are returned + by functions such as GCM_Evaluate and GCM_EvaluationResult. + \note \ru Значения этого перечисления могут быть использованы для постоянного + хранения данных приложения и останутся неизменными в следующих версиях. + \en Values of this enum can be used for permanent storage of app data and will + be kept in the future versions. \~ +*/ +//--- +typedef enum +{ + GCM_RESULT_None = 0 ///< \ru Код неопределенного результата или состояния. \en Code of undefined result or status. \~ + , GCM_RESULT_Ok = 1 ///< \ru Успешный результат вызова API компонента GCM. \en The successful result of GCM API call. \~ + , GCM_RESULT_Satisfied = GCM_RESULT_Ok ///< \ru Ограничение или система ограничения решены. \en Constraint or system of constraints are fulfilled. \~ + , GCM_RESULT_Overconstrained = 2 ///< \ru Ограничение переопределяет систему и противоречит другим условиям. \en Constraint is redundant and contradicts the other conditions. \~ + , GCM_RESULT_MatedFixation = 3 ///< \ru Заданы ограничения для пары фиксированных объектов. \en Constraints are specified for pair of fixed objects. \~ + , GCM_RESULT_DraggingFailed = 4 ///< \ru Неудачная попытка перемещения фиксированного объекта (равно, как объекта жестко-связанного с фиксированным). \en Failed attempt to move a fixed object (as the object rigidly connected with fixed). \~ + , GCM_RESULT_Not_Satisfied = 5 ///< \ru Ограничение(я) не решено (по неизвестным причинам). \en Constraint(s) has not been solved (for unknown reasons). \~ + , GCM_RESULT_Unsolvable = 6 ///< \ru Ограничение(я) не разрешимо. \en Constraint(s) is not solvable. \~ + + /** + \brief \ru Ограничение GCM_DEPENDENT не вычислено или ее независимые аргументы находятся вне области решений. + \en The GCM_DEPENDENT constraint is not solved or its independent arguments are out of the solution domain. + \note \ru Ситуация возникает, когда функция GCM_dependent_func возвращает false. + \en The situation occurs when the GCM_dependent_func function returns false. + */ + , GCM_RESULT_DependentConstraintUnsolved = 7 + , GCM_RESULT_Error = 8 ///< \ru Неизвестная ошибка, как правило, не связанная с процессом решения. \en Unknown error is usually not related to the solving. \~ + , GCM_RESULT_InappropriateAlignment = 9 ///< \ru Опция выравнивания не подходит для данного типа ограничения. \en The alignment option is inappropriate to a given constraint type. \~ + , GCM_RESULT_InappropriateArgument = 10 ///< \ru Геометрический тип аргумента не подходит для данного ограничения. \en Geometric type of an argument is inappropriate to the constraint. \~ + + /* + Additional message codes. + */ + + , GCM_RESULT_IncompatibleArguments = 3001 ///< \ru Несовместные типы аргументов ограничения. \en Inconsistent types of constraint arguments. \~ + , GCM_RESULT_InconsistentAngleType ///< \ru Угловая опция несовместима со степенью свободы соединения (планарный тип угла применим только для соединения, оставляющего единственную степень свободы вращения). \en Angular option is inconsistent with the degree of freedom of the joint (planar type of angle is only applicable for the joint leaving only one degree of freedom of rotation); \~ + , GCM_RESULT_InconsistentAlignment ///< \ru Величина ориентации несовместна с другими сопряжениями. \en The orientation value is inconsistent with other mates. \~ + , GCM_RESULT_Duplicated ///< \ru Ограничение дублирует другое. \en Constraint duplicates another. + , GCM_RESULT_CyclicDependence ///< \ru Неразрешимая циклическая зависимость. \en Unsolvable cyclic dependence. + , GCM_RESULT_MultiDependedGeom ///< \ru Объект является зависимым от двух и более ограничений 'GCM_DEPENDED'. \en A geometric object is dependent on two or more constraints of 'GCM_DEPENDED' type. + , GCM_RESULT_OverconstrainingDependedGeoms ///< \ru Избыточное ограничение между зависимыми объектами. \en A redundancy constraint between depended geoms. \~ + , GCM_RESULT_DependedGeomCantBeFixed ///< \ru Зависимый аргумент ограничения 'GCM_DEPENDED' не может быть зафиксирован. \en The depended argument of 'GCM_DEPENDED' can't be fixed. + , GCM_RESULT_InvalidArguments ///< \ru В ограничении не заданы аргументы (пустые аргументы). \en Constraint has invalid or undefined (void) arguments. + , mtResCode_UnsupportedTangencyChoice ///< \ru Для сопряжения касание - опция выбора по окружности или по образующей не поддреживается \en For mate the option of tangency choice by circle or generating curve is unsupported. + , mtResCode_IsNoPossibleForCircTanChoice ///< \ru Для данной пары поверхностей касание по окружности геометрически не возможно \en For a given pair of surfaces the touching along the circle is geometrically impossible. + , mtResCode_CoaxialMtGearTransmissionIsNotAvalable ///< \ru Механическая передача вращения компонентов с совпадающими осями не поддерживается \en Mechanical transmission of components rotation with the same axis is not supported + , GCM_RESULT_OverconstrainedCamMechanism ///< \ru Имеются ограничения, создающие зависимость движения толкателя от движения кулачка, помимо самого кулачкового механизма. \en There are constraints creating dependence of the follower displacement from the cam in addition to the cam mechanism. + , mtResCode_CyclicDependenceForTwoOrMoreCamGears ///< \ru Задана циклическая зависимость для двух или более кулачковых механизмов \en Given the cyclic dependence for two or more cam gears + , GCM_RESULT_InconsistentFollowerAxis ///< \ru Заданные ограничения для толкателя не соответствую его оси движения. \en Given constraints for the follwer doesn't correspond to its motion axis. + , GCM_RESULT_InconsistentPlanarAngle ///< \ru Не соблюдаются условия планарного угла (векторы сторон угла должны быть перпендикулярны оси). \en Planar angle conditions are not met (vectors from the sides of angle should be perpendicular to the axis). + , GCM_RESULT_UnsupportedFollowerSurface ///< \ru Контактная поверхность толкателя, выбранная для кинематической пары "кулачек-толкатель", пока не поддерживается решателем. \en The follower contact surface selected for the cam-follower kinematic pair is not yet supported by the solver. + + + /* + ATTENTION: New error messages should be added only before this line. + */ + + /* + \ru Сообщения о некорректных результатах вызовов API решателя (не вычислительные). + \en Messages about incorrect results of the solver API calls (not computational). \~ + */ + , GCM_RESULT_ItsNotDrivingDimension ///< \ru Данное ограничение должно быть управляющим размером. \en Given constraint should be a driving dimension. + , GCM_RESULT_Unregistered ///< \ru Обращение к недействительному объекту. \en Access to invalid object. + , GCM_RESULT_InternalError + , GCM_RESULT_Aborted ///< \ru Процесс вычислений был прерван по запросу приложения. \en The evaluation process aborted by the application. \~ + , GCM_RESULT_Last_ // The last error code of user for mates (adding before this line) +} GCM_result; + +//---------------------------------------------------------------------------------------- +/// \ru Характер зависимости пары тел (geoms) \en Dependency character of solid pair (geoms) +// --- +typedef enum +{ + GCM_NO_DEPENDENCY = 0 ///< \ru Нет односторонней зависимости. \en It means no one-directed dependency. + , GCM_1ST_DEPENDENT = 2 ///< \ru Первый объект зависит от другого(других). \en The first object is dependent on the other(s). + , GCM_2ND_DEPENDENT = 1 ///< \ru Второй объект зависит от другого(других). \en The second object is dependent on the other(s). +} GCM_dependency; + +//---------------------------------------------------------------------------------------- +/// \ru Тип связи между элементами в паттерне. \en The type of relationship between elements in the pattern. +// --- +typedef enum +{ + GCM_NO_SCALE = 0, + GCM_RIGID = 1, ///< \ru Шаг между элементами константен. Паттерн не масштабируется (не растягивается). \en Distance between elements is constant. The pattern is not scaled. + GCM_LINEAR_SCALE = 2 ///< \ru Шаг между элементами линейно масштабируется при растяжениях. \en Distance between elements is linearly scaled when stretching. +} GCM_scale; + +//---------------------------------------------------------------------------------------- +/** + \brief \ru Режим поведения при манипулировании недоопределенной системой. + \en Mode of the behavior when manipulating the undeconstrained system. \~ +*/ +// --- +typedef enum +{ + /* + Произвольное поведение (arbitrary behavior). + */ + GCM_REPOSITION_FreeRotation ///< \ru Произвольная репозиция с преимуществом вращения. \en Arbitrary reposition with predominant rotation. + , GCM_REPOSITION_FreeMoving ///< \ru Произвольная репозиция с преимуществом перемещения. \en Arbitrary reposition with predominant moving. + + /* + Строгое поведение (strict behavior). + */ + , GCM_REPOSITION_Dragging ///< \ru Перетаскивание в плоскости "экрана". \en Dragging in the plane of the screen. + , GCM_REPOSITION_Rotation ///< \ru Вращение вокруг неподвижной оси. \en Rotation around fixed axis. + + /** \brief \ru Перенос только для одного твердого тела. \en Shift only one solid. + \note \ru Этот режим был задуман для процессов вставки нового тела в сборку САПР. + \en This mode have been intended for insertion processes of a new solid in the CAD assembly. + */ + , GCM_REPOSITION_Transfer + +} GCM_reposition; + +//---------------------------------------------------------------------------------------- +/// \ru Координаты 3D-вектора. \en Coordinates of 3D-vector. +//--- +struct GCM_vec3d { double x, y, z; }; + +//---------------------------------------------------------------------------------------- +/// \ru Координаты точки 3D пространства. \en Coordinates of point in three-dimensional space. +//--- +struct GCM_point { double x, y, z; }; + +//---------------------------------------------------------------------------------------- +/** \brief \ru Структура полей данных, представляющих геометрический объект. + \en Structure of data fields representing a geometric object. \~ + \details \ru Эта простая структура данных представляет варианты геометрических типов, + с которыми работает решатель.\n + \en This plain data structure represents variants of geometric data types that + the solver works with.\n + \~ + \par + \ru Кортежи, соответствующие типам геометрии:\n + \en Corresponding tuples of geometric types:\n + + \~ { GCM_POINT origin } - simple point;\n + { GCM_SPHERE origin radiusA } - center and radius of a sphere;\n + { GCM_LINE origin axisZ } - point and direction of a line;\n + { GCM_PLANE origin axisZ } - point and normal of a plane;\n + { GCM_CIRCLE origin axisZ radiusA } - center, rotation axis and radius;\n + { GCM_CYLINDER origin axisZ radiusA } - center, rotation axis and radius;\n + { GCM_CONE origin axisZ radiusA radiusB } - center, rotation axis and two radiuses;\n + { GCM_TORUS origin axisZ radiusA radiusB };\n + { GCM_LCS origin axisZ axisX axisY } - local coordinate system that specify a solid position.\n +*/ +//--- +struct GCM_g_record +{ + GCM_g_type type; ///< \ru Тип геометрии. \en Type of geometric object. + GCM_point origin; ///< \ru Точка позиционирования геометрического объекта. \en Location of a geometric object. + GCM_vec3d axisZ; ///< \ru Направляющий вектор прямой или вектор нормали плоскости. \en Direction of line, normal of plane, Z-axis of a local coordinate frame. + GCM_vec3d axisX; ///< \ru Ось X локальной системы координат. \en X-axis of local coordinate frame . + GCM_vec3d axisY; ///< \ru Ось Y локальной системы координат. \en Y-axis of local coordinate frame. + double radiusA; ///< \ru Радиус окружности, сферы или цилиндра либо радиус основания конуса, "большой" радиус тора. \en Radius of circle, sphere and cylinder or major radius of cone and torus. + double radiusB; ///< \ru "Малый" радиус тора или конуса. \en Minor radius of cone and torus. +}; + +//---------------------------------------------------------------------------------------- +/** \brief \ru Дополнительный параметр для функций типа #GCM_dependent_func. + \en Additional parameter for functions of type #GCM_dependent_func. \~ + \sa #GCM_dependent_geom_func, #GCM_dependent_func +*/ +//--- +struct GCM_extra_param +{ + size_t funcId; // integral identifier of a user-defined callback + void * funcData; // pointer to an application data structure + GCM_extra_param() { funcId = 0, funcData = 0; } +}; + +//---------------------------------------------------------------------------------------- +// The function calculates position of a dependent geom regarding to other independent geoms. +/* + Note: The dependent geom is first element of argument list inGeoms, and others are independent. + argNb Number of arguments of dependency constraint, equals to size of inGeoms. + g1 = f( g2 g3 ... gn ); +*/ +//--- +typedef bool (*GCM_dependent_func) ( MbPlacement3D gPlaces[] + , size_t gPlacesSize + , GCM_extra_param exPar ); + +//---------------------------------------------------------------------------------------- +/// \~ Alternative typename of #GCM_dependent_func +//--- +typedef GCM_dependent_func GCM_dependent_geom_func; + +/** \} */ // GCM_3D_API + +//---------------------------------------------------------------------------------------- +// Argument of constraint to record in type 'GCM_c_record' +//-- +struct GCM_c_arg +{ + union + { + GCM_object geom; // Geometric object. + GCM_alignment alignVal; // Variant of alignment. + GCM_tan_choice tanChoice; // Option for tangency constraint only. + GCM_angle_type angType; // Option for angular constraint only. + GCM_scale scale; // Option for pattern constraint only. + double dimValue; // Numeric value of a dimension. + int enumVal; + }; + GCM_c_arg & operator = ( double val ) + { + dimValue = val; + return *this; + } + template + GCM_c_arg & operator = ( const _Enum & val ) + { + enumVal = static_cast( val ); + return *this; + } + GCM_c_arg & operator = ( const GCM_geom & gId ) + { + geom = gId; + return *this; + } + GCM_c_arg() { dimValue = 0.0; } +}; + +//---------------------------------------------------------------------------------------- +/** \brief \en Structure of geometric constraint record. + \ru Структура записи геометрического ограничения. \~ +*/ +/* + The argument tuples of each constraint type: + { GCM_c_type GCM_c_arg ... GCM_c_arg } + -------------------|------------------------------- + { GCM_COINCIDENT GCM_geom GCM_geom GCM_alignment } + { GCM_CONCENTRIC GCM_geom GCM_geom GCM_alignment } + { GCM_PARALLEL GCM_geom GCM_geom GCM_alignment } + { GCM_PERPENDICULAR GCM_geom GCM_geom GCM_alignment } + { GCM_IN_PLACE GCM_geom GCM_geom GCM_NO_ALIGNMENT } + { GCM_DISTANCE GCM_geom GCM_geom double GCM_alignment } + { GCM_TANGENT GCM_geom GCM_geom GCM_alignment GCM_tan_choice } + { GCM_ANGLE GCM_geom GCM_geom GCM_geom double GCM_alignment } - planar kind of angle + { GCM_ANGLE GCM_geom GCM_geom GCM_NULL double GCM_alignment } - 3d kind of angle + { GCM_SYMMETRIC GCM_geom GCM_geom GCM_geom GCM_alignment } + { GCM_PATTERNED GCM_geom GCM_geom GCM_geom double GCM_alignment GCM_scale } + { GCM_LINEAR_PATTERN GCM_geom GCM_geom GCM_geom GCM_alignment } + { GCM_ANGULAR_PATTERN GCM_geom GCM_geom GCM_geom GCM_alignment } + { GCM_TRANSMITTION not specified } + { GCM_CAM_MECHANISM not specified } + { GCM_RADIUS GCM_geom double } + { GCM_UNKNOWN } + Sample of the journal line: (GCM_AddConstraint (GCM_COINCIDENT #1 #2 GCM_CLOSEST) #3) +*/ +struct GCM_c_record +{ + static const size_t argsN = 5; + GCM_c_type type; // \ru Тип ограничения. \en Type of constraint. + GCM_c_arg args[argsN]; // \ru Аргументы ограничения. \en Arguments of constraint. +}; + +#if ( GCM_ID_TYPE == 1 ) + +inline bool operator == ( const MtObjectId & f, const MtObjectId & s ) { return f.id == s.id; } +inline bool operator != ( const MtObjectId & f, const MtObjectId & s ) { return f.id != s.id; } +inline bool operator < ( const MtObjectId & f, const MtObjectId & s ) { return f.id < s.id; } +inline uint32 & _id( MtObjectId & obj ) { return obj.id; } +inline const uint32 & _id( const MtObjectId & obj ) { return obj.id; } + +#else // GCM_ID_TYPE + +inline uint32 & _id( MtObjectId & obj ) { return obj; } +inline const uint32 & _id( const MtObjectId & obj ) { return obj; } + +#endif // GCM_ID_TYPE + +typedef GCM_alignment MtAlignType; +typedef GCM_g_type MtGeometryType; +typedef GCM_result MtResultCode3D; + +/* + The constants below are deprecated (2015, Kompas does not use them, 02.12.2020) +*/ + +static const GCM_alignment GCM_NOT_ORIENTED = GCM_NO_ALIGNMENT; +static const GCM_alignment GCM_Opposite = GCM_OPPOSITE; +static const GCM_alignment GCM_Closest = GCM_CLOSEST; +static const GCM_alignment GCM_Cooriented = GCM_COORIENTED; +static const GCM_alignment GCM_None = GCM_NO_ALIGNMENT; +static const GCM_alignment GCM_Min = GCM_MIN_ALIGNMENT; +static const GCM_alignment GCM_Max = GCM_MAX_ALIGNMENT; + +/* + The constants below are deprecated (2015) +*/ + +static const GCM_g_type GCM_FIRST_GTYPE = GCM_NULL_GTYPE; +static const GCM_g_type mgt_Cylinder = GCM_CYLINDER; +static const GCM_c_type mct_Coincidence = GCM_COINCIDENT; +static const GCM_c_type mct_Parallel = GCM_PARALLEL; +static const GCM_c_type mct_Perpendicular = GCM_PERPENDICULAR; +static const GCM_c_type mct_Tangency = GCM_TANGENT; +static const GCM_c_type mct_Concentric = GCM_CONCENTRIC; +static const GCM_c_type mct_Distance = GCM_DISTANCE; +static const GCM_c_type mct_Angle = GCM_ANGLE; +static const GCM_c_type mct_InPlace = GCM_IN_PLACE; +static const GCM_c_type mct_Unknown = GCM_UNKNOWN; +static const GCM_c_type mct_CamMechanism = GCM_CAM_MECHANISM; +static const GCM_c_type mct_Symmetry = GCM_SYMMETRIC; +static const GCM_c_type mct_Symmetric = GCM_SYMMETRIC; +static const GCM_c_type mct_Parallelism = GCM_PARALLEL; + +static const GCM_result mtResCode_None = GCM_RESULT_None; +static const GCM_result mtResCode_Ok = GCM_RESULT_Ok; +static const GCM_result mtResCode_SystemError = GCM_RESULT_Error; +static const GCM_result mtResCode_Error = GCM_RESULT_Error; +static const GCM_result mtResCode_MovingOfFixedGeom = GCM_RESULT_DraggingFailed; +static const GCM_result mtResCode_InvalidAxisOfPlanarAngle = GCM_RESULT_InconsistentPlanarAngle; +static const GCM_result mtResCode_CyclicDependence = GCM_RESULT_CyclicDependence; +static const GCM_result mtResCode_InvalidDependenceForOutGeom = GCM_RESULT_MultiDependedGeom; +static const GCM_result mtResCode_InvalidDependenceForOutGeoms = GCM_RESULT_OverconstrainingDependedGeoms; // (2018) +static const GCM_result mtResCode_InvalidDependenceForFixGeom = GCM_RESULT_DependedGeomCantBeFixed; +static const GCM_result mtResCode_InconsistentFollowerAxis = GCM_RESULT_InconsistentFollowerAxis; /* 2020 */ +static const GCM_result mtResCode_NoSeparatedSolutionForCamGear = GCM_RESULT_OverconstrainedCamMechanism; /* 2020 */ +const GCM_dependency GCM_2ST_DEPENDENT = GCM_2ND_DEPENDENT; + +/* + Deprecated names of a dynamic reposition modes (2019) +*/ +const GCM_reposition rep_FreeRotation = GCM_REPOSITION_FreeRotation; +const GCM_reposition rep_FreeMoving = GCM_REPOSITION_FreeMoving; +const GCM_reposition rep_MovingToPoint = GCM_REPOSITION_Dragging; +const GCM_reposition rep_RotationAboutAxis = GCM_REPOSITION_Rotation; +const GCM_reposition rep_TransferOneGeomOnly = GCM_REPOSITION_Transfer; + + +#endif + +// eof diff --git a/C3d/Include/generic_utility.h b/C3d/Include/generic_utility.h index 1f5712b..14b83d0 100644 --- a/C3d/Include/generic_utility.h +++ b/C3d/Include/generic_utility.h @@ -1,1193 +1,1193 @@ -////////////////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru Шаблонные утилиты. - \en Template utilities. \~ -*/ -////////////////////////////////////////////////////////////////////////////////////////// - -#ifndef __GENERIC_UTILITY_H -#define __GENERIC_UTILITY_H - -#include -// -#include -// -#include -#include - -#include -#include -#include -#include - -//---------------------------------------------------------------------------------------- -/// \ru Пустой тип данных. \en Empty data type. -//--- -struct null_type -{ - static const null_type value() { return null_type(); } -}; - -//---------------------------------------------------------------------------------------- -/** \brief \ru Шаблон для получения индексного типа (для статического сопоставления типов на этапе компиляции) - \en Template to generate an indexed type (for static type-matching in compile-time) -*/ -//--- -template -struct index_tag -{ - index_tag() {} // Constructor under GCC compiler -}; - -//---------------------------------------------------------------------------------------- -/// \ru Цветовая маркировка (применяется для графов) \en Color marking (used for graphs) -//--- -enum color_code -{ - white_color=0 - , black_color=1 - , red_color=2 - , gray_color - , green_color - , orange_color - , visited_color -}; - -//---------------------------------------------------------------------------------------- -// Constant valued function -//--- -template -bool boolFunc() { return boolVal; } - -/* -//---------------------------------------------------------------------------------------- -/// \ru Цветовая маркировка, например, для графовых объектов \en Color marking, for example: for graph objects -//--- -template -struct color_traits -{ - static color_code white() { return white_color; } - static color_code gray() { return gray_color; } - static color_code green() { return green_color; } - static color_code red() { return red_color; } - static color_code black() { return black_color; } -}; - -template<> -struct color_traits -{ - static char white() { return 0; } - static char gray() { return 1; } - static char green() { return 2; } - static char red() { return 3; } - static char black() { return 4; } -}; -*/ - -//---------------------------------------------------------------------------------------- -/// \ru Графовые характеристики типов. \en Graph datatype traits. -//--- -template< class Graph > -struct graph_traits -{ - /* - Ассоциативные типы данных концепции графа. - Associative datatypes of the graph concept. - */ - typedef typename Graph::vertex vertex; // Тип, интерпретируемый, как вершина графа. - typedef typename Graph::edge edge; // Тип, интерпретируемый, как ребро графа - typedef typename Graph::vertex_iterator vertex_iterator; // Обход всех вершин графа - typedef typename Graph::adjacency_iterator adjacency_iterator; // Обход смежных вершин некоторой вершины - typedef typename Graph::vertices_size_t vertices_size_t; // Целочисленный тип размера графа - typedef typename Graph::degree_size_t degree_size_t; // Целочисленный тип вершинной степени - typedef typename Graph::edge_iterator edge_iterator; // Итератор обхода исходящих ребер [или неориентированных ребер] -}; - -//---------------------------------------------------------------------------------------- -/// \ru Пара ссылок. \en A pair of references. -//--- -template -struct ref_pair -{ - _Ty1 & first; - _Ty2 & second; - - ref_pair( _Ty1 & val1, _Ty2 & val2 ) - : first(val1), second(val2) - {} - ref_pair( const ref_pair & other ) - : first(other.first), second(other.second) - {} - - template - ref_pair( const std::pair<_Other1, _Other2> & right ) - : first(right.first), second(right.second) - {} - - template - ref_pair & operator = ( const std::pair<_Other1, _Other2> & right ) - { - first = right.first; - second = right.second; - return *this; - } - -private: - ref_pair & operator = ( const ref_pair & ); // \ru не реализуемо \en not implemented -}; - -//---------------------------------------------------------------------------------------- -/// \ru Выдать ссылки одной связкой. \en Get references as one bunch. -//--- -template -inline ref_pair -tie( Type & iter1, Type & iter2 ) -{ - return ref_pair ( iter1, iter2 ); -} - -//---------------------------------------------------------------------------------------- -/// \ru Наибольшее из двух. \en Maximum of two. -// --- -template -inline const T & max_of( const T & elem1, const T & elem2 ) -{ - if ( elem2 < elem1 ) - return elem1; - return elem2; -} - -//---------------------------------------------------------------------------------------- -/// \ru Наибольшее из двух. \en Maximum of two. -// --- -template -inline const T & min_of( const T & elem1, const T & elem2 ) -{ - if ( elem1 < elem2 ) - return elem1; - return elem2; -} - -//---------------------------------------------------------------------------------------- -/// \ru Поменять местами значения. \en Swap the values. -// --- -template -inline void swap_vals( T & elem1, T & elem2 ) -{ - T tmp = elem1; - elem1 = elem2; - elem2 = tmp; -} - -//---------------------------------------------------------------------------------------- -/// \ru Поменять местами значения указателей. \en Swap the values of pointers. -// --- -template -inline void swap_ptrs( T* & elem1, T* & elem2 ) -{ - T * tmp = elem1; - elem1 = elem2; - elem2 = tmp; -} - -//---------------------------------------------------------------------------------------- -/// \ru Поменять местами значения указателей. \en Swap the values of pointers. -//--- -template -inline void swap_ptrs( SPtr & p1, SPtr & p2 ) -{ - SPtr t = p1; - p1 = p2; - p2 = t; -} - -//---------------------------------------------------------------------------------------- -// \ru Равенство пары указателей \en Equality of pointer pair -//--- -template< class Type1, class Type2 > -bool equal_ptrs( const Type1 * ptr1, const Type2 * ptr2 ) -{ - return static_cast(ptr1) == ptr2; -} - -//---------------------------------------------------------------------------------------- -// \ru Равенство пары указателей \en Equality of pointer pair -//--- -template< class Type1, class Type2 > -bool equal_ptrs( SPtr ptr1, const Type2 * ptr2 ) -{ - return static_cast(ptr1.get()) == ptr2; -} - -//---------------------------------------------------------------------------------------- -// \ru Равенство пары двухмерных векторов или точек \en Equality of 2D points or vectors -//--- -template< class XY1, class XY2 > -bool equal_xy( const XY1 & v1, const XY2 & v2, double eps ) -{ - if ( fabs(v1.x-v2.x) > eps ) - return false; - if ( fabs(v1.y-v2.y) > eps ) - return false; - return true; -} - -//---------------------------------------------------------------------------------------- -// \ru Наименьший общий делитель \en The lowest common denominator -// --- -template < typename Integer > -Integer euclid_algo ( Integer a, Integer b ) -{ - Integer const zero = static_cast( 0 ); - - bool goOn = true; - while ( goOn ) - { - if ( a == zero ) { - goOn = false; - return b; - } - - b %= a; - - if ( b == zero ) { - goOn = false; - return a; - } - - a %= b; - } - return zero; -} - -//---------------------------------------------------------------------------------------- -/// \ru Получить НОД для пары целых чисел \en Get GCD for a pair of integers -// --- -template < typename IntegerType > -inline IntegerType gcd( IntegerType a, IntegerType b ) -{ - IntegerType const zero = static_cast( 0 ); - IntegerType const result = ::euclid_algo( a, b ); - return ( result < zero ) ? -result : result; -} - - -//---------------------------------------------------------------------------------------- -// \ru Функциональный объект - коллектор \en The functional object - collector -/*\ru Играет роль посетителя foreach-алгоритмов, осуществляющий накачку STL-совместимых контейнеров - \en Serves as a visitor of foreach-algorithms exercising pumping of STL-compatible containers \~ -*/ -//--- -template -struct collector -{ - typedef typename _Cont::value_type value_type; - _Cont & container; // \ru STL-совместимый контейнер \en STL-compatible container - - collector( _Cont & arr ) - : container( arr ) {} - collector( const collector & c ) : container( c.container ) {} - void operator () ( const value_type & elem ) const - { - container.push_back( elem ); - } - -private: // \ru не реализовано \en not implemented - collector & operator = ( const collector & ); -}; - - -//---------------------------------------------------------------------------------------- -/** \brief \ru Статический вектор. - \en Static vector. - \note \ru Требуется, что бы элементы вектора имели конструктор по умолчанию, - конструктор копирования и оператор присвоения. - \en Required that the vector elements have a default constructor, - copy constructor and assignment operator. \~ -*/ -//--- -template -class static_array -{ -public: - typedef Elem value_type; // \ru ассоциативный тип элемента массива \en associative type of array element - -private: - value_type arr[arrSize]; // \ru статическое выделение памяти под массив \en static allocation for the array - -public: - /// \ru Инициализация одним элементом. \en Initialization of one element. - explicit static_array( const Elem & val ) - { - fill( val ); - } - /// \ru Инициализация парой элементов. \en Initialization of a pair of elements. - static_array( const Elem & e1, const Elem & e2 ) - { - PRECONDITION( arrSize == 2 ); - arr[0] = e1; - arr[1] = e2; - } - /// \ru Конструктор по тройке. \en Constructs as a triplet. - static_array( const Elem & e1, const Elem & e2, const Elem & e3 ) - { - PRECONDITION( arrSize == 3 ); - arr[0] = e1; - arr[1] = e2; - arr[2] = e3; - } - explicit static_array( const static_array & vec ) - { - _Assign( vec ); - } - - template - static_array( const _Vector & vec ) - { - _Assign( vec ); - } - - /// \ru Инициализация одним элементом. \en Initialization of one element. - static_array & fill( const Elem & val ) - { - for( size_t idx = 0; idx - static_array & assign( _Iter iter, _Iter last ) - { - for ( value_type * myIter = arr ; iter!=last; ++iter, ++myIter ) - { - PRECONDITION( myIter < arr+arrSize ); - *myIter = *iter; - } - return *this; - } - - inline value_type & operator[] ( size_t idx ) - { - PRECONDITION( idx < arrSize ); - return arr[idx]; - } - inline const value_type & operator[] ( size_t idx ) const - { - PRECONDITION( idx < arrSize ); - return arr[idx]; - } - template - static_array & operator = ( const _Vector & vec ) - { - _Assign( vec ); - return *this; - } - - inline const Elem * c_arr() const { return arr; } - inline Elem * c_arr() { return arr; } - inline size_t size() const { return arrSize; } - inline value_type & front() { return *arr; } - inline value_type & back() { PRECONDITION(arrSize>0); return arr[arrSize-1]; } - inline const value_type & front() const { return *arr; } - inline const value_type & back() const { PRECONDITION(arrSize>0); return arr[arrSize-1]; } - -private: - template< class _Vector > - void _Assign( const _Vector & vec ) - { - PRECONDITION( vec.size() == size() ); - for ( size_t idx = ::min_of( arrSize, vec.size() ); idx > 0; ) - { - idx--; - arr[idx] = vec[idx]; - } - } -}; - -// \ru (!) Запретить пустые статические массивы \en (!) Prevent empty static arrays -template class static_array {}; - -//---------------------------------------------------------------------------------------- -/// \ru Статический вектор двух элементов (пара). \en Static vector of two elements (pair). -//--- -template -struct static_pair: public static_array -{ - typedef static_array parent_type; - // static_pair(): parent_type() {} - explicit static_pair( const Elem & el ): parent_type( el ) {} - static_pair( const Elem & el1, const Elem & el2 ): parent_type( el1, el2 ) {} - explicit static_pair( const static_pair & pair ) : parent_type( pair ) {} - - static_pair & operator = ( const static_pair & vec ) - { - parent_type::operator=( vec ); - return *this; - } -}; - -//---------------------------------------------------------------------------------------- -/** - \brief \ru Динамический контейнер для хранения элементов упорядоченного множества. - \en Dynamic container for storing elements of an ordered set. - - \details - \ru Тип элемента контейнера должен иметь операторы порядка. Не стоит путать этот - тип контейнера с set или map. Он вовсе не обязан всегда поддерживаться в отсортированном - состоянии, а только тогда, когда это закажут (с кэшированием алгоритма сортировки). - Гарантируется, что вектор отсортирован сразу после вызова функций get_sorted или sort. - Константные методы, а также метод erase не нарушают сортировки.\n - \en Type of container element must have order operators. Do not confuse this - type of container with a set or map. It is not obliged always be supported in a sorted - state, and only when it is needed (with caching of sorting algorithm). It is guaranteed - that the vector is sorted immediately after the function call get_sorted or sort. - Const methods and the erase method does not break sorting. \n \~ - - \par \ru Про эффективность - - Часто сортированный вектор оказывается более эффективным, чем std::map или std::set, - особенно если добавление/удаление элементов массива осуществляется серийно и достаточно - редко перемежаются, с запросами быстрого (бинарного) поиска элемента или его места по - порядку. В отличие от map или set минимально дефрагментируется память и не требуется - избыточной информации для хранения указателей (может занимать в 4 раза меньше памяти). - Для быстрых запросов можно применять стандартные алгоритмы, такие - как std::binary_search, std::lower_bound и т.п. - - \en About efficiency - - Often sorted vector is more effective than - std::map or std::set especially when adding/removing elements - of the array is standard and is rarely interspersed - with queries quickly (binary) search of element or its place by - the order. In contrast to the map or set minimal defragmented - memory and does not require excess information for storage of pointers - (can occupy memory in less than 4 times). - For fast queries, can use standard algorithms such - as std::binary_search, std::lower_bound etc. \~ -*/ -//--- -template > // \ru KeyType - тип элемента с операторами порядка "<" \en KeyType - the element type with the operators of order "<" -class sorting_array -{ -public: - typedef std::vector container_type; - typedef typename container_type::value_type value_type; - typedef typename container_type::size_type size_type; - typedef typename container_type::const_iterator iterator; - typedef typename container_type::iterator _iterator; - typedef std::pair iter_range; - typedef _Pr key_compare; // \ru отношение порядка (предикат) \en order relation (predicate) - -public: - sorting_array() : m_vector(), m_sorted( true ) {} - -public: - iter_range get_sorted() { sort(); return iter_range(m_vector.begin(), m_vector.end()); } - iter_range range() const { return iter_range(m_vector.begin(), m_vector.end()); } - const KeyType & sorted_back() { sort(); return m_vector.back(); } - bool empty() const { return m_vector.empty(); } - iterator begin() const { return m_vector.begin(); } - iterator end() const { return m_vector.end(); } - _iterator _begin() { return m_vector.begin(); } - _iterator _end() { return m_vector.end(); } - const KeyType & front() const { return m_vector.front(); } - const KeyType & back() const { return m_vector.back(); } - void erase( iterator ); - void erase( iterator f, iterator l ); - bool is_sorted() const { return m_sorted; } - iterator insert( iterator _whereItr, const KeyType & val ); // \ru вставить элемент перед позицией whereItr \en insert element before position whereItr - template - void insert( iterator position, InputIterator first, InputIterator last ) - { - m_vector.insert( position, first, last ); - m_sorted = false; - } - template - void assign ( InputIterator first, InputIterator last ) - { - m_vector.assign( first, last ); - m_sorted = false; - } - void resize( size_t n, const KeyType & val ); - void reserve ( size_t n ) { m_vector.reserve( n ); } - void push_back( const KeyType & val ); - void sort() - { - if ( !m_sorted ) - { - std::sort( m_vector.begin(), m_vector.end(), _Pr() ); - m_sorted = true; - } - } - void clear() { m_vector.clear(); } - size_t size() const { return m_vector.size(); } - KeyType & operator[] ( size_t n ) { PRECONDITION( n < m_vector.size() ); return m_vector[n]; } - const KeyType & operator[] ( size_t n ) const { PRECONDITION( n < m_vector.size() ); return m_vector[n]; } - -private: - container_type m_vector; - bool m_sorted; - -private: - sorting_array( const sorting_array & ); // \ru реализовать по необходимости \en implement if necessary - sorting_array & operator = ( const sorting_array & ); // \ru реализовать по необходимости \en implement if necessary -}; - -//---------------------------------------------------------------------------------------- -// -// --- -template -void sorting_array::push_back( const KeyType & val ) -{ - m_sorted = m_vector.empty() ? true : m_sorted && _Pr()( m_vector.back(), val ); - m_vector.push_back( val ); -} - -//---------------------------------------------------------------------------------------- -// -//--- -template -void sorting_array::erase( iterator ersItr ) -{ - m_vector.erase( m_vector.begin() + (ersItr - begin()) ); -} - -//---------------------------------------------------------------------------------------- -// -//--- -template -void sorting_array::erase( iterator f, iterator l ) -{ - typename container_type::iterator first, last; - first = last = m_vector.begin(); - std::advance( first, std::distance(begin(),f) ); // convert from const-iterator to non-const - std::advance( last, std::distance(begin(),l) ); - m_vector.erase( first, last ); -} - -//---------------------------------------------------------------------------------------- -// \ru Вставить элемент перед позицией whereItr \en Insert element before position whereItr -//--- -template -typename sorting_array::iterator -sorting_array::insert( iterator _whereItr, const KeyType & val ) -{ - typename container_type::iterator whereItr = m_vector.begin(); - std::advance( whereItr, std::distance(begin(),_whereItr) ); // \ru перевод из конст-итератора в неконст \en convert from const-iterator to non-const - // \ru Далее проверяем не нарушает ли новая вставка упорядоченности массива \en Next, whether new insert does not break ordering of the array - if ( m_sorted && (_whereItr != m_vector.end()) ) - { - m_sorted = ! key_compare()( *_whereItr, val ); - if ( m_sorted ) // val <= _where - { - m_sorted = ( _whereItr == m_vector.begin() ) || !key_compare()( val, *(--_whereItr) ); - } - } - - // \ru Вставка \en Insert - return m_vector.insert( whereItr, val ); -} - -//---------------------------------------------------------------------------------------- -// -//--- -template -void sorting_array::resize( size_t n, const KeyType & val ) -{ - if ( m_sorted && (m_vector.size() < n) && !m_vector.empty() ) - { - m_sorted = !key_compare()( val, m_vector.back() ); // m_vector.back() <= val - } - - m_vector.resize( n, val ); -} - -//---------------------------------------------------------------------------------------- -/// \ru Проверка упорядоченности массива \en Check for ordering array -//--- -template -bool check_ordering( const SortedArray & arr ) -{ - if ( arr.is_sorted() && !arr.empty() ) - { - typename SortedArray::value_type prev( *arr.begin() ); - typename SortedArray::iterator first = arr.begin()+1; - typename SortedArray::iterator last = arr.end(); - for( ; first!=last; ++first ) - { - if ( (*first) < prev ) - { - return false; // \ru нарушен порядок следования \en order has been broken - } - prev = *first; - } - } - - return true; -} - -//---------------------------------------------------------------------------------------- -/// \ru Обнулить структуру данных (использовать осторожно!). \en Reset the data structure (use with caution!). -//--- -template< class DataSt > -inline DataSt null_struct() -{ - DataSt data; - ::memset( &data, 0, sizeof(DataSt) ); - return data; -} - -//---------------------------------------------------------------------------------------- -/// \ru Отладочный инспектор union-контейнера (НЕдоделан!). \en Debug Inspector of union-container (NOT completed yet!). -//--- -template -struct dbg_inspector -{ - union data_t - { - typename _PairUnion::value_type * first; - }; - data_t data; - dbg_inspector() { data.first = 0; } - void init( const _PairUnion & ) {} -}; - -//---------------------------------------------------------------------------------------- -/// \ru Хвостовой элемент для рекурсивного определения типа recursive_union. \en Tail element for recursive determination of type recursive_union. -//--- -struct empty_variant -{ - static const size_t dataSize = 0; - static const size_t power = 0; - struct value_type {}; - bool empty() { return true; } -}; - -//---------------------------------------------------------------------------------------- -/// \ru Получить номер типа из списка union-контейнера. \en Get type index from the list of union-container. -//--- -template -struct which_type -{ - static const int value = 1 + which_type::value; -}; - -// \ru Специализация 1 \en Specialization 1 -template -struct which_type<_PairUnion,typename _PairUnion::value_type> -{ - static const int value = 0; -}; - -// \ru Специализация 2 \en Specialization 2 -template -struct which_type -{ - static const int value = -1; -}; - -//---------------------------------------------------------------------------------------- -/// \ru Получить тип варианта с заданным номером. \en Get variant type with a given index. -//--- -template -struct type_which -{ - typedef typename T::tail_type tail_t; - typedef typename type_which::value_t value_t; -}; - -template -struct type_which -{ - typedef typename T::value_type value_t; -}; - -template -struct type_which -{ -private: - typedef null_type value_t; -}; - -//---------------------------------------------------------------------------------------- -/// \ru Проводник посетителя для рекурсивно-заданного контейнера. \en Conductor of visitor for recursively given container. -//--- -template -struct union_conductor -{ - typedef typename type_which<_PairUnion,typeNb>::value_t _Type; - - /// \ru Статическое приведение типа. \en Static cast of type. - template - static T * unsafe_cast( U & u ) { return u.template unsafe_cast(); } - - /// \ru Статическое приведение типа. \en Static cast of type. - template - static const T * unsafe_cast( const U & u ) { return u.template unsafe_cast(); } - - /// \ru Применить функтор. \en Apply the functor. - template - static inline void apply( const _Visitor & vis, _PairUnion & oper ) - { - if ( oper.which() == typeNb ) - { - vis( *unsafe_cast<_PairUnion,_Type>(oper) ); - } - else - { - union_conductor<_PairUnion,typeNb+1,power>::apply( vis, oper ); - } - } -}; - -//---------------------------------------------------------------------------------------- -// \ru Вызвать деструктор для указателя, если его тип попадает в диапазон от t до power. \en Call the destructor for the pointer if its type is within the range from t to power. -//--- -template -struct union_conductor<_PairUnion,power,power> -{ - template - static inline void apply( const _Visitor & , _PairUnion & ) {} -}; - -//---------------------------------------------------------------------------------------- -/** - \brief \ru Рекурсивное определение класса "union-контейнер". - \en Recursive definition of class "union-container". - \details \ru Контейнер, который может хранить элемент типа "value_type" или один из типов - хвостового контейнера. - \en Container which can store the element of type "value_type" or one of types - of tail container. \~ -*/ -//--- -template -class recursive_union -{ - typedef recursive_union _Myt; - -public: // \ru доступные ассоциативные типы и константы \en available associative types and constants - static const size_t dataSize = sizeof(Type) > Tail::dataSize ? sizeof(Type) : Tail::dataSize; - static const size_t power = 1 + Tail::power; // \ru Количество типов, которое может обеспечить вариант \en The count of types which can provide a variant - - typedef Type value_type; - typedef Tail tail_type; - -public: - recursive_union() : m_typeNb(-1) { ::memset(m_data, 0, dataSize); } - recursive_union( const Type & ); - -#ifndef __DEBUG_MEMORY_ALLOCATE_FREE_ - template - recursive_union( const _Type & elem ) - : m_typeNb( which_type<_Myt,_Type>::value ) - , dbg_data() - { - if ( m_typeNb >= 0 ) - { - new ( (void*)m_data ) _Type( elem ); - } - } -#else // __DEBUG_MEMORY_ALLOCATE_FREE_ - template - recursive_union( const _Type & ) - : m_typeNb( which_type<_Myt,_Type>::value ) - , dbg_data() - { - // (!) The placement form of operator new is required. - C3D_ASSERT_UNCONDITIONAL( false ); - } -#endif //__DEBUG_MEMORY_ALLOCATE_FREE_ - - ~recursive_union(); - -private: // \ru вспомогательные объекты \en assisting objects - // \ru Посетитель для вызова конструктора типа, которым занят union-контейнер \en The visitor to call the type constructor which is occupied by union-container - struct assigner - { - assigner( _Myt & d ) : lOper(&d) {} - - template - void operator() ( const _Type & elem ) const - { - C3D_ASSERT( lOper ); - *lOper = elem; - } - private: - mutable _Myt * lOper; // \ru Левый операнд присвоения \en The left operand of assignment - - private: - assigner & operator = ( const assigner & ); - }; - - // \ru Посетитель для вызова деcтруктора типа, которым занят union-контейнер \en The visitor to call the type destructor which is occupied by union-container - struct destroyer - { - template - static void ignore(const _Type & ) {} // \ru для подавления сообщений \en for suppression of messages - - template - void operator() (const _Type & elem ) const - { - ignore( elem ); - elem.~_Type(); - } - }; - - // \ru Проверка на равенство \en The check for equality - struct comparer - { - const _Myt & data; - mutable bool result; - comparer( const _Myt & d ) : data( d ), result(false) {} - template - void operator() ( const _Type & elem ) const - { - result = (data == elem); - } - private: - comparer & operator = ( const comparer & ); - }; - - struct conductor: public union_conductor<_Myt,0,power> {}; - struct const_conductor: public union_conductor {}; - -public: - int which() const { return m_typeNb; } - // \ru Проверить пустой ли контейнер \en Check whether the container is empty - bool empty() const { return m_typeNb < 0; } - - // \ru Безопасное динамическое приведение типа \en Secure dynamic cast of type - template - _Type * safe_cast() - { - if ( which_type<_Myt,_Type>::value == m_typeNb ) - { - return (_Type*)m_data; - } - return 0; - } - // \ru Безопасное динамическое приведение типа \en Secure dynamic cast of type - template - const _Type * safe_cast() const - { - if ( which_type<_Myt,_Type>::value == m_typeNb ) - { - return (const _Type*)m_data; - } - return 0; - } - - // \ru Статическое приведение типа \en Static cast of type - template - _Type * unsafe_cast() - { - assert( (which_type<_Myt,_Type>::value == m_typeNb) ); - return (_Type*)m_data; - } - - // \ru Статическое приведение типа \en Static cast of type - /* - template typename type_which<_Myt,_typeNb>::value_t & - unsafe_get(); - */ - /* - { - assert( (which_type<_Myt,_Type>::value == m_typeNb) ); - return (type_which<_Myt,_typeNb>::value_t*)m_data; - } - */ - - // \ru Статическое приведение типа \en Static cast of type - template - const _Type * unsafe_cast() const - { - assert( (which_type<_Myt,_Type>::value == m_typeNb) ); - return reinterpret_cast( m_data ); - } - - void release() - { - accept( destroyer() ); - m_typeNb = -1; - } - /* - template - void release() - { - if ( which_type<_Myt,_Type>::value == m_typeNb ) - { - ((_Type*)m_data)->~_Type(); - m_typeNb = -1; - } - } - */ - - // \ru Присвоение другого union-контейнера \en Assignment of another union-container - _Myt & operator = ( const _Myt & v ) - { - release(); - v.accept( assigner(*this) ); - C3D_ASSERT( m_typeNb == v.m_typeNb ); - return *this; - } - - // \ru Присвоение произвольного типа \en Assignment of arbitrary type - /* - template - _Myt & operator = ( const _Type & elem ) - { - m_typeNb = which_type<_Myt,_Type>::value; - if ( m_typeNb >= 0 ) - { - new ( (void*)m_data ) _Type( elem ); - } - return *this; - } - */ - - // \ru Равенство \en Equality - bool operator == ( const _Myt & v ) const - { - if ( m_typeNb == v.m_typeNb ) - { - comparer cmp( *this ); - v.accept( cmp ); - return cmp.result; - } - return false; - } - - // \ru Равенство \en Equality - template - bool operator == ( const _Type & elem ) const - { - if ( m_typeNb == which_type<_Myt,_Type>::value ) - { - return elem == *unsafe_cast<_Type>(); - } - return false; - } - - // \ru Доступ посетителя \en Visitor access - template - void accept( const _Visitor & vis ) const - { - const_conductor::apply( vis, *this ); - } - // \ru Доступ посетителя \en Visitor access - template - void accept( const _Visitor & vis ) - { - conductor::apply( vis, *this ); - } - -private: // \ru данные \en data - char m_data[dataSize]; - int m_typeNb; - dbg_inspector<_Myt> dbg_data; -}; - -//---------------------------------------------------------------------------------------- -// -//--- -template -recursive_union::recursive_union( const Type & elem ) - : m_typeNb( 0 ) - , dbg_data() -{ - dbg_data.init( *this ); - new ( (void*)m_data ) Type( elem ); -} - -//---------------------------------------------------------------------------------------- -// -//--- -template -recursive_union::~recursive_union() -{ - release(); -} - -template -struct def_pair_union // \ru определитель рекурсивного контейнера для пары типов \en determinant of a recursive container for a pair of types -{ - typedef recursive_union value_t; -}; -template -struct def_pair_union -{ - typedef recursive_union value_t; -}; -template<> -struct def_pair_union -{ - typedef empty_variant value_t; -}; - - -//---------------------------------------------------------------------------------------- -/** \brief \ru union-контейнер для экземпляра типа из определенного набора типов. - \en union-container for instance of type from a specific set of types. - \details \ru Позволяет создать тип, принимающий значения из некоторого набора разнородных - типов. - \en Allows to create a type which takes values ??from a set of heterogeneous - types. \~ -*/ -//--- -template< - class T0 - , class T1 - , class T2 = null_type - , class T3 = null_type - , class T4 = null_type - , class T5 = null_type> -class aligned_union -{ - typedef empty_variant _Tail6; - typedef typename def_pair_union::value_t _Tail5; - typedef typename def_pair_union::value_t _Tail4; - typedef typename def_pair_union::value_t _Tail3; - typedef typename def_pair_union::value_t _Tail2; - typedef typename def_pair_union::value_t _Tail1; - typedef typename def_pair_union::value_t _Variant; - - typedef aligned_union _Myt; - -public: - aligned_union(): m_data() {} - template - aligned_union( const T & elem ) : m_data( elem ) {} - -public: - /// \ru Выдать номер текущего типа, которым занят контейнер \en Get a index of the current type which is occupied container - int which() const { return m_data.which(); } - /// \ru Проверить пустой ли контейнер \en Check whether the container is empty - bool empty() const { return m_data.empty(); } - /// \ru Применить функтор (посетитель) \en Apply the functor (visitor) - template - void accept( const _Vis & vis ) const { m_data.accept( vis ); } - /// \ru Применить функтор (посетитель) \en Apply the functor (visitor) - template - void accept( const _Vis & vis ) { m_data.accept( vis ); } - /// \ru Сделать контейнер пустым \en Make an empty container - void clear() { m_data.release(); } - /// \ru Операция присвоения \en Assignment operation - _Myt & operator = ( const _Myt & elem ) { m_data = elem.m_data; return *this; } - template - _Myt & operator = ( const T & elem ) { m_data = elem; return *this; } - // \ru Операция сравнения \en Compare operation - bool operator == ( const _Myt & elem ) const { return m_data == elem.m_data; } - template - bool operator == ( const T & elem ) const { return m_data == elem; } - /// \ru Безопасно преобразовать тип контейнера к указателю \en Safely convert type of container to a pointer - template - T * safe_cast() { return m_data.template safe_cast(); } - template - const T * safe_cast() const { return m_data.template safe_cast(); } - template - bool get( T & val ) const - { - if ( const T * ptr = m_data.template safe_cast() ) - { - val = *ptr; - return true; - } - return false; - } - -private: - _Variant m_data; -}; - -//---------------------------------------------------------------------------------------- -// -// --- -template -bool is_exist( _Iterator begIt, _Iterator endIt, const _Element & elem ) -{ - return std::find( begIt, endIt, elem ) != endIt; -} - -//---------------------------------------------------------------------------------------- -// -// --- -template -bool is_exist_if( _Iterator begIt, _Iterator endIt, _UnaryPredicate _Pred ) -{ - return std::find_if( begIt, endIt, _Pred ) != endIt; -} - -namespace c3d -{ - struct color_label - { - color_code val; - color_label() : val( white_color ) {} - bool operator == ( color_code col ) const { return col == val; } - color_label & operator = ( color_code col ) { val = col; return *this; } - }; - -//---------------------------------------------------------------------------------------- -// -//--- -template -struct _IterTraits { - typedef typename Iterator::value_type value_type; -}; - -template -struct _IterTraits { - typedef T value_type; -}; - -//---------------------------------------------------------------------------------------- -// Диапазон итераторов -//--- -template -struct range : public std::pair -{ - typedef std::pair _Pair; - typedef typename _IterTraits::value_type value_type; - - range( const Iterator & iter, const Iterator & last ) :_Pair( iter, last ) {} - range( const _Pair & other ) :_Pair( other ) {} - range() :_Pair() {} - Iterator begin() const { return _Pair::first; } - Iterator end() const { return _Pair::second; } - bool empty() const { return _Pair::first == _Pair::second; } - size_t size() const { return (size_t)std::distance( _Pair::first, _Pair::second ); } - void clear() { _Pair::first = _Pair::second; } - range & move_front() { ++_Pair::first; return *this; } - - const value_type & front() const { return (*begin()); } - const value_type & back() const { return (*(end() - 1)); } -}; - -//---------------------------------------------------------------------------------------- -// Get a range of the STL-container -//--- -template -range range_of( const _Cont & list ) -{ - range rng( list.begin(), list.end() ); - return rng; -} - -//---------------------------------------------------------------------------------------- -// Get a range of iterators -//--- -template -range<_Iterator> make_range( _Iterator first, _Iterator last ) -{ - c3d::range<_Iterator> rng( first, last ); - return rng; -} - -}; - -#endif // __GENERIC_UTILITY_H - -// eof +////////////////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Шаблонные утилиты. + \en Template utilities. \~ +*/ +////////////////////////////////////////////////////////////////////////////////////////// + +#ifndef __GENERIC_UTILITY_H +#define __GENERIC_UTILITY_H + +#include +// +#include +// +#include +#include + +#include +#include +#include +#include + +//---------------------------------------------------------------------------------------- +/// \ru Пустой тип данных. \en Empty data type. +//--- +struct null_type +{ + static const null_type value() { return null_type(); } +}; + +//---------------------------------------------------------------------------------------- +/** \brief \ru Шаблон для получения индексного типа (для статического сопоставления типов на этапе компиляции) + \en Template to generate an indexed type (for static type-matching in compile-time) +*/ +//--- +template +struct index_tag +{ + index_tag() {} // Constructor under GCC compiler +}; + +//---------------------------------------------------------------------------------------- +/// \ru Цветовая маркировка (применяется для графов) \en Color marking (used for graphs) +//--- +enum color_code +{ + white_color=0 + , black_color=1 + , red_color=2 + , gray_color + , green_color + , orange_color + , visited_color +}; + +//---------------------------------------------------------------------------------------- +// Constant valued function +//--- +template +bool boolFunc() { return boolVal; } + +/* +//---------------------------------------------------------------------------------------- +/// \ru Цветовая маркировка, например, для графовых объектов \en Color marking, for example: for graph objects +//--- +template +struct color_traits +{ + static color_code white() { return white_color; } + static color_code gray() { return gray_color; } + static color_code green() { return green_color; } + static color_code red() { return red_color; } + static color_code black() { return black_color; } +}; + +template<> +struct color_traits +{ + static char white() { return 0; } + static char gray() { return 1; } + static char green() { return 2; } + static char red() { return 3; } + static char black() { return 4; } +}; +*/ + +//---------------------------------------------------------------------------------------- +/// \ru Графовые характеристики типов. \en Graph datatype traits. +//--- +template< class Graph > +struct graph_traits +{ + /* + Ассоциативные типы данных концепции графа. + Associative datatypes of the graph concept. + */ + typedef typename Graph::vertex vertex; // Тип, интерпретируемый, как вершина графа. + typedef typename Graph::edge edge; // Тип, интерпретируемый, как ребро графа + typedef typename Graph::vertex_iterator vertex_iterator; // Обход всех вершин графа + typedef typename Graph::adjacency_iterator adjacency_iterator; // Обход смежных вершин некоторой вершины + typedef typename Graph::vertices_size_t vertices_size_t; // Целочисленный тип размера графа + typedef typename Graph::degree_size_t degree_size_t; // Целочисленный тип вершинной степени + typedef typename Graph::edge_iterator edge_iterator; // Итератор обхода исходящих ребер [или неориентированных ребер] +}; + +//---------------------------------------------------------------------------------------- +/// \ru Пара ссылок. \en A pair of references. +//--- +template +struct ref_pair +{ + _Ty1 & first; + _Ty2 & second; + + ref_pair( _Ty1 & val1, _Ty2 & val2 ) + : first(val1), second(val2) + {} + ref_pair( const ref_pair & other ) + : first(other.first), second(other.second) + {} + + template + ref_pair( const std::pair<_Other1, _Other2> & right ) + : first(right.first), second(right.second) + {} + + template + ref_pair & operator = ( const std::pair<_Other1, _Other2> & right ) + { + first = right.first; + second = right.second; + return *this; + } + +private: + ref_pair & operator = ( const ref_pair & ); // \ru не реализуемо \en not implemented +}; + +//---------------------------------------------------------------------------------------- +/// \ru Выдать ссылки одной связкой. \en Get references as one bunch. +//--- +template +inline ref_pair +tie( Type & iter1, Type & iter2 ) +{ + return ref_pair ( iter1, iter2 ); +} + +//---------------------------------------------------------------------------------------- +/// \ru Наибольшее из двух. \en Maximum of two. +// --- +template +inline const T & max_of( const T & elem1, const T & elem2 ) +{ + if ( elem2 < elem1 ) + return elem1; + return elem2; +} + +//---------------------------------------------------------------------------------------- +/// \ru Наибольшее из двух. \en Maximum of two. +// --- +template +inline const T & min_of( const T & elem1, const T & elem2 ) +{ + if ( elem1 < elem2 ) + return elem1; + return elem2; +} + +//---------------------------------------------------------------------------------------- +/// \ru Поменять местами значения. \en Swap the values. +// --- +template +inline void swap_vals( T & elem1, T & elem2 ) +{ + T tmp = elem1; + elem1 = elem2; + elem2 = tmp; +} + +//---------------------------------------------------------------------------------------- +/// \ru Поменять местами значения указателей. \en Swap the values of pointers. +// --- +template +inline void swap_ptrs( T* & elem1, T* & elem2 ) +{ + T * tmp = elem1; + elem1 = elem2; + elem2 = tmp; +} + +//---------------------------------------------------------------------------------------- +/// \ru Поменять местами значения указателей. \en Swap the values of pointers. +//--- +template +inline void swap_ptrs( SPtr & p1, SPtr & p2 ) +{ + SPtr t = p1; + p1 = p2; + p2 = t; +} + +//---------------------------------------------------------------------------------------- +// \ru Равенство пары указателей \en Equality of pointer pair +//--- +template< class Type1, class Type2 > +bool equal_ptrs( const Type1 * ptr1, const Type2 * ptr2 ) +{ + return static_cast(ptr1) == ptr2; +} + +//---------------------------------------------------------------------------------------- +// \ru Равенство пары указателей \en Equality of pointer pair +//--- +template< class Type1, class Type2 > +bool equal_ptrs( SPtr ptr1, const Type2 * ptr2 ) +{ + return static_cast(ptr1.get()) == ptr2; +} + +//---------------------------------------------------------------------------------------- +// \ru Равенство пары двухмерных векторов или точек \en Equality of 2D points or vectors +//--- +template< class XY1, class XY2 > +bool equal_xy( const XY1 & v1, const XY2 & v2, double eps ) +{ + if ( fabs(v1.x-v2.x) > eps ) + return false; + if ( fabs(v1.y-v2.y) > eps ) + return false; + return true; +} + +//---------------------------------------------------------------------------------------- +// \ru Наименьший общий делитель \en The lowest common denominator +// --- +template < typename Integer > +Integer euclid_algo ( Integer a, Integer b ) +{ + Integer const zero = static_cast( 0 ); + + bool goOn = true; + while ( goOn ) + { + if ( a == zero ) { + goOn = false; + return b; + } + + b %= a; + + if ( b == zero ) { + goOn = false; + return a; + } + + a %= b; + } + return zero; +} + +//---------------------------------------------------------------------------------------- +/// \ru Получить НОД для пары целых чисел \en Get GCD for a pair of integers +// --- +template < typename IntegerType > +inline IntegerType gcd( IntegerType a, IntegerType b ) +{ + IntegerType const zero = static_cast( 0 ); + IntegerType const result = ::euclid_algo( a, b ); + return ( result < zero ) ? -result : result; +} + + +//---------------------------------------------------------------------------------------- +// \ru Функциональный объект - коллектор \en The functional object - collector +/*\ru Играет роль посетителя foreach-алгоритмов, осуществляющий накачку STL-совместимых контейнеров + \en Serves as a visitor of foreach-algorithms exercising pumping of STL-compatible containers \~ +*/ +//--- +template +struct collector +{ + typedef typename _Cont::value_type value_type; + _Cont & container; // \ru STL-совместимый контейнер \en STL-compatible container + + collector( _Cont & arr ) + : container( arr ) {} + collector( const collector & c ) : container( c.container ) {} + void operator () ( const value_type & elem ) const + { + container.push_back( elem ); + } + +private: // \ru не реализовано \en not implemented + collector & operator = ( const collector & ); +}; + + +//---------------------------------------------------------------------------------------- +/** \brief \ru Статический вектор. + \en Static vector. + \note \ru Требуется, что бы элементы вектора имели конструктор по умолчанию, + конструктор копирования и оператор присвоения. + \en Required that the vector elements have a default constructor, + copy constructor and assignment operator. \~ +*/ +//--- +template +class static_array +{ +public: + typedef Elem value_type; // \ru ассоциативный тип элемента массива \en associative type of array element + +private: + value_type arr[arrSize]; // \ru статическое выделение памяти под массив \en static allocation for the array + +public: + /// \ru Инициализация одним элементом. \en Initialization of one element. + explicit static_array( const Elem & val ) + { + fill( val ); + } + /// \ru Инициализация парой элементов. \en Initialization of a pair of elements. + static_array( const Elem & e1, const Elem & e2 ) + { + PRECONDITION( arrSize == 2 ); + arr[0] = e1; + arr[1] = e2; + } + /// \ru Конструктор по тройке. \en Constructs as a triplet. + static_array( const Elem & e1, const Elem & e2, const Elem & e3 ) + { + PRECONDITION( arrSize == 3 ); + arr[0] = e1; + arr[1] = e2; + arr[2] = e3; + } + explicit static_array( const static_array & vec ) + { + _Assign( vec ); + } + + template + static_array( const _Vector & vec ) + { + _Assign( vec ); + } + + /// \ru Инициализация одним элементом. \en Initialization of one element. + static_array & fill( const Elem & val ) + { + for( size_t idx = 0; idx + static_array & assign( _Iter iter, _Iter last ) + { + for ( value_type * myIter = arr ; iter!=last; ++iter, ++myIter ) + { + PRECONDITION( myIter < arr+arrSize ); + *myIter = *iter; + } + return *this; + } + + inline value_type & operator[] ( size_t idx ) + { + PRECONDITION( idx < arrSize ); + return arr[idx]; + } + inline const value_type & operator[] ( size_t idx ) const + { + PRECONDITION( idx < arrSize ); + return arr[idx]; + } + template + static_array & operator = ( const _Vector & vec ) + { + _Assign( vec ); + return *this; + } + + inline const Elem * c_arr() const { return arr; } + inline Elem * c_arr() { return arr; } + inline size_t size() const { return arrSize; } + inline value_type & front() { return *arr; } + inline value_type & back() { PRECONDITION(arrSize>0); return arr[arrSize-1]; } + inline const value_type & front() const { return *arr; } + inline const value_type & back() const { PRECONDITION(arrSize>0); return arr[arrSize-1]; } + +private: + template< class _Vector > + void _Assign( const _Vector & vec ) + { + PRECONDITION( vec.size() == size() ); + for ( size_t idx = ::min_of( arrSize, vec.size() ); idx > 0; ) + { + idx--; + arr[idx] = vec[idx]; + } + } +}; + +// \ru (!) Запретить пустые статические массивы \en (!) Prevent empty static arrays +template class static_array {}; + +//---------------------------------------------------------------------------------------- +/// \ru Статический вектор двух элементов (пара). \en Static vector of two elements (pair). +//--- +template +struct static_pair: public static_array +{ + typedef static_array parent_type; + // static_pair(): parent_type() {} + explicit static_pair( const Elem & el ): parent_type( el ) {} + static_pair( const Elem & el1, const Elem & el2 ): parent_type( el1, el2 ) {} + explicit static_pair( const static_pair & pair ) : parent_type( pair ) {} + + static_pair & operator = ( const static_pair & vec ) + { + parent_type::operator=( vec ); + return *this; + } +}; + +//---------------------------------------------------------------------------------------- +/** + \brief \ru Динамический контейнер для хранения элементов упорядоченного множества. + \en Dynamic container for storing elements of an ordered set. + + \details + \ru Тип элемента контейнера должен иметь операторы порядка. Не стоит путать этот + тип контейнера с set или map. Он вовсе не обязан всегда поддерживаться в отсортированном + состоянии, а только тогда, когда это закажут (с кэшированием алгоритма сортировки). + Гарантируется, что вектор отсортирован сразу после вызова функций get_sorted или sort. + Константные методы, а также метод erase не нарушают сортировки.\n + \en Type of container element must have order operators. Do not confuse this + type of container with a set or map. It is not obliged always be supported in a sorted + state, and only when it is needed (with caching of sorting algorithm). It is guaranteed + that the vector is sorted immediately after the function call get_sorted or sort. + Const methods and the erase method does not break sorting. \n \~ + + \par \ru Про эффективность + + Часто сортированный вектор оказывается более эффективным, чем std::map или std::set, + особенно если добавление/удаление элементов массива осуществляется серийно и достаточно + редко перемежаются, с запросами быстрого (бинарного) поиска элемента или его места по + порядку. В отличие от map или set минимально дефрагментируется память и не требуется + избыточной информации для хранения указателей (может занимать в 4 раза меньше памяти). + Для быстрых запросов можно применять стандартные алгоритмы, такие + как std::binary_search, std::lower_bound и т.п. + + \en About efficiency + + Often sorted vector is more effective than + std::map or std::set especially when adding/removing elements + of the array is standard and is rarely interspersed + with queries quickly (binary) search of element or its place by + the order. In contrast to the map or set minimal defragmented + memory and does not require excess information for storage of pointers + (can occupy memory in less than 4 times). + For fast queries, can use standard algorithms such + as std::binary_search, std::lower_bound etc. \~ +*/ +//--- +template > // \ru KeyType - тип элемента с операторами порядка "<" \en KeyType - the element type with the operators of order "<" +class sorting_array +{ +public: + typedef std::vector container_type; + typedef typename container_type::value_type value_type; + typedef typename container_type::size_type size_type; + typedef typename container_type::const_iterator iterator; + typedef typename container_type::iterator _iterator; + typedef std::pair iter_range; + typedef _Pr key_compare; // \ru отношение порядка (предикат) \en order relation (predicate) + +public: + sorting_array() : m_vector(), m_sorted( true ) {} + +public: + iter_range get_sorted() { sort(); return iter_range(m_vector.begin(), m_vector.end()); } + iter_range range() const { return iter_range(m_vector.begin(), m_vector.end()); } + const KeyType & sorted_back() { sort(); return m_vector.back(); } + bool empty() const { return m_vector.empty(); } + iterator begin() const { return m_vector.begin(); } + iterator end() const { return m_vector.end(); } + _iterator _begin() { return m_vector.begin(); } + _iterator _end() { return m_vector.end(); } + const KeyType & front() const { return m_vector.front(); } + const KeyType & back() const { return m_vector.back(); } + void erase( iterator ); + void erase( iterator f, iterator l ); + bool is_sorted() const { return m_sorted; } + iterator insert( iterator _whereItr, const KeyType & val ); // \ru вставить элемент перед позицией whereItr \en insert element before position whereItr + template + void insert( iterator position, InputIterator first, InputIterator last ) + { + m_vector.insert( position, first, last ); + m_sorted = false; + } + template + void assign ( InputIterator first, InputIterator last ) + { + m_vector.assign( first, last ); + m_sorted = false; + } + void resize( size_t n, const KeyType & val ); + void reserve ( size_t n ) { m_vector.reserve( n ); } + void push_back( const KeyType & val ); + void sort() + { + if ( !m_sorted ) + { + std::sort( m_vector.begin(), m_vector.end(), _Pr() ); + m_sorted = true; + } + } + void clear() { m_vector.clear(); } + size_t size() const { return m_vector.size(); } + KeyType & operator[] ( size_t n ) { PRECONDITION( n < m_vector.size() ); return m_vector[n]; } + const KeyType & operator[] ( size_t n ) const { PRECONDITION( n < m_vector.size() ); return m_vector[n]; } + +private: + container_type m_vector; + bool m_sorted; + +private: + sorting_array( const sorting_array & ); // \ru реализовать по необходимости \en implement if necessary + sorting_array & operator = ( const sorting_array & ); // \ru реализовать по необходимости \en implement if necessary +}; + +//---------------------------------------------------------------------------------------- +// +// --- +template +void sorting_array::push_back( const KeyType & val ) +{ + m_sorted = m_vector.empty() ? true : m_sorted && _Pr()( m_vector.back(), val ); + m_vector.push_back( val ); +} + +//---------------------------------------------------------------------------------------- +// +//--- +template +void sorting_array::erase( iterator ersItr ) +{ + m_vector.erase( m_vector.begin() + (ersItr - begin()) ); +} + +//---------------------------------------------------------------------------------------- +// +//--- +template +void sorting_array::erase( iterator f, iterator l ) +{ + typename container_type::iterator first, last; + first = last = m_vector.begin(); + std::advance( first, std::distance(begin(),f) ); // convert from const-iterator to non-const + std::advance( last, std::distance(begin(),l) ); + m_vector.erase( first, last ); +} + +//---------------------------------------------------------------------------------------- +// \ru Вставить элемент перед позицией whereItr \en Insert element before position whereItr +//--- +template +typename sorting_array::iterator +sorting_array::insert( iterator _whereItr, const KeyType & val ) +{ + typename container_type::iterator whereItr = m_vector.begin(); + std::advance( whereItr, std::distance(begin(),_whereItr) ); // \ru перевод из конст-итератора в неконст \en convert from const-iterator to non-const + // \ru Далее проверяем не нарушает ли новая вставка упорядоченности массива \en Next, whether new insert does not break ordering of the array + if ( m_sorted && (_whereItr != m_vector.end()) ) + { + m_sorted = ! key_compare()( *_whereItr, val ); + if ( m_sorted ) // val <= _where + { + m_sorted = ( _whereItr == m_vector.begin() ) || !key_compare()( val, *(--_whereItr) ); + } + } + + // \ru Вставка \en Insert + return m_vector.insert( whereItr, val ); +} + +//---------------------------------------------------------------------------------------- +// +//--- +template +void sorting_array::resize( size_t n, const KeyType & val ) +{ + if ( m_sorted && (m_vector.size() < n) && !m_vector.empty() ) + { + m_sorted = !key_compare()( val, m_vector.back() ); // m_vector.back() <= val + } + + m_vector.resize( n, val ); +} + +//---------------------------------------------------------------------------------------- +/// \ru Проверка упорядоченности массива \en Check for ordering array +//--- +template +bool check_ordering( const SortedArray & arr ) +{ + if ( arr.is_sorted() && !arr.empty() ) + { + typename SortedArray::value_type prev( *arr.begin() ); + typename SortedArray::iterator first = arr.begin()+1; + typename SortedArray::iterator last = arr.end(); + for( ; first!=last; ++first ) + { + if ( (*first) < prev ) + { + return false; // \ru нарушен порядок следования \en order has been broken + } + prev = *first; + } + } + + return true; +} + +//---------------------------------------------------------------------------------------- +/// \ru Обнулить структуру данных (использовать осторожно!). \en Reset the data structure (use with caution!). +//--- +template< class DataSt > +inline DataSt null_struct() +{ + DataSt data; + ::memset( &data, 0, sizeof(DataSt) ); + return data; +} + +//---------------------------------------------------------------------------------------- +/// \ru Отладочный инспектор union-контейнера (НЕдоделан!). \en Debug Inspector of union-container (NOT completed yet!). +//--- +template +struct dbg_inspector +{ + union data_t + { + typename _PairUnion::value_type * first; + }; + data_t data; + dbg_inspector() { data.first = 0; } + void init( const _PairUnion & ) {} +}; + +//---------------------------------------------------------------------------------------- +/// \ru Хвостовой элемент для рекурсивного определения типа recursive_union. \en Tail element for recursive determination of type recursive_union. +//--- +struct empty_variant +{ + static const size_t dataSize = 0; + static const size_t power = 0; + struct value_type {}; + bool empty() { return true; } +}; + +//---------------------------------------------------------------------------------------- +/// \ru Получить номер типа из списка union-контейнера. \en Get type index from the list of union-container. +//--- +template +struct which_type +{ + static const int value = 1 + which_type::value; +}; + +// \ru Специализация 1 \en Specialization 1 +template +struct which_type<_PairUnion,typename _PairUnion::value_type> +{ + static const int value = 0; +}; + +// \ru Специализация 2 \en Specialization 2 +template +struct which_type +{ + static const int value = -1; +}; + +//---------------------------------------------------------------------------------------- +/// \ru Получить тип варианта с заданным номером. \en Get variant type with a given index. +//--- +template +struct type_which +{ + typedef typename T::tail_type tail_t; + typedef typename type_which::value_t value_t; +}; + +template +struct type_which +{ + typedef typename T::value_type value_t; +}; + +template +struct type_which +{ +private: + typedef null_type value_t; +}; + +//---------------------------------------------------------------------------------------- +/// \ru Проводник посетителя для рекурсивно-заданного контейнера. \en Conductor of visitor for recursively given container. +//--- +template +struct union_conductor +{ + typedef typename type_which<_PairUnion,typeNb>::value_t _Type; + + /// \ru Статическое приведение типа. \en Static cast of type. + template + static T * unsafe_cast( U & u ) { return u.template unsafe_cast(); } + + /// \ru Статическое приведение типа. \en Static cast of type. + template + static const T * unsafe_cast( const U & u ) { return u.template unsafe_cast(); } + + /// \ru Применить функтор. \en Apply the functor. + template + static inline void apply( const _Visitor & vis, _PairUnion & oper ) + { + if ( oper.which() == typeNb ) + { + vis( *unsafe_cast<_PairUnion,_Type>(oper) ); + } + else + { + union_conductor<_PairUnion,typeNb+1,power>::apply( vis, oper ); + } + } +}; + +//---------------------------------------------------------------------------------------- +// \ru Вызвать деструктор для указателя, если его тип попадает в диапазон от t до power. \en Call the destructor for the pointer if its type is within the range from t to power. +//--- +template +struct union_conductor<_PairUnion,power,power> +{ + template + static inline void apply( const _Visitor & , _PairUnion & ) {} +}; + +//---------------------------------------------------------------------------------------- +/** + \brief \ru Рекурсивное определение класса "union-контейнер". + \en Recursive definition of class "union-container". + \details \ru Контейнер, который может хранить элемент типа "value_type" или один из типов + хвостового контейнера. + \en Container which can store the element of type "value_type" or one of types + of tail container. \~ +*/ +//--- +template +class recursive_union +{ + typedef recursive_union _Myt; + +public: // \ru доступные ассоциативные типы и константы \en available associative types and constants + static const size_t dataSize = sizeof(Type) > Tail::dataSize ? sizeof(Type) : Tail::dataSize; + static const size_t power = 1 + Tail::power; // \ru Количество типов, которое может обеспечить вариант \en The count of types which can provide a variant + + typedef Type value_type; + typedef Tail tail_type; + +public: + recursive_union() : m_typeNb(-1) { ::memset(m_data, 0, dataSize); } + recursive_union( const Type & ); + +#ifndef __DEBUG_MEMORY_ALLOCATE_FREE_ + template + recursive_union( const _Type & elem ) + : m_typeNb( which_type<_Myt,_Type>::value ) + , dbg_data() + { + if ( m_typeNb >= 0 ) + { + new ( (void*)m_data ) _Type( elem ); + } + } +#else // __DEBUG_MEMORY_ALLOCATE_FREE_ + template + recursive_union( const _Type & ) + : m_typeNb( which_type<_Myt,_Type>::value ) + , dbg_data() + { + // (!) The placement form of operator new is required. + C3D_ASSERT_UNCONDITIONAL( false ); + } +#endif //__DEBUG_MEMORY_ALLOCATE_FREE_ + + ~recursive_union(); + +private: // \ru вспомогательные объекты \en assisting objects + // \ru Посетитель для вызова конструктора типа, которым занят union-контейнер \en The visitor to call the type constructor which is occupied by union-container + struct assigner + { + assigner( _Myt & d ) : lOper(&d) {} + + template + void operator() ( const _Type & elem ) const + { + C3D_ASSERT( lOper ); + *lOper = elem; + } + private: + mutable _Myt * lOper; // \ru Левый операнд присвоения \en The left operand of assignment + + private: + assigner & operator = ( const assigner & ); + }; + + // \ru Посетитель для вызова деcтруктора типа, которым занят union-контейнер \en The visitor to call the type destructor which is occupied by union-container + struct destroyer + { + template + static void ignore(const _Type & ) {} // \ru для подавления сообщений \en for suppression of messages + + template + void operator() (const _Type & elem ) const + { + ignore( elem ); + elem.~_Type(); + } + }; + + // \ru Проверка на равенство \en The check for equality + struct comparer + { + const _Myt & data; + mutable bool result; + comparer( const _Myt & d ) : data( d ), result(false) {} + template + void operator() ( const _Type & elem ) const + { + result = (data == elem); + } + private: + comparer & operator = ( const comparer & ); + }; + + struct conductor: public union_conductor<_Myt,0,power> {}; + struct const_conductor: public union_conductor {}; + +public: + int which() const { return m_typeNb; } + // \ru Проверить пустой ли контейнер \en Check whether the container is empty + bool empty() const { return m_typeNb < 0; } + + // \ru Безопасное динамическое приведение типа \en Secure dynamic cast of type + template + _Type * safe_cast() + { + if ( which_type<_Myt,_Type>::value == m_typeNb ) + { + return (_Type*)m_data; + } + return 0; + } + // \ru Безопасное динамическое приведение типа \en Secure dynamic cast of type + template + const _Type * safe_cast() const + { + if ( which_type<_Myt,_Type>::value == m_typeNb ) + { + return (const _Type*)m_data; + } + return 0; + } + + // \ru Статическое приведение типа \en Static cast of type + template + _Type * unsafe_cast() + { + assert( (which_type<_Myt,_Type>::value == m_typeNb) ); + return (_Type*)m_data; + } + + // \ru Статическое приведение типа \en Static cast of type + /* + template typename type_which<_Myt,_typeNb>::value_t & + unsafe_get(); + */ + /* + { + assert( (which_type<_Myt,_Type>::value == m_typeNb) ); + return (type_which<_Myt,_typeNb>::value_t*)m_data; + } + */ + + // \ru Статическое приведение типа \en Static cast of type + template + const _Type * unsafe_cast() const + { + assert( (which_type<_Myt,_Type>::value == m_typeNb) ); + return reinterpret_cast( m_data ); + } + + void release() + { + accept( destroyer() ); + m_typeNb = -1; + } + /* + template + void release() + { + if ( which_type<_Myt,_Type>::value == m_typeNb ) + { + ((_Type*)m_data)->~_Type(); + m_typeNb = -1; + } + } + */ + + // \ru Присвоение другого union-контейнера \en Assignment of another union-container + _Myt & operator = ( const _Myt & v ) + { + release(); + v.accept( assigner(*this) ); + C3D_ASSERT( m_typeNb == v.m_typeNb ); + return *this; + } + + // \ru Присвоение произвольного типа \en Assignment of arbitrary type + /* + template + _Myt & operator = ( const _Type & elem ) + { + m_typeNb = which_type<_Myt,_Type>::value; + if ( m_typeNb >= 0 ) + { + new ( (void*)m_data ) _Type( elem ); + } + return *this; + } + */ + + // \ru Равенство \en Equality + bool operator == ( const _Myt & v ) const + { + if ( m_typeNb == v.m_typeNb ) + { + comparer cmp( *this ); + v.accept( cmp ); + return cmp.result; + } + return false; + } + + // \ru Равенство \en Equality + template + bool operator == ( const _Type & elem ) const + { + if ( m_typeNb == which_type<_Myt,_Type>::value ) + { + return elem == *unsafe_cast<_Type>(); + } + return false; + } + + // \ru Доступ посетителя \en Visitor access + template + void accept( const _Visitor & vis ) const + { + const_conductor::apply( vis, *this ); + } + // \ru Доступ посетителя \en Visitor access + template + void accept( const _Visitor & vis ) + { + conductor::apply( vis, *this ); + } + +private: // \ru данные \en data + char m_data[dataSize]; + int m_typeNb; + dbg_inspector<_Myt> dbg_data; +}; + +//---------------------------------------------------------------------------------------- +// +//--- +template +recursive_union::recursive_union( const Type & elem ) + : m_typeNb( 0 ) + , dbg_data() +{ + dbg_data.init( *this ); + new ( (void*)m_data ) Type( elem ); +} + +//---------------------------------------------------------------------------------------- +// +//--- +template +recursive_union::~recursive_union() +{ + release(); +} + +template +struct def_pair_union // \ru определитель рекурсивного контейнера для пары типов \en determinant of a recursive container for a pair of types +{ + typedef recursive_union value_t; +}; +template +struct def_pair_union +{ + typedef recursive_union value_t; +}; +template<> +struct def_pair_union +{ + typedef empty_variant value_t; +}; + + +//---------------------------------------------------------------------------------------- +/** \brief \ru union-контейнер для экземпляра типа из определенного набора типов. + \en union-container for instance of type from a specific set of types. + \details \ru Позволяет создать тип, принимающий значения из некоторого набора разнородных + типов. + \en Allows to create a type which takes values ??from a set of heterogeneous + types. \~ +*/ +//--- +template< + class T0 + , class T1 + , class T2 = null_type + , class T3 = null_type + , class T4 = null_type + , class T5 = null_type> +class aligned_union +{ + typedef empty_variant _Tail6; + typedef typename def_pair_union::value_t _Tail5; + typedef typename def_pair_union::value_t _Tail4; + typedef typename def_pair_union::value_t _Tail3; + typedef typename def_pair_union::value_t _Tail2; + typedef typename def_pair_union::value_t _Tail1; + typedef typename def_pair_union::value_t _Variant; + + typedef aligned_union _Myt; + +public: + aligned_union(): m_data() {} + template + aligned_union( const T & elem ) : m_data( elem ) {} + +public: + /// \ru Выдать номер текущего типа, которым занят контейнер \en Get a index of the current type which is occupied container + int which() const { return m_data.which(); } + /// \ru Проверить пустой ли контейнер \en Check whether the container is empty + bool empty() const { return m_data.empty(); } + /// \ru Применить функтор (посетитель) \en Apply the functor (visitor) + template + void accept( const _Vis & vis ) const { m_data.accept( vis ); } + /// \ru Применить функтор (посетитель) \en Apply the functor (visitor) + template + void accept( const _Vis & vis ) { m_data.accept( vis ); } + /// \ru Сделать контейнер пустым \en Make an empty container + void clear() { m_data.release(); } + /// \ru Операция присвоения \en Assignment operation + _Myt & operator = ( const _Myt & elem ) { m_data = elem.m_data; return *this; } + template + _Myt & operator = ( const T & elem ) { m_data = elem; return *this; } + // \ru Операция сравнения \en Compare operation + bool operator == ( const _Myt & elem ) const { return m_data == elem.m_data; } + template + bool operator == ( const T & elem ) const { return m_data == elem; } + /// \ru Безопасно преобразовать тип контейнера к указателю \en Safely convert type of container to a pointer + template + T * safe_cast() { return m_data.template safe_cast(); } + template + const T * safe_cast() const { return m_data.template safe_cast(); } + template + bool get( T & val ) const + { + if ( const T * ptr = m_data.template safe_cast() ) + { + val = *ptr; + return true; + } + return false; + } + +private: + _Variant m_data; +}; + +//---------------------------------------------------------------------------------------- +// +// --- +template +bool is_exist( _Iterator begIt, _Iterator endIt, const _Element & elem ) +{ + return std::find( begIt, endIt, elem ) != endIt; +} + +//---------------------------------------------------------------------------------------- +// +// --- +template +bool is_exist_if( _Iterator begIt, _Iterator endIt, _UnaryPredicate _Pred ) +{ + return std::find_if( begIt, endIt, _Pred ) != endIt; +} + +namespace c3d +{ + struct color_label + { + color_code val; + color_label() : val( white_color ) {} + bool operator == ( color_code col ) const { return col == val; } + color_label & operator = ( color_code col ) { val = col; return *this; } + }; + +//---------------------------------------------------------------------------------------- +// +//--- +template +struct _IterTraits { + typedef typename Iterator::value_type value_type; +}; + +template +struct _IterTraits { + typedef T value_type; +}; + +//---------------------------------------------------------------------------------------- +// Диапазон итераторов +//--- +template +struct range : public std::pair +{ + typedef std::pair _Pair; + typedef typename _IterTraits::value_type value_type; + + range( const Iterator & iter, const Iterator & last ) :_Pair( iter, last ) {} + range( const _Pair & other ) :_Pair( other ) {} + range() :_Pair() {} + Iterator begin() const { return _Pair::first; } + Iterator end() const { return _Pair::second; } + bool empty() const { return _Pair::first == _Pair::second; } + size_t size() const { return (size_t)std::distance( _Pair::first, _Pair::second ); } + void clear() { _Pair::first = _Pair::second; } + range & move_front() { ++_Pair::first; return *this; } + + const value_type & front() const { return (*begin()); } + const value_type & back() const { return (*(end() - 1)); } +}; + +//---------------------------------------------------------------------------------------- +// Get a range of the STL-container +//--- +template +range range_of( const _Cont & list ) +{ + range rng( list.begin(), list.end() ); + return rng; +} + +//---------------------------------------------------------------------------------------- +// Get a range of iterators +//--- +template +range<_Iterator> make_range( _Iterator first, _Iterator last ) +{ + c3d::range<_Iterator> rng( first, last ); + return rng; +} + +}; + +#endif // __GENERIC_UTILITY_H + +// eof diff --git a/C3d/Include/graph_algorithms.h b/C3d/Include/graph_algorithms.h index 58dcccb..df80c0c 100644 --- a/C3d/Include/graph_algorithms.h +++ b/C3d/Include/graph_algorithms.h @@ -1,1030 +1,1030 @@ -////////////////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru Обобщенные алгоритмы на графах. - \en Generic graph algorithms. \~ - -*/ -/////////////////////////////////////////////////////////////////////// MA 25.10.2010 //// - -#ifndef __GRAPH_ALGORITHMS_H -#define __GRAPH_ALGORITHMS_H -// -#include -#include - -//---------------------------------------------------------------------------------------- -// -/// Пустой посетитель алгоритма обхода графа в глубину -/** - \ingroup MathGC_Algo - \attention Класс не предназначен для того, что бы применять статический - или динамический полиморфизм, т.е. не обязывает своих наследников - перегружать методы. -*/ -//--- -template -struct DefaultDFSVisitor -{ - typedef typename Graph::vertex_index vertex_index; - - /// Встретили "обратное" ребро (дуга, если орграф) dfs-дерева. - /** - Вызывается когда при посещении вершины v найдено исх.ребро, направленное к - ранее посещенной вершине. Другими словами, вершина u является предком - вершине v в dfs-дереве. - */ - void BackEdge( vertex_index /*v*/, vertex_index /*u*/, const Graph & /*g*/ ) {} - /// Вызывается, когда впервые проходим через исходящую дугу v->u, вершину u еще не посещали - void ExamineEdge( vertex_index /*v*/, vertex_index /*u*/, const Graph & /*g*/ ) {} - /// Посещение вершины: Вызывается один раз для каждой вершины, когда она впервые начинает просматриваться - void DiscoverNode( vertex_index /*v*/, const Graph & /*g*/ ) {} - /// Вершина рассмотрена: Означает, что все исходящие ребра вершины рассмотрены - void FinishNode( vertex_index /*v*/, const Graph & /*g*/ ) {} - /// Встретили "поперечное" или "прямое" ребро - /** - Вызывается, когда находим дугу, идущую к другому dfs-дереву, либо прямую дугу, - идущую к потомку того же дерева, имеющему два и более отцов. - Для поперечного ребра вызывается только для ориентированных графов. - */ - void ForwardOrCrossEdge( vertex_index /*v*/, vertex_index /*u*/, const Graph & /*g*/ ) {} - /// Отвечает, что вершина исключена из рассмотрения - bool Ignored( vertex_index /*v*/, const Graph & /*g*/ ) const { return false; } - /// Означает, что начато рассмотрение корневой вершины будущего дерева обхода - void StartNode( vertex_index /*v*/, const Graph & /*g*/ ) {} - /// Ребро стало "древесным" (принадлежит dfs-дереву). Вызывается перед переходом от посещенной вершины v к еще не посещенной вершине u - void TreeEdge( vertex_index /*v*/, vertex_index /*u*/, const Graph & /*g*/ ) {} -}; - - -////////////////////////////////////////////////////////////////////////////////////////// -// -/// Посетитель алгоритма поиска блоков и точек сочленения в неориентированном графе -/** - Позволяет настроить алгоритм поиска блоков и точек сочленения под конкретные реализации. -*/ -////////////////////////////////////////////////////////////////////////////////////////// - -template< class Graph > -struct DefaultBicompVisitor -{ - /// Найден блок, как последовательность ребер - template - void BlockFounded( EdgeIterator, EdgeIterator, const Graph & ) {} - - /// Обнаружена точка сочленения (articulation vertex) - template - void CutNode( Vertex, const Graph & ) {} - - /// Функция обратного вызова: Фильтрация для точек сочленения - /** - С момощью этой функции пользователь настраивает поведение алгорита поиска блоков. - Если визитер отвечает true, то алгоритм не учитывает данную вершину, - как вершину разреза, отделяющую блоки. Таким образом в результате - отфильтрованная точка сочленения всегда будет принадлежать одному блоку. - */ - template - bool IsFilteredCut( Vertex, const Graph & ) const { return false; } -}; - - -////////////////////////////////////////////////////////////////////////////////////////// -// -/// Посетитель обхода в глубину для поиска блоков и точек сочленения -/** - Класс является автономным и не нуждается в уточнении наследованием от него. - Graph - предполагается, что это неориентированный граф. - BicompVisitor - надстроенный визитер, посетитель этого визитера, который - реализует события обнаружения блока, точки сочленения и - фильтрацию вершин, которые принудительно запрещается быть - точками сочленения. -*/ -////////////////////////////////////////////////////////////////////////////////////////// - -template< class Graph, class BicompVisitor = DefaultBicompVisitor > -class BicompDFSVisitor: public DefaultDFSVisitor -{ -public: - typedef typename Graph::adj_iterator adj_iterator; - typedef typename Graph::edge edge; - -public: - static const typename Graph::vertex_index NO_VERTEX = (size_t)-1; - - BicompDFSVisitor( BicompVisitor & vis ) - : m_graph( NULL ) - , m_bicompVis( vis ) - , m_dfsCounter( 1 ) - , num() - , father() - , lval() - , m_stackEdges() - {} - - /// Встретили поперечное или прямое ребро - void ForwardOrCrossEdge( typename Graph::vertex_index v, typename Graph::vertex_index u, const Graph & ) - { - DEBUG_UNUSED_PARAMETER( u ); - DEBUG_UNUSED_PARAMETER( v ); - PRECONDITION( num[v] < num[u] ); - } - - /// Найдено обратное ребро dfs-дерева, вызывается когда при посещении вершины v найдено исх.ребро к ранее посещенной вершине - /** - Вершина u является предком вершине v в dfs-дереве. - */ - void BackEdge( typename Graph::vertex_index v, typename Graph::vertex_index u, const Graph & g ) - { - DEBUG_UNUSED_PARAMETER( g ); - PRECONDITION( m_graph == &g ); - PRECONDITION( num[u] < num[v] ); - PRECONDITION( father[v] != NO_VERTEX ); - if ( u != father[v] ) - { - // Здесь vu - есть обратное ребро входящее в вершину u, которая выше, чем v в d-дереве; - m_stackEdges.push_back( edge(v,u) ); // вставить ребро vu; - lval[v] = min_of( lval[v], num[u] ); // см.лемму 6; - } - } - - /// Посещение вершины: Вызывается один раз для каждой вершины, когда она впервые начинает просматриваться - void DiscoverNode( typename Graph::vertex_index v, const Graph & g ) - { - DEBUG_UNUSED_PARAMETER( g ); - C3D_ASSERT( m_graph == &g ); - PRECONDITION( num[v] == 0 ); - PRECONDITION( lval[v] == 0 ); - num[v] = lval[v] = m_dfsCounter++; - } - - /// Вершина рассмотрена: Означает, что все исходящие ребра вершины рассмотрены - void FinishNode( typename Graph::vertex_index u, const Graph & g ) - { - PRECONDITION( m_graph == &g ); - typename Graph::vertex_index v = father[u]; - if ( v == NO_VERTEX ) // СЛУЧАЙ 1: Вершина u - корневая, завершен обход fds-дерева - { - // Оценить является ли u - точкой сочленения - // Сколько раз стартовая вершина стала папой (столько же в ней стыкуется блоков) - if ( _ChildrenNb(u, g) > 1) - { - // В корневой вершине стыкуются 2 или более блоков - значит она же является и точкой сочленения - m_bicompVis.CutNode( u, g ); - } - // Извещение о найденном блоке - if ( !m_stackEdges.empty() ) // Все что есть в m_stackEdges - следует считать последним найденным блоком. - { - m_bicompVis.BlockFounded( m_stackEdges.begin(), m_stackEdges.end(), g ); - // После извещения визитера - вычищаем стек - m_stackEdges.clear(); - } - } - else // СЛУЧАЙ 2: u - не корневая вершина - { - lval[v] = min_of( lval[v], lval[u] ); // см. лемму 6; - if ( lval[u] >= num[v] ) - { - // Здесь можно получить новый блок, для чего достаточно вытолкнуть из - // стека все ребра, включая ребро vu. - - // (!) Если вершина v не корень d-дерева, то можно утверждать, что она - есть точка сочленения; - // См. теорему 8.2. - if ( father[v] != NO_VERTEX ) // если v корневая вершина, то оценки для неё делаются в конце обхода дерева - { - m_bicompVis.CutNode( v, *m_graph ); - } - - // Извещение о найденном блоке - if ( !m_bicompVis.IsFilteredCut(v,*m_graph) ) // Запрет на отфильтрованные точки сочленения - они не могут "вырезать" блоки. - { - // Тут мы запретили собирать блок, т.к. вершина фильтрованная, однако это не принесет ущерба, - // если окажется что v - не точка сочленения. Вот почему: - /* - Если v - есть корень dfs-дерева, то возможны 2 варианта: v принадлежит одному блоку, - тогда v не точка сочленения; v принадлежит двум и более блокам, тогда v - есть точка сочленения. - В первом случае единственный блок, куда включена v, будет собран в конце текущего обхода dfs-дерева, - массив m_stackEdges полностью будет содержать этот блок. Во втором случае, если блок не - единственный, то v - есть точка сочленения, тогда очевидно запрет правомерен - в конце обхода дерева все, - что осталось в стеке ребер есть один блок. - */ - - PRECONDITION( !m_stackEdges.empty() ); - /* - std::vector::reverse_iterator vuIter = - std::find( m_stackEdges.rbegin(), m_stackEdges.rend(), edge(v,u) ); // Ищем с конца - PRECONDITION( vuIter != m_stackEdges.rend() ) // Это ребро обязано быть в стеке - m_bicompVis.BlockFounded( vuIter.base()-1, m_stackEdges.end(), *m_graph ); - // После извещения визитера - вычищаем блок из стека конца - m_stackEdges.erase( vuIter.base()-1, m_stackEdges.end() ); - */ - - const edge seek( v, u ); - typename std::vector::iterator first = m_stackEdges.begin(); - typename std::vector::iterator iter, last; - for ( iter = last = m_stackEdges.end(); iter != first; ) - { - --iter; - if ( *iter == seek ) - { - break; - } - } - - PRECONDITION( *iter == seek ); // Это ребро обязано быть в стеке - m_bicompVis.BlockFounded( iter, last, *m_graph ); - // После извещения визитера - вычищаем блок из стека конца - m_stackEdges.erase( iter, last ); - } - } - } - } - - /// Означает, что начато рассмотрение корневой вершины будущего дерева обхода - void StartNode( typename Graph::vertex_index v, const Graph & g ) - { - DEBUG_UNUSED_PARAMETER( v ); - _Init( g ); - PRECONDITION( father[v] == NO_VERTEX ); - PRECONDITION( num[v] == 0 && lval[v] == 0 ); - } - - /// Заход в ребро dfs-дерева, вызывается перед переходом от посещенной вершины v к еще не посещенной вершине u - void TreeEdge( typename Graph::vertex_index v, typename Graph::vertex_index u, const Graph & g ) - { - DEBUG_UNUSED_PARAMETER( g ); - PRECONDITION( m_graph == &g ); - PRECONDITION( father[u] == NO_VERTEX ); - m_stackEdges.push_back( edge(v,u) ); // Вставить ребро vu; - father[u] = v; // зафиксируем отца для вершины u; - } - -private: - /// Количество сыновей вершины - size_t _ChildrenNb( typename Graph::vertex_index u, const Graph & g ) const - { - PRECONDITION( m_graph == &g ); - // Оценить является ли u - точкой сочленения - size_t fatherNb = 0; // Сколько раз вершина u стала папой - std::pair adjIterPair = g.AdjacentVertices( u ); - for ( ; adjIterPair.first != adjIterPair.second; ++adjIterPair.first ) - { - if ( father[*adjIterPair.first] == u ) - { - ++fatherNb; - } - } - return fatherNb; - } - - void _Init( const Graph & graph ) - { - m_graph = &graph; - const typename Graph::vertices_size_t vertNb = graph.NumVertices(); - m_dfsCounter = 1; - num.assign( vertNb, 0 ); - father.assign( vertNb, NO_VERTEX ); - lval.assign( vertNb, 0 ); - m_stackEdges.clear(); - } - -private: - const Graph * m_graph; ///< Рассматриваемый граф, для которого ищутся точки сочленения - BicompVisitor & m_bicompVis; ///< Посетитель алгоритмов этого класса - ptrdiff_t m_dfsCounter; ///< Cчетчик вершин dfs-дерева - std::vector num; ///< Нумерация порядка обхода вершин d-дерева - std::vector lval; ///< Массив значений функции L[v] на каждую вершину - см.теорию стр.166, [Asan], Лемма 6; - std::vector father;///< Отец вершины в dfs-дереве - std::vector m_stackEdges; ///< Cтек ребер для обслуживания нахождения блоков - -private: - BicompDFSVisitor & operator = ( const BicompDFSVisitor & ); -}; - -//---------------------------------------------------------------------------------------- -// Стековый элемент для алгоритма обхода в глубину. -// --- -template -struct DFSVertexInfo -{ -private: - typedef typename Graph::vertex_index vertex_index; - typedef typename Graph::adj_iterator adj_iterator; - -public: - vertex_index m_node; - adj_iterator m_iter; - adj_iterator m_last; - - DFSVertexInfo( vertex_index v, adj_iterator iter, adj_iterator last ) - : m_node( v ) - , m_iter( iter ) - , m_last( last ) - {} - - DFSVertexInfo( vertex_index v, const Graph & graph ) - : m_node( v ) - , m_iter() - , m_last() - { - tie(m_iter,m_last) = graph.AdjacentVertices( v ); - } - - DFSVertexInfo( const DFSVertexInfo & vi ) - : m_node( vi.m_node ) - , m_iter( vi.m_iter ) - , m_last( vi.m_last ) - {} - - DFSVertexInfo & operator = ( const DFSVertexInfo & vi ) - { - m_node = vi.m_node; - m_iter = vi.m_iter; - m_last = vi.m_last; - return *this; - } -}; - -//---------------------------------------------------------------------------------------- -/// Алгоритм обхода в глубину графа смежности -/** - Вычислительная сложность алгоритма практически линейная, если считать что - методы визитера выполняются за константное время. - - \param graph Граф смежности - \param vis Посетитель алгоритма -*/ -//--- - -template -void DepthFirstSearch( const Graph & graph, Visitor & vis ) -{ - typedef typename Graph::vertices_size_t vertices_size_t; - typedef typename Graph::vertex_index vertex_index; - typedef typename Graph::adj_iterator adj_iterator; - /* - enum Color // Разметка - { - col_white // не посещалась - , col_gray // в стеке - , col_black // - }; - */ - - const vertices_size_t vCount = graph.NumVertices(); - - std::vector> stack; - std::vector colourMap( vCount, white_color ); // отображение: вершина -> цвет - - // Пометить, как рассмотренные, игнорируемые вершины - for ( vertex_index xIdx = 0; xIdx(startNode,graph) ); - - while ( !stack.empty() ) - { - { - DFSVertexInfo & curr = stack.back(); - vIter = curr.m_iter; - vLast = curr.m_last; - srcNode = curr.m_node; - stack.pop_back(); - } - - while ( vIter != vLast ) - { - const vertex_index trgNode = *vIter; - ++vIter; - - vis.ExamineEdge( srcNode, trgNode, graph ); - - switch ( colourMap[trgNode] ) // Переход по дереву к следующей вершине - { - case white_color: - { - vis.TreeEdge( srcNode, trgNode, graph ); // "древесное" ребро - colourMap[trgNode] = gray_color; - stack.push_back( DFSVertexInfo( srcNode, vIter, vLast ) ); - vis.DiscoverNode( srcNode = trgNode, graph ); - tie( vIter, vLast ) = graph.AdjacentVertices( srcNode ); - break; - } - case gray_color: // Встетили обратное ребро - { - vis.BackEdge( srcNode, trgNode, graph ); - break; - } - default: // Встретили "прямое" или "кросс-ребро" в ориентированном графе - { - vis.ForwardOrCrossEdge( srcNode, trgNode, graph ); - break; - } - } - } - - // Событие завершения обхода текущей вершины - colourMap[srcNode] = black_color; - vis.FinishNode( srcNode, graph ); - } - } - } -} - - -////////////////////////////////////////////////////////////////////////////////////////// -// -/// Отображение реберных свойств для графов, поддерживающих концепцию смежности вершин (без явных ребер) -/** - Для графов с инцидентными ребрами лучше использовать другие типы отображений -*/ -////////////////////////////////////////////////////////////////////////////////////////// -/* -template -class EdgePropertyMap -{ - typedef Graph::vertex_descriptor vertex_descriptor; - typedef Graph::edge_descriptor edge_descriptor; - typedef std::pair pair; - class node - { - public: - node( const node & ); - node & operator = ( const node & ); - - private: - vertex_descriptor vertex; - std::vector props; - }; - - std::vector nodes; - -public: - const Prop & operator[]( edge_descriptor ) const; - Prop & operator[]( edge_descriptor ); -}; -*/ - -////////////////////////////////////////////////////////////////////////////////////////// -// -/// Инкапсуляция алгоритма поиска 2-связных компонент и/или точек сочленения -/** - ПЛАНИРУЕТСЯ ЗАМЕНИТЬ ЭТОТ АЛГОРИТМ НА БОЛЕЕ ОБЩИЙ НО НЕ МЕНЕЕ ЭФФЕКТИВНЫЙ: - DepthFirstSearch + BicompDFSVisitor - - \par Определение - d-деревом называем ациклический подграф рассматриваеморго графа, состоящего - из вершин и ребер, которые обходит поиск в глубину, на основе которого построен - данный адгоритм. - Graph - тип, отвечающий требованиям обычного графа смежности по вершинам - - \par РЕФАКТОРИНГ - 1) Нужно обобщить это алгоритм с библиотекой MtGraph - 2) Возможно снабдить это класс-алгоритм посетителем поиска компонент. - Это, например, позволит генерировать два варианта алгоритма поиска блоков: - Вариант, когда нужно найти только вершины сочленения (без блоков) вариант, - когда нужно искать шарниры и/или блоки; - 2.1.) Возможны другие рецепты, как генерить шаблоном два похожих алгоритма. - 3) Алгоритм можно упростить, если переложить его на еще более общный - алгоритм обхода в глубину. -*/ -////////////////////////////////////////////////////////////////////////////////////////// - -template -class MtBicompSearch -{ - // Ассоциативные типы - typedef typename Graph::vertex_index vertex_index; - typedef typename Graph::vertex_size_t vertex_size_t; - typedef typename Graph::adj_iterator adj_iterator; - -private: - const Graph & m_graph; - ptrdiff_t m_dfsCounter; - std::vector num; ///< Нумерация порядка обхода вершин d-дерева - std::vector father; ///< Отец вершины в d-дереве - std::vector lval; ///< Массив значений функции L[v] на каждую вершину - см.теорию стр.166, [Asan], Лемма 6; - std::vector m_cutnodes; ///< Обнаруженные точки сочленения - std::vector m_cutnodeProp; ///< Признак точки сочленения для вершин - -public: - MtBicompSearch( const Graph & ); - /// Найти все точки сочленения - const std::vector & SearchCutnodes(); - -private: - /// Алгоритм реккурсивного вызова поиска блоков и точек сочленения в графе - void BiComp( vertex_index ); - /// Инициализировать все рабочие данные для нового поиска - void Init(); - /// Запустить алгоритм - void Perform(); -}; - -//---------------------------------------------------------------------------------------- -// -//--- -template -MtBicompSearch::MtBicompSearch( const Graph & g ) - : m_graph( g ) - , m_dfsCounter(1) - , num() - , father() - , lval() - , m_cutnodes() - , m_cutnodeProp() -{} - -//---------------------------------------------------------------------------------------- -/// Найти все точки сочленения -//--- -template -const std::vector & MtBicompSearch::SearchCutnodes() -{ - Init(); - Perform(); - return m_cutnodes; -} - -//---------------------------------------------------------------------------------------- -/// Инициализировать все рабочие данные для нового поиска -//--- -template -void MtBicompSearch::Init() -{ - const vertex_size_t vertNb = m_graph.NumVertecies(); - m_dfsCounter = 1; - num.assign( vertNb, 0 ); - father.assign( vertNb, -1 ); - lval.assign( vertNb, -1 ); - m_cutnodeProp.assign( vertNb, false ); - m_cutnodes.clear(); -} - -//---------------------------------------------------------------------------------------- -/// Запустить алгоритм -//--- -template -void MtBicompSearch::Perform() -{ - PRECONDITION( m_cutnodes.empty() ); - - const vertex_size_t vertNb = m_graph.NumVertecies(); - for ( vertex_index startIdx = 0; startIdx adjIterPair = m_graph.AdjacentVertices( startIdx ); - for ( ; adjIterPair.first!=adjIterPair.second; ++adjIterPair.first ) - { - if ( father[*adjIterPair.first] == startIdx ) - { - ++fatherNb; - } - } - if ( fatherNb > 1 ) - { - // Корневая вершина - есть точка сочленения - PRECONDITION( !m_cutnodeProp[startIdx] ); - m_cutnodes.push_back( startIdx ); - m_cutnodeProp[startIdx] = true; - } - } - } -} - -//---------------------------------------------------------------------------------------- -/// Алгоритм реккурентного вызова поиска блоков и точек сочленения в графе -/** - Теорию см.главе 8, стр.166, Графы, матроиды, алгоритмы [Asan]; - \param vIdx - вершина (индекс), с которой начинаем поиск, которая ещё не рассмотрена, т.е. - num[vIdx] = 0; - - \par Определения - d-дерево - ациклический подграф основного подграфа, образуемого при обходе - вершин во время поиска в глубину; - - \par Вычислительная сложность - Вычислительная сложность: O(n+m), где n-кол-во вершин, m-кол-во ребер. Это следует из - того факта, что каждая вершина посещается не более одного раза. -*/ -//--- -template -void MtBicompSearch::BiComp( const vertex_index vIdx ) -{ - PRECONDITION( num[vIdx] == 0 ); - num[vIdx] = lval[vIdx] = m_dfsCounter; - ++m_dfsCounter; - - // Цикл по всем смежным вершинам vert; - std::pair adjIterPair = m_graph.AdjacentVertices( vIdx ); - for ( ; adjIterPair.first!=adjIterPair.second; ++adjIterPair.first ) - { - const vertex_index uIdx = *adjIterPair.first; // Вершина - сын в d-дереве; - // const edge_descriptor vuEdg = m_graph.GetEdge( vIdx, uIdx ); - if ( num[uIdx] == 0 ) // uIdx - сын вершины vIdx - { - // stackE.push_back( vuEdg ); // Вставить ребро vu; - PRECONDITION( father[uIdx] == -1 ); - father[uIdx] = vIdx; // зафиксируем отца для данной вершины uIdx; - BiComp( uIdx ); - - // При выходе из рекурсии значение функции L[u] уже вычислено; - lval[vIdx] = min_of( lval[vIdx], lval[uIdx] ); // см.лемму 6; - if ( lval[uIdx] >= num[vIdx] ) - { - // Здесь можно получить новый блок, для чего достаточно вытолкнуть из - // стека все ребра, включая ребро vu. - - // (!) Если вершина vIdx не корень d-дерева, то можно утверждать, что она - есть точка сочленения; - // См. теорему 8.2. - if ( father[vIdx] != -1 ) // Первородитель - { - if ( !m_cutnodeProp[vIdx] ) - { - m_cutnodes.push_back( vIdx ); - m_cutnodeProp[vIdx] = true; - } - } - /* - PRECONDITION( !stackE.empty() ) - blocks.NewComp(); - - #pragma message ( __TODO__ "(**) Собирать ребра возможно не понадобится! Достаточно cutnodes;" ) - while( !stackE.empty() ) - { - edge_descriptor edge = stackE.back(); - blocks.AddEdge( edge ); - stackE.pop_back(); // вытолкнуть ребро из стека; - if ( edge == vuEdg ) - { - break; - } - } - */ - } - } - else if ( num[uIdx] < num[vIdx] && uIdx != father[vIdx] ) - { - // Здесь vu - есть обратное ребро входящее в вершину u, которая выше, чем v в d-дереве; - // stackE.push_back( vuEdg ); // вставить ребро vu; - lval[vIdx] = min_of( lval[vIdx], num[uIdx] ); // см.лемму 6; - } - } -} - - -////////////////////////////////////////////////////////////////////////////////////////// -// -// Посетитель алгоритма поиска компонент сильной связности -// -////////////////////////////////////////////////////////////////////////////////////////// -struct DefaultSCVisitor -{ - // Вызывается алгоритмом перед началом обхода всего графа - template - inline void Start( const Graph & ) {} - // Вызывается, когда найден очередной компонент сильной связности в орграфе - /* - Аргументы: граф и пара вершинных итераторов, пробегающих подмножество компонента - */ - template - inline void Component( const Graph &, VertexIter, VertexIter ) {} - // Если IsFiltered = true, вершина считается исключенной из графа - template - inline bool IsFiltered( const Graph &, Vertex ) { return false; } -}; - - -////////////////////////////////////////////////////////////////////////////////////////// -// -/// Алгоритм поиска компонент сильной связности в орграфе -/** - Напомним, что две вершины орграфа считаются сильно связанными, если - существует маршрут из первой вершины ко второй и обратный маршрут из второй - к первой. Подграф называется сильно связным, если любая пары его - вершин сильно связаны. Компонент сильной связности графа - это один из - его сильно сзязный подграфов G', для которого не существует сильно связной пары - вершин u и v, таких, что u-принадлежит G', а v не принадлежит G'. Другими словами, - вершины компонента сильной связости принадлежат классу взаимной достижимости вершин; - \note Алгоритм #MtStrongComponents имеет линейную сложность вычислений - \ingroup GCBase -*/ -////////////////////////////////////////////////////////////////////////////////////////// - -template -class MtStrongComponents -{ -public: // Ассоциативные типы - typedef typename graph_traits::vertex vertex; - typedef typename graph_traits::edge edge; - typedef typename graph_traits::edge_iterator edge_iterator; - typedef typename graph_traits::vertex_iterator vertex_iterator; - -public: - MtStrongComponents( const Graph &, SCVisitor & ); - void operator() (); ///< Исполнить алгоритм поиска сильных компонентов - -private: - // DFS-алгоритм для поиска компонент сильной связности в графе ограничений - void StrongSearch( vertex, std::vector & ); - -private: - const Graph & m_diGraph; ///< Ориентированный граф - SCVisitor & m_vis; ///< Посетитель алгоритма поиска компонент сильной связности - size_t m_counter; ///< Порядок DFS-обхода - VertexPropertyMap num; ///< Вспомогательный массив порядковых номеров обхода в глубину - VertexPropertyMap lval; ///< Массив для промежуточных целочисленных вычислений - -private: - MtStrongComponents( const MtStrongComponents & ); - MtStrongComponents & operator = ( const MtStrongComponents & ); -}; - -//---------------------------------------------------------------------------------------- -// -//--- -template -MtStrongComponents::MtStrongComponents( const Graph & b_graph, Vis & vis ) - : m_diGraph( b_graph ) - , m_vis( vis ) - , num( b_graph.NumVertices() ) - , lval( b_graph.NumVertices() ) - , m_counter( 1 ) -{} - -//---------------------------------------------------------------------------------------- -// Главный алгоритм поиска компонент сильной связности в графе ограничений -//--- -template -void MtStrongComponents::operator() () -{ - m_vis.Start( m_diGraph ); - - std::vector stack; - stack.reserve( m_diGraph.NumVertices() ); - m_counter = 1; - - vertex_iterator vIter, vLast; - - for ( tie(vIter,vLast) = m_diGraph.Vertices(); vIter!=vLast; ++vIter ) - { - num[*vIter] = 0; - } - - for ( tie(vIter,vLast) = m_diGraph.Vertices(); vIter!=vLast; ++vIter ) - { - if ( num[*vIter] == 0 && !m_vis.IsFiltered(m_diGraph,*vIter) ) - StrongSearch( *vIter, stack ); - } -} - -//#define _RECURSIVE_STRONG_SEARCH 1 - -#ifdef _RECURSIVE_STRONG_SEARCH - -//---------------------------------------------------------------------------------------- -/// Алгоритм поиска компонент сильной связности в орграфе -/** - Алгоритм применяется для разбиения графа ограничений на независимо - решаемые подсистемы (сегменты). Рекурсивный вариант. Описание алгоритма приведено - в книжке Асанова по теории графов, стр.171.\n - \param vx - корневая вершина поддерева DFS - \param stack - стек рассмотренных вершин, для которых не установлена компонентная принадлежность -*/ -//--- -template -void MtStrongComponents::StrongSearch( vertex vx, std::vector & stack ) -{ - PRECONDITION( !m_vis.IsFiltered(m_diGraph,vx) ); - - num[vx] = m_counter; - lval[vx] = m_counter; - ++m_counter; - stack.push_back( vx ); - - edge_iterator eIter, eLast; // итераторы обхода инцидентных ребер - for ( tie(eIter,eLast) = m_diGraph.OutArcs(vx); eIter!=eLast; ++eIter ) - { - vertex w = m_diGraph.Target( *eIter ); // Выходящая вершина прямого ребра - PRECONDITION( w != vx ); // Граф не ориентированный !!! - if ( w != vx && !m_vis.IsFiltered(m_diGraph,w) ) // игнорируем обратное ребро из w в vx, а также отфильтрованные узлы; - { - if ( num[w] == 0 ) // - "древесная" дуга - { - StrongSearch( w, stack ); - if ( lval[w] < lval[vx] ) // При выходе из рекурсии значение l(w) должно быть уже насчитано; - lval[vx] = lval[w]; - } - else - { - const size_t wNum = num[w]; - if ( wNum < num[vx] && wNum < lval[vx] ) // - "поперечная" или "обратная" дуга - { - // Предположение: В стеке лежат вершины, из которых вершина vx достижима; - if ( std::find(stack.rbegin(), stack.rend(), w) != stack.rend() ) - { - lval[vx] = wNum; - } - } - } - } - } - - const size_t vNum = num[vx]; - if ( lval[vx] == vNum ) // vx - корневая вершина очередной компоненты сильной связности - { - // Обнаружен очередной сильный компонент - if ( !stack.empty() && num[stack.back()] >= vNum ) - { - // Посчитать размер компонента - typename std::vector::reverse_iterator vIter, vLast; - vIter = stack.rbegin(); - vLast = stack.rend(); - ptrdiff_t compSize = 0; - for ( ; vIter != vLast && num[*vIter] >= vNum; ++vIter, ++compSize ); - - // Передать диапазон компонента визитеру - typename std::vector::iterator cIter, cLast; - cIter = cLast = stack.end(); - std::advance( cIter, -compSize ); - m_vis.Component( m_diGraph, cIter, cLast ); - stack.erase( cIter, cLast ); // очистить верхушку стека - } - } -} - -#else // _RECURSIVE_STRONG_SEARCH - - -//---------------------------------------------------------------------------------------- -/// Стековый элемент для алгоритма обхода в глубину -//--- -template -struct DFS_element -{ - typedef typename Graph::vertices_size_t vertices_size_t; - typedef typename Graph::vertex vertex; - typedef typename Graph::edge_iterator edge_iterator; - - vertex node; - edge_iterator iter; - edge_iterator last; - - DFS_element( vertex v, const std::pair & pair ) - : node( v ) - , iter( pair.first ) - , last( pair.second ) - {} - - DFS_element( vertex v, const Graph & graph ) - : node( v ) - , iter() - , last() - { - tie( iter, last ) = graph.OutArcs( v ); - } - - DFS_element( const DFS_element & vi ) - : node( vi.node ) - , iter( vi.iter ) - , last( vi.last ) - {} - - DFS_element & operator = ( const DFS_element & vi ) - { - node = vi.node; - iter = vi.iter; - last = vi.last; - return *this; - } -}; - -//---------------------------------------------------------------------------------------- -/// Алгоритм поиска компонент сильной связности в орграфе -/** - Алгоритм применяется для разбиения графа ограничений на независимо-решаемые - подсистемы (сегменты). Описание алгоритма приведено в книжке Асанова по - теории графов, стр.171.\n - MA2013-02-22: Алгоритм переделан под нерекурсивный вариант; - \param rootVert - корневая вершина поддерева DFS - \param comStack - стек рассмотренных вершин, для которых не установлена компонентная принадлежность -*/ -//--- -template -void MtStrongComponents::StrongSearch( vertex rootVert - , std::vector & comStack ) -{ - typedef DFS_element DfsStackElem; - - PRECONDITION( !m_vis.IsFiltered(m_diGraph,rootVert) ); - std::vector dfsStack; - - num[rootVert] = lval[rootVert] = m_counter; - ++m_counter; - comStack.push_back( rootVert ); - dfsStack.push_back( DfsStackElem( rootVert, m_diGraph ) ); - DfsStackElem * topElem = &dfsStack.back(); - - while( !dfsStack.empty() ) // Цикл возвратов из стека (одна итерация - одно возвращение против древесного ребра ) - { - while ( topElem->iter != topElem->last ) - { - vertex w = m_diGraph.Target( *topElem->iter ); // Выходящая вершина прямого ребра - PRECONDITION( w != topElem->node ); // Граф не ориентированный !!! - if ( (w != topElem->node) && !m_vis.IsFiltered(m_diGraph,w) ) // игнорируем обратное ребро из w в vx, а также отфильтрованные узлы; - { - if ( num[w] == 0 ) // - "древесная" дуга - { - // Вместо рекурсии: StrongSearch( w, stack ); - num[w] = lval[w] = m_counter; - ++m_counter; - comStack.push_back( w ); - dfsStack.push_back( DfsStackElem(w, m_diGraph) ); - topElem = &dfsStack.back(); - continue; - } - else - { - const size_t wNum = num[w]; - if ( wNum < num[topElem->node] && wNum < lval[topElem->node] ) // - "поперечная" или "обратная" дуга - { - // Предположение: В стеке лежат вершины, из которых вершина vx достижима; - if ( std::find(comStack.rbegin(), comStack.rend(), w) != comStack.rend() ) - { - lval[topElem->node] = wNum; - } - } - } - } - ++topElem->iter; - } - - PRECONDITION( dfsStack.back().iter == dfsStack.back().last ); - PRECONDITION( topElem == &dfsStack.back() ); - - // Завершено посещение узла sElem->m_node - const size_t vNum = num[topElem->node/*vx*/]; - if ( lval[topElem->node/*vx*/] == vNum ) // vx - корневая вершина очередной компоненты сильной связности - { - // Обнаружен очередной сильный компонент - if ( !comStack.empty() && num[comStack.back()] >= vNum ) - { - // Посчитать размер компонента - typename std::vector::reverse_iterator vIter, vLast; - vIter = comStack.rbegin(); - vLast = comStack.rend(); - ptrdiff_t compSize = 0; - for ( ; vIter != vLast && num[*vIter] >= vNum; ++vIter, ++compSize ); - - // Передать диапазон компонента визитеру - typename std::vector::iterator cIter, cLast; - cIter = cLast = comStack.end(); - std::advance( cIter, -compSize ); - m_vis.Component( m_diGraph, cIter, cLast ); - comStack.erase( cIter, cLast ); // очистить верхушку стека - } - } - // Возвращение против древесного ребра , где w-просмотренная вершина, v-вершина из которой пришли в w; - { - const vertex w = topElem->node; - dfsStack.pop_back(); - - if ( !dfsStack.empty() ) - { - topElem = &dfsStack.back(); - const vertex vxPrev = dfsStack.back().node; - // При выходе из рекурсии значение lVal(w) должно быть уже насчитано; - if ( lval[w] < lval[vxPrev] ) - { - lval[vxPrev] = lval[w]; - } - } - } - } -} - -#endif // _RECURSIVE_STRONG_SEARCH - -#endif // __GRAPH_ALGORITHMS_H - -// eof +////////////////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Обобщенные алгоритмы на графах. + \en Generic graph algorithms. \~ + +*/ +/////////////////////////////////////////////////////////////////////// MA 25.10.2010 //// + +#ifndef __GRAPH_ALGORITHMS_H +#define __GRAPH_ALGORITHMS_H +// +#include +#include + +//---------------------------------------------------------------------------------------- +// +/// Пустой посетитель алгоритма обхода графа в глубину +/** + \ingroup MathGC_Algo + \attention Класс не предназначен для того, что бы применять статический + или динамический полиморфизм, т.е. не обязывает своих наследников + перегружать методы. +*/ +//--- +template +struct DefaultDFSVisitor +{ + typedef typename Graph::vertex_index vertex_index; + + /// Встретили "обратное" ребро (дуга, если орграф) dfs-дерева. + /** + Вызывается когда при посещении вершины v найдено исх.ребро, направленное к + ранее посещенной вершине. Другими словами, вершина u является предком + вершине v в dfs-дереве. + */ + void BackEdge( vertex_index /*v*/, vertex_index /*u*/, const Graph & /*g*/ ) {} + /// Вызывается, когда впервые проходим через исходящую дугу v->u, вершину u еще не посещали + void ExamineEdge( vertex_index /*v*/, vertex_index /*u*/, const Graph & /*g*/ ) {} + /// Посещение вершины: Вызывается один раз для каждой вершины, когда она впервые начинает просматриваться + void DiscoverNode( vertex_index /*v*/, const Graph & /*g*/ ) {} + /// Вершина рассмотрена: Означает, что все исходящие ребра вершины рассмотрены + void FinishNode( vertex_index /*v*/, const Graph & /*g*/ ) {} + /// Встретили "поперечное" или "прямое" ребро + /** + Вызывается, когда находим дугу, идущую к другому dfs-дереву, либо прямую дугу, + идущую к потомку того же дерева, имеющему два и более отцов. + Для поперечного ребра вызывается только для ориентированных графов. + */ + void ForwardOrCrossEdge( vertex_index /*v*/, vertex_index /*u*/, const Graph & /*g*/ ) {} + /// Отвечает, что вершина исключена из рассмотрения + bool Ignored( vertex_index /*v*/, const Graph & /*g*/ ) const { return false; } + /// Означает, что начато рассмотрение корневой вершины будущего дерева обхода + void StartNode( vertex_index /*v*/, const Graph & /*g*/ ) {} + /// Ребро стало "древесным" (принадлежит dfs-дереву). Вызывается перед переходом от посещенной вершины v к еще не посещенной вершине u + void TreeEdge( vertex_index /*v*/, vertex_index /*u*/, const Graph & /*g*/ ) {} +}; + + +////////////////////////////////////////////////////////////////////////////////////////// +// +/// Посетитель алгоритма поиска блоков и точек сочленения в неориентированном графе +/** + Позволяет настроить алгоритм поиска блоков и точек сочленения под конкретные реализации. +*/ +////////////////////////////////////////////////////////////////////////////////////////// + +template< class Graph > +struct DefaultBicompVisitor +{ + /// Найден блок, как последовательность ребер + template + void BlockFounded( EdgeIterator, EdgeIterator, const Graph & ) {} + + /// Обнаружена точка сочленения (articulation vertex) + template + void CutNode( Vertex, const Graph & ) {} + + /// Функция обратного вызова: Фильтрация для точек сочленения + /** + С момощью этой функции пользователь настраивает поведение алгорита поиска блоков. + Если визитер отвечает true, то алгоритм не учитывает данную вершину, + как вершину разреза, отделяющую блоки. Таким образом в результате + отфильтрованная точка сочленения всегда будет принадлежать одному блоку. + */ + template + bool IsFilteredCut( Vertex, const Graph & ) const { return false; } +}; + + +////////////////////////////////////////////////////////////////////////////////////////// +// +/// Посетитель обхода в глубину для поиска блоков и точек сочленения +/** + Класс является автономным и не нуждается в уточнении наследованием от него. + Graph - предполагается, что это неориентированный граф. + BicompVisitor - надстроенный визитер, посетитель этого визитера, который + реализует события обнаружения блока, точки сочленения и + фильтрацию вершин, которые принудительно запрещается быть + точками сочленения. +*/ +////////////////////////////////////////////////////////////////////////////////////////// + +template< class Graph, class BicompVisitor = DefaultBicompVisitor > +class BicompDFSVisitor: public DefaultDFSVisitor +{ +public: + typedef typename Graph::adj_iterator adj_iterator; + typedef typename Graph::edge edge; + +public: + static const typename Graph::vertex_index NO_VERTEX = (size_t)-1; + + BicompDFSVisitor( BicompVisitor & vis ) + : m_graph( c3d_null ) + , m_bicompVis( vis ) + , m_dfsCounter( 1 ) + , num() + , father() + , lval() + , m_stackEdges() + {} + + /// Встретили поперечное или прямое ребро + void ForwardOrCrossEdge( typename Graph::vertex_index v, typename Graph::vertex_index u, const Graph & ) + { + DEBUG_UNUSED_PARAMETER( u ); + DEBUG_UNUSED_PARAMETER( v ); + PRECONDITION( num[v] < num[u] ); + } + + /// Найдено обратное ребро dfs-дерева, вызывается когда при посещении вершины v найдено исх.ребро к ранее посещенной вершине + /** + Вершина u является предком вершине v в dfs-дереве. + */ + void BackEdge( typename Graph::vertex_index v, typename Graph::vertex_index u, const Graph & g ) + { + DEBUG_UNUSED_PARAMETER( g ); + PRECONDITION( m_graph == &g ); + PRECONDITION( num[u] < num[v] ); + PRECONDITION( father[v] != NO_VERTEX ); + if ( u != father[v] ) + { + // Здесь vu - есть обратное ребро входящее в вершину u, которая выше, чем v в d-дереве; + m_stackEdges.push_back( edge(v,u) ); // вставить ребро vu; + lval[v] = min_of( lval[v], num[u] ); // см.лемму 6; + } + } + + /// Посещение вершины: Вызывается один раз для каждой вершины, когда она впервые начинает просматриваться + void DiscoverNode( typename Graph::vertex_index v, const Graph & g ) + { + DEBUG_UNUSED_PARAMETER( g ); + C3D_ASSERT( m_graph == &g ); + PRECONDITION( num[v] == 0 ); + PRECONDITION( lval[v] == 0 ); + num[v] = lval[v] = m_dfsCounter++; + } + + /// Вершина рассмотрена: Означает, что все исходящие ребра вершины рассмотрены + void FinishNode( typename Graph::vertex_index u, const Graph & g ) + { + PRECONDITION( m_graph == &g ); + typename Graph::vertex_index v = father[u]; + if ( v == NO_VERTEX ) // СЛУЧАЙ 1: Вершина u - корневая, завершен обход fds-дерева + { + // Оценить является ли u - точкой сочленения + // Сколько раз стартовая вершина стала папой (столько же в ней стыкуется блоков) + if ( _ChildrenNb(u, g) > 1) + { + // В корневой вершине стыкуются 2 или более блоков - значит она же является и точкой сочленения + m_bicompVis.CutNode( u, g ); + } + // Извещение о найденном блоке + if ( !m_stackEdges.empty() ) // Все что есть в m_stackEdges - следует считать последним найденным блоком. + { + m_bicompVis.BlockFounded( m_stackEdges.begin(), m_stackEdges.end(), g ); + // После извещения визитера - вычищаем стек + m_stackEdges.clear(); + } + } + else // СЛУЧАЙ 2: u - не корневая вершина + { + lval[v] = min_of( lval[v], lval[u] ); // см. лемму 6; + if ( lval[u] >= num[v] ) + { + // Здесь можно получить новый блок, для чего достаточно вытолкнуть из + // стека все ребра, включая ребро vu. + + // (!) Если вершина v не корень d-дерева, то можно утверждать, что она - есть точка сочленения; + // См. теорему 8.2. + if ( father[v] != NO_VERTEX ) // если v корневая вершина, то оценки для неё делаются в конце обхода дерева + { + m_bicompVis.CutNode( v, *m_graph ); + } + + // Извещение о найденном блоке + if ( !m_bicompVis.IsFilteredCut(v,*m_graph) ) // Запрет на отфильтрованные точки сочленения - они не могут "вырезать" блоки. + { + // Тут мы запретили собирать блок, т.к. вершина фильтрованная, однако это не принесет ущерба, + // если окажется что v - не точка сочленения. Вот почему: + /* + Если v - есть корень dfs-дерева, то возможны 2 варианта: v принадлежит одному блоку, + тогда v не точка сочленения; v принадлежит двум и более блокам, тогда v - есть точка сочленения. + В первом случае единственный блок, куда включена v, будет собран в конце текущего обхода dfs-дерева, + массив m_stackEdges полностью будет содержать этот блок. Во втором случае, если блок не + единственный, то v - есть точка сочленения, тогда очевидно запрет правомерен - в конце обхода дерева все, + что осталось в стеке ребер есть один блок. + */ + + PRECONDITION( !m_stackEdges.empty() ); + /* + std::vector::reverse_iterator vuIter = + std::find( m_stackEdges.rbegin(), m_stackEdges.rend(), edge(v,u) ); // Ищем с конца + PRECONDITION( vuIter != m_stackEdges.rend() ) // Это ребро обязано быть в стеке + m_bicompVis.BlockFounded( vuIter.base()-1, m_stackEdges.end(), *m_graph ); + // После извещения визитера - вычищаем блок из стека конца + m_stackEdges.erase( vuIter.base()-1, m_stackEdges.end() ); + */ + + const edge seek( v, u ); + typename std::vector::iterator first = m_stackEdges.begin(); + typename std::vector::iterator iter, last; + for ( iter = last = m_stackEdges.end(); iter != first; ) + { + --iter; + if ( *iter == seek ) + { + break; + } + } + + PRECONDITION( *iter == seek ); // Это ребро обязано быть в стеке + m_bicompVis.BlockFounded( iter, last, *m_graph ); + // После извещения визитера - вычищаем блок из стека конца + m_stackEdges.erase( iter, last ); + } + } + } + } + + /// Означает, что начато рассмотрение корневой вершины будущего дерева обхода + void StartNode( typename Graph::vertex_index v, const Graph & g ) + { + DEBUG_UNUSED_PARAMETER( v ); + _Init( g ); + PRECONDITION( father[v] == NO_VERTEX ); + PRECONDITION( num[v] == 0 && lval[v] == 0 ); + } + + /// Заход в ребро dfs-дерева, вызывается перед переходом от посещенной вершины v к еще не посещенной вершине u + void TreeEdge( typename Graph::vertex_index v, typename Graph::vertex_index u, const Graph & g ) + { + DEBUG_UNUSED_PARAMETER( g ); + PRECONDITION( m_graph == &g ); + PRECONDITION( father[u] == NO_VERTEX ); + m_stackEdges.push_back( edge(v,u) ); // Вставить ребро vu; + father[u] = v; // зафиксируем отца для вершины u; + } + +private: + /// Количество сыновей вершины + size_t _ChildrenNb( typename Graph::vertex_index u, const Graph & g ) const + { + PRECONDITION( m_graph == &g ); + // Оценить является ли u - точкой сочленения + size_t fatherNb = 0; // Сколько раз вершина u стала папой + std::pair adjIterPair = g.AdjacentVertices( u ); + for ( ; adjIterPair.first != adjIterPair.second; ++adjIterPair.first ) + { + if ( father[*adjIterPair.first] == u ) + { + ++fatherNb; + } + } + return fatherNb; + } + + void _Init( const Graph & graph ) + { + m_graph = &graph; + const typename Graph::vertices_size_t vertNb = graph.NumVertices(); + m_dfsCounter = 1; + num.assign( vertNb, 0 ); + father.assign( vertNb, NO_VERTEX ); + lval.assign( vertNb, 0 ); + m_stackEdges.clear(); + } + +private: + const Graph * m_graph; ///< Рассматриваемый граф, для которого ищутся точки сочленения + BicompVisitor & m_bicompVis; ///< Посетитель алгоритмов этого класса + ptrdiff_t m_dfsCounter; ///< Cчетчик вершин dfs-дерева + std::vector num; ///< Нумерация порядка обхода вершин d-дерева + std::vector lval; ///< Массив значений функции L[v] на каждую вершину - см.теорию стр.166, [Asan], Лемма 6; + std::vector father;///< Отец вершины в dfs-дереве + std::vector m_stackEdges; ///< Cтек ребер для обслуживания нахождения блоков + +private: + BicompDFSVisitor & operator = ( const BicompDFSVisitor & ); +}; + +//---------------------------------------------------------------------------------------- +// Стековый элемент для алгоритма обхода в глубину. +// --- +template +struct DFSVertexInfo +{ +private: + typedef typename Graph::vertex_index vertex_index; + typedef typename Graph::adj_iterator adj_iterator; + +public: + vertex_index m_node; + adj_iterator m_iter; + adj_iterator m_last; + + DFSVertexInfo( vertex_index v, adj_iterator iter, adj_iterator last ) + : m_node( v ) + , m_iter( iter ) + , m_last( last ) + {} + + DFSVertexInfo( vertex_index v, const Graph & graph ) + : m_node( v ) + , m_iter() + , m_last() + { + tie(m_iter,m_last) = graph.AdjacentVertices( v ); + } + + DFSVertexInfo( const DFSVertexInfo & vi ) + : m_node( vi.m_node ) + , m_iter( vi.m_iter ) + , m_last( vi.m_last ) + {} + + DFSVertexInfo & operator = ( const DFSVertexInfo & vi ) + { + m_node = vi.m_node; + m_iter = vi.m_iter; + m_last = vi.m_last; + return *this; + } +}; + +//---------------------------------------------------------------------------------------- +/// Алгоритм обхода в глубину графа смежности +/** + Вычислительная сложность алгоритма практически линейная, если считать что + методы визитера выполняются за константное время. + + \param graph Граф смежности + \param vis Посетитель алгоритма +*/ +//--- + +template +void DepthFirstSearch( const Graph & graph, Visitor & vis ) +{ + typedef typename Graph::vertices_size_t vertices_size_t; + typedef typename Graph::vertex_index vertex_index; + typedef typename Graph::adj_iterator adj_iterator; + /* + enum Color // Разметка + { + col_white // не посещалась + , col_gray // в стеке + , col_black // + }; + */ + + const vertices_size_t vCount = graph.NumVertices(); + + std::vector> stack; + std::vector colourMap( vCount, white_color ); // отображение: вершина -> цвет + + // Пометить, как рассмотренные, игнорируемые вершины + for ( vertex_index xIdx = 0; xIdx(startNode,graph) ); + + while ( !stack.empty() ) + { + { + DFSVertexInfo & curr = stack.back(); + vIter = curr.m_iter; + vLast = curr.m_last; + srcNode = curr.m_node; + stack.pop_back(); + } + + while ( vIter != vLast ) + { + const vertex_index trgNode = *vIter; + ++vIter; + + vis.ExamineEdge( srcNode, trgNode, graph ); + + switch ( colourMap[trgNode] ) // Переход по дереву к следующей вершине + { + case white_color: + { + vis.TreeEdge( srcNode, trgNode, graph ); // "древесное" ребро + colourMap[trgNode] = gray_color; + stack.push_back( DFSVertexInfo( srcNode, vIter, vLast ) ); + vis.DiscoverNode( srcNode = trgNode, graph ); + tie( vIter, vLast ) = graph.AdjacentVertices( srcNode ); + break; + } + case gray_color: // Встетили обратное ребро + { + vis.BackEdge( srcNode, trgNode, graph ); + break; + } + default: // Встретили "прямое" или "кросс-ребро" в ориентированном графе + { + vis.ForwardOrCrossEdge( srcNode, trgNode, graph ); + break; + } + } + } + + // Событие завершения обхода текущей вершины + colourMap[srcNode] = black_color; + vis.FinishNode( srcNode, graph ); + } + } + } +} + + +////////////////////////////////////////////////////////////////////////////////////////// +// +/// Отображение реберных свойств для графов, поддерживающих концепцию смежности вершин (без явных ребер) +/** + Для графов с инцидентными ребрами лучше использовать другие типы отображений +*/ +////////////////////////////////////////////////////////////////////////////////////////// +/* +template +class EdgePropertyMap +{ + typedef Graph::vertex_descriptor vertex_descriptor; + typedef Graph::edge_descriptor edge_descriptor; + typedef std::pair pair; + class node + { + public: + node( const node & ); + node & operator = ( const node & ); + + private: + vertex_descriptor vertex; + std::vector props; + }; + + std::vector nodes; + +public: + const Prop & operator[]( edge_descriptor ) const; + Prop & operator[]( edge_descriptor ); +}; +*/ + +////////////////////////////////////////////////////////////////////////////////////////// +// +/// Инкапсуляция алгоритма поиска 2-связных компонент и/или точек сочленения +/** + ПЛАНИРУЕТСЯ ЗАМЕНИТЬ ЭТОТ АЛГОРИТМ НА БОЛЕЕ ОБЩИЙ НО НЕ МЕНЕЕ ЭФФЕКТИВНЫЙ: + DepthFirstSearch + BicompDFSVisitor + + \par Определение + d-деревом называем ациклический подграф рассматриваеморго графа, состоящего + из вершин и ребер, которые обходит поиск в глубину, на основе которого построен + данный адгоритм. + Graph - тип, отвечающий требованиям обычного графа смежности по вершинам + + \par РЕФАКТОРИНГ + 1) Нужно обобщить это алгоритм с библиотекой MtGraph + 2) Возможно снабдить это класс-алгоритм посетителем поиска компонент. + Это, например, позволит генерировать два варианта алгоритма поиска блоков: + Вариант, когда нужно найти только вершины сочленения (без блоков) вариант, + когда нужно искать шарниры и/или блоки; + 2.1.) Возможны другие рецепты, как генерить шаблоном два похожих алгоритма. + 3) Алгоритм можно упростить, если переложить его на еще более общный + алгоритм обхода в глубину. +*/ +////////////////////////////////////////////////////////////////////////////////////////// + +template +class MtBicompSearch +{ + // Ассоциативные типы + typedef typename Graph::vertex_index vertex_index; + typedef typename Graph::vertex_size_t vertex_size_t; + typedef typename Graph::adj_iterator adj_iterator; + +private: + const Graph & m_graph; + ptrdiff_t m_dfsCounter; + std::vector num; ///< Нумерация порядка обхода вершин d-дерева + std::vector father; ///< Отец вершины в d-дереве + std::vector lval; ///< Массив значений функции L[v] на каждую вершину - см.теорию стр.166, [Asan], Лемма 6; + std::vector m_cutnodes; ///< Обнаруженные точки сочленения + std::vector m_cutnodeProp; ///< Признак точки сочленения для вершин + +public: + MtBicompSearch( const Graph & ); + /// Найти все точки сочленения + const std::vector & SearchCutnodes(); + +private: + /// Алгоритм реккурсивного вызова поиска блоков и точек сочленения в графе + void BiComp( vertex_index ); + /// Инициализировать все рабочие данные для нового поиска + void Init(); + /// Запустить алгоритм + void Perform(); +}; + +//---------------------------------------------------------------------------------------- +// +//--- +template +MtBicompSearch::MtBicompSearch( const Graph & g ) + : m_graph( g ) + , m_dfsCounter(1) + , num() + , father() + , lval() + , m_cutnodes() + , m_cutnodeProp() +{} + +//---------------------------------------------------------------------------------------- +/// Найти все точки сочленения +//--- +template +const std::vector & MtBicompSearch::SearchCutnodes() +{ + Init(); + Perform(); + return m_cutnodes; +} + +//---------------------------------------------------------------------------------------- +/// Инициализировать все рабочие данные для нового поиска +//--- +template +void MtBicompSearch::Init() +{ + const vertex_size_t vertNb = m_graph.NumVertecies(); + m_dfsCounter = 1; + num.assign( vertNb, 0 ); + father.assign( vertNb, -1 ); + lval.assign( vertNb, -1 ); + m_cutnodeProp.assign( vertNb, false ); + m_cutnodes.clear(); +} + +//---------------------------------------------------------------------------------------- +/// Запустить алгоритм +//--- +template +void MtBicompSearch::Perform() +{ + PRECONDITION( m_cutnodes.empty() ); + + const vertex_size_t vertNb = m_graph.NumVertecies(); + for ( vertex_index startIdx = 0; startIdx adjIterPair = m_graph.AdjacentVertices( startIdx ); + for ( ; adjIterPair.first!=adjIterPair.second; ++adjIterPair.first ) + { + if ( father[*adjIterPair.first] == startIdx ) + { + ++fatherNb; + } + } + if ( fatherNb > 1 ) + { + // Корневая вершина - есть точка сочленения + PRECONDITION( !m_cutnodeProp[startIdx] ); + m_cutnodes.push_back( startIdx ); + m_cutnodeProp[startIdx] = true; + } + } + } +} + +//---------------------------------------------------------------------------------------- +/// Алгоритм реккурентного вызова поиска блоков и точек сочленения в графе +/** + Теорию см.главе 8, стр.166, Графы, матроиды, алгоритмы [Asan]; + \param vIdx - вершина (индекс), с которой начинаем поиск, которая ещё не рассмотрена, т.е. + num[vIdx] = 0; + + \par Определения + d-дерево - ациклический подграф основного подграфа, образуемого при обходе + вершин во время поиска в глубину; + + \par Вычислительная сложность + Вычислительная сложность: O(n+m), где n-кол-во вершин, m-кол-во ребер. Это следует из + того факта, что каждая вершина посещается не более одного раза. +*/ +//--- +template +void MtBicompSearch::BiComp( const vertex_index vIdx ) +{ + PRECONDITION( num[vIdx] == 0 ); + num[vIdx] = lval[vIdx] = m_dfsCounter; + ++m_dfsCounter; + + // Цикл по всем смежным вершинам vert; + std::pair adjIterPair = m_graph.AdjacentVertices( vIdx ); + for ( ; adjIterPair.first!=adjIterPair.second; ++adjIterPair.first ) + { + const vertex_index uIdx = *adjIterPair.first; // Вершина - сын в d-дереве; + // const edge_descriptor vuEdg = m_graph.GetEdge( vIdx, uIdx ); + if ( num[uIdx] == 0 ) // uIdx - сын вершины vIdx + { + // stackE.push_back( vuEdg ); // Вставить ребро vu; + PRECONDITION( father[uIdx] == -1 ); + father[uIdx] = vIdx; // зафиксируем отца для данной вершины uIdx; + BiComp( uIdx ); + + // При выходе из рекурсии значение функции L[u] уже вычислено; + lval[vIdx] = min_of( lval[vIdx], lval[uIdx] ); // см.лемму 6; + if ( lval[uIdx] >= num[vIdx] ) + { + // Здесь можно получить новый блок, для чего достаточно вытолкнуть из + // стека все ребра, включая ребро vu. + + // (!) Если вершина vIdx не корень d-дерева, то можно утверждать, что она - есть точка сочленения; + // См. теорему 8.2. + if ( father[vIdx] != -1 ) // Первородитель + { + if ( !m_cutnodeProp[vIdx] ) + { + m_cutnodes.push_back( vIdx ); + m_cutnodeProp[vIdx] = true; + } + } + /* + PRECONDITION( !stackE.empty() ) + blocks.NewComp(); + + #pragma message ( __TODO__ "(**) Собирать ребра возможно не понадобится! Достаточно cutnodes;" ) + while( !stackE.empty() ) + { + edge_descriptor edge = stackE.back(); + blocks.AddEdge( edge ); + stackE.pop_back(); // вытолкнуть ребро из стека; + if ( edge == vuEdg ) + { + break; + } + } + */ + } + } + else if ( num[uIdx] < num[vIdx] && uIdx != father[vIdx] ) + { + // Здесь vu - есть обратное ребро входящее в вершину u, которая выше, чем v в d-дереве; + // stackE.push_back( vuEdg ); // вставить ребро vu; + lval[vIdx] = min_of( lval[vIdx], num[uIdx] ); // см.лемму 6; + } + } +} + + +////////////////////////////////////////////////////////////////////////////////////////// +// +// Посетитель алгоритма поиска компонент сильной связности +// +////////////////////////////////////////////////////////////////////////////////////////// +struct DefaultSCVisitor +{ + // Вызывается алгоритмом перед началом обхода всего графа + template + inline void Start( const Graph & ) {} + // Вызывается, когда найден очередной компонент сильной связности в орграфе + /* + Аргументы: граф и пара вершинных итераторов, пробегающих подмножество компонента + */ + template + inline void Component( const Graph &, VertexIter, VertexIter ) {} + // Если IsFiltered = true, вершина считается исключенной из графа + template + inline bool IsFiltered( const Graph &, Vertex ) { return false; } +}; + + +////////////////////////////////////////////////////////////////////////////////////////// +// +/// Алгоритм поиска компонент сильной связности в орграфе +/** + Напомним, что две вершины орграфа считаются сильно связанными, если + существует маршрут из первой вершины ко второй и обратный маршрут из второй + к первой. Подграф называется сильно связным, если любая пары его + вершин сильно связаны. Компонент сильной связности графа - это один из + его сильно сзязный подграфов G', для которого не существует сильно связной пары + вершин u и v, таких, что u-принадлежит G', а v не принадлежит G'. Другими словами, + вершины компонента сильной связости принадлежат классу взаимной достижимости вершин; + \note Алгоритм #MtStrongComponents имеет линейную сложность вычислений + \ingroup GCBase +*/ +////////////////////////////////////////////////////////////////////////////////////////// + +template +class MtStrongComponents +{ +public: // Ассоциативные типы + typedef typename graph_traits::vertex vertex; + typedef typename graph_traits::edge edge; + typedef typename graph_traits::edge_iterator edge_iterator; + typedef typename graph_traits::vertex_iterator vertex_iterator; + +public: + MtStrongComponents( const Graph &, SCVisitor & ); + void operator() (); ///< Исполнить алгоритм поиска сильных компонентов + +private: + // DFS-алгоритм для поиска компонент сильной связности в графе ограничений + void StrongSearch( vertex, std::vector & ); + +private: + const Graph & m_diGraph; ///< Ориентированный граф + SCVisitor & m_vis; ///< Посетитель алгоритма поиска компонент сильной связности + size_t m_counter; ///< Порядок DFS-обхода + VertexPropertyMap num; ///< Вспомогательный массив порядковых номеров обхода в глубину + VertexPropertyMap lval; ///< Массив для промежуточных целочисленных вычислений + +private: + MtStrongComponents( const MtStrongComponents & ); + MtStrongComponents & operator = ( const MtStrongComponents & ); +}; + +//---------------------------------------------------------------------------------------- +// +//--- +template +MtStrongComponents::MtStrongComponents( const Graph & b_graph, Vis & vis ) + : m_diGraph( b_graph ) + , m_vis( vis ) + , num( b_graph.NumVertices() ) + , lval( b_graph.NumVertices() ) + , m_counter( 1 ) +{} + +//---------------------------------------------------------------------------------------- +// Главный алгоритм поиска компонент сильной связности в графе ограничений +//--- +template +void MtStrongComponents::operator() () +{ + m_vis.Start( m_diGraph ); + + std::vector stack; + stack.reserve( m_diGraph.NumVertices() ); + m_counter = 1; + + vertex_iterator vIter, vLast; + + for ( tie(vIter,vLast) = m_diGraph.Vertices(); vIter!=vLast; ++vIter ) + { + num[*vIter] = 0; + } + + for ( tie(vIter,vLast) = m_diGraph.Vertices(); vIter!=vLast; ++vIter ) + { + if ( num[*vIter] == 0 && !m_vis.IsFiltered(m_diGraph,*vIter) ) + StrongSearch( *vIter, stack ); + } +} + +//#define _RECURSIVE_STRONG_SEARCH 1 + +#ifdef _RECURSIVE_STRONG_SEARCH + +//---------------------------------------------------------------------------------------- +/// Алгоритм поиска компонент сильной связности в орграфе +/** + Алгоритм применяется для разбиения графа ограничений на независимо + решаемые подсистемы (сегменты). Рекурсивный вариант. Описание алгоритма приведено + в книжке Асанова по теории графов, стр.171.\n + \param vx - корневая вершина поддерева DFS + \param stack - стек рассмотренных вершин, для которых не установлена компонентная принадлежность +*/ +//--- +template +void MtStrongComponents::StrongSearch( vertex vx, std::vector & stack ) +{ + PRECONDITION( !m_vis.IsFiltered(m_diGraph,vx) ); + + num[vx] = m_counter; + lval[vx] = m_counter; + ++m_counter; + stack.push_back( vx ); + + edge_iterator eIter, eLast; // итераторы обхода инцидентных ребер + for ( tie(eIter,eLast) = m_diGraph.OutArcs(vx); eIter!=eLast; ++eIter ) + { + vertex w = m_diGraph.Target( *eIter ); // Выходящая вершина прямого ребра + PRECONDITION( w != vx ); // Граф не ориентированный !!! + if ( w != vx && !m_vis.IsFiltered(m_diGraph,w) ) // игнорируем обратное ребро из w в vx, а также отфильтрованные узлы; + { + if ( num[w] == 0 ) // - "древесная" дуга + { + StrongSearch( w, stack ); + if ( lval[w] < lval[vx] ) // При выходе из рекурсии значение l(w) должно быть уже насчитано; + lval[vx] = lval[w]; + } + else + { + const size_t wNum = num[w]; + if ( wNum < num[vx] && wNum < lval[vx] ) // - "поперечная" или "обратная" дуга + { + // Предположение: В стеке лежат вершины, из которых вершина vx достижима; + if ( std::find(stack.rbegin(), stack.rend(), w) != stack.rend() ) + { + lval[vx] = wNum; + } + } + } + } + } + + const size_t vNum = num[vx]; + if ( lval[vx] == vNum ) // vx - корневая вершина очередной компоненты сильной связности + { + // Обнаружен очередной сильный компонент + if ( !stack.empty() && num[stack.back()] >= vNum ) + { + // Посчитать размер компонента + typename std::vector::reverse_iterator vIter, vLast; + vIter = stack.rbegin(); + vLast = stack.rend(); + ptrdiff_t compSize = 0; + for ( ; vIter != vLast && num[*vIter] >= vNum; ++vIter, ++compSize ); + + // Передать диапазон компонента визитеру + typename std::vector::iterator cIter, cLast; + cIter = cLast = stack.end(); + std::advance( cIter, -compSize ); + m_vis.Component( m_diGraph, cIter, cLast ); + stack.erase( cIter, cLast ); // очистить верхушку стека + } + } +} + +#else // _RECURSIVE_STRONG_SEARCH + + +//---------------------------------------------------------------------------------------- +/// Стековый элемент для алгоритма обхода в глубину +//--- +template +struct DFS_element +{ + typedef typename Graph::vertices_size_t vertices_size_t; + typedef typename Graph::vertex vertex; + typedef typename Graph::edge_iterator edge_iterator; + + vertex node; + edge_iterator iter; + edge_iterator last; + + DFS_element( vertex v, const std::pair & pair ) + : node( v ) + , iter( pair.first ) + , last( pair.second ) + {} + + DFS_element( vertex v, const Graph & graph ) + : node( v ) + , iter() + , last() + { + tie( iter, last ) = graph.OutArcs( v ); + } + + DFS_element( const DFS_element & vi ) + : node( vi.node ) + , iter( vi.iter ) + , last( vi.last ) + {} + + DFS_element & operator = ( const DFS_element & vi ) + { + node = vi.node; + iter = vi.iter; + last = vi.last; + return *this; + } +}; + +//---------------------------------------------------------------------------------------- +/// Алгоритм поиска компонент сильной связности в орграфе +/** + Алгоритм применяется для разбиения графа ограничений на независимо-решаемые + подсистемы (сегменты). Описание алгоритма приведено в книжке Асанова по + теории графов, стр.171.\n + MA2013-02-22: Алгоритм переделан под нерекурсивный вариант; + \param rootVert - корневая вершина поддерева DFS + \param comStack - стек рассмотренных вершин, для которых не установлена компонентная принадлежность +*/ +//--- +template +void MtStrongComponents::StrongSearch( vertex rootVert + , std::vector & comStack ) +{ + typedef DFS_element DfsStackElem; + + PRECONDITION( !m_vis.IsFiltered(m_diGraph,rootVert) ); + std::vector dfsStack; + + num[rootVert] = lval[rootVert] = m_counter; + ++m_counter; + comStack.push_back( rootVert ); + dfsStack.push_back( DfsStackElem( rootVert, m_diGraph ) ); + DfsStackElem * topElem = &dfsStack.back(); + + while( !dfsStack.empty() ) // Цикл возвратов из стека (одна итерация - одно возвращение против древесного ребра ) + { + while ( topElem->iter != topElem->last ) + { + vertex w = m_diGraph.Target( *topElem->iter ); // Выходящая вершина прямого ребра + PRECONDITION( w != topElem->node ); // Граф не ориентированный !!! + if ( (w != topElem->node) && !m_vis.IsFiltered(m_diGraph,w) ) // игнорируем обратное ребро из w в vx, а также отфильтрованные узлы; + { + if ( num[w] == 0 ) // - "древесная" дуга + { + // Вместо рекурсии: StrongSearch( w, stack ); + num[w] = lval[w] = m_counter; + ++m_counter; + comStack.push_back( w ); + dfsStack.push_back( DfsStackElem(w, m_diGraph) ); + topElem = &dfsStack.back(); + continue; + } + else + { + const size_t wNum = num[w]; + if ( wNum < num[topElem->node] && wNum < lval[topElem->node] ) // - "поперечная" или "обратная" дуга + { + // Предположение: В стеке лежат вершины, из которых вершина vx достижима; + if ( std::find(comStack.rbegin(), comStack.rend(), w) != comStack.rend() ) + { + lval[topElem->node] = wNum; + } + } + } + } + ++topElem->iter; + } + + PRECONDITION( dfsStack.back().iter == dfsStack.back().last ); + PRECONDITION( topElem == &dfsStack.back() ); + + // Завершено посещение узла sElem->m_node + const size_t vNum = num[topElem->node/*vx*/]; + if ( lval[topElem->node/*vx*/] == vNum ) // vx - корневая вершина очередной компоненты сильной связности + { + // Обнаружен очередной сильный компонент + if ( !comStack.empty() && num[comStack.back()] >= vNum ) + { + // Посчитать размер компонента + typename std::vector::reverse_iterator vIter, vLast; + vIter = comStack.rbegin(); + vLast = comStack.rend(); + ptrdiff_t compSize = 0; + for ( ; vIter != vLast && num[*vIter] >= vNum; ++vIter, ++compSize ); + + // Передать диапазон компонента визитеру + typename std::vector::iterator cIter, cLast; + cIter = cLast = comStack.end(); + std::advance( cIter, -compSize ); + m_vis.Component( m_diGraph, cIter, cLast ); + comStack.erase( cIter, cLast ); // очистить верхушку стека + } + } + // Возвращение против древесного ребра , где w-просмотренная вершина, v-вершина из которой пришли в w; + { + const vertex w = topElem->node; + dfsStack.pop_back(); + + if ( !dfsStack.empty() ) + { + topElem = &dfsStack.back(); + const vertex vxPrev = dfsStack.back().node; + // При выходе из рекурсии значение lVal(w) должно быть уже насчитано; + if ( lval[w] < lval[vxPrev] ) + { + lval[vxPrev] = lval[w]; + } + } + } + } +} + +#endif // _RECURSIVE_STRONG_SEARCH + +#endif // __GRAPH_ALGORITHMS_H + +// eof diff --git a/C3d/Include/iges_basic.h b/C3d/Include/iges_basic.h index e1bcdaf..e9c08e0 100644 --- a/C3d/Include/iges_basic.h +++ b/C3d/Include/iges_basic.h @@ -1,353 +1,353 @@ -//////////////////////////////////////////////////////////////////////////////// -// -//////////////////////////////////////////////////////////////////////////////// - -#ifndef __IGES_BASIC_H -#define __IGES_BASIC_H - -#include - -#include - -#define IGS_DOUBLE_TO_STRING_NDEC 15 - - -//------------------------------------------------------------------------------ -// типы IGS псевдо объектов -// --- -typedef enum { - igs_CopiousData11 = 11, - igs_MetalHatch = 31, - igs_CeramicHatch = 32, - igs_Hatch33 = 33, - igs_Hatch34 = 34, - igs_Hatch35 = 35, - igs_Hatch36 = 36, - igs_NonMetalHatch = 37, - igs_BrickHatch = 38, - igs_WitnesLine = 40, - - igs_ItArcOrCircleIGES = 100, - igs_ItContourIGES = 102, - igs_ItConicIGES = 104, - igs_ItCopiousDataIGES = 106, - igs_ItPlaneIGES = 108, - igs_ItLineSegIGES = 110, - igs_ItSplineIGES = 112, - igs_ItParametricSplineSurfaceIGES = 114, - igs_ItPointIGES = 116, - igs_ItRuledSurfaceIGES = 118, - igs_ItSurfaceOfRevolutionIGES = 120, - igs_ItTabulatedCylinderIGES = 122, - igs_ItDirectionIGES = 123, - igs_ItTransformMatrixIGES = 124, - igs_ItRationalBSplineCurveIGES = 126, - igs_ItRationalBSplineSurfaceIGES = 128, - igs_ItOffsetSurfaceIGES = 140, - igs_ItBoundaryIGES = 141, - igs_ItCurveOnParametricSurfaceIGES = 142, - igs_ItBoundedSurfaceIGES = 143, - igs_ItTrimmedParametricSurfaceIGES = 144, - igs_ItManifoldSolidBRepIGES = 186, - igs_ItPlaneSurfaceIGES = 190, - igs_ItRCCylindricalSurfaceIGES = 192, - igs_ItRCConicalSurfaceIGES = 194, - igs_ItSphericalSurfaceIGES = 196, - igs_ItToroidalSurfaceIGES = 198, - - igs_AngularDim = 202, - igs_DiamDim = 206, - igs_Text = 212, - igs_Leader = 214, - igs_LinDim = 216, - igs_RadDim = 222, - - igs_ItSubfigureIGES = 308, - igs_ItColorIGES = 314, - igs_ItBlockIGES = 402, - igs_ItPropertyIGES = 406, - igs_ItSingularSubfigureInstanceIGES = 408, - igs_ItExternalReferenceIGES = 416, - igs_ItVertexListIGES = 502, - igs_ItEdgeListIGES = 504, - igs_ItLoopIGES = 508, - igs_ItFaceIGES = 510, - igs_ItShellIGES = 514, - igs_Surface, - igs_SpaceCurve, -} IGSGConverterType; - - -//----------------------------------------------------------------------------- -// -// --- -typedef enum { // секция - UndefSection, - FlagSection, // not always present - StartSection, - GlobalSection, - DirectoryEntrySection, - ParametrDataSection, - TerminateSection -} NameSectionIGES; - -#define LENGTH_STRING_FILE 80 -#define LENGTH_STRING_IGES 72 - -#define IGS_WIDTH 1000 // число градаций толщины - -#define LENGTH_ARRAY_IGES_SPEC_SYMBOLS 58 -#define LENGTH_ARRAY_IGES_SPEC_SYMBOLS_GOST 6 -//#define LENGTH_ARRAY_IGES_SPEC_SYMBOLS1001 30 -#define LENGTH_ARRAY_IGES_SPEC_SYMBOLS1001 29 -#define LENGTH_ARRAY_IGES_SPEC_SYMBOLS1002 34 -#define LENGTH_ARRAY_IGES_SPEC_SYMBOLS1003 32 -#define LENGTH_ARRAY_IGES_SPEC_SYMBOLS800 7 - - -#define IGS_BLOCK_GROUP 1 // + форма блока 1 -#define IGS_BLOCK_GROUP_WO_BACK_POINTERS 7 // + форма блока 7 - без обратных указателей - -#define IGS_DOUBLE_UNDEF -1e32 // - -#define ENTITY_LABEL_COUNT 8 ///< Длина поля entityLabel - -#define VDE_VISIBLE_YES 0 ///< Объект видим -#define VDE_VISIBLE_NO 1 ///< Объект невидим - -#define VDE_DEPEND_NO 0 ///< Объект независим -#define VDE_DEPEND_PHYS 1 ///< Объект зависим физически -#define VDE_DEPEND_LOG 2 ///< Объект зависим логически -#define VDE_DEPEND_BOTH 3 ///< Зависим физически и логически - -#define VDE_USE_GEOMETRY 0 ///< Объект геометрический -#define VDE_USE_ANNOT 1 ///< Объект аннотационный -#define VDE_USE_DEF 2 ///< Объект определение -#define VDE_USE_OTHER 3 ///< Объект вне классификации -#define VDE_USE_LOG_POS 4 ///< Объект логический / позиционирование -#define VDE_USE_2D_PARAM 5 ///< Объект параметрический 2D -#define VDE_USE_CONSTR_GM 6 ///< Объект конструктивной геометрии - -#define VDE_HIER_TOP_DOWN 0 ///< Сверху вниз -#define VDE_HIER_GLOB_DEFER 1 ///< Глобально -#define VDE_HIER_PROPERTY 2 ///< Свойство - - -//------------------------------------------------------------------------------- -// -// --- -struct VectorDE{ - unsigned short visible : 1;// 9 вектор состояния - unsigned short depend : 2;// 9 - unsigned short geometry : 3;// 9 - unsigned short hierarchy : 2;// 9 -}; - - -//----------------------------------------------------------------------------- -// -// --- -struct DirEntryParameter { -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -// горячо рекомендую все изменения в структуре согласовывать с процедурой чтения -// ProcessingOneEntityDirEntrySection(), иначе есть очень реальный шанс все порушить, -// еще рекомендую крепко подумать, прежде чем делать виртуальные функции и наследников -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - int32 typeNumber; // 1 номер типа -// поле typeNumber должно идти первым - см. функцию Init этой структуры -// !!!!!!!!!!!!!!!!!!!! - ptrdiff_t numbParDataString; // 2 номер строки данных в секции Parametr Data - ptrdiff_t structure; // 3 инвертированный указатель на на строку в секции DirEntry обычно 0 - ptrdiff_t lineFontPattern; // 4 номер стандартного типа линии или указатель на строку с описанием нестандартного - ptrdiff_t level; // 5 номер слоя или указатель на строку с описанием слоя в секции DirEntry - ptrdiff_t view; // 6 указатель на строку с описанием вида в секции DirEntry - ptrdiff_t transformMatrix; // 7 указатель на строку с описанием матрицы преобразования в секции DirEntry - ptrdiff_t labelDisplayAssociativ;// 8 указатель на строку с ???? в секции DirEntry - // 9 вектор состояния - union { - VectorDE def; - unsigned short vector; - }; - ptrdiff_t numbString; // 10 номер строки - ptrdiff_t lineWeight; // 12 - 11 пропущен - градация толщины - ptrdiff_t color; // 13 номер цвета или указатель на строку с описанием цвета - ptrdiff_t lineCount; // 14 число строк под описание параметров в секции Parametr Data - int32 formNumber; // 15 - std::string entityLabel; // 18 метка - // SpAG K14 BUG_65022 - избавляемся от низкоуровневых абстракций - ptrdiff_t numerLabel; // 19 числовая метка - - DirEntryParameter( int32 type = 0 ): typeNumber( type ), numbParDataString( 0 ), structure( 0 ), lineFontPattern( 0 ), level( 0 ), - view( 0 ), transformMatrix( 0 ), labelDisplayAssociativ( 0 ), numbString( 0 ), lineWeight( 0 ), - color( 0 ), lineCount( 0 ), formNumber( 0 ), entityLabel( ENTITY_LABEL_COUNT, ' ' ), numerLabel( 0 ) { Init(); } // SpAG K13 SP1 анализаторы кода - - void Init() { - // SpAG - С точки зрения cppCheck должно быть гораздо более пристойно - def.visible = VDE_VISIBLE_YES; - def.depend = VDE_DEPEND_NO; - def.geometry = VDE_USE_DEF; - def.hierarchy = VDE_HIER_TOP_DOWN; - } - - void operator = ( const DirEntryParameter & o ) { - typeNumber = o.typeNumber; - numbParDataString = o.numbParDataString; - structure = o.structure; - lineFontPattern = o.lineFontPattern; - level = o.level; - view = o.view; - transformMatrix = o.transformMatrix; - labelDisplayAssociativ = o.labelDisplayAssociativ; - numbString = o.numbString; // BUG_71099 - lineWeight = o.lineWeight; - color = o.color; - lineCount = o.lineCount; - formNumber = o.formNumber; - entityLabel = o.entityLabel; // SpAG K14 BUG_65022 - numerLabel = o.numerLabel; - vector = o.vector; - } - - void Zero() { - typeNumber = 0; - numbParDataString = structure = lineFontPattern = level = view = transformMatrix = labelDisplayAssociativ = numbString = lineWeight = color = lineCount = numerLabel = 0; - formNumber = 0; - vector = 0; - entityLabel.assign( ENTITY_LABEL_COUNT, ' ' ); - } - - bool operator == ( DirEntryParameter & o ) const { return numbString == o.numbString; } - bool operator < ( DirEntryParameter & o ) const { return numbString < o.numbString; } -}; - - -//----------------------------------------------------------------------------- -// Данные общей секции. -// --- -struct GlobalSectionParameter { - int32 delimiter; // ограничитель параметров 1 - int32 recordDelimiter; // ограничитель записей 2 - std::string identifSendingSystem; // версия системы откуда 3 - std::string fileName; // 4 - std::string systemID; // идентификатор системы откуда 5 - std::string verPreProc; // версия препроцессора( на хрен она упала?) 6 - int32 numbBitsOnInt; // разрядность целого откуда 7 - int32 maxPowerFloat; // максимальная степень float откуда 8 - int32 numbSignFloat; // число значащих цифр float откуда 9 - int32 maxPowerDouble; // максимальная степень double откуда 10 - int32 numbSignDouble; // число значащих цифр double откуда 11 - std::string identifReceivngSystem;// версия системы куда 12 - double scale; // масштаб 13 - int32 unitFlag; // 14 1- дюймы 2 -мм 3- 4 -футы 5 -мили 6 -м 7 -км 8 -милидюймы 9- мкм 10- см 11 - микродюйм - std::string nameUnit; // 15 - int32 maxNumberOfLineWeightGrad; // 16 - double widthOfMaxLineWeight; // 17 - std::string dateAndTime; // 18 YYMMMDD.HHNNSS - double minResolution; // 19 - мин. разрешение системы - double maxAbsCoord; // 20 максимальное координата по модулю - std::string nameOfAuthor; // 21 автор - std::string authorsOrg; // 22 организация - int32 intVer; // 23 - int32 intDraftStandart; // 24 - std::string dateAndTimeMod; // 25 YYMMMDD.HHNNSS - - GlobalSectionParameter () { Init(); } - void Init() { - delimiter = ','; // ограничитель параметров 1 - recordDelimiter = ';'; // ограничитель записей 2 - identifSendingSystem = " "; // версия системы откуда 3 - fileName = " "; // 4 - systemID = " "; // идентификатор системы откуда 5 - verPreProc = " "; // версия препроцессора( на хрен она упала?) 6 - numbBitsOnInt = 32; // разрядность целого откуда 7 //-V112 - maxPowerFloat = 38; // максимальная степень float откуда 8 - numbSignFloat = 6; // число значащих цифр float откуда 9 - maxPowerDouble = 307; // максимальная степень double откуда 10 - numbSignDouble = 15; // число значащих цифр double откуда 11 - identifReceivngSystem = " "; // версия системы куда 12 - scale = 1.0; // масштаб 13 - unitFlag = 2; // 14 1- дюймы 2 -мм 3- 4 -футы 5 -мили 6 -м 7 -км 8 -милидюймы 9- мкм 10- см 11 - микродюйм - nameUnit = "MM"; // 15 - maxNumberOfLineWeightGrad = IGS_WIDTH;// 16 - widthOfMaxLineWeight = 1; // 17 - dateAndTime = ""; // 18 YYMMMDD.HHNNSS - minResolution = 0.001; // 19 - мин. разрешение системы - maxAbsCoord = 10000; // 20 максимальное координата по модулю - nameOfAuthor = " "; // 21 автор - authorsOrg = " "; // 22 организация - intVer = 0/*3*/; // 23 - intDraftStandart = 0; // 24 - dateAndTimeMod = " "; // 25 - } -}; - - -//------------------------------------------------------------------------------- -// структура для формирования отчета о записи в IGES -// --- -struct ReportEntity { - int32 kompasResNumHigh; // номер в ресурсе строки наименования того, что пришло из Компаса - int32 kompasResNumBase; // номер в ресурсе строки наименования подложки, которая пришла из Компаса - ptrdiff_t igesResNum; // номер в ресурсе строки наименования того, чем записали в IGES - ReportEntity( ptrdiff_t _igesResNum = 0 ) - : kompasResNumHigh( 0 ) - , kompasResNumBase( 0 ) - , igesResNum( _igesResNum ) - {} -}; - - -//------------------------------------------------------------------------------- -/// Базовый класс для IGES объектов -// --- -class CONV_CLASS BasicIGES { -public : - ptrdiff_t numStr; ///< место хранения - номер строки в секции DE - union { - VectorDE def; - unsigned short vector; - }; - ptrdiff_t color; - ptrdiff_t level; - ptrdiff_t matrix; - ptrdiff_t form; - ReportEntity report; - -private: - ptrdiff_t numType; // номер типа - -public : - BasicIGES( ptrdiff_t _numType, ptrdiff_t _form = 0 ) - : numStr (0) - , vector (0) - , color (0) - , level (0) - , matrix (0) - , form ( _form ) - , report ( _numType ) - , numType( _numType ) - {} - - BasicIGES( const BasicIGES & o ) - : numStr ( o.numStr ) - , vector ( o.vector ) - , color ( o.color ) - , level ( o.level ) - , matrix ( o.matrix ) - , form ( o.form ) - , report ( o.numType ) - , numType( o.numType ) - {} - - virtual ~BasicIGES() {} - - bool Less( const BasicIGES & o ) const { return numType < o.numType ? true : numType > o.numType ? false : form < o.form ? true : form > o.form ? false : matrix < o.matrix;} - bool Eq ( const BasicIGES & o ) const { return numType == o.numType && form == o.form && matrix == o.matrix;} - const ptrdiff_t GetTypeIGES() const { return numType; } - const ptrdiff_t GetFormIGES() const { return form; } - virtual bool operator == ( const BasicIGES & o ) const { return Eq( o ); } - virtual bool operator < ( const BasicIGES & o ) const { return Less( o ); } -}; - - -#endif // __IGES_BASIC_H +//////////////////////////////////////////////////////////////////////////////// +// +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __IGES_BASIC_H +#define __IGES_BASIC_H + +#include + +#include + +#define IGS_DOUBLE_TO_STRING_NDEC 15 + + +//------------------------------------------------------------------------------ +// типы IGS псевдо объектов +// --- +typedef enum { + igs_CopiousData11 = 11, + igs_MetalHatch = 31, + igs_CeramicHatch = 32, + igs_Hatch33 = 33, + igs_Hatch34 = 34, + igs_Hatch35 = 35, + igs_Hatch36 = 36, + igs_NonMetalHatch = 37, + igs_BrickHatch = 38, + igs_WitnesLine = 40, + + igs_ItArcOrCircleIGES = 100, + igs_ItContourIGES = 102, + igs_ItConicIGES = 104, + igs_ItCopiousDataIGES = 106, + igs_ItPlaneIGES = 108, + igs_ItLineSegIGES = 110, + igs_ItSplineIGES = 112, + igs_ItParametricSplineSurfaceIGES = 114, + igs_ItPointIGES = 116, + igs_ItRuledSurfaceIGES = 118, + igs_ItSurfaceOfRevolutionIGES = 120, + igs_ItTabulatedCylinderIGES = 122, + igs_ItDirectionIGES = 123, + igs_ItTransformMatrixIGES = 124, + igs_ItRationalBSplineCurveIGES = 126, + igs_ItRationalBSplineSurfaceIGES = 128, + igs_ItOffsetSurfaceIGES = 140, + igs_ItBoundaryIGES = 141, + igs_ItCurveOnParametricSurfaceIGES = 142, + igs_ItBoundedSurfaceIGES = 143, + igs_ItTrimmedParametricSurfaceIGES = 144, + igs_ItManifoldSolidBRepIGES = 186, + igs_ItPlaneSurfaceIGES = 190, + igs_ItRCCylindricalSurfaceIGES = 192, + igs_ItRCConicalSurfaceIGES = 194, + igs_ItSphericalSurfaceIGES = 196, + igs_ItToroidalSurfaceIGES = 198, + + igs_AngularDim = 202, + igs_DiamDim = 206, + igs_Text = 212, + igs_Leader = 214, + igs_LinDim = 216, + igs_RadDim = 222, + + igs_ItSubfigureIGES = 308, + igs_ItColorIGES = 314, + igs_ItBlockIGES = 402, + igs_ItPropertyIGES = 406, + igs_ItSingularSubfigureInstanceIGES = 408, + igs_ItExternalReferenceIGES = 416, + igs_ItVertexListIGES = 502, + igs_ItEdgeListIGES = 504, + igs_ItLoopIGES = 508, + igs_ItFaceIGES = 510, + igs_ItShellIGES = 514, + igs_Surface, + igs_SpaceCurve, +} IGSGConverterType; + + +//----------------------------------------------------------------------------- +// +// --- +typedef enum { // секция + UndefSection, + FlagSection, // not always present + StartSection, + GlobalSection, + DirectoryEntrySection, + ParametrDataSection, + TerminateSection +} NameSectionIGES; + +#define LENGTH_STRING_FILE 80 +#define LENGTH_STRING_IGES 72 + +#define IGS_WIDTH 1000 // число градаций толщины + +#define LENGTH_ARRAY_IGES_SPEC_SYMBOLS 58 +#define LENGTH_ARRAY_IGES_SPEC_SYMBOLS_GOST 6 +//#define LENGTH_ARRAY_IGES_SPEC_SYMBOLS1001 30 +#define LENGTH_ARRAY_IGES_SPEC_SYMBOLS1001 29 +#define LENGTH_ARRAY_IGES_SPEC_SYMBOLS1002 34 +#define LENGTH_ARRAY_IGES_SPEC_SYMBOLS1003 32 +#define LENGTH_ARRAY_IGES_SPEC_SYMBOLS800 7 + + +#define IGS_BLOCK_GROUP 1 // + форма блока 1 +#define IGS_BLOCK_GROUP_WO_BACK_POINTERS 7 // + форма блока 7 - без обратных указателей + +#define IGS_DOUBLE_UNDEF -1e32 // + +#define ENTITY_LABEL_COUNT 8 ///< Длина поля entityLabel + +#define VDE_VISIBLE_YES 0 ///< Объект видим +#define VDE_VISIBLE_NO 1 ///< Объект невидим + +#define VDE_DEPEND_NO 0 ///< Объект независим +#define VDE_DEPEND_PHYS 1 ///< Объект зависим физически +#define VDE_DEPEND_LOG 2 ///< Объект зависим логически +#define VDE_DEPEND_BOTH 3 ///< Зависим физически и логически + +#define VDE_USE_GEOMETRY 0 ///< Объект геометрический +#define VDE_USE_ANNOT 1 ///< Объект аннотационный +#define VDE_USE_DEF 2 ///< Объект определение +#define VDE_USE_OTHER 3 ///< Объект вне классификации +#define VDE_USE_LOG_POS 4 ///< Объект логический / позиционирование +#define VDE_USE_2D_PARAM 5 ///< Объект параметрический 2D +#define VDE_USE_CONSTR_GM 6 ///< Объект конструктивной геометрии + +#define VDE_HIER_TOP_DOWN 0 ///< Сверху вниз +#define VDE_HIER_GLOB_DEFER 1 ///< Глобально +#define VDE_HIER_PROPERTY 2 ///< Свойство + + +//------------------------------------------------------------------------------- +// +// --- +struct VectorDE{ + unsigned short visible : 1;// 9 вектор состояния + unsigned short depend : 2;// 9 + unsigned short geometry : 3;// 9 + unsigned short hierarchy : 2;// 9 +}; + + +//----------------------------------------------------------------------------- +// +// --- +struct DirEntryParameter { +// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +// горячо рекомендую все изменения в структуре согласовывать с процедурой чтения +// ProcessingOneEntityDirEntrySection(), иначе есть очень реальный шанс все порушить, +// еще рекомендую крепко подумать, прежде чем делать виртуальные функции и наследников +// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + int32 typeNumber; // 1 номер типа +// поле typeNumber должно идти первым - см. функцию Init этой структуры +// !!!!!!!!!!!!!!!!!!!! + ptrdiff_t numbParDataString; // 2 номер строки данных в секции Parametr Data + ptrdiff_t structure; // 3 инвертированный указатель на на строку в секции DirEntry обычно 0 + ptrdiff_t lineFontPattern; // 4 номер стандартного типа линии или указатель на строку с описанием нестандартного + ptrdiff_t level; // 5 номер слоя или указатель на строку с описанием слоя в секции DirEntry + ptrdiff_t view; // 6 указатель на строку с описанием вида в секции DirEntry + ptrdiff_t transformMatrix; // 7 указатель на строку с описанием матрицы преобразования в секции DirEntry + ptrdiff_t labelDisplayAssociativ;// 8 указатель на строку с ???? в секции DirEntry + // 9 вектор состояния + union { + VectorDE def; + unsigned short vector; + }; + ptrdiff_t numbString; // 10 номер строки + ptrdiff_t lineWeight; // 12 - 11 пропущен - градация толщины + ptrdiff_t color; // 13 номер цвета или указатель на строку с описанием цвета + ptrdiff_t lineCount; // 14 число строк под описание параметров в секции Parametr Data + int32 formNumber; // 15 + std::string entityLabel; // 18 метка + // SpAG K14 BUG_65022 - избавляемся от низкоуровневых абстракций + ptrdiff_t numerLabel; // 19 числовая метка + + DirEntryParameter( int32 type = 0 ): typeNumber( type ), numbParDataString( 0 ), structure( 0 ), lineFontPattern( 0 ), level( 0 ), + view( 0 ), transformMatrix( 0 ), labelDisplayAssociativ( 0 ), numbString( 0 ), lineWeight( 0 ), + color( 0 ), lineCount( 0 ), formNumber( 0 ), entityLabel( ENTITY_LABEL_COUNT, ' ' ), numerLabel( 0 ) { Init(); } // SpAG K13 SP1 анализаторы кода + + void Init() { + // SpAG - С точки зрения cppCheck должно быть гораздо более пристойно + def.visible = VDE_VISIBLE_YES; + def.depend = VDE_DEPEND_NO; + def.geometry = VDE_USE_DEF; + def.hierarchy = VDE_HIER_TOP_DOWN; + } + + void operator = ( const DirEntryParameter & o ) { + typeNumber = o.typeNumber; + numbParDataString = o.numbParDataString; + structure = o.structure; + lineFontPattern = o.lineFontPattern; + level = o.level; + view = o.view; + transformMatrix = o.transformMatrix; + labelDisplayAssociativ = o.labelDisplayAssociativ; + numbString = o.numbString; // BUG_71099 + lineWeight = o.lineWeight; + color = o.color; + lineCount = o.lineCount; + formNumber = o.formNumber; + entityLabel = o.entityLabel; // SpAG K14 BUG_65022 + numerLabel = o.numerLabel; + vector = o.vector; + } + + void Zero() { + typeNumber = 0; + numbParDataString = structure = lineFontPattern = level = view = transformMatrix = labelDisplayAssociativ = numbString = lineWeight = color = lineCount = numerLabel = 0; + formNumber = 0; + vector = 0; + entityLabel.assign( ENTITY_LABEL_COUNT, ' ' ); + } + + bool operator == ( DirEntryParameter & o ) const { return numbString == o.numbString; } + bool operator < ( DirEntryParameter & o ) const { return numbString < o.numbString; } +}; + + +//----------------------------------------------------------------------------- +// Данные общей секции. +// --- +struct GlobalSectionParameter { + int32 delimiter; // ограничитель параметров 1 + int32 recordDelimiter; // ограничитель записей 2 + std::string identifSendingSystem; // версия системы откуда 3 + std::string fileName; // 4 + std::string systemID; // идентификатор системы откуда 5 + std::string verPreProc; // версия препроцессора( на хрен она упала?) 6 + int32 numbBitsOnInt; // разрядность целого откуда 7 + int32 maxPowerFloat; // максимальная степень float откуда 8 + int32 numbSignFloat; // число значащих цифр float откуда 9 + int32 maxPowerDouble; // максимальная степень double откуда 10 + int32 numbSignDouble; // число значащих цифр double откуда 11 + std::string identifReceivngSystem;// версия системы куда 12 + double scale; // масштаб 13 + int32 unitFlag; // 14 1- дюймы 2 -мм 3- 4 -футы 5 -мили 6 -м 7 -км 8 -милидюймы 9- мкм 10- см 11 - микродюйм + std::string nameUnit; // 15 + int32 maxNumberOfLineWeightGrad; // 16 + double widthOfMaxLineWeight; // 17 + std::string dateAndTime; // 18 YYMMMDD.HHNNSS + double minResolution; // 19 - мин. разрешение системы + double maxAbsCoord; // 20 максимальное координата по модулю + std::string nameOfAuthor; // 21 автор + std::string authorsOrg; // 22 организация + int32 intVer; // 23 + int32 intDraftStandart; // 24 + std::string dateAndTimeMod; // 25 YYMMMDD.HHNNSS + + GlobalSectionParameter () { Init(); } + void Init() { + delimiter = ','; // ограничитель параметров 1 + recordDelimiter = ';'; // ограничитель записей 2 + identifSendingSystem = " "; // версия системы откуда 3 + fileName = " "; // 4 + systemID = " "; // идентификатор системы откуда 5 + verPreProc = " "; // версия препроцессора( на хрен она упала?) 6 + numbBitsOnInt = 32; // разрядность целого откуда 7 //-V112 + maxPowerFloat = 38; // максимальная степень float откуда 8 + numbSignFloat = 6; // число значащих цифр float откуда 9 + maxPowerDouble = 307; // максимальная степень double откуда 10 + numbSignDouble = 15; // число значащих цифр double откуда 11 + identifReceivngSystem = " "; // версия системы куда 12 + scale = 1.0; // масштаб 13 + unitFlag = 2; // 14 1- дюймы 2 -мм 3- 4 -футы 5 -мили 6 -м 7 -км 8 -милидюймы 9- мкм 10- см 11 - микродюйм + nameUnit = "MM"; // 15 + maxNumberOfLineWeightGrad = IGS_WIDTH;// 16 + widthOfMaxLineWeight = 1; // 17 + dateAndTime = ""; // 18 YYMMMDD.HHNNSS + minResolution = 0.001; // 19 - мин. разрешение системы + maxAbsCoord = 10000; // 20 максимальное координата по модулю + nameOfAuthor = " "; // 21 автор + authorsOrg = " "; // 22 организация + intVer = 0/*3*/; // 23 + intDraftStandart = 0; // 24 + dateAndTimeMod = " "; // 25 + } +}; + + +//------------------------------------------------------------------------------- +// структура для формирования отчета о записи в IGES +// --- +struct ReportEntity { + int32 kompasResNumHigh; // номер в ресурсе строки наименования того, что пришло из Компаса + int32 kompasResNumBase; // номер в ресурсе строки наименования подложки, которая пришла из Компаса + ptrdiff_t igesResNum; // номер в ресурсе строки наименования того, чем записали в IGES + ReportEntity( ptrdiff_t _igesResNum = 0 ) + : kompasResNumHigh( 0 ) + , kompasResNumBase( 0 ) + , igesResNum( _igesResNum ) + {} +}; + + +//------------------------------------------------------------------------------- +/// Базовый класс для IGES объектов +// --- +class CONV_CLASS BasicIGES { +public : + ptrdiff_t numStr; ///< место хранения - номер строки в секции DE + union { + VectorDE def; + unsigned short vector; + }; + ptrdiff_t color; + ptrdiff_t level; + ptrdiff_t matrix; + ptrdiff_t form; + ReportEntity report; + +private: + ptrdiff_t numType; // номер типа + +public : + BasicIGES( ptrdiff_t _numType, ptrdiff_t _form = 0 ) + : numStr (0) + , vector (0) + , color (0) + , level (0) + , matrix (0) + , form ( _form ) + , report ( _numType ) + , numType( _numType ) + {} + + BasicIGES( const BasicIGES & o ) + : numStr ( o.numStr ) + , vector ( o.vector ) + , color ( o.color ) + , level ( o.level ) + , matrix ( o.matrix ) + , form ( o.form ) + , report ( o.numType ) + , numType( o.numType ) + {} + + virtual ~BasicIGES() {} + + bool Less( const BasicIGES & o ) const { return numType < o.numType ? true : numType > o.numType ? false : form < o.form ? true : form > o.form ? false : matrix < o.matrix;} + bool Eq ( const BasicIGES & o ) const { return numType == o.numType && form == o.form && matrix == o.matrix;} + const ptrdiff_t GetTypeIGES() const { return numType; } + const ptrdiff_t GetFormIGES() const { return form; } + virtual bool operator == ( const BasicIGES & o ) const { return Eq( o ); } + virtual bool operator < ( const BasicIGES & o ) const { return Less( o ); } +}; + + +#endif // __IGES_BASIC_H diff --git a/C3d/Include/iges_structure.h b/C3d/Include/iges_structure.h index 91a6708..3967be8 100644 --- a/C3d/Include/iges_structure.h +++ b/C3d/Include/iges_structure.h @@ -1,535 +1,535 @@ -//////////////////////////////////////////////////////////////////////////////// -// -//////////////////////////////////////////////////////////////////////////////// - -#ifndef __IGES_STRUCTURES_H -#define __IGES_STRUCTURES_H - - -#include -#include -#include -#include "iges_basic.h" - - -//------------------------------------------------------------------------------- -// функции сравнения двух наследников от BasicIGES, которые не содержат -// динамических данных -// --- -template -inline bool Eq( const Type * t, const BasicIGES & o ) { - if ( !t->Eq( o ) ) - return false; - - const Type * r = dynamic_cast(&o); - if ( !r ) - return false; - - return ::IsEqualSArrayItems( t, r ); -} - - -//------------------------------------------------------------------------------- -// функции сравнения двух наследников от BasicIGES, которые не содержат -// динамических данных -// --- -template -inline bool Less( const Type * t, const BasicIGES & o ) { - if ( !t->Eq( o ) ) - return t->Less( o ); - - const Type * r = dynamic_cast(&o); - if ( !r ) - return false; - - return ::IsLessThanSArrayItems( t, r ); -} - - -//------------------------------------------------------------------------------- -// структура для сохранения типов линий -// --- -struct CONV_CLASS LTypeNameIGES { - uint16 number; // номер стиля в чертеже C3D - ptrdiff_t colorOrStr; // цвет или номер строки цвета в файле IGES - ptrdiff_t width; // толщина линии на бумаге * 1000 - ptrdiff_t numOrStr; // номер IGES-типа линии или номер строки типа в файле IGES - - LTypeNameIGES() : number(0), colorOrStr( 0 ), width(1), numOrStr(0){} - - bool operator == (const LTypeNameIGES & o) const { return number == o.number; } - bool operator < (const LTypeNameIGES & o) const { return number < o.number; } - - void Assign( const LTypeNameIGES & o ); -}; - - -//------------------------------------------------------------------------------- -// структура цвета и места его хранения -// --- -struct CONV_CLASS ColorIGES : public BasicIGES { - int32 trueColor; - - ColorIGES( int32 _color = 0 ); - virtual bool operator == ( const BasicIGES & o ) const; - virtual bool operator < ( const BasicIGES & o ) const; -}; - - -//------------------------------------------------------------------------------- -// -// --- -typedef ColorIGES * PCOLORIGES; -typedef const ColorIGES * PCCOLORIGES; - - -//------------------------------------------------------------------------------- -// -// --- -#ifdef _MSC_VER // C3D_WINDOWS -inline bool IsLessThanSArrayItems ( const PCCOLORIGES &obj1, const PCCOLORIGES &obj2 ) { return obj1 < obj2; } -#else // C3D_WINDOWS -template<> bool IsLessThanSArrayItems< ColorIGES const* > ( ColorIGES const* const& obj1, ColorIGES const* const& obj2 ); -#endif // C3D_WINDOWS - - -//------------------------------------------------------------------------------ -// -// --- -struct CONV_CLASS ColourIGES : public BasicIGES { - double red, green, blue; - - ColourIGES( double, double, double ); -}; - - -//------------------------------------------------------------------------------- -// точка -// --- -struct CONV_CLASS PointIGES : public BasicIGES { - double x, y, z; - - PointIGES( double _x, double _y, double _z ); - PointIGES(); - - virtual bool operator == ( const BasicIGES & o ) const; - virtual bool operator < ( const BasicIGES & o ) const; -}; - - -//------------------------------------------------------------------------------- -// -// --- -typedef PointIGES * PPOINTIGES; -typedef const PointIGES * PCPOINTIGES; - - -//------------------------------------------------------------------------------- -// -// --- -#ifdef _MSC_VER // C3D_WINDOWS -inline bool IsLessThanSArrayItems ( const PCPOINTIGES &obj1, const PCPOINTIGES &obj2 ) { return obj1 < obj2; } -#else // C3D_WINDOWS -template<> bool IsLessThanSArrayItems< PointIGES const* > ( PointIGES const* const& obj1, PointIGES const* const& obj2 ); -#endif // C3D_WINDOWS - - -//------------------------------------------------------------------------------- -// базовый curve примитив -// --- -struct CONV_CLASS BasicCurveIGES : public BasicIGES { - LTypeNameIGES lt; // стиль - BasicCurveIGES( int32 _numType, int32 _form = 0 ) : BasicIGES( _numType, _form ), lt(){} -}; - - -//------------------------------------------------------------------------------- -// структура отрезка -// --- -struct CONV_CLASS LineSegIGES : public BasicCurveIGES { - double x1, y1, z1; // координаты 1 точки - double x2, y2, z2; // координаты 2 точки - - LineSegIGES(); - - LineSegIGES( double x1, double y1, double z1, // 3D - double x2, double y2, double z2 ); - LineSegIGES( double x1, double y1, // 2D - double x2, double y2 ); - - virtual bool operator == ( const BasicIGES & o ) const; - virtual bool operator < ( const BasicIGES & o ) const; -}; - - -//------------------------------------------------------------------------------- -// структура дуги и окружности -// --- -struct CONV_CLASS ArcOrCircleIGES : public BasicCurveIGES { - double dir; // напрвление - double xc, yc; // координаты центра - double x1, y1; // координаты 1 точки - double x2, y2; // координаты 2 точки - - ArcOrCircleIGES(); - - virtual bool operator == ( const BasicIGES & o ) const; - virtual bool operator < ( const BasicIGES & o ) const; -}; - - -//------------------------------------------------------------------------------- -// 104 IGS_CONIC_ARC коническая кривая ( эллипс, гипербола, парабола ) -// --- -struct CONV_CLASS EllipsIGES : public BasicCurveIGES { - double A, B, C, D, E, F, X1, Y1, X2, Y2, ZT; - - EllipsIGES(); - - virtual bool operator == ( const BasicIGES & o ) const; - virtual bool operator < ( const BasicIGES & o ) const; -}; - - -//------------------------------------------------------------------------------- -// -// --- -typedef EllipsIGES * PELLIPSIGES; -typedef const EllipsIGES * PCELLIPSIGES; - - -//------------------------------------------------------------------------------- -// -// --- -#ifdef _MSC_VER // C3D_WINDOWS -inline bool IsLessThanSArrayItems ( const PCELLIPSIGES &obj1, const PCELLIPSIGES &obj2 ) { return obj1 < obj2; } -#else // C3D_WINDOWS -template<> bool IsLessThanSArrayItems< EllipsIGES const* > ( EllipsIGES const* const& obj1, EllipsIGES const* const& obj2 ); -#endif // C3D_WINDOWS - - -//------------------------------------------------------------------------------- -// структура элемента текста -// --- -struct CONV_CLASS TextItemIGES { - double width; // ширина - double height; // высота - int32 fontCode; // код шрифта - double angleChar; // угол наклона букв - double angleStr; // угол наклона строки - int32 flagMirror;// флаг зеркальности - int32 horizont; // 0 - отсчет от горизонали 1 - от вертикали - double x, y, z; // координаты - std::string text; // текст - - TextItemIGES(); - - bool operator == ( const TextItemIGES & o ) const; - bool operator < ( const TextItemIGES & o ) const; -}; - - -//------------------------------------------------------------------------------- -// структура текста -// --- -struct CONV_CLASS TextIGES : public BasicIGES { - PArray arr; - - TextIGES(); - - virtual bool operator == ( const BasicIGES & o ) const; - virtual bool operator < ( const BasicIGES & o ) const; -}; - - -//------------------------------------------------------------------------------- -// -// --- -typedef TextIGES * PTEXTIGES; -typedef const TextIGES * PCTEXTIGES; - - -//------------------------------------------------------------------------------- -// -// --- -#ifdef _MSC_VER // C3D_WINDOWS -inline bool IsLessThanSArrayItems ( const PCTEXTIGES &obj1, const PCTEXTIGES &obj2 ) { return obj1 < obj2; } -#else // C3D_WINDOWS -template<> bool IsLessThanSArrayItems< TextIGES const* > ( TextIGES const* const& obj1, TextIGES const* const& obj2 ); -#endif // C3D_WINDOWS - - -//------------------------------------------------------------------------------- -// 123 IGS_DIRECTION - вектор -// --- -struct CONV_CLASS DirectionIGES: public BasicIGES { - double x, y, z; - - DirectionIGES( double _x, double _y, double _z ); - - virtual bool operator == ( const BasicIGES & o ) const; - virtual bool operator < ( const BasicIGES & o ) const; -}; - - -//------------------------------------------------------------------------------- -// -// --- -typedef DirectionIGES * PDIRECTIONIGES; -typedef const DirectionIGES * PCDIRECTIONIGES; - - -//------------------------------------------------------------------------------- -// -// --- -#ifdef _MSC_VER // C3D_WINDOWS -inline bool IsLessThanSArrayItems ( const PCDIRECTIONIGES &obj1, const PCDIRECTIONIGES &obj2 ) { return obj1 < obj2; } -#else // C3D_WINDOWS -template<> bool IsLessThanSArrayItems< DirectionIGES const* > ( DirectionIGES const* const& obj1, DirectionIGES const* const& obj2 ); -#endif // C3D_WINDOWS - - -//------------------------------------------------------------------------------- -// 124 матрица трансформации -// --- -struct CONV_CLASS MatrixIGES : public BasicIGES { - SArray matr; - MatrixIGES(); - virtual bool operator == ( const BasicIGES & o ) const; - virtual bool operator < ( const BasicIGES & o ) const; -}; - - -//------------------------------------------------------------------------------- -// 126 IGS_RATIONAL_B_SPLINE_CURVE -// --- -struct CONV_CLASS RationalBSplineCurveIGES : public BasicCurveIGES { - ptrdiff_t upperIndexSum; // верхний индекс суммы - ptrdiff_t degree; // степень базовой функции - int32 planar; // 0 - пространственная 1 - плоская - int32 closed; // 1 - замкнутая 0 - незамкнутая - int32 polynominal; // 1 - Polynominal - // 0 - Rational - int32 periodic; // 1 - Периодическая - // 0 - Непериодическая -// Значения последовательностей узлов - SArray sequence; // значения от -degree до 1 + upperIndexSum - - // массив весовых коэффициентов размером 1 + upperIndexSum - SArray weight; - // массив координат контрольных точек размером 1 + upperIndexSum - SArray x; - SArray y; - SArray z; - double u0, u1; // начальное и конечное значение параметрических координат - double xNorm, yNorm, zNorm; - - RationalBSplineCurveIGES(); - - virtual bool operator == ( const BasicIGES & o ) const; - virtual bool operator < ( const BasicIGES & o ) const; -}; - - -//------------------------------------------------------------------------------- -// стрелка( или линия выноски ) IGS_LEADER -// --- -struct CONV_CLASS LeaderIGES : public BasicCurveIGES { - double arrowLen; // длина стрелки IGS_LENGTH_ARROW - double arrowWidth;// ширина стрелки IGS_WIDTH_ARROW - double zDepth; // глубина по z - // координаты стрелки - double xHead, yHead; - // координаты конца линии - SArray x; - SArray y; - int formArrow; // 0,4 никакой 1,2,3,11 обычная стрелка 9,10 засечка 5,6,7,8 точка - - LeaderIGES(); - - virtual bool operator == ( const BasicIGES & o ) const; - virtual bool operator < ( const BasicIGES & o ) const; -}; - - -//------------------------------------------------------------------------------- -// -// --- -typedef LeaderIGES * PLEADERIGES; -typedef const LeaderIGES * PCLEADERIGES; - - -//------------------------------------------------------------------------------- -// -// --- -#ifdef _MSC_VER // C3D_WINDOWS -inline bool IsLessThanSArrayItems ( const PCLEADERIGES &obj1, const PCLEADERIGES &obj2 ) { return obj1 < obj2; } -#else // C3D_WINDOWS -template<> bool IsLessThanSArrayItems< LeaderIGES const* > ( LeaderIGES const* const& obj1, LeaderIGES const* const& obj2 ); -#endif // C3D_WINDOWS - - -//------------------------------------------------------------------------------- -// вспомогательная линия -// --- -struct CONV_CLASS WitnessLineIGES : public BasicCurveIGES { - int32 interpretFlag; - double z; // displacement - // координаты конца линии N >= 3 и нечетное - SArray x; - SArray y; - - WitnessLineIGES(); - virtual bool operator == ( const BasicIGES & o ) const; - virtual bool operator < ( const BasicIGES & o ) const; -}; - - -//------------------------------------------------------------------------------- -// -// --- -typedef WitnessLineIGES * PWITNESSLINEIGES; -typedef const WitnessLineIGES * PCWITNESSLINEIGES; - - -//------------------------------------------------------------------------------- -// -// --- -#ifdef _MSC_VER // C3D_WINDOWS -inline bool IsLessThanSArrayItems ( const PCWITNESSLINEIGES &obj1, const PCWITNESSLINEIGES &obj2 ) { return obj1 < obj2; } -#else // C3D_WINDOWS -template<> bool IsLessThanSArrayItems< WitnessLineIGES const* > ( WitnessLineIGES const* const& obj1, WitnessLineIGES const* const& obj2 ); -#endif // C3D_WINDOWS - - -//------------------------------------------------------------------------------- -// структура линейного размера -// --- -struct CONV_CLASS LinDimensionIGES : public BasicIGES { - int32 text; // указатель на текст - int32 firstArrow; // первая стрелка( половина размерной линии ) - int32 secondArrow; // вторая стрелка( половина размерной линии ) - int32 firstLine; // первая выносная линия - int32 secondLine; // вторая выносная линия - LinDimensionIGES(); - - virtual bool operator == ( const BasicIGES & o ) const; - virtual bool operator < ( const BasicIGES & o ) const; -}; - - -//------------------------------------------------------------------------------- -// -// --- -typedef LinDimensionIGES * PLINDIMENSIONIGES; -typedef const LinDimensionIGES * PCLINDIMENSIONIGES; - - -//------------------------------------------------------------------------------- -// -// --- -#ifdef _MSC_VER // C3D_WINDOWS -inline bool IsLessThanSArrayItems ( const PCLINDIMENSIONIGES &obj1, const PCLINDIMENSIONIGES &obj2 ) { return obj1 < obj2; } -#else // C3D_WINDOWS -template<> bool IsLessThanSArrayItems< LinDimensionIGES const* > ( LinDimensionIGES const* const& obj1, LinDimensionIGES const* const& obj2 ); -#endif // C3D_WINDOWS - - -//------------------------------------------------------------------------------- -// структура диаметрального размера -// --- -struct CONV_CLASS DimDimensionIGES : public BasicIGES { - int32 text; // указатель на текст - int32 firstArrow; // первая стрелка( половина размерной линии ) - int32 secondArrow; // вторая стрелка( половина размерной линии ) - double x, y; - DimDimensionIGES(); - - virtual bool operator == ( const BasicIGES & o ) const; - virtual bool operator < ( const BasicIGES & o ) const; -}; - - -//------------------------------------------------------------------------------- -// -// --- -typedef DimDimensionIGES * PDIMDIMENSIONIGES; -typedef const DimDimensionIGES * PCDIMDIMENSIONIGES; - - -//------------------------------------------------------------------------------- -// -// --- -#ifdef _MSC_VER // C3D_WINDOWS -inline bool IsLessThanSArrayItems ( const PCDIMDIMENSIONIGES &obj1, const PCDIMDIMENSIONIGES &obj2 ) { return obj1 < obj2; } -#else // C3D_WINDOWS -template<> bool IsLessThanSArrayItems< DimDimensionIGES const* > ( DimDimensionIGES const* const& obj1, DimDimensionIGES const* const& obj2 ); -#endif // C3D_WINDOWS - - -//------------------------------------------------------------------------------- -// структура диаметрального размера -// --- -struct CONV_CLASS RadDimensionIGES : public BasicIGES { - int32 text; // указатель на текст - int32 arrow; // первая стрелка( половина размерной линии ) - double x, y; - RadDimensionIGES(); - - virtual bool operator == ( const BasicIGES & o ) const; - virtual bool operator < ( const BasicIGES & o ) const; -}; - - -//------------------------------------------------------------------------------- -// -// --- -typedef RadDimensionIGES * PRADDIMENSIONIGES; -typedef const RadDimensionIGES * PCRADDIMENSIONIGES; - - -//------------------------------------------------------------------------------- -// -// --- -#ifdef _MSC_VER // C3D_WINDOWS -inline bool IsLessThanSArrayItems ( const PCRADDIMENSIONIGES &obj1, const PCRADDIMENSIONIGES &obj2 ) { return obj1 < obj2; } -#else // C3D_WINDOWS -template<> bool IsLessThanSArrayItems< RadDimensionIGES const* > ( RadDimensionIGES const* const& obj1, RadDimensionIGES const* const& obj2 ); -#endif // C3D_WINDOWS - - -//------------------------------------------------------------------------------- -// структура углового размера -// --- -struct CONV_CLASS AngDimensionIGES : public BasicIGES { - int32 text; // указатель на текст - int32 firstLine; // первая выносная линия - int32 secondLine; // вторая выносная линия - double x, y, r; - int32 firstArrow; // первая стрелка( половина размерной линии ) - int32 secondArrow; // вторая стрелка( половина размерной линии ) - AngDimensionIGES(); - - virtual bool operator == ( const BasicIGES & o ) const; - virtual bool operator < ( const BasicIGES & o ) const; -}; - - -//------------------------------------------------------------------------------- -// -// --- -typedef AngDimensionIGES * PANGDIMENSIONIGES; -typedef const AngDimensionIGES * PCANGDIMENSIONIGES; - - -//------------------------------------------------------------------------------- -// -// --- -#ifdef _MSC_VER // C3D_WINDOWS -inline bool IsLessThanSArrayItems ( const PCANGDIMENSIONIGES &obj1, const PCANGDIMENSIONIGES &obj2 ) { return obj1 < obj2; } -#else // C3D_WINDOWS -template<> bool IsLessThanSArrayItems< AngDimensionIGES const* > ( AngDimensionIGES const* const& obj1, AngDimensionIGES const* const& obj2 ); -#endif // C3D_WINDOWS - - -#endif // __IGES_STRUCTURES_H +//////////////////////////////////////////////////////////////////////////////// +// +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __IGES_STRUCTURES_H +#define __IGES_STRUCTURES_H + + +#include +#include +#include +#include "iges_basic.h" + + +//------------------------------------------------------------------------------- +// функции сравнения двух наследников от BasicIGES, которые не содержат +// динамических данных +// --- +template +inline bool Eq( const Type * t, const BasicIGES & o ) { + if ( !t->Eq( o ) ) + return false; + + const Type * r = dynamic_cast(&o); + if ( !r ) + return false; + + return ::IsEqualSArrayItems( t, r ); +} + + +//------------------------------------------------------------------------------- +// функции сравнения двух наследников от BasicIGES, которые не содержат +// динамических данных +// --- +template +inline bool Less( const Type * t, const BasicIGES & o ) { + if ( !t->Eq( o ) ) + return t->Less( o ); + + const Type * r = dynamic_cast(&o); + if ( !r ) + return false; + + return ::IsLessThanSArrayItems( t, r ); +} + + +//------------------------------------------------------------------------------- +// структура для сохранения типов линий +// --- +struct CONV_CLASS LTypeNameIGES { + uint16 number; // номер стиля в чертеже C3D + ptrdiff_t colorOrStr; // цвет или номер строки цвета в файле IGES + ptrdiff_t width; // толщина линии на бумаге * 1000 + ptrdiff_t numOrStr; // номер IGES-типа линии или номер строки типа в файле IGES + + LTypeNameIGES() : number(0), colorOrStr( 0 ), width(1), numOrStr(0){} + + bool operator == (const LTypeNameIGES & o) const { return number == o.number; } + bool operator < (const LTypeNameIGES & o) const { return number < o.number; } + + void Assign( const LTypeNameIGES & o ); +}; + + +//------------------------------------------------------------------------------- +// структура цвета и места его хранения +// --- +struct CONV_CLASS ColorIGES : public BasicIGES { + int32 trueColor; + + ColorIGES( int32 _color = 0 ); + virtual bool operator == ( const BasicIGES & o ) const; + virtual bool operator < ( const BasicIGES & o ) const; +}; + + +//------------------------------------------------------------------------------- +// +// --- +typedef ColorIGES * PCOLORIGES; +typedef const ColorIGES * PCCOLORIGES; + + +//------------------------------------------------------------------------------- +// +// --- +#ifdef _MSC_VER // C3D_WINDOWS +inline bool IsLessThanSArrayItems ( const PCCOLORIGES &obj1, const PCCOLORIGES &obj2 ) { return obj1 < obj2; } +#else // C3D_WINDOWS +template<> bool IsLessThanSArrayItems< ColorIGES const* > ( ColorIGES const* const& obj1, ColorIGES const* const& obj2 ); +#endif // C3D_WINDOWS + + +//------------------------------------------------------------------------------ +// +// --- +struct CONV_CLASS ColourIGES : public BasicIGES { + double red, green, blue; + + ColourIGES( double, double, double ); +}; + + +//------------------------------------------------------------------------------- +// точка +// --- +struct CONV_CLASS PointIGES : public BasicIGES { + double x, y, z; + + PointIGES( double _x, double _y, double _z ); + PointIGES(); + + virtual bool operator == ( const BasicIGES & o ) const; + virtual bool operator < ( const BasicIGES & o ) const; +}; + + +//------------------------------------------------------------------------------- +// +// --- +typedef PointIGES * PPOINTIGES; +typedef const PointIGES * PCPOINTIGES; + + +//------------------------------------------------------------------------------- +// +// --- +#ifdef _MSC_VER // C3D_WINDOWS +inline bool IsLessThanSArrayItems ( const PCPOINTIGES &obj1, const PCPOINTIGES &obj2 ) { return obj1 < obj2; } +#else // C3D_WINDOWS +template<> bool IsLessThanSArrayItems< PointIGES const* > ( PointIGES const* const& obj1, PointIGES const* const& obj2 ); +#endif // C3D_WINDOWS + + +//------------------------------------------------------------------------------- +// базовый curve примитив +// --- +struct CONV_CLASS BasicCurveIGES : public BasicIGES { + LTypeNameIGES lt; // стиль + BasicCurveIGES( int32 _numType, int32 _form = 0 ) : BasicIGES( _numType, _form ), lt(){} +}; + + +//------------------------------------------------------------------------------- +// структура отрезка +// --- +struct CONV_CLASS LineSegIGES : public BasicCurveIGES { + double x1, y1, z1; // координаты 1 точки + double x2, y2, z2; // координаты 2 точки + + LineSegIGES(); + + LineSegIGES( double x1, double y1, double z1, // 3D + double x2, double y2, double z2 ); + LineSegIGES( double x1, double y1, // 2D + double x2, double y2 ); + + virtual bool operator == ( const BasicIGES & o ) const; + virtual bool operator < ( const BasicIGES & o ) const; +}; + + +//------------------------------------------------------------------------------- +// структура дуги и окружности +// --- +struct CONV_CLASS ArcOrCircleIGES : public BasicCurveIGES { + double dir; // напрвление + double xc, yc; // координаты центра + double x1, y1; // координаты 1 точки + double x2, y2; // координаты 2 точки + + ArcOrCircleIGES(); + + virtual bool operator == ( const BasicIGES & o ) const; + virtual bool operator < ( const BasicIGES & o ) const; +}; + + +//------------------------------------------------------------------------------- +// 104 IGS_CONIC_ARC коническая кривая ( эллипс, гипербола, парабола ) +// --- +struct CONV_CLASS EllipsIGES : public BasicCurveIGES { + double A, B, C, D, E, F, X1, Y1, X2, Y2, ZT; + + EllipsIGES(); + + virtual bool operator == ( const BasicIGES & o ) const; + virtual bool operator < ( const BasicIGES & o ) const; +}; + + +//------------------------------------------------------------------------------- +// +// --- +typedef EllipsIGES * PELLIPSIGES; +typedef const EllipsIGES * PCELLIPSIGES; + + +//------------------------------------------------------------------------------- +// +// --- +#ifdef _MSC_VER // C3D_WINDOWS +inline bool IsLessThanSArrayItems ( const PCELLIPSIGES &obj1, const PCELLIPSIGES &obj2 ) { return obj1 < obj2; } +#else // C3D_WINDOWS +template<> bool IsLessThanSArrayItems< EllipsIGES const* > ( EllipsIGES const* const& obj1, EllipsIGES const* const& obj2 ); +#endif // C3D_WINDOWS + + +//------------------------------------------------------------------------------- +// структура элемента текста +// --- +struct CONV_CLASS TextItemIGES { + double width; // ширина + double height; // высота + int32 fontCode; // код шрифта + double angleChar; // угол наклона букв + double angleStr; // угол наклона строки + int32 flagMirror;// флаг зеркальности + int32 horizont; // 0 - отсчет от горизонали 1 - от вертикали + double x, y, z; // координаты + std::string text; // текст + + TextItemIGES(); + + bool operator == ( const TextItemIGES & o ) const; + bool operator < ( const TextItemIGES & o ) const; +}; + + +//------------------------------------------------------------------------------- +// структура текста +// --- +struct CONV_CLASS TextIGES : public BasicIGES { + PArray arr; + + TextIGES(); + + virtual bool operator == ( const BasicIGES & o ) const; + virtual bool operator < ( const BasicIGES & o ) const; +}; + + +//------------------------------------------------------------------------------- +// +// --- +typedef TextIGES * PTEXTIGES; +typedef const TextIGES * PCTEXTIGES; + + +//------------------------------------------------------------------------------- +// +// --- +#ifdef _MSC_VER // C3D_WINDOWS +inline bool IsLessThanSArrayItems ( const PCTEXTIGES &obj1, const PCTEXTIGES &obj2 ) { return obj1 < obj2; } +#else // C3D_WINDOWS +template<> bool IsLessThanSArrayItems< TextIGES const* > ( TextIGES const* const& obj1, TextIGES const* const& obj2 ); +#endif // C3D_WINDOWS + + +//------------------------------------------------------------------------------- +// 123 IGS_DIRECTION - вектор +// --- +struct CONV_CLASS DirectionIGES: public BasicIGES { + double x, y, z; + + DirectionIGES( double _x, double _y, double _z ); + + virtual bool operator == ( const BasicIGES & o ) const; + virtual bool operator < ( const BasicIGES & o ) const; +}; + + +//------------------------------------------------------------------------------- +// +// --- +typedef DirectionIGES * PDIRECTIONIGES; +typedef const DirectionIGES * PCDIRECTIONIGES; + + +//------------------------------------------------------------------------------- +// +// --- +#ifdef _MSC_VER // C3D_WINDOWS +inline bool IsLessThanSArrayItems ( const PCDIRECTIONIGES &obj1, const PCDIRECTIONIGES &obj2 ) { return obj1 < obj2; } +#else // C3D_WINDOWS +template<> bool IsLessThanSArrayItems< DirectionIGES const* > ( DirectionIGES const* const& obj1, DirectionIGES const* const& obj2 ); +#endif // C3D_WINDOWS + + +//------------------------------------------------------------------------------- +// 124 матрица трансформации +// --- +struct CONV_CLASS MatrixIGES : public BasicIGES { + SArray matr; + MatrixIGES(); + virtual bool operator == ( const BasicIGES & o ) const; + virtual bool operator < ( const BasicIGES & o ) const; +}; + + +//------------------------------------------------------------------------------- +// 126 IGS_RATIONAL_B_SPLINE_CURVE +// --- +struct CONV_CLASS RationalBSplineCurveIGES : public BasicCurveIGES { + ptrdiff_t upperIndexSum; // верхний индекс суммы + ptrdiff_t degree; // степень базовой функции + int32 planar; // 0 - пространственная 1 - плоская + int32 closed; // 1 - замкнутая 0 - незамкнутая + int32 polynominal; // 1 - Polynominal + // 0 - Rational + int32 periodic; // 1 - Периодическая + // 0 - Непериодическая +// Значения последовательностей узлов + SArray sequence; // значения от -degree до 1 + upperIndexSum + + // массив весовых коэффициентов размером 1 + upperIndexSum + SArray weight; + // массив координат контрольных точек размером 1 + upperIndexSum + SArray x; + SArray y; + SArray z; + double u0, u1; // начальное и конечное значение параметрических координат + double xNorm, yNorm, zNorm; + + RationalBSplineCurveIGES(); + + virtual bool operator == ( const BasicIGES & o ) const; + virtual bool operator < ( const BasicIGES & o ) const; +}; + + +//------------------------------------------------------------------------------- +// стрелка( или линия выноски ) IGS_LEADER +// --- +struct CONV_CLASS LeaderIGES : public BasicCurveIGES { + double arrowLen; // длина стрелки IGS_LENGTH_ARROW + double arrowWidth;// ширина стрелки IGS_WIDTH_ARROW + double zDepth; // глубина по z + // координаты стрелки + double xHead, yHead; + // координаты конца линии + SArray x; + SArray y; + int formArrow; // 0,4 никакой 1,2,3,11 обычная стрелка 9,10 засечка 5,6,7,8 точка + + LeaderIGES(); + + virtual bool operator == ( const BasicIGES & o ) const; + virtual bool operator < ( const BasicIGES & o ) const; +}; + + +//------------------------------------------------------------------------------- +// +// --- +typedef LeaderIGES * PLEADERIGES; +typedef const LeaderIGES * PCLEADERIGES; + + +//------------------------------------------------------------------------------- +// +// --- +#ifdef _MSC_VER // C3D_WINDOWS +inline bool IsLessThanSArrayItems ( const PCLEADERIGES &obj1, const PCLEADERIGES &obj2 ) { return obj1 < obj2; } +#else // C3D_WINDOWS +template<> bool IsLessThanSArrayItems< LeaderIGES const* > ( LeaderIGES const* const& obj1, LeaderIGES const* const& obj2 ); +#endif // C3D_WINDOWS + + +//------------------------------------------------------------------------------- +// вспомогательная линия +// --- +struct CONV_CLASS WitnessLineIGES : public BasicCurveIGES { + int32 interpretFlag; + double z; // displacement + // координаты конца линии N >= 3 и нечетное + SArray x; + SArray y; + + WitnessLineIGES(); + virtual bool operator == ( const BasicIGES & o ) const; + virtual bool operator < ( const BasicIGES & o ) const; +}; + + +//------------------------------------------------------------------------------- +// +// --- +typedef WitnessLineIGES * PWITNESSLINEIGES; +typedef const WitnessLineIGES * PCWITNESSLINEIGES; + + +//------------------------------------------------------------------------------- +// +// --- +#ifdef _MSC_VER // C3D_WINDOWS +inline bool IsLessThanSArrayItems ( const PCWITNESSLINEIGES &obj1, const PCWITNESSLINEIGES &obj2 ) { return obj1 < obj2; } +#else // C3D_WINDOWS +template<> bool IsLessThanSArrayItems< WitnessLineIGES const* > ( WitnessLineIGES const* const& obj1, WitnessLineIGES const* const& obj2 ); +#endif // C3D_WINDOWS + + +//------------------------------------------------------------------------------- +// структура линейного размера +// --- +struct CONV_CLASS LinDimensionIGES : public BasicIGES { + int32 text; // указатель на текст + int32 firstArrow; // первая стрелка( половина размерной линии ) + int32 secondArrow; // вторая стрелка( половина размерной линии ) + int32 firstLine; // первая выносная линия + int32 secondLine; // вторая выносная линия + LinDimensionIGES(); + + virtual bool operator == ( const BasicIGES & o ) const; + virtual bool operator < ( const BasicIGES & o ) const; +}; + + +//------------------------------------------------------------------------------- +// +// --- +typedef LinDimensionIGES * PLINDIMENSIONIGES; +typedef const LinDimensionIGES * PCLINDIMENSIONIGES; + + +//------------------------------------------------------------------------------- +// +// --- +#ifdef _MSC_VER // C3D_WINDOWS +inline bool IsLessThanSArrayItems ( const PCLINDIMENSIONIGES &obj1, const PCLINDIMENSIONIGES &obj2 ) { return obj1 < obj2; } +#else // C3D_WINDOWS +template<> bool IsLessThanSArrayItems< LinDimensionIGES const* > ( LinDimensionIGES const* const& obj1, LinDimensionIGES const* const& obj2 ); +#endif // C3D_WINDOWS + + +//------------------------------------------------------------------------------- +// структура диаметрального размера +// --- +struct CONV_CLASS DimDimensionIGES : public BasicIGES { + int32 text; // указатель на текст + int32 firstArrow; // первая стрелка( половина размерной линии ) + int32 secondArrow; // вторая стрелка( половина размерной линии ) + double x, y; + DimDimensionIGES(); + + virtual bool operator == ( const BasicIGES & o ) const; + virtual bool operator < ( const BasicIGES & o ) const; +}; + + +//------------------------------------------------------------------------------- +// +// --- +typedef DimDimensionIGES * PDIMDIMENSIONIGES; +typedef const DimDimensionIGES * PCDIMDIMENSIONIGES; + + +//------------------------------------------------------------------------------- +// +// --- +#ifdef _MSC_VER // C3D_WINDOWS +inline bool IsLessThanSArrayItems ( const PCDIMDIMENSIONIGES &obj1, const PCDIMDIMENSIONIGES &obj2 ) { return obj1 < obj2; } +#else // C3D_WINDOWS +template<> bool IsLessThanSArrayItems< DimDimensionIGES const* > ( DimDimensionIGES const* const& obj1, DimDimensionIGES const* const& obj2 ); +#endif // C3D_WINDOWS + + +//------------------------------------------------------------------------------- +// структура диаметрального размера +// --- +struct CONV_CLASS RadDimensionIGES : public BasicIGES { + int32 text; // указатель на текст + int32 arrow; // первая стрелка( половина размерной линии ) + double x, y; + RadDimensionIGES(); + + virtual bool operator == ( const BasicIGES & o ) const; + virtual bool operator < ( const BasicIGES & o ) const; +}; + + +//------------------------------------------------------------------------------- +// +// --- +typedef RadDimensionIGES * PRADDIMENSIONIGES; +typedef const RadDimensionIGES * PCRADDIMENSIONIGES; + + +//------------------------------------------------------------------------------- +// +// --- +#ifdef _MSC_VER // C3D_WINDOWS +inline bool IsLessThanSArrayItems ( const PCRADDIMENSIONIGES &obj1, const PCRADDIMENSIONIGES &obj2 ) { return obj1 < obj2; } +#else // C3D_WINDOWS +template<> bool IsLessThanSArrayItems< RadDimensionIGES const* > ( RadDimensionIGES const* const& obj1, RadDimensionIGES const* const& obj2 ); +#endif // C3D_WINDOWS + + +//------------------------------------------------------------------------------- +// структура углового размера +// --- +struct CONV_CLASS AngDimensionIGES : public BasicIGES { + int32 text; // указатель на текст + int32 firstLine; // первая выносная линия + int32 secondLine; // вторая выносная линия + double x, y, r; + int32 firstArrow; // первая стрелка( половина размерной линии ) + int32 secondArrow; // вторая стрелка( половина размерной линии ) + AngDimensionIGES(); + + virtual bool operator == ( const BasicIGES & o ) const; + virtual bool operator < ( const BasicIGES & o ) const; +}; + + +//------------------------------------------------------------------------------- +// +// --- +typedef AngDimensionIGES * PANGDIMENSIONIGES; +typedef const AngDimensionIGES * PCANGDIMENSIONIGES; + + +//------------------------------------------------------------------------------- +// +// --- +#ifdef _MSC_VER // C3D_WINDOWS +inline bool IsLessThanSArrayItems ( const PCANGDIMENSIONIGES &obj1, const PCANGDIMENSIONIGES &obj2 ) { return obj1 < obj2; } +#else // C3D_WINDOWS +template<> bool IsLessThanSArrayItems< AngDimensionIGES const* > ( AngDimensionIGES const* const& obj1, AngDimensionIGES const* const& obj2 ); +#endif // C3D_WINDOWS + + +#endif // __IGES_STRUCTURES_H diff --git a/C3d/Include/iges_write.h b/C3d/Include/iges_write.h index 5c4b9ad..f823d2e 100644 --- a/C3d/Include/iges_write.h +++ b/C3d/Include/iges_write.h @@ -1,215 +1,216 @@ -//////////////////////////////////////////////////////////////////////////////// -// -//////////////////////////////////////////////////////////////////////////////// - -#ifndef __IGES_WRITE_H -#define __IGES_WRITE_H - - -#include "iges_basic.h" -#include -#include - - -class ostream; -struct CONV_CLASS ColourIGES; -struct IGESData; -struct DirEntryParameter; // запись в DE -class CONV_CLASS BasicIGES; -struct CONV_CLASS BasicCurveIGES; -struct CONV_CLASS LTypeNameIGES; // структура для сохранения типов линий -struct CONV_CLASS TextItemIGES; // структура элемента текста - - -//------------------------------------------------------------------------------- -// -// --- -class CONV_CLASS IWIGES { -// тип функции - записи какого-то элемента - создан для передачи в параметрах -public: - typedef ptrdiff_t (IWIGES::*WriteEntityFunc)( BasicIGES & ); -private: - IGESData * data; - -public : - IWIGES( std::ostream & _os ); - ~IWIGES(); - - // добавить к строке преобразованый к строке и дополненый до 8 символов пробелами int32 - size_t AddLongToString( int32 l, char ch1 = 0 ); -#if defined(PLATFORM_64) - size_t AddLongToString( ptrdiff_t l, char ch1 = 0 ); -#endif // PLATFORM_64 - - // Преобразовать строковую константу к строковой константе IGES - std::string & AddString( std::string & s, std::string & d, std::string & delimiter ); - // Преобразовать double к строковой константе IGES - std::string & AddDouble( double d, std::string & s, std::string & delimiter ); - // Преобразовать int32 к строковой константе IGES - std::string & AddLong( int32 l, std::string & s, std::string & delimiter ); -#if defined(PLATFORM_64) - std::string & AddLong( ptrdiff_t l, std::string & s, std::string & delimiter ); -#endif // PLATFORM_64 - - // добавить к строке выовода другую строку, если длина превышает критическую - // вывести строку, обнулить ее и добавить к ней остаток. Если стоит флаг вывода - - // вывести остаток и обнулить строку - // применяется для глобальной секции и секции комментария - bool AddValToStrAndOut( std::string & outS, // добавляемая строка - ptrdiff_t & numStr, // номер строки в секции - char section, // символ секции - bool out = false );// флаг вывода - - - // добавить к строке выовода секции PD другую строку, если длина превышает критическую - // вывести строку, обнулить ее и добавить к ней остаток. Если стоит флаг вывода - - // вывести остаток и обнулить строку - ptrdiff_t AddValToStrAndOutPD( std::string & outS, - bool divide, // строку можно разделять, числа - нежелательно - bool out ); - // вывести в секцию PD int32 после него запятая - ptrdiff_t WriteLong( int32 v ); -#if defined(PLATFORM_64) - ptrdiff_t WriteLong( ptrdiff_t v ); -#endif // PLATFORM_64 - // вывести в секцию PD double после него запятая - ptrdiff_t WriteDouble( double v ); - // вывести в секцию PD х, Y, и z. после каждого запятая - ptrdiff_t WriteXY0ZPD( double x, double y, double z = 0 ); - // вывести в секцию PD х, y. после каждого запятая - ptrdiff_t WriteXYPD( double x, double y ); - // вывести в секцию PD дополнительные нулевые указатели, в конце - ";" - ptrdiff_t WriteAddNULLPointerPD(); - // Ищет такую структуру в массиве записанных в IGES стркутур. Если находит - // - уничтожает присланное и возвращает номер найденного, если нет - возвращает - // 0, в случае ошибки - возвращает -1 - ptrdiff_t FindOrAddBasicIGES( BasicIGES * b ); - // запись примитива. в параметре - процедура записи этого примитива и его структура. - // перед записью производится проверка - нет ли уже такой и если есть - присланная - // структура уничтожается, если нет - запускается процедура записи, - // возвращается номер строки DE - ptrdiff_t WriteEntity( WriteEntityFunc func, BasicIGES * ); - // подготовка к записи - применять в паре с функцией FinishRecord - только - // для записей, где не нужен стиль линии, уровень и номер формы - // возвращает запомненый указатель- начало записи в PD - ptrdiff_t PrepareRecord( BasicIGES & bi ); - // завершение записи - применять в паре с функцией PrepareRecord - только - // для записей, где не нужен стиль линии - // возвращает номер строки- начало записи в DE - ptrdiff_t FinishRecord( BasicIGES & bi ); - // завершение записи - применять в паре с функцией PrepareRecord - только - // для записей, где НУЖЕН стиль линии - // возвращает номер строки- начало записи в DE - ptrdiff_t FinishCurveRecord( BasicCurveIGES & bi ); - void ClearBuffer(); - - // заполнить структуру глобальной секции и секции комментария - ptrdiff_t Global( const c3d::path_string & fileName, - const double & gabarit, - const std::string & documentName, // Название документа - const std::string & author, - const std::string & organization, - const std::string & productComments, - double lenUnits ); - // Запись завершения в файл IGES - void Terminate(); - - // инициализировать DE - DirEntryParameter & InitDirEntry( ptrdiff_t type, - ptrdiff_t numPD, - ptrdiff_t level, - ptrdiff_t numForm, - ptrdiff_t color, - ptrdiff_t matrix, - unsigned short vectorDE ); - // инициализировать геом. DE - DirEntryParameter & InitCurveDirEntry( ptrdiff_t type, - ptrdiff_t numPD, - ptrdiff_t level, - LTypeNameIGES & lt, - ptrdiff_t numForm, - ptrdiff_t matrix, - unsigned short vectorDE ); - // сформировать запись 2х строк DirEntry - bool DirEntry( DirEntryParameter & de ); - - // записать цвет - ptrdiff_t Color( BasicIGES * color ); - ptrdiff_t Colour( ColourIGES & ); - - // вернуть структуру типа линии из массива - ptrdiff_t GetTypeLine ( ptrdiff_t num, LTypeNameIGES & lt ); - // найти номер структуры типа линии в массиве - ptrdiff_t FindTypeLine( LTypeNameIGES & lt ); - // добавить структуру типа линии в массив - LTypeNameIGES * AddTypeLine ( LTypeNameIGES & lt ); - - // вернуть буферную строку - std::string & BuffStr (); - // разделитель - std::string & Delimiter(); - // разделитель в записях - std::string & RecordDelimiter(); - - // число строк в записи - ptrdiff_t GetCountRowInRec(); - // запомнить и обнулить число строк в записи - void KeepInMindAndResetCountRowInRec(); - // восстановить число строк в записи - void RestoreCountRowInRec(); - // обнулить число строк в записи - void ResetCountRowInRec(); - - // счетчик строк секции DE - ptrdiff_t GetCountStringDE(); - - // счетчик строк секции PD - ptrdiff_t GetCountStringPD(); - - // вернуть массив пар номеров ресурса строк ( названия в Компасе и в IGES ) для формирования отчета -// void GetReport( int32 *& report, int & size ); - - // вернуть имя файла из которого пишется - std::string & GetSourceFileName(); - - // сброс геометрии - - // вектор - ptrdiff_t Direction( BasicIGES & ); - // матрица трансформации - ptrdiff_t Matrix( BasicIGES & ); - // Точка - ptrdiff_t Point( BasicIGES & p ); - // Отрезок - ptrdiff_t LineSeg( BasicIGES & ls ); - // Окружность - ptrdiff_t ArcOrCircle( BasicIGES & acs ); - // 104 IGS_CONIC_ARC коническая кривая ( эллипс, гипербола, парабола ) - ptrdiff_t Ellipse( BasicIGES & ); - // 126 IGS_RATIONAL_B_SPLINE_CURVE - ptrdiff_t RationalBSplineCurve( BasicIGES & b ); - // Элемент текста - void TextItem( TextItemIGES & ti ); - // Текст - ptrdiff_t Text( BasicIGES & t ); - // стрелка( или линия выноски ) IGS_LEADER - ptrdiff_t Leader( BasicIGES & l ); - // вспомогательная линия - ptrdiff_t WitnessLine( BasicIGES & w ); - // линейный размер - ptrdiff_t LinDimension( BasicIGES & b ); - // диаметральный размер - ptrdiff_t DimDimension( BasicIGES & b ); - // радиальный размер - ptrdiff_t RadDimension( BasicIGES & b ); - // угловой размер - ptrdiff_t AngDimension( BasicIGES & b ); - // номер строки DE записанного примитива - ptrdiff_t GetLastDE(); -private: - // записать глобальную секцию - ptrdiff_t WriteGlobal(); -}; - - -#endif // __IGES_WRITE_H +//////////////////////////////////////////////////////////////////////////////// +// +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __IGES_WRITE_H +#define __IGES_WRITE_H + + +#include "iges_basic.h" +#include +#include + + +class ostream; +struct CONV_CLASS ColourIGES; +struct IGESData; +struct DirEntryParameter; // запись в DE +class CONV_CLASS BasicIGES; +struct CONV_CLASS BasicCurveIGES; +struct CONV_CLASS LTypeNameIGES; // структура для сохранения типов линий +struct CONV_CLASS TextItemIGES; // структура элемента текста + + +//------------------------------------------------------------------------------- +// +// --- +class CONV_CLASS IWIGES { +// тип функции - записи какого-то элемента - создан для передачи в параметрах +public: + typedef ptrdiff_t (IWIGES::*WriteEntityFunc)( BasicIGES & ); +private: + IGESData * data; + +public : + IWIGES( std::ostream & _os ); + ~IWIGES(); + + // добавить к строке преобразованый к строке и дополненый до 8 символов пробелами int32 + size_t AddLongToString( int32 l, char ch1 = 0 ); +#if defined(PLATFORM_64) + size_t AddLongToString( ptrdiff_t l, char ch1 = 0 ); +#endif // PLATFORM_64 + + // Преобразовать строковую константу к строковой константе IGES + std::string & AddString( std::string & s, std::string & d, std::string & delimiter ); + // Преобразовать double к строковой константе IGES + std::string & AddDouble( double d, std::string & s, std::string & delimiter ); + // Преобразовать int32 к строковой константе IGES + std::string & AddLong( int32 l, std::string & s, std::string & delimiter ); +#if defined(PLATFORM_64) + std::string & AddLong( ptrdiff_t l, std::string & s, std::string & delimiter ); +#endif // PLATFORM_64 + + // добавить к строке выовода другую строку, если длина превышает критическую + // вывести строку, обнулить ее и добавить к ней остаток. Если стоит флаг вывода - + // вывести остаток и обнулить строку + // применяется для глобальной секции и секции комментария + bool AddValToStrAndOut( std::string & outS, // добавляемая строка + ptrdiff_t & numStr, // номер строки в секции + char section, // символ секции + bool out = false );// флаг вывода + + + // добавить к строке выовода секции PD другую строку, если длина превышает критическую + // вывести строку, обнулить ее и добавить к ней остаток. Если стоит флаг вывода - + // вывести остаток и обнулить строку + ptrdiff_t AddValToStrAndOutPD( std::string & outS, + bool divide, // строку можно разделять, числа - нежелательно + bool out ); + // вывести в секцию PD int32 после него запятая + ptrdiff_t WriteLong( int32 v ); +#if defined(PLATFORM_64) + ptrdiff_t WriteLong( ptrdiff_t v ); +#endif // PLATFORM_64 + // вывести в секцию PD double после него запятая + ptrdiff_t WriteDouble( double v ); + // вывести в секцию PD х, Y, и z. после каждого запятая + ptrdiff_t WriteXY0ZPD( double x, double y, double z = 0 ); + // вывести в секцию PD х, y. после каждого запятая + ptrdiff_t WriteXYPD( double x, double y ); + // вывести в секцию PD дополнительные нулевые указатели, в конце - ";" + ptrdiff_t WriteAddNULLPointerPD(); + // Ищет такую структуру в массиве записанных в IGES стркутур. Если находит + // - уничтожает присланное и возвращает номер найденного, если нет - возвращает + // 0, в случае ошибки - возвращает -1 + ptrdiff_t FindOrAddBasicIGES( BasicIGES * b ); + // запись примитива. в параметре - процедура записи этого примитива и его структура. + // перед записью производится проверка - нет ли уже такой и если есть - присланная + // структура уничтожается, если нет - запускается процедура записи, + // возвращается номер строки DE + ptrdiff_t WriteEntity( WriteEntityFunc func, BasicIGES * ); + // подготовка к записи - применять в паре с функцией FinishRecord - только + // для записей, где не нужен стиль линии, уровень и номер формы + // возвращает запомненый указатель- начало записи в PD + ptrdiff_t PrepareRecord( BasicIGES & bi ); + // завершение записи - применять в паре с функцией PrepareRecord - только + // для записей, где не нужен стиль линии + // возвращает номер строки- начало записи в DE + ptrdiff_t FinishRecord( BasicIGES & bi ); + // завершение записи - применять в паре с функцией PrepareRecord - только + // для записей, где НУЖЕН стиль линии + // возвращает номер строки- начало записи в DE + ptrdiff_t FinishCurveRecord( BasicCurveIGES & bi ); + void ClearBuffer(); + + // заполнить структуру глобальной секции и секции комментария + ptrdiff_t Global( const c3d::path_string & fileName, + const double & gabarit, + const std::string & documentName, // Название документа + const std::string & author, + const std::string & organization, + const std::string & productComments, + const std::string & writingCADId, // Идентификация экспортирующей САПР + double lenUnits ); + // Запись завершения в файл IGES + void Terminate(); + + // инициализировать DE + DirEntryParameter & InitDirEntry( ptrdiff_t type, + ptrdiff_t numPD, + ptrdiff_t level, + ptrdiff_t numForm, + ptrdiff_t color, + ptrdiff_t matrix, + unsigned short vectorDE ); + // инициализировать геом. DE + DirEntryParameter & InitCurveDirEntry( ptrdiff_t type, + ptrdiff_t numPD, + ptrdiff_t level, + LTypeNameIGES & lt, + ptrdiff_t numForm, + ptrdiff_t matrix, + unsigned short vectorDE ); + // сформировать запись 2х строк DirEntry + bool DirEntry( DirEntryParameter & de ); + + // записать цвет + ptrdiff_t Color( BasicIGES * color ); + ptrdiff_t Colour( ColourIGES & ); + + // вернуть структуру типа линии из массива + ptrdiff_t GetTypeLine ( ptrdiff_t num, LTypeNameIGES & lt ); + // найти номер структуры типа линии в массиве + ptrdiff_t FindTypeLine( LTypeNameIGES & lt ); + // добавить структуру типа линии в массив + LTypeNameIGES * AddTypeLine ( LTypeNameIGES & lt ); + + // вернуть буферную строку + std::string & BuffStr (); + // разделитель + std::string & Delimiter(); + // разделитель в записях + std::string & RecordDelimiter(); + + // число строк в записи + ptrdiff_t GetCountRowInRec(); + // запомнить и обнулить число строк в записи + void KeepInMindAndResetCountRowInRec(); + // восстановить число строк в записи + void RestoreCountRowInRec(); + // обнулить число строк в записи + void ResetCountRowInRec(); + + // счетчик строк секции DE + ptrdiff_t GetCountStringDE(); + + // счетчик строк секции PD + ptrdiff_t GetCountStringPD(); + + // вернуть массив пар номеров ресурса строк ( названия в Компасе и в IGES ) для формирования отчета +// void GetReport( int32 *& report, int & size ); + + // вернуть имя файла из которого пишется + std::string & GetSourceFileName(); + + // сброс геометрии + + // вектор + ptrdiff_t Direction( BasicIGES & ); + // матрица трансформации + ptrdiff_t Matrix( BasicIGES & ); + // Точка + ptrdiff_t Point( BasicIGES & p ); + // Отрезок + ptrdiff_t LineSeg( BasicIGES & ls ); + // Окружность + ptrdiff_t ArcOrCircle( BasicIGES & acs ); + // 104 IGS_CONIC_ARC коническая кривая ( эллипс, гипербола, парабола ) + ptrdiff_t Ellipse( BasicIGES & ); + // 126 IGS_RATIONAL_B_SPLINE_CURVE + ptrdiff_t RationalBSplineCurve( BasicIGES & b ); + // Элемент текста + void TextItem( TextItemIGES & ti ); + // Текст + ptrdiff_t Text( BasicIGES & t ); + // стрелка( или линия выноски ) IGS_LEADER + ptrdiff_t Leader( BasicIGES & l ); + // вспомогательная линия + ptrdiff_t WitnessLine( BasicIGES & w ); + // линейный размер + ptrdiff_t LinDimension( BasicIGES & b ); + // диаметральный размер + ptrdiff_t DimDimension( BasicIGES & b ); + // радиальный размер + ptrdiff_t RadDimension( BasicIGES & b ); + // угловой размер + ptrdiff_t AngDimension( BasicIGES & b ); + // номер строки DE записанного примитива + ptrdiff_t GetLastDE(); +private: + // записать глобальную секцию + ptrdiff_t WriteGlobal(); +}; + + +#endif // __IGES_WRITE_H diff --git a/C3d/Include/instance.h b/C3d/Include/instance.h index 4f883dd..4534f19 100644 --- a/C3d/Include/instance.h +++ b/C3d/Include/instance.h @@ -68,10 +68,10 @@ public : // \ru Общие функции геометрического объекта. \en Common functions of a geometric object. virtual MbeSpaceType IsA() const; // \ru Тип объекта. \en An object type. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * iReg = NULL ) const; // \ru Создать копию. \en Create a copy. - virtual void Transform( const MbMatrix3D &, MbRegTransform * iReg = NULL ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * iReg = NULL ); // \ru Сдвинуть вдоль вектора. \en Move along a vector. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * iReg = NULL ); // \ru Повернуть вокруг оси. \en Rotate about an axis. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; // \ru Создать копию. \en Create a copy. + virtual void Transform( const MbMatrix3D &, MbRegTransform * iReg = c3d_null ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * iReg = c3d_null ); // \ru Сдвинуть вдоль вектора. \en Move along a vector. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * iReg = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate about an axis. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Являются ли объекты равными? \en Whether the objects are equal? virtual bool IsSimilar( const MbSpaceItem & init ) const; // \ru Являются ли объекты подобными? \en Whether the objects are similar? virtual bool SetEqual ( const MbSpaceItem & init ); // \ru Сделать объекты равными. \en Make the objects equal. @@ -124,11 +124,11 @@ public : virtual const MbItem * GetItemByName( SimpleName n, MbPath & path, MbMatrix3D & from ) const; // \ru Преобразовать согласно матрице c использованием регистратора содержимый объект, если он селектирован. \en Transform the contained object according to the matrix using the registrator if the object selected. - virtual void TransformSelected( const MbMatrix3D & matr, MbRegTransform * iReg = NULL ); + virtual void TransformSelected( const MbMatrix3D & matr, MbRegTransform * iReg = c3d_null ); // \ru Сдвинуть вдоль вектора с использованием регистратора содержимый объект, если он селектирован. \en Translate the contained object along the vector according to the matrix using the registrator if the object selected. - virtual void MoveSelected( const MbVector3D & to, MbRegTransform * iReg = NULL ); + virtual void MoveSelected( const MbVector3D & to, MbRegTransform * iReg = c3d_null ); // \ru Повернуть вокруг оси на заданный угол с использованием регистратора содержимый объект, если он селектирован. \en Translate the contained object about the axis according to the matrix using the registrator if the object selected. - virtual void RotateSelected( const MbAxis3D & axis, double angle, MbRegTransform * iReg = NULL ); + virtual void RotateSelected( const MbAxis3D & axis, double angle, MbRegTransform * iReg = c3d_null ); /// \ru Дать матрицу преобразования из локальной системы объекта. \en Get transform matrix from local coordinate system of object. virtual bool GetMatrixFrom( MbMatrix3D & from ) const; diff --git a/C3d/Include/io_buffer.h b/C3d/Include/io_buffer.h index 9157aa8..119654c 100644 --- a/C3d/Include/io_buffer.h +++ b/C3d/Include/io_buffer.h @@ -135,6 +135,8 @@ namespace io readAborted = 0x04000000L, /// \ru Файл в расширенном формате прочитан частично (неизвестные объекты пропущены). \en Partial read of file in extended format (unknown objects skipped). skippedUnknAttr = 0x08000000L, + /// \ru Файл нулевой длины. \en Zero-length file. + emptyFile = 0x10000000L, /// \ru Все ошибки. \en All errors. //AR all = 0xffffffe0L allMask = 0xffffffffL @@ -595,22 +597,22 @@ public: /// \ru Установить для записи FileSpace с заданным индексом (при необходимости создать новый). ///\en Set FileSpace with given index for writing (create if necessary). - virtual FileSpace * enterFileSpace ( uint8 ) { return NULL; } // не реализовано; not implemeneted + virtual FileSpace * enterFileSpace ( uint8 ) { return c3d_null; } // не реализовано; not implemeneted /// \ru Установить позицию для записи/чтения по заданному ClusterReference. /// Сохранить предыдущую позицию, если saveCurr = true. /// \en Set position for for writing/reading by given ClusterReference. /// If saveCurr = true, save previous position. - virtual FileSpace * enterFileSpace ( const ClusterReference & , bool ) { return NULL; } // не реализовано; not implemeneted + virtual FileSpace * enterFileSpace ( const ClusterReference & , bool ) { return c3d_null; } // не реализовано; not implemeneted /// \ru Установить позицию для записи/чтения по заданным FileSpace и ClusterReference. /// Внимание, здесь ClusterReference.clusterIndex должен содержать индекс в массиве индексов кластеров в FileSpace! /// Сохранить предыдущую позицию, если saveCurr = true. /// \en Set position for writing/reading by given FileSpace and ClusterReference. /// Warning: in this function, ClusterReference.clusterIndex should contain an index in array of cluster indices in FileSpace! /// If saveCurr = true, save previous position. - virtual FileSpace * enterFileSpace ( const ClusterReference &, FileSpace *, bool ) { return NULL; } // не реализовано; not implemeneted + virtual FileSpace * enterFileSpace ( const ClusterReference &, FileSpace *, bool ) { return c3d_null; } // не реализовано; not implemeneted /// \ru Установить предыдущий FileSpace для записи/чтения. ///\en Set previous FileSpace for writing/reading. - virtual FileSpace * returnToPreviousFileSpace() { return NULL; } // не реализовано; not implemeneted + virtual FileSpace * returnToPreviousFileSpace() { return c3d_null; } // не реализовано; not implemeneted /// \ru Получить текущую позицию в буфере. \en Get current position in the buffer. ClusterReference getCurrentClusterPos(); diff --git a/C3d/Include/io_memory_buffer.h b/C3d/Include/io_memory_buffer.h index 5a19467..2f3af0a 100644 --- a/C3d/Include/io_memory_buffer.h +++ b/C3d/Include/io_memory_buffer.h @@ -61,7 +61,7 @@ protected: ClusterReference _ref; FileSpace * _file; - FileStackEntry() : _file(NULL) {} + FileStackEntry() : _file(c3d_null) {} FileStackEntry ( ClusterReference r, FileSpace * f ) : _ref(r), _file(f) {} }; std::stack filesStack; @@ -84,18 +84,18 @@ public: bool isEmpty() const; /// \ru Записать в непрерывную память. /// Функция подразумевает вполне определенное толкование значений входных данных, поэтому она не должна вызываться с неинициализированными аргументами. - /// \param[in,out] memory - память, куда писать. Если memory == NULL, то память выделяется. + /// \param[in,out] memory - память, куда писать. Если memory == c3d_null, то память выделяется. /// \param[in] addSize - размер памяти, которую надо дополнительно выделить при выделении памяти. /// Смысл addSize зависит от начального значения параметра memory: - /// если memory != 0 (т.е.память уже распределена), то addSize должен быть равен размеру памяти (addSize >= getMemLen() !!!). - /// если memory == 0, то addSize определяет, столько байт дополнительно добавить (обнулив) в начале при выделении памяти. + /// если memory != c3d_null (т.е.память уже распределена), то addSize должен быть равен размеру памяти (addSize >= getMemLen() !!!). + /// если memory == c3d_null, то addSize определяет, столько байт дополнительно добавить (обнулив) в начале при выделении памяти. /// \en Write to contiguous memory. /// The function implies a well-defined interpretation of the input values, so it should not be called with uninitialized arguments. - /// \param[in,out] memory - memory to write to. If memory == NULL, then memory is allocated. + /// \param[in,out] memory - memory to write to. If memory == c3d_null, then memory is allocated. /// \param[in] addSize - size of memory, which should be allocated additionally when allocating memory. /// The meaning of addSize depends on the initial value of the parameter 'memory': - /// if memory != 0 (i.e. the memory is already allocated), then addSize should be equal to memory size (addSize >= getMemLen() !!!). - /// if memory == 0, then addSize defines a number of bytes to be added (and zeroed) at the beginning when allocating memory. + /// if memory != c3d_null (i.e. the memory is already allocated), then addSize should be equal to memory size (addSize >= getMemLen() !!!). + /// if memory == c3d_null, then addSize defines a number of bytes to be added (and zeroed) at the beginning when allocating memory. size_t toMemory( const char *& memory, size_t addSize = 0 ) const; /// \ru Прочитать из непрерывной памяти. \en Read from the contiguous memory. bool fromMemory( const char * memory ); diff --git a/C3d/Include/io_tape.h b/C3d/Include/io_tape.h index 2bb5079..844ad0e 100644 --- a/C3d/Include/io_tape.h +++ b/C3d/Include/io_tape.h @@ -466,7 +466,7 @@ public: size_t Add( const TapeBase * e ); /// \ru Выдать указатель на зарегистрированный объект по заданной позиции в кластере. \en Get the pointer of the registered object by the position in the cluster. - virtual TapeBase * Get( const ClusterReference & ) const { return NULL; } // unsupported + virtual TapeBase * Get( const ClusterReference & ) const { return c3d_null; } // unsupported /// \ru Выдать позицию в кластере по заданному индексу. \en Get position in the cluster by given index. virtual ClusterReference GetClusterRef( size_t ) const { return ClusterReference(); } // unsupported /// \ru Добавить позицию объекта в кластере. \en Add the object position in the cluster. @@ -732,7 +732,7 @@ public: /// \ru Читать каталог объектов. \en Read the object catalog. virtual void ReadObjectCatalog(); /// \ru Читать объект по позиции в кластере. \en Read an object by position in cluster. - virtual TapeBase * ReadObjectByPosition ( const ClusterReference & ) { return NULL; } + virtual TapeBase * ReadObjectByPosition ( const ClusterReference & ) { return c3d_null; } /// \ru Установить позицию чтения. \en Set reading position. virtual bool SetReadPosition ( ClusterReference & ) { return false; } // not supported @@ -750,7 +750,7 @@ public: virtual bool readBytes( void * bf, size_t len ); /// \ru Получить указатель на дерево модели. \en Get pointer to the model tree. - virtual const c3d::IModelTree * GetModelTree() const { return NULL; } // not supported + virtual const c3d::IModelTree * GetModelTree() const { return c3d_null; } // not supported /// \ru Получить признак полного чтения текущего объекта. \en Get indicator of full reading of the current object. /// \ru Установить признак полного чтения текущего объекта. \en Set indicator of full reading of the current object. @@ -942,7 +942,7 @@ public: size_t __lenWchar( const TCHAR * s ); /// \ru Получить указатель на дерево модели. \en Get pointer to the model tree. - virtual const c3d::IModelTree * GetModelTree() const { return NULL; } // not supported + virtual const c3d::IModelTree * GetModelTree() const { return c3d_null; } // not supported protected: /// \ru Записать объект и тип. \en Write the object and type. @@ -1120,7 +1120,7 @@ struct TapeClassContainer static bool Add( TapeClass & tapeClass ) { if ( !StaticTapeClassContainer() ) - StaticTapeClassContainer() = new SFDPArray( 430, 1, TapeClass_Compare, NULL ); // \ru не владеет \en doesn't own + StaticTapeClassContainer() = new SFDPArray( 430, 1, TapeClass_Compare, c3d_null ); // \ru не владеет \en doesn't own return StaticTapeClassContainer()->AddExact( tapeClass ); } @@ -1891,9 +1891,18 @@ ClassDescriptor TapeClassForNewObjects::GetPackedClassNameForWrite( long version //---------------------------------------------------------------------------------------- -/// \ru Удаление пробелов и записей перед пробелами. \en Deleting of spaces and records before spaces. \~ \ingroup Base_Tools_IO -// \ru Для совместимости с предыдущими компиляторами по именам возвращаемым typeid(a).name() \en For compatibility with the previous compilers by names returned by typeid(a).name() -// \ru Для определения того, что надо делать, скомпилируйте и запустите из консоли код \en Compile and run the following code from console to define what is to do +// \ru Удаление пробелов, записей перед пробелами, символов "<" и ">". +// \en Deleting of spaces, records before spaces, symbols "<" and ">". \~ +// \ingroup Base_Tools_IO +MATH_FUNC( const char * ) pureTemplateName( const char * name ); + +//---------------------------------------------------------------------------------------- +// \ru Удаление пробелов и записей перед пробелами. \en Deleting of spaces and records before spaces. \~ +// \ingroup Base_Tools_IO +// \ru Для совместимости с предыдущими компиляторами по именам возвращаемым typeid(a).name(). +// \en For compatibility with the previous compilers by names returned by typeid(a).name(). +// \ru Для определения того, что надо делать, скомпилируйте и запустите из консоли код: +// \en Compile and run the following code from console to define what is to do: // #include // #include // class CLASS_A { @@ -1910,28 +1919,35 @@ ClassDescriptor TapeClassForNewObjects::GetPackedClassNameForWrite( long version // MS Visual C++ 6.0 ... 2010: "class CLASS_A" // gcc (Linux): "7CLASS_A" // Embarcadero C++ 7.20 for Win32 "$CLASS_A" -// \ru Интересующая нас функция должна выдавать "CLASS_A" \en The desired function must write "CLASS_A" +// \ru Интересующая нас функция должна выдавать "CLASS_A" \en The desired function must write "CLASS_A" +// +// \ru Для имени шаблонного класса функция возвращает строку, состоящую из имени класса и имен параметров. +// \en For a template class name, the function returns a string consisting of the class name and parameter names. +// \ru Например, для имени "class ClassX" функция возвращает "ClassXClassAClassB". +// \ru For example, for the name "class ClassX" the function returns "ClassXClassAClassB". // --- inline const char * pureName( const char * name ) { - if ( name && *name ) - { + if ( name && *name ) { + if ( name[strlen(name) - 1] == '>' ) { + return pureTemplateName( name ); + } + #ifdef _MSC_VER // \ru убираем ключевые слова "class", "struct" и т.д. в начале строки \en remove the keywords "class", "struct" and so on at the beginning of the string - ptrdiff_t i = strlen(name) - 1; + ptrdiff_t i = strlen( name ) - 1; for ( ; i >= 0 && name[i] != ' '; i-- ); - return ((i >= 0) && (name[i] == ' ')) ? &(name[i+1]) : name; + return ( (i >= 0) && (name[i] == ' ') ) ? &(name[i + 1]) : name; #else // _MSC_VER // \ru убираем длину имени в начале строки \en remove the name length at the beginning of the string for ( size_t i = 0, c = strlen(name); i < c; i++ ) if ( !(name[i] >= '0' && name[i] <= '9') ) - return &(name[i]); + return &( name[i] ); #endif // _MSC_VER } return name; } - //---------------------------------------------------------------------------------------- /// \ru Упаковать строку(имя класса) в uint16. \en Pack the string (class name) into uint16. \~ \ingroup Base_Tools_IO // --- @@ -1962,7 +1978,7 @@ inline uint16 hash( const char * name ) // --- inline reader & __readChar( reader & ps, char *& s ) { - s = NULL; + s = c3d_null; if ( ps.good() ) { @@ -1974,7 +1990,7 @@ inline reader & __readChar( reader & ps, char *& s ) (len > 0 && ps.eof()) || !ps.good() ) { - s = NULL; + s = c3d_null; } else // good { @@ -1990,7 +2006,7 @@ inline reader & __readChar( reader & ps, char *& s ) { // \ru прочли не все, скорее всего ошибка - очистить строку \en not everything has been read, must be an error - clear the string delete [] s; - s = NULL; + s = c3d_null; } } else @@ -2010,7 +2026,7 @@ inline reader & __readChar( reader & ps, char *& s ) // --- inline reader & __readWchar( reader & ps, TCHAR * & s ) { - s = NULL; // \ru на случай, если ничего не прочитаем \en for case if nothing will be read + s = c3d_null; // \ru на случай, если ничего не прочитаем \en for case if nothing will be read if ( ps.good() ) { uint32 len = 0; @@ -2028,7 +2044,7 @@ inline reader & __readWchar( reader & ps, TCHAR * & s ) else { // \ru прочли не все, скорее всего ошибка - очистить строку \en not everything has been read, must be an error - clear the string delete [] readBuf; - readBuf = NULL; + readBuf = c3d_null; } if ( readBuf ) { // is OK @@ -2065,7 +2081,7 @@ inline reader & __readWchar( reader & ps, TCHAR * & s ) // --- inline reader & __readWcharT( reader & ps, wchar_t * & s ) { - s = NULL; // \ru на случай, если ничего не прочитаем \en for case if nothing will be read + s = c3d_null; // \ru на случай, если ничего не прочитаем \en for case if nothing will be read if ( ps.good() ) { uint32 len = 0; @@ -2083,7 +2099,7 @@ inline reader & __readWcharT( reader & ps, wchar_t * & s ) else { // \ru прочли не все, скорее всего ошибка - очистить строку \en not everything has been read, must be an error - clear the string delete [] readBuf; - readBuf = NULL; + readBuf = c3d_null; } if ( readBuf ) { // is OK @@ -2536,7 +2552,7 @@ inline reader & operator >> ( reader & ps, long double & l ) { template inline reader & operator >> ( reader & ps, SPtr<_Class> & sPtr ) { - _Class * ptr = NULL; + _Class * ptr = c3d_null; ps >> ptr; sPtr.assign( ptr ); return ps; @@ -2671,7 +2687,7 @@ inline void ReadTCHAR( reader & in, TCHAR *& ts, bool directSingleByte = false ) if ( directSingleByte || in.MathVersion() < UNICODE_VERSION ) { // \ru читаем WCHAR* из CHAR* \en read WCHAR* from CHAR* - char * s = NULL; + char * s = c3d_null; __readChar( in, s ); // \ru читаем строку в формате ANSI \en read string in ANSI format ts = _strNtcs( s ); // \ru создаем TCHAR из ANSI (если TCHAR == char, то просто дублируем) \en create TCHAR from ANSI (if TCHAR == char, then simply duplicate) delete [] s; @@ -3063,7 +3079,7 @@ inline reader & operator >> ( reader & ps, std::string & s ) { if ( ps.MathVersion() < UNICODE_VERSION ) { - char * str( NULL ); + char * str( c3d_null ); __readChar( ps, str ); // \ru читаем строку в формате ANSI \en read string in ANSI format if ( str ) s = str; @@ -3071,7 +3087,7 @@ inline reader & operator >> ( reader & ps, std::string & s ) s.clear(); delete [] str; } else { - wchar_t * p (NULL); + wchar_t * p (c3d_null); ReadWcharT( ps, p ); // \ru в зависимости от версии потока \en subject to the stream version if ( p ) { char* str = wcsnewmbs(p); @@ -3114,7 +3130,7 @@ inline reader & operator >> ( reader & ps, std::wstring & s ) { if ( ps.MathVersion() < UNICODE_VERSION ) { - char * str( NULL ); + char * str( c3d_null ); __readChar( ps, str ); // \ru читаем строку в формате ANSI \en read string in ANSI format wchar_t* p = mbsnewwcs( str ); if ( p ) @@ -3124,7 +3140,7 @@ inline reader & operator >> ( reader & ps, std::wstring & s ) delete [] p; delete [] str; } else { - wchar_t * p = NULL; + wchar_t * p = c3d_null; ReadWcharT( ps, p ); // \ru в зависимости от версии потока \en subject to the stream version if ( p ) s = p; @@ -3141,7 +3157,7 @@ inline reader & operator >> ( reader & ps, std::wstring & s ) //--- inline writer & operator << ( writer & ps, const std::wstring * s ) { - WriteWcharT( ps, (s ? s->c_str() : NULL) ); // \ru в зависимости от версии потока \en subject to the stream version + WriteWcharT( ps, (s ? s->c_str() : c3d_null) ); // \ru в зависимости от версии потока \en subject to the stream version return ps; } diff --git a/C3d/Include/io_tree.h b/C3d/Include/io_tree.h index 3591c45..e2967e3 100644 --- a/C3d/Include/io_tree.h +++ b/C3d/Include/io_tree.h @@ -153,7 +153,7 @@ protected: public: - IModelTree() : m_type ( mtt_Model ), m_nodeToAddFunc( NULL ), m_filterFunc( NULL ) {} + IModelTree() : m_type ( mtt_Model ), m_nodeToAddFunc( c3d_null ), m_filterFunc( c3d_null ) {} virtual ~IModelTree() {} // \ru Выдать тип дерева. \en Get the tree type. @@ -165,12 +165,12 @@ public: // \en Build a tree with nodes, selected by filters. In case of embodiment tree, the function works with the first embodiment. virtual std_unique_ptr GetFilteredTree ( const std::vector& filters ) const = 0; - // \ru Построить дерево по заданным узлам. Не применимо к дереву исполнений (в этом случае возвращает NULL). - // \en Build a tree for given nodes. Not applicable to embodiment tree (in this case, returns NULL). + // \ru Построить дерево по заданным узлам. Не применимо к дереву исполнений (в этом случае возвращает c3d_null). + // \en Build a tree for given nodes. Not applicable to embodiment tree (in this case, returns c3d_null). virtual std_unique_ptr GetFilteredTree ( std::vector& nodes ) const = 0; - // \ru Выдать указатель на дерево исполнений. Выдает NULL, если не применимо (нет исполнений). - // \en Get pointer to embodiments tree. Return NULL if not applicable (no embodiments). + // \ru Выдать указатель на дерево исполнений. Выдает c3d_null, если не применимо (нет исполнений). + // \en Get pointer to embodiments tree. Return c3d_null if not applicable (no embodiments). virtual const IEmbodimentTree* GetEmbodimentsTree() const = 0; // \ru Добавить узел. \en Add a node. @@ -244,7 +244,7 @@ public: IEmbodimentNode() {} virtual ~IEmbodimentNode() { for ( std::set::iterator i = m_children.begin(); i != m_children.end(); ++i ) - if ( *i != NULL ) delete *i; + if ( *i != c3d_null ) delete *i; } // \ru Построить поддерево модели, содержащееся в данном исполнении. diff --git a/C3d/Include/item_registrator.h b/C3d/Include/item_registrator.h index 53ee5d6..2c39ac3 100644 --- a/C3d/Include/item_registrator.h +++ b/C3d/Include/item_registrator.h @@ -29,10 +29,10 @@ class MATH_CLASS MbRefItem; */ // --- #define __REG_DUPLICATE_IMPL( __CLASS ) \ -MbRefItem * copyItem = NULL; \ -if ( iReg == NULL || !iReg->IsReg( this, copyItem ) ) { \ +MbRefItem * copyItem = c3d_null; \ +if ( iReg == c3d_null || !iReg->IsReg( this, copyItem ) ) { \ copyItem = new __CLASS; \ - if ( iReg != NULL ) \ + if ( iReg != c3d_null ) \ iReg->SetReg( this, copyItem ); \ } diff --git a/C3d/Include/legend.h b/C3d/Include/legend.h index f70eb86..136f13a 100644 --- a/C3d/Include/legend.h +++ b/C3d/Include/legend.h @@ -38,10 +38,10 @@ public: /* \ru Общие функции геометрического объе virtual MbeSpaceType IsA() const = 0; // \ru Тип объекта. \en Type of the object. virtual MbeSpaceType Type() const = 0; // \ru Тип объекта. \en Type of the object. virtual MbeSpaceType Family() const; // \ru Семейство элемента. \en Family of the element. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const = 0; // \ru Создать копию. \en Create a copy. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ) = 0; // \ru Преобразовать согласно матрице. \en Transform according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ) = 0; // \ru Сдвинуть вдоль вектора. \en Translate along a vector. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ) = 0; // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const = 0; // \ru Создать копию. \en Create a copy. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ) = 0; // \ru Преобразовать согласно матрице. \en Transform according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ) = 0; // \ru Сдвинуть вдоль вектора. \en Translate along a vector. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ) = 0; // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const = 0; // \ru Являются ли объекты равными? \en Determine whether the objects are equal. virtual bool IsSimilar( const MbSpaceItem & init ) const = 0; // \ru Являются ли объекты подобными? \en Determine whether the objects are similar. virtual bool SetEqual ( const MbSpaceItem & init ) = 0; // \ru Сделать объекты равным. \en Make the objects equal. diff --git a/C3d/Include/lump.h b/C3d/Include/lump.h index 1219c08..a803bc2 100644 --- a/C3d/Include/lump.h +++ b/C3d/Include/lump.h @@ -67,7 +67,7 @@ typedef std::pair ConstLumpsSPtrSetRet; // --- struct MATH_CLASS MbLump: public MbRefItem { protected: - c3d::ConstSolidSPtr solid; ///< \ru Тело (всегда не NULL). \en Solid (always not NULL). + c3d::ConstSolidSPtr solid; ///< \ru Тело (всегда не c3d_null). \en Solid (always not c3d_null). MbMatrix3D from; ///< \ru Матрица преобразования из локальной системы координат. \en A transformation matrix from the local coordinate system. uint component; ///< \ru Идентификатор компонента, в котором определено тело. \en An identifier of a component which a solid is defined in. size_t identifier; ///< \ru Идентификатор нити. \en A thread identifier. @@ -79,7 +79,7 @@ private: MbLump( const MbLump & other, MbRegDuplicate * iReg ); public: /// \ru Пустой конструктор. \en Empty constructor. - MbLump() : solid( NULL ), from(), component( 0 ), identifier( SYS_MAX_T ), changed( true ) {} + MbLump() : solid( c3d_null ), from(), component( 0 ), identifier( SYS_MAX_T ), changed( true ) {} /// \ru Конструктор по данным. \en Constructor by data. MbLump( const MbSolid & _solid, const MbMatrix3D & _from, uint _comp = 0, size_t _ident = SYS_MAX_T, bool _changed = true ); /// \ru Деструктор. \en Destructor. @@ -96,7 +96,7 @@ public: /// \ru Разрезать тело в производном виде. \en Cut solid on derive view. virtual bool WillCutOnDeriveView() const { return true; } /// \ru Дублирование объекта. \en Duplication of an object. - virtual MbLump & Duplicate( MbRegDuplicate * iReg = NULL ) const; + virtual MbLump & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; /// \ru Получить имя компонента. \en Get the name of a component. uint GetComponent() const { return component; } /// \ru Установить имя компонента. \en Set the name of a component. diff --git a/C3d/Include/map_create.h b/C3d/Include/map_create.h index 49aecba..af3547d 100644 --- a/C3d/Include/map_create.h +++ b/C3d/Include/map_create.h @@ -64,11 +64,11 @@ class MATH_CLASS MbMapBodiesPArray; class MATH_CLASS MbProjectionsObjects { public: - TPointer< RPArray > annCurves; ///< \ru Аннотационные кривые (может быть нулем). \en Annotation curves (can be NULL). - TPointer< RPArray > annotations; ///< \ru Аннотационные объекты (может быть нулем). \en Annotation objects (can be NULL). - TPointer< RPArray > symbolObjects; ///< \ru Условные обозначения (может быть нулем). \en Conventional notations (can be NULL). - TPointer< RPArray > pointsData; ///< \ru Пространственные точки (может быть нулем). \en Spatial points (can be NULL). - TPointer< RPArray > curvesData; ///< \ru Пространственные кривые (может быть нулем). \en Spatial curves (can be NULL). + TPointer< RPArray > annCurves; ///< \ru Аннотационные кривые (может быть нулем). \en Annotation curves (can be c3d_null). + TPointer< RPArray > annotations; ///< \ru Аннотационные объекты (может быть нулем). \en Annotation objects (can be c3d_null). + TPointer< RPArray > symbolObjects; ///< \ru Условные обозначения (может быть нулем). \en Conventional notations (can be c3d_null). + TPointer< RPArray > pointsData; ///< \ru Пространственные точки (может быть нулем). \en Spatial points (can be c3d_null). + TPointer< RPArray > curvesData; ///< \ru Пространственные кривые (может быть нулем). \en Spatial curves (can be c3d_null). public: /** \brief \ru Конструктор. @@ -78,11 +78,11 @@ public: \en Constructor of empty sets of projected objects.\n \~ */ MbProjectionsObjects() - : annCurves ( NULL ) - , annotations ( NULL ) - , symbolObjects( NULL ) - , pointsData ( NULL ) - , curvesData ( NULL ) + : annCurves ( c3d_null ) + , annotations ( c3d_null ) + , symbolObjects( c3d_null ) + , pointsData ( c3d_null ) + , curvesData ( c3d_null ) {} /// \ru Конструктор копирования с регистратором. \en Copy-constructor with the registrator. MbProjectionsObjects( const MbProjectionsObjects & other, MbRegDuplicate * iReg ); @@ -104,7 +104,7 @@ public: } /// \ru Дать копию объекта. \en Get a copy of the object. - virtual MbProjectionsObjects & Duplicate( MbRegDuplicate * iReg = NULL ) const; + virtual MbProjectionsObjects & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; /// \ru Отпустить все указатели. \en Detach all pointers. void Relinquish() @@ -173,9 +173,9 @@ public: size_t GetLumpsCount() const { return lumps.size(); } const MbLump * _GetLump( size_t k ) const { return lumps[k]; } - const MbLump * GetLump( size_t k ) const { return ((k < lumps.size()) ? lumps[k] : NULL); } + const MbLump * GetLump( size_t k ) const { return ((k < lumps.size()) ? lumps[k] : c3d_null); } MbLump * _SetLump( size_t k ) { return lumps[k]; } - MbLump * SetLump( size_t k ) { return ((k < lumps.size()) ? lumps[k] : NULL); } + MbLump * SetLump( size_t k ) { return ((k < lumps.size()) ? lumps[k] : c3d_null); } template void GetLumps( Lumps & _lumps ) const @@ -282,7 +282,7 @@ MATH_FUNC (MbResultType) GetVestiges ( const MbPlacement3D & place, const MbMapVisibilityMode & visMode, VERSION version = Math::DefaultMathVersion(), bool merge = true, - const std::vector * prevCubes = NULL ); + const std::vector * prevCubes = c3d_null ); //------------------------------------------------------------------------------ @@ -316,7 +316,7 @@ public: public: MbMapSettings( MbMapVisibilityMode mode, MbPlacement3D place = MbPlacement3D::global, - double znear = 0, bool merge = true, const LumpCubes * prevCubes = NULL ) + double znear = 0, bool merge = true, const LumpCubes * prevCubes = c3d_null ) : m_place ( place ) , m_zNear ( znear ) , m_visMode ( mode ) diff --git a/C3d/Include/map_implementation.h b/C3d/Include/map_implementation.h index da1d5eb..fbb0280 100644 --- a/C3d/Include/map_implementation.h +++ b/C3d/Include/map_implementation.h @@ -109,7 +109,7 @@ public: void CreateFirst( const RPArray & lumps, const MbMatrix3D & into, double znear, bool perspective, const MbMapVisibilityMode & visMode, VERSION version, - const std::vector * prevCubes = NULL ); + const std::vector * prevCubes = c3d_null ); /** \brief \ru Построение ассоциативных проекций. \en The construction of associative projections. \~ @@ -220,7 +220,7 @@ OBVIOUS_PRIVATE_COPY( MbMapBodiesPArray ) mvt_Cut - Разрез,\n mvt_Section - Сечечние;\n плоскость вида, разреза или сечения.\n - \en The information about basic view on witch a local view\cutaway is constructed:\n + \en The information about basic view on witch a local view(cutaway) is constructed:\n a view type:\n mvt_View - View,\n mvt_Cut - Cutaway,\n diff --git a/C3d/Include/map_lump.h b/C3d/Include/map_lump.h index 8290612..89e83e8 100644 --- a/C3d/Include/map_lump.h +++ b/C3d/Include/map_lump.h @@ -138,7 +138,7 @@ public: /// \ru Деструктор. \en Destructor. virtual ~CurveWType() {} /// \ru Сделать копию объекта. \en Create a copy of the object. - virtual CurveWType & Duplicate( MbRegDuplicate * iReg = NULL ) const; + virtual CurveWType & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; public: @@ -229,7 +229,7 @@ public: explicit MbAnnCurves( const MbName & _name, uint _comp, size_t _ident ) : component ( _comp ) , identifier( _ident ) - , solid ( NULL ) + , solid ( c3d_null ) , name ( &_name ) , from ( ) , wtCurves ( 0, 1, true ) @@ -245,7 +245,7 @@ public: public: /// \ru Дать копию объекта. \en Get a copy of the object. - virtual MbAnnCurves & Duplicate( MbRegDuplicate * iReg = NULL ) const; + virtual MbAnnCurves & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; /// \ru Получить имя компонента. \en Get the component name. uint GetComponent() const { return component; } @@ -265,12 +265,12 @@ public: \param[in, out] wtCurve - \ru Кривая. \en A curve. \~ */ - void AbsorbCurve( CurveWType *& wtCurve ) { wtCurves.Add( wtCurve ); wtCurve = NULL; } + void AbsorbCurve( CurveWType *& wtCurve ) { wtCurves.Add( wtCurve ); wtCurve = c3d_null; } /// \ru Количество кривых в наборе. \en The number of curves in the set. size_t GetCurvesCount() const { return wtCurves.Count(); } /// \ru Получить указатель на кривую. \en Get the pointer to the curve. - const CurveWType * GetCurve( size_t k ) const { return ((k < wtCurves.Count()) ? wtCurves[k] : NULL); } + const CurveWType * GetCurve( size_t k ) const { return ((k < wtCurves.Count()) ? wtCurves[k] : c3d_null); } private: DECLARE_PERSISTENT_CLASS_NEW_DEL ( MbAnnCurves ) @@ -317,7 +317,7 @@ public : public: /// \ru Дать копию объекта. \en Get a copy of the object. - virtual MbSimbolthThreadView & Duplicate( MbRegDuplicate * iReg = NULL ) const; + virtual MbSimbolthThreadView & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; public : /// \ru Получить аннотационные кривые для редактирования. \en Get annotative curves for editing. @@ -508,7 +508,7 @@ public: public: /// \ru Дать копию объекта. \en Get a copy of the object. - virtual MbSpacePoints & Duplicate( MbRegDuplicate * iReg = NULL ) const; + virtual MbSpacePoints & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; public: @@ -659,16 +659,16 @@ public: \en Get the name. \~ \details \ru Получить имя по индексу.\n Если индекс некорректный, то есть не меньше числа точек, - вернет NULL. + вернет c3d_null. \en Get the name by an index.\n If the index is incorrect i.e. it isn't less than the number of points, - NULL is returned. \~ + c3d_null is returned. \~ \param[in] k - \ru Индекс имени. \en A name index. \~ \return \ru Имя по индексу из набора имен. \en A name by an index from the set of names. \~ */ - const MbName * GetName( size_t k ) const { return ((k < names.size()) ? names[k] : NULL); } + const MbName * GetName( size_t k ) const { return ((k < names.size()) ? names[k] : c3d_null); } /** \} */ DECLARE_PERSISTENT_CLASS_NEW_DEL ( MbSpacePoints ) @@ -786,7 +786,7 @@ private: public: /// \ru Дать копию объекта. \en Get a copy of the object. - virtual MbSpaceCurves & Duplicate( MbRegDuplicate * iReg = NULL ) const; + virtual MbSpaceCurves & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; public: /** \} */ @@ -908,11 +908,11 @@ public: \param[in] k - \ru Индекс кривой. \en A curve index. \~ \return \ru Указатель на кривую, если индекс меньше количества кривых,\n - иначе NULL. + иначе c3d_null. \en A pointer to a curve, if the index is less than the number of curves,\n - otherwise NULL is returned. \~ + otherwise c3d_null is returned. \~ */ - const MbCurve3D * GetCurve( size_t k ) const { return ((k < curves.size()) ? curves[k] : NULL); } + const MbCurve3D * GetCurve( size_t k ) const { return ((k < curves.size()) ? curves[k] : c3d_null); } /** \} */ /**\ru \name Доступ к именам. @@ -940,11 +940,11 @@ public: \param[in] k - \ru Индекс имени. \en A name index. \~ \return \ru Указатель на имя, если индекс меньше количества имен,\n - иначе NULL. + иначе c3d_null. \en A pointer to a name, if the index is less than the number of curves, - otherwise NULL is returned. \~ + otherwise c3d_null is returned. \~ */ - const MbName * GetName( size_t k ) const { return ((k < names.size()) ? names[k] : NULL); } ///< \ru Получить имя. \en Get the name. + const MbName * GetName( size_t k ) const { return ((k < names.size()) ? names[k] : c3d_null); } ///< \ru Получить имя. \en Get the name. /** \} */ DECLARE_PERSISTENT_CLASS_NEW_DEL ( MbSpaceCurves ) @@ -958,7 +958,7 @@ IMPL_PERSISTENT_OPS( MbSpaceCurves ) inline void MbSpaceCurves::AddNamedCurve( MbCurve3D * crv, MbName * nm, bool noSameCheck ) { - if ( crv != NULL && (noSameCheck || curves.FindIt( crv ) == SYS_MAX_T ) ) { + if ( crv != c3d_null && (noSameCheck || curves.FindIt( crv ) == SYS_MAX_T ) ) { curves.push_back( crv ); crv->AddRef(); names.push_back( nm ); @@ -1111,7 +1111,7 @@ public: */ MbMappingLumps( const MbSolid & _solid, const MbMatrix3D & _from, bool _willCut, uint _comp = 0, size_t _ident = SYS_MAX_T ) : MbCutLump ( _solid, _from, _comp, _ident ) - , lumps ( NULL ) + , lumps ( c3d_null ) , willCut ( _willCut ) { } @@ -1121,13 +1121,13 @@ public: \details \ru Конструктор по набору тел.\n Захватывает тело MbSolid из первого элемента _lumps и остальные элементы _lumps методом AddRef().\n - Если в _lumps один элемент, массив lumps остается NULL.\n - Если в _lumps нет элементов, тело MbSolid в базовом объекте = NULL. Таких объектов быть не должно. + Если в _lumps один элемент, массив lumps остается c3d_null.\n + Если в _lumps нет элементов, тело MbSolid в базовом объекте = c3d_null. Таких объектов быть не должно. \en Constructor by a set of solids.\n Captures MbSolid solid from the first element of the _lumps and the other elements of the _lumps by AddRef() method.\n - If the _lumps contains one element the lumps array remains NULL.\n - If the _lumps doesn't contain any elements the MbSolid solid in the base object = NULL. These objects should not be. \~ + If the _lumps contains one element the lumps array remains c3d_null.\n + If the _lumps doesn't contain any elements the MbSolid solid in the base object = c3d_null. These objects should not be. \~ \param[in] _lumps - \ru Контейнер тел с матрицами преобразования в глобальную систему координат,. не должен быть пустым контейнером. \en A container of solids with the matrices of transformation to the global coordinate system @@ -1136,13 +1136,13 @@ public: template MbMappingLumps( const LumpsVector & _lumps ) : MbCutLump() - , lumps( NULL ) + , lumps( c3d_null ) , willCut( false ) // конструктор по нескольким телам только в случае "не рассекать" { size_t count = _lumps.size(); - C3D_ASSERT( count > 0 && _lumps[0] != NULL ); + C3D_ASSERT( count > 0 && _lumps[0] != c3d_null ); - if ( count > 0 && _lumps[0] != NULL ) { + if ( count > 0 && _lumps[0] != c3d_null ) { from = _lumps[0]->GetMatrixFrom(); component = _lumps[0]->GetComponent(); identifier = _lumps[0]->GetIdentifier(); @@ -1154,7 +1154,7 @@ public: lumps = new c3d::LumpsSPtrVector(); for ( size_t i = 1; i < count; ++i ) { MbLump * lump = _lumps[i]; - if ( lump != NULL ) + if ( lump != c3d_null ) lumps->push_back( c3d::LumpSPtr(lump) ); } } @@ -1167,19 +1167,19 @@ public: /** \brief \ru Число тел. \en The number of solids. \~ \details \ru Число тел.\n - Минимальное количество - 1 тело. В этом случае массив lumps = NULL. - В случае, если массив lumps != NULL, количество тел равно количеству + Минимальное количество - 1 тело. В этом случае массив lumps = c3d_null. + В случае, если массив lumps != c3d_null, количество тел равно количеству элементов в массиве плюс один. \en The number of solids.\n - Minimal number = 1 solid. In this case the lumps array is NULL. - In a case when the lumps array isn't NULL the number of solids is equal to + Minimal number = 1 solid. In this case the lumps array is c3d_null. + In a case when the lumps array isn't c3d_null the number of solids is equal to the number of elements in the array plus one. \~ \return \ru Число тел. \en The number of solids. \~ */ size_t Count() const { size_t res = 1; - if ( lumps != NULL ) + if ( lumps != c3d_null ) res += lumps->size(); return res; } @@ -1190,21 +1190,21 @@ public: По индексу 0 выдается базовый объект.\n По индексу i выдается объект из массива lumps с индексом i-1.\n Индекс проверяется на корректность. - В случае некорректного индекса возвращает NULL. + В случае некорректного индекса возвращает c3d_null. \en A solid by an index.\n The basic object is given by the "0" index.\n An object with the index i - 1 from the lumps array is issued by the index i.\n An index is validated for correctness. - In a case of an incorrect index the method returns NULL. \~ + In a case of an incorrect index the method returns c3d_null. \~ \return \ru Указатель на тело с матрицей. \en A pointer to a solid with a matrix. \~ */ MbLump * operator []( size_t ind ) { if ( ind == 0 ) return static_cast( this ); - else if ( lumps != NULL && ind - 1 < lumps->size() ) + else if ( lumps != c3d_null && ind - 1 < lumps->size() ) return lumps->operator []( ind - 1 ); - return NULL; + return c3d_null; } /** \brief \ru Тело по индексу. @@ -1213,12 +1213,12 @@ public: По индексу 0 выдается базовый объект.\n По индексу i выдается объект из массива lumps с индексом i-1.\n Индекс проверяется на корректность. - В случае некорректного индекса возвращает NULL. + В случае некорректного индекса возвращает c3d_null. \en A solid by an index.\n The basic object is given by the "0" index.\n An object with the index i - 1 from the lumps array is issued by the index i.\n An index is validated for correctness. - In a case of an incorrect index the method returns NULL. \~ + In a case of an incorrect index the method returns c3d_null. \~ \return \ru Константный указатель на тело с матрицей. \en A constant pointer to a solid with a matrix. \~ */ @@ -1226,9 +1226,9 @@ public: { if ( ind == 0 ) return static_cast( this ); - else if ( lumps != NULL && ind - 1 < lumps->size() ) + else if ( lumps != c3d_null && ind - 1 < lumps->size() ) return lumps->operator []( ind - 1 ); - return NULL; + return c3d_null; } void ChangeLump( size_t ind, MbLump * newLump ) @@ -1239,7 +1239,7 @@ public: component = newLump->GetComponent(); identifier = newLump->GetIdentifier(); } - else if ( lumps != NULL && ind - 1 < lumps->size() ) { + else if ( lumps != c3d_null && ind - 1 < lumps->size() ) { (*lumps)[ind - 1] = newLump; } } @@ -1323,7 +1323,7 @@ public: } /// \ru Деструктор. \en Destructor. ~MbPolygon3DSolid() { - if ( polygon != NULL ) + if ( polygon != c3d_null ) delete polygon; } @@ -1332,7 +1332,7 @@ public: /// \ru Получить имя компонента. \en Get the name of a component. uint GetComponent() const { return component; } /// \ru Занулить полигон без удаления. \en Reset polygon without removal. - void DoNotDeletePolyg() { polygon = NULL; } + void DoNotDeletePolyg() { polygon = c3d_null; } OBVIOUS_PRIVATE_COPY( MbPolygon3DSolid ) }; @@ -1360,7 +1360,7 @@ enum MbeMapViewType { информации о виде при построении местного вида\разреза или выносного элемента. \en The information about an associative view. Used for transfer - The information about a view in constructing the local view\cutaway or + The information about a view in constructing the local view(cutaway) or detail view. \~ \ingroup Mapping */ diff --git a/C3d/Include/map_section.h b/C3d/Include/map_section.h index d3878f0..f7dffe2 100644 --- a/C3d/Include/map_section.h +++ b/C3d/Include/map_section.h @@ -87,7 +87,7 @@ public: \en Clear the array of contours if it isn't null. \~ */ void DetachContours() { - if ( arContours != NULL ) + if ( arContours != c3d_null ) arContours->Flush( noDelete ); } @@ -142,10 +142,10 @@ public: /** \brief \ru Добавить оболочку. \en Add a shell. \~ \details \ru Добавить оболочку в набор оболочек.\n - Добавляется, даже если равна NULL.\n + Добавляется, даже если равна c3d_null.\n Если не нулевая - захватывается. \en Add a shell into the set of shells.\n - A shell is added even if it is equal to NULL.\n + A shell is added even if it is equal to c3d_null.\n If a shell isn't null it is captured. \~ \param[in] secShell - \ru Оболочка. \en A shell. \~ @@ -331,7 +331,7 @@ public: \return \ru true, если массив точек не нулевой и не пустой. \en returns true if the array of points isn't null and isn't empty. \~ */ - bool IsSpacePoints() const { return (pointsData != NULL && pointsData->size() > 0); } + bool IsSpacePoints() const { return (pointsData != c3d_null && pointsData->size() > 0); } /** \brief \ru Есть ли в объекте кривые. \en Whether any curve is in an object. \~ @@ -340,7 +340,7 @@ public: \return \ru true, если массив кривых не нулевой и не пустой. \en returns true if the array of curves isn't null and isn't empty. \~ */ - bool IsSpaceCurves() const { return (curvesData != NULL && curvesData->size() > 0); } + bool IsSpaceCurves() const { return (curvesData != c3d_null && curvesData->size() > 0); } const RPArray * GetSpacePoints() const { return pointsData; } ///< \ru Получить указатель на пространственные точки. \en Get spatial points. const RPArray * GetSpaceCurves() const { return curvesData; } ///< \ru Получить указатель на пространственные кривые. \en Get spatial curves. diff --git a/C3d/Include/map_section_complex.h b/C3d/Include/map_section_complex.h index ae0e54b..48bd08a 100644 --- a/C3d/Include/map_section_complex.h +++ b/C3d/Include/map_section_complex.h @@ -233,13 +233,14 @@ MATH_FUNC(bool) FormFirstSectionPlane( const MbPlacement3D & m_place, const MbCu Нормаль плоскости вида направлена против вектора взгляда. \en The view plane convert to the plane of the projection. Normal to the view plane is directed against the view vector. \~ - \param[in\out] place - \ru Плоскость вида\Плоскость отображения проекции. - \en A view plane\A plane of the projection. \~ + \param[in,out] place - \ru Плоскость вида (отображения проекции). + \en A view plane (A plane of the projection). \~ \param[in] viewDir - \ru Вектор взгляда. \en A view vector. \~ */ // --- -inline void MappingVPtoMP( MbPlacement3D & place, const MbVector & viewDir ) +inline +void MappingVPtoMP( MbPlacement3D & place, const MbVector & viewDir ) { if ( ::fabs(viewDir.x) > Math::lengthEpsilon || ::fabs(viewDir.y) > Math::lengthEpsilon ) { MbVector vDir( viewDir ); diff --git a/C3d/Include/map_vestige.h b/C3d/Include/map_vestige.h index bc4e949..e05ce3b 100644 --- a/C3d/Include/map_vestige.h +++ b/C3d/Include/map_vestige.h @@ -154,7 +154,7 @@ protected: , ident ( otherIdent ) , style ( SYS_MAX_UINT16 ) , attrData ( ) - , item ( NULL ) + , item ( c3d_null ) , name ( &otherName ) { name.SetOwn( false ); } /// \ru Конструктор копирования с регистратором. \en Copy-constructor with the registrator. @@ -164,13 +164,13 @@ protected: : comp ( 0 ) , ident ( SYS_MAX_T ) , style ( SYS_MAX_UINT16 ) - , item ( NULL ) - , name ( NULL ) + , item ( c3d_null ) + , name ( c3d_null ) { name.SetOwn(false); } virtual ~MbBaseVestige() {} public: - virtual MbBaseVestige & Duplicate( MbRegDuplicate * iReg = NULL ) const; ///< \ru Создать копию объекта. \en Create a copy of the object. + virtual MbBaseVestige & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; ///< \ru Создать копию объекта. \en Create a copy of the object. public: uint GetComponent() const { return comp; } size_t GetIdentifier() const { return ident; } @@ -268,7 +268,7 @@ protected: {} public: /// \ru Создать копию объекта. \en Create a copy of the object. - virtual MbBaseVestige & Duplicate( MbRegDuplicate * iReg = NULL ) const; + virtual MbBaseVestige & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; public: /// \ru Тип отображения. \en Mapping type. Type GetType() const { return (Type)vesType; } @@ -304,11 +304,11 @@ void ReplaceCurveVestigeDuplicates( MbCurveVestige & ); // --- struct MATH_CLASS MbCurveVestige : public TapeBase { protected: - SPtr totalPrj; ///< \ru Полная проекция (может быть NULL). \en A full projection (can be NULL). \~ \internal \ru Владеет. \en Owns. \~ \endinternal + SPtr totalPrj; ///< \ru Полная проекция (может быть c3d_null). \en A full projection (can be c3d_null). \~ \internal \ru Владеет. \en Owns. \~ \endinternal std::vector arTotal; ///< \ru Все проекции в упорядоченной форме. \en All projections in an ordered form. \~ \internal \ru Не владеет. \en Doesn't own. \~ \endinternal // \ru Двумерные кривые лежат копиями, поэтому массивы владеющие. \en Two-dimensional uv-curves are copies therefore arrays are owners - // \ru Если кривых нет то указатель останется нулевым. \en If no curves then the pointer remains NULL. + // \ru Если кривых нет то указатель останется нулевым. \en If no curves then the pointer remains c3d_null. TPointer< PArray > arVisPrj; ///< \ru Видимые проекции. \en Visible projections. TPointer< PArray > arHidPrj; ///< \ru Не видимые проекции. \en Invisible projections. @@ -321,10 +321,10 @@ public: Creates an object with the null projection. \~ */ MbCurveVestige() - : totalPrj( NULL ) + : totalPrj( c3d_null ) , arTotal ( ) - , arVisPrj( NULL ) - , arHidPrj( NULL ) + , arVisPrj( c3d_null ) + , arHidPrj( c3d_null ) {} /// \ru Конструктор копирования с регистратором. \en Copy-constructor with the registrator. MbCurveVestige( const MbCurveVestige & other, MbRegDuplicate * iReg ); @@ -332,7 +332,7 @@ public: virtual ~MbCurveVestige() { ClearAll(); } public: /// \ru Создать копию объекта. \en Create a copy of the object. - virtual MbCurveVestige & Duplicate( MbRegDuplicate * iReg = NULL ) const; + virtual MbCurveVestige & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; public: /** \brief \ru Очистить проекции. @@ -347,14 +347,14 @@ public: void ClearAll() { arTotal.clear(); - totalPrj = NULL; - arVisPrj = NULL; - arHidPrj = NULL; + totalPrj = c3d_null; + arVisPrj = c3d_null; + arHidPrj = c3d_null; } /// \ru Пустое ли отображение кривой? \en Is an empty curve vestige? bool IsEmpty() const { - return ( totalPrj == NULL ) && + return ( totalPrj == c3d_null ) && ( arTotal.size() < 1 ) && ( !arVisPrj || arVisPrj->empty() ) && ( !arHidPrj || arHidPrj->empty() ); @@ -372,9 +372,9 @@ public: bool IsHiddenCurvesArray () const { return !!arHidPrj; } /// \ru Получить видимую часть проекции. \en Get visible part of projection. - const MbCurve * _GetVisibleCurve( size_t k ) const { return (( !!arVisPrj ) ? (*arVisPrj)[k] : NULL); } + const MbCurve * _GetVisibleCurve( size_t k ) const { return (( !!arVisPrj ) ? (*arVisPrj)[k] : c3d_null); } /// \ru Получить невидимую часть проекции. \en Get hidden part of projection. - const MbCurve * _GetHiddenCurve ( size_t k ) const { return (( !!arHidPrj ) ? (*arHidPrj)[k] : NULL); } + const MbCurve * _GetHiddenCurve ( size_t k ) const { return (( !!arHidPrj ) ? (*arHidPrj)[k] : c3d_null); } /// \ru Положить в массив указатели видимых частей проекции. \en Put pointers of visible parts of projection into the array. template @@ -414,7 +414,7 @@ public: \details \ru Забрать все проекционные кривые из структуры и очистить ее. \en Pick up all curves of this structure and clear it. \~ */ - bool PickUpMapCurves( RPArray & crvArr, SArray & visArr ); + bool PickUpMapCurves( RPArray & crvArr, c3d::BoolVector & visArr ); /// \ru Забрать видимую часть проекции (не обнуляет в массиве всех проекций). \en Pick up visible part of projection (it doesn't set zero in all projections array). MbCurve * _PickupVisibleCurve( size_t ); /// \ru Забрать невидимую часть проекции (не обнуляет в массиве всех проекций). \en Pick up hidden part of projection (it doesn't set zero in all projections array). @@ -433,7 +433,7 @@ public: bool RepairSpecificCorrespondence( bool uncertainIsVisible ); /// \ru Есть ли указатель на полную проекцию? \en Is there a pointer to the full projection? - bool IsTotalProjection() const { return (totalPrj != NULL); } + bool IsTotalProjection() const { return (totalPrj != c3d_null); } /// \ru Указатель на полную проекцию. \en The pointer to a full projection. MbCurve * DetachTotalProjection() { return ::DetachItem( totalPrj ); } /// \ru Установить полную проекцию. \en Set a full projection. @@ -466,7 +466,7 @@ const MbCurve * MbCurveVestige::GetFullProjection() const MbCurve * curve = totalPrj; - if ( curve == NULL ) { + if ( curve == c3d_null ) { if ( !!arVisPrj && (arVisPrj->size() == 1) ) curve = arVisPrj->operator[]( 0 ); else if ( !!arHidPrj && (arHidPrj->size() == 1) ) @@ -480,15 +480,15 @@ const MbCurve * MbCurveVestige::GetFullProjection() const //--- inline MbCurve * MbCurveVestige::_PickupVisibleCurve( size_t k ) { - if ( arVisPrj != NULL ) { + if ( arVisPrj != c3d_null ) { PArray & crvs = *arVisPrj; MbCurve * crv = crvs[k]; ::AddRefItem( crv ); // захват и отпускание на случай перехода на владение по счетчику ссылок - crvs[k] = NULL; + crvs[k] = c3d_null; ::DecRefItem( crv ); return crv; } - return NULL; + return c3d_null; } //------------------------------------------------------------------------------ @@ -496,15 +496,15 @@ inline MbCurve * MbCurveVestige::_PickupVisibleCurve( size_t k ) //--- inline MbCurve * MbCurveVestige::_PickupHiddenCurve( size_t k ) { - if ( arHidPrj != NULL ) { + if ( arHidPrj != c3d_null ) { PArray & crvs = *arHidPrj; MbCurve * crv = crvs[k]; ::AddRefItem( crv ); // захват и отпускание на случай перехода на владение по счетчику ссылок - crvs[k] = NULL; + crvs[k] = c3d_null; ::DecRefItem( crv ); return crv; } - return NULL; + return c3d_null; } //------------------------------------------------------------------------------ @@ -513,11 +513,11 @@ inline MbCurve * MbCurveVestige::_PickupHiddenCurve( size_t k ) inline void MbCurveVestige::DetachAllCurves( PArray *& visCurves, PArray *& hidCurves, SPtr & wholePrj ) { wholePrj = totalPrj; - totalPrj = NULL; + totalPrj = c3d_null; arTotal.clear(); - visCurves = !!arVisPrj ? arVisPrj.Relinquish() : NULL; - hidCurves = !!arHidPrj ? arHidPrj.Relinquish() : NULL; + visCurves = !!arVisPrj ? arVisPrj.Relinquish() : c3d_null; + hidCurves = !!arHidPrj ? arHidPrj.Relinquish() : c3d_null; } //------------------------------------------------------------------------------ @@ -634,7 +634,7 @@ protected: , vesSubType( vst_None ) {} public: - virtual MbBaseVestige & Duplicate( MbRegDuplicate * iReg = NULL ) const; + virtual MbBaseVestige & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; public: /// \ru Получить тип отображения. \en Get mapping type. Type GetType() const { return (Type)vesType; } @@ -735,7 +735,7 @@ protected: /// \ru Конструктор копирования с регистратором. \en Copy-constructor with the registrator. MbFaceVestige( const MbFaceVestige & other, MbRegDuplicate * iReg ); public: - virtual MbBaseVestige & Duplicate( MbRegDuplicate * iReg = NULL ) const; + virtual MbBaseVestige & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; public: /// \ru Тип отображения. \en Mapping type. Type GetType() const { return (Type)vesType; } @@ -796,7 +796,7 @@ protected: MbAnnotationEdgeVestige( const MbAnnotationEdgeVestige & other, MbRegDuplicate * iReg ); public: - virtual MbBaseVestige & Duplicate( MbRegDuplicate * iReg = NULL ) const; + virtual MbBaseVestige & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; public: /// \ru Тип отображения. \en Mapping type. @@ -886,7 +886,7 @@ protected: MbSymbolVestige( uint otherComp, size_t otherIdent, const MbTopologyItem * otherItem, const MbName & otherName, bool _bvisible = true ) : MbBaseVestige( otherComp, otherIdent, otherName, otherItem ) , bvisible( _bvisible ) - , matrix ( NULL ) + , matrix ( c3d_null ) {} /// \ru Конструктор копирования с регистратором. \en Copy-constructor with the registrator. MbSymbolVestige( const MbSymbolVestige & other, MbRegDuplicate * iReg ); @@ -894,12 +894,12 @@ protected: MbSymbolVestige() : MbBaseVestige() , bvisible( true ) - , matrix ( NULL ) + , matrix ( c3d_null ) {} public: virtual ~MbSymbolVestige() {} - virtual MbBaseVestige & Duplicate( MbRegDuplicate * iReg = NULL ) const; + virtual MbBaseVestige & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; public: /// \ru Это видимая точка? \en Is point visible? @@ -924,8 +924,8 @@ IMPL_PERSISTENT_OPS( MbSymbolVestige ) // --- inline void MbSymbolVestige::SetMatrix( const MbMatrix & initMatrix ) { - C3D_ASSERT( matrix == NULL ); - if ( matrix == NULL ) + C3D_ASSERT( matrix == c3d_null ); + if ( matrix == c3d_null ) matrix = new MbMatrix( initMatrix ); else *matrix = initMatrix; @@ -970,7 +970,7 @@ public: public: /// \ru Создать копию объекта. \en Create a copy of the object. - virtual MbVEFVestiges & Duplicate( MbRegDuplicate * iReg = NULL ) const; + virtual MbVEFVestiges & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; /// \ru Очистить массивы следов. \en Clear arrays of vestiges. void SetEmpty() { @@ -1209,16 +1209,16 @@ inline MbEdgeVestige * MbVEFVestiges::AddVestigeCurve( uint otherComp, size_t ot inline MbEdgeVestige * MbVEFVestiges::AddVestigeCurve( uint otherComp, size_t otherIdent, const RPArray & mapCurves, bool visible, const MbName & otherName ) { - MbEdgeVestige * ev = NULL; + MbEdgeVestige * ev = c3d_null; ev = ::AddVestigeCurve( otherComp, otherIdent, otherName, curveVestiges, false, false ); // BUG_93683 ev = ::AddVestigeEdge( otherComp, otherIdent, otherName, MbBaseVestige::vt_Edge, edgeVestiges ); - if ( ev != NULL ) { + if ( ev != c3d_null ) { MbCurveVestige & vc = ev->curveInfo; for ( size_t m = 0, mapCurvesCnt = mapCurves.Count(); m < mapCurvesCnt; m++ ) { MbCurve * mapCurve = mapCurves[m]; - if ( mapCurve != NULL ) + if ( mapCurve != c3d_null ) vc.AddSegment( *mapCurve, visible ); } } diff --git a/C3d/Include/marker.h b/C3d/Include/marker.h index 49b7d18..94cbd38 100644 --- a/C3d/Include/marker.h +++ b/C3d/Include/marker.h @@ -76,10 +76,10 @@ public: // \ru Общие функции геометрического объекта \en Common functions of a geometric object virtual MbeSpaceType IsA() const; // \ru Тип объекта. \en Type of the object. virtual MbeSpaceType Type() const; // \ru Тип объекта. \en Type of the object. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Создать копию. \en Create a copy. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. - virtual void Move( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвинуть вдоль вектора. \en Translate along a vector. - virtual void Rotate( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Создать копию. \en Create a copy. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. + virtual void Move( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвинуть вдоль вектора. \en Translate along a vector. + virtual void Rotate( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual bool IsSame( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Являются ли объекты равными? \en Determine whether objects are equal. virtual bool IsSimilar( const MbSpaceItem & init ) const; // \ru Являются ли объекты подобными? \en Determine whether objects are similar. virtual bool SetEqual ( const MbSpaceItem & init ); // \ru Сделать объекты равным. \en Make objects equal. diff --git a/C3d/Include/math_define.h b/C3d/Include/math_define.h index c4fca86..6749456 100644 --- a/C3d/Include/math_define.h +++ b/C3d/Include/math_define.h @@ -39,49 +39,59 @@ namespace c3d // namespace C3D { -typedef std::pair IndicesPair; ///< \ru Пара целочисленных неотрицательных индексов. \en Pair of non-negative integer indices. -typedef std::pair NumbersPair; ///< \ru Пара целочисленных номеров. \en Pair of integer numbers. -typedef std::pair UintPair; ///< \ru Пара 32-битных целочисленных неотрицательных индексов. \en Pair of 32-bit non-negative integer indices. -typedef std::pair BoolPair; ///< \ru Пара флагов. \en Bool pair. -typedef std::pair DoublePair; ///< \ru Пара действительных чисел двойной точности с плавающей запятой. \en Pair of doubles. -typedef std::pair IndicesPairDouble; ///< \ru Пара индексов и числа. \en A pair of indices and double. -typedef std::pair DoubleIndicesPair; ///< \ru Число и пара индексов. \en Double and a pair of indices. +typedef std::pair IndicesPair; ///< \ru Пара целочисленных неотрицательных индексов. \en Pair of non-negative integer indices. +typedef std::pair NumbersPair; ///< \ru Пара целочисленных номеров. \en Pair of integer numbers. +typedef std::pair UintPair; ///< \ru Пара 32-битных целочисленных неотрицательных индексов. \en Pair of 32-bit non-negative integer indices. +typedef std::pair BoolPair; ///< \ru Пара флагов. \en Bool pair. +typedef std::pair DoublePair; ///< \ru Пара действительных чисел двойной точности с плавающей запятой. \en Pair of doubles. +typedef std::pair IndicesPairDouble; ///< \ru Пара индексов и числа. \en A pair of indices and double. +typedef std::pair DoubleIndicesPair; ///< \ru Число и пара индексов. \en Double and a pair of indices. -typedef std::pair IndexBool; ///< \ru Пара номер-флаг. \en Index-double pair. -typedef std::pair BoolIndex; ///< \ru Пара флаг-номер. \en Double-index pair. -typedef std::pair IndexDouble; ///< \ru Пара номер-число. \en Index-double pair. -typedef std::pair DoubleIndex; ///< \ru Пара число-номер. \en Double-index pair. -typedef std::pair FlagDouble; ///< \ru Пара флаг-число. \en Flag-double pair. -typedef std::pair DoubleFlag; ///< \ru Пара число-флаг. \en Double-flag pair. -typedef FlagDouble BoolDouble; ///< \ru Пара флаг-число. \en Flag-double pair. -typedef DoubleFlag DoubleBool; ///< \ru Пара число-флаг. \en Double-flag pair. +typedef std::pair IndexBool; ///< \ru Пара номер-флаг. \en Index-double pair. +typedef std::pair BoolIndex; ///< \ru Пара флаг-номер. \en Double-index pair. +typedef std::pair IndexDouble; ///< \ru Пара номер-число. \en Index-double pair. +typedef std::pair DoubleIndex; ///< \ru Пара число-номер. \en Double-index pair. +typedef std::pair FlagDouble; ///< \ru Пара флаг-число. \en Flag-double pair. +typedef std::pair DoubleFlag; ///< \ru Пара число-флаг. \en Double-flag pair. +typedef FlagDouble BoolDouble; ///< \ru Пара флаг-число. \en Flag-double pair. +typedef DoubleFlag DoubleBool; ///< \ru Пара число-флаг. \en Double-flag pair. -typedef std::vector IndicesVector; ///< \ru Вектор целочисленных неотрицательных индексов. \en Vector of non-negative integer indices. -typedef std::vector NumbersVector; ///< \ru Вектор целочисленных номеров. \en Vector of integer numbers. -typedef std::vector UintVector; ///< \ru Вектор 32-битных целочисленных неотрицательных индексов. \en Vector of 32-bit non-negative integer indices. -typedef std::vector BoolVector; ///< \ru Вектор флагов. \en Bool vector. -typedef std::vector DoubleVector; ///< \ru Вектор double. \en Double vector. +typedef std::vector IndicesVector; ///< \ru Вектор целочисленных неотрицательных индексов. \en Vector of non-negative integer indices. +typedef std::vector NumbersVector; ///< \ru Вектор целочисленных номеров. \en Vector of integer numbers. +typedef std::vector UintVector; ///< \ru Вектор 32-битных целочисленных неотрицательных индексов. \en Vector of 32-bit non-negative integer indices. +typedef std::vector BoolVector; ///< \ru Вектор флагов. \en Bool vector. +typedef std::vector DoubleVector; ///< \ru Вектор double. \en Double vector. -typedef std::vector< IndicesPair > IndicesPairsVector; ///< \ru Вектор пар целочисленных неотрицательных индексов. \en Vector of pairs of non-negative integer indices. -typedef std::vector< NumbersPair > NumbersPairsVector; ///< \ru Вектор пар целочисленных индексов. \en Vector of pairs of integer indices. -typedef std::vector< DoublePair > DoublePairsVector; ///< \ru Вектор пар double. \en Vector of double pairs. +typedef std::vector IndicesPairsVector; ///< \ru Вектор пар целочисленных неотрицательных индексов. \en Vector of pairs of non-negative integer indices. +typedef std::vector NumbersPairsVector; ///< \ru Вектор пар целочисленных индексов. \en Vector of pairs of integer indices. +typedef std::vector DoublePairsVector; ///< \ru Вектор пар double. \en Vector of double pairs. -typedef std::set IndicesSet; ///< \ru Набор целочисленных неотрицательных индексов. \en Set of non-negative integer indices. -typedef IndicesSet::iterator IndicesSetIt; -typedef IndicesSet::const_iterator IndicesSetConstIt; -typedef std::pair IndicesSetRet; +typedef std::set IndicesSet; ///< \ru Набор целочисленных неотрицательных индексов. \en Set of non-negative integer indices. +typedef IndicesSet::iterator IndicesSetIt; +typedef IndicesSet::const_iterator IndicesSetConstIt; +typedef std::pair IndicesSetRet; -typedef std::set NumbersSet; ///< \ru Набор целочисленных номеров. \en Set of integer numbers. -typedef NumbersSet::iterator NumbersSetIt; -typedef NumbersSet::const_iterator NumbersSetConstIt; -typedef std::pair NumbersSetRet; +typedef std::set NumbersSet; ///< \ru Набор целочисленных номеров. \en Set of integer numbers. +typedef NumbersSet::iterator NumbersSetIt; +typedef NumbersSet::const_iterator NumbersSetConstIt; +typedef std::pair NumbersSetRet; -typedef std::set UintSet; ///< \ru Набор 32-битных целочисленных неотрицательных индексов. \en Set of 32-bit non-negative integer indices. -typedef UintSet::iterator UintSetIt; -typedef UintSet::const_iterator UintSetConstIt; -typedef std::pair UintSetRet; +typedef std::set UintSet; ///< \ru Набор 32-битных целочисленных неотрицательных индексов. \en Set of 32-bit non-negative integer indices. +typedef UintSet::iterator UintSetIt; +typedef UintSet::const_iterator UintSetConstIt; +typedef std::pair UintSetRet; -typedef std::pair IndicesPairsPair; ///< \ru Пара индексных пар. \en Pair of indices' pair. +typedef std::set UintPairsSet; ///< \ru Набор пар 32-битных целочисленных неотрицательных индексов. \en Set of pairs of 32-bit non-negative integer indices. +typedef UintPairsSet::iterator UintPairsSetIt; +typedef UintPairsSet::const_iterator UintPairsSetConstIt; +typedef std::pair UintPairsSetRet; + +typedef std::set IndicesPairsSet; ///< \ru Набор пар целочисленных неотрицательных индексов. \en Set of pairs of non-negative integer indices. +typedef IndicesPairsSet::iterator IndicesPairsSetIt; +typedef IndicesPairsSet::const_iterator IndicesPairsSetConstIt; +typedef std::pair IndicesPairsSetRet; + +typedef std::pair IndicesPairsPair; ///< \ru Пара индексных пар. \en Pair of indices' pair. //------------------------------------------------------------------------------ @@ -89,7 +99,7 @@ typedef std::pair IndicesPairsPair; ///< \ru Пара // --- template bool IsNullPointer( const ItemPtr * itemPtr ) { - return ((C3D_NULL_PTR == itemPtr) ? true : false); + return ((c3d_null == itemPtr) ? true : false); } //------------------------------------------------------------------------------ @@ -258,7 +268,7 @@ private: \ // // \ru примеры: \en examples: // \ru #pragma message( __TODO__ "Восстановить закрытый код" ) \en #pragma message( __TODO__ "Restore the private code" ) -// \ru #pragma message( __WARN__ "Отсутствует проверка на NULL" ) \en #pragma message( __WARN__ "There is no check for NULL" ) +// \ru #pragma message( __WARN__ "Отсутствует проверка на c3d_null" ) \en #pragma message( __WARN__ "There is no check for c3d_null" ) //--- #ifdef _MSC_VER // __TODO__ / __WARN__ @@ -319,12 +329,6 @@ private: \ #define CONV_FUNC MATH_FUNC #define CONV_FUNC_EX MATH_FUNC_EX -// \ru Поддержка кода. \en Support of the code. -#ifndef NULL -#define NULL 0 -#endif - - namespace c3d // namespace C3D { diff --git a/C3d/Include/math_version.h b/C3d/Include/math_version.h index b2d3c52..4ddc40d 100644 --- a/C3d/Include/math_version.h +++ b/C3d/Include/math_version.h @@ -83,8 +83,9 @@ #define MATH_19_START_VERSION 0x13000000L ///< \ru Версия файла - 19.0 (начало версии). \en The file version - 19.0 (start of version). \~ \ingroup Base_Tools #define MATH_18_SP1_VERSION 0x13000005L ///< \ru Версия файла - 18.1. \en The file version - 18.1. \~ \ingroup Base_Tools #define C3D_2019_VERSION 0x1300000FL ///< \ru Версия файла - C3D 2019. \en The file version - C3D 2019. \~ \ingroup Base_Tools -#define MATH_19_VERSION 0x13000101L ///< \ru Версия файла - 19.0. \en The file version - 19.0. \~ \ingroup Base_Tools +#define MATH_19_VERSION 0x13000101L ///< \ru Версия файла - 19.0. \en The file version - 19.0. \~ \ingroup Base_Tools #define C3D_2020_VERSION 0x13001004L ///< \ru Версия файла - C3D 2020. \en The file version - C3D 2020. \~ \ingroup Base_Tools +#define MATH_20_VERSION 0x14000012L ///< \ru Версия файла - 20.0. \en The file version - 20.0. \~ \ingroup Base_Tools //------------------------------------------------------------------------------ @@ -112,7 +113,7 @@ MATH_FUNC (VERSION) GetCurrentMathFileVersion(); //------------------------------------------------------------------------------ /// \ru Можно ли потенциально сохранить в заданную версию? \en Can it be saved to this math version? \~ \ingroup Base_Tools // --- -MATH_FUNC( bool ) CanWriteToMathFileVersion( VERSION dstVertsion, bool * canUseWriterEx = NULL ); +MATH_FUNC( bool ) CanWriteToMathFileVersion( VERSION dstVertsion, bool * canUseWriterEx = c3d_null ); //------------------------------------------------------------------------------ @@ -131,9 +132,11 @@ enum MbeWritableReleaseVersion wrv_MATH_18_SP1 = MATH_18_SP1_VERSION, ///< \ru Версия файла - 18.1. \en The file version - 18.1. wrv_C3D_2019 = C3D_2019_VERSION, ///< \ru Версия файла - C3D 2019. \en The file version - C3D 2019. wrv_MATH_19 = MATH_19_VERSION, ///< \ru Версия файла - 19.0. \en The file version - 19.0. + wrv_C3D_2020 = C3D_2020_VERSION, ///< \ru Версия файла - C3D 2020. \en The file version - C3D 2020. + wrv_MATH_20 = MATH_20_VERSION, ///< \ru Версия файла - 20.0 TR2. \en The file version - 20.0 TR2. - wrv_PrevRelease = wrv_MATH_18_SP1, ///< \ru Версия потока предпоследнего релиза. \en The previous release version. - wrv_LastRelease = wrv_C3D_2019, ///< \ru Версия потока последнего релиза. \en The last release version. + wrv_PrevRelease = wrv_MATH_19, ///< \ru Версия потока предпоследнего релиза. \en The previous release version. + wrv_LastRelease = wrv_C3D_2020, ///< \ru Версия потока последнего релиза. \en The last release version. wrv_MaxPossible = SYS_MAX_UINT32 ///< \ru Использовать последнюю версия потока. \en Use current working version. }; diff --git a/C3d/Include/mb_class_traits.h b/C3d/Include/mb_class_traits.h index f2572c6..9ef6082 100644 --- a/C3d/Include/mb_class_traits.h +++ b/C3d/Include/mb_class_traits.h @@ -57,7 +57,7 @@ struct _IsInstant template inline bool operator()( const ParentType * obj, const ClassEnum _typeId ) { - return obj == NULL ? true : obj->IsA() == _typeId; + return obj == c3d_null ? true : obj->IsA() == _typeId; } }; @@ -69,7 +69,7 @@ struct _IsFamily template inline bool operator()( const ParentType * obj, const ClassEnum _typeId ) { - return obj == NULL ? true : obj->Family() == _typeId; + return obj == c3d_null ? true : obj->Family() == _typeId; } }; @@ -154,7 +154,7 @@ inline DerivedPtr _IsaCast( ParentType * obj ) { return static_cast( obj ); } - return static_cast( NULL ); + return static_cast( c3d_null ); } //---------------------------------------------------------------------------------------- @@ -202,7 +202,7 @@ DerivedPtr isa_cast( ParentType * obj ) template< class DerivedPtr > DerivedPtr isa_cast( const MbRefItem * obj ) { - DerivedPtr resPtr = NULL; + DerivedPtr resPtr = c3d_null; return _IsaCast( obj, resPtr ); } @@ -214,7 +214,7 @@ DerivedPtr isa_cast( const MbRefItem * obj ) template< class DerivedPtr > DerivedPtr isa_cast( MbRefItem * obj ) { - DerivedPtr resPtr = NULL; + DerivedPtr resPtr = c3d_null; return _IsaCast( obj, resPtr ); } diff --git a/C3d/Include/mb_cross_point.h b/C3d/Include/mb_cross_point.h index bedf5de..4076aba 100644 --- a/C3d/Include/mb_cross_point.h +++ b/C3d/Include/mb_cross_point.h @@ -55,7 +55,7 @@ public: template MbPointOnCurve::MbPointOnCurve() : t ( 0.0 ) - , curve( NULL ) + , curve( c3d_null ) {} diff --git a/C3d/Include/mb_cube_tree.h b/C3d/Include/mb_cube_tree.h index 7851312..d1e341b 100644 --- a/C3d/Include/mb_cube_tree.h +++ b/C3d/Include/mb_cube_tree.h @@ -242,9 +242,9 @@ inline MbCubeTree::MbCubeTree( const std::vector & , direction ( eda_anyDirection ) , dmType ( dm ) , leafObjects( ) - , midstBranch( NULL ) - , lowerBranch( NULL ) - , upperBranch( NULL ) + , midstBranch( c3d_null ) + , lowerBranch( c3d_null ) + , upperBranch( c3d_null ) { size_t cnt = objects.size(); C3D_ASSERT( Cube::GetDimension() == Point::GetDimension() ); @@ -252,7 +252,7 @@ inline MbCubeTree::MbCubeTree( const std::vector & if ( cnt > 0 ) { // Инициализация дерева Cube gabarit; for ( size_t i = 0; i < cnt; ++i ) { - if ( objects[i].first != NULL ) + if ( objects[i].first != c3d_null ) gabarit |= objects[i].first->GetCube(); } InitTree( objects, gabarit, eda_anyDirection, 0, 0 ); @@ -273,9 +273,9 @@ inline MbCubeTree::MbCubeTree( const std::vector & , direction ( eda_anyDirection ) , dmType ( dm ) , leafObjects( ) - , midstBranch( NULL ) - , lowerBranch( NULL ) - , upperBranch( NULL ) + , midstBranch( c3d_null ) + , lowerBranch( c3d_null ) + , upperBranch( c3d_null ) { C3D_ASSERT( Cube::GetDimension() == Point::GetDimension() ); InitTree( objects, gabarit, eda_anyDirection, 0, 0 ); @@ -295,9 +295,9 @@ inline MbCubeTree::MbCubeTree( DistanceMeasure dm ) , direction ( eda_anyDirection ) , dmType ( dm ) , leafObjects( ) - , midstBranch( NULL ) - , lowerBranch( NULL ) - , upperBranch( NULL ) + , midstBranch( c3d_null ) + , lowerBranch( c3d_null ) + , upperBranch( c3d_null ) { } @@ -311,7 +311,7 @@ inline void MbCubeTree::Clear() delete midstBranch; delete lowerBranch; delete upperBranch; - midstBranch = lowerBranch = upperBranch = NULL; + midstBranch = lowerBranch = upperBranch = c3d_null; midst = minimum = maximum = lower = upper = 0.0; direction = eda_anyDirection; leafObjects.clear(); @@ -566,7 +566,7 @@ inline void MbCubeTree::SetBranches( const std::vectorGetCube(); double pMin = UNDEFINED_DBL; double pMax = UNDEFINED_DBL; @@ -606,22 +606,22 @@ inline void MbCubeTree::SetBranches( const std::vector 0) || (upperCount > 0) ) { if ( lowerCount > 0 ) { // нижняя ветвь / lower branch - C3D_ASSERT ( lowerBranch == NULL ); - if ( lowerBranch == NULL ) + C3D_ASSERT ( lowerBranch == c3d_null ); + if ( lowerBranch == c3d_null ) lowerBranch = new MbCubeTree( dmType ); lowerBranch->InitTree( lowerArray, lowerGabarit, eda_anyDirection, tier+1, 0 ); lowerArray.clear(); } if ( upperCount > 0 ) { // верхняя ветвь / upper branch - C3D_ASSERT( upperBranch == NULL ); - if ( upperBranch == NULL ) + C3D_ASSERT( upperBranch == c3d_null ); + if ( upperBranch == c3d_null ) upperBranch = new MbCubeTree( dmType ); upperBranch->InitTree( upperArray, upperGabarit, eda_anyDirection, tier+1, 0 ); upperArray.clear(); } if ( midstCount > 0 ) { // центральная ветвь / central branch - C3D_ASSERT( midstBranch == NULL ); - if ( midstBranch == NULL ) + C3D_ASSERT( midstBranch == c3d_null ); + if ( midstBranch == c3d_null ) midstBranch = new MbCubeTree( dmType ); midstBranch->InitTree( midstArray, midstGabarit, direction, tier+1, 0 ); midstArray.clear(); @@ -650,7 +650,7 @@ inline void MbCubeTree::SetBranches( const std::vector::FillLeaf( const std::vector::FillLeaf( const std::vector inline bool MbCubeTree::IsReady() const { - return ( (midstBranch != NULL) || - (lowerBranch != NULL) || - (upperBranch != NULL) || + return ( (midstBranch != c3d_null) || + (lowerBranch != c3d_null) || + (upperBranch != c3d_null) || (leafObjects.size() > 0) ); } @@ -733,11 +733,11 @@ template inline size_t MbCubeTree::Count() const { size_t cnt = leafObjects.size(); - if ( midstBranch != NULL ) + if ( midstBranch != c3d_null ) cnt += midstBranch->Count(); - if ( lowerBranch != NULL ) + if ( lowerBranch != c3d_null ) cnt += lowerBranch->Count(); - if ( upperBranch != NULL ) + if ( upperBranch != c3d_null ) cnt += upperBranch->Count(); return cnt; } @@ -750,7 +750,7 @@ template inline void MbCubeTree::GetContainsObjects( const Point & pnt, double epsilon, std::vector & items ) const { - if ( (lowerBranch != NULL) || (upperBranch != NULL) || (midstBranch != NULL) ) { + if ( (lowerBranch != c3d_null) || (upperBranch != c3d_null) || (midstBranch != c3d_null) ) { double w = -MB_MAXDOUBLE; switch ( direction ) { @@ -765,13 +765,13 @@ inline void MbCubeTree::GetContainsObjects( const Point & pnt if ( (w < (minimum - epsilon)) || ((maximum + epsilon) < w) ) return; // вне области / out of region - if ( (w < (midst + epsilon)) && (lowerBranch != NULL) ) { + if ( (w < (midst + epsilon)) && (lowerBranch != c3d_null) ) { lowerBranch->GetContainsObjects( pnt, epsilon, items ); } - if ( ((midst - epsilon) < w) && (upperBranch != NULL) ) { + if ( ((midst - epsilon) < w) && (upperBranch != c3d_null) ) { upperBranch->GetContainsObjects( pnt, epsilon, items ); } - if ( ((lower - epsilon) < w) && (w < (upper + epsilon)) && (midstBranch != NULL) ) { + if ( ((lower - epsilon) < w) && (w < (upper + epsilon)) && (midstBranch != c3d_null) ) { midstBranch->GetContainsObjects( pnt, epsilon, items ); } } @@ -780,7 +780,7 @@ inline void MbCubeTree::GetContainsObjects( const Point & pnt items.reserve( items.size() + iCount ); for ( size_t i = 0; i < iCount; ++i ) { const ItemIndex & obj = leafObjects[i]; - if ( obj.first != NULL ) { + if ( obj.first != c3d_null ) { if ( obj.first->GetCube().Contains( pnt, epsilon ) ) items.push_back( obj.first ); } @@ -796,7 +796,7 @@ template inline void MbCubeTree::GetContainsObjects( const Point & pnt, double epsilon, c3d::IndicesVector & indices ) const { - if ( (lowerBranch != NULL) || (upperBranch != NULL) || (midstBranch != NULL) ) { + if ( (lowerBranch != c3d_null) || (upperBranch != c3d_null) || (midstBranch != c3d_null) ) { double w = -MB_MAXDOUBLE; switch ( direction ) { @@ -811,13 +811,13 @@ inline void MbCubeTree::GetContainsObjects( const Point & pnt if ( (w < (minimum - epsilon)) || ((maximum + epsilon) < w) ) return; // вне области / out of region - if ( (w < (midst + epsilon)) && (lowerBranch != NULL) ) { + if ( (w < (midst + epsilon)) && (lowerBranch != c3d_null) ) { lowerBranch->GetContainsObjects( pnt, epsilon, indices ); } - if ( ((midst - epsilon) < w) && (upperBranch != NULL) ) { + if ( ((midst - epsilon) < w) && (upperBranch != c3d_null) ) { upperBranch->GetContainsObjects( pnt, epsilon, indices ); } - if ( ((lower - epsilon) < w) && (w < (upper + epsilon)) && (midstBranch != NULL) ) { + if ( ((lower - epsilon) < w) && (w < (upper + epsilon)) && (midstBranch != c3d_null) ) { midstBranch->GetContainsObjects( pnt, epsilon, indices ); } } @@ -826,7 +826,7 @@ inline void MbCubeTree::GetContainsObjects( const Point & pnt indices.reserve( indices.size() + iCount ); for ( size_t i = 0; i < iCount; ++i ) { const ItemIndex & obj = leafObjects[i]; - if ( obj.first != NULL ) { + if ( obj.first != c3d_null ) { if ( obj.first->GetCube().Contains( pnt, epsilon ) ) indices.push_back( obj.second ); } @@ -843,7 +843,7 @@ inline void MbCubeTree::GetIntersectObjects( const Cube & gab std::vector & items, bool skipOwnself ) const { - if ( (lowerBranch != NULL) || (upperBranch != NULL) || (midstBranch != NULL) ) { + if ( (lowerBranch != c3d_null) || (upperBranch != c3d_null) || (midstBranch != c3d_null) ) { double wMin = MB_MAXDOUBLE; double wMax = -MB_MAXDOUBLE; @@ -856,13 +856,13 @@ inline void MbCubeTree::GetIntersectObjects( const Cube & gab if ( (wMax < minimum) || (maximum < wMin) ) return; // вне области / out of region - if ( (wMin < midst) && (lowerBranch != NULL) ) { + if ( (wMin < midst) && (lowerBranch != c3d_null) ) { lowerBranch->GetIntersectObjects( gabarit, epsilon, items, skipOwnself ); } - if ( (midst < wMax) && (upperBranch != NULL) ) { + if ( (midst < wMax) && (upperBranch != c3d_null) ) { upperBranch->GetIntersectObjects( gabarit, epsilon, items, skipOwnself ); } - if ( (lower < wMax) && (wMin < upper) && (midstBranch != NULL) ) { + if ( (lower < wMax) && (wMin < upper) && (midstBranch != c3d_null) ) { midstBranch->GetIntersectObjects( gabarit, epsilon, items, skipOwnself ); } } @@ -871,7 +871,7 @@ inline void MbCubeTree::GetIntersectObjects( const Cube & gab items.reserve( items.size() + iCount ); for ( size_t i = 0; i < iCount; ++i ) { const ItemIndex & obj = leafObjects[i]; - if ( obj.first != NULL ) { + if ( obj.first != c3d_null ) { if ( !skipOwnself || (&gabarit != &static_cast(obj.first->GetCube()) ) ) { // KOMPAS-20871 if ( obj.first->GetCube().Intersect( gabarit, epsilon ) ) items.push_back( obj.first ); @@ -890,7 +890,7 @@ inline void MbCubeTree::GetIntersectObjects( const Cube & gab c3d::IndicesVector & items, bool skipOwnself ) const { - if ( (lowerBranch != NULL) || (upperBranch != NULL) || (midstBranch != NULL) ) { + if ( (lowerBranch != c3d_null) || (upperBranch != c3d_null) || (midstBranch != c3d_null) ) { double wMin = MB_MAXDOUBLE; double wMax = -MB_MAXDOUBLE; @@ -906,13 +906,13 @@ inline void MbCubeTree::GetIntersectObjects( const Cube & gab if ( (wMax < minimum) || (maximum < wMin) ) return; // вне области / out of region - if ( (wMin < midst) && (lowerBranch != NULL) ) { + if ( (wMin < midst) && (lowerBranch != c3d_null) ) { lowerBranch->GetIntersectObjects( gabarit, epsilon, items, skipOwnself ); } - if ( (midst < wMax) && (upperBranch != NULL) ) { + if ( (midst < wMax) && (upperBranch != c3d_null) ) { upperBranch->GetIntersectObjects( gabarit, epsilon, items, skipOwnself ); } - if ( (lower < wMax) && (wMin < upper) && (midstBranch != NULL) ) { + if ( (lower < wMax) && (wMin < upper) && (midstBranch != c3d_null) ) { midstBranch->GetIntersectObjects( gabarit, epsilon, items, skipOwnself ); } } @@ -921,7 +921,7 @@ inline void MbCubeTree::GetIntersectObjects( const Cube & gab items.reserve( items.size() + iCount ); for ( size_t i = 0; i < iCount; ++i ) { const ItemIndex & obj = leafObjects[i]; - if ( obj.first != NULL ) { + if ( obj.first != c3d_null ) { if ( !skipOwnself || (&gabarit != &static_cast(obj.first->GetCube()) ) ) { // KOMPAS-20871 if ( obj.first->GetCube().Intersect( gabarit, epsilon ) ) items.push_back( obj.second ); @@ -961,7 +961,7 @@ inline double MbCubeTree::GetDistance( const Type & object, c template inline void MbCubeTree::FindNearestObject( const Cube & gabarit, double & distance, const Type *& item, double eps ) const { - if ( (lowerBranch != NULL) || (upperBranch != NULL) || (midstBranch != NULL) ) { + if ( (lowerBranch != c3d_null) || (upperBranch != c3d_null) || (midstBranch != c3d_null) ) { double wMin = MB_MAXDOUBLE; double wMax = -MB_MAXDOUBLE; @@ -977,20 +977,20 @@ inline void MbCubeTree::FindNearestObject( const Cube & gabar if ( (wMax < (minimum-distance)) || ((maximum+distance) < wMin) ) return; // вне области / out of region - if ( (wMin < (midst+distance)) && (lowerBranch != NULL) ) { + if ( (wMin < (midst+distance)) && (lowerBranch != c3d_null) ) { lowerBranch->FindNearestObject( gabarit, distance, item, eps ); } - if ( ((midst-distance) < wMax) && (upperBranch != NULL) ) { + if ( ((midst-distance) < wMax) && (upperBranch != c3d_null) ) { upperBranch->FindNearestObject( gabarit, distance, item, eps ); } - if ( ((lower-distance) < wMax) && (wMin < (upper+distance)) && (midstBranch != NULL) ) { + if ( ((lower-distance) < wMax) && (wMin < (upper+distance)) && (midstBranch != c3d_null) ) { midstBranch->FindNearestObject( gabarit, distance, item, eps ); } } else { // содержимое конечной ветви / final branch content for ( size_t i = 0, iCount = leafObjects.size(); i < iCount; ++i ) { const ItemIndex & obj = leafObjects[i]; - if ( obj.first != NULL ) { + if ( obj.first != c3d_null ) { double d = obj.first->GetCube().DistanceToCube( gabarit, eps ); if ( distance > d - eps ) { item = obj.first; @@ -1008,7 +1008,7 @@ inline void MbCubeTree::FindNearestObject( const Cube & gabar template inline void MbCubeTree::FindNearestObject( const Cube & gabarit, double & distance, size_t & index, double eps ) const { - if ( (lowerBranch != NULL) || (upperBranch != NULL) || (midstBranch != NULL) ) { + if ( (lowerBranch != c3d_null) || (upperBranch != c3d_null) || (midstBranch != c3d_null) ) { double wMin = MB_MAXDOUBLE; double wMax = -MB_MAXDOUBLE; @@ -1024,20 +1024,20 @@ inline void MbCubeTree::FindNearestObject( const Cube & gabar if ( (wMax < (minimum-distance)) || ((maximum+distance) < wMin) ) return; // вне области / out of region - if ( (wMin < (midst+distance)) && (lowerBranch != NULL) ) { + if ( (wMin < (midst+distance)) && (lowerBranch != c3d_null) ) { lowerBranch->FindNearestObject( gabarit, distance, index, eps ); } - if ( ((midst-distance) < wMax) && (upperBranch != NULL) ) { + if ( ((midst-distance) < wMax) && (upperBranch != c3d_null) ) { upperBranch->FindNearestObject( gabarit, distance, index, eps ); } - if ( ((lower-distance) < wMax) && (wMin < (upper+distance)) && (midstBranch != NULL) ) { + if ( ((lower-distance) < wMax) && (wMin < (upper+distance)) && (midstBranch != c3d_null) ) { midstBranch->FindNearestObject( gabarit, distance, index, eps ); } } else { // содержимое конечной ветви / final branch content for ( size_t i = 0, iCount = leafObjects.size(); i < iCount; ++i ) { const ItemIndex & obj = leafObjects[i]; - if ( obj.first != NULL ) { + if ( obj.first != c3d_null ) { double d = obj.first->GetCube().DistanceToCube( gabarit, eps ); if ( distance > d - eps ) { index = obj.second; @@ -1057,7 +1057,7 @@ inline void MbCubeTree::GetNearestObjects( const Cube & gabar std::vector & itemDistances, double eps ) const { - if ( (lowerBranch != NULL) || (upperBranch != NULL) || (midstBranch != NULL) ) { + if ( (lowerBranch != c3d_null) || (upperBranch != c3d_null) || (midstBranch != c3d_null) ) { double wMin = MB_MAXDOUBLE; double wMax = -MB_MAXDOUBLE; @@ -1073,20 +1073,20 @@ inline void MbCubeTree::GetNearestObjects( const Cube & gabar if ( (wMax < (minimum-distance)) || ((maximum+distance) < wMin) ) return; // вне области / out of region - if ( (wMin < (midst+distance)) && (lowerBranch != NULL) ) { + if ( (wMin < (midst+distance)) && (lowerBranch != c3d_null) ) { lowerBranch->GetNearestObjects( gabarit, distance, itemDistances, eps ); } - if ( ((midst-distance) < wMax) && (upperBranch != NULL) ) { + if ( ((midst-distance) < wMax) && (upperBranch != c3d_null) ) { upperBranch->GetNearestObjects( gabarit, distance, itemDistances, eps ); } - if ( ((lower-distance) < wMax) && (wMin < (upper+distance)) && (midstBranch != NULL) ) { + if ( ((lower-distance) < wMax) && (wMin < (upper+distance)) && (midstBranch != c3d_null) ) { midstBranch->GetNearestObjects( gabarit, distance, itemDistances, eps ); } } else { // содержимое конечной ветви / final branch content for ( size_t i = 0, iCount = leafObjects.size(); i < iCount; ++i ) { const ItemIndex & obj = leafObjects[i]; - if ( obj.first != NULL ) { + if ( obj.first != c3d_null ) { double d = obj.first->GetCube().DistanceToCube( gabarit, eps ); if ( distance > d - eps ) { IndexDistance itemDistance( obj.second, d ); @@ -1104,7 +1104,7 @@ inline void MbCubeTree::GetNearestObjects( const Cube & gabar template inline void MbCubeTree::FindNearestObject( const Point & pnt, double & distance, const Type *& item, double eps ) const { - if ( (lowerBranch != NULL) || (upperBranch != NULL) || (midstBranch != NULL) ) { + if ( (lowerBranch != c3d_null) || (upperBranch != c3d_null) || (midstBranch != c3d_null) ) { double w = -MB_MAXDOUBLE; switch ( direction ) { @@ -1119,20 +1119,20 @@ inline void MbCubeTree::FindNearestObject( const Point & pnt, if ( (w < (minimum-distance)) || ((maximum+distance) < w) ) return; // вне области / out of region - if ( (w < (midst+distance)) && (lowerBranch != NULL) ) { + if ( (w < (midst+distance)) && (lowerBranch != c3d_null) ) { lowerBranch->FindNearestObject( pnt, distance, item ); } - if ( ((midst-distance) < w) && (upperBranch != NULL) ) { + if ( ((midst-distance) < w) && (upperBranch != c3d_null) ) { upperBranch->FindNearestObject( pnt, distance, item ); } - if ( ((lower-distance) < w) && (w < (upper+distance)) && (midstBranch != NULL) ) { + if ( ((lower-distance) < w) && (w < (upper+distance)) && (midstBranch != c3d_null) ) { midstBranch->FindNearestObject( pnt, distance, item ); } } else { // содержимое конечной ветви / final branch content for ( size_t i = 0, iCount = leafObjects.size(); i < iCount; ++i ) { const ItemIndex & obj = leafObjects[i]; - if ( obj.first != NULL ) { + if ( obj.first != c3d_null ) { double d = GetDistance( *obj.first, pnt, false ); if ( distance > d - eps ) { item = obj.first; @@ -1150,7 +1150,7 @@ inline void MbCubeTree::FindNearestObject( const Point & pnt, template inline void MbCubeTree::FindNearestObject( const Point & pnt, double & distance, size_t & index, double eps ) const { - if ( (lowerBranch != NULL) || (upperBranch != NULL) || (midstBranch != NULL) ) { + if ( (lowerBranch != c3d_null) || (upperBranch != c3d_null) || (midstBranch != c3d_null) ) { double w = -MB_MAXDOUBLE; switch ( direction ) { @@ -1165,20 +1165,20 @@ inline void MbCubeTree::FindNearestObject( const Point & pnt, if ( (w < (minimum-distance)) || ((maximum+distance) < w) ) return; // вне области / out of region - if ( (w < (midst+distance)) && (lowerBranch != NULL) ) { + if ( (w < (midst+distance)) && (lowerBranch != c3d_null) ) { lowerBranch->FindNearestObject( pnt, distance, index ); } - if ( ((midst-distance) < w) && (upperBranch != NULL) ) { + if ( ((midst-distance) < w) && (upperBranch != c3d_null) ) { upperBranch->FindNearestObject( pnt, distance, index ); } - if ( ((lower-distance) < w) && (w < (upper+distance)) && (midstBranch != NULL) ) { + if ( ((lower-distance) < w) && (w < (upper+distance)) && (midstBranch != c3d_null) ) { midstBranch->FindNearestObject( pnt, distance, index ); } } else { // содержимое конечной ветви / final branch content for ( size_t i = 0, iCount = leafObjects.size(); i < iCount; ++i ) { const ItemIndex & obj = leafObjects[i]; - if ( obj.first != NULL ) { + if ( obj.first != c3d_null ) { double d = GetDistance( *obj.first, pnt, false ); if ( distance > d - eps ) { index = obj.second; @@ -1198,7 +1198,7 @@ inline void MbCubeTree::GetNearestObjects( const Point & pnt, std::vector & itemDistances, double eps ) const { - if ( (lowerBranch != NULL) || (upperBranch != NULL) || (midstBranch != NULL) ) { + if ( (lowerBranch != c3d_null) || (upperBranch != c3d_null) || (midstBranch != c3d_null) ) { double w = -MB_MAXDOUBLE; switch ( direction ) { @@ -1213,13 +1213,13 @@ inline void MbCubeTree::GetNearestObjects( const Point & pnt, if ( (w < (minimum-distance)) || ((maximum+distance) < w) ) return; // вне области / out of region - if ( (w < (midst+distance)) && (lowerBranch != NULL) ) { + if ( (w < (midst+distance)) && (lowerBranch != c3d_null) ) { lowerBranch->GetNearestObjects( pnt, distance, itemDistances ); } - if ( ((midst-distance) < w) && (upperBranch != NULL) ) { + if ( ((midst-distance) < w) && (upperBranch != c3d_null) ) { upperBranch->GetNearestObjects( pnt, distance, itemDistances ); } - if ( ((lower-distance) < w) && (w < (upper+distance)) && (midstBranch != NULL) ) { + if ( ((lower-distance) < w) && (w < (upper+distance)) && (midstBranch != c3d_null) ) { midstBranch->GetNearestObjects( pnt, distance, itemDistances ); } } @@ -1228,7 +1228,7 @@ inline void MbCubeTree::GetNearestObjects( const Point & pnt, itemDistances.reserve( itemDistances.size() + iCount ); for ( size_t i = 0; i < iCount; ++i ) { const ItemIndex & obj = leafObjects[i]; - if ( obj.first != NULL ) { + if ( obj.first != c3d_null ) { double d = GetDistance( *obj.first, pnt, true ); if ( distance > d - eps ) { ItemDistance itemDistance( obj.first, d ); @@ -1248,7 +1248,7 @@ inline void MbCubeTree::GetNearestObjects( const Point & pnt, std::vector & itemDistances, double eps ) const { - if ( (lowerBranch != NULL) || (upperBranch != NULL) || (midstBranch != NULL) ) { + if ( (lowerBranch != c3d_null) || (upperBranch != c3d_null) || (midstBranch != c3d_null) ) { double w = -MB_MAXDOUBLE; switch ( direction ) { @@ -1263,13 +1263,13 @@ inline void MbCubeTree::GetNearestObjects( const Point & pnt, if ( (w < (minimum-distance)) || ((maximum+distance) < w) ) return; // вне области / out of region - if ( (w < (midst+distance)) && (lowerBranch != NULL) ) { + if ( (w < (midst+distance)) && (lowerBranch != c3d_null) ) { lowerBranch->GetNearestObjects( pnt, distance, itemDistances ); } - if ( ((midst-distance) < w) && (upperBranch != NULL) ) { + if ( ((midst-distance) < w) && (upperBranch != c3d_null) ) { upperBranch->GetNearestObjects( pnt, distance, itemDistances ); } - if ( ((lower-distance) < w) && (w < (upper+distance)) && (midstBranch != NULL) ) { + if ( ((lower-distance) < w) && (w < (upper+distance)) && (midstBranch != c3d_null) ) { midstBranch->GetNearestObjects( pnt, distance, itemDistances ); } } @@ -1278,7 +1278,7 @@ inline void MbCubeTree::GetNearestObjects( const Point & pnt, itemDistances.reserve( itemDistances.size() + iCount ); for ( size_t i = 0; i < iCount; ++i ) { const ItemIndex & obj = leafObjects[i]; - if ( obj.first != NULL ) { + if ( obj.first != c3d_null ) { double d = GetDistance( *obj.first, pnt, true ); if ( distance > d - eps ) { IndexDistance itemDistance( obj.second, d ); @@ -1298,7 +1298,7 @@ inline void MbCubeTree::GetNearestObjects( const Point & pnt, c3d::IndicesVector & itemDistances, double eps ) const { - if ( (lowerBranch != NULL) || (upperBranch != NULL) || (midstBranch != NULL) ) { + if ( (lowerBranch != c3d_null) || (upperBranch != c3d_null) || (midstBranch != c3d_null) ) { double w = -MB_MAXDOUBLE; switch ( direction ) { @@ -1313,13 +1313,13 @@ inline void MbCubeTree::GetNearestObjects( const Point & pnt, if ( (w < (minimum-distance)) || ((maximum+distance) < w) ) return; // вне области / out of region - if ( (w < (midst+distance)) && (lowerBranch != NULL) ) { + if ( (w < (midst+distance)) && (lowerBranch != c3d_null) ) { lowerBranch->GetNearestObjects( pnt, distance, itemDistances ); } - if ( ((midst-distance) < w) && (upperBranch != NULL) ) { + if ( ((midst-distance) < w) && (upperBranch != c3d_null) ) { upperBranch->GetNearestObjects( pnt, distance, itemDistances ); } - if ( ((lower-distance) < w) && (w < (upper+distance)) && (midstBranch != NULL) ) { + if ( ((lower-distance) < w) && (w < (upper+distance)) && (midstBranch != c3d_null) ) { midstBranch->GetNearestObjects( pnt, distance, itemDistances ); } } @@ -1328,7 +1328,7 @@ inline void MbCubeTree::GetNearestObjects( const Point & pnt, itemDistances.reserve( itemDistances.size() + iCount ); for ( size_t i = 0; i < iCount; ++i ) { const ItemIndex & obj = leafObjects[i]; - if ( obj.first != NULL ) { + if ( obj.first != c3d_null ) { double d = GetDistance( *obj.first, pnt, true ); if ( distance > d - eps ) { itemDistances.push_back( obj.second ); diff --git a/C3d/Include/mb_data.h b/C3d/Include/mb_data.h index 6627a43..98b6b2a 100644 --- a/C3d/Include/mb_data.h +++ b/C3d/Include/mb_data.h @@ -545,12 +545,12 @@ public: size_t numberOfIterationsVCurve; ///< \ru Количество итераций построения V-кривой (заданное и фактическое). \en The number of iterations for building the V-curve (given and actual). double realAccuracyBSpl; ///< \ru Точность построения B-сплайна (заданная и фактическая). \en The accuracy of creating the B-spline (given and actual). double realAccuracyVCurve; ///< \ru Точность построения V-кривой (заданная и фактическая). \en The accuracy of creating the V-curve (given and actual). - /// \ru Параметры аппроксимации V-кривой. \en Params of Approximation of V-curve. - bool switchEndTangents; ///< \ru Флаги учета значений концевых касательных. \en Flags accounting tangents values. - bool switchEndCurvature; ///< \ru Флаги учета значений кривизны. \en Flags accounting curvature values. - MbVector3D firstTangent; ///< \ru Касательная в начальной точке. \en Tangent in the first point. - MbVector3D lastTangent; ///< \ru Касательная в конечной точке. \en Tangent in the last point. - double firstCurvature; ///< \ru Значение кривизны в начальной точке. \en Curvature in the first point. + /// \ru Параметры аппроксимации V-кривой. \en Params of Approximation of V-curve. + bool switchEndTangents; ///< \ru Флаги учета значений концевых касательных. \en Flags accounting tangents values. + bool switchEndCurvature; ///< \ru Флаги учета значений кривизны. \en Flags accounting curvature values. + MbVector3D firstTangent; ///< \ru Касательная в начальной точке. \en Tangent in the first point. + MbVector3D lastTangent; ///< \ru Касательная в конечной точке. \en Tangent in the last point. + double firstCurvature; ///< \ru Значение кривизны в начальной точке. \en Curvature in the first point. double lastCurvature; ///< \ru Значение кривизны в конечной точке. \en Curvature in the last point. @@ -561,17 +561,19 @@ public: public: /// \ru Пустой конструктор. \en Empty constructor. MbFairCurveData() : - closed( false ), fairing( false ), arrange( false ), subdivision( fairSubdiv_Single ), + //closed( false ), fairing( false ), arrange( false ), subdivision( fairSubdiv_Single ), + closed( false ), fairing( true ), arrange( false ), subdivision( fairSubdiv_Single ), //DEBUG 2020 25 accountCurvature( fairCur_No ), accountInflexVector( fairVector_SegmentDir ), fixPntTng( fixPntTng_NotFix ), - approx( fairApprox_KnotsSpline ), create( 1 ), degreeBSpline( 8 ), + //approx( fairApprox_KnotsSpline ), create( 1 ), degreeBSpline( 8 ), + approx( fairApprox_IsoNurbs ), create( 1 ), degreeBSpline( 8 ), //DEBUG 2020 25 initFormat( fairFormat_Open ), outFormat( fairFormat_Close ), nSegments( 4 ), numSegment( 0 ), tParam( 0.5 ), warning( fwarn_Success ), error( rt_Success ), clothoidRMin( 50.0 ), clothoidLMax( 200.0 ), clothoidSegms( 10 ), numberOfIterationsBSpl( 500 ), numberOfIterationsVCurve( 192 ), #ifdef C3D_DEBUG_FAIR_CURVES - prt( C3D_NULL_PTR ), + prt( c3d_null ), #endif realAccuracyBSpl( METRIC_ACCURACY ), realAccuracyVCurve( METRIC_EPSILON ), switchEndTangents( false ), switchEndCurvature( false ), @@ -600,19 +602,56 @@ public: clothoidRMin = other.clothoidRMin; clothoidLMax = other.clothoidLMax; clothoidSegms = other.clothoidSegms; - numberOfIterationsBSpl = other.numberOfIterationsBSpl; - numberOfIterationsVCurve = other.numberOfIterationsVCurve; - realAccuracyBSpl = other.realAccuracyBSpl; - realAccuracyVCurve = other.realAccuracyVCurve; - switchEndTangents = other.switchEndTangents; - switchEndCurvature = other.switchEndCurvature; - firstTangent = other.firstTangent; - lastTangent = other.lastTangent; - firstCurvature = other.firstCurvature; + numberOfIterationsBSpl = other.numberOfIterationsBSpl; + numberOfIterationsVCurve = other.numberOfIterationsVCurve; + realAccuracyBSpl = other.realAccuracyBSpl; + realAccuracyVCurve = other.realAccuracyVCurve; + switchEndTangents = other.switchEndTangents; + switchEndCurvature = other.switchEndCurvature; + firstTangent = other.firstTangent; + lastTangent = other.lastTangent; + firstCurvature = other.firstCurvature; lastCurvature = other.lastCurvature; return *this; } }; // MbFairCurveData +//------------------------------------------------------------------------------ +/** \brief \ru Параметры для проверки, является ли кривая плоской. + \en Parameters for checking if the curve is planar. \~ + \details \ru Параметры для проверки, является ли кривая плоской. + \en Parameters for checking if the curve is planar. \~ +*/ +// --- +struct PlanarCheckParams { + double accuracy; + VERSION version; + + /// \ru Конструктор по умолчанию. \en Default constructor. + PlanarCheckParams() + : accuracy( METRIC_EPSILON ) + , version( Math::DefaultMathVersion() ) + {} + + /// \ru Конструктор. \en Constructor. + explicit PlanarCheckParams( double accuracy_ ) + : accuracy( accuracy_ ) + , version( Math::DefaultMathVersion() ) + {} + + /// \ru Конструктор. \en Constructor. + PlanarCheckParams( double accuracy_, VERSION version_ ) + : accuracy( accuracy_ ) + , version( version_ ) + {} + + /// \ru Конструктор копирования. \en Copy-constructor. + PlanarCheckParams( const PlanarCheckParams & other ) + : accuracy( other.accuracy ) + , version( other.version ) + {} +}; + + #endif // __MB_DATA_H diff --git a/C3d/Include/mb_dimension.h b/C3d/Include/mb_dimension.h index f48fa9c..70a5bd6 100644 --- a/C3d/Include/mb_dimension.h +++ b/C3d/Include/mb_dimension.h @@ -83,12 +83,12 @@ public: \en \name Common functions of a geometric object. \{ */ virtual MbeSpaceType IsA() const; - virtual MbSpaceItem & Duplicate(MbRegDuplicate * = NULL) const; + virtual MbSpaceItem & Duplicate(MbRegDuplicate * = c3d_null) const; virtual bool IsSame(const MbSpaceItem & /*other*/, double /*accuracy*/ = LENGTH_EPSILON) const; virtual bool SetEqual(const MbSpaceItem &); - virtual void Transform(const MbMatrix3D &, MbRegTransform * = NULL); - virtual void Move(const MbVector3D &, MbRegTransform * = NULL); - virtual void Rotate(const MbAxis3D &, double, MbRegTransform * = NULL); + virtual void Transform(const MbMatrix3D &, MbRegTransform * = c3d_null); + virtual void Move(const MbVector3D &, MbRegTransform * = c3d_null); + virtual void Rotate(const MbAxis3D &, double, MbRegTransform * = c3d_null); virtual double DistanceToPoint(const MbCartPoint3D &) const; virtual void AddYourGabaritTo(MbCube &) const; virtual void CalculateMesh( const MbStepData & stepData, const MbFormNote & note, MbMesh & mesh ) const; // \ru Построить полигональную копию mesh. \en Build polygonal copy mesh. @@ -155,12 +155,12 @@ public: \en \name Common functions of a geometric object. \{ */ virtual MbeSpaceType IsA() const; - virtual MbSpaceItem & Duplicate(MbRegDuplicate * = NULL) const; + virtual MbSpaceItem & Duplicate(MbRegDuplicate * = c3d_null) const; virtual bool IsSame(const MbSpaceItem & /*other*/, double /*accuracy*/ = LENGTH_EPSILON) const; virtual bool SetEqual(const MbSpaceItem &); - virtual void Transform(const MbMatrix3D &, MbRegTransform * = NULL); - virtual void Move(const MbVector3D &, MbRegTransform * = NULL); - virtual void Rotate(const MbAxis3D &, double, MbRegTransform * = NULL); + virtual void Transform(const MbMatrix3D &, MbRegTransform * = c3d_null); + virtual void Move(const MbVector3D &, MbRegTransform * = c3d_null); + virtual void Rotate(const MbAxis3D &, double, MbRegTransform * = c3d_null); virtual double DistanceToPoint(const MbCartPoint3D &) const; virtual void AddYourGabaritTo(MbCube &) const; virtual void CalculateMesh( const MbStepData & stepData, const MbFormNote & note, MbMesh & mesh ) const; // \ru Построить полигональную копию mesh. \en Build polygonal copy mesh. @@ -231,12 +231,12 @@ public: \en \name Common functions of a geometric object. \{ */ virtual MbeSpaceType IsA() const; - virtual MbSpaceItem & Duplicate(MbRegDuplicate * = NULL) const; + virtual MbSpaceItem & Duplicate(MbRegDuplicate * = c3d_null) const; virtual bool IsSame(const MbSpaceItem & /*other*/, double /*accuracy*/ = LENGTH_EPSILON) const; virtual bool SetEqual(const MbSpaceItem &); - virtual void Transform(const MbMatrix3D &, MbRegTransform * = NULL); - virtual void Move(const MbVector3D &, MbRegTransform * = NULL); - virtual void Rotate(const MbAxis3D &, double, MbRegTransform * = NULL); + virtual void Transform(const MbMatrix3D &, MbRegTransform * = c3d_null); + virtual void Move(const MbVector3D &, MbRegTransform * = c3d_null); + virtual void Rotate(const MbAxis3D &, double, MbRegTransform * = c3d_null); virtual double DistanceToPoint(const MbCartPoint3D &) const; virtual void AddYourGabaritTo(MbCube &) const; virtual void CalculateMesh( const MbStepData & stepData, const MbFormNote & note, MbMesh & mesh ) const; // \ru Построить полигональную копию mesh. \en Build polygonal copy mesh. diff --git a/C3d/Include/mb_homogeneous.h b/C3d/Include/mb_homogeneous.h index a07fbc1..88a184d 100644 --- a/C3d/Include/mb_homogeneous.h +++ b/C3d/Include/mb_homogeneous.h @@ -513,12 +513,12 @@ namespace c3d // namespace C3D */ // --- template< typename ParamContainer, typename PointContainer > -void SplitHomoVector( const SArray & hList, PointContainer & uvList, ParamContainer * tList = NULL ) +void SplitHomoVector( const SArray & hList, PointContainer & uvList, ParamContainer * tList = c3d_null ) { const size_t sz = hList.size(); uvList.clear(); uvList.reserve( sz ); - if ( tList != NULL ) { + if ( tList != c3d_null ) { tList->clear(); tList->reserve( sz ); for ( size_t n = 0; n < sz; n++ ) { diff --git a/C3d/Include/mb_matrix3d.h b/C3d/Include/mb_matrix3d.h index 56e4819..21eb18c 100644 --- a/C3d/Include/mb_matrix3d.h +++ b/C3d/Include/mb_matrix3d.h @@ -845,7 +845,7 @@ inline bool MbMatrix3D::IsSame( const MbMatrix3D & m2, double accuracy ) const /** \brief \ru Извлечь углы Эйлера из ротационной подматрицы R = Rx*Ry*Rz. \en Extract the Euler angles from the rotational submatrix R = Rx*Ry*Rz. \param[in] trans - \ru Матрица преобразования, содержащая подматрицу вращения. - \en The transformaton matrix containig the rotational submatrix. \~ + \en The transformation matrix containing the rotational sub-matrix. \~ \param[out] alpha - \ru Угол поворота вокруг оси "X", извлеченный из матрицы вращения. \en Angle of rotation around the "X" axis extracted from the rotation matrix. \~ \param[out] betta - \ru Угол поворота вокруг оси "Y", извлеченный из матрицы вращения. @@ -855,22 +855,22 @@ inline bool MbMatrix3D::IsSame( const MbMatrix3D & m2, double accuracy ) const \details \ru Функция разлагает подматрицу вращения на элементарные повороты вокруг осей R = Rx*Ry*Rz, заданные в виде угловых значений, а именно значения в радианах, определяющую присланную матрицу вращения R - в виде комбинации (произведения) из трех элементарных поворотов: R = Rx*Ry*Rz<\b>, где\n + в виде комбинации (произведения) из трех элементарных поворотов: R = Rx*Ry*Rz, где\n Rx = Rx(alpha) - поворот вокруг оси "X", \n Ry = Ry(betta) - поворот вокруг оси "Y", \n Rz = Rz(gamma) - поворот вокруг оси "Z" и \n - R - ротационная подматрица 3x3 из матрицы trans<\b>. - Матрица trans может содержать любые преобразования, вклячая масштабирование и сдвиг. + R - ротационная подматрица 3x3 из матрицы trans. + Матрица trans может содержать любые преобразования, включая масштабирование и сдвиг. Метод ExtractEulerAngles извлечет из данной матрицы вращающий компонент и разложит его на три вращения: Rx(alpha), Ry(betta), Rz(gamma). \en The function factorizes the rotation submatrix into elementary rotations about the axes: R = Rx * Ry * Rz, - given in the form of angular values, namely the values in radians, specifing the rotation submatrix R of the given trans<\b> - in the form of a combination (product) of three elementary rotations: R = Rx * Ry * Rz <\b>, where \n + given in the form of angular values, namely the values in radians, specifying the rotation sub-matrix R of the given trans + in the form of a combination (product) of three elementary rotations: R = Rx * Ry * Rz , where \n Rx = Rx(alpha) - rotation around X-axis, \n Ry = Ry(betta) - rotation around Y-axis, \n Rz = Rz(gamma) - rotation around Z-axis and \n - R is a rotational 3x3 submatrix from the matrix trans<\b>. + R is a rotational 3x3 sub-matrix from the matrix trans. The matrix trans can contain any transformations including the scaling and the shear. The ExtractEulerAngles method extracts from the given matrix a rotating component and decomposes it into three rotations: Rx( alpha ), Ry( betta ), Rz( gamma ). diff --git a/C3d/Include/mb_matrixnn.h b/C3d/Include/mb_matrixnn.h index b88d6a3..5ff3916 100644 --- a/C3d/Include/mb_matrixnn.h +++ b/C3d/Include/mb_matrixnn.h @@ -29,12 +29,12 @@ private : protected: /// \ru Конструктор. \en Constructor. - MatrixNN() : parr( NULL ), n( 0 ) {} + MatrixNN() : parr( c3d_null ), n( 0 ) {} /// \ru Конструктор по заданной размерности. \en The constructor by a given dimension. - MatrixNN( size_t dim ) : parr( NULL ), n( 0 ) { SetSize( dim ); } + MatrixNN( size_t dim ) : parr( c3d_null ), n( 0 ) { SetSize( dim ); } public: /// \ru Конструктор ограниченной размерности. \en The constructor of restricted dimension. - MatrixNN ( const uint16 & dim ) : parr( NULL ), n( 0 ) { SetSize( dim ); } + MatrixNN ( const uint16 & dim ) : parr( c3d_null ), n( 0 ) { SetSize( dim ); } /// \ru Конструктор копирования. \en The copy constructor. explicit MatrixNN ( const MatrixNN & ); /// \ru Деструктор. \en Destructor. @@ -116,10 +116,10 @@ private: */ // --- template -MbeNewtonResult TypedGaussEquation ( MatrixNN & a, Type * b, double epsilon, ProgressBarWrapper * baseProgBar = NULL ) +MbeNewtonResult TypedGaussEquation ( MatrixNN & a, Type * b, double epsilon, ProgressBarWrapper * baseProgBar = c3d_null ) { - ProgressBarWrapper * progBar = NULL; - if ( baseProgBar != NULL ) { + ProgressBarWrapper * progBar = c3d_null; + if ( baseProgBar != c3d_null ) { StrData strData( pbarId_Solve_LinearEquationsSystem ); progBar = &baseProgBar->CreateChildAddRef( strData ); } @@ -235,6 +235,174 @@ MbeNewtonResult TypedGaussEquation ( MatrixNN & a, Type * b, double epsilon, Pro } // GaussEquation +//------------------------------------------------------------------------------ +/** \brief \ru Решение системы линейных уравнений методом исключения Гаусса. + \en System of linear equations is solved by the Gauss method. \~ + \details \ru Решение системы линейных уравнений методом исключения Гаусса. \n + \en System of linear equations is solved by the Gauss method. \n \~ + \param[in] a - \ru Матрица коэффициентов при неизвестных + \en Coefficient matrix \~ + \param[in] b - \ru Массив правых частей, в него же помещается результат решения + \en Array of right parts, on output it contains the result of the solution \~ + \param[in] epsilon - \ru Погрешность решения + \en Tolerance of solution \~ + \param[in] baseProgBar - \ru Индикатор процесса решения + \en Progress indicator of solution \~ + \return \ru Код ошибки: если nr_Success (+1), то система решена, если nr_Special, то нет решений или система вырождена. + \en Error code: if nr_Success (+1), then the system is solved, if nr_Special, there is no solution or the system is degenerate. \~ + \ingroup Base_Items +*/ +// --- +template +MbeNewtonResult TypedGaussEquationWithBandMatrix( SparseMatrix & a, Type * b, double epsilon, ProgressBarWrapper * baseProgBar = c3d_null ) +{ + ProgressBarWrapper * progBar = c3d_null; + if ( baseProgBar != c3d_null ) { + StrData strData( pbarId_Solve_LinearEquationsSystem ); + progBar = &baseProgBar->CreateChildAddRef( strData ); + } + + ptrdiff_t count = (ptrdiff_t)std_min( a.Lines(), a.Columns() ); + C3D_ASSERT( a.Lines() == a.Columns() ); + + if ( count < 1 ) { + ::FinishProgressBar( progBar ); + ::ReleaseItem( progBar ); + return nr_Special; + } + + ptrdiff_t i, j, k; + + ptrdiff_t halfCount = count / 2; + + std::vector nzIndices; + c3d::IndicesPair searchRange; + + a.NzUpdate(); + + for ( k = 0; k < count - 1; k++ ) { + // \ru Переставить уравнения так, чтобы a[k][k] != 0 \en Swap equations so that a[k][k] != 0 + ptrdiff_t l = k; + double tmp = ::fabs( a.GetElem( k, k ) ); + for ( i = k + 1; i < count; i++ ) { + double faik = ::fabs( a.GetElem( i, k ) ); + if ( faik > tmp ) { + l = i; + tmp = faik; + } + } + + if ( k == halfCount ) + ::SetProgressBarValue( progBar, 25 ); + if ( ::StopProgressBar( progBar ) ) { // \ru Остановка по запросу \en Stop by request + ::ReleaseItem( progBar ); + return nr_Special; + } + + if ( l != k ) { + a.SwapLines( k, l ); + std::swap( b[k], b[l] ); + } + + if ( ::StopProgressBar( progBar ) ) { // \ru Остановка по запросу \en Stop by request + ::ReleaseItem( progBar ); + return nr_Special; + } + + tmp = a.GetElem(k, k); + + if ( ::fabs( tmp ) < epsilon ) { + ::FinishProgressBar( progBar ); + ::ReleaseItem( progBar ); + return nr_Special; // \ru Система не имеет решений \en System doesn't have solutions + } + + tmp = 1.0 / tmp; + + for ( i = k + 1; i < count; i++ ) { + double aik = a.GetElem( i, k ); + if ( ::fabs(aik) > NULL_EPSILON ) { + double m = aik * tmp; + a.SetElem( i, k, 0.0 ); + aik = 0.0; + + nzIndices.clear(); + if ( k + 1 < count ) { + // [k+1,count) + searchRange.first = (k + 1); + searchRange.second = (count - 1); + a.NzIndices( k, searchRange, nzIndices ); + } + size_t nzCnt = nzIndices.size(); + + for ( size_t nzInd = 0; nzInd < nzCnt; ++nzInd ) { + j = nzIndices[nzInd]; + double ae = a.GetElem( k, j ) * m; + if ( ::fabs(ae) > NULL_EPSILON ) { + ae = a.GetElem( i, j ) - ae; + a.SetElem( i, j, ae ); + } + } + b[i] -= b[k] * m; + } + } + + if ( ::StopProgressBar( progBar ) ) { // \ru Остановка по запросу \en Stop by request + ::ReleaseItem( progBar ); + return nr_Special; + } + } + + a.NzUpdate(); + + ::SetProgressBarValue( progBar, 50 ); + + if ( ::fabs( a.GetElem(k, k) ) < epsilon ) { + ::FinishProgressBar( progBar ); + ::ReleaseItem( progBar ); + return nr_Special; // \ru Система не имеет решений \en System doesn't have solutions + } + + // \ru Обратная подстановка \en Back-substitution + i = count - 1; + b[i] *= 1.0 / a.GetElem(i, i); + + Type be; + for ( i = count - 2; i >= 0; i-- ) { + j = i + 1; + be = b[j] * a.GetElem( i, j ); + + nzIndices.clear(); + if ( i + 2 < count ) { + // [i+2,count) + searchRange.first = (i + 2); + searchRange.second = (count - 1); + a.NzIndices( i, searchRange, nzIndices ); + } + size_t nzCnt = nzIndices.size(); + + for ( size_t nzInd = 0; nzInd < nzCnt; ++nzInd ) { + j = nzIndices[nzInd]; + be += b[j] * a.GetElem( i, j ); + } + double m = 1.0 / a.GetElem( i, i ); + b[i] = ( b[i] - be ) * m; + + if ( i == halfCount ) + ::SetProgressBarValue( progBar, 75 ); + if ( ::StopProgressBar( progBar ) ) { // \ru Остановка по запросу \en Stop by request + ::ReleaseItem( progBar ); + return nr_Special; + } + } + + ::SetProgressBarValue( progBar, 100 ); + ::FinishProgressBar( progBar ); + ::ReleaseItem( progBar ); + return nr_Success; +} // GaussEquation + + //------------------------------------------------------------------------------ /** \brief \ru Решение системы линейных уравнений с трехдиагональной матрицей методом прогонки. @@ -249,8 +417,8 @@ MbeNewtonResult TypedGaussEquation ( MatrixNN & a, Type * b, double epsilon, Pro \en Main diagonal of a tridiagonal matrix is an array of doubles of size "n" \~ \param[in] b - \ru Верхняя диагональ, размерность n-1 \en Upper diagonal, dimension is n-1 \~ - \param[in] \ru С - нижняя диагональ, размерность n-1 - \en C- lower diagonal, dimension is n-1 \~ + \param[in] c - \ru c - нижняя диагональ, размерность n-1 + \en c - lower diagonal, dimension is n-1 \~ \param[in] r - \ru Вектор правой части, массив точек или векторов размерности n; должна быть определена операция умножения на double справа \en Vector of the right part is an array of points or vectors of dimension n; the multiplication operation by the double value on the right must be defined \~ \param[in] solution - \ru Массив решений (точек, векторов), размерности n diff --git a/C3d/Include/mb_nurbs_function.h b/C3d/Include/mb_nurbs_function.h index 5651beb..a9d48ca 100644 --- a/C3d/Include/mb_nurbs_function.h +++ b/C3d/Include/mb_nurbs_function.h @@ -15,6 +15,7 @@ #include #include +#include #include #include #include @@ -343,7 +344,8 @@ double GetParamDistance( const Type & p1, const Type & p2, MbeSplineParamType sp \ingroup Base_Algorithms */ // --- -inline bool IsValidNurbsParams( size_t degree, bool closed, size_t pcnt ) +inline +bool IsValidNurbsParams( size_t degree, bool closed, size_t pcnt ) { // \ru 1. Порядок B-сплайна должен быть не менее 2. \en 1. The order of B-spline must be at least 2. // \ru 2а. Для незамкнутой кривой количество точек не меньше порядка сплайна. \en 2a. The number of open curve points isn't less than the order of spline. @@ -370,7 +372,8 @@ inline bool IsValidNurbsParams( size_t degree, bool closed, size_t pcnt ) \ingroup Base_Algorithms */ // --- -inline bool IsValidNurbsParams( size_t degree, bool closed, size_t pcnt, size_t wcnt ) +inline +bool IsValidNurbsParams( size_t degree, bool closed, size_t pcnt, size_t wcnt ) { // \ru 1. Порядок B-сплайна должен быть не менее 2. \en 1. The order of B-spline must be at least 2. // \ru 2а. Для незамкнутой кривой количество точек не меньше порядка сплайна. \en 2a. The number of open curve points isn't less than the order of spline. @@ -401,7 +404,8 @@ inline bool IsValidNurbsParams( size_t degree, bool closed, size_t pcnt, size_t \ingroup Base_Algorithms */ // --- -inline bool IsValidNurbsParams( size_t degree, bool closed, size_t pcnt, size_t wcnt, size_t kcnt ) +inline +bool IsValidNurbsParams( size_t degree, bool closed, size_t pcnt, size_t wcnt, size_t kcnt ) { // \ru 1. Порядок B-сплайна должен быть не менее 2. \en 1. The order of B-spline must be at least 2. // \ru 2а. Для незамкнутой кривой количество точек не меньше порядка сплайна. \en 2a. The number of open curve points isn't less than the order of spline. @@ -446,7 +450,7 @@ bool IsValidNurbsParamsExt( size_t degree, bool closed, size_t pcnt, ( knots.size() == (degree + pcnt + (closed ? (degree - 1) : 0)) ); if ( res ) { - if ( !c3d::IsMonotonic(knots, true, true) ) + if ( !c3d::IsMonotonic( knots, true, true ) ) res = false; // SD#7118498 } @@ -476,7 +480,7 @@ bool IsValidNurbsParamsExt( size_t degree, bool closed, size_t pcnt, template bool IsValidNurbsParamsExt( size_t degree, bool closed, const PointVector & pnts, const DoubleVector * wts, - const DoubleVector * knots = NULL ) + const DoubleVector * knots = c3d_null ) { // \ru 1. Порядок B-сплайна должен быть не менее 2. \en 1. The order of B-spline must be at least 2. // \ru 2а. Для незамкнутой кривой количество точек не меньше порядка сплайна. \en 2a. The number of open curve points isn't less than the order of spline. @@ -487,11 +491,11 @@ bool IsValidNurbsParamsExt( size_t degree, bool closed, const PointVector & pnts size_t pcnt = pnts.size(); bool res = ::IsValidNurbsParams( degree, closed, pcnt ) && - ( (wts == NULL) || (wts->size() == pcnt) ) && - ( (knots == NULL) || (knots->size() == (degree + pcnt + (closed ? (degree - 1) : 0))) ); + ( (wts == c3d_null) || (wts->size() == pcnt) ) && + ( (knots == c3d_null) || (knots->size() == (degree + pcnt + (closed ? (degree - 1) : 0))) ); - if ( res && (knots != NULL) ) { - if ( !c3d::IsMonotonic(*knots, true, true) ) + if ( res && (knots != c3d_null) ) { + if ( !c3d::IsMonotonic( *knots, true, true ) ) res = false; // SD#7118498 } @@ -523,10 +527,11 @@ bool IsValidNurbsKnots( const KnotsVector & knots, double eps = EXTENT_EPSILON ) return false; eps = ::fabs(eps); - if ( ::fabs(knots[cnt-1] - knots[0]) < eps ) + if ( ::fabs( knots.back() - knots.front() ) < eps ) return false; - for ( size_t i = 0; i < (cnt - 1); i++ ) { + size_t maxInd = cnt - 1; + for ( size_t i = 0; i < maxInd; ++i ) { if ( knots[i+1] < knots[i] - eps ) return false; } @@ -669,9 +674,92 @@ ptrdiff_t DefineKnotsVector( ptrdiff_t degree, bool closed, ptrdiff_t uppPointsI \ingroup Base_Algorithms */ // --- -MATH_FUNC (bool) DefineKnotsVector( size_t degree, bool closed, size_t count, // \ru Порядок, замкнутость, количество точек \en Order, closedness, number of points - const SArray * params, // \ru Параметры точек (для замкнутого count+1) \en Points parameters (for closed spline - "count"+1) - SArray & knots ); // \ru Формируемый узловой вектор \en Generated knot vector +template +bool DefineKnotsVector( size_t degree, + bool closed, + size_t count, + const ParamsVector * paramsPtr, + KnotsVector & knots ) +{ + bool isDone = false; + + if ( degree > 1 && count >= (closed ? 3 : degree) ) { + knots.clear(); + size_t knotsCount = (degree + count + (closed ? (degree - 1) : 0)); + knots.reserve( knotsCount ); + + double knot = 0.0; + + if ( (paramsPtr == c3d_null) || (*paramsPtr).empty() ) { + for ( size_t i = 0; i < knotsCount; ++i ) { + if ( closed ) // Замкнутый В-сплайн. + knot = (double)(ptrdiff_t)(i - degree + 1); + else { + if ( i < degree ) + knot = 0.0; + else if ( i < count + 1 ) + knot = (knots[i - 1] + 1.0); + else + knot = knots[i - 1]; + } + knots.push_back( knot ); + } + isDone = true; + } + else if ( paramsPtr->size() == count + (closed ? 1 : 0) ) { + const ParamsVector & params = (*paramsPtr); + + double pmin = params.front(); + double pmax = params.back(); + double prng = pmax - pmin; + + if ( closed ) { // замкнутый В-сплайн + /* BUG_45280 + for ( size_t i = 0; i < knotsCount; ++i ) { + knot = pmin + (prng / count) * (i - degree + 1); + knots.push_back( knot ); + } */ + + size_t cnt = count + 1; + + for ( size_t i = 0; i < knotsCount; ++i ) { + ptrdiff_t ind = (ptrdiff_t)(i - degree + 1); + + if ( i < degree ) + knot = params[(ind + count) % cnt] - prng; + else if ( i < count + degree ) + knot = params[ind]; + else + knot = prng + params[(ind + 1) % cnt]; + + knots.push_back( knot ); + } + } + else { + for ( size_t i = 0; i < knotsCount; ++i ) { + if ( i < degree ) + knot = pmin; + else if ( i < count ) { + knot = 0.0; + for ( size_t j = i - degree + 1; j < i; ++j ) + knot += params[j]; + knot /= (double)(degree - 1); + } + else + knot = pmax; + + knots.push_back( knot ); + } + } + isDone = true; + } + else { + C3D_ASSERT_UNCONDITIONAL( false ); + } + } + + return isDone; +} //------------------------------------------------------------------------------ @@ -836,14 +924,14 @@ template void CurveDeriveCpts( ptrdiff_t p, const KnotsVector & U, const Point * P, const double * W, size_t pointCount, const NurbsVector * PW, ptrdiff_t d, ptrdiff_t r1, ptrdiff_t r2, NurbsVector * PK ) { - C3D_ASSERT( (P != NULL && W != NULL) != (PW != NULL) ); + C3D_ASSERT( (P != c3d_null && W != c3d_null) != (PW != c3d_null) ); ptrdiff_t r = ( r2 - r1 ); ptrdiff_t degree = ( p + 1 ); ptrdiff_t i, k, icount; NurbsVector & PK0 = PK[0]; - if ( PW != NULL ) { + if ( PW != c3d_null ) { for ( i = 0; i <= r; i++ ) PK0.Set( i, *PW, (r1 + i) ); } @@ -886,14 +974,14 @@ template void CurveDeriveCpts( ptrdiff_t p, const KnotsVector & U, const Point * P, const double w, size_t pointCount, const NurbsVector * PW, ptrdiff_t d, ptrdiff_t r1, ptrdiff_t r2, NurbsVector * PK ) { - C3D_ASSERT( (P != NULL) != (PW != NULL) ); + C3D_ASSERT( (P != c3d_null) != (PW != c3d_null) ); ptrdiff_t r = ( r2 - r1 ); ptrdiff_t degree = ( p + 1 ); ptrdiff_t i, k, icount; NurbsVector & PK0 = PK[0]; - if ( PW != NULL ) { + if ( PW != c3d_null ) { for ( i = 0; i <= r; i++ ) PK0.Set( i, *PW, (r1 + i) ); } @@ -936,16 +1024,16 @@ template void CurveDeriveCpts( ptrdiff_t p, const KnotsVector & U, const Point * P, const double * W, size_t pointCount, const NurbsVector * PW, ptrdiff_t d, ptrdiff_t r1, ptrdiff_t r2, DoubleTriple ** DT, double ** WT ) { - C3D_ASSERT( ( P != NULL && W != NULL ) != ( PW != NULL ) ); + C3D_ASSERT( ( P != c3d_null && W != c3d_null ) != ( PW != c3d_null ) ); ptrdiff_t r = ( r2 - r1 ); ptrdiff_t degree = ( p + 1 ); ptrdiff_t i, k, icount; DoubleTriple * DT0 = DT[0]; double * WT0 = WT[0]; - bool useWeight = WT0 != NULL; + bool useWeight = WT0 != c3d_null; - if ( PW != NULL ) { + if ( PW != c3d_null ) { if ( !useWeight ) { for ( i = 0; i <= r; i++ ) DT0[i].Init( (*PW)[r1 + i] ); @@ -973,8 +1061,8 @@ void CurveDeriveCpts( ptrdiff_t p, const KnotsVector & U, const Point * P, const } } - double * WTMin = NULL; - double * WTPls = NULL; + double * WTMin = c3d_null; + double * WTPls = c3d_null; for ( k = 1; k <= d; k++ ) { DoubleTriple * DTMin = DT[k - 1]; DoubleTriple * DTPls = DT[k]; @@ -1008,16 +1096,16 @@ template void CurveDeriveCpts( ptrdiff_t p, const KnotsVector & U, const Point * P, const double w, size_t pointCount, const NurbsVector * PW, ptrdiff_t d, ptrdiff_t r1, ptrdiff_t r2, DoubleTriple ** DT, double ** WT ) { - C3D_ASSERT( ( P != NULL ) != ( PW != NULL ) ); + C3D_ASSERT( ( P != c3d_null ) != ( PW != c3d_null ) ); ptrdiff_t r = ( r2 - r1 ); ptrdiff_t degree = ( p + 1 ); ptrdiff_t i, k, icount; DoubleTriple * DT0 = DT[0]; double * WT0 = WT[0]; - bool useWeight = WT0 != NULL; + bool useWeight = WT0 != c3d_null; - if ( PW != NULL ) { + if ( PW != c3d_null ) { if ( !useWeight ) { for ( i = 0; i <= r; i++ ) DT0[i].Init( (*PW)[r1 + i] ); @@ -1046,8 +1134,8 @@ void CurveDeriveCpts( ptrdiff_t p, const KnotsVector & U, const Point * P, const } } - double * WTMin = NULL; - double * WTPls = NULL; + double * WTMin = c3d_null; + double * WTPls = c3d_null; for ( k = 1; k <= d; k++ ) { DoubleTriple * DTMin = DT[k - 1]; DoubleTriple * DTPls = DT[k]; @@ -1087,7 +1175,7 @@ void CurveDeriveCpts( ptrdiff_t p, const double * U, const Point * P, const doub for ( i = 0; i <= r; i++ ) { k = ( (r1 + i) % pointCount ); - if ( W != NULL ) + if ( W != c3d_null ) H0[i].Init( P[k], W[k] ); else H0[i].Init( P[k], 1.0 ); @@ -1233,10 +1321,13 @@ ptrdiff_t CalculateSplines( size_t degree, //------------------------------------------------------------------------------ // \ru Вычисление характеристических точек pointList для прохождения NURBS-кривой через points[i] при params[i] \en Calculation of characteristic points "pointList" of NURBS-curve passing through points[i] with params[i] // --- -template -MbeNewtonResult CalculatePointList( const DoubleVector & params, const PointVector & points, - size_t degree, bool closed, const DoubleVector & knots, - PointVector & pointList ) +template +MbeNewtonResult CalculatePointList( const ParamsVector & params, + const SrcPointsVector & points, + size_t degree, + bool closed, + const KnotsVector & knots, + DstPointsVector & pointList ) { MbeNewtonResult res = nr_Failure; @@ -1245,38 +1336,36 @@ MbeNewtonResult CalculatePointList( const DoubleVector & params, const PointVect if ( pointsCount > 1 && degree > 1 && knots.size() > 1 ) { // \ru Инициализация опорных точек. \en Initialization of support points. - if ( &pointList != &points ) { + if ( reinterpret_cast( &pointList ) != reinterpret_cast( &points ) ) { pointList.clear(); pointList = points; } ptrdiff_t uppIndex = (ptrdiff_t)pointList.size() - 1; // \ru Количество точек. \en The count of points if ( closed && (uppIndex > 1) && - c3d::EqualPoints( pointList[0], pointList[uppIndex], METRIC_REGION ) ) { + c3d::EqualPoints( pointList.front(), pointList.back(), METRIC_REGION ) ) { pointList.erase( pointList.begin() + uppIndex ); pointsCount = pointList.size(); } DPtr matrixPtr( MatrixNN::Create(pointsCount) ); // \ru Матрица системы уравнений для прохождения NURBS при params[i] через points[i] \en Matrix of equation system for constructing the NURBS-curve passing through the points[i] with params[i] - if ( matrixPtr != NULL && ::IsValidNurbsParamsExt(degree, closed, pointList.size(), knots) ) { + if ( matrixPtr != c3d_null && ::IsValidNurbsParamsExt(degree, closed, pointList.size(), knots) ) { MatrixNN & matrix = *matrixPtr; - std::vector bSplines; // \ru Ненулевые B-сплайны \en Non-zero B-splines + c3d::DoubleVector bSplines; // \ru Ненулевые B-сплайны \en Non-zero B-splines bSplines.resize( degree ); - std::vector lrVect; + c3d::DoubleVector lrVect; - for ( size_t i = 0; i < pointsCount; i++ ) { // \ru Заполняем строки матрицы \en Fills matrix rows + for ( size_t i = 0; i < pointsCount; ++i ) { // \ru Заполняем строки матрицы \en Fills matrix rows double t = params[i]; ptrdiff_t k = 0; ptrdiff_t ind = ::CalculateSplines( degree, knots, closed, t, bSplines, lrVect ); // \ru Заполняем i-ю строку \en Fill the i-th row - for ( k = 0; k < ind; k++ ) - matrix( i, k ) = 0.0; - for ( k = ind; k < ind + (ptrdiff_t)degree; k++ ) - matrix( i, k%pointsCount ) = bSplines[k - ind]; // \ru Ненулевые элементы строки. \en Non-zero elements of row - for ( k = ind + degree; k < (ptrdiff_t)pointsCount; k++ ) + for ( k = 0; k < (ptrdiff_t)pointsCount; ++k ) matrix( i, k ) = 0.0; + for ( k = ind; k < ind + (ptrdiff_t)degree; ++k ) + matrix( i, k % pointsCount ) += bSplines[k - ind]; // \ru Ненулевые элементы строки. \en Non-zero elements of row } double epsilon = PARAM_EPSILON; @@ -1291,23 +1380,88 @@ MbeNewtonResult CalculatePointList( const DoubleVector & params, const PointVect //------------------------------------------------------------------------------ -// \ru Вычисление характеристических точек pointList для прохождения NURBS-кривой через points[i] при params[i] \en Calculation of characteristic points "pointList" of NURBS-curve passing through points[i] with params[i] +// \ru Вычисление характеристических точек pointList для прохождения NURBS-кривой через points[i] при params[i]. \en Calculation of characteristic points "pointList" of NURBS-curve passing through points[i] with params[i]. // --- -template -MATH_FUNC (MbeNewtonResult) CalculatePointListWithBandMatrix( const DoubleVector & params, const PointsVector & points, - size_t degree, bool closed, const DoubleVector & knots, - PointsVector & pointList ); +template +MbeNewtonResult CalculatePointListWithBandMatrix( const ParamsVector & params, + const SrcPointsVector & points, + size_t degree, + bool closed, + const KnotsVector & knots, + DstPointsVector & pointList ) +{ + MbeNewtonResult res = nr_Failure; + + size_t pointsCount = points.size(); + + if ( pointsCount > 1 && degree > 1 && knots.size() > 1 ) { + // \ru Инициализация опорных точек. \en Initialization of support points. + if ( reinterpret_cast( &pointList ) != reinterpret_cast( &points ) ) { + pointList.clear(); + pointList = points; + } + ptrdiff_t uppIndex = (ptrdiff_t)pointList.size() - 1; // \ru Количество точек. \en The count of points. + if ( closed && (uppIndex > 1) && + c3d::EqualPoints( pointList.front(), pointList.back(), METRIC_REGION ) ) { + pointList.erase( pointList.begin() + uppIndex ); + pointsCount = pointList.size(); + } + + // \ru Матрица системы уравнений для прохождения NURBS при params[i] через points[i]. \en Matrix of equation system for constructing the NURBS-curve passing through the points[i] with params[i]. + DPtr< SparseArray2 > matrixPtr( SparseArray2::Create( pointsCount, pointsCount ) ); + + if ( matrixPtr != c3d_null && ::IsValidNurbsParamsExt( degree, closed, pointList.size(), knots ) ) { + SparseArray2 & matrix = *matrixPtr; + + c3d::DoubleVector bSplines; // \ru Ненулевые B-сплайны. \en Non-zero B-splines. + bSplines.resize( degree ); + + c3d::DoubleVector lrVect; + std::vector nzElems; + + c3d::DoubleVector nzBuffer; + for ( size_t i = 0; i < pointsCount; ++i ) { // \ru Заполняем строки матрицы. \en Fills matrix rows. + double t = params[i]; + + ptrdiff_t ind = ::CalculateSplines( degree, knots, closed, t, bSplines, lrVect ); + + nzElems.clear(); + nzBuffer.assign( pointsCount, 0.0 ); + + // \ru Заполняем i-ю строку. \en Fill the i-th row. + ptrdiff_t k; + for ( k = ind; k < ind + (ptrdiff_t)degree; ++k ) { + size_t curInd = k % pointsCount; + nzBuffer[curInd] += bSplines[k - ind]; + } + for ( k = 0; k < (ptrdiff_t)pointsCount; ++k ) { + if ( nzBuffer[k] != 0.0 ) { + nzElems.push_back( std::make_pair( k, nzBuffer[k] ) ); + } + } + matrix.SetLine( i, nzElems ); + } + + double epsilon = PARAM_EPSILON; + // \ru Решаем систему уравнений относительно характеристических точек pointList. \en Solve the system of equations for the characteristic points "pointList". + // \ru Правая часть системы = адрес начала массива опорных точек pointList.begin(). \en The right system part = address of beginning of support point array pointList.begin(). + res = ::TypedGaussEquationWithBandMatrix( matrix, &pointList[0], epsilon ); + } + } + + return res; +} //------------------------------------------------------------------------------ // \ru Установить касательность сплайна к вектору \en Set tangency of spline to vector //--- template -bool AttachNurbsG1( TypedNurbs & nurbs, // \ru Модифицируемый сплайн \en Modifiable spline +bool AttachNurbsG1( TypedNurbs & nurbs, // \ru Модифицируемый сплайн \en Modifiable spline const TypedVector & tang, // \ru Касательный вектор \en Tangent vector - bool begin, // \ru Сопряжение выставлено в начале \en Conjugation is defined for the start - bool modify, // \ru Можно ли менять существующие полюса \en Whether it is possible to modify the existing pole - bool isC1 ) // \ru Нужно сохранить длину касательного вектора \en Need to save the length of the tangent vector + bool begin, // \ru Сопряжение выставлено в начале \en Conjugation is defined for the start + bool modify, // \ru Можно ли менять существующие полюса \en Whether it is possible to modify the existing pole + bool isC1 ) // \ru Нужно сохранить длину касательного вектора \en Need to save the length of the tangent vector { bool res = false; @@ -1468,13 +1622,13 @@ bool SetLimitFirstDerivatives( const Curve & curve, bool setBeg, bool setEnd, Nu // \ru Установить точки так, чтобы совпала касательная и главная нормаль \en Set points such that tangent and principal normal are coincident //--- template -bool AttachNurbsG2( TypedNurbs & nurbs, // \ru Модифицируемый сплайн \en Modifiable spline +bool AttachNurbsG2( TypedNurbs & nurbs, // \ru Модифицируемый сплайн \en Modifiable spline const TypedVector & tang, // \ru Касательный вектор \en Tangent vector const TypedVector & tangDiff, // \ru Производная касательного вектора \en The derivative of a tangent vector - bool begin, // \ru Сопряжение выставлено в начале \en Conjugation is defined for the start - bool modify, // \ru Можно ли менять существующие полюса \en Whether it is possible to modify the existing poles - double * wDiff1, - double * wDiff2 ) + bool begin, // \ru Сопряжение выставлено в начале \en Conjugation is defined for the start + bool modify, // \ru Можно ли менять существующие полюса \en Whether it is possible to modify the existing poles + double * wDiff1, + double * wDiff2 ) { bool res = false; @@ -1618,9 +1772,9 @@ bool AttachNurbsG2( TypedNurbs & nurbs, // \ru Модифицируемый сп // \ru Сохраняем вычисленные производные \en Save the calculated derivatives if ( res ) { - if ( wDiff1 != NULL ) + if ( wDiff1 != c3d_null ) *wDiff1 = weightDiff1; - if ( wDiff2 != NULL && res ) + if ( wDiff2 != c3d_null && res ) *wDiff2 = weightDiff2; } @@ -1804,8 +1958,10 @@ bool CreateClosedNURBS4( Nurbs & nurbs, const SArray & initPoints, const // \ru Получить массив параметров по точкам \en Get an array of parameters given the points // --- template -bool CreateSplineParameters( const PointsVector & points, MbeSplineParamType spType, bool cls, - DoubleVector & params ) +bool CreateSplineParameters( const PointsVector & points, + MbeSplineParamType spType, + bool cls, + DoubleVector & params ) { bool isDone = false; params.clear(); @@ -2241,7 +2397,7 @@ size_t DefineApproxPointsOpen( const Curve & curve, size_t pCount, double pmin, \en Construction of closed spline. \~ \details \ru Построение замкнутого сплайна, аппроксимирующего набор точек, с помощью метода наименьших квадратов. \n \en Construction of closed spline which approximates a set of points by the method of least squares. \n \~ - \param[in/out] nurbs - \ru Модифицируемый сплайн. + \param[in,out] nurbs - \ru Модифицируемый сплайн. \en Modifiable spline. \~ \param[in] aDegree - \ru Порядок сплайна. \en The spline order. \~ @@ -2264,7 +2420,7 @@ MATH_FUNC (bool) CreateNurbsLSMClosed( SPtr & nurbs, // \ru Мод const ptrdiff_t pCount, const PointsVector & aPoints, const DoubleVector & aKnots, - const DoubleVector * aParams = NULL ); + const DoubleVector * aParams = c3d_null ); //------------------------------------------------------------------------------ @@ -2272,7 +2428,7 @@ MATH_FUNC (bool) CreateNurbsLSMClosed( SPtr & nurbs, // \ru Мод \en Construction of non-closed spline. \~ \details \ru Построение незамкнутого сплайна, аппроксимирующего набор точек, с помощью метода наименьших квадратов. \n \en Construction of non-closed spline which approximates a set of points by the method of least squares. \n \~ - \param[in/out] nurbs - \ru Модифицируемый сплайн. + \param[in,out] nurbs - \ru Модифицируемый сплайн. \en Modifiable spline. \~ \param[in] aDegree - \ru Порядок сплайна. \en The spline order. \~ @@ -2295,7 +2451,7 @@ MATH_FUNC (bool) CreateNurbsLSM( SPtr & nurbs, // \ru Модифи const ptrdiff_t pCount, const PointsVector & aPoints, const DoubleVector & aKnots, - const DoubleVector * aParams = NULL ); + const DoubleVector * aParams = c3d_null ); //------------------------------------------------------------------------------- @@ -2305,7 +2461,7 @@ template Nurbs * CreateLineOutRgn( const Curve & curve, double tn1, double tn2, double t1, double t2, const MbCurveIntoNurbsInfo & nci ) { - Nurbs * nurbs = NULL; + Nurbs * nurbs = c3d_null; if ( !curve.IsClosed() && nci.ExtendRange() && ((tn2 - tn1) > Math::paramEpsilon) ) { SArray points ( 2, 1 ); diff --git a/C3d/Include/mb_operation_result.h b/C3d/Include/mb_operation_result.h index 3d4ceec..dcb39c9 100644 --- a/C3d/Include/mb_operation_result.h +++ b/C3d/Include/mb_operation_result.h @@ -88,7 +88,7 @@ enum MbResultType { // \ru Начало "нездорового" диапазона ошибок, НИКОГДА НЕ ВЗВОДИТЬ ЭТУ ОШИБКУ \en Beginning of "unhealthy" range of errors, NEVER TO RAISE THIS ERROR rt_BeginOfInvalidRange, - // \ru K8+из 3Д, там хранить нельзя так как они записываются и потом читаются \en K8+from 3D, it is forbidden to store there since they register and then are read + // \ru K8+из 3D, там хранить нельзя так как они записываются и потом читаются \en K8+from 3D, it is forbidden to store there since they register and then are read rt_ErBodyCloosed = rt_TopologyError + 2, ///< \ru Тело детали не определено. \en Solid of part is undefined. rt_OneEdge = rt_ErBodyCloosed + 2, ///< \ru У выбранного угла нет общего ребра. \en The selected corner has no common edge. rt_SomeEdge = rt_OneEdge + 1, ///< \ru У одного из выбранных углов нет общего ребра. \en One of chosen corners has no common edge. @@ -239,6 +239,36 @@ enum MbResultType { rt_BuildSheetBySolidError, ///< \ru Ошибка построения листового тела по произвольному телу. \en Build sheet solid based on an arbitary solid error. rt_BendEdgeError, ///< \ru Ребро не может быть использовано как ребро сгиба. \en The edge can't be processed as bend edge. + rt_StampToolPositionError, ///< \ru Ошибочное положение инструмента относительно листового тела. \en Illegal position of the tool body related to the sheet body. + + // \ru Ошибки построения поверхности переменного сечения. \en Build failure of the swept mutable section surface. + rt_NoEdgesForBuild, ///< \ru Отсутствуют рёбра для построения. \en No edges for build. + rt_NoCurvesForBuild, ///< \ru Отсутствуют кривые для построения. \en No curves for build. + rt_NotCorrectDataForBuild, ///< \ru Некорректные данные. \en Not correct data for build. + rt_NotEnoughDataForBuild, ///< \ru Не хватает данных для построения. \en Not enough data for build. + rt_ReferenceCurveError, ///< \ru Ошибочная опорная кривая. \en Illegal reference curve. + rt_GuideCurveError, ///< \ru Ошибочная направляющая кривая. \en Illegal guide curve. + rt_ApexCurveError, ///< \ru Ошибочная вершинная кривая. \en Illegal apex curve. + rt_DiscriminantFunctionError, ///< \ru Ошибочная дискриминантная функция. \en Illegal discriminant function. + rt_DiscriminantCurveError, ///< \ru Ошибочная дискриминантная кривая. \en Illegal discriminant curve. + rt_DiscriminantSurfaceError, ///< \ru Ошибочная дискриминантная поверхность. \en Illegal discriminant surface. + rt_AngleFunctionError, ///< \ru Ошибочная функция угла. \en Illegal angle function. + rt_ReferenceCurveBuildFailed, ///< \ru Опорную кривую не удалось построить. \en Reference curve build was failed. + rt_GuideCurveBuildFailed, ///< \ru Направляющую кривую не удалось построить. \en Guide curvebuild was failed. + rt_ApexCurveBuildFailed, ///< \ru Вершинную кривую не удалось построить. \en Apex curve build was failed. + rt_VertexCurveBuildFailed, ///< \ru Контрольную кривую не удалось построить. \en Vertex curve build was failed. + rt_ApexDiscriminantBuildFailed, ///< \ru Вершинную кривую и дискриминант не удалось построить. \en Apex curve and discriminant build was failed. + rt_DiscriminantBuildFailed, ///< \ru Дискриминантную функцию не удалось построить. \en Discriminant function build was failed. + rt_PatternCurveError, ///< \ru Ошибочная образующая кривая. \en Illegal generatrix curve. + rt_SynchronizeParameterError, ///< \ru Не удалось синхронизировать параметры. \en Failed to synchronize parameters. + rt_ReparamBuildFailed, ///< \ru Не удалось выполнить репараметризацию. \en Reparameter build was failed. + rt_TriangleSectionFailed, ///< \ru Треугольник сечения поверхности не может быть определен. \ en The triangle section of the surface cannot be determined. + rt_DiscriminantFunctionWrong, ///< \ru Функция дискриминанта для задания формы сечения не обеспечивает построение поверхности. \en The discriminant function for setting the cross section shape does not provide the surface construction. + rt_DiscriminantCurveWrong, ///< \ru Кривая для задания формы сечения не обеспечивает построение поверхности. \en The curve for setting the cross section shape does not provide the surface construction. + rt_DiscriminantSurfaceWrong, ///< \ru Касательная поверхность для задания формы сечения не обеспечивает построение поверхности. \en The tangent surface for setting the cross section shape does not provide the surface construction. + rt_SectionMovementWrong, ///< \ru Движение сечения не совместимо с направляющими. \en The cross section movement is not compatible with the guides. + rt_DiscriminantSurfaceFar, ///< \ru Дискриминантная поверхность далеко от сечения. \en The discriminant surface far from section. + rt_CrossOrderError, ///< \ru Нарушен порядок взаимного пересечения кривых. \en The order of mutual intersection of curves is violated. // \ru !!! СТРОКИ ВСТАВЛЯТЬ СТРОГО ПЕРЕД ЭТОЙ СТРОКОЙ !!!! \en !!! INSERT LINES STRICTLY BEFORE THIS LINE !!!! rt_ErrorTotal // \ru НИЖЕ НЕ ДОБАВЛЯТЬ! \en DON'T ADD BELOW! }; diff --git a/C3d/Include/mb_placement3d.h b/C3d/Include/mb_placement3d.h index 83c40d0..09e6b04 100644 --- a/C3d/Include/mb_placement3d.h +++ b/C3d/Include/mb_placement3d.h @@ -133,7 +133,7 @@ private: mutable uint8 flag; public: - ///< \ru Константа глобальной системы координат. \en A constant of the global coordinate system. + /// \ru Константа глобальной системы координат. \en A constant of the global coordinate system. static const MbPlacement3D global; public: /** \ru \name Конструкторы. @@ -392,7 +392,7 @@ public: /** \} /// \ru Пересчитать СК по измененным внутренним данным. \en Recalculate the coordinate system for changed internal data. void Reset (); /// \ru Инвертировать. \en Invert. - void Invert( MbMatrix * = NULL ); + void Invert( MbMatrix * = c3d_null ); /// \ru Найти ближайшую точку пересечения с линией. \en Find the nearest point of intersection with line. bool LineIntersectionPoint( const MbCartPoint3D & pc, const MbVector3D & axis, MbCartPoint3D & p, double & d, double eps = ANGLE_EPSILON ) const; diff --git a/C3d/Include/mb_point_mating.h b/C3d/Include/mb_point_mating.h index a4af357..aee71bd 100644 --- a/C3d/Include/mb_point_mating.h +++ b/C3d/Include/mb_point_mating.h @@ -23,7 +23,7 @@ /// \ru Параметры сопряжения в точке \en Parameters of conjugation at point //--- template -class MbPntMatingData { +class MbPntMatingData : public MbRefItem { private: // \ru данные \en data Vector * tangent; ///< \ru Направляющий касательный вектор. \en Guide tangent vector. Vector * tangentDer1; ///< \ru Первая производная касательного вектора. \en First derivative of tangent vector. @@ -37,10 +37,13 @@ public: /// \ru Конструктор по умолчанию. \en Default constructor. MbPntMatingData(); /// \ru Конструктор по всем параметрам сопряжения в точке. \en Constructor by all parameters of conjugation at point. - MbPntMatingData( const MbeMatingType type, const Vector * tang, - const Vector * tangDer1, const Vector * tangDer2, - SArray *& changedPnts, - bool movePnts, bool isAttach ); + MbPntMatingData( const MbeMatingType type, + const Vector * tang, + const Vector * tangDer1, + const Vector * tangDer2, + SArray *& changedPnts, + bool movePnts, + bool isAttach ); /// \ru Конструктор копирования. \en Copy-constructor. MbPntMatingData( const MbPntMatingData & ); /// \ru Деструктор. \en Destructor. @@ -48,10 +51,13 @@ public: public: /// \ru Инициализировать по всем параметрам сопряжения в точке. \en Initialize by all parameters of conjugation at point. - void Init( const MbeMatingType type, const Vector * tang, - const Vector * tangDer1, const Vector * tangDer2, - SArray *& changedPnts, - bool movePnts, bool isAttach ); + void Init( const MbeMatingType type, + const Vector * tang, + const Vector * tangDer1, + const Vector * tangDer2, + SArray *& changedPnts, + bool movePnts, + bool isAttach ); /// \ru Инициализировать по другому объекту параметров сопряжения в точке. \en Initialize by another parameters object of conjugation at point. bool Init( const MbPntMatingData & ); @@ -101,10 +107,11 @@ private: // \ru не реализовано \en not implemented //--- template MbPntMatingData::MbPntMatingData() - : tangent ( C3D_NULL_PTR ) - , tangentDer1 ( C3D_NULL_PTR ) - , tangentDer2 ( C3D_NULL_PTR ) - , changedPnts ( C3D_NULL_PTR ) + : MbRefItem ( ) + , tangent ( c3d_null ) + , tangentDer1 ( c3d_null ) + , tangentDer2 ( c3d_null ) + , changedPnts ( c3d_null ) , type ( trt_Position ) , movePnts ( false ) , attach ( false ) @@ -123,13 +130,14 @@ MbPntMatingData::MbPntMatingData( const MbeMatingType nType, SArray *& nChangedPnts, bool nMovePnts, bool nAttach ) - : type ( nType ) - , tangent ( (nTang != C3D_NULL_PTR) ? new Vector( *nTang ) : C3D_NULL_PTR ) - , tangentDer1 ( (nTangDer1 != C3D_NULL_PTR) ? new Vector( *nTangDer1 ) : C3D_NULL_PTR ) - , tangentDer2 ( (nTangDer2 != C3D_NULL_PTR) ? new Vector( *nTangDer2 ) : C3D_NULL_PTR ) - , movePnts ( nMovePnts ) - , changedPnts ( nChangedPnts ) - , attach ( nAttach ) + : MbRefItem ( ) + , type ( nType ) + , tangent ( (nTang != c3d_null) ? new Vector( *nTang ) : c3d_null ) + , tangentDer1 ( (nTangDer1 != c3d_null) ? new Vector( *nTangDer1 ) : c3d_null ) + , tangentDer2 ( (nTangDer2 != c3d_null) ? new Vector( *nTangDer2 ) : c3d_null ) + , movePnts ( nMovePnts ) + , changedPnts ( nChangedPnts ) + , attach ( nAttach ) { if ( type <= trt_Position ) { // BUG_52162 ::DeleteMatItem( tangent ); @@ -144,13 +152,14 @@ MbPntMatingData::MbPntMatingData( const MbeMatingType nType, //--- template MbPntMatingData::MbPntMatingData( const MbPntMatingData & d ) - : type ( d.type ) - , tangent ( (d.tangent != C3D_NULL_PTR) ? new Vector( *d.tangent ) : C3D_NULL_PTR ) - , tangentDer1 ( (d.tangentDer1 != C3D_NULL_PTR) ? new Vector( *d.tangentDer1 ) : C3D_NULL_PTR ) - , tangentDer2 ( (d.tangentDer2 != C3D_NULL_PTR) ? new Vector( *d.tangentDer2 ) : C3D_NULL_PTR ) - , movePnts ( d.movePnts ) - , changedPnts ( d.changedPnts ) - , attach ( d.attach ) + : MbRefItem ( ) + , type ( d.type ) + , tangent ( (d.tangent != c3d_null) ? new Vector( *d.tangent ) : c3d_null ) + , tangentDer1 ( (d.tangentDer1 != c3d_null) ? new Vector( *d.tangentDer1 ) : c3d_null ) + , tangentDer2 ( (d.tangentDer2 != c3d_null) ? new Vector( *d.tangentDer2 ) : c3d_null ) + , movePnts ( d.movePnts ) + , changedPnts ( d.changedPnts ) + , attach ( d.attach ) { } @@ -181,25 +190,25 @@ void MbPntMatingData::Init( const MbeMatingType nType, { type = nType; - if ( tangent != C3D_NULL_PTR && nTang != C3D_NULL_PTR ) // \ru касательный вектор \en tangent vector + if ( tangent != c3d_null && nTang != c3d_null ) // \ru касательный вектор \en tangent vector tangent->Init( *nTang ); - else if ( nTang != C3D_NULL_PTR ) + else if ( nTang != c3d_null ) tangent = new Vector( *nTang ); - else if ( tangent != C3D_NULL_PTR ) + else if ( tangent != c3d_null ) ::DeleteMatItem( tangent ); - if ( tangentDer1 != C3D_NULL_PTR && nTangDer1 != C3D_NULL_PTR ) // \ru первая производная касательного вектора \en first derivative of tangent vector + if ( tangentDer1 != c3d_null && nTangDer1 != c3d_null ) // \ru первая производная касательного вектора \en first derivative of tangent vector tangentDer1->Init( *nTangDer1 ); - else if ( nTangDer1 != C3D_NULL_PTR ) + else if ( nTangDer1 != c3d_null ) tangentDer1 = new Vector( *nTangDer1 ); - else if ( tangentDer1 != C3D_NULL_PTR ) + else if ( tangentDer1 != c3d_null ) ::DeleteMatItem( tangentDer1 ); - if ( tangentDer2 != C3D_NULL_PTR && nTangDer2 != C3D_NULL_PTR ) // \ru вторая производная касательного вектора \en second derivative of tangent vector + if ( tangentDer2 != c3d_null && nTangDer2 != c3d_null ) // \ru вторая производная касательного вектора \en second derivative of tangent vector tangentDer2->Init( *nTangDer2 ); - else if ( nTangDer2 != C3D_NULL_PTR ) + else if ( nTangDer2 != c3d_null ) tangentDer2 = new Vector( *nTangDer2 ); - else if ( tangentDer2 != C3D_NULL_PTR ) + else if ( tangentDer2 != c3d_null ) ::DeleteMatItem( tangentDer2 ); if ( type <= trt_Position ) { // BUG_52162 @@ -208,7 +217,7 @@ void MbPntMatingData::Init( const MbeMatingType nType, ::DeleteMatItem( tangentDer2 ); } - if ( changedPnts != C3D_NULL_PTR ) + if ( changedPnts != c3d_null ) changedPnts->clear(); movePnts = nMovePnts; @@ -223,10 +232,10 @@ void MbPntMatingData::Init( const MbeMatingType nType, template bool MbPntMatingData::Init( const MbPntMatingData & d ) { - C3D_ASSERT( changedPnts == C3D_NULL_PTR ); + C3D_ASSERT( changedPnts == c3d_null ); if ( this != &d ) { - SArray * dummyInds = C3D_NULL_PTR; + SArray * dummyInds = c3d_null; Init( d.type, d.tangent, d.tangentDer1, d.tangentDer2, dummyInds, d.movePnts, d.attach ); return true; } @@ -265,9 +274,9 @@ bool MbPntMatingData::IsValid() const if ( type >= trt_Position ) { double lenEps = LENGTH_EPSILON; - bool isTang = (tangent != C3D_NULL_PTR); - bool isTangDer1 = (tangentDer1 != C3D_NULL_PTR); - bool isTangDer2 = (tangentDer2 != C3D_NULL_PTR); + bool isTang = (tangent != c3d_null); + bool isTangDer1 = (tangentDer1 != c3d_null); + bool isTangDer2 = (tangentDer2 != c3d_null); bool isTangLen = (isTang && tangent->Length() > lenEps); switch( type ) { @@ -308,8 +317,8 @@ size_t MbPntMatingData::GetSmoothDegree() const res = 1; break; case trt_Normal : - if ( tangentDer1 != C3D_NULL_PTR ) res = 2; - else if ( tangent != C3D_NULL_PTR ) res = 1; + if ( tangentDer1 != c3d_null ) res = 2; + else if ( tangent != c3d_null ) res = 1; break; case trt_SmoothG2: res = 2; @@ -331,18 +340,18 @@ void MbPntMatingData::SetVector( ptrdiff_t i, const Vector & vect ) { switch ( i ) { case 0 : { - if ( tangent != C3D_NULL_PTR ) tangent->Init( vect ); - else tangent = new Vector( vect ); + if ( tangent != c3d_null ) tangent->Init( vect ); + else tangent = new Vector( vect ); break; } case 1 : { - if ( tangentDer1 != C3D_NULL_PTR ) tangentDer1->Init( vect ); - else tangentDer1 = new Vector( vect ); + if ( tangentDer1 != c3d_null ) tangentDer1->Init( vect ); + else tangentDer1 = new Vector( vect ); break; } case 2 : { - if ( tangentDer2 != C3D_NULL_PTR ) tangentDer2->Init( vect ); - else tangentDer2 = new Vector( vect ); + if ( tangentDer2 != c3d_null ) tangentDer2->Init( vect ); + else tangentDer2 = new Vector( vect ); break; } } @@ -355,7 +364,7 @@ void MbPntMatingData::SetVector( ptrdiff_t i, const Vector & vect ) template void MbPntMatingData::NormalizeAttachTangent() { - if ( attach && tangent != C3D_NULL_PTR ) { + if ( attach && tangent != c3d_null ) { double tangLen = tangent->Length(); if ( tangLen > LENGTH_EPSILON ) (*tangent) /= tangLen; @@ -386,11 +395,11 @@ void MbPntMatingData::GetProperties( MbProperties & properties ) properties.Add( new StringProperty( IDS_PROP_0901, typeName, false ) ); */ - if ( tangent != C3D_NULL_PTR ) + if ( tangent != c3d_null ) properties.Add( new MathItemProperty( IDS_PROP_0908, tangent, true ) ); - if ( tangentDer1 != C3D_NULL_PTR ) + if ( tangentDer1 != c3d_null ) properties.Add( new MathItemProperty( IDS_PROP_0909, tangentDer1, true ) ); - if ( tangentDer2 != C3D_NULL_PTR ) + if ( tangentDer2 != c3d_null ) properties.Add( new MathItemProperty( IDS_PROP_0910, tangentDer2, true ) ); properties.Add( new BoolProperty( IDS_PROP_0911, movePnts, false ) ); @@ -415,7 +424,7 @@ bool IsMatingDefined( const MbPntMatingData * data ) { bool isDefined = false; - if ( data != C3D_NULL_PTR && data->IsValid() ) { + if ( data != c3d_null && data->IsValid() ) { if ( data->GetType() > trt_Position ) // \ru по позиции и так выполнится, поэтому считаем не заданным \en would be held at position, so assumed as undefined isDefined = true; } @@ -427,8 +436,8 @@ bool IsMatingDefined( const MbPntMatingData * data ) //------------------------------------------------------------------------------ // \ru определены ли сопряжение \en whether conjugation is defined //--- -template -bool IsAnyMatingDefined( const RPArray< MbPntMatingData > & data ) +template +bool IsAnyMatingDefined( const PointMatingDataPtrVector & data ) { bool isDefined = false; @@ -448,16 +457,16 @@ bool IsAnyMatingDefined( const RPArray< MbPntMatingData > & data ) //------------------------------------------------------------------------------ // \ru копировать сопряжения \en copy conjugations //--- -template -bool CopyMating( const RPArray< MbPntMatingData > & src, RPArray< MbPntMatingData > & dst ) +template +bool CopyMating( const PointMatingDataPtrVector & src, PointMatingDataPtrVector & dst ) { bool isDone = false; if ( src.size() > 0 && dst.size() < 1 ) { isDone = true; - for ( size_t k = 0, cnt = src.size(); k < cnt && isDone; k++ ) { - MbPntMatingData * copyItem = C3D_NULL_PTR; - if ( src[k] != C3D_NULL_PTR ) { + for ( size_t k = 0, cnt = src.size(); k < cnt && isDone; ++k ) { + MbPntMatingData * copyItem = c3d_null; + if ( src[k] != c3d_null ) { copyItem = new MbPntMatingData(); isDone = copyItem->Init( *src[k] ); } @@ -474,8 +483,8 @@ bool CopyMating( const RPArray< MbPntMatingData > & src, RPArray< MbPntM //------------------------------------------------------------------------------ // \ru Являются ли объекты равными? \en Determine whether an object is equal? //--- -template -bool IsSame( const RPArray< MbPntMatingData > & data, const RPArray< MbPntMatingData > & other, double accuracy ) +template +bool IsSame( const PointMatingDataPtrVector & data, const PointMatingDataPtrVector & other, double accuracy ) { bool isSame = false; @@ -495,25 +504,25 @@ bool IsSame( const RPArray< MbPntMatingData > & data, const RPArray< MbP //------------------------------------------------------------------------------ // \ru трансформировать сопряжения \en transform conjugations //--- -template -void TransformMating( const RPArray< MbPntMatingData > & data, const Matrix & matr ) +template +void TransformMating( const PointMatingDataPtrVector & data, const Matrix & matr ) { Vector vect; - for ( size_t k = 0, kcnt = data.size(); k < kcnt; ++k ) { + for ( size_t k = 0, cnt = data.size(); k < cnt; ++k ) { MbPntMatingData * dataItem = data[k]; - if ( dataItem != C3D_NULL_PTR ) { - if ( dataItem->GetTangent() != C3D_NULL_PTR ) { + if ( dataItem != c3d_null ) { + if ( dataItem->GetTangent() != c3d_null ) { vect = *dataItem->GetTangent(); vect.Transform( matr ); dataItem->SetVector( 0, vect ); } - if ( dataItem->GetTangentDer1() != C3D_NULL_PTR ) { + if ( dataItem->GetTangentDer1() != c3d_null ) { vect = *dataItem->GetTangentDer1(); vect.Transform( matr ); dataItem->SetVector( 1, vect ); } - if ( dataItem->GetTangentDer2() != C3D_NULL_PTR ) { + if ( dataItem->GetTangentDer2() != c3d_null ) { vect = *dataItem->GetTangentDer2(); vect.Transform( matr ); dataItem->SetVector( 2, vect ); @@ -526,24 +535,24 @@ void TransformMating( const RPArray< MbPntMatingData > & data, const Mat //------------------------------------------------------------------------------ // \ru вращать сопряжения \en rotate conjugations //--- -template -void RotateMating( const RPArray< MbPntMatingData > & data, const Axis & axis, double angle ) +template +void RotateMating( const PointMatingDataPtrVector & data, const Axis & axis, double angle ) { Vector vect; - for ( size_t i = 0; i < data.size(); ++i ) { + for ( size_t i = 0, cnt = data.size(); i < cnt; ++i ) { MbPntMatingData * dataItem = data[i]; - if ( dataItem->GetTangent() != C3D_NULL_PTR ) { + if ( dataItem->GetTangent() != c3d_null ) { vect = *dataItem->GetTangent(); vect.Rotate( axis, angle ); dataItem->SetVector( 0, vect ); } - if ( dataItem->GetTangentDer1() != C3D_NULL_PTR ) { + if ( dataItem->GetTangentDer1() != c3d_null ) { vect = *dataItem->GetTangentDer1(); vect.Rotate( axis, angle ); dataItem->SetVector( 1, vect ); } - if ( dataItem->GetTangentDer2() != C3D_NULL_PTR ) { + if ( dataItem->GetTangentDer2() != c3d_null ) { vect = *dataItem->GetTangentDer2(); vect.Rotate( axis, angle ); dataItem->SetVector( 2, vect ); @@ -555,8 +564,8 @@ void RotateMating( const RPArray< MbPntMatingData > & data, const Axis & //------------------------------------------------------------------------------ // \ru запись массива данных сопряжений \en conjugation data array writing //--- -template -void WriteMating( writer & out, const RPArray< MbPntMatingData > & data ) +template +void WriteMating( writer & out, const PointMatingDataPtrVector & data ) { if ( out.good() ) { size_t cnt = data.size(); @@ -564,10 +573,10 @@ void WriteMating( writer & out, const RPArray< MbPntMatingData > & data for ( size_t k = 0; k < cnt && out.good(); k++ ) { const MbPntMatingData * item = data[k]; // \ru наличие сопряжения \en presence of conjugation - bool isItem = (item != NULL); + bool isItem = (item != c3d_null); out << isItem; - if ( isItem && item->GetChangedPoints() != C3D_NULL_PTR ) { + if ( isItem && item->GetChangedPoints() != c3d_null ) { C3D_ASSERT_UNCONDITIONAL( false ); // \ru KYA массив индексов должен быть пуст, т.к. он общий для всех сопряжений, им владеет заказчик операции \en KYA array of indices should be empy because it is shared between all of conjugations and owned by user of operation out.setState( io::cantWriteObject ); } @@ -577,17 +586,17 @@ void WriteMating( writer & out, const RPArray< MbPntMatingData > & data uint32 type = (uint32)item->GetType(); out << type; // \ru касательный вектор \en tangent vector - isItem = (item->GetTangent() != C3D_NULL_PTR); + isItem = (item->GetTangent() != c3d_null); out << isItem; if ( isItem ) out << (*item->GetTangent()); // \ru первая производная касательного вектора \en first derivative of tangent vector - isItem = (item->GetTangentDer1() != C3D_NULL_PTR); + isItem = (item->GetTangentDer1() != c3d_null); out << isItem; if ( isItem ) out << (*item->GetTangentDer1()); // \ru вторая производная касательного вектора \en second derivative of tangent vector - isItem = (item->GetTangentDer2() != C3D_NULL_PTR); + isItem = (item->GetTangentDer2() != c3d_null); out << isItem; if ( isItem ) out << (*item->GetTangentDer2()); @@ -603,16 +612,16 @@ void WriteMating( writer & out, const RPArray< MbPntMatingData > & data //------------------------------------------------------------------------------ // \ru чтение массива данных сопряжений \en conjugation data array reading //--- -template -void ReadMating( reader & in, RPArray< MbPntMatingData > & data ) +template +void ReadMating( reader & in, PointMatingDataPtrVector & data ) { if ( in.good() ) { ::DeleteMatItems( data ); size_t cnt = ReadCOUNT( in ); if ( cnt > 0 ) { - data.Reserve( cnt ); - SArray * dummyInds = C3D_NULL_PTR; + data.reserve( data.size() + cnt ); + SArray * dummyInds = c3d_null; for ( size_t k = 0; k < cnt && in.good(); k++ ) { // \ru наличие сопряжения \en presence of conjugation @@ -624,9 +633,9 @@ void ReadMating( reader & in, RPArray< MbPntMatingData > & data ) uint32 type = uint32(trt_None); in >> type; - MbVector3D * v1 = C3D_NULL_PTR; - MbVector3D * v2 = C3D_NULL_PTR; - MbVector3D * v3 = C3D_NULL_PTR; + MbVector3D * v1 = c3d_null; + MbVector3D * v2 = c3d_null; + MbVector3D * v3 = c3d_null; // \ru касательный вектор \en tangent vector in >> isItem; @@ -654,14 +663,14 @@ void ReadMating( reader & in, RPArray< MbPntMatingData > & data ) MbPntMatingData * item = new MbPntMatingData(); item->Init( (MbeMatingType)type, v1, v2, v3, dummyInds, movePnts, attach ); - data.Add( item ); + data.push_back( item ); ::DeleteMatItem( v1 ); ::DeleteMatItem( v2 ); ::DeleteMatItem( v3 ); } else { - data.Add( NULL ); + data.push_back( c3d_null ); } } } @@ -682,21 +691,21 @@ void CopyPntMatingData( const MbPntMatingData & srcData, MbPntMatingD size_t dim = std_min( SrcVector::GetDimension(), DstVector::GetDimension() ); - DstVector * tangent = C3D_NULL_PTR; - DstVector * tangentDer1 = C3D_NULL_PTR; - DstVector * tangentDer2 = C3D_NULL_PTR; + DstVector * tangent = c3d_null; + DstVector * tangentDer1 = c3d_null; + DstVector * tangentDer2 = c3d_null; - if ( srcData.GetTangent() != C3D_NULL_PTR ) { + if ( srcData.GetTangent() != c3d_null ) { tangent = new DstVector; for ( size_t k = 0; k < dim; k++ ) (*tangent)[k] = (*srcData.GetTangent())[k]; } - if ( srcData.GetTangentDer1() != C3D_NULL_PTR ) { + if ( srcData.GetTangentDer1() != c3d_null ) { tangentDer1 = new DstVector; for ( size_t k = 0; k < dim; k++ ) (*tangentDer1)[k] = (*srcData.GetTangentDer1())[k]; } - if ( srcData.GetTangentDer2() != C3D_NULL_PTR ) { + if ( srcData.GetTangentDer2() != c3d_null ) { tangentDer2 = new DstVector; for ( size_t k = 0; k < dim; k++ ) (*tangentDer2)[k] = (*srcData.GetTangentDer2())[k]; @@ -710,4 +719,14 @@ void CopyPntMatingData( const MbPntMatingData & srcData, MbPntMatingD } +class MATH_CLASS MbVector; +class MATH_CLASS MbVector3D; + +namespace c3d // namespace C3D +{ +typedef MbPntMatingData PntMatingData2D; +typedef MbPntMatingData PntMatingData3D; +} // namespace C3D + + #endif diff --git a/C3d/Include/mb_property.h b/C3d/Include/mb_property.h index 4e226a4..3e8529b 100644 --- a/C3d/Include/mb_property.h +++ b/C3d/Include/mb_property.h @@ -96,86 +96,93 @@ class MbProperties; // --- enum PrePropType { - pt_UndefinedProp, ///< \ru Свойство неизвестного типа данных. \en Property of unknown datatype. \n + pt_UndefinedProp = 0, ///< \ru Свойство неизвестного типа данных. \en Property of unknown data type. \n // \ru Атомарные свойства. \en Atomic properties. - pt_BoolProp, ///< \ru Логическое значение. \en Logical value. - pt_IntProp, ///< \ru Целое значение. \en Integer value. - pt_UIntProp, ///< \ru Беззнаковое целое значение. \en Unsigned integer value. - pt_DoubleProp, ///< \ru Действительное значение. \en Real value. - pt_StringProp, ///< \ru Строковое значение. \en String value. - pt_CharProp, ///< \ru Строковое значение. \en String value. - pt_VersionProp, ///< \ru Свойство-версия. \en Version property. \n + pt_BoolProp = 1, ///< \ru Логическое значение. \en Logical value. + pt_IntProp = 2, ///< \ru Целое значение. \en Integer value. + pt_UIntProp = 3, ///< \ru Беззнаковое целое значение. \en Unsigned integer value. + pt_DoubleProp = 4, ///< \ru Действительное значение. \en Real value. + pt_NDoubleProp = 5, ///< \ru Действительное значение с номером. \en Real value and index. + pt_StringProp = 6, ///< \ru Строковое значение. \en String value. + pt_CharProp = 7, ///< \ru Строковое значение. \en String value. + pt_VersionProp = 8, ///< \ru Свойство-версия. \en Version property. \n + pt_AtomicPropLast = 20, ///< \ru Атомарные свойства вставлять перед этим значением. \en Atomic properties should be inserted before this value. \n // \ru Комплексные свойства плоских объектов . \en Complex properties of planar objects. - pt_CartPointProp, ///< \ru Cвойство точки. \en Property of point. - pt_VectorProp, ///< \ru Cвойство вектора. \en Property of vector. - pt_DirectionProp, ///< \ru Cвойство вектора. \en Property of vector. - pt_PlacementProp, ///< \ru Cвойство системы координат. \en Property of coordinate system. - pt_MatrixProp, ///< \ru Cвойство матрицы. \en Property of matrix. - pt_CurveProp, ///< \ru Cвойство кривой. \en Property of curve. - pt_MultilineProp, ///< \ru Свойство мультилинии. \en Property of multiline. - pt_RegionProp, ///< \ru Свойство региона. \en Property of region. - pt_PntMatingProp, ///< \ru Свойство сопряжения в точке. \en Property of conjugation at a point. \n + pt_CartPointProp = 21, ///< \ru Свойство точки. \en Property of point. + pt_VectorProp = 22, ///< \ru Свойство вектора. \en Property of vector. + pt_DirectionProp = 23, ///< \ru Свойство вектора. \en Property of vector. + pt_PlacementProp = 24, ///< \ru Свойство системы координат. \en Property of coordinate system. + pt_MatrixProp = 25, ///< \ru Свойство матрицы. \en Property of matrix. + pt_CurveProp = 26, ///< \ru Свойство кривой. \en Property of curve. + pt_MultilineProp = 27, ///< \ru Свойство мультилинии. \en Property of multiline. + pt_RegionProp = 28, ///< \ru Свойство региона. \en Property of region. + pt_PntMatingProp = 29, ///< \ru Свойство сопряжения в точке. \en Property of conjugation at a point. \n + pt_PlanarPropLast = 50, ///< \ru Свойства плоских объектов вставлять перед этим значением. \en Properties of planar objects should be inserted before this value. \n // \ru Комплексные свойства пространственных объектов. \en Complex properties of spatial objects. - pt_CartPoint3DProp, ///< \ru Cвойство точки. \en Property of point. - pt_Vector3DProp, ///< \ru Cвойство вектора. \en Property of vector. - pt_Placement3DProp, ///< \ru Cвойство системы. \en Property of coordinate system. - pt_Matrix3DProp, ///< \ru Cвойство матрицы. \en Property of matrix. - pt_FloatPointProp, ///< \ru Cвойство параметра. \en Property of parameter. - pt_FloatPoint3DProp, ///< \ru Cвойство точки. \en Property of point. - pt_FloatVector3DProp, ///< \ru Cвойство вектора. \en Property of vector. - pt_TriangleProp, ///< \ru Cвойство треугольника. \en Property of triangle. - pt_QuadrangleProp, ///< \ru Cвойство четырехугольника. \en Property of quadrangle. - pt_ElementProp, ///< \ru Cвойство элемента. \en Property of element. - pt_Apex3DProp, ///< \ru Cвойство аперса. \en Property of apex. - pt_Polygon3DProp, ///< \ru Cвойство полигона. \en Property of polygon. - pt_GridProp, ///< \ru Cвойство триангуляции. \en Property of triangulation. \n + pt_CartPoint3DProp = 51, ///< \ru Свойство точки. \en Property of point. + pt_Vector3DProp = 52, ///< \ru Свойство вектора. \en Property of vector. + pt_Placement3DProp = 53, ///< \ru Свойство системы. \en Property of coordinate system. + pt_Matrix3DProp = 54, ///< \ru Свойство матрицы. \en Property of matrix. + pt_FloatPointProp = 55, ///< \ru Свойство параметра. \en Property of parameter. + pt_FloatPoint3DProp = 56, ///< \ru Свойство точки. \en Property of point. + pt_FloatVector3DProp = 57, ///< \ru Свойство вектора. \en Property of vector. + pt_TriangleProp = 58, ///< \ru Свойство треугольника. \en Property of triangle. + pt_QuadrangleProp = 59, ///< \ru Свойство четырехугольника. \en Property of quadrangle. + pt_ElementProp = 60, ///< \ru Свойство элемента. \en Property of element. + pt_Apex3DProp = 61, ///< \ru Свойство аперса. \en Property of apex. + pt_Polygon3DProp = 62, ///< \ru Свойство полигона. \en Property of polygon. + pt_GridProp = 63, ///< \ru Свойство триангуляции. \en Property of triangulation. \n + pt_SpatialPropLast = 90, ///< \ru Свойства пространственных объектов вставлять перед этим значением. \en Properties of spatial objects should be inserted before this value. \n // \ru Комплексные свойства геометрических объектов. \en Complex properties of geometric objects. - pt_FunctionProp, ///< \ru Cвойство функции. \en Property of function. - pt_Curve3DProp, ///< \ru Cвойство кривой. \en Property of curve. - pt_SurfaceProp, ///< \ru Cвойство поверхности. \en Property of surface. - pt_Point3DProp, ///< \ru Cвойство точки. \en Property of point. - pt_MarkerProp, ///< \ru Cвойство маркера ("точка присоединения"). \en Property of marker ("point of joint"). - pt_SymbolProp, ///< \ru Cвойство условного обозначения. \en Property of conventional notation. - pt_ThreadProp, ///< \ru Cвойство резьбы. \en Property of thread. - pt_Pnt3DMatingProp, ///< \ru Cвойство сопряжения в точке. \en Property of conjugation at a point. \n + pt_FunctionProp = 91, ///< \ru Свойство функции. \en Property of function. + pt_Curve3DProp = 92, ///< \ru Свойство кривой. \en Property of curve. + pt_SurfaceProp = 93, ///< \ru Свойство поверхности. \en Property of surface. + pt_Point3DProp = 94, ///< \ru Свойство точки. \en Property of point. + pt_MarkerProp = 95, ///< \ru Свойство маркера ("точка присоединения"). \en Property of marker ("point of joint"). + pt_SymbolProp = 96, ///< \ru Свойство условного обозначения. \en Property of conventional notation. + pt_ThreadProp = 97, ///< \ru Свойство резьбы. \en Property of thread. + pt_Pnt3DMatingProp = 98, ///< \ru Свойство сопряжения в точке. \en Property of conjugation at a point. \n + pt_GeomPropLast = 120, ///< \ru Свойства геометрических объектов вставлять перед этим значением. \en Properties of geometric objects should be inserted before this value. \n // \ru Комплексные свойства тел и топологических объектов. \en Complex properties of solids and topological objects. - pt_CreatorProp, ///< \ru Cвойство строителя тела. \en Property of solid creator. - pt_VertexProp, ///< \ru Cвойство вершины. \en Property of vertex. - pt_EdgeProp, ///< \ru Cвойство ребра-кривой. \en Property of edge curve. - pt_CurveEdgeProp, ///< \ru Cвойство ребра грани. \en Property of face edge. - pt_OrientedEdgeProp, ///< \ru Cвойство ориентированного ребра. \en Property of oriented edge. - pt_LoopProp, ///< \ru Cвойство цикла. \en Property of loop. - pt_FaceProp, ///< \ru Cвойство грани. \en Property of face. - pt_FaceShellProp, ///< \ru Cвойство оболочки. \en Property of shell. - pt_NameProp, ///< \ru Cвойство имени. \en Property of name. \n + pt_CreatorProp = 121, ///< \ru Свойство строителя тела. \en Property of solid creator. + pt_VertexProp = 122, ///< \ru Свойство вершины. \en Property of vertex. + pt_EdgeProp = 123, ///< \ru Свойство ребра-кривой. \en Property of edge curve. + pt_CurveEdgeProp = 124, ///< \ru Свойство ребра грани. \en Property of face edge. + pt_OrientedEdgeProp = 125, ///< \ru Свойство ориентированного ребра. \en Property of oriented edge. + pt_LoopProp = 126, ///< \ru Свойство цикла. \en Property of loop. + pt_FaceProp = 127, ///< \ru Свойство грани. \en Property of face. + pt_FaceShellProp = 128, ///< \ru Свойство оболочки. \en Property of shell. + pt_NameProp = 129, ///< \ru Свойство имени. \en Property of name. \n + pt_TopologyPropLast = 150, ///< \ru Свойства тел и топологических объектов вставлять перед этим значением. \en Properties of solids and topological objects should be inserted before this value. \n // \ru Комплексные свойства объектов модели. \en Complex properties of model objects. - pt_AssistingItemProp, ///< \ru Cвойство вспомогательного объекта. \en Property of assisting item. - pt_CollectionProp, ///< \ru Cвойство коллекции 3D элементов. \en Property of the collection of 3D elements. \n - pt_PointFrameProp, ///< \ru Cвойство точечного каркаса. \en Property of point frame. - pt_WireFrameProp, ///< \ru Cвойство проволочного каркаса. \en Property of wire frame. - pt_SolidProp, ///< \ru Cвойство тела. \en Property of solid. - pt_InstanceProp, ///< \ru Cвойство вставки объекта. \en Property of object instance. - pt_AssemblyProp, ///< \ru Cвойство сборочной единицы. \en Property of assembly unit. - pt_ConstraintSystem, ///< \ru Cвойство системы ограничений. \en Property of constraint system. - pt_MeshProp, ///< \ru Cвойство сетки. \en Property of mesh. - pt_SpaceInstanceProp, ///< \ru Cвойство объекта. \en Property of object. - pt_PlaneInstanceProp, ///< \ru Cвойство плоского объекта. \en Property of flat object. - pt_ConstraintModelProp, ///< \ru Cвойство схемы сопряжений. \en Property of conjugation scheme. - pt_ItemProp, ///< \ru Cвойство объекта. \en Property of object. - pt_ModelProp, ///< \ru Cвойство объектной модели. \en Property of object model. - pt_TransactionsProp, ///< \ru Cвойство журнала построения. \en Property of build log. - pt_AttributeContainerProp, ///< \ru Cвойство контейнера атрибутов. \en Property of attribute container. - pt_AttributeProp, ///< \ru Cвойство атрибута. \en Property of attribute. - pt_NamedAttributeContainerProp, ///< \ru Cвойство именованного контейнера атрибутов. \en Property of named attribute container. - pt_AttributeActionProp, ///< \ru Cвойство атрибута. \en Property of attribute. \n + pt_AssistingItemProp = 151, ///< \ru Свойство вспомогательного объекта. \en Property of assisting item. + pt_CollectionProp = 152, ///< \ru Свойство коллекции 3D элементов. \en Property of the collection of 3D elements. \n + pt_PointFrameProp = 153, ///< \ru Свойство точечного каркаса. \en Property of point frame. + pt_WireFrameProp = 154, ///< \ru Свойство проволочного каркаса. \en Property of wire frame. + pt_SolidProp = 155, ///< \ru Свойство тела. \en Property of solid. + pt_InstanceProp = 156, ///< \ru Свойство вставки объекта. \en Property of object instance. + pt_AssemblyProp = 157, ///< \ru Свойство сборочной единицы. \en Property of assembly unit. + pt_ConstraintSystem = 158, ///< \ru Свойство системы ограничений. \en Property of constraint system. + pt_MeshProp = 159, ///< \ru Свойство сетки. \en Property of mesh. + pt_SpaceInstanceProp = 160, ///< \ru Свойство объекта. \en Property of object. + pt_PlaneInstanceProp = 161, ///< \ru Свойство плоского объекта. \en Property of flat object. + pt_ConstraintModelProp = 162, ///< \ru Свойство схемы сопряжений. \en Property of conjugation scheme. + pt_ItemProp = 163, ///< \ru Свойство объекта. \en Property of object. + pt_ModelProp = 164, ///< \ru Свойство объектной модели. \en Property of object model. + pt_TransactionsProp = 165, ///< \ru Свойство журнала построения. \en Property of build log. + pt_AttributeContainerProp = 166, ///< \ru Свойство контейнера атрибутов. \en Property of attribute container. + pt_AttributeProp = 167, ///< \ru Свойство атрибута. \en Property of attribute. + pt_NamedAttributeContainerProp = 168, ///< \ru Свойство именованного контейнера атрибутов. \en Property of named attribute container. + pt_AttributeActionProp = 169, ///< \ru Свойство атрибута. \en Property of attribute. \n + pt_ModelPropLast = 300, ///< \ru Свойства объектов модели вставлять перед этим значением. \en Properties of model objects should be inserted before this value. \n - pt_LastPropType, ///< \ru Последний тип свойства, все остальные добавлять перед ним. \en Last type of property, any other ones must be added before. + pt_LastPropType = 1000, ///< \ru Последний тип свойства, все остальные добавлять перед ним. \en Last type of property, any other ones must be added before. }; @@ -267,19 +274,50 @@ private: bool changeable; ///< \ru Признак редактируемости. \en Attribute of editability. public: - /// \ru Конструктор. \en Constructor. + /** \brief \ru Конструктор по параметрам. + \en Constructor by parameters. \~ + \details \ru Конструктор по параметрам. \n + \en Constructor by parameters. \n \~ + \param[in] name - \ru Номер подсказки. + \en Number of hint string. \~ + \param[in] change - \ru Признак редактируемости. + \en The flag of edibility. \~ + */ MbProperty( MbePrompt name, bool change = true ) : prompt( name ), changeable( change ) {} /// \ru Деструктор. \en Destructor. virtual ~MbProperty(); /// \ru Выдать тип свойства. \en Get type of property. virtual PrePropType IsA() const = 0; - /// \ru Выдать строковое значение свойства. \en Get string value of the property. - virtual void GetCharValue( TCHAR * v ) const = 0; + /// \ru Выдать строковое значение свойства. Устаревший метод, вместо него используйте GetCharValue_s() в сочетании с GetCharLen(). + /// \en Get string value of the property. Deprecated method, use GetCharValue_s() in combination with GetCharLen() instead. + //DEPRECATE_DECLARE + virtual void GetCharValue( TCHAR * ) const = 0; + /** + \brief \ru Получить размер буфера, достаточный для размещения строкового значения свойства. + \en Get buffer size, sufficient to accommodate the string value of the property. \~ + \details \ru Возвращает размер буфера, достаточный для размещения строкового значения свойства без учета нуль-терминатора. \n + \en Returns buffer size, sufficient to accommodate the string value of the property, excluding the terminal null. \n \~ + */ + virtual size_t GetCharLen() const; + /** + \brief \ru Выдать строковое значение свойства в виде строки с нуль-терминатором. + \en Get the string value of the property as a string with a terminal null. \~ + \details \ru Выдать строковое значение свойства в виде строки с нуль-терминатором. \n + \en Get the string value of the property as a string with a terminal null. \n \~ + \param[in] v - \ru Указатель на символьный массив, куда копировать. + \en A pointer to a destination buffer to copy to. \~ + \param[in] size - \ru Размер символьного массива. + \en The size of the destination buffer. \~ + \return \ru true в случае успеха, иначе - false. + \en true if successful; otherwise, false. \~ + */ + virtual bool GetCharValue_s( TCHAR * /* v */, size_t /* size */ ) const { return false; /* Not implemented. */ } + /// \ru Выдать значение свойства. \en Get value of the property. - virtual void _GetPropertyValue( void * v, size_t size ) const = 0; + virtual void _GetPropertyValue( void *, size_t size ) const = 0; /// \ru Установить новое значение свойства. \en Set the new value of the property. - virtual void SetPropertyValue( TCHAR * v ) = 0; + virtual void SetPropertyValue( TCHAR * ) = 0; /// \ru Выдать кортеж свойств составного свойства (не атомарный объект). \en Get tuple of the complex property (non-atomic object). virtual void GetProperties( MbProperties & ) {} /// \ru Задать кортеж свойств составного свойства (не атомарный объект). \en Set tuple of the complex property (non-atomic object). @@ -307,7 +345,17 @@ class MATH_CLASS BoolProperty : public MbProperty { public : bool value; ///< \ru Значение. \en Value. - /// \ru Конструктор. \en Constructor. + /** \brief \ru Конструктор по параметрам. + \en Constructor by parameters. \~ + \details \ru Конструктор по параметрам. \n + \en Constructor by parameters. \n \~ + \param[in] name - \ru Номер подсказки. + \en Number of hint string. \~ + \param[in] initValue - \ru Значение. + \en Value. \~ + \param[in] change - \ru Признак редактируемости. + \en The flag of edibility. \~ + */ BoolProperty( MbePrompt name, bool initValue, bool change = true ) : MbProperty( name, change ) , value( initValue ) @@ -317,7 +365,27 @@ public : virtual PrePropType IsA() const; // \ru Выдать тип свойства. \en Get type of property. virtual void GetCharValue( TCHAR * v ) const; // \ru Выдать строковое значение свойства. \en Get string value of the property. - virtual void _GetPropertyValue( void * v, size_t size ) const; // \ru Выдать значение свойства. \en Get value of the property. + /** + \brief \ru Получить размер буфера, достаточный для размещения строкового значения свойства. + \en Get buffer size, sufficient to accommodate the string value of the property. \~ + \details \ru Возвращает размер буфера, достаточный для размещения строкового значения свойства без учета нуль-терминатора. \n + \en Returns buffer size, sufficient to accommodate the string value of the property, excluding the terminal null. \n \~ + */ + virtual size_t GetCharLen() const; + /** + \brief \ru Выдать строковое значение свойства в виде строки с нуль-терминатором. + \en Get the string value of the property as a string with a terminal null. \~ + \details \ru Выдать строковое значение свойства в виде строки с нуль-терминатором. \n + \en Get the string value of the property as a string with a terminal null. \n \~ + \param[in] v - \ru Указатель на символьный массив, куда копировать. + \en A pointer to a destination buffer to copy to. \~ + \param[in] size - \ru Размер символьного массива. + \en The size of the destination buffer. \~ + \return \ru true в случае успеха, иначе - false. + \en true if successful; otherwise, false. \~ + */ + virtual bool GetCharValue_s( TCHAR * v, size_t size ) const; // \ru Выдать строковое значение свойства, возвращает true при успехе или false. \en Get string value of the property. Returns true if successful; otherwise, false. + virtual void _GetPropertyValue( void * v, size_t size ) const; // \ru Выдать значение свойства. \en Get value of the property. virtual void SetPropertyValue( TCHAR * v ); // \ru Установить новое значение свойства. \en Set the new value of the property. OBVIOUS_PRIVATE_COPY( BoolProperty ) @@ -336,7 +404,17 @@ class MATH_CLASS IntProperty : public MbProperty { public : int64 value; ///< \ru Значение. \en Value. - /// \ru Конструктор. \en Constructor. + /** \brief \ru Конструктор по параметрам. + \en Constructor by parameters. \~ + \details \ru Конструктор по параметрам. \n + \en Constructor by parameters. \n \~ + \param[in] name - \ru Номер подсказки. + \en Number of hint string. \~ + \param[in] initValue - \ru Значение. + \en Value. \~ + \param[in] change - \ru Признак редактируемости. + \en The flag of edibility. \~ + */ IntProperty( MbePrompt name, int64 initValue, bool change = true ) : MbProperty( name, change ) , value( (int64)initValue ) @@ -347,6 +425,26 @@ public : virtual PrePropType IsA() const; // \ru Выдать тип свойства. \en Get type of property. virtual void GetCharValue( TCHAR * v ) const; // \ru Выдать строковое значение свойства. \en Get string value of the property. + /** + \brief \ru Получить размер буфера, достаточный для размещения строкового значения свойства. + \en Get buffer size, sufficient to accommodate the string value of the property. \~ + \details \ru Возвращает размер буфера, достаточный для размещения строкового значения свойства без учета нуль-терминатора. \n + \en Returns buffer size, sufficient to accommodate the string value of the property, excluding the terminal null. \n \~ + */ + virtual size_t GetCharLen() const; + /** + \brief \ru Выдать строковое значение свойства в виде строки с нуль-терминатором. + \en Get the string value of the property as a string with a terminal null. \~ + \details \ru Выдать строковое значение свойства в виде строки с нуль-терминатором. \n + \en Get the string value of the property as a string with a terminal null. \n \~ + \param[in] v - \ru Указатель на символьный массив, куда копировать. + \en A pointer to a destination buffer to copy to. \~ + \param[in] size - \ru Размер символьного массива. + \en The size of the destination buffer. \~ + \return \ru true в случае успеха, иначе - false. + \en true if successful; otherwise, false. \~ + */ + virtual bool GetCharValue_s( TCHAR * v, size_t size ) const; // \ru Выдать строковое значение свойства, возвращает true при успехе или false. \en Get string value of the property. Returns true if successful; otherwise, false. virtual void _GetPropertyValue( void * v, size_t size ) const; // \ru Выдать значение свойства. \en Get value of the property. virtual void SetPropertyValue( TCHAR * v ); // \ru Установить новое значение свойства. \en Set the new value of the property. @@ -366,7 +464,17 @@ class MATH_CLASS UIntProperty : public MbProperty { public : uint64 value; ///< \ru Значение. \en Value. - /// \ru Конструктор. \en Constructor. + /** \brief \ru Конструктор по параметрам. + \en Constructor by parameters. \~ + \details \ru Конструктор по параметрам. \n + \en Constructor by parameters. \n \~ + \param[in] name - \ru Номер подсказки. + \en Number of hint string. \~ + \param[in] initValue - \ru Значение. + \en Value. \~ + \param[in] change - \ru Признак редактируемости. + \en The flag of edibility. \~ + */ UIntProperty( MbePrompt name, size_t initValue, bool change = true ) : MbProperty( name, change ) , value( (uint64)initValue ) @@ -377,6 +485,26 @@ public : virtual PrePropType IsA() const; // \ru Выдать тип свойства. \en Get type of property. virtual void GetCharValue( TCHAR * v ) const; // \ru Выдать строковое значение свойства. \en Get string value of the property. + /** + \brief \ru Получить размер буфера, достаточный для размещения строкового значения свойства. + \en Get buffer size, sufficient to accommodate the string value of the property. \~ + \details \ru Возвращает размер буфера, достаточный для размещения строкового значения свойства без учета нуль-терминатора. \n + \en Returns buffer size, sufficient to accommodate the string value of the property, excluding the terminal null. \n \~ + */ + virtual size_t GetCharLen() const; + /** + \brief \ru Выдать строковое значение свойства в виде строки с нуль-терминатором. + \en Get the string value of the property as a string with a terminal null. \~ + \details \ru Выдать строковое значение свойства в виде строки с нуль-терминатором. \n + \en Get the string value of the property as a string with a terminal null. \n \~ + \param[in] v - \ru Указатель на символьный массив, куда копировать. + \en A pointer to a destination buffer to copy to. \~ + \param[in] size - \ru Размер символьного массива. + \en The size of the destination buffer. \~ + \return \ru true в случае успеха, иначе - false. + \en true if successful; otherwise, false. \~ + */ + virtual bool GetCharValue_s( TCHAR * v, size_t size ) const; // \ru Выдать строковое значение свойства, возвращает true при успехе или false. \en Get string value of the property. Returns true if successful; otherwise, false. virtual void _GetPropertyValue( void * v, size_t size ) const; // \ru Выдать значение свойства. \en Get value of the property. virtual void SetPropertyValue( TCHAR * v ); // \ru Установить новое значение свойства. \en Set the new value of the property. @@ -396,7 +524,17 @@ class MATH_CLASS DoubleProperty : public MbProperty { public : double value; ///< \ru Значение. \en Value. - /// \ru Конструктор. \en Constructor. + /** \brief \ru Конструктор по параметрам. + \en Constructor by parameters. \~ + \details \ru Конструктор по параметрам. \n + \en Constructor by parameters. \n \~ + \param[in] name - \ru Номер подсказки. + \en Number of hint string. \~ + \param[in] initValue - \ru Значение. + \en Value. \~ + \param[in] change - \ru Признак редактируемости. + \en The flag of edibility. \~ + */ DoubleProperty( MbePrompt name, double initValue, bool change = true ) : MbProperty( name, change ) , value( initValue ) @@ -406,6 +544,26 @@ public : virtual PrePropType IsA() const; // \ru Выдать тип свойства. \en Get type of property. virtual void GetCharValue( TCHAR * v ) const; // \ru Выдать строковое значение свойства. \en Get string value of the property. + /** + \brief \ru Получить размер буфера, достаточный для размещения строкового значения свойства. + \en Get buffer size, sufficient to accommodate the string value of the property. \~ + \details \ru Возвращает размер буфера, достаточный для размещения строкового значения свойства без учета нуль-терминатора. \n + \en Returns buffer size, sufficient to accommodate the string value of the property, excluding the terminal null. \n \~ + */ + virtual size_t GetCharLen() const; + /** + \brief \ru Выдать строковое значение свойства в виде строки с нуль-терминатором. + \en Get the string value of the property as a string with a terminal null. \~ + \details \ru Выдать строковое значение свойства в виде строки с нуль-терминатором. \n + \en Get the string value of the property as a string with a terminal null. \n \~ + \param[in] v - \ru Указатель на символьный массив, куда копировать. + \en A pointer to a destination buffer to copy to. \~ + \param[in] size - \ru Размер символьного массива. + \en The size of the destination buffer. \~ + \return \ru true в случае успеха, иначе - false. + \en true if successful; otherwise, false. \~ + */ + virtual bool GetCharValue_s( TCHAR * v, size_t size ) const; // \ru Выдать строковое значение свойства, возвращает true при успехе или false. \en Get string value of the property. Returns true if successful; otherwise, false. virtual void _GetPropertyValue( void * v, size_t size ) const; // \ru Выдать значение свойства. \en Get value of the property. virtual void SetPropertyValue( TCHAR * v ); // \ru Установить новое значение свойства. \en Set the new value of the property. @@ -421,15 +579,25 @@ OBVIOUS_PRIVATE_COPY( DoubleProperty ) \ingroup Model_Properties */ // --- -class MATH_CLASS NDoubleProperty : public MbProperty { +class MATH_CLASS NDoubleProperty : public DoubleProperty { public : - double value; ///< \ru Значение. \en Value. uint32 number; ///< \ru Номер. \en Number. - /// \ru Конструктор. \en Constructor. + /** \brief \ru Конструктор по параметрам. + \en Constructor by parameters. \~ + \details \ru Конструктор по параметрам. \n + \en Constructor by parameters. \n \~ + \param[in] name - \ru Номер подсказки. + \en Number of hint string. \~ + \param[in] initValue - \ru Значение. + \en Value. \~ + \param[in] change - \ru Признак редактируемости. + \en The flag of edibility. \~ + \param[in] n - \ru Номер. + \en Number. \~ + */ NDoubleProperty( MbePrompt name, double initValue, bool change = true, uint32 n = 0 ) - : MbProperty( name, change ) - , value( initValue ) + : DoubleProperty( name, initValue, change ) , number( n ) {} /// \ru Деструктор. \en Destructor. @@ -437,6 +605,26 @@ public : virtual PrePropType IsA() const; // \ru Выдать тип свойства. \en Get type of property. virtual void GetCharValue( TCHAR * v ) const; // \ru Выдать строковое значение свойства. \en Get string value of the property. + /** + \brief \ru Получить размер буфера, достаточный для размещения строкового значения свойства. + \en Get buffer size, sufficient to accommodate the string value of the property. \~ + \details \ru Возвращает размер буфера, достаточный для размещения строкового значения свойства без учета нуль-терминатора. \n + \en Returns buffer size, sufficient to accommodate the string value of the property, excluding the terminal null. \n \~ + */ + virtual size_t GetCharLen() const; + /** + \brief \ru Выдать строковое значение свойства в виде строки с нуль-терминатором. + \en Get the string value of the property as a string with a terminal null. \~ + \details \ru Выдать строковое значение свойства в виде строки с нуль-терминатором. \n + \en Get the string value of the property as a string with a terminal null. \n \~ + \param[in] v - \ru Указатель на символьный массив, куда копировать. + \en A pointer to a destination buffer to copy to. \~ + \param[in] size - \ru Размер символьного массива. + \en The size of the destination buffer. \~ + \return \ru true в случае успеха, иначе - false. + \en true if successful; otherwise, false. \~ + */ + virtual bool GetCharValue_s( TCHAR * v, size_t size ) const; // \ru Выдать строковое значение свойства, возвращает true при успехе или false. \en Get string value of the property. Returns true if successful; otherwise, false. virtual void _GetPropertyValue( void * v, size_t size ) const; // \ru Выдать значение свойства. \en Get value of the property. virtual void SetPropertyValue( TCHAR * v ); // \ru Установить новое значение свойства. \en Set the new value of the property. @@ -457,13 +645,47 @@ class MATH_CLASS StringProperty : public MbProperty TCHAR * value; ///< \ru Значение. \en Value. public: - /// \ru Конструктор. \en Constructor. + /** \brief \ru Конструктор по параметрам. + \en Constructor by parameters. \~ + \details \ru Конструктор по параметрам. + Максимальная длина строки ограничена 128 символами. + Если длина строки инициализации больше, то строка-значение обрезается.\n + \en Constructor by parameters. + The maximum string length is limited to 128 characters. + If the length of the initialization string is longer, the string-value is truncated. \n \~ + \param[in] name - \ru Номер подсказки. + \en Number of hint string. \~ + \param[in] initValue - \ru Строка инициализации. + \en Initialization string. \~ + \param[in] change - \ru Признак редактируемости. + \en The flag of editability. \~ + */ StringProperty( MbePrompt name, const TCHAR * initValue, bool change = true ); /// \ru Деструктор. \en Destructor. virtual ~StringProperty(); virtual PrePropType IsA() const; // \ru Выдать тип свойства. \en Get type of property. virtual void GetCharValue( TCHAR * v ) const; // \ru Выдать строковое значение свойства. \en Get string value of the property. + /** + \brief \ru Получить размер буфера, достаточный для размещения строкового значения свойства. + \en Get buffer size, sufficient to accommodate the string value of the property. \~ + \details \ru Возвращает размер буфера, достаточный для размещения строкового значения свойства без учета нуль-терминатора. \n + \en Returns buffer size, sufficient to accommodate the string value of the property, excluding the terminal null. \n \~ + */ + virtual size_t GetCharLen() const; + /** + \brief \ru Выдать строковое значение свойства в виде строки с нуль-терминатором. + \en Get the string value of the property as a string with a terminal null. \~ + \details \ru Выдать строковое значение свойства в виде строки с нуль-терминатором. \n + \en Get the string value of the property as a string with a terminal null. \n \~ + \param[in] v - \ru Указатель на символьный массив, куда копировать. + \en A pointer to a destination buffer to copy to. \~ + \param[in] size - \ru Размер символьного массива. + \en The size of the destination buffer. \~ + \return \ru true в случае успеха, иначе - false. + \en true if successful; otherwise, false. \~ + */ + virtual bool GetCharValue_s( TCHAR * v, size_t size ) const; // \ru Выдать строковое значение свойства, возвращает true при успехе или false. \en Get string value of the property. Returns true if successful; otherwise, false. virtual void _GetPropertyValue( void * v, size_t size ) const; // \ru Выдать значение свойства. \en Get value of the property. virtual void SetPropertyValue( TCHAR * v ); // \ru Установить новое значение свойства. \en Set the new value of the property. const TCHAR * CharValue() const { return value; } @@ -487,7 +709,17 @@ class MATH_CLASS VersionProperty : public MbProperty { public : VERSION value; ///< \ru Значение. \en Value. - /// \ru Конструктор. \en Constructor. + /** \brief \ru Конструктор по параметрам. + \en Constructor by parameters. \~ + \details \ru Конструктор по параметрам. \n + \en Constructor by parameters. \n \~ + \param[in] name - \ru Номер подсказки. + \en Number of hint string. \~ + \param[in] initValue - \ru Версия. + \en Version. \~ + \param[in] change - \ru Признак редактируемости. + \en The flag of edibility. \~ + */ VersionProperty( MbePrompt name, VERSION initValue, bool change = true ) : MbProperty( name, change ) , value( initValue ) @@ -497,6 +729,8 @@ public : virtual PrePropType IsA() const; // \ru Выдать тип свойства. \en Get type of property. virtual void GetCharValue( TCHAR * v ) const; // \ru Выдать строковое значение свойства. \en Get string value of the property. + virtual size_t GetCharLen() const; // \ru Выдать размер буфера для строкового значения свойства (без учета нуль-терминатора). \en Get buffer size for string value of the property (excluding the terminal null). + virtual bool GetCharValue_s( TCHAR * v, size_t size ) const; // \ru Выдать строковое значение свойства, возвращает true при успехе или false. \en Get string value of the property. Returns true if successful; otherwise, false. virtual void _GetPropertyValue( void * v, size_t size ) const; // \ru Выдать значение свойства. \en Get value of the property. virtual void SetPropertyValue( TCHAR * v ); // \ru Установить новое значение свойства. \en Set the new value of the property. @@ -517,8 +751,8 @@ OBVIOUS_PRIVATE_COPY( VersionProperty ) template inline void GetCharValue( const PropType *, const FieldType *, uint32 n, TCHAR * v ) { - C3D_ASSERT( v != NULL ); - if ( v != NULL ) { + C3D_ASSERT( v != c3d_null ); + if ( v != c3d_null ) { if ( n == 0 ) { v[0] = _T(' '); v[1] = _T('\0'); @@ -540,8 +774,8 @@ inline void GetCharValue( const PropType *, const FieldType *, uint32 n, TCHAR * template inline void GetCharValue( const PropType *, const MbCartPoint * value, uint32 n, TCHAR * v ) { - C3D_ASSERT( value != NULL && v != NULL ); - if ( value != NULL && v != NULL ) { + C3D_ASSERT( value != c3d_null && v != c3d_null ); + if ( value != c3d_null && v != c3d_null ) { if ( n == 0 ) _sntprintf( v, 64, _T("%.3f\t%.3f"), value->x, value->y ); else @@ -561,8 +795,8 @@ inline void GetCharValue( const PropType *, const MbCartPoint * value, uint32 n, template inline void GetCharValue( const PropType *, const MbVector * value, uint32 n, TCHAR * v ) { - C3D_ASSERT( value != NULL && v != NULL ); - if ( value != NULL && v != NULL ) { + C3D_ASSERT( value != c3d_null && v != c3d_null ); + if ( value != c3d_null && v != c3d_null ) { if ( n == 0 ) _sntprintf( v, 64, _T("%.3f\t%.3f"), value->x, value->y ); else @@ -582,8 +816,8 @@ inline void GetCharValue( const PropType *, const MbVector * value, uint32 n, TC template inline void GetCharValue( const PropType *, const MbDirection * value, uint32 n, TCHAR * v ) { - C3D_ASSERT( value != NULL && v != NULL ); - if ( value != NULL && v != NULL ) { + C3D_ASSERT( value != c3d_null && v != c3d_null ); + if ( value != c3d_null && v != c3d_null ) { double angle(0.0); if ( value->ax==0 && value->ay==0 ) angle = 0.0; @@ -608,8 +842,8 @@ inline void GetCharValue( const PropType *, const MbDirection * value, uint32 n, template inline void GetCharValue( const PropType *, const MbCartPoint3D * value, uint32 n, TCHAR * v ) { - C3D_ASSERT( value != NULL && v != NULL ); - if ( value != NULL && v != NULL ) { + C3D_ASSERT( value != c3d_null && v != c3d_null ); + if ( value != c3d_null && v != c3d_null ) { if ( n == 0 ) _sntprintf( v, 64, _T("%.3f\t%.3f\t%.3f"), value->x, value->y, value->z ); else @@ -629,8 +863,8 @@ inline void GetCharValue( const PropType *, const MbCartPoint3D * value, uint32 template inline void GetCharValue( const PropType *, const MbVector3D * value, uint32 n, TCHAR * v ) { - C3D_ASSERT( value != NULL && v != NULL ); - if ( value != NULL && v != NULL ) { + C3D_ASSERT( value != c3d_null && v != c3d_null ); + if ( value != c3d_null && v != c3d_null ) { if ( n == 0 ) _sntprintf( v, 64, _T("%.3f\t%.3f\t%.3f"), value->x, value->y, value->z ); else @@ -650,9 +884,9 @@ inline void GetCharValue( const PropType *, const MbVector3D * value, uint32 n, template inline void GetCharValue( const PropType *, const MbName * value, uint32 n, TCHAR * v ) { - C3D_ASSERT( v != NULL ); - if ( v != NULL ) { - if ( value != NULL ) { + C3D_ASSERT( v != c3d_null ); + if ( v != c3d_null ) { + if ( value != c3d_null ) { c3d::string_t str; value->ToString( str ); @@ -683,7 +917,19 @@ public : uint32 number; ///< \ru Номер. \en Number. public : - /// \ru Конструктор. \en Constructor. + /** \brief \ru Конструктор по параметрам. + \en Constructor by parameters. \~ + \details \ru Конструктор по параметрам. \n + \en Constructor by parameters. \n \~ + \param[in] name - \ru Номер подсказки. + \en Number of hint string. \~ + \param[in] initValue - \ru Указатель на объект. + \en Object pointer. \~ + \param[in] change - \ru Признак редактируемости. + \en The flag of edibility. \~ + \param[in] n - \ru Номер. + \en Number. \~ + */ MathItemProperty( MbePrompt name, Type * initValue, bool change, uint32 n = 0 ) : MbProperty( name, change ) , value( initValue ) @@ -725,7 +971,19 @@ public: uint32 number; ///< \ru Номер. \en Number. public: - /// \ru Конструктор. \en Constructor. + /** \brief \ru Конструктор по параметрам. + \en Constructor by parameters. \~ + \details \ru Конструктор по параметрам. \n + \en Constructor by parameters. \n \~ + \param[in] name - \ru Номер подсказки. + \en Number of hint string. \~ + \param[in] initValue - \ru Объект. + \en Object. \~ + \param[in] change - \ru Признак редактируемости. + \en The flag of edibility. \~ + \param[in] n - \ru Номер. + \en Number. \~ + */ MathItemCopyProperty( MbePrompt name, const Type & initValue, bool change, uint32 n = 0 ) : MbProperty( name, change ) , value( initValue ) @@ -751,7 +1009,7 @@ OBVIOUS_PRIVATE_COPY( MathItemCopyProperty ) //------------------------------------------------------------------------------ -/** \brief \ru Cвойство объекта. +/** \brief \ru Свойство объекта. \en The property of the object. \~ \details \ru Обертка, реализующая свойство объекта со счетчиком ссылок.\n \en Wrapper that implements property of an object with reference counter.\n \~ @@ -765,7 +1023,19 @@ public : uint32 number; ///< \ru Номер. \en Number. public : - /// \ru Конструктор. \en Constructor. + /** \brief \ru Конструктор по параметрам. + \en Constructor by parameters. \~ + \details \ru Конструктор по параметрам. \n + \en Constructor by parameters. \n \~ + \param[in] name - \ru Номер подсказки. + \en Number of hint string. \~ + \param[in] initValue - \ru Объект. + \en Object. \~ + \param[in] change - \ru Признак редактируемости. + \en The flag of edibility. \~ + \param[in] n - \ru Номер. + \en Number. \~ + */ RefItemProperty( MbePrompt name, Type * initValue, bool change, uint32 n = 0 ) : MbProperty( name, change ) , value ( initValue ) @@ -807,7 +1077,8 @@ public: /// \ru Конструктор. \en Constructor. MbProperties() : PArray() - , name( IDS_ITEM_0000 ) {} + , name( IDS_ITEM_0000 ) + {} public: /// \ru Выдать имя объекта. \en Get name of object. @@ -816,14 +1087,42 @@ public: size_t GetName() const { return (size_t)name; } /// \ru Выдать имя объекта. \en Get name of object. MbePrompt Name() const { return name; } - /// \ru Установить имя объекта. \en Set name of the object. + /** \brief \ru Установить имя объекта. + \en Set name of the object. \~ + \details \ru Установить имя объекта. \n + \en Set name of the object. \n \~ + \param[in] s - \ru Номер подсказки. + \en Number of hint string. \~ + */ void SetName( MbePrompt s ) { name = s; } - /// \ru Установить имя объекта. \en Set name of the object. + /** \brief \ru Установить имя объекта. + \en Set name of the object. \~ + \details \ru Установить имя объекта. \n + \en Set name of the object. \n \~ + \param[in] s - \ru Номер подсказки. + \en Number of hint string. \~ + */ void SetName( size_t s ) { name = (MbePrompt)s; } - /// \ru Найти свойство по имени и типу. \en Find property by name and type. - MbProperty * FindByPrompt( MbePrompt, uint type ) const; - /// \ru Найти индекс свойства в массиве по имени и типу. \en Find index of property in array by name and type. - size_t FindByPrompt( uint type, MbePrompt ) const; + /** \brief \ru Найти свойство. + \en Find property. \~ + \details \ru Найти свойство по имени и типу. \n + \en Find property by name and type. \n \~ + \param[in] p - \ru Номер подсказки. + \en Number of hint string. \~ + \param[in] type - \ru Тип свойства. + \en Property type. \~ + */ + MbProperty * FindByPrompt( MbePrompt p, uint type ) const; + /** \brief \ru Найти индекс свойства в массиве. + \en Find index of property in array. \~ + \details \ru Найти индекс свойства в массиве по имени и типу. \n + \en Find index of property in array by name and type. \n \~ + \param[in] type - \ru Тип свойства. + \en Property type. \~ + \param[in] p - \ru Номер подсказки. + \en Number of hint string. \~ + */ + size_t FindByPrompt( uint type, MbePrompt p ) const; OBVIOUS_PRIVATE_COPY( MbProperties ) }; // MbProperties diff --git a/C3d/Include/mb_property_title.h b/C3d/Include/mb_property_title.h index 501a2ce..c1e9caf 100644 --- a/C3d/Include/mb_property_title.h +++ b/C3d/Include/mb_property_title.h @@ -86,6 +86,10 @@ enum MbePrompt IDS_ITEM_0103, ///< \ru Матрица преобразования. \en Transformation matrix. IDS_ITEM_0104, ///< \ru Локальная система координат. \en Local coordinate system. + IDS_ITEM_0107, ///< \ru Перемещение. \en Translation. + IDS_ITEM_0108, ///< \ru Вращение. \en Rotation. + IDS_ITEM_0109, ///< \ru Трансформация. \en Transformation. + // \ru Типы функций \en Types of functions IDS_ITEM_0111, ///< \ru Kонстантная функция. \en Constant Function. @@ -137,10 +141,16 @@ enum MbePrompt IDS_ITEM_0251, ///< \ru Первое направляющее ребро. \en First Guide Edge. IDS_ITEM_0252, ///< \ru Первая направляющая кривая. \en First Guide Curve. IDS_ITEM_0253, ///< \ru Первая грань для стыковки. \en First Mating Face. - + IDS_ITEM_0254, ///< \ru Первая контрольная кривая. \en First Control Curve. + IDS_ITEM_0255, ///< \ru Первая угловая функция. \en First Angle Function. IDS_ITEM_0256, ///< \ru Второе направляющее ребро. \en Second Guide Edge. IDS_ITEM_0257, ///< \ru Вторая направляющая кривая. \en Second Guide Curve. IDS_ITEM_0258, ///< \ru Вторая грань для стыковки. \en Second Mating Face. + IDS_ITEM_0259, ///< \ru Вторая контрольная кривая. \en Second Control Curve. + IDS_ITEM_0260, ///< \ru Вторая угловая функция. \en Second Angle Function. + IDS_ITEM_0261, ///< \ru Угол к хорде. \en Angle from Chord. + IDS_ITEM_0262, ///< \ru Угол к касательной поверхности. \en Angle from Surface Tangent. + IDS_ITEM_0263, ///< \ru Угол к нормали поверхности. \en Angle from Surface Normal. // \ru Типы параметрических поверхностей. \en Types of parametric surfaces. @@ -346,11 +356,11 @@ enum MbePrompt IDS_ITEM_0651, ///< \ru Разрез тела. \en Solid Cutting. IDS_ITEM_0652, ///< \ru Сечение тела. \en Solid Section. - IDS_ITEM_0653, ///< \ru Размножение тела. \en Duplication of solids. + IDS_ITEM_0653, ///< \ru Копия объекта. \en Object copy. // \ru Вспомогательный объект. \en The helper object. - IDS_ITEM_0669, ///< \ru Вспомогательный объект. \en The helper object. + IDS_ITEM_0669, ///< \ru Вспомогательный объект. \en The Helper Object. // \ru Резьба. \en A thread. @@ -358,70 +368,70 @@ enum MbePrompt // \ru Обозначение \en Notation - IDS_ITEM_0671, ///< \ru Условное обозначение. \en Symbolic notation. + IDS_ITEM_0671, ///< \ru Условное обозначение. \en Symbolic Notation. // \ru Объекты. \en Objects. - IDS_ITEM_0700, ///< \ru Геометрический объект. \en Geometric object. - IDS_ITEM_0701, ///< \ru Переменная уравнения. \en Equation variable. - IDS_ITEM_0702, ///< \ru Объект на плоскости. \en Object on a plane. - IDS_ITEM_0703, ///< \ru Объект в пространстве. \en Object in space. - IDS_ITEM_0704, ///< \ru Объект модели. \en Model object. - IDS_ITEM_0705, ///< \ru Сборочная единица. \en Assembly unit. - IDS_ITEM_0706, ///< \ru Вспомогательный объект. \en Auxiliary object. - IDS_ITEM_0707, ///< \ru Вставка объекта. \en Object instance. - IDS_ITEM_0708, ///< \ru Количество элементов. \en Number of elements. - IDS_ITEM_0709, ///< \ru Геометрическая модель. \en Geometric model. + IDS_ITEM_0700, ///< \ru Геометрический объект. \en Geometric Object. + IDS_ITEM_0701, ///< \ru Переменная уравнения. \en Equation Variable. + IDS_ITEM_0702, ///< \ru Объект на плоскости. \en Object on a Plane. + IDS_ITEM_0703, ///< \ru Объект в пространстве. \en Object in Space. + IDS_ITEM_0704, ///< \ru Объект модели. \en Model Object. + IDS_ITEM_0705, ///< \ru Сборочная единица. \en Assembly Unit. + IDS_ITEM_0706, ///< \ru Вспомогательный объект. \en Auxiliary Object. + IDS_ITEM_0707, ///< \ru Вставка объекта. \en Object Instance. + IDS_ITEM_0708, ///< \ru Количество элементов. \en Number of Elements. + IDS_ITEM_0709, ///< \ru Геометрическая модель. \en Geometric Model. // \ru Атрибуты \en Attributes - IDS_ITEM_0729, ///< \ru Атрибуты модели. \en Model attributes. - IDS_ITEM_0730, ///< \ru Поставщик атрибутов. \en Attributes provider. - IDS_ITEM_0731, ///< \ru Атрибуты объекта. \en Object attributes. + IDS_ITEM_0729, ///< \ru Атрибуты модели. \en Model Attributes. + IDS_ITEM_0730, ///< \ru Поставщик атрибутов. \en Attributes Provider. + IDS_ITEM_0731, ///< \ru Атрибуты объекта. \en Object Attributes. IDS_ITEM_0732, ///< \ru Атрибут. \en Attribute. - IDS_ITEM_0733, ///< \ru Имя примитива. \en Primitive name. - IDS_ITEM_0734, ///< \ru Поведение атрибутов. \en Attributes behavior. + IDS_ITEM_0733, ///< \ru Имя примитива. \en Primitive Name. + IDS_ITEM_0734, ///< \ru Поведение атрибутов. \en Attributes Behavior. - IDS_ITEM_0751, ///< \ru Механические характеристики. \en Mechanical properties. + IDS_ITEM_0751, ///< \ru Механические характеристики. \en Mechanical Properties. IDS_ITEM_0754, ///< \ru Деформации. \en Strains. - IDS_ITEM_0761, ///< \ru Исполнение (вариант реализации модели). \en Embodiment (variant of model implementation). - IDS_ITEM_0762, ///< \ru Количество u-линий и v-линий отрисовочной сетки. \en The number of u-mesh and v-mesh lines. + IDS_ITEM_0761, ///< \ru Исполнение (вариант реализации модели). \en Embodiment (Variant of Model Implementation). + IDS_ITEM_0762, ///< \ru Количество u-линий и v-линий отрисовочной сетки. \en The Number of u-mesh and v-mesh Lines. IDS_ITEM_0763, ///< \ru Плотность. \en Density. IDS_ITEM_0764, ///< \ru Цвет. \en Color. IDS_ITEM_0765, ///< \ru Толщина. \en Thickness. IDS_ITEM_0766, ///< \ru Стиль. \en Style. - IDS_ITEM_0767, ///< \ru Визуальные свойства. \en Visual properties. + IDS_ITEM_0767, ///< \ru Визуальные свойства. \en Visual Properties. IDS_ITEM_0768, ///< \ru Идентификатор. \en Identifier. IDS_ITEM_0769, ///< \ru Селектированность. \en Selectivity. IDS_ITEM_0770, ///< \ru Видимость. \en Visibility. IDS_ITEM_0771, ///< \ru Измененность. \en Modification. - IDS_ITEM_0772, ///< \ru Топологическое имя. \en Topological name. + IDS_ITEM_0772, ///< \ru Топологическое имя. \en Topological Name. IDS_ITEM_0773, ///< \ru Якорь. \en Anchor. - IDS_ITEM_0774, ///< \ru Геометрический атрибут. \en Geometric attribute. - IDS_ITEM_0775, ///< \ru Метка времени обновления. \en Label of update time. - IDS_ITEM_0776, ///< \ru Уникальность ключей. \en Keys uniqueness. + IDS_ITEM_0774, ///< \ru Геометрический атрибут. \en Geometric Attribute. + IDS_ITEM_0775, ///< \ru Метка времени обновления. \en Label of Update Time. + IDS_ITEM_0776, ///< \ru Уникальность ключей. \en Keys Uniqueness. IDS_ITEM_0777, ///< \ru Имя объекта в модели. \en Name of object in the model. IDS_ITEM_0778, ///< \ru Данные об изделии. \en Product data. IDS_ITEM_0779, ///< \ru Атрибут ребра жесткости листового тела. \en Attribute of stamp rib of sheet solid. IDS_ITEM_0780, ///< \ru Атрибут отбортовки листового тела. \en Swept flange attribute of a sheet solid. - IDS_ITEM_0782, ///< \ru Атрибут пользовательский. \en Custom attribute. - IDS_ITEM_0783, ///< \ru Атрибут обобщенный. \en Generalized attribute. - IDS_ITEM_0784, ///< \ru Атрибут булев. \en Boolean attribute. - IDS_ITEM_0785, ///< \ru Атрибут целочисленный (32-битный). \en (32 bit ) Integer attribute. - IDS_ITEM_0786, ///< \ru Атрибут действительный. \en Real attribute. - IDS_ITEM_0787, ///< \ru Атрибут строковый. \en String attribute. - IDS_ITEM_0788, ///< \ru Атрибут элементарный. \en Elementary attribute. + IDS_ITEM_0782, ///< \ru Атрибут пользовательский. \en Custom Attribute. + IDS_ITEM_0783, ///< \ru Атрибут обобщенный. \en Generalized Attribute. + IDS_ITEM_0784, ///< \ru Атрибут булев. \en Boolean Attribute. + IDS_ITEM_0785, ///< \ru Атрибут целочисленный (32-битный). \en (32 bit ) Integer Attribute. + IDS_ITEM_0786, ///< \ru Атрибут действительный. \en Real Attribute. + IDS_ITEM_0787, ///< \ru Атрибут строковый. \en String Attribute. + IDS_ITEM_0788, ///< \ru Атрибут элементарный. \en Elementary Attribute. IDS_ITEM_0789, ///< \ru Пояснение. \en Prompt. - IDS_ITEM_0790, ///< \ru Атрибут int64. \en Int64 attribute. - IDS_ITEM_0791, ///< \ru Атрибут бинарный. \en Binary attribute. + IDS_ITEM_0790, ///< \ru Атрибут int64. \en Int64 Attribute. + IDS_ITEM_0791, ///< \ru Атрибут бинарный. \en Binary Attribute. // \ru Сообщения. \en Messages. IDS_ITEM_0900, ///< \ru ! Ошибка !. \en ! Error ! - IDS_ITEM_0901, ///< \ru Остановлено. \en Stopped. - IDS_ITEM_0902, ///< \ru Пропущено. \en Missed. + IDS_ITEM_0901, ///< \ru Остановлено. \en Stopped. + IDS_ITEM_0902, ///< \ru Пропущено. \en Missed. // \ru Состав объектов \en Structure of objects @@ -510,10 +520,10 @@ enum MbePrompt IDS_PROP_0152, ///< \ru Смещение зазора. \en Gap displacement. IDS_PROP_0153, ///< \ru Перемещение. \en Translation. IDS_PROP_0154, ///< \ru Вращение. \en Rotation. - IDS_PROP_0155, ///< \ru Общий масштаб. \en Common scale. + IDS_PROP_0155, ///< \ru Масштабирование. \en Scaling. IDS_PROP_0156, ///< \ru Зеркальность. \en Specularity. IDS_PROP_0157, ///< \ru Только ортогональность. \en Orthogonality only. - IDS_PROP_0158, ///< \ru Объект общего вида. \en General object. + IDS_PROP_0158, ///< \ru Трансформация. \en Transformation. IDS_PROP_0159, ///< \ru Перспектива. \en Perspective. IDS_PROP_0160, ///< \ru Локальная система координат. \en Local coordinate system. IDS_PROP_0161, ///< \ru Начальное значение. \en Start value. @@ -547,7 +557,10 @@ enum MbePrompt IDS_PROP_0188, ///< \ru Направление (вниз/вверх). \en Direction (down/up). IDS_PROP_0189, ///< \ru Радиус дуги. \en Arc radius. - IDS_PROP_0190, ///< \ru Функция дискриминанта. \en Discriminant function. + IDS_PROP_0190, ///< \ru Дискриминантная функция. \en Discriminant function. + IDS_PROP_0191, ///< \ru Дискриминантная скривая. \en Discriminant cueve. + IDS_PROP_0192, ///< \ru Дискриминантная поверхность. \en Discriminant surface. + IDS_PROP_0193, ///< \ru Дискриминантная оболочка. \en Discriminant shell. // \ru Параметры. \en Parameters. @@ -658,10 +671,10 @@ enum MbePrompt IDS_PROP_0328, ///< \ru Форма. \en Shape. IDS_PROP_0329, ///< \ru Закрепление границы поверхности. \en Surface boundary fixation. IDS_PROP_0330, ///< \ru Отличается от базовой поверхности. \en Differs from the base surface. - IDS_PROP_0331, ///< \ru Видимая длина Xmin. \en Visible length Xmin. - IDS_PROP_0332, ///< \ru Видимая длина Ymin. \en Visible length Ymin. - IDS_PROP_0333, ///< \ru Видимая длина Xmax. \en Visible length Xmax. - IDS_PROP_0334, ///< \ru Видимая длина Ymax. \en Visible length Ymax. + IDS_PROP_0331, ///< \ru Граничное значение Xmin. \en Boundary value Xmin. + IDS_PROP_0332, ///< \ru Граничное значение Ymin. \en Boundary value Ymin. + IDS_PROP_0333, ///< \ru Граничное значение Xmax. \en Boundary value Xmax. + IDS_PROP_0334, ///< \ru Граничное значение Ymax. \en Boundary value Ymax. IDS_PROP_0336, ///< \ru Число узлов по U. \en Number of knots by U. IDS_PROP_0337, ///< \ru Значение U узла. \en Value of U knot. IDS_PROP_0338, ///< \ru Число узлов по V. \en Number of knots by V. @@ -696,7 +709,7 @@ enum MbePrompt IDS_PROP_0370, ///< \ru Кривая на поверхности 0. \en Curve on surface 0. IDS_PROP_0371, ///< \ru Кривая на поверхности 1. \en Curve on surface 1. IDS_PROP_0372, ///< \ru Кривая на поверхности 2. \en Curve on surface 2. - IDS_PROP_0373, ///< \ru Кривая вершин. \en Curve of vertices. + IDS_PROP_0373, ///< \ru Кривая вершин. \en Apex Curve. IDS_PROP_0374, ///< \ru Параметр Umin. \en Parameter Umin. IDS_PROP_0375, ///< \ru Параметр Umax. \en Parameter Umax. IDS_PROP_0376, ///< \ru Параметр Vmin. \en Parameter Vmin. @@ -770,6 +783,7 @@ enum MbePrompt IDS_PROP_0517, ///< \ru Количество угловых шагов. \en Number of angular step. IDS_PROP_0518, ///< \ru Элемент. \en Element. IDS_PROP_0519, ///< \ru Сегмент полигональной сетки. \en Segment of polygonal mesh. + IDS_PROP_0520, ///< \ru Направляющая поверхность. \en Guide surface. IDS_PROP_0521, ///< \ru Длина Lx. \en Length Lx. IDS_PROP_0522, ///< \ru Ширина Ly. \en Width Ly. @@ -779,7 +793,7 @@ enum MbePrompt IDS_PROP_0526, ///< \ru Толщина стенки. \en Wall thickness. IDS_PROP_0527, ///< \ru Число вскрытых граней. \en Number of opened faces. IDS_PROP_0528, ///< \ru Форма. \en Shape. - IDS_PROP_0529, ///< \ru Сохранять кромку\поверхность\автоопределение. \en Keep the boundary\surface\auto. + IDS_PROP_0529, ///< \ru Сохранять кромку, поверхность или режим автоопределения. \en Keep the boundary, surface or auto mode. IDS_PROP_0530, ///< \ru Продолжить далее. \en Continue. IDS_PROP_0531, ///< \ru Катет 1. \en Cathetus 1. IDS_PROP_0532, ///< \ru Катет 2. \en Cathetus 2. @@ -870,7 +884,7 @@ enum MbePrompt IDS_PROP_0614, ///< \ru Номер по порядку. \en Number by and index. IDS_PROP_0615, ///< \ru Сортировка. \en Sorting. IDS_PROP_0616, ///< \ru Пуансон или матрица. \en Punch or die. - IDS_PROP_0617, ///< \ru Постоянность толщины штамповки. \en Stamp constant thickness. + IDS_PROP_0617, ///< \ru Скруглять острые ребра инструмента. \en Fillet sharp edges of tool solid. IDS_PROP_0651, ///< \ru Разрезанное тело. \en Cutting solid. IDS_PROP_0652, ///< \ru Плоскость раскроя. \en Cutting plane. IDS_PROP_0654, ///< \ru Наличие штриховки. \en Whether there is hatching. diff --git a/C3d/Include/mb_rough.h b/C3d/Include/mb_rough.h index 336d668..87b1d0f 100644 --- a/C3d/Include/mb_rough.h +++ b/C3d/Include/mb_rough.h @@ -62,7 +62,7 @@ public: \en \name Common functions of a geometric object. \{ */ virtual MbeSpaceType IsA () const; - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; virtual bool SetEqual ( const MbSpaceItem & ); @@ -133,12 +133,12 @@ public: \{ */ virtual MbeSpaceType IsA () const; - virtual MbSpaceItem & Duplicate ( MbRegDuplicate * = NULL ) const; + virtual MbSpaceItem & Duplicate ( MbRegDuplicate * = c3d_null ) const; virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; virtual bool SetEqual ( const MbSpaceItem & ); - virtual void Transform ( const MbMatrix3D &, MbRegTransform * = NULL ); - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); - virtual void Rotate ( const MbAxis3D &, double, MbRegTransform * = NULL ); + virtual void Transform ( const MbMatrix3D &, MbRegTransform * = c3d_null ); + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); + virtual void Rotate ( const MbAxis3D &, double, MbRegTransform * = c3d_null ); virtual void GetProperties( MbProperties & ); virtual void SetProperties( const MbProperties & ); diff --git a/C3d/Include/mb_symbol.h b/C3d/Include/mb_symbol.h index 7e7f730..4846a28 100644 --- a/C3d/Include/mb_symbol.h +++ b/C3d/Include/mb_symbol.h @@ -123,13 +123,13 @@ public: \{ */ virtual MbeSpaceType IsA() const = 0; virtual MbeSpaceType Type() const; - virtual MbSpaceItem & Duplicate ( MbRegDuplicate * = NULL ) const = 0; + virtual MbSpaceItem & Duplicate ( MbRegDuplicate * = c3d_null ) const = 0; virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const = 0; virtual bool IsSimilar ( const MbSpaceItem & ) const; virtual bool SetEqual ( const MbSpaceItem & ) = 0; - virtual void Transform ( const MbMatrix3D &, MbRegTransform * = NULL ) = 0; - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ) = 0; - virtual void Rotate ( const MbAxis3D &, double, MbRegTransform * = NULL ) = 0; + virtual void Transform ( const MbMatrix3D &, MbRegTransform * = c3d_null ) = 0; + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ) = 0; + virtual void Rotate ( const MbAxis3D &, double, MbRegTransform * = c3d_null ) = 0; virtual double DistanceToPoint ( const MbCartPoint3D & ) const; virtual void AddYourGabaritTo ( MbCube & ) const {}; virtual void CalculateMesh ( const MbStepData & stepData, const MbFormNote & note, MbMesh & mesh ) const; @@ -239,12 +239,12 @@ public: \en \name Common functions of a geometric object. \{ */ virtual MbeSpaceType IsA () const; - virtual MbSpaceItem & Duplicate ( MbRegDuplicate * = NULL ) const; + virtual MbSpaceItem & Duplicate ( MbRegDuplicate * = c3d_null ) const; virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; virtual bool SetEqual ( const MbSpaceItem & ); - virtual void Transform ( const MbMatrix3D &, MbRegTransform * = NULL ); - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); - virtual void Rotate ( const MbAxis3D &, double, MbRegTransform * = NULL ); + virtual void Transform ( const MbMatrix3D &, MbRegTransform * = c3d_null ); + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); + virtual void Rotate ( const MbAxis3D &, double, MbRegTransform * = c3d_null ); virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта. \en Set properties of the object. diff --git a/C3d/Include/mb_thread.h b/C3d/Include/mb_thread.h index 0ac9375..7d6d709 100644 --- a/C3d/Include/mb_thread.h +++ b/C3d/Include/mb_thread.h @@ -284,13 +284,13 @@ public: \{ */ virtual MbeSpaceType IsA() const; virtual MbeSpaceType Type() const; - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; virtual bool IsSame ( const MbSpaceItem &, double accuracy = LENGTH_EPSILON ) const; virtual bool IsSimilar ( const MbSpaceItem & ) const; virtual bool SetEqual( const MbSpaceItem & ); - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); - virtual void Rotate ( const MbAxis3D &, double, MbRegTransform * = NULL ); + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); + virtual void Rotate ( const MbAxis3D &, double, MbRegTransform * = c3d_null ); virtual double DistanceToPoint ( const MbCartPoint3D & ) const; virtual void AddYourGabaritTo( MbCube & ) const; virtual void Refresh(); @@ -379,7 +379,7 @@ public : \return \ru true, если имя есть и оно не пустое. \en True if there is name and it is not empty. \~ */ - bool IsName() const { return ((name != NULL) ? name->IsEmpty() : false); } + bool IsName() const { return ((name != c3d_null) ? name->IsEmpty() : false); } /** \} */ /**\ru \name Функции работы с телами, на которых нарезана резьба. @@ -562,7 +562,7 @@ public : */ bool IsMatedTo( const MbThread & otherThread, const MbThreadedJointCheckParameters & checkParams, - ThreadedJointErrors * thrJointErrors = NULL ) const; + ThreadedJointErrors * thrJointErrors = c3d_null ) const; /// \ru Принадлежит ли резьба грани. \en Check if thread belongs to face. bool IsFaceThread( const MbFace *, const MbMatrix3D & ) const; @@ -583,8 +583,8 @@ public : \en True if thread belongs to one of solid faces. \~ */ bool IsBodyThread( const MbSolid & solid, const MbMatrix3D & matrix, - c3d::IndicesVector * simObjNumbers = NULL, - c3d::IndicesVector * intObjNumbers = NULL ) const; + c3d::IndicesVector * simObjNumbers = c3d_null, + c3d::IndicesVector * intObjNumbers = c3d_null ) const; /** \brief \ru Принадлежит ли резьба телу. \en Check if thread belongs to solid. \~ @@ -612,7 +612,7 @@ public : \return \ru true в случае успеха операции. \en True if the operation is successful. \~ */ - bool AdaptToBody( const MbSolid & solid, const MbMatrix3D & matrix, MbeThrAdapt thrAdapt, const ThreadLimiters * limiters = NULL ); + bool AdaptToBody( const MbSolid & solid, const MbMatrix3D & matrix, MbeThrAdapt thrAdapt, const ThreadLimiters * limiters = c3d_null ); /** \brief \ru Выдать начало и конец изменённой резьбы относительно исходной. \en Get limit positions of the modified thread in regard to an initial thread. \~ @@ -737,7 +737,7 @@ bool MbThread::FindThreadBodies( const SolidsVector & solids, const MatricesVect MbCube solidCube; for ( size_t i = 0; i < solidsCnt; ++i ) { const MbSolid * solid = solids[i]; - if ( solid != NULL && solid->GetShell() != NULL ) { + if ( solid != c3d_null && solid->GetShell() != c3d_null ) { solidCube.SetEmpty(); solid->AddYourGabaritTo( solidCube ); if ( cube.Intersect( solidCube ) && IsBodyThread( *solid, matrices[i] ) ) @@ -788,32 +788,32 @@ bool CheckThreads( ThreadsVector & threads, const MbPlacement3D * placeSec, bool for ( size_t i = threads.size(); i--; ) { MbThread * thr = threads[i]; - if ( (thr == C3D_NULL_PTR) || !thr->IsValid() ) { + if ( (thr == c3d_null) || !thr->IsValid() ) { threads.erase( threads.begin() + i ); - thr = C3D_NULL_PTR; + thr = c3d_null; } - else if ( checkThreadNames && (thr->GetName() == C3D_NULL_PTR) ) { // C3D-695 : KOMPAS-25125 + else if ( checkThreadNames && (thr->GetName() == c3d_null) ) { // C3D-695 : KOMPAS-25125 threads.erase( threads.begin() + i ); - thr = C3D_NULL_PTR; + thr = c3d_null; } else { if ( threads.size() > 1 ) { for ( ptrdiff_t j = i - 1; j >= 0; j-- ) { if ( thr == threads[j] ) { - threads[i] = C3D_NULL_PTR; + threads[i] = c3d_null; threads.erase( threads.begin() + i ); C3D_ASSERT_UNCONDITIONAL( false ); // Error case! - thr = C3D_NULL_PTR; + thr = c3d_null; break; } } } } - if ( thr != C3D_NULL_PTR ) // KOMPAS-37171 + if ( thr != c3d_null ) // KOMPAS-37171 thr->DetachWrongBodies(); } - if ( !threads.empty() && (placeSec != C3D_NULL_PTR) ) { + if ( !threads.empty() && (placeSec != c3d_null) ) { const MbVector3D & axisZsec = placeSec->GetAxisZ(); for ( size_t i = threads.size(); i--; ) { const MbThread * thr = threads[i]; diff --git a/C3d/Include/mb_variables.h b/C3d/Include/mb_variables.h index e7320d9..7d4fec9 100644 --- a/C3d/Include/mb_variables.h +++ b/C3d/Include/mb_variables.h @@ -243,6 +243,8 @@ c3d_constexpr uint8 MB_UNSET = 0x80; ///< \ru Битовые флаг class MATH_CLASS MbRefItem; class VersionContainer; +// \ru Управление реализацией переменных в Math. \en Managing variables implemenetation in Math. +#define USE_VAR_CLASSES //------------------------------------------------------------------------------ /** \brief \ru Общие статические данные алгоритмов и функций. @@ -270,22 +272,21 @@ public: /// unpredictable results when using parallel calculations. static void SetUserValue( int index, double value ); - +#ifdef USE_VAR_CLASSES //------------------------------------------------------------------------------ - // \ru Классы переменных, которые могут меняться с помощью функций SetVarValue(), RestoreVarValue() и SetDefaultValues(). + // \ru Классы переменных, значения которых могут меняться с помощью функций SetVarValue(), RestoreVarValue() и SetDefaultValues(). // \en Classes of variables which can be changed using SetVarValue(), RestoreVarValue() and SetDefaultValues() functions. //--- class MATH_CLASS DoubleVariable { protected: - size_t _id; - double * _value; + std::vector _values; ///< \ru Значения переменной для потоков. \en The variable values for threads. public: - DoubleVariable( double v ); + DoubleVariable( double value ); - const double & operator()() { return *_value; } - double operator()() const { return *_value; } - operator double() const { return *_value; } + const double & operator()() { if (_values.size() == 1 ) return _values[0]; return Get(); } + double operator()() const { if (_values.size() == 1 ) return _values[0]; return Get(); } + operator double() const { if (_values.size() == 1 ) return _values[0]; return Get(); } void SetVarValue( double val ); void RestoreVarValue(); @@ -296,19 +297,20 @@ public: DoubleVariable(); DoubleVariable & operator=( double v ); DoubleVariable & operator=( const DoubleVariable & v ); + const double & Get() const; + double & Get(); }; class MATH_CLASS SizeVariable { protected: - size_t _id; - size_t * _value; + std::vector _values; ///< \ru Значения переменной для потоков. \en The variable values for threads. public: - SizeVariable( size_t v ); + SizeVariable( size_t val ); - const size_t & operator()() { return *_value; } - size_t operator()() const { return *_value; } - operator size_t() const { return *_value; } + const size_t & operator()() { if ( _values.size() == 1 ) return _values[0]; return Get(); } + size_t operator()() const { if ( _values.size() == 1 ) return _values[0]; return Get(); } + operator size_t() const { if ( _values.size() == 1 ) return _values[0]; return Get(); } void SetVarValue( size_t val ); void RestoreVarValue(); @@ -319,6 +321,8 @@ public: SizeVariable(); SizeVariable & operator=( size_t v ); SizeVariable & operator=( const SizeVariable & v ); + const size_t & Get() const; + size_t & Get(); }; //------------------------------------------------------------------------------ @@ -329,7 +333,7 @@ public: { DoubleVariable _var; public: - GroupVariable( double v ) : _var( v ) {} + GroupVariable( double val ) : _var( val ) {} const double & operator()() { return _var(); } double operator()() const { return _var(); } @@ -340,14 +344,14 @@ public: protected: void SetVarValue( double val ) { _var.SetVarValue( val ); } + void RestoreVarValue(); private: GroupVariable(); GroupVariable & operator=( double v ); GroupVariable & operator=( const GroupVariable & v ); - void RestoreVarValue(); }; - +#endif //------------------------------------------------------------------------------ // \ru Константы. \en Constants. @@ -398,6 +402,7 @@ public: // \ru Изменяемые переменные. \en Controlled variables. //--- public: +#ifdef USE_VAR_CLASSES // \ru Изменяются только в группе с помощью функций SetUserValue() и SetDefaultValues(). // \en Can be changed only in a group using functions SetUserValue() and SetDefaultValues(). static GroupVariable LengthEps; ///< \ru Точность вычисления длины (PARAM_PRECISION). \en Length calculation tolerance (PARAM_PRECISION). @@ -424,7 +429,31 @@ public: static SizeVariable curveDegree; ///< \ru Порядок кривой (NURBS_DEGREE). \en Curve degree (NURBS_DEGREE). static SizeVariable uSurfaceDegree; ///< \ru Порядок поверхности по U. \en Surface degree by U. static SizeVariable vSurfaceDegree; ///< \ru Порядок поверхности по V. \en Surface degree by V. +#else + static double LengthEps; ///< \ru Точность вычисления длины (PARAM_PRECISION). \en Length calculation tolerance (PARAM_PRECISION). + static double AngleEps; ///< \ru Точность вычисления угла. \en Angular tolerance. + static double NewtonEps; ///< \ru Точность численного решения уравнений. \en Tolerance of numerical solution of equation. + static double NewtonReg; ///< \ru Точность проверки решения уравнений. \en Solution of equation checking tolerance. + + static double paramEpsilon; ///< \ru Точность параметра кривой. \en Curve parameter tolerance. + static double paramRegion; ///< \ru Точность проверки параметра кривой. \en Curve parameter checking tolerance. + static double paramPrecision; ///< \ru Параметрическая погрешность. \en Parametric tolerance. + static double paramAccuracy; ///< \ru Наибольшая параметрическая погрешность. \en The largest parametric tolerance. + static double paramNear; ///< \ru Параметрическая близость. \en Parametric proximity. + + static double lowRenderAng; ///< \ru Угол для минимального количества отображаемых сегментов. \en Angle for minimum mapping segments count. + static double higRenderAng; ///< \ru Угол для максимального количества отображаемых сегментов. \en Angle for maximum mapping segments count. + + static double deviateSag; ///< \ru Угловая толерантность. \en Angular tolerance. + static double visualSag; ///< \ru Величина стрелки прогиба для визуализации. \en Value of sag for visualization. + + static size_t newtonCount; ///< \ru Число приближений в итерационном методе. \en Number of approximations in iterative method. + static size_t newtonLimit; ///< \ru Количество итераций решения системы уравнений методом Newton. \en Iterations count for solving system of equations by Newton method. + static size_t curveDegree; ///< \ru Порядок кривой (NURBS_DEGREE). \en Curve degree (NURBS_DEGREE). + static size_t uSurfaceDegree; ///< \ru Порядок поверхности по U. \en Surface degree by U. + static size_t vSurfaceDegree; ///< \ru Порядок поверхности по V. \en Surface degree by V. +#endif //------------------------------------------------------------------------------ // \ru Временные переменные. \en Temporary variables. @@ -547,6 +576,29 @@ public: }; // Math +#ifndef USE_VAR_CLASSES + +#define LengthEps() LengthEps +#define deviateSag() deviateSag +#define AngleEps() AngleEps +#define paramRegion() paramRegion +#define paramEpsilon() paramEpsilon +#define NewtonEps() NewtonEps +#define NewtonReg() NewtonReg +#define paramPrecision() paramPrecision +#define paramAccuracy() paramAccuracy +#define paramNear() paramNear +#define lowRenderAng() lowRenderAng +#define higRenderAng() higRenderAng +#define deviateSag() deviateSag +#define visualSag() visualSag +#define newtonCount() newtonCount +#define newtonLimit() newtonLimit +#define curveDegree() curveDegree +#define uSurfaceDegree() uSurfaceDegree +#define vSurfaceDegree() vSurfaceDegree + +#endif //------------------------------------------------------------------------------ // Оставить от пути только имя файла. @@ -567,7 +619,7 @@ MATH_FUNC(const char *) C3DFileNameOnly( const char * path ); #ifdef C3D_DEBUG #define C3D_ASSERT_UNCONDITIONAL(expr) \ - { const c3d::eAssertViolationNotify notify = Math::CheckAssertNotify(); \ + { const c3d::eAssertViolationNotify notify = ::Math::CheckAssertNotify(); \ if ( c3d::avn_ASSERT == notify ) { _ASSERT(false); } \ else if ( c3d::avn_CERR == notify ) { C3D_ASSERT_AS_CERR(expr) } \ } @@ -594,8 +646,8 @@ extern "C" \en Pointer to the beginning of the buffer. \~ \param[in] bufferSize - \ru Размер буфера, в символах. \en The size of the buffer in characters. \~ - \return \ru Возвращает количество скопированных символов, без учета null-символа. Если buffer == nullptr возвращается необходимый размер буфера без учета null-символа. - \en Returns the number of copied characters, excluding the null character. If buffer = = null ptr returns the required buffer size without the null character. \~ + \return \ru Возвращает количество скопированных символов, без учета null-символа. Если buffer == c3d_null возвращается необходимый размер буфера без учета null-символа. + \en Returns the number of copied characters, excluding the null character. If buffer = = c3d_null returns the required buffer size without the null character. \~ */ extern MATH_FUNC(size_t) GetC3dVersionInfo( char * const buffer, size_t bufferSize ); ///< \ru Информация о версии c3d.dll \en c3d.dll version information @@ -608,8 +660,8 @@ extern "C" \en Pointer to the beginning of the buffer. \~ \param[in] bufferSize - \ru Размер буфера, в символах. \en The size of the buffer in characters. \~ - \return \ru Возвращает количество скопированных символов, без учета null-символа. Если buffer == nullptr возвращается необходимый размер буфера без учета null-символа. - \en Returns the number of copied characters, excluding the null character. If buffer = = null ptr returns the required buffer size without the null character. \~ + \return \ru Возвращает количество скопированных символов, без учета null-символа. Если buffer == c3d_null возвращается необходимый размер буфера без учета null-символа. + \en Returns the number of copied characters, excluding the null character. If buffer = = c3d_null returns the required buffer size without the null character. \~ */ extern MATH_FUNC(size_t) GetC3dBuildInfo( char * const buffer, size_t bufferSize ); ///< \ru Информация о сборке c3d.dll \en c3d.dll building information @@ -630,7 +682,7 @@ inline std::string GetC3dLibInfo( bool needVersionInfo = true ) size_t( *GetLibInfo )( char * const buffer, size_t bufferSize ); GetLibInfo = ( needVersionInfo ) ? GetC3dVersionInfo : GetC3dBuildInfo; - std::vector buffer( GetLibInfo( C3D_NULL_PTR, 1 ) ); + std::vector buffer( GetLibInfo( c3d_null, 1 ) ); GetLibInfo( &buffer[0], buffer.size() ); diff --git a/C3d/Include/mesh.h b/C3d/Include/mesh.h index e1bf88f..9020c54 100644 --- a/C3d/Include/mesh.h +++ b/C3d/Include/mesh.h @@ -112,10 +112,10 @@ public: // \ru Общие функции геометрического объекта. \en Common functions of a geometric object. virtual MbeSpaceType IsA() const; // \ru Тип объекта. \en Type of the object. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Создать копию. \en Create a copy. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвинуть вдоль вектора. \en Translate along a vector. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Создать копию. \en Create a copy. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвинуть вдоль вектора. \en Translate along a vector. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Являются ли объекты равными? \en Determine whether objects are equal. virtual bool SetEqual ( const MbSpaceItem & init ); // \ru Сделать объекты равным. \en Make equal objects. virtual double DistanceToPoint ( const MbCartPoint3D & ) const; // \ru Вычислить расстояние до точки. \en Calculate the distance to a point. @@ -181,7 +181,7 @@ public: gridsVector.reserve( gridsVector.size() + grids.size() ); for( size_t i = 0, iCount = grids.size(); i < iCount; ++i ) { MbGrid * gr = grids[i]; - if ( gr != NULL ) { + if ( gr != c3d_null ) { gr->DecRef(); gridsVector.push_back( gr ); } @@ -193,9 +193,9 @@ public: cube.SetEmpty(); } /// \ru Вернуть указатель на триангуляцию по её номеру. \en Return pointer to triangulation by it number. - const MbGrid * GetGrid( size_t i ) const { return ( (i < grids.size()) ? grids[i]: NULL ); } + const MbGrid * GetGrid( size_t i ) const { return ( (i < grids.size()) ? grids[i]: c3d_null ); } /// \ru Вернуть указатель на триангуляцию по её номеру для модификации. \en Return the pointer to triangulation by its number to be modified. - MbGrid * SetGrid( size_t i ) { return ( (i < grids.size()) ? grids[i]: NULL ); } + MbGrid * SetGrid( size_t i ) { return ( (i < grids.size()) ? grids[i]: c3d_null ); } /// \ru Получить указатели на триангуляции. \en Get pointers to triangulations. template void GetGrids( GridsVector & gridsVector ) const { @@ -220,7 +220,7 @@ public: polyVector.reserve( polyVector.size() + wires.size() ); for( size_t i = 0, iCount = wires.size(); i < iCount; ++i ) { MbPolygon3D * pl = wires[i]; - if ( pl != NULL ) { + if ( pl != c3d_null ) { pl->DecRef(); polyVector.push_back( pl ); } @@ -232,9 +232,9 @@ public: cube.SetEmpty(); } /// \ru Вернуть указатель на полигон по его номеру. \en Return the pointer to polygon by its number. - const MbPolygon3D * GetPolygon( size_t i ) const { return ( (i < wires.size()) ? wires[i]: NULL ); } + const MbPolygon3D * GetPolygon( size_t i ) const { return ( (i < wires.size()) ? wires[i]: c3d_null ); } /// \ru Вернуть указатель на полигон по его номеру. \en Return the pointer to polygon by its number. - MbPolygon3D * SetPolygon( size_t i ) { return ( (i < wires.size()) ? wires[i]: NULL ); } + MbPolygon3D * SetPolygon( size_t i ) { return ( (i < wires.size()) ? wires[i]: c3d_null ); } /// \ru Получить указатели на полигоны. \en Get pointers to polygons. template void GetPolygons( PolygonsVector & polyVector ) const { @@ -259,7 +259,7 @@ public: peakVector.reserve( peakVector.size() + peaks.size() ); for( size_t i = 0, iCount = peaks.size(); i < iCount; ++i ) { MbApex3D * peak = peaks[i]; - if ( peak != NULL ) { + if ( peak != c3d_null ) { peak->DecRef(); peakVector.push_back( peak ); } @@ -271,9 +271,9 @@ public: cube.SetEmpty(); } /// \ru Вернуть указатель на апекс по его номеру. \en Return the pointer to apex by its number. - const MbApex3D * GetApex( size_t i ) const { return ( (i < peaks.size()) ? peaks[i]: NULL ); } + const MbApex3D * GetApex( size_t i ) const { return ( (i < peaks.size()) ? peaks[i]: c3d_null ); } /// \ru Вернуть указатель на апекс по его номеру для модификации. \en Return the pointer to apex by its number to be modified. - MbApex3D * SetApex( size_t i ) { return ( (i < peaks.size()) ? peaks[i]: NULL ); } + MbApex3D * SetApex( size_t i ) { return ( (i < peaks.size()) ? peaks[i]: c3d_null ); } /// \ru Получить указатели на вершины. \en Get pointers to apexes. template void GetApexes( ApexesVector & peakVector ) const { @@ -294,14 +294,14 @@ public: bool AddMesh( const MbMesh &, bool checkSamePointers ); /// \ru Получить пространственный объект, для которого построен полигональный объект. \en Get a spatial object for which a polygonal object is constructed. - const MbSpaceItem * SpaceItem() const { return ((item != NULL && item->RefType() == rt_SpaceItem) ? (const MbSpaceItem *)item : NULL); } + const MbSpaceItem * SpaceItem() const { return ((item != c3d_null && item->RefType() == rt_SpaceItem) ? (const MbSpaceItem *)item : c3d_null); } /// \ru Получить двумерный объект, для которого построен полигональный объект. \en Get a two-dimensional object for which a polygonal object is constructed. - const MbPlaneItem * PlaneItem() const { return ((item != NULL && item->RefType() == rt_PlaneItem) ? (const MbPlaneItem *)item : NULL); } + const MbPlaneItem * PlaneItem() const { return ((item != c3d_null && item->RefType() == rt_PlaneItem) ? (const MbPlaneItem *)item : c3d_null); } /// \ru Получить объект геометрической модели, для которого построен полигональный объект. \en Get a model geometric object for which a polygonal object is constructed. const MbItem * Item() const { - const MbItem * modelItem = NULL; - if ( item != NULL ) { + const MbItem * modelItem = c3d_null; + if ( item != c3d_null ) { MbeRefType refType = item->RefType(); if ( refType == rt_SpaceItem ) { if ( static_cast(item)->Family() == st_Item ) diff --git a/C3d/Include/mesh_grid.h b/C3d/Include/mesh_grid.h index 0f3d9e1..7c9da46 100644 --- a/C3d/Include/mesh_grid.h +++ b/C3d/Include/mesh_grid.h @@ -57,7 +57,7 @@ public: // \ru \name Общие функции примитива. \en \name Common functions of primitive. virtual MbePrimitiveType IsA() const; // \ru Тип объекта. \en A type of an object. - virtual MbExactGrid & Duplicate( MbRegDuplicate * iReg = NULL ) const; // \ru Создать копию объекта. \en Create a copy of the object. + virtual MbExactGrid & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; // \ru Создать копию объекта. \en Create a copy of the object. virtual void Transform( const MbMatrix3D & matr ); // \ru Преобразовать сетку согласно матрице. \en Transform mesh according to the matrix. virtual void Move ( const MbVector3D & to ); // \ru Сдвиг сетки. \en Move mesh. virtual void Rotate ( const MbAxis3D & axis, double angle ); // \ru Поворот сетки вокруг оси. \en Rotation of mesh about an axis. @@ -321,11 +321,11 @@ public: /// \ru Выдать адрес начала массива. \en Get the address of the beginning of the array. virtual const MbCartPoint * GetExactParamsAddr() const { return &(params[0]); } /// \ru Выдать адрес начала массива. \en Get the address of the beginning of the array. - virtual const MbFloatPoint3D * GetFloatPointsAddr() const { return NULL; } + virtual const MbFloatPoint3D * GetFloatPointsAddr() const { return c3d_null; } /// \ru Выдать адрес начала массива. \en Get the address of the beginning of the array. - virtual const MbFloatVector3D * GetFloatNormalsAddr() const { return NULL; } + virtual const MbFloatVector3D * GetFloatNormalsAddr() const { return c3d_null; } /// \ru Выдать адрес начала массива. \en Get the address of the beginning of the array. - virtual const MbFloatPoint * GetFloatParamsAddr() const { return NULL; } + virtual const MbFloatPoint * GetFloatParamsAddr() const { return c3d_null; } private : // \ru Объявление оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration of the assignment operator without implementation, to prevent an assignment by default. @@ -371,7 +371,7 @@ public: // \ru \name Общие функции примитива. \en \name Common functions of primitive. virtual MbePrimitiveType IsA() const; // \ru Тип объекта. \en A type of an object. - virtual MbFloatGrid & Duplicate( MbRegDuplicate * iReg = NULL ) const; // \ru Создать копию объекта. \en Create a copy of the object. + virtual MbFloatGrid & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; // \ru Создать копию объекта. \en Create a copy of the object. virtual void Transform( const MbMatrix3D & matr ); // \ru Преобразовать сетку согласно матрице. \en Transform mesh according to the matrix. virtual void Move ( const MbVector3D & to ); // \ru Сдвиг сетки. \en Move mesh. virtual void Rotate ( const MbAxis3D & axis, double angle ); // \ru Поворот сетки вокруг оси. \en Rotation of mesh about an axis. @@ -629,11 +629,11 @@ public: virtual void Init( const MbGrid & grid ); /// \ru Выдать адрес начала массива. \en Get the address of the beginning of the array. - virtual const MbCartPoint3D * GetExactPointsAddr() const { return NULL; } + virtual const MbCartPoint3D * GetExactPointsAddr() const { return c3d_null; } /// \ru Выдать адрес начала массива. \en Get the address of the beginning of the array. - virtual const MbVector3D * GetExactNormalsAddr() const { return NULL; } + virtual const MbVector3D * GetExactNormalsAddr() const { return c3d_null; } /// \ru Выдать адрес начала массива. \en Get the address of the beginning of the array. - virtual const MbCartPoint * GetExactParamsAddr() const { return NULL; } + virtual const MbCartPoint * GetExactParamsAddr() const { return c3d_null; } /// \ru Выдать адрес начала массива. \en Get the address of the beginning of the array. virtual const MbFloatPoint3D * GetFloatPointsAddr() const { return &(points[0]); } /// \ru Выдать адрес начала массива. \en Get the address of the beginning of the array. diff --git a/C3d/Include/mesh_plane_grid.h b/C3d/Include/mesh_plane_grid.h index 10328c4..190f256 100644 --- a/C3d/Include/mesh_plane_grid.h +++ b/C3d/Include/mesh_plane_grid.h @@ -215,7 +215,7 @@ private: intptr_t size; ///< \ru Количество вершин. \en Count of vertices. public: - TriPoly() : vertex( NULL ), size( 0 ) {} + TriPoly() : vertex( c3d_null ), size( 0 ) {} TriPoly( TriVertex * vert ) : vertex( vert ), size( 0 ) { Resize(); } public: @@ -223,7 +223,7 @@ public: public: intptr_t Size() const { return size; } ///< \ru Размер цепочки вершин \en Size of vertex chain - size_t Index() const { return (vertex != NULL) ? vertex->Index() : SYS_MAX_T; } ///< \ru Индекс вершины \en Index of vertex + size_t Index() const { return (vertex != c3d_null) ? vertex->Index() : SYS_MAX_T; } ///< \ru Индекс вершины \en Index of vertex TriVertex * This() const { return vertex; } ///< \ru Текущая вершина \en Current vertex TriVertex * Next() const; ///< \ru Следующая вершина \en Next vertex @@ -301,7 +301,7 @@ protected: // \ru 2 - смедный через ребра на вершинах 2,0 \en 2 - adjacent at edge with vertices 2,0 public: - MbLinkedTri() : MbTri() { neighbors[0] = neighbors[1] = neighbors[2] = NULL; }; + MbLinkedTri() : MbTri() { neighbors[0] = neighbors[1] = neighbors[2] = c3d_null; }; ~MbLinkedTri() {}; public: MbTri * GetNeighbor( size_t n ) const { return neighbors[n % 3]; } @@ -317,9 +317,9 @@ OBVIOUS_PRIVATE_COPY( MbLinkedTri ) // --- inline bool MbLinkedTri::IsBoundary() const { - bool isBoundary = (neighbors[0] == NULL) || - (neighbors[1] == NULL) || - (neighbors[2] == NULL); + bool isBoundary = (neighbors[0] == c3d_null) || + (neighbors[1] == c3d_null) || + (neighbors[2] == c3d_null); return isBoundary; } // */ diff --git a/C3d/Include/mesh_polygon.h b/C3d/Include/mesh_polygon.h index 915bfcc..0cbafd6 100644 --- a/C3d/Include/mesh_polygon.h +++ b/C3d/Include/mesh_polygon.h @@ -51,7 +51,7 @@ public: // \ru Общие функции примитива. \en Common functions of the primitive. virtual MbePrimitiveType IsA() const; // \ru Вернуть тип объекта \en Get the object type. - virtual MbExactPolygon3D & Duplicate( MbRegDuplicate * iReg = NULL ) const; // \ru Создать копию объекта \en Create a copy of the object + virtual MbExactPolygon3D & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; // \ru Создать копию объекта \en Create a copy of the object virtual void Transform( const MbMatrix3D & ); // \ru Преобразовать полигон согласно матрице \en Transform polygon according to the matrix virtual void Move ( const MbVector3D & ); // \ru Сдвиг полигона \en Translation of the polygon. virtual void Rotate ( const MbAxis3D &, double angle ); // \ru Поворот полигона вокруг оси \en Rotation of the polygon around an axis @@ -177,7 +177,7 @@ public: // \ru Общие функции примитива. \en Common functions of the primitive. virtual MbePrimitiveType IsA() const; // \ru Вернуть тип объекта \en Get the object type. - virtual MbFloatPolygon3D & Duplicate( MbRegDuplicate * iReg = NULL ) const; // \ru Создать копию объекта \en Create a copy of the object + virtual MbFloatPolygon3D & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; // \ru Создать копию объекта \en Create a copy of the object virtual void Transform( const MbMatrix3D & ); // \ru Преобразовать полигон согласно матрице \en Transform polygon according to the matrix virtual void Move ( const MbVector3D & ); // \ru Сдвиг полигона \en Translation of the polygon. virtual void Rotate ( const MbAxis3D &, double angle ); // \ru Поворот полигона вокруг оси \en Rotation of the polygon around an axis diff --git a/C3d/Include/mesh_primitive.h b/C3d/Include/mesh_primitive.h index 2dfc6f2..31fdd9f 100644 --- a/C3d/Include/mesh_primitive.h +++ b/C3d/Include/mesh_primitive.h @@ -29,6 +29,7 @@ class MATH_CLASS MbPolygon3D; class MATH_CLASS MbPolygon; class MATH_CLASS MbFloatAxis3D; class MATH_CLASS MbFloatPoint3D; +class MATH_CLASS MbGrid; namespace c3d // namespace C3D @@ -36,6 +37,9 @@ namespace c3d // namespace C3D typedef SPtr PrimitiveSPtr; typedef SPtr ConstPrimitiveSPtr; +typedef SPtr GridSPtr; +typedef SPtr ConstGridSPtr; + typedef std::vector PrimitivesVector; typedef std::vector ConstPrimitivesVector; @@ -51,6 +55,12 @@ typedef std::set ConstPrimitivesSet; typedef ConstPrimitivesSet::iterator ConstPrimitivesSetIt; typedef ConstPrimitivesSet::const_iterator ConstPrimitivesSetConstIt; typedef std::pair ConstPrimitivesSetRet; + +typedef std::vector GridsVector; +typedef std::vector ConstGridsVector; + +typedef std::vector GridsSPtrVector; +typedef std::vector ConstGridsSPtrVector; } @@ -138,7 +148,7 @@ public: \return \ru Копия объекта. \en The object copy. \~ */ - virtual MbPrimitive & Duplicate( MbRegDuplicate * iReg = NULL ) const = 0; + virtual MbPrimitive & Duplicate( MbRegDuplicate * iReg = c3d_null ) const = 0; /** \brief \ru Преобразовать примитив согласно матрице. \en Transform primitive according to the matrix. \~ @@ -235,13 +245,13 @@ public: bool NearestType( MbeSpaceType sType, MbeTopologyType tType, MbePlaneType pType ) const; /// \ru Получить пространственный объект, для которого построен примитив. \en Get spatial object for which the primitive is constructed. - const MbSpaceItem * SpaceItem() const { return ((parentItem != NULL && parentItem->RefType() == rt_SpaceItem) ? (const MbSpaceItem *)parentItem : NULL); } + const MbSpaceItem * SpaceItem() const { return ((parentItem != c3d_null && parentItem->RefType() == rt_SpaceItem) ? (const MbSpaceItem *)parentItem : c3d_null); } /// \ru Получить двумерный объект, для которого построен примитив. \en Get two-dimensional object for which the primitive is constructed. - const MbPlaneItem * PlaneItem() const { return ((parentItem != NULL && parentItem->RefType() == rt_PlaneItem) ? (const MbPlaneItem *)parentItem : NULL); } + const MbPlaneItem * PlaneItem() const { return ((parentItem != c3d_null && parentItem->RefType() == rt_PlaneItem) ? (const MbPlaneItem *)parentItem : c3d_null); } /// \ru Получить топологический объект, для которого построен примитив. \en Get the topological object for which the primitive is constructed. - const MbTopItem * TopItem() const { return ((parentItem != NULL && parentItem->RefType() == rt_TopItem) ? (const MbTopItem *)parentItem : NULL); } + const MbTopItem * TopItem() const { return ((parentItem != c3d_null && parentItem->RefType() == rt_TopItem) ? (const MbTopItem *)parentItem : c3d_null); } /// \ru Получить объект геометрической модели, для которого построен примитив. \en Get geometric model object for which the primitive is constructed. - const MbItem * Item() const { return ((parentItem != NULL && parentItem->RefType() == rt_SpaceItem) ? (static_cast(parentItem)) : NULL); } + const MbItem * Item() const { return ((parentItem != c3d_null && parentItem->RefType() == rt_SpaceItem) ? (static_cast(parentItem)) : c3d_null); } /// \ru Чтение примитива из потока. \en Reading of primitive from the stream. void PrimitiveRead ( reader & in ); @@ -280,7 +290,7 @@ public: // \ru Общие функции примитива. \en Common functions of the primitive. virtual MbePrimitiveType Type() const; // \ru Тип объекта. \en A type of an object. virtual MbePrimitiveType IsA() const = 0; // \ru Тип объекта. \en A type of an object. - virtual MbApex3D & Duplicate( MbRegDuplicate * iReg = NULL ) const = 0; // \ru Создать копию объекта. \en Create a copy of the object. + virtual MbApex3D & Duplicate( MbRegDuplicate * iReg = c3d_null ) const = 0; // \ru Создать копию объекта. \en Create a copy of the object. virtual void Transform( const MbMatrix3D & matr ) = 0; // \ru Преобразовать согласно матрице. \en Transform according to the matrix. virtual void Move ( const MbVector3D & to ) = 0; // \ru Сдвинуть вдоль вектора. \en Translate along a vector. virtual void Rotate ( const MbAxis3D & axis, double angle ) = 0; // \ru Повернуть вокруг оси на угол. \en Rotate about an axis by an angle. @@ -345,7 +355,7 @@ public: // \ru Общие функции примитива. \en Common functions of the primitive. virtual MbePrimitiveType IsA() const; // \ru Тип объекта. \en A type of an object. - virtual MbExactApex3D & Duplicate( MbRegDuplicate * iReg = NULL ) const; // \ru Создать копию объекта. \en Create a copy of the object. + virtual MbExactApex3D & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; // \ru Создать копию объекта. \en Create a copy of the object. virtual void Transform( const MbMatrix3D & matr ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. virtual void Move ( const MbVector3D & to ); // \ru Сдвинуть вдоль вектора. \en Translate along a vector. virtual void Rotate ( const MbAxis3D & axis, double angle ); // \ru Повернуть вокруг оси на угол. \en Rotate about an axis by an angle. @@ -411,7 +421,7 @@ public: // \ru Общие функции примитива. \en Common functions of the primitive. virtual MbePrimitiveType IsA() const; // \ru Тип объекта. \en A type of an object. - virtual MbFloatApex3D & Duplicate( MbRegDuplicate * iReg = NULL ) const; // \ru Создать копию объекта. \en Create a copy of the object. + virtual MbFloatApex3D & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; // \ru Создать копию объекта. \en Create a copy of the object. virtual void Transform( const MbMatrix3D & matr ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. virtual void Move ( const MbVector3D & to ); // \ru Сдвинуть вдоль вектора. \en Translate along a vector. virtual void Rotate ( const MbAxis3D & axis, double angle ); // \ru Повернуть вокруг оси на угол. \en Rotate about an axis by an angle. @@ -482,7 +492,7 @@ public: // \ru Общие функции примитива. \en Common functions of the primitive. virtual MbePrimitiveType Type() const; // \ru Вернуть тип объекта \en Get the object type. virtual MbePrimitiveType IsA() const = 0; // \ru Вернуть тип объекта \en Get the object type. - virtual MbPolygon3D & Duplicate( MbRegDuplicate * iReg = NULL ) const = 0; // \ru Создать копию объекта \en Create a copy of the object + virtual MbPolygon3D & Duplicate( MbRegDuplicate * iReg = c3d_null ) const = 0; // \ru Создать копию объекта \en Create a copy of the object virtual void Transform( const MbMatrix3D & ) = 0; // \ru Преобразовать полигон согласно матрице \en Transform polygon according to the matrix virtual void Move ( const MbVector3D & ) = 0; // \ru Сдвиг полигона \en Translation of the polygon. virtual void Rotate ( const MbAxis3D &, double angle ) = 0; // \ru Поворот полигона вокруг оси \en Rotation of the polygon around an axis @@ -660,7 +670,7 @@ public: \{ */ virtual MbePrimitiveType Type() const; // \ru Тип объекта. \en A type of an object. virtual MbePrimitiveType IsA() const = 0;; // \ru Тип объекта. \en A type of an object. - virtual MbGrid & Duplicate( MbRegDuplicate * iReg = NULL ) const = 0; // \ru Создать копию объекта. \en Create a copy of the object. + virtual MbGrid & Duplicate( MbRegDuplicate * iReg = c3d_null ) const = 0; // \ru Создать копию объекта. \en Create a copy of the object. virtual void Transform( const MbMatrix3D & matr ) = 0; // \ru Преобразовать сетку согласно матрице. \en Transform mesh according to the matrix. virtual void Move ( const MbVector3D & to ) = 0; // \ru Сдвиг сетки. \en Move mesh. virtual void Rotate ( const MbAxis3D & axis, double angle ) = 0; // \ru Поворот сетки вокруг оси. \en Rotation of mesh about an axis. @@ -999,9 +1009,9 @@ public: virtual void Init( const MbGrid & grid ) = 0; /// \ru Выдать адрес начала массива. \en Get the address of the beginning of the array. - const MbTriangle * GetTrianglesAddr() const { return (!triangles.empty() ? &(triangles[0]) : NULL); } + const MbTriangle * GetTrianglesAddr() const { return (!triangles.empty() ? &(triangles[0]) : c3d_null); } /// \ru Выдать адрес начала массива. \en Get the address of the beginning of the array. - const MbQuadrangle * GetQuadranglesAddr() const { return (!quadrangles.empty() ? &(quadrangles[0]) : NULL); } + const MbQuadrangle * GetQuadranglesAddr() const { return (!quadrangles.empty() ? &(quadrangles[0]) : c3d_null); } /// \ru Выдать адрес начала массива. \en Get the address of the beginning of the array. virtual const MbCartPoint3D * GetExactPointsAddr() const = 0; /// \ru Выдать адрес начала массива. \en Get the address of the beginning of the array. diff --git a/C3d/Include/mip_curve_properties.h b/C3d/Include/mip_curve_properties.h index c7dded8..d6a3bad 100644 --- a/C3d/Include/mip_curve_properties.h +++ b/C3d/Include/mip_curve_properties.h @@ -113,9 +113,9 @@ inline void MIProperties::Init() { \ingroup Inertia_Computation */ // --- -MATH_FUNC (void) MassInertiaProperties( const MbCurve * curve, - MIProperties & mp, - double deviateAngle = Math::deviateSag ); +MATH_FUNC (void) MassInertiaProperties( const MbCurve * curve, + MIProperties & mp, + double deviateAngle = Math::deviateSag ); //------------------------------------------------------------------------------ @@ -141,9 +141,9 @@ MATH_FUNC (void) MassInertiaProperties( const MbCurve * curve, */ // --- MATH_FUNC (void) MassInertiaProperties( const RPArray & curves, - const SArray & bodies, - MIProperties & mp, - double deviateAngle = Math::deviateSag ); + const c3d::BoolVector & bodies, + MIProperties & mp, + double deviateAngle = Math::deviateSag ); //------------------------------------------------------------------------------ diff --git a/C3d/Include/mip_solid_mass_inertia.h b/C3d/Include/mip_solid_mass_inertia.h index 881f1a9..f1b360a 100644 --- a/C3d/Include/mip_solid_mass_inertia.h +++ b/C3d/Include/mip_solid_mass_inertia.h @@ -332,7 +332,7 @@ private : const MbSolid & solid; ///< \ru Тело. \en A solid. double density; ///< \ru Плотность или удельная масса на единицу площади. \en Density or mass per unit square. MbMatrix3D matrix; ///< \ru Матрица преобразования тела в систему ближайшей сборки (хозяина). \en A matrix of solid transformation to the coordinate system of nearest assembly (owner). - InertiaProperties * properties; ///< \ru Характеристики тела (может быть NULL). \en Solid properties (can be NULL). + InertiaProperties * properties; ///< \ru Характеристики тела (может быть c3d_null). \en Solid properties (can be c3d_null). bool ready; ///< \ru Флаг, показывающий, что характеристики не требуется считать. \en Flag of already calculated properties. public: @@ -395,7 +395,7 @@ public: \en A run progress indicator. For termination of slow computations. \~ */ void CalculateAdditiveValues( double deviateAngle, InertiaProperties & mp, - IfProgressIndicator * progress = NULL ) const; + IfProgressIndicator * progress = c3d_null ) const; /** \} */ // \ru Объявление конструктора копирования и оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration without Implementation of the copy constructor and assignment operator to prevent an assignment by default. @@ -416,7 +416,7 @@ private : RPArray assemblies; ///< \ru Подсборки. \en Subassemblies. RPArray solids; ///< \ru Тела сборки. \en Solids in an assembly. MbMatrix3D matrix; ///< \ru Матрица преобразования сборки в систему ближайшей сборки (хозяина). \en A matrix of assembly transformation to the coordinate system of nearest assembly (owner). - InertiaProperties * properties; ///< \ru Характеристики сборки (может быть NULL). \en Assembly properties (can be NULL). + InertiaProperties * properties; ///< \ru Характеристики сборки (может быть c3d_null). \en Assembly properties (can be c3d_null). bool ready; ///< \ru Характеристики не требуется считать. \en Properties already calculated. public: @@ -488,7 +488,7 @@ public: \en A run progress indicator. For termination of slow computations. \~ */ void CalculateAdditiveValues( double deviateAngle, InertiaProperties & mp, - IfProgressIndicator * progress = NULL ) const; + IfProgressIndicator * progress = c3d_null ) const; /** \} */ // \ru Объявление конструктора копирования и оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration without Implementation of the copy constructor and assignment operator to prevent an assignment by default. @@ -516,11 +516,11 @@ public: \ingroup Inertia_Computation */ // --- -MATH_FUNC (void) MassInertiaProperties( const MbSolid * solid, - double density, - double deviateAngle, // (0.35 - 0.01) - InertiaProperties & mp, - IfProgressIndicator * progress = NULL ); +MATH_FUNC (void) MassInertiaProperties( const MbSolid * solid, + double density, + double deviateAngle, // (0.35 - 0.01) + InertiaProperties & mp, + IfProgressIndicator * progress = c3d_null ); //------------------------------------------------------------------------------ @@ -540,9 +540,9 @@ MATH_FUNC (void) MassInertiaProperties( const MbSolid * solid, Количество элементов в массиве должно совпадать с количеством тел. \en Matrices of solids transformation to global coordinate system.\n Count of elements in array must be equal to count of solids. \~ - \param[in] mpSolids - \ru Имеющиеся характеристики тел. Может содержать NULL.\n + \param[in] mpSolids - \ru Имеющиеся характеристики тел. Может содержать c3d_null.\n Количество элементов в массиве должно совпадать с количеством тел. - \en Calculated properties of solids. Can contain NULL.\n + \en Calculated properties of solids. Can contain c3d_null.\n Count of elements in array must be equal to count of solids. \~ \param[in] deviateAngle - \ru Параметр управления точностью расчёта - угловое отклонение нормали поверхности или касательных кривой на участке численного интегрирования. \en Tolerance - the angular deviation of surface or curve in the neighboring points on the region of numerical integration. \~ @@ -553,13 +553,13 @@ MATH_FUNC (void) MassInertiaProperties( const MbSolid * solid, \ingroup Inertia_Computation */ // --- -MATH_FUNC (void) MassInertiaProperties( const RPArray & solids, - const SArray & densities, - const SArray & matrs, +MATH_FUNC (void) MassInertiaProperties( const RPArray & solids, + const SArray & densities, + const SArray & matrs, const RPArray & mpSolids, - double deviateAngle, // (0.35 - 0.01) - InertiaProperties & mp, - IfProgressIndicator * progress = NULL ); + double deviateAngle, // (0.35 - 0.01) + InertiaProperties & mp, + IfProgressIndicator * progress = c3d_null ); //------------------------------------------------------------------------------ @@ -580,10 +580,10 @@ MATH_FUNC (void) MassInertiaProperties( const RPArray & solids, \ingroup Inertia_Computation */ // --- -MATH_FUNC (void) MassInertiaProperties( const AssemblyMIAttire & assembly, - double deviateAngle, // (0.35 - 0.01) - InertiaProperties & mp, - IfProgressIndicator * progress = NULL ); +MATH_FUNC (void) MassInertiaProperties( const AssemblyMIAttire & assembly, + double deviateAngle, // (0.35 - 0.01) + InertiaProperties & mp, + IfProgressIndicator * progress = c3d_null ); //------------------------------------------------------------------------------ @@ -593,7 +593,7 @@ MATH_FUNC (void) MassInertiaProperties( const AssemblyMIAttire & assembly, \en Calculation mass-inertial properties of polygonal object. \~ \note \ru В многопоточном режиме выполняется параллельно. \en In multithreaded mode runs in parallel. \~ - \param[in] solid - \ru Полигональный объект. + \param[in] mesh - \ru Полигональный объект. \en A polygonal object. \~ \param[in] density - \ru Плотность или удельная масса на единицу площади. \en Density or mass per unit square. \~ @@ -602,9 +602,9 @@ MATH_FUNC (void) MassInertiaProperties( const AssemblyMIAttire & assembly, \ingroup Inertia_Computation */ // --- -MATH_FUNC (void) MassInertiaProperties( const MbMesh * mesh, - double density, - InertiaProperties & mp ); +MATH_FUNC (void) MassInertiaProperties( const MbMesh * mesh, + double density, + InertiaProperties & mp ); //------------------------------------------------------------------------------ @@ -614,13 +614,13 @@ MATH_FUNC (void) MassInertiaProperties( const MbMesh * mesh, \en Calculation of mass-inertial properties of polygonal objects. \~ \note \ru В многопоточном режиме выполняется параллельно. \en In multithreaded mode runs in parallel. \~ - \param[in] solids - \ru Множество полигональных объектов. + \param[in] meshes - \ru Множество полигональных объектов. \en Set of polygonal objects. \~ \param[in] densities - \ru Плотности объектов или удельная масса на единицу площади.\n Количество элементов в массиве должно совпадать с количеством объектов. \en Density of solids or mass per unit square of polygonal objects.\n Count of elements in array must be equal to count of polygonal objects. \~ - \param[in] matrs - \ru Матрицы преобразования полигональных объектов в глобальную систему координат.\n + \param[in] matrices - \ru Матрицы преобразования полигональных объектов в глобальную систему координат.\n Количество элементов в массиве должно совпадать с количеством объектов. \en Matrices of solids transformation to global coordinate system.\n Count of elements in array must be equal to count of polygonal objects. \~ @@ -629,10 +629,10 @@ MATH_FUNC (void) MassInertiaProperties( const MbMesh * mesh, \ingroup Inertia_Computation */ // --- -MATH_FUNC (void) MassInertiaProperties( const std::vector & solids, - const std::vector & densities, - const std::vector & matrix, - InertiaProperties & mp ); +MATH_FUNC (void) MassInertiaProperties( const std::vector & meshes, + const std::vector & densities, + const std::vector & matrices, + InertiaProperties & mp ); #endif // __MIP_SOLID_MASS_INERTIA_H diff --git a/C3d/Include/model.h b/C3d/Include/model.h index 32062f1..655ef74 100644 --- a/C3d/Include/model.h +++ b/C3d/Include/model.h @@ -83,13 +83,13 @@ public : virtual MbeImplicationType ImplicationType() const; /// \ru Создать копию. \en Create a copy. - MbModel & Duplicate( MbRegDuplicate * = NULL ) const; + MbModel & Duplicate( MbRegDuplicate * = c3d_null ) const; /// \ru Преобразовать согласно матрице. \en Transform according to the matrix. - void Transform( const MbMatrix3D &, MbRegTransform * iReg = NULL ); + void Transform( const MbMatrix3D &, MbRegTransform * iReg = c3d_null ); /// \ru Сдвинуть вдоль вектора. \en Translate along a vector. - void Move ( const MbVector3D &, MbRegTransform * iReg = NULL ); + void Move ( const MbVector3D &, MbRegTransform * iReg = c3d_null ); /// \ru Повернуть вокруг оси. \en Rotate about an axis. - void Rotate ( const MbAxis3D &, double angle, MbRegTransform * iReg = NULL ); + void Rotate ( const MbAxis3D &, double angle, MbRegTransform * iReg = c3d_null ); /// \ru Вычислить расстояние до точки. \en Calculate the distance to a point. double DistanceToPoint ( const MbCartPoint3D & ) const; /// \ru Добавь свой габарит в габаритный куб. \en Include your own bounding box into bounding box. @@ -459,11 +459,11 @@ public : \en General-purpose algorithm traversing the model graph in depth. */ void Traverse( ItModelVisitor & ) const; /// \ru Преобразовать селектирование объекты по матрице. \en Transform selected objects by matrix. - void TransformSelected( const MbMatrix3D &, MbRegTransform * = NULL ); + void TransformSelected( const MbMatrix3D &, MbRegTransform * = c3d_null ); /// \ru Сдвинуть выбранные объекты. \en Move selected objects. - void MoveSelected( const MbVector3D &, MbRegTransform * = NULL ); + void MoveSelected( const MbVector3D &, MbRegTransform * = c3d_null ); /// \ru Повернуть выбранные объекты вокруг оси. \en Rotate selected objects around an axis. - void RotateSelected( const MbAxis3D &, double angle, MbRegTransform * = NULL ); + void RotateSelected( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); /** \brief \ru Отцепить все выбранные объекты. \en Detach all selected objects. \~ @@ -592,7 +592,7 @@ void MbModel::GetItems( Items & items ) const { items.reserve( modelItems.size() ); for ( NameItemArray::const_iterator iter = modelItems.begin(); iter != modelItems.end(); ++iter ) { - if ( iter->second != NULL ) + if ( iter->second != c3d_null ) items.push_back( iter->second ); } } @@ -608,7 +608,7 @@ void MbModel::DetachItems( Items & items ) NameItemArray::const_iterator endItem = modelItems.end(); for ( ; iter != endItem; ++iter ) { MbItem * item = iter->second; - if ( item != NULL ) { + if ( item != c3d_null ) { item->DecRef(); items.push_back( item ); } diff --git a/C3d/Include/model_item.h b/C3d/Include/model_item.h index f426b35..b97b564 100644 --- a/C3d/Include/model_item.h +++ b/C3d/Include/model_item.h @@ -1,609 +1,608 @@ -//////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru Объект геометрической модели. - \en A model geometric object. \~ - -*/ -//////////////////////////////////////////////////////////////////////////////// - -#ifndef __MODEL_ITEM_H -#define __MODEL_ITEM_H - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -class MATH_CLASS MbItem; -namespace c3d // namespace C3D -{ -typedef SPtr ItemSPtr; -typedef SPtr ConstItemSPtr; - -typedef std::vector ItemsVector; -typedef std::vector ConstItemsVector; - -typedef std::vector ItemsSPtrVector; -typedef std::vector ConstItemsSPtrVector; - -typedef std::set ItemsSet; -typedef ItemsSet::iterator ItemsSetIt; -typedef ItemsSet::const_iterator ItemsSetConstIt; -typedef std::pair ItemsSetRet; - -typedef std::set ConstItemsSet; -typedef ConstItemsSet::iterator ConstItemsSetIt; -typedef ConstItemsSet::const_iterator ConstItemsSetConstIt; -typedef std::pair ConstItemsSetRet; -} - - -//------------------------------------------------------------------------------ -/** \brief \ru Объект геометрической модели. - \en A model geometric object. \~ - \details \ru Родительский класс объектов геометрической модели. \n - Наследниками являются: \n - локальная система координат MbAssistingItem,\n - точечный каркас MbPointFrame,\n - проволочный каркас MbWireFrame,\n - твёрдое тело MbSolid,\n - полигональный объект MbMesh,\n - вставка объекта в локальной системе координат MbInstance,\n - сборка объектов в локальной системе координат MbAssembly,\n - вставка трехмерного объекта MbSpaceInstance,\n - вставка двумерного объекта MbPlaneInstance в плоскости XY локальной системы координат.\n - Объект содержит последовательность и способы своего построения MbTransactions.\n - Объект содержит не геометрические свойства в виде контейнера атрибутов MbAttributeContainer.\n - Имя объекта геометрической модели представляет собой контейнер простых имён. - В начале контейнера содержится простое имя SimpleName, присвоенное объекту геометрической моделью MbModel. \n - Если объект не держит в себе других объектов, то контейнер содержит одно простое имя SimpleName. - Ели объект держит в себе другие объекты (MbAssembly или MbInstance), - то имя внутренних объектов представляет собой контейнер, содержащий как минимум два простых имени. - Количество элементов имени объекта отражают количество уровней вложенности объект относительно модели. - \en Parent class of model geometric objects. \n - Inheritors are: \n - local coordinate system of MbAssistingItem,\n - MbPointFrame point-frame,\n - MbWireFrame wireframe,\n - MbSolid solid,\n - MbMesh polygonal planar object,\n - MbInstance instance of object in the local coordinate system,\n - MbAssembly assembly of objects in the local coordinate system,\n - MbSpaceInstance instance of three-dimensional object,\n - MbPlaneInstance instance of a two-dimensional object in the XY-plane of a local coordinate system.\n - Object contains MbTransactions sequence and ways to construct itself.\n - Object contains non-geometric properties as MbAttributeContainer attribute container.\n - The name of an object of a geometric model is represented as a container of simple names. - In the beginning of the container there is a SimpleName simple name assigned to object by MbModel geometric model. \n - If the object doesn't contain other objects, then the container contains one SimpleName simple name. - If the object contains other objects (MbAssembly or MbInstance), - then the internal objects name is represented as a container with at least two simple names. - Number of the elements of an object's name corresponds to the number of levels of objects inclusion relative to the model. \~ - \ingroup Model_Items -*/ -// --- -class MATH_CLASS MbItem : public MbSpaceItem, - public MbTransactions, - public MbAttributeContainer, - public MbSyncItem { - -private: - SimpleName name; ///< \ru Имя объекта геометрической модели. \en Name of a geometric model object. - -protected: - /// \ru Конструктор копирования с регистратором дублирования. \en Copy-constructor with duplication registrator. - explicit MbItem( const MbItem &, MbRegDuplicate * ); -public: - /// \ru Конструктор. \en Constructor. - MbItem(); - /// \ru Деструктор. \en Destructor. - virtual ~MbItem(); - -public : - VISITING_CLASS( MbItem ); - - /** \ru \name Общие функции геометрического объекта. - \en \name Common functions of a geometric object. - \{ */ - virtual MbeSpaceType IsA() const = 0; // \ru Тип объекта. \en A type of an object. - virtual MbeSpaceType Type() const; // \ru Групповой тип объекта. \en Group type of object. - virtual MbeSpaceType Family() const; // \ru Семейство объекта. \en Family of object. - virtual MbeImplicationType ImplicationType() const; // \ru Тип контейнера атрибутов - классификатор наследников. \en Type of an attribute container is a classifier of inheritors. - virtual MbSpaceItem & Duplicate ( MbRegDuplicate * = NULL ) const = 0; // \ru Создать копию. \en Create a copy. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ) = 0; // \ru Преобразовать согласно матрице. \en Transform according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ) = 0; // \ru Сдвинуть вдоль вектора. \en Translate along a vector. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ) = 0; // \ru Повернуть вокруг оси. \en Rotate about an axis. - virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const = 0; // \ru Являются ли объекты равными? \en Are the objects equal? - virtual bool SetEqual ( const MbSpaceItem & init ) = 0; // \ru Сделать объекты равными. \en Make the objects equal. - virtual double DistanceToPoint ( const MbCartPoint3D & ) const = 0; // \ru Вычислить расстояние до точки. \en Calculate the distance to a point. - virtual void AddYourGabaritTo( MbCube & r ) const = 0; // \ru Добавь свой габарит в куб. \en Add bounding box into a cube. - virtual void CalculateLocalGabarit( const MbMatrix3D & into, MbCube & cube ) const = 0; // \ru Рассчитать габарит в локальной системы координат. \en Calculate bounding box in the local coordinate system. - - virtual MbProperty & CreateProperty( MbePrompt n ) const; // \ru Создать собственное свойство. \en Create a custom property. - virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта. \en Get properties of the object. - virtual void SetProperties( const MbProperties & properties ); // \ru Установить свойства объекта. \en Set properties of the object. - virtual void GetBasisPoints( MbControlData3D & ) const; // \ru Выдать контрольные точки объекта. \en Get control points of object. - virtual void SetBasisPoints( const MbControlData3D & ); // \ru Изменить объект по контрольным точкам. \en Change the object by control points. - virtual void GetBasisPoints( MbControlData & ) const; // \ru Выдать контрольные точки объекта. \en Get control points of object. - virtual void SetBasisPoints( const MbControlData & ); // \ru Изменить объект по контрольным точкам. \en Change the object by control points. - /** - \brief \ru Получить систему координат объекта, если она есть. - \en Get the coordinate system of an item if it is exist. - \return \ru Функция вернет true, если объект имеет собственную подсистему координат, - иначе считается, что ЛСК объекта всегда "стандартная" (MbPlacement3D::global). - \en The function returns true, if the object have its own local coordinate system, - otherwise it is considered that the object LCS is always "standard" (MbPlacement3D :: global). - */ - virtual bool GetPlacement( MbPlacement3D & p ) const { p = MbPlacement3D::global; return false; } - /// \ru Установить систему координат объекта, если возможно. \en Set the coordinate system of an item if it is possible. - virtual bool SetPlacement( const MbPlacement3D & ) { return false; } - - /** \brief \ru Построить полигональную копию mesh. - \en Build polygonal copy mesh. \~ - \details \ru Построить полигональную копию данного объекта, представленную полигонами, или/и плоскими пластинами. - \en Build a polygonal copy of the object that is represented by polygons or/and fasets. \~ - \param[in] stepData - \ru Данные для вычисления шага при построении полигонального. - \en Data for еру step calculation for polygonal object. \~ - \param[in] note - \ru Способ построения полигонального объекта. - \en Way for polygonal object constructing. \~ - \param[in, out] mesh - \ru Построенный полигональный объект. - \en The builded polygonal object. - */ - virtual void CalculateMesh( const MbStepData & stepData, const MbFormNote & note, MbMesh & mesh ) const = 0; - /** \} */ - - /** \ru \name Общие функции объекта геометрической модели - \en \name Common functions of object of geometric model. - \{ */ - - /** \brief \ru Перестроить объект по журналу построения. - \en Reconstruct object according to the history tree. \~ - \details \ru Создать заново объект по журналу построения. - \en Create object by the history tree. \~ - \param[in] sameShell - \ru Полнота копирования элементов. - \en Whether to perform complete copying of elements while constructing. \~ - \param[out] items - \ru Контейнер для складывания элементов невыполненных построений (может быть NULL). - \en Container for the elements of not performed constructions (can be NULL). \~ - \return \ru Перестроен ли объект. - \en Whether an object is constructed. \~ - \ingroup Model_Items - */ - virtual bool RebuildItem( MbeCopyMode sameShell, RPArray * items, IProgressIndicator * progInd ); - - /** \brief \ru Создать полигональный объект. - \en Create polygonal object. \~ - \details \ru Создать полигональный объект - упрощенную копию данного объекта. - \en Create a polygonal object - a polygonal copy of the given object. \~ - \param[in] stepData - \ru Данные для вычисления шага при триангуляции. - \en Data for step calculation during triangulation. \~ - \param[in] note - \ru Способ построения полигонального объекта. - \en Way for polygonal object constructing. \~ - \return \ru Построенный полигональный объект. - \en Created polygonal object. \~ - \ingroup Model_Items - */ - virtual MbItem * CreateMesh( const MbStepData & stepData, const MbFormNote & note, MbRegDuplicate * iReg ) const = 0; - - /** \brief \ru Добавить полигональный объект. - \en Add polygonal object. \~ - \details \ru Добавить свою полигональную копию в присланный полигональный объект. - \en Add your own polygonal copy to the given polygonal object. \~ - \param[in] stepData - \ru Данные для вычисления шага при триангуляции. - \en Data for step calculation during triangulation. \~ - \param[in] note - \ru Способ построения полигонального объекта. - \en Way for polygonal object constructing. \~ - \param[out] mesh - \ru Присланный полигональный объект. - \en Given polygonal object. \~ - \return \ru Добавлен ли объект. - \en Whether the object is added. \~ - \ingroup Model_Items - */ - virtual bool AddYourMesh( const MbStepData & stepData, const MbFormNote & note, MbMesh & mesh ) const; - - /** \brief \ru Разрезать полигональный объект одной или двумя параллельными плоскостями. - \en Cut the polygonal object by one or two parallel planes. \~ - \details \ru Построить полигональный объект из части исходного полигонального объекта, - лежащей под плоскостью XY локальной системы координат на заданном расстоянии.\n - Функция "режет" только полигональный объект MbMesh. - Функция "режет" объект двумя плоскостями: - плоскостью XY локальной системы координат place и плоскостью, параллельной ей и - расположенной на расстоянии distance ниже неё. - Если distance<=0, то функция "режет" объект только одной плоскостью XY локальной системы.\n - Содержимое объекта, необходимое для построения разрезанного объекта и не затронутое режущими плоскостями, - добавляется в возвращаемый разрезанный объект без копирования.\n - \en Create polygonal object from a part of source polygonal object - which located under XY-plane of local coordinate system at given distance.\n - Function 'cuts' only MbMesh polygonal object. - Function 'cuts' the object by two planes: - XY plane of 'place' local coordinate system and plane parallel to it and - located at 'distance' distance below it. - If 'distance' is less than or equal to zero, then the function "cuts" an object only by one XY plane of local coordinate system.\n - Contents of an object that are necessary for creation of cut object and not affected by cutting planes - are added to returned cut object without copying.\n \~ - \param[in] place - \ru Локальная система координат, плоскость XY которой задаёт режущую плоскость. - \en A local coordinate system which XY plane defines a cutting plane. \~ - \param[in] distance - \ru Расстояние до параллельной режущей плоскости откладывается в отрицательную сторону оси Z локальной системы. - \en Distance to a parallel cutting plane is measured in negative direction of Z-axis of local coordinate system. \~ - \result \ru Возвращает новый полигональный объект, лежащий под плоскость XY локальной системы координат на заданном расстоянии. - \en Returns new polygonal object that located under XY-plane of local coordinate system at given distance. \~ - \ingroup Model_Items - */ - virtual MbItem * CutMesh( const MbPlacement3D & cutPlace, double distance ) const; - - /** \brief \ru Найти ближайший объект или имя ближайшего объекта. - \en Find the nearest object or name of the nearest object. \~ - \details \ru Найти ближайший трехмерный объект или его имя по типу объекта и - составляющий элемент искомого объекта или его имя по топологическому или двумерному типу элемента (по требованию) - на расстоянии от прямой, не превышающем заданной величины. - Функция предназначена для идентификации геометрического объекта, породившего полигональный объект. - Реальный поиск выполняется для элементов MbPrimitive полигонального объекта MbMesh, - у которых берётся информация о породившем примитив геометрическом объекте. - \en Find the nearest three-dimensional object or its name by type of object and - component of the required object or its name by topological or two-dimensional type of the element (on demand) - at distance from line less than or equal to the given value. - Function is intended for identification of a geometric object which is begetter of a polygonal object. - The real search is performed for MbMesh polygonal object's MbPrimitive elements - from which the information is taken about geometric object which is begetter of the primitive. \~ - \param[in] sType - \ru Тип искомого объекта. - \en Type of required object. \~ - \param[in] tType - \ru Топологический тип составляющего элемента искомого объекта. - \en Topological type of the required object's component. \~ - \param[in] pType - \ru Двумерный тип составляющего элемента искомого объекта. - \en Two-dimensional type of the required object's component. \~ - \param[in] axis - \ru Прямая поиска. - \en Line of search. \~ - \param[in] maxDistance - \ru Расстояние от прямой, на котором ищется объект. - \en Distance from the line on which the object is looked for. \~ - \param[in] gridPriority - \ru Повышенный приоритет триангуляционной сетки при поиске. - \en Increased priority triangulation grid when searching. \~ - \param[out] t - \ru Параметр прямой для найденной точки. - \en Parameter of found point on line. \~ - \param[out] dMin - \ru Найденное расстояние объекта от прямой. - \en Found distance from line to an object. \~ - \param[out] find - \ru Найденный объект. - \en Found object. \~ - \param[out] findName - \ru Имя найденного объекта. - \en Name of the found object. \~ - \param[out] element - \ru Найденный составляющий элемент объекта. - \en Found component of the object. \~ - \param[out] elementName - \ru Имя найденного составляющего элемента объекта. - \en Name of found component of the object. \~ - \param[out] path - \ru Путь положения объекта в модели. - \en Object's path in the model. \~ - \param[out] from - \ru Матрица преобразования найденного объекта в глобальную систему координат. - \en Transformation matrix of the found object to the global coordinate system. \~ - \return \ru Найден ли объект или его имя. - \en Whether the object or its name is found. \~ - \ingroup Model_Items - */ - virtual bool NearestMesh( MbeSpaceType sType, MbeTopologyType tType, MbePlaneType pType, - const MbAxis3D & axis, double maxDistance, bool gridPriority, double & t, double & dMin, - MbItem *& find, SimpleName & findName, - MbRefItem *& element, SimpleName & elementName, - MbPath & path, MbMatrix3D & from ) const; - - /** \brief \ru Дать все объекты указанного типа. - \en Get all objects by type. \~ - \details \ru Дать все объекты указанного типа, - а также матрицы преобразования их в глобальную систему координат. \n - \en Get all objects by type - and get transformation matrix to the global coordinate system. \n \~ - \param[in] type - \ru Тип объекта. - \en Object's type. \~ - \param[in] from - \ru Исходная матрица преобразования в глобальную систему координат. - \en Initial transformation matrix to the global coordinate system. \~ - \param[out] items - \ru Множество найденных объектов. - \en Found objects. \~ - \param[out] matrs - \ru Матрицы преобразования найденных объектов в глобальную систему координат. - \en Transformation matrix of found objects to the global coordinate system. \~ - \return \ru Добавлен ли данный объект. - \en Whether add this object. \~ - \ingroup Model_Items - */ - virtual bool GetItems( MbeSpaceType type, const MbMatrix3D & from, - RPArray & items, SArray & matrs ); - /** \brief \ru Дать все уникальные объекты указанного типа. - \en Get all unique objects by type. \~ - \details \ru Дать все уникальные объекты указанного типа. \n - \en Get all unique objects by type. \n \~ - \param[in] type - \ru Тип объекта. - \en Object's type. \~ - \param[out] items - \ru Множество найденных объектов. - \en Found objects. \~ - \return \ru Добавлен ли данный объект. - \en Whether add this object. \~ - \ingroup Model_Items - */ - virtual bool GetUniqItems( MbeSpaceType type, CSSArray & items ) const; - - /** \brief \ru Дать объект по его пути. - \en Get the object by its path. \~ - \details \ru Дать объект по его пути положения в модели и - дать матрицу преобразования объекта в глобальную систему координат. - Объект может содержаться в другом объекте (в сборке или вставке). - \en Get the object by path of its position in the model and - get transformation matrix of the object to the global coordinate system. - Object can be contained in other object (in assembly or in instance). \~ - \param[in] path - \ru Путь объекта. - \en Path of object. \~ - \param[in] ind - \ru Индекс требуемого объекта в path. - \en Index of the desired object in 'path'. \~ - \param[out] from - \ru Матрица преобразования объекта в глобальную систему координат. - \en Transformation matrix of object to the global coordinate system. \~ - \param[in] currInd - \ru Индекс текущего объекта в path. - \en Index of current object in path. \~ - \return \ru Найден ли путь и матрица объекта. - \en Whether the path and the matrix of object are found. \~ - \ingroup Model_Items - */ - virtual const MbItem * GetItemByPath( const MbPath & path, size_t ind, MbMatrix3D & from, size_t currInd = 0 ) const; - - /** \brief \ru Найти объект по геометрическому объекту. - \en Find object by geometric object. \~ - \details \ru Найти объект по геометрическому объекту, - а также получить путь к объекту в модели - и матрицу преобразования в глобальную систему координат. \n - \en Find object by geometric object - and also get the path to the object in model - and get transformation matrix to the global coordinate system. \n \~ - \param[in] s - \ru Геометрический объект. - \en Geometric object. \~ - \param[out] path - \ru Путь к объекту в модели. - \en Path to object in the model. \~ - \param[out] from - \ru Матрица преобразования объекта в глобальную систему координат. - \en Transformation matrix of object to the global coordinate system. \~ - \return \ru Найден ли путь и матрица объекта. - \en Whether the path and the matrix of object are found. \~ - \ingroup Model_Items - */ - virtual const MbItem * FindItem( const MbSpaceItem * s, MbPath & path, MbMatrix3D & from ) const; - - /** \brief \ru Найти объект по геометрическому объекту. - \en Find object by geometric object. \~ - \details \ru Найти объект по геометрическому объекту, - а также получить путь к объекту в модели - и матрицу преобразования в глобальную систему координат. \n - \en Find object by geometric object - and also get the path to the object in model - and get transformation matrix to the global coordinate system. \n \~ - \param[in] s - \ru Геометрический объект. - \en Geometric object. \~ - \param[out] path - \ru Путь к объекту в модели. - \en Path to object in the model. \~ - \param[out] from - \ru Матрица преобразования объекта в глобальную систему координат. - \en Transformation matrix of object to the global coordinate system. \~ - \return \ru Найден ли путь и матрица объекта. - \en Whether the path and the matrix of object are found. \~ - \ingroup Model_Items - */ - virtual const MbItem * FindItem( const MbPlaneItem * s, MbPath & path, MbMatrix3D & from ) const; - - /** \brief \ru Найти объект по объекту геометрической модели. - \en Find object by object of geometric model \~ - \details \ru Найти объект по объекту геометрической модели. - а также получить путь к объекту в модели - и матрицу преобразования в глобальную систему координат. \n - \en Find object by object of geometric model - and also get the path to the object in model - and get transformation matrix to the global coordinate system. \n \~ - \param[in] s - \ru Геометрический объект. - \en Geometric object. \~ - \param[out] path - \ru Путь к объекту в модели. - \en Path to object in the model. \~ - \param[out] from - \ru Матрица преобразования объекта в глобальную систему координат. - \en Transformation matrix of object to the global coordinate system. \~ - \return \ru Найден ли путь и матрица объекта. - \en Whether the path and the matrix of object are found. \~ - \ingroup Model_Items - */ - virtual const MbItem * FindItem( const MbItem * s, MbPath & path, MbMatrix3D & from ) const; - - /** \brief \ru Найти объект по имени. - \en Find object by name. \~ - \details \ru Найти объект по имени, а также получить путь к объекту в модели - и матрицу преобразования в глобальную систему координат. \n - \en Find object by name and also get path to object in model - and get transformation matrix to the global coordinate system. \n \~ - \param[in] n - \ru Имя объекта. - \en A name of an object. \~ - \param[out] path - \ru Путь к объекту в модели. - \en Path to object in the model. \~ - \param[out] from - \ru Матрица преобразования объекта в глобальную систему координат. - \en Transformation matrix of object to the global coordinate system. \~ - \return \ru Найден ли путь и матрица объекта. - \en Whether the path and the matrix of object are found. \~ - \ingroup Model_Items - */ - virtual const MbItem * GetItemByName( SimpleName n, MbPath & path, MbMatrix3D & from ) const; - - /** \brief \ru Преобразовать выбранный объект согласно матрице. - \en Transform selected object according to the matrix. \~ - \details \ru Преобразовать выбранный простой объект согласно матрице c использованием регистратора. - Если объект содержит другие объекты геометрической модели, то преобразуется выбранное содержимое. - \en Transform selected simple object according to the matrix using the registrator. - If object contains other objects of geometric model then selected contents will be transformed. \~ - \param[in] matr - \ru Матрица преобразования. - \en A transformation matrix. \~ - \param[in] iReg - \ru Регистратор. - \en Registrator. \~ - \ingroup Model_Items - */ - virtual void TransformSelected( const MbMatrix3D & matr, MbRegTransform * iReg = NULL ); - - /** \brief \ru Сдвинуть выбранный объект вдоль вектора. - \en Move selected object along a vector. \~ - \details \ru Сдвинуть вдоль вектора с использованием регистратора выбранный простой объект. - Если объект содержит другие объекты геометрической модели, то преобразуется выбранное содержимое. - \en Move selected simple object along the vector using the registrator. - If object contains other objects of geometric model then selected contents will be transformed. \~ - \param[in] to - \ru Вектор сдвига. - \en Translation vector. \~ - \param[in] iReg - \ru Регистратор. - \en Registrator. \~ - \ingroup Model_Items - */ - virtual void MoveSelected( const MbVector3D & to, MbRegTransform * iReg = NULL ); - - /** \brief \ru Повернуть выбранный объект вокруг оси на заданный угол. - \en Rotate selected object by a given angle about an axis. \~ - \details \ru Повернуть вокруг оси на заданный угол с использованием регистратора выбранный простой объект. - Если объект содержит другие объекты геометрической модели, то преобразуется выбранное содержимое. - \en Rotate selected simple object about the axis by the given angle using the registrator. - If object contains other objects of geometric model then selected contents will be transformed. \~ - \param[in] axis - \ru Ось поворота. - \en The rotation axis. \~ - \param[in] angle - \ru Угол поворота. - \en The rotation angle. \~ - \param[in] iReg - \ru Регистратор. - \en Registrator. \~ - \ingroup Model_Items - */ - virtual void RotateSelected( const MbAxis3D & axis, double angle, MbRegTransform * iReg = NULL ); - - /// \ru Дать матрицу преобразования из локальной системы объекта. \en Get transform matrix from local coordinate system of object. - virtual bool GetMatrixFrom( MbMatrix3D & from ) const; - /// \ru Дать матрицу преобразования в локальную систему объекта. \en Get transform matrix into local coordinate system of object. - virtual bool GetMatrixInto( MbMatrix3D & into ) const; - - /// \ru Копировать строители и атрибуты. \en Copy creators and attributes. - void Assign( const MbItem & other ); - /// \ru Копировать имя объекта. \en Copy the name of an object. - void CopyItemName( const MbItem & other ) { name = other.GetItemName(); } - /// \ru Выдать имя объекта. \en Get name of object. - SimpleName GetItemName() const { return name; } - /// \ru Установить имя объекта. \en Set name of the object. - void SetItemName( SimpleName n ) { name = n; } - /// \ru Соответствует ли знаковый атрибут объекту? \en Whether a sign attribute matches an object? - bool IsAttributeEqual( int attribute ); - - /** \} */ - -protected: - /// \ru Захватить объект, если ядро работает в многопоточном режиме. \en Catch object if multithreading mode is on. - void LockItem() const; - /// \ru Освободить объект, если ядро работает в многопоточном режиме. \en Release object if multithreading mode is on. - void UnlockItem() const; - -private: - /** \brief \ru Построить путь положения объекта. - \en Create path of object's position. \~ - \details \ru Построить путь положения объекта в модели и - дать матрицу преобразования объекта в глобальную систему координат. - Объект может содержаться в другом объекте (в сборке или вставке). - \en Create path of object's position in the model and - get transformation matrix of the object to the global coordinate system. - Object can be contained in other object (in assembly or in instance). \~ - \param[in] obj - \ru Объект. - \en Object. \~ - \param[out] path - \ru Путь объекта. - \en Path of object. \~ - \param[out] from - \ru Матрица преобразования объекта в глобальную систему координат. - \en Transformation matrix of object to the global coordinate system. \~ - \return \ru Найден ли путь и матрица объекта. - \en Whether the path and the matrix of object are found. \~ - \ingroup Model_Items - */ - virtual bool MakePath( const MbItem & obj, MbPath & path, MbMatrix3D & from ) const; - -public: - DECLARE_PERSISTENT_CLASS( MbItem ); - OBVIOUS_PRIVATE_COPY( MbItem ); -}; // MbItem - -IMPL_PERSISTENT_OPS( MbItem ) - - -//---------------------------------------------------------------------------------------- -// The functor implementing less operator of two model objects. -//--- -struct LessName -{ - bool operator()( const MbItem * _Left, const MbItem * _Right ) const - { - return (_Left->GetItemName() < _Right->GetItemName()); - } - bool operator()( const MbItem * _Left, SimpleName _Right ) const - { - return _Left->GetItemName() < _Right; - } - bool operator()( SimpleName _Left, const MbItem * _Right ) const - { - return _Left < _Right->GetItemName(); - } -}; - - -namespace c3d // namespace C3D -{ - -//------------------------------------------------------------------------------ -/// \ru Удалить копии построителей в объектах. \en Delete creators' copies. -// --- -template -bool DeleteCreatorsCopies( ItemsVector & items, double eps = LENGTH_EPSILON ) -{ - bool changed = false; - - size_t itemsCnt = items.size(); - c3d::CreatorsSPtrVector creators1, creators2; - - if ( itemsCnt > 1 ) { - for ( size_t i = 0; i < itemsCnt; ++i ) { - MbItem * item1 = items[i]; - if ( item1 == NULL ) - continue; - creators1.clear(); - item1->GetCreators( creators1 ); - size_t creatorsCnt1 = creators1.size(); - - if ( creatorsCnt1 > 0 ) { - for ( size_t j = i + 1; j < itemsCnt; ++j ) { - MbItem * item2 = items[j]; - if ( item2 == NULL ) - continue; - creators2.clear(); - item2->GetCreators( creators2 ); - size_t creatorsCnt2 = creators2.size(); - - if ( creatorsCnt2 > 0 ) { - bool replace = false; - for ( size_t k1 = 0; k1 < creatorsCnt1; ++k1 ) { - MbCreator * creator1 = creators1[k1]; - if ( creator1 == NULL ) - continue; - for ( size_t k2 = k1 + 1; k2 < creatorsCnt2; ++k2 ) { - MbCreator * creator2 = creators2[k2]; - if ( creator2 == NULL ) - continue; - if ( (creator1 != creator2) && creator1->IsSame( *creator2, eps ) ) { - creators2[k2] = creators1[k1]; - replace = true; - } - } - } - if ( replace ) { - item2->DeleteCreators(); - item2->AddCreators( creators2 ); - changed = true; - } - } - } - } - } - } - return changed; -} - -} // namespace C3D - - -#endif // __MODEL_ITEM_H +//////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Объект геометрической модели. + \en A model geometric object. \~ + +*/ +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __MODEL_ITEM_H +#define __MODEL_ITEM_H + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +class MATH_CLASS MbItem; +namespace c3d // namespace C3D +{ +typedef SPtr ItemSPtr; +typedef SPtr ConstItemSPtr; + +typedef std::vector ItemsVector; +typedef std::vector ConstItemsVector; + +typedef std::vector ItemsSPtrVector; +typedef std::vector ConstItemsSPtrVector; + +typedef std::set ItemsSet; +typedef ItemsSet::iterator ItemsSetIt; +typedef ItemsSet::const_iterator ItemsSetConstIt; +typedef std::pair ItemsSetRet; + +typedef std::set ConstItemsSet; +typedef ConstItemsSet::iterator ConstItemsSetIt; +typedef ConstItemsSet::const_iterator ConstItemsSetConstIt; +typedef std::pair ConstItemsSetRet; +} + + +//------------------------------------------------------------------------------ +/** \brief \ru Объект геометрической модели. + \en A model geometric object. \~ + \details \ru Родительский класс объектов геометрической модели. \n + Наследниками являются: \n + локальная система координат MbAssistingItem,\n + точечный каркас MbPointFrame,\n + проволочный каркас MbWireFrame,\n + твёрдое тело MbSolid,\n + полигональный объект MbMesh,\n + вставка объекта в локальной системе координат MbInstance,\n + сборка объектов в локальной системе координат MbAssembly,\n + вставка трехмерного объекта MbSpaceInstance,\n + вставка двумерного объекта MbPlaneInstance в плоскости XY локальной системы координат.\n + Объект содержит последовательность и способы своего построения MbTransactions.\n + Объект содержит не геометрические свойства в виде контейнера атрибутов MbAttributeContainer.\n + Имя объекта геометрической модели представляет собой контейнер простых имён. + В начале контейнера содержится простое имя SimpleName, присвоенное объекту геометрической моделью MbModel. \n + Если объект не держит в себе других объектов, то контейнер содержит одно простое имя SimpleName. + Ели объект держит в себе другие объекты (MbAssembly или MbInstance), + то имя внутренних объектов представляет собой контейнер, содержащий как минимум два простых имени. + Количество элементов имени объекта отражают количество уровней вложенности объект относительно модели. + \en Parent class of model geometric objects. \n + Inheritors are: \n + local coordinate system of MbAssistingItem,\n + MbPointFrame point-frame,\n + MbWireFrame wireframe,\n + MbSolid solid,\n + MbMesh polygonal planar object,\n + MbInstance instance of object in the local coordinate system,\n + MbAssembly assembly of objects in the local coordinate system,\n + MbSpaceInstance instance of three-dimensional object,\n + MbPlaneInstance instance of a two-dimensional object in the XY-plane of a local coordinate system.\n + Object contains MbTransactions sequence and ways to construct itself.\n + Object contains non-geometric properties as MbAttributeContainer attribute container.\n + The name of an object of a geometric model is represented as a container of simple names. + In the beginning of the container there is a SimpleName simple name assigned to object by MbModel geometric model. \n + If the object doesn't contain other objects, then the container contains one SimpleName simple name. + If the object contains other objects (MbAssembly or MbInstance), + then the internal objects name is represented as a container with at least two simple names. + Number of the elements of an object's name corresponds to the number of levels of objects inclusion relative to the model. \~ + \ingroup Model_Items +*/ +// --- +class MATH_CLASS MbItem : public MbSpaceItem, + public MbTransactions, + public MbAttributeContainer, + public MbSyncItem { + +private: + SimpleName name; ///< \ru Имя объекта геометрической модели. \en Name of a geometric model object. + +protected: + /// \ru Конструктор копирования с регистратором дублирования. \en Copy-constructor with duplication registrator. + explicit MbItem( const MbItem &, MbRegDuplicate * ); +public: + /// \ru Конструктор. \en Constructor. + MbItem(); + /// \ru Деструктор. \en Destructor. + virtual ~MbItem(); + +public : + VISITING_CLASS( MbItem ); + + /** \ru \name Общие функции геометрического объекта. + \en \name Common functions of a geometric object. + \{ */ + virtual MbeSpaceType IsA() const = 0; // \ru Тип объекта. \en A type of an object. + virtual MbeSpaceType Type() const; // \ru Групповой тип объекта. \en Group type of object. + virtual MbeSpaceType Family() const; // \ru Семейство объекта. \en Family of object. + virtual MbeImplicationType ImplicationType() const; // \ru Тип контейнера атрибутов - классификатор наследников. \en Type of an attribute container is a classifier of inheritors. + virtual MbSpaceItem & Duplicate ( MbRegDuplicate * = c3d_null ) const = 0; // \ru Создать копию. \en Create a copy. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ) = 0; // \ru Преобразовать согласно матрице. \en Transform according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ) = 0; // \ru Сдвинуть вдоль вектора. \en Translate along a vector. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ) = 0; // \ru Повернуть вокруг оси. \en Rotate about an axis. + virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const = 0; // \ru Являются ли объекты равными? \en Are the objects equal? + virtual bool SetEqual ( const MbSpaceItem & init ) = 0; // \ru Сделать объекты равными. \en Make the objects equal. + virtual double DistanceToPoint ( const MbCartPoint3D & ) const = 0; // \ru Вычислить расстояние до точки. \en Calculate the distance to a point. + virtual void AddYourGabaritTo( MbCube & r ) const = 0; // \ru Добавь свой габарит в куб. \en Add bounding box into a cube. + virtual void CalculateLocalGabarit( const MbMatrix3D & into, MbCube & cube ) const = 0; // \ru Рассчитать габарит в локальной системы координат. \en Calculate bounding box in the local coordinate system. + + virtual MbProperty & CreateProperty( MbePrompt n ) const; // \ru Создать собственное свойство. \en Create a custom property. + virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта. \en Get properties of the object. + virtual void SetProperties( const MbProperties & properties ); // \ru Установить свойства объекта. \en Set properties of the object. + virtual void GetBasisPoints( MbControlData3D & ) const; // \ru Выдать контрольные точки объекта. \en Get control points of object. + virtual void SetBasisPoints( const MbControlData3D & ); // \ru Изменить объект по контрольным точкам. \en Change the object by control points. + virtual void GetBasisPoints( MbControlData & ) const; // \ru Выдать контрольные точки объекта. \en Get control points of object. + virtual void SetBasisPoints( const MbControlData & ); // \ru Изменить объект по контрольным точкам. \en Change the object by control points. + /** + \brief \ru Получить систему координат объекта, если она есть. + \en Get the coordinate system of an item if it is exist. + \return \ru Функция вернет true, если объект имеет собственную подсистему координат, + иначе считается, что ЛСК объекта всегда "стандартная" (MbPlacement3D::global). + \en The function returns true, if the object have its own local coordinate system, + otherwise it is considered that the object LCS is always "standard" (MbPlacement3D :: global). + */ + virtual bool GetPlacement( MbPlacement3D & p ) const { p = MbPlacement3D::global; return false; } + /// \ru Установить систему координат объекта, если возможно. \en Set the coordinate system of an item if it is possible. + virtual bool SetPlacement( const MbPlacement3D & ) { return false; } + + /** \brief \ru Построить полигональную копию mesh. + \en Build polygonal copy mesh. \~ + \details \ru Построить полигональную копию данного объекта, представленную полигонами, или/и плоскими пластинами. + \en Build a polygonal copy of the object that is represented by polygons or/and fasets. \~ + \param[in] stepData - \ru Данные для вычисления шага при построении полигонального. + \en Data for еру step calculation for polygonal object. \~ + \param[in] note - \ru Способ построения полигонального объекта. + \en Way for polygonal object constructing. \~ + \param[in, out] mesh - \ru Построенный полигональный объект. + \en The builded polygonal object. + */ + virtual void CalculateMesh( const MbStepData & stepData, const MbFormNote & note, MbMesh & mesh ) const = 0; + /** \} */ + + /** \ru \name Общие функции объекта геометрической модели + \en \name Common functions of object of geometric model. + \{ */ + + /** \brief \ru Перестроить объект по журналу построения. + \en Reconstruct object according to the history tree. \~ + \details \ru Создать заново объект по журналу построения. + \en Create object by the history tree. \~ + \param[in] sameShell - \ru Полнота копирования элементов. + \en Whether to perform complete copying of elements while constructing. \~ + \param[out] items - \ru Контейнер для складывания элементов невыполненных построений (может быть c3d_null). + \en Container for the elements of not performed constructions (can be c3d_null). \~ + \return \ru Перестроен ли объект. + \en Whether an object is constructed. \~ + \ingroup Model_Items + */ + virtual bool RebuildItem( MbeCopyMode sameShell, RPArray * items, IProgressIndicator * progInd ); + + /** \brief \ru Создать полигональный объект. + \en Create polygonal object. \~ + \details \ru Создать полигональный объект - упрощенную копию данного объекта. + \en Create a polygonal object - a polygonal copy of the given object. \~ + \param[in] stepData - \ru Данные для вычисления шага при триангуляции. + \en Data for step calculation during triangulation. \~ + \param[in] note - \ru Способ построения полигонального объекта. + \en Way for polygonal object constructing. \~ + \return \ru Построенный полигональный объект. + \en Created polygonal object. \~ + \ingroup Model_Items + */ + virtual MbItem * CreateMesh( const MbStepData & stepData, const MbFormNote & note, MbRegDuplicate * iReg ) const = 0; + + /** \brief \ru Добавить полигональный объект. + \en Add polygonal object. \~ + \details \ru Добавить свою полигональную копию в присланный полигональный объект. + \en Add your own polygonal copy to the given polygonal object. \~ + \param[in] stepData - \ru Данные для вычисления шага при триангуляции. + \en Data for step calculation during triangulation. \~ + \param[in] note - \ru Способ построения полигонального объекта. + \en Way for polygonal object constructing. \~ + \param[out] mesh - \ru Присланный полигональный объект. + \en Given polygonal object. \~ + \return \ru Добавлен ли объект. + \en Whether the object is added. \~ + \ingroup Model_Items + */ + virtual bool AddYourMesh( const MbStepData & stepData, const MbFormNote & note, MbMesh & mesh ) const; + + /** \brief \ru Разрезать полигональный объект одной или двумя параллельными плоскостями. + \en Cut the polygonal object by one or two parallel planes. \~ + \details \ru Построить полигональный объект из части исходного полигонального объекта, + лежащей под плоскостью XY локальной системы координат на заданном расстоянии.\n + Функция "режет" только полигональный объект MbMesh. + Функция "режет" объект двумя плоскостями: + плоскостью XY локальной системы координат place и плоскостью, параллельной ей и + расположенной на расстоянии distance ниже неё. + Если distance<=0, то функция "режет" объект только одной плоскостью XY локальной системы.\n + Содержимое объекта, необходимое для построения разрезанного объекта и не затронутое режущими плоскостями, + добавляется в возвращаемый разрезанный объект без копирования.\n + \en Create polygonal object from a part of source polygonal object + which located under XY-plane of local coordinate system at given distance.\n + Function 'cuts' only MbMesh polygonal object. + Function 'cuts' the object by two planes: + XY plane of 'place' local coordinate system and plane parallel to it and + located at 'distance' distance below it. + If 'distance' is less than or equal to zero, then the function "cuts" an object only by one XY plane of local coordinate system.\n + Contents of an object that are necessary for creation of cut object and not affected by cutting planes + are added to returned cut object without copying.\n \~ + \param[in] cutPlace - \ru Локальная система координат, плоскость XY которой задаёт режущую плоскость. + \en A local coordinate system which XY plane defines a cutting plane. \~ + \param[in] distance - \ru Расстояние до параллельной режущей плоскости откладывается в отрицательную сторону оси Z локальной системы. + \en Distance to a parallel cutting plane is measured in negative direction of Z-axis of local coordinate system. \~ + \result \ru Возвращает новый полигональный объект, лежащий под плоскость XY локальной системы координат на заданном расстоянии. + \en Returns new polygonal object that located under XY-plane of local coordinate system at given distance. \~ + \ingroup Model_Items + */ + virtual MbItem * CutMesh( const MbPlacement3D & cutPlace, double distance ) const; + + /** \brief \ru Найти ближайший объект или имя ближайшего объекта. + \en Find the nearest object or name of the nearest object. \~ + \details \ru Найти ближайший трехмерный объект или его имя по типу объекта и + составляющий элемент искомого объекта или его имя по топологическому или двумерному типу элемента (по требованию) + на расстоянии от прямой, не превышающем заданной величины. + Функция предназначена для идентификации геометрического объекта, породившего полигональный объект. + Реальный поиск выполняется для элементов MbPrimitive полигонального объекта MbMesh, + у которых берётся информация о породившем примитив геометрическом объекте. + \en Find the nearest three-dimensional object or its name by type of object and + component of the required object or its name by topological or two-dimensional type of the element (on demand) + at distance from line less than or equal to the given value. + Function is intended for identification of a geometric object which is begetter of a polygonal object. + The real search is performed for MbMesh polygonal object's MbPrimitive elements + from which the information is taken about geometric object which is begetter of the primitive. \~ + \param[in] sType - \ru Тип искомого объекта. + \en Type of required object. \~ + \param[in] tType - \ru Топологический тип составляющего элемента искомого объекта. + \en Topological type of the required object's component. \~ + \param[in] pType - \ru Двумерный тип составляющего элемента искомого объекта. + \en Two-dimensional type of the required object's component. \~ + \param[in] axis - \ru Прямая поиска. + \en Line of search. \~ + \param[in] maxDistance - \ru Расстояние от прямой, на котором ищется объект. + \en Distance from the line on which the object is looked for. \~ + \param[in] gridPriority - \ru Повышенный приоритет триангуляционной сетки при поиске. + \en Increased priority triangulation grid when searching. \~ + \param[out] t - \ru Параметр прямой для найденной точки. + \en Parameter of found point on line. \~ + \param[out] dMin - \ru Найденное расстояние объекта от прямой. + \en Found distance from line to an object. \~ + \param[out] find - \ru Найденный объект. + \en Found object. \~ + \param[out] findName - \ru Имя найденного объекта. + \en Name of the found object. \~ + \param[out] element - \ru Найденный составляющий элемент объекта. + \en Found component of the object. \~ + \param[out] elementName - \ru Имя найденного составляющего элемента объекта. + \en Name of found component of the object. \~ + \param[out] path - \ru Путь положения объекта в модели. + \en Object's path in the model. \~ + \param[out] from - \ru Матрица преобразования найденного объекта в глобальную систему координат. + \en Transformation matrix of the found object to the global coordinate system. \~ + \return \ru Найден ли объект или его имя. + \en Whether the object or its name is found. \~ + \ingroup Model_Items + */ + virtual bool NearestMesh( MbeSpaceType sType, MbeTopologyType tType, MbePlaneType pType, + const MbAxis3D & axis, double maxDistance, bool gridPriority, double & t, double & dMin, + MbItem *& find, SimpleName & findName, + MbRefItem *& element, SimpleName & elementName, + MbPath & path, MbMatrix3D & from ) const; + + /** \brief \ru Дать все объекты указанного типа. + \en Get all objects by type. \~ + \details \ru Дать все объекты указанного типа, + а также матрицы преобразования их в глобальную систему координат. \n + \en Get all objects by type + and get transformation matrix to the global coordinate system. \n \~ + \param[in] type - \ru Тип объекта. + \en Object's type. \~ + \param[in] from - \ru Исходная матрица преобразования в глобальную систему координат. + \en Initial transformation matrix to the global coordinate system. \~ + \param[out] items - \ru Множество найденных объектов. + \en Found objects. \~ + \param[out] matrs - \ru Матрицы преобразования найденных объектов в глобальную систему координат. + \en Transformation matrix of found objects to the global coordinate system. \~ + \return \ru Добавлен ли данный объект. + \en Whether add this object. \~ + \ingroup Model_Items + */ + virtual bool GetItems( MbeSpaceType type, const MbMatrix3D & from, + RPArray & items, SArray & matrs ); + /** \brief \ru Дать все уникальные объекты указанного типа. + \en Get all unique objects by type. \~ + \details \ru Дать все уникальные объекты указанного типа. \n + \en Get all unique objects by type. \n \~ + \param[in] type - \ru Тип объекта. + \en Object's type. \~ + \param[out] items - \ru Множество найденных объектов. + \en Found objects. \~ + \return \ru Добавлен ли данный объект. + \en Whether add this object. \~ + \ingroup Model_Items + */ + virtual bool GetUniqItems( MbeSpaceType type, CSSArray & items ) const; + + /** \brief \ru Дать объект по его пути. + \en Get the object by its path. \~ + \details \ru Дать объект по его пути положения в модели и + дать матрицу преобразования объекта в глобальную систему координат. + Объект может содержаться в другом объекте (в сборке или вставке). + \en Get the object by path of its position in the model and + get transformation matrix of the object to the global coordinate system. + Object can be contained in other object (in assembly or in instance). \~ + \param[in] path - \ru Путь объекта. + \en Path of object. \~ + \param[in] ind - \ru Индекс требуемого объекта в path. + \en Index of the desired object in 'path'. \~ + \param[out] from - \ru Матрица преобразования объекта в глобальную систему координат. + \en Transformation matrix of object to the global coordinate system. \~ + \param[in] currInd - \ru Индекс текущего объекта в path. + \en Index of current object in path. \~ + \return \ru Найден ли путь и матрица объекта. + \en Whether the path and the matrix of object are found. \~ + \ingroup Model_Items + */ + virtual const MbItem * GetItemByPath( const MbPath & path, size_t ind, MbMatrix3D & from, size_t currInd = 0 ) const; + + /** \brief \ru Найти объект по геометрическому объекту. + \en Find object by geometric object. \~ + \details \ru Найти объект по геометрическому объекту, + а также получить путь к объекту в модели + и матрицу преобразования в глобальную систему координат. \n + \en Find object by geometric object + and also get the path to the object in model + and get transformation matrix to the global coordinate system. \n \~ + \param[in] s - \ru Геометрический объект. + \en Geometric object. \~ + \param[out] path - \ru Путь к объекту в модели. + \en Path to object in the model. \~ + \param[out] from - \ru Матрица преобразования объекта в глобальную систему координат. + \en Transformation matrix of object to the global coordinate system. \~ + \return \ru Найден ли путь и матрица объекта. + \en Whether the path and the matrix of object are found. \~ + \ingroup Model_Items + */ + virtual const MbItem * FindItem( const MbSpaceItem * s, MbPath & path, MbMatrix3D & from ) const; + + /** \brief \ru Найти объект по геометрическому объекту. + \en Find object by geometric object. \~ + \details \ru Найти объект по геометрическому объекту, + а также получить путь к объекту в модели + и матрицу преобразования в глобальную систему координат. \n + \en Find object by geometric object + and also get the path to the object in model + and get transformation matrix to the global coordinate system. \n \~ + \param[in] s - \ru Геометрический объект. + \en Geometric object. \~ + \param[out] path - \ru Путь к объекту в модели. + \en Path to object in the model. \~ + \param[out] from - \ru Матрица преобразования объекта в глобальную систему координат. + \en Transformation matrix of object to the global coordinate system. \~ + \return \ru Найден ли путь и матрица объекта. + \en Whether the path and the matrix of object are found. \~ + \ingroup Model_Items + */ + virtual const MbItem * FindItem( const MbPlaneItem * s, MbPath & path, MbMatrix3D & from ) const; + + /** \brief \ru Найти объект по объекту геометрической модели. + \en Find object by object of geometric model \~ + \details \ru Найти объект по объекту геометрической модели. + а также получить путь к объекту в модели + и матрицу преобразования в глобальную систему координат. \n + \en Find object by object of geometric model + and also get the path to the object in model + and get transformation matrix to the global coordinate system. \n \~ + \param[in] s - \ru Геометрический объект. + \en Geometric object. \~ + \param[out] path - \ru Путь к объекту в модели. + \en Path to object in the model. \~ + \param[out] from - \ru Матрица преобразования объекта в глобальную систему координат. + \en Transformation matrix of object to the global coordinate system. \~ + \return \ru Найден ли путь и матрица объекта. + \en Whether the path and the matrix of object are found. \~ + \ingroup Model_Items + */ + virtual const MbItem * FindItem( const MbItem * s, MbPath & path, MbMatrix3D & from ) const; + + /** \brief \ru Найти объект по имени. + \en Find object by name. \~ + \details \ru Найти объект по имени, а также получить путь к объекту в модели + и матрицу преобразования в глобальную систему координат. \n + \en Find object by name and also get path to object in model + and get transformation matrix to the global coordinate system. \n \~ + \param[in] n - \ru Имя объекта. + \en A name of an object. \~ + \param[out] path - \ru Путь к объекту в модели. + \en Path to object in the model. \~ + \param[out] from - \ru Матрица преобразования объекта в глобальную систему координат. + \en Transformation matrix of object to the global coordinate system. \~ + \return \ru Найден ли путь и матрица объекта. + \en Whether the path and the matrix of object are found. \~ + \ingroup Model_Items + */ + virtual const MbItem * GetItemByName( SimpleName n, MbPath & path, MbMatrix3D & from ) const; + + /** \brief \ru Преобразовать выбранный объект согласно матрице. + \en Transform selected object according to the matrix. \~ + \details \ru Преобразовать выбранный простой объект согласно матрице c использованием регистратора. + Если объект содержит другие объекты геометрической модели, то преобразуется выбранное содержимое. + \en Transform selected simple object according to the matrix using the registrator. + If object contains other objects of geometric model then selected contents will be transformed. \~ + \param[in] matr - \ru Матрица преобразования. + \en A transformation matrix. \~ + \param[in] iReg - \ru Регистратор. + \en Registrator. \~ + \ingroup Model_Items + */ + virtual void TransformSelected( const MbMatrix3D & matr, MbRegTransform * iReg = c3d_null ); + + /** \brief \ru Сдвинуть выбранный объект вдоль вектора. + \en Move selected object along a vector. \~ + \details \ru Сдвинуть вдоль вектора с использованием регистратора выбранный простой объект. + Если объект содержит другие объекты геометрической модели, то преобразуется выбранное содержимое. + \en Move selected simple object along the vector using the registrator. + If object contains other objects of geometric model then selected contents will be transformed. \~ + \param[in] to - \ru Вектор сдвига. + \en Translation vector. \~ + \param[in] iReg - \ru Регистратор. + \en Registrator. \~ + \ingroup Model_Items + */ + virtual void MoveSelected( const MbVector3D & to, MbRegTransform * iReg = c3d_null ); + + /** \brief \ru Повернуть выбранный объект вокруг оси на заданный угол. + \en Rotate selected object by a given angle about an axis. \~ + \details \ru Повернуть вокруг оси на заданный угол с использованием регистратора выбранный простой объект. + Если объект содержит другие объекты геометрической модели, то преобразуется выбранное содержимое. + \en Rotate selected simple object about the axis by the given angle using the registrator. + If object contains other objects of geometric model then selected contents will be transformed. \~ + \param[in] axis - \ru Ось поворота. + \en The rotation axis. \~ + \param[in] angle - \ru Угол поворота. + \en The rotation angle. \~ + \param[in] iReg - \ru Регистратор. + \en Registrator. \~ + \ingroup Model_Items + */ + virtual void RotateSelected( const MbAxis3D & axis, double angle, MbRegTransform * iReg = c3d_null ); + + /// \ru Дать матрицу преобразования из локальной системы объекта. \en Get transform matrix from local coordinate system of object. + virtual bool GetMatrixFrom( MbMatrix3D & from ) const; + /// \ru Дать матрицу преобразования в локальную систему объекта. \en Get transform matrix into local coordinate system of object. + virtual bool GetMatrixInto( MbMatrix3D & into ) const; + + /// \ru Копировать строители и атрибуты. \en Copy creators and attributes. + void Assign( const MbItem & other ); + /// \ru Копировать имя объекта. \en Copy the name of an object. + void CopyItemName( const MbItem & other ) { name = other.GetItemName(); } + /// \ru Выдать имя объекта. \en Get name of object. + SimpleName GetItemName() const { return name; } + /// \ru Установить имя объекта. \en Set name of the object. + void SetItemName( SimpleName n ) { name = n; } + /// \ru Соответствует ли знаковый атрибут объекту? \en Whether a sign attribute matches an object? + bool IsAttributeEqual( int attribute ); + + /** \} */ + +protected: + /// \ru Захватить объект, если ядро работает в многопоточном режиме. \en Catch object if multithreading mode is on. + void LockItem() const; + /// \ru Освободить объект, если ядро работает в многопоточном режиме. \en Release object if multithreading mode is on. + void UnlockItem() const; + +private: + /** \brief \ru Построить путь положения объекта. + \en Create path of object's position. \~ + \details \ru Построить путь положения объекта в модели и + дать матрицу преобразования объекта в глобальную систему координат. + Объект может содержаться в другом объекте (в сборке или вставке). + \en Create path of object's position in the model and + get transformation matrix of the object to the global coordinate system. + Object can be contained in other object (in assembly or in instance). \~ + \param[in] obj - \ru Объект. + \en Object. \~ + \param[out] path - \ru Путь объекта. + \en Path of object. \~ + \param[out] from - \ru Матрица преобразования объекта в глобальную систему координат. + \en Transformation matrix of object to the global coordinate system. \~ + \return \ru Найден ли путь и матрица объекта. + \en Whether the path and the matrix of object are found. \~ + \ingroup Model_Items + */ + virtual bool MakePath( const MbItem & obj, MbPath & path, MbMatrix3D & from ) const; + +DECLARE_PERSISTENT_CLASS( MbItem ) +OBVIOUS_PRIVATE_COPY( MbItem ) +}; // MbItem + +IMPL_PERSISTENT_OPS( MbItem ) + + +//---------------------------------------------------------------------------------------- +// The functor implementing less operator of two model objects. +//--- +struct LessName +{ + bool operator()( const MbItem * _Left, const MbItem * _Right ) const + { + return (_Left->GetItemName() < _Right->GetItemName()); + } + bool operator()( const MbItem * _Left, SimpleName _Right ) const + { + return _Left->GetItemName() < _Right; + } + bool operator()( SimpleName _Left, const MbItem * _Right ) const + { + return _Left < _Right->GetItemName(); + } +}; + + +namespace c3d // namespace C3D +{ + +//------------------------------------------------------------------------------ +/// \ru Удалить копии построителей в объектах. \en Delete creators' copies. +// --- +template +bool DeleteCreatorsCopies( ItemsVector & items, double eps = LENGTH_EPSILON ) +{ + bool changed = false; + + size_t itemsCnt = items.size(); + c3d::CreatorsSPtrVector creators1, creators2; + + if ( itemsCnt > 1 ) { + for ( size_t i = 0; i < itemsCnt; ++i ) { + MbItem * item1 = items[i]; + if ( item1 == c3d_null ) + continue; + creators1.clear(); + item1->GetCreators( creators1 ); + size_t creatorsCnt1 = creators1.size(); + + if ( creatorsCnt1 > 0 ) { + for ( size_t j = i + 1; j < itemsCnt; ++j ) { + MbItem * item2 = items[j]; + if ( item2 == c3d_null ) + continue; + creators2.clear(); + item2->GetCreators( creators2 ); + size_t creatorsCnt2 = creators2.size(); + + if ( creatorsCnt2 > 0 ) { + bool replace = false; + for ( size_t k1 = 0; k1 < creatorsCnt1; ++k1 ) { + MbCreator * creator1 = creators1[k1]; + if ( creator1 == c3d_null ) + continue; + for ( size_t k2 = k1 + 1; k2 < creatorsCnt2; ++k2 ) { + MbCreator * creator2 = creators2[k2]; + if ( creator2 == c3d_null ) + continue; + if ( (creator1 != creator2) && creator1->IsSame( *creator2, eps ) ) { + creators2[k2] = creators1[k1]; + replace = true; + } + } + } + if ( replace ) { + item2->DeleteCreators(); + item2->AddCreators( creators2 ); + changed = true; + } + } + } + } + } + } + return changed; +} + +} // namespace C3D + + +#endif // __MODEL_ITEM_H diff --git a/C3d/Include/model_tree.h b/C3d/Include/model_tree.h index 51430ba..8eb3674 100644 --- a/C3d/Include/model_tree.h +++ b/C3d/Include/model_tree.h @@ -140,7 +140,7 @@ public: virtual const IModelTreeNode * GetModelTreeNode() const { return m_subtree; } // \ru Доступ к информации об исполнении. \en Access to the embodiment info. - virtual const MbItemData& GetEmbodimentData() const { C3D_ASSERT( m_subtree != NULL ); return m_subtree->GetData(); } + virtual const MbItemData& GetEmbodimentData() const { C3D_ASSERT( m_subtree != c3d_null ); return m_subtree->GetData(); } // \ru Построить дерево модели, которое содержится в данном исполнении. // \en Build a tree of a model which is contained in a given embodiment. @@ -197,13 +197,13 @@ public: // \en Build a tree with nodes, selected by filters. In case of embodiment tree, the function works with the first embodiment. virtual std_unique_ptr GetFilteredTree ( const std::vector& filters ) const; - // \ru Построить дерево по заданным узлам. Не применимо для дерева исполнений (в этом случае возвращает NULL). - // \en Build a tree for given nodes. Not applicable to embodiment tree (in this case, returns NULL). + // \ru Построить дерево по заданным узлам. Не применимо для дерева исполнений (в этом случае возвращает c3d_null). + // \en Build a tree for given nodes. Not applicable to embodiment tree (in this case, returns c3d_null). virtual std_unique_ptr GetFilteredTree ( std::vector& nodes ) const; - // \ru Выдать указатель на дерево исполнений. Выдает NULL, если не применимо (нет исполнений). - // \en Get pointer to embodiments tree. Return NULL if not applicable (no embodiments). - virtual const IEmbodimentTree* GetEmbodimentsTree() const { return GetType() == mtt_Embodiment ? &m_embTree : NULL; } + // \ru Выдать указатель на дерево исполнений. Выдает c3d_null, если не применимо (нет исполнений). + // \en Get pointer to embodiments tree. Return c3d_null if not applicable (no embodiments). + virtual const IEmbodimentTree* GetEmbodimentsTree() const { return GetType() == mtt_Embodiment ? &m_embTree : c3d_null; } /// \ru Версия дерева. \en Tree version. virtual VERSION GetVersion() { return m_currentVersion; } @@ -225,7 +225,7 @@ public: /// \param node - a node with data. /// \param added - filled if non-null (true - if a node added, false - a node already exists). /// \return - a pointer to the tree node. - MbTreeNode* AddNode ( const MbTreeNode& node, bool* added = NULL ); + MbTreeNode* AddNode ( const MbTreeNode& node, bool* added = c3d_null ); /// \ru Добавить узел с указанными данными, если узел с такими данными не существует. /// \param node - данные. @@ -235,7 +235,7 @@ public: /// \param node - a data. /// \param added - filled if non-null (true - if a node added, false - a node already exists). /// \return - a pointer to the tree node. - MbTreeNode* AddNode ( const MbItemData& data, bool* added = NULL ); + MbTreeNode* AddNode ( const MbItemData& data, bool* added = c3d_null ); /// \ru Доступ к узлам дерева, упорядоченным по данным. /// \en Access to nodes of the tree, ordered by data. diff --git a/C3d/Include/model_tree_data.h b/C3d/Include/model_tree_data.h index 5907391..94c3ec9 100644 --- a/C3d/Include/model_tree_data.h +++ b/C3d/Include/model_tree_data.h @@ -151,8 +151,8 @@ public: //---------------------------------------------------------------------------------------- -/// \ru Создать объект пользовательских данных для атрибута. Возвращает NULL, если данный атрибут не поддерживается деревом модели. -/// \en Create user data object for the attribute. Return NULL if this attribute is not supported in the model tree. +/// \ru Создать объект пользовательских данных для атрибута. Возвращает c3d_null, если данный атрибут не поддерживается деревом модели. +/// \en Create user data object for the attribute. Return c3d_null if this attribute is not supported in the model tree. //--- MATH_FUNC( ItemDataBase* ) CreateAttributeData( MbAttribute* attr ); @@ -800,8 +800,8 @@ inline writer& operator << ( writer & out, const UserDataMap& itemmap ) while ( !curIter.Empty() ) { MbeItemDataType type = curIter.Key(); ItemDataBase* item = curIter.Value(); - C3D_ASSERT( type < idtCount && item != NULL ); - if ( type < idtCount && item != NULL ) { + C3D_ASSERT( type < idtCount && item != c3d_null ); + if ( type < idtCount && item != c3d_null ) { out << (int)type; // \ru Тип данных. \en A data type. size_t dataSize = item->Size( out ); ::WriteCOUNT( out, dataSize );// \ru Размер данных. \en Data size. diff --git a/C3d/Include/mt_ref_item.h b/C3d/Include/mt_ref_item.h index d83e083..1ffedcb 100644 --- a/C3d/Include/mt_ref_item.h +++ b/C3d/Include/mt_ref_item.h @@ -1,63 +1,68 @@ -////////////////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru Надкласс для объектов, время жизни которых автоматически регулируется счетчиком ссылок. - \en Superclass for objects their lifetime is automatically regulated by reference counter. -*/ -////////////////////////////////////////////////////////////////////////////////////////// - -#ifndef __MT_REF_ITEM_H -#define __MT_REF_ITEM_H - -#include - - -////////////////////////////////////////////////////////////////////////////////////////// -/** - \brief \ru Базовый класс для объектов с подсчетом ссылок. - \en Base class for objects with reference counting. \~ - \ingroup Base_Items - \sa #MbRefItem, #SPtr -*/ -////////////////////////////////////////////////////////////////////////////////////////// - -class MATH_CLASS MtRefItem -{ - mutable refcount_t useCount; - -protected: - MtRefItem() : useCount(0) {} - virtual ~MtRefItem() {} - -public: - /// \ru Добавить одну ссылку на объект. \en Adds a reference to this object. - refcount_t AddRef() const { return ++useCount; } - /// \ru Освободить одну ссылку на объект. \en Releases a reference to this object. - refcount_t Release() const; - -public: - /// \ru Вернуть количество объектов, ссылающихся на данный. \en Returns a number of objects referring to this. - refcount_t GetUseCount() const { return useCount; } - -private: - MtRefItem( const MtRefItem & ); - MtRefItem & operator = ( const MtRefItem & ); -}; - -//---------------------------------------------------------------------------------------- -// -//--- -inline refcount_t MtRefItem::Release() const -{ - if ( !useCount || (--useCount == 0) ) - { - delete this; // \ru Вызов виртуального деструктора \en Call of virtual destructor - return 0; - } - - return useCount; -} - -#endif // __MT_REF_ITEM_H - +////////////////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Надкласс для объектов, время жизни которых автоматически регулируется счетчиком ссылок. + \en Superclass for objects their lifetime is automatically regulated by reference counter. +*/ +////////////////////////////////////////////////////////////////////////////////////////// + +#ifndef __MT_REF_ITEM_H +#define __MT_REF_ITEM_H + +#include + + +#if defined (C3D_WINDOWS ) && !defined(ALL_WARNINGS) //_MSC_VER // Set warnings level +#pragma warning(disable: 4275) //AP non dll-interface class '1' used as base for dll-interface class '2' (deriving exported from non-exported) +#endif + + +////////////////////////////////////////////////////////////////////////////////////////// +/** + \brief \ru Базовый класс для объектов с подсчетом ссылок. + \en Base class for objects with reference counting. \~ + \ingroup Base_Items + \sa #MbRefItem, #SPtr +*/ +////////////////////////////////////////////////////////////////////////////////////////// + +class MtRefItem +{ + mutable refcount_t useCount; + +protected: + MtRefItem() : useCount(0) {} + virtual ~MtRefItem() {} + +public: + /// \ru Добавить одну ссылку на объект. \en Adds a reference to this object. + refcount_t AddRef() const { return ++useCount; } + /// \ru Освободить одну ссылку на объект. \en Releases a reference to this object. + refcount_t Release() const; + +public: + /// \ru Вернуть количество объектов, ссылающихся на данный. \en Returns a number of objects referring to this. + refcount_t GetUseCount() const { return useCount; } + +private: + MtRefItem( const MtRefItem & ); + MtRefItem & operator = ( const MtRefItem & ); +}; + +//---------------------------------------------------------------------------------------- +// +//--- +inline refcount_t MtRefItem::Release() const +{ + if ( !useCount || (--useCount == 0) ) + { + delete this; // \ru Вызов виртуального деструктора \en Call of virtual destructor + return 0; + } + + return useCount; +} + +#endif // __MT_REF_ITEM_H + // eof \ No newline at end of file diff --git a/C3d/Include/multiline.h b/C3d/Include/multiline.h index cb8e0b8..d3f646e 100644 --- a/C3d/Include/multiline.h +++ b/C3d/Include/multiline.h @@ -441,7 +441,7 @@ public: // --- class MATH_CLASS MbMultiline : public MbPlaneItem { private: - MbContour * basisCurve; ///< \ru Базовая кривая (БК) (всегда не NULL). \en Base curve (BC) (always not NULL). + MbContour * basisCurve; ///< \ru Базовая кривая (БК) (всегда не c3d_null). \en Base curve (BC) (always not c3d_null). SArray vertices; ///< \ru Массив вершин мультилинии (согласован с вершинами БК). \en Array of vertices of a multiline (agreed with the vertices of the base curve). CSSArray equidRadii; ///< \ru Сортированный массив радиусов эквидистантных кривых. \en Sorted array of radii of equidistant curves. StMLTipParams begTipParams; ///< \ru Параметры законцовки в начале мультилинии (начале БК). \en Parameters of a tip at the beginning of a multiline ( the beginning of base curve). @@ -450,7 +450,7 @@ private: bool isTransparent; ///< \ru "Прозрачная" ли мультилиния. \en Whether the multiline is "transparent". // \ru Объекты, которые составляют мультилинию (рекомендовали не делать их mutable, а писать и читать) \en Objects which constitute a multiline (recommended to read and write and not to make them mutable) // \ru ЭТИ ОБЪЕКТЫ НЕЛЬЗЯ МЕНЯТЬ СНАРУЖИ!!! \en THESE OBJECTS CAN'T BE CHANGED OUTSIDE!!! - PArray curves; ///< \ru Кривые мультилинии (согласован с equidRadii) (всегда не NULL). \en Curves of a multiline (agreed with the 'equidRadii') (always not NULL). + PArray curves; ///< \ru Кривые мультилинии (согласован с equidRadii) (всегда не c3d_null). \en Curves of a multiline (agreed with the 'equidRadii') (always not c3d_null). PArray tipCurves; ///< \ru Законцовки в вершинах мультилинии (согласован с vertices). \en Tips at vertices of a multiline (agreed with 'vertices'). MbContour * begTipCurve; ///< \ru Законцовка в начале мультилинии (начале БК). \en Tip at the beginning of a multiline (beginning of the base curve). MbContour * endTipCurve; ///< \ru Законцовка в конце мультилинии (конце БК). \en Tip at the end of a multiline (end of the base curve). @@ -513,10 +513,10 @@ public: virtual bool IsSame ( const MbPlaneItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Являются ли объекты равными. \en Determine whether objects are equal. virtual bool IsSimilar ( const MbPlaneItem & item ) const; // \ru Являются ли объекты подобными. \en Determine whether the objects are similar. virtual bool SetEqual ( const MbPlaneItem & item ); // \ru Сделать объекты равными. \en Make the objects equal. - virtual void Transform ( const MbMatrix & matr, MbRegTransform * = NULL, const MbSurface * newSurface = NULL );// \ru Преобразовать объект согласно матрице. \en Transform an object according to the matrix. - virtual void Move ( const MbVector & to, MbRegTransform * = NULL, const MbSurface * newSurface = NULL );// \ru Сдвинуть объект вдоль вектора. \en Move an object along a vector. - virtual void Rotate ( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Повернуть вокруг точки на угол. \en Rotate at angle around a point. - virtual MbPlaneItem & Duplicate ( MbRegDuplicate * = NULL ) const; // \ru Сделать копию объекта. \en Create a copy of the object. + virtual void Transform ( const MbMatrix & matr, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null );// \ru Преобразовать объект согласно матрице. \en Transform an object according to the matrix. + virtual void Move ( const MbVector & to, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null );// \ru Сдвинуть объект вдоль вектора. \en Move an object along a vector. + virtual void Rotate ( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Повернуть вокруг точки на угол. \en Rotate at angle around a point. + virtual MbPlaneItem & Duplicate ( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию объекта. \en Create a copy of the object. virtual void AddYourGabaritTo( MbRect & r ) const; // \ru Добавить свой габарит в присланный габарит. \en Add your own bounding box into the given bounding box. virtual bool IsVisibleInRect ( const MbRect & r, bool exact = false ) const; // \ru Виден ли объект в заданном прям-ке. \en Whether the object is visible in the given rectangle. @@ -1319,7 +1319,7 @@ private: /// \ru Насчитать все кривые и все законцовки в вершинах. \en Calculate all curves and all tips at vertices. void CalculateCurvesAndTipCurves(); /// \ru Насчитать законцовку в начале. \en Calculate tip at the beginning. - void CalculateBegTipCurve ( SArray * changeCurvesNumbers = NULL ); + void CalculateBegTipCurve ( SArray * changeCurvesNumbers = c3d_null ); /// \ru Насчитать законцовку в конце. \en Calculate tip at the end. void CalculateEndTipCurve (); @@ -1576,7 +1576,7 @@ MATH_FUNC (bool) BreakMultilineNParts( const MbMultiline & multiline, size_t par // --- inline bool MbMultiline::IsDegenerate( double lenEps ) const { return ( (minNotDegInd == SYS_MAX_T) || // \ru Значит, и maxNotDegInd == SYS_MAX_T \en So maxNotDegInd == SYS_MAX_T - (basisCurve != NULL && basisCurve->IsDegenerate(lenEps)) ); + (basisCurve != c3d_null && basisCurve->IsDegenerate(lenEps)) ); } diff --git a/C3d/Include/name_check.h b/C3d/Include/name_check.h index 28212ab..c270156 100644 --- a/C3d/Include/name_check.h +++ b/C3d/Include/name_check.h @@ -155,7 +155,7 @@ struct NameIntersectionInfo { const MbName * name; ///< \ru Имя объектов. \en A name of objects. size_t intersections; ///< \ru Количество совпадений. \en The count of coincidences. - NameIntersectionInfo() : name( NULL ), intersections( 0 ) {} + NameIntersectionInfo() : name( c3d_null ), intersections( 0 ) {} }; @@ -188,14 +188,14 @@ MATH_FUNC (bool) CheckShellNames( const RPArray & shells, \en The first edge. \~ \param[in] edge2 - \ru Второе ребро. \en The second edge. \~ - \param[in] version - \ru Версия исполнения. - \en The version. \~ + \param[in] snMaker - \ru Именователь с версией исполнения. + \en Names maker with a version. \~ \ingroup Names */ //--- -MATH_FUNC (void) CombineNames( MbCurveEdge & edge1, - const MbCurveEdge & edge2, - VERSION version ); +MATH_FUNC (void) CombineNames( MbCurveEdge & edge1, + const MbCurveEdge & edge2, + const MbSNameMaker & snMaker ); #endif // __NAME_CHECK_H diff --git a/C3d/Include/name_contour_tree.h b/C3d/Include/name_contour_tree.h index d1d835f..ffcad24 100644 --- a/C3d/Include/name_contour_tree.h +++ b/C3d/Include/name_contour_tree.h @@ -31,7 +31,7 @@ private: bool intersectChildren; // \ru Пересекаются ли внутренние контуры \en Are inner contours intersect public: /// \ru Конструктор. \en Constructor. - MbNamedContoursTree( const MbContour * con = NULL, bool o = true ); + MbNamedContoursTree( const MbContour * con = c3d_null, bool o = true ); /// \ru Деструктор. \en Destructor. ~MbNamedContoursTree(); public: @@ -40,7 +40,7 @@ public: /// \ru Получить количество деревьев. \en Get count of trees. size_t GetChildrenCount() const { return children.Count(); } /// \ru Получить дерево контуров по индексу. \en Get contour tree by an index. - const MbNamedContoursTree * GetTreeContour( size_t index ) const { return (GetChildrenCount() >= index) ? children[index] : NULL; } + const MbNamedContoursTree * GetTreeContour( size_t index ) const { return (GetChildrenCount() >= index) ? children[index] : c3d_null; } /// \ru Проверить группы контуров на не пересечение. \en Check groups of contours for absence of intersection. MbResultType CheckProfiles( bool base ) const; /// \ru Получить указатель на внешний контур. \en Get the pointer to the external contour. @@ -64,8 +64,8 @@ private: \en Get the biggest contour. \~ \details \ru Выдать самый большой контур по длине диагонали габарита. \en Get the biggest contour by bounding box diagonal length. \~ - \return \ru Возвращает указатель на найденный контур или NULL. - \en Returns pointer to the found contour or NULL. \~ + \return \ru Возвращает указатель на найденный контур или c3d_null. + \en Returns pointer to the found contour or c3d_null. \~ \ingroup Names */ // --- diff --git a/C3d/Include/name_item.h b/C3d/Include/name_item.h index 924d8c6..f3ab337 100644 --- a/C3d/Include/name_item.h +++ b/C3d/Include/name_item.h @@ -789,7 +789,7 @@ public: \param[in] copy - \ru Имя копии. \en The name of the copy. \~ */ - MbNamePair( const MbName * copy ) : gageName( C3D_NULL_PTR ), copyName( copy ), copyHash( c3d::SIMPLENAME_MAX ) {} + MbNamePair( const MbName * copy ) : gageName( c3d_null ), copyName( copy ), copyHash( c3d::SIMPLENAME_MAX ) {} /// \ru . \en . /** \brief \ru Конструктор. \en Constructor. \~ @@ -798,13 +798,13 @@ public: \param[in] copy - \ru Хэш имени копии. \en The hash of the name of the copy. \~ */ - MbNamePair( SimpleName copy ) : gageName( C3D_NULL_PTR ), copyName( C3D_NULL_PTR ), copyHash( copy ) {} + MbNamePair( SimpleName copy ) : gageName( c3d_null ), copyName( c3d_null ), copyHash( copy ) {} /// \ru Деструктор. \en Destructor. ~MbNamePair() {} public: /// \ru Обнулить имя оригинала и имя копии. \en Set name of original and of its duplicate to null. - void SetNull() { gageName = C3D_NULL_PTR; copyName = C3D_NULL_PTR; copyHash = c3d::SIMPLENAME_MAX; } + void SetNull() { gageName = c3d_null; copyName = c3d_null; copyHash = c3d::SIMPLENAME_MAX; } /// \ru Оператор сравнения. \en Comparison operator. bool operator == ( const MbNamePair & other ) const; /// \ru Оператор меньше. \en "Less than" operator. @@ -871,8 +871,8 @@ public: */ void AddNameData( const MbName * orig, const MbName * copy ) { - C3D_ASSERT( (orig != C3D_NULL_PTR) && (copy != C3D_NULL_PTR) ); - if ( (orig != C3D_NULL_PTR) && (copy != C3D_NULL_PTR) ) { + C3D_ASSERT( (orig != c3d_null) && (copy != c3d_null) ); + if ( (orig != c3d_null) && (copy != c3d_null) ) { checkList.Add( MbNamePair( orig, copy ) ); } } @@ -973,7 +973,7 @@ public: , version() #ifdef ORIGINAL_MAIN_NAME , original( c3d::SIMPLENAME_MAX ) - , nameList( C3D_NULL_PTR ) + , nameList( c3d_null ) #endif // ORIGINAL_MAIN_NAME { defName.SetMainName( mn ); @@ -992,7 +992,7 @@ public: , version() #ifdef ORIGINAL_MAIN_NAME , original( c3d::SIMPLENAME_MAX ) - , nameList( C3D_NULL_PTR ) + , nameList( c3d_null ) #endif // ORIGINAL_MAIN_NAME { defName.MakeTemplate(); @@ -1076,6 +1076,28 @@ public: */ virtual void SetItemName( const MbName & name, MbTopologyItem & item ) const; + /** \brief \ru Установить главное имя топологическому объекту. + \en Set main name of topology item name. \~ + \details \ru Установить главное имя в имени топологического объекта. \n + \en Set main name of topology item name. \n \~ + \param[in,out] item - \ru Топологический элемент. + \en Topology item. \~ + \param[in] addOldMainName - \ru При true запомнить заменяемое главное имя в индексе копирования. + \en When it is true remember replaced main name in the copying index. \~ + */ + virtual bool SetItemMainName( MbTopologyItem & item, bool addOldMainName ) const; + + /** \brief \ru Установить индекс копирования топологическому объекту. + \en Set copy index into topology item name. \~ + \details \ru Установить (вставить) индекс копирования в имя топологического объекта. \n + \en Set (insert) copy index into topology item name. \n \~ + \param[in,out] item - \ru Топологический элемент. + \en Topology item. \~ + \param[in] copyIndex - \ru Индекс копирования. + \en Copy index. \~ + */ + virtual bool SetItemCopyIndex( MbTopologyItem & item, SimpleName copyIndex ) const; + /// \ru Является ли именователь родительским для данного топологического элемента? \en Is the name maker a parent for a given topological element?. virtual bool IsChild( const MbTopologyItem & ) const; @@ -1155,11 +1177,11 @@ public: MbNameMaker GetOriginalNameMaker() const; /// \ru Удалить ненужные элементы по именам копий. \en Clean up unnecessary pairs by name copies. bool CleanNameList( c3d::ConstNamesVector & delNamesCopies ) const { - return ((nameList != C3D_NULL_PTR) ? nameList->Clean( delNamesCopies ) : false); + return ((nameList != c3d_null) ? nameList->Clean( delNamesCopies ) : false); } /// \ru Заменить имена копий. \en Replace names copies. bool ReplaceNameList( const MbName & newNameCopies, const c3d::ConstNamesVector & oldNamesCopies ) const { - return ((nameList != C3D_NULL_PTR) ? nameList->Replace( newNameCopies, oldNamesCopies ) : false); + return ((nameList != c3d_null) ? nameList->Replace( newNameCopies, oldNamesCopies ) : false); } #endif // ORIGINAL_MAIN_NAME @@ -1498,7 +1520,7 @@ reader & operator >> ( reader & in, MbPath & ref ) if ( in.good() && count ) { ref.SetSize( count, true/*clear*/ ); - if ( (ref.GetAddr() == NULL) && (count >= SYS_MAX_UINT32) ) // We could not allocate the required amount of memory + if ( (ref.GetAddr() == c3d_null) && (count >= SYS_MAX_UINT32) ) // We could not allocate the required amount of memory in.setState( io::outOfMemory ); else { for ( size_t i = 0; i < count && in.good(); ++i ) { diff --git a/C3d/Include/op_curve_parameter.h b/C3d/Include/op_curve_parameter.h new file mode 100644 index 0000000..a005069 --- /dev/null +++ b/C3d/Include/op_curve_parameter.h @@ -0,0 +1,111 @@ +//////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Параметры операций над кривыми. + \en Parameters of operations on the curves. \~ + +*/ +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __OP_CURVE_PARAMETERS_H +#define __OP_CURVE_PARAMETERS_H + +#include +#include +#include +#include +#include +#include +#include +#include + + +//------------------------------------------------------------------------------ +/** \brief \ru Параметры эквидистантной кривой в пространстве. + \en Parameters of an offset curve in space. \~ + \details \ru Параметры эквидистантной кривой в пространстве по трехмерной кривой и вектору направления. \n + \en Parameters of an offset curve in space from a three-dimensional curve and a direction vector. \n \~ + \ingroup Build_Parameters +*/ +// --- +struct MATH_CLASS MbSpatialOffsetCurveParams { +public: + MbVector3D offsetVect; ///< \ru Вектор, задающий смещение в точке кривой. \en The displacement vector at a point of the curve. + bool useFillet; ///< \ru Если true, то разрывы заполнять скруглением, иначе продолженными кривыми. \en If 'true', the gaps are to be filled with fillet, otherwise with the extended curves. + bool keepRadius; ///< \ru Если true, то в существующих скруглениях сохранять радиусы. \en If 'true', the existent fillet radii are to be kept. + bool bluntAngle; ///< \ru Если true, то в притуплять острые углы. \en If 'true', sharp corners are to be blunt. + bool fromBeg; ///< \ru Вектор смещения привязан к началу (если true). \en The translation vector is associated with the beginning (if true). +protected: + bool useSurfaceNormal; ///< \ru Эквидистанта согласована с нормалью к поверхности. \en Offset point is moved according to surface normal. + c3d::ConstSurfaceSPtr surface; ///< \ru Поверхность кривой или подобная ей. \en Curve's surface or similar to such surface. + const MbSNameMaker & snMaker; ///< \ru Именователь кривых каркаса. \en An object defining the frame curves names. + +public: + /// \ru Конструктор по параметрам. \en Constructor by parameters. + MbSpatialOffsetCurveParams( const MbVector3D & v, const MbSNameMaker & nm ) + : offsetVect ( v ) + , useFillet ( false ) + , keepRadius ( false ) + , bluntAngle ( false ) + , fromBeg ( true ) + , useSurfaceNormal( false ) + , surface ( c3d_null ) + , snMaker ( nm ) + {} +public: + /// \ru Установка режима по поверхности, переносится ли эквидистантная точка согласованно с нормалью к поверхности. \en Setting the mode whether offset point is moved according to surface normal or not. + void SetBySurfaceNormal( bool set, c3d::ConstSurfaceSPtr * s = c3d_null ) + { + if ( set ) { + useSurfaceNormal = set; + if ( s != c3d_null ) + surface = *s; + } + else { + useSurfaceNormal = false; + surface = c3d_null; + } + } + /// \ru Получить поверхность. \en Get surface. + bool BySurfaceNormal() const { return useSurfaceNormal; } + /// \ru Получить поверхность. \en Get surface. + const c3d::ConstSurfaceSPtr & GetSurface() const { return surface; } + /// \ru Получить ссылку на именователь. \en Get names maker reference. + const MbSNameMaker & GetNameMaker() const { return snMaker; } + +OBVIOUS_PRIVATE_COPY( MbSpatialOffsetCurveParams ) +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Параметры эквидистантной кривой на поверхности. + \en Parameters of an offset curve on a surface. \~ + \details \ru Параметры эквидистантной кривой на поверхности по поверхностной кривой и значению смещения. \n + \en Parameters of an offset curve on surface from a curve on the surface and a shift value. \n \~ +\ingroup Build_Parameters +*/ +// --- +struct MATH_CLASS MbSurfaceOffsetCurveParams { +public: + c3d::ConstFaceSPtr face; ///< \ru Грань, на которой строится эквидистанта. \en The face on which to build the offset curve. + MbAxis3D dirAxis; ///< \ru Направление смещения с точкой приложения. \en The offset direction with a reference point. + double dist; ///< \ru Величина смещения. \en The offset distance. +protected: + const MbSNameMaker & snMaker; ///< \ru Именователь кривых каркаса. \en An object defining the frame curves names. + +public: + /// \ru Конструктор по параметрам. \en Constructor by parameters. + MbSurfaceOffsetCurveParams( const MbFace & f, const MbAxis3D & a, double d, const MbSNameMaker & nm ) + : face ( &f ) + , dirAxis( a ) + , dist ( d ) + , snMaker( nm ) + {} +public: + /// \ru Получить ссылку на именователь. \en Get names maker reference. + const MbSNameMaker & GetNameMaker() const { return snMaker; } + +OBVIOUS_PRIVATE_COPY( MbSurfaceOffsetCurveParams ) +}; + +#endif // __OP_CURVE_PARAMETERS_H diff --git a/C3d/Include/op_duplication_parameter.h b/C3d/Include/op_duplication_parameter.h index 440a802..4604831 100644 --- a/C3d/Include/op_duplication_parameter.h +++ b/C3d/Include/op_duplication_parameter.h @@ -110,21 +110,21 @@ public: /** \brief \ru Преобразовать параметры согласно матрице. \en Transform parameters according to the matrix. \~ */ - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ) = 0; + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ) = 0; /** \brief \ru Сдвинуть параметры вдоль вектора. \en Move parameters along a vector. \~ \details \ru Сдвинуть параметры вдоль вектора. \en Move parameters along a vector. \n \~ */ - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ) = 0; + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ) = 0; /** \brief \ru Повернуть параметры вокруг оси на заданный угол. \en Rotate parameters at a given angle around an axis. \~ \details \ru Повернуть параметры вокруг оси на заданный угол. \en Rotate parameters at a given angle around an axis. \n \~ */ - virtual void Rotate ( const MbAxis3D &, double ang, MbRegTransform * = NULL ) = 0; + virtual void Rotate ( const MbAxis3D &, double ang, MbRegTransform * = c3d_null ) = 0; /** \brief \ru Выдать свойства объекта. \en Get properties of the object. \~ @@ -152,7 +152,7 @@ public: \details \ru Построить копию объекта. \n \en Create a copy of the object. \n \~ */ - virtual DuplicationValues & Duplicate( MbRegDuplicate * = NULL ) const = 0; + virtual DuplicationValues & Duplicate( MbRegDuplicate * = c3d_null ) const = 0; /** \brief \ru Сгенерировать матрицы трансформаций. \en Generate matrices of transformations. \~ @@ -236,7 +236,7 @@ public: */ DuplicationMeshValues( bool isPolar, const MbVector3D & dir1, const double step1, const uint num1, const MbVector3D & dir2, const double step2, const uint num2, - const MbCartPoint3D * center = NULL, bool isAlongAxis = false ); + const MbCartPoint3D * center = c3d_null, bool isAlongAxis = false ); /// \ru Деструктор. \en Destructor. virtual ~DuplicationMeshValues(); @@ -248,11 +248,11 @@ public: /// \ru Тип параметров. \en Type of parameters. virtual MbeDuplicatesType Type() const; /// \ru Преобразовать сетку согласно матрице. \en Transform grid according to the matrix. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); /// \ru Сдвинуть сетку вдоль вектора. \en Move grid along a vector. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); /// \ru Повернуть сетку вокруг оси на заданный угол. \en Rotate grid at a given angle around an axis. - virtual void Rotate ( const MbAxis3D &, double ang, MbRegTransform * = NULL ); + virtual void Rotate ( const MbAxis3D &, double ang, MbRegTransform * = c3d_null ); /// \ru Выдать свойства объекта \en Get properties of the object virtual void GetProperties( MbProperties & ); @@ -263,7 +263,7 @@ public: virtual bool IsSame( const DuplicationValues &, double accuracy ) const; /// \ru Построить копию объекта. \en Create a copy of the object. - virtual DuplicationValues & Duplicate( MbRegDuplicate * = NULL ) const; + virtual DuplicationValues & Duplicate( MbRegDuplicate * = c3d_null ) const; /// \ru Сгенерировать матрицы трансформации. \en Generate matrix of transformation by. virtual void GenerateTransformMatrices( std::vector & ) const; @@ -385,11 +385,11 @@ public: /// \ru Тип параметров. \en Type of parameters. virtual MbeDuplicatesType Type() const; /// \ru Преобразовать объект согласно матрице. \en Transform an object according to the matrix. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); /// \ru Сдвинуть объект вдоль вектора. \en Move an object along a vector. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); /// \ru Повернуть объект вокруг оси на заданный угол. \en Rotate an object at a given angle around an axis. - virtual void Rotate ( const MbAxis3D &, double ang, MbRegTransform * = NULL ); + virtual void Rotate ( const MbAxis3D &, double ang, MbRegTransform * = c3d_null ); /// \ru Выдать свойства объекта \en Get properties of the object virtual void GetProperties( MbProperties & ); @@ -400,7 +400,7 @@ public: virtual bool IsSame( const DuplicationValues &, double accuracy ) const; /// \ru Построить копию объекта. \en Create a copy of the object. - virtual DuplicationValues & Duplicate( MbRegDuplicate * = NULL ) const; + virtual DuplicationValues & Duplicate( MbRegDuplicate * = c3d_null ) const; /// \ru Сгенерировать матрицы трансформации. \en Generate matrix of transformation. virtual void GenerateTransformMatrices( std::vector & ) const; diff --git a/C3d/Include/op_shell_parameter.h b/C3d/Include/op_shell_parameter.h index 4e9bbed..52768f6 100644 --- a/C3d/Include/op_shell_parameter.h +++ b/C3d/Include/op_shell_parameter.h @@ -138,7 +138,7 @@ public: } /// \ru Конструктор копирования. \en Copy-constructor. - SmoothValues( const SmoothValues & other, MbRegDuplicate * iReg = NULL ); + SmoothValues( const SmoothValues & other, MbRegDuplicate * iReg = c3d_null ); /// \ru Деструктор. \en Destructor. virtual ~SmoothValues(){} @@ -146,11 +146,11 @@ public: void Init( const SmoothValues & other ); public: /// \ru Преобразовать объект согласно матрице. \en Transform an object according to the matrix. - virtual void Transform( const MbMatrix3D &, MbRegTransform * ireg = NULL ); + virtual void Transform( const MbMatrix3D &, MbRegTransform * ireg = c3d_null ); /// \ru Сдвинуть объект вдоль вектора. \en Move an object along a vector. - virtual void Move ( const MbVector3D &, MbRegTransform * /*ireg*/ = NULL ){} + virtual void Move ( const MbVector3D &, MbRegTransform * /*ireg*/ = c3d_null ){} /// \ru Повернуть объект вокруг оси на заданный угол. \en Rotate an object at a given angle around an axis. - virtual void Rotate ( const MbAxis3D &, double ang, MbRegTransform * ireg = NULL ); + virtual void Rotate ( const MbAxis3D &, double ang, MbRegTransform * ireg = c3d_null ); /// \ru Установить плоскость, параллельно которой будет выполнена остановка скругления в начале цепочки. \en Set the plane by which parallel will be carry out stop of the fillet at the begin. bool SetStopObjectAtBeg( const MbSurface * object, bool byObject = true ); @@ -202,7 +202,7 @@ public: {} /// \ru Конструктор копирования. \en Copy-constructor. - FullFilletValues( const FullFilletValues & other, MbRegDuplicate * iReg = NULL ); + FullFilletValues( const FullFilletValues & other, MbRegDuplicate * iReg = c3d_null ); /// \ru Деструктор. \en Destructor. ~FullFilletValues(){} @@ -210,11 +210,11 @@ public: /// \ru Функция инициализации. \en Initialization function. void Init( const FullFilletValues & other ); /// \ru Преобразовать объект согласно матрице. \en Transform an object according to the matrix. - void Transform( const MbMatrix3D &, MbRegTransform * ireg = NULL ); + void Transform( const MbMatrix3D &, MbRegTransform * ireg = c3d_null ); /// \ru Сдвинуть объект вдоль вектора. \en Move an object along a vector. - void Move ( const MbVector3D &, MbRegTransform * /*ireg*/ = NULL ){} + void Move ( const MbVector3D &, MbRegTransform * /*ireg*/ = c3d_null ){} /// \ru Повернуть объект вокруг оси на заданный угол. \en Rotate an object at a given angle around an axis. - void Rotate ( const MbAxis3D &, double ang, MbRegTransform * ireg = NULL ); + void Rotate ( const MbAxis3D &, double ang, MbRegTransform * ireg = c3d_null ); /// \ru Оператор присваивания. \en Assignment operator. FullFilletValues & operator = ( const FullFilletValues & other ) { @@ -341,7 +341,7 @@ public: double placeAngle; ///< \ru Угол между осью и нормалью к поверхности (0 <= placeAngle <= M_PI_2). \en Angle between axis and normal to the surface (0 <= placeAngle <= M_PI_2). double azimuthAngle; ///< \ru Угол поворота оси вокруг нормали поверхности (-M_PI2 <= azimuthAngle <= M_PI2). \en Angle of rotation around the surface normal (-M_PI2 <= azimuthAngle <= M_PI2). protected: - MbSurface * surface; ///< \ru Обрабатываемая поверхность (если NULL, то считается плоской). \en Processing surface (if NULL, then is considered planar). + MbSurface * surface; ///< \ru Обрабатываемая поверхность (если c3d_null, то считается плоской). \en Processing surface (if c3d_null, then is considered planar). bool doPhantom; ///< \ru Создавать фантом результата операции. \en Create the phantom of the operation. protected: @@ -365,13 +365,13 @@ public: /// \ru Тип выемки. \en Type of notch. virtual MbeHoleType Type() const = 0; /// \ru Построить копию объекта. \en Create a copy of the object. - virtual HoleValues & Duplicate( MbRegDuplicate * ireg = NULL ) const = 0; + virtual HoleValues & Duplicate( MbRegDuplicate * ireg = c3d_null ) const = 0; /// \ru Преобразовать объект согласно матрице. \en Transform an object according to the matrix. - virtual void Transform( const MbMatrix3D &, MbRegTransform * ireg = NULL ) = 0; + virtual void Transform( const MbMatrix3D &, MbRegTransform * ireg = c3d_null ) = 0; /// \ru Сдвинуть объект вдоль вектора. \en Move an object along a vector. - virtual void Move ( const MbVector3D &, MbRegTransform * ireg = NULL ); + virtual void Move ( const MbVector3D &, MbRegTransform * ireg = c3d_null ); /// \ru Повернуть объект вокруг оси на заданный угол. \en Rotate an object at a given angle around an axis. - virtual void Rotate ( const MbAxis3D &, double ang, MbRegTransform * ireg = NULL ); + virtual void Rotate ( const MbAxis3D &, double ang, MbRegTransform * ireg = c3d_null ); /// \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual bool IsSame( const HoleValues &, double accuracy ) const; @@ -451,7 +451,7 @@ public: // ____________/|| // /| | || // +-+----------+-++ - bt_DoubleCylinder = 6, ///< \ru Двойное цилиндрическое отверстие со скруглением. \en Double cylindrical hole with a fillet. + bt_DoubleCylinder = 6, ///< \ru Двойное цилиндрическое отверстие со скруглением. \en Double cylindrical hole with a fillet. }; public: @@ -498,8 +498,8 @@ public: public: virtual MbeHoleType Type() const; // \ru Тип выемки. \en Type of notch. - virtual HoleValues & Duplicate( MbRegDuplicate * ireg = NULL ) const; // \ru Построить копию. \en Create a copy. - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * ireg = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual HoleValues & Duplicate( MbRegDuplicate * ireg = c3d_null ) const; // \ru Построить копию. \en Create a copy. + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * ireg = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. virtual bool IsSame( const HoleValues &, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual void operator = ( const HoleValues & other ); // \ru Оператор присваивания. \en Assignment operator. private: @@ -565,8 +565,8 @@ public: public: virtual MbeHoleType Type() const; // \ru Тип выемки. \en Type of notch. - virtual HoleValues & Duplicate( MbRegDuplicate * ireg = NULL ) const; // \ru Построить копию. \en Create a copy. - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * ireg = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual HoleValues & Duplicate( MbRegDuplicate * ireg = c3d_null ) const; // \ru Построить копию. \en Create a copy. + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * ireg = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. virtual bool IsSame( const HoleValues &, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual void operator = ( const HoleValues & other ); // \ru Оператор присваивания. \en Assignment operator. private: @@ -676,8 +676,8 @@ public: public: virtual MbeHoleType Type() const; // \ru Тип выемки. \en Type of notch. - virtual HoleValues & Duplicate( MbRegDuplicate * ireg = NULL ) const; // \ru Построить копию. \en Create a copy. - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * ireg = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual HoleValues & Duplicate( MbRegDuplicate * ireg = c3d_null ) const; // \ru Построить копию. \en Create a copy. + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * ireg = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. virtual bool IsSame( const HoleValues &, double accuracy ) const; // \ru Являются ли объекты равными? \en Determine whether an object is equal? virtual void operator = ( const HoleValues & other ); // \ru Оператор присваивания. \en Assignment operator. private: @@ -1313,7 +1313,7 @@ private: bool vclosed; ///< \ru Признак замкнутости по V. \en Attribute of closedness along V. Array2 points; ///< \ru Множество точек. \en Set of points. double weight; ///< \ru Вес точек в случае одинаковости весов. \en Points weight in the case of equal weights. - Array2 * weights; ///< \ru Веса точек (может быть NULL). \en Weights of points (can be NULL). + Array2 * weights; ///< \ru Веса точек (может быть c3d_null). \en Weights of points (can be c3d_null). bool throughPoints; ///< \ru Строить поверхность, проходящую через точки. \en Build surface passing through points. bool pointsCloud; ///< \ru Облако точек (массив не упорядочен). \en Point cloud (disordered array). MbPlane * cloudPlane; ///< \ru Опорная плоскость облака точек. \en Support plane of point cloud. @@ -1486,11 +1486,11 @@ public: /// \ru Получить массив точек. \en Get array of points. bool GetPoints ( Array2 & pnts ) const { return pnts.Init( points ); } /// \ru Если ли веса? \en Is there weights? - bool IsWeighted() const { return (weights != NULL); } + bool IsWeighted() const { return (weights != c3d_null); } /// \ru Получить массив весов. \en Get array of weights. bool GetWeights( Array2 & wts ) const; /// \ru Получить плоскость проецирования. \en Get the plane of projection. - const MbPlane * GetCloudPlane() const { return (pointsCloud ? cloudPlane : NULL);} + const MbPlane * GetCloudPlane() const { return (pointsCloud ? cloudPlane : c3d_null);} /** \brief \ru Минимально возможный порядок сплайнов в случае облака точек. \en The smallest possible order of splines in the case of point cloud. \~ @@ -1528,7 +1528,7 @@ public: // --- inline bool NurbsSurfaceValues::GetWeights( Array2 & wts ) const { - if ( weights != NULL ) { + if ( weights != c3d_null ) { if ( wts.Init( *weights ) ) return true; } @@ -1602,7 +1602,7 @@ inline bool NurbsSurfaceValues::SetUVPoint( size_t ui, size_t vi, const MbCartPo // --- inline bool NurbsSurfaceValues::GetUVWeight( size_t ui, size_t vi, double & wt ) const { - if ( weights != NULL && ui < GetUCount() && vi < GetVCount() ) { + if ( weights != c3d_null && ui < GetUCount() && vi < GetVCount() ) { wt = (*weights)( vi, ui ); return (wt != UNDEFINED_DBL); //-V550 } @@ -1616,7 +1616,7 @@ inline bool NurbsSurfaceValues::GetUVWeight( size_t ui, size_t vi, double & wt ) // --- inline bool NurbsSurfaceValues::GetCommonWeight( double & wt ) const { - if ( weights == NULL && weight != UNDEFINED_DBL ) { //-V550 + if ( weights == c3d_null && weight != UNDEFINED_DBL ) { //-V550 wt = weight; return true; } @@ -1635,7 +1635,7 @@ inline void NurbsSurfaceValues::SetThroughPoints( bool tp ) DeleteWeights(); weight = 1.0; } - if ( weights == NULL && weight == UNDEFINED_DBL ) //-V550 + if ( weights == c3d_null && weight == UNDEFINED_DBL ) //-V550 weight = 1.0; } @@ -1718,15 +1718,15 @@ public: const RPArray & curvesV, bool vClosed, bool checkSelfInt, bool tess = false, - const RPArray * chainsU = NULL, - const RPArray * chainsV = NULL, + const RPArray * chainsU = c3d_null, + const RPArray * chainsV = c3d_null, MbeMatingType type0 = trt_Position, MbeMatingType type1 = trt_Position, MbeMatingType type2 = trt_Position, MbeMatingType type3 = trt_Position, - const c3d::ConstSurfacesVector * surf0 = NULL, // \ru Сопрягаемые поверхности через curvesU[0] \en Mating surfaces through curvesU[0] - const c3d::ConstSurfacesVector * surf1 = NULL, // \ru Сопрягаемые поверхности через curvesV[0] \en Mating surfaces through curvesV[0] - const c3d::ConstSurfacesVector * surf2 = NULL, // \ru Сопрягаемые поверхности через curvesU[maxU] \en Mating surfaces through curvesU[maxU] - const c3d::ConstSurfacesVector * surf3 = NULL, // \ru Сопрягаемые поверхности через curvesV[maxV] \en Mating surfaces through curvesV[maxV] - const MbPoint3D * pnt = NULL, + const c3d::ConstSurfacesVector * surf0 = c3d_null, // \ru Сопрягаемые поверхности через curvesU[0] \en Mating surfaces through curvesU[0] + const c3d::ConstSurfacesVector * surf1 = c3d_null, // \ru Сопрягаемые поверхности через curvesV[0] \en Mating surfaces through curvesV[0] + const c3d::ConstSurfacesVector * surf2 = c3d_null, // \ru Сопрягаемые поверхности через curvesU[maxU] \en Mating surfaces through curvesU[maxU] + const c3d::ConstSurfacesVector * surf3 = c3d_null, // \ru Сопрягаемые поверхности через curvesV[maxV] \en Mating surfaces through curvesV[maxV] + const MbPoint3D * pnt = c3d_null, bool modify = true, bool direct0 = true, bool direct1 = true, bool direct2 = true, bool direct3 = true ); @@ -1822,9 +1822,9 @@ public: /// \ru Максимальный индекс в массиве кривых по U. \en The maximum index in the array of curves along U. ptrdiff_t GetCurvesUMaxIndex() const { return curvesU.MaxIndex(); } /// \ru Получить кривую по индексу. \en Get the curve by the index. - const MbCurve3D * GetCurveU( size_t k ) const { return ((k < curvesU.Count()) ? curvesU[k] : NULL); } + const MbCurve3D * GetCurveU( size_t k ) const { return ((k < curvesU.Count()) ? curvesU[k] : c3d_null); } /// \ru Получить кривую по индексу. \en Get the curve by the index. - MbCurve3D * SetCurveU( size_t k ) { return ((k < curvesU.Count()) ? curvesU[k] : NULL); } + MbCurve3D * SetCurveU( size_t k ) { return ((k < curvesU.Count()) ? curvesU[k] : c3d_null); } /// \ru Получить кривые по U. \en Get curves along U. void GetCurvesU( RPArray & curves ) const { curves.AddArray(curvesU); } /// \ru Установить кривые по U. \en Set curves along U. @@ -1839,9 +1839,9 @@ public: /// \ru Максимальный индекс в массиве кривых по V. \en The maximum index in the array of curves along V. ptrdiff_t GetCurvesVMaxIndex() const { return curvesV.MaxIndex(); } /// \ru Получить кривую по индексу. \en Get the curve by the index. - const MbCurve3D * GetCurveV( size_t k ) const { return ((k < curvesV.Count()) ? curvesV[k] : NULL); } + const MbCurve3D * GetCurveV( size_t k ) const { return ((k < curvesV.Count()) ? curvesV[k] : c3d_null); } /// \ru Получить кривую по индексу. \en Get the curve by the index. - MbCurve3D * SetCurveV( size_t k ) const { return ((k < curvesV.Count()) ? curvesV[k] : NULL); } + MbCurve3D * SetCurveV( size_t k ) const { return ((k < curvesV.Count()) ? curvesV[k] : c3d_null); } /// \ru Получить кривые по V. \en Get curves along V. void GetCurvesV( RPArray & curves ) const { curves.AddArray(curvesV); } /// \ru Установить кривые по V. \en Set curves along V. @@ -1856,9 +1856,9 @@ public: /// \ru Максимальный индекс в массиве цепочек по U. \en The maximum index in the array of chains along U. ptrdiff_t GetChainsUMaxIndex() const { return chainsU.MaxIndex(); } /// \ru Получить цепочку по индексу. \en Get the chain by the index. - const MbPolyline3D * GetChainU( size_t k ) const { return ( ( k < chainsU.Count() ) ? chainsU[k] : NULL ); } + const MbPolyline3D * GetChainU( size_t k ) const { return ( ( k < chainsU.Count() ) ? chainsU[k] : c3d_null ); } /// \ru Получить цепочку по индексу. \en Get the chain by the index. - MbPolyline3D * SetChainU( size_t k ) { return ( ( k < chainsU.Count() ) ? chainsU[k] : NULL ); } + MbPolyline3D * SetChainU( size_t k ) { return ( ( k < chainsU.Count() ) ? chainsU[k] : c3d_null ); } /// \ru Получить цепочки по U. \en Get chains along U. void GetChainsU( RPArray & chains ) const { chains.AddArray( chainsU ); } /// \ru Установить цепочки по U. \en Set chains along U. @@ -1873,9 +1873,9 @@ public: /// \ru Максимальный индекс в массиве цепочек по V. \en The maximum index in the array of chains along V. ptrdiff_t GetChainsVMaxIndex() const { return chainsV.MaxIndex(); } /// \ru Получить цепочку по индексу. \en Get the chain by the index. - const MbPolyline3D * GetChainV( size_t k ) const { return ( ( k < chainsV.Count() ) ? chainsV[k] : NULL ); } + const MbPolyline3D * GetChainV( size_t k ) const { return ( ( k < chainsV.Count() ) ? chainsV[k] : c3d_null ); } /// \ru Получить цепочку по индексу. \en Get the chain by the index. - MbPolyline3D * SetChainV( size_t k ) { return ( ( k < chainsV.Count() ) ? chainsV[k] : NULL ); } + MbPolyline3D * SetChainV( size_t k ) { return ( ( k < chainsV.Count() ) ? chainsV[k] : c3d_null ); } /// \ru Получить цепочки по V. \en Get chains along V. void GetChainsV( RPArray & chains ) const { chains.AddArray( chainsV ); } /// \ru Установить цепочки по V. \en Set chains along V. @@ -2214,11 +2214,11 @@ public: void InitByShell ( ExtensionType t, LateralKind k, const MbFace * f, const MbSolid * s ); /// \ru Преобразовать объект согласно матрице. \en Transform an object according to the matrix. - void Transform( const MbMatrix3D & matr, MbRegTransform * ireg = NULL ); + void Transform( const MbMatrix3D & matr, MbRegTransform * ireg = c3d_null ); /// \ru Сдвинуть объект вдоль вектора. \en Move an object along a vector. - void Move ( const MbVector3D & to, MbRegTransform * ireg = NULL ); + void Move ( const MbVector3D & to, MbRegTransform * ireg = c3d_null ); /// \ru Повернуть объект вокруг оси на заданный угол. \en Rotate an object at a given angle around an axis. - void Rotate ( const MbAxis3D & axis, double ang, MbRegTransform * ireg = NULL ); + void Rotate ( const MbAxis3D & axis, double ang, MbRegTransform * ireg = c3d_null ); /// \ru Получить оболочку. \en Get the shell. const MbFaceShell * GetShell() const { return shell; } @@ -2287,10 +2287,10 @@ public: , checkSelfInt ( false ) , edgeConnType1 ( false ) , edgeConnType2 ( false ) - , boundDirection11 ( NULL ) - , boundDirection12 ( NULL ) - , boundDirection21 ( NULL ) - , boundDirection22 ( NULL ) + , boundDirection11 ( c3d_null ) + , boundDirection12 ( c3d_null ) + , boundDirection21 ( c3d_null ) + , boundDirection22 ( c3d_null ) {} /// \ru Конструктор по параметрам. \en Constructor by parameters. JoinSurfaceValues( JoinConnType t1, JoinConnType t2, double tens1, double tens2, bool selfInt = false ) @@ -2303,10 +2303,10 @@ public: , checkSelfInt ( selfInt ) , edgeConnType1 ( false ) , edgeConnType2 ( false ) - , boundDirection11 ( NULL ) - , boundDirection12 ( NULL ) - , boundDirection21 ( NULL ) - , boundDirection22 ( NULL ) + , boundDirection11 ( c3d_null ) + , boundDirection12 ( c3d_null ) + , boundDirection21 ( c3d_null ) + , boundDirection22 ( c3d_null ) {} /// \ru Конструктор копирования. \en Copy-constructor. JoinSurfaceValues( const JoinSurfaceValues & other ); @@ -2426,10 +2426,10 @@ public: } } if ( isSame ) { - bool isBoundDir11 = ((other.boundDirection11 != NULL) && (boundDirection11 != NULL)); - bool isBoundDir12 = ((other.boundDirection12 != NULL) && (boundDirection12 != NULL)); - bool isBoundDir21 = ((other.boundDirection21 != NULL) && (boundDirection21 != NULL)); - bool isBoundDir22 = ((other.boundDirection22 != NULL) && (boundDirection22 != NULL)); + bool isBoundDir11 = ((other.boundDirection11 != c3d_null) && (boundDirection11 != c3d_null)); + bool isBoundDir12 = ((other.boundDirection12 != c3d_null) && (boundDirection12 != c3d_null)); + bool isBoundDir21 = ((other.boundDirection21 != c3d_null) && (boundDirection21 != c3d_null)); + bool isBoundDir22 = ((other.boundDirection22 != c3d_null) && (boundDirection22 != c3d_null)); if ( isSame && isBoundDir11 ) isSame = c3d::EqualVectors( *other.boundDirection11, *boundDirection11, accuracy ); @@ -2523,31 +2523,35 @@ struct MATH_CLASS MedianShellValues { public: FilletType filletType; - double position; ///< \ru Параметр смещения срединной оболочки относительно первой грани из пары. По умолчанию равен 50% расстояния между гранями. \en Parameter of shift the median surface from first face in faces pair. By default is 50% from distance between faces in pair. - double dmin; ///< \ru Минимальный параметр эквидистантности. \en Minimal equidistation value. - double dmax; ///< \ru Максимальный параметр эквидистантности. \en Maximal equidistation value. + double position; ///< \ru Параметр смещения срединной оболочки относительно первой грани из пары. По умолчанию равен 50% расстояния между гранями. \en Parameter of shift the median surface from first face in faces pair. By default is 50% from distance between faces in pair. + double dmin; ///< \ru Минимальный параметр эквидистантности. \en Minimal equidistation value. + double dmax; ///< \ru Максимальный параметр эквидистантности. \en Maximal equidistation value. + bool cutByBordes; ///< \ru Флаг подрезки срединной оболочки границами родительской оболочки. \en Flag indicates is need to truncate median shell by parent shell faces. public: /// \ru Конструктор по умолчанию. \en Default constructor. MedianShellValues() - : filletType ( tf_average ) - , position ( 0.5 ) - , dmin ( 0.0 ) - , dmax ( 0.0 ) + : filletType ( tf_average ) + , position ( 0.5 ) + , dmin ( 0.0 ) + , dmax ( 0.0 ) + , cutByBordes ( false ) {} /// \ru Конструктор копирования. \en Copy-constructor. MedianShellValues( const MedianShellValues & other ) - : filletType ( other.filletType ) - , position ( other.position ) - , dmin ( other.dmin ) - , dmax ( other.dmax ) + : filletType ( other.filletType ) + , position ( other.position ) + , dmin ( other.dmin ) + , dmax ( other.dmax ) + , cutByBordes ( other.cutByBordes ) {} /// \ru Конструктор по параметрам. \en Constructor by parameters. - MedianShellValues( double pos, double d1, double d2 ) - : filletType( tf_average ) - , position ( pos ) - , dmin ( d1 ) - , dmax ( d2 ) + MedianShellValues( double pos, double d1, double d2, bool cut ) + : filletType ( tf_average ) + , position ( pos ) + , dmin ( d1 ) + , dmax ( d2 ) + , cutByBordes ( cut ) {} public: @@ -2557,7 +2561,8 @@ public: if ( filletType == obj.filletType && (::fabs(dmin - obj.dmin) < accuracy) && (::fabs(dmax - obj.dmax) < accuracy) && - (::fabs(position - obj.position) < accuracy) ) + (::fabs(position - obj.position) < accuracy) && + cutByBordes == obj.cutByBordes ) return true; return false; } @@ -2575,6 +2580,7 @@ public: position = other.position; dmin = other.dmin; dmax = other.dmax; + cutByBordes = other.cutByBordes; return *this; } @@ -2635,6 +2641,8 @@ public: } /// \ru Получить пару граней по индексу. \en Get pair of faces by index. const c3d::ItemIndexPair & _GetFacePair( size_t index ) const { return facePairs[index]; } + /// \ru Установить пару граней по индексу. \en Set pair of faces by index. + c3d::ItemIndexPair & SetFacePair( size_t index ) { return facePairs[index]; } /// \ru Удалить пару граней из набора. \en Remove pair of faces from set. void RemovePairByIndex( size_t index ) { @@ -3161,11 +3169,11 @@ public: } public: /// \ru Это резка плоским контуром? \en Is cutting by planar contour? - bool IsCuttingByPlanarContour() const { return (cutterData.GetSketchCurvesCount() > 0 && cutterData.GetSketchCurve(0) != NULL); } + bool IsCuttingByPlanarContour() const { return (cutterData.GetSketchCurvesCount() > 0 && cutterData.GetSketchCurve(0) != c3d_null); } /// \ru Это резка поверхностью? \en Is cutting by surface? - bool IsCuttingBySurface() const { return (cutterData.GetSurfacesCount() > 0 && cutterData.GetSurface(0) != NULL); } + bool IsCuttingBySurface() const { return (cutterData.GetSurfacesCount() > 0 && cutterData.GetSurface(0) != c3d_null); } /// \ru Это резка оболочкой? \en Is cutting by shell? - bool IsCuttingBySolid() const { return (cutterData.GetCreatorsCount() > 0 && cutterData.GetCreator(0) != NULL) || (cutterData.GetSolidShell() != NULL); } + bool IsCuttingBySolid() const { return (cutterData.GetCreatorsCount() > 0 && cutterData.GetCreator(0) != c3d_null) || (cutterData.GetSolidShell() != c3d_null); } /// \ru Получить данные секущего объекта. \en Get cutter object(s) data. const MbSplitData & GetCutterData() const { return cutterData; } diff --git a/C3d/Include/op_swept_parameter.h b/C3d/Include/op_swept_parameter.h index 06c1173..46e9c20 100644 --- a/C3d/Include/op_swept_parameter.h +++ b/C3d/Include/op_swept_parameter.h @@ -1,1998 +1,2087 @@ -//////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru Параметры операций над телами. - \en Parameters of operations on the solids. \~ - -*/ -//////////////////////////////////////////////////////////////////////////////// - -#ifndef __OP_SWEPT_PARAMETERS_H -#define __OP_SWEPT_PARAMETERS_H - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -class MATH_CLASS MbPlacement3D; -class MATH_CLASS MbMatrix3D; -class MATH_CLASS MbAxis3D; -class MATH_CLASS MbCurve3D; -class MATH_CLASS MbPolyCurve; -class MbRegTransform; -class MbRegDuplicate; - - -//------------------------------------------------------------------------------ -/** \brief \ru Данные об образующей. - \en The generating data. \~ - \details \ru Данные об образующей операции движения. \n - Образующая операции выдавливания, вращения или кинематической операции - может включать в себя набор двумерных контуров, набор трехмерных контуров, тело. \n - Для набора двумерных контуров на поверхности существуют следующие ограничения:\n - – может быть один или несколько контуров;\n - – если контуров несколько, они должны быть либо все замкнуты, либо все разомкнуты;\n - - если контуры замкнуты, они могут быть вложенными друг в друга, уровень вложенности не ограничивается;\n - – контуры не должны пересекаться между собой или самопересекаться.\n - Для двумерных контуров на не плоской поверхности есть дополнительное ограничение: - все контуры должны быть замкнуты.\n - Построение операции по двумерным контурам на не плоской поверхности рассчитано на указание пользователем - грани тела в качестве образующей. В этом случае данные для образующей можно получить - с помощью метода грани MbFace::GetSurfaceCurvesData.\n - Ограничения для трехмерных контуров:\n - – контуры не должны пересекаться между собой или самопересекаться.\n - \en Data about generating of movement operation. \n - При указании тела и поверхности одновременно предполагается, что выполняется кинематическая операция над - телом вдоль кривой на этой поверхности, причем движение согласовано с нормалью. \n - Generating of extrusion operation, rotation or sweeping operation - can include a set of two-dimensional contours, a set of three-dimensional contours, solid. \n - For a set of two-dimensional contours on the surface, the following restrictions:\n - - can be one or multiple contours;\n - - If there are multiple contours, all of them must be either closed or open;\n - - if contours are closed, then they can be nested into each other, the level of nesting is not limited;\n - - contours can't overlap each other or self-intersect.\n - For two-dimensional contour on the non-planar surface is additional constraint: - all the contours must be closed.\n - Constructing operation by two-dimensional contours on non-planar surface it is necessary to specify the by the user - face of solid as generating. In this case, the generating data can be obtained - by the method of face MbFace::GetSurfaceCurvesData.\n - Constraints for three-dimensional contour:\n - - contours can't overlap each other or self-intersect.\n - When set a solid and a surface at the same time, we suppose that sweeping operation over solid along curve on surface - is done, and moving is according to surface normal. \n \~ - \ingroup Build_Parameters -*/ -// --- -class MATH_CLASS MbSweptData { - -private: - // \ru Данные о двумерных контурах на поверхности. \en Data about two-dimensional contours on the surface. - c3d::SurfaceSPtr surface; ///< \ru Поверхность. \en The surface. - c3d::PlaneContoursSPtrVector contours; ///< \ru Множество двумерных контуров. \en Set of two-dimensional contours. - // \ru Трехмерные контуры. \en Three-dimensional contours. - c3d::SpaceContoursSPtrVector contours3D; ///< \ru Множество трёхмерных контуров. \en Set of three-dimensional contours. - // \ru Тело. \en Solid. - c3d::SolidSPtr solid; ///< \ru Тело. \en A solid. - -public: - /// \ru Конструктор по умолчанию. \en Default constructor. - MbSweptData(); - /// \ru Конструктор копирования. \en Copy-constructor. - MbSweptData( const MbSweptData &, MbRegDuplicate * ireg = NULL ); - -public: - - /** \brief \ru Конструктор плоской образующей. - \en Constructor of planar swept. \~ - \details \ru Конструктор плоской образующей из одного контура. - \en Constructor of planar swept from one contour. \~ - \param[in] place - \ru Локальная система координат. - \en A local coordinate system. \~ - \param[in] contour - \ru Контур в параметрах заданной системы координат. Используется оригинал. - \en Contour in parameters of the given coordinate system. Used original. \~ - */ - MbSweptData( const MbPlacement3D & place, MbContour & contour ); - - /** \brief \ru Конструктор. - \en Constructor. \~ - \details \ru Конструктор по набору контуров на поверхности. - \en Constructor by a set of contours on a surface. \~ - \param[in] _surface - \ru Поверхность. Используется оригинал. - \en The surface. Used original. \~ - \param[in] _contours - \ru Набор контуров. Используются оригиналы. - \en A set of contours. Used originals. \~ - */ - MbSweptData( MbSurface & _surface, RPArray & _contours ); - - /** \brief \ru Конструктор. - \en Constructor. \~ - \details \ru Конструктор по набору контуров на поверхности. - \en Constructor by a set of contours on a surface. \~ - \param[in] _surface - \ru Поверхность. Используется оригинал. - \en The surface. Used original. \~ - \param[in] _contours - \ru Набор контуров. Используются оригиналы. - \en A set of contours. Used originals. \~ - */ - MbSweptData( MbSurface & _surface, c3d::PlaneContoursSPtrVector & _contours ); - - /** \brief \ru Конструктор. - \en Constructor. \~ - \details \ru Конструктор по кривой. - \en Constructor by a contour. \~ - \param[in] _contour3d - \ru Кривая. Используются оригиналы. - \en A curve. Used originals. \~ - */ - MbSweptData( MbCurve3D & _curve3d ); - - /** \brief \ru Конструктор. - \en Constructor. \~ - \details \ru Конструктор по контуру. - \en Constructor by a contour. \~ - \param[in] _contour3d - \ru Контур. Используются оригиналы. - \en A contour. Used originals. \~ - */ - MbSweptData( MbContour3D & _contour3d ); - - /** \brief \ru Конструктор. - \en Constructor. \~ - \details \ru Конструктор по набору пространственных контуров. - \en Constructor by a set of spatial contours. \~ - \param[in] _contours3d - \ru Набор контуров. Используются оригиналы. - \en A set of contours. Used originals. \~ - */ - MbSweptData( RPArray & _contours3d ); - - /** \brief \ru Конструктор. - \en Constructor. \~ - \details \ru Конструктор по набору пространственных контуров. - \en Constructor by a set of spatial contours. \~ - \param[in] _contours3d - \ru Набор контуров. Используются оригиналы. - \en A set of contours. Used originals. \~ - */ - MbSweptData( c3d::SpaceContoursSPtrVector & _contours3d ); - - /** \brief \ru Конструктор. - \en Constructor. \~ - \details \ru Конструктор по телу. - \en Constructor by a solid. \~ - \param[in] _solid - \ru Тело. Используется оригинал объекта. - \en A solid. Used original of object. \~ - \param[in] _newMainName - \ru Новое главное имя для топологических элементов тела. - \en New main name for names of solid's topological elements. \~ - */ - MbSweptData( MbSolid & _solid, SimpleName newMainName = c3d::SIMPLENAME_MAX ); - - /** \brief \ru Конструктор. - \en Constructor. \~ - \details \ru Конструктор смешанной образующей. - \en Constructor of mixed swept. \~ - \param[in] _surface - \ru Поверхность. Используется оригинал. - \en The surface. Used original. \~ - \param[in] _contours - \ru Набор двумерных контуров в параметрах заданной поверхности. Используются оригиналы. - \en Set of two-dimensional contours in the parameters of the given surface. Used originals. \~ - \param[in] _contours3d - \ru Набор трехмерных контуров. Используются оригиналы. - \en A set of three-dimensional contours. Used originals. \~ - \param[in] _solid - \ru Тело. Используется оригинал объекта. - \en A solid. Used original of object. \~ - */ - MbSweptData( MbSurface * _surface, RPArray & _contours, - RPArray & _contours3d, MbSolid * _solid ); - - /// \ru Деструктор. \en Destructor. - ~MbSweptData(); - -public: - /** \brief \ru Добавить данные. - \en Add data. \~ - \details \ru Добавить данные о контурах на поверхности. - \en Add data about contours to the surface. \~ - \param[in] _surface - \ru Поверхность. Добавляется оригинал объекта. - \en The surface. Added original of the object. \~ - \param[in] _contours - \ru Набор контуров. Добавляются оригиналы. - \en A set of contours. Originals are added. \~ - */ - bool AddData( MbSurface & _surface, const RPArray & _contours ); - - /** \brief \ru Добавить данные. - \en Add data. \~ - \details \ru Добавить данные о контурах на поверхности. - \en Add data about contours to the surface. \~ - \param[in] _surface - \ru Поверхность. Добавляется оригинал объекта. - \en The surface. Added original of the object. \~ - \param[in] _contours - \ru Набор контуров. Добавляются оригиналы. - \en A set of contours. Originals are added. \~ - */ - bool AddData( MbSurface & _surface, c3d::PlaneContoursSPtrVector & _contours ); - - /** \brief \ru Количество всех кривых. - \en The count of all the curves. \~ - \details \ru Общее количество двумерных и трехмерных кривых. - \en The total count of two and three-dimensional curves. \~ - */ - size_t CurvesCount() const; - - /** \brief \ru Получить кривую по индексу. - \en Get the curve by the index. \~ - \details \ru Получить кривую из множества кривых на поверхности и трехмерных кривых. - \en Get the curve from set of curves on the surface and three-dimensional curves. \~ - \param[in] i - \ru Номер кривой в пределах от 0 до CurvesCount(). - \en The index of curve from 0 to CurvesCount(). \~ - \return \ru Кривую на поверхности или трехмерную кривую. - \en Curve on the surface or three-dimensional curve. \~ - */ - SPtr GetCurve3D( size_t i ) const; - - /// \ru Есть данные о двумерных кривых на поверхности? \en Is there data of two-dimensional curves on the surface? - bool IsSurfaceCurvesData() const { return ((surface != NULL) && !contours.empty()); } - /// \ru Есть данные о пространственных кривых? \en Is there data of spatial curves? - bool IsSpaceCurvesData() const { return !contours3D.empty(); } - /// \ru Есть данные о теле? \en Is there data about the solid? - bool IsSolidData() const { return (solid != NULL); } - - /// \ru Выдать поверхность. \en Get the surface. - const MbSurface * GetSurface() const { return surface; } - /// \ru Выдать поверхность для изменения. \en Get the surface for editing. - MbSurface * SetSurface() { return surface; } - - /// \ru Положить поверхность. \en Set a surface. - - /** \brief \ru Установить поверхность. - \en Set a surface. \~ - \details \ru Установить новую поверхность как носитель двумерных контуров или как целевую поверхность для направляющей. - \en Set surface carrier of two-dimensional contours or desired surface-carrier of guide curve. \~ - \param[in] surf - \ru Новая поверхность как носитель для двумерных контуров или целевая поверхность для направляющей. - \en Surface carrier of two-dimensional contours or desired surface-carrier of guide curve. \~ - */ - void SetSurface( const MbSurface & surf ) { surface = const_cast( &surf ); } - - /// \ru Выдать набор двумерных контуров. \en Get the set of two-dimensional contours. - const c3d::PlaneContoursSPtrVector & GetContours() const { return contours; } - /// \ru Выдать набор трехмерных контуров. \en Get the set of three-dimensional contours. - const c3d::SpaceContoursSPtrVector & GetContours3D() const { return contours3D; } - /// \ru Выдать тело. \en Get the solid. - const MbSolid * GetSolid() const { return solid; } - /// \ru Выдать тело для изменения. \en Get the solid for editing. - MbSolid * SetSolid() const { return solid; } - - /** \brief \ru Преобразовать объект. - \en Transform the object. \~ - \details \ru Преобразовать исходный объект согласно матрице c использованием регистратора. - \en Transform the initial object according to the matrix using the registrator. \~ - \param[in] matr - \ru Матрица преобразования. - \en A transformation matrix. \~ - \param[in] iReg - \ru Регистратор. - \en Registrator. \~ - */ - void Transform( const MbMatrix3D & matr, MbRegTransform * iReg = NULL ); - /** \brief \ru Сдвинуть объект. - \en Move the object. \~ - \details \ru Сдвинуть геометрический объект вдоль вектора с использованием регистратора. - \en Move a geometric object along the vector using the registrator. \~ - \param[in] to - \ru Вектор сдвига. - \en Translation vector. \~ - \param[in] iReg - \ru Регистратор. - \en Registrator. \~ - */ - void Move ( const MbVector3D & to, MbRegTransform * iReg = NULL ); - /** \brief \ru Повернуть объект. - \en Rotate the object. \~ - \details \ru Повернуть объект вокруг оси на заданный угол с использованием регистратора. - \en Rotate an object about the axis by the given angle using the registrator. \~ - \param[in] axis - \ru Ось поворота. - \en The rotation axis. \~ - \param[in] angle - \ru Угол поворота. - \en The rotation angle. \~ - \param[in] iReg - \ru Регистратор. - \en Registrator. \~ - */ - void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * iReg = NULL ); - /** \brief \ru Определить, являются ли объекты равными. - \en Determine whether the objects are equal. \~ - \details \ru Определить, являются ли объекты равными с заданной точностью. - \en Determine whether the objects are equal with defined accuracy. \~ - \param[in] other - \ru Объект для сравнения. - \en Object for comparison. \~ - \return \ru Подобны ли объекты. - \en Whether the objects are similar. \~ - */ - bool IsSame( const MbSweptData & other, double accuracy ) const; - /** \brief \ru Определить, являются ли объекты подобными. - \en Determine whether the objects are similar. \~ - \details \ru Подобный объект можно инициализировать по данным подобного ему объекта. - \en Similar object can be initialized by data of object which is similar to it. \~ - \param[in] other - \ru Объект для сравнения. - \en Object for comparison. \~ - \return \ru Подобны ли объекты. - \en Whether the objects are similar. \~ - */ - bool IsSimilar( const MbSweptData & other ) const; - /** \brief \ru Сделать объекты равным. - \en Make objects equal. \~ - \details \ru Равными можно сделать только подобные объекты. - \en It is possible to make equal only similar objects. \~ - \param[in] init - \ru Объект для инициализации. - \en Object for initialization. \~ - \return \ru Сделан ли объект равным присланному. - \en Whether the object is made equal to the given one. \~ - */ - bool SetEqual ( const MbSweptData & other ); - - /** \brief \ru Замкнуты ли все контуры. - \en Whether all contours are closed. \~ - \details \ru Замкнуты ли все контуры. \n - \en Whether all contours are closed. \n \~ - \return \ru Возвращает true, если все контуры замкнуты. - \en Returns true if all contours are closed. \~ - */ - bool IsContoursClosed() const; - - /// \ru Проверить, что нет разрывов между сегментами поверхностных контуров. \en Check that there are no gaps between the segments of the surface contours. - bool CheckSurfaceContourConnection( double eps ) const; - /// \ru Проверить, что нет разрывов между сегментами пространственных контуров. \en Check that there are no gaps between the segments of the spatial contours. - bool CheckSpaceContourConnection( double eps ) const; - -private: - // \ru Объявление оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration of the assignment operator without implementation to prevent an assignment by default. - MbSweptData & operator = ( const MbSweptData & ); - -KNOWN_OBJECTS_RW_REF_OPERATORS( MbSweptData ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Cпособ выдавливания/вращения. - \en Method of extrusion/rotation. \~ - \details \ru Cпособ построения выдавливания/вращения. \n - \en Method of extrusion/rotation constructing. \n \~ - \ingroup Build_Parameters -*/ -// --- -enum MbSweptWay { - sw_scalarValue = -2, ///< \ru Выдавить на заданную глубину / вращать на заданный угол. \en Extrude to a given depth / rotate by a given angle. - sw_shell = -1, ///< \ru До ближайшего объекта (тела). \en To the nearest object (solid). - sw_surface = 0, ///< \ru До поверхности. \en To the surface. -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Параметры вращения и выдавливания. - \en Parameters of rotation and extrusion. \~ - \details \ru Данные о построении операции вращения или выдавливания - в одном из направлений: прямом или обратном. - \en Data about construction of rotation and extrusion - in one of directions: forward or backward. \~ - \ingroup Build_Parameters -*/ -// --- -class MATH_CLASS MbSweptSide { -public: - MbSweptWay way; ///< \ru Способ выдавливания/вращения. \en Method of extrusion/rotation. - double scalarValue; ///< \ru Угол вращения/глубина выдавливания. \en Angle of rotation/depth of extrusion. - - /** \brief \ru Расстояние от поверхности. - \en Distance from the surface. \~ - \details \ru Расстояние от поверхности, до которой строим операцию. - Задавать при построении операции до поверхности (way = sw_surface). - distance < 0.0 при построении операции за поверхность, - distance > 0.0 при построении операции до поверхности. - \en Distance from the surface to construct up to. - Set when constructing operation to the surface (way = sw_surface). - distance < 0.0 when constructing operation back of surface, - distance > 0.0 when constructing operation front of surface. \~ - */ - double distance; - - /** \brief \ru Угол уклона. - \en Draft angle. \~ - \details \ru Угол уклона при выдавливании.\n - Операцию выдавливания с уклоном можно построить только в случае плоской образующей. - \en Draft angle when extruding.\n - Extrusion operation with draft can be constructed in the case of planar swept. \~ - */ - double rake; - -protected: - /** \brief \ru Поверхность, до которой строим операцию. - \en The surface to construct up to. \~ - \details \ru Поверхность, до которой строим операцию.\n - Задавать при построении операции до поверхности (way = sw_surface). - \en The surface to construct up to.\n - Set when constructing operation to the surface (way = sw_surface). \~ - */ - MbSurface * surface; - - /** \brief \ru Признак совпадения нормали поверхности с нормалью грани. - \en An attribute of coincidence between the surface normal and the face normal. \~ - \details \ru Признак совпадения нормали поверхности, до которой строим операцию, с нормалью грани.\n - Задавать при построении операции до поверхности (way = sw_surface).\n - Указывает положение оболочки-результата относительно поверхности. - Используется при построении массива операций до поверхности. - Если у всех элементов массива признак должен быть одинаковым, - то при построении исходной операции нужно задать признак равным orient_BOTH (направление не определено). - При построении признак будет определен, и его значение нужно использовать для построения остальных элементов массива. - \en An attribute of coincidence between the face normal and the normal of surface to which to create operation.\n - Set when constructing operation to the surface (way = sw_surface).\n - Specifies the position of shell-result relative to the surface. - Used when constructing the array of operations to the surface. - If attributes of all the elements of array must be the same, - then when constructing of the original operation need to set attribute which is equal to orient_BOTH (the direction is not determined). - When constructing the attribute is determined and its value should be used for the construction of other elements of the array. \~ - */ - MbeSenseValue sameSense; - - -public: - /** \brief \ru Конструктор по умолчанию. - \en Default constructor. \~ - \details \ru Задает параметры операции со способом "на заданную глубину". - Для построения операции параметры нужно изменить, - например, указать глубину выдавливания (угол вращения). - \en Sets parameters of the operation with the method "to a given depth". - For construction of operation the parameters need to change, - for example: specify the depth of extrusion (angle of rotation). \~ - */ - MbSweptSide() - : way ( sw_scalarValue ) - , scalarValue( 0.0 ) - , distance ( 0.0 ) - , rake ( 0.0 ) - , surface ( NULL ) - , sameSense ( orient_BOTH ) - {} - - /** \brief \ru Конструктор. - \en Constructor. \~ - \details \ru Конструктор на угол вращения\глубину выдавливания. - \en Constructor by angle of rotation\depth of extrusion. \~ - \param[in] sVal - \ru Угол вращения\глубина выдавливания. - \en Angle of rotation\depth of extrusion. \~ - */ - MbSweptSide( double sVal ) - : way ( sw_scalarValue ) - , scalarValue( sVal ) - , distance ( 0.0 ) - , rake ( 0.0 ) - , surface ( NULL ) - , sameSense ( orient_BOTH ) - {} - - /** \brief \ru Конструктор до поверхности. - \en Constructor to the surface. \~ - \details \ru Конструктор до поверхности. Расстояние от поверхности задается равным 0.0. - \en Constructor to the surface. Distance from the surface is set to 0.0. \~ - \param[in] surf - \ru Поверхность, до которой строится операция. - \en The surface to construct up to. \~ - */ - MbSweptSide( MbSurface * surf ); - - /** \brief \ru Конструктор до поверхности. - \en Constructor to the surface. \~ - \details \ru Конструктор до поверхности. Для элемента массива. - \en Constructor to the surface. For array element. \~ - \param[in] surf - \ru Поверхность, до которой строится операция. - \en The surface to construct up to. \~ - \param[in] sense - \ru Признак совпадения нормали заданной поверхности с нормалью грани. - Указывает, по какую сторону от поверхности должна находиться построенная оболочка. - \en An attribute of coincidence between the normal of given surface and the face normal. - Indicates at which side of the surface the must be located constructed shell. \~ - */ - MbSweptSide( MbSurface * surf, MbeSenseValue sense ); - - /** \brief \ru Конструктор копирования. - \en Copy-constructor. \~ - \details \ru Конструктор копирования данных с использованием той же поверхности. - \en Copy-constructor of data with using of the same surface. \~ - \param[in] other - \ru Исходные параметры. - \en Initial parameters. \~ - */ - MbSweptSide( const MbSweptSide & other ); - - /** \brief \ru Конструктор копирования с регистратором. - \en Copy-constructor with the registrator. \~ - \details \ru Конструктор копирования с регистратором. Поверхность копируется. - \en Copy-constructor with the registrator. Surface is copying. \~ - \param[in] other - \ru Исходные параметры. - \en Initial parameters. \~ - */ - MbSweptSide( const MbSweptSide & other, MbRegDuplicate * ireg ); - - /// \ru Деструктор. \en Destructor. - virtual ~MbSweptSide(); - - /// \ru Оператор присваивания данных с использованием той же поверхности. \en Assignment operator of data with using of the same surface. - MbSweptSide & operator = ( const MbSweptSide & other ); - - /// \ru Получить поверхность. \en Get the surface. - MbSurface * GetSurface() const { return surface; } - /// \ru Заменить поверхность. \en Replace surface. - void SetSurface( MbSurface * s ); - - /// \ru Получить признак совпадения нормали поверхности с нормалью грани. \en Get the attribute of coincidence between the surface normal and the face normal. - MbeSenseValue GetSameSense() const { return sameSense; } - /// \ru Установить признак совпадения нормали поверхности с нормалью грани. \en Set the attribute of coincidence between the surface normal and the face normal. - void SetSameSense( MbeSenseValue sense ) { sameSense = sense; } - /// \ru Доступ к признаку совпадения нормали поверхности с нормалью грани. \en Access to the attribute of coincidence between the surface normal and the face normal. - MbeSenseValue & SetSameSense() { return sameSense; } - - /// \ru Являются ли объекты равными? \en Determine whether an object is equal? - bool IsSame( const MbSweptSide & other, double accuracy ) const - { - if ( (other.way == way) && (other.sameSense == sameSense) ) { - if ( (::fabs(other.scalarValue - scalarValue) < accuracy) && - (::fabs(other.distance - distance) < accuracy) && - (::fabs(other.rake - rake) < accuracy) ) - { - bool isSurf1 = (surface != NULL); - bool isSurf2 = (other.surface != NULL); - - if ( isSurf1 == isSurf2 ) { - if ( isSurf1 && isSurf2 ) { - if ( !other.surface->IsSame( *surface, accuracy ) ) - return false; - } - return true; - } - } - } - - return false; - } -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Параметры формообразующей операции. - \en The parameters of form-generating operation. \~ - \details \ru Параметры построения формообразующей операции - (например, выдавливания, вращения, кинематической, по сечениям). \n - \en The construction parameters of form-generating operation. - (for example: extrusion, rotation, sweeping, loft). \n \~ - \ingroup Build_Parameters -*/ -// --- -struct MATH_CLASS SweptValues { -public: - - /** \brief \ru Толщина стенки (величина эквидистанты) в прямом направлении. - \en Wall thickness (offset distance) along the forward direction. \~ - \details \ru Толщина стенки (величина эквидистанты) в положительном направлении нормали объекта - (грани, поверхности, плоскости кривой). - \en Wall thickness (offset distance) along the positive direction of the normal of an object - (face, surface, plane of the curve). \~ - */ - double thickness1; - - /** \brief \ru Толщина стенки (величина эквидистанты) в обратном направлении. - \en Wall thickness (offset distance) along the backward direction. \~ - \details \ru Толщина стенки (величина эквидистанты) в отрицательном направлении нормали объекта - (грани, поверхности, плоскости кривой). - \en Wall thickness (offset distance) along the negative direction of the normal of an object - (face, surface, plane of the curve). \~ - */ - double thickness2; - - bool shellClosed; ///< \ru Замкнутость оболочки. \en Closedness of shell. - -private: - bool checkSelfInt; ///< \ru Флаг проверки самопересечений (вычислительно "тяжелыми" методами). \en Flag for checking of self-intersection (computationally by "heavy" methods). - bool mergeFaces; ///< \ru Сливать подобные грани (true). \en Whether to merge similar faces (true). - -public: - /// \ru Конструктор по умолчанию. \en Default constructor. - SweptValues() - : thickness1 ( 0.0 ) - , thickness2 ( 0.0 ) - , shellClosed ( true ) - , checkSelfInt( true ) - , mergeFaces ( true ) - {} - /// \ru Конструктор по толщинам и замкнутости. \en Constructor by thicknesses and closedness. - SweptValues( double t1, double t2, bool c = true ) - : thickness1 ( t1 ) - , thickness2 ( t2 ) - , shellClosed ( c ) - , checkSelfInt( true ) - , mergeFaces ( true ) - {} - /// \ru Конструктор копирования. \en Copy-constructor. - SweptValues( const SweptValues & other ) - : thickness1 ( other.thickness1 ) - , thickness2 ( other.thickness2 ) - , shellClosed ( other.shellClosed ) - , checkSelfInt( other.checkSelfInt ) - , mergeFaces ( other.mergeFaces ) - {} - /// \ru Деструктор. \en Destructor. - virtual ~SweptValues() {} - -public: - /// \ru Это параметры выдавливания? \en This is extrusion parameters? - virtual bool IsExtrusionValues() const { return false; } - /// \ru Это параметры вращения? \en This is rotation parameters? - virtual bool IsRevolutionValues() const { return false; } - /// \ru Это параметры кинематики? \en This is "evolution" parameters? - virtual bool IsEvolutionValues() const { return false; } - /// \ru Это параметры операции по сечениям? \en This is "lofted" parameters? - virtual bool IsLoftedValues() const { return false; } - /// \ru Это параметры операции ребра жесткости? \en This is "rib" parameters? - virtual bool IsRibValues() const { return false; } - - /// \ru Определить, являются ли объекты равными? \en Determine whether an object is equal? - virtual bool IsSame( const SweptValues & other, double accuracy ) const; - /// \ru Определить, являются ли объекты подобными. \en Determine whether the objects are similar. \~ - virtual bool IsSimilar( const MbSweptData & other ) const; - /// \ru Сделать объекты равным. \en Make objects equal. \~ - virtual bool SetEqual ( const MbSweptData & other ); - -public: - /// \ru Функция копирования данных. \en Function of copying data. - void Init( const SweptValues & other ) { - thickness1 = other.thickness1; - thickness2 = other.thickness2; - shellClosed = other.shellClosed; - checkSelfInt = other.checkSelfInt; - mergeFaces = other.mergeFaces; - } - - /// \ru Получить состояние замкнутости. \en Get the closedness state. - bool IsShellClosed() const { return shellClosed; } - /// \ru Установит состояние замкнутости. \en Set the closedness state. - void SetShellClosed( bool cl ) { shellClosed = cl; } - /// \ru Получить состояние флага проверки самопересечений. \en Get the state of flag of checking self-intersection. - bool CheckSelfInt() const { return checkSelfInt; } - /// \ru Установить состояние флага проверки самопересечений. \en Set the state of flag of checking self-intersection. - void SetCheckSelfInt( bool c ) { checkSelfInt = c; } - /// \ru Сливать подобные грани (true). \en Whether to merge similar faces (true). - bool MergeFaces() const { return mergeFaces; } - /// \ru Сливать подобные грани (true). \en Whether to merge similar faces (true). - void SetMergeFaces( bool mf ) { mergeFaces = mf; } - - /// \ru Оператор присваивания. \en Assignment operator. - void operator = ( const SweptValues & other ) { Init( other ); } - - KNOWN_OBJECTS_RW_REF_OPERATORS( SweptValues ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Параметры выдавливания или вращения. - \en The parameters of extrusion or rotation. \~ - \details \ru Параметры выдавливания или вращения кривых с опциями по направлениям. \n - В операции выдавливания прямым направлением считается направление, сонаправленное - с вектором выдавливания, а обратным - противоположное направление. - В операции вращения прямое направлением определяется по оси вращения с помощью правила правой руки. - \en The parameters of extrusion or rotation of curves with options along the directions. \n - In the extrusion operations the forward direction is the direction collinear - with the vector of extrusion and back - the opposite direction. - In the rotation operation the forward direction is determined by the axis of rotation using the right hand rule. \~ - \ingroup Build_Parameters -*/ -// --- -class MATH_CLASS SweptValuesAndSides: public SweptValues { -public: - MbSweptSide side1; ///< \ru Параметры выдавливания/вращения в прямом направлении. \en The parameters of extrusion/rotation along the forward direction. - MbSweptSide side2; ///< \ru Параметры выдавливания/вращения в обратном направлении. \en The parameters of extrusion/rotation along the backward direction. - -public: - /** \brief \ru Конструктор по умолчанию. - \en Default constructor. \~ - \details \ru Конструктор параметров для построения замкнутой оболочки без тонкой стенки. - Способ построение в обоих направлениях - на заданную глубину, равную 0.0. - \en Constructor of parameters for construction of closed shell without the thin wall. - Method of construction in both directions - to a given depth equal to 0.0. \~ - */ - SweptValuesAndSides() - : SweptValues() - , side1 () - , side2 () - {} - /** \brief \ru Конструктор по углам вращения или глубинам выдавливания. - \en Constructor by rotation angles and extrusion depths. \~ - \details \ru Конструктор параметров для построения замкнутой оболочки без тонкой стенки. - Способ построение в обоих направлениях - на заданную глубину. - \en Constructor of parameters for construction of closed shell without the thin wall. - Method of construction in both directions - to a given depth. \~ - \param[in] scalarValue1 - \ru Угол вращения\глубина выдавливания в прямом направлении. - \en Angle of rotation\depth of extrusion along the forward direction. \~ - \param[in] scalarValue2 - \ru Угол вращения\глубина выдавливания в обратном направлении. - \en Angle of rotation\depth of extrusion along the backward direction. \~ - */ - SweptValuesAndSides( double scalarValue1, double scalarValue2 ) - : SweptValues( ) - , side1 ( scalarValue1 ) - , side2 ( scalarValue2 ) - {} - /// \ru Конструктор копирования данных на тех же поверхностях. \en Copy-constructor of data on the same surfaces. - SweptValuesAndSides( const SweptValuesAndSides & other ) - : SweptValues( other ) - , side1 ( other.side1 ) - , side2 ( other.side2 ) - {} - /// \ru Конструктор полного копирования данных. \en Constructor of complete copying of data. - SweptValuesAndSides( const SweptValuesAndSides & other, MbRegDuplicate * ireg ) - : SweptValues( other ) - , side1 ( other.side1, ireg ) - , side2 ( other.side2, ireg ) - {} - /// \ru Деструктор. \en Destructor. - virtual ~SweptValuesAndSides(); - -public: - // \ru Являются ли объекты равными? \en Determine whether an object is equal? - virtual bool IsSame( const SweptValues & other, double accuracy ) const - { - const SweptValuesAndSides * obj = dynamic_cast( &other ); - if ( obj != NULL ) { - if ( side1.IsSame( obj->side1, accuracy ) && side2.IsSame( obj->side2, accuracy ) ) { - if ( obj->SweptValues::IsSame( *this, accuracy ) ) { - return true; - } - } - } - return false; - } - -public: - /// \ru Оператор присваивания данных на тех же поверхностях. \en Assignment operator of data copying on the same surfaces. - void operator = ( const SweptValuesAndSides & other ) { - SweptValues::Init( other ); - side1 = other.side1; - side2 = other.side2; - } - - /** \brief \ru Преобразовать согласно матрице. - \en Transform according to the matrix. \~ - \details \ru Преобразовать согласно матрице поверхности в прямом и обратном направлении. - \en Transform according to the matrix of surface in the forward and backward direction. \~ - \param[in] matr - \ru Матрица преобразования. - \en A transformation matrix. \~ - \param[in] iReg - \ru Регистратор. - \en Registrator. \~ - */ - void Transform( const MbMatrix3D & matr, MbRegTransform * iReg = NULL ); - /** \brief \ru Сдвинуть вдоль вектора. - \en Move along a vector. \~ - \details \ru Сдвинуть вдоль вектора поверхности в прямом и обратном направлении. - \en Move along the vector of the surface along the forward and backward direction. \~ - \param[in] to - \ru Вектор сдвига. - \en Translation vector. \~ - \param[in] iReg - \ru Регистратор. - \en Registrator. \~ - */ - void Move ( const MbVector3D & to, MbRegTransform * iReg = NULL ); - /** \brief \ru Повернуть вокруг оси. - \en Rotate around an axis. \~ - \details \ru Повернуть вокруг оси поверхности в прямом и обратном направлении. - \en Rotate around the axis of the surface along the forward and backward direction. \~ - \param[in] axis - \ru Ось поворота. - \en The rotation axis. \~ - \param[in] angle - \ru Угол поворота. - \en The rotation angle. \~ - \param[in] iReg - \ru Регистратор. - \en Registrator. \~ - */ - void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * iReg = NULL ); - - /** \brief \ru Сделать копии поверхностей. - \en Make copies of surfaces. \~ - \details \ru Если в каком-либо направлении задана поверхность, заменить эту поверхность на ее копию. - \en If the surface is given in any direction, then replace the surface with its copy. \~ - \param[in] ireg - \ru Регистратор копий. - \en Registrator of copies. \~ - \return \ru true, если хотя бы одна поверхность имелась и сдублирована. - \en True if at least one surface is had and copied. \~ - */ - bool DuplicateSurfaces( MbRegDuplicate * ireg = NULL ); - - /// \ru Получить поверхность в положительном направлении. \en Get the surface along the positive direction. - MbSurface * GetSurface1() const { return side1.GetSurface(); } - /// \ru Получить поверхность в отрицательном направлении. \en Get the surface along the negative direction. - MbSurface * GetSurface2() const { return side2.GetSurface(); } - /// \ru Установить поверхность в положительном направлении. \en Set the surface along the positive direction. - void SetSurface1( MbSurface * s ) { side1.SetSurface( s ); } - /// \ru Установить поверхность в отрицательном направлении. \en Set the surface along the negative direction. - void SetSurface2( MbSurface * s ) { side2.SetSurface( s ); } - /// \ru Поменять поверхности местами. \en Swap surfaces. - void ExchangeSurfaces(); -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Параметры операции выдавливания. - \en The parameters of extrusion operation. \~ - \details \ru Параметры операции выдавливания кривых с опциями по направлениям. \n - \en The parameters of extrusion operation of curves with options along directions. \n \~ - \ingroup Build_Parameters -*/ -// --- -class MATH_CLASS ExtrusionValues : public SweptValuesAndSides { -public: - - /** \brief \ru Конструктор по умолчанию. - \en Default constructor. \~ - \details \ru Конструктор параметров выдавливания для построения замкнутой оболочки без тонкой стенки - в прямом направлении на величину, равную 10.0. - \en Constructor of extrusion parameters for construction of closed shell without the thin wall. - along the forward direction by value 10.0. \~ - */ - ExtrusionValues() - : SweptValuesAndSides( 10., 0. ) {} - /** \brief \ru Конструктор по глубинам выдавливания. - \en Constructor by extrusion depths. \~ - \details \ru Конструктор параметров выдавливания для построения замкнутой оболочки без тонкой стенки. - Способ построение в обоих направлениях - на заданную глубину. - \en Constructor of extrusion parameters for construction of closed shell without the thin wall. - Method of construction in both directions - to a given depth. \~ - \param[in] scalarValue1 - \ru Глубина выдавливания в прямом направлении. - \en Depth of extrusion along the forward direction. \~ - \param[in] scalarValue2 - \ru Глубина выдавливания в обратном направлении. - \en Depth of extrusion along the backward direction. \~ - */ - ExtrusionValues( double scalarValue1, double scalarValue2 ) - : SweptValuesAndSides( scalarValue1, scalarValue2 ) {} - /// \ru Конструктор копирования, на тех же поверхностях. \en Copy-constructor on the same surfaces. - ExtrusionValues( const ExtrusionValues & other ) - : SweptValuesAndSides( other ) {} - /// \ru Конструктор копирования. \en Copy-constructor. - ExtrusionValues( const ExtrusionValues & other, MbRegDuplicate * ireg ) - : SweptValuesAndSides( other, ireg ) {} - /// \ru Деструктор. \en Destructor. - virtual ~ExtrusionValues(); - -public: - // \ru Это параметры выдавливания? \en This is extrusion parameters? - virtual bool IsExtrusionValues() const { return true; } - - // \ru Являются ли объекты равными? \en Determine whether an object is equal? - virtual bool IsSame( const SweptValues & other, double accuracy ) const - { - const ExtrusionValues * obj = dynamic_cast( &other ); - if ( obj != NULL ) { - if ( obj->SweptValuesAndSides::IsSame( *this, accuracy ) ) - return true; - } - return false; - } - -public: - /// \ru Оператор присваивания, на тех же поверхностях. \en Assignment operator on the same surfaces. - ExtrusionValues & operator = ( const ExtrusionValues & other ) { - *static_cast(this) = *static_cast(&other); - return *this; - } - - KNOWN_OBJECTS_RW_REF_OPERATORS( ExtrusionValues ) // \ru Для работы со ссылками и объектами класса \en For treatment of references and objects of the class -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Параметры операции вращения. - \en The parameters of revolution operation. \~ - \details \ru Параметры операции вращения кривых с опциями по направлениям. \n - \en The parameters of revolution operation of curves with options along directions. \n \~ - \ingroup Build_Parameters -*/ -// --- -class MATH_CLASS RevolutionValues : public SweptValuesAndSides { -public: - /** \brief \ru Форма топологии. - \en Topology shape. \~ - \details \ru Форма топологии: 0 - тело типа сферы, 1 - тело типа тора.\n - Если образующая - не замкнутая плоская кривая, и ось вращения лежит в плоскости кривой, - то возможно построение тела вращения с топологией типа сферы. В этом случае образующая достраивается до оси вращения. - \en Topology shape: 0 - sphere, 1 - torus.\n - If swept is non-closed planar curve and axis of rotation lies on the curve plane, - then is possible to construct revolution solids with the topology of sphere type. In this case the swept is being updated to the rotation axis. -I \~ */ - int shape; - -public: - /** \brief \ru Конструктор по умолчанию. - \en Default constructor. \~ - \details \ru Конструктор параметров вращения для построения замкнутой оболочки типа тора - без тонкой стенки в прямом направлении на полный оборот. - \en Constructor of revolution parameters for construction of closed shell of torus type - without thin wall along the forward direction at full turn. \~ - */ - RevolutionValues() - : SweptValuesAndSides( M_PI, 0. ) - , shape( 1 ) - {} - /** \brief \ru Конструктор по углам вращения. - \en Constructor by revolution angles. \~ - \details \ru Конструктор параметров вращения для построения замкнутой оболочки без тонкой стенки. - Способ построение в обоих направлениях - на заданную глубину (заданный угол). - \en Constructor of revolution parameters for construction of closed shell without the thin wall. - Method of construction in both directions - to a given depth (given angle). \~ - \param[in] scalarValue1 - \ru Угол вращение в прямом направлении. - \en Revolution angle along the forward direction. \~ - \param[in] scalarValue2 - \ru Угол вращения в обратном направлении. - \en Revolution angle along the backward direction. \~ - \param[in] s - \ru Форма топологии. - \en Topology shape. \~ - */ - RevolutionValues( double scalarValue1, double scalarValue2, int s ) - : SweptValuesAndSides( scalarValue1, scalarValue2 ) - , shape( s ) - {} - /// \ru Конструктор копирования, на тех же поверхностях. \en Copy-constructor on the same surfaces. - RevolutionValues( const RevolutionValues & other ) - : SweptValuesAndSides( other ) - , shape( other.shape ) - {} - /// \ru Конструктор копирования. \en Copy-constructor. - RevolutionValues( const RevolutionValues & other, MbRegDuplicate * ireg ) - : SweptValuesAndSides( other, ireg ) - , shape( other.shape ) - {} - /// \ru Деструктор. \en Destructor. - virtual ~RevolutionValues(); - -public: - // \ru Это параметры вращения? \en This is rotation parameters? - virtual bool IsRevolutionValues() const { return true; } - - // \ru Являются ли объекты равными? \en Determine whether an object is equal? - virtual bool IsSame( const SweptValues & other, double accuracy ) const - { - const RevolutionValues * obj = dynamic_cast( &other ); - if ( obj != NULL ) { - if ( obj->shape == shape ) { - if ( obj->SweptValuesAndSides::IsSame( *this, accuracy ) ) - return true; - } - } - return false; - } - -public: - /// \ru Оператор присваивания, на тех же поверхностях. \en Assignment operator on the same surfaces. - RevolutionValues & operator = ( const RevolutionValues & other ) { - *static_cast(this) = *static_cast(&other); - shape = other.shape; - return *this; - } - - KNOWN_OBJECTS_RW_REF_OPERATORS( RevolutionValues ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Параметры кинематической операции. - \en Parameters of the sweeping operation. \~ - \details \ru Параметры операции движения образующей по направляющей кривой. \n - \en The operation parameters of moving the generating curve along the spine curve. \n \~ - \ingroup Build_Parameters -*/ -// --- -struct MATH_CLASS EvolutionValues : public SweptValues { - - /// \ru Способы переноса образующего объекта вдоль направляющей. \en Moving method of generating object along the spine curve. - enum ModesList { - eom_Parallel = 0x00, // 00000 ///< \ru Образующая переносится параллельно самой себе. \en Generating curve is moved parallel to itself. - eom_KeepingAngle = 0x01, // 00001 ///< \ru Образующая при переносе сохраняет исходный угол с направляющей. \en Generating curve when moving preserves initial angle with spine. - eom_Orthogonal = 0x02, // 00010 ///< \ru Плоскость образующей выставляется и сохраняется ортогональной направляющей. \en Plane of generating curve is set and saved as orthogonal to spine. - eom_BySurfaceNormal = 0x04, // 00100 ///< \ru Образующая переносится согласованно с нормалью к поверхности. \en Generating object is moved according to surface normal. - }; - -protected: - /** \brief \ru Способ переноса образующего контура вдоль направляющей. - \en Moving method of generating contour along the spine curve. \~ - \details \ru Способ переноса образующего контура вдоль направляющей: \n - parallel <= 0 - Образующая переносится параллельно самой себе; \n - parallel == 1 - Образующая при переносе сохраняет исходный угол с направляющей; \n - parallel == 2 - Плоскость образующей выставляется и сохраняется ортогональной направляющей. \n - parallel > 3 - Образующая переносится согласованно с нормалью к поверхности. \n - \en Moving method of generating contour along the spine curve: \n - parallel <= 0 - Generating curve is moved parallel to itself; \n - parallel == 1 - Generating curve when moving preserves initial angle with spine; \n - parallel == 2 - Plane of generating curve is set and saved as orthogonal to spine. \n - parallel > 3 - Generating object is moved according to surface normal. \n \~ - */ - int mode; -public: - // \ru Данные о функциях изменения образующих кривых вдоль направляющей кривой (могут быть NULL). \en Data about changes of generating curves along the guide curve (can be NULL). - double range; ///< \ru Эквидистантное смещение точек образующей кривой в конце траектории. \en The offset range of generating curve on the end of spine curve. - SPtr scaling; ///< \ru Функция масштабирования образующей кривой. \en The function of curve scale. - SPtr winding; ///< \ru Функция вращения образующей кривой. \en The function of curve rotation. - c3d::ConstSurfaceSPtr surface; ///< \ru Поверхность для управления направляющей кривой MbSpine. \en The surface for guide curve control (for MbSpine). - -public: - - /** \brief \ru Конструктор по умолчанию. - \en Default constructor. \~ - \details \ru Конструктор параметров кинематической операции для построения замкнутой оболочки - без тонкой стенки с сохранением угла наклона. - \en Constructor of sweeping operation parameters for construction of closed shell - without the thin wall with keeping the angle inclination. \~ - */ - EvolutionValues() - : SweptValues( ) - , mode ( eom_KeepingAngle ) - , range ( 0.0 ) - , scaling ( NULL ) - , winding ( NULL ) - , surface ( NULL ) - {} - /// \ru Конструктор копирования. \en Copy-constructor. - EvolutionValues( const EvolutionValues & other ); - /// \ru Деструктор. \en Destructor. - virtual ~EvolutionValues(); - -public: - // \ru Это параметры кинематики? \en This is "evolution" parameters? - virtual bool IsEvolutionValues() const { return true; } - - // \ru Являются ли объекты равными? \en Determine whether an object is equal? - virtual bool IsSame( const SweptValues & other, double accuracy ) const; - // \ru Определить, являются ли объекты подобными. \en Determine whether the objects are similar. \~ - virtual bool IsSimilar( const SweptValues & other ) const; - // \ru Сделать объекты равным. \en Make objects equal. \~ - virtual bool SetEqual ( const SweptValues & other ); - - /// \ru Копировать значение режима операции. \en Copy operation mode. - void CopyMode( const EvolutionValues & ev ) { mode = ev.mode; } - /// \ru Получить значение режима операции. \en Get operation mode. - int GetMode() const { return mode; } - /// \ru Переносится ли образующая параллельно самой себе. \en Whether generating curve is moved parallel to itself. - bool IsParallel() const { return (mode < 1); } - /// \ru Сохраняет ли образующая при переносе исходный угол с направляющей. \en Whether generating curve when moving preserves initial angle with spine. - bool IsKeepingAngle() const { return !!(mode & eom_KeepingAngle); } - /// \ru Выставляется ли плоскость образующей ортогонально направляющей. \en Whether plane of generating curve is set and saved as orthogonal to spine. - bool IsOrthogonal() const { return !!(mode & eom_Orthogonal); } - /// \ru Переносится ли образующая согласованно с нормалью к поверхности. \en Whether generating object is moved according to surface normal. - bool BySurfaceNormal() const { return !!(mode & eom_BySurfaceNormal); } - - /// \ru Переносить образующая параллельно самой себе. \en Move generating curve parallel to itself. - void SetParallel() { mode = eom_Parallel; } - /// \ru Сохранять при переносе исходный угол между образующей и направляющей. \en Preserve initial angle between generatrix and spine when moving. - void SetKeepingAngle() { mode = eom_KeepingAngle; } - /// \ru Выставлять плоскость образующей ортогонально направляющей. \en Set and keep plane of generating curve as orthogonal to spine. - void SetOrthogonal() { mode = eom_Orthogonal; } - /// \ru Переносить образующую согласованно с нормалью к поверхности. \en Move generating object according to surface normal. - bool SetBySurfaceNormal( bool s ) - { - if ( !IsParallel() ) { - if ( s ) mode |= eom_BySurfaceNormal; - else mode ^= eom_BySurfaceNormal; - return true; - } - return false; - } - /// \ru Выдать функцию масштабирования образующей кривой. \en Get the function of curve scale. - double GetRange() const { return range; } - double & SetRange() { return range; } - void SetRange( double r ) { range = r; } - - /** \brief \ru Добавить данные. - \en Add data. \~ - \details \ru Добавить данные об изменении образующих контурах на поверхности вдоль образующей кривой. - \en Add data about changes of generating contours on the surface along the guide curve. \~ - \param[in] _scaling - \ru Масштабирование. - \en The scaling. \~ - \param[in] _winding - \ru Поворот. - \en The winding. \~ - */ - bool AddData( MbFunction & _scaling, MbFunction & _winding ); - - /// \ru Выдать функцию масштабирования образующей кривой. \en Get the function of curve scale. - const MbFunction * GetScaling() const { return scaling; } - MbFunction * SetScaling() { return scaling; } - - /// \ru Выдать функцию вращения образующей кривой. \en Get the function of curve rotation. - const MbFunction * GetWinding() const { return winding; } - MbFunction * SetWinding() { return winding; } - - ///< \ru Выдать поверхность для направляющей кривой MbSpine. \en Get the surface for guide curve MbSpine. - const MbSurface * GetSurface() const { return surface; } - void SetSurface( const MbSurface & surf ); - -public: - /// \ru Оператор присваивания. \en Assignment operator. - EvolutionValues & operator = ( const EvolutionValues & other ); - - KNOWN_OBJECTS_RW_REF_OPERATORS( EvolutionValues ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Параметры операции построения тела по плоским сечениям. - \en The operation parameters of constructing solid by lofted. \~ - \details \ru Параметры операции построения тела по плоским сечениям, заданных контурами. \n - \en The parameters of constructing operation by lofted which are given by contours. \n \~ - \ingroup Build_Parameters -*/ -// --- -struct MATH_CLASS LoftedValues : public SweptValues { -public: - bool closed; ///< \ru Замкнутость трубки сечений. \en Closedness of tube. - MbVector3D vector1; ///< \ru Производная в начале. \en The derivative at the start. - MbVector3D vector2; ///< \ru Производная в конце. \en The derivative at the end. - bool setNormal1; ///< \ru Установлена нормаль в начале, если начальное сечение точечное. \en The normal is set at the start, if first section is point curve. - bool setNormal2; ///< \ru Установлена нормаль в конце, если начальное сечение точечное. \en The normal is set at the end, if last section is point curve. - double derFactor1; ///< \ru Множитель величины производной при установке нормали в начале. По умолчанию 1.0. \en The modifier of the derivative when setting the normal at the beginning. The default is 1.0. - double derFactor2; ///< \ru Множитель величины производной при установке нормали в конце. По умолчанию 1.0. \en The modifier of the derivative when setting the normal at the end. The default is 1.0. - MbVector3D directSurf1; ///< \ru Ось направления движения поверхности в начале при установке нормали. \en Direction axis of the surface progress near the starting curve when setting the normal. - MbVector3D directSurf2; ///< \ru Ось направления движения поверхности в конце при установке нормали. \en Direction axis of the surface progress near the ending curve when setting the normal. - -public: - /** \brief \ru Конструктор по умолчанию. - \en Default constructor. \~ - \details \ru Конструктор параметров операции по сечениям для построения замкнутой оболочки без тонкой стенки. - \en Constructor of lofted operation parameters for construction of closed shell without the thin wall. \~ - */ - LoftedValues() - : SweptValues ( ) - , closed ( false ) - , vector1 ( 0.0, 0.0, 0.0 ) - , vector2 ( 0.0, 0.0, 0.0 ) - , setNormal1 ( false ) - , setNormal2 ( false ) - , derFactor1 ( 1.0 ) - , derFactor2 ( 1.0 ) - , directSurf1 ( UNDEFINED_DBL, UNDEFINED_DBL, UNDEFINED_DBL ) - , directSurf2 ( UNDEFINED_DBL, UNDEFINED_DBL, UNDEFINED_DBL ) - {} - /// \ru Конструктор копирования. \en Copy-constructor. - LoftedValues( const LoftedValues & other ) - : SweptValues ( other ) - , closed ( other.closed ) - , vector1 ( other.vector1 ) - , vector2 ( other.vector2 ) - , setNormal1 ( other.setNormal1 ) - , setNormal2 ( other.setNormal2 ) - , derFactor1 ( other.derFactor1 ) - , derFactor2 ( other.derFactor2 ) - , directSurf1 ( other.directSurf1 ) - , directSurf2 ( other.directSurf2 ) - {} - /// \ru Оператор присваивания. \en Assignment operator. - LoftedValues & operator = ( const LoftedValues & other ) - { - SweptValues::Init( other ); - closed = other.closed; - vector1 = other.vector1; - vector2 = other.vector2; - setNormal1 = other.setNormal1; - setNormal2 = other.setNormal2; - directSurf1 = other.directSurf1; - directSurf2 = other.directSurf2; - return *this; - } - /// \ru Деструктор. \en Destructor. - virtual ~LoftedValues(); - -public: - // \ru Это параметры операции по сечениям? \en This is "lofted" parameters? - virtual bool IsLoftedValues() const { return true; } - - // \ru Являются ли объекты равными? \en Determine whether an object is equal? - virtual bool IsSame( const SweptValues & other, double accuracy ) const - { - const LoftedValues * obj = dynamic_cast( &other ); - if ( obj != NULL ) { - if ( obj->closed == closed ) { - if ( c3d::EqualVectors(vector1, obj->vector1, accuracy) && c3d::EqualVectors(vector2, obj->vector2, accuracy) ) { - if ( obj->setNormal1 == setNormal1 && obj->setNormal2 == setNormal2 ) { - if ( (setNormal1 == false || obj->derFactor1 == derFactor1 || c3d::EqualVectors(directSurf1, obj->directSurf1, accuracy)) && // Фактор может различаться, если нормаль не установлена. - (setNormal2 == false || obj->derFactor2 == derFactor2 || c3d::EqualVectors(directSurf2, obj->directSurf2, accuracy)) ) { - if ( obj->SweptValues::IsSame(*this, accuracy) ) { - return true; - } - } - } - } - } - } - return false; - } - -public: - /// \ru Преобразовать объект согласно матрице. \en Transform an object according to the matrix. - void Transform( const MbMatrix3D & matr ); - /// \ru Сдвинуть объект вдоль вектора. \en Move an object along a vector. - void Move ( const MbVector3D & to ); - /// \ru Повернуть объект вокруг оси на заданный угол. \en Rotate an object at a given angle around an axis. - void Rotate ( const MbAxis3D & axis, double ang ); - - KNOWN_OBJECTS_RW_REF_OPERATORS( LoftedValues ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Параметры ребра жёсткости. - \en Parameters of a rib. \~ - \details \ru Параметры построения ребра жёсткости по кривой, задающей его форму. \n - \en The construction parameters of rib by curve gives its shape. \n \~ - \ingroup Build_Parameters -*/ -// --- -struct MATH_CLASS RibValues : public SweptValues { -public: - /** \brief \ru Сторона заполнения пространства телом ребра. - \en The side to place the rib on. \~ - \details \ru С какой стороны от кривой располагается ребро. \n - \en With which side of the curve is rib. \n \~ - \ingroup Build_Parameters - */ - enum ExtrudeSide { - es_Left = 0, ///< \ru Ребро выдавливается в левую сторону от кривой вдоль плоскости. \en Rib is extruded to the left side of the curve along the plane. - es_Right, ///< \ru Ребро выдавливается в правую сторону от кривой вдоль плоскости. \en Rib is extruded to the right side of the curve along the plane. - es_Up, ///< \ru Ребро выдавливается в сторону нормали плоскости. \en Rib is extruded to the side of the surface normal. - es_Down, ///< \ru Ребро выдавливается в сторону против нормали плоскости. \en Rib is extruded to the side opposite to the surface normal. - }; - -public: - double angle1; ///< \ru Угол уклона плоскости в прямом направлении. \en Draft angle of the plane along the forward direction. - double angle2; ///< \ru Угол уклона плоскости в обратном направлении. \en Draft angle of the plane along the backward direction. - ExtrudeSide side; ///< \ru Сторона заполнения пространства телом ребра. \en The side to place the rib on. - -public: - /// \ru Конструктор по умолчанию. \en Default constructor. - RibValues() - : SweptValues( ) - , angle1 ( 0.0 ) - , angle2 ( 0.0 ) - , side ( es_Right ) - {} - /// \ru Конструктор по толщинам, углам и стороне заполнения пространства. \en Constructor by thickness, angles and filling space. - RibValues( double t1, double t2, double a1, double a2, int s ) - : SweptValues( t1, t2 ) - , angle1 ( a1 ) - , angle2 ( a2 ) - , side ( (ExtrudeSide)s ) - {} - /// \ru Конструктор копирования. \en Copy-constructor. - RibValues( const RibValues & other ) - : SweptValues( other ) - , angle1 ( other.angle1 ) - , angle2 ( other.angle2 ) - , side ( other.side ) - {} - /// \ru Деструктор. \en Destructor. - virtual ~RibValues(); - -public: - // \ru Это параметры операции ребра жесткости? \en This is "rib" parameters? - virtual bool IsRibValues() const { return true; } - - // \ru Являются ли объекты равными? \en Determine whether an object is equal? - virtual bool IsSame( const SweptValues & other, double accuracy ) const - { - const RibValues * obj = dynamic_cast( &other ); - - if ( obj != NULL ) { - if ( obj->side == side ) { - if ( ::fabs(obj->angle1 - angle1) < accuracy && ::fabs(obj->angle2 - angle2) < accuracy ) - return SweptValues::IsSame( *obj, accuracy ); - } - } - return false; - } - -public: - /// \ru Функция копирования. \en Copy function. - void Init( const RibValues & other ) - { - SweptValues::Init( other ); - angle1 = other.angle1; - angle2 = other.angle2; - side = other.side; - } - /// \ru Оператор присваивания. \en Assignment operator. - RibValues & operator = ( const RibValues & other ) - { - Init( other ); - return *this; - } - - KNOWN_OBJECTS_RW_REF_OPERATORS( RibValues ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Параметры ребра жёсткости листового тела. - \en Parameters of a sheet metal rib. \~ - \details \ru Параметры построения ребра жёсткости листового тела по кривой, задающей его форму. \n - \en The construction parameters of a sheet metal rib by curve gives its shape. \n \~ -\ingroup Build_Parameters -*/ -// --- -struct MATH_CLASS SheetRibValues: public RibValues { -public: - double radRibConvex; ///< \ru Радиус скругления выпуклой части ребра жесткости. \en Fillet radius of convex part of rib. - double radSideConcave; ///< \ru Радиус скругления примыкания вогнутой части ребра жесткости к листовому телу. \en Fillet radius of connection of concave part of rib and metal sheet. - -public: - /// \ru Конструктор по умолчанию. \en Default constructor. - SheetRibValues() - : RibValues ( ) - , radRibConvex ( 0.0 ) - , radSideConcave( 0.0 ) - {} - /// \ru Конструктор по параметрам. \en Constructor by parameters. - SheetRibValues( double t1, double t2, double a1, double a2, int s, double rFilletRib, const double & rFilletSide ) - : RibValues ( t1, t2, a1, a2, s ) - , radRibConvex ( ::fabs(rFilletRib) ) - , radSideConcave( ::fabs(rFilletSide) ) - {} - /// \ru Конструктор копирования. \en Copy-constructor. - SheetRibValues( const SheetRibValues & other ) - : RibValues ( other ) - , radRibConvex ( other.radRibConvex ) - , radSideConcave( other.radSideConcave ) - {} - /// \ru Деструктор. \en Destructor. - virtual ~SheetRibValues(); - -public: - // \ru Являются ли объекты равными? \en Determine whether an object is equal? - virtual bool IsSame( const SweptValues & other, double accuracy ) const - { - const SheetRibValues * obj = dynamic_cast( &other ); - - if ( obj != NULL ) { - if ( (::fabs(radRibConvex - obj->radRibConvex) < accuracy) && (::fabs(radSideConcave - obj->radSideConcave) < accuracy) ) - return RibValues::IsSame( *obj, accuracy ); - } - return false; - } - -public: - /// \ru Функция копирования. \en Copy function. - void Init( const SheetRibValues & other ) - { - RibValues::Init( other ); - radRibConvex = other.radRibConvex; - radSideConcave = other.radSideConcave; - } - - /// \ru Оператор присваивания. \en Assignment operator. - SheetRibValues & operator = ( const SheetRibValues & other ) { - Init( other ); - return *this; - } - - /// \ru Преобразовать объект согласно матрице. \en Transform an object according to the matrix. - void Transform( const MbMatrix3D & matr ); - - KNOWN_OBJECTS_RW_REF_OPERATORS( SheetRibValues ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. -}; - -//------------------------------------------------------------------------------ -/** \brief \ru Параметры булевой операции выдавливания или вращения до объекта. - \en The parameters of Boolean operation of extrusion or revolution to object. \~ - \details \ru Параметры булевой операции выдавливания или вращения до объекта. \n - Используется при булевой операции исходного тела - и построенной операции выдавливания или вращения двумерных контуров на поверхности. - \en The parameters of Boolean operation of extrusion or revolution to object. \n - Used in Boolean operation of initial solid - and constructed operation of extrusion or revolution of two-dimensional contours on the surface. \~ - \ingroup Build_Parameters -*/ -// --- -struct MATH_CLASS MbSweptLayout { - /** \brief \ru Направление выдавливания (вращения). - \en A direction of extrusion (revolution). \~ - \details \ru Направление выдавливания (вращения) по отношению к вектору выдавливания (оси вращения). - \en The direction of extrusion relative to the extrusion vector. \~ - */ - enum Direction { - ed_minus_minus = -2, ///< \ru В обратном направлении, для обеих строн. \en Along the backward direction, for both sides. - ed_minus = -1, ///< \ru В обратном направлении, для одной стороны. \en Along the backward direction, for one sides. - ed_both = 0, ///< \ru В обоих направлениях. \en Along both directions. - ed_plus = 1, ///< \ru В прямом направлении, для одной стороны. \en Along the forward direction, for one sides. - ed_plus_plus = 2, ///< \ru В прямом направлении, для обеих сторон. \en Along the forward direction, for both sides. - }; - Direction direction; ///< \ru Направление выдавливания относительно вектора. \en The direction of extrusion relative to the vector. - bool skipUnion; ///< \ru Создавать новое тело (Не приклеивать к телу). \en Create a new solid. - -protected: - SPtr surface; ///< \ru Поверхность, на которой размещена образующая. \en The surface, which contains the generating curve. - -protected: - /// \ru Конструктор. \en Constructor. - MbSweptLayout( const MbSurface & surf, Direction dir ) : surface( &surf ), direction( dir ), skipUnion( false ) {} - /// \ru Конструктор копирования. \en Copy-constructor. - MbSweptLayout( const MbSweptLayout & other ) : surface( other.surface ), direction( other.direction ), skipUnion( other.skipUnion ) {} - /// \ru Деструктор. \en Destructor. - virtual ~MbSweptLayout(); -public: - /// \ru Получить поверхность. \en Get the surface. - const MbSurface & GetSurface() const { return *surface; } - - /// \ru Создавать новое тело (Не приклеивать к телу). \en Create a new solid. - bool SkipUnion() const { return skipUnion; } - /// \ru Создавать новое тело (Не приклеивать к телу). \en Create a new solid. - void SkipUnion( bool su ) { skipUnion = su; } -public: - /// \ru Это параметры выдавливания? \en This is extrusion parameters? - virtual bool IsExtrusionLayout() const { return false; } - /// \ru Это параметры вращения? \en This is rotation parameters? - virtual bool IsRevolutionLayout() const { return false; } -public: - /// \ru Классификация точки относительно несущей поверхности. \en Classification point relative to the surface. - MbeItemLocation PointRelative( const MbCartPoint3D & p ) const; -private: - // \ru Объявление оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration of the assignment operator without implementation to prevent an assignment by default. - MbSweptLayout & operator = ( const MbSweptLayout & ); -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Параметры булевой операции выдавливания до объекта. - \en The parameters of Boolean operation of extrusion to object. \~ - \details \ru Параметры булевой операции выдавливания до объекта. \n - Используется при булевой операции исходного тела - и построенной операции выдавливания двумерных контуров на поверхности. - \en The parameters of Boolean operation of extrusion to object. \n - Used in Boolean operation of initial solid - and constructed operation of extrusion of two-dimensional contours on the surface. \~ - \ingroup Build_Parameters -*/ -// --- -struct MATH_CLASS MbExtrusionLayout : public MbSweptLayout { - MbVector3D dirVector; ///< \ru Вектор выдавливания. \en An extrusion vector. -public: - /// \ru Конструктор. \en Constructor. - MbExtrusionLayout( const MbSurface & surf, Direction dir, const MbVector3D & dirVec ) : MbSweptLayout( surf, dir ), dirVector( dirVec ) {} - /// \ru Конструктор копирования. \en Copy-constructor. - MbExtrusionLayout( const MbExtrusionLayout & other ) : MbSweptLayout( other ), dirVector( other.dirVector ) {} - /// \ru Деструктор. \en Destructor. - virtual ~MbExtrusionLayout(); -public: - /// \ru Это параметры выдавливания? \en This is extrusion parameters? - virtual bool IsExtrusionLayout() const { return true; } -private: - // \ru Объявление оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration of the assignment operator without implementation to prevent an assignment by default. - void operator = ( const MbExtrusionLayout & ); -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Параметры булевой операции вращения до объекта. - \en The parameters of Boolean operation of revolution to object. \~ - \details \ru Параметры булевой операции вращения до объекта. \n - Используется при булевой операции исходного тела - и построенной операции вращения двумерных контуров на поверхности. - \en The parameters of Boolean operation of revolution to object. \n - Used in Boolean operation of initial solid - and constructed operation of revolution of two-dimensional contours on the surface. \~ - \ingroup Build_Parameters -*/ -// --- -struct MATH_CLASS MbRevolutionLayout : public MbSweptLayout { - MbAxis3D revAxis; ///< \ru Ось вращения. \en An revolution axis. -public: - /// \ru Конструктор. \en Constructor. - MbRevolutionLayout( const MbSurface & surf, Direction dir, const MbAxis3D & rotAxis ) : MbSweptLayout( surf, dir ), revAxis( rotAxis ) {} - /// \ru Конструктор копирования. \en Copy-constructor. - MbRevolutionLayout( const MbRevolutionLayout & other ) : MbSweptLayout( other ), revAxis( other.revAxis ) {} - /// \ru Деструктор. \en Destructor. - virtual ~MbRevolutionLayout(); -public: - /// \ru Это параметры вращения? \en This is rotation parameters? - virtual bool IsRevolutionLayout() const { return true; } -private: - // \ru Объявление оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration of the assignment operator without implementation to prevent an assignment by default. - void operator = ( const MbRevolutionLayout & ); -}; - - -//------------------------------------------------------------------------------ -/** \brief \ru Данные края сечения поверхности. - \en The surface section control function. \~ - \details \ru Точку края сечения определяют: или рёбра, или кривые. Направление сечения на краю определяют: илди поверхности смежных граней рёбер, или поверхности граней, или функция угла наклона. - \en The end of the section is determined as point either edges, or curves. The direction on the end of the section is determined as either the surfaces of edges, or the surfaces of faces, or a function of the angle. - \ingroup Build_Parameters -*/ -// --- -class MATH_CLASS MbSectionRail { - -private: - std::vector edges; ///< \ru Направляющие рёбра (могут отсутствовать). \en The guide edges (may be empty). - std::vector edgeSide; ///< \ru С какой гранью ребра гладко стыковать поверхность (синхронно с edges). \en What face of edge should the surface join smoothly to (synchronously with edges). - std::vector faces; ///< \ru Опорные грани (могут отсутствовать). \en The reference faces (may be empty). - std::vector faceSide; ///< \ru С каких сторон касаться поверхностей при form==cs_Linea (синхронно с faces). \en On which sides to touch surfaces when form==cs_Linea (synchronously with faces). - std::vector curves; ///< \ru Направляющие кривые (могут отсутствовать). \en The guide curves (may be empty). - MbFunction * angle; ///< \ru Функция угла наклона (может отсутствовать). \en The function of the angle of inclination (may be NULL). - ThreeStates state; ///< \ru Как использовать angle: угол к хорде (ts_neutral), отклонение от касательной поверхности (ts_positive), отклонение от нормали к поверхности (ts_negative). - ///< \en How to use angle: angle to chord (ts_neutral), deviation from tangent surface (ts_positive), deviation from normal to surface (ts_negative). -public: - - /// \ru Конструктор по умолчанию. \en Empty constructor. - MbSectionRail() - : edges () - , edgeSide() - , faces () - , faceSide() - , curves () - , angle ( NULL ) - , state( ts_neutral ) - {} - - /** \brief \ru Конструктор по параметрам. - \en Constructor by parameters. \~ - \param[in] eds - \ru Направляющие рёбра. - \en The guide edges. \~ - \param[in] eSide - \ru Какую сторону кривой гладко стыковать с поверхностью (синхронно с edges). - \en Which side should the surface join smoothly to (synchronously with edges). \~ - \param[in] fcs - \ru Направляющие грани (могут отсутствовать). - \en The guide faces (may be empty). \~ - \param[in] fSide - \ru С каких сторон касаться поверхностей (синхронно с faces). - \en On which sides to touch surfaces (synchronously with faces). \~ - \param[in] cs - \ru Направляющие кривые (могут отсутствовать). - \en The guide curves (may be empty). \~ - \param[in] ang - \ru Функция угла наклона (может быть NULL). - \en The function of the angle of inclination (may be NULL). \~ - \param[in] st - \ru Как использовать ang. - \en How to use ang. \~ - */ - MbSectionRail( std::vector & edges_, std::vector & eSides, - std::vector & faces_, std::vector & fSides, - std::vector & cs, - MbFunction * ang, ThreeStates st ); - /// \ru Конструктор копирования. \en Copy-constructor. - MbSectionRail( const MbSectionRail & other ); - /// \ru Конструктор копирования. \en Copy-constructor. - MbSectionRail( const MbSectionRail & other, MbRegDuplicate * ireg ); - /// \ru Деструктор. \en Destructor. - ~MbSectionRail(); - -public: - - /// \ru Добавить в данные направляющую кривую. \en Add guiding to data. \~ - void AddEdge( MbCurveEdge & _edge, bool side ); - /// \ru Выдать направляющие рёбра. \en Get guide edges. - void GetEdges( std::vector & eds ) const; - void GetEdges( RPArray & eds ) const; - /// \ru Какую сторону кривой гладко стыковать с поверхностью? \en Which side should the surface join smoothly to? - void GetEdgeSide( std::vector & eSide ) const; - /// \ru Выдать количество направляющих ребер. \en Get guide edges count. - size_t GetEdgesCount() const { return edges.size(); } - size_t GetEdgeSideCount() const { return edgeSide.size(); } - /// \ru Выдать направляющее ребро. \en Get guide edge. - MbCurveEdge * SetEdge( size_t i ) { return ( i < edges.size() ) ? edges[i] : NULL; } - - /// \ru Добавить в данные поверхность. \en Add surface to data. \~ - void AddFace( MbFace & _face, bool side ); - /// \ru Выдать грани. \en Get faces. - void GetFaces( std::vector & fas ) const; - void GetFaces( RPArray & fas ) const; - /// \ru С каких сторон касаться поверхностей? \en On which sides to touch surfaces? - void GetFaceSide( std::vector & fSide ) const; - /// \ru Выдать количество направляющих граней. \en Get guide faces count. - size_t GetFacesCount() const { return faces.size(); } - size_t GetFaceSideCount() const { return faceSide.size(); } - /// \ru Выдать направляющую грань. \en Get guide face. - MbFace * SetFace( size_t i ) { return ( i < faces.size() ) ? faces[i] : NULL; } - - /// \ru Добавить в данные кривую. \en Add curve to data. \~ - void AddCurve( MbCurve3D & _curve ); - /// \ru Добавить в данные кривые. \en Add curves to data. \~ - void AddCurves( std::vector & _curves ); - /// \ru Выдать дополнительные направляющие кривые. \en Get additional guide curves. - void GetCurves( std::vector & crs ) const; - /// \ru Выдать количество дополнительных направляющих кривых. \en Get additional guide curves count. - size_t GetCurvesCount() const { return curves.size(); } - MbCurve3D * SetCurve( size_t i ) { return ( i < curves.size() ) ? curves[i] : NULL; } - - /// \ru Установить функцию управления сечением. \en Set section control function. - void SetAngle( MbFunction & an ); - /// \ru Выдать функцию управления сечением (радиус или дискриминант). \en Get section control function (radius or discriminant). - const MbFunction * GetAngle() const { return angle; } - MbFunction * SetAngle() { return angle; } - - /// \ru Выдать образующую кривую. \en Get forming curve. - const ThreeStates GetState() const { return state; } - void SetState( ThreeStates st ) { state = st; } - - /// \ru Преобразовать объект. \en Transform the object. \~ - void Transform( const MbMatrix3D & matr, MbRegTransform * iReg = NULL ); - /// \ru Сдвинуть объект. \en Move the object. \~ - void Move ( const MbVector3D & to, MbRegTransform * iReg = NULL ); - /// \ru Повернуть объект. \en Rotate the object. \~ - void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * iReg = NULL ); - /// \ru Определить, являются ли объекты равными? \en Determine whether an object is equal? - bool IsSame( const MbSectionRail & other, double accuracy ) const; - /// \ru Определить, являются ли объекты подобными. \en Determine whether the objects are similar. \~ - bool IsSimilar( const MbSectionRail & other ) const; - /// \ru Сделать объекты равным. \en Make objects equal. \~ - bool SetEqual ( const MbSectionRail & other ); - - // Дать любую точку и ориентировочную длину. - double GetAnyPopint( MbCartPoint3D & p0 ); - - /// \ru Оператор присваивания без копирования данных. \en Assignment operator without copying. - void operator = ( const MbSectionRail & other ); - - KNOWN_OBJECTS_RW_REF_OPERATORS( MbSectionRail ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. - -}; // MbSectionRail - - -//------------------------------------------------------------------------------ -/** \brief \ru Функция управления сечением поверхности. - \en The surface section control function. \~ - \details \ru Форму сечения поверхности заметания определяет функция управления сечением (радиус или дискриминант). - Если функция управления сечением не определена, то она рассчитывается покривой, через которую должно пройти сечение, или поверхности, которой должно касаться сечение. \n - \en The surface section form is determined by the section control function (radius or discriminant). - If the section control function is not determined, it is calculated with curve that the section should pass through or surface that the section should touch. \n - \ingroup Build_Parameters -*/ -// --- -struct MATH_CLASS MbSectionRule { - -public: - MbFunction * function; ///< \ru Функция управления сечением (радиус или дискриминант, может быть NULL). \en Section control function (radius or discriminant). - MbCurve3D * curve; ///< \ru Кривая, через которую должно пройти сечение. \en The curve that the section should pass through. - MbSurface * surface; ///< \ru Поверхность, которой должно касаться сечение. \en The surface that the section should touch. - -public: - /// \ru Конструктор по умолчанию. \en Empty constructor. - MbSectionRule(); - /// \ru Конструктор по функции. \en The constructor by function. - MbSectionRule( MbFunction * fun ); - /// \ru Конструктор по кривой. \en The constructor by function. - MbSectionRule( MbCurve3D * cur ); - /// \ru Конструктор по поверхности. \en The constructor by surface. - MbSectionRule( MbSurface * sur ); - /// \ru Конструктор копирования. \en Copy-constructor. - MbSectionRule( const MbSectionRule & other ); - /// \ru Конструктор копирования. \en Copy-constructor. - MbSectionRule( const MbSectionRule & other, MbRegDuplicate * ireg ); - /// \ru Деструктор. \en Destructor. - ~MbSectionRule(); - -public: - - /// \ru Выдать функцию управления сечением. \en Get section control function. - const MbFunction * GetFunction() const { return function; } - /// \ru Установить функцию управления сечением. \en Set section control function. - void SetFunction( MbFunction & f ); - void SetFunction( double f ); - /// \ru Выдать кривую управления сечением. \en Get section control curve. - const MbCurve3D * GetCurve() const { return curve; } - /// \ru Установить кривую управления сечением. \en Set section control curve. - void SetCurve( MbCurve3D & c ); - /// \ru Выдать поверхность управления сечением. \en Get section control surface. - const MbSurface * GetSurface() const { return surface; } - /// \ru Установить поверхность управления сечением. \en Set section control surface. - void SetSurface( MbSurface & s ); - - /// \ru Преобразовать объект. \en Transform the object. \~ - void Transform( const MbMatrix3D & matr, MbRegTransform * iReg = NULL ); - /// \ru Сдвинуть объект. \en Move the object. \~ - void Move ( const MbVector3D & to, MbRegTransform * iReg = NULL ); - /// \ru Повернуть объект. \en Rotate the object. \~ - void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * iReg = NULL ); - /// \ru Определить, являются ли объекты равными? \en Determine whether an object is equal? - bool IsSame( const MbSectionRule & other, double accuracy ) const; - /// \ru Определить, являются ли объекты подобными. \en Determine whether the objects are similar. \~ - bool IsSimilar( const MbSectionRule & other ) const; - /// \ru Сделать объекты равным. \en Make objects equal. \~ - bool SetEqual ( const MbSectionRule & other ); - - /// \ru Оператор присваивания без копирования данных. \en Assignment operator without copying. - void operator = ( const MbSectionRule & other ); - - KNOWN_OBJECTS_RW_REF_OPERATORS( MbSectionRule ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. - -}; // MbSectionRule - - -//------------------------------------------------------------------------------ -/** \brief \ru Параметры операции построения поверхности заметания переменного сечения. - \en The parameters for buyilding the swept mutable section surface. \~ - \details \ru Поверхность заметания строится путем движения плоского сечения вдоль опорной кривой. - Плоское сечение может начинаться на направляющей кривой и заканчиваться на другой направляющей кривой. - Направляющих кривых может быть две, одна или ни одной. Кроме того, в построении могут использоваться управляющие кривые. \n - Сечение поверхности плоскостью, перпендикулярной опорной кривой, может иметь одну из пяти форм и некоторые из них могут меняться по заданному закону. - Сечение может иметь форму окружности (или её дуги), отрезка прямой, кривой второго порядка, кривой третьего порядка или заданной сплайновой кривой. \n - При наличие направляющих кривых и их несущих поверхностей построенная поверхность заметания гладко стыкуется с несущими поверхностями. \n - \en The swept mutable section surface is form-generating by moving the flat section along the reference curve. \n - The flat section can start on a guide curve and end on another guide curve. - There can be two guide curves, one or none. In addition, control curves can be used in the construction. \n - The cross section of a surface with a plane perpendicular to the reference curve can have one of five shapes, and some of them can change according to a given law. - The cross section can take the form of a circle (or its arc), a straight line segment, a second-order curve, a third-order curve, or a given spline curve. \n - If there are guide curves and their bearing surfaces, the constructed sweep surface is smoothly joined to the bearing surfaces. \n \~ - \ingroup Build_Parameters -*/ -// --- -class MATH_CLASS MbSectionData { - -private: - MbCurve3D * spine; ///< \ru Опорная кривая. \en The reference curve. - MbeSectionShape form; ///< \ru Форма сечения поверхности. \en The surface cross-section shape. - MbSectionRail rail1; ///< \ru Данные начального края сечения. \en The data of the begining of section. - MbSectionRail rail2; ///< \ru Данные конечного края сечения. \en The data of the end of section. - MbCurve3D * curve; ///< \ru Кривая вершин (может отсутствовать). \en The apex curve (may be NULL). - MbSectionRule descript; ///< \ru Функция управления сечением поверхности (радиус или дискриминант, может быть NULL). \en The section control function (radius or discriminant). - MbPolyCurve * pattern; ///< \ru Образующая кривая при form==cs_Shape (для других форм NULL). \en Forming curve for form==cs_Shape (NULL on other case). - double uMin; ///< \ru Минимальное значение первого параметра. \en Minimal value of the first parameter. - double uMax; ///< \ru Максимальное значение первого параметра. \en Maximal value of the first parameter. - double buildSag; ///< \ru Угловое отклонение при движении по кривым и поверхностям. \en Angular deviation while moving along curves and surfaces. - double accuracy; ///< \ru Точность построения толерантных объектов. \en An accuracy of building tolerant objects. - -public: - /// \ru Конструктор по умолчанию. \en Empty constructor. - MbSectionData() - : spine ( NULL ) - , form ( cs_Round ) - , rail1 () - , rail2 () - , curve ( NULL ) - , descript() - , pattern ( NULL ) - , uMin ( 0.0 ) - , uMax ( 1.0 ) - , buildSag( Math::deviateSag ) - , accuracy( Math::metricPrecision ) - {} - - /** \brief \ru Конструктор по параметрам. - \en Constructor by parameters. \~ - \param[in] sp - \ru Опорная кривая. - \en The reference curve. \~ - \param[in] f - \ru Форма сечения поверхности. - \en The surface cross-section shape. \~ - \param[in] r1 - \ru Данные начального края сечения. - \en The data of the begining of section. \~ - \param[in] r2 - \ru Данные конечного края сечения. - \en The data of the end of section. \~ - \param[in] ap - \ru Кривая вершин (может быть NULL). - \en The apex curve (may be empty). \~ - \param[in] desc - \ru Функция управления сечением (может быть NULL). - \en Section control function (may be NULL). \~ - \param[in] patt - \ru Образующая кривая (может быть NULL). - \en Forming curve (may be NULL). \~ - */ - MbSectionData( MbCurve3D & sp, - MbeSectionShape f, - MbSectionRail & r1, - MbSectionRail & r2, - MbCurve3D * ap, - MbSectionRule & desc, - MbPolyCurve * patt ); - /// \ru Конструктор копирования. \en Copy-constructor. - MbSectionData( const MbSectionData & other ); - /// \ru Конструктор копирования. \en Copy-constructor. - MbSectionData( const MbSectionData & other, MbRegDuplicate * ireg ); - /// \ru Деструктор. \en Destructor. - ~MbSectionData(); - -public: - - /// \ru Установить опорную кривую. \en Set reference curve. - void SetSpine( MbCurve3D & s ); - //< \ru Установить вектор направления опорной кривой (если spine==NULL). \en Set the direction vector of the reference curve (if spine= = NULL). - void SetSpine( const MbVector3D & a ); - /// \ru Выдать опорную кривую. \en Get reference curve. - const MbCurve3D * GetSpine() const { return spine; } - MbCurve3D * SetSpine() { return spine; } - - /// \ru Выдать форму сечения поверхности. \en Get cross-section shape. - MbeSectionShape GetForm() const { return form; } - /// \ru Установить форму сечения поверхности. \en Set cross-section shape. - void SetForm( MbeSectionShape f ) { form = f; } - - ///< \ru Данные начального края сечения. \en The data of the begining of section. - MbSectionRail & GetRrail1() { return rail1; } - ///< \ru Данные конечного края сечения. \en The data of the end of section. - MbSectionRail & GetRrail2() { return rail2; } - - /// \ru Добавить в данные направляющее ребро. \en Add guiding to data. \~ - void AddEdge1( MbCurveEdge & _edge, bool side ) { rail1.AddEdge( _edge, side ); } - void AddEdge2( MbCurveEdge & _edge, bool side ) { rail2.AddEdge( _edge, side ); } - /// \ru Выдать направляющие рёбра. \en Get guide edges. - void GetEdges1( std::vector & eds ) const { rail1.GetEdges( eds ); } - void GetEdges1( RPArray & eds ) const { rail1.GetEdges( eds ); } - /// \ru Выдать направляющие рёбра. \en Get guide edges. - void GetEdges2( std::vector & eds ) const { rail2.GetEdges( eds ); } - void GetEdges2( RPArray & eds ) const { rail2.GetEdges( eds ); } - /// \ru Какую сторону кривой гладко стыковать с поверхностью? \en Which side should the surface join smoothly to? - void GetEdgeSide1( std::vector & eSide ) const { rail1.GetEdgeSide( eSide ); } - /// \ru Какую сторону кривой гладко стыковать с поверхностью? \en Which side should the surface join smoothly to? - void GetEdgeSide2( std::vector & eSide ) const { rail2.GetEdgeSide( eSide ); } - /// \ru Выдать количество направляющих ребер. \en Get guide edges count. - size_t GetEdgesCount1() const { return rail1.GetEdgesCount(); } - size_t GetEdgesCount2() const { return rail2.GetEdgesCount(); } - size_t GetEdgeSideCount1() const { return rail1.GetEdgeSideCount(); } - size_t GetEdgeSideCount2() const { return rail2.GetEdgeSideCount(); } - /// \ru Выдать направляющее ребро. \en Get guide edge. - MbCurveEdge * SetEdge1( size_t i ) { return rail1.SetEdge( i ); } - /// \ru Выдать направляющее ребро. \en Get guide edge. - MbCurveEdge * SetEdge2( size_t i ) { return rail2.SetEdge( i ); } - - /// \ru Добавить направляющую грань. \en Add guide face. - void AddFace1( MbFace & _face, bool side ) { rail1.AddFace( _face, side ); } - void AddFace2( MbFace & _face, bool side ) { rail2.AddFace( _face, side ); } - /// \ru Выдать поверхности. \en Get surfaces. - void GetFaces1( std::vector & fas ) const { rail1.GetFaces( fas ); } - void GetFaces1( RPArray & fas ) const { rail1.GetFaces( fas ); } - /// \ru Выдать поверхности. \en Get surfaces. - void GetFaces2( std::vector & fas ) const { rail2.GetFaces( fas ); } - void GetFaces2( RPArray & fas ) const { rail2.GetFaces( fas ); } - /// \ru С каких сторон касаться поверхностей? \en On which sides to touch surfaces? - void GetFaceSide1( std::vector & fSide ) const { rail1.GetFaceSide( fSide ); } - /// \ru С каких сторон касаться поверхностей? \en On which sides to touch surfaces? - void GetFaceSide2( std::vector & fSide ) const { rail2.GetFaceSide( fSide ); } - /// \ru Выдать количество направляющих граней. \en Get guide faces count. - size_t GetFacesCount1() const { return rail1.GetFacesCount(); } - size_t GetFacesCount2() const { return rail2.GetFacesCount(); } - size_t GetFaceSideCount1() const { return rail1.GetFaceSideCount(); } - size_t GetFaceSideCount2() const { return rail2.GetFaceSideCount(); } - /// \ru Выдать направляющую грань. \en Get guide face. - MbFace * SetFace1( size_t i ) { return rail1.SetFace( i ); } - /// \ru Выдать направляющую грань. \en Get guide face. - MbFace * SetFace2( size_t i ) { return rail2.SetFace( i ); } - - /// \ru Добавить в данные направляющую кривую. \en Add guiding to data. \~ - void AddCurve1( MbCurve3D & crv ) { rail1.AddCurve( crv ); } - void AddCurve2( MbCurve3D & crv ) { rail2.AddCurve( crv ); } - /// \ru Выдать дополнительные направляющие кривые. \en Get additional guide curves. - void GetCurves1( std::vector & crs ) const { rail1.GetCurves( crs ); } - /// \ru Выдать дополнительные направляющие кривые. \en Get additional guide curves. - void GetCurves2( std::vector & crs ) const { rail2.GetCurves( crs ); } - /// \ru Выдать количество дополнительных направляющих кривых. \en Get additional guide curves count. - size_t GetCurvesCount1() const { return rail1.GetCurvesCount(); } - size_t GetCurvesCount2() const { return rail2.GetCurvesCount(); } - /// \ru Выдать направляющую кривую. \en Get guide curve. - MbCurve3D * SetCurve1( size_t i ) { return rail1.SetCurve( i ); } - /// \ru Выдать направляющую кривую. \en Get guide curve. - MbCurve3D * SetCurve2( size_t i ) { return rail2.SetCurve( i ); } - - /// \ru Добавить в данные функции. \en Add functions to data. \~ - void SetAngle1( MbFunction & ang ) { rail1.SetAngle( ang ); } - /// \ru Добавить в данные функции. \en Add functions to data. \~ - void SetAngle2( MbFunction & ang ) { rail2.SetAngle( ang ); } - /// \ru Выдать функции углов наклона. \en Get angle functions. - const MbFunction * GetAngle1() const { return rail1.GetAngle(); } - /// \ru Выдать функции углов наклона. \en Get angle functions. - const MbFunction * GetAngle2() const { return rail2.GetAngle(); } - /// \ru Выдать функцию угла наклона. \en Get angle function. - MbFunction * SetAngle1() { return rail1.SetAngle(); } - /// \ru Выдать функцию угла наклона. \en Get angle function. - MbFunction * SetAngle2() { return rail2.SetAngle(); } - - /// \ru Добавить в данные кривую. \en Set curve. \~ - void SetCurve( MbCurve3D & curv ); - /// \ru Выдать направляющую кривую. \en Get guide curve. - MbCurve3D * SetCurve() { return curve; } - /// \ru Выдать дополнительные направляющие кривые. \en Get additional guide curves. - const MbCurve3D * GetCurve() const { return curve; } - - /// \ru Выдать данные управления сечением. \en Get section control data. - const MbSectionRule & GetSectionRule() const { return descript; } - MbSectionRule & SetSectionRule() { return descript; } - /// \ru Выдать функцию управления сечением (радиус или дискриминант). \en Get section control function (radius or discriminant). - const MbFunction * GetFunction() const { return descript.function; } - MbFunction * SetFunction() { return descript.function; } - /// \ru Установить функцию управления сечением. \en Set section control function. - void SetFunction( MbFunction & f ) { descript.SetFunction( f ); } - void SetFunction( double f ) { descript.SetFunction( f ); } - - /// \ru Выдать образующую кривую. \en Get forming curve. - const MbPolyCurve * GetPattern() const { return pattern; } - MbPolyCurve * SetPattern() { return pattern; } - /// \ru Установить образующую кривую. \en Set forming curve. - void SetPattern( MbPolyCurve & p ); - - /// \ru Минимальное значение первого параметра. \en Minimal value of the first parameter. - double GetUMin() const { return uMin; } - /// \ru Максимальное значение первого параметра. \en Maximal value of the first parameter. - double GetUMax() const { return uMax; } - /// \ru Установить область определения первого параметра поверхностей. \en Set the first parameter region of the surface. - void SetUParams( double u1, double u2 ); - /// \ru Угловое отклонение при движении по кривым и поверхностям. \en Angular deviation while moving along curves and surfaces. - double GetBuildSag() const { return buildSag; } - ///< \ru Точность построения толерантных объектов. \en An accuracy of building tolerant objects. - double GetAccuracy() const { return accuracy; } - void SetAccuracy( double acc ); - - /// \ru Преобразовать объект. \en Transform the object. \~ - void Transform( const MbMatrix3D & matr, MbRegTransform * iReg = NULL ); - /// \ru Сдвинуть объект. \en Move the object. \~ - void Move ( const MbVector3D & to, MbRegTransform * iReg = NULL ); - /// \ru Повернуть объект. \en Rotate the object. \~ - void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * iReg = NULL ); - /// \ru Определить, являются ли объекты равными? \en Determine whether an object is equal? - bool IsSame( const MbSectionData & other, double acc ) const; - /// \ru Определить, являются ли объекты подобными. \en Determine whether the objects are similar. \~ - bool IsSimilar( const MbSectionData & other ) const; - /// \ru Сделать объекты равным. \en Make objects equal. \~ - bool SetEqual ( const MbSectionData & other ); - - /// \ru Оператор присваивания без копирования данных. \en Assignment operator without copying. - void operator = ( const MbSectionData & other ); - - KNOWN_OBJECTS_RW_REF_OPERATORS( MbSectionData ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. - -}; // MbSectionData - - -//------------------------------------------------------------------------------ -/** \brief \ru Данные о поверхности переменного сечения. - \en Data about swept mutable section surface. \~ - \details \ru Данные содержат номера рёбер и граней исходной оболочки, на которых строится поверхность. - \en The data contains the numbers of edges and faces of the original shell on which the surface is built. - \ingroup Model_Creators -*/ -// --- -class MATH_CLASS MbSectionCode { - -private: - SArray edgeIndex1; ///< \ru Номера рёбер первой направляющей кривой. \en The edge numbers of the first guide curve. - SArray faceIndex1; ///< \ru Номера граней первой направляющей поверхности. \en The face numbers of the first guide surface. - SArray edgeIndex2; ///< \ru Номера рёбер второй направляющей кривой. \en The edge numbers of the second guide curve. - SArray faceIndex2; ///< \ru Номера граней второй направляющей поверхности. \en The face numbers of the second guide surface. - -public: - /// \ru Конструктор по умолчанию. \en Default constructor. - MbSectionCode() - : edgeIndex1( 0, 1 ) - , faceIndex1( 0, 1 ) - , edgeIndex2( 0, 1 ) - , faceIndex2( 0, 1 ) - {} - /// \ru Конструктор. \en Constructor. - MbSectionCode( SArray & edI1, SArray & faI1, - SArray & edI2, SArray & faI2 ) - : edgeIndex1( edI1 ) - , faceIndex1( faI1 ) - , edgeIndex2( edI2 ) - , faceIndex2( faI2 ) - {} - /// \ru Конструктор копирования. \en Copy-constructor. - MbSectionCode( const MbSectionCode & other ) - : edgeIndex1( other.edgeIndex1 ) - , faceIndex1( other.faceIndex1 ) - , edgeIndex2( other.edgeIndex2 ) - , faceIndex2( other.faceIndex2 ) - {} - /// \ru Деструктор. \en Destructor. - ~MbSectionCode() {} - -public: - - SArray & SetEdgeIndex1() { return edgeIndex1; } - SArray & SetFaceIndex1() { return faceIndex1; } - SArray & SetEdgeIndex2() { return edgeIndex2; } - SArray & SetFaceIndex2() { return faceIndex2; } - - /// \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - void Transform( const MbMatrix3D & matr ); - /// \ru Сдвинуть объект вдоль вектора. \en Move an object along a vector. - void Move ( const MbVector3D & to ); - /// \ru Повернуть объект вокруг оси на заданный угол. \en Rotate an object at a given angle around an axis. - void Rotate ( const MbAxis3D & axis, double ang ); - /// \ru Являются ли объекты равными? \en Determine whether an object is equal? - bool IsSame( const MbSectionCode & other, double accuracy ) const; - - // \ru Оператор присваивания. \en The assignment operator. - void operator = ( const MbSectionCode & other ) { - edgeIndex1 = other.edgeIndex1; - faceIndex1 = other.faceIndex1; - edgeIndex2 = other.edgeIndex2; - faceIndex2 = other.faceIndex2; - } - - KNOWN_OBJECTS_RW_REF_OPERATORS( MbSectionCode ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. - //DECLARE_NEW_DELETE_CLASS( MbSectionCode ) - //DECLARE_NEW_DELETE_CLASS_EX( MbSectionCode ) -}; // MbSectionCode - - -#endif // __OP_SWEPT_PARAMETERS_H +//////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Параметры операций над телами. + \en Parameters of operations on the solids. \~ + +*/ +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __OP_SWEPT_PARAMETERS_H +#define __OP_SWEPT_PARAMETERS_H + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +class MATH_CLASS MbPlacement3D; +class MATH_CLASS MbMatrix3D; +class MATH_CLASS MbAxis3D; +class MATH_CLASS MbCurve3D; +class MATH_CLASS MbPolyCurve; +class MATH_CLASS MbSNameMaker; +class MbRegTransform; +class MbRegDuplicate; + + +//------------------------------------------------------------------------------ +/** \brief \ru Данные об образующей. + \en The generating data. \~ + \details \ru Данные об образующей операции движения. \n + Образующая операции выдавливания, вращения или кинематической операции + может включать в себя набор двумерных контуров, набор трехмерных контуров, тело. \n + Для набора двумерных контуров на поверхности существуют следующие ограничения:\n + – может быть один или несколько контуров;\n + – если контуров несколько, они должны быть либо все замкнуты, либо все разомкнуты;\n + - если контуры замкнуты, они могут быть вложенными друг в друга, уровень вложенности не ограничивается;\n + – контуры не должны пересекаться между собой или самопересекаться.\n + Для двумерных контуров на не плоской поверхности есть дополнительное ограничение: + все контуры должны быть замкнуты.\n + Построение операции по двумерным контурам на не плоской поверхности рассчитано на указание пользователем + грани тела в качестве образующей. В этом случае данные для образующей можно получить + с помощью метода грани MbFace::GetSurfaceCurvesData.\n + Ограничения для трехмерных контуров:\n + – контуры не должны пересекаться между собой или самопересекаться.\n + \en Data about generating of movement operation. \n + При указании тела и поверхности одновременно предполагается, что выполняется кинематическая операция над + телом вдоль кривой на этой поверхности, причем движение согласовано с нормалью. \n + Generating of extrusion operation, rotation or sweeping operation + can include a set of two-dimensional contours, a set of three-dimensional contours, solid. \n + For a set of two-dimensional contours on the surface, the following restrictions:\n + - can be one or multiple contours;\n + - If there are multiple contours, all of them must be either closed or open;\n + - if contours are closed, then they can be nested into each other, the level of nesting is not limited;\n + - contours can't overlap each other or self-intersect.\n + For two-dimensional contour on the non-planar surface is additional constraint: + all the contours must be closed.\n + Constructing operation by two-dimensional contours on non-planar surface it is necessary to specify the by the user + face of solid as generating. In this case, the generating data can be obtained + by the method of face MbFace::GetSurfaceCurvesData.\n + Constraints for three-dimensional contour:\n + - contours can't overlap each other or self-intersect.\n + When set a solid and a surface at the same time, we suppose that sweeping operation over solid along curve on surface + is done, and moving is according to surface normal. \n \~ + \ingroup Build_Parameters +*/ +// --- +class MATH_CLASS MbSweptData { + +private: + // \ru Данные о двумерных контурах на поверхности. \en Data about two-dimensional contours on the surface. + c3d::SurfaceSPtr surface; ///< \ru Поверхность. \en The surface. + c3d::PlaneContoursSPtrVector contours; ///< \ru Множество двумерных контуров. \en Set of two-dimensional contours. + // \ru Трехмерные контуры. \en Three-dimensional contours. + c3d::SpaceContoursSPtrVector contours3D; ///< \ru Множество трёхмерных контуров. \en Set of three-dimensional contours. + // \ru Тело. \en Solid. + c3d::SolidSPtr solid; ///< \ru Тело. \en A solid. + +public: + /// \ru Конструктор по умолчанию. \en Default constructor. + MbSweptData(); + /// \ru Конструктор копирования. \en Copy-constructor. + MbSweptData( const MbSweptData &, MbRegDuplicate * ireg = c3d_null ); + +public: + + /** \brief \ru Конструктор плоской образующей. + \en Constructor of planar swept. \~ + \details \ru Конструктор плоской образующей из одного контура. + \en Constructor of planar swept from one contour. \~ + \param[in] place - \ru Локальная система координат. + \en A local coordinate system. \~ + \param[in] contour - \ru Контур в параметрах заданной системы координат. Используется оригинал. + \en Contour in parameters of the given coordinate system. Used original. \~ + */ + MbSweptData( const MbPlacement3D & place, MbContour & contour ); + + /** \brief \ru Конструктор. + \en Constructor. \~ + \details \ru Конструктор по набору контуров на поверхности. + \en Constructor by a set of contours on a surface. \~ + \param[in] _surface - \ru Поверхность. Используется оригинал. + \en The surface. Used original. \~ + \param[in] _contours - \ru Набор контуров. Используются оригиналы. + \en A set of contours. Used originals. \~ + */ + MbSweptData( MbSurface & _surface, RPArray & _contours ); + + /** \brief \ru Конструктор. + \en Constructor. \~ + \details \ru Конструктор по набору контуров на поверхности. + \en Constructor by a set of contours on a surface. \~ + \param[in] _surface - \ru Поверхность. Используется оригинал. + \en The surface. Used original. \~ + \param[in] _contours - \ru Набор контуров. Используются оригиналы. + \en A set of contours. Used originals. \~ + */ + MbSweptData( MbSurface & _surface, c3d::PlaneContoursSPtrVector & _contours ); + + /** \brief \ru Конструктор. + \en Constructor. \~ + \details \ru Конструктор по кривой. + \en Constructor by a contour. \~ + \param[in] _contour3d - \ru Кривая. Используются оригиналы. + \en A curve. Used originals. \~ + */ + MbSweptData( MbCurve3D & _curve3d ); + + /** \brief \ru Конструктор. + \en Constructor. \~ + \details \ru Конструктор по контуру. + \en Constructor by a contour. \~ + \param[in] _contour3d - \ru Контур. Используются оригиналы. + \en A contour. Used originals. \~ + */ + MbSweptData( MbContour3D & _contour3d ); + + /** \brief \ru Конструктор. + \en Constructor. \~ + \details \ru Конструктор по набору пространственных контуров. + \en Constructor by a set of spatial contours. \~ + \param[in] _contours3d - \ru Набор контуров. Используются оригиналы. + \en A set of contours. Used originals. \~ + */ + MbSweptData( RPArray & _contours3d ); + + /** \brief \ru Конструктор. + \en Constructor. \~ + \details \ru Конструктор по набору пространственных контуров. + \en Constructor by a set of spatial contours. \~ + \param[in] _contours3d - \ru Набор контуров. Используются оригиналы. + \en A set of contours. Used originals. \~ + */ + MbSweptData( c3d::SpaceContoursSPtrVector & _contours3d ); + + /** \brief \ru Конструктор. + \en Constructor. \~ + \details \ru Конструктор по телу. + \en Constructor by a solid. \~ + \param[in] _solid - \ru Тело. Используется оригинал объекта. + \en A solid. Used original of object. \~ + \param[in] _newMainName - \ru Новое главное имя для топологических элементов тела. + \en New main name for names of solid's topological elements. \~ + */ + MbSweptData( MbSolid & _solid, const MbSNameMaker * newNameMaker = c3d_null ); + + /** \brief \ru Конструктор. + \en Constructor. \~ + \details \ru Конструктор смешанной образующей. + \en Constructor of mixed swept. \~ + \param[in] _surface - \ru Поверхность. Используется оригинал. + \en The surface. Used original. \~ + \param[in] _contours - \ru Набор двумерных контуров в параметрах заданной поверхности. Используются оригиналы. + \en Set of two-dimensional contours in the parameters of the given surface. Used originals. \~ + \param[in] _contours3d - \ru Набор трехмерных контуров. Используются оригиналы. + \en A set of three-dimensional contours. Used originals. \~ + \param[in] _solid - \ru Тело. Используется оригинал объекта. + \en A solid. Used original of object. \~ + */ + MbSweptData( MbSurface * _surface, RPArray & _contours, + RPArray & _contours3d, MbSolid * _solid ); + + /// \ru Деструктор. \en Destructor. + ~MbSweptData(); + +public: + /** \brief \ru Добавить данные. + \en Add data. \~ + \details \ru Добавить данные о контурах на поверхности. + \en Add data about contours to the surface. \~ + \param[in] _surface - \ru Поверхность. Добавляется оригинал объекта. + \en The surface. Added original of the object. \~ + \param[in] _contours - \ru Набор контуров. Добавляются оригиналы. + \en A set of contours. Originals are added. \~ + */ + bool AddData( MbSurface & _surface, const RPArray & _contours ); + + /** \brief \ru Добавить данные. + \en Add data. \~ + \details \ru Добавить данные о контурах на поверхности. + \en Add data about contours to the surface. \~ + \param[in] _surface - \ru Поверхность. Добавляется оригинал объекта. + \en The surface. Added original of the object. \~ + \param[in] _contours - \ru Набор контуров. Добавляются оригиналы. + \en A set of contours. Originals are added. \~ + */ + bool AddData( MbSurface & _surface, c3d::PlaneContoursSPtrVector & _contours ); + + /** \brief \ru Количество всех кривых. + \en The count of all the curves. \~ + \details \ru Общее количество двумерных и трехмерных кривых. + \en The total count of two and three-dimensional curves. \~ + */ + size_t CurvesCount() const; + + /** \brief \ru Получить кривую по индексу. + \en Get the curve by the index. \~ + \details \ru Получить кривую из множества кривых на поверхности и трехмерных кривых. + \en Get the curve from set of curves on the surface and three-dimensional curves. \~ + \param[in] i - \ru Номер кривой в пределах от 0 до CurvesCount(). + \en The index of curve from 0 to CurvesCount(). \~ + \return \ru Кривую на поверхности или трехмерную кривую. + \en Curve on the surface or three-dimensional curve. \~ + */ + SPtr GetCurve3D( size_t i ) const; + + /// \ru Есть данные о двумерных кривых на поверхности? \en Is there data of two-dimensional curves on the surface? + bool IsSurfaceCurvesData() const { return ((surface != c3d_null) && !contours.empty()); } + /// \ru Есть данные о пространственных кривых? \en Is there data of spatial curves? + bool IsSpaceCurvesData() const { return !contours3D.empty(); } + /// \ru Есть данные о теле? \en Is there data about the solid? + bool IsSolidData() const { return (solid != c3d_null); } + + /// \ru Выдать поверхность. \en Get the surface. + const MbSurface * GetSurface() const { return surface; } + /// \ru Выдать поверхность для изменения. \en Get the surface for editing. + MbSurface * SetSurface() { return surface; } + + /// \ru Положить поверхность. \en Set a surface. + + /** \brief \ru Установить поверхность. + \en Set a surface. \~ + \details \ru Установить новую поверхность как носитель двумерных контуров или как целевую поверхность для направляющей. + \en Set surface carrier of two-dimensional contours or desired surface-carrier of guide curve. \~ + \param[in] surf - \ru Новая поверхность как носитель для двумерных контуров или целевая поверхность для направляющей. + \en Surface carrier of two-dimensional contours or desired surface-carrier of guide curve. \~ + */ + void SetSurface( const MbSurface & surf ) { surface = const_cast( &surf ); } + + /// \ru Выдать набор двумерных контуров. \en Get the set of two-dimensional contours. + const c3d::PlaneContoursSPtrVector & GetContours() const { return contours; } + /// \ru Выдать набор трехмерных контуров. \en Get the set of three-dimensional contours. + const c3d::SpaceContoursSPtrVector & GetContours3D() const { return contours3D; } + /// \ru Выдать тело. \en Get the solid. + const MbSolid * GetSolid() const { return solid; } + /// \ru Выдать тело для изменения. \en Get the solid for editing. + MbSolid * SetSolid() const { return solid; } + + /** \brief \ru Преобразовать объект. + \en Transform the object. \~ + \details \ru Преобразовать исходный объект согласно матрице c использованием регистратора. + \en Transform the initial object according to the matrix using the registrator. \~ + \param[in] matr - \ru Матрица преобразования. + \en A transformation matrix. \~ + \param[in] iReg - \ru Регистратор. + \en Registrator. \~ + */ + void Transform( const MbMatrix3D & matr, MbRegTransform * iReg = c3d_null ); + /** \brief \ru Сдвинуть объект. + \en Move the object. \~ + \details \ru Сдвинуть геометрический объект вдоль вектора с использованием регистратора. + \en Move a geometric object along the vector using the registrator. \~ + \param[in] to - \ru Вектор сдвига. + \en Translation vector. \~ + \param[in] iReg - \ru Регистратор. + \en Registrator. \~ + */ + void Move ( const MbVector3D & to, MbRegTransform * iReg = c3d_null ); + /** \brief \ru Повернуть объект. + \en Rotate the object. \~ + \details \ru Повернуть объект вокруг оси на заданный угол с использованием регистратора. + \en Rotate an object about the axis by the given angle using the registrator. \~ + \param[in] axis - \ru Ось поворота. + \en The rotation axis. \~ + \param[in] angle - \ru Угол поворота. + \en The rotation angle. \~ + \param[in] iReg - \ru Регистратор. + \en Registrator. \~ + */ + void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * iReg = c3d_null ); + /** \brief \ru Определить, являются ли объекты равными. + \en Determine whether the objects are equal. \~ + \details \ru Определить, являются ли объекты равными с заданной точностью. + \en Determine whether the objects are equal with defined accuracy. \~ + \param[in] other - \ru Объект для сравнения. + \en Object for comparison. \~ + \return \ru Подобны ли объекты. + \en Whether the objects are similar. \~ + */ + bool IsSame( const MbSweptData & other, double accuracy ) const; + /** \brief \ru Определить, являются ли объекты подобными. + \en Determine whether the objects are similar. \~ + \details \ru Подобный объект можно инициализировать по данным подобного ему объекта. + \en Similar object can be initialized by data of object which is similar to it. \~ + \param[in] other - \ru Объект для сравнения. + \en Object for comparison. \~ + \return \ru Подобны ли объекты. + \en Whether the objects are similar. \~ + */ + bool IsSimilar( const MbSweptData & other ) const; + /** \brief \ru Сделать объекты равным. + \en Make objects equal. \~ + \details \ru Равными можно сделать только подобные объекты. + \en It is possible to make equal only similar objects. \~ + \param[in] init - \ru Объект для инициализации. + \en Object for initialization. \~ + \return \ru Сделан ли объект равным присланному. + \en Whether the object is made equal to the given one. \~ + */ + bool SetEqual ( const MbSweptData & other ); + + /** \brief \ru Замкнуты ли все контуры. + \en Whether all contours are closed. \~ + \details \ru Замкнуты ли все контуры. \n + \en Whether all contours are closed. \n \~ + \return \ru Возвращает true, если все контуры замкнуты. + \en Returns true if all contours are closed. \~ + */ + bool IsContoursClosed() const; + + /// \ru Проверить, что нет разрывов между сегментами поверхностных контуров. \en Check that there are no gaps between the segments of the surface contours. + bool CheckSurfaceContourConnection( double eps ) const; + /// \ru Проверить, что нет разрывов между сегментами пространственных контуров. \en Check that there are no gaps between the segments of the spatial contours. + bool CheckSpaceContourConnection( double eps ) const; + +private: + // \ru Объявление оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration of the assignment operator without implementation to prevent an assignment by default. + MbSweptData & operator = ( const MbSweptData & ); + +KNOWN_OBJECTS_RW_REF_OPERATORS( MbSweptData ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Cпособ выдавливания/вращения. + \en Method of extrusion/rotation. \~ + \details \ru Cпособ построения выдавливания/вращения. \n + \en Method of extrusion/rotation constructing. \n \~ + \ingroup Build_Parameters +*/ +// --- +enum MbSweptWay { + sw_scalarValue = -2, ///< \ru Выдавить на заданную глубину / вращать на заданный угол. \en Extrude to a given depth / rotate by a given angle. + sw_shell = -1, ///< \ru До ближайшего объекта (тела). \en To the nearest object (solid). + sw_surface = 0, ///< \ru До поверхности. \en To the surface. +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Параметры вращения и выдавливания. + \en Parameters of rotation and extrusion. \~ + \details \ru Данные о построении операции вращения или выдавливания + в одном из направлений: прямом или обратном. + \en Data about construction of rotation and extrusion + in one of directions: forward or backward. \~ + \ingroup Build_Parameters +*/ +// --- +class MATH_CLASS MbSweptSide { +public: + MbSweptWay way; ///< \ru Способ выдавливания/вращения. \en Method of extrusion/rotation. + double scalarValue; ///< \ru Угол вращения/глубина выдавливания. \en Angle of rotation/depth of extrusion. + + /** \brief \ru Расстояние от поверхности. + \en Distance from the surface. \~ + \details \ru Расстояние от поверхности, до которой строим операцию. + Задавать при построении операции до поверхности (way = sw_surface). + distance < 0.0 при построении операции за поверхность, + distance > 0.0 при построении операции до поверхности. + \en Distance from the surface to construct up to. + Set when constructing operation to the surface (way = sw_surface). + distance < 0.0 when constructing operation back of surface, + distance > 0.0 when constructing operation front of surface. \~ + */ + double distance; + + /** \brief \ru Угол уклона. + \en Draft angle. \~ + \details \ru Угол уклона при выдавливании.\n + Операцию выдавливания с уклоном можно построить только в случае плоской образующей. + \en Draft angle when extruding.\n + Extrusion operation with draft can be constructed in the case of planar swept. \~ + */ + double rake; + +protected: + /** \brief \ru Поверхность, до которой строим операцию. + \en The surface to construct up to. \~ + \details \ru Поверхность, до которой строим операцию.\n + Задавать при построении операции до поверхности (way = sw_surface). + \en The surface to construct up to.\n + Set when constructing operation to the surface (way = sw_surface). \~ + */ + c3d::SurfaceSPtr surface; + + /** \brief \ru Признак совпадения нормали поверхности с нормалью грани. + \en An attribute of coincidence between the surface normal and the face normal. \~ + \details \ru Признак совпадения нормали поверхности, до которой строим операцию, с нормалью грани.\n + Задавать при построении операции до поверхности (way = sw_surface).\n + Указывает положение оболочки-результата относительно поверхности. + Используется при построении массива операций до поверхности. + Если у всех элементов массива признак должен быть одинаковым, + то при построении исходной операции нужно задать признак равным orient_BOTH (направление не определено). + При построении признак будет определен, и его значение нужно использовать для построения остальных элементов массива. + \en An attribute of coincidence between the face normal and the normal of surface to which to create operation.\n + Set when constructing operation to the surface (way = sw_surface).\n + Specifies the position of shell-result relative to the surface. + Used when constructing the array of operations to the surface. + If attributes of all the elements of array must be the same, + then when constructing of the original operation need to set attribute which is equal to orient_BOTH (the direction is not determined). + When constructing the attribute is determined and its value should be used for the construction of other elements of the array. \~ + */ + MbeSenseValue sameSense; + + +public: + /** \brief \ru Конструктор по умолчанию. + \en Default constructor. \~ + \details \ru Задает параметры операции со способом "на заданную глубину". + Для построения операции параметры нужно изменить, + например, указать глубину выдавливания (угол вращения). + \en Sets parameters of the operation with the method "to a given depth". + For construction of operation the parameters need to change, + for example: specify the depth of extrusion (angle of rotation). \~ + */ + MbSweptSide() + : way ( sw_scalarValue ) + , scalarValue( 0.0 ) + , distance ( 0.0 ) + , rake ( 0.0 ) + , surface ( c3d_null ) + , sameSense ( orient_BOTH ) + {} + + /** \brief \ru Конструктор. + \en Constructor. \~ + \details \ru Конструктор на угол вращения\глубину выдавливания. + \en Constructor by angle of rotation\depth of extrusion. \~ + \param[in] sVal - \ru Угол вращения\глубина выдавливания. + \en Angle of rotation\depth of extrusion. \~ + */ + MbSweptSide( double sVal ) + : way ( sw_scalarValue ) + , scalarValue( sVal ) + , distance ( 0.0 ) + , rake ( 0.0 ) + , surface ( c3d_null ) + , sameSense ( orient_BOTH ) + {} + + /** \brief \ru Конструктор до поверхности. + \en Constructor to the surface. \~ + \details \ru Конструктор до поверхности. Расстояние от поверхности задается равным 0.0. + \en Constructor to the surface. Distance from the surface is set to 0.0. \~ + \param[in] surf - \ru Поверхность, до которой строится операция. + \en The surface to construct up to. \~ + */ + MbSweptSide( const MbSurface * surf ); + + /** \brief \ru Конструктор до поверхности. + \en Constructor to the surface. \~ + \details \ru Конструктор до поверхности. Для элемента массива. + \en Constructor to the surface. For array element. \~ + \param[in] surf - \ru Поверхность, до которой строится операция. + \en The surface to construct up to. \~ + \param[in] sense - \ru Признак совпадения нормали заданной поверхности с нормалью грани. + Указывает, по какую сторону от поверхности должна находиться построенная оболочка. + \en An attribute of coincidence between the normal of given surface and the face normal. + Indicates at which side of the surface the must be located constructed shell. \~ + */ + MbSweptSide( const MbSurface * surf, MbeSenseValue sense ); + + /** \brief \ru Конструктор копирования. + \en Copy-constructor. \~ + \details \ru Конструктор копирования данных с использованием той же поверхности. + \en Copy-constructor of data with using of the same surface. \~ + \param[in] other - \ru Исходные параметры. + \en Initial parameters. \~ + */ + MbSweptSide( const MbSweptSide & other ); + + /** \brief \ru Конструктор копирования с регистратором. + \en Copy-constructor with the registrator. \~ + \details \ru Конструктор копирования с регистратором. Поверхность копируется. + \en Copy-constructor with the registrator. Surface is copying. \~ + \param[in] other - \ru Исходные параметры. + \en Initial parameters. \~ + */ + MbSweptSide( const MbSweptSide & other, MbRegDuplicate * ireg ); + + /// \ru Деструктор. \en Destructor. + virtual ~MbSweptSide(); + +public: + /// \ru Оператор присваивания данных с использованием той же поверхности. \en Assignment operator of data with using of the same surface. + MbSweptSide & operator = ( const MbSweptSide & other ); + + /// \ru Получить поверхность. \en Get the surface. + const MbSurface * GetSurface() const { return surface; } + /// \ru Получить поверхность. \en Get the surface. + MbSurface * SetSurface() { return surface; } + /// \ru Заменить поверхность. \en Replace surface. + void SetSurface( const MbSurface * s ); + + /// \ru Получить признак совпадения нормали поверхности с нормалью грани. \en Get the attribute of coincidence between the surface normal and the face normal. + MbeSenseValue GetSameSense() const { return sameSense; } + /// \ru Установить признак совпадения нормали поверхности с нормалью грани. \en Set the attribute of coincidence between the surface normal and the face normal. + void SetSameSense( MbeSenseValue sense ) { sameSense = sense; } + /// \ru Доступ к признаку совпадения нормали поверхности с нормалью грани. \en Access to the attribute of coincidence between the surface normal and the face normal. + MbeSenseValue & SetSameSense() { return sameSense; } + + /// \ru Являются ли объекты равными? \en Determine whether an object is equal? + bool IsSame( const MbSweptSide & other, double accuracy ) const + { + if ( (other.way == way) && (other.sameSense == sameSense) ) { + if ( (::fabs(other.scalarValue - scalarValue) < accuracy) && + (::fabs(other.distance - distance) < accuracy) && + (::fabs(other.rake - rake) < accuracy) ) + { + bool isSurf1 = (surface != c3d_null); + bool isSurf2 = (other.surface != c3d_null); + + if ( isSurf1 == isSurf2 ) { + if ( isSurf1 && isSurf2 ) { + if ( !other.surface->IsSame( *surface, accuracy ) ) + return false; + } + return true; + } + } + } + + return false; + } +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Параметры формообразующей операции. + \en The parameters of form-generating operation. \~ + \details \ru Параметры построения формообразующей операции + (например, выдавливания, вращения, кинематической, по сечениям). \n + \en The construction parameters of form-generating operation. + (for example: extrusion, rotation, sweeping, loft). \n \~ + \ingroup Build_Parameters +*/ +// --- +struct MATH_CLASS SweptValues { +public: + + /** \brief \ru Толщина стенки (величина эквидистанты) в прямом направлении. + \en Wall thickness (offset distance) along the forward direction. \~ + \details \ru Толщина стенки (величина эквидистанты) в положительном направлении нормали объекта + (грани, поверхности, плоскости кривой). + \en Wall thickness (offset distance) along the positive direction of the normal of an object + (face, surface, plane of the curve). \~ + */ + double thickness1; + + /** \brief \ru Толщина стенки (величина эквидистанты) в обратном направлении. + \en Wall thickness (offset distance) along the backward direction. \~ + \details \ru Толщина стенки (величина эквидистанты) в отрицательном направлении нормали объекта + (грани, поверхности, плоскости кривой). + \en Wall thickness (offset distance) along the negative direction of the normal of an object + (face, surface, plane of the curve). \~ + */ + double thickness2; + + bool shellClosed; ///< \ru Замкнутость создаваемой оболочки. \en Closedness of created shell. + +private: + bool checkSelfInt; ///< \ru Флаг проверки самопересечений (вычислительно "тяжелыми" методами). \en Flag for checking of self-intersection (computationally by "heavy" methods). + MbMergingFlags mergeFlags; ///< \ru Управляющие флаги слияния элементов оболочки. \en Control flags of shell items merging. + +public: + /// \ru Конструктор по умолчанию. \en Default constructor. + SweptValues() + : thickness1 ( 0.0 ) + , thickness2 ( 0.0 ) + , shellClosed ( true ) + , checkSelfInt( true ) + , mergeFlags ( ) + {} + /// \ru Конструктор по толщинам и замкнутости. \en Constructor by thicknesses and closedness. + SweptValues( double t1, double t2, bool c = true ) + : thickness1 ( t1 ) + , thickness2 ( t2 ) + , shellClosed ( c ) + , checkSelfInt( true ) + , mergeFlags ( ) + {} + /// \ru Конструктор копирования. \en Copy-constructor. + SweptValues( const SweptValues & other ) + : thickness1 ( other.thickness1 ) + , thickness2 ( other.thickness2 ) + , shellClosed ( other.shellClosed ) + , checkSelfInt( other.checkSelfInt ) + , mergeFlags ( other.mergeFlags ) + {} + /// \ru Деструктор. \en Destructor. + virtual ~SweptValues() {} + +public: + /// \ru Это параметры выдавливания? \en This is extrusion parameters? + virtual bool IsExtrusionValues() const { return false; } + /// \ru Это параметры вращения? \en This is rotation parameters? + virtual bool IsRevolutionValues() const { return false; } + /// \ru Это параметры кинематики? \en This is "evolution" parameters? + virtual bool IsEvolutionValues() const { return false; } + /// \ru Это параметры операции по сечениям? \en This is "lofted" parameters? + virtual bool IsLoftedValues() const { return false; } + /// \ru Это параметры операции ребра жесткости? \en This is "rib" parameters? + virtual bool IsRibValues() const { return false; } + + /// \ru Определить, являются ли объекты равными? \en Determine whether an object is equal? + virtual bool IsSame( const SweptValues & other, double accuracy ) const; + /// \ru Определить, являются ли объекты подобными. \en Determine whether the objects are similar. \~ + virtual bool IsSimilar( const MbSweptData & other ) const; + /// \ru Сделать объекты равным. \en Make objects equal. \~ + virtual bool SetEqual ( const MbSweptData & other ); + +public: + /// \ru Функция копирования данных. \en Function of copying data. + void Init( const SweptValues & other ) { + thickness1 = other.thickness1; + thickness2 = other.thickness2; + shellClosed = other.shellClosed; + checkSelfInt = other.checkSelfInt; + mergeFlags = other.mergeFlags; + } + + /// \ru Получить состояние замкнутости. \en Get the closedness state. + bool IsShellClosed() const { return shellClosed; } + /// \ru Установит состояние замкнутости. \en Set the closedness state. + void SetShellClosed( bool cl ) { shellClosed = cl; } + + /// \ru Получить состояние флага проверки самопересечений. \en Get the state of flag of checking self-intersection. + bool CheckSelfInt() const { return checkSelfInt; } + /// \ru Установить состояние флага проверки самопересечений. \en Set the state of flag of checking self-intersection. + void SetCheckSelfInt( bool c ) { checkSelfInt = c; } + + /// \ru Сливать ли подобные грани. \en Whether to merge similar faces. + bool MergeFaces() const { return mergeFlags.MergeFaces(); } + /// \ru Сливать подобные грани. \en Whether to merge similar faces. + void SetMergingFaces( bool mf ) { mergeFlags.SetMergingFaces( mf ); } + + /// \ru Сливать ли подобные ребра. \en Whether to merge similar edges. + bool MergeEdges() const { return mergeFlags.MergeEdges(); } + /// \ru Сливать подобные ребра. \en Whether to merge similar edges. + void SetMergingEdges( bool me ) { mergeFlags.SetMergingEdges( me ); } + + /// \ru Получить управляющие флаги слияния элементов оболочки. \en Get control flags of shell items merging. + const MbMergingFlags & MergingFlags() const { return mergeFlags; } + /// \ru Установить управляющие флаги слияния элементов оболочки. \en Set control flags of shell items merging. + void SetMergingFlags( const MbMergingFlags & f ) { mergeFlags = f; } + + /// \ru Оператор присваивания. \en Assignment operator. + void operator = ( const SweptValues & other ) { Init( other ); } + + KNOWN_OBJECTS_RW_REF_OPERATORS( SweptValues ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Параметры выдавливания или вращения. + \en The parameters of extrusion or rotation. \~ + \details \ru Параметры выдавливания или вращения кривых с опциями по направлениям. \n + В операции выдавливания прямым направлением считается направление, сонаправленное + с вектором выдавливания, а обратным - противоположное направление. + В операции вращения прямое направлением определяется по оси вращения с помощью правила правой руки. + \en The parameters of extrusion or rotation of curves with options along the directions. \n + In the extrusion operations the forward direction is the direction collinear + with the vector of extrusion and back - the opposite direction. + In the rotation operation the forward direction is determined by the axis of rotation using the right hand rule. \~ + \ingroup Build_Parameters +*/ +// --- +class MATH_CLASS SweptValuesAndSides: public SweptValues { +public: + MbSweptSide side1; ///< \ru Параметры выдавливания/вращения в прямом направлении. \en The parameters of extrusion/rotation along the forward direction. + MbSweptSide side2; ///< \ru Параметры выдавливания/вращения в обратном направлении. \en The parameters of extrusion/rotation along the backward direction. + +public: + /** \brief \ru Конструктор по умолчанию. + \en Default constructor. \~ + \details \ru Конструктор параметров для построения замкнутой оболочки без тонкой стенки. + Способ построение в обоих направлениях - на заданную глубину, равную 0.0. + \en Constructor of parameters for construction of closed shell without the thin wall. + Method of construction in both directions - to a given depth equal to 0.0. \~ + */ + SweptValuesAndSides() + : SweptValues() + , side1 () + , side2 () + {} + /** \brief \ru Конструктор по углам вращения или глубинам выдавливания. + \en Constructor by rotation angles and extrusion depths. \~ + \details \ru Конструктор параметров для построения замкнутой оболочки без тонкой стенки. + Способ построение в обоих направлениях - на заданную глубину. + \en Constructor of parameters for construction of closed shell without the thin wall. + Method of construction in both directions - to a given depth. \~ + \param[in] scalarValue1 - \ru Угол вращения\глубина выдавливания в прямом направлении. + \en Angle of rotation\depth of extrusion along the forward direction. \~ + \param[in] scalarValue2 - \ru Угол вращения\глубина выдавливания в обратном направлении. + \en Angle of rotation\depth of extrusion along the backward direction. \~ + */ + SweptValuesAndSides( double scalarValue1, double scalarValue2 ) + : SweptValues( ) + , side1 ( scalarValue1 ) + , side2 ( scalarValue2 ) + {} + /// \ru Конструктор копирования данных на тех же поверхностях. \en Copy-constructor of data on the same surfaces. + SweptValuesAndSides( const SweptValuesAndSides & other ) + : SweptValues( other ) + , side1 ( other.side1 ) + , side2 ( other.side2 ) + {} + /// \ru Конструктор полного копирования данных. \en Constructor of complete copying of data. + SweptValuesAndSides( const SweptValuesAndSides & other, MbRegDuplicate * ireg ) + : SweptValues( other ) + , side1 ( other.side1, ireg ) + , side2 ( other.side2, ireg ) + {} + /// \ru Деструктор. \en Destructor. + virtual ~SweptValuesAndSides(); + +public: + // \ru Являются ли объекты равными? \en Determine whether an object is equal? + virtual bool IsSame( const SweptValues & other, double accuracy ) const + { + const SweptValuesAndSides * obj = dynamic_cast( &other ); + if ( obj != c3d_null ) { + if ( side1.IsSame( obj->side1, accuracy ) && side2.IsSame( obj->side2, accuracy ) ) { + if ( obj->SweptValues::IsSame( *this, accuracy ) ) { + return true; + } + } + } + return false; + } + +public: + /// \ru Оператор присваивания данных на тех же поверхностях. \en Assignment operator of data copying on the same surfaces. + void operator = ( const SweptValuesAndSides & other ) { + SweptValues::Init( other ); + side1 = other.side1; + side2 = other.side2; + } + + /** \brief \ru Преобразовать согласно матрице. + \en Transform according to the matrix. \~ + \details \ru Преобразовать согласно матрице поверхности в прямом и обратном направлении. + \en Transform according to the matrix of surface in the forward and backward direction. \~ + \param[in] matr - \ru Матрица преобразования. + \en A transformation matrix. \~ + \param[in] iReg - \ru Регистратор. + \en Registrator. \~ + */ + void Transform( const MbMatrix3D & matr, MbRegTransform * iReg = c3d_null ); + /** \brief \ru Сдвинуть вдоль вектора. + \en Move along a vector. \~ + \details \ru Сдвинуть вдоль вектора поверхности в прямом и обратном направлении. + \en Move along the vector of the surface along the forward and backward direction. \~ + \param[in] to - \ru Вектор сдвига. + \en Translation vector. \~ + \param[in] iReg - \ru Регистратор. + \en Registrator. \~ + */ + void Move ( const MbVector3D & to, MbRegTransform * iReg = c3d_null ); + /** \brief \ru Повернуть вокруг оси. + \en Rotate around an axis. \~ + \details \ru Повернуть вокруг оси поверхности в прямом и обратном направлении. + \en Rotate around the axis of the surface along the forward and backward direction. \~ + \param[in] axis - \ru Ось поворота. + \en The rotation axis. \~ + \param[in] angle - \ru Угол поворота. + \en The rotation angle. \~ + \param[in] iReg - \ru Регистратор. + \en Registrator. \~ + */ + void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * iReg = c3d_null ); + + /** \brief \ru Сделать копии поверхностей. + \en Make copies of surfaces. \~ + \details \ru Если в каком-либо направлении задана поверхность, заменить эту поверхность на ее копию. + \en If the surface is given in any direction, then replace the surface with its copy. \~ + \param[in] ireg - \ru Регистратор копий. + \en Registrator of copies. \~ + \return \ru true, если хотя бы одна поверхность имелась и сдублирована. + \en True if at least one surface is had and copied. \~ + */ + bool DuplicateSurfaces( MbRegDuplicate * ireg = c3d_null ); + +public: + /// \ru Получить поверхность в положительном направлении. \en Get the surface along the positive direction. + const MbSurface * GetSurface1() const { return side1.GetSurface(); } + /// \ru Получить поверхность в отрицательном направлении. \en Get the surface along the negative direction. + const MbSurface * GetSurface2() const { return side2.GetSurface(); } + /// \ru Получить поверхность в положительном направлении. \en Get the surface along the positive direction. + MbSurface * SetSurface1() { return side1.SetSurface(); } + /// \ru Получить поверхность в отрицательном направлении. \en Get the surface along the negative direction. + MbSurface * SetSurface2() { return side2.SetSurface(); } + /// \ru Установить поверхность в положительном направлении. \en Set the surface along the positive direction. + void SetSurface1( const MbSurface * s ) { side1.SetSurface( s ); } + /// \ru Установить поверхность в отрицательном направлении. \en Set the surface along the negative direction. + void SetSurface2( const MbSurface * s ) { side2.SetSurface( s ); } + /// \ru Поменять поверхности местами. \en Swap surfaces. + void ExchangeSurfaces(); +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Параметры операции выдавливания. + \en The parameters of extrusion operation. \~ + \details \ru Параметры операции выдавливания кривых с опциями по направлениям. \n + \en The parameters of extrusion operation of curves with options along directions. \n \~ + \ingroup Build_Parameters +*/ +// --- +class MATH_CLASS ExtrusionValues : public SweptValuesAndSides { +public: + + /** \brief \ru Конструктор по умолчанию. + \en Default constructor. \~ + \details \ru Конструктор параметров выдавливания для построения замкнутой оболочки без тонкой стенки + в прямом направлении на величину, равную 10.0. + \en Constructor of extrusion parameters for construction of closed shell without the thin wall. + along the forward direction by value 10.0. \~ + */ + ExtrusionValues() + : SweptValuesAndSides( 10., 0. ) {} + /** \brief \ru Конструктор по глубинам выдавливания. + \en Constructor by extrusion depths. \~ + \details \ru Конструктор параметров выдавливания для построения замкнутой оболочки без тонкой стенки. + Способ построение в обоих направлениях - на заданную глубину. + \en Constructor of extrusion parameters for construction of closed shell without the thin wall. + Method of construction in both directions - to a given depth. \~ + \param[in] scalarValue1 - \ru Глубина выдавливания в прямом направлении. + \en Depth of extrusion along the forward direction. \~ + \param[in] scalarValue2 - \ru Глубина выдавливания в обратном направлении. + \en Depth of extrusion along the backward direction. \~ + */ + ExtrusionValues( double scalarValue1, double scalarValue2 ) + : SweptValuesAndSides( scalarValue1, scalarValue2 ) {} + /// \ru Конструктор копирования, на тех же поверхностях. \en Copy-constructor on the same surfaces. + ExtrusionValues( const ExtrusionValues & other ) + : SweptValuesAndSides( other ) {} + /// \ru Конструктор копирования. \en Copy-constructor. + ExtrusionValues( const ExtrusionValues & other, MbRegDuplicate * ireg ) + : SweptValuesAndSides( other, ireg ) {} + /// \ru Деструктор. \en Destructor. + virtual ~ExtrusionValues(); + +public: + // \ru Это параметры выдавливания? \en This is extrusion parameters? + virtual bool IsExtrusionValues() const { return true; } + + // \ru Являются ли объекты равными? \en Determine whether an object is equal? + virtual bool IsSame( const SweptValues & other, double accuracy ) const + { + const ExtrusionValues * obj = dynamic_cast( &other ); + if ( obj != c3d_null ) { + if ( obj->SweptValuesAndSides::IsSame( *this, accuracy ) ) + return true; + } + return false; + } + +public: + /// \ru Оператор присваивания, на тех же поверхностях. \en Assignment operator on the same surfaces. + ExtrusionValues & operator = ( const ExtrusionValues & other ) { + *static_cast(this) = *static_cast(&other); + return *this; + } + + KNOWN_OBJECTS_RW_REF_OPERATORS( ExtrusionValues ) // \ru Для работы со ссылками и объектами класса \en For treatment of references and objects of the class +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Параметры операции вращения. + \en The parameters of revolution operation. \~ + \details \ru Параметры операции вращения кривых с опциями по направлениям. \n + \en The parameters of revolution operation of curves with options along directions. \n \~ + \ingroup Build_Parameters +*/ +// --- +class MATH_CLASS RevolutionValues : public SweptValuesAndSides { +public: + /** \brief \ru Форма топологии. + \en Topology shape. \~ + \details \ru Форма топологии: 0 - тело типа сферы, 1 - тело типа тора.\n + Если образующая - не замкнутая плоская кривая, и ось вращения лежит в плоскости кривой, + то возможно построение тела вращения с топологией типа сферы. В этом случае образующая достраивается до оси вращения. + \en Topology shape: 0 - sphere, 1 - torus.\n + If swept is non-closed planar curve and axis of rotation lies on the curve plane, + then is possible to construct revolution solids with the topology of sphere type. In this case the swept is being updated to the rotation axis. +I \~ */ + int shape; + +public: + /** \brief \ru Конструктор по умолчанию. + \en Default constructor. \~ + \details \ru Конструктор параметров вращения для построения замкнутой оболочки типа тора + без тонкой стенки в прямом направлении на полный оборот. + \en Constructor of revolution parameters for construction of closed shell of torus type + without thin wall along the forward direction at full turn. \~ + */ + RevolutionValues() + : SweptValuesAndSides( M_PI, 0. ) + , shape( 1 ) + {} + /** \brief \ru Конструктор по углам вращения. + \en Constructor by revolution angles. \~ + \details \ru Конструктор параметров вращения для построения замкнутой оболочки без тонкой стенки. + Способ построение в обоих направлениях - на заданную глубину (заданный угол). + \en Constructor of revolution parameters for construction of closed shell without the thin wall. + Method of construction in both directions - to a given depth (given angle). \~ + \param[in] scalarValue1 - \ru Угол вращение в прямом направлении. + \en Revolution angle along the forward direction. \~ + \param[in] scalarValue2 - \ru Угол вращения в обратном направлении. + \en Revolution angle along the backward direction. \~ + \param[in] s - \ru Форма топологии. + \en Topology shape. \~ + */ + RevolutionValues( double scalarValue1, double scalarValue2, int s ) + : SweptValuesAndSides( scalarValue1, scalarValue2 ) + , shape( s ) + {} + /// \ru Конструктор копирования, на тех же поверхностях. \en Copy-constructor on the same surfaces. + RevolutionValues( const RevolutionValues & other ) + : SweptValuesAndSides( other ) + , shape( other.shape ) + {} + /// \ru Конструктор копирования. \en Copy-constructor. + RevolutionValues( const RevolutionValues & other, MbRegDuplicate * ireg ) + : SweptValuesAndSides( other, ireg ) + , shape( other.shape ) + {} + /// \ru Деструктор. \en Destructor. + virtual ~RevolutionValues(); + +public: + // \ru Это параметры вращения? \en This is rotation parameters? + virtual bool IsRevolutionValues() const { return true; } + + // \ru Являются ли объекты равными? \en Determine whether an object is equal? + virtual bool IsSame( const SweptValues & other, double accuracy ) const + { + const RevolutionValues * obj = dynamic_cast( &other ); + if ( obj != c3d_null ) { + if ( obj->shape == shape ) { + if ( obj->SweptValuesAndSides::IsSame( *this, accuracy ) ) + return true; + } + } + return false; + } + +public: + /// \ru Оператор присваивания, на тех же поверхностях. \en Assignment operator on the same surfaces. + RevolutionValues & operator = ( const RevolutionValues & other ) { + *static_cast(this) = *static_cast(&other); + shape = other.shape; + return *this; + } + + KNOWN_OBJECTS_RW_REF_OPERATORS( RevolutionValues ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Параметры кинематической операции. + \en Parameters of the sweeping operation. \~ + \details \ru Параметры операции движения образующей по направляющей кривой. \n + \en The operation parameters of moving the generating curve along the spine curve. \n \~ + \ingroup Build_Parameters +*/ +// --- +struct MATH_CLASS EvolutionValues : public SweptValues { + + /// \ru Способы переноса образующего объекта вдоль направляющей. \en Moving method of generating object along the spine curve. + enum ModesList { + eom_Parallel = 0x00, // 00000 ///< \ru Образующая переносится параллельно самой себе. \en Generating curve is moved parallel to itself. + eom_KeepingAngle = 0x01, // 00001 ///< \ru Образующая при переносе сохраняет исходный угол с направляющей. \en Generating curve when moving preserves initial angle with spine. + eom_Orthogonal = 0x02, // 00010 ///< \ru Плоскость образующей выставляется и сохраняется ортогональной направляющей. \en Plane of generating curve is set and saved as orthogonal to spine. + eom_BySurfaceNormal = 0x04, // 00100 ///< \ru Образующая переносится согласованно с нормалью к поверхности. \en Generating object is moved according to surface normal. + }; + +protected: + /** \brief \ru Способ переноса образующего контура вдоль направляющей. + \en Moving method of generating contour along the spine curve. \~ + \details \ru Способ переноса образующего контура вдоль направляющей: \n + parallel <= 0 - Образующая переносится параллельно самой себе; \n + parallel == 1 - Образующая при переносе сохраняет исходный угол с направляющей; \n + parallel == 2 - Плоскость образующей выставляется и сохраняется ортогональной направляющей. \n + parallel > 3 - Образующая переносится согласованно с нормалью к поверхности. \n + \en Moving method of generating contour along the spine curve: \n + parallel <= 0 - Generating curve is moved parallel to itself; \n + parallel == 1 - Generating curve when moving preserves initial angle with spine; \n + parallel == 2 - Plane of generating curve is set and saved as orthogonal to spine. \n + parallel > 3 - Generating object is moved according to surface normal. \n \~ + */ + int mode; +public: + // \ru Данные о функциях изменения образующих кривых вдоль направляющей кривой (могут быть c3d_null). \en Data about changes of generating curves along the guide curve (can be c3d_null). + double range; ///< \ru Эквидистантное смещение точек образующей кривой в конце траектории. \en The offset range of generating curve on the end of spine curve. + SPtr scaling; ///< \ru Функция масштабирования образующей кривой. \en The function of curve scale. + SPtr winding; ///< \ru Функция вращения образующей кривой. \en The function of curve rotation. + c3d::ConstSurfaceSPtr surface; ///< \ru Поверхность для управления направляющей кривой MbSpine. \en The surface for guide curve control (for MbSpine). + +public: + + /** \brief \ru Конструктор по умолчанию. + \en Default constructor. \~ + \details \ru Конструктор параметров кинематической операции для построения замкнутой оболочки + без тонкой стенки с сохранением угла наклона. + \en Constructor of sweeping operation parameters for construction of closed shell + without the thin wall with keeping the angle inclination. \~ + */ + EvolutionValues() + : SweptValues( ) + , mode ( eom_KeepingAngle ) + , range ( 0.0 ) + , scaling ( c3d_null ) + , winding ( c3d_null ) + , surface ( c3d_null ) + {} + /// \ru Конструктор копирования. \en Copy-constructor. + EvolutionValues( const EvolutionValues & other ); + /// \ru Деструктор. \en Destructor. + virtual ~EvolutionValues(); + +public: + // \ru Это параметры кинематики? \en This is "evolution" parameters? + virtual bool IsEvolutionValues() const { return true; } + + // \ru Являются ли объекты равными? \en Determine whether an object is equal? + virtual bool IsSame( const SweptValues & other, double accuracy ) const; + // \ru Определить, являются ли объекты подобными. \en Determine whether the objects are similar. \~ + virtual bool IsSimilar( const SweptValues & other ) const; + // \ru Сделать объекты равным. \en Make objects equal. \~ + virtual bool SetEqual ( const SweptValues & other ); + + /// \ru Копировать значение режима операции. \en Copy operation mode. + void CopyMode( const EvolutionValues & ev ) { mode = ev.mode; } + /// \ru Получить значение режима операции. \en Get operation mode. + int GetMode() const { return mode; } + /// \ru Переносится ли образующая параллельно самой себе. \en Whether generating curve is moved parallel to itself. + bool IsParallel() const { return (mode < 1); } + /// \ru Сохраняет ли образующая при переносе исходный угол с направляющей. \en Whether generating curve when moving preserves initial angle with spine. + bool IsKeepingAngle() const { return !!(mode & eom_KeepingAngle); } + /// \ru Выставляется ли плоскость образующей ортогонально направляющей. \en Whether plane of generating curve is set and saved as orthogonal to spine. + bool IsOrthogonal() const { return !!(mode & eom_Orthogonal); } + /// \ru Переносится ли образующая согласованно с нормалью к поверхности. \en Whether generating object is moved according to surface normal. + bool BySurfaceNormal() const { return !!(mode & eom_BySurfaceNormal); } + + /// \ru Переносить образующая параллельно самой себе. \en Move generating curve parallel to itself. + void SetParallel() { mode = eom_Parallel; } + /// \ru Сохранять при переносе исходный угол между образующей и направляющей. \en Preserve initial angle between generatrix and spine when moving. + void SetKeepingAngle() { mode = eom_KeepingAngle; } + /// \ru Выставлять плоскость образующей ортогонально направляющей. \en Set and keep plane of generating curve as orthogonal to spine. + void SetOrthogonal() { mode = eom_Orthogonal; } + /// \ru Переносить образующую согласованно с нормалью к поверхности. \en Move generating object according to surface normal. + bool SetBySurfaceNormal( bool s ) + { + if ( !IsParallel() ) { + if ( s ) mode |= eom_BySurfaceNormal; + else mode ^= eom_BySurfaceNormal; + return true; + } + return false; + } + /// \ru Выдать функцию масштабирования образующей кривой. \en Get the function of curve scale. + double GetRange() const { return range; } + double & SetRange() { return range; } + void SetRange( double r ) { range = r; } + + /** \brief \ru Добавить данные. + \en Add data. \~ + \details \ru Добавить данные об изменении образующих контурах на поверхности вдоль образующей кривой. + \en Add data about changes of generating contours on the surface along the guide curve. \~ + \param[in] _scaling - \ru Масштабирование. + \en The scaling. \~ + \param[in] _winding - \ru Поворот. + \en The winding. \~ + */ + bool AddData( MbFunction & _scaling, MbFunction & _winding ); + + /// \ru Выдать функцию масштабирования образующей кривой. \en Get the function of curve scale. + const MbFunction * GetScaling() const { return scaling; } + MbFunction * SetScaling() { return scaling; } + + /// \ru Выдать функцию вращения образующей кривой. \en Get the function of curve rotation. + const MbFunction * GetWinding() const { return winding; } + MbFunction * SetWinding() { return winding; } + + ///< \ru Выдать поверхность для направляющей кривой MbSpine. \en Get the surface for guide curve MbSpine. + const MbSurface * GetSurface() const { return surface; } + void SetSurface( const MbSurface & surf ); + +public: + /// \ru Оператор присваивания. \en Assignment operator. + EvolutionValues & operator = ( const EvolutionValues & other ); + + KNOWN_OBJECTS_RW_REF_OPERATORS( EvolutionValues ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Параметры операции построения тела по плоским сечениям. + \en The operation parameters of constructing solid by lofted. \~ + \details \ru Параметры операции построения тела по плоским сечениям, заданных контурами. \n + \en The parameters of constructing operation by lofted which are given by contours. \n \~ + \ingroup Build_Parameters +*/ +// --- +struct MATH_CLASS LoftedValues : public SweptValues { +public: + bool closed; ///< \ru Замкнутость трубки сечений. \en Closedness of tube. + MbVector3D vector1; ///< \ru Производная в начале. \en The derivative at the start. + MbVector3D vector2; ///< \ru Производная в конце. \en The derivative at the end. + bool setNormal1; ///< \ru Установлена нормаль в начале, если начальное сечение точечное. \en The normal is set at the start, if first section is point curve. + bool setNormal2; ///< \ru Установлена нормаль в конце, если начальное сечение точечное. \en The normal is set at the end, if last section is point curve. + double derFactor1; ///< \ru Множитель величины производной при установке нормали в начале. По умолчанию 1.0. \en The modifier of the derivative when setting the normal at the beginning. The default is 1.0. + double derFactor2; ///< \ru Множитель величины производной при установке нормали в конце. По умолчанию 1.0. \en The modifier of the derivative when setting the normal at the end. The default is 1.0. + MbVector3D directSurf1; ///< \ru Ось направления движения поверхности в начале при установке нормали. \en Direction axis of the surface progress near the starting curve when setting the normal. + MbVector3D directSurf2; ///< \ru Ось направления движения поверхности в конце при установке нормали. \en Direction axis of the surface progress near the ending curve when setting the normal. + +public: + /** \brief \ru Конструктор по умолчанию. + \en Default constructor. \~ + \details \ru Конструктор параметров операции по сечениям для построения замкнутой оболочки без тонкой стенки. + \en Constructor of lofted operation parameters for construction of closed shell without the thin wall. \~ + */ + LoftedValues() + : SweptValues ( ) + , closed ( false ) + , vector1 ( 0.0, 0.0, 0.0 ) + , vector2 ( 0.0, 0.0, 0.0 ) + , setNormal1 ( false ) + , setNormal2 ( false ) + , derFactor1 ( 1.0 ) + , derFactor2 ( 1.0 ) + , directSurf1 ( UNDEFINED_DBL, UNDEFINED_DBL, UNDEFINED_DBL ) + , directSurf2 ( UNDEFINED_DBL, UNDEFINED_DBL, UNDEFINED_DBL ) + {} + /// \ru Конструктор копирования. \en Copy-constructor. + LoftedValues( const LoftedValues & other ) + : SweptValues ( other ) + , closed ( other.closed ) + , vector1 ( other.vector1 ) + , vector2 ( other.vector2 ) + , setNormal1 ( other.setNormal1 ) + , setNormal2 ( other.setNormal2 ) + , derFactor1 ( other.derFactor1 ) + , derFactor2 ( other.derFactor2 ) + , directSurf1 ( other.directSurf1 ) + , directSurf2 ( other.directSurf2 ) + {} + /// \ru Оператор присваивания. \en Assignment operator. + LoftedValues & operator = ( const LoftedValues & other ) + { + SweptValues::Init( other ); + closed = other.closed; + vector1 = other.vector1; + vector2 = other.vector2; + setNormal1 = other.setNormal1; + setNormal2 = other.setNormal2; + directSurf1 = other.directSurf1; + directSurf2 = other.directSurf2; + return *this; + } + /// \ru Деструктор. \en Destructor. + virtual ~LoftedValues(); + +public: + // \ru Это параметры операции по сечениям? \en This is "lofted" parameters? + virtual bool IsLoftedValues() const { return true; } + + // \ru Являются ли объекты равными? \en Determine whether an object is equal? + virtual bool IsSame( const SweptValues & other, double accuracy ) const + { + const LoftedValues * obj = dynamic_cast( &other ); + if ( obj != c3d_null ) { + if ( obj->closed == closed ) { + if ( c3d::EqualVectors(vector1, obj->vector1, accuracy) && c3d::EqualVectors(vector2, obj->vector2, accuracy) ) { + if ( obj->setNormal1 == setNormal1 && obj->setNormal2 == setNormal2 ) { + if ( (setNormal1 == false || obj->derFactor1 == derFactor1 || c3d::EqualVectors(directSurf1, obj->directSurf1, accuracy)) && // Фактор может различаться, если нормаль не установлена. + (setNormal2 == false || obj->derFactor2 == derFactor2 || c3d::EqualVectors(directSurf2, obj->directSurf2, accuracy)) ) { + if ( obj->SweptValues::IsSame(*this, accuracy) ) { + return true; + } + } + } + } + } + } + return false; + } + +public: + /// \ru Преобразовать объект согласно матрице. \en Transform an object according to the matrix. + void Transform( const MbMatrix3D & matr ); + /// \ru Сдвинуть объект вдоль вектора. \en Move an object along a vector. + void Move ( const MbVector3D & to ); + /// \ru Повернуть объект вокруг оси на заданный угол. \en Rotate an object at a given angle around an axis. + void Rotate ( const MbAxis3D & axis, double ang ); + + KNOWN_OBJECTS_RW_REF_OPERATORS( LoftedValues ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Параметры ребра жёсткости. + \en Parameters of a rib. \~ + \details \ru Параметры построения ребра жёсткости по кривой, задающей его форму. \n + \en The construction parameters of rib by curve gives its shape. \n \~ + \ingroup Build_Parameters +*/ +// --- +struct MATH_CLASS RibValues : public SweptValues { +public: + /** \brief \ru Сторона заполнения пространства телом ребра. + \en The side to place the rib on. \~ + \details \ru С какой стороны от кривой располагается ребро. \n + \en With which side of the curve is rib. \n \~ + \ingroup Build_Parameters + */ + enum ExtrudeSide { + es_Left = 0, ///< \ru Ребро выдавливается в левую сторону от кривой вдоль плоскости. \en Rib is extruded to the left side of the curve along the plane. + es_Right, ///< \ru Ребро выдавливается в правую сторону от кривой вдоль плоскости. \en Rib is extruded to the right side of the curve along the plane. + es_Up, ///< \ru Ребро выдавливается в сторону нормали плоскости. \en Rib is extruded to the side of the surface normal. + es_Down, ///< \ru Ребро выдавливается в сторону против нормали плоскости. \en Rib is extruded to the side opposite to the surface normal. + }; + +public: + double angle1; ///< \ru Угол уклона плоскости в прямом направлении. \en Draft angle of the plane along the forward direction. + double angle2; ///< \ru Угол уклона плоскости в обратном направлении. \en Draft angle of the plane along the backward direction. + ExtrudeSide side; ///< \ru Сторона заполнения пространства телом ребра. \en The side to place the rib on. + +public: + /// \ru Конструктор по умолчанию. \en Default constructor. + RibValues() + : SweptValues( ) + , angle1 ( 0.0 ) + , angle2 ( 0.0 ) + , side ( es_Right ) + {} + /// \ru Конструктор по толщинам, углам и стороне заполнения пространства. \en Constructor by thickness, angles and filling space. + RibValues( double t1, double t2, double a1, double a2, int s ) + : SweptValues( t1, t2 ) + , angle1 ( a1 ) + , angle2 ( a2 ) + , side ( (ExtrudeSide)s ) + {} + /// \ru Конструктор копирования. \en Copy-constructor. + RibValues( const RibValues & other ) + : SweptValues( other ) + , angle1 ( other.angle1 ) + , angle2 ( other.angle2 ) + , side ( other.side ) + {} + /// \ru Деструктор. \en Destructor. + virtual ~RibValues(); + +public: + // \ru Это параметры операции ребра жесткости? \en This is "rib" parameters? + virtual bool IsRibValues() const { return true; } + + // \ru Являются ли объекты равными? \en Determine whether an object is equal? + virtual bool IsSame( const SweptValues & other, double accuracy ) const + { + const RibValues * obj = dynamic_cast( &other ); + + if ( obj != c3d_null ) { + if ( obj->side == side ) { + if ( ::fabs(obj->angle1 - angle1) < accuracy && ::fabs(obj->angle2 - angle2) < accuracy ) + return SweptValues::IsSame( *obj, accuracy ); + } + } + return false; + } + +public: + /// \ru Функция копирования. \en Copy function. + void Init( const RibValues & other ) + { + SweptValues::Init( other ); + angle1 = other.angle1; + angle2 = other.angle2; + side = other.side; + } + /// \ru Оператор присваивания. \en Assignment operator. + RibValues & operator = ( const RibValues & other ) + { + Init( other ); + return *this; + } + + KNOWN_OBJECTS_RW_REF_OPERATORS( RibValues ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Параметры ребра жёсткости листового тела. + \en Parameters of a sheet metal rib. \~ + \details \ru Параметры построения ребра жёсткости листового тела по кривой, задающей его форму. \n + \en The construction parameters of a sheet metal rib by curve gives its shape. \n \~ +\ingroup Build_Parameters +*/ +// --- +struct MATH_CLASS SheetRibValues: public RibValues { +public: + double radRibConvex; ///< \ru Радиус скругления выпуклой части ребра жесткости. \en Fillet radius of convex part of rib. + double radSideConcave; ///< \ru Радиус скругления примыкания вогнутой части ребра жесткости к листовому телу. \en Fillet radius of connection of concave part of rib and metal sheet. + +public: + /// \ru Конструктор по умолчанию. \en Default constructor. + SheetRibValues() + : RibValues ( ) + , radRibConvex ( 0.0 ) + , radSideConcave( 0.0 ) + {} + /// \ru Конструктор по параметрам. \en Constructor by parameters. + SheetRibValues( double t1, double t2, double a1, double a2, int s, double rFilletRib, const double & rFilletSide ) + : RibValues ( t1, t2, a1, a2, s ) + , radRibConvex ( ::fabs(rFilletRib) ) + , radSideConcave( ::fabs(rFilletSide) ) + {} + /// \ru Конструктор копирования. \en Copy-constructor. + SheetRibValues( const SheetRibValues & other ) + : RibValues ( other ) + , radRibConvex ( other.radRibConvex ) + , radSideConcave( other.radSideConcave ) + {} + /// \ru Деструктор. \en Destructor. + virtual ~SheetRibValues(); + +public: + // \ru Являются ли объекты равными? \en Determine whether an object is equal? + virtual bool IsSame( const SweptValues & other, double accuracy ) const + { + const SheetRibValues * obj = dynamic_cast( &other ); + + if ( obj != c3d_null ) { + if ( (::fabs(radRibConvex - obj->radRibConvex) < accuracy) && (::fabs(radSideConcave - obj->radSideConcave) < accuracy) ) + return RibValues::IsSame( *obj, accuracy ); + } + return false; + } + +public: + /// \ru Функция копирования. \en Copy function. + void Init( const SheetRibValues & other ) + { + RibValues::Init( other ); + radRibConvex = other.radRibConvex; + radSideConcave = other.radSideConcave; + } + + /// \ru Оператор присваивания. \en Assignment operator. + SheetRibValues & operator = ( const SheetRibValues & other ) { + Init( other ); + return *this; + } + + /// \ru Преобразовать объект согласно матрице. \en Transform an object according to the matrix. + void Transform( const MbMatrix3D & matr ); + + KNOWN_OBJECTS_RW_REF_OPERATORS( SheetRibValues ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. +}; + +//------------------------------------------------------------------------------ +/** \brief \ru Параметры булевой операции выдавливания или вращения до объекта. + \en The parameters of Boolean operation of extrusion or revolution to object. \~ + \details \ru Параметры булевой операции выдавливания или вращения до объекта. \n + Используется при булевой операции исходного тела + и построенной операции выдавливания или вращения двумерных контуров на поверхности. + \en The parameters of Boolean operation of extrusion or revolution to object. \n + Used in Boolean operation of initial solid + and constructed operation of extrusion or revolution of two-dimensional contours on the surface. \~ + \ingroup Build_Parameters +*/ +// --- +struct MATH_CLASS MbSweptLayout { + /** \brief \ru Направление выдавливания (вращения). + \en A direction of extrusion (revolution). \~ + \details \ru Направление выдавливания (вращения) по отношению к вектору выдавливания (оси вращения). + \en The direction of extrusion relative to the extrusion vector. \~ + */ + enum Direction { + ed_minus_minus = -2, ///< \ru В обратном направлении, для обеих строн. \en Along the backward direction, for both sides. + ed_minus = -1, ///< \ru В обратном направлении, для одной стороны. \en Along the backward direction, for one sides. + ed_both = 0, ///< \ru В обоих направлениях. \en Along both directions. + ed_plus = 1, ///< \ru В прямом направлении, для одной стороны. \en Along the forward direction, for one sides. + ed_plus_plus = 2, ///< \ru В прямом направлении, для обеих сторон. \en Along the forward direction, for both sides. + }; + Direction direction; ///< \ru Направление выдавливания относительно вектора. \en The direction of extrusion relative to the vector. + bool skipUnion; ///< \ru Создавать новое тело (Не приклеивать к телу). \en Create a new solid. + +protected: + SPtr surface; ///< \ru Поверхность, на которой размещена образующая. \en The surface, which contains the generating curve. + +protected: + /// \ru Конструктор. \en Constructor. + MbSweptLayout( const MbSurface & surf, Direction dir ) : surface( &surf ), direction( dir ), skipUnion( false ) {} + /// \ru Конструктор копирования. \en Copy-constructor. + MbSweptLayout( const MbSweptLayout & other ) : surface( other.surface ), direction( other.direction ), skipUnion( other.skipUnion ) {} + /// \ru Деструктор. \en Destructor. + virtual ~MbSweptLayout(); +public: + /// \ru Получить поверхность. \en Get the surface. + const MbSurface & GetSurface() const { return *surface; } + + /// \ru Создавать новое тело (Не приклеивать к телу). \en Create a new solid. + bool SkipUnion() const { return skipUnion; } + /// \ru Создавать новое тело (Не приклеивать к телу). \en Create a new solid. + void SkipUnion( bool su ) { skipUnion = su; } +public: + /// \ru Это параметры выдавливания? \en This is extrusion parameters? + virtual bool IsExtrusionLayout() const { return false; } + /// \ru Это параметры вращения? \en This is rotation parameters? + virtual bool IsRevolutionLayout() const { return false; } +public: + /// \ru Классификация точки относительно несущей поверхности. \en Classification point relative to the surface. + MbeItemLocation PointRelative( const MbCartPoint3D & p ) const; +private: + // \ru Объявление оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration of the assignment operator without implementation to prevent an assignment by default. + MbSweptLayout & operator = ( const MbSweptLayout & ); +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Параметры булевой операции выдавливания до объекта. + \en The parameters of Boolean operation of extrusion to object. \~ + \details \ru Параметры булевой операции выдавливания до объекта. \n + Используется при булевой операции исходного тела + и построенной операции выдавливания двумерных контуров на поверхности. + \en The parameters of Boolean operation of extrusion to object. \n + Used in Boolean operation of initial solid + and constructed operation of extrusion of two-dimensional contours on the surface. \~ + \ingroup Build_Parameters +*/ +// --- +struct MATH_CLASS MbExtrusionLayout : public MbSweptLayout { + MbVector3D dirVector; ///< \ru Вектор выдавливания. \en An extrusion vector. +public: + /// \ru Конструктор. \en Constructor. + MbExtrusionLayout( const MbSurface & surf, Direction dir, const MbVector3D & dirVec ) : MbSweptLayout( surf, dir ), dirVector( dirVec ) {} + /// \ru Конструктор копирования. \en Copy-constructor. + MbExtrusionLayout( const MbExtrusionLayout & other ) : MbSweptLayout( other ), dirVector( other.dirVector ) {} + /// \ru Деструктор. \en Destructor. + virtual ~MbExtrusionLayout(); +public: + /// \ru Это параметры выдавливания? \en This is extrusion parameters? + virtual bool IsExtrusionLayout() const { return true; } +private: + // \ru Объявление оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration of the assignment operator without implementation to prevent an assignment by default. + void operator = ( const MbExtrusionLayout & ); +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Параметры булевой операции вращения до объекта. + \en The parameters of Boolean operation of revolution to object. \~ + \details \ru Параметры булевой операции вращения до объекта. \n + Используется при булевой операции исходного тела + и построенной операции вращения двумерных контуров на поверхности. + \en The parameters of Boolean operation of revolution to object. \n + Used in Boolean operation of initial solid + and constructed operation of revolution of two-dimensional contours on the surface. \~ + \ingroup Build_Parameters +*/ +// --- +struct MATH_CLASS MbRevolutionLayout : public MbSweptLayout { + MbAxis3D revAxis; ///< \ru Ось вращения. \en An revolution axis. +public: + /// \ru Конструктор. \en Constructor. + MbRevolutionLayout( const MbSurface & surf, Direction dir, const MbAxis3D & rotAxis ) : MbSweptLayout( surf, dir ), revAxis( rotAxis ) {} + /// \ru Конструктор копирования. \en Copy-constructor. + MbRevolutionLayout( const MbRevolutionLayout & other ) : MbSweptLayout( other ), revAxis( other.revAxis ) {} + /// \ru Деструктор. \en Destructor. + virtual ~MbRevolutionLayout(); +public: + /// \ru Это параметры вращения? \en This is rotation parameters? + virtual bool IsRevolutionLayout() const { return true; } +private: + // \ru Объявление оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration of the assignment operator without implementation to prevent an assignment by default. + void operator = ( const MbRevolutionLayout & ); +}; + + +//------------------------------------------------------------------------------ +/** \brief \ru Данные края сечения поверхности. + \en The surface section control function. \~ + \details \ru Точку края сечения определяют: или рёбра, или кривые. Направление сечения на краю определяют: или поверхности смежных граней рёбер, или поверхности граней, или функция угла наклона. + \en The end of the section is determined as point either edges, or curves. The direction on the end of the section is determined as either the surfaces of edges, or the surfaces of faces, or a function of the angle. + \ingroup Build_Parameters +*/ +// --- +class MATH_CLASS MbSectionRail { + +private: + std::vector edges; ///< \ru Направляющие рёбра (могут отсутствовать). \en The guide edges (may be empty). + std::vector edgeSide; ///< \ru С какой гранью ребра гладко стыковать поверхность (синхронно с edges). \en What face of edge should the surface join smoothly to (synchronously with edges). + std::vector faces; ///< \ru Опорные грани (могут отсутствовать). \en The reference faces (may be empty). + std::vector faceSide; ///< \ru С каких сторон касаться поверхностей при form==cs_Linea (синхронно с faces). \en On which sides to touch surfaces when form==cs_Linea (synchronously with faces). + std::vector curves; ///< \ru Направляющие кривые (могут отсутствовать). \en The guide curves (may be empty). + MbCurve3D * track; ///< \ru Кривая, через которую должно пройти сечение (может отсутствовать). \en The curve that the section should pass through (may be c3d_null). + MbFunction * angle; ///< \ru Функция угла наклона (может отсутствовать). \en The function of the angle of inclination (may be c3d_null). + ThreeStates state; ///< \ru Как использовать angle: угол к хорде (ts_neutral), отклонение от касательной поверхности (ts_positive), отклонение от нормали к поверхности (ts_negative). + ///< \en How to use angle: angle to chord (ts_neutral), deviation from tangent surface (ts_positive), deviation from normal to surface (ts_negative). +public: + + /// \ru Конструктор по умолчанию. \en Empty constructor. + MbSectionRail() + : edges () + , edgeSide() + , faces () + , faceSide() + , curves () + , track ( c3d_null ) + , angle ( c3d_null ) + , state( ts_neutral ) + {} + + /** \brief \ru Конструктор по параметрам. + \en Constructor by parameters. \~ + \param[in] eds - \ru Направляющие рёбра. + \en The guide edges. \~ + \param[in] eSide - \ru Какую сторону кривой гладко стыковать с поверхностью (синхронно с edges). + \en Which side should the surface join smoothly to (synchronously with edges). \~ + \param[in] fcs - \ru Направляющие грани (могут отсутствовать). + \en The guide faces (may be empty). \~ + \param[in] fSide - \ru С каких сторон касаться поверхностей (синхронно с faces). + \en On which sides to touch surfaces (synchronously with faces). \~ + \param[in] cs - \ru Направляющие кривые (могут отсутствовать). + \en The guide curves (may be empty). \~ + \param[in] trk - \ru Кривая, через которую должно пройти сечение (может отсутствовать). + \en The curve that the section should pass through (may be c3d_null). \~ + \param[in] ang - \ru Функция угла наклона (может быть c3d_null). + \en The function of the angle of inclination (may be c3d_null). \~ + \param[in] st - \ru Как использовать ang. + \en How to use ang. \~ + */ + MbSectionRail( std::vector & edges_, std::vector & eSides, + std::vector & faces_, std::vector & fSides, + std::vector & cs, MbCurve3D * trk, + MbFunction * ang, ThreeStates st ); + /// \ru Конструктор копирования. \en Copy-constructor. + MbSectionRail( const MbSectionRail & other ); + /// \ru Конструктор копирования. \en Copy-constructor. + MbSectionRail( const MbSectionRail & other, MbRegDuplicate * ireg ); + /// \ru Деструктор. \en Destructor. + ~MbSectionRail(); + +public: + + /// \ru Добавить в данные направляющую кривую. \en Add guiding to data. \~ + void AddEdge( MbCurveEdge & _edge, bool side ); + /// \ru Выдать направляющие рёбра. \en Get guide edges. + void GetEdges( std::vector & eds ) const; + void GetEdges( RPArray & eds ) const; + /// \ru Какую сторону кривой гладко стыковать с поверхностью? \en Which side should the surface join smoothly to? + void GetEdgeSide( std::vector & eSide ) const; + /// \ru Выдать количество направляющих ребер. \en Get guide edges count. + size_t GetEdgesCount() const { return edges.size(); } + size_t GetEdgeSideCount() const { return edgeSide.size(); } + /// \ru Выдать направляющее ребро. \en Get guide edge. + MbCurveEdge * SetEdge( size_t i ) { return ( i < edges.size() ) ? edges[i] : c3d_null; } + + /// \ru Добавить в данные поверхность. \en Add surface to data. \~ + void AddFace( MbFace & _face, bool side ); + /// \ru Выдать грани. \en Get faces. + void GetFaces( std::vector & fas ) const; + void GetFaces( RPArray & fas ) const; + /// \ru С каких сторон касаться поверхностей? \en On which sides to touch surfaces? + void GetFaceSide( std::vector & fSide ) const; + /// \ru Выдать количество направляющих граней. \en Get guide faces count. + size_t GetFacesCount() const { return faces.size(); } + size_t GetFaceSideCount() const { return faceSide.size(); } + /// \ru Выдать направляющую грань. \en Get guide face. + MbFace * SetFace( size_t i ) { return ( i < faces.size() ) ? faces[i] : c3d_null; } + + /// \ru Добавить в данные кривую. \en Add curve to data. \~ + void AddCurve( MbCurve3D & _curve ); + /// \ru Добавить в данные кривые. \en Add curves to data. \~ + void AddCurves( std::vector & _curves ); + /// \ru Выдать дополнительные направляющие кривые. \en Get additional guide curves. + void GetCurves( std::vector & crs ) const; + /// \ru Выдать количество дополнительных направляющих кривых. \en Get additional guide curves count. + size_t GetCurvesCount() const { return curves.size(); } + /// \ru Выдать дополнительную направляющую кривую. \en Get additional guide curve. + MbCurve3D * SetCurve( size_t i ) { return ( i < curves.size() ) ? curves[i] : c3d_null; } + + /// \ru Добавить в данные кривую. \en Add curve to data. \~ + void SetTrack( MbCurve3D & trk ); + /// \ru Выдать кривую, через которую должно пройти сечение. \en Get the curve that the section should pass through. + const MbCurve3D * GetTrack() const { return track; } + MbCurve3D * SetTrack() { return track; } + + /// \ru Установить функцию управления сечением. \en Set section control function. + void SetAngle( MbFunction & an, ThreeStates ts ); + /// \ru Выдать функцию управления сечением (радиус или дискриминант). \en Get section control function (radius or discriminant). + const MbFunction * GetAngle() const { return angle; } + MbFunction * SetAngle() { return angle; } + /// \ru К чему задан угол функции: к хорде, к поверхности, к нормали поверхности. \en What is the angle of the function set to: to the chord, to the surface, to the surface normal. + ThreeStates GetState() const { return state; } + void SetState( ThreeStates st ) { state = st; } + + /// \ru Преобразовать объект. \en Transform the object. \~ + void Transform( const MbMatrix3D & matr, MbRegTransform * iReg = c3d_null ); + /// \ru Сдвинуть объект. \en Move the object. \~ + void Move ( const MbVector3D & to, MbRegTransform * iReg = c3d_null ); + /// \ru Повернуть объект. \en Rotate the object. \~ + void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * iReg = c3d_null ); + /// \ru Определить, являются ли объекты равными? \en Determine whether an object is equal? + bool IsSame( const MbSectionRail & other, double accuracy ) const; + /// \ru Определить, являются ли объекты подобными. \en Determine whether the objects are similar. \~ + bool IsSimilar( const MbSectionRail & other ) const; + /// \ru Сделать объекты равным. \en Make objects equal. \~ + bool SetEqual ( const MbSectionRail & other ); + + // Дать любую точку и ориентировочную длину. + double GetAnyPopint( MbCartPoint3D & p0 ); + + /// \ru Оператор присваивания без копирования данных. \en Assignment operator without copying. + void operator = ( const MbSectionRail & other ); + + KNOWN_OBJECTS_RW_REF_OPERATORS( MbSectionRail ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. + +}; // MbSectionRail + + +//------------------------------------------------------------------------------ +/** \brief \ru Функция управления сечением поверхности. + \en The surface section control function. \~ + \details \ru Форму сечения поверхности заметания определяет функция управления сечением (радиус или дискриминант). + Если функция управления сечением не определена, то она рассчитывается покривой, через которую должно пройти сечение, или поверхности, которой должно касаться сечение. \n + \en The surface section form is determined by the section control function (radius or discriminant). + If the section control function is not determined, it is calculated with curve that the section should pass through or surface that the section should touch. \n + \ingroup Build_Parameters +*/ +// --- +struct MATH_CLASS MbSectionRule { + +public: + MbFunction * discr; ///< \ru Функция управления сечением (дискриминант или радиус, может быть c3d_null). \en Section control function (discriminant or radius). + MbCurve3D * track; ///< \ru Кривая, через которую должно пройти сечение. \en The curve that the section should pass through. + MbSurface * touch; ///< \ru Поверхность, которой должно касаться сечение. \en The surface that the section should touch. + MbFaceShell * shell; ///< \ru Оболочка, которой должно касаться сечение. \en The shell that the section should touch. + +public: + /// \ru Конструктор по умолчанию. \en Empty constructor. + MbSectionRule(); + /// \ru Конструктор по функции. \en The constructor by function. + MbSectionRule( MbFunction * fun ); + /// \ru Конструктор по кривой. \en The constructor by function. + MbSectionRule( MbCurve3D * cur ); + /// \ru Конструктор по поверхности. \en The constructor by surface. + MbSectionRule( MbSurface * sur ); + /// \ru Конструктор по оболочке. \en The constructor by shell. + MbSectionRule( MbFaceShell * sur ); + /// \ru Конструктор копирования. \en Copy-constructor. + MbSectionRule( const MbSectionRule & other ); + /// \ru Конструктор копирования. \en Copy-constructor. + MbSectionRule( const MbSectionRule & other, MbRegDuplicate * ireg ); + /// \ru Деструктор. \en Destructor. + ~MbSectionRule(); + +public: + + /// \ru Выдать функцию управления сечением. \en Get section control function. + const MbFunction * GetFunction() const { return discr; } + /// \ru Установить функцию управления сечением. \en Set section control function. + void SetFunction( MbFunction & f ); + void SetFunction( double f ); + /// \ru Выдать кривую управления сечением. \en Get section control curve. + const MbCurve3D * GetCurve() const { return track; } + /// \ru Установить кривую управления сечением. \en Set section control curve. + void SetCurve( MbCurve3D & c ); + /// \ru Выдать поверхность управления сечением. \en Get section control surface. + const MbSurface * GetSurface() const { return touch; } + /// \ru Установить поверхность управления сечением. \en Set section control surface. + void SetSurface( MbSurface & s ); + /// \ru Выдать оболочку управления сечением. \en Get section control shell. + const MbFaceShell * GetShell() const { return shell; } + /// \ru Установить оболочку управления сечением. \en Set section control shell. + void SetShell( MbFaceShell & s ); + + /// \ru Преобразовать объект. \en Transform the object. \~ + void Transform( const MbMatrix3D & matr, MbRegTransform * iReg = c3d_null ); + /// \ru Сдвинуть объект. \en Move the object. \~ + void Move ( const MbVector3D & to, MbRegTransform * iReg = c3d_null ); + /// \ru Повернуть объект. \en Rotate the object. \~ + void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * iReg = c3d_null ); + /// \ru Определить, являются ли объекты равными? \en Determine whether an object is equal? + bool IsSame( const MbSectionRule & other, double accuracy ) const; + /// \ru Определить, являются ли объекты подобными. \en Determine whether the objects are similar. \~ + bool IsSimilar( const MbSectionRule & other ) const; + /// \ru Сделать объекты равным. \en Make objects equal. \~ + bool SetEqual ( const MbSectionRule & other ); + + /// \ru Оператор присваивания без копирования данных. \en Assignment operator without copying. + void operator = ( const MbSectionRule & other ); + + KNOWN_OBJECTS_RW_REF_OPERATORS( MbSectionRule ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. + +}; // MbSectionRule + + +//------------------------------------------------------------------------------ +/** \brief \ru Параметры операции построения поверхности заметания переменного сечения. + \en The parameters for buyilding the swept mutable section surface. \~ + \details \ru Поверхность заметания строится путем движения плоского сечения вдоль опорной кривой. + Плоское сечение может начинаться на направляющей кривой и заканчиваться на другой направляющей кривой. + Направляющих кривых может быть две, одна или ни одной. Кроме того, в построении могут использоваться управляющие кривые. \n + Сечение поверхности плоскостью, перпендикулярной опорной кривой, может иметь одну из пяти форм и некоторые из них могут меняться по заданному закону. + Сечение может иметь форму окружности (или её дуги), отрезка прямой, кривой второго порядка, кривой третьего порядка или заданной сплайновой кривой. \n + В качестве примера рассмотрим сечение в форме участка кривой второго порядка. + В этом случае должны быть заданы две напраляющие в виде рёбер MbSectionRail::edges или в виде кривых MbSectionRail::curves. + Кривая второго порядка начинается в точке пересечения первой направляющей с плоскостью сечения и + оканчивается в точке пересечения второй направляющей с плоскостью сечения. + Направление кривой второго порядка на краю может быть задано одним из способов: + - поверхностью грани ребра (рёбер) MbSectionRail::edges, где MbSectionRail::edgeSide указывает на грань слева или справа; + - поверхностью кривой (кривых) MbSectionRail::curves, если кривая имеют поверхность в своих данных; + - функцией угла наклона касательной MbSectionRail::angle, параметр MbSectionRail::state указывает, от чего отсчитывается угол; + - дополнительной контрольной кривой MbSectionRail::track, через точку пересечения которой с плоскостью сечения должна проходить кривая второго порядка; + - вершинной кривой MbSectionData::apexCurve, точка пересечения которой с плоскостью сечения определяет точку пересечения касательных кривой второго порядка на краях; + Дискриминант кривой второго порядка может быть задан одним из способов: + - функцией изменения дискриминанта MbSectionRule::discr; + - дополнительной контрольной кривой MbSectionRule::track, через точку пересечения которой с плоскостью сечения должна проходить кривая второго порядка; + - дополнительной поверхностью MbSectionRule::touch, которой должна касаться кривая второго порядка сечения; + При наличие направляющих кривых и их несущих поверхностей построенная поверхность заметания гладко стыкуется с несущими поверхностями. \n + \en The swept mutable section surface is form-generating by moving the flat section along the reference curve. \n + The flat section can start on a guide curve and end on another guide curve. + There can be two guide curves, one or none. In addition, control curves can be used in the construction. \n + The cross section of a surface with a plane perpendicular to the reference curve can have one of five shapes, and some of them can change according to a given law. + The cross section can take the form of a circle (or its arc), a straight line segment, a second-order curve, a third-order curve, or a given spline curve. \n + As an example, consider a section in the form of a second-order curve. + In this case, you must specify two edges as MbSectionRail::edges or as MbSectionRail::curves. + The second-order curve starts at the intersection of the first guide with the cross-section plane and + ends at the intersection of the second guide with the cross-section plane. + The direction of the second-order curve on the begining or on the end can be set in one of the following ways: + - the face surface of the edge (s) MbSectionRail::edges, where MbSectionRail::edgeSide specifies the face on the left or on the right; + - surface of the curve (s) MbSectionRail::curves, if the curve has a surface in its data; + - function of the tangent angle MbSectionRail:: angle, the parameter MbSectionRail::state specifies from what the angle is calculated; + - an additional control curve MbSectionRail::track, the second-order curve should pass through the point of intersection of the control curve with the cross-section plane; + - vertex curve MbSectionData::apexCurve, whose intersection point with the section plane determines the intersection point of the tangents of second-order curve at the begining and at the end; + The second-order curve discriminant can be set in one of the following ways: + - the function for changing the discriminant MbSectionRule:: discr; + - an additional control curve MbSectionRule::track, the second-order curve should pass through the point of intersection of the control curve with the cross-section plane; + - an additional surface MbSsectionRule::touch that the second-order curve of the section should touch; + If there are guide curves and their bearing surfaces, the constructed sweep surface is smoothly joined to the bearing surfaces. \n \~ + \ingroup Build_Parameters +*/ +// --- +class MATH_CLASS MbSectionData { + +private: + MbCurve3D * spine; ///< \ru Опорная кривая. \en The reference curve. + MbeSectionShape form; ///< \ru Форма сечения поверхности. \en The surface cross-section shape. + MbSectionRail rail1; ///< \ru Данные начального края сечения. \en The data of the begining of section. + MbSectionRail rail2; ///< \ru Данные конечного края сечения. \en The data of the end of section. + MbCurve3D * apexCurve; ///< \ru Кривая вершин (может отсутствовать). \en The apex curve (may be c3d_null). + MbSectionRule descript; ///< \ru Функция управления сечением поверхности (радиус или дискриминант, может быть c3d_null). \en The section control function (radius or discriminant). + MbPolyCurve * pattern; ///< \ru Образующая кривая при form==cs_Shape (для других форм c3d_null). \en Forming curve for form==cs_Shape (c3d_null on other case). + double uMin; ///< \ru Минимальное значение первого параметра. \en Minimal value of the first parameter. + double uMax; ///< \ru Максимальное значение первого параметра. \en Maximal value of the first parameter. + double buildSag; ///< \ru Угловое отклонение при движении по кривым и поверхностям. \en Angular deviation while moving along curves and surfaces. + double accuracy; ///< \ru Точность построения толерантных объектов. \en An accuracy of building tolerant objects. + uint32 count; ///< \ru Минимальное количество шагов по опорной кривой. \en Minimum number of steps along the reference curve. + bool check; ///< \ru Проверять самопересечение построенной поверхности. \en Check the self-intersection of the constructed surface (default false). + +public: + /// \ru Конструктор по умолчанию. \en Empty constructor. + MbSectionData(); + + /** \brief \ru Конструктор по параметрам. + \en Constructor by parameters. \~ + \param[in] sp - \ru Опорная кривая. + \en The reference curve. \~ + \param[in] f - \ru Форма сечения поверхности. + \en The surface cross-section shape. \~ + \param[in] r1 - \ru Данные начального края сечения. + \en The data of the begining of section. \~ + \param[in] r2 - \ru Данные конечного края сечения. + \en The data of the end of section. \~ + \param[in] ap - \ru Кривая вершин (может быть c3d_null). + \en The apex curve (may be empty). \~ + \param[in] desc - \ru Функция управления сечением (может быть c3d_null). + \en Section control function (may be c3d_null). \~ + \param[in] patt - \ru Образующая кривая (может быть c3d_null). + \en Forming curve (may be c3d_null). \~ + */ + MbSectionData( MbCurve3D & sp, + MbeSectionShape f, + MbSectionRail & r1, + MbSectionRail & r2, + MbCurve3D * ap, + MbSectionRule & desc, + MbPolyCurve * patt ); + /// \ru Конструктор копирования. \en Copy-constructor. + MbSectionData( const MbSectionData & other ); + /// \ru Конструктор копирования. \en Copy-constructor. + MbSectionData( const MbSectionData & other, MbRegDuplicate * ireg ); + /// \ru Деструктор. \en Destructor. + ~MbSectionData(); + +public: + + /// \ru Установить опорную кривую. \en Set reference curve. + void SetSpine( MbCurve3D & s ); + //< \ru Установить вектор направления опорной кривой (если spine==c3d_null). \en Set the direction vector of the reference curve (if spine= = c3d_null). + void SetSpine( const MbVector3D & a ); + /// \ru Выдать опорную кривую. \en Get reference curve. + const MbCurve3D * GetSpine() const { return spine; } + MbCurve3D * SetSpine() { return spine; } + + /// \ru Выдать форму сечения поверхности. \en Get cross-section shape. + MbeSectionShape GetForm() const { return form; } + /// \ru Установить форму сечения поверхности. \en Set cross-section shape. + void SetForm( MbeSectionShape f ) { form = f; } + + ///< \ru Данные начального края сечения. \en The data of the begining of section. + MbSectionRail & GetRrail1() { return rail1; } + ///< \ru Данные конечного края сечения. \en The data of the end of section. + MbSectionRail & GetRrail2() { return rail2; } + + /// \ru Добавить в данные направляющее ребро. \en Add guiding to data. \~ + void AddEdge1( MbCurveEdge & _edge, bool side ) { rail1.AddEdge( _edge, side ); } + void AddEdge2( MbCurveEdge & _edge, bool side ) { rail2.AddEdge( _edge, side ); } + /// \ru Выдать направляющие рёбра. \en Get guide edges. + void GetEdges1( std::vector & eds ) const { rail1.GetEdges( eds ); } + void GetEdges1( RPArray & eds ) const { rail1.GetEdges( eds ); } + /// \ru Выдать направляющие рёбра. \en Get guide edges. + void GetEdges2( std::vector & eds ) const { rail2.GetEdges( eds ); } + void GetEdges2( RPArray & eds ) const { rail2.GetEdges( eds ); } + /// \ru Какую сторону кривой гладко стыковать с поверхностью? \en Which side should the surface join smoothly to? + void GetEdgeSide1( std::vector & eSide ) const { rail1.GetEdgeSide( eSide ); } + /// \ru Какую сторону кривой гладко стыковать с поверхностью? \en Which side should the surface join smoothly to? + void GetEdgeSide2( std::vector & eSide ) const { rail2.GetEdgeSide( eSide ); } + /// \ru Выдать количество направляющих ребер. \en Get guide edges count. + size_t GetEdgesCount1() const { return rail1.GetEdgesCount(); } + size_t GetEdgesCount2() const { return rail2.GetEdgesCount(); } + size_t GetEdgeSideCount1() const { return rail1.GetEdgeSideCount(); } + size_t GetEdgeSideCount2() const { return rail2.GetEdgeSideCount(); } + /// \ru Выдать направляющее ребро. \en Get guide edge. + MbCurveEdge * SetEdge1( size_t i ) { return rail1.SetEdge( i ); } + /// \ru Выдать направляющее ребро. \en Get guide edge. + MbCurveEdge * SetEdge2( size_t i ) { return rail2.SetEdge( i ); } + + /// \ru Добавить направляющую грань. \en Add guide face. + void AddFace1( MbFace & _face, bool side ) { rail1.AddFace( _face, side ); } + void AddFace2( MbFace & _face, bool side ) { rail2.AddFace( _face, side ); } + /// \ru Выдать поверхности. \en Get surfaces. + void GetFaces1( std::vector & fas ) const { rail1.GetFaces( fas ); } + void GetFaces1( RPArray & fas ) const { rail1.GetFaces( fas ); } + /// \ru Выдать поверхности. \en Get surfaces. + void GetFaces2( std::vector & fas ) const { rail2.GetFaces( fas ); } + void GetFaces2( RPArray & fas ) const { rail2.GetFaces( fas ); } + /// \ru С каких сторон касаться поверхностей? \en On which sides to touch surfaces? + void GetFaceSide1( std::vector & fSide ) const { rail1.GetFaceSide( fSide ); } + /// \ru С каких сторон касаться поверхностей? \en On which sides to touch surfaces? + void GetFaceSide2( std::vector & fSide ) const { rail2.GetFaceSide( fSide ); } + /// \ru Выдать количество направляющих граней. \en Get guide faces count. + size_t GetFacesCount1() const { return rail1.GetFacesCount(); } + size_t GetFacesCount2() const { return rail2.GetFacesCount(); } + size_t GetFaceSideCount1() const { return rail1.GetFaceSideCount(); } + size_t GetFaceSideCount2() const { return rail2.GetFaceSideCount(); } + /// \ru Выдать направляющую грань. \en Get guide face. + MbFace * SetFace1( size_t i ) { return rail1.SetFace( i ); } + /// \ru Выдать направляющую грань. \en Get guide face. + MbFace * SetFace2( size_t i ) { return rail2.SetFace( i ); } + + /// \ru Добавить в данные направляющую кривую. \en Add guiding to data. \~ + void AddCurve1( MbCurve3D & crv ) { rail1.AddCurve( crv ); } + void AddCurve2( MbCurve3D & crv ) { rail2.AddCurve( crv ); } + /// \ru Выдать дополнительные направляющие кривые. \en Get additional guide curves. + void GetCurves1( std::vector & crs ) const { rail1.GetCurves( crs ); } + /// \ru Выдать дополнительные направляющие кривые. \en Get additional guide curves. + void GetCurves2( std::vector & crs ) const { rail2.GetCurves( crs ); } + /// \ru Выдать количество дополнительных направляющих кривых. \en Get additional guide curves count. + size_t GetCurvesCount1() const { return rail1.GetCurvesCount(); } + size_t GetCurvesCount2() const { return rail2.GetCurvesCount(); } + /// \ru Выдать направляющую кривую. \en Get guide curve. + MbCurve3D * SetCurve1( size_t i ) { return rail1.SetCurve( i ); } + /// \ru Выдать направляющую кривую. \en Get guide curve. + MbCurve3D * SetCurve2( size_t i ) { return rail2.SetCurve( i ); } + + /// \ru Добавить в данные кривую, через которую должно пройти сечение. \en Add curve that the section should pass through. \~ + void SetTrack1( MbCurve3D & tr ) { rail1.SetTrack( tr ); } + /// \ru Добавить в данные кривую, через которую должно пройти сечение. \en Add curve that the section should pass through. \~ + void SetTrack2( MbCurve3D & tr ) { rail2.SetTrack( tr ); } + /// \ru Выдать кривую, через которую должно пройти сечение. \en Get the curve that the section should pass through. \~ + const MbCurve3D * GetTrack1() const { return rail1.GetTrack(); } + /// \ru Выдать кривую, через которую должно пройти сечение. \en Get the curve that the section should pass through. \~ + const MbCurve3D * GetTrack2() const { return rail2.GetTrack(); } + /// \ru Выдать кривую, через которую должно пройти сечение. \en Get the curve that the section should pass through. \~ + MbCurve3D * SetTrack1() { return rail1.SetTrack(); } + /// \ru Выдать кривую, через которую должно пройти сечение. \en Get the curve that the section should pass through. \~ + MbCurve3D * SetTrack2() { return rail2.SetTrack(); } + + /// \ru Добавить в данные функцию. \en Add functions to data. \~ + void SetAngle1( MbFunction & ang, ThreeStates ts ) { rail1.SetAngle( ang, ts ); } + /// \ru Добавить в данные функцию. \en Add functions to data. \~ + void SetAngle2( MbFunction & ang, ThreeStates ts ) { rail2.SetAngle( ang, ts ); } + /// \ru Выдать функции углов наклона. \en Get angle functions. + const MbFunction * GetAngle1() const { return rail1.GetAngle(); } + /// \ru Выдать функции углов наклона. \en Get angle functions. + const MbFunction * GetAngle2() const { return rail2.GetAngle(); } + /// \ru Выдать функцию угла наклона. \en Get angle function. + MbFunction * SetAngle1() { return rail1.SetAngle(); } + /// \ru Выдать функцию угла наклона. \en Get angle function. + MbFunction * SetAngle2() { return rail2.SetAngle(); } + + /// \ru К чему задан угол функции: к хорде, к поверхности, к нормали поверхности. \en What is the angle of the function set to: to the chord, to the surface, to the surface normal. + ThreeStates GetState1() const { return rail1.GetState(); } + ThreeStates GetState2() const { return rail2.GetState(); } + /// \ru Как отсчитывать угол функции: от хорде, от поверхности, от нормали поверхности. \en How to count the angle of the function: from the chord, from the surface, from the surface normal. + void SetState1( ThreeStates st ) { rail1.SetState( st ); } + void SetState2( ThreeStates st ) { rail2.SetState( st ); } + + /// \ru Добавить в данные кривую вершин. \en Set apex curve. \~ + void SetApexCurve( MbCurve3D & curv ); + /// \ru Выдать кривую вершин. \en Get apex curve. + MbCurve3D * SetApexCurve() { return apexCurve; } + /// \ru Выдать кривую вершин. \en Get apex curve. + const MbCurve3D * GetApexCurve() const { return apexCurve; } + + /// \ru Выдать данные управления сечением. \en Get section control data. + const MbSectionRule & GetSectionRule() const { return descript; } + MbSectionRule & SetSectionRule() { return descript; } + /// \ru Выдать функцию управления сечением (радиус или дискриминант). \en Get section control function (radius or discriminant). + const MbFunction * GetFunction() const { return descript.discr; } + MbFunction * SetFunction() { return descript.discr; } + /// \ru Установить функцию управления сечением. \en Set section control function. + void SetFunction( MbFunction & f ) { descript.SetFunction( f ); } + void SetFunction( double f ) { descript.SetFunction( f ); } + /// \ru Выдать кривую управления сечением. \en Get section control curve. + const MbCurve3D * GetDescriptCurve() const { return descript.GetCurve(); } + /// \ru Выдать поверхность управления сечением. \en Get section control surface. + const MbSurface * GetDescriptSurface() const { return descript.GetSurface(); } + /// \ru Выдать оболочку управления сечением. \en Get section control shell. + const MbFaceShell * GetDescriptShell() const { return descript.GetShell(); } + + /// \ru Выдать образующую кривую. \en Get forming curve. + const MbPolyCurve * GetPattern() const { return pattern; } + MbPolyCurve * SetPattern() { return pattern; } + /// \ru Установить образующую кривую. \en Set forming curve. + void SetPattern( MbPolyCurve & p ); + + /// \ru Минимальное значение первого параметра. \en Minimal value of the first parameter. + double GetUMin() const { return uMin; } + /// \ru Максимальное значение первого параметра. \en Maximal value of the first parameter. + double GetUMax() const { return uMax; } + /// \ru Установить область определения первого параметра поверхностей. \en Set the first parameter region of the surface. + void SetUParams( double u1, double u2 ); + /// \ru Угловое отклонение при движении по кривым и поверхностям. \en Angular deviation while moving along curves and surfaces. + double GetBuildSag() const { return buildSag; } + ///< \ru Точность построения толерантных объектов. \en An accuracy of building tolerant objects. + double GetAccuracy() const { return accuracy; } + void SetAccuracy( double acc ); + ///< \ru Минимальное количество шагов по опорной кривой. \en Minimum number of steps along the reference curve. + uint32 GetCount() const { return count; } + void SetCount( uint32 c ); + ///< \ru Проверять самопересечение построенной поверхности. \en Check the self-intersection of the constructed surface. + bool GetCheck() const { return check; } + void SetCheck( bool c ); + + /// \ru Преобразовать объект. \en Transform the object. \~ + void Transform( const MbMatrix3D & matr, MbRegTransform * iReg = c3d_null ); + /// \ru Сдвинуть объект. \en Move the object. \~ + void Move ( const MbVector3D & to, MbRegTransform * iReg = c3d_null ); + /// \ru Повернуть объект. \en Rotate the object. \~ + void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * iReg = c3d_null ); + /// \ru Определить, являются ли объекты равными? \en Determine whether an object is equal? + bool IsSame( const MbSectionData & other, double acc ) const; + /// \ru Определить, являются ли объекты подобными. \en Determine whether the objects are similar. \~ + bool IsSimilar( const MbSectionData & other ) const; + /// \ru Сделать объекты равным. \en Make objects equal. \~ + bool SetEqual ( const MbSectionData & other ); + + /// \ru Оператор присваивания без копирования данных. \en Assignment operator without copying. + void operator = ( const MbSectionData & other ); + + KNOWN_OBJECTS_RW_REF_OPERATORS( MbSectionData ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. + +}; // MbSectionData + + +//------------------------------------------------------------------------------ +/** \brief \ru Данные о поверхности переменного сечения. + \en Data about swept mutable section surface. \~ + \details \ru Данные содержат номера рёбер и граней исходной оболочки, на которых строится поверхность. + \en The data contains the numbers of edges and faces of the original shell on which the surface is built. + \ingroup Model_Creators +*/ +// --- +class MATH_CLASS MbSectionCode { + +private: + SArray edgeIndex1; ///< \ru Номера рёбер первой направляющей кривой. \en The edge numbers of the first guide curve. + SArray faceIndex1; ///< \ru Номера граней первой направляющей поверхности. \en The face numbers of the first guide surface. + SArray edgeIndex2; ///< \ru Номера рёбер второй направляющей кривой. \en The edge numbers of the second guide curve. + SArray faceIndex2; ///< \ru Номера граней второй направляющей поверхности. \en The face numbers of the second guide surface. + +public: + /// \ru Конструктор по умолчанию. \en Default constructor. + MbSectionCode() + : edgeIndex1( 0, 1 ) + , faceIndex1( 0, 1 ) + , edgeIndex2( 0, 1 ) + , faceIndex2( 0, 1 ) + {} + /// \ru Конструктор. \en Constructor. + MbSectionCode( SArray & edI1, SArray & faI1, + SArray & edI2, SArray & faI2 ) + : edgeIndex1( edI1 ) + , faceIndex1( faI1 ) + , edgeIndex2( edI2 ) + , faceIndex2( faI2 ) + {} + /// \ru Конструктор копирования. \en Copy-constructor. + MbSectionCode( const MbSectionCode & other ) + : edgeIndex1( other.edgeIndex1 ) + , faceIndex1( other.faceIndex1 ) + , edgeIndex2( other.edgeIndex2 ) + , faceIndex2( other.faceIndex2 ) + {} + /// \ru Деструктор. \en Destructor. + ~MbSectionCode() {} + +public: + + SArray & SetEdgeIndex1() { return edgeIndex1; } + SArray & SetFaceIndex1() { return faceIndex1; } + SArray & SetEdgeIndex2() { return edgeIndex2; } + SArray & SetFaceIndex2() { return faceIndex2; } + + /// \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + void Transform( const MbMatrix3D & matr ); + /// \ru Сдвинуть объект вдоль вектора. \en Move an object along a vector. + void Move ( const MbVector3D & to ); + /// \ru Повернуть объект вокруг оси на заданный угол. \en Rotate an object at a given angle around an axis. + void Rotate ( const MbAxis3D & axis, double ang ); + /// \ru Являются ли объекты равными? \en Determine whether an object is equal? + bool IsSame( const MbSectionCode & other, double accuracy ) const; + + // \ru Оператор присваивания. \en The assignment operator. + void operator = ( const MbSectionCode & other ) { + edgeIndex1 = other.edgeIndex1; + faceIndex1 = other.faceIndex1; + edgeIndex2 = other.edgeIndex2; + faceIndex2 = other.faceIndex2; + } + + KNOWN_OBJECTS_RW_REF_OPERATORS( MbSectionCode ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. + //DECLARE_NEW_DELETE_CLASS( MbSectionCode ) + //DECLARE_NEW_DELETE_CLASS_EX( MbSectionCode ) +}; // MbSectionCode + + +#endif // __OP_SWEPT_PARAMETERS_H diff --git a/C3d/Include/pars_equation_tree.h b/C3d/Include/pars_equation_tree.h index a3aab3a..7287fdd 100644 --- a/C3d/Include/pars_equation_tree.h +++ b/C3d/Include/pars_equation_tree.h @@ -75,7 +75,7 @@ struct CharacterPointInfo equPoint_DerBreak1 ///< \ru Разрыв производной. \en Derivative discontinuity. }; - const BTreeNode * m_tree; ///< \ru Узел дерева. Не равен NULL. \en Node of a tree. Not equal to NULL. + const BTreeNode * m_tree; ///< \ru Узел дерева. Не равен c3d_null. \en Node of a tree. Not equal to c3d_null. EquCharacterPointType m_type; ///< \ru Тип характерной точки. \en Type of a characteristic point. double m_ph; ///< \ru Значение параметра функции. \en The value of the function parameter. double m_period; ///< \ru Период функции. \en A period of a function. @@ -653,8 +653,8 @@ IMPL_PERSISTENT_OPS( TreeIntervalNode ) // --- class MATH_CLASS IntervalConstNode : public TreeIntervalNode { - BTreeNode * m_firstValue; ///< \ru Первое значение (всегда не NULL). \en First value (always not NULL). - BTreeNode * m_secondValue; ///< \ru Второе значение (всегда не NULL). \en Second value (always not NULL). + BTreeNode * m_firstValue; ///< \ru Первое значение (всегда не c3d_null). \en First value (always not c3d_null). + BTreeNode * m_secondValue; ///< \ru Второе значение (всегда не c3d_null). \en Second value (always not c3d_null). public: @@ -752,7 +752,7 @@ IMPL_PERSISTENT_OPS( IntervalConstNode ) // --- class MATH_CLASS IntervalIdentNode : public TreeIntervalNode { - ItIntervalTreeVariable * m_ident; ///< \ru Всегда не NULL. \en Always not NULL. + ItIntervalTreeVariable * m_ident; ///< \ru Всегда не c3d_null. \en Always not c3d_null. public: /** \brief \ru Конструктор. @@ -867,7 +867,7 @@ public: \details \ru Получить вложенный узел по индексу.\n \en Get a child node by an index.\n \~ */ - virtual BTreeNode * GetSubNode( size_t /*i*/ ) { return NULL; } + virtual BTreeNode * GetSubNode( size_t /*i*/ ) { return c3d_null; } virtual bool GetDefRange(DefRange &, ItTreeVariable &, bool /*stopOnBreak*/ ) const { return true; } @@ -981,7 +981,7 @@ public : \{ */ /// \ru Дать вложенный узел по индексу. \en Get a child node by an index. - virtual BTreeNode * GetSubNode( size_t /*i*/ ) { return NULL; } + virtual BTreeNode * GetSubNode( size_t /*i*/ ) { return c3d_null; } virtual bool GetDefRange( DefRange &, ItTreeVariable &, bool /*stopOnBreak*/ ) const{ return true; } diff --git a/C3d/Include/pars_user_function.h b/C3d/Include/pars_user_function.h index 1f7e73a..4c82ef1 100644 --- a/C3d/Include/pars_user_function.h +++ b/C3d/Include/pars_user_function.h @@ -96,7 +96,7 @@ public: /// \ru Получить массив параметров. \en Get array of parameters. void GetPars ( RPArray & pars ) const; /// \ru Получить аргумент по индексу. \en Get argument by index. - ItTreeVariable * GetPar( size_t i ) const { return i < m_vars.Count() ? m_vars[i] : NULL; } + ItTreeVariable * GetPar( size_t i ) const { return i < m_vars.Count() ? m_vars[i] : c3d_null; } /// \ru Подготовить объект к записи. \en Prepare an object for writing. void WritingBeginEnd( bool begin ) { RegisterVars( begin ? registrable : noRegistrable ); } /// \ru Оператор присваивания. \en Assignment operator. diff --git a/C3d/Include/part_solid.h b/C3d/Include/part_solid.h index b8e0251..4613b43 100644 --- a/C3d/Include/part_solid.h +++ b/C3d/Include/part_solid.h @@ -431,7 +431,7 @@ public: {} public: /// \ru Проверить данные на корректность. \en Check data for correctness. - bool IsValid() const { return (part != NULL && ind > -1 && id != SYS_MAX_UINT32); } + bool IsValid() const { return (part != c3d_null && ind > -1 && id != SYS_MAX_UINT32); } private: /// \ru Конструктор без параметров. \en Constructor without parameters. MbPartSolidData(); diff --git a/C3d/Include/plane_instance.h b/C3d/Include/plane_instance.h index b385b7d..83a55a8 100644 --- a/C3d/Include/plane_instance.h +++ b/C3d/Include/plane_instance.h @@ -66,10 +66,10 @@ public : // \ru Общие функции геометрического объекта. \en Common functions of a geometric object. virtual MbeSpaceType IsA() const; // \ru Тип объекта. \en A type of an object. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * iReg = NULL ) const; // \ru Создать копию. \en Create a copy. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвинуть вдоль вектора. \en Translate along a vector. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate about an axis. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; // \ru Создать копию. \en Create a copy. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвинуть вдоль вектора. \en Translate along a vector. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate about an axis. virtual bool IsSame ( const MbSpaceItem &, double accuracy = LENGTH_EPSILON ) const; // \ru Являются ли объекты равными? \en Are the objects equal? virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными? \en Are the objects similar? virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать объекты равными. \en Make the objects equal. @@ -104,7 +104,7 @@ public : MbPlaneItem * SetPlaneItem( size_t ind = 0 ); /// \ru Заменить двумерный геометрический объект. \en Replace two-dimensional geometric object. bool SetPlaneItem( MbPlaneItem * init, size_t ind = 0 ); - /// \ru Добавить двумерный геометрический объект. \en Add two-dimensional geometric object. The method returns the index of added or existing object in MbPlaneInstance (the method returns SYS_MAX_T if the object is NULL). + /// \ru Добавить двумерный геометрический объект. \en Add two-dimensional geometric object. The method returns the index of added or existing object in MbPlaneInstance (the method returns SYS_MAX_T if the object is c3d_null). size_t AddPlaneItem( MbPlaneItem * init ); /// \ru Метод возвращает индекс двумерного геометрического объекта. \en The method returns the index of two-dimensional geometric object in MbPlaneInstance (the method returns SYS_MAX_T if the object was not finded). size_t GetIndex( MbPlaneItem * init ); @@ -114,13 +114,13 @@ public : MbPlacement3D & SetPlacement() { return place; } /// \ru Преобразовать двумерный объект согласно матрице. \en Transform two-dimensional object according to the matrix. - void Transform( const MbMatrix &, MbRegTransform * iReg = NULL ); + void Transform( const MbMatrix &, MbRegTransform * iReg = c3d_null ); /// \ru Сдвинуть двумерный объект вдоль вектора. \en Translate two-dimensional object along a vector. - void Move ( const MbVector &, MbRegTransform * iReg = NULL ); + void Move ( const MbVector &, MbRegTransform * iReg = c3d_null ); /// \ru Повернуть двумерный объект вокруг точки на заданный угол. \en Rotate two-dimensional object at a given angle around an axis. - void Rotate ( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * iReg = NULL ); + void Rotate ( const MbCartPoint & pnt, const MbDirection & angle, MbRegTransform * iReg = c3d_null ); /// \ru Повернуть двумерный объект вокруг точки на заданный угол. \en Rotate two-dimensional object at a given angle around an axis. - void Rotate ( const MbCartPoint & pnt, double angle, MbRegTransform * iReg = NULL ); + void Rotate ( const MbCartPoint & pnt, double angle, MbRegTransform * iReg = c3d_null ); /// \ru Удалить все объекты эскиза. \en Delete all the sketch items. void DeleteItems(); @@ -168,7 +168,7 @@ inline MbPlaneInstance::MbPlaneInstance( const MbPlacement3D & p, const PlaneIte planeItems.reserve( addCnt ); for ( size_t k = 0; k < addCnt; ++k ) { const MbPlaneItem * planeItem = inits[k]; - if ( planeItem != NULL ) { + if ( planeItem != c3d_null ) { planeItem->AddRef(); planeItems.push_back( const_cast( planeItem ) ); } @@ -187,7 +187,7 @@ void MbPlaneInstance::GetItems( PlaneItems & items ) const items.reserve( items.size() + addCnt ); SPtr item_i; for ( size_t i = 0; i < addCnt; ++i ) { - if ( planeItems[i] != NULL ) { + if ( planeItems[i] != c3d_null ) { item_i = planeItems[i]; items.push_back( item_i ); } diff --git a/C3d/Include/plane_item.h b/C3d/Include/plane_item.h index a4e3fb7..8447db5 100644 --- a/C3d/Include/plane_item.h +++ b/C3d/Include/plane_item.h @@ -143,7 +143,7 @@ public : \return \ru Копия объекта. \en Copy of the object. \~ */ - virtual MbPlaneItem & Duplicate( MbRegDuplicate * iReg = NULL ) const = 0; + virtual MbPlaneItem & Duplicate( MbRegDuplicate * iReg = c3d_null ) const = 0; /** \brief \ru Преобразовать согласно матрице. \en Transform according to the matrix. \~ @@ -174,7 +174,7 @@ public : For transformation of projection curve. It isn't considered if the surface is planar. \~ */ - virtual void Transform( const MbMatrix & matr, MbRegTransform * iReg = NULL, const MbSurface * newSurface = NULL ) = 0; + virtual void Transform( const MbMatrix & matr, MbRegTransform * iReg = c3d_null, const MbSurface * newSurface = c3d_null ) = 0; /** \brief \ru Сдвинуть вдоль вектора. \en Translate along a vector. \~ @@ -205,7 +205,7 @@ public : For transformation of projection curve. It isn't considered if the surface is planar. \~ */ - virtual void Move ( const MbVector & to, MbRegTransform * iReg = NULL, const MbSurface * newSurface = NULL ) = 0; + virtual void Move ( const MbVector & to, MbRegTransform * iReg = c3d_null, const MbSurface * newSurface = c3d_null ) = 0; /** \brief \ru Повернуть вокруг точки. \en Rotate about a point. \~ @@ -239,7 +239,7 @@ public : It isn't considered if the surface is planar. \~ */ virtual void Rotate( const MbCartPoint & pnt, const MbDirection & angle, - MbRegTransform * iReg = NULL, const MbSurface * newSurface = NULL ) = 0; + MbRegTransform * iReg = c3d_null, const MbSurface * newSurface = c3d_null ) = 0; /** \brief \ru Повернуть вокруг точки. \en Rotate about a point. \~ @@ -261,7 +261,7 @@ public : It isn't considered if the surface is planar. \~ */ void Rotate( const MbCartPoint & pnt, double angle, - MbRegTransform * iReg = NULL, const MbSurface * newSurface = NULL ); + MbRegTransform * iReg = c3d_null, const MbSurface * newSurface = c3d_null ); /** \brief \ru Определить, являются ли объекты равными. \en Determine whether objects are equal. \~ diff --git a/C3d/Include/point3d.h b/C3d/Include/point3d.h index 0f0479a..7bb9d1b 100644 --- a/C3d/Include/point3d.h +++ b/C3d/Include/point3d.h @@ -49,10 +49,10 @@ public: virtual MbeSpaceType IsA() const; // \ru Тип объекта. \en A type of an object. virtual MbeSpaceType Type() const; // \ru Групповой тип объекта. \en Group type of object. virtual MbeSpaceType Family() const; // \ru Семейство объекта. \en Family of object. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Создать копию. \en Create a copy. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвинуть вдоль вектора. \en Translate along a vector. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate about an axis. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Создать копию. \en Create a copy. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвинуть вдоль вектора. \en Translate along a vector. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate about an axis. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Являются ли объекты равными? \en Are the objects equal? virtual bool SetEqual ( const MbSpaceItem & init ); // \ru Сделать объекты равным. \en Make the objects equal. virtual double DistanceToPoint ( const MbCartPoint3D & ) const; // \ru Вычислить расстояние до точки. \en Calculate the distance to a point. diff --git a/C3d/Include/point_frame.h b/C3d/Include/point_frame.h index e930442..f1c18ff 100644 --- a/C3d/Include/point_frame.h +++ b/C3d/Include/point_frame.h @@ -72,7 +72,7 @@ public: size_t vertsCnt = verts.size(); vertices.reserve( vertsCnt ); for ( size_t k = 0; k < vertsCnt; ++k ) { - if ( verts[k] != NULL ) + if ( verts[k] != c3d_null ) AddVertex( const_cast( *verts[k] ), same ); } } @@ -96,10 +96,10 @@ public: // \ru Общие функции геометрического объекта \en Common functions of a geometric object virtual MbeSpaceType IsA() const; // \ru Тип объекта. \en A type of an object. virtual MbeSpaceType Type() const; // \ru Групповой тип объекта. \en Group type of object. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Создать копию. \en Create a copy. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвинуть вдоль вектора. \en Translate along a vector. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate about an axis. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Создать копию. \en Create a copy. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвинуть вдоль вектора. \en Translate along a vector. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate about an axis. virtual bool IsSame ( const MbSpaceItem &, double accuracy = LENGTH_EPSILON ) const; // \ru Являются ли объекты равными? \en Are the objects equal? virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными? \en Are the objects similar? virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать объекты равным. \en Make the objects equal. @@ -128,9 +128,9 @@ public: /// \ru Выдать количество вершин. \en Get count of vertices. size_t GetVerticesCount() const { return vertices.size(); } /// \ru Получить вершину по индексу. \en Get vertex by an index. - const MbVertex * GetVertex( size_t k ) const { return ((k < vertices.size()) ? vertices[k] : NULL ); } + const MbVertex * GetVertex( size_t k ) const { return ((k < vertices.size()) ? vertices[k] : c3d_null ); } /// \ru Получить вершину по индексу для возможного редактирования. \en Get vertex by an index for the possible editing. - MbVertex * SetVertex( size_t k ) { return ((k < vertices.size()) ? vertices[k] : NULL ); } + MbVertex * SetVertex( size_t k ) { return ((k < vertices.size()) ? vertices[k] : c3d_null ); } /// \ru Получить вершины. \en Get vertices. template diff --git a/C3d/Include/position_data.h b/C3d/Include/position_data.h index 9e729a0..180873b 100644 --- a/C3d/Include/position_data.h +++ b/C3d/Include/position_data.h @@ -170,7 +170,7 @@ public: /// \ru Установить замкнутость. \en Set closedness. void SetClosed( bool c ) { closed = c; } - const MbCurveEdge * Edge ( size_t i ) const { return ( i < edges.Count() ) ? edges[i] : NULL; } + const MbCurveEdge * Edge ( size_t i ) const { return ( i < edges.Count() ) ? edges[i] : c3d_null; } const bool Sense( size_t i ) const { return ( i < sense.Count() ) ? sense[i] : false; } size_t Count() const { return edges.Count(); } /// \ru Оператор присваивания. \en Assignment operator. diff --git a/C3d/Include/reference_item.h b/C3d/Include/reference_item.h index f8f459c..a6c4401 100644 --- a/C3d/Include/reference_item.h +++ b/C3d/Include/reference_item.h @@ -191,9 +191,9 @@ template MbSerialItem::~MbSerialItem() template inline void DeleteMatItem( Type *& item ) { - if ( item != NULL ) { + if ( item != c3d_null ) { delete item; - item = NULL; + item = c3d_null; } } @@ -244,8 +244,8 @@ Type & DuplicateIfUsed( Type & item, RegType * iReg ) template Type * DuplicateIfUsed( SPtr & item ) { - if ( item == NULL ) - return NULL; + if ( item == c3d_null ) + return c3d_null; Type * resItem = item.get(); if ( item->GetUseCount() > 1 ) // \ru Если оригинал, то делаем копию. \en If there is original, then make a copy. resItem = static_cast( &item->Duplicate() ); @@ -260,8 +260,8 @@ Type * DuplicateIfUsed( SPtr & item ) template Type * DuplicateIfUsed( SPtr & item, RegType * iReg ) { - if ( item == NULL ) - return NULL; + if ( item == c3d_null ) + return c3d_null; Type * resItem = item.get(); if ( item->GetUseCount() > 1 ) // \ru Если оригинал, то делаем копию. \en If there is original, then make a copy. resItem = static_cast( &item->Duplicate( iReg ) ); @@ -275,10 +275,10 @@ Type * DuplicateIfUsed( SPtr & item, RegType * iReg ) template void DeleteItem( Type *& item ) { - if ( item != NULL ) { + if ( item != c3d_null ) { if ( item->GetUseCount() < 1 ) delete item; - item = NULL; + item = c3d_null; } } @@ -288,9 +288,9 @@ void DeleteItem( Type *& item ) template void ReleaseItem( Type *& item ) { - if ( item != NULL ) { + if ( item != c3d_null ) { item->Release(); - item = NULL; + item = c3d_null; } } @@ -300,7 +300,7 @@ void ReleaseItem( Type *& item ) template void AddRefItem( const Type * item ) { - if ( item != NULL ) + if ( item != c3d_null ) item->AddRef(); } @@ -310,7 +310,7 @@ void AddRefItem( const Type * item ) template void DecRefItem( const Type * item ) { - if ( item != NULL ) + if ( item != c3d_null ) item->DecRef(); } @@ -318,11 +318,11 @@ void DecRefItem( const Type * item ) //------------------------------------------------------------------------------ /// \ru Захватить объекты. \en Catch objects. // --- -template -void AddRefItems( const Vector & items ) +template +void AddRefItems( const ItemsVector & items ) { for ( size_t k = 0, itemsCnt = items.size(); k < itemsCnt; ++k ) { - if ( items[k] != NULL ) + if ( items[k] != c3d_null ) items[k]->AddRef(); } } @@ -331,11 +331,11 @@ void AddRefItems( const Vector & items ) //------------------------------------------------------------------------------ /// \ru Отпустить объекты без удаления. \en Detach objects without removing. // --- -template -void DecRefItems( const Vector & items ) +template +void DecRefItems( const ItemsVector & items ) { for ( size_t k = 0, itemsCnt = items.size(); k < itemsCnt; ++k ) { - if ( items[k] != NULL ) + if ( items[k] != c3d_null ) items[k]->DecRef(); } } @@ -344,8 +344,8 @@ void DecRefItems( const Vector & items ) //------------------------------------------------------------------------------ /// \ru Удалить никому не нужные объекты. \en Remove unnecessary objects. // --- -template -void DeleteItems( Vector & items ) +template +void DeleteItems( ItemsVector & items ) { for ( size_t k = 0, itemsCnt = items.size(); k < itemsCnt; ++k ) ::DeleteItem( items[k] ); @@ -356,8 +356,8 @@ void DeleteItems( Vector & items ) //------------------------------------------------------------------------------ /// \ru Отпустить объекты с возможным удалением. \en Detach objects with possible removing. // --- -template -void ReleaseItems( Vector & items ) +template +void ReleaseItems( ItemsVector & items ) { for ( size_t k = 0, itemsCnt = items.size(); k < itemsCnt; ++k ) ::ReleaseItem( items[k] ); @@ -368,8 +368,24 @@ void ReleaseItems( Vector & items ) //------------------------------------------------------------------------------ /// \ru Удалить никому не нужные объекты. \en Remove unnecessary objects. // --- -template -void DeleteItems( Vector & items, SArray & coItems ) +template +void DeleteItems( ItemsVector & items, SArray & coItems ) +{ + size_t itemsCnt = items.size(); + if ( itemsCnt > 0 ) { + for ( size_t k = 0; k < itemsCnt; ++k ) + ::DeleteItem( items[k] ); + items.clear(); + coItems.clear(); + } +} + + +//------------------------------------------------------------------------------ +/// \ru Удалить никому не нужные объекты. \en Remove unnecessary objects. +// --- +template +void DeleteItems( ItemsVector & items, std::vector & coItems ) { size_t itemsCnt = items.size(); if ( itemsCnt > 0 ) { @@ -384,8 +400,24 @@ void DeleteItems( Vector & items, SArray & coItems ) //------------------------------------------------------------------------------ /// \ru Отпустить объекты с возможным удалением. \en Detach objects with possible removing. // --- -template -void ReleaseItems( Vector & items, SArray & coItems ) +template +void ReleaseItems( ItemsVector & items, SArray & coItems ) +{ + size_t itemsCnt = items.size(); + if ( itemsCnt > 0 ) { + for ( size_t k = 0; k < itemsCnt; ++k ) + ::ReleaseItem( items[k] ); + items.clear(); + coItems.clear(); + } +} + + +//------------------------------------------------------------------------------ +/// \ru Отпустить объекты с возможным удалением. \en Detach objects with possible removing. +// --- +template +void ReleaseItems( ItemsVector & items, std::vector & coItems ) { size_t itemsCnt = items.size(); if ( itemsCnt > 0 ) { @@ -406,7 +438,7 @@ void AddRefItems( const TypeVector & srcItems, bool same, RPArray & dstIte if ( (srcItems.size() > 0) && reinterpret_cast( &srcItems ) != reinterpret_cast( &dstItems ) ) { dstItems.reserve( dstItems.size() + srcItems.size() ); for ( size_t k = 0, cnt = srcItems.size(); k < cnt; ++k ) { - if ( srcItems[k] != NULL ) { + if ( srcItems[k] != c3d_null ) { Type * srcItem = &const_cast(*srcItems[k]); Type * dstItem = same ? srcItem : static_cast( &srcItem->Duplicate() ); dstItem->AddRef(); @@ -426,7 +458,7 @@ void AddRefItems( const TypeVector & srcItems, bool same, std::vector< SPtr 0) && reinterpret_cast(&srcItems) != reinterpret_cast(&dstItems) ) { dstItems.reserve( dstItems.size() + srcItems.size() ); for ( size_t k = 0, cnt = srcItems.size(); k < cnt; k++ ) { - if ( srcItems[k] != NULL ) { + if ( srcItems[k] != c3d_null ) { Type * srcItem = &const_cast(*srcItems[k]); SPtr dstItem; dstItem = same ? srcItem : static_cast( &srcItem->Duplicate() ); @@ -446,7 +478,7 @@ void AddRefItems( const TypeVector & srcItems, bool same, std::vector & if ( (srcItems.size() > 0) && reinterpret_cast( &srcItems ) != reinterpret_cast( &dstItems ) ) { dstItems.reserve( dstItems.size() + srcItems.size() ); for ( size_t k = 0, cnt = srcItems.size(); k < cnt; ++k ) { - if ( srcItems[k] != NULL ) { + if ( srcItems[k] != c3d_null ) { Type * srcItem = &const_cast(*srcItems[k]); Type * dstItem = same ? srcItem : static_cast( &srcItem->Duplicate() ); dstItem->AddRef(); @@ -466,7 +498,7 @@ void AddRefRegItems( const TypeVector & srcItems, bool same, RPArray & dst if ( (srcItems.size() > 0) && reinterpret_cast(&srcItems) != reinterpret_cast(&dstItems) ) { dstItems.reserve( dstItems.size() + srcItems.size() ); for ( size_t k = 0, cnt = srcItems.size(); k < cnt; ++k ) { - if ( srcItems[k] != NULL ) { + if ( srcItems[k] != c3d_null ) { Type * srcItem = &const_cast(*srcItems[k]); Type * dstItem = same ? srcItem : static_cast( &srcItem->Duplicate( iReg ) ); dstItem->AddRef(); @@ -486,7 +518,7 @@ void AddRefRegItems( const TypeVector & srcItems, bool same, std::vector< SPtr 0) && reinterpret_cast(&srcItems) != reinterpret_cast(&dstItems) ) { dstItems.reserve( dstItems.size() + srcItems.size() ); for ( size_t k = 0, cnt = srcItems.size(); k < cnt; ++k ) { - if ( srcItems[k] != NULL ) { + if ( srcItems[k] != c3d_null ) { Type * srcItem = &const_cast(*srcItems[k]); SPtr dstItem; dstItem = same ? srcItem : static_cast( &srcItem->Duplicate( iReg ) ); @@ -506,7 +538,7 @@ void AddRefRegItems( const TypeVector & srcItems, bool same, std::vector if ( (srcItems.size() > 0) && reinterpret_cast(&srcItems) != reinterpret_cast(&dstItems) ) { dstItems.reserve( dstItems.size() + srcItems.size() ); for ( size_t k = 0, cnt = srcItems.size(); k < cnt; ++k ) { - if ( srcItems[k] != NULL ) { + if ( srcItems[k] != c3d_null ) { Type * srcItem = &const_cast(*srcItems[k]); Type * dstItem = same ? srcItem : static_cast( &srcItem->Duplicate( iReg ) ); dstItem->AddRef(); @@ -523,9 +555,9 @@ void AddRefRegItems( const TypeVector & srcItems, bool same, std::vector template bool IsItemSame( const Item * item1, const Item * item2, double accuracy ) { - if ( (item1 == NULL) && (item2 == NULL) ) + if ( (item1 == c3d_null) && (item2 == c3d_null) ) return true; - else if ( (item1 != NULL) && (item2 != NULL) && item1->IsSame( *item2, accuracy ) ) + else if ( (item1 != c3d_null) && (item2 != c3d_null) && item1->IsSame( *item2, accuracy ) ) return true; return false; } @@ -543,7 +575,7 @@ bool AreItemsSame( const Vector & items1, const Vector & items2, double accuracy if ( cnt == items2.size() ) { areEqual = true; for ( size_t k = 0; k < cnt; ++k ) { - if ( (items1[k] == NULL) || (items2[k] == NULL) || !items1[k]->IsSame( *items2[k], accuracy ) ) { + if ( (items1[k] == c3d_null) || (items2[k] == c3d_null) || !items1[k]->IsSame( *items2[k], accuracy ) ) { areEqual = false; break; } @@ -589,7 +621,7 @@ bool AreItemsSimilar( const Vector & items1, const Vector & items2 ) if ( cnt == items2.size() ) { areEqual = true; for ( size_t k = 0; k < cnt; ++k ) { - if ( (items1[k] == NULL) || (items2[k] == NULL) || !items1[k]->IsSimilar( *items2[k] ) ) { + if ( (items1[k] == c3d_null) || (items2[k] == c3d_null) || !items1[k]->IsSimilar( *items2[k] ) ) { areEqual = false; break; } @@ -614,7 +646,7 @@ bool SetItemsEqual( const Vector & srcItems, Vector & dstItems ) if ( setEqual ) { for ( size_t k = 0; k < cnt; ++k ) { - if ( srcItems[k] == NULL || dstItems[k] == NULL || !dstItems[k]->SetEqual( *srcItems[k] ) ) { + if ( srcItems[k] == c3d_null || dstItems[k] == c3d_null || !dstItems[k]->SetEqual( *srcItems[k] ) ) { setEqual = false; break; } @@ -636,7 +668,7 @@ void DuplicateItems( const TypeVector & srcItems, RegType * iReg, bool same, RPA dstItems.Reserve( srcItems.size() ); for ( size_t k = 0, cnt = srcItems.size(); k < cnt; ++k ) { Type * srcItem = srcItems[k]; - if ( srcItem != NULL ) { + if ( srcItem != c3d_null ) { Type * dstItem = same ? srcItem : static_cast( &srcItem->Duplicate( iReg ) ); dstItems.push_back( dstItem ); } @@ -654,7 +686,7 @@ void DuplicateItems( const TypeVector & srcItems, RegType * iReg, bool same, std dstItems.reserve( dstItems.size() + srcItems.size() ); for ( size_t k = 0, cnt = srcItems.size(); k < cnt; ++k ) { Type * srcItem = srcItems[k]; - if ( srcItem != NULL ) { + if ( srcItem != c3d_null ) { SPtr dstItem; dstItem = same ? srcItem : static_cast( &srcItem->Duplicate( iReg ) ); dstItems.push_back( dstItem ); @@ -673,7 +705,7 @@ void DuplicateItems( const TypeVector & srcItems, RegType * iReg, bool same, std dstItems.reserve( dstItems.size() + srcItems.size() ); for ( size_t k = 0, cnt = srcItems.size(); k < cnt; ++k ) { Type * srcItem = srcItems[k]; - if ( srcItem != NULL ) { + if ( srcItem != c3d_null ) { Type * dstItem = same ? srcItem : static_cast( &srcItem->Duplicate( iReg ) ); dstItems.push_back( dstItem ); } @@ -688,7 +720,7 @@ template void TransformItems( Array & items, const Matrix & matr, RegType * iReg ) { for ( size_t k = 0, cnt = items.size(); k < cnt; ++k ) { - if ( items[k] != NULL ) + if ( items[k] != c3d_null ) items[k]->Transform( matr, iReg ); } } @@ -711,7 +743,7 @@ template void MoveItems( Array & items, const Vector & to, RegType * iReg ) { for ( size_t k = 0, cnt = items.size(); k < cnt; ++k ) { - if ( items[k] != NULL ) + if ( items[k] != c3d_null ) items[k]->Move( to, iReg ); } } @@ -734,7 +766,7 @@ template void RotateItems( Array & items, const Axis & axis, double angle, RegType * iReg ) { for ( size_t k = 0, cnt = items.size(); k < cnt; ++k ) { - if ( items[k] != NULL ) + if ( items[k] != c3d_null ) items[k]->Rotate( axis, angle, iReg ); } } @@ -759,7 +791,7 @@ void WriteRefItems( const Vector & items, Writer & out ) size_t k, cnt = items.size(); for ( k = 0; k < cnt; ++k ) { - if ( items[k] == NULL ) + if ( items[k] == c3d_null ) cnt--; } @@ -767,7 +799,7 @@ void WriteRefItems( const Vector & items, Writer & out ) if ( out.good() ) { for ( k = 0; k < cnt; ++k ) { - if ( items[k] != NULL ) { + if ( items[k] != c3d_null ) { items[k]->PrepareWrite(); out << &(*items[k]); } @@ -785,7 +817,7 @@ void WriteRefItems( const std::vector< SPtr > & items, Writer & out ) size_t k, cnt = items.size(); for ( k = 0; k < cnt; ++k ) { - if ( items[k] == NULL ) + if ( items[k] == c3d_null ) cnt--; } @@ -793,7 +825,7 @@ void WriteRefItems( const std::vector< SPtr > & items, Writer & out ) if ( out.good() ) { for ( k = 0; k < cnt; ++k ) { - if ( items[k] != NULL ) { + if ( items[k] != c3d_null ) { items[k]->PrepareWrite(); out << items[k].get(); } @@ -814,9 +846,9 @@ void ReadRefItems( Reader & in, RPArray & items ) items.reserve( items.size() + cnt ); for ( size_t i = 0; i < cnt; ++i ) { - Type * item = NULL; + Type * item = c3d_null; in >> item; - if ( item != NULL ) { + if ( item != c3d_null ) { items.push_back( item ); item->AddRef(); } @@ -835,9 +867,9 @@ void ReadRefItems( Reader & in, std::vector & items ) if ( in.good() && cnt > 0 ) { for ( size_t i = 0; i < cnt; ++i ) { - Type * item = NULL; + Type * item = c3d_null; in >> item; - if ( item != NULL ) { + if ( item != c3d_null ) { items.push_back( item ); item->AddRef(); } @@ -856,9 +888,9 @@ void ReadRefItems( Reader & in, std::vector< SPtr > & items ) if ( in.good() && cnt > 0 ) { for ( size_t i = 0; i < cnt; ++i ) { - Type * item = NULL; + Type * item = c3d_null; in >> item; - if ( item != NULL ) + if ( item != c3d_null ) items.push_back( SPtr(item) ); } } @@ -997,7 +1029,7 @@ inline Type * DetachItem( SPtr & itemOwner ) template void ReplaceByCopy( Type *& item ) { - if ( item != NULL ) { + if ( item != c3d_null ) { Type * temp = (Type *)&item->Duplicate(); ::DeleteItem( item ); item = temp; diff --git a/C3d/Include/region.h b/C3d/Include/region.h index cc0c05c..995dc57 100644 --- a/C3d/Include/region.h +++ b/C3d/Include/region.h @@ -51,7 +51,7 @@ public: MbRegion( const SPtr &, bool same ); ///< \ru Регион с одним внешним контуром. \en Region with one external contour. MbRegion( const RPArray &, bool same ); ///< \ru Регион с несколькими контурами. \en Region with several contours. MbRegion( const std::vector< SPtr > &, bool same ); ///< \ru Регион с несколькими контурами. \en Region with several contours. - MbRegion( const MbRegion &, bool same, MbRegDuplicate * iReg = NULL ); ///< \ru Конструктор копии. \en Copy-constructor. + MbRegion( const MbRegion &, bool same, MbRegDuplicate * iReg = c3d_null ); ///< \ru Конструктор копии. \en Copy-constructor. public: virtual ~MbRegion(); @@ -63,10 +63,10 @@ public: virtual MbePlaneType IsA() const; // \ru Тип объекта. \en A type of an object. virtual MbePlaneType Type() const; // \ru Групповой тип объекта. \en Group type of object. virtual MbePlaneType Family() const; // \ru Семейство объекта. \en Family of object. - virtual MbPlaneItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию. \en Create a copy - virtual void Transform( const MbMatrix &, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. - virtual void Move ( const MbVector &, MbRegTransform * = NULL, const MbSurface * newSurface = NULL ); // \ru Сдвинуть вдоль вектора. \en Move along a vector. - virtual void Rotate ( const MbCartPoint &, const MbDirection & angle, MbRegTransform * iReg = NULL, const MbSurface * newSurface = NULL ); + virtual MbPlaneItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию. \en Create a copy + virtual void Transform( const MbMatrix &, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. + virtual void Move ( const MbVector &, MbRegTransform * = c3d_null, const MbSurface * newSurface = c3d_null ); // \ru Сдвинуть вдоль вектора. \en Move along a vector. + virtual void Rotate ( const MbCartPoint &, const MbDirection & angle, MbRegTransform * iReg = c3d_null, const MbSurface * newSurface = c3d_null ); virtual bool IsSame ( const MbPlaneItem &, double accuracy = LENGTH_EPSILON ) const; // \ru Являются ли объекты равными? \en Determine whether objects are equal. virtual bool SetEqual ( const MbPlaneItem & ); // \ru Сделать объекты равным. \en Make objects equal. virtual void AddYourGabaritTo( MbRect & ) const; // \ru Добавить свой габарит в присланный габарит. \en Add your own bounding box into the sent bounding box. @@ -276,7 +276,7 @@ private: // --- MATH_FUNC (bool) CreateBooleanResultRegions( RPArray & contours1, RPArray & contours2, const MbRegionBooleanParams & operParams, RPArray & regions, - MbResultType * resInfo = NULL ); + MbResultType * resInfo = c3d_null ); //------------------------------------------------------------------------------- @@ -301,7 +301,7 @@ MATH_FUNC (bool) CreateBooleanResultRegions( RPArray & contours1, RPA // --- MATH_FUNC (bool) CreateBooleanResultRegions( MbRegion & region1, MbRegion & region2, const MbRegionBooleanParams & operParams, RPArray & regions, - MbResultType * resInfo = NULL ); + MbResultType * resInfo = c3d_null ); //------------------------------------------------------------------------------- diff --git a/C3d/Include/sheet_metal_param.h b/C3d/Include/sheet_metal_param.h index a62a2bd..8475292 100644 --- a/C3d/Include/sheet_metal_param.h +++ b/C3d/Include/sheet_metal_param.h @@ -18,6 +18,7 @@ #include #include #include +#include class MATH_CLASS MbFace; @@ -36,6 +37,19 @@ enum MbeReleaseType { }; +//------------------------------------------------------------------------------ +/** \brief \ru Тип создаваемой части штамповки. + \en The type of stamping part being created. \~ + \ingroup Sheet_Metal_Modeling +*/ +// --- +enum MbeStampingCreatedType { + sct_add, ///< \ru Добавляемая часть штамповки. \en Added part of the stamping. + sct_substact, ///< \ru Вычитаемая часть штамповки. \en Substracted part of the stamping. + sct_all ///< \ru Вcя штамповка вместе с телом. \en All stamping with the body. +}; + + //------------------------------------------------------------------------------ /** \brief \ru Параметры сгиба. \en The bend parameters. \~ @@ -142,11 +156,11 @@ public: // --- struct MATH_CLASS MbSheetMetalValues { public: - double thickness; ///< \ru Толщина. \en The thickness. - double k; ///< \ru Коэффициент, определяющий положение нейтрального слоя. \en Coefficient determining the position of the neutral layer. - double radius; ///< \ru Внутренний радиус сгиба. \en The internal radius of the bend. - MbSweptSide side1; ///< \ru Параметры для стороны, лежащей в направлении нормали к эскизу. \en Parameters for side lying along the direction of normal to the sketch. - MbSweptSide side2; ///< \ru Параметры для противоположной стороны. \en Parameters for the opposite side. + double thickness; ///< \ru Толщина. \en The thickness. + double k; ///< \ru Коэффициент, определяющий положение нейтрального слоя. \en Coefficient determining the position of the neutral layer. + double radius; ///< \ru Внутренний радиус сгиба. \en The internal radius of the bend. + MbSweptSide side1; ///< \ru Параметры для стороны, лежащей в направлении нормали к эскизу. \en Parameters for side lying along the direction of normal to the sketch. + MbSweptSide side2; ///< \ru Параметры для противоположной стороны. \en Parameters for the opposite side. public: /// \ru Конструктор по умолчанию. \en Default constructor. @@ -183,29 +197,29 @@ public: \en \name Functions for working with surfaces to which extrude. \{ */ /// \ru Получить ограничивающую поверхность в направлении нормали. \en Get bounding surface in direction of normal. - MbSurface * GetSurface1() const { return side1.GetSurface(); } + const MbSurface * GetSurface1() const { return side1.GetSurface(); } /// \ru Получить ограничивающую поверхность в противоположном направлении. \en Get bounding surface along the opposite direction. - MbSurface * GetSurface2() const { return side2.GetSurface(); } + const MbSurface * GetSurface2() const { return side2.GetSurface(); } + + /// \ru Получить ограничивающую поверхность в направлении нормали. \en Get bounding surface in direction of normal. + MbSurface * SetSurface1() { return side1.SetSurface(); } + /// \ru Получить ограничивающую поверхность в противоположном направлении. \en Get bounding surface along the opposite direction. + MbSurface * SetSurface2() { return side2.SetSurface(); } /// \ru Установить ограничивающую поверхность в направлении нормали. \en Set bounding surface along the direction of normal. - void SetSurface1( MbSurface *s ) { side1.SetSurface( s ); } + void SetSurface1( const MbSurface * s ) { side1.SetSurface( s ); } /// \ru Установить ограничивающую поверхность в противоположном направлении. \en Set bounding surface along the opposite direction. - void SetSurface2( MbSurface *s ) { side2.SetSurface( s ); } + void SetSurface2( const MbSurface * s ) { side2.SetSurface( s ); } + /// \ru Поменять местами ограничивающие выдавливание поверхности. \en Swap bounding extrusions of surfaces. - void ExchangeSurfaces() { - MbSurface *s = side1.GetSurface(); - MbSweptWay w = side1.way; - double d = side1.distance; - if (s!=NULL) - s->AddRef(); + void ExchangeSurfaces() + { + std::swap( side1.way, side2.way ); + std::swap( side1.distance, side2.distance ); + + c3d::ConstSurfaceSPtr surf1( side1.GetSurface() ); side1.SetSurface( side2.GetSurface() ); - side1.way = side2.way; - side1.distance = side2.distance; - side2.SetSurface( s ); - side2.way = w; - side2.distance = d; - if (s!=NULL) - s->DecRef(); + side2.SetSurface( surf1 ); } /** \} */ @@ -1345,10 +1359,10 @@ struct MATH_CLASS MbRuledSolidValues { MbRuledSolidValues() : placement1 ( ), contour1 ( ), - breaks1 ( NULL ), - placement2 ( NULL ), - contour2 ( NULL ), - breaks2 ( NULL ), + breaks1 ( c3d_null ), + placement2 ( c3d_null ), + contour2 ( c3d_null ), + breaks2 ( c3d_null ), thickness ( 0.0 ), radius ( 0.0 ), slopeAngle ( 0.0 ), @@ -1362,16 +1376,16 @@ struct MATH_CLASS MbRuledSolidValues { cylindricBends ( false ), joinByVertices ( true ), surfDistance ( 0.0 ), - surface ( NULL ) { + surface ( c3d_null ) { } /// \ru Конструктор копирования. \en Copy-constructor. MbRuledSolidValues( const MbRuledSolidValues & other ) : placement1 ( other.placement1 ), contour1 (), - breaks1 ( (other.breaks1 != NULL) ? new SArray(*other.breaks1) : NULL ), - placement2 ( (other.placement2 != NULL) ? new MbPlacement3D(*other.placement2) : NULL ), - contour2 ( (other.contour2 != NULL) ? new MbContour() : NULL ), - breaks2 ( (other.breaks2 != NULL) ? new SArray(*other.breaks2) : NULL ), + breaks1 ( (other.breaks1 != c3d_null) ? new SArray(*other.breaks1) : c3d_null ), + placement2 ( (other.placement2 != c3d_null) ? new MbPlacement3D(*other.placement2) : c3d_null ), + contour2 ( (other.contour2 != c3d_null) ? new MbContour() : c3d_null ), + breaks2 ( (other.breaks2 != c3d_null) ? new SArray(*other.breaks2) : c3d_null ), thickness ( other.thickness ), radius ( other.radius ), slopeAngle ( other.slopeAngle ), @@ -1385,9 +1399,9 @@ struct MATH_CLASS MbRuledSolidValues { cylindricBends ( other.cylindricBends ), joinByVertices ( other.joinByVertices ), surfDistance ( other.surfDistance ), - surface ( (other.surface != NULL) ? static_cast(&other.surface->Duplicate()) : NULL ) { + surface ( (other.surface != c3d_null) ? static_cast(&other.surface->Duplicate()) : c3d_null ) { contour1.Init( other.contour1 ); - if ( contour2 != NULL && other.contour2 != NULL ) + if ( contour2 != c3d_null && other.contour2 != c3d_null ) contour2->Init( *other.contour2 ); } /// \ru Конструктор по конкретным параметрам. \en Constructor by specific parameters. @@ -1399,10 +1413,10 @@ struct MATH_CLASS MbRuledSolidValues { const double surfDist, const MbSurface * surf ) : placement1( place1 ), contour1(), - breaks1( (brks1 != NULL) ? new SArray(*brks1) : NULL ), - placement2( (place2 != NULL) ? new MbPlacement3D(*place2) : NULL ), - contour2( (cntr2 != NULL) ? new MbContour() : NULL ), - breaks2( (brks2 != NULL) ? new SArray(*brks2) : NULL ), + breaks1( (brks1 != c3d_null) ? new SArray(*brks1) : c3d_null ), + placement2( (place2 != c3d_null) ? new MbPlacement3D(*place2) : c3d_null ), + contour2( (cntr2 != c3d_null) ? new MbContour() : c3d_null ), + breaks2( (brks2 != c3d_null) ? new SArray(*brks2) : c3d_null ), thickness( thick ), radius( rad ), slopeAngle( sAngle ), @@ -1416,9 +1430,9 @@ struct MATH_CLASS MbRuledSolidValues { cylindricBends( cylBends ), joinByVertices( joinByVert ), surfDistance( surfDist ), - surface( (surf != NULL) ? static_cast(&surf->Duplicate()) : NULL ) { + surface( (surf != c3d_null) ? static_cast(&surf->Duplicate()) : c3d_null ) { contour1.Init( cntr1 ); - if ( (contour2 != NULL) && (cntr2 != NULL) ) + if ( (contour2 != c3d_null) && (cntr2 != c3d_null) ) contour2->Init( *cntr2 ); } @@ -1427,40 +1441,40 @@ struct MATH_CLASS MbRuledSolidValues { placement1.Init( other.placement1 ); contour1.Init( other.contour1 ); - if ( other.breaks1 != NULL ) { - if ( breaks1 != NULL ) + if ( other.breaks1 != c3d_null ) { + if ( breaks1 != c3d_null ) ((SArray &)*breaks1) = *other.breaks1; else breaks1 = new SArray( *other.breaks1 ); } else - breaks1 = NULL; + breaks1 = c3d_null; - if ( other.placement2 != NULL ) { - if ( placement2 != NULL ) + if ( other.placement2 != c3d_null ) { + if ( placement2 != c3d_null ) placement2->Init( *other.placement2 ); else placement2 = new MbPlacement3D( *other.placement2 ); } else - placement2 = NULL; + placement2 = c3d_null; - if ( other.contour2 != NULL ) { - if ( contour2 == NULL ) + if ( other.contour2 != c3d_null ) { + if ( contour2 == c3d_null ) contour2 = new MbContour(); contour2->Init( *other.contour2 ); } else - contour2 = NULL; + contour2 = c3d_null; - if ( other.breaks2 != NULL ) { - if ( breaks2 != NULL ) + if ( other.breaks2 != c3d_null ) { + if ( breaks2 != c3d_null ) ((SArray &)*breaks2) = *other.breaks2; else breaks2 = new SArray( *other.breaks2 ); } else - breaks1 = NULL; + breaks1 = c3d_null; thickness = other.thickness; radius = other.radius; @@ -1476,10 +1490,10 @@ struct MATH_CLASS MbRuledSolidValues { joinByVertices = other.joinByVertices; surfDistance = other.surfDistance; - if ( other.surface != NULL ) + if ( other.surface != c3d_null ) surface = static_cast( &other.surface->Duplicate() ); else - surface = NULL; + surface = c3d_null; } /// \ru Инициализировать контуры. \en Initialize contours. @@ -1488,40 +1502,40 @@ struct MATH_CLASS MbRuledSolidValues { placement1.Init( place1 ); contour1.Init( cntr1 ); - if ( brks1 != NULL ) { - if ( breaks1 != NULL ) + if ( brks1 != c3d_null ) { + if ( breaks1 != c3d_null ) ((SArray &)*breaks1) = *brks1; else breaks1 = new SArray( *brks1 ); } else - breaks1 = NULL; + breaks1 = c3d_null; - if ( place2 != NULL ) { - if ( placement2 != NULL ) + if ( place2 != c3d_null ) { + if ( placement2 != c3d_null ) placement2->Init( *place2 ); else placement2 = new MbPlacement3D( *place2 ); } else - placement2 = NULL; + placement2 = c3d_null; - if ( cntr2 != NULL ) { - if ( contour2 == NULL ) + if ( cntr2 != c3d_null ) { + if ( contour2 == c3d_null ) contour2 = new MbContour(); contour2->Init( *cntr2 ); } else - contour2 = NULL; + contour2 = c3d_null; - if ( brks2 != NULL ) { - if ( breaks2 != NULL ) + if ( brks2 != c3d_null ) { + if ( breaks2 != c3d_null ) ((SArray &)*breaks2) = *brks2; else breaks2 = new SArray( *brks2 ); } else - breaks1 = NULL; + breaks1 = c3d_null; } /// \ru Оператор присваивания. \en Assignment operator. @@ -1551,16 +1565,16 @@ struct MATH_CLASS MbRuledSolidValues { ::fabs( gapShift - other.gapShift ) < accuracy && ::fabs( surfDistance - other.surfDistance ) < accuracy ) { - bool isBreaks1 = breaks1 != NULL; - bool isOtherBreaks1 = other.breaks1 != NULL; - bool isPlacement2 = placement2 != NULL; - bool isOtherPlacement2 = other.placement2 != NULL; - bool isContour2 = contour2 != NULL; - bool isOtherContour2 = other.contour2 != NULL; - bool isBreaks2 = breaks2 != NULL; - bool isOtherBreaks2 = other.breaks2 != NULL; - bool isSurf = surface != NULL; - bool isOtherSurf = other.surface != NULL; + bool isBreaks1 = breaks1 != c3d_null; + bool isOtherBreaks1 = other.breaks1 != c3d_null; + bool isPlacement2 = placement2 != c3d_null; + bool isOtherPlacement2 = other.placement2 != c3d_null; + bool isContour2 = contour2 != c3d_null; + bool isOtherContour2 = other.contour2 != c3d_null; + bool isBreaks2 = breaks2 != c3d_null; + bool isOtherBreaks2 = other.breaks2 != c3d_null; + bool isSurf = surface != c3d_null; + bool isOtherSurf = other.surface != c3d_null; if ( isBreaks1 == isOtherBreaks1 && isPlacement2 == isOtherPlacement2 && @@ -1766,13 +1780,13 @@ public: size_t i, cnt; for ( i = 0, cnt = innerFaces.Count(); i < cnt && isSame; i++ ) - if ( innerFaces[i] == NULL || other.innerFaces[i] == NULL || !innerFaces[i]->IsSame( *other.innerFaces[i], accuracy ) ) { + if ( innerFaces[i] == c3d_null || other.innerFaces[i] == c3d_null || !innerFaces[i]->IsSame( *other.innerFaces[i], accuracy ) ) { isSame = false; break; } for ( i = 0, cnt = outerFaces.Count(); i < cnt && isSame; i++ ) - if ( outerFaces[i] == NULL || other.outerFaces[i] == NULL || !outerFaces[i]->IsSame( *other.outerFaces[i], accuracy ) ) { + if ( outerFaces[i] == c3d_null || other.outerFaces[i] == c3d_null || !outerFaces[i]->IsSame( *other.outerFaces[i], accuracy ) ) { isSame = false; break; } @@ -1903,29 +1917,33 @@ private: struct MATH_CLASS MbToolStampingValues { double punchFilletRadius; ///< \ru Радиус скругления основания со стороны пуансона (отрицательное значение запрещает скругление). \en Punch fillet radius of base (negative value prohibits fillet). double dieFilletRadius; ///< \ru Радиус скругления основания со стороны матрицы (отрицательное значение запрещает скругление). \en Die fillet radius of base (negative value prohibits fillet). + double toolFilletRadius; ///< \ru Радиус скругления негладких ребер инструмента (отрицательное значение запрещает скругление). \en Fillet radius of sharp edges of tool (negative value prohibits fillet). double stampThickness; ///< \ru Толщина формованной части. \en Thickness of a stamped part. - bool constantThickness; ///< \ru Флаг постоянной толщины на штамповке. \en Constant thickness flag. + bool filletToolEdges; ///< \ru Флаг скругления острых ребер инструмента. \en Flag of fillet sharp edges of tool solid. /// \ru Конструктор по умолчанию. \en Default constructor. MbToolStampingValues() : punchFilletRadius( 0.0 ), dieFilletRadius ( 0.0 ), + toolFilletRadius ( 0.0 ), stampThickness ( 0.0 ), - constantThickness( true ) + filletToolEdges ( true ) {} /// \ru Конструктор копирования. \en Copy-constructor. MbToolStampingValues( const MbToolStampingValues & other ) : punchFilletRadius( other.punchFilletRadius ), dieFilletRadius ( other.dieFilletRadius ), + toolFilletRadius ( other.toolFilletRadius ), stampThickness ( other.stampThickness ), - constantThickness( other.constantThickness ) + filletToolEdges ( other.filletToolEdges ) {} /// \ru Конструктор по конкретным параметрам. \en Constructor by specific parameters. - MbToolStampingValues( double punchRad, double dieRad, double thick, bool constThick ) : + MbToolStampingValues( double punchRad, double dieRad, double toolRad, double thick, bool filletTool ) : punchFilletRadius( punchRad ), dieFilletRadius ( dieRad ), + toolFilletRadius ( toolRad ), stampThickness ( thick ), - constantThickness( constThick ) + filletToolEdges ( filletTool ) {} /// \ru Оператор присваивания. \en Assignment operator. @@ -1934,8 +1952,9 @@ struct MATH_CLASS MbToolStampingValues { void Init( const MbToolStampingValues & other ) { punchFilletRadius = other.punchFilletRadius; dieFilletRadius = other.dieFilletRadius; + toolFilletRadius = other.toolFilletRadius; stampThickness = other.stampThickness; - constantThickness = other.constantThickness; + filletToolEdges = other.filletToolEdges; } ///\ru Являются ли объекты равными? \en Determine whether an object is equal? @@ -1944,8 +1963,9 @@ struct MATH_CLASS MbToolStampingValues { if ( ::fabs(punchFilletRadius - other.punchFilletRadius) < accuracy && ::fabs(dieFilletRadius - other.dieFilletRadius) < accuracy && + ::fabs(toolFilletRadius - other.toolFilletRadius) < accuracy && ::fabs(stampThickness - other.stampThickness) < accuracy && - constantThickness == other.constantThickness ) + filletToolEdges == other.filletToolEdges ) isSame = true; return isSame; @@ -1968,42 +1988,53 @@ struct MATH_CLASS MbToolStampingValues { struct MATH_CLASS MbSolidToSheetMetalValues { public: /// \ru Ребро для построения сгиба и параметры сгиба. \en The bend edge and parameters of bending. \~ - struct MbBendEdgeValues { - double bendRadius; ///< \ru Внутренний радиус сгиба. \en The internal radius of the bend. + struct MATH_CLASS MbBendEdgeValues : public MbBendValues { MbEdgeFacesIndexes bendEdgeIndex; ///< \ru Индекс ребра сгиба. \en Index of bend edge. + MbName innerFaceName; ///< \ru Имя внутренней грани сгиба. \en Name of interior face of bend. + MbName outerFaceName; ///< \ru Имя внешней грани сгиба. \en Name of exterior face of bend. /// \ru Конструктор по умолчанию. \en Default constructor. MbBendEdgeValues() - : bendRadius () + : MbBendValues() , bendEdgeIndex() + , innerFaceName() + , outerFaceName() {} /// \ru Конструктор по конкретным параметрам. \en Constructor by specific parameters. - MbBendEdgeValues( double r, MbEdgeFacesIndexes index ) - : bendRadius ( r ) - , bendEdgeIndex( index ) + MbBendEdgeValues( double coef, double rad, MbEdgeFacesIndexes index ) + : MbBendValues( coef, rad, 0.0, 0.0/*coneAng*/ ) + , bendEdgeIndex( index ) + , innerFaceName( ) + , outerFaceName( ) {} /// \ru Конструктор копирования. \en Copy-constructor. MbBendEdgeValues( const MbBendEdgeValues & other ) - : bendRadius ( other.bendRadius ) + : MbBendValues ( other ) , bendEdgeIndex( other.bendEdgeIndex ) + , innerFaceName( other.innerFaceName ) + , outerFaceName( other.outerFaceName ) {} /// \ru Оператор присваивания. \en Assignment operator. MbBendEdgeValues & operator = ( const MbBendEdgeValues &other ) { Init( other ); return *this; } /// \ru Инициализация по другому объекту. \en Initialization by another object. void Init( const MbBendEdgeValues & other ) { - bendRadius = other.bendRadius; + MbBendValues::Init( other ); bendEdgeIndex = other.bendEdgeIndex; + innerFaceName = other.innerFaceName; + outerFaceName = other.outerFaceName; } ///\ru Являются ли объекты равными? \en Determine whether an object is equal? bool IsSame( const MbBendEdgeValues & other, double accuracy ) const { bool isSame = false; - if ( ::fabs(bendRadius - other.bendRadius) < accuracy && - bendEdgeIndex.IsSame(other.bendEdgeIndex,accuracy) ) + if ( MbBendValues::IsSame(other, accuracy) && + bendEdgeIndex.IsSame(other.bendEdgeIndex,accuracy) && + innerFaceName == other.innerFaceName && + outerFaceName == other.outerFaceName ) isSame = true; return isSame; } /// \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. void Transform( const MbMatrix3D & matr ) { - matr.TransformLength( bendRadius ); + matr.TransformLength( radius ); bendEdgeIndex.Transform( matr ); } /// \ru Сдвинуть объект вдоль вектора. \en Move an object along a vector. @@ -2018,60 +2049,67 @@ public: }; /// \ru Ребро разъема и параметры замыкания углов. \en The rip edge and closing corner parameters. \~ struct MbRipEdgeValues { - MbEdgeFacesIndexes ripEdgeIndex; ///< \ru Индекс ребра разъема. \en Index of rip edge. - MbClosedCornerValues cornerValues; + std::vector ripEdgeIndicies; ///< \ru Индекс ребра разъема. \en Index of rip edge. + MbClosedCornerValues cornerValues; /// \ru Конструктор по умолчанию. \en Default constructor. MbRipEdgeValues() - : ripEdgeIndex() + : ripEdgeIndicies() , cornerValues() {} /// \ru Конструктор по конкретным параметрам. \en Constructor by specific parameters. - MbRipEdgeValues( MbEdgeFacesIndexes index, const MbClosedCornerValues & cValues ) - : ripEdgeIndex( index ) - , cornerValues( cValues ) + MbRipEdgeValues( const std::vector & indicies, const MbClosedCornerValues & cValues ) + : ripEdgeIndicies( indicies ) + , cornerValues ( cValues ) {} /// \ru Конструктор копирования. \en Copy-constructor. MbRipEdgeValues( const MbRipEdgeValues & other ) - : ripEdgeIndex( other.ripEdgeIndex ) - , cornerValues( other.cornerValues ) + : ripEdgeIndicies( other.ripEdgeIndicies ) + , cornerValues ( other.cornerValues ) {} /// \ru Оператор присваивания. \en Assignment operator. MbRipEdgeValues & operator = ( const MbRipEdgeValues &other ) { Init( other ); return *this; } /// \ru Инициализация по другому объекту. \en Initialization by another object. void Init( const MbRipEdgeValues & other ) { - ripEdgeIndex = other.ripEdgeIndex; + ripEdgeIndicies = other.ripEdgeIndicies; cornerValues = other.cornerValues; } ///\ru Являются ли объекты равными? \en Determine whether an object is equal? bool IsSame( const MbRipEdgeValues & other, double accuracy ) const { bool isSame = false; - if ( ripEdgeIndex.IsSame(other.ripEdgeIndex, accuracy) && - cornerValues.IsSame(other.cornerValues, accuracy) ) + if ( cornerValues.IsSame( other.cornerValues, accuracy ) && + ripEdgeIndicies.size() == other.ripEdgeIndicies.size() ) { isSame = true; + for ( size_t i = 0, iCount = ripEdgeIndicies.size(); i < iCount && isSame; i++ ) + isSame = ripEdgeIndicies[i].IsSame( other.ripEdgeIndicies[i], accuracy ); + } return isSame; } /// \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. void Transform( const MbMatrix3D & matr ) { - ripEdgeIndex.Transform( matr ); + for ( size_t i = 0, iCount = ripEdgeIndicies.size(); i < iCount; i++ ) + ripEdgeIndicies[i].Transform( matr ); cornerValues.Transform( matr ); } /// \ru Сдвинуть объект вдоль вектора. \en Move an object along a vector. void Move( const MbVector3D & to ) { - ripEdgeIndex.Move( to ); + for ( size_t i = 0, iCount = ripEdgeIndicies.size(); i < iCount; i++ ) + ripEdgeIndicies[i].Move( to ); } /// \ru Повернуть объект вокруг оси на заданный угол. \en Rotate an object at a given angle around an axis. void Rotate( const MbAxis3D & axis, double ang ) { - ripEdgeIndex.Rotate( axis, ang ); + for ( size_t i = 0, iCount = ripEdgeIndicies.size(); i < iCount; i++ ) + ripEdgeIndicies[i].Rotate( axis, ang ); } KNOWN_OBJECTS_RW_REF_OPERATORS( MbRipEdgeValues ) // \ru Для работы со ссылками и объектами класса \en For treatment of references and objects of the class }; public: - double k; ///< \ru Коэффициент, определяющий положение нейтрального слоя. \en Coefficient determining the position of the neutral layer. - double sheetThickness; ///< \ru Толщина листового тела. \en Thickness of a sheet solid. - std::vector bendEdges; ///< \ru Набор ребер и параметров сгиба. \en Indicies of bend edges. - std::vector ripEdges; ///< \ru Набор ребер и параметров разъемов. \en Indicies of cut edges. - MbClosedCornerValues defaultCornerValues; + double k; ///< \ru Коэффициент, определяющий положение нейтрального слоя. \en Coefficient determining the position of the neutral layer. + double sheetThickness; ///< \ru Толщина листового тела. \en Thickness of a sheet solid. + std::vector bendEdges; ///< \ru Набор ребер и параметров сгиба. \en Indicies of bend edges. + std::vector ripEdges; ///< \ru Набор ребер и параметров разъемов. \en Indicies of cut edges. + MbClosedCornerValues defaultCornerValues; ///<\ru Параметры замыкания сгиба. \en The bend closure parameters. + /// \ru Конструктор по умолчанию. \en Default constructor. MbSolidToSheetMetalValues() : k ( 0.0 ) diff --git a/C3d/Include/solid.h b/C3d/Include/solid.h index 4461bdc..f27368a 100644 --- a/C3d/Include/solid.h +++ b/C3d/Include/solid.h @@ -143,10 +143,10 @@ public : // \ru Общие функции геометрического объекта. \en Common functions of a geometric object. virtual MbeSpaceType IsA() const; // \ru Тип объекта. \en A type of an object. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * iReg = NULL ) const; // \ru Создать копию. \en Create a copy. - virtual void Transform( const MbMatrix3D &, MbRegTransform * iReg = NULL ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * iReg = NULL ); // \ru Сдвинуть вдоль вектора. \en Move along a vector. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * iReg = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; // \ru Создать копию. \en Create a copy. + virtual void Transform( const MbMatrix3D &, MbRegTransform * iReg = c3d_null ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * iReg = c3d_null ); // \ru Сдвинуть вдоль вектора. \en Move along a vector. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * iReg = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual bool IsSame ( const MbSpaceItem &, double accuracy = LENGTH_EPSILON ) const; // \ru Являются ли объекты равными? \en Determine whether objects are equal. virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными? \en Determine whether objects are similar. virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать объекты равными. \en Make the objects equal. @@ -236,36 +236,40 @@ public : MbFaceShell * GetShell() const; /// \ru Имеется ли оболочка? \en Is there a shell? bool IsShellBuild() const; + /// \ru Переустановить в ребрах указатели на соединяемые ими грани. \en Reinstall pointers to mating faces in edges. void MakeRight(); /// \ru Верно ли установлены в ребра указатели на соединяемые ими грани? \en Are the pointers in edges to the faces connected by them set correctly? bool IsRight() const; + /// \ru Выдать количество граней. \en Get the count of faces. - size_t GetFacesCount() const; + size_t GetFacesCount() const { return outer ? outer->GetFacesCount() : 0; } /// \ru Заполнить контейнер вершинами тела. \en Fill container by solid vertices. template - void GetVertices( VerticesVector & vertices ) const { if ( outer != NULL ) { outer->GetVertices( vertices ); } } + void GetVertices( VerticesVector & vertices ) const { if ( outer != c3d_null ) { outer->GetVertices( vertices ); } } /// \ru Заполнить контейнер ориентированными ребрами тела. \en Fill container by oriented edges of the solid. template - void GetEdges( EdgesVector & edges ) const { if ( outer != NULL ) { outer->GetEdges( edges ); } } + void GetEdges( EdgesVector & edges ) const { if ( outer != c3d_null ) { outer->GetEdges( edges ); } } /// \ru Заполнить контейнеры вершинами и ребрами тела. \en Fill containers by vertices and edges of the solid. template - void GetItems( VerticesVector & vertices, EdgesVector & edges ) const { if ( outer != NULL ) { outer->GetItems( vertices, edges ); } } + void GetItems( VerticesVector & vertices, EdgesVector & edges ) const { if ( outer != c3d_null ) { outer->GetItems( vertices, edges ); } } /// \ru Заполнить контейнер гранями тела. \en Fill container by solid faces. template - void GetFaces ( FacesVector & faces ) const { if ( outer != NULL ) { outer->GetFaces( faces ); } } + void GetFaces ( FacesVector & faces ) const { if ( outer != c3d_null ) { outer->GetFaces( faces ); } } /// \ru Заполнить контейнер гранями тела. \en Fill container by solid faces. template - void GetFacesSet( FacesSet & faces ) const { if ( outer != NULL ) { outer->GetFacesSet( faces ); } } - + void GetFacesSet( FacesSet & faces ) const { if ( outer != c3d_null ) { outer->GetFacesSet( faces ); } } /// \ru Заполнить контейнер вершинами, ребрами и гранями тела. \en Fill container by vertices, edges and faces of the solid. - void GetItems ( RPArray & ) const; + template + void GetItems( TopologyItemsVector & items ) const { if ( outer != c3d_null ) { outer->GetItems( items ); } } + /// \ru Выдать вершину по её номеру. \en Get vertex by its index. MbVertex * GetVertex( size_t index ) const; /// \ru Выдать ребро по его номеру. \en Get edge by its index. MbCurveEdge * GetEdge ( size_t index ) const; /// \ru Выдать грань по её номеру. \en Get face by its index. MbFace * GetFace ( size_t index ) const; + /// \ru Выдать номер вершины. \en Get the vertex index. size_t GetVertexIndex( const MbVertex & ) const; /// \ru Выдать номер ребра. \en Get the edge index. @@ -274,6 +278,7 @@ public : size_t GetFaceIndex ( const MbFace & ) const; /// \ru Выдать количество связных оболочек тела. \en Get the count of connected shells of the solid. size_t GetShellCount() const; + /// \ru Вывернуть тело наизнанку - переориентировать все грани. \en Revert the solid - reorientation of the whole set of faces. bool Reverse(); diff --git a/C3d/Include/space_instance.h b/C3d/Include/space_instance.h index 63ba5d0..11d7d35 100644 --- a/C3d/Include/space_instance.h +++ b/C3d/Include/space_instance.h @@ -73,10 +73,10 @@ public : // \ru Общие функции геометрического объекта. \en Common functions of a geometric object. virtual MbeSpaceType IsA() const; // \ru Тип объекта. \en A type of an object. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * iReg = NULL ) const; // \ru Создать копию. \en Create a copy. - virtual void Transform( const MbMatrix3D &, MbRegTransform * iReg = NULL ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * iReg = NULL ); // \ru Сдвинуть вдоль вектора. \en Translate along a vector. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * iReg = NULL ); // \ru Повернуть вокруг оси. \en Rotate about an axis. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; // \ru Создать копию. \en Create a copy. + virtual void Transform( const MbMatrix3D &, MbRegTransform * iReg = c3d_null ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * iReg = c3d_null ); // \ru Сдвинуть вдоль вектора. \en Translate along a vector. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * iReg = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate about an axis. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Являются ли объекты равными? \en Are the objects equal? virtual bool IsSimilar( const MbSpaceItem & init ) const; // \ru Являются ли объекты подобными? \en Are the objects similar? virtual bool SetEqual ( const MbSpaceItem & init ); // \ru Сделать объекты равными. \en Make the objects equal. diff --git a/C3d/Include/space_item.h b/C3d/Include/space_item.h index 3b014ad..4b76de1 100644 --- a/C3d/Include/space_item.h +++ b/C3d/Include/space_item.h @@ -246,7 +246,7 @@ public : \return \ru Копия объекта. \en A copy of the object. */ - virtual MbSpaceItem & Duplicate( MbRegDuplicate * iReg = NULL ) const = 0; + virtual MbSpaceItem & Duplicate( MbRegDuplicate * iReg = c3d_null ) const = 0; /** \brief \ru Преобразовать объект согласно матрице. \en Convert the object according to the matrix. \~ @@ -269,7 +269,7 @@ public : \param[in] iReg - \ru Регистратор. \en Registrator. */ - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * iReg = NULL ) = 0; + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * iReg = c3d_null ) = 0; /** \brief \ru Сдвинуть объект вдоль вектора. \en Move an object along a vector. \~ @@ -292,7 +292,7 @@ public : \param[in] iReg - \ru Регистратор. \en Registrator. */ - virtual void Move ( const MbVector3D & to, MbRegTransform * iReg = NULL ) = 0; + virtual void Move ( const MbVector3D & to, MbRegTransform * iReg = c3d_null ) = 0; /** \brief \ru Повернуть объект вокруг оси на заданный угол. \en Rotate an object around an axis at a given angle. \~ @@ -317,7 +317,7 @@ public : \param[in] iReg - \ru Регистратор. \en Registrator. */ - virtual void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * iReg = NULL ) = 0; + virtual void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * iReg = c3d_null ) = 0; /** \brief \ru Определить, являются ли объекты равными. \en Determine whether an object is equal. \~ diff --git a/C3d/Include/surf_chamfer_surface.h b/C3d/Include/surf_chamfer_surface.h index 07fe82a..5d0d08f 100644 --- a/C3d/Include/surf_chamfer_surface.h +++ b/C3d/Include/surf_chamfer_surface.h @@ -110,13 +110,13 @@ public: \en \name Common functions of a geometric object \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента \en A type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Cделать копию элемента. \en Make a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Cделать копию элемента. \en Make a copy of the element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли объект копией. \en Whether the object is a copy. virtual bool SetEqual ( const MbSpaceItem & ); // \ru Cделать равным. \en Make equal. virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными. \en Determine whether the objects are similar. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг. \en Move. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг. \en Move. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual void GetProperties( MbProperties &properties ); // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties &properties ); // \ru Записать свойства объекта. \en Set properties of the object. @@ -199,7 +199,7 @@ public: virtual double GetSmoothRadius() const; // \ru Дать радиус. \en Get radius. virtual void GetDistances( double u, double &d1, double &d2 ) const; // \ru Дать радиусы со знаком. \en Get radii with a sign. virtual double GetDistance( bool s ) const; // \ru Дать радиус со знаком. \en Get radius with a sign. - virtual bool IsPlanar() const; // \ru Является ли поверхность плоской. \en Whether a surface is planar. + virtual bool IsPlanar( double accuracy = METRIC_EPSILON ) const; // \ru Является ли поверхность плоской. \en Whether a surface is planar. // \ru Подобные ли поверхности для объединения (слива). \en Whether the surfaces to union (joining) are similar. virtual bool IsSimilarToSurface( const MbSurface & surf, VERSION version, double precision = METRIC_PRECISION ) const; // \ru Дать двумерную матрицу преобразования из своей параметрической области в параметрическую область surf. \en Get two-dimensional matrix of transformation from its parametric domain to the parametric domain of surf. diff --git a/C3d/Include/surf_channel_surface.h b/C3d/Include/surf_channel_surface.h index 1cc3bad..fb42c21 100644 --- a/C3d/Include/surf_channel_surface.h +++ b/C3d/Include/surf_channel_surface.h @@ -163,7 +163,7 @@ public: \en \name Common functions of a geometric object \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента. \en A type of element. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли объект копией. \en Whether the object is a copy. virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным. \en Make equal. virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными. \en Determine whether the objects are similar. diff --git a/C3d/Include/surf_cone_surface.h b/C3d/Include/surf_cone_surface.h index 6a982c8..197e6b0 100644 --- a/C3d/Include/surf_cone_surface.h +++ b/C3d/Include/surf_cone_surface.h @@ -174,10 +174,10 @@ public: \en \name Common functions of a geometric object \{ */ virtual MbeSpaceType IsA () const; // \ru Тип элемента \en A type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Равны ли объекты. \en Whether the objects are equal. virtual bool SetEqual ( const MbSpaceItem & init ); // \ru Сделать равным. \en Make equal. - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта. \en Set properties of the object. @@ -279,7 +279,7 @@ public: virtual MbCurve3D * CurveUV( const MbLineSegment &, bool bApprox = true ) const; // \ru Пространственная копия линии по параметрической линии. \en Spatial copy of line by parametric line. // \ru Найти все проекции точки на поверхность вдоль вектора в любом из двух направлений. \en Find all a point projection onto the surface along a vector in either of two directions. - virtual void DirectPointProjection( const MbCartPoint3D & p, const MbVector3D & vect, SArray & uv, bool ext, MbRect2D * uvRange = NULL ) const; + virtual void DirectPointProjection( const MbCartPoint3D & p, const MbVector3D & vect, SArray & uv, bool ext, MbRect2D * uvRange = c3d_null ) const; // \ru Пересечение с кривой. \en Intersection with curve. virtual void CurveIntersection( const MbCurve3D & curv, SArray & uv, SArray & tt, bool ext0, bool ext, bool touchInclude = false ) const; @@ -333,7 +333,7 @@ public: /** \ru \name Функции элементарных поверхностей \en \name Functions of elementary surfaces \{ */ - virtual bool GetPointProjection( const MbCartPoint3D & p, bool init, double & u, double & v, bool ext, MbRect2D * uvRange = NULL ) const; + virtual bool GetPointProjection( const MbCartPoint3D & p, bool init, double & u, double & v, bool ext, MbRect2D * uvRange = c3d_null ) const; /** \} */ /** \ru \name Функции конической поверхности \en \name Functions of conical surface diff --git a/C3d/Include/surf_coons_surface.h b/C3d/Include/surf_coons_surface.h index fe1a28d..eb30cc0 100644 --- a/C3d/Include/surf_coons_surface.h +++ b/C3d/Include/surf_coons_surface.h @@ -23,9 +23,9 @@ class MATH_CLASS MbCurve; //------------------------------------------------------------------------------ /** \brief \ru Способ расчёта поверхности Кунса. - \en Type of calculation of Coons surface. \~ + \en Type of calculation of Coons surface. \~ \details \ru Способ расчёта поверхности Кунса. \n - \en Type of calculation of Coons surface. \n \~ + \en Type of calculation of Coons surface. \n \~ \ingroup Surfaces */ // --- @@ -36,6 +36,35 @@ enum MbeCoonsSurfaceCalcType { }; +//------------------------------------------------------------------------------ +/** \brief \ru Производные по uv в вершинах. + \en Derivative by uv at vertices. \~ + \details \ru Производные по uv в вершинах. \n + \en Derivative by uv at vertices. \n \~ +*/ +// --- +struct CoonsDerivesUV { + MbVector3D firstUV0[COONS_COUNT]; ///< \ru Производные в началах кривых производных. \en Derivatives in the beginning curves of derivatives. + MbVector3D firstUV1[COONS_COUNT]; ///< \ru Производные в концая кривых производных. \en Derivatives at the ends of derivative curves. + + /// \ru Конструктор. \en Constructor. + CoonsDerivesUV() + { + SetZero(); + } + + /// \ru Обнулить координаты векторов. \en Set coordinates of vectors to zero. + void SetZero() { + for ( size_t i = 0; i < COONS_COUNT; ++i ) { + firstUV0[i].SetZero(); + firstUV1[i].SetZero(); + } + } + + OBVIOUS_PRIVATE_COPY( CoonsDerivesUV ) +}; + + //------------------------------------------------------------------------------ /** \brief \ru Поверхность Кунса на четырех кривых. \en Coons surface on four curves. \~ @@ -96,6 +125,7 @@ private: bool poleVMin; ///< \ru Полюс в начале. \en Pole at the beginning. bool poleVMax; ///< \ru Полюс в конце. \en Pole at the end. MbeCoonsSurfaceCalcType calcType; ///< \ru Версия реализации определяет способ расчёта поверхности. \en Version of implementation determines a type of calculation of surface. + DPtr derivesUV; ///< \ru Производные в началах и концах кривых производных. \en Derivatives in the beginning and ends curves of derivatives. //------------------------------------------------------------------------------ /** \brief \ru Вспомогательные данные. @@ -108,7 +138,9 @@ private: public: DPtr mp; ///< \ru Дополнительные временные данные для ускорения вычислений. \en Additional temporary data to speed up computations. MbCoonsSurfaceAuxiliaryData(); + MbCoonsSurfaceAuxiliaryData( const MbCoonsSurfaceAuxiliaryData & init ); virtual ~MbCoonsSurfaceAuxiliaryData(); + MbCoonsSurfaceAuxiliaryData & operator = ( const MbCoonsSurfaceAuxiliaryData & init ); }; mutable CacheManager cache; @@ -162,13 +194,13 @@ public: \en \name Common functions of a geometric object \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента \en A type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Cделать копию элемента \en Make a copy of element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Cделать копию элемента \en Make a copy of element virtual bool IsSame( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли объект копией. \en Whether the object is a copy. virtual bool SetEqual( const MbSpaceItem & init ); // \ru Сделать равным \en Make equal virtual bool IsSimilar( const MbSpaceItem & init ) const; // \ru Являются ли объекты подобными \en Whether the objects are similar - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector3D & to, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbAxis3D & axis, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector3D & to, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbAxis3D & axis, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта \en Set properties of the object @@ -284,9 +316,11 @@ public: const MbCurve3D & GetDerCurve3() const { return *curve3U; } /// \ru Получить кривую по индексу. \en Get curve by an index. const MbCurve3D * GetCurve( size_t ind ) const; + /// \ru Получить количество кривых. \en Get count of curves. size_t GetCurvesCount() const { return COONS_COUNT; } //-V112 const MbCartPoint3D * GetVertex() const { return vertex; } ///< \ru Выдать вершины P0, P1, P2. \en Get vertices P0, P1, P2. + MbeCoonsSurfaceCalcType GetCalcType() const { return calcType; } ///< \ru Выдать способ расчёта поверхности. \en Get surface calculation type. /** \} */ double GetT0Min() const { return t0min; } ///< \ru Минимальное значение параметра на кривой 0. \en Minimal value of parameter on curve 0. double GetT0Max() const { return t0max; } ///< \ru Максимальное значение параметра на кривой 0. \en Maximal value of parameter on curve 0. @@ -305,8 +339,8 @@ public: \en Index of the curve. \~ \param[out] sense - \ru Флаг совпадения направленности кривой с рисунком, приведенным выше. \en Flag that indicates the coincidence of the curve with the picture shown above.\~ - \return - \ru Указатель на кривую или NULL. - \en Pointer to the curve or NULL. \~ + \return - \ru Указатель на кривую или c3d_null. + \en Pointer to the curve or c3d_null. \~ */ const MbCurve3D * GetExactCurve( size_t k, bool & sense ) const; @@ -322,7 +356,7 @@ public: private: void operator = ( const MbCoonsPatchSurface & ); // \ru Не реализовано. \en Not implemented. void Setup(); - // void SetVertexUV( double u, double v ) const; + void SetupUVDerives(); void CheckParams( double & u, double & v, bool ext = false ) const; // \ru Проверить и изменить при необходимости параметры. \en Check and correct parameters. void CalculateTwist( double u, double v ) const; // \ru Определение местных координат. \en Determination of local coordinates. @@ -412,33 +446,6 @@ inline void MbCoonsPatchSurface::ParamThird ( double /*w*/, double * t ) const { } -//------------------------------------------------------------------------------ -// \ru Добавить матрицу поверхности. \en Add the matrix of the surface. -// --- -inline void MbCoonsPatchSurface::AddMatrix( double u, double v, double * uu, double * vv, MbVector3D & p ) const { - - MbCartPoint3D twist[COONS_COUNT]; - - if ( calcType == cst_GregoryPatchType ) { - // SetVertexUV( u, v ); - CalculateTwist( u, v ); - - MbCoonsSurfaceAuxiliaryData * loccache = cache(); - for ( size_t i = 0; i < COONS_COUNT; ++i ) - twist[i] = loccache->mp->twist[i]; - } - else { - for ( size_t i = 0; i < COONS_COUNT; ++i ) - twist[i] = vertexUV[i]; - } - - p.Add( vertex[0], -uu[0] * vv[0], vertex[1], -uu[1] * vv[0], vertex[2], -uu[1] * vv[1], vertex[3], -uu[0] * vv[1] ); - p.Add( vertexU[0], -uu[2] * vv[0], vertexU[1], -uu[3] * vv[0], vertexU[2], -uu[3] * vv[1], vertexU[3], -uu[2] * vv[1] ); - p.Add( vertexV[0], -uu[0] * vv[2], vertexV[1], -uu[1] * vv[2], vertexV[2], -uu[1] * vv[3], vertexV[3], -uu[0] * vv[3] ); - p.Add( twist[0], -uu[2] * vv[2], twist[1], -uu[3] * vv[2], twist[2], -uu[3] * vv[3], twist[3], -uu[2] * vv[3] ); -} - - //------------------------------------------------------------------------------ // \ru Получить кривую по индексу \en Get curve by an index // --- @@ -452,146 +459,8 @@ inline const MbCurve3D * MbCoonsPatchSurface::GetCurve( size_t ind ) const case 2 : { return curve2; } case 3 : { return curve3; } } - return NULL; + return c3d_null; } -//////////////////////////////////////////////////////////////////////////////// -// -// Вспомогательные объекты бикубической поверхности Кунса. -// Auxiliary objects for bicubic Coons surface. -// -//////////////////////////////////////////////////////////////////////////////// - - -//------------------------------------------------------------------------------ -// \ru Кривая производных, обслуживающая точную бикубическую поверхность Кунса, построенная кривой на поверхности. -// \en The curve of derivatives serving the exact bicubic Coons surface, constructed by a curve on the surface. \~ -// --- -class MATH_CLASS MbCoonsDerivative : public MbCurve3D { -protected : - MbSurfaceCurve * curve; ///< \ru Кривая на поверхности (всегда не NULL). \en Curve on surface (always not NULL). - double param1; ///< \ru Параметр первой точки кривой. \en The first point parameter of curve. - double param2; ///< \ru Параметр второй точки кривой. \en The second point parameter of curve. - MbVector rail1; ///< \ru Вектор для вычисления поперечной производной в первой точке кривой. \en The vector for calculation of the transverse derivative in first point of curve. - MbVector rail2; ///< \ru Вектор для вычисления поперечной производной во второй точке кривой. \en The vector for calculation of the transverse derivative in second point of curve. - double turner; ///< \ru Угол поворота векторов на единицу изменения параметра. \en The angle of rotation of vectors per unit of parameter change. - - //------------------------------------------------------------------------------ - /** \brief \ru Вспомогательные данные. - \en Auxiliary data. \~ - \details \ru Вспомогательные данные служат для ускорения работы объекта. - \en Auxiliary data are used for fast calculations. \n \~ - */ - // --- - class MbCoonsDerivativeAuxiliaryData: public AuxiliaryData { - public: - double t; ///< \ru Параметр. \en Parameter. - MbCartPoint3D point; ///< \ru Точка. \en Point. - MbVector3D first; ///< \ru Первая производная. \en First derivative. - MbVector3D second; ///< \ru Вторая производная. \en Second derivative. - MbVector3D third; ///< \ru Третья производная. \en Third derivative. - - MbCoonsDerivativeAuxiliaryData(); - MbCoonsDerivativeAuxiliaryData( const MbCoonsDerivativeAuxiliaryData & ); - virtual ~MbCoonsDerivativeAuxiliaryData(); - - void Init(); - void Init( const MbCoonsDerivativeAuxiliaryData & ); - void Move( const MbVector3D & ); - }; - - mutable CacheManager cache; - -public : - /// \ru Конструктор кривой на поверхности. \en Constructor of curve on surface. - MbCoonsDerivative( MbSurfaceCurve & c, double t1, const MbVector & r1, double t2, const MbVector & r2 ); -protected: - /// \ru Конструктор копирования. \en Copy-constructor. - MbCoonsDerivative( const MbCoonsDerivative &, MbRegDuplicate * ); -private: - MbCoonsDerivative( const MbCoonsDerivative & ); // \ru Не реализовано!!! \en Not implemented!!! - -public : - virtual ~MbCoonsDerivative(); - -public: - /// \ru Реализация функции, инициирующей посещение объекта. \en Implementation of a function initializing a visit of an object. - VISITING_CLASS( MbCoonsDerivative ); - - /** \ru \name Общие функции геометрического объекта. - \en \name Common functions of a geometric object. - \{ */ - - virtual MbeSpaceType IsA() const; // \ru Дать тип элемента. \en Get element type. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. - virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Определить, являются ли объекты одинаковыми. \en Determine whether objects are equal. - virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным. \en Make equal. - virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Определить, являются ли объекты подобными. \en Determine whether the objects are similar. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвинуть вдоль вектора. \en Move along a vector. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate about an axis. - /// \ru Перевести все временные (mutable) данные объекта в неопределённое (исходное) состояние. \en Translate all the time (mutable) data objects in an inconsistent (initial) state. - virtual void Refresh(); - - virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. - virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта. \en Set properties of the object. - - /** \} */ - /** \ru \name Общие функции кривой. - \en \name Common functions of curve. - \{ */ - - virtual double GetTMin() const; // \ru Вернуть минимальное значение параметра. \en Get the minimum value of parameter. - virtual double GetTMax() const; // \ru Вернуть максимальное значение параметра. \en Get the maximum value of parameter. - virtual bool IsClosed() const; // \ru Проверить замкнутость кривой. \en Check for curve closedness. - virtual double GetPeriod() const; // \ru Вернуть период периодической кривой. \en Get period of a periodic curve. - - // \ru Функции для работы в области определения. \en Functions for working in the definition domain. - virtual void PointOn ( double & t, MbCartPoint3D & ) const; // \ru Вычислить точку на кривой. \en Calculate a point on the curve. - virtual void FirstDer ( double & t, MbVector3D & ) const; // \ru Вычислить первую производную. \en Calculate the first derivative. - virtual void SecondDer( double & t, MbVector3D & ) const; // \ru Вычислить вторую производную. \en Calculate the second derivative. - virtual void ThirdDer ( double & t, MbVector3D & ) const; // \ru Вычислить третью производную по t. \en Calculate the third derivative by t. - // \ru Функции для работы вне области определения. \en Functions for working outside of definition domain. - virtual void _PointOn ( double t, MbCartPoint3D & ) const; // \ru Вычислить точку на расширенной кривой. \en Calculate a point on the extended curve. - virtual void _FirstDer ( double t, MbVector3D & ) const; // \ru Вычислить первую производную. \en Calculate the first derivative. - virtual void _SecondDer( double t, MbVector3D & ) const; // \ru Вычислить вторую производную. \en Calculate the second derivative. - virtual void _ThirdDer ( double t, MbVector3D & ) const; // \ru Вычислить третью производную по t. \en Calculate the third derivative by t. - // \ru Вычислить значения точки и производных для заданного параметра. \en Calculate point and derivatives of object for given parameter. \~ - virtual void Explore ( double & t, bool ext, - MbCartPoint3D & pnt, MbVector3D & fir, MbVector3D * sec, MbVector3D * thir ) const; - - virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление. \en Change the direction. - - virtual double Step ( double t, double sag ) const; // \ru Вычисление шага по стрелке прогиба. \en Calculation of parameter step by the sag. - virtual double DeviationStep( double t, double angle ) const; // \ru Вычисление шага по углу отклонения нормали. \en Calculation of parameter step by the deviation angle. - - virtual void ChangeCarrier ( const MbSpaceItem & item, MbSpaceItem & init ); // \ru Изменить носитель. \en Change the carrier. - virtual bool ChangeCarrierBorne( const MbSpaceItem &, MbSpaceItem &, const MbMatrix & matr ); // \ru Изменить носимые элементы. \en Change a carrier elements. - - /** \} */ - - /// \ru Вычислить нормаль к поверхности. \en Calculate surface normal. - void SurfaceNormal( double & t, MbVector3D & n ) const { curve->SurfaceNormal( t, n ); } - /// \ru Заменить кривую. \en Replace curve. - bool ChangeCurve( MbSurfaceCurve & ); - /// \ru Дать кривую. \en Get curve. - const MbSurfaceCurve * GetSurfaceCurve() const { return curve; } - /// \ru Дать кривую. \en Get curve. - MbSurfaceCurve * SetSurfaceCurve() { return curve; } - -protected: - void CheckParam ( double & t ) const; // \ru Проверить и изменить при необходимости параметр. \en Check and correct parameter. - -private: - // \ru Объявить оператор приравнивания по ссылке. \en Declare operator of assignment by reference. - void operator = ( const MbCoonsDerivative & ); // \ru Не реализовано!!! \en Not implemented!!! - - DECLARE_PERSISTENT_CLASS_NEW_DEL( MbCoonsDerivative ) - -}; - -IMPL_PERSISTENT_OPS( MbCoonsDerivative ) - - #endif // __SURF_COONS_SURFACE_H diff --git a/C3d/Include/surf_coons_surface_.h b/C3d/Include/surf_coons_surface_.h index cc07336..ca90a6e 100644 --- a/C3d/Include/surf_coons_surface_.h +++ b/C3d/Include/surf_coons_surface_.h @@ -43,43 +43,99 @@ private: MbCartPoint3D twistVVV[COONS_COUNT]; // Производная по VVV. public: - // Конструктор. + /// \ru Конструктор. \en Constructor. MbCoonsWorkingData() : calcU ( UNDEFINED_DBL ) , calcV ( UNDEFINED_DBL ) { for ( size_t i = 0; i < COONS_COUNT; ++i ) { - twist[i] .SetZero(); - twistU[i] .SetZero(); - twistV[i] .SetZero(); - twistUU[i] .SetZero(); - twistUV[i] .SetZero(); - twistVV[i] .SetZero(); - twistUUU[i].SetZero(); - twistUUV[i].SetZero(); - twistUVV[i].SetZero(); + twist[i] .SetZero(); + twistU[i] .SetZero(); + twistV[i] .SetZero(); + twistUU[i] .SetZero(); + twistUV[i] .SetZero(); + twistVV[i] .SetZero(); + twistUUU[i].SetZero(); + twistUUV[i].SetZero(); + twistUVV[i].SetZero(); twistVVV[i].SetZero(); } } + + /// \ru Конструктор копирования. \en Copy-constructor. + MbCoonsWorkingData( const MbCoonsWorkingData & init ) + : calcU( init.calcU ) + , calcV( init.calcV ) + { + for ( size_t i = 0; i < COONS_COUNT; ++i ) { + twist[i] = init. twist[i] ; + twistU[i] = init. twistU[i] ; + twistV[i] = init. twistV[i] ; + twistUU[i] = init. twistUU[i] ; + twistUV[i] = init. twistUV[i] ; + twistVV[i] = init. twistVV[i] ; + twistUUU[i] = init. twistUUU[i]; + twistUUV[i] = init. twistUUV[i]; + twistUVV[i] = init. twistUVV[i]; + twistVVV[i] = init. twistVVV[i]; + } + } + // Деструктор. ~MbCoonsWorkingData() {} + /// \ru Обнулить координаты. \en Set coordinates to zero. void SetZeroVectors() { for ( size_t i = 0; i < COONS_COUNT; ++i ) { - twist[i] .SetZero(); - twistU[i] .SetZero(); - twistV[i] .SetZero(); - twistUU[i] .SetZero(); - twistUV[i] .SetZero(); - twistVV[i] .SetZero(); - twistUUU[i].SetZero(); - twistUUV[i].SetZero(); - twistUVV[i].SetZero(); + twist[i] .SetZero(); + twistU[i] .SetZero(); + twistV[i] .SetZero(); + twistUU[i] .SetZero(); + twistUV[i] .SetZero(); + twistVV[i] .SetZero(); + twistUUU[i].SetZero(); + twistUUV[i].SetZero(); + twistUVV[i].SetZero(); twistVVV[i].SetZero(); } } - OBVIOUS_PRIVATE_COPY( MbCoonsWorkingData ) + /// \ru Присвоить значение другого объекта. \en Assign a value of another object. + MbCoonsWorkingData & operator = ( const MbCoonsWorkingData & init ) { + calcU = init.calcU; + calcV = init.calcV; + for ( size_t i = 0; i < COONS_COUNT; ++i ) { + twist[i] = init.twist[i]; + twistU[i] = init.twistU[i]; + twistV[i] = init.twistV[i]; + twistUU[i] = init.twistUU[i]; + twistUV[i] = init.twistUV[i]; + twistVV[i] = init.twistVV[i]; + twistUUU[i] = init.twistUUU[i]; + twistUUV[i] = init.twistUUV[i]; + twistUVV[i] = init.twistUVV[i]; + twistVVV[i] = init.twistVVV[i]; + } + return *this; + } + + /// \ru Проверить объекты на равенство. \en Check objects for equality. + bool operator == ( const MbCoonsWorkingData & init ) { + bool res = calcU == init.calcU && calcV == init.calcV; + for ( size_t i = 0; i < COONS_COUNT && res; ++i ) { + res &= twist[i] == init.twist[i]; + res &= twistU[i] == init.twistU[i]; + res &= twistV[i] == init.twistV[i]; + res &= twistUU[i] == init.twistUU[i]; + res &= twistUV[i] == init.twistUV[i]; + res &= twistVV[i] == init.twistVV[i]; + res &= twistUUU[i] == init.twistUUU[i]; + res &= twistUUV[i] == init.twistUUV[i]; + res &= twistUVV[i] == init.twistUVV[i]; + res &= twistVVV[i] == init.twistVVV[i]; + } + return res; + } }; diff --git a/C3d/Include/surf_corner_surface.h b/C3d/Include/surf_corner_surface.h index 33b2518..002424e 100644 --- a/C3d/Include/surf_corner_surface.h +++ b/C3d/Include/surf_corner_surface.h @@ -90,13 +90,13 @@ public: \en \name Common functions of a geometric object \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента \en A type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Cделать копию элемента \en Make a copy of element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Cделать копию элемента \en Make a copy of element virtual bool IsSame( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли объект копией. \en Whether the object is a copy. virtual bool SetEqual( const MbSpaceItem & init ); // \ru Сделать равным \en Make equal virtual bool IsSimilar( const MbSpaceItem & init ) const; // \ru Являются ли объекты подобными \en Whether the objects are similar - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector3D & to, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbAxis3D & axis, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector3D & to, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbAxis3D & axis, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void CalculateSurfaceWire( const MbStepData & stepData, size_t beg, MbMesh & mesh, size_t uMeshCount = c3d::WIRE_MAX, size_t vMeshCount = c3d::WIRE_MAX ) const; @@ -307,7 +307,7 @@ inline const MbCurve3D * MbCornerSurface::GetCurve( size_t ind ) const case 1 : { return curve1; } case 2 : { return curve2; } } - return NULL; + return c3d_null; } diff --git a/C3d/Include/surf_cover_surface.h b/C3d/Include/surf_cover_surface.h index 94b3e23..bfe8d8e 100644 --- a/C3d/Include/surf_cover_surface.h +++ b/C3d/Include/surf_cover_surface.h @@ -1,370 +1,370 @@ -//////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru Билинейная поверхность на четырех кривых. - \en Bilinear surface on four curves. \~ - -*/ -//////////////////////////////////////////////////////////////////////////////// - -#ifndef __SURF_COVER_SURFACE_H -#define __SURF_COVER_SURFACE_H - - -#include - - -#define COVER_COUNT 4 ///< \ru Число кривых, используемых для построения билинейной поверхности. \en Count of curves used to construct bilinear surface. - - -//------------------------------------------------------------------------------ -/** \brief \ru Четырёхугольная поверхность на кривых. - \en Quadrangular surface on curves. \~ - \details \ru Билинейная поверхность на четырех кривых. \n - Кривые должны попарно пересекаться или иметь точки скрещения. - Если кривые попарно пересекаются, то поверхность проходит через определяющиее её кривые. \n - \en Bilinear surface on four curves. \n - Curves have to be intersected pairwise or have crossing points. - If curves are intersected pairwise then surface passes through its determining curves. \n \~ - \ingroup Surfaces -*/ -// --- -class MATH_CLASS MbCoverSurface : public MbSurface { - -// t2min curve2 t2max -// R(u,v) = P3 ______________________ P2 -// (curve0(t0) - P0*(1-u)) *(1-v)+ t3max | | t1max -// (curve1(t1) - P1*(1-v)) * u + | | -// (curve2(t2) - P2* u ) * v + | | -// (curve3(t3) - P3* v ) *(1-u) curve3 | R | curve1 -// t0=t0min*(1-u)+t0max*u | | -// t1=t1min*(1-v)+t1max*v | | -// t2=t2min*(1-u)+t2max*u t3min |______________________| t1min -// t3=t3min*(1-v)+t3max*v P0 P1 -// t0min curve0 t0max - -private: - MbCurve3D * curve0; ///< \ru Кривая 0. \en Curve 0. - MbCurve3D * curve1; ///< \ru Кривая 1. \en Curve 1. - MbCurve3D * curve2; ///< \ru Кривая 2. \en Curve 2. - MbCurve3D * curve3; ///< \ru Кривая 3. \en Curve 3. - - MbCartPoint3D vertex[COVER_COUNT]; ///< \ru Вершины \en Vertices - double t0min; ///< \ru Минимальное значение параметра на кривой 0. \en Minimal value of parameter on curve 0. - double t0max; ///< \ru Максимальное значение параметра на кривой 0. \en Maximal value of parameter on curve 0. - double t1min; ///< \ru Минимальное значение параметра на кривой 1. \en Minimal value of parameter on curve 1. - double t1max; ///< \ru Максимальное значение параметра на кривой 1. \en Maximal value of parameter on curve 1. - double t2min; ///< \ru Минимальное значение параметра на кривой 2. \en Minimal value of parameter on curve 2. - double t2max; ///< \ru Максимальное значение параметра на кривой 2. \en Maximal value of parameter on curve 2. - double t3min; ///< \ru Минимальное значение параметра на кривой 3. \en Minimal value of parameter on curve 3. - double t3max; ///< \ru Максимальное значение параметра на кривой 3. \en Maximal value of parameter on curve 3. - bool uclosed; ///< \ru Замкнутость поверхности по u. \en Closedness of surface by u. - bool vclosed; ///< \ru Замкнутость поверхности по v. \en Closedness of surface by v. - bool poleUMin; ///< \ru Полюс в начале. \en Pole at the beginning. - bool poleUMax; ///< \ru Полюс в конце. \en Pole at the end. - bool poleVMin; ///< \ru Полюс в начале. \en Pole at the beginning. - bool poleVMax; ///< \ru Полюс в конце. \en Pole at the end. - -public: - /** \brief \ru Конструктор билинейной поверхности. - \en Constructor of bilinear surface. \~ - \details \ru Конструктор билинейной поверхности по набору кривых. - \en Constructor of bilinear surface by set of curves. \~ - \param[in] initCurve0 - \ru Кривая 0. - \en Curve 0. \~ - \param[in] initCurve1 - \ru Кривая 1. - \en Curve 1. \~ - \param[in] initCurve2 - \ru Кривая 2. - \en Curve 2. \~ - \param[in] initCurve3 - \ru Кривая 3. - \en Curve 3. \~ - */ - MbCoverSurface ( const MbCurve3D & initCurve0, const MbCurve3D & initCurve1, - const MbCurve3D & initCurve2, const MbCurve3D & initCurve3 ); -private: - MbCoverSurface( const MbCoverSurface & ); // \ru Не реализовано. \en Not implemented. - MbCoverSurface( const MbCoverSurface &, MbRegDuplicate * ); -public: - virtual ~MbCoverSurface( void ); - -public: - VISITING_CLASS( MbCoverSurface ); - - /// \ru Инициализация билинейной поверхности заданной билинейной поверхностью. \en Initialization of bilinear surface by given bilinear surface. - void Init( const MbCoverSurface & ); - - /** \ru \name Общие функции геометрического объекта - \en \name Common functions of a geometric object - \{ */ - virtual MbeSpaceType IsA() const; // \ru Тип элемента \en A type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Cделать копию элемента \en Make a copy of element - virtual bool IsSame( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли объект копией. \en Whether the object is a copy. - virtual bool SetEqual( const MbSpaceItem & init ); // \ru Сделать равным \en Make equal - virtual bool IsSimilar( const MbSpaceItem & init ) const; // \ru Являются ли объекты подобными \en Whether the objects are similar - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector3D & to, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbAxis3D & axis, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis - - virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object - virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта \en Set properties of the object - virtual void GetBasisItems ( RPArray & ); // \ru Дать базовые объекты \en Get the base objects - virtual void GetBasisPoints( MbControlData3D & ) const; // \ru Выдать контрольные точки объекта. \en Get control points of object. - virtual void SetBasisPoints( const MbControlData3D & ); // \ru Изменить объект по контрольным точкам. \en Change the object by control points. - - /** \} */ - - /** \ru \name Функции описания области определения поверхности - \en \name Functions for surface domain description - \{ */ - virtual double GetUMin() const; - virtual double GetVMin() const; - virtual double GetUMax() const; - virtual double GetVMax() const; - virtual bool IsUClosed() const; // \ru Замкнута ли поверхность по параметру u. \en Whether the surface is closed by parameter u. - virtual bool IsVClosed() const; // \ru Замкнута ли поверхность по параметру v. \en Whether the surface is closed by parameter v. - // \ru Существует ли полюс на границе параметрической области \en Whether there is pole on boundary of parametric region - virtual bool GetPoleUMin() const; - virtual bool GetPoleUMax() const; - virtual bool GetPoleVMin() const; - virtual bool GetPoleVMax() const; - virtual bool IsPole( double u, double v ) const; // \ru Является ли точка особенной \en Whether the point is special - /** \} */ - - /** \ru \name Функции для работы в области определения поверхности - Функции PointOn, Derive... поверхностей корректируют параметры - при выходе их за пределы прямоугольной области определения параметров.\n - \en \name Functions for working at surface domain - Functions PointOn, Derive... of surfaces correct parameters - when they are out of bounds of rectangular domain of parameters.\n - \{ */ - virtual void PointOn ( double & u, double & v, MbCartPoint3D & p ) const; // \ru Точка на поверхности \en Point on the surface - virtual void DeriveU ( double & u, double & v, MbVector3D & p ) const; // \ru Первая производная по u \en First derivative with respect to u - virtual void DeriveV ( double & u, double & v, MbVector3D & p ) const; // \ru Первая производная по v \en First derivative with respect to v - virtual void DeriveUU ( double & u, double & v, MbVector3D & p ) const; // \ru Вторая производная по u \en Second derivative with respect to u - virtual void DeriveVV ( double & u, double & v, MbVector3D & p ) const; // \ru Вторая производная по v \en Second derivative with respect to v - virtual void DeriveUV ( double & u, double & v, MbVector3D & p ) const; // \ru Вторая производная по uv \en Second derivative with respect to uv - virtual void DeriveUUU( double & u, double & v, MbVector3D & p ) const; // \ru Третья производная \en Third derivative - virtual void DeriveUUV( double & u, double & v, MbVector3D & p ) const; // \ru Третья производная \en Third derivative - virtual void DeriveUVV( double & u, double & v, MbVector3D & p ) const; // \ru Третья производная \en Third derivative - virtual void DeriveVVV( double & u, double & v, MbVector3D & p ) const; // \ru Третья производная \en Third derivative - virtual void Normal ( double & u, double & v, MbVector3D & p ) const; // \ru Нормаль \en Normal - /** \} */ - - /** \ru \name Функции для работы внутри и вне области определения поверхности - функции _PointOn, _Derive... поверхностей не корректируют - параметры при выходе их за пределы прямоугольной области определения параметров. - \en \name Functions for working inside and outside the surface's domain - functions _PointOn, _Derive... of surfaces don't correct - parameters when they are out of bounds of rectangular domain of parameters. - \{ */ - virtual void _PointOn ( double u, double v, MbCartPoint3D & p ) const; // \ru Точка на расширенной поверхности \en Point on the extended surface - virtual void _DeriveU ( double u, double v, MbVector3D & p ) const; // \ru Первая производная по u \en First derivative with respect to u - virtual void _DeriveV ( double u, double v, MbVector3D & p ) const; // \ru Первая производная по v \en First derivative with respect to v - virtual void _DeriveUU ( double u, double v, MbVector3D & p ) const; // \ru Вторая производная по u \en Second derivative with respect to u - virtual void _DeriveVV ( double u, double v, MbVector3D & p ) const; // \ru Вторая производная по v \en Second derivative with respect to v - virtual void _DeriveUV ( double u, double v, MbVector3D & p ) const; // \ru Вторая производная по uv \en Second derivative with respect to uv - virtual void _DeriveUUU( double u, double v, MbVector3D & p ) const; // \ru Третья производная \en Third derivative - virtual void _DeriveUUV( double u, double v, MbVector3D & p ) const; // \ru Третья производная \en Third derivative - virtual void _DeriveUVV( double u, double v, MbVector3D & p ) const; // \ru Третья производная \en Third derivative - virtual void _DeriveVVV( double u, double v, MbVector3D & p ) const; // \ru Третья производная \en Third derivative - virtual void _Normal ( double u, double v, MbVector3D & p ) const; // \ru Нормаль \en Normal - /** \} */ - - /** \ru \name Функции доступа к группе данных для работы внутри и вне области определения параметров поверхности. - \en \name Functions for get of the group of data inside and outside the surface's domain of parameters. - \{ */ - virtual void Explore( double & u, double & v, bool ext, - MbCartPoint3D & pnt, MbVector3D & uDer, MbVector3D & vDer, - MbVector3D * uuDer, MbVector3D * vvDer, MbVector3D * uvDer, MbVector3D * nor ) const; -/** \} */ - - /** \ru \name Функции движения по поверхности - \en \name Functions of moving along the surface - \{ */ - virtual double StepU( double u, double v, double sag ) const; // \ru Вычисление шага параметра u по по величине прогиба \en Calculation of parameter u step by the value of sag - virtual double StepV( double u, double v, double sag ) const; // \ru Вычисление шага параметра v по по величине прогиба \en Calculation of parameter v step by the value of sag - virtual double DeviationStepU( double u, double v, double ang ) const; // \ru Вычисление шага параметра u по углу отклонения нормали \en Calculation of parameter u step by the angle of deviation of normal - virtual double DeviationStepV( double u, double v, double ang ) const; // \ru Вычисление шага параметра v по углу отклонения нормали \en Calculation of parameter v step by the angle of deviation of normal - virtual size_t GetUCount() const; - virtual size_t GetVCount() const; - /** \} */ - - /** \ru \name Общие функции поверхности - \en \name Common functions of surface - \{ */ - virtual MbCurve3D * CurveU( double v, MbRect1D * pRgn, bool doApprox = true ) const; // \ru Пространственная копия линии v = const \en Spatial copy of 'v = const'-line - virtual MbCurve3D * CurveV( double u, MbRect1D * pRgn, bool doApprox = true ) const; // \ru Пространственная копия линии u = const \en Spatial copy of 'u = const'-line - - virtual void ChangeCarrier( const MbSpaceItem & item, MbSpaceItem & init ); // \ru Изменение носителя \en Changing of carrier - // \ru Подобные ли поверхности для объединения (слива). \en Whether the surfaces to union (joining) are similar. - virtual bool IsSimilarToSurface( const MbSurface & surf, VERSION version, double precision = METRIC_PRECISION ) const; - // \ru Дать двумерную матрицу преобразования из своей параметрической области в параметрическую область surf. \en Get two-dimensional transformation matrix from own parametric region to parametric region of 'surf'. - virtual bool GetMatrixToSurface( const MbSurface & surf, MbMatrix & matr, VERSION version, double precision = METRIC_PRECISION ) const; - // \ru Подобные ли поверхности для объединения (слива) \en Whether the surfaces to union (joining) are similar - virtual bool IsSpecialSimilarToSurface( const MbSurface & surf, VERSION version, double precision = METRIC_PRECISION ) const; // \ru Специальный случай \en Special case - - virtual size_t GetUMeshCount() const; // \ru Выдать количество полигонов по u \en Get the count of polygons by u - virtual size_t GetVMeshCount() const; // \ru Выдать количество полигонов по v \en Get the count of polygons by v - - /// \ru Получить кривую 0. \en Get curve 0. - const MbCurve3D & GetCurve0() const { return *curve0; } - /// \ru Получить кривую 1. \en Get curve 1. - const MbCurve3D & GetCurve1() const { return *curve1; } - /// \ru Получить кривую 2. \en Get curve 2. - const MbCurve3D & GetCurve2() const { return *curve2; } - /// \ru Получить кривую 3. \en Get curve 3. - const MbCurve3D & GetCurve3() const { return *curve3; } - /// \ru Получить кривую по индексу. \en Get curve by an index. - const MbCurve3D * GetCurve( size_t ind ) const; - /// \ru Получить количество кривых. \en Get count of curves. - size_t GetCurvesCount() const { return 4; } //-V112 - const MbCartPoint3D * GetVertex() const { return vertex; } ///< \ru Выдать вершины P0, P1, P2. \en Get vertices P0, P1, P2. - double GetT0Min() const { return t0min; } ///< \ru Минимальное значение параметра на кривой 0. \en Minimal value of parameter on curve 0. - double GetT0Max() const { return t0max; } ///< \ru Максимальное значение параметра на кривой 0. \en Maximal value of parameter on curve 0. - double GetT1Min() const { return t1min; } ///< \ru Минимальное значение параметра на кривой 1. \en Minimal value of parameter on curve 1. - double GetT1Max() const { return t1max; } ///< \ru Максимальное значение параметра на кривой 1. \en Maximal value of parameter on curve 1. - double GetT2Min() const { return t2min; } ///< \ru Минимальное значение параметра на кривой 2. \en Minimal value of parameter on curve 2. - double GetT2Max() const { return t2max; } ///< \ru Максимальное значение параметра на кривой 2. \en Maximal value of parameter on curve 2. - double GetT3Min() const { return t3min; } ///< \ru Минимальное значение параметра на кривой 3. \en Minimal value of parameter on curve 3. - double GetT3Max() const { return t3max; } ///< \ru Максимальное значение параметра на кривой 3. \en Maximal value of parameter on curve 3. - double GetTMin( size_t ind ) const; ///< \ru Минимальное значение параметра на кривой с индексом ind. \en Get The minimal value of parameter on curve by index. - double GetTMax( size_t ind ) const; ///< \ru Максимальное значение параметра на кривой с индексом ind. \en Get The maximal value of parameter on curve by index. - - /** \brief \ru Получить образующую кривую по индексу, если она точно совпадает с соответствующим краем поверхности. - \en Get exact curve by index, if it coincides with the corresponding border of the surface. \~ - \details \ru Совпадение кривой с краем поверхности определяется по крайним точкам кривой. - \en Coincidence of the curve with the border of the surface is determined by the end points of the curve. \~ - \param[in] k - \ru Индекс кривой. - \en Index of the curve. \~ - \param[out] sense - \ru Флаг совпадения направленности кривой с рисунком, приведенным выше. - \en Flag that indicates the coincidence of the curve with the picture shown above.\~ - \return - \ru Указатель на кривую или NULL. - \en Pointer to the curve or NULL. \~ - */ - const MbCurve3D * GetExactCurve( size_t k, bool &sense ) const; - - /** \brief \ru Проверка полюсов на кривых. - \en Check poles on curves. \~ - \details \ru Определяет, есть ли полюс на границе области определения по длине кривой, определяющей границу.\n - Результат вычислений можно получить с помощью функций GetPoleUMin, GetPoleUMax, GetPoleVMin, GetPoleVMax. - \en Determines whether the pole at domain boundary by curve length determining boundary.\n - Result of calculations can be obtained with help of GetPoleUMin, GetPoleUMax, GetPoleVMin, GetPoleVMax functions. \~ - */ - void CheckPole(); - /** \brief \ru Корректировка параметров. - \en Correct parameters. \~ - \details \ru Загоняет параметры, выходящие за область определения в область определения,\n - если поверхность замкнута по соответствующему параметру или параметр лежит за полюсом. - \en Drives parameters leaving out of domain into domain\n - if the surface is closed by corresponding parameter or parameter lies behind a pole. \~ - */ - inline void CheckParam( double & u, double & v ) const; - -private: - void operator = ( const MbCoverSurface & ); // \ru Не реализовано. \en Not implemented. - void Init(); - // \ru Определение местных координат. \en Determination of local coordinates. - void CalculateCoordinate( double & u, double & v, bool ext, - double & t0, double & t1, double & t2, double & t3 ) const; - void CalculatePoint ( double & u, double & v, bool ext, MbCartPoint3D * point ) const; - void CalculateFirst ( double & u, double & v, bool ext, MbCartPoint3D * point, MbVector3D * first ) const; - void CalculateSecond( double & u, double & v, bool ext, MbVector3D * second ) const; - void CalculateThird ( double & u, double & v, bool ext, MbVector3D * third ) const; - void CalculateExplore( double & u, double & v, bool ext, - MbCartPoint3D * point, MbVector3D * first, MbVector3D * second ) const; - - DECLARE_PERSISTENT_CLASS_NEW_DEL( MbCoverSurface ) -}; // MbCoverSurface - - -IMPL_PERSISTENT_OPS( MbCoverSurface ) - - -//------------------------------------------------------------------------------ -// \ru Получить кривую по индексу \en Get curve by an index -// --- -inline const MbCurve3D * MbCoverSurface::GetCurve( size_t ind ) const -{ - if ( ind >= COVER_COUNT ) - ind = ind % COVER_COUNT; - switch ( ind ) { - case 0 : { return curve0; } - case 1 : { return curve1; } - case 2 : { return curve2; } - case 3 : { return curve3; } - } - return NULL; -} - - -//------------------------------------------------------------------------------ -// \ru Минимальное значение параметра на кривой с индексом ind. \en Get The minimal value of parameter on curve by index. -// --- -inline double MbCoverSurface::GetTMin( size_t ind ) const -{ - if ( ind >= COVER_COUNT ) - ind = ind % COVER_COUNT; - switch ( ind ) { - case 0 : { return t0min; } - case 1 : { return t1min; } - case 2 : { return t2min; } - case 3 : { return t3min; } - } - return UNDEFINED_DBL; -} - - -//------------------------------------------------------------------------------ -// \ru Максимальное значение параметра на кривой с индексом ind. \en Get The maximal value of parameter on curve by index. -// --- -inline double MbCoverSurface::GetTMax( size_t ind ) const -{ - if ( ind >= COVER_COUNT ) - ind = ind % COVER_COUNT; - switch ( ind ) { - case 0 : { return t0max; } - case 1 : { return t1max; } - case 2 : { return t2max; } - case 3 : { return t3max; } - } - return UNDEFINED_DBL; -} - - -//------------------------------------------------------------------------------ -// \ru Корректировка параметров \en Correct parameters -// --- -inline void MbCoverSurface::CheckParam( double &u, double &v ) const -{ - double umin = 0; - double umax = 1; - double vmin = 0; - double vmax = 1; - if ( uclosed ) { - if ( (u < umin) || (u > umax ) ) { - double tmp = umax - umin; - u -= ::floor((u - umin) / tmp) * tmp; - } - } - else { - if ( poleUMin && uumax ) - u = umax; - } - if ( vclosed ) { - if ( (v < vmin) || (v > vmax ) ) { - double tmp = vmax - vmin; - v -= ::floor((v - vmin) / tmp) * tmp; - } - } - else { - if ( poleVMin && vvmax ) - v = vmax; - } -} - - -#endif // __SURF_COVER_SURFACE_H +//////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Билинейная поверхность на четырех кривых. + \en Bilinear surface on four curves. \~ + +*/ +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __SURF_COVER_SURFACE_H +#define __SURF_COVER_SURFACE_H + + +#include + + +#define COVER_COUNT 4 ///< \ru Число кривых, используемых для построения билинейной поверхности. \en Count of curves used to construct bilinear surface. + + +//------------------------------------------------------------------------------ +/** \brief \ru Четырёхугольная поверхность на кривых. + \en Quadrangular surface on curves. \~ + \details \ru Билинейная поверхность на четырех кривых. \n + Кривые должны попарно пересекаться или иметь точки скрещения. + Если кривые попарно пересекаются, то поверхность проходит через определяющиее её кривые. \n + \en Bilinear surface on four curves. \n + Curves have to be intersected pairwise or have crossing points. + If curves are intersected pairwise then surface passes through its determining curves. \n \~ + \ingroup Surfaces +*/ +// --- +class MATH_CLASS MbCoverSurface : public MbSurface { + +// t2min curve2 t2max +// R(u,v) = P3 ______________________ P2 +// (curve0(t0) - P0*(1-u)) *(1-v)+ t3max | | t1max +// (curve1(t1) - P1*(1-v)) * u + | | +// (curve2(t2) - P2* u ) * v + | | +// (curve3(t3) - P3* v ) *(1-u) curve3 | R | curve1 +// t0=t0min*(1-u)+t0max*u | | +// t1=t1min*(1-v)+t1max*v | | +// t2=t2min*(1-u)+t2max*u t3min |______________________| t1min +// t3=t3min*(1-v)+t3max*v P0 P1 +// t0min curve0 t0max + +private: + MbCurve3D * curve0; ///< \ru Кривая 0. \en Curve 0. + MbCurve3D * curve1; ///< \ru Кривая 1. \en Curve 1. + MbCurve3D * curve2; ///< \ru Кривая 2. \en Curve 2. + MbCurve3D * curve3; ///< \ru Кривая 3. \en Curve 3. + + MbCartPoint3D vertex[COVER_COUNT]; ///< \ru Вершины \en Vertices + double t0min; ///< \ru Минимальное значение параметра на кривой 0. \en Minimal value of parameter on curve 0. + double t0max; ///< \ru Максимальное значение параметра на кривой 0. \en Maximal value of parameter on curve 0. + double t1min; ///< \ru Минимальное значение параметра на кривой 1. \en Minimal value of parameter on curve 1. + double t1max; ///< \ru Максимальное значение параметра на кривой 1. \en Maximal value of parameter on curve 1. + double t2min; ///< \ru Минимальное значение параметра на кривой 2. \en Minimal value of parameter on curve 2. + double t2max; ///< \ru Максимальное значение параметра на кривой 2. \en Maximal value of parameter on curve 2. + double t3min; ///< \ru Минимальное значение параметра на кривой 3. \en Minimal value of parameter on curve 3. + double t3max; ///< \ru Максимальное значение параметра на кривой 3. \en Maximal value of parameter on curve 3. + bool uclosed; ///< \ru Замкнутость поверхности по u. \en Closedness of surface by u. + bool vclosed; ///< \ru Замкнутость поверхности по v. \en Closedness of surface by v. + bool poleUMin; ///< \ru Полюс в начале. \en Pole at the beginning. + bool poleUMax; ///< \ru Полюс в конце. \en Pole at the end. + bool poleVMin; ///< \ru Полюс в начале. \en Pole at the beginning. + bool poleVMax; ///< \ru Полюс в конце. \en Pole at the end. + +public: + /** \brief \ru Конструктор билинейной поверхности. + \en Constructor of bilinear surface. \~ + \details \ru Конструктор билинейной поверхности по набору кривых. + \en Constructor of bilinear surface by set of curves. \~ + \param[in] initCurve0 - \ru Кривая 0. + \en Curve 0. \~ + \param[in] initCurve1 - \ru Кривая 1. + \en Curve 1. \~ + \param[in] initCurve2 - \ru Кривая 2. + \en Curve 2. \~ + \param[in] initCurve3 - \ru Кривая 3. + \en Curve 3. \~ + */ + MbCoverSurface ( const MbCurve3D & initCurve0, const MbCurve3D & initCurve1, + const MbCurve3D & initCurve2, const MbCurve3D & initCurve3 ); +private: + MbCoverSurface( const MbCoverSurface & ); // \ru Не реализовано. \en Not implemented. + MbCoverSurface( const MbCoverSurface &, MbRegDuplicate * ); +public: + virtual ~MbCoverSurface( void ); + +public: + VISITING_CLASS( MbCoverSurface ); + + /// \ru Инициализация билинейной поверхности заданной билинейной поверхностью. \en Initialization of bilinear surface by given bilinear surface. + void Init( const MbCoverSurface & ); + + /** \ru \name Общие функции геометрического объекта + \en \name Common functions of a geometric object + \{ */ + virtual MbeSpaceType IsA() const; // \ru Тип элемента \en A type of element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Cделать копию элемента \en Make a copy of element + virtual bool IsSame( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли объект копией. \en Whether the object is a copy. + virtual bool SetEqual( const MbSpaceItem & init ); // \ru Сделать равным \en Make equal + virtual bool IsSimilar( const MbSpaceItem & init ) const; // \ru Являются ли объекты подобными \en Whether the objects are similar + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector3D & to, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbAxis3D & axis, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis + + virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object + virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта \en Set properties of the object + virtual void GetBasisItems ( RPArray & ); // \ru Дать базовые объекты \en Get the base objects + virtual void GetBasisPoints( MbControlData3D & ) const; // \ru Выдать контрольные точки объекта. \en Get control points of object. + virtual void SetBasisPoints( const MbControlData3D & ); // \ru Изменить объект по контрольным точкам. \en Change the object by control points. + + /** \} */ + + /** \ru \name Функции описания области определения поверхности + \en \name Functions for surface domain description + \{ */ + virtual double GetUMin() const; + virtual double GetVMin() const; + virtual double GetUMax() const; + virtual double GetVMax() const; + virtual bool IsUClosed() const; // \ru Замкнута ли поверхность по параметру u. \en Whether the surface is closed by parameter u. + virtual bool IsVClosed() const; // \ru Замкнута ли поверхность по параметру v. \en Whether the surface is closed by parameter v. + // \ru Существует ли полюс на границе параметрической области \en Whether there is pole on boundary of parametric region + virtual bool GetPoleUMin() const; + virtual bool GetPoleUMax() const; + virtual bool GetPoleVMin() const; + virtual bool GetPoleVMax() const; + virtual bool IsPole( double u, double v ) const; // \ru Является ли точка особенной \en Whether the point is special + /** \} */ + + /** \ru \name Функции для работы в области определения поверхности + Функции PointOn, Derive... поверхностей корректируют параметры + при выходе их за пределы прямоугольной области определения параметров.\n + \en \name Functions for working at surface domain + Functions PointOn, Derive... of surfaces correct parameters + when they are out of bounds of rectangular domain of parameters.\n + \{ */ + virtual void PointOn ( double & u, double & v, MbCartPoint3D & p ) const; // \ru Точка на поверхности \en Point on the surface + virtual void DeriveU ( double & u, double & v, MbVector3D & p ) const; // \ru Первая производная по u \en First derivative with respect to u + virtual void DeriveV ( double & u, double & v, MbVector3D & p ) const; // \ru Первая производная по v \en First derivative with respect to v + virtual void DeriveUU ( double & u, double & v, MbVector3D & p ) const; // \ru Вторая производная по u \en Second derivative with respect to u + virtual void DeriveVV ( double & u, double & v, MbVector3D & p ) const; // \ru Вторая производная по v \en Second derivative with respect to v + virtual void DeriveUV ( double & u, double & v, MbVector3D & p ) const; // \ru Вторая производная по uv \en Second derivative with respect to uv + virtual void DeriveUUU( double & u, double & v, MbVector3D & p ) const; // \ru Третья производная \en Third derivative + virtual void DeriveUUV( double & u, double & v, MbVector3D & p ) const; // \ru Третья производная \en Third derivative + virtual void DeriveUVV( double & u, double & v, MbVector3D & p ) const; // \ru Третья производная \en Third derivative + virtual void DeriveVVV( double & u, double & v, MbVector3D & p ) const; // \ru Третья производная \en Third derivative + virtual void Normal ( double & u, double & v, MbVector3D & p ) const; // \ru Нормаль \en Normal + /** \} */ + + /** \ru \name Функции для работы внутри и вне области определения поверхности + функции _PointOn, _Derive... поверхностей не корректируют + параметры при выходе их за пределы прямоугольной области определения параметров. + \en \name Functions for working inside and outside the surface's domain + functions _PointOn, _Derive... of surfaces don't correct + parameters when they are out of bounds of rectangular domain of parameters. + \{ */ + virtual void _PointOn ( double u, double v, MbCartPoint3D & p ) const; // \ru Точка на расширенной поверхности \en Point on the extended surface + virtual void _DeriveU ( double u, double v, MbVector3D & p ) const; // \ru Первая производная по u \en First derivative with respect to u + virtual void _DeriveV ( double u, double v, MbVector3D & p ) const; // \ru Первая производная по v \en First derivative with respect to v + virtual void _DeriveUU ( double u, double v, MbVector3D & p ) const; // \ru Вторая производная по u \en Second derivative with respect to u + virtual void _DeriveVV ( double u, double v, MbVector3D & p ) const; // \ru Вторая производная по v \en Second derivative with respect to v + virtual void _DeriveUV ( double u, double v, MbVector3D & p ) const; // \ru Вторая производная по uv \en Second derivative with respect to uv + virtual void _DeriveUUU( double u, double v, MbVector3D & p ) const; // \ru Третья производная \en Third derivative + virtual void _DeriveUUV( double u, double v, MbVector3D & p ) const; // \ru Третья производная \en Third derivative + virtual void _DeriveUVV( double u, double v, MbVector3D & p ) const; // \ru Третья производная \en Third derivative + virtual void _DeriveVVV( double u, double v, MbVector3D & p ) const; // \ru Третья производная \en Third derivative + virtual void _Normal ( double u, double v, MbVector3D & p ) const; // \ru Нормаль \en Normal + /** \} */ + + /** \ru \name Функции доступа к группе данных для работы внутри и вне области определения параметров поверхности. + \en \name Functions for get of the group of data inside and outside the surface's domain of parameters. + \{ */ + virtual void Explore( double & u, double & v, bool ext, + MbCartPoint3D & pnt, MbVector3D & uDer, MbVector3D & vDer, + MbVector3D * uuDer, MbVector3D * vvDer, MbVector3D * uvDer, MbVector3D * nor ) const; +/** \} */ + + /** \ru \name Функции движения по поверхности + \en \name Functions of moving along the surface + \{ */ + virtual double StepU( double u, double v, double sag ) const; // \ru Вычисление шага параметра u по по величине прогиба \en Calculation of parameter u step by the value of sag + virtual double StepV( double u, double v, double sag ) const; // \ru Вычисление шага параметра v по по величине прогиба \en Calculation of parameter v step by the value of sag + virtual double DeviationStepU( double u, double v, double ang ) const; // \ru Вычисление шага параметра u по углу отклонения нормали \en Calculation of parameter u step by the angle of deviation of normal + virtual double DeviationStepV( double u, double v, double ang ) const; // \ru Вычисление шага параметра v по углу отклонения нормали \en Calculation of parameter v step by the angle of deviation of normal + virtual size_t GetUCount() const; + virtual size_t GetVCount() const; + /** \} */ + + /** \ru \name Общие функции поверхности + \en \name Common functions of surface + \{ */ + virtual MbCurve3D * CurveU( double v, MbRect1D * pRgn, bool doApprox = true ) const; // \ru Пространственная копия линии v = const \en Spatial copy of 'v = const'-line + virtual MbCurve3D * CurveV( double u, MbRect1D * pRgn, bool doApprox = true ) const; // \ru Пространственная копия линии u = const \en Spatial copy of 'u = const'-line + + virtual void ChangeCarrier( const MbSpaceItem & item, MbSpaceItem & init ); // \ru Изменение носителя \en Changing of carrier + // \ru Подобные ли поверхности для объединения (слива). \en Whether the surfaces to union (joining) are similar. + virtual bool IsSimilarToSurface( const MbSurface & surf, VERSION version, double precision = METRIC_PRECISION ) const; + // \ru Дать двумерную матрицу преобразования из своей параметрической области в параметрическую область surf. \en Get two-dimensional transformation matrix from own parametric region to parametric region of 'surf'. + virtual bool GetMatrixToSurface( const MbSurface & surf, MbMatrix & matr, VERSION version, double precision = METRIC_PRECISION ) const; + // \ru Подобные ли поверхности для объединения (слива) \en Whether the surfaces to union (joining) are similar + virtual bool IsSpecialSimilarToSurface( const MbSurface & surf, VERSION version, double precision = METRIC_PRECISION ) const; // \ru Специальный случай \en Special case + + virtual size_t GetUMeshCount() const; // \ru Выдать количество полигонов по u \en Get the count of polygons by u + virtual size_t GetVMeshCount() const; // \ru Выдать количество полигонов по v \en Get the count of polygons by v + + /// \ru Получить кривую 0. \en Get curve 0. + const MbCurve3D & GetCurve0() const { return *curve0; } + /// \ru Получить кривую 1. \en Get curve 1. + const MbCurve3D & GetCurve1() const { return *curve1; } + /// \ru Получить кривую 2. \en Get curve 2. + const MbCurve3D & GetCurve2() const { return *curve2; } + /// \ru Получить кривую 3. \en Get curve 3. + const MbCurve3D & GetCurve3() const { return *curve3; } + /// \ru Получить кривую по индексу. \en Get curve by an index. + const MbCurve3D * GetCurve( size_t ind ) const; + /// \ru Получить количество кривых. \en Get count of curves. + size_t GetCurvesCount() const { return 4; } //-V112 + const MbCartPoint3D * GetVertex() const { return vertex; } ///< \ru Выдать вершины P0, P1, P2. \en Get vertices P0, P1, P2. + double GetT0Min() const { return t0min; } ///< \ru Минимальное значение параметра на кривой 0. \en Minimal value of parameter on curve 0. + double GetT0Max() const { return t0max; } ///< \ru Максимальное значение параметра на кривой 0. \en Maximal value of parameter on curve 0. + double GetT1Min() const { return t1min; } ///< \ru Минимальное значение параметра на кривой 1. \en Minimal value of parameter on curve 1. + double GetT1Max() const { return t1max; } ///< \ru Максимальное значение параметра на кривой 1. \en Maximal value of parameter on curve 1. + double GetT2Min() const { return t2min; } ///< \ru Минимальное значение параметра на кривой 2. \en Minimal value of parameter on curve 2. + double GetT2Max() const { return t2max; } ///< \ru Максимальное значение параметра на кривой 2. \en Maximal value of parameter on curve 2. + double GetT3Min() const { return t3min; } ///< \ru Минимальное значение параметра на кривой 3. \en Minimal value of parameter on curve 3. + double GetT3Max() const { return t3max; } ///< \ru Максимальное значение параметра на кривой 3. \en Maximal value of parameter on curve 3. + double GetTMin( size_t ind ) const; ///< \ru Минимальное значение параметра на кривой с индексом ind. \en Get The minimal value of parameter on curve by index. + double GetTMax( size_t ind ) const; ///< \ru Максимальное значение параметра на кривой с индексом ind. \en Get The maximal value of parameter on curve by index. + + /** \brief \ru Получить образующую кривую по индексу, если она точно совпадает с соответствующим краем поверхности. + \en Get exact curve by index, if it coincides with the corresponding border of the surface. \~ + \details \ru Совпадение кривой с краем поверхности определяется по крайним точкам кривой. + \en Coincidence of the curve with the border of the surface is determined by the end points of the curve. \~ + \param[in] k - \ru Индекс кривой. + \en Index of the curve. \~ + \param[out] sense - \ru Флаг совпадения направленности кривой с рисунком, приведенным выше. + \en Flag that indicates the coincidence of the curve with the picture shown above.\~ + \return - \ru Указатель на кривую или c3d_null. + \en Pointer to the curve or c3d_null. \~ + */ + const MbCurve3D * GetExactCurve( size_t k, bool &sense ) const; + + /** \brief \ru Проверка полюсов на кривых. + \en Check poles on curves. \~ + \details \ru Определяет, есть ли полюс на границе области определения по длине кривой, определяющей границу.\n + Результат вычислений можно получить с помощью функций GetPoleUMin, GetPoleUMax, GetPoleVMin, GetPoleVMax. + \en Determines whether the pole at domain boundary by curve length determining boundary.\n + Result of calculations can be obtained with help of GetPoleUMin, GetPoleUMax, GetPoleVMin, GetPoleVMax functions. \~ + */ + void CheckPole(); + /** \brief \ru Корректировка параметров. + \en Correct parameters. \~ + \details \ru Загоняет параметры, выходящие за область определения в область определения,\n + если поверхность замкнута по соответствующему параметру или параметр лежит за полюсом. + \en Drives parameters leaving out of domain into domain\n + if the surface is closed by corresponding parameter or parameter lies behind a pole. \~ + */ + inline void CheckParam( double & u, double & v ) const; + +private: + void operator = ( const MbCoverSurface & ); // \ru Не реализовано. \en Not implemented. + void Init(); + // \ru Определение местных координат. \en Determination of local coordinates. + void CalculateCoordinate( double & u, double & v, bool ext, + double & t0, double & t1, double & t2, double & t3 ) const; + void CalculatePoint ( double & u, double & v, bool ext, MbCartPoint3D * point ) const; + void CalculateFirst ( double & u, double & v, bool ext, MbCartPoint3D * point, MbVector3D * first ) const; + void CalculateSecond( double & u, double & v, bool ext, MbVector3D * second ) const; + void CalculateThird ( double & u, double & v, bool ext, MbVector3D * third ) const; + void CalculateExplore( double & u, double & v, bool ext, + MbCartPoint3D * point, MbVector3D * first, MbVector3D * second ) const; + + DECLARE_PERSISTENT_CLASS_NEW_DEL( MbCoverSurface ) +}; // MbCoverSurface + + +IMPL_PERSISTENT_OPS( MbCoverSurface ) + + +//------------------------------------------------------------------------------ +// \ru Получить кривую по индексу \en Get curve by an index +// --- +inline const MbCurve3D * MbCoverSurface::GetCurve( size_t ind ) const +{ + if ( ind >= COVER_COUNT ) + ind = ind % COVER_COUNT; + switch ( ind ) { + case 0 : { return curve0; } + case 1 : { return curve1; } + case 2 : { return curve2; } + case 3 : { return curve3; } + } + return c3d_null; +} + + +//------------------------------------------------------------------------------ +// \ru Минимальное значение параметра на кривой с индексом ind. \en Get The minimal value of parameter on curve by index. +// --- +inline double MbCoverSurface::GetTMin( size_t ind ) const +{ + if ( ind >= COVER_COUNT ) + ind = ind % COVER_COUNT; + switch ( ind ) { + case 0 : { return t0min; } + case 1 : { return t1min; } + case 2 : { return t2min; } + case 3 : { return t3min; } + } + return UNDEFINED_DBL; +} + + +//------------------------------------------------------------------------------ +// \ru Максимальное значение параметра на кривой с индексом ind. \en Get The maximal value of parameter on curve by index. +// --- +inline double MbCoverSurface::GetTMax( size_t ind ) const +{ + if ( ind >= COVER_COUNT ) + ind = ind % COVER_COUNT; + switch ( ind ) { + case 0 : { return t0max; } + case 1 : { return t1max; } + case 2 : { return t2max; } + case 3 : { return t3max; } + } + return UNDEFINED_DBL; +} + + +//------------------------------------------------------------------------------ +// \ru Корректировка параметров \en Correct parameters +// --- +inline void MbCoverSurface::CheckParam( double &u, double &v ) const +{ + double umin = 0; + double umax = 1; + double vmin = 0; + double vmax = 1; + if ( uclosed ) { + if ( (u < umin) || (u > umax ) ) { + double tmp = umax - umin; + u -= ::floor((u - umin) / tmp) * tmp; + } + } + else { + if ( poleUMin && uumax ) + u = umax; + } + if ( vclosed ) { + if ( (v < vmin) || (v > vmax ) ) { + double tmp = vmax - vmin; + v -= ::floor((v - vmin) / tmp) * tmp; + } + } + else { + if ( poleVMin && vvmax ) + v = vmax; + } +} + + +#endif // __SURF_COVER_SURFACE_H diff --git a/C3d/Include/surf_curve_bounded_surface.h b/C3d/Include/surf_curve_bounded_surface.h index 2b7bb35..69bd3a8 100644 --- a/C3d/Include/surf_curve_bounded_surface.h +++ b/C3d/Include/surf_curve_bounded_surface.h @@ -120,7 +120,7 @@ public : /// \ru Конструктор для поверхности c габаритом при чтении грани. \en Constructor for surface with bounding box at face reading. MbCurveBoundedSurface( MbSurface & initSurface, c3d::PlaneContoursSPtrVector & initCurves, MbCube & gab ); /// \ru Конструктор по контурам, берет за базовую поверхность поверхность первого контура. \en Constructor by contours, uses the surface of first contour as base surface. - MbCurveBoundedSurface( MbContourOnSurface & init1, MbContourOnSurface * init2 = NULL ); + MbCurveBoundedSurface( MbContourOnSurface & init1, MbContourOnSurface * init2 = c3d_null ); /// \ru Конструктор-копия на новую базовую поверхность. \en Copy-constructor for new base surface. MbCurveBoundedSurface( const MbCurveBoundedSurface & init, MbSurface & newBaseSurface, bool calculateGabarit = true ); @@ -141,13 +141,13 @@ public : \en \name Common functions of a geometric object \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента. \en A type of element. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли объект копией. \en Whether the object is a copy. virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным. \en Make equal. virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными. \en Determine whether the objects are similar. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвинуть объект вдоль вектора. \en Move an object along a vector. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвинуть объект вдоль вектора. \en Move an object along a vector. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual double DistanceToPoint( const MbCartPoint3D & ) const; // \ru Вычислить расстояние до точки. \en Calculate the distance to a point. virtual void Refresh(); // \ru Сбросить все временные данные. \en Reset all temporary data. virtual void CalculateMesh( const MbStepData & stepData, const MbFormNote & note, MbMesh & mesh ) const; // \ru Построить полигональную копию mesh. \en Build polygonal copy mesh. @@ -269,7 +269,7 @@ public : virtual double CurvatureV ( double u, double v ) const; // \ru Kривизна линии v. \en Curvature of v-line. virtual bool IsSameBase( const MbSurface & ) const; // \ru Является ли базовая поверхность копией базовой поверхности данного объекта. \en Whether the base surface is a duplicate of base surface of current object. - virtual bool IsPlanar() const; // \ru Является ли поверхность плоской. \en Whether the surface is planar. + virtual bool IsPlanar( double accuracy = METRIC_EPSILON ) const; // \ru Является ли поверхность плоской. \en Whether the surface is planar. virtual double GetRadius() const; // \ru Дать физический радиус объекта или ноль, если это невозможно. \en Get the physical radius of the object or null if it impossible. virtual double GetFilletRadius( const MbCartPoint3D & ) const; // \ru Является ли поверхность скруглением. \en Whether the surface is fillet. virtual MbeParamDir GetFilletDirection() const; // \ru Направление поверхности скругления. \en Direction of fillet surface. @@ -306,9 +306,9 @@ public : size_t SegmentIntersection( const MbCurve & pCurve, SArray & curveParams, double epsilon = Math::metricEpsilon ) const; // \ru Найти ближайшую проекцию точки на поверхность. \en Find the nearest projection of a point onto the surface. - virtual bool NearPointProjection( const MbCartPoint3D & p, double & u, double & v, bool ext, MbRect2D * uvRange = NULL ) const; // \ru Ближайшая проекция точки на поверхность. \en The nearest point projection onto the surface. + virtual bool NearPointProjection( const MbCartPoint3D & p, double & u, double & v, bool ext, MbRect2D * uvRange = c3d_null ) const; // \ru Ближайшая проекция точки на поверхность. \en The nearest point projection onto the surface. // \ru Найти все проекции точки на поверхность вдоль вектора в любом из двух направлений. \en Find all a point projection onto the surface along a vector in either of two directions. - virtual void DirectPointProjection( const MbCartPoint3D & p, const MbVector3D & vect, SArray & uv, bool ext, MbRect2D * uvRange = NULL ) const; + virtual void DirectPointProjection( const MbCartPoint3D & p, const MbVector3D & vect, SArray & uv, bool ext, MbRect2D * uvRange = c3d_null ) const; // \ru Вce точки пересечения поверхности и кривой. \en All the points of intersection of a surface and a curve. virtual void CurveIntersection( const MbCurve3D & curv, SArray & uv, SArray & tt, bool ext0, bool ext, bool touchInclude = false ) const; @@ -500,7 +500,7 @@ public : \details \ru Дать контур, ограничивающий поверхность, по его индексу. С проверкой индекса. \en Get contour bounding surface by its index. With index checking. \~ */ - const MbContourOnSurface * GetCurve ( size_t ind ) const { return ( ind < curves.Count() ) ? curves[ind] : NULL; } + const MbContourOnSurface * GetCurve ( size_t ind ) const { return ( ind < curves.Count() ) ? curves[ind] : c3d_null; } /** \brief \ru Дать контур, ограничивающий поверхность, по его индексу. \en Get contour bounding surface by its index. \~ \details \ru Дать контур, ограничивающий поверхность, по его индексу. Без проверки индекса. @@ -514,7 +514,7 @@ public : \details \ru Дать контур, ограничивающий поверхность, по его индексу. С проверкой индекса. \en Get contour bounding surface by its index. With index checking. \~ */ - MbContourOnSurface * SetCurve ( size_t ind ) { return ( ind < curves.Count() ) ? curves[ind] : NULL; } + MbContourOnSurface * SetCurve ( size_t ind ) { return ( ind < curves.Count() ) ? curves[ind] : c3d_null; } /** \brief \ru Дать контур, ограничивающий поверхность, по его индексу. \en Get contour bounding surface by its index. \~ \details \ru Дать контур, ограничивающий поверхность, по его индексу. Без проверки индекса. @@ -530,9 +530,9 @@ public : /// \ru Слить двумерные сегменты в контурах. \en Merge two-dimensional segments in contours. void MergeSegments( double eps = Math::LengthEps ); /// \ru Копия объекта со старой базовой поверхностью. \en Copy of object with old base surface. - MbCurveBoundedSurface & CurvesDuplicate() const; + MbCurveBoundedSurface & CurvesDuplicate() const { return *new MbCurveBoundedSurface( this ); } /// \ru Проверить на замкнутость по u или v по внешнему контуру. \en Check closeness by u or v using outer contour. - bool CheckTouchByContour( bool byU ) const; + bool CheckTouchByContour( bool byU ) const; /** \} */ protected: diff --git a/C3d/Include/surf_cylinder_surface.h b/C3d/Include/surf_cylinder_surface.h index a77edfb..af8a112 100644 --- a/C3d/Include/surf_cylinder_surface.h +++ b/C3d/Include/surf_cylinder_surface.h @@ -151,10 +151,10 @@ public: \en \name Common functions of a geometric object \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента. \en A type of element. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Равны ли объекты. \en Whether the objects are equal. virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным. \en Make equal. - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта. \en Set properties of the object. @@ -254,7 +254,7 @@ public: virtual MbCurve3D * CurveUV( const MbLineSegment &, bool bApprox = true ) const; // \ru Пространственная копия линии по параметрической линии. \en Spatial copy of line by parametric line. // \ru Найти все проекции точки на поверхность вдоль вектора в любом из двух направлений. \en Find all a point projection onto the surface along a vector in either of two directions. - virtual void DirectPointProjection( const MbCartPoint3D & p, const MbVector3D & vect, SArray & uv, bool ext, MbRect2D * uvRange = NULL ) const; + virtual void DirectPointProjection( const MbCartPoint3D & p, const MbVector3D & vect, SArray & uv, bool ext, MbRect2D * uvRange = c3d_null ) const; // \ru Пересечение с кривой. \en Intersection with curve. virtual void CurveIntersection( const MbCurve3D & curv, SArray & uv, SArray & tt, bool ext0, bool ext, bool touchInclude = false ) const; @@ -316,7 +316,7 @@ public: /** \ru \name Функции элементарных поверхностей \en \name Functions of elementary surfaces \{ */ - virtual bool GetPointProjection( const MbCartPoint3D & p, bool init, double & u, double & v, bool ext, MbRect2D * uvRange = NULL ) const; + virtual bool GetPointProjection( const MbCartPoint3D & p, bool init, double & u, double & v, bool ext, MbRect2D * uvRange = c3d_null ) const; /** \} */ /** \ru \name Функции цилиндрической поверхности \en \name Functions of the cylindrical surface diff --git a/C3d/Include/surf_elementary_surface.h b/C3d/Include/surf_elementary_surface.h index a5fe3df..ba593e9 100644 --- a/C3d/Include/surf_elementary_surface.h +++ b/C3d/Include/surf_elementary_surface.h @@ -59,12 +59,12 @@ public: \{ */ virtual MbeSpaceType IsA () const = 0; // \ru Тип элемента. \en A type of element. virtual MbeSpaceType Type() const; // \ru Тип элемента. \en A type of element. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const = 0; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const = 0; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const = 0; // \ru Являются ли объекты равными. \en Determine whether objects are equal. virtual bool SetEqual ( const MbSpaceItem & ) = 0; // \ru Сделать равным. \en Make equal. - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D & to, MbRegTransform * = NULL ); // \ru Сдвиг. \en Move. - virtual void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move ( const MbVector3D & to, MbRegTransform * = c3d_null ); // \ru Сдвиг. \en Move. + virtual void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual double DistanceToPoint( const MbCartPoint3D & to ) const; // \ru Вычислить расстояние до точки. \en Calculate the distance to a point. virtual void GetProperties( MbProperties & properties ) = 0; // \ru Выдать свойства объекта. \en Get properties of the object. @@ -140,7 +140,7 @@ public: // \ru Ближайшая проекция точки на поверхность \en Nearest point projection onto the surface virtual MbeNewtonResult PointProjectionNewton( const MbCartPoint3D & p, size_t iterLimit, double & u, double & v, bool ext ) const; // \ru Функция для нахождения проекции точки на поверхность. \en Function for searching the point projection onto the surface. - virtual bool NearPointProjection( const MbCartPoint3D & p, double & u, double & v, bool ext, MbRect2D * uvRange = NULL ) const; // \ru Ближайшая проекция точки на поверхность. \en The nearest point projection onto the surface. + virtual bool NearPointProjection( const MbCartPoint3D & p, double & u, double & v, bool ext, MbRect2D * uvRange = c3d_null ) const; // \ru Ближайшая проекция точки на поверхность. \en The nearest point projection onto the surface. virtual bool IsRectangular() const; // \ru Если true производные по u и v ортогональны. \en If true, then derivatives by u and v are orthogonal. virtual void SetLimit( double u1, double v1, double u2, double v2 ) = 0; @@ -168,7 +168,7 @@ public: \return \ru true в случае успеха операции \en True if the operation succeeded \~ */ - virtual bool GetPointProjection( const MbCartPoint3D & p, bool init, double & u, double & v, bool ext, MbRect2D * uvRange = NULL ) const = 0; + virtual bool GetPointProjection( const MbCartPoint3D & p, bool init, double & u, double & v, bool ext, MbRect2D * uvRange = c3d_null ) const = 0; // Дать приращение параметра u и параметра v, соответствующее единичной длине в пространстве. \en Get increment of parameters, corresponding to the unit length in space. virtual void GetParamsToUnit( double u, double v, double & uParam, double & vParam ) const; diff --git a/C3d/Include/surf_elevation_surface.h b/C3d/Include/surf_elevation_surface.h index 0f40d94..df975a1 100644 --- a/C3d/Include/surf_elevation_surface.h +++ b/C3d/Include/surf_elevation_surface.h @@ -38,7 +38,7 @@ const VERSION ELEVATION_SURFACE_VERSION1 = 0x0F001003L; ///< \ru Расчёт т // --- class MATH_CLASS MbElevationSurface : public MbLoftedSurface { private: - MbCurve3D * spine; ///< \ru Направляющая кривая (не NULL). \en Guide curve (not NULL). + MbCurve3D * spine; ///< \ru Направляющая кривая (не c3d_null). \en Guide curve (not c3d_null). RPArray mSpines; ///< \ru Множество указателей на направляющие кривые (на основе spine). \en Set of pointers to guide curves (based on 'spine'). bool isSimToEvol; ///< \ru Способ расчёта точек на поверхности. \en Way of calculating of points on the surface. @@ -102,13 +102,13 @@ public: \en \name Common functions of a geometric object \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента \en A type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Равны ли объекты \en Whether the objects are equal virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным \en Make equal virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными \en Whether the objects are similar - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void Refresh (); virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object @@ -193,7 +193,7 @@ public: virtual size_t GetVMeshCount() const; // \ru Выдать количество полигонов по v \en Get the count of polygons by v /// \ru Вернуть направляющую кривую. \en Return spine (guide) curve. - const MbCurve3D & GetSpineCurve() const { C3D_ASSERT( spine != NULL ); return *spine; } + const MbCurve3D & GetSpineCurve() const { C3D_ASSERT( spine != c3d_null ); return *spine; } /// \ru Вернуть направляющую кривую. \en Return spine (guide) curve. bool IsSimilarToEvolution() const { return isSimToEvol; } @@ -315,8 +315,8 @@ inline void MbElevationSurface::CheckParam( double & u, double & v, bool ext ) c \en Center of mass of profile curve. \~ \param[in,out] ct - \ru Искомый параметр. \en Required parameter. \~ - \param[in,out] tau - \ru Производная направляющей в точке с координатой ct. Если в функцию передать NULL, производная не вычисляется. - \en Derivative of guide curve at point with 'ct' coordinate. If giving NULL to function, then derivative isn't calculated. \~ + \param[in,out] tau - \ru Производная направляющей в точке с координатой ct. Если в функцию передать c3d_null, производная не вычисляется. + \en Derivative of guide curve at point with 'ct' coordinate. If giving c3d_null to function, then derivative isn't calculated. \~ \return \ru true - если направляющая пересекается с плоскостью профиля, false - если не пересекается. \en True - if guide curve intersects with plane of profile, false - if not intersects. \~ \ingroup Algorithms_3D @@ -341,8 +341,8 @@ bool CreateElevationParam( const MbCurve3D & crvThis, const MbCurve3D & spine, \en The spine (guide) curve. \~ \param[in,out] vParams - \ru Множество параметров. \en Set of parameters. \~ - \param[in,out] tiePnts - \ru Множество центров масс профильных кривых. Не заполняется, если в функцию передать NULL. - \en Set of centers of mass of profile curves. If giving NULL to function, then it isn't filled. \~ + \param[in,out] tiePnts - \ru Множество центров масс профильных кривых. Не заполняется, если в функцию передать c3d_null. + \en Set of centers of mass of profile curves. If giving c3d_null to function, then it isn't filled. \~ \return \ru true - если массив параметров успешно создан. \en True - if the array of parameters successfully created. \~ \ingroup Algorithms_3D diff --git a/C3d/Include/surf_evolution_surface.h b/C3d/Include/surf_evolution_surface.h index fdf1022..858c429 100644 --- a/C3d/Include/surf_evolution_surface.h +++ b/C3d/Include/surf_evolution_surface.h @@ -140,13 +140,13 @@ public: \en \name Common functions of a geometric object \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента \en A type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Равны ли объекты. \en Whether the objects are equal. virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным. \en Make equal. virtual bool IsSimilar ( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными. \en Determine whether the objects are similar. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг. \en Move. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг. \en Move. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта. \en Set properties of the object. @@ -216,7 +216,7 @@ public: \en \name Common functions of surface \{ */ virtual double CurvatureU ( double u, double v ) const; // \ru Kривизна линии по u. \en Curvature of line by u. - virtual bool IsPlanar() const; // \ru Является ли поверхность плоской. \en Whether the surface is planar. + virtual bool IsPlanar( double accuracy = METRIC_EPSILON ) const; // \ru Является ли поверхность плоской. \en Whether the surface is planar. virtual void ChangeCarrier( const MbSpaceItem & item, MbSpaceItem & init ); // \ru Изменение носителя. \en Changing of carrier. diff --git a/C3d/Include/surf_exaction_surface.h b/C3d/Include/surf_exaction_surface.h index 484349c..257f5cb 100644 --- a/C3d/Include/surf_exaction_surface.h +++ b/C3d/Include/surf_exaction_surface.h @@ -96,13 +96,13 @@ public: \en \name Common functions of a geometric object \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента. \en A type of element. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Равны ли объекты. \en Whether the objects are equal. virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равными. \en Make equal. virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными. \en Determine whether the objects are similar. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг. \en Move. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг. \en Move. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта. \en Set properties of the object. @@ -153,7 +153,7 @@ public: /** \ru \name Общие функции поверхности \en \name Common functions of surface \{ */ - virtual bool IsPlanar() const; // \ru Является ли поверхность плоской. \en Whether the surface is planar. + virtual bool IsPlanar( double accuracy = METRIC_EPSILON ) const; // \ru Является ли поверхность плоской. \en Whether the surface is planar. virtual MbSplineSurface * NurbsSurface( double, double, double, double, bool bmatch = false ) const; // \ru NURBS копия поверхности. \en NURBS copy of a surface. virtual MbSurface * Offset( double d, bool same ) const; // \ru Создание эквидистантной поверхности. \en Create an offset surface. diff --git a/C3d/Include/surf_expansion_surface.h b/C3d/Include/surf_expansion_surface.h index 199e813..35990db 100644 --- a/C3d/Include/surf_expansion_surface.h +++ b/C3d/Include/surf_expansion_surface.h @@ -38,7 +38,7 @@ class MATH_CLASS MbExpansionSurface : public MbSweptSurface { private: MbCurve3D * spine; ///< \ru Направляющая кривая. \en Spine (guide) curve. - MbCurve3D * brink; ///< \ru Вторая образующая кривая (первой является curve, может быть NULL). \en The second generating curve ('curve' is first one, may be NULL). + MbCurve3D * brink; ///< \ru Вторая образующая кривая (первой является curve, может быть c3d_null). \en The second generating curve ('curve' is first one, may be c3d_null). double tmin; ///< \ru Начальный параметр brink. \en Start parameter of 'brink'. double dt; ///< \ru Производная параметра кривой brink по параметру u (dt * (u - umin) = t_brink - tmin_brink). \en Derivative of parameter of 'brink' curve by u parameter (dt * (u - umin) = t_brink - tmin_brink). MbCartPoint3D origin; ///< \ru Начало образующей. \en Begin of gravity of generating curve. @@ -62,7 +62,7 @@ public: \en Second generating curve \~ */ MbExpansionSurface( const MbCurve3D & cr, const MbCurve3D & sp, bool sameCurve, bool sameSpine, - MbCurve3D * sl = NULL ); + MbCurve3D * sl = c3d_null ); /** \brief \ru Конструктор по точке, образующей и направляющей. \en Constructor by point, generating curve and guide curve. \~ @@ -101,13 +101,13 @@ public: \en \name Common functions of a geometric object \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента. \en A type of element. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Равны ли объекты. \en Whether the objects are equal. virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным. \en Make equal. virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными. \en Determine whether the objects are similar. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг. \en Move. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг. \en Move. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта. \en Set properties of the object. @@ -174,7 +174,7 @@ public: \{ */ virtual double CurvatureU ( double u, double v ) const; // \ru Kривизна линии по u. \en Curvature of line by u. virtual double CurvatureV ( double u, double v ) const; // \ru Kривизна линии по v. \en Curvature of line by v. - virtual bool IsPlanar() const; // \ru Является ли поверхность плоской. \en Whether the surface is planar. + virtual bool IsPlanar( double accuracy = METRIC_EPSILON ) const; // \ru Является ли поверхность плоской. \en Whether the surface is planar. virtual size_t GetUMeshCount() const; // \ru Выдать количество полигонов по u. \en Get the count of polygons by u. virtual size_t GetVMeshCount() const; // \ru Выдать количество полигонов по v. \en Get the count of polygons by v. @@ -248,7 +248,7 @@ IMPL_PERSISTENT_OPS( MbExpansionSurface ) // --- inline double MbExpansionSurface::BrinkParameterFrom( const double & u ) const { double t = u; - if ( brink != NULL ) + if ( brink != c3d_null ) t = tmin + (u - umin) * dt; return t; } @@ -259,7 +259,7 @@ inline double MbExpansionSurface::BrinkParameterFrom( const double & u ) const { // --- inline double MbExpansionSurface::BrinkParameterInto( const double & t ) const { double u = t; - if ( brink != NULL ) { + if ( brink != c3d_null ) { double du = (::fabs(dt) > EXTENT_EQUAL) ? 1.0 / dt : 1.0; u = umin + (t - tmin) * du; } diff --git a/C3d/Include/surf_exploration_surface.h b/C3d/Include/surf_exploration_surface.h index a102f9e..404c8b1 100644 --- a/C3d/Include/surf_exploration_surface.h +++ b/C3d/Include/surf_exploration_surface.h @@ -75,13 +75,13 @@ public: \en \name Common functions of a geometric object \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента \en A type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Равны ли объекты. \en Whether the objects are equal. virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным. \en Make equal. virtual bool IsSimilar ( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными. \en Determine whether the objects are similar. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг. \en Move. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг. \en Move. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта. \en Set properties of the object. @@ -163,16 +163,16 @@ public: \en Create an evolution surface. \~ \details \ru Создать кинематическую поверхность. \en Create an evolution surface. \~ - \param[in] curve - \ru Образующая кривая - \en Generating curve \~ - \param[in] spine - \ru Направляющая кривая - \en Guide curve \~ - \param[in] samec - \ru Признак использования оригинала образующей кривой, а не копии - \en Attribute of usage of original of generating curve, not a copy \~ - \param[in] sFunc - \ru Функция масштабирования образующей кривой. - \en The function of curve scaling. \~ - \param[in] rFunc - \ru Функция вращения образующей кривой. - \en The function of curve rotation. \~ + \param[in] curve - \ru Образующая кривая. + \en Generating curve. \~ + \param[in] spine - \ru Направляющая кривая. + \en Guide curve. \~ + \param[in] samec - \ru Признак использования оригинала образующей кривой, а не копии. + \en Attribute of usage of original of generating curve, not a copy. \~ + \param[in] _scaling - \ru Функция масштабирования образующей кривой. + \en The function of curve scaling. \~ + \param[in] _winding - \ru Функция вращения образующей кривой. + \en The function of curve rotation. \~ \return \ru Возвращает созданную поверхность. \en Return the created surface. \~ \ingroup Surface_Modeling diff --git a/C3d/Include/surf_extrusion_surface.h b/C3d/Include/surf_extrusion_surface.h index 89f83fa..7030984 100644 --- a/C3d/Include/surf_extrusion_surface.h +++ b/C3d/Include/surf_extrusion_surface.h @@ -76,13 +76,13 @@ public: \en \name Common functions of a geometric object \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента. \en A type of element. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Равны ли объекты. \en Whether the objects are equal. virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным. \en Make equal. virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными. \en Determine whether the objects are similar. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг. \en Move. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг. \en Move. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта. \en Set properties of the object. @@ -150,7 +150,7 @@ public: virtual double CurvatureU ( double u, double v ) const; // \ru Kривизна линии по u. \en Curvature of line by u. virtual double CurvatureV ( double u, double v ) const; // \ru Kривизна линии v. \en Curvature of v-line. - virtual bool IsPlanar() const; // \ru Является ли поверхность плоской. \en Whether the surface is planar. + virtual bool IsPlanar( double accuracy = METRIC_EPSILON ) const; // \ru Является ли поверхность плоской. \en Whether the surface is planar. virtual void ChangeCarrier( const MbSpaceItem & item, MbSpaceItem & init ); // \ru Изменение носителя. \en Changing of carrier. virtual MbSplineSurface * NurbsSurface( double, double, double, double, bool bmatch = false ) const; // \ru NURBS копия поверхности. \en NURBS copy of a surface. @@ -163,7 +163,7 @@ public: virtual ThreeStates Salient() const; // \ru Выпуклая ли поверхность. \en Whether a surface is convex. // \ru Проекция точки на поверхность. \en The point projection onto the surface. - virtual bool NearPointProjection ( const MbCartPoint3D & p, double & u, double & v, bool ext, MbRect2D * uvRange = NULL ) const; // \ru Ближайшая проекция точки на поверхность. \en The nearest point projection onto the surface. + virtual bool NearPointProjection ( const MbCartPoint3D & p, double & u, double & v, bool ext, MbRect2D * uvRange = c3d_null ) const; // \ru Ближайшая проекция точки на поверхность. \en The nearest point projection onto the surface. // \ru Пересечение с кривой. \en Intersection with curve. virtual void CurveIntersection( const MbCurve3D & curv, SArray & uv, SArray & tt, bool ext0, bool ext, bool touchInclude = false ) const; diff --git a/C3d/Include/surf_fillet_surface.h b/C3d/Include/surf_fillet_surface.h index 9b0e375..444352b 100644 --- a/C3d/Include/surf_fillet_surface.h +++ b/C3d/Include/surf_fillet_surface.h @@ -46,7 +46,7 @@ class MATH_CLASS MbFunction; */// --- class MATH_CLASS MbFilletSurface : public MbSmoothSurface { protected: - MbCurve3D * curve0; ///< \ru Кривая пересечения касательных к поверхностям - всегда не NULL. \en Intersection curve of tangents to surfaces - always not NULL. + MbCurve3D * curve0; ///< \ru Кривая пересечения касательных к поверхностям - всегда не c3d_null. \en Intersection curve of tangents to surfaces - always not c3d_null. MbFunction * weights0; ///< \ru Функция веса точек средней кривой curve0. \en Function of weight of points of curve0 mid-curve. double conic; ///< \ru Коэффициент формы, изменяется от 0.05 до 0.95, определяет вес точек кривой curve0. \en Coefficient of shape is changed between 0.05 and 0.95 and determines weight of points of curve0 curve. bool even; ///< \ru Равномерная параметризация по дуге или нет. \en Whether arc length parameterization is uniform or not. @@ -181,13 +181,13 @@ public: \en \name Common functions of a geometric object \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента \en A type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным. \en Make equal. virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными. \en Determine whether the objects are similar. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг. \en Move. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг. \en Move. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual void GetProperties( MbProperties &properties ); // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties &properties ); // \ru Записать свойства объекта. \en Set properties of the object. @@ -284,7 +284,7 @@ public: // \ru Проекции точки на поверхность. \en The point projections onto the surface. virtual MbeNewtonResult PointProjectionNewton( const MbCartPoint3D & p, size_t iterLimit, double & u, double & v, bool ext ) const; // \ru Функция для нахождения проекции точки на поверхность. \en Function for searching the point projection onto the surface. - virtual bool NearPointProjection ( const MbCartPoint3D & p, double & u, double & v, bool ext, MbRect2D * uvRange = NULL ) const; // \ru Ближайшая проекция точки на поверхность. \en The nearest point projection onto the surface. + virtual bool NearPointProjection ( const MbCartPoint3D & p, double & u, double & v, bool ext, MbRect2D * uvRange = c3d_null ) const; // \ru Ближайшая проекция точки на поверхность. \en The nearest point projection onto the surface. virtual double GetFilletRadius( const MbCartPoint3D & p ) const; // \ru Является ли поверхность скруглением. \en Whether the surface is fillet. virtual double GetFilletRadius( double u ) const; // \ru Дать радиус скругления по первому параметру. \en Get fillet radius if the surface is fillet. diff --git a/C3d/Include/surf_gregory_surface.h b/C3d/Include/surf_gregory_surface.h index c96e3d8..388eddb 100644 --- a/C3d/Include/surf_gregory_surface.h +++ b/C3d/Include/surf_gregory_surface.h @@ -52,7 +52,7 @@ public: \param[in] initContour - \ru Контур. \en The contour. \~ */ - MbGregorySurface( const MbContour3D & initContour, const SArray * conj = NULL ); + MbGregorySurface( const MbContour3D & initContour, const SArray * conj = c3d_null ); protected: /// \ru Конструктор-копия. \en Copy constructor. MbGregorySurface( const MbGregorySurface &, MbRegDuplicate * ); @@ -66,13 +66,13 @@ public: \en \name Common functions of a geometric object. \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента. \en A type of element. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Make a copy of element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Make a copy of element. virtual bool IsSame( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли объект копией. \en Whether the object is a copy. virtual bool SetEqual( const MbSpaceItem & init ); // \ru Сделать равным. \en Make equal. virtual bool IsSimilar( const MbSpaceItem & init ) const; // \ru Являются ли объекты подобными. \en Whether the objects are similar. - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix - virtual void Move( const MbVector3D &to, MbRegTransform * = NULL ); // \ru Сдвиг. \en Translation - virtual void Rotate( const MbAxis3D &axis, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix + virtual void Move( const MbVector3D &to, MbRegTransform * = c3d_null ); // \ru Сдвиг. \en Translation + virtual void Rotate( const MbAxis3D &axis, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis virtual void Refresh(); // \ru Сбросить все временные данные. \en Flush all the temporary data. virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта. \en Get properties of the object. diff --git a/C3d/Include/surf_grid_surface.h b/C3d/Include/surf_grid_surface.h index c656a89..70146be 100644 --- a/C3d/Include/surf_grid_surface.h +++ b/C3d/Include/surf_grid_surface.h @@ -193,13 +193,13 @@ public: \{ */ // \ru Общие функции геометрического объекта \en Common functions of a geometric object virtual MbeSpaceType IsA() const; // \ru Тип элемента \en A type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Cделать копию элемента \en Make a copy of element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Cделать копию элемента \en Make a copy of element virtual bool IsSame( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; virtual bool SetEqual( const MbSpaceItem &init ); // \ru Сделать равным \en Make equal virtual bool IsSimilar( const MbSpaceItem &init ) const; // \ru Являются ли объекты подобными \en Whether the objects are similar - virtual void Transform( const MbMatrix3D &matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector3D &to, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbAxis3D &axis, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual void Transform( const MbMatrix3D &matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector3D &to, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbAxis3D &axis, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual double DistanceToPoint( const MbCartPoint3D & ) const; // \ru Вычислить расстояние до точки. \en Calculate the distance to a point. virtual void GetProperties( MbProperties &properties ); // \ru Выдать свойства объекта \en Get properties of the object @@ -280,9 +280,9 @@ public: virtual size_t CurveClassification( const MbCurve & curve, SArray & tcurv, SArray & dir ) const; // \ru Найти ближайшую проекцию точки на поверхность. \en Find the nearest projection of a point onto the surface. - virtual bool NearPointProjection( const MbCartPoint3D & p, double & u, double & v, bool ext, MbRect2D * uvRange = NULL ) const; // \ru Ближайшая проекция точки на поверхность. \en The nearest point projection onto the surface. + virtual bool NearPointProjection( const MbCartPoint3D & p, double & u, double & v, bool ext, MbRect2D * uvRange = c3d_null ) const; // \ru Ближайшая проекция точки на поверхность. \en The nearest point projection onto the surface. // \ru Найти все проекции точки на поверхность вдоль вектора в любом из двух направлений. \en Find all a point projection onto the surface along a vector in either of two directions. - virtual void DirectPointProjection( const MbCartPoint3D & p, const MbVector3D & vect, SArray & uv, bool ext, MbRect2D * uvRange = NULL ) const; + virtual void DirectPointProjection( const MbCartPoint3D & p, const MbVector3D & vect, SArray & uv, bool ext, MbRect2D * uvRange = c3d_null ) const; // \ru Вce точки пересечения поверхности и кривой. \en All the points of intersection of a surface and a curve. virtual void CurveIntersection( const MbCurve3D & curv, SArray & uv, SArray & tt, bool ext0, bool ext, bool touchInclude = false ) const; @@ -341,7 +341,7 @@ public: , const Triangles & _triangles , const Bounds & _bounds ) { - MbGridSurface * surface = NULL; + MbGridSurface * surface = c3d_null; const size_t itemsCnt = _params.size(); diff --git a/C3d/Include/surf_join_surface.h b/C3d/Include/surf_join_surface.h index f8cae00..6cec37f 100644 --- a/C3d/Include/surf_join_surface.h +++ b/C3d/Include/surf_join_surface.h @@ -219,12 +219,12 @@ public: \en \name Common functions of a geometric object \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента \en A type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Являются ли объекты равными \en Determine whether objects are equal virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта \en Set properties of the object diff --git a/C3d/Include/surf_lofted_surface.h b/C3d/Include/surf_lofted_surface.h index c088578..9bbfa06 100644 --- a/C3d/Include/surf_lofted_surface.h +++ b/C3d/Include/surf_lofted_surface.h @@ -198,13 +198,13 @@ public: \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента \en A type of element virtual MbeSpaceType Type() const; // \ru Тип элемента \en A type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента \en Create a copy of the element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента \en Create a copy of the element virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Равны ли объекты \en Whether the objects are equal virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным \en Make equal virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными \en Whether the objects are similar - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void Refresh(); virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object @@ -291,7 +291,7 @@ public: /** \ru \name Общие функции поверхности \en \name Common functions of surface \{ */ - virtual bool IsPlanar() const; // \ru Является ли поверхность плоской \en Whether the surface is planar + virtual bool IsPlanar( double accuracy = METRIC_EPSILON ) const; // \ru Является ли поверхность плоской \en Whether the surface is planar virtual void ChangeCarrier( const MbSpaceItem & item, MbSpaceItem & init ); // \ru Изменение носителя \en Changing of carrier virtual void CalculateGabarit( MbCube & ) const; // \ru Рассчитать габарит поверхности \en Calculate bounding box of surface @@ -318,9 +318,9 @@ public: SArray & uu, SArray & vv ) const; // \ru Найти ближайшую проекцию точки на поверхность или ее продолжение по заданному начальному приближению. \en Find the neares projection of a point onto the surface. - virtual bool NearPointProjection ( const MbCartPoint3D & pnt, double & u, double & v, bool ext, MbRect2D * uvRange = NULL ) const; + virtual bool NearPointProjection ( const MbCartPoint3D & pnt, double & u, double & v, bool ext, MbRect2D * uvRange = c3d_null ) const; // \ru Найти все проекции точки на поверхность вдоль вектора в любом из двух направлений. \en Find all a point projection onto the surface along a vector in either of two directions. - virtual void DirectPointProjection( const MbCartPoint3D & pnt, const MbVector3D & vect, SArray & uv, bool ext, MbRect2D * uvRange = NULL ) const; + virtual void DirectPointProjection( const MbCartPoint3D & pnt, const MbVector3D & vect, SArray & uv, bool ext, MbRect2D * uvRange = c3d_null ) const; virtual bool IsLineU() const; // \ru Если true все производные по U выше первой равны нулю \en If true, then all the derivatives by U higher the first one are equal to zero virtual bool IsLineV() const; // \ru Если true все производные по V выше первой равны нулю \en If true, then all the derivatives by V higher the first one are equal to zero @@ -346,7 +346,7 @@ public: \return \ru Константная кривая. \en The constant curve. \~ */ - const MbCurve3D * GetCurve( ptrdiff_t ind ) const { return (ind >= 0 && ind < (ptrdiff_t)uCurves.Count()) ? uCurves[ind] : NULL; } + const MbCurve3D * GetCurve( ptrdiff_t ind ) const { return (ind >= 0 && ind < (ptrdiff_t)uCurves.Count()) ? uCurves[ind] : c3d_null; } /** \brief \ru Получить кривую для редактирования по номеру. \en Get curve for editing by an index. \~ \details \ru Получить кривую для редактирования по номеру. \n @@ -356,7 +356,7 @@ public: \return \ru Кривая. \en A curve. \~ */ - MbCurve3D * SetCurve( ptrdiff_t ind ) { return (ind >= 0 && ind < (ptrdiff_t)uCurves.Count()) ? uCurves[ind] : NULL; } + MbCurve3D * SetCurve( ptrdiff_t ind ) { return (ind >= 0 && ind < (ptrdiff_t)uCurves.Count()) ? uCurves[ind] : c3d_null; } /** \brief \ru Получить параметр по номеру. \en Get parameter by an index. \~ \details \ru Получить параметр по номеру.\n @@ -687,8 +687,8 @@ inline void MbLoftedSurface::ParamThird( double t1, double t2, double * tLoft ) \en Whether the surface is closed by parameter v. \~ \param[in,out] vParams - \ru Множество параметров. \en Set of parameters. \~ - \param[in,out] tiePnts - \ru Множество центров масс профильных кривых. Не заполняется, если в функцию передать NULL. - \en Set of centers of mass of profile curves. If giving NULL to function, then it isn't filled. \~ + \param[in,out] tiePnts - \ru Множество центров масс профильных кривых. Не заполняется, если в функцию передать c3d_null. + \en Set of centers of mass of profile curves. If giving c3d_null to function, then it isn't filled. \~ \param[in] version - \ru Версия. \en Version. \~ \return \ru true - если массив параметров успешно создан. diff --git a/C3d/Include/surf_mesh_surface.h b/C3d/Include/surf_mesh_surface.h index 641434c..cf6701a 100644 --- a/C3d/Include/surf_mesh_surface.h +++ b/C3d/Include/surf_mesh_surface.h @@ -191,7 +191,7 @@ public: */ MbMeshSurface( RPArray & initU, RPArray & initV, bool uClosed, bool vClosed, - bool same, const SArray * types = NULL, + bool same, const SArray * types = c3d_null, MbeMeshSurfaceVersion vers = msv_Ver3 ); /** \brief \ru Конструктор поверхности. \en Constructor of surface. \~ @@ -225,7 +225,7 @@ public: MbMeshSurface( RPArray & initU, RPArray & initV, SArray & parsU, SArray & parsV, bool uClosed, bool vClosed, - bool same, const SArray * types = NULL, + bool same, const SArray * types = c3d_null, MbeMeshSurfaceVersion vers = msv_Ver3 ); private: @@ -279,13 +279,13 @@ public: \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента \en A type of element virtual MbeSpaceType Type() const; // \ru Групповой тип элемента. \en Group element type. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Cделать копию элемента \en Make a copy of element + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Cделать копию элемента \en Make a copy of element virtual bool IsSame( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли объект копией. \en Whether the object is a copy. virtual bool SetEqual( const MbSpaceItem & init ); // \ru Сделать равным \en Make equal virtual bool IsSimilar( const MbSpaceItem & init ) const; // \ru Являются ли объекты подобными \en Whether the objects are similar - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move( const MbVector3D &to, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate( const MbAxis3D &axis, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate around an axis + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move( const MbVector3D &to, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate( const MbAxis3D &axis, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate around an axis virtual void Refresh(); // \ru Сбросить все временные данные \en Flush all the temporary data virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта \en Get properties of the object @@ -390,9 +390,9 @@ public: virtual bool IsLineV() const; // \ru Если true все производные по V выше первой равны нулю \en If true, then all the derivatives by V higher the first one are equal to zero // \ru Найти ближайшую проекцию точки на поверхность или ее продолжение по заданному начальному приближению. \en Find the neares projection of a point onto the surface. - virtual bool NearPointProjection ( const MbCartPoint3D & pnt, double & u, double & v, bool ext, MbRect2D * uvRange = NULL ) const; + virtual bool NearPointProjection ( const MbCartPoint3D & pnt, double & u, double & v, bool ext, MbRect2D * uvRange = c3d_null ) const; // \ru Найти все проекции точки на поверхность вдоль вектора в любом из двух направлений. \en Find all a point projection onto the surface along a vector in either of two directions. - virtual void DirectPointProjection( const MbCartPoint3D & pnt, const MbVector3D & vect, SArray & uv, bool ext, MbRect2D * uvRange = NULL ) const; + virtual void DirectPointProjection( const MbCartPoint3D & pnt, const MbVector3D & vect, SArray & uv, bool ext, MbRect2D * uvRange = c3d_null ) const; virtual MbCurve3D * CurveU( double v, MbRect1D * pRgn, bool bApprox = true ) const; // \ru Пространственная копия линии v = const. \en Spatial copy of 'v = const'-line. virtual MbCurve3D * CurveV( double u, MbRect1D * pRgn, bool bApprox = true ) const; // \ru Пространственная копия линии u = const. \en Spatial copy of 'u = const'-line. @@ -420,20 +420,20 @@ public: \en Get curve with 'ind' index from first family. \n \~ \param[in] ind - \ru Номер запрашиваемой кривой в массиве. \en Index of required curve in array. \~ - \return \ru Кривая или NULL, если значение ind выходит за диапазон возможных индексов массиве кривых. - \en Curve or NULL if value of 'ind' is out of range of possible indices of array of curves. \~ + \return \ru Кривая или c3d_null, если значение ind выходит за диапазон возможных индексов массиве кривых. + \en Curve or c3d_null if value of 'ind' is out of range of possible indices of array of curves. \~ */ - const MbCurve3D * GetUCurve( size_t ind ) const { return ( ind < uCurves.Count()) ? uCurves[ind] : NULL; } + const MbCurve3D * GetUCurve( size_t ind ) const { return ( ind < uCurves.Count()) ? uCurves[ind] : c3d_null; } /** \brief \ru Получить кривую с индексом ind из второго семейства. \en Get curve with 'ind' index from second family. \~ \details \ru Получить кривую с индексом ind из второго семейства. \n \en Get curve with 'ind' index from second family. \n \~ \param[in] ind - \ru Номер запрашиваемой кривой в массиве. \en Index of required curve in array. \~ - \return \ru Кривая или NULL, если значение ind выходит за диапазон возможных индексов массиве кривых. - \en Curve or NULL if value of 'ind' is out of range of possible indices of array of curves. \~ + \return \ru Кривая или c3d_null, если значение ind выходит за диапазон возможных индексов массиве кривых. + \en Curve or c3d_null if value of 'ind' is out of range of possible indices of array of curves. \~ */ - const MbCurve3D * GetVCurve( size_t ind ) const { return ( ind < vCurves.Count()) ? vCurves[ind] : NULL; } + const MbCurve3D * GetVCurve( size_t ind ) const { return ( ind < vCurves.Count()) ? vCurves[ind] : c3d_null; } /** \brief \ru Получить значение параметра, соответствующего кривой с индексом ind из первого семейства. \en Get value of parameter corresponding to curve with 'ind' index from first family. \~ \details \ru Получить значение параметра, соответствующего кривой с индексом ind из первого семейства.\n @@ -522,7 +522,7 @@ private: void PointOn( double & u, double & v, MbCartPoint3D & p, MbMeshSurfaceAuxiliaryData * ) const; // \ru Точка на поверхности \en Point on the surface // \ru Определить местные координаты области поверхности. \en Determine local coordinates of surface region. - void LocalCoordinate( double u, double v, double & ul, double & vl, size_t & i0,size_t & j0,size_t & i1, size_t & j1, MbMeshSurfaceAuxiliaryData * ucache = NULL ) const; + void LocalCoordinate( double u, double v, double & ul, double & vl, size_t & i0,size_t & j0,size_t & i1, size_t & j1, MbMeshSurfaceAuxiliaryData * ucache = c3d_null ) const; void LocalCoordinate_v2( double u, double v, double & ul, double & vl, size_t & i0, size_t & j0, size_t & i1, size_t & j1, size_t ord, MbMeshSurfaceAuxiliaryData * ucache ) const; // \ru Вычислить вспомогательные вектора производных вдоль U кривых патча. \en Calculate auxiliary vectors of derivatives along U curves of patch. void CalculateAlongU( const double & ul, const size_t & j0, const size_t & j1, MbMeshSurfaceAuxiliaryData * ucache ) const; @@ -675,7 +675,7 @@ private: void GeneratrixCurveExplore_v3( bool dirU, size_t ind, double t, MbCartPoint3D & p, MbVector3D & fir, MbVector3D & sec, MbVector3D & thir ) const; // \ru Инициализировать массивы расширения. \en Init expansion arrays. - void InitExtArrays( const bool (*adjPatch)[4] = NULL ); + void InitExtArrays( const bool (*adjPatch)[4] = c3d_null ); /** \} */ diff --git a/C3d/Include/surf_offset_surface.h b/C3d/Include/surf_offset_surface.h index b784f34..831f2de 100644 --- a/C3d/Include/surf_offset_surface.h +++ b/C3d/Include/surf_offset_surface.h @@ -44,7 +44,7 @@ class MATH_CLASS MbSurfaceContiguousData; // --- class MATH_CLASS MbOffsetSurface : public MbSurface { private: - MbSurface * basisSurface; ///< \ru Базовая поверхность (всегда не NULL). \en Base surface (always not NULL). + MbSurface * basisSurface; ///< \ru Базовая поверхность (всегда не c3d_null). \en Base surface (always not c3d_null). double u0min; ///< \ru Минимальный параметр u базовой поверхности. \en Minimal parameter u of the base surface. double u0max; ///< \ru Максимальный параметр u базовой поверхности. \en Maximal parameter u of the base surface. double v0min; ///< \ru Минимальный параметр v базовой поверхности. \en Minimal parameter v of the base surface. @@ -197,14 +197,14 @@ public: \en \name Common functions of a geometric object \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента. \en A type of element. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Является ли объект копией. \en Whether the object is a copy. virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным. \en Make equal. virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными. \en Determine whether the objects are similar. - virtual bool IsPlanar() const; // \ru Является ли поверхность плоской. \en Whether the surface is planar. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг. \en Move. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual bool IsPlanar( double accuracy = METRIC_EPSILON ) const; // \ru Является ли поверхность плоской. \en Whether the surface is planar. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг. \en Move. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual void Refresh(); // \ru Сбросить все временные данные \en Flush all the temporary data virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта. \en Get properties of the object. @@ -303,7 +303,7 @@ public: virtual double CurvatureU ( double u, double v ) const; // \ru Kривизна линии u. \en Curvature of u-line. virtual double CurvatureV ( double u, double v ) const; // \ru Kривизна линии v. \en Curvature of v-line. // \ru Ближайшая проекция точки на поверхность. \en The nearest point projection onto the surface. - virtual bool NearPointProjection( const MbCartPoint3D & p, double & u, double & v, bool ext, MbRect2D * uvRange = NULL ) const; + virtual bool NearPointProjection( const MbCartPoint3D & p, double & u, double & v, bool ext, MbRect2D * uvRange = c3d_null ) const; // \ru Изменение носителя. \en Changing of carrier. virtual void ChangeCarrier( const MbSpaceItem & item, MbSpaceItem & init ); // \ru Изменение носимых элементов. \en Change a carrier elements. @@ -338,7 +338,7 @@ public: virtual bool IsLineV () const; // \ru Если true все производные по V выше первой равны нулю. \en If true, then all the derivatives by V higher the first one are equal to zero. // \ru Найти все проекции точки на поверхность вдоль вектора в любом из двух направлений. \en Find all a point projection onto the surface along a vector in either of two directions. - virtual void DirectPointProjection( const MbCartPoint3D & pnt, const MbVector3D & vect, SArray & uv, bool ext, MbRect2D * uvRange = NULL ) const; + virtual void DirectPointProjection( const MbCartPoint3D & pnt, const MbVector3D & vect, SArray & uv, bool ext, MbRect2D * uvRange = c3d_null ) const; /** \brief \ru Проверить параметры. Аналог глобальной функции _CheckParams, оптимизированный под использование кэшей. \en Check parameters. Analogue of the global function _CheckParams, optimized for caches usage. \~ diff --git a/C3d/Include/surf_plane.h b/C3d/Include/surf_plane.h index e8642bb..a9a6973 100644 --- a/C3d/Include/surf_plane.h +++ b/C3d/Include/surf_plane.h @@ -209,8 +209,8 @@ public: \en \name Common functions of a geometric object \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента. \en A type of element. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const ; // \ru Сделать копию элемента. \en Create a copy of the element. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const ; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Равны ли объекты. \en Whether the objects are equal. virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равными. \en Make equal. @@ -304,7 +304,7 @@ public: virtual double CurvatureU ( double u, double v ) const; // \ru Кривизна линии u. \en Curvature of the line u. virtual double CurvatureV ( double u, double v ) const; // \ru Кривизна линии v. \en Curvature of the line v. - virtual bool IsPlanar() const; // \ru Является ли поверхность плоской \en Whether a surface is planar. + virtual bool IsPlanar( double accuracy = METRIC_EPSILON ) const; // \ru Является ли поверхность плоской \en Whether a surface is planar. virtual MbSplineSurface * NurbsSurface( double u1, double u2, double v1, double v2, bool bmatch = false ) const; // \ru NURBS копия поверхности \en NURBS copy of surface. virtual MbSurface * NurbsSurface( const MbNurbsParameters & uParam, const MbNurbsParameters & vParam ) const; @@ -322,10 +322,10 @@ public: virtual MbeItemLocation PointRelative ( const MbCartPoint3D & pnt, double eps = ANGLE_REGION ) const; virtual double DistanceToPoint( const MbCartPoint3D & ) const; // \ru Вычислить расстояние до точки. \en Calculate the distance to a point. // \ru Найти все проекции точки на поверхность вдоль вектора в любом из двух направлений. \en Find all a point projection onto the surface along a vector in either of two directions. - virtual void DirectPointProjection( const MbCartPoint3D & p, const MbVector3D & v, SArray & uv, bool ext, MbRect2D * uvRange = NULL ) const; + virtual void DirectPointProjection( const MbCartPoint3D & p, const MbVector3D & v, SArray & uv, bool ext, MbRect2D * uvRange = c3d_null ) const; // \ru Ближайшая проекция точки на поверхность в направлении вектора. \en The nearest projection of a point to the surface in direction of the vector. virtual bool NearDirectPointProjection( const MbCartPoint3D & p, const MbVector3D & vector, - double & u, double & v, bool ext, MbRect2D * uvRange = NULL, bool onlyPositiveDirection = false ) const; + double & u, double & v, bool ext, MbRect2D * uvRange = c3d_null, bool onlyPositiveDirection = false ) const; // \ru Пересечения с кривой. \en Intersection with a curve. virtual MbeNewtonResult CurveIntersectNewton( const MbCurve3D &, double funcEpsilon, size_t limit, double & u, double & v, double & t, bool ext0, bool ext ) const; // \ru Нахождениe точки пересечения c кривой. \en Search of a point of intersection with curve. @@ -371,7 +371,7 @@ public: /** \ru \name Функции элементарных поверхностей \en \name Functions of elementary surfaces. \{ */ - virtual bool GetPointProjection( const MbCartPoint3D & p, bool init, double & u, double & v, bool ext, MbRect2D * uvRange = NULL ) const; + virtual bool GetPointProjection( const MbCartPoint3D & p, bool init, double & u, double & v, bool ext, MbRect2D * uvRange = c3d_null ) const; /** \} */ /** \ru \name Функции плоскости \en \name Functions of plane. @@ -418,7 +418,7 @@ public: /// \ru Матрица для преобразования симметрии относительно плоскости. \en The matrix of symmetry transformation relative to the plane void Symmetry ( MbMatrix3D & m ) const { position.Symmetry(m); } /// \ru Инвертировать нормаль плоскости. \en Invert the normal of plane. - void Invert( MbMatrix * = NULL, MbRegTransform * ireg = NULL ); + void Invert( MbMatrix * = c3d_null, MbRegTransform * ireg = c3d_null ); /// \ru Сделать систему координат правой. \en Make the coordinate system right. void SetRightPlacement() { position.SetRight(); SetDirtyGabarit(); } diff --git a/C3d/Include/surf_polysurface.h b/C3d/Include/surf_polysurface.h index 01da7de..59bc181 100644 --- a/C3d/Include/surf_polysurface.h +++ b/C3d/Include/surf_polysurface.h @@ -84,12 +84,12 @@ public: \{ */ virtual MbeSpaceType IsA() const = 0; // \ru Тип элемента \en Type of element virtual MbeSpaceType Type() const; // \ru Тип элемента \en Type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const = 0; // \ru Cделать копию элемента \en Make a copy of an element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const = 0; // \ru Cделать копию элемента \en Make a copy of an element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const = 0; // \ru Являются ли объекты равными \en Determine whether objects are equal virtual bool SetEqual ( const MbSpaceItem & ) = 0; // \ru Сделать равным \en Make equal - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг \en Translation - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси \en Rotate about an axis + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице \en Transform element according to the matrix + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг \en Translation + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси \en Rotate about an axis virtual void GetProperties( MbProperties & ) = 0; // \ru Выдать свойства объекта \en Get properties of the object virtual void SetProperties( const MbProperties & ) = 0; // \ru Записать свойства объекта \en Set properties of the object diff --git a/C3d/Include/surf_revolution_surface.h b/C3d/Include/surf_revolution_surface.h index e43466d..8b5b3d5 100644 --- a/C3d/Include/surf_revolution_surface.h +++ b/C3d/Include/surf_revolution_surface.h @@ -137,13 +137,13 @@ public: \en \name Common functions of a geometric object \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента. \en A type of element. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Равны ли объекты. \en Whether the objects are equal. virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным. \en Make equal. virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными. \en Determine whether the objects are similar. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг. \en Translation. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг. \en Translation. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта. \en Set properties of the object. @@ -241,9 +241,9 @@ public: virtual MbCurve3D * CurveV( double u, MbRect1D * pRgn, bool bApprox = true ) const; // \ru Пространственная копия линии u = const \en A spatial copy of the line u = const. // \ru Ближайшая проекция точки на поверхность. \en The nearest point projection on the surface. - virtual bool NearPointProjection( const MbCartPoint3D & p, double & u, double & v, bool ext, MbRect2D * uvRange = NULL ) const; // \ru Ближайшая проекция точки на поверхность. \en The nearest point projection on the surface. + virtual bool NearPointProjection( const MbCartPoint3D & p, double & u, double & v, bool ext, MbRect2D * uvRange = c3d_null ) const; // \ru Ближайшая проекция точки на поверхность. \en The nearest point projection on the surface. // \ru Найти все проекции точки на поверхность вдоль вектора в любом из двух направлений. \en Find all a point projection onto the surface along a vector in either of two directions. - virtual void DirectPointProjection( const MbCartPoint3D & p, const MbVector3D & vect, SArray & uv, bool ext, MbRect2D * uvRange = NULL ) const; + virtual void DirectPointProjection( const MbCartPoint3D & p, const MbVector3D & vect, SArray & uv, bool ext, MbRect2D * uvRange = c3d_null ) const; // \ru Подобные ли поверхности для объединения (слива). \en Whether the surfaces are similar to merge. virtual bool IsSimilarToSurface( const MbSurface & surf, VERSION version, double precision = METRIC_PRECISION ) const; diff --git a/C3d/Include/surf_ruled_surface.h b/C3d/Include/surf_ruled_surface.h index 1548bda..510a95c 100644 --- a/C3d/Include/surf_ruled_surface.h +++ b/C3d/Include/surf_ruled_surface.h @@ -115,13 +115,13 @@ public: \en \name Common functions of a geometric object \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента. \en A type of element. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Равны ли объекты. \en Whether the objects are equal. virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным. \en Make equal. virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными. \en Determine whether the objects are similar. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг. \en Move. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг. \en Move. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual void GetProperties( MbProperties &properties ); // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties &properties ); // \ru Записать свойства объекта. \en Set properties of the object. @@ -205,7 +205,7 @@ public: \{ */ virtual double CurvatureU ( double u, double v ) const; // \ru Kривизна линии по u. \en Curvature of line by u. virtual double CurvatureV ( double u, double v ) const; // \ru Kривизна линии v. \en Curvature of v-line. - virtual bool IsPlanar() const; // \ru Является ли поверхность плоской. \en Whether the surface is planar. + virtual bool IsPlanar( double accuracy = METRIC_EPSILON ) const; // \ru Является ли поверхность плоской. \en Whether the surface is planar. virtual size_t GetUMeshCount() const; // \ru Выдать количество полигонов по u. \en Get the count of polygons by u. virtual size_t GetVMeshCount() const; // \ru Выдать количество полигонов по v. \en Get the count of polygons by v. @@ -213,7 +213,7 @@ public: virtual void ChangeCarrier( const MbSpaceItem & item, MbSpaceItem & init ); // \ru Изменение носителя. \en Changing of carrier. // \ru Ближайшая проекция точки на поверхность. \en The nearest point projection onto the surface. - virtual bool NearPointProjection( const MbCartPoint3D & p, double & u, double & v, bool ext, MbRect2D * uvRange = NULL ) const; + virtual bool NearPointProjection( const MbCartPoint3D & p, double & u, double & v, bool ext, MbRect2D * uvRange = c3d_null ) const; // \ru Пересечение с кривой. \en Intersection with curve. virtual void CurveIntersection( const MbCurve3D & curv, SArray & uv, SArray & tt, diff --git a/C3d/Include/surf_section_surface.h b/C3d/Include/surf_section_surface.h index 2aa4992..c387d4b 100644 --- a/C3d/Include/surf_section_surface.h +++ b/C3d/Include/surf_section_surface.h @@ -1,8 +1,8 @@ //////////////////////////////////////////////////////////////////////////////// /** \file - \brief \ru Поверхность заметания переменного сечения. - \en The swept mutable section surface. \~ + \brief \ru Поверхность переменного сечения. + \en The mutable section surface. \~ */ //////////////////////////////////////////////////////////////////////////////// @@ -22,25 +22,25 @@ #include -#define _RO_MIN_ 0.05 // \ru Минимальный параметр переменного сечения. \en The minimum parameter of the swept section. +#define _RO_MIN_ 0.001 // \ru Минимальный параметр переменного сечения. \en The minimum parameter of the mutable section. #define _CIRCLE_ 0.4142135623730950488016887242097 // \ru Параметр дуги окружности в сечении. \en The parameter is corresponding to the circle. #define _PARABOLA_ 0.5 // \ru Параметр параболы в сечении. \en The parameter is corresponding to the parabola. -#define _RO_MAX_ 0.95 // \ru Максимальный параметр переменного сечения. \en The maximum parameter of the swept section. +#define _RO_MAX_ 0.999 // \ru Максимальный параметр переменного сечения. \en The maximum parameter of the mutable section. class MATH_CLASS MbSurfaceWorkingData; //------------------------------------------------------------------------------ -/** \brief \ru Поверхность заметания переменного сечения. - \en The swept mutable section surface. \~ +/** \brief \ru Поверхность переменного сечения. + \en The mutable section surface. \~ \details \ru Поверхность переменного (конического) сечения образуется путем движения плоской кривой, являющейся коническим сечением, вдоль опорной кривой. В процессе движения форма плоской кривой меняется в соответствии с дискриминантом конического сечения. Начало плоской кривой располагается на начальной направляющей кривой, а конец - на конечной направляющей кривой. Плоскость переменного сечения сохраняет ортогональность опорной кривой в процессе движения. Первый параметр поверхности совпадает с параметром опорной кривой. Второй параметр поверхности совпадает с параметром плоской кривой. - \en The swept (conic) section surface is formed by moving the flat conic section curve along the reference curve. + \en The mutable section surface is formed by moving the flat conic section curve along the reference curve. In the process of movement, the shape of the flat curve changes in accordance with the discriminant of the conic section. The beginning of the flat curve is located on the first guide curve and the end is located on the second guide curve. The plane of the conic section preserves the orthogonality to the reference curve during movement. @@ -51,15 +51,13 @@ class MATH_CLASS MbSurfaceWorkingData; // --- class MATH_CLASS MbSectionSurface : public MbSurface { -public: - protected: MbSpine * spine; ///< \ru Опорная кривая. \en The reference curve. - MbCurve3D * guide1; ///< \ru Первая направляющая кривая на первой поверхности (может быть NULL). \en The first guide curve on the first surface (may be NULL). - MbCurve3D * guide2; ///< \ru Вторая направляющая кривая на второй поверхности (может быть NULL). \en The second guide curve on the second surface (may be NULL). - std::vector curves; ///< \ru Дополнительные направляющие кривые (могут отсутствовать). \en The additional guide curves (may be empty). - MbFunction * function; ///< \ru Функция управления сечением (радиус или дискриминант, может быть NULL)). \en Section control function (radius or discriminant, may be NULL). - MbPolyCurve * pattern; ///< \ru Образующая кривая при form==cs_Shape (для других форм NULL). \en Forming curve for form==cs_Shape (NULL on other case). + MbCurve3D * guide1; ///< \ru Первая направляющая кривая (может быть c3d_null). \en The first guide curve (may be c3d_null). + MbCurve3D * guide2; ///< \ru Вторая направляющая кривая (может быть c3d_null). \en The second guide curve (may be c3d_null). + std::vector curves; ///< \ru Дополнительные контрольные кривые (могут отсутствовать). \en The additional control curves (may be empty). + MbFunction * function; ///< \ru Функция управления сечением (радиус или дискриминант, может быть c3d_null)). \en Section control function (radius or discriminant, may be c3d_null). + MbPolyCurve * pattern; ///< \ru Образующая кривая при form==cs_Shape (для других форм c3d_null). \en Forming curve for form==cs_Shape (c3d_null on other case). std::vector shape; ///< \ru Описание сечения при form==cs_Shape (пуст в других случаях). \en Description of shape cross-section for form==cs_Shape (is empty on other case). std::vector knots; ///< \ru Узловой вектор сплайна. \en Knot vector of the spline. size_t order; ///< \ru Порядок сплайна (степень + 1). \en Order of spline (degree + 1). @@ -115,9 +113,9 @@ protected: protected: /** \brief \ru Конструктор поверхности переменного сечения. - \en Swept mutable section surface constructor. \~ + \en The mutable section surface constructor. \~ \details \ru Конструктор поверхности переменного сечения по опорной кривой и двум направляющим. - \en Swept section surface constructor by reference curve and guide curves. \~ + \en The mutable section surface constructor by reference curve and guide curves. \~ \param[in] sp - \ru Опорная кривая. \en The reference curve (spine). \~ \param[in] c1 - \ru Первая направляющая кривая. @@ -145,9 +143,9 @@ protected: MbPolyCurve * patt, std::vector & sh ); /** \brief \ru Конструктор поверхности переменного сечения. - \en Swept mutable section surface constructor. \~ + \en The mutable section surface constructor. \~ \details \ru Конструктор поверхности переменного сечения по осевой кривой и закону изменения радиуса вращения. - \en Swept mutable section surface constructor with axis curve and radius law. \~ + \en The mutable section surface constructor with axis curve and radius law. \~ \param[in] sp - \ru Опорная кривая. \en The reference curve (spine). \~ \param[in] c0 - \ru Осевая кривая. @@ -162,8 +160,6 @@ protected: \en Section radius function. \~ */ MbSectionSurface( MbSpine & sp, MbCurve3D & c0, MbeSectionShape f, double uBeg, double uEnd, MbFunction & func ); - -protected: // \ru Конструктор-копия. \en Copy constructor. MbSectionSurface( const MbSectionSurface &, MbRegDuplicate * ); private: @@ -175,18 +171,18 @@ public: public: VISITING_CLASS( MbSectionSurface ); - /** \brief \ru Создание поверхности заметания переменного сечения. - \en Swept mutable section surface creation. \~ - \details \ru Создание поверхности заметания переменного сечения по опорной кривой и двум направляющим. - \en Swept section surface creation by reference curve and guide curves. \~ + /** \brief \ru Создание поверхности переменного сечения. + \en The mutable section surface creation. \~ + \details \ru Создание поверхности переменного сечения по опорной кривой и двум направляющим. + \en The mutable section surface creation by reference curve and guide curves. \~ \param[in] rc - \ru Опорная кривая. \en The reference curve (spine). \~ \param[in] g1 - \ru Первая направляющая кривая. \en The first guide curve. \~ \param[in] g2 - \ru Вторая направляющая кривая (g1==g2 совпадает с первой при cs_Round). \en The second guide curve (g1==g2 the same first guide for st_Round). \~ - \param[in] c0 - \ru Дополнительная направляющая кривая (может быть NULL). - \en The additional guide curve (may be NULL). \~ + \param[in] c0 - \ru Дополнительная направляющая кривая (может быть c3d_null). + \en The additional guide curve (may be c3d_null). \~ \param[in] f - \ru Форма сечения поверхности. \en The form of the surface section. \~ \param[in] sense - \ru Направление нормали поверхности направляющей кривой (для guide1==guide2). @@ -228,13 +224,13 @@ public: \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента \en A type of element - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Равны ли объекты. \en Whether the objects are equal. virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным. \en Make equal. virtual bool IsSimilar ( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными. \en Determine whether the objects are similar. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг. \en Move. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг. \en Move. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта. \en Set properties of the object. @@ -321,7 +317,7 @@ public: \{ */ virtual double CurvatureU ( double u, double v ) const; // \ru Kривизна линии по u. \en Curvature of line by u. - virtual bool IsPlanar() const; // \ru Является ли поверхность плоской. \en Whether the surface is planar. + virtual bool IsPlanar( double accuracy = METRIC_EPSILON ) const; // \ru Является ли поверхность плоской. \en Whether the surface is planar. virtual void ChangeCarrier( const MbSpaceItem & item, MbSpaceItem & init ); // \ru Изменение носителя. \en Changing of carrier. @@ -359,39 +355,43 @@ public: virtual size_t GetVMeshCount() const; // \ru Выдать количество полигонов по v. \en Get the count of polygons by v. /** \} */ - /** \ru \name Функции поверхности заметания переменного сечения. - \en \name Functions of the swept mutable section surface. + /** \ru \name Функции поверхности переменного сечения. + \en \name Functions of the mutable section surface. \{ */ - /// \ru Направляющая. \en Guide curve. + /// \ru Дать опорный спайн. \en Get reference spine. const MbSpine & GetSpine() const { return *spine; } - /// \ru Направляющая кривая. \en The spine (reference) curve. + /// \ru Дать опорную кривую. \en Get reference curve. const MbCurve3D & GetSpineCurve() const { return spine->GetCurve(); } - /// \ru Первая направляющая кривая на первой поверхности (может быть NULL). \en The first guide curve on the first surface (may be NULL). + /// \ru Дать первую направляющую кривую (может быть c3d_null). \en Get first guide curve (may be c3d_null). const MbCurve3D * GetGuide1() const { return guide1; } - /// \ru Вторая направляющая кривая на второй поверхности (может быть NULL). \en The second guide curve on the second surface (may be NULL). + /// \ru Дать вторую направляющую кривую (может быть c3d_null). \en Get second guide curve (may be c3d_null). const MbCurve3D * GetGuide2() const { return guide2; } - /// \ru Дополнительные направляющие кривые (могут отсутствовать). \en The additional guide curves (may be empty). - const MbCurve3D * GetCurve( size_t i ) const { return ( i < curves.size() ) ? curves[i] : NULL; } - /// \ru Функция управления сечением (радиус или дискриминант, может быть NULL)). \en Section control function (radius or discriminant, may be NULL). + /// \ru Дать кривую вершин (может отсутствовать). \en Get apex curve (may be c3d_null). + const MbCurve3D * GetApexCurve() const { return ( curves.size() > 0 ) ? curves[0] : c3d_null; } + /// \ru Дать дополнительную направляющую кривую (может отсутствовать). \en Get additional guide curve (may be absence). + const MbCurve3D * GetCurve( size_t i ) const { return ( i < curves.size() ) ? curves[i] : c3d_null; } + /// \ru Дать функцию управления сечением (радиус или дискриминант, может быть c3d_null)). \en Get section control function (radius or discriminant, may be c3d_null). const MbFunction * GetFunction() const { return function; } - /// \ru Образующая кривая при form==cs_Shape (для других форм NULL). \en Forming curve for form==cs_Shape (NULL on other case). + /// \ru Дать образующую кривую при form==cs_Shape (для других форм c3d_null). \en Get forming curve for form==cs_Shape (c3d_null on other case). const MbPolyCurve * GetPattern() const { return pattern; } - /// \ru Вычисление параметров направляющих кривых по второму параметру поверхности. \en Calculating the parameters of guide curves by the second surface parameter. - bool GuideParams( double v, double & t1, double & t2 ) const; - /// \ru Вычисление параметра вершинной кривой по второму параметру поверхности. \en Calculating the parameter of apex curve by the second surface parameter. - bool ApexParam( double v, double & t0 ) const; - /// \ru Вычисление точки поверхности по параметру направляющей кривой. \en Calculating the surface point by the parameter of first the guide curves. - bool ParamByGuide1( double t1, MbCartPoint & p ) const; - /// \ru Вычисление точки поверхности по параметру направляющей кривой. \en Calculating the surface point by the parameter of the second guide curves. - bool ParamByGuide2( double t2, MbCartPoint & p ) const; - /// \ru Вычисление второго параметра поверхности по параметру вершинной кривой. \en Calculating the second surface parameter by the parameter of the apex curve. - bool ParamByApex( double t0, double & v ) const; - /// \ru Вычисление точек поверхности по параметрам первой направляющей кривой. \en Calculating surface points by the first guide curve. - bool PointsByGuide1( std::vector & points ) const; - /// \ru Вычисление точек поверхности по параметрам второй направляющей кривой. \en Calculating surface points by the second guide curve. - bool PointsByGuide2( std::vector & points ) const; + /// \ru Вычисление параметров направляющих кривых по второму параметру поверхности. \en Calculating the parameters of guide curves by the second surface parameter. + bool GuideParams( double v, double & t1, double & t2 ) const; + /// \ru Вычисление параметра вершинной кривой по второму параметру поверхности. \en Calculating the parameter of apex curve by the second surface parameter. + bool ApexParam( double v, double & t0 ) const; + /// \ru Вычисление точки поверхности по параметру направляющей кривой. \en Calculating the surface point by the parameter of first the guide curves. + bool ParamByGuide1( double t1, MbCartPoint & p ) const; + /// \ru Вычисление точки поверхности по параметру направляющей кривой. \en Calculating the surface point by the parameter of the second guide curves. + bool ParamByGuide2( double t2, MbCartPoint & p ) const; + /// \ru Вычисление второго параметра поверхности по параметру вершинной кривой. \en Calculating the second surface parameter by the parameter of the apex curve. + bool ParamByApex( double t0, double & v ) const; + /// \ru Вычисление точек поверхности по параметрам первой направляющей кривой. \en Calculating surface points by the first guide curve. + bool PointsByGuide1( std::vector & points ) const; + /// \ru Вычисление точек поверхности по параметрам второй направляющей кривой. \en Calculating surface points by the second guide curve. + bool PointsByGuide2( std::vector & points ) const; + /// \ru Вычисление точек пересечения направляющих кривых и кривой вершин с плоскостью сечения, заданной вторым параметром поверхности. \en Calculating the intersection points of guide curves and apex curve with the section plane specified by the second surface parameter. + bool PhantomPoints( double v, MbCartPoint3D & guideP1, MbCartPoint3D & guideP2, MbCartPoint3D & apex, double & discrim ) const; /** \} */ @@ -449,16 +449,16 @@ protected : void DeriveUUV( double & u, double & v, bool ext, MbVector3D & ) const; // \ru Третья производная по uuv. \en The third derivative with respect to uuv. void DeriveUVV( double & u, double & v, bool ext, MbVector3D & ) const; // \ru Третья производная по uvv. \en The third derivative with respect to uvv. void DeriveVVV( double & u, double & v, bool ext, MbVector3D & ) const; // \ru Третья производная по vvv. \en The third derivative with respect to vvv. - // \ru Вычисление точек для создания NURBS копии кривых поверхности. \en Points calculation for NURBS copy surface. - bool CollectNurbsPoints( double vin, double vax, size_t pCount, double angle, - SArray & params, - SArray & points1, - SArray & points2, - SArray & points_0, - SArray & points_1, - SArray & points_2, - SArray & points_3, - SArray & points_4 ) const; + // \ru Вычисление точек для создания NURBS копии кривых поверхности. \en Points calculation for NURBS copy surface. + bool CollectNurbsPoints( double vin, double vax, size_t pCount, double angle, + SArray & params, + SArray & points1, + SArray & points2, + SArray & points_0, + SArray & points_1, + SArray & points_2, + SArray & points_3, + SArray & points_4 ) const; private: void operator = ( const MbSectionSurface & ); // \ru Не реализовано. \en Not implemented. diff --git a/C3d/Include/surf_sector_surface.h b/C3d/Include/surf_sector_surface.h index a560b7a..c8902ac 100644 --- a/C3d/Include/surf_sector_surface.h +++ b/C3d/Include/surf_sector_surface.h @@ -66,13 +66,13 @@ public: \en \name Common functions of a geometric object \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента. \en A type of element. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Cделать копию элемента. \en Make a copy of an element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Cделать копию элемента. \en Make a copy of an element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Являются ли объекты равными. \en Determine whether objects are equal. virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным. \en Make equal. virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными. \en Determine whether the objects are similar. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать. \en Transform. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг. \en Translation. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать. \en Transform. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг. \en Translation. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта. \en Set properties of the object. @@ -147,7 +147,7 @@ public: \en \name Common functions of surface. \{ */ virtual double CurvatureV ( double u, double v ) const; // \ru Kривизна линии v. \en Curvature of v line. - virtual bool IsPlanar() const; // \ru Является ли поверхность плоской. \en Whether a surface is planar. + virtual bool IsPlanar( double accuracy = METRIC_EPSILON ) const; // \ru Является ли поверхность плоской. \en Whether a surface is planar. virtual void ChangeCarrier( const MbSpaceItem & item, MbSpaceItem & init ); // \ru Изменение носителя. \en Changing of carrier. virtual MbSplineSurface * NurbsSurface( double, double, double, double, bool bmatch = false ) const; // \ru NURBS копия поверхности. \en NURBS copy of surface. diff --git a/C3d/Include/surf_smooth_surface.h b/C3d/Include/surf_smooth_surface.h index 0fce759..d27a783 100644 --- a/C3d/Include/surf_smooth_surface.h +++ b/C3d/Include/surf_smooth_surface.h @@ -37,8 +37,8 @@ class MATH_CLASS MbSurfaceIntersectionCurve; // --- class MATH_CLASS MbSmoothSurface : public MbSurface { protected: - MbSurfaceCurve * curve1; ///< \ru Опорная кривая на первой поверхности (всегда не NULL). \en Support curve on the first surface (it never equals NULL). - MbSurfaceCurve * curve2; ///< \ru Опорная кривая на второй поверхности (всегда не NULL). \en Support curve on the second surface (it never equals NULL). + MbSurfaceCurve * curve1; ///< \ru Опорная кривая на первой поверхности (всегда не c3d_null). \en Support curve on the first surface (it never equals c3d_null). + MbSurfaceCurve * curve2; ///< \ru Опорная кривая на второй поверхности (всегда не c3d_null). \en Support curve on the second surface (it never equals c3d_null). MbeSmoothForm form; ///< \ru Тип сопряжения. \en Conjugation type. double distance1; ///< \ru Радиус скругления или "катет" фаски со знаком для поверхности кривой curve1. \en Fillet radius or chamfer "cathetus" with sign for surface of curve1 curve. double distance2; ///< \ru Радиус скругления или "катет" фаски со знаком для поверхности кривой curve2. \en Fillet radius or chamfer "cathetus" with sign for surface of curve2 curve. @@ -116,12 +116,12 @@ public: \{ */ virtual MbeSpaceType IsA() const = 0; // \ru Тип элемента. \en A type of element. virtual MbeSpaceType Type() const; // \ru Тип элемента. \en A type of element. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const = 0; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const = 0; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const = 0; virtual bool SetEqual ( const MbSpaceItem & ) = 0; // \ru Сделать равным. \en Make equal. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ) = 0; // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ) = 0; // \ru Сдвиг. \en Translation. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ) = 0; // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ) = 0; // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ) = 0; // \ru Сдвиг. \en Translation. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ) = 0; // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual void GetProperties( MbProperties &properties ) = 0; // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties &properties ) = 0; // \ru Записать свойства объекта. \en Set properties of the object. @@ -215,8 +215,8 @@ public: \en Add to end (true) or add to start (false) \~ \param[in] matr - \ru Матрица преобразования объектов с init в данную поверхность, \en A matrix of transformation of objects from 'init' to the given surface, \~ - \param[in] seam - \ru Кривая другого разделяющего ребра (может быть NULL) - \en A curve of another splitting edge (possibly it is NULL) \~ + \param[in] seam - \ru Кривая другого разделяющего ребра (может быть c3d_null) + \en A curve of another splitting edge (possibly it is c3d_null) \~ */ virtual bool SurfacesCombine( const MbSurfaceIntersectionCurve & edge, const MbSurface & init, bool add, MbMatrix & matr, diff --git a/C3d/Include/surf_sphere_surface.h b/C3d/Include/surf_sphere_surface.h index 9151acb..cfef8af 100644 --- a/C3d/Include/surf_sphere_surface.h +++ b/C3d/Include/surf_sphere_surface.h @@ -109,10 +109,10 @@ public: \en \name Common functions of a geometric object \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента. \en A type of element. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const ; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const ; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Равны ли объекты. \en Whether the objects are equal. virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным. \en Make equal. - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта. \en Set properties of the object. @@ -217,7 +217,7 @@ public: virtual MbCurve3D * CurveU( double v, MbRect1D * pRgn, bool bApprox = true ) const; // \ru Пространственная копия линии v = const. \en A spatial copy of the line v = const. virtual MbCurve3D * CurveV( double u, MbRect1D * pRgn, bool bApprox = true ) const; // \ru Пространственная копия линии u = const. \en A spatial copy of the line u = const. // \ru Найти все проекции точки на поверхность вдоль вектора в любом из двух направлений. \en Find all a point projection onto the surface along a vector in either of two directions. - virtual void DirectPointProjection( const MbCartPoint3D & p, const MbVector3D & vect, SArray & uv, bool ext, MbRect2D * uvRange = NULL ) const; + virtual void DirectPointProjection( const MbCartPoint3D & p, const MbVector3D & vect, SArray & uv, bool ext, MbRect2D * uvRange = c3d_null ) const; // \ru Пересечение с кривой. \en Intersection with a curve. virtual void CurveIntersection( const MbCurve3D & curv, SArray & uv, SArray & tt, bool ext0, bool ext, bool touchInclude = false ) const; @@ -269,7 +269,7 @@ public: /** \ru \name Функции элементарных поверхностей \en \name Functions of elementary surfaces. \{ */ - virtual bool GetPointProjection( const MbCartPoint3D & p, bool init, double & u, double & v, bool ext, MbRect2D * uvRange = NULL ) const; + virtual bool GetPointProjection( const MbCartPoint3D & p, bool init, double & u, double & v, bool ext, MbRect2D * uvRange = c3d_null ) const; /** \} */ /** \ru \name Функции конической поверхности \en \name Functions of conical surface diff --git a/C3d/Include/surf_spine.h b/C3d/Include/surf_spine.h index 75dadc3..1f08158 100644 --- a/C3d/Include/surf_spine.h +++ b/C3d/Include/surf_spine.h @@ -55,11 +55,11 @@ public: }; private: - SPtr curve; ///< \ru Направляющая кривая - всегда не NULL. \en Spine curve - it is always not NULL. + SPtr curve; ///< \ru Направляющая кривая - всегда не c3d_null. \en Spine curve - it is always not c3d_null. MbVector3D direction; ///< \ru Вектор ориентации матрицы преобразования. \en Vector of transformation matrix orientation. - SPtr optionalCurve; ///< \ru Кривая вектора ориентации матрицы преобразования (может быть NULL для простой траектории). \en A curve of the transformation matrix orientation (it may be NULL for a simple trajectory). - SPtr spineSurface; ///< \ru Поверхность направляющей кривой, если "curve" - кривая на поверхности, или NULL. \en The surface of the "curve", if it is curve on surface, or NULL. - SPtr featureCurve; ///< \ru Двумерная кривая, если "curve" - кривая на поверхности, или NULL. \en Two-dimensional curve of the "curve", if it is curve on surface, or NULL. + SPtr optionalCurve; ///< \ru Кривая вектора ориентации матрицы преобразования (может быть c3d_null для простой траектории). \en A curve of the transformation matrix orientation (it may be c3d_null for a simple trajectory). + SPtr spineSurface; ///< \ru Поверхность направляющей кривой, если "curve" - кривая на поверхности, или c3d_null. \en The surface of the "curve", if it is curve on surface, or c3d_null. + SPtr featureCurve; ///< \ru Двумерная кривая, если "curve" - кривая на поверхности, или c3d_null. \en Two-dimensional curve of the "curve", if it is curve on surface, or c3d_null. LocalAxes localAxes; ///< \ru Способы ориентации локальной системы координат вдоль направляющей кривой "curve". \en Methods of orientation of the local coordinate system along the guide curve "curve". double crossSize; ///< \ru Поперечный масштаб при построении optionalCurve. \en Transverse scale in construction of "optionalCurve". double ortParam; ///< \ru Параметр кривой, для которой рассчитаны ort0, ort1, ort2. \en Parameter of a curve with evaluated ort0, ort1 and ort2. @@ -253,7 +253,7 @@ public: /// \ru Тип элемента. \en A type of element. MbeSpaceType IsA() const { return curve->IsA(); } /// \ru Сделать копию элемента. \en Create a copy of the element. - MbSpine & Duplicate( MbRegDuplicate * = NULL ) const; + MbSpine & Duplicate( MbRegDuplicate * = c3d_null ) const; /// \ru Сделать равным. \en Make equal. bool SetEqual( const MbSpine & ); /// \ru Являются ли объекты подобными. \en Determine whether the objects are similar. @@ -261,13 +261,13 @@ public: /// \ru Равны ли объекты. \en Whether the objects are equal. bool IsSame ( const MbSpine & other, double accuracy = LENGTH_EPSILON ) const; /// \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); + void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); /// \ru Сдвиг. \en Translation. - void Move ( const MbVector3D &, MbRegTransform * = NULL ); + void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); /// \ru Повернуть вокруг оси. \en Rotate around an axis. - void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); + void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); /// \ru Изменить направление. \en Change the direction. - void Inverse( MbRegTransform * iReg = NULL ); + void Inverse( MbRegTransform * iReg = c3d_null ); /// \ru Сбросить временные данные объекта. \en Reset temporary data of an object. void Reset(); /** \} */ @@ -525,8 +525,8 @@ MATH_FUNC (void) MakeSpines( const MbSpine & sp, SArray & items ); Для внутреннего использования. \en Delete unused spines.\n For internal use only. \~ - \param[in,out] items - \ru Массив направляющих. - \en An array of spines. \~ + \param[in,out] spineDataItems - \ru Массив направляющих. + \en An array of spines. \~ */ // --- template void DeleteNonUsedSpines( SpineDataVector & spineDataItems ) diff --git a/C3d/Include/surf_spiral_surface.h b/C3d/Include/surf_spiral_surface.h index 762bc71..7c849f0 100644 --- a/C3d/Include/surf_spiral_surface.h +++ b/C3d/Include/surf_spiral_surface.h @@ -105,13 +105,13 @@ public: \en \name Common functions of a geometric object \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента. \en A type of element. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Равны ли объекты. \en Whether the objects are equal. virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать равным. \en Make equal. virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными. \en Determine whether the objects are similar. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвиг. \en Translation. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвиг. \en Translation. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта. \en Set properties of the object. @@ -179,7 +179,7 @@ public: \en \name Common functions of surface. \{ */ virtual double CurvatureU ( double u, double v ) const; // \ru Kривизна линии по u. \en Curvature of line in u direction. - virtual bool IsPlanar() const; // \ru Является ли поверхность плоской. \en Whether a surface is planar. + virtual bool IsPlanar( double accuracy = METRIC_EPSILON ) const; // \ru Является ли поверхность плоской. \en Whether a surface is planar. virtual void ChangeCarrier( const MbSpaceItem & item, MbSpaceItem & init ); // \ru Изменение носителя \en Changing of carrier virtual MbSplineSurface * NurbsSurface( double, double, double, double, bool bmatch = false ) const; // \ru NURBS копия поверхности. \en NURBS copy of surface. @@ -189,7 +189,7 @@ public: virtual MbCurve3D * CurveV( double u, MbRect1D * pRgn, bool bApprox = true ) const; // \ru Пространственная копия линии u = const. \en A spatial copy of the line u = const. // \ru Найти проекцию точки на поверхность. \en Find the projection of a point onto the surface. - virtual bool NearPointProjection ( const MbCartPoint3D & pnt, double & u, double & v, bool ext, MbRect2D * uvRange = NULL ) const; + virtual bool NearPointProjection ( const MbCartPoint3D & pnt, double & u, double & v, bool ext, MbRect2D * uvRange = c3d_null ) const; // \ru Построить касательные и нормальные плейсменты конструктивных плоскостей. \en Construct tangent and normal placements of constructive planes. virtual bool CreateNormalPlacements ( const MbVector3D & axisZ, double angle, SArray & places ) const; diff --git a/C3d/Include/surf_spline_surface.h b/C3d/Include/surf_spline_surface.h index 3c5190b..9c37023 100644 --- a/C3d/Include/surf_spline_surface.h +++ b/C3d/Include/surf_spline_surface.h @@ -146,7 +146,7 @@ private: DPtr data; ///< \ru Дополнительные данные о поверхности. \en Additional data about a surface. DPtr wdata; ///< \ru Рабочие данные для расчета поверхности. \en Working data for the calculation of a surface. - double * wc; ///< \ru Рассчитанные в точке (uc,vc) значения весов (может быть NULL). \en Weights values calculated in the point (uc, vc) (may be NULL). + double * wc; ///< \ru Рассчитанные в точке (uc,vc) значения весов (может быть c3d_null). \en Weights values calculated in the point (uc, vc) (may be c3d_null). MbSplineSurfaceAuxiliaryData(); MbSplineSurfaceAuxiliaryData( const MbSplineSurfaceAuxiliaryData & init ); @@ -350,7 +350,7 @@ public: \en \name Common functions of geometric object. \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента. \en A type of element. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const; // \ru Cделать копию элемента. \en Make a copy of an element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const; // \ru Cделать копию элемента. \en Make a copy of an element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Равны ли объекты. \en Whether the objects are equal. virtual bool SetEqual( const MbSpaceItem & ); // \ru Сделать равным. \en Make equal. @@ -497,12 +497,12 @@ public: */ MbSplineSurface * Trimmed( double uBeg, double uEnd, double vBeg, double vEnd ) const; - virtual bool IsPlanar() const; // \ru Является ли поверхность плоской. \en Whether a surface is planar. + virtual bool IsPlanar( double accuracy = METRIC_EPSILON ) const; // \ru Является ли поверхность плоской. \en Whether a surface is planar. // \ru Найти ближайшую проекцию точки на поверхность или ее продолжение по заданному начальному приближению. \en Find the neares projection of a point onto the surface. - virtual bool NearPointProjection ( const MbCartPoint3D & pnt, double & u, double & v, bool ext, MbRect2D * uvRange = NULL ) const; + virtual bool NearPointProjection ( const MbCartPoint3D & pnt, double & u, double & v, bool ext, MbRect2D * uvRange = c3d_null ) const; // \ru Найти все проекции точки на поверхность вдоль вектора в любом из двух направлений. \en Find all a point projection onto the surface along a vector in either of two directions. - virtual void DirectPointProjection( const MbCartPoint3D & pnt, const MbVector3D & vect, SArray & uv, bool ext, MbRect2D * uvRange = NULL ) const; + virtual void DirectPointProjection( const MbCartPoint3D & pnt, const MbVector3D & vect, SArray & uv, bool ext, MbRect2D * uvRange = c3d_null ) const; // \ru Являются ли узловые векторы равными? \en Are knotVectos equal? bool IsKnotsTheSame( const MbSplineSurface & e, bool sameDir, double precision ) const; @@ -767,8 +767,8 @@ public: \en Create a two-dimensional curve if a space curve is a surface boundary.\n \~ \param[in] curve - \ru Заданная пространственная кривая. \en A given space curve. \~ - \return \ru Ссылка на двумерную кривую на поверхности или NULL, если построить ее не удалось. - \en A reference to the two-dimensional curve on a surface or NULL if the construction of it is failed. \~ + \return \ru Ссылка на двумерную кривую на поверхности или c3d_null, если построить ее не удалось. + \en A reference to the two-dimensional curve on a surface or c3d_null if the construction of it is failed. \~ */ MbCurve * IsSplineBorder( const MbCurve3D & curve ) const; @@ -805,7 +805,7 @@ private: double GetKoef( bool isU ) const; // \ru Получить коэффициент пересчета из длины в параметры. \en Get a coefficient of recalculation of the length to the parameters. //--- - // \ru Служебные функции, которые используют заданный кэш (должен быть != NULL). \en Service functions that use a given cache (must != NULL). + // \ru Служебные функции, которые используют заданный кэш (должен быть != c3d_null). \en Service functions that use a given cache (must != c3d_null). bool CheckPoles( MbSplineSurfaceAuxiliaryData * ) const; // \ru Проверить наличие полюсов. \en Check poles existence. bool CatchMemory( MbSplineSurfaceAuxiliaryData * ) const; @@ -856,7 +856,7 @@ private: MbSplineSurfaceAuxiliaryData * ) const; //--- - double GetMinStep ( bool isU, const double * pRng = NULL ) const; + double GetMinStep ( bool isU, const double * pRng = c3d_null ) const; bool ApproxAsPlane() const; // \ru Можно ли аппроксимировать поверхность как плоскость. \en Whether a surface can be approximated by a plane. // \ru Вычислить аппроксимацию поверхности, считая, что ее можно аппроксимировать как плоскость. \en Calculate an approximation of surface assuming that it can be approximated by a plane. diff --git a/C3d/Include/surf_swept_surface.h b/C3d/Include/surf_swept_surface.h index bbe73f0..12d1d33 100644 --- a/C3d/Include/surf_swept_surface.h +++ b/C3d/Include/surf_swept_surface.h @@ -48,7 +48,7 @@ protected: MbSweptSurface( const MbCurve3D &, bool same ); MbSweptSurface( const MbSweptSurface &, MbRegDuplicate * ); MbSweptSurface() // \ru Используется только в конвертерах. \en This is used only in converters. - : curve( NULL ), umin( 0 ), vmin( 0 ), umax( 0 ), vmax( 0 ), uclosed( false ), vclosed( false ) {} + : curve( c3d_null ), umin( 0 ), vmin( 0 ), umax( 0 ), vmax( 0 ), uclosed( false ), vclosed( false ) {} private: MbSweptSurface( const MbSweptSurface & ); // \ru Не реализовано. \en Not implemented. @@ -63,12 +63,12 @@ public: \{ */ virtual MbeSpaceType IsA() const = 0; // \ru Тип элемента. \en A type of element. virtual MbeSpaceType Type() const; // \ru Тип элемента. \en A type of element. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const= 0; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const= 0; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const = 0; // \ru Являются ли объекты равными. \en Determine whether objects are equal. virtual bool SetEqual ( const MbSpaceItem & ) = 0; // \ru Сделать равным. \en Make equal. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ) = 0; // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ) = 0; // \ru Сдвиг. \en Translation. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ) = 0; // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ) = 0; // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ) = 0; // \ru Сдвиг. \en Translation. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ) = 0; // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual void GetProperties( MbProperties & properties ) = 0; // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties & properties ) = 0; // \ru Записать свойства объекта. \en Set properties of the object. diff --git a/C3d/Include/surf_tessellation.h b/C3d/Include/surf_tessellation.h index 2d2a883..8d0c79a 100644 --- a/C3d/Include/surf_tessellation.h +++ b/C3d/Include/surf_tessellation.h @@ -370,26 +370,26 @@ inline bool MbSurfaceWorkingData::Explore( double u0, double v0, bool ext0, doub bool resUV = false; bool resVV = false; - if ( uuDer == NULL ) + if ( uuDer == c3d_null ) resUU = true; else if ( ders[sdt_DeriveUU].x != UNDEFINED_DBL ) { uuDer->Init( ders[sdt_DeriveUU] ); resUU = true; } - if ( uvDer == NULL ) + if ( uvDer == c3d_null ) resUV = true; else if ( ders[sdt_DeriveUV].x != UNDEFINED_DBL ) { uvDer->Init( ders[sdt_DeriveUV] ); resUV = true; } - if ( vvDer == NULL ) + if ( vvDer == c3d_null ) resVV = true; else if ( ders[sdt_DeriveVV].x != UNDEFINED_DBL ) { vvDer->Init( ders[sdt_DeriveVV] ); resVV = true; } if ( resUU && resUV && resVV ) { - if ( nor == NULL ) + if ( nor == c3d_null ) res = true; else if ( norm.x != UNDEFINED_DBL ) { nor->Init( norm ); diff --git a/C3d/Include/surf_torus_surface.h b/C3d/Include/surf_torus_surface.h index d9e0a22..f64df3a 100644 --- a/C3d/Include/surf_torus_surface.h +++ b/C3d/Include/surf_torus_surface.h @@ -132,10 +132,10 @@ public: \en \name Common functions of a geometric object \{ */ virtual MbeSpaceType IsA() const; // \ru Тип элемента. \en A type of element. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const ; // \ru Сделать копию элемента. \en Create a copy of the element. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const ; // \ru Сделать копию элемента. \en Create a copy of the element. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const; // \ru Равны ли объекты. \en Whether the objects are equal. virtual bool SetEqual( const MbSpaceItem & ); // \ru Сделать равным. \en Make equal. - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * = c3d_null ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. virtual void GetProperties( MbProperties & properties ); // \ru Выдать свойства объекта. \en Get properties of the object. virtual void SetProperties( const MbProperties & properties ); // \ru Записать свойства объекта. \en Set properties of the object. @@ -233,7 +233,7 @@ public: virtual MbCurve3D * CurveU( double v, MbRect1D * pRgn, bool bApprox = true ) const; // \ru Пространственная копия линии v = const. \en A spatial copy of the line v = const. virtual MbCurve3D * CurveV( double u, MbRect1D * pRgn, bool bApprox = true ) const; // \ru Пространственная копия линии u = const. \en A spatial copy of the line u = const. // \ru Найти все проекции точки на поверхность вдоль вектора в любом из двух направлений. \en Find all a point projection onto the surface along a vector in either of two directions. - virtual void DirectPointProjection( const MbCartPoint3D & p, const MbVector3D & vect, SArray & uv, bool ext, MbRect2D * uvRange = NULL ) const; + virtual void DirectPointProjection( const MbCartPoint3D & p, const MbVector3D & vect, SArray & uv, bool ext, MbRect2D * uvRange = c3d_null ) const; // \ru Пересечение с кривой. \en Intersection with a curve. virtual void CurveIntersection( const MbCurve3D & curv, SArray & uv, SArray & tt, bool ext0, bool ext, bool touchInclude = false ) const; @@ -284,7 +284,7 @@ public: /** \ru \name Функции элементарных поверхностей \en \name Functions of elementary surfaces. \{ */ - virtual bool GetPointProjection( const MbCartPoint3D & p, bool init, double & u, double & v, bool ext, MbRect2D * uvRange = NULL ) const; + virtual bool GetPointProjection( const MbCartPoint3D & p, bool init, double & u, double & v, bool ext, MbRect2D * uvRange = c3d_null ) const; /** \} */ /** \ru \name Функции тороидальной поверхности \en \name Functions of toroidal surface diff --git a/C3d/Include/surface.h b/C3d/Include/surface.h index aed851c..39ca6b7 100644 --- a/C3d/Include/surface.h +++ b/C3d/Include/surface.h @@ -118,12 +118,12 @@ public: virtual MbeSpaceType IsA() const = 0; // \ru Тип элемента. \en A type of element. virtual MbeSpaceType Type() const; // \ru Групповой тип элемента. \en Group element type. virtual MbeSpaceType Family() const; // \ru Семейство объекта. \en Family of object. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * = NULL ) const = 0; // \ru Сделать копию объекта. \en Create a copy of the object. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * = c3d_null ) const = 0; // \ru Сделать копию объекта. \en Create a copy of the object. virtual bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const = 0; // \ru Являются ли объекты равными. \en Determine whether objects are equal. virtual bool SetEqual ( const MbSpaceItem & ) = 0; // \ru Сделать объекты равным. \en Make objects equal. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ) = 0; // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ) = 0; // \ru Сдвинуть объект вдоль вектора. \en Move an object along a vector. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ) = 0; // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ) = 0; // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ) = 0; // \ru Сдвинуть объект вдоль вектора. \en Move an object along a vector. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ) = 0; // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual double DistanceToPoint( const MbCartPoint3D & ) const; // \ru Вычислить расстояние до точки. \en Calculate the distance to a point. virtual void AddYourGabaritTo( MbCube & c ) const; // \ru Добавить габарит поверхности в куб. \en Add the surface bounding box into a cube. virtual void Refresh(); // \ru Сбросить все временные данные. \en Reset all temporary data. @@ -407,11 +407,11 @@ public: \param[out] vDer - \ru Производная по v. \en Derivative with respect to v. \~ \param[out] uuDer - \ru Вторая производная по u, если не ноль. - \en Second derivative with respect to u, if not NULL. \~ + \en Second derivative with respect to u, if not c3d_null. \~ \param[out] vvDer - \ru Вторая производная по v, если не ноль. - \en Second derivative with respect to v, if not NULL. \~ + \en Second derivative with respect to v, if not c3d_null. \~ \param[out] uvDer - \ru Вторая производная по u и по v, если не ноль. - \en Second derivative with respect to u and v, if not NULL. \~ + \en Second derivative with respect to u and v, if not c3d_null. \~ \ingroup Surfaces */ virtual void Explore( double & u, double & v, bool ext, @@ -770,7 +770,7 @@ public: /// \ru Является ли базовая поверхность копией базовой поверхности данного объекта. \en Whether a base surface is a copy of the base surface of the given object. virtual bool IsSameBase( const MbSurface & ) const; /// \ru Является ли поверхность плоской. \en Whether a surface is planar. - virtual bool IsPlanar() const; + virtual bool IsPlanar( double accuracy = METRIC_EPSILON ) const; /** \brief \ru Дать физический радиус объекта или ноль, если это невозможно. \en Get the physical radius of the object or null if it impossible. \~ @@ -867,8 +867,8 @@ public: \en Parameters of construction in u direction. \~ \param[in] vParam - \ru Параметры построения по направлению v. \en Parameters of construction in v direction. \~ - \result \ru Построенная NURBS поверхность или NULL при неуспешном построении. - \en The constructed NURBS surface or NULL in a case of failure. \~ + \result \ru Построенная NURBS поверхность или c3d_null при неуспешном построении. + \en The constructed NURBS surface or c3d_null in a case of failure. \~ */ virtual MbSurface * NurbsSurface( const MbNurbsParameters & uParam, const MbNurbsParameters & vParam ) const; @@ -1159,7 +1159,7 @@ public: \result \ru true - если найдена проекция, удовлетворяющая всем входным условиям. \en True - if there is found a projection which satisfies to all input conditions. \~ */ - virtual bool NearPointProjection( const MbCartPoint3D & pnt, double & u, double & v, bool ext, MbRect2D * uvRange = NULL ) const; + virtual bool NearPointProjection( const MbCartPoint3D & pnt, double & u, double & v, bool ext, MbRect2D * uvRange = c3d_null ) const; /// \ru Нахождение проекции точки на поверхность в направлении вектора. Для внутреннего использования. \en Finding of point projections to the surface in direction of the vector. For internal use only. virtual MbeNewtonResult DirectPointProjectionNewton( const MbCartPoint3D & p, const MbVector3D & vect, size_t iterLimit, double & u, double & v, double & w, bool ext ) const; @@ -1183,7 +1183,7 @@ public: \param[in] uvRange - \ru Диапазон изменения параметров поверхности, в котором надо найти решение. \en A range of surface parameters changing in which the solution should be found. \~ */ - virtual void DirectPointProjection( const MbCartPoint3D & pnt, const MbVector3D & vect, SArray & uv, bool ext, MbRect2D * uvRange = NULL ) const; + virtual void DirectPointProjection( const MbCartPoint3D & pnt, const MbVector3D & vect, SArray & uv, bool ext, MbRect2D * uvRange = c3d_null ) const; /** \brief \ru Найти ближайшую проекцию точки на поверхность в направлении вектора. \en Find the nearest point projection to the surface in the vector direction. \~ @@ -1209,7 +1209,7 @@ public: \en True - if there is found a projection which satisfies to all input conditions. \~ */ virtual bool NearDirectPointProjection( const MbCartPoint3D & pnt, const MbVector3D & vect, double & u, double & v, bool ext, - MbRect2D * uvRange = NULL, bool onlyPositiveDirection = false ) const; + MbRect2D * uvRange = c3d_null, bool onlyPositiveDirection = false ) const; /// \ru Решение системы уравнений для определения пересечения поверхности и кривой. Для внутреннего использования. \en Solution of equation system for determination of intersections between a surface and a curve. For internal use only. virtual MbeNewtonResult CurveIntersectNewton( const MbCurve3D & curv1, double funcEpsilon, size_t iterLimit, double & u0, double & v0, double & t1, bool ext0, bool ext1 ) const; @@ -1453,7 +1453,7 @@ public: \param[in] s - \ru Поверхность-копия. \en A surface-copy. \~ */ - void CopyGabarit( const MbSurface & s, const MbVector3D * to = NULL ) { cube = s.cube; if ( (to != NULL) && !cube.IsEmpty() ) { cube.Move( *to ); } } + void CopyGabarit( const MbSurface & s, const MbVector3D * to = c3d_null ) { cube = s.cube; if ( (to != c3d_null) && !cube.IsEmpty() ) { cube.Move( *to ); } } /// \ru Вычислить диагональ габаритного куба. \en Calculate the diagonal of the bounding box. double GetGabDiagonal() const { if ( cube.IsEmpty() ) { MbCube tmp; CalculateGabarit( tmp ); } return cube.GetDiagonal(); } @@ -1978,8 +1978,6 @@ MATH_FUNC (MbeNewtonResult) NearestPoints( const MbSurface & surface0, bool ext0 \en V-parameter of a point on the surface 'surface1'. \~ \param[out] dmin - \ru Расстояние между точками поверхностей. \en The distance between points on surfaces. \~ - \param[in] checkCurvilinearBounds - \ru Всегда проверять по криволинейным границам (если они есть). - \en Check for curvilinear boundaries (if they are). \~ \return \ru Возвращает nr_Success (+1) или nr_Special(0) в случае успешного определения, в случае неудачи возвращает nr_Failure(-1). \en Return nr_Success (+1) or nr_Special(0) in a case of successful defining, return nr_Failure(-1) in a case of failure. \~ \ingroup Surfaces diff --git a/C3d/Include/system_atomic.h b/C3d/Include/system_atomic.h index 8eef130..a5f6ea0 100644 --- a/C3d/Include/system_atomic.h +++ b/C3d/Include/system_atomic.h @@ -2,9 +2,9 @@ /** \file \brief \ru Системозависимые атомарные операции. - Если требуются атомарные операции, должен использоваться этот файл ( не использовать!!!). + Если требуются атомарные операции, должен использоваться этот файл (atomic не использовать!!!). \en System-dependent atomic operations. - If atomic operations are required, this file should used ( must not be used!!!).\~ + If atomic operations are required, this file should be used (atomic must not be used!!!).\~ */ //////////////////////////////////////////////////////////////////////////////// @@ -15,6 +15,7 @@ #include #include + //------------------------------------------------------------------------------ // \ru Использование атомарных операций согласно стандарту C++11. // \en Using atomic operations according to C++11 standard. diff --git a/C3d/Include/system_cpp_standard.h b/C3d/Include/system_cpp_standard.h index 0846a11..9bb9a75 100644 --- a/C3d/Include/system_cpp_standard.h +++ b/C3d/Include/system_cpp_standard.h @@ -161,7 +161,7 @@ #endif //------------------------------------------------------------------------------ -/// \ru Обертка для c o n s t e x p r. \en Wrapper for c o n s t e x p r. +/// \ru Обертка для constexpr. \en Wrapper for constexpr. //--- #ifdef C3D_STANDARD_CXX_11 #define c3d_constexpr constexpr @@ -173,19 +173,22 @@ // \ru Нулевой указатель. \en Null pointer. //--- #ifdef C3D_STANDARD_CXX_11_PARTIAL - #define C3D_NULL_PTR nullptr + #define c3d_null nullptr #else - #define C3D_NULL_PTR NULL + #if !defined(NULL) + #define NULL 0 + #endif + #define c3d_null NULL #endif // C3D_STANDARD_CXX_11_PARTIAL //------------------------------------------------------------------------------ -// \ru Нулевой указатель. \en Null pointer. +// \ru Обертка для final. \en Wrapper for final. //--- #ifdef C3D_STANDARD_CXX_11 #define c3d_final final #else #define c3d_final -#endif // C3D_STANDARD_CXX_11_PARTIAL +#endif // C3D_STANDARD_CXX_11 #endif // __SYSTEM_CPP_STANDARD_H diff --git a/C3d/Include/system_types.h b/C3d/Include/system_types.h index 32edc5e..98bf473 100644 --- a/C3d/Include/system_types.h +++ b/C3d/Include/system_types.h @@ -230,7 +230,7 @@ c3d_constexpr size_t SIZE_OF_POINTER = sizeof(char *); */ //--- template -SignedType abs_t( const SignedType x ) { return ((x >= 0) ? x : -x); } //KYA K13+ x64 +SignedType abs_t( const SignedType x ) { return ((x >= 0) ? x : -x); } //------------------------------------------------------------------------------ diff --git a/C3d/Include/templ_array2.h b/C3d/Include/templ_array2.h index e1c1156..5d610a2 100644 --- a/C3d/Include/templ_array2.h +++ b/C3d/Include/templ_array2.h @@ -65,8 +65,8 @@ public: ~Array2() { set_array_size( *this, 0, 0 ); } public: - /// \ru Создать массив заданной размерности (возвращает NULL в случае неудачи). - /// \en Create an array of a given dimension (returns NULL in case of failure). + /// \ru Создать массив заданной размерности (возвращает c3d_null в случае неудачи). + /// \en Create an array of a given dimension (returns c3d_null in case of failure). static Array2 * Create( size_t lSize, size_t cSize ); public: // Общие методы матриц (двумерных массивов) @@ -221,13 +221,13 @@ inline Array2::Array2( const Array2 & source ) template inline Array2 * Array2::Create( size_t lSize, size_t cSize ) { - Array2 * arr = NULL; + Array2 * arr = c3d_null; if ( lSize * cSize < c3d::MATRIX_MAX_COUNT ) { try { arr = new Array2( lSize, cSize ); } catch ( const std::bad_alloc & ) { - arr = NULL; + arr = c3d_null; } } return arr; @@ -285,7 +285,7 @@ const Type * Array2::GetLine( size_t i ) const { PRECONDITION( i < l ); if ( i < l ) return parr[i]; - return NULL; + return c3d_null; } //------------------------------------------------------------------------------ @@ -296,7 +296,7 @@ Type * Array2::SetLine( size_t i ) { PRECONDITION( i < l ); if ( i < l ) return parr[i]; - return NULL; + return c3d_null; } //------------------------------------------------------------------------------ @@ -468,7 +468,7 @@ inline bool Array2::CatchLinePointers( size_t newCount ) } catch ( ... ) { if ( newCount == 0 ) {// \ru Не смогли удалить parr. \en Failed to delete parr. - parr = NULL; + parr = c3d_null; l = c = 0; } C3D_CONTROLED_THROW; @@ -529,7 +529,7 @@ inline bool realloc_line( Type *& line, size_t oldSize, size_t newSize ) } catch ( ... ) { if ( newSize == 0 )// \ru Не смогли удалить line. \en Failed to delete line. - line = NULL; + line = c3d_null; C3D_CONTROLED_THROW; return false; } @@ -602,7 +602,7 @@ bool set_array_size( Array2 & arr, size_t lSize, size_t cSize ) else if ( arr.l > oldL && arr.c > 0 ) { // \ru BUG_46010 KYA K12 А кто будет выделять память для новых строк \en BUG_46010 KYA K12 And who will allocate memory for new rows Type * newLine = 0; // \ru указатель на содержимое новой строки \en pointer to contents of new row for ( i = oldL; res && i < arr.l; i++ ) { - newLine = NULL; + newLine = c3d_null; res = ::realloc_line( newLine, 0, arr.c ); // \ru захватить память под строку \en allocate memory for one row if ( res ) { ::memset( newLine, 0, arr.c * sizeof(Type) ); diff --git a/C3d/Include/templ_balance_tree.h b/C3d/Include/templ_balance_tree.h index 82517a6..1615c67 100644 --- a/C3d/Include/templ_balance_tree.h +++ b/C3d/Include/templ_balance_tree.h @@ -120,7 +120,7 @@ static size_t countIsSame; ///< \ru Число сравнений (для от public: /// \ru Конструктор. \en Constructor. - BalanceTree( Compare_t c_t = SimplePointCompFuncT, Compare_v c_v = NULL/*SimplePointCompFuncV*/, + BalanceTree( Compare_t c_t = SimplePointCompFuncT, Compare_v c_v = c3d_null/*SimplePointCompFuncV*/, bool shouldDelete = true ); /// \ru Деструктор. \en Destructor. virtual ~BalanceTree(); @@ -204,7 +204,7 @@ public: BalanceTreeNode * node_m; PPNodeType typeRAB_m; public: - PPNode( BalanceTreeNode * node = NULL, PPNodeType t = iRoot ) + PPNode( BalanceTreeNode * node = c3d_null, PPNodeType t = iRoot ) : node_m(node) , typeRAB_m(t) {} @@ -321,8 +321,8 @@ inline void BalanceTreeNode::operator delete ( void * ptr, size_t size ) { template inline BalanceTreeNode::BalanceTreeNode( BalanceTree & parent, Type * content ) : parent_m ( parent ), - left_m ( NULL ), - right_m ( NULL ), + left_m ( c3d_null ), + right_m ( c3d_null ), // \ru КВН K8+ count_m ( 0 ), \en КВН K8+ count_m ( 0 ), balance_m ( ts_neutral ), content_m ( content ) @@ -367,7 +367,7 @@ inline void BalanceTreeNode::SetRight( BalanceTreeNode * p ){ // --- template inline BalanceTree::BalanceTree( Compare_t c_t, Compare_v c_v, bool shouldDelete ) : - root_m ( NULL ), + root_m ( c3d_null ), allCount_m ( 0 ), owns_m ( shouldDelete ), isBranchGrew_m( false ), @@ -418,7 +418,7 @@ inline void BalanceTree::Flush( DelType del ) { if( root_m ) { destroy_tree_node( *root_m, del ); delete root_m; - root_m = NULL; + root_m = c3d_null; } allCount_m = 0; @@ -464,7 +464,7 @@ inline bool BalanceTree::FindIt ( const Type * content ) const { #endif // C3D_DEBUG - Type * t = compT_m ? find_tree( *this, (void *)content, true/*compT*/ ) : NULL; + Type * t = compT_m ? find_tree( *this, (void *)content, true/*compT*/ ) : c3d_null; return !!t; } @@ -479,7 +479,7 @@ inline Type * BalanceTree::Find ( void * content ) const { countIsSame = 0; #endif // C3D_DEBUG - return compV_m ? find_tree( *this, content, false/*compT*/ ) : NULL; + return compV_m ? find_tree( *this, content, false/*compT*/ ) : c3d_null; } @@ -579,8 +579,8 @@ inline bool BalanceTree::AddToBalanceTree( Type & content, BalanceTreeNod case ts_neutral : node->balance_m = ts_negative; break; // \ru балансировка \en balancing case ts_negative : { - BalanceTreeNode * p1 = NULL; - BalanceTreeNode * p2 = NULL; + BalanceTreeNode * p1 = c3d_null; + BalanceTreeNode * p2 = c3d_null; p1 = node->left_m; if ( p1 ){ if ( p1->balance_m == ts_negative ) { // \ru однократный LL поворот \en single LL rotation @@ -612,8 +612,8 @@ inline bool BalanceTree::AddToBalanceTree( Type & content, BalanceTreeNod case ts_neutral : node->balance_m = ts_positive; break; // \ru балансировка \en balancing case ts_positive : { - BalanceTreeNode * p1 = NULL; - BalanceTreeNode * p2 = NULL; + BalanceTreeNode * p1 = c3d_null; + BalanceTreeNode * p2 = c3d_null; p1 = node->right_m; if ( p1 ) { if ( p1->balance_m == ts_positive ) { // \ru однократный RR поворот \en single RR rotation @@ -652,8 +652,8 @@ inline void BalanceTree::BalanceL( BalanceTreeNode *& node, bool & case ts_neutral : node->balance_m = ts_positive; isBranchGrew = false; break; // \ru балансировка \en balancing case ts_positive : { - BalanceTreeNode * p1 = NULL; - BalanceTreeNode * p2 = NULL; + BalanceTreeNode * p1 = c3d_null; + BalanceTreeNode * p2 = c3d_null; p1 = node->right_m; if ( p1 ) { if ( p1->balance_m >= ts_neutral ) { // \ru однократный RR поворот \en single RR rotation @@ -691,8 +691,8 @@ inline void BalanceTree::BalanceR( BalanceTreeNode *& node, bool & case ts_neutral : node->balance_m = ts_negative; isBranchGrew = false; break; // \ru балансировка \en balancing case ts_negative : { - BalanceTreeNode * p1 = NULL; - BalanceTreeNode * p2 = NULL; + BalanceTreeNode * p1 = c3d_null; + BalanceTreeNode * p2 = c3d_null; p1 = node->left_m; if ( p1 ) { if ( p1->balance_m <= ts_neutral ) { // \ru однократный LL поворот \en single LL rotation @@ -791,8 +791,8 @@ inline bool BalanceTree::DeleteFromBalanceTree( Type & content, BalanceTr } bool oldowns = owns_m; owns_m = del == Delete ? true : del == noDelete ? false : owns_m; - q->left_m = NULL; - q->right_m = NULL; + q->left_m = c3d_null; + q->right_m = c3d_null; delete q; owns_m = oldowns; allCount_m--; // \ru подсчитываем общее кол-во узлов \en compute the total count of nodes @@ -813,14 +813,14 @@ template void destroy_tree_node( BalanceTreeNode& treeNode, DelType del ) { delete treeNode.left_m; - treeNode.left_m = NULL; + treeNode.left_m = c3d_null; delete treeNode.right_m; - treeNode.right_m = NULL; + treeNode.right_m = c3d_null; bool shouldDelete = del == Delete || ( del == defDelete && treeNode.parent_m.owns_m ); if ( shouldDelete ) { delete treeNode.content_m; - treeNode.content_m = NULL; + treeNode.content_m = c3d_null; } } @@ -830,7 +830,7 @@ void destroy_tree_node( BalanceTreeNode& treeNode, DelType del ) { // --- template Type * find_tree( const BalanceTree& tree, void * content, bool compT ) { - Type * res = NULL; + Type * res = c3d_null; const BalanceTreeNode * node = tree.root_m; if ( node ) { ThreeStates compRres = ts_negative; @@ -881,7 +881,7 @@ inline void BalanceTreeIterator::Restart( IteratorType t ) { // --- template inline Type * BalanceTreeIterator::operator ++(int) { - Type * res = m_CurNode ? m_CurNode->content_m : NULL; + Type * res = m_CurNode ? m_CurNode->content_m : c3d_null; if ( m_CurNode ) Iterate( m_CurNode ); @@ -894,7 +894,7 @@ inline Type * BalanceTreeIterator::operator ++(int) { // --- template inline BalanceTreeIterator::operator Type * () const { - return m_CurNode ? m_CurNode->content_m : NULL; + return m_CurNode ? m_CurNode->content_m : c3d_null; } @@ -1016,10 +1016,10 @@ inline void BalanceTreeIterator::Iterate( BalanceTreeNode * node ) { Iterate( m_CurNode ); } else - m_CurNode = NULL; + m_CurNode = c3d_null; } else - m_CurNode = NULL; + m_CurNode = c3d_null; fRepeat = false; break; } diff --git a/C3d/Include/templ_c_array.h b/C3d/Include/templ_c_array.h index e116a25..dfce683 100644 --- a/C3d/Include/templ_c_array.h +++ b/C3d/Include/templ_c_array.h @@ -66,7 +66,7 @@ public : /// \ru Оператор доступа. \en An access operator. Type & operator []( size_t idx ) const { PRECONDITION( idx < count ); return parr[idx]; } /// \ru Выделена ли память? \en Is memory allocated? - bool IsNull () const { return parr == NULL; } + bool IsNull () const { return parr == c3d_null; } /// \ru Выдать адрес начала массива. \en Get address of the beginning of an array. const Type * GetAddr() const { return parr; } @@ -125,7 +125,7 @@ inline CcArray::CcArray( size_t _count ) template inline void CcArray::Copy( const void * from, size_t cnt, size_t offset ) { - PRECONDITION( (offset + cnt <= count) && (cnt ? from != NULL : true) ); + PRECONDITION( (offset + cnt <= count) && (cnt ? from != c3d_null : true) ); memcpy( parr + offset, from, cnt * sizeof(Type) ); } @@ -147,12 +147,12 @@ inline bool CcArray::SetArraySize( size_t newCount ) #endif #ifdef USE_REALLOC_IN_ARRAYS - if ( parr != NULL || newCount != 0 ) { - // \ru показывает утечки памяти, если parr==0 и newCount==0 \en Memory leaks happen if parr==0 and newCount==0 + if ( parr != c3d_null || newCount != 0 ) { + // \ru показывает утечки памяти, если parr==c3d_null и newCount==0 \en Memory leaks happen if parr==c3d_null and newCount==0 parr = static_cast( REALLOC_ARRAY_SIZE(parr, newCount * sizeof(Type), true/*clear*/) ); } #else - Type * p_tmp = newCount ? new Type[newCount] : NULL; + Type * p_tmp = newCount ? new Type[newCount] : c3d_null; delete[] parr; // \ru Удалять parr, если оператор new выполнился успешно. \en Delete parr if operator new is succeeded. parr = p_tmp; @@ -171,7 +171,7 @@ inline bool CcArray::SetArraySize( size_t newCount ) } catch ( ... ) { if ( newCount == 0 )// \ru Не смогли удалить parr. \en Failed to delete parr. - parr = NULL; + parr = c3d_null; C3D_CONTROLED_THROW; return false; } diff --git a/C3d/Include/templ_csp_array.h b/C3d/Include/templ_csp_array.h index 79d43d5..a123902 100644 --- a/C3d/Include/templ_csp_array.h +++ b/C3d/Include/templ_csp_array.h @@ -49,7 +49,7 @@ private: public: /// \ru Конструктор. \en Constructor. - CSPArray( size_t maxCnt = 0, uint16 delt = 1, bool shouldDelete = true, bool _keepEq = false, LessFuncPtr func = NULL ) + CSPArray( size_t maxCnt = 0, uint16 delt = 1, bool shouldDelete = true, bool _keepEq = false, LessFuncPtr func = c3d_null ) : SPArray( maxCnt, delt, shouldDelete ) , m_sort( true ) , m_keepEq( _keepEq ) @@ -181,9 +181,9 @@ inline void CSPArray::Sort( LessFuncPtr lessFunc ) template inline Type * CSPArray::RemoveObj( Type * delObject, DelType del ) { - C3D_ASSERT( SPArray::nowDeletedElem == 0 ); // \ru Bременно, для отладки \en Temporarily, for debugging. + C3D_ASSERT( SPArray::nowDeletedElem == c3d_null ); // \ru Bременно, для отладки \en Temporarily, for debugging. size_t i = Find( delObject ); - return ( i != SYS_MAX_T ) ? RemoveInd(i, del) : 0; + return ( i != SYS_MAX_T ) ? RemoveInd(i, del) : c3d_null; } @@ -248,7 +248,7 @@ void qp_sort_r2( Type ** arr, size_t minIndex, size_t maxIndex ) ptrdiff_t minInd = minIndex, maxInd = maxIndex; ptrdiff_t i = minInd, j = maxInd; ptrdiff_t im = 0; - Type *middle = NULL; + Type *middle = c3d_null; for ( ;; ) { i = minInd, j = maxInd; diff --git a/C3d/Include/templ_css_array.h b/C3d/Include/templ_css_array.h index e98362d..b6c7c74 100644 --- a/C3d/Include/templ_css_array.h +++ b/C3d/Include/templ_css_array.h @@ -53,14 +53,14 @@ public: , m_sort( other.m_sort ) {} /// \ru Конструктор копирования. \en Copy constructor. - CSSArray( const SArray & other, SArray * del = NULL ) + CSSArray( const SArray & other, SArray * del = c3d_null ) : SSArray( other ) , m_sort( false ) { ::q_sort( *this, del ); } /// \ru Конструктор копирования. \en Copy constructor. - CSSArray( const SArray< std::pair > & other, bool addFirst, SArray * del = NULL ) + CSSArray( const SArray< std::pair > & other, bool addFirst, SArray * del = c3d_null ) : SSArray( other.Count(), 1 ) , m_sort( false ) { @@ -100,7 +100,7 @@ public: Type * Add ( const Type & ); ///< \ru Добавить элемент с упорядочиванием по массиву. \en Add element with sorting. Type * Add ( const Type &, size_t & indexEnt ); ///< \ru Добавить элемент с упорядочиванием по массиву, возвращает индекс. \en Add element with sorting by array, returns index of the element. size_t Find( const Type & ); ///< \ru Найти элемент в упорядоченном массиве. \en Find an element in ordered array. - void Sort( SArray * del = NULL ); ///< \ru Выполнить сортировку элементов массива. \en Sort elements of array. + void Sort( SArray * del = c3d_null ); ///< \ru Выполнить сортировку элементов массива. \en Sort elements of array. size_t RemoveObj( const Type & delObject ); ///< \ru Удалить элемент из массива. \en Delete an element from array. void SetNoSort() { m_sort = false; } ///< \ru Сбросить флаг сортированности. \en Reset the flag of being sorted. @@ -121,7 +121,7 @@ public: // --- template inline Type * CSSArray::Add( const Type & el ) { - ::q_sort( *this, (SArray *)NULL ); + ::q_sort( *this, (SArray *)c3d_null ); return SSArray::Add( el ); } @@ -131,7 +131,7 @@ inline Type * CSSArray::Add( const Type & el ) { // --- template inline Type * CSSArray::Add( const Type & el, size_t & indexEl ) { - ::q_sort( *this, (SArray *)NULL ); + ::q_sort( *this, (SArray *)c3d_null ); return SSArray::Add( el, indexEl ); } @@ -146,7 +146,7 @@ inline void CSSArray::AddArray( const CSSArray & arr, bool doSort ) m_sort = false; (*this) += arr; if ( doSort ) - ::q_sort( *this, (SArray *)NULL ); + ::q_sort( *this, (SArray *)c3d_null ); } } @@ -161,7 +161,7 @@ inline void CSSArray::AddArray( const SArray & arr, bool doSort ) m_sort = false; (*this) += arr; if ( doSort ) - ::q_sort( *this, (SArray *)NULL ); + ::q_sort( *this, (SArray *)c3d_null ); } } @@ -171,7 +171,7 @@ inline void CSSArray::AddArray( const SArray & arr, bool doSort ) // --- template inline size_t CSSArray::Find( const Type & el ) { - ::q_sort( *this, (SArray *)NULL ); + ::q_sort( *this, (SArray *)c3d_null ); return SSArray::Find( el ); } diff --git a/C3d/Include/templ_dptr.h b/C3d/Include/templ_dptr.h index 1f59775..070ec4c 100644 --- a/C3d/Include/templ_dptr.h +++ b/C3d/Include/templ_dptr.h @@ -11,11 +11,6 @@ #define __TEMPL_DPTR_H -#ifndef NULL - #define NULL 0 -#endif - - #include #include @@ -94,8 +89,8 @@ private: // --- template DPtr::DPtr() - : m_Ptr ( NULL ) - , m_Owner( NULL ) + : m_Ptr ( c3d_null ) + , m_Owner( c3d_null ) { } @@ -106,9 +101,9 @@ DPtr::DPtr() template DPtr::DPtr( dtype * obj ) : m_Ptr ( obj ) - , m_Owner( NULL ) + , m_Owner( c3d_null ) { - if ( obj != NULL ) { + if ( obj != c3d_null ) { m_Owner = new Owner( obj ); m_Owner->m_RefCounter++; } @@ -123,7 +118,7 @@ DPtr::DPtr( const DPtr & dptr ) : m_Ptr( dptr.m_Ptr ) , m_Owner( dptr.m_Owner ) { - if ( m_Owner != NULL ) + if ( m_Owner != c3d_null ) m_Owner->m_RefCounter++; } @@ -136,11 +131,11 @@ DPtr & DPtr::operator = ( dtype * pObj ) { if ( m_Ptr != pObj ) { m_Ptr = pObj; - if ( m_Owner != NULL ) { + if ( m_Owner != c3d_null ) { m_Owner->Release(); - m_Owner = NULL; + m_Owner = c3d_null; } - if ( pObj != NULL ) { + if ( pObj != c3d_null ) { m_Owner = new Owner( pObj ); m_Owner->m_RefCounter++; } @@ -158,11 +153,11 @@ DPtr & DPtr::operator = ( const DPtr & dptr ) { if ( m_Ptr != dptr.m_Ptr ) { m_Ptr = dptr.m_Ptr; - if ( m_Owner != NULL ) { + if ( m_Owner != c3d_null ) { m_Owner->Release(); - m_Owner = NULL; + m_Owner = c3d_null; } - if ( dptr.m_Ptr != NULL ) { + if ( dptr.m_Ptr != c3d_null ) { m_Owner = dptr.m_Owner; m_Owner->m_RefCounter++; } diff --git a/C3d/Include/templ_fdp_array.h b/C3d/Include/templ_fdp_array.h index f34f6e9..50324e9 100644 --- a/C3d/Include/templ_fdp_array.h +++ b/C3d/Include/templ_fdp_array.h @@ -55,14 +55,14 @@ public : /// \ru Конструктор. \en Constructor. FDPArray() : RPArray() - , fDestroy( NULL ) - , nowDeletedElem(0) + , fDestroy( c3d_null ) + , nowDeletedElem(c3d_null) {} /// \ru Конструктор. \en Constructor. FDPArray( size_t i_upper, uint16 i_delta, DestroyFunc fd ) : RPArray( i_upper, i_delta) , fDestroy( fd ) - , nowDeletedElem(0) + , nowDeletedElem(c3d_null) {} /// \ru Деструктор. \en Destructor. virtual ~FDPArray(); @@ -141,8 +141,8 @@ FDPArray::FDPArray( FDPArray && _Right ) , fDestroy ( std::move(_Right.fDestroy) ) , nowDeletedElem( std::move(_Right.nowDeletedElem) ) { - _Right.fDestroy = nullptr; - _Right.nowDeletedElem = nullptr; + _Right.fDestroy = c3d_null; + _Right.nowDeletedElem = c3d_null; } //------------------------------------------------------------------------------ @@ -166,7 +166,7 @@ FDPArray & FDPArray::operator = ( FDPArray && _Right ) // --- template inline FDPArray::~FDPArray() { - PRECONDITION( nowDeletedElem == 0 ); + PRECONDITION( nowDeletedElem == c3d_null ); destroy_array( *this ); } @@ -177,7 +177,7 @@ inline FDPArray::~FDPArray() { // --- template inline void FDPArray::Flush( DelType del ) { - PRECONDITION( nowDeletedElem == 0 ); + PRECONDITION( nowDeletedElem == c3d_null ); if ( del==Delete || (del==defDelete && fDestroy) ) destroy_array( *this ); @@ -191,7 +191,7 @@ inline void FDPArray::Flush( DelType del ) { // --- template inline void FDPArray::Clear( typename FDPArray::TotalDestroyFunc fd ) { - PRECONDITION( nowDeletedElem == 0 ); + PRECONDITION( nowDeletedElem == c3d_null ); size_t oldCount = RPArray::count; RPArray::count = 0; // \ru сначала приведем в порядок массив ... \en put an array in order at first ... @@ -250,9 +250,9 @@ inline Type* FDPArray::RemoveInd( size_t delIndex, DelType del ) { template inline Type * FDPArray::RemoveObj( Type * delObject, DelType del ) { - PRECONDITION( nowDeletedElem == 0 ); + PRECONDITION( nowDeletedElem == c3d_null ); size_t i = find_in_array( *this, delObject ); - return (i != SYS_MAX_T) ? RemoveInd(i, del) : 0; + return (i != SYS_MAX_T) ? RemoveInd(i, del) : c3d_null; } @@ -295,9 +295,9 @@ inline Type* FDPArray::DestroyInd( size_t delIndex, typename FDPArray inline Type * FDPArray::DestroyObj( Type * delObject, typename FDPArray::DestroyFunc fd ) { - PRECONDITION( nowDeletedElem == 0 ); + PRECONDITION( nowDeletedElem == c3d_null ); size_t i = find_in_array( *this, delObject ); - return ( i != SYS_MAX_T ) ? DestroyInd( i, fd ) : 0; + return ( i != SYS_MAX_T ) ? DestroyInd( i, fd ) : c3d_null; } @@ -334,7 +334,7 @@ void destroy_array( FDPArray & arr ) template bool set_Farray_size( FDPArray & arr, size_t newSize, bool clear ) { - PRECONDITION( arr.nowDeletedElem == 0 ); + PRECONDITION( arr.nowDeletedElem == c3d_null ); if ( clear && arr.count ) arr.Flush(); // \ru будет arr.count = 0; \en arr.count will be equal 0; diff --git a/C3d/Include/templ_fdp_array_rw.h b/C3d/Include/templ_fdp_array_rw.h index 4587d92..569ec30 100644 --- a/C3d/Include/templ_fdp_array_rw.h +++ b/C3d/Include/templ_fdp_array_rw.h @@ -46,11 +46,11 @@ reader & operator >> ( reader & in, FDPArray & ref ) const Type ** parr = ref.GetAddr(); - if ( parr != NULL ) { + if ( parr != c3d_null ) { size_t i; // \ru поочередное чтение объектов массива \en successive reading of objects from an array for ( i = 0; i < count && in.good(); i++ ) { - Type * el = NULL; + Type * el = c3d_null; in >> el; parr[i] = el; } @@ -98,7 +98,7 @@ writer & operator << ( writer & out, const FDPArray & ref ) template reader & operator >> ( reader & in, FDPArray *& ptr ) { - ptr = NULL; + ptr = c3d_null; if ( in.good() ) { if ( in.MathVersion() < 0x06000012L ) ptr = new FDPArray; @@ -168,7 +168,7 @@ static void TotalDestroy( Type ** arr, size_t count ) { size_t i = 0; for ( Type** parr = arr; i < count; i++, parr++ ) { Type *del = *parr; - *parr = NULL; // \ru Cначала обнулить ... \en Set to null at first... + *parr = c3d_null; // \ru Cначала обнулить ... \en Set to null at first... delete del; // \ru ... потом удалить \en ... then delete } } diff --git a/C3d/Include/templ_ifc_array.h b/C3d/Include/templ_ifc_array.h index 7138cac..6402f21 100644 --- a/C3d/Include/templ_ifc_array.h +++ b/C3d/Include/templ_ifc_array.h @@ -50,7 +50,7 @@ public: typedef const value_type * pointer; public: - iterator() { m_curr = NULL; } + iterator() { m_curr = c3d_null; } iterator( const stored_type * ptr ) { m_curr = ptr; } iterator( const iterator & iter ) { m_curr = iter.m_curr; } stored_type operator*() const { return *m_curr; } @@ -165,10 +165,10 @@ public: template inline void IFCArray_Release( Type * & el ) { - if ( el != NULL && el->Release() == 0 ) + if ( el != c3d_null && el->Release() == 0 ) { // AS K11 27.05.2008 Обнулять, только если объект действительно удален. - el = NULL; + el = c3d_null; } } @@ -211,7 +211,7 @@ inline IFC_Array::~IFC_Array() // --- template inline void IFC_Array::Add( Type* ent ) { - if ( ent != NULL ) + if ( ent != c3d_null ) ent->AddRef(); RPArray::Add( ent ); } @@ -222,7 +222,7 @@ inline void IFC_Array::Add( Type* ent ) { // --- template inline void IFC_Array::AddAt( stored_type ent, size_t ind ) { - if ( ent != NULL ) + if ( ent != c3d_null ) ent->AddRef(); RPArray::AddAt( ent, ind ); } @@ -233,7 +233,7 @@ inline void IFC_Array::AddAt( stored_type ent, size_t ind ) { // --- template inline void IFC_Array::AddAfter( stored_type ent, size_t ind ) { - if ( ent != NULL ) + if ( ent != c3d_null ) ent->AddRef(); RPArray::AddAfter( ent, ind ); } @@ -244,10 +244,10 @@ inline void IFC_Array::AddAfter( stored_type ent, size_t ind ) { // --- template inline void IFC_Array::SetAt( stored_type ent, size_t ind ) { - if ( ent != NULL ) + if ( ent != c3d_null ) ent->AddRef(); Type * & el = RPArray::operator[](ind); - if ( el != NULL ) + if ( el != c3d_null ) el->Release(); el = ent; } diff --git a/C3d/Include/templ_im_array.h b/C3d/Include/templ_im_array.h index a15a6ae..5e625e0 100644 --- a/C3d/Include/templ_im_array.h +++ b/C3d/Include/templ_im_array.h @@ -73,8 +73,8 @@ public: void RemoveInd ( size_t delIndex, bool completely = true ); // \ru удалить элемент из массива \en delete an element from array void RemoveObj ( const size_t & delObject, bool completely = true ); // \ru удалить элемент из массива \en delete an element from array - Type * ReindexInd( size_t ind, size_t * = NULL ); // \ru заменить элемент с упорядочиванием по массиву \en replace element with sorting - size_t ReindexObj( Type * ent, size_t * = NULL ); // \ru заменить элемент с упорядочиванием по массиву \en replace element with sorting + Type * ReindexInd( size_t ind, size_t * = c3d_null ); // \ru заменить элемент с упорядочиванием по массиву \en replace element with sorting + size_t ReindexObj( Type * ent, size_t * = c3d_null ); // \ru заменить элемент с упорядочиванием по массиву \en replace element with sorting Type * ReindexMyInd( size_t ); // \ru заменить элемент с упорядочиванием по массиву \en replace element with sorting diff --git a/C3d/Include/templ_iterator.h b/C3d/Include/templ_iterator.h index 5292cb1..5377d21 100644 --- a/C3d/Include/templ_iterator.h +++ b/C3d/Include/templ_iterator.h @@ -53,9 +53,9 @@ public: /// \ru Сброс итератора. \en Reset iterator. virtual void Restart() { index = 0; } /// \ru Получить текущий элемент и сдвинуть итератор на следующий. \en Get the current element and move an iterator to the next. - virtual Type * operator ++(int) { return (index < items.Count()) ? items[index++] : NULL; } + virtual Type * operator ++(int) { return (index < items.Count()) ? items[index++] : c3d_null; } /// \ru Получить текущий элемент \en Get the current element - virtual Type * operator() () const { return (index < items.Count()) ? items[index] : NULL; } + virtual Type * operator() () const { return (index < items.Count()) ? items[index] : c3d_null; } private: // \ru не реализовано \en not implemented PointersArrayIterator & operator = ( const PointersArrayIterator & ); diff --git a/C3d/Include/templ_kdtree.h b/C3d/Include/templ_kdtree.h index dcec6f7..ba3c8f4 100644 --- a/C3d/Include/templ_kdtree.h +++ b/C3d/Include/templ_kdtree.h @@ -235,7 +235,7 @@ inline bool PriorityQueue::Initialize( size_t _maxSize ) elements = new Element[maxSize]; } catch ( ... ) { - elements = NULL; + elements = c3d_null; maxSize = count = 0; C3D_CONTROLED_THROW; return false; diff --git a/C3d/Include/templ_lis_array.h b/C3d/Include/templ_lis_array.h index 810a74b..ffb078a 100644 --- a/C3d/Include/templ_lis_array.h +++ b/C3d/Include/templ_lis_array.h @@ -176,7 +176,7 @@ inline LiSArray & LiSArray::operator = ( const LiSArray & o ) set_array_size( *this, o.count ); // \ru обеспечить память на такое кол-во элементов \en allocate memory for the given number of elements count = o.count; C3D_ASSERT( count < 254 ); - if ( count > 0 && parr != NULL ) + if ( count > 0 && parr != c3d_null ) memcpy( parr, o.parr, count * sizeof(Type) ); return *this; @@ -190,7 +190,7 @@ inline LiSArray & LiSArray::operator += ( const LiSArray & o ) { if ( o.count ) { set_array_size( *this, count + o.count ); // \ru обеспечить память на такое кол-во элементов \en allocate memory for the given number of elements - if ( parr != NULL ) + if ( parr != c3d_null ) memcpy( parr+count, o.parr, o.count * sizeof(Type) ); count = (uint8)(count + o.count); diff --git a/C3d/Include/templ_multimap.h b/C3d/Include/templ_multimap.h index 0bdf1cd..afdc568 100644 --- a/C3d/Include/templ_multimap.h +++ b/C3d/Include/templ_multimap.h @@ -94,7 +94,7 @@ private: }; template struct Null { // \ru Нуль указателей. \en Null of pointers. - static inline T* val() { return NULL; } + static inline T* val() { return c3d_null; } }; // \ru LF_Linux: 25.03.11 g++ выдает ошибку на этот код - не использованы KeyType, ValType в полной специализации шаблона. // Однако непонятно, зачем нужна эта полная специализация - общая частичная специализация для тривиальных типов вполне подойдет. @@ -113,9 +113,9 @@ public: Pair * m_MaxPtr; public: - Iterator() : m_Ptr( NULL ), m_MaxPtr( NULL ) {} + Iterator() : m_Ptr( c3d_null ), m_MaxPtr( c3d_null ) {} Iterator( const Iterator & iter ) : m_Ptr( iter.m_Ptr ), m_MaxPtr( iter.m_MaxPtr ) {} - Iterator( const SArray & m_Pairs, const Pair & pair ) : m_Ptr( NULL ), m_MaxPtr( NULL ) + Iterator( const SArray & m_Pairs, const Pair & pair ) : m_Ptr( c3d_null ), m_MaxPtr( c3d_null ) { const size_t count = m_Pairs.Count(); if ( count > 0 ) { @@ -135,10 +135,10 @@ public: } } Iterator( const SArray & m_Pairs, const Iterator & iter1, const Iterator & iter2 ) // range - : m_Ptr( NULL ), m_MaxPtr( NULL ) + : m_Ptr( c3d_null ), m_MaxPtr( c3d_null ) { const size_t count = m_Pairs.Count(); - if ( count > 0 && iter1.m_Ptr != NULL ) { + if ( count > 0 && iter1.m_Ptr != c3d_null ) { size_t idx1 = MultiMap::LowerBoundEx( m_Pairs, iter1.m_Ptr->m_key ); size_t temp = idx1; while ( temp < m_Pairs.Count() && m_Pairs[temp].m_key == iter1.m_Ptr->m_key ) { @@ -149,7 +149,7 @@ public: temp++; } size_t idx2 = SYS_MAX_T; - if ( iter2.m_Ptr != NULL ) { + if ( iter2.m_Ptr != c3d_null ) { idx2 = MultiMap::UpperBoundEx( m_Pairs, iter2.m_Ptr->m_key ); if ( idx2 < m_Pairs.Count() ) { if ( idx2 > 0) diff --git a/C3d/Include/templ_p_array.h b/C3d/Include/templ_p_array.h index 518df40..ddfc5cc 100644 --- a/C3d/Include/templ_p_array.h +++ b/C3d/Include/templ_p_array.h @@ -52,13 +52,13 @@ public : PArray() : RPArray() , owns( true ) - , nowDeletedElem(0) + , nowDeletedElem(c3d_null) {} /// \ru Конструктор. \en Constructor. PArray( size_t i_upper, uint16 i_delta = 1, bool shouldDelete = true )//, bool shouldNullSet = false ) : RPArray( i_upper, i_delta )//, shouldNullSet ) , owns( shouldDelete ) - , nowDeletedElem(0) + , nowDeletedElem(c3d_null) {} /// \ru Деструктор. \en Destructor. virtual ~PArray(); @@ -221,7 +221,7 @@ private: // --- template inline PArray::~PArray() { - PRECONDITION( nowDeletedElem == 0 ); + PRECONDITION( nowDeletedElem == c3d_null ); if ( owns ) destroy_array( *this ); } @@ -232,7 +232,7 @@ inline PArray::~PArray() { // --- template inline void PArray::Flush( DelType del ) { - PRECONDITION( nowDeletedElem == 0 ); + PRECONDITION( nowDeletedElem == c3d_null ); if ( del==Delete || (del==defDelete && owns) ) destroy_array( *this ); @@ -289,10 +289,10 @@ inline Type * PArray::RemoveInd( size_t delIndex, DelType del ) { // --- template inline Type * PArray::RemoveObj( Type * delObject, DelType del ) { - PRECONDITION( nowDeletedElem == 0 ); // \ru временно, для отладки \en temporarily, for debugging + PRECONDITION( nowDeletedElem == c3d_null ); // \ru временно, для отладки \en temporarily, for debugging size_t i = find_in_array( *this, delObject ); - return (i != SYS_MAX_T) ? RemoveInd(i, del) : 0; + return (i != SYS_MAX_T) ? RemoveInd(i, del) : c3d_null; } @@ -326,7 +326,7 @@ void destroy_array( PArray & arr ) { // --- template bool set_Parray_size( PArray & arr, size_t newSize, bool clear ) { - PRECONDITION( arr.nowDeletedElem == 0 ); // \ru временно \en temporarily + PRECONDITION( arr.nowDeletedElem == c3d_null ); // \ru временно \en temporarily if ( clear && arr.count ) arr.Flush(); // \ru будет arr.count = 0; \en arr.count will be equal 0; @@ -354,7 +354,7 @@ bool set_Parray_size( PArray & arr, size_t newSize, bool clear ) { // --- //template //inline void PIArray::ForEachI( IteratorFunc func ) const { -// \ru C3D_ASSERT( PArray::nowDeletedElem == 0 ); // временно \en C3D_ASSERT( PArray::nowDeletedElem == 0 ); // temporarily +// \ru C3D_ASSERT( PArray::nowDeletedElem == c3d_null ); // временно \en C3D_ASSERT( PArray::nowDeletedElem == c3d_null ); // temporarily //#if !defined ( __INTEL_COMPILER ) /// for Intel C++ Compiler // for_each_in_array( *this, func ); //#endif // __INTEL_COMPILER @@ -366,7 +366,7 @@ bool set_Parray_size( PArray & arr, size_t newSize, bool clear ) { // --- template inline void PIArray::ForEachI( ParIteratorFunc func, void * pars ) const { - PRECONDITION( PArray::nowDeletedElem == 0 ); + PRECONDITION( PArray::nowDeletedElem == c3d_null ); for_each_in_array( *this, func, pars ); } @@ -376,7 +376,7 @@ inline void PIArray::ForEachI( ParIteratorFunc func, void * pars ) const { // --- template inline size_t PIArray::FirstThatI( CompareFunc func, void * pars, size_t from ) const { - PRECONDITION( PArray::nowDeletedElem == 0 ); + PRECONDITION( PArray::nowDeletedElem == c3d_null ); return first_that_in_array( *this, func, pars, from ); } @@ -386,7 +386,7 @@ inline size_t PIArray::FirstThatI( CompareFunc func, void * pars, size_t f // --- //template //inline void PMIArray::ForEach( IteratorMemFunc func ) const { -// \ru C3D_ASSERT( PArray::nowDeletedElem == 0 ); +// \ru C3D_ASSERT( PArray::nowDeletedElem == c3d_null ); //#if !defined ( __INTEL_COMPILER ) /// for Intel C++ Compiler // for_each_in_array( *this, func ); //#endif // __INTEL_COMPILER @@ -398,7 +398,7 @@ inline size_t PIArray::FirstThatI( CompareFunc func, void * pars, size_t f // --- template inline void PMIArray::ForEach( ParIteratorMemFunc func, void * pars ) const { - PRECONDITION( PArray::nowDeletedElem == 0 ); + PRECONDITION( PArray::nowDeletedElem == c3d_null ); for_each_in_array( *this, func, pars ); } @@ -408,7 +408,7 @@ inline void PMIArray::ForEach( ParIteratorMemFunc func, void * pars ) cons // --- template inline size_t PMIArray::FirstThat( CompareMemFunc func, void * pars, size_t from ) const { - PRECONDITION( PArray::nowDeletedElem == 0 ); + PRECONDITION( PArray::nowDeletedElem == c3d_null ); return first_that_in_array( *this, func, pars, from ); } diff --git a/C3d/Include/templ_p_array_rw.h b/C3d/Include/templ_p_array_rw.h index 4b42c85..0757c5a 100644 --- a/C3d/Include/templ_p_array_rw.h +++ b/C3d/Include/templ_p_array_rw.h @@ -45,7 +45,7 @@ reader & operator >> ( reader & in, PArray & ref ) const Type ** parr = ref.GetAddr(); - if ( parr != NULL ) + if ( parr != c3d_null ) { ref.count = 0; // \ru Err #69421 сколько штук реально прочитано \en Err #69421 how many elements were actually counted @@ -53,7 +53,7 @@ reader & operator >> ( reader & in, PArray & ref ) // \ru поочередное чтение объектов массива \en successive reading of objects from an array for ( i = 0; i < count && in.good(); i++ ) { - Type * el = NULL; + Type * el = c3d_null; in >> el; parr[i] = el; @@ -121,7 +121,7 @@ writer & operator << ( writer& out, const PArray & ref ) template reader & operator >> ( reader & in, PArray *& ptr ) { - ptr = NULL; + ptr = c3d_null; if ( in.good() ) { if ( in.MathVersion() < 0x06000012L ) ptr = new PArray; diff --git a/C3d/Include/templ_pointer.h b/C3d/Include/templ_pointer.h index dbcd2f3..0aa987d 100644 --- a/C3d/Include/templ_pointer.h +++ b/C3d/Include/templ_pointer.h @@ -11,11 +11,6 @@ #define __TEMPL_POINTER_H -#ifndef NULL -#define NULL 0 -#endif - - #include @@ -43,31 +38,31 @@ public: T & operator * () const { return *P; } operator T* () const { return P; } - int operator ! () const { return (P == NULL);} - T * Relinquish() {T * p = P; P = NULL; return p;} + int operator ! () const { return (P == c3d_null);} + T * Relinquish() {T * p = P; P = c3d_null; return p;} T * Get() { return P; } const T * Get() const { return P; } protected: TPointerBase( T * pointer ) : P(pointer) {} - TPointerBase() : P( NULL ) {} + TPointerBase() : P( c3d_null ) {} protected: T * P; private: void * operator new( size_t ); // prohibit use of new - void operator delete( void * p ) { ((TPointerBase*)p)->P = NULL; } + void operator delete( void * p ) { ((TPointerBase*)p)->P = c3d_null; } // СМВ К15 MVS 2012 private: TPointerBase( const TPointerBase & other ); #ifdef C3D_STANDARD_CXX_11_PARTIAL public: - TPointerBase( TPointerBase && _Right ): P( _Right.P ) { _Right.P = nullptr; } + TPointerBase( TPointerBase && _Right ): P( _Right.P ) { _Right.P = c3d_null; } TPointerBase & operator = ( TPointerBase && _Right ) { if ( this != &_Right ) - { P = _Right.P; _Right.P = nullptr; } + { P = _Right.P; _Right.P = c3d_null; } return *this; } #endif // C3D_STANDARD_CXX_11_PARTIAL @@ -103,8 +98,8 @@ public: } return *this; } - T * operator ->() { return TPointerBase::P; } // Could throw exception if P==0 - const T * operator ->() const { return TPointerBase::P; } // Could throw exception if P==0 + T * operator ->() { return TPointerBase::P; } // Could throw exception if P==c3d_null + const T * operator ->() const { return TPointerBase::P; } // Could throw exception if P==c3d_null // СМВ К15 MVS 2012 #ifndef __MOBILE_VERSION__ @@ -123,7 +118,7 @@ public: { delete TPointerBase::P; TPointerBase::P = _Right.P; - _Right.P = nullptr; + _Right.P = c3d_null; } return *this; } @@ -165,7 +160,7 @@ public: } return *this; } - T * operator ->() { return TPointerBase::P; } // Could throw exception if P==0 + T * operator ->() { return TPointerBase::P; } // Could throw exception if P==c3d_null bool GetOwn() const { return own; } void SetOwn( bool val ) { own = val; } @@ -187,7 +182,7 @@ public: delete TPointerBase::P; TPointerBase::P = _Right.P; own = _Right.own; - _Right.P = nullptr; + _Right.P = c3d_null; } return *this; } @@ -226,7 +221,7 @@ public: } return *this; } - T & operator []( size_t i ) { return TPointerBase::P[i]; } // Could throw exception if P==0 + T & operator []( size_t i ) { return TPointerBase::P[i]; } // Could throw exception if P==c3d_null // СМВ К15 MVS 2012 //private: // g++4.7 KUbuntu @@ -242,7 +237,7 @@ public: { delete[] TPointerBase::P; TPointerBase::P = _Right.P; - _Right.P = nullptr; + _Right.P = c3d_null; } return *this; } @@ -284,7 +279,7 @@ public: { delete[] P; P = _Right.P; - _Right.P = nullptr; + _Right.P = c3d_null; } return *this; } diff --git a/C3d/Include/templ_psrt_array.h b/C3d/Include/templ_psrt_array.h index bf87551..fcdd487 100644 --- a/C3d/Include/templ_psrt_array.h +++ b/C3d/Include/templ_psrt_array.h @@ -108,13 +108,13 @@ public: void DetachRng ( size_t, size_t ); // \ru отцепить из массива диапазон указателей \en detach a range of pointers from array typedef int (*PArSortCompFunc)( const Type **, const Type ** ); - void Sort ( PArSortCompFunc, PArrayReg * = NULL ); // \ru быстрая сортировка в любом диапазоне \en quick sorting in any range + void Sort ( PArSortCompFunc, PArrayReg * = c3d_null ); // \ru быстрая сортировка в любом диапазоне \en quick sorting in any range void Sort ( const void *, PArSortRangeCompFunc, size_t armin = 0, size_t armax = SYS_MAX_T ); // \ru быстрая сортировка в заданном диапазоне \en quick sorting in a given range bool Find ( const Type *, PArSortAddress, size_t &, size_t armin = 0, size_t armax = SYS_MAX_T ); // \ru найти адрес в любом поле объекта \en find address in any field of object bool Find ( const size_t, PArSortAddress, size_t &, size_t armin = 0, size_t armax = SYS_MAX_T ); // \ru найти адрес в любом поле объекта \en find address in any field of object bool Find ( const void *, PArSortObj, size_t &, size_t armin = 0, size_t armax = SYS_MAX_T ); // \ru найти данный объект в сортированном массиве \en find a given object in sorted array - int FindObj ( const Type *, PArSortCompFunc, size_t &, PArrayReg * = NULL ) const; // \ru найти данный объект в сортированном массиве \en find a given object in sorted array + int FindObj ( const Type *, PArSortCompFunc, size_t &, PArrayReg * = c3d_null ) const; // \ru найти данный объект в сортированном массиве \en find a given object in sorted array Type * AddSort ( Type *, PArSortCompFunc, size_t & ); // \ru добавить элемент в сортированном порядке \en add element in sorted order void Inverse (); // \ru инверсия массива \en inversion of array @@ -210,7 +210,7 @@ inline void PArraySort::Insert( size_t index, Type * ent ) template void PArraySort::RemoveRng( size_t startIndex, size_t countRng, DelType del ) { - C3D_ASSERT( PArray::nowDeletedElem == 0 ); // \ru ЯТ - временно \en ЯТ - temporarily + C3D_ASSERT( PArray::nowDeletedElem == c3d_null ); // \ru ЯТ - временно \en ЯТ - temporarily // \ru если диапазон не пуст и индекс принадлежит массиву \en if range is not empty and index belongs to array if ( countRng && startIndex < PArray::count ) { @@ -226,14 +226,14 @@ void PArraySort::RemoveRng( size_t startIndex, size_t countRng, DelType de size_t i = 0; for( const Type ** parr = PArray::GetAddr() + startIndex; i < countRng; i++, parr++ ) { Type * d = (Type*)*parr; - *parr = 0; // \ru сначала обнулим указатель ... \en set pointer to null ... + *parr = c3d_null; // \ru сначала обнулим указатель ... \en set pointer to null ... C3D_ASSERT( !d || PArray::nowDeletedElem != d ); // \ru ЯТ - временно \en ЯТ - temporarily PArray::nowDeletedElem = d; delete d; - PArray::nowDeletedElem = 0; + PArray::nowDeletedElem = c3d_null; } } @@ -293,7 +293,7 @@ inline size_t PArraySort::CalculateDelta() template inline void PArraySort::CatchMemory() { - PRECONDITION( PArray::nowDeletedElem == 0 ); // \ru ЯТ - временно \en ЯТ - temporarily + PRECONDITION( PArray::nowDeletedElem == c3d_null ); // \ru ЯТ - временно \en ЯТ - temporarily if ( PArray::upper == PArray::count ) set_Parray_size( *this, PArray::upper + CalculateDelta(), false/*clear*/ ); } @@ -305,7 +305,7 @@ inline void PArraySort::CatchMemory() template inline void PArraySort::Reserve( size_t n ) { - C3D_ASSERT( PArray::nowDeletedElem == 0 ); // \ru ЯТ - временно \en ЯТ - temporarily + C3D_ASSERT( PArray::nowDeletedElem == c3d_null ); // \ru ЯТ - временно \en ЯТ - temporarily // \ru если требуется памяти больше, чем есть сейчас, и больше, чем оказалось бы \en if there is required more memory that exists at the moment and more than it would become // \ru при следующем захвате, то захватить ее \en on the next allocation then allocate it size_t space = PArray::upper - PArray::count; @@ -320,7 +320,7 @@ inline void PArraySort::Reserve( size_t n ) template inline void PArraySort::Sort( PArSortCompFunc fcmp, PArrayReg * arReg ) { - PRECONDITION( PArray::nowDeletedElem == 0 ); // \ru ЯТ - временно \en ЯТ - temporarily + PRECONDITION( PArray::nowDeletedElem == c3d_null ); // \ru ЯТ - временно \en ЯТ - temporarily if ( PArray::count > 1 ) { // \ru если хотя бы два элемента в массиве \en if there are at least two elements in array typedef int (*QCompFunc)( const void*, const void* ); if ( !arReg ) { @@ -345,7 +345,7 @@ inline void PArraySort::Sort( PArSortCompFunc fcmp, PArrayReg * arReg ) template inline void PArraySort::Sort( const void * obj, PArSortRangeCompFunc fcmp, size_t armin, size_t armax ) { - C3D_ASSERT( PArray::nowDeletedElem == 0 ); // \ru ЯТ - временно \en ЯТ - temporarily + C3D_ASSERT( PArray::nowDeletedElem == c3d_null ); // \ru ЯТ - временно \en ЯТ - temporarily if ( PArray::count > 1 ) { // \ru если хотя бы два элемента в массиве \en if there are at least two elements in array if ( armax > armin ) { // \ru если диапазон сортировки правильный \en if the sorting range is correct if ( armin < PArray::count - 1 ) { // \ru если минимальная граница меньше максимального элемента в массиве \en if the minimum bound is less than the maximum element in array @@ -364,7 +364,7 @@ inline void PArraySort::Sort( const void * obj, PArSortRangeCompFunc fcmp, template void PArraySort::SortRange( const void * obj, PArSortRangeCompFunc fcmp, size_t ilo, size_t ihi ) { - C3D_ASSERT( PArray::nowDeletedElem == 0 ); // \ru ЯТ - временно \en ЯТ - temporarily + C3D_ASSERT( PArray::nowDeletedElem == c3d_null ); // \ru ЯТ - временно \en ЯТ - temporarily size_t lo = ilo; // \ru нижняя граница \en lower bound size_t hi = ihi; // \ru верхняя граница \en upper bound @@ -404,7 +404,7 @@ template inline bool PArraySort::Find( const size_t address, PArSortAddress fadr, size_t & findedAddress, size_t armin, size_t armax ) { - C3D_ASSERT( PArray::nowDeletedElem == 0 ); // \ru ЯТ - временно \en ЯТ - temporarily + C3D_ASSERT( PArray::nowDeletedElem == c3d_null ); // \ru ЯТ - временно \en ЯТ - temporarily bool res = false; findedAddress = SYS_MAX_T/*OV_x64 -1*/; @@ -432,7 +432,7 @@ inline bool PArraySort::Find( const size_t address, PArSortAddress fadr, s template inline bool PArraySort::Find( const Type * member, PArSortAddress fadr, size_t & findedAddress, size_t armin, size_t armax ) { - C3D_ASSERT( PArray::nowDeletedElem == 0 ); // \ru ЯТ - временно \en ЯТ - temporarily + C3D_ASSERT( PArray::nowDeletedElem == c3d_null ); // \ru ЯТ - временно \en ЯТ - temporarily return Find( fadr(member), fadr, findedAddress, armin, armax ); } @@ -443,7 +443,7 @@ inline bool PArraySort::Find( const Type * member, PArSortAddress fadr, si template inline bool PArraySort::Find( const void * obj, PArSortObj fobj, size_t & findedId, size_t armin, size_t armax ) { - C3D_ASSERT( PArray::nowDeletedElem == 0 ); // \ru ЯТ - временно \en ЯТ - temporarily + C3D_ASSERT( PArray::nowDeletedElem == c3d_null ); // \ru ЯТ - временно \en ЯТ - temporarily bool res = false; @@ -472,7 +472,7 @@ inline bool PArraySort::Find( const void * obj, PArSortObj fobj, size_t & template bool PArraySort::FindObject( const void * obj, PArSortObj fobj, size_t & findedId, size_t armin, size_t armax ) { - C3D_ASSERT( PArray::nowDeletedElem == 0 ); // \ru ЯТ - временно \en ЯТ - temporarily + C3D_ASSERT( PArray::nowDeletedElem == c3d_null ); // \ru ЯТ - временно \en ЯТ - temporarily bool res = false; // \ru флаг, который указывает существует ли искомый объект в массиве \en flag which specifies whether the required object is in array @@ -513,7 +513,7 @@ bool PArraySort::FindObject( const void * obj, PArSortObj fobj, size_t & f template bool PArraySort::FindAddress( const size_t address, PArSortAddress fadr, size_t & findedAddress, size_t armin, size_t armax ) { - C3D_ASSERT( PArray::nowDeletedElem == 0 ); // \ru ЯТ - временно \en ЯТ - temporarily + C3D_ASSERT( PArray::nowDeletedElem == c3d_null ); // \ru ЯТ - временно \en ЯТ - temporarily bool res = false; // \ru флаг, который указывает существует ли искомый адресс в массиве \en flag which specifies whether the required address is in array size_t id = armax - armin; // \ru количество элементов в диапазоне \en the number of elements in range @@ -612,7 +612,7 @@ bool PArraySort::FindAddress( const size_t address, PArSortAddress fadr, s template int PArraySort::FindObj( const Type * obj, PArSortCompFunc fcmp, size_t & iFnd, PArrayReg * arReg ) const { - PRECONDITION( PArray::nowDeletedElem == 0 ); // \ru ЯТ - временно \en ЯТ - temporarily + PRECONDITION( PArray::nowDeletedElem == c3d_null ); // \ru ЯТ - временно \en ЯТ - temporarily if ( (PArray::count) > 0 ) { size_t id = PArray::count; // \ru количество элементов в диапазоне \en the number of elements in range id--; @@ -686,7 +686,7 @@ int PArraySort::FindObj( const Type * obj, PArSortCompFunc fcmp, size_t & template inline Type * PArraySort::AddSort( Type * obj, PArSortCompFunc fcmp, size_t & iFnd ) { - PRECONDITION( PArray::nowDeletedElem == 0 ); // \ru ЯТ - временно \en ЯТ - temporarily + PRECONDITION( PArray::nowDeletedElem == c3d_null ); // \ru ЯТ - временно \en ЯТ - temporarily int ires = FindObj( obj, fcmp, iFnd ); if ( (ires == -2) || (ires == 2) ) { iFnd = ( (ires == -2) ? 0 : PArray::count ); @@ -696,7 +696,7 @@ inline Type * PArraySort::AddSort( Type * obj, PArSortCompFunc fcmp, size_ if ( ires == -1 ) AddAt( obj, iFnd ); - return ires ? (*this)/*parr*/[iFnd] : NULL; + return ires ? (*this)/*parr*/[iFnd] : c3d_null; } @@ -706,7 +706,7 @@ inline Type * PArraySort::AddSort( Type * obj, PArSortCompFunc fcmp, size_ template void PArraySort::Inverse() { - C3D_ASSERT( PArray::nowDeletedElem == 0 ); // \ru ЯТ - временно \en ЯТ - temporarily + C3D_ASSERT( PArray::nowDeletedElem == c3d_null ); // \ru ЯТ - временно \en ЯТ - temporarily if ( PArray::count ) { size_t endI = PArray::count - 1; // \ru проверено count > 0 \en count > 0 validated diff --git a/C3d/Include/templ_rp_array.h b/C3d/Include/templ_rp_array.h index bbf8b7e..528cb7f 100644 --- a/C3d/Include/templ_rp_array.h +++ b/C3d/Include/templ_rp_array.h @@ -105,7 +105,7 @@ public: /// \ru Оператор доступа по индексу. \en Access by index operator. Type *& operator []( size_t loc ) const; /// \ru Получить адрес последнего элемента в массиве. \en Get the address of the last element in the array. - Type * GetLast() const { return ((count > 0) ? parr[count-1] : (Type*)NULL); } + Type * GetLast() const { return ((count > 0) ? parr[count-1] : (Type*)c3d_null); } public: // \ru унификация с вектором STL \en unification with STL vector bool empty() const { return count == 0; } @@ -241,7 +241,7 @@ inline RPArray::RPArray( RPArray && _Right ) _Right.count = 0; _Right.upper = 0; _Right.delta = 1; - _Right.parr = nullptr; + _Right.parr = c3d_null; } //------------------------------------------------------------------------------ @@ -691,7 +691,7 @@ bool set_Rarray_size( RPArray & arr, size_t newSize ) } catch ( ... ) { if ( newSize == 0 )// \ru Не смогли корректно удалить arr.parr. \en Failed to delete arr.parr correctly. - arr.parr = NULL; + arr.parr = c3d_null; C3D_CONTROLED_THROW; return false; } diff --git a/C3d/Include/templ_rp_array_rw.h b/C3d/Include/templ_rp_array_rw.h index fe85cc2..b34a3c2 100644 --- a/C3d/Include/templ_rp_array_rw.h +++ b/C3d/Include/templ_rp_array_rw.h @@ -38,7 +38,7 @@ reader & operator >> ( reader & in, RPArray & ref ) const Type ** parr = ref.GetAddr(); - if ( parr != NULL ) { + if ( parr != c3d_null ) { size_t i; // \ru поочередное чтение объектов массива \en successive reading of objects from an array for ( i = 0; i < count && in.good(); i++ ) { @@ -88,7 +88,7 @@ writer& operator << ( writer& out, const RPArray& ref ) { // --- template reader& operator >> ( reader& in, RPArray*& ptr ) { - ptr = NULL; + ptr = c3d_null; if ( in.good() ) { uint8 existPtr; in >> existPtr; diff --git a/C3d/Include/templ_rp_stack.h b/C3d/Include/templ_rp_stack.h index 0f01451..a71110b 100644 --- a/C3d/Include/templ_rp_stack.h +++ b/C3d/Include/templ_rp_stack.h @@ -31,7 +31,7 @@ public: public: void Push( Type & obj ); ///< \ru Добавить элемент в стек. \en Add an element to the stack. - Type * Pop(); ///< \ru Извлечь один элемент стека, если возвращаетя NULL, значит достигнуто дно стека. \en Retrieve one element from the stack, if NULL is returned then the bottom of stack is reached. + Type * Pop(); ///< \ru Извлечь один элемент стека, если возвращаетя c3d_null, значит достигнуто дно стека. \en Retrieve one element from the stack, if c3d_null is returned then the bottom of stack is reached. Type * Top() const; ///< \ru Верхний элемент стека. \en The top element of the stack. // \ru Оставить доступными следующие методы: \en Leave an access to the next methods: @@ -65,7 +65,7 @@ Type * RPStack::Pop() { RPArray::count--; return ret; } - return NULL; + return c3d_null; } @@ -77,7 +77,7 @@ Type * RPStack::Top() const { if ( RPArray::count > 0 ) { return (*this)[RPArray::count-1]; } - return NULL; + return c3d_null; } diff --git a/C3d/Include/templ_rw_operator.h b/C3d/Include/templ_rw_operator.h index 7647336..aefad2e 100644 --- a/C3d/Include/templ_rw_operator.h +++ b/C3d/Include/templ_rw_operator.h @@ -21,7 +21,7 @@ template inline reader & ReadPtrByRefDCtor ( reader & in, Type *& ptr ) { - ptr = NULL; + ptr = c3d_null; char exist; in >> exist; @@ -42,7 +42,7 @@ inline reader & ReadPtrByRefDCtor ( reader & in, Type *& ptr ) template inline reader & ReadPtrByRefRWCtor ( reader & in, Type *& ptr ) { - ptr = NULL; + ptr = c3d_null; char exist; in >> exist; @@ -62,7 +62,7 @@ inline reader & ReadPtrByRefRWCtor ( reader & in, Type *& ptr ) template inline writer & WritePtrByRef ( writer & out, const Type * ptr ) { - char exist = (ptr != NULL); + char exist = (ptr != c3d_null); out << exist; if ( exist ) diff --git a/C3d/Include/templ_s_array.h b/C3d/Include/templ_s_array.h index 7696137..b26b7ea 100644 --- a/C3d/Include/templ_s_array.h +++ b/C3d/Include/templ_s_array.h @@ -390,13 +390,19 @@ inline bool SArray::AddMemory( size_t n ) { template inline void SArray::resize( size_t n, Type val ) { - size_t n0 = count; - if ( AddItems(n) != 0 ) { - if ( parr != NULL ) { - for ( size_t k = n0; k < count; k++ ) - parr[k] = val; + if ( n > count ) { + size_t n0 = count; + if ( AddItems( n - count ) != 0 ) { + if ( parr != c3d_null ) { + for ( size_t k = n0; k < n; ++k ) + parr[k] = val; + } } } + else if ( n < count ) { + count = n; + Adjust(); + } } @@ -417,7 +423,7 @@ template inline Type * SArray::Add() { if ( CatchMemory() ) return &parr[ count++ ]; - return NULL; + return c3d_null; } @@ -438,7 +444,7 @@ inline Type * SArray::Add( const Type & ent ) { if ( CatchMemory() ) return static_cast( memcpy(static_cast(parr+count++), static_cast(&ent), sizeof(Type)) ); - return NULL; + return c3d_null; } @@ -455,7 +461,7 @@ inline Type * SArray::AddAfter( const Type & ent, size_t index ) { return (Type*)memcpy( parr + index + 1, &ent, sizeof(Type) ); } - return NULL; + return c3d_null; } @@ -477,7 +483,7 @@ inline Type * SArray::InsertInd( size_t index, const Type & ent ) { return (Type*)memcpy( parr + index, &ent, sizeof(Type) ); // \ru записываем новый элемент \en writing new element } - return NULL; + return c3d_null; } @@ -495,7 +501,7 @@ inline Type * SArray::InsertInd( size_t index ) { return (Type*)( parr + index ); // \ru записываем новый элемент \en writing new element } - return NULL; + return c3d_null; } @@ -819,7 +825,7 @@ bool set_array_size( SArray & arr, size_t newSize, bool clear ) #else //YYK V15 #77319 Type * p_tmp = newSize ? (Type*)new char[ newSize * sizeOfType ] : 0; #ifdef C3D_WINDOWS //_MSC_VER // win - Type * p_tmp = newSize ? (Type*)_aligned_malloc( newSize * sizeOfType, 16 ) : NULL; + Type * p_tmp = newSize ? (Type*)_aligned_malloc( newSize * sizeOfType, 16 ) : c3d_null; #else Type * p_tmp = newSize ? (Type*)new char[newSize * sizeOfType] : 0; #endif // win @@ -851,7 +857,7 @@ bool set_array_size( SArray & arr, size_t newSize, bool clear ) } catch ( ... ) { if ( newSize == 0 ) { // \ru Не смогли корректно удалить arr.parr. \en Failed to delete arr.parr correctly. - arr.parr = NULL; + arr.parr = c3d_null; arr.upper = newSize; } newSize = 0; // \ru т.к. ниже есть код с применением newSize \en because there is a code with using of newSize below diff --git a/C3d/Include/templ_s_array_rw.h b/C3d/Include/templ_s_array_rw.h index 75d9eaf..5527664 100644 --- a/C3d/Include/templ_s_array_rw.h +++ b/C3d/Include/templ_s_array_rw.h @@ -41,7 +41,7 @@ reader & operator >> ( reader & in, SArray & ref ) ref.SetSize( count, true/*clear*/ ); C3D_ASSERT( ref.upper >= count ); - if ( ref.GetAddr() != NULL ) { + if ( ref.GetAddr() != c3d_null ) { size_t i; for ( i = 0; i < count && in.good(); i++ ) { @@ -95,7 +95,7 @@ writer& operator << ( writer& out, const SArray& ref ) { // template reader& operator >> ( reader& in, SArray*& ptr ) { - ptr = NULL; + ptr = c3d_null; if ( in.good() ) { if ( in.MathVersion() < 0x06000012L ) ptr = new SArray; diff --git a/C3d/Include/templ_s_list.h b/C3d/Include/templ_s_list.h index 77af271..de0460d 100644 --- a/C3d/Include/templ_s_list.h +++ b/C3d/Include/templ_s_list.h @@ -101,10 +101,10 @@ public: explicit List( bool ownsEl = true ) : owns( ownsEl ) , count( 0 ) - , first( 0 ) - , last( 0 ) - , nowDelItem( 0 ) - , nowDelElem( 0 ) + , first( c3d_null ) + , last( c3d_null ) + , nowDelItem( c3d_null ) + , nowDelElem( c3d_null ) {} virtual ~List(); @@ -138,21 +138,21 @@ public: void Split(); // \ru разомкнуть список \en split the list size_t Count() const { - PRECONDITION( nowDelItem == 0 && nowDelElem == 0 ); + PRECONDITION( nowDelItem == c3d_null && nowDelElem == c3d_null ); return count; } // \ru дать количество элементов в списке \en get the number of elements in the list size_t ReCalc() { return recalc_list(*this); }// \ru пересчитать количество элементов в списке \en count the number of elements in the list bool IsEmpty () const { - PRECONDITION( nowDelItem == 0 && nowDelElem == 0 ); + PRECONDITION( nowDelItem == c3d_null && nowDelElem == c3d_null ); return first == 0; } // \ru проверить, пустой ли список \en check whether the list is empty bool IsExist( const Type * d ) const { return is_exist_in_list(*this, d);} // \ru найти элемент по равенству указателей \en find an element by the equality of pointers Type * GetFirstData() const { - PRECONDITION( nowDelItem == 0 && nowDelElem == 0 ); + PRECONDITION( nowDelItem == c3d_null && nowDelElem == c3d_null ); PRECONDITION( first ); return first->data; } // \ru получить данные первого элемента списка \en get the data of the first element of the list Type * GetLastData() const { - PRECONDITION( nowDelItem == 0 && nowDelElem == 0 ); + PRECONDITION( nowDelItem == c3d_null && nowDelElem == c3d_null ); PRECONDITION( last ); return last->data; } // \ru получить данные последнего элемента списка \en get the data of the last element of the list protected: @@ -223,26 +223,26 @@ protected: ListItem * prev; public: - LIterator() : list( 0 ), curr( 0 ), prev( 0 ) {} - LIterator( const List & l ) : list( 0 ), curr( 0 ), prev( 0 ) { Set(l); } + LIterator() : list( c3d_null ), curr( c3d_null ), prev( c3d_null ) {} + LIterator( const List & l ) : list( c3d_null ), curr( c3d_null ), prev( c3d_null ) { Set(l); } LIterator( const LIterator &i ) : list( i.list ), curr( i.curr ), prev( i.prev ) {} virtual ~LIterator() {} void Set( const List& l ) { list = (List*)&l; Restart(); } - void Restart() { PRECONDITION(list); curr = list->first; prev = 0; } - Type * GetData() const { return curr ? curr->data : 0; } + void Restart() { PRECONDITION(list); curr = list->first; prev = c3d_null; } + Type * GetData() const { return curr ? curr->data : c3d_null; } Type * GetDataAndGo(); // \ru взять данные и продвинуть итератор \en take the data and move the iterator List * GetList() const { return list; } Type& operator* () const { PRECONDITION(curr && curr->data ); return *curr->data; } - Type* operator () () const { return curr ? curr->data : 0; } + Type* operator () () const { return curr ? curr->data : c3d_null; } operator ListItem* () const { return curr; } operator ListItem& () const { PRECONDITION(curr); return *curr; } - Type* operator ++() { prev = curr; if (curr) {curr=curr->next; return curr ? curr->data : 0;} else return 0; } - Type* operator ++(int) { prev = curr; if (curr) {Type* ret=curr->data; curr=curr->next; return ret;} else return 0; } - Type* operator --() { PRECONDITION(list); curr=prev; prev=list->findPrev(prev); return curr ? curr->data : 0; } - Type* operator --(int) { PRECONDITION(list); if (curr) {Type* ret=curr->data; curr=prev; prev=list->findPrev(prev); return ret;} else return 0; } - Type* operator ->() { return curr ? curr->data : 0; } + Type* operator ++() { prev = curr; if (curr) {curr=curr->next; return curr ? curr->data : c3d_null;} else return c3d_null; } + Type* operator ++(int) { prev = curr; if (curr) {Type* ret=curr->data; curr=curr->next; return ret;} else return c3d_null; } + Type* operator --() { PRECONDITION(list); curr=prev; prev=list->findPrev(prev); return curr ? curr->data : c3d_null; } + Type* operator --(int) { PRECONDITION(list); if (curr) {Type* ret=curr->data; curr=prev; prev=list->findPrev(prev); return ret;} else return c3d_null; } + Type* operator ->() { return curr ? curr->data : c3d_null; } bool operator == ( const LIterator &o ) const { return list==o.list && curr==o.curr; } bool operator != ( const LIterator &o ) const { return ! operator == (o); } @@ -258,7 +258,7 @@ public: void Remove( DelType = defDelete ); // \ru удалить элемент списка и продвинуть вперед \en delete an element from the list and move forward void Detach(); // \ru отсоединить элемент списка \en detach an element from the list - bool IsOK() const { return curr != 0; } + bool IsOK() const { return curr != c3d_null; } ListItem * Next() const { PRECONDITION(curr); return curr->next; } void Go() { prev = curr; if ( curr ) curr = curr->next; } void GoLast() { PRECONDITION(list); curr = list->last; prev = list->findPrev(curr); } @@ -279,7 +279,7 @@ public: //--- template inline List::~List() { - PRECONDITION( nowDelItem == 0 && nowDelElem == 0 ); + PRECONDITION( nowDelItem == c3d_null && nowDelElem == c3d_null ); Remove(); } @@ -290,7 +290,7 @@ inline List::~List() { //--- template inline void List::Add( Type* data ) { - PRECONDITION( nowDelItem == 0 && nowDelElem == 0 ); + PRECONDITION( nowDelItem == c3d_null && nowDelElem == c3d_null ); if ( last ) last = new ListItem( data, *last ); @@ -306,7 +306,7 @@ inline void List::Add( Type* data ) { //--- template inline void List::Add( Type* data, const Type* after ) { - PRECONDITION( nowDelItem == 0 && nowDelElem == 0 ); + PRECONDITION( nowDelItem == c3d_null && nowDelElem == c3d_null ); add_to_list( *this, data, after ); } @@ -318,7 +318,7 @@ inline void List::Add( Type* data, const Type* after ) { template inline void List::Add( Type * data, bool /*check*/ ) { - PRECONDITION( nowDelItem == 0 && nowDelElem == 0 ); + PRECONDITION( nowDelItem == c3d_null && nowDelElem == c3d_null ); if ( !IsExist(data) ) Add( data ); } @@ -330,8 +330,8 @@ inline void List::Add( Type * data, bool /*check*/ ) template inline void List::Add( ListItem & item ) { - PRECONDITION( nowDelItem == 0 && nowDelElem == 0 ); - item.next = 0; + PRECONDITION( nowDelItem == c3d_null && nowDelElem == c3d_null ); + item.next = c3d_null; if ( last ) last->next = &item; @@ -350,7 +350,7 @@ inline void List::Add( ListItem & item ) template inline void List::AddAndEat( List & list ) { - PRECONDITION( nowDelItem == 0 && nowDelElem == 0 ); + PRECONDITION( nowDelItem == c3d_null && nowDelElem == c3d_null ); if ( list.first ) { @@ -365,7 +365,7 @@ inline void List::AddAndEat( List & list ) count += list.count; list.count = 0; - list.first = list.last = 0; + list.first = list.last = c3d_null; } } @@ -376,7 +376,7 @@ inline void List::AddAndEat( List & list ) template inline void List::Insert( Type * data ) { - PRECONDITION( nowDelItem == 0 && nowDelElem == 0 ); + PRECONDITION( nowDelItem == c3d_null && nowDelElem == c3d_null ); Insert( *new ListItem(data) ); } @@ -387,7 +387,7 @@ inline void List::Insert( Type * data ) template inline void List::Insert( ListItem & item ) { - PRECONDITION( nowDelItem == 0 && nowDelElem == 0 ); + PRECONDITION( nowDelItem == c3d_null && nowDelElem == c3d_null ); ListItem* old = first; @@ -407,7 +407,7 @@ inline void List::Insert( ListItem & item ) template inline void List::InsertAndEat( List & list ) { - PRECONDITION( nowDelItem == 0 && nowDelElem == 0 ); + PRECONDITION( nowDelItem == c3d_null && nowDelElem == c3d_null ); if ( list.first ) { if ( first ) { @@ -422,7 +422,7 @@ inline void List::InsertAndEat( List & list ) count += list.count; list.count = 0; - list.first = list.last = 0; + list.first = list.last = c3d_null; } } @@ -433,13 +433,13 @@ inline void List::InsertAndEat( List & list ) template inline bool List::Remove( Type * del, DelType shdl ) { - PRECONDITION( nowDelItem == 0 && nowDelElem == 0 ); + PRECONDITION( nowDelItem == c3d_null && nowDelElem == c3d_null ); if ( Detach(del) ) { if ( shdl==Delete || (shdl==defDelete && owns) ) { nowDelElem = del; delete del; - nowDelElem = NULL; + nowDelElem = c3d_null; } return true; @@ -455,7 +455,7 @@ inline bool List::Remove( Type * del, DelType shdl ) template inline void List::Close() { - PRECONDITION( nowDelItem == 0 && nowDelElem == 0 ); + PRECONDITION( nowDelItem == c3d_null && nowDelElem == c3d_null ); if ( last ) last->next = first; } @@ -467,9 +467,9 @@ inline void List::Close() template inline void List::Split() { - PRECONDITION( nowDelItem == 0 && nowDelElem == 0 ); + PRECONDITION( nowDelItem == c3d_null && nowDelElem == c3d_null ); if ( last ) - last->next = 0; + last->next = c3d_null; } @@ -485,7 +485,7 @@ inline void List::Split() template inline Type * LIterator::GetDataAndGo() { - PRECONDITION( list && list->nowDelItem == 0 && list->nowDelElem == 0 ); + PRECONDITION( list && list->nowDelItem == c3d_null && list->nowDelElem == c3d_null ); if ( curr ) { Type * ret = curr->data; @@ -494,7 +494,7 @@ inline Type * LIterator::GetDataAndGo() return ret; } - return 0; + return c3d_null; } @@ -504,7 +504,7 @@ inline Type * LIterator::GetDataAndGo() template inline void LIterator::Add( Type * data ) { - PRECONDITION( list && list->nowDelItem == 0 && list->nowDelElem == 0 ); + PRECONDITION( list && list->nowDelItem == c3d_null && list->nowDelElem == c3d_null ); if ( list ) { if ( curr ) { @@ -525,7 +525,7 @@ inline void LIterator::Add( Type * data ) template inline void LIterator::AddAndEat( List & l ) { - PRECONDITION( list && list->nowDelItem == 0 && list->nowDelElem == 0 ); + PRECONDITION( list && list->nowDelItem == c3d_null && list->nowDelElem == c3d_null ); if ( list && l.first ) { @@ -539,7 +539,7 @@ inline void LIterator::AddAndEat( List & l ) list->count += l.count; l.count = 0; - l.first = l.last = 0; + l.first = l.last = c3d_null; } else list->AddAndEat( l ); // \ru съесть список l в конец данного списка \en destroy a list l and add it to the end of the given list @@ -553,7 +553,7 @@ inline void LIterator::AddAndEat( List & l ) template inline void LIterator::Insert( Type * data ) { - PRECONDITION( list && list->nowDelItem == 0 && list->nowDelElem == 0 ); + PRECONDITION( list && list->nowDelItem == c3d_null && list->nowDelElem == c3d_null ); if ( list ) { if ( prev ) { @@ -577,7 +577,7 @@ inline void LIterator::Insert( Type * data ) template inline void LIterator::InsertAndEat( List & l ) { - PRECONDITION( list && list->nowDelItem == 0 && list->nowDelElem == 0 ); + PRECONDITION( list && list->nowDelItem == c3d_null && list->nowDelElem == c3d_null ); if ( list && l.first ) { @@ -590,7 +590,7 @@ inline void LIterator::InsertAndEat( List & l ) list->count += l.count; l.count = 0; - l.first = l.last = 0; + l.first = l.last = c3d_null; } else list->InsertAndEat( l ); // \ru съесть список l в конец данного списка \en destroy a list l and add it to the end of the given list @@ -604,13 +604,13 @@ inline void LIterator::InsertAndEat( List & l ) template inline void LIterator::Remove( DelType shdl ) { - PRECONDITION( list && list->nowDelItem == 0 && list->nowDelElem == 0 ); + PRECONDITION( list && list->nowDelItem == c3d_null && list->nowDelElem == c3d_null ); if ( list && curr ) { if ( shdl==Delete || (shdl==defDelete && list->owns) ) { list->nowDelElem = curr->data; delete curr->data; - list->nowDelElem = 0; + list->nowDelElem = c3d_null; } Detach(); @@ -624,7 +624,7 @@ inline void LIterator::Remove( DelType shdl ) template inline void LIterator::Detach() { - PRECONDITION( list && list->nowDelItem == 0 && list->nowDelElem == 0 ); + PRECONDITION( list && list->nowDelItem == c3d_null && list->nowDelElem == c3d_null ); if ( list && curr ) { ListItem* next = curr->next; @@ -639,7 +639,7 @@ inline void LIterator::Detach() list->nowDelItem = curr; delete curr; - list->nowDelItem = 0; + list->nowDelItem = c3d_null; curr = next; prev = list->findPrev( curr ); @@ -652,7 +652,7 @@ inline void LIterator::Detach() template void add_to_list( List & list, Type * data, const Type * after ) { - PRECONDITION( list.nowDelItem == 0 && list.nowDelElem == 0 ); + PRECONDITION( list.nowDelItem == c3d_null && list.nowDelElem == c3d_null ); if ( after ) { ListItem *c = list.first; @@ -678,8 +678,8 @@ void add_to_list( List & list, Type * data, const Type * after ) template void add_to_list( List & to, List & from ) { - PRECONDITION( to.nowDelItem == 0 && to.nowDelElem == 0 ); - PRECONDITION( from.nowDelItem == 0 && from.nowDelElem == 0 ); + PRECONDITION( to.nowDelItem == c3d_null && to.nowDelElem == c3d_null ); + PRECONDITION( from.nowDelItem == c3d_null && from.nowDelElem == c3d_null ); ListItem *curr = from.first; while ( curr ) { @@ -696,8 +696,8 @@ void add_to_list( List & to, List & from ) template void insert_to_list( List & to, List & from ) { - PRECONDITION( to.nowDelItem == 0 && to.nowDelElem == 0 ); - PRECONDITION( from.nowDelItem == 0 && from.nowDelElem == 0 ); + PRECONDITION( to.nowDelItem == c3d_null && to.nowDelElem == c3d_null ); + PRECONDITION( from.nowDelItem == c3d_null && from.nowDelElem == c3d_null ); ListItem *curr = from.first; while ( curr ) { @@ -716,13 +716,13 @@ void insert_to_list( List & to, List & from ) template void remove_from_list( List & list, DelType shdl ) { - PRECONDITION( list.nowDelItem == 0 && list.nowDelElem == 0 ); + PRECONDITION( list.nowDelItem == c3d_null && list.nowDelElem == c3d_null ); bool del = shdl==Delete || (shdl==defDelete && list.owns); ListItem *first = list.first; - list.first = 0; - list.last = 0; + list.first = c3d_null; + list.last = c3d_null; list.count = 0; while ( first ) { ListItem *temp = first; @@ -731,12 +731,12 @@ void remove_from_list( List & list, DelType shdl ) if ( del ) { list.nowDelElem = temp->data; delete temp->data; - list.nowDelElem = 0; + list.nowDelElem = c3d_null; } list.nowDelItem = temp; delete temp; - list.nowDelItem = 0; + list.nowDelItem = c3d_null; } } @@ -747,11 +747,11 @@ void remove_from_list( List & list, DelType shdl ) template void remove_from_list_release( List & list ) { - PRECONDITION( list.nowDelItem == 0 && list.nowDelElem == 0 ); + PRECONDITION( list.nowDelItem == c3d_null && list.nowDelElem == c3d_null ); ListItem *first = list.first; - list.first = 0; - list.last = 0; + list.first = c3d_null; + list.last = c3d_null; list.count = 0; while ( first ) { ListItem *temp = first; @@ -760,11 +760,11 @@ void remove_from_list_release( List & list ) list.nowDelElem = temp->data; if ( temp->data ) temp->data->Release(); - list.nowDelElem = 0; + list.nowDelElem = c3d_null; list.nowDelItem = temp; delete temp; - list.nowDelItem = 0; + list.nowDelItem = c3d_null; } } @@ -776,8 +776,8 @@ template size_t remove_from_list( List & list, List & deList, DelType shdl ) { PRECONDITION( &list != &deList ); - PRECONDITION( list.nowDelItem == 0 && list.nowDelElem == 0 ); - PRECONDITION( deList.nowDelItem == 0 && deList.nowDelElem == 0 ); + PRECONDITION( list.nowDelItem == c3d_null && list.nowDelElem == c3d_null ); + PRECONDITION( deList.nowDelItem == c3d_null && deList.nowDelElem == c3d_null ); if ( !list.first || !deList.first ) // \ru какой-то из списков пуст ! \en one of the lists is empty ! return 0; @@ -788,7 +788,7 @@ size_t remove_from_list( List & list, List & deList, DelType shdl ) ListItem *curr = list.first; // \ru начнем сначала \en start from the beginning ListItem *prev = list.last; ListItem *del = deList.first; // \ru текущий удаляемый \en the current deleted - ListItem *pdel = NULL; // \ru предыдущий удаляемый \en the previous deleted + ListItem *pdel = c3d_null; // \ru предыдущий удаляемый \en the previous deleted size_t deleted = 0; // \ru отцепленных 0 \en there are 0 detached while( del && list.first ) { // \ru есть еще пока чего удалять и откуда \en there are elements to delete @@ -801,8 +801,8 @@ size_t remove_from_list( List & list, List & deList, DelType shdl ) if ( list.first == list.last ) { // \ru если всего один элемент, то ничего не останется \en if there is only one element then nothing will be left list.count = 0; - list.first = NULL; - list.last = NULL; + list.first = c3d_null; + list.last = c3d_null; // \ru curr продвигать не нужно - все равно заканчиваем \en 'curr' should not be moved } else { @@ -820,12 +820,12 @@ size_t remove_from_list( List & list, List & deList, DelType shdl ) if ( willDel ) { // \ru если надо - удалим данные \en delete the data if it is necessary list.nowDelElem = condemned->data; delete condemned->data; - list.nowDelElem = 0; + list.nowDelElem = c3d_null; } list.nowDelItem = condemned; delete condemned; // \ru удалим квартиру \en delete condemned - list.nowDelItem = 0; + list.nowDelItem = c3d_null; deleted++; // \ru еще один удалили \en another one has been deleted break; @@ -849,7 +849,7 @@ size_t remove_from_list( List & list, List & deList, DelType shdl ) deList.nowDelItem = del; delete del; // \ru помним, что данные мы уже удалили \en remember that the data has already been deleted - deList.nowDelItem = 0; + deList.nowDelItem = c3d_null; deList.count--; } @@ -860,7 +860,7 @@ size_t remove_from_list( List & list, List & deList, DelType shdl ) } if ( list.last ) - list.last->next = 0; // \ru разорвать список \en split the list + list.last->next = c3d_null; // \ru разорвать список \en split the list return deleted; } @@ -870,10 +870,10 @@ size_t remove_from_list( List & list, List & deList, DelType shdl ) template bool detach_from_list( List & from, const Type * del ) { - PRECONDITION( from.nowDelItem == 0 && from.nowDelElem == 0 ); + PRECONDITION( from.nowDelItem == c3d_null && from.nowDelElem == c3d_null ); ListItem* curr = from.first; - ListItem* prev = 0; + ListItem* prev = c3d_null; while( curr ) { if ( curr->data == del ) { // \ru нашли \en found @@ -888,7 +888,7 @@ bool detach_from_list( List & from, const Type * del ) from.nowDelItem = curr; delete curr; - from.nowDelItem = 0; + from.nowDelItem = c3d_null; from.count--; return true; @@ -907,7 +907,7 @@ bool detach_from_list( List & from, const Type * del ) template size_t recalc_list( List & list ) { - PRECONDITION( list.nowDelItem == 0 && list.nowDelElem == 0 ); + PRECONDITION( list.nowDelItem == c3d_null && list.nowDelElem == c3d_null ); list.count = 0; ListItem *curr = list.first; @@ -923,7 +923,7 @@ size_t recalc_list( List & list ) template bool is_exist_in_list( const List & list, const Type * what ) { - PRECONDITION( list.nowDelItem == 0 && list.nowDelElem == 0 ); + PRECONDITION( list.nowDelItem == c3d_null && list.nowDelElem == c3d_null ); bool exist = false; ListItem * curr = list.first; @@ -940,7 +940,7 @@ bool is_exist_in_list( const List & list, const Type * what ) template ListItem * find_prev_in_list( const List & list, ListItem * now ) { - PRECONDITION( list.nowDelItem == 0 && list.nowDelElem == 0 ); + PRECONDITION( list.nowDelItem == c3d_null && list.nowDelElem == c3d_null ); if ( now ) { ListItem *tmp = list.first; @@ -949,7 +949,7 @@ ListItem * find_prev_in_list( const List & list, ListItem * no return tmp; } - return 0; + return c3d_null; } diff --git a/C3d/Include/templ_s_queue.h b/C3d/Include/templ_s_queue.h index 100802c..20b96ad 100644 --- a/C3d/Include/templ_s_queue.h +++ b/C3d/Include/templ_s_queue.h @@ -113,17 +113,17 @@ private: // --- template SQueue::SQueue( size_t capacity ) - : data( NULL ) - , qlast( NULL ) - , qp1( NULL ) - , qp2( NULL ) + : data( c3d_null ) + , qlast( c3d_null ) + , qp1( c3d_null ) + , qp2( c3d_null ) { if ( capacity > 0 ) { try { data = new Type[capacity]; } catch ( const std::bad_alloc & ) { - data = NULL; + data = c3d_null; throw; } } @@ -212,7 +212,7 @@ inline Type & SQueue::First() const template inline bool SQueue::IsFull() const { - return data == NULL || _IncPtr( qp2 ) == qp1; + return data == c3d_null || _IncPtr( qp2 ) == qp1; } @@ -336,7 +336,7 @@ bool SQueue::_NewCapacity( size_t max_len, bool clear ) { try { delete [] data; - data = qlast = qp1 = qp2 = NULL; + data = qlast = qp1 = qp2 = c3d_null; if ( max_len > 0 ) { data = new Type[max_len]; qlast = data + max_len - 1; @@ -344,7 +344,7 @@ bool SQueue::_NewCapacity( size_t max_len, bool clear ) } } catch ( ... ) { - data = qlast = qp1 = qp2 = NULL; + data = qlast = qp1 = qp2 = c3d_null; C3D_CONTROLED_THROW; return false; } @@ -352,7 +352,7 @@ bool SQueue::_NewCapacity( size_t max_len, bool clear ) else { PRECONDITION( qp1 != qp2 && max_len>0 && clear == false ); // \ru Выражение обязано быть истинным \en The expression should be true - Type * n_data = NULL; + Type * n_data = c3d_null; try { n_data = new Type[max_len]; if ( qp1 < qp2 ) // \ru Вариант без фрагментации \en A variant without fragmentation diff --git a/C3d/Include/templ_sfdp_array.h b/C3d/Include/templ_sfdp_array.h index 8afd418..79d0277 100644 --- a/C3d/Include/templ_sfdp_array.h +++ b/C3d/Include/templ_sfdp_array.h @@ -145,8 +145,8 @@ using RPArray::back; \en Find the index of the element using the comparison function. \details \ru Найти индекс элемента, используя функцию сравнения. \en Find the index of the element using the comparison function. - \return \ru Вернет точно найденный элемент или NULL, если элемент не найден. - \en Returns the found element or NULL, if element not found. + \return \ru Вернет точно найденный элемент или c3d_null, если элемент не найден. + \en Returns the found element or c3d_null, if element not found. */ Type * FindExact ( const Type & el ) const; @@ -240,7 +240,7 @@ inline SFDPArray::~SFDPArray() {} // --- template bool SFDPArray::Init( const SFDPArray & other ) { - PRECONDITION( FDPArray::nowDeletedElem == 0 ); // \ru ЯТ - временно \en ЯТ - temporarily + PRECONDITION( FDPArray::nowDeletedElem == c3d_null ); // \ru ЯТ - временно \en ЯТ - temporarily Flush(); // \ru сбросить себя \en reset itself @@ -253,7 +253,7 @@ bool SFDPArray::Init( const SFDPArray & other ) { // --- template inline size_t SFDPArray::AddTry( Type& ent, Type *&found ) { - PRECONDITION( FDPArray::nowDeletedElem == 0 ); // \ru ЯТ - временно \en ЯТ - temporarily + PRECONDITION( FDPArray::nowDeletedElem == c3d_null ); // \ru ЯТ - временно \en ЯТ - temporarily // \ru CatchMemory(); ЯТ \en CatchMemory(); ЯТ bool added = true; @@ -267,10 +267,10 @@ inline size_t SFDPArray::AddTry( Type& ent, Type *&found ) { // --- template inline bool SFDPArray::AddExact( Type& ent ) { - PRECONDITION( FDPArray::nowDeletedElem == 0 ); // \ru ЯТ - временно \en ЯТ - temporarily + PRECONDITION( FDPArray::nowDeletedElem == c3d_null ); // \ru ЯТ - временно \en ЯТ - temporarily // \ru CatchMemory(); ЯТ \en CatchMemory(); ЯТ - Type * found = NULL; + Type * found = c3d_null; bool added = true; add_to_array( *this, ent, found, added ); return ( &ent == found ); // \ru вернет true - добавлен, false - не добавлен \en if returns true then the element has been added, it has not been added otherwise @@ -283,10 +283,10 @@ inline bool SFDPArray::AddExact( Type& ent ) { // --- template inline bool SFDPArray::AddIfNotExist( Type& ent ) { - PRECONDITION( FDPArray::nowDeletedElem == 0 ); // \ru ЯТ - временно \en ЯТ - temporarily + PRECONDITION( FDPArray::nowDeletedElem == c3d_null ); // \ru ЯТ - временно \en ЯТ - temporarily // \ru CatchMemory(); ЯТ \en CatchMemory(); ЯТ - Type * found = NULL; + Type * found = c3d_null; bool added = true; add_to_array( *this, ent, found, added ); return ( added ); // \ru вернет true - добавлен, false - не добавлен \en if returns true then the element has been added, it has not been added otherwise @@ -298,7 +298,7 @@ inline bool SFDPArray::AddIfNotExist( Type& ent ) { // --- template inline size_t SFDPArray::FindNearest( const Type &el, Type *&found ) const { - PRECONDITION( FDPArray::nowDeletedElem == 0 ); // \ru ЯТ - временно \en ЯТ - temporarily + PRECONDITION( FDPArray::nowDeletedElem == c3d_null ); // \ru ЯТ - временно \en ЯТ - temporarily return find_in_array( *this, el, found ); } @@ -309,10 +309,10 @@ inline size_t SFDPArray::FindNearest( const Type &el, Type *&found ) const // --- template inline Type * SFDPArray::FindExact( const Type &el ) const { - PRECONDITION( FDPArray::nowDeletedElem == 0 ); // \ru ЯТ - временно \en ЯТ - temporarily - Type * found = NULL; + PRECONDITION( FDPArray::nowDeletedElem == c3d_null ); // \ru ЯТ - временно \en ЯТ - temporarily + Type * found = c3d_null; size_t foundInd = find_in_array( *this, el, found ); - return ( foundInd != SYS_MAX_T ) ? found : NULL; + return ( foundInd != SYS_MAX_T ) ? found : c3d_null; } @@ -321,13 +321,13 @@ inline Type * SFDPArray::FindExact( const Type &el ) const { // --- template inline Type* SFDPArray::RemoveObj( Type *delObject, DelType del ) { - PRECONDITION( FDPArray::nowDeletedElem == 0 ); // \ru ЯТ - временно \en ЯТ - temporarily + PRECONDITION( FDPArray::nowDeletedElem == c3d_null ); // \ru ЯТ - временно \en ЯТ - temporarily if ( !delObject ) - return NULL; + return c3d_null; - Type * found = NULL; + Type * found = c3d_null; size_t i = find_in_array( *this, *delObject, found ); - return ( i != SYS_MAX_T ) ? RemoveInd(i, del) : 0; + return ( i != SYS_MAX_T ) ? RemoveInd(i, del) : c3d_null; } @@ -338,7 +338,7 @@ template inline bool SFDPArray::DetachObj( const Type *delObject ) { if ( !delObject ) return false; - Type * found = NULL; + Type * found = c3d_null; size_t i = find_in_array( *this, *delObject, found ); if ( i != SYS_MAX_T ) { @@ -355,8 +355,8 @@ inline bool SFDPArray::DetachObj( const Type *delObject ) { // --- template inline bool SFDPArray::IsExist( const Type &el ) const { - PRECONDITION( FDPArray::nowDeletedElem == 0 ); // \ru ЯТ - временно \en ЯТ - temporarily - Type * found = NULL; + PRECONDITION( FDPArray::nowDeletedElem == c3d_null ); // \ru ЯТ - временно \en ЯТ - temporarily + Type * found = c3d_null; return find_in_array( *this, el, found ) != SYS_MAX_T; } @@ -513,7 +513,7 @@ size_t find_in_array( const SFDPArray& arr, const Type& el, Type *&found ) // --- template size_t SFDPArray::SearchIt ( size_t data, typename SFDPArray::SearchFunc fSearch, Type *&found ) const { - PRECONDITION( FDPArray::nowDeletedElem == 0 ); // \ru ЯТ - временно \en ЯТ - temporarily + PRECONDITION( FDPArray::nowDeletedElem == c3d_null ); // \ru ЯТ - временно \en ЯТ - temporarily PRECONDITION( fSearch ); // \ru без функции сравнения массив бессмысленен \en the array is useless without comparison function if ( !FDPArray::count ) diff --git a/C3d/Include/templ_sfp_array.h b/C3d/Include/templ_sfp_array.h index cb8f157..8cb8b3b 100644 --- a/C3d/Include/templ_sfp_array.h +++ b/C3d/Include/templ_sfp_array.h @@ -180,10 +180,10 @@ inline Type * SFPArray::FindByKey( void * key, size_t & index ) { // --- template inline Type * SFPArray::RemoveObj( Type *delObject, DelType del ) { - PRECONDITION( PArray::nowDeletedElem == 0 ); // \ru Bременно, для отладки \en Temporarily, for debugging + PRECONDITION( PArray::nowDeletedElem == c3d_null ); // \ru Bременно, для отладки \en Temporarily, for debugging ::qp_sort( *this, false ); size_t i = find_in_array( *this, delObject ); - return ( i != SYS_MAX_T ) ? RemoveInd(i, del) : 0; + return ( i != SYS_MAX_T ) ? RemoveInd(i, del) : c3d_null; } @@ -425,14 +425,14 @@ Type * find_from_array_by_key( const SFPArray & arr, void * key, size_t & res = (*arr.fSearch_m)( arr[0], key ); switch ( res ) { case 0 : index = 0; return arr[0]; - case 1 : index = SYS_MAX_T; return NULL; + case 1 : index = SYS_MAX_T; return c3d_null; case -1 : break; } res = (*arr.fSearch_m)( arr[mxc], key ); switch ( res ) { case 0 : index = mxc; return arr[mxc]; - default : index = SYS_MAX_T; return NULL; + default : index = SYS_MAX_T; return c3d_null; } } else { @@ -440,14 +440,14 @@ Type * find_from_array_by_key( const SFPArray & arr, void * key, size_t & for( size_t i = 0, count = (size_t)arr.count; i < count; i++ ) { switch ( (*arr.fSearch_m)( arr[i], key ) ) { case 0 : index = i; return arr[i]; - case 1 : index = SYS_MAX_T; return NULL; + case 1 : index = SYS_MAX_T; return c3d_null; case -1 : break; } } } index = SYS_MAX_T; - return NULL; + return c3d_null; } diff --git a/C3d/Include/templ_sp_array.h b/C3d/Include/templ_sp_array.h index b8213d0..4f139d8 100644 --- a/C3d/Include/templ_sp_array.h +++ b/C3d/Include/templ_sp_array.h @@ -150,9 +150,9 @@ inline bool SPArray::IsExist( const Type * el ) const { template inline Type * SPArray::RemoveObj( Type * delObject, DelType del ) { - PRECONDITION( PArray::nowDeletedElem == 0 ); // \ru Bременно, для отладки \en Temporarily, for debugging + PRECONDITION( PArray::nowDeletedElem == c3d_null ); // \ru Bременно, для отладки \en Temporarily, for debugging size_t i = find_from_array( *this, delObject ); - return ( i != SYS_MAX_T ) ? RemoveInd( i, del ) : 0; + return ( i != SYS_MAX_T ) ? RemoveInd( i, del ) : c3d_null; } @@ -172,8 +172,8 @@ inline size_t SPArray::PossibleIndex( const Type * el, bool & isPresent ) template Type * add_to_array( SPArray & arr, Type * el, size_t & indexEl ) { - if ( el == NULL ) // \ru LF_Linux: добавил проверку на NULL \en LF_Linux: added a check for NULL - return NULL; + if ( el == c3d_null ) // \ru LF_Linux: добавил проверку на c3d_null \en LF_Linux: added a check for c3d_null + return c3d_null; size_t mx = arr.count - 1; size_t mxc = mx; size_t mn = 0; @@ -286,7 +286,7 @@ size_t find_from_array_spec( const SPArray & arr, const Type * el, bool & { isPresent = false; - if ( el == NULL ) // \ru LF_Linux: добавил проверку на NULL \en LF_Linux: added a check for NULL + if ( el == c3d_null ) // \ru LF_Linux: добавил проверку на c3d_null \en LF_Linux: added a check for c3d_null return SYS_MAX_T; if ( !arr.count || *el < *arr/*.parr*/[0] ) @@ -355,7 +355,7 @@ size_t find_from_array_spec( const SPArray & arr, const Type * el, bool & template size_t find_from_array( const SPArray & arr, const Type * el ) { - if ( el == NULL ) // \ru LF_Linux: добавил проверку на NULL \en LF_Linux: added a check for NULL + if ( el == c3d_null ) // \ru LF_Linux: добавил проверку на c3d_null \en LF_Linux: added a check for c3d_null return SYS_MAX_T; // \ru общий случай - элементов больше 11 //LF_Linux: откуда 11??? \en the common case - the number of elements is more than 11 //LF_Linux: why 11?? if ( arr.count > 11 ) { diff --git a/C3d/Include/templ_sparse_array2.h b/C3d/Include/templ_sparse_array2.h new file mode 100644 index 0000000..05750d6 --- /dev/null +++ b/C3d/Include/templ_sparse_array2.h @@ -0,0 +1,614 @@ +//////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Двумерный массив объектов. + \en Two-dimensional array of objects. \~ + +*/ +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __TEMPL_SPARSE_ARRAY2_H +#define __TEMPL_SPARSE_ARRAY2_H + + +#include +#include +#include +#include +#include + + +//------------------------------------------------------------------------------ +/** \brief \ru Разреженный вектор объектов. + \en Sparse vector of objects. \~ + \details \ru Разреженный вектор объектов. \n + \en Sparse vector of objects. \n \~ + \ingroup Base_Tools_Containers +*/ +// --- +template +class SparseRow { +public: + typedef std::pair NumberRange; + typedef std::pair NumberType; + typedef std::vector RowVector; + typedef std::map RowMap; + typedef typename RowMap::const_iterator RowMapConstIt; + typedef typename RowMap::iterator RowMapIt; + typedef typename std::pair RowMapRet; + +protected: + RowMap rowMap; ///< \ru Таблица ненулевых элементов. \en Map of nonzero elements. + RowVector rowVector; ///< \ru Вектор ненулевых элементов. \en Vector of nonzero elements. + size_t rowSize; ///< \ru Размер вектора. \en Vector size. + NumberRange nzRange; ///< \ru Диапазон ненулевых элементов [nz1,nz2]. \en Range of nonzero elements [nz1,nz2]. + +public: + static const Type defaultElem; ///< \ru Нулевой элемент (элемент по умолчанию). \en Zero element (default element). + +public: + /// \ru Конструктор. \en Constructor. + SparseRow() : rowMap(), rowVector(), rowSize(0), nzRange( SYS_MAX_ST, SYS_MIN_ST ) {} + /// \ru Конструктор копирования. \en Copy-constructor. + SparseRow( const SparseRow & ); + /// \ru Деструктор. \en Destructor. + virtual ~SparseRow() {} + +public: + /// \ru Оператор присваивания. \en The assignment operator. + const SparseRow & operator = ( const SparseRow & ); + +public: + void Clear() { rowMap.clear(); rowVector.clear(); ResetNzRange(); } + void SetSize( size_t rsz ) { Clear(); rowSize = rsz; } + + bool IsNzRange() const { return (nzRange.first <= nzRange.second); } + const NumberRange & NzRange() const { return nzRange; } + void ResetNzRange() { nzRange.first = SYS_MAX_ST; nzRange.second = SYS_MIN_ST; } + void EnlargeNzRange( ptrdiff_t n ) { nzRange.first = std_min( nzRange.first, n ); nzRange.second = std_max( nzRange.second, n ); } + + const Type & GetElem( size_t k ) const; + bool SetElem( size_t k, const Type & ); + bool SetLine( std::vector & ); + ptrdiff_t NzBegin() const { return nzRange.first; } + ptrdiff_t NzEnd () const { return IsNzRange() ? nzRange.second + 1 : nzRange.first; } + bool NzIndices( const NumberRange & searchRange, std::vector & ) const; + void NzUpdate(); + void Swap( SparseRow & ); + +protected: + bool CheckNzRange() const; + bool CheckBand( std::vector & ) const; +}; + + +//------------------------------------------------------------------------------ +// +// --- +template +const Type SparseRow::defaultElem = Type(); + + +//------------------------------------------------------------------------------ +// +// --- +template +SparseRow::SparseRow( const SparseRow & src ) + : rowMap ( src.rowMap ) + , rowVector( src.rowVector ) + , rowSize ( src.rowSize ) + , nzRange ( src.nzRange ) +{ +} + + +//------------------------------------------------------------------------------ +// +// --- +template +const SparseRow & SparseRow::operator = ( const SparseRow & src ) +{ + rowMap = src.rowMap; + rowVector = src.rowVector; + rowSize = src.rowSize; + nzRange = src.nzRange; + return *this; +} + + +//------------------------------------------------------------------------------ +// +// --- +template +inline bool SparseRow::CheckNzRange() const +{ + bool res = false; + + if ( 0 <= nzRange.first && nzRange.second <= (ptrdiff_t)rowSize ) { + res = true; + + if ( rowVector.empty() ) { + RowMapConstIt it = rowMap.begin(); + while ( res && it != rowMap.end() ) { + res = false; + if ( nzRange.first <= (ptrdiff_t)it->first && (ptrdiff_t)it->first <= nzRange.second ) + res = true; + ++it; + } + } + else { + size_t nzSize = nzRange.second - nzRange.first + 1; + if ( nzSize <= rowSize && nzSize == rowVector.size() ) + res = true; + } + } + + return res; +} + + +//------------------------------------------------------------------------------ +// +// --- +template +inline const Type & SparseRow::GetElem( size_t k ) const +{ + //C3D_ASSERT( CheckNzRange() ); + + if ( nzRange.first <= (ptrdiff_t)k && (ptrdiff_t)k <= nzRange.second ) { + if ( rowVector.empty() ) { + RowMapConstIt it = rowMap.find( k ); + if ( it != rowMap.end() ) + return it->second; + } + else { + ptrdiff_t index = (ptrdiff_t)k - nzRange.first; + PRECONDITION( index >= 0 && index < (ptrdiff_t)rowVector.size() ); + if ( index >= 0 && index < (ptrdiff_t)rowVector.size() ) + return rowVector[index]; + } + } + return defaultElem; +} + + +//------------------------------------------------------------------------------ +// +// --- +template +inline bool SparseRow::SetElem( size_t k, const Type & item ) +{ + //C3D_ASSERT( CheckNzRange() ); + + PRECONDITION( k < rowSize ); + if ( k < rowSize ) { + if ( rowVector.empty() ) { + RowMapRet ret = rowMap.insert( std::make_pair( k, item ) ); + if ( !ret.second ) + ret.first->second = item; + EnlargeNzRange( k ); + return true; + } + else { + if ( nzRange.first <= (ptrdiff_t)k && (ptrdiff_t)k <= nzRange.second ) { + ptrdiff_t index = k - nzRange.first; + PRECONDITION( index >= 0 && index <= (ptrdiff_t)rowVector.size() ); + if ( index >= 0 && index < (ptrdiff_t)rowVector.size() ) + rowVector[index] = item; + } + else if ( (ptrdiff_t)k < nzRange.first ) { + size_t addCnt = nzRange.first - k; + std::reverse( rowVector.begin(), rowVector.end() ); + rowVector.resize( rowVector.size() + addCnt ); + rowVector.back() = item; + std::reverse( rowVector.begin(), rowVector.end() ); + EnlargeNzRange( k ); + } + else if ( (ptrdiff_t)k > nzRange.second ) { + size_t addCnt = k - nzRange.second; + rowVector.resize( rowVector.size() + addCnt ); + rowVector.back() = item; + EnlargeNzRange( k ); + } + return true; + } + } + return false; +} + + +//------------------------------------------------------------------------------ +// +// --- +template +inline bool SparseRow::CheckBand( std::vector & row ) const +{ + bool res = true; + + size_t nzSize = row.size(); + + if ( nzSize > 0 ) { + if ( nzSize > 1 ) { + std::sort( row.begin(), row.end() ); + + size_t k; + for ( k = nzSize; k--; ) { + PRECONDITION( row[k].first < rowSize ); + if ( row[k].second == defaultElem ) { + row.erase( row.begin() + k ); + nzSize--; + } + else if ( row[k].first >= rowSize ) { + row.erase( row.begin() + k ); + nzSize--; + } + } + if ( nzSize > 1 ) { + size_t nzBegInd = row.front().first; + size_t nzEndInd = row.back().first; + size_t nzCnt = nzEndInd - nzBegInd + 1; + + if ( nzCnt > 2*nzSize ) { + res = false; + } + } + } + } + + return res; +} + + +//------------------------------------------------------------------------------ +// +// --- +template +inline bool SparseRow::SetLine( std::vector & row ) +{ + PRECONDITION( row.size() <= rowSize ); + + if ( row.size() > 0 && row.size() <= rowSize ) { + Clear(); + + if ( !CheckBand( row ) ) { + size_t nzSize = row.size(); + for ( size_t k = 0; k < nzSize; ++k ) { + size_t nzCurInd = row[k].first; + rowMap.insert( std::make_pair( nzCurInd, row[k].second ) ); + EnlargeNzRange( nzCurInd ); + } + } + else { + size_t nzSize = row.size(); + + size_t nzBegInd = row.front().first; + size_t nzEndInd = row.back().first; + size_t nzCnt = nzEndInd - nzBegInd + 1; + + rowVector.resize( nzCnt ); + for ( size_t k = 0; k < nzSize; ++k ) { + size_t nzCurInd = row[k].first; + rowVector[nzCurInd - nzBegInd] = row[k].second; + EnlargeNzRange( nzCurInd ); + } + } + + return true; + } + + return false; +} + + +//------------------------------------------------------------------------------ +// +// --- +template +inline bool SparseRow::NzIndices( const NumberRange & searchRange, std::vector & indices ) const +{ + PRECONDITION( indices.empty() && searchRange.first <= searchRange.second ); + indices.clear(); + + if ( searchRange.first <= searchRange.second ) { + if ( rowVector.empty() ) { + RowMapConstIt it = rowMap.begin(); + while ( it != rowMap.end() ) { + if ( searchRange.first <= (ptrdiff_t)it->first && (ptrdiff_t)it->first <= searchRange.second ) + indices.push_back( it->first ); + ++it; + } + } + else { + size_t nzCnt = rowVector.size(); + indices.reserve( nzCnt ); + for ( size_t i = 0; i < nzCnt; ++i ) { + size_t index = nzRange.first + i; + if ( searchRange.first <= (ptrdiff_t)index && (ptrdiff_t)index <= searchRange.second ) { + if ( rowVector[i] != defaultElem ) + indices.push_back( index ); + } + } + } + if ( indices.size() > 1 ) + std::sort( indices.begin(), indices.end() ); + } + + return (indices.size() > 0); +} + + +//------------------------------------------------------------------------------ +// +// --- +template +inline void SparseRow::NzUpdate() +{ + bool doUpdate = false; + std::vector nzElems; + + if ( rowVector.empty() ) { + if ( !rowMap.empty() ) { + ResetNzRange(); + + nzElems.reserve( rowMap.size() ); + + RowMapIt it = rowMap.begin(); + + while ( it != rowMap.end() ) + { + if ( it->second == defaultElem ) { + it = c3d::older_stl_support::erase(rowMap, it ); + doUpdate = true; + } + else { + EnlargeNzRange( it->first ); + nzElems.push_back( std::make_pair( it->first, it->second ) ); + ++it; + } + } + } + } + else { + PRECONDITION( rowMap.empty() ); + size_t nzCnt = rowVector.size(); + nzElems.reserve( nzCnt ); + + for ( size_t k = 0; k < nzCnt; k++ ) { + if ( rowVector[k] != defaultElem ) + nzElems.push_back( std::make_pair( nzRange.first + k, rowVector[k] ) ); + else + doUpdate = true; + } + } + + if ( doUpdate ) { + SetLine( nzElems ); + } + + PRECONDITION( CheckNzRange() ); +} + + +//------------------------------------------------------------------------------ +// +// --- +template +inline void SparseRow::Swap( SparseRow & r2 ) +{ + SparseRow & r1 = *this; + std::swap( r1.rowMap, r2.rowMap ); + std::swap( r1.rowVector, r2.rowVector ); + PRECONDITION( r1.rowSize == r2.rowSize ); + std::swap( r1.rowSize, r2.rowSize ); + std::swap( r1.nzRange, r2.nzRange ); +} + + +//------------------------------------------------------------------------------ +/** \brief \ru Двумерный разреженный массив объектов. + \en Two-dimensional sparse array of objects. \~ + \details \ru Двумерный разреженный массив объектов. \n + \en Two-dimensional sparse array of objects. \n \~ + \ingroup Base_Tools_Containers +*/ +// --- +template +class SparseArray2 { +public: + typedef std::pair NumberRange; + typedef std::pair NumberType; + typedef std::vector< SparseRow > SparseData; + typedef SparseArray2 SparseMatrix; + +protected : + SparseData data; ///< \ru Данные. \en Data. + size_t nColumns; ///< \ru Количество столбцов массива. \en Count of columns of array. + +protected: + /// \ru Конструктор по заданной размерности. \en The constructor by a given dimension. + SparseArray2( size_t lsz, size_t csz ) : data(), nColumns(0) { SetSize( lsz, csz ); } +public: + /// \ru Конструктор. \en Constructor. + SparseArray2() : data(), nColumns(0) {} + /// \ru Конструктор ограниченной размерности. \en The constructor of restricted dimension. + SparseArray2( const uint16 & lsz, const uint16 & csz ) : data(), nColumns(0) { SetSize( lsz, csz ); } + /// \ru Конструктор копирования. \en Copy-constructor. + explicit SparseArray2( const SparseArray2 & src ) : data(), nColumns(0) { Init( src ); } + /// \ru Деструктор. \en Destructor. + virtual ~SparseArray2() { SetSize( 0, 0 ); } + +public: + /// \ru Конструктор по заданной размерности. \en The constructor by a given dimension. + static SparseMatrix * Create( size_t lsz, size_t csz ); + +public: // Общие методы матриц (двумерных массивов) + size_t Lines () const { return data.size(); } ///< \ru Количество строк. \en Count of rows. + size_t Columns() const { return nColumns; } ///< \ru Количество столбцов. \en Count of columns. + size_t Count () const { return (data.size()*nColumns); } ///< \ru Количество элементов. \en Count of elements. + c3d::IndicesPair GetSize() const { return c3d::IndicesPair( data.size(), nColumns ); } ///< \ru Дать размер массива. \en Give the size of the array. + bool SetSize( c3d::IndicesPair sz ) { return SetSize( sz.first, sz.second ); } ///< \ru Установить размер. \en Set size. + bool SetSize( size_t lsz, size_t csz ); ///< \ru Установить размер. \en Set size. + bool SetSize( size_t sz ) { return SetSize( sz, sz ); } ///< \ru Установить размер. \en Set size. + + /// \ru Получить элемент массива. \en Get an element of the array. + const Type & GetElem( size_t ln, size_t cn ) const; + /// \ru Установить элемент массива. \en Set an element of the array. + bool SetElem( size_t ln, size_t cn, const Type & ); + /// \ru Оператор доступа по индексам. \en Access by indices operator. + const Type & operator () ( size_t ln, size_t cn ) const { C3D_ASSERT( ln < data.size() && cn < nColumns ); return GetElem( ln, cn ); } + /// \ru Расписать массив нулями. \en Assign zeros to array. + SparseMatrix & SetZero(); + /// \ru Функция присваивания. \en An assignment function. + bool Init( const SparseMatrix & ); + /// \ru Оператор присваивания. \en The assignment operator. + SparseMatrix & operator = ( const SparseMatrix & src ) { Init( src ); return *this; } + /// \ru Поменять местами строки. \en Swap lines. + bool SwapLines( size_t ln1, size_t ln2 ); + +public: + /// \ru Установить ненулевые элементы строки. \en Set nonzero elements of the row. + bool SetLine( size_t ln, std::vector & ); + /// \ru Индекс первого ненулевого элемента. \en Index of the first nonzero element. + size_t NzBegin( size_t ln ) const { C3D_ASSERT(ln < data.size()); if ( ln < data.size() ) return data[ln].NzBegin(); return SYS_MAX_ST; } + /// \ru Завершающий индекс последовательности ненулевых элементов. \en The final index of the sequence of non-zero elements. + size_t NzEnd ( size_t ln ) const { C3D_ASSERT(ln < data.size()); if ( ln < data.size() ) return data[ln].NzEnd(); return SYS_MIN_ST; } + /// \ru Получить индексы ненулевых элементов строки. \en Get indices of nonzero elements of the row. + bool NzIndices( size_t ln, const NumberRange & searchRange, std::vector & ) const; + /// \ru Обновить строку (удалить нулевые элементы по возможности). \en Update the row (delete zero elements as far as possible). + void NzUpdate(); +}; + + +//------------------------------------------------------------------------------ +// +// --- +template +inline bool SparseArray2::SetSize( size_t lsz, size_t csz ) +{ + if ( lsz*csz <= c3d::MATRIX_MAX_COUNT ) + { + data.clear(); + data.resize( lsz ); + for ( size_t k = data.size(); k--; ) + data[k].SetSize( csz ); + nColumns = csz; + return true; + } + return false; +} + + +//------------------------------------------------------------------------------ +// +// --- +template +inline SparseArray2 * SparseArray2::Create( size_t lsz, size_t csz ) +{ + if ( lsz*csz <= c3d::MATRIX_MAX_COUNT ) + return new SparseMatrix( lsz, csz ); + return c3d_null; +} + + +//------------------------------------------------------------------------------ +// +// --- +template +bool SparseArray2::Init( const SparseArray2 & src ) +{ + data.assign( src.data.begin(), src.data.end() ); + nColumns = src.nColumns; + return true; +} + + +//------------------------------------------------------------------------------ +// +// --- +template +inline const Type & SparseArray2::GetElem( size_t ln, size_t cn ) const +{ + PRECONDITION( ln < data.size() && cn < nColumns ); + if ( ln < data.size() && cn < nColumns ) + return data[ln].GetElem( cn ); + return SparseRow::defaultElem; +} + + +//------------------------------------------------------------------------------ +// +// --- +template +inline bool SparseArray2::SetElem( size_t ln, size_t cn, const Type & item ) +{ + PRECONDITION( ln < data.size() && cn < nColumns ); + if ( ln < data.size() && cn < nColumns ) + return data[ln].SetElem( cn, item ); + return false; +} + + +//------------------------------------------------------------------------------ +// +// --- +template +inline SparseArray2 & SparseArray2::SetZero() +{ + std::for_each( data.begin(), data.end(), std::mem_fun_ref( &SparseRow::Clear ) ); + return *this; +} + + +//------------------------------------------------------------------------------ +// +// --- +template +inline bool SparseArray2::SetLine( size_t ln, std::vector & newRow ) +{ + PRECONDITION( ln < data.size() && newRow.size() <= nColumns ); + if ( ln < data.size() && newRow.size() <= nColumns ) + return data[ln].SetLine( newRow ); + return false; +} + + +//------------------------------------------------------------------------------ +// +// --- +template +inline bool SparseArray2::SwapLines( size_t ln1, size_t ln2 ) +{ + size_t nLines = data.size(); + PRECONDITION( ln1 < nLines && ln2 < nLines ); + if ( ln1 < nLines && ln2 < nLines ) { + data[ln1].Swap( data[ln2] ); + return true; + } + return false; +} + + +//------------------------------------------------------------------------------ +// +// --- +template +inline bool SparseArray2::NzIndices( size_t ln, const NumberRange & searchRange, std::vector & indices ) const +{ + PRECONDITION( ln < data.size() ); + if ( ln < data.size() ) + return data[ln].NzIndices( searchRange, indices ); + return false; +} + + +//------------------------------------------------------------------------------ +// +// --- +template +inline void SparseArray2::NzUpdate() +{ + std::for_each( data.begin(), data.end(), std::mem_fun_ref( &SparseRow::NzUpdate ) ); +} + + +#endif // __TEMPL_SPARSE_ARRAY2_H diff --git a/C3d/Include/templ_sptr.h b/C3d/Include/templ_sptr.h index 9fa0882..df3e294 100644 --- a/C3d/Include/templ_sptr.h +++ b/C3d/Include/templ_sptr.h @@ -15,14 +15,14 @@ //------------------------------------------------------------------------------ -/** \brief \ru Отладочная проверка на NULL. - \en Debug check for NULL. \~ - \details \ru Отладочная проверка на NULL. \n - \en Debug check for NULL. \n \~ +/** \brief \ru Отладочная проверка на c3d_null. + \en Debug check for c3d_null. \~ + \details \ru Отладочная проверка на c3d_null. \n + \en Debug check for c3d_null. \n \~ \ingroup Base_Tools_SmartPointers */ // --- -#define NULL_CHECK PRECONDITION( m_pI != C3D_NULL_PTR ); +#define NULL_CHECK PRECONDITION( m_pI != c3d_null ); //------------------------------------------------------------------------------ @@ -42,20 +42,20 @@ class SPtr public: /// \ru Конструктор. \en Constructor. - SPtr () : m_pI( C3D_NULL_PTR ) {} + SPtr () : m_pI( c3d_null ) {} /// \ru Конструктор по указателю. \en Constructor by pointer. explicit SPtr ( T * elem ) { - if ( (m_pI = elem) != C3D_NULL_PTR ) + if ( (m_pI = elem) != c3d_null ) m_pI->AddRef(); } /// \ru Конструктор копирования. \en Copy constructor. - SPtr( const SPtr & ptr ) : m_pI( C3D_NULL_PTR ) { assign(ptr.m_pI); } + SPtr( const SPtr & ptr ) : m_pI( c3d_null ) { assign(ptr.m_pI); } /// \ru Конструктор по совместимому указателю \en Constructor by compatible pointer template - SPtr( const SPtr<_T> & ptr ) : m_pI( ptr.get() ) { if ( m_pI != C3D_NULL_PTR ) { m_pI->AddRef();} } + SPtr( const SPtr<_T> & ptr ) : m_pI( ptr.get() ) { if ( m_pI != c3d_null ) { m_pI->AddRef();} } /// \ru Деструктор. \en Destructor. - ~SPtr() { if( m_pI != C3D_NULL_PTR ) m_pI->Release(); } + ~SPtr() { if( m_pI != c3d_null ) m_pI->Release(); } public: // \ru Перегрузка операторов \en Operators overloading /// \ru Оператор преобразования к типу T* . \en An operator for conversion to the type T*. @@ -103,13 +103,13 @@ public: /// \ru Функция присваивания указателем. \en A function of assignment by pointer. SPtr & assign( T * elem ); /// \ru Функция освобождения объекта. \en A function of release an object. - SPtr & reset( void ) { if( m_pI != C3D_NULL_PTR ) { m_pI->Release(); m_pI = C3D_NULL_PTR; } return *this; } + SPtr & reset( void ) { if( m_pI != c3d_null ) { m_pI->Release(); m_pI = c3d_null; } return *this; } /// \ru Функция доступа к элементу данных. \en A function of access to data element. T * get() const { return m_pI; } /// \ru Функция отсоединяет объект. \en A function detaches an object. - T * detach() { T * obj = m_pI; m_pI = C3D_NULL_PTR; if ( obj != C3D_NULL_PTR ) obj->DecRef(); return obj; } + T * detach() { T * obj = m_pI; m_pI = c3d_null; if ( obj != c3d_null ) obj->DecRef(); return obj; } /// \ru Нулевой указатель? \en Is null pointer? - bool is_null() const { return (( C3D_NULL_PTR == m_pI ) ? true : false ); } + bool is_null() const { return (( c3d_null == m_pI ) ? true : false ); } #ifdef C3D_STANDARD_CXX_11_PARTIAL public: @@ -138,8 +138,8 @@ inline SPtr & SPtr::assign( T * elem ) { if ( m_pI != elem ) { - if ( elem != C3D_NULL_PTR ) { elem->AddRef(); } - if ( m_pI != C3D_NULL_PTR ) { m_pI->Release(); } + if ( elem != c3d_null ) { elem->AddRef(); } + if ( m_pI != c3d_null ) { m_pI->Release(); } m_pI = elem; } return *this; @@ -150,10 +150,10 @@ inline SPtr & SPtr::assign( T * elem ) /** \brief \ru Автоматическая ссылка на объекты с подсчетом ссылок. \en Smart reference to objects with reference counter. \~ \details \ru Автоматическая ссылка (smart reference) на объекты с подсчетом ссылок. - Фактически тоже самое, что и SPtr, но без возможности равенства NULL.\n + Фактически тоже самое, что и SPtr, но без возможности равенства c3d_null.\n Требует от параметра шаблона реализации функций AddRef() и Release(). \n \en Smart reference to objects with reference counter. - Actually it is the same as SPtr but without the possibility of equality to NULL \n + Actually it is the same as SPtr but without the possibility of equality to c3d_null \n It requires Implementation of functions AddRef() and Release() from the template parameter. \n \~ \ingroup Base_Tools_SmartPointers */ diff --git a/C3d/Include/templ_stack.h b/C3d/Include/templ_stack.h index 8b0011f..2109dee 100644 --- a/C3d/Include/templ_stack.h +++ b/C3d/Include/templ_stack.h @@ -36,7 +36,7 @@ public: {} public: void Push( const Type & obj ); ///< \ru Добавить элемент в стек. \en Add an element to the stack. - Type & Pop(); ///< \ru Извлечь один элемент стека, если возвращаетя NULL, значит достигнуто дно стека. \en Retrieve one element from the stack, if NULL is returned then the bottom of stack is reached. + Type & Pop(); ///< \ru Извлечь один элемент стека, если возвращаетя c3d_null, значит достигнуто дно стека. \en Retrieve one element from the stack, if c3d_null is returned then the bottom of stack is reached. Type & Top() const; ///< \ru Верхний элемент стека (последний внесенный). \en The top element of the stack (the last added). // \ru Оставить доступными следующие методы: \en Leave an access to the next methods: diff --git a/C3d/Include/templ_t_list.h b/C3d/Include/templ_t_list.h index ce51fb3..e6d90f8 100644 --- a/C3d/Include/templ_t_list.h +++ b/C3d/Include/templ_t_list.h @@ -86,7 +86,7 @@ writer& operator << ( writer& out, const List& ref ) { // template reader& operator >> ( reader& in, List*& ptr ) { - ptr = NULL; + ptr = c3d_null; if ( in.good() ) { if ( in.MathVersion() < 0x06000012L ) diff --git a/C3d/Include/tool_enabler.h b/C3d/Include/tool_enabler.h index 5a7151f..6baae0d 100644 --- a/C3d/Include/tool_enabler.h +++ b/C3d/Include/tool_enabler.h @@ -21,7 +21,7 @@ \ingroup Base_Tools */ // --- -MATH_FUNC (void) EnableMathModules( const char * name, int nameLength, const char * key, int keyLength ); +extern "C" MATH_FUNC (void) EnableMathModules( const char * name, int nameLength, const char * key, int keyLength ); //------------------------------------------------------------------------------ @@ -32,7 +32,7 @@ MATH_FUNC (void) EnableMathModules( const char * name, int nameLength, const cha \ingroup Base_Tools */ // --- -MATH_FUNC (bool) VerifyLicenseKey( const char * name, const char * key, const char * pub_key ); +extern "C" MATH_FUNC (bool) VerifyLicenseKey( const char * name, const char * key, const char * pub_key ); //------------------------------------------------------------------------------ @@ -43,7 +43,7 @@ MATH_FUNC (bool) VerifyLicenseKey( const char * name, const char * key, const ch \ingroup Base_Tools */ // --- -MATH_FUNC (bool) IsMathModelerEnable(); +extern "C" MATH_FUNC (bool) IsMathModelerEnable(); //------------------------------------------------------------------------------ @@ -54,7 +54,7 @@ MATH_FUNC (bool) IsMathModelerEnable(); \ingroup Base_Tools */ // --- -MATH_FUNC (bool) IsMathConverterEnable(); +extern "C" MATH_FUNC (bool) IsMathConverterEnable(); //------------------------------------------------------------------------------ @@ -65,7 +65,7 @@ MATH_FUNC (bool) IsMathConverterEnable(); \ingroup Base_Tools */ // --- -MATH_FUNC (bool) IsMathSolverEnable(); +extern "C" MATH_FUNC (bool) IsMathSolverEnable(); //------------------------------------------------------------------------------ @@ -76,7 +76,7 @@ MATH_FUNC (bool) IsMathSolverEnable(); \ingroup Base_Tools */ // --- -MATH_FUNC (bool) IsMathVisionEnable(); +extern "C" MATH_FUNC (bool) IsMathVisionEnable(); //------------------------------------------------------------------------------ @@ -87,7 +87,7 @@ MATH_FUNC (bool) IsMathVisionEnable(); \ingroup Base_Tools */ // --- -MATH_FUNC (bool) IsMathBShaperEnable(); +extern "C" MATH_FUNC (bool) IsMathBShaperEnable(); //------------------------------------------------------------------------------ @@ -98,7 +98,7 @@ MATH_FUNC (bool) IsMathBShaperEnable(); \ingroup Base_Tools */ // --- -MATH_FUNC (void) FreeMathModulesChecker(); +extern "C" MATH_FUNC (void) FreeMathModulesChecker(); #endif // _TOOL_ENABLER_H_ diff --git a/C3d/Include/tool_memory_debug.h b/C3d/Include/tool_memory_debug.h index fb2d0a7..ac4e5cd 100644 --- a/C3d/Include/tool_memory_debug.h +++ b/C3d/Include/tool_memory_debug.h @@ -66,7 +66,7 @@ public: virtual void ReallocArrayStatistic( void * oldParr, size_t oldSize, void * newParr, size_t newSize, uint arrayType ) = 0; /// \ru Отчет по статистике изменений размера массива. \en A report by the statistics of array size changes. \~ \ingroup Base_Tools - virtual void ReallocReport( bool clear, const char * title = NULL ) = 0; + virtual void ReallocReport( bool clear, const char * title = c3d_null ) = 0; }; @@ -242,7 +242,7 @@ inline void * ReallocArraySize( void * arr_parr, size_t newBytesCount, bool ) void * tmp_parr = ::realloc( arr_parr, newBytesCount ); #endif - PRECONDITION( newBytesCount == 0 || tmp_parr != NULL ); // \ru проверка на нехватку памяти в массивах \en check the memory deficit in arrays + PRECONDITION( newBytesCount == 0 || tmp_parr != c3d_null ); // \ru проверка на нехватку памяти в массивах \en check the memory deficit in arrays #ifdef __MEMSET_USED_FREE_HEAP_HEAR__ if ( clear ) { diff --git a/C3d/Include/tool_multithreading.h b/C3d/Include/tool_multithreading.h index 63712ff..cb55318 100644 --- a/C3d/Include/tool_multithreading.h +++ b/C3d/Include/tool_multithreading.h @@ -222,19 +222,19 @@ class CacheManager : public CacheCleaner { bool _valid; List( unsigned int id, T* data ) : _id( id ), - _data( data != NULL ? data : new T() ), // Always _data != NULL. - _next( NULL ), + _data( data != c3d_null ? data : new T() ), // Always _data != c3d_null. + _next( c3d_null ), _valid( true ) {} ~List() { - if ( _data != NULL ) + if ( _data != c3d_null ) delete _data; - _data = NULL; - if ( _next != NULL ) // Also deletes linked List. + _data = c3d_null; + if ( _next != c3d_null ) // Also deletes linked List. delete _next; - _next = NULL; + _next = c3d_null; } private: - List() : _id( 0 ), _data( NULL ), _next( NULL ) {} + List() : _id( 0 ), _data( c3d_null ), _next( c3d_null ) {} }; private: @@ -310,9 +310,9 @@ private: // --- template inline CacheManager::CacheManager( bool createLock ) - : longTerm ( NULL ) - , tcache ( NULL ) - , lock ( NULL ) + : longTerm ( c3d_null ) + , tcache ( c3d_null ) + , lock ( c3d_null ) { if ( createLock ) { lock = new CommonMutex(); @@ -327,11 +327,11 @@ inline CacheManager::CacheManager( bool createLock ) // --- template inline CacheManager::CacheManager( const CacheManager & item ) - : longTerm ( NULL ) - , tcache ( NULL ) - , lock ( NULL ) + : longTerm ( c3d_null ) + , tcache ( c3d_null ) + , lock ( c3d_null ) { - if ( item.longTerm != NULL ) + if ( item.longTerm != c3d_null ) longTerm = new T( *item.longTerm ); #ifndef CACHE_DELETE_LOCK lock = new CommonMutex(); @@ -346,9 +346,9 @@ template inline CacheManager::~CacheManager() { CleanAll( false, true ); - if ( longTerm != NULL ) + if ( longTerm != c3d_null ) delete longTerm; - if ( lock != NULL ) + if ( lock != c3d_null ) delete lock; } @@ -362,7 +362,7 @@ template inline T* CacheManager::LongTerm () { try { - if ( longTerm == NULL ) + if ( longTerm == c3d_null ) longTerm = new T(); } catch ( const std::bad_alloc & ) { @@ -378,10 +378,10 @@ inline T* CacheManager::LongTerm () template inline CommonMutex* CacheManager::GetLockHard() { - if ( lock == NULL ) { + if ( lock == c3d_null ) { CommonMutex* ll = GetGlobalLock(); ll->lock(); - if ( lock == NULL ) + if ( lock == c3d_null ) lock = new CommonMutex(); ll->unlock(); } @@ -396,27 +396,27 @@ template inline T * CacheManager::operator()() { // \ru Создать данные по данным кэша главного потока. \en Create data using the data of the main thread cache. -#define INIT_BY_LONGTERM ( longTerm != NULL ? new T( *longTerm ) : new T() ) +#define INIT_BY_LONGTERM ( longTerm != c3d_null ? new T( *longTerm ) : new T() ) if ( !IsSafeMultithreading() || !IsInParallel() ) { CleanAll( true ); return LongTerm(); } - T * res = NULL; + T * res = c3d_null; unsigned int threadKey = GetThreadKey(); if ( FatalErrorHandler::HasError() ) return LongTerm(); - if ( tcache == NULL ) { + if ( tcache == c3d_null ) { // \ru Подписаться на сборку мусора, так как используются многопоточные кэши. // \en Subscribe on garbage collection because using multithreaded caches. SubcribeOnCleaning(); { // \ru Используется блокировка при изменении списка кэшей. \en Use lock when changing the cache list. ScopedLock sl( GetLock(), false ); - if ( tcache == NULL ) { + if ( tcache == c3d_null ) { try { tcache = new List( threadKey, INIT_BY_LONGTERM ); return tcache->_data; @@ -430,7 +430,7 @@ inline T * CacheManager::operator()() } List* entry = tcache; - while( entry != NULL ) { + while( entry != c3d_null ) { if ( entry->_id == threadKey ) { if ( !entry->_valid ) { try { @@ -450,7 +450,7 @@ inline T * CacheManager::operator()() } // \ru Если кэш не найден в списке, 'entry' содержит последний (на данный момент) элемент в списке. // \en If cache not found in the list, 'entry' contains the last element in the list (at that point). - if ( entry->_next == NULL ) + if ( entry->_next == c3d_null ) break; entry = entry->_next; } @@ -462,7 +462,7 @@ inline T * CacheManager::operator()() List * newList = new List( threadKey, res ); // \ru На данный момент, entry может быть не последним элементом в списке. // \en At that point, entry could be not a last element in the list. - while ( entry->_next != NULL ) { + while ( entry->_next != c3d_null ) { entry = entry->_next; } entry->_next = newList; @@ -485,10 +485,10 @@ inline T * CacheManager::operator()() template inline void CacheManager::Reset( bool resetLongTerm ) { - if ( tcache != NULL ) { + if ( tcache != c3d_null ) { ScopedLock sl( GetLock() ); List* entry = tcache; - while ( entry != NULL ) { + while ( entry != c3d_null ) { entry->_valid = false; entry = entry->_next; } @@ -496,13 +496,13 @@ inline void CacheManager::Reset( bool resetLongTerm ) if ( resetLongTerm ) { ScopedLock sl( GetLock() ); delete longTerm; - longTerm = NULL; + longTerm = c3d_null; // \ru Если нет параллельности, удаляется блокировка. \en If no parallelism, delete the lock. #ifdef CACHE_DELETE_LOCK if ( !sl.IsLocked() ) { - if ( lock != NULL ) + if ( lock != c3d_null ) delete lock; - lock = NULL; + lock = c3d_null; } #endif } @@ -516,24 +516,24 @@ template inline void CacheManager::CleanAll( bool doPostproc, bool force ) { if ( force || CacheCleanupAllowed() ) { - if ( tcache != NULL ) { + if ( tcache != c3d_null ) { if ( doPostproc ) Postprocess(); delete tcache; - tcache = NULL; + tcache = c3d_null; } #ifdef CACHE_DELETE_LOCK - if ( lock != NULL ) { + if ( lock != c3d_null ) { delete lock; - lock = NULL; + lock = c3d_null; } #endif if ( IsSubscribed() ) UnsubcribeOnCleaning(); #ifdef CACHE_DELETE_LOCK - if ( lock != NULL ) { + if ( lock != c3d_null ) { delete lock; - lock = NULL; + lock = c3d_null; } #endif } @@ -546,11 +546,11 @@ inline void CacheManager::CleanAll( bool doPostproc, bool force ) template inline void CacheManager::Postprocess() { - if ( tcache != NULL ) { + if ( tcache != c3d_null ) { LongTerm(); // Create longTerm List * entry = tcache; // Incorporate thread data into main thread data. - while ( entry != NULL && longTerm->MergeWith( entry->_data ) ) { + while ( entry != c3d_null && longTerm->MergeWith( entry->_data ) ) { entry = entry->_next; } } @@ -563,18 +563,18 @@ inline void CacheManager::Postprocess() template inline void CacheManager::HardReset() { - if ( tcache != NULL ) { + if ( tcache != c3d_null ) { delete tcache; - tcache = NULL; + tcache = c3d_null; } - if ( longTerm != NULL ) { + if ( longTerm != c3d_null ) { delete longTerm; - longTerm = NULL; + longTerm = c3d_null; } - if ( lock != NULL ) { + if ( lock != c3d_null ) { delete lock; - lock = NULL; + lock = c3d_null; } } diff --git a/C3d/Include/tool_mutex.h b/C3d/Include/tool_mutex.h index dce561d..571ed92 100644 --- a/C3d/Include/tool_mutex.h +++ b/C3d/Include/tool_mutex.h @@ -421,8 +421,8 @@ public: */ void Unlock() const; - // \ru Выдать указатель на объект мьютекса. Возращает NULL, если параллельности нет. Для использования в ScopedLock. - // \en Get a pointer to the mutex object. Return NULL if no parallelism. For use in ScopedLock. + // \ru Выдать указатель на объект мьютекса. Возращает c3d_null, если параллельности нет. Для использования в ScopedLock. + // \en Get a pointer to the mutex object. Return c3d_null if no parallelism. For use in ScopedLock. CommonMutex * GetLock() const; }; @@ -453,8 +453,8 @@ public: */ void Unlock() const; - /** \brief \ru Выдать указатель на объект мьютекса. Возращает NULL, если параллельности нет. Для использования в ScopedLock. - \en Get a pointer to the mutex object. Return NULL if no parallelism. For use in ScopedLock. + /** \brief \ru Выдать указатель на объект мьютекса. Возращает c3d_null, если параллельности нет. Для использования в ScopedLock. + \en Get a pointer to the mutex object. Return c3d_null if no parallelism. For use in ScopedLock. */ CommonRecursiveMutex * GetLock() const; }; diff --git a/C3d/Include/tool_quick_sort.h b/C3d/Include/tool_quick_sort.h index 2228ea4..5750ddb 100644 --- a/C3d/Include/tool_quick_sort.h +++ b/C3d/Include/tool_quick_sort.h @@ -222,17 +222,17 @@ void Swap( Type* arr, size_t ind1, size_t ind2 ) Analog of strcmp for strings, supplied by user for comparing the array elements. Accepts 2 pointers to elements and returns: negative value, if 1<2; 0, if 1=2; positive value, if 1>2. \~ - \param[out] base2 - \ru Указатель на второй массив (может быть NULL). - \en Pointer to the second array (could be NULL). \~ - \param[out] base3 - \ru Указатель на третий массив (может быть NULL). - \en Pointer to the third array (could be NULL). \~ + \param[out] base2 - \ru Указатель на второй массив (может быть c3d_null). + \en Pointer to the second array (could be c3d_null). \~ + \param[out] base3 - \ru Указатель на третий массив (может быть c3d_null). + \en Pointer to the third array (could be c3d_null). \~ \ingroup Base_Algorithms */ //--- template void InsertSort( Type * base, size_t num, - KsQSortCompFunc compareFunc, Type2* base2 = NULL, Type3* base3 = NULL ) + KsQSortCompFunc compareFunc, Type2* base2 = c3d_null, Type3* base3 = c3d_null ) { if ( num < 2 ) @@ -241,9 +241,9 @@ void InsertSort( Type * base, if ( num == 2 ) { if ( compareFunc( base, base + 1 ) >= 0 ) { Swap( base, 0, 1 ); - if ( base2 != NULL ) { + if ( base2 != c3d_null ) { Swap( base2, 0, 1 ); - if ( base3 != NULL ) + if ( base3 != c3d_null ) Swap( base3, 0, 1 ); } } @@ -253,9 +253,9 @@ void InsertSort( Type * base, for ( ptrdiff_t i = 1; i < (ptrdiff_t)num; ++i ) { for ( ptrdiff_t j = i; j > 0 && compareFunc( base + j - 1, base + j ) >= 0; j-- ) { Swap( base, j - 1, j ); - if ( base2 != NULL ) { + if ( base2 != c3d_null ) { Swap( base2, j - 1, j ); - if ( base3 != NULL ) + if ( base3 != c3d_null ) Swap( base3, j - 1, j ); } } @@ -291,17 +291,17 @@ void InsertSort( Type * base, negative value, if 1<2; 0, if 1=2, positive value, if 1>2. \~ - \param[out] base2 - \ru Указатель на второй массив (может быть NULL). - \en Pointer to the second array (could be NULL). \~ - \param[out] base3 - \ru Указатель на третий массив (может быть NULL). - \en Pointer to the third array (could be NULL). \~ + \param[out] base2 - \ru Указатель на второй массив (может быть c3d_null). + \en Pointer to the second array (could be c3d_null). \~ + \param[out] base3 - \ru Указатель на третий массив (может быть c3d_null). + \en Pointer to the third array (could be c3d_null). \~ \ingroup Base_Algorithms */ //--- template void QuickSort( Type * base, size_t num, - KsQSortCompFunc compareFunc, Type2* base2 = NULL, Type3* base3 = NULL ) + KsQSortCompFunc compareFunc, Type2* base2 = c3d_null, Type3* base3 = c3d_null ) { #define QSORT_THRESHOLD 25 // \ru Порог перехода на другой тип сортировки.\en Threshold of transition to another sorting. @@ -317,9 +317,9 @@ void QuickSort( Type * base, if ( num == 2 ) { if ( compareFunc( base, base + 1 ) >= 0 ) { Swap( base, 0, 1 ); - if ( base2 != NULL ) { + if ( base2 != c3d_null ) { Swap( base2, 0, 1 ); - if ( base3 != NULL ) + if ( base3 != c3d_null ) Swap( base3, 0, 1 ); } } @@ -338,9 +338,9 @@ void QuickSort( Type * base, // \ru Выбирается базовый элемент (используется средний). \en Select a base element (use the middle one). midIndex = ( rightIndex + leftIndex ) / 2; Swap( base, midIndex, leftIndex ); - if ( base2 != NULL ) { + if ( base2 != c3d_null ) { Swap( base2, midIndex, leftIndex ); - if ( base3 != NULL ) + if ( base3 != c3d_null ) Swap( base3, midIndex, leftIndex ); } @@ -369,17 +369,17 @@ void QuickSort( Type * base, break; Swap( base, lInd, rInd ); - if ( base2 != NULL ) { + if ( base2 != c3d_null ) { Swap( base2, lInd, rInd ); - if ( base3 != NULL ) + if ( base3 != c3d_null ) Swap( base3, lInd, rInd ); } } Swap( base, leftIndex, rInd ); - if ( base2 != NULL ) { + if ( base2 != c3d_null ) { Swap( base2, leftIndex, rInd ); - if ( base3 != NULL ) + if ( base3 != c3d_null ) Swap( base3, leftIndex, rInd ); } diff --git a/C3d/Include/tool_string_util.h b/C3d/Include/tool_string_util.h index c06b678..7e6aa3a 100644 --- a/C3d/Include/tool_string_util.h +++ b/C3d/Include/tool_string_util.h @@ -44,7 +44,7 @@ inline const char* strret( const char* str ) { return str; } /// \ru Возвр inline char * strnewdup( const char * str, size_t minLen = 0 ) { if ( !str ) - return NULL; + return c3d_null; size_t len = strlen( str ); @@ -65,7 +65,7 @@ inline char * strnewdup( const char * str, size_t minLen = 0 ) inline wchar_t * wcsnewdup( const wchar_t * str, size_t minLen = 0 ) { if ( !str ) - return NULL; + return c3d_null; size_t len = wcslen( str ); @@ -85,15 +85,15 @@ inline wchar_t * wcsnewdup( const wchar_t * str, size_t minLen = 0 ) //--- inline wchar_t * mbsnewwcs( const char * str ) { - wchar_t * res = NULL; + wchar_t * res = c3d_null; if ( str ) { #ifndef __MOBILE_VERSION__ #ifdef C3D_WINDOWS // _MSC_VER - size_t n = mbstowcs( NULL, str, 0 ); + size_t n = mbstowcs( c3d_null, str, 0 ); #else // C3D_WINDOWS - size_t n = std::mbstowcs( NULL, str, 0 ); + size_t n = std::mbstowcs( c3d_null, str, 0 ); #endif // C3D_WINDOWS if ( n != NSIZE ) @@ -154,15 +154,15 @@ inline wchar_t * mbsnewwcs( const char * str ) //--- inline char * wcsnewmbs( const wchar_t * str ) { - char * res = NULL; + char * res = c3d_null; if ( str ) { // \ru один WCHAR может занять более одного CHAR! \en one WCHAR may replace more than one CHAR! #ifdef C3D_WINDOWS // _MSC_VER - size_t n = wcstombs( NULL, str, 0 ); + size_t n = wcstombs( c3d_null, str, 0 ); #else // C3D_WINDOWS - size_t n = std::wcstombs( NULL, str, 0 ); + size_t n = std::wcstombs( c3d_null, str, 0 ); #endif // C3D_WINDOWS if ( n != NSIZE ) @@ -371,10 +371,10 @@ inline const char * strret( const char * str ) { return str; } /// \ru В \ingroup Base_Tools_String */ //--- -inline uint32* Utf16ToUcs4( uint16* source, size_t* calculateCountSymbol = NULL ) +inline uint32* Utf16ToUcs4( uint16* source, size_t* calculateCountSymbol = c3d_null ) { size_t count = 0; // \ru количество символов в строке \en a number of symbols in string - uint32 * outBuf = NULL; + uint32 * outBuf = c3d_null; if ( source ) { while (source[count] != 0) @@ -400,10 +400,10 @@ inline uint32* Utf16ToUcs4( uint16* source, size_t* calculateCountSymbol = NULL \ingroup Base_Tools_String */ //--- -inline uint16* Ucs4ToUtf16( uint32* source, size_t* calculateCountSymbol = NULL ) +inline uint16* Ucs4ToUtf16( uint32* source, size_t* calculateCountSymbol = c3d_null ) { size_t count = 0; // \ru количество символов в строке \en a number of symbols in string - uint16 * outBuf = NULL; + uint16 * outBuf = c3d_null; if ( source ) { while (source[count] != 0) diff --git a/C3d/Include/tool_time_test.h b/C3d/Include/tool_time_test.h index 6c6ec3e..37943d0 100644 --- a/C3d/Include/tool_time_test.h +++ b/C3d/Include/tool_time_test.h @@ -193,7 +193,7 @@ MATH_FUNC(void) TimeTestReport( const TCHAR * fileName ); //------------------------------------------------------------------------------ // \ru выдать все результаты \en return all results // --- -MATH_FUNC(TimeTest *)GetTimeTestResults (); +MATH_FUNC(TimeTest *) GetTimeTestResults (); MATH_FUNC(void) SortResultMeasuring( TimeTest &, std::vector & ); diff --git a/C3d/Include/topology.h b/C3d/Include/topology.h index 0010e4f..1040ef9 100644 --- a/C3d/Include/topology.h +++ b/C3d/Include/topology.h @@ -249,10 +249,10 @@ public : virtual MbeTopologyType IsA() const; // \ru Тип элемента. \en A type of element. /// \ru Создать новую вершину копированием всех данных исходной вершины. \en Create new vertex by copying all data of the initial vertex. - virtual MbVertex * DataDuplicate( MbRegDuplicate * = NULL ) const; - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвинуть вдоль вектора. \en Move along a vector. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate around an axis. + virtual MbVertex * DataDuplicate( MbRegDuplicate * = c3d_null ) const; + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвинуть вдоль вектора. \en Move along a vector. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate around an axis. virtual double DistanceToPoint( const MbCartPoint3D & ) const; // \ru Вычислить расстояние до точки. \en Calculate the distance to a point. virtual void AddYourGabaritTo( MbCube & ) const; // \ru Добавить свой габарит в присланный габарит. \en Add your own bounding box into the sent bounding box. virtual void CalculateLocalGabarit( const MbMatrix3D & into, MbCube & cube ) const; // \ru Рассчитать габарит в локальной системы координат. \en Calculate bounding box in the local coordinate system. @@ -315,10 +315,10 @@ IMPL_PERSISTENT_OPS( MbVertex ) // --- class MATH_CLASS MbEdge : public MbTopologyItem { protected : - MbCurve3D * curve; ///< \ru Кривая, по которой проходит ребро (всегда не NULL). \en A curve, an edge passes by (it is always not NULL). + MbCurve3D * curve; ///< \ru Кривая, по которой проходит ребро (всегда не c3d_null). \en A curve, an edge passes by (it is always not c3d_null). bool sameSense; ///< \ru Признак совпадения направления ребра с направлением кривой. \en An attribute of coincidence between direction of curve and direction of edge. - MbVertex * begVertex; ///< \ru Вершина-начало (всегда не NULL). \en Start vertex (always not NULL). - MbVertex * endVertex; ///< \ru Вершина-конец (всегда не NULL). \en End vertex (always not NULL). + MbVertex * begVertex; ///< \ru Вершина-начало (всегда не c3d_null). \en Start vertex (always not c3d_null). + MbVertex * endVertex; ///< \ru Вершина-конец (всегда не c3d_null). \en End vertex (always not c3d_null). protected : /// \ru Конструктор копирования. \en Copy constructor. @@ -358,10 +358,10 @@ public : virtual MbeTopologyType IsA() const; // \ru Тип элемента. \en A type of element. /// \ru Создать новое ребро копированием всех данных исходного ребра. \en Create new edge by copying all data of the initial edge. - virtual MbEdge * DataDuplicate( MbRegDuplicate * = NULL ) const; - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Трансформация. \en Transformation. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Перемещение. \en Moving. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Вращение. \en Rotation. + virtual MbEdge * DataDuplicate( MbRegDuplicate * = c3d_null ) const; + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Трансформация. \en Transformation. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Перемещение. \en Moving. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Вращение. \en Rotation. virtual double DistanceToPoint( const MbCartPoint3D & ) const; // \ru Вычислить расстояние до точки. \en Calculate the distance to a point. virtual void AddYourGabaritTo( MbCube & ) const; // \ru Добавить свой габарит в присланный габарит. \en Add your own bounding box into the sent bounding box. virtual void CalculateLocalGabarit( const MbMatrix3D & into, MbCube & cube ) const; // \ru Рассчитать габарит в локальной системы координат. \en Calculate bounding box in the local coordinate system. @@ -443,7 +443,7 @@ public : bool IsClosed() const; /// \ru Установить метку себе и вершинам. \en Set a label for self and vertices. - void SetLabelThrough( MbeLabelState l, void * key = NULL ) const; + void SetLabelThrough( MbeLabelState l, void * key = c3d_null ) const; /// \ru Установить метку себе и вершинам. \en Set a label for self and vertices. void SetLabelThrough( MbeLabelState l, void * key, bool setLock ) const; /// \ru Удалить частную метку себе и вершинам. \en Remove private label for self and vertices. @@ -585,7 +585,7 @@ public : virtual MbeTopologyType IsA() const; // \ru Тип элемента. \en A type of element. /// \ru Создать новое ребро копированием всех данных исходного ребра. \en Create new edge by copying all data of the initial edge. - virtual MbCurveEdge * DataDuplicate( MbRegDuplicate * = NULL ) const; + virtual MbCurveEdge * DataDuplicate( MbRegDuplicate * = c3d_null ) const; virtual void SetOwnChangedThrough( MbeChangedType ); // \ru Установить флаг изменения в положение измененного объекта. \en Set the flag that the object has been changed. virtual void Reverse(); // \ru Изменить направление ребра на противоположной, не изменяя кривую. \en Change direction of edge without changing a curve. /// \ru Являются ли объекты равными? \en Determine whether objects are equal. @@ -627,7 +627,7 @@ public : bool IsUsual( bool tolerantIsUsual ) const; /// \ru Установить метки ориентированных ребер. \en Set labels of oriented edges. - void SetOrientedEdgesLabel( MbeLabelState, void * key = NULL ); + void SetOrientedEdgesLabel( MbeLabelState, void * key = c3d_null ); /// \ru Найти ориентированное ребро. \en Find an oriented edge. bool FindOrientedEdge( bool orient, const MbFace * face, MbLoop *& findLoop, size_t & index ) const; /// \ru Найти ориентированное ребро. \en Find an oriented edge. @@ -712,7 +712,7 @@ public : The calculation is correct for edges which do not change a convexity. Returns ts_neutral for smooth edges. \~ */ - ThreeStates IsConvex( double angleEps = EXTENT_EPSILON, const MbRect1D * tRange = NULL ) const; + ThreeStates IsConvex( double angleEps = EXTENT_EPSILON, const MbRect1D * tRange = c3d_null ) const; /**\ru Скопировать из копии готовые метрические оценки, которые в оригинале не были рассчитаны. \en Copy from the copy ready estimates which were not calculated in the original. \~ @@ -834,7 +834,7 @@ public : \en Prolong an edge. \~ \details \ru Продолжить кривую пересечения ребра до параметра t, лежащего за пределами области определения. \n \en Continue the intersection curve of edge by the parameter t, lying outside of the curve. \n \~ - \param[in/out] t - \ru Параметра на продолжении кривой ребра. + \param[in,out] t - \ru Параметра на продолжении кривой ребра. \en Parameter outside of the intersection curve. \~ \param[in] begin - \ru Начало (true) или конец (false) ребра продолжить. \en The edge should be prolonged by the beginning (true) or by the ending (false). \~ @@ -855,20 +855,18 @@ public : \en Merging of two connected edges: \n Before the call AddRef should be done on the edges, since one of the edges may be deleted, and after the call and using the edges Release should be done on them. \n \~ - \param[in/out] edge2 - \ru Присоединяемое ребро. + \param[in,out] edge2 - \ru Присоединяемое ребро. \en Merging edge. \~ \param[in] begin1 - \ru К началу (true) или к концу (false) ребра this стыкуется присоединяемое ребро. \en This edge is joined by the beginning (true) or by the ending (false). \~ \param[in] begin2 - \ru Началом (true) или концом (false) стыкуется присоединяемое ребро к ребру this. \en The edge2 is joined by the beginning (true) or by the ending (false). \~ - \param[in] version - \ru Версия операции. - \en Version of operation. \~ - \param[in] addParentNamesAttributes - \ru Добавить атрибут имени с именами слитых ребер. - \en Add name attribute with names of merged edges. \~ + \param[in] snMaker - \ru Именователь с версией операции. + \en Names maker with a version of operation. \~ \return \ru Возвращает поглощенное ребро edge2, которое можно удалять. \en Returns absorbed edge (edge2), which can be removed. \~ */ - MbCurveEdge * MergeEdges( MbCurveEdge & edge2, bool begin1, bool begin2, VERSION version, bool addParentNamesAttributes ); + MbCurveEdge * MergeEdges( MbCurveEdge & edge2, bool begin1, bool begin2, const MbSNameMaker & snMaker ); /// \ru Собрать все ребра, стыкующиеся с заданным ребром в его начале begin==true (конце begin==false). \en Collect all edges which are connected with the given edge at its start vertex (begin==true) or at its end vertex (begin==false). void GetConnectedEdges( bool begin, RPArray & edges, SArray & orients ) const; @@ -925,7 +923,7 @@ IMPL_PERSISTENT_OPS( MbCurveEdge ) // --- class MATH_CLASS MbOrientedEdge : public MbTopItem { protected: - MbCurveEdge * curveEdge; ///< \ru Ребро грани (всегда не NULL). \en Face edge (always not NULL). + MbCurveEdge * curveEdge; ///< \ru Ребро грани (всегда не c3d_null). \en Face edge (always not c3d_null). bool orientation; ///< \ru Направление ребра грани в цикле. \en Direction of a face edge in the loop. mutable MbLabel label; ///< \ru Временная метка для выполнения операций. \en Temporary label for performing of operations. public : @@ -994,7 +992,7 @@ public : template void GetVerticesArray( VerticesVector & vertices, bool findSame = true ) const { - const MbVertex * lastVertex= NULL; + const MbVertex * lastVertex= c3d_null; if ( vertices.size() > 0 ) lastVertex = vertices.back(); @@ -1021,15 +1019,15 @@ public : void SetOrientation( bool o ); /// \ru Получить метку. \en Get label. - MbeLabelState GetLabel( void * key = NULL ) const { return (MbeLabelState)label.GetLabel(key);} + MbeLabelState GetLabel( void * key = c3d_null ) const { return (MbeLabelState)label.GetLabel(key);} /// \ru Установить свою метку. \en Set label. - void SetOwnLabel( MbeLabelState l, void * key = NULL ) const { label.SetLabel( l, key ); } + void SetOwnLabel( MbeLabelState l, void * key = c3d_null ) const { label.SetLabel( l, key ); } /// \ru Установить метку ориентированному ребру, ребру грани и вершинам ребра. \en Set label for oriented edge, face edge and vertices of edge. - void SetLabelThrough( MbeLabelState l, void * key = NULL ) const; + void SetLabelThrough( MbeLabelState l, void * key = c3d_null ) const; /// \ru Установить метку ориентированному ребру, ребру грани и вершинам ребра. \en Set label for oriented edge, face edge and vertices of edge. void SetLabelThrough( MbeLabelState l, void * key, bool setLock ) const; /// \ru Удалить частную метку. \en Remove private label. - void RemovePrivateLabel ( void * key = NULL ) const { label.DeletePrivate(key); } + void RemovePrivateLabel ( void * key = c3d_null ) const { label.DeletePrivate(key); } /// \ru Удалить частную метку ориентированному ребру, ребру грани и вершинам ребра. \en Remove private label for oriented edge, face edge and vertices of edge. void RemovePrivateLabelThrough( void * key ) const; @@ -1126,21 +1124,21 @@ public : size_t GetEdgesCount() const { return edgeList.size(); } /// \ru Получить метку цикла. \en Get a label of the loop. - MbeLabelState GetLabel( void * key = NULL ) const { return (MbeLabelState)label.GetLabel(key); } + MbeLabelState GetLabel( void * key = c3d_null ) const { return (MbeLabelState)label.GetLabel(key); } /// \ru Установить метку. \en Set a label of the loop. - void SetOwnLabel( MbeLabelState l, void * key = NULL ) const { label.SetLabel( l, key ); } + void SetOwnLabel( MbeLabelState l, void * key = c3d_null ) const { label.SetLabel( l, key ); } /// \ru Установить метку себе и ребрам цикла. \en Set a label for self and loop vertices. - void SetLabelThrough( MbeLabelState l, void * key = NULL ) const; + void SetLabelThrough( MbeLabelState l, void * key = c3d_null ) const; /// \ru Установить метку себе и ребрам цикла. \en Set a label for self and loop vertices. void SetLabelThrough( MbeLabelState l, void * key, bool setLock ) const; /// \ru Удалить частную метку себе и ребрам цикла. \en Remove private label for self and loop edges. void RemovePrivateLabelThrough( void * key ) const; /// \ru Установить метку ребрам. \en Set a label for edges. - void SetCurveEdgesLabel( MbeLabelState, void * key = NULL ) const; + void SetCurveEdgesLabel( MbeLabelState, void * key = c3d_null ) const; /// \ru Проверить метки рёбер и установить свою метку. \en Check edges labels and set own label. - void CheckEdgesLabel( void * key = NULL ) const; + void CheckEdgesLabel( void * key = c3d_null ) const; /// \ru Удалить частную метку. \en Remove private label. - void RemovePrivateLabel ( void * key = NULL ) const { label.DeletePrivate(key); } + void RemovePrivateLabel ( void * key = c3d_null ) const { label.DeletePrivate(key); } /// \ru Выдать множество вершин цикла. \en Get a set of loop vertices. template @@ -1183,7 +1181,7 @@ public : /// \ru Замена базового ребра. \en Replacement of the basis edge. void InitOrientedEdge( size_t edgeIndex, MbCurveEdge & initEdge, bool initOrientation, bool replaceVertices ); /// \ru Выдать ориентированное ребро по номеру. \en Get an oriented edge by the number. - MbOrientedEdge * GetOrientedEdge( size_t index ) const { return (index < edgeList.size()) ? edgeList[index] : NULL; } + MbOrientedEdge * GetOrientedEdge( size_t index ) const { return (index < edgeList.size()) ? edgeList[index] : c3d_null; } /// \ru Выдать ориентированное ребро по номеру без проверки корректности индекса. \en Get an oriented edge by the number without check of correctness of the index. MbOrientedEdge *_GetOrientedEdge( size_t index ) const { return edgeList[index]; } @@ -1205,9 +1203,9 @@ public : /// \ru Удалить ребро с заданным индексом. \en Delete an edge at the given index. void DeleteEdge ( size_t index ); /// \ru Отцепить все ребра от цикла. \en Detach all edges from the loop. - void DetachEdges(); + void DetachEdges( bool setNullToFace = false ); /// \ru Удалить все ребра из цикла. \en Delete all edges of the loop. - void DeleteEdges(); + void DeleteEdges( bool setNullToFace = false ); /// \ru Дать номер ребра грани в цикле. \en Get the number of a face edge in the loop. size_t GetEdgeIndex( const MbCurveEdge & edge, bool orient ) const; @@ -1220,7 +1218,7 @@ public : void Inverse(); /// \ru Принадлежит ли вершина пути. \en Does a vertex belong a path? - bool IsVertexOn( const MbVertex * vertex, size_t * index = NULL ) const; + bool IsVertexOn( const MbVertex * vertex, size_t * index = c3d_null ) const; /// \ru Замена указателей на поверхность. \en Replacement of the pointers to a surface. void ChangeSurface( MbSurface & oldSurf, MbSurface & newSurf, bool orient ); @@ -1264,11 +1262,11 @@ public : void SetProperties( const MbProperties & ); /// \ru Преобразовать объект согласно матрице. \en Transform an object according to the matrix. - void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); + void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); /// \ru Сдвинуть объект вдоль вектора. \en Move an object along a vector. - void Move ( const MbVector3D &, MbRegTransform * = NULL ); + void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); /// \ru Повернуть объект вокруг оси на заданный угол. \en Rotate an object at a given angle around an axis. - void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); + void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); /// \ru Сдвинуть двумерные кривые вдоль вектора в области параметров поверхности (все сразу). \en Move two-dimensional curves along the vector in the surface parameter region (all at once). void Move( MbVector &, const MbSurface &, bool ); /// \ru Является ли контур граничным? \en Is a contour boundary? @@ -1301,7 +1299,7 @@ public: const MbCurveEdge * edge; ///< \ru Ребро цикла. \en Loop edge. double curveParam; ///< \ru Параметр двумерной кривой ребра, лежащей на поверхности грани. \en The parameter of two-dimensional curve that lies on the surface of a face and is contained in the edge. public: - LoopCrossParam() : loopIndex( SYS_MAX_T), edge( NULL ), curveParam( UNDEFINED_DBL ) {} + LoopCrossParam() : loopIndex( SYS_MAX_T), edge( c3d_null ), curveParam( UNDEFINED_DBL ) {} LoopCrossParam( size_t li, const MbCurveEdge * e, double t ) : loopIndex( li ), edge( e ), curveParam( t ) {} LoopCrossParam( const LoopCrossParam & obj ) : loopIndex( obj.loopIndex ), edge( obj.edge ), curveParam( obj.curveParam ) {} @@ -1360,7 +1358,7 @@ public: // --- class MATH_CLASS MbFace : public MbTopologyItem, public MbSyncItem { protected: - MbSurface * surface; ///< \ru Поверхность грани (всегда не NULL). \en Face surface (always not NULL). + MbSurface * surface; ///< \ru Поверхность грани (всегда не c3d_null). \en Face surface (always not c3d_null). bool sameSense; ///< \ru Признак совпадения направления нормали грани с нормалью поверхности. \en An attribute of coincidence between the face normal direction and the surface normal direction. RPArray loops; ///< \ru Границы грани (первая граница должна быть внешней). \en Face boundaries (the first boundary should be external). private: @@ -1380,11 +1378,11 @@ public: , loops( bnds.size(), 1 ) , surface( const_cast(&surf) ) , sameSense( sense ) // признак совпадения нормали - , temporal( NULL ) + , temporal( c3d_null ) { surface->AddRef(); for ( size_t i = 0, cnt = bnds.size(); i < cnt; ++i ) { - if ( bnds[i] != NULL ) + if ( bnds[i] != c3d_null ) AddLoop( *bnds[i] ); } } @@ -1401,10 +1399,10 @@ public: virtual MbeTopologyType IsA() const; // \ru Тип элемента. \en A type of element. /// \ru Создать новую грань копированием всех данных исходной грани. \en Create new face by copying all data of the initial face. - virtual MbFace * DataDuplicate( MbRegDuplicate * = NULL ) const; - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Трансформация. \en Transformation. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Перемещение. \en Moving. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Вращение. \en Rotation. + virtual MbFace * DataDuplicate( MbRegDuplicate * = c3d_null ) const; + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Трансформация. \en Transformation. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Перемещение. \en Moving. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Вращение. \en Rotation. virtual double DistanceToPoint( const MbCartPoint3D & ) const; // \ru Вычислить расстояние до точки. \en Calculate the distance to a point. virtual void AddYourGabaritTo( MbCube & ) const; // \ru Добавить свой габарит в присланный габарит. \en Add your own bounding box into the sent bounding box. virtual void CalculateLocalGabarit( const MbMatrix3D & into, MbCube & cube ) const; // \ru Рассчитать габарит в локальной системы координат. \en Calculate bounding box in the local coordinate system. @@ -1414,7 +1412,7 @@ public: /// \ru Выдать поверхность грани для модификации. \en Get a surface of a face for modifications. virtual MbSurface & SetSurface(); /// \ru Является ли грань плоской? \en Is a face planar? - virtual bool IsPlanar() const; + virtual bool IsPlanar( double accuracy = METRIC_EPSILON ) const; /// \ru Дать плоскость (или только возможность ее выдачи). \en Get a plane (or only a possibility of getting a plane) virtual bool GetPlacement( MbPlacement3D * ) const; /// \ru Выдать направление нормали грани по отношению к нормали поверхности. \en Get direction of face normal in relation to the direction of surface normal. @@ -1441,7 +1439,7 @@ public: /// \ru Выдать количество циклов (границ) грани . \en Get the number of loops (boundaries) of face. size_t GetLoopsCount() const { return loops.size(); } /// \ru Установить метку грани, циклам, рёбрам и вершинам. \en Set a label of face to its loops, edges and vertices. - void SetLabelThrough( MbeLabelState l, void * key = NULL ) const; + void SetLabelThrough( MbeLabelState l, void * key = c3d_null ) const; /// \ru Установить метку грани, циклам, рёбрам и вершинам. \en Set a label of face to its loops, edges and vertices. void SetLabelThrough( MbeLabelState l, void * key, bool setLock ) const; /// \ru Удалить частную метку грани, циклам, рёбрам и вершинам. \en Remove a private label of face to its loops, edges and vertices. @@ -1457,7 +1455,7 @@ public: size_t loopsCnt = loops.size(); vertices.reserve( vertices.size() + loopsCnt * 4 ); for ( size_t i = 0; i < loopsCnt; ++i ) { - if ( loops[i] != NULL ) + if ( loops[i] != c3d_null ) loops[i]->GetVertices( vertices ); } } @@ -1474,7 +1472,7 @@ public: bool HasNeighborFace() const; /// \ru Выдать границу (цикл) с проверкой корректности индекса. \en Get a boundary (a loop) with a check of index correctness. - MbLoop * GetLoop( size_t index ) const { size_t cnt = loops.size(); return cnt ? loops[index % cnt] : NULL; } + MbLoop * GetLoop( size_t index ) const { size_t cnt = loops.size(); return cnt ? loops[index % cnt] : c3d_null; } /// \ru Выдать границу (цикл) без проверки корректности индекса. \en Get a boundary (a loop) without a check of index correctness. MbLoop *_GetLoop( size_t index ) const { return loops[index]; } /// \ru Обнулить количество ребер в цикле с указанным индексом. \en Set to null the number of edges in loop with the given index. @@ -1498,9 +1496,9 @@ public: /// \ru Установить указатели ребер цикла на грань. \en Set the pointers of loop edges to the face. void SetFaceToLoopEdges( MbLoop & ); - /// \ru Установить указатели на грань слева или грань справа в ребрах цикла на NULL. \en Set to null the pointers to the face on the left or to the face on the right in edges of loop. + /// \ru Установить указатели на грань слева или грань справа в ребрах цикла на c3d_null. \en Set to null the pointers to the face on the left or to the face on the right in edges of loop. void SetNullToLoopEdges( MbLoop & ); - /// \ru Установить указатели на грань слева или грань справа в ребрах циклов на NULL. \en Set to null the pointers to the face on the left or to the face on the right in edges of loops. + /// \ru Установить указатели на грань слева или грань справа в ребрах циклов на c3d_null. \en Set to null the pointers to the face on the left or to the face on the right in edges of loops. void SetNullToLoopsEdges(); /// \ru Обнулить указатели на грань слева или грань справа, указывающие на смежную грань delFace, в ребрах циклов. \en Set to null pointers to the face on the left or to the face on the right which point to the adjacent face delFace in edges of loops. void SetNullToFace( const MbFace * delFace ); @@ -1510,7 +1508,7 @@ public: void MakeRight( bool setBounds = false ); /// \ru Принадлежит ли вершина грани? \en Does a vertex belong an edge? - bool IsVertexOn( const MbVertex * vertex, size_t * indLoop = NULL, size_t * indEdge = NULL ) const; + bool IsVertexOn( const MbVertex * vertex, size_t * indLoop = c3d_null, size_t * indEdge = c3d_null ) const; /** \brief \ru Изменить ориентацию грани. \en Change an orientation of a face. \~ @@ -1548,7 +1546,7 @@ public: void CalculateWire( const MbStepData & stepData, MbMesh & mesh ) const // The method deprecated. It will be removed at 2019. Use CalculateMesh( stepData, MbFormNote(true, false), mesh ); \~ { CalculateMesh( stepData, MbFormNote(true, false), mesh ); } /// \ru Связаны ли грани? \en Are faces connected? - bool IsConnectedWith( const MbFace * face, RPArray * commonEdges = NULL ) const; + bool IsConnectedWith( const MbFace * face, RPArray * commonEdges = c3d_null ) const; /// \ru Подобны ли поверхности для объединения трансформацией по матрице (первичная проверка)? \en Are surfaces similar for merge by transformation by the matrix (a primary check)? bool IsSimilarToFace( const MbFace & face, bool & normal, bool & planeType, VERSION version, double precision = METRIC_PRECISION ) const; /// \ru Подобны ли поверхности для объединения путем замены (первичная проверка)? \en Are surfaces similar for merge by replacement (a primary check)? @@ -1594,7 +1592,7 @@ public: const MbCurveEdge * FindEdgeByName( const MbName & ) const; /// \ru Установить метку ориентированного ребра. \en Set a label for an oriented edge. - void SetOrientedLabel ( const MbCurveEdge & edge, MbeLabelState n, void * key = NULL ); + void SetOrientedLabel ( const MbCurveEdge & edge, MbeLabelState n, void * key = c3d_null ); /// \ru Вычислить ближайшее расстояние до ребра и ближайшие точки грани и ребра. \en Calculate the nearest distance to an edge and the nearest points of an edge. double DistanceToEdge ( const MbCurveEdge & edge, MbCartPoint3D & p, MbCartPoint3D & edgeP ) const; /// \ru Вычислить ближайшее расстояние до грани и ближайшие точки граней. \en Calculate the nearest distance to a face and the nearest points of faces. @@ -1772,7 +1770,7 @@ public: public: /// \ru Создан ли временный объект сопровождения грани? \en Is a temporary object for the maintenance of a face created? - bool IsTemporal() const { return (temporal != NULL); } + bool IsTemporal() const { return (temporal != c3d_null); } /// \ru Удалить временный объект сопровождения. \en Delete a temporary maintenance object. void RemoveTemporal() const; /// \ru Создать новый временный объект сопровождения. \en Create new temporary maintenance object. @@ -1803,7 +1801,7 @@ void MbFace::GetEdges( EdgesVector & edges, size_t mapThreshold ) const if ( edges.size() < 1 ) { size_t checkCnt = 0; for ( size_t i = 0; i < loopsCnt; ++i ) { - if ( loops[i] != NULL ) { + if ( loops[i] != c3d_null ) { checkCnt += loops[i]->GetEdgesCount(); if ( checkCnt > mapThreshold ) { useMap = true; @@ -1819,9 +1817,9 @@ void MbFace::GetEdges( EdgesVector & edges, size_t mapThreshold ) const c3d::EdgeSPtr edge; for ( size_t i = 0; i < loopsCnt; ++i ) { MbLoop * loop = loops[i]; - if ( loop != NULL ) { + if ( loop != c3d_null ) { for ( size_t j = 0, edgesCnt = loop->GetEdgesCount(); j < edgesCnt; ++j ) { - if ( loop->_GetOrientedEdge( j ) != NULL ) { + if ( loop->_GetOrientedEdge( j ) != c3d_null ) { edge = &loop->_GetOrientedEdge( j )->GetCurveEdge(); mapIt = mapEdges.find( edge ); if ( mapIt == mapEdges.end() ) { @@ -1838,7 +1836,7 @@ void MbFace::GetEdges( EdgesVector & edges, size_t mapThreshold ) const } if ( !useMap ) { for ( size_t i = 0; i < loopsCnt; ++i ) { - if ( loops[i] != NULL ) + if ( loops[i] != c3d_null ) loops[i]->GetEdges( edges ); } } @@ -1858,7 +1856,7 @@ void MbFace::GetOuterEdges( EdgesVector & edges, size_t mapThreshold ) const if ( edges.size() < 1 ) { size_t checkCnt = 0; - if ( loops.front() != NULL ) { + if ( loops.front() != c3d_null ) { checkCnt += loops.front()->GetEdgesCount(); if ( checkCnt > mapThreshold ) useMap = true; @@ -1871,7 +1869,7 @@ void MbFace::GetOuterEdges( EdgesVector & edges, size_t mapThreshold ) const c3d::EdgeSPtr edge; MbLoop * loop = loops.front(); for ( size_t j = 0, edgesCnt = loop->GetEdgesCount(); j < edgesCnt; ++j ) { - if ( loop->_GetOrientedEdge( j ) != NULL ) { + if ( loop->_GetOrientedEdge( j ) != c3d_null ) { edge = &loop->_GetOrientedEdge( j )->GetCurveEdge(); mapIt = mapEdges.find( edge ); if ( mapIt == mapEdges.end() ) { @@ -1885,7 +1883,7 @@ void MbFace::GetOuterEdges( EdgesVector & edges, size_t mapThreshold ) const } } if ( !useMap ) { - if ( loops.front() != NULL ) + if ( loops.front() != c3d_null ) loops.front()->GetEdges( edges ); } } @@ -1899,12 +1897,12 @@ void MbFace::GetBoundaryEdges( ConstEdgesVector & boundaryEdges ) const { for ( size_t i = 0, loopsCnt = loops.size(); i < loopsCnt; ++i ) { const MbLoop * loop = loops[i]; - if ( loop == NULL ) + if ( loop == c3d_null ) continue; c3d::EdgeSPtr edge; for ( size_t j = 0, edgesCnt = loop->GetEdgesCount(); j < edgesCnt; ++j ) { const MbOrientedEdge * orientEdge = loop->_GetOrientedEdge( j ); - if ( orientEdge == NULL ) + if ( orientEdge == c3d_null ) continue; edge = const_cast( &orientEdge->GetCurveEdge() ); if ( edge->IsBoundaryFace() ) { @@ -1933,7 +1931,7 @@ void MbFace::GetNeighborFaces( FacesVector & neighborFaces ) const size_t neighborsCnt0 = neighborFaces.size(); for ( k = 0; k < neighborsCnt0; k++ ) { const MbFace * neighborFace = neighborFaces[k]; - if ( neighborFace != NULL ) + if ( neighborFace != c3d_null ) facesLabels.push_back( std::make_pair( neighborFace, neighborFace->GetLabel() ) ); } neighborsCnt0 = facesLabels.size(); @@ -1941,14 +1939,14 @@ void MbFace::GetNeighborFaces( FacesVector & neighborFaces ) const // mark neighbour faces by the first label for ( k = 0; k < loopsCnt; ++k ) { const MbLoop * loop = loops[k]; - if ( loop == NULL ) + if ( loop == c3d_null ) continue; for ( size_t edgeInd = 0, edgesCnt = loop->GetEdgesCount(); edgeInd < edgesCnt; ++edgeInd ) { const MbOrientedEdge * edge = loop->_GetOrientedEdge( edgeInd ); - if ( edge == NULL ) + if ( edge == c3d_null ) continue; const MbFace * neighborFace = edge->GetFaceMinus(); - if ( neighborFace != NULL && neighborFace != this ) { + if ( neighborFace != c3d_null && neighborFace != this ) { facesLabels.push_back( std::make_pair( neighborFace, neighborFace->GetLabel() ) ); // save initial label neighborFace->SetOwnLabel( ls_Used ); } diff --git a/C3d/Include/topology_faceset.h b/C3d/Include/topology_faceset.h index 2dd6d92..a3365c5 100644 --- a/C3d/Include/topology_faceset.h +++ b/C3d/Include/topology_faceset.h @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -162,7 +163,7 @@ public : \return \ru Копия объекта или оригинал(в случае режима копирования cm_Same). \en Copy of an object or original (in a case of the mode cm_Same). \~ */ - MbFaceShell * Copy( MbeCopyMode sameShell, MbShellHistory * history = NULL, MbRegDuplicate * iReg = NULL ); + MbFaceShell * Copy( MbeCopyMode sameShell, MbShellHistory * history = c3d_null, MbRegDuplicate * iReg = c3d_null ); /** \brief \ru Создать копию. \en Create a copy. \~ @@ -171,7 +172,7 @@ public : \return \ru Копия объекта. \en Copy of the object. \~ */ - MbFaceShell * Duplicate( MbRegDuplicate * iReg = NULL ) const; + MbFaceShell * Duplicate( MbRegDuplicate * iReg = c3d_null ) const; /// \ru Замкнутая ли оболочка? \en Is shell closed? bool IsClosed() const { return closed; } @@ -191,7 +192,7 @@ public : bool delTemporal = false; for ( size_t i = 0, cnt = newFaces.size(); i < cnt; ++i ) { const MbFace * newFace = newFaces[i]; - if ( newFace == NULL ) + if ( newFace == c3d_null ) continue; if ( justAdd || ( std::find( faceSet.begin(), faceSet.end(), newFace ) == faceSet.end() ) ) { faceSet.push_back( const_cast(newFace) ); @@ -230,7 +231,7 @@ public : for ( size_t k = 0; k < facesCnt; ++k ) { face = faceSet[k]; ::DecRefItem( faceSet[k] ); - faceSet[k] = C3D_NULL_PTR; + faceSet[k] = c3d_null; detachFaces.push_back( face ); ::DetachItem( face ); } @@ -259,7 +260,7 @@ public : \param[in] iReg - \ru Регистратор объектов. \en Registrator of objects: \~ */ - void Transform( const MbMatrix3D & matr, MbRegTransform * iReg = NULL ); + void Transform( const MbMatrix3D & matr, MbRegTransform * iReg = c3d_null ); /** \brief \ru Сдвинуть вдоль вектора. \en Move along a vector. \~ @@ -274,7 +275,7 @@ public : \param[in] iReg - \ru Регистратор. \en Registrator. \~ */ - void Move( const MbVector3D & to, MbRegTransform * iReg = NULL ); + void Move( const MbVector3D & to, MbRegTransform * iReg = c3d_null ); /** \brief \ru Повернуть вокруг оси. \en Rotate around an axis. \~ @@ -291,7 +292,7 @@ public : \param[in] iReg - \ru Регистратор. \en Registrator. \~ */ - void Rotate( const MbAxis3D & axis, double angle, MbRegTransform * iReg = NULL ); + void Rotate( const MbAxis3D & axis, double angle, MbRegTransform * iReg = c3d_null ); /// \ru Рассчитать расстояние до точки. \en Calculate the distance to a point. double DistanceToPoint( const MbCartPoint3D & to ) const; /// \ru Вывернуть оболочку наизнанку - переориентировать все грани. \en Revert the shell - reorientation of the whole set of faces. @@ -299,7 +300,7 @@ public : /// \ru Являются ли объекты равными. \en Determine whether objects are equal. bool IsSame( const MbFaceShell & faces, double accuracy ) const; /// \ru Установить метки всем объектам, имеющим таковые. \en Set labels for all objects which have them. - void SetLabelThrough( MbeLabelState, void * = NULL ) const; + void SetLabelThrough( MbeLabelState, void * = c3d_null ) const; /// \ru Установить метки всем объектам, имеющим таковые. \en Set labels for all objects which have them. void SetLabelThrough( MbeLabelState, void *, bool ) const; /// \ru Удалить частные метки всем объектам, имеющим таковые. \en Remove private labels for all objects which have them. @@ -307,15 +308,15 @@ public : /// \ru Установить флаги изменённости объектов. \en Set flags that objects have been changed. void SetOwnChangedThrough( MbeChangedType n ); /// \ru Установить флаги в начальное состояние. \en Set flags to initial state. - void ResetFlags( void * = NULL ); + void ResetFlags( void * = c3d_null ); /// \ru Забрать в оболочку множество граней из оболочки faces. \en Move a set of faces to the shell from another shell. - bool UnionWith( MbFaceShell & faces, c3d::FacesSet * sharedSet = NULL ); + bool UnionWith( MbFaceShell & faces, c3d::FacesSet * sharedSet = c3d_null ); /// \ru Установить заданную метку всем вершинам оболочки. \en Set the given label for all vertices of the shell. - size_t SetVerticesLabel( MbeLabelState, void * = NULL) const; + size_t SetVerticesLabel( MbeLabelState, void * = c3d_null) const; /// \ru Установить заданную метку всем рёбрам оболочки. \en Set the given label for all edges of the shell. - size_t SetEdgesLabel ( MbeLabelState, void * = NULL) const; + size_t SetEdgesLabel ( MbeLabelState, void * = c3d_null) const; /// \ru Установить заданную метку всем граням оболочки. \en Set the given label for all faces of the shell. - void SetFacesLabel ( MbeLabelState, void * = NULL) const; + void SetFacesLabel ( MbeLabelState, void * = c3d_null) const; /// \ru Выдать множество вершин оболочки. \en Get a set of vertices of the shell. template @@ -327,10 +328,27 @@ public : if ( edges.size() < 1 ) ::GetEdges< RPArray, EdgesVector >( faceSet, edges ); else { - size_t count = faceSet.size(); - edges.reserve( edges.size() + count * 2 ); - for ( size_t i = 0; i < count; i++ ) - faceSet[i]->GetEdges( edges ); + size_t i, facesCnt = faceSet.size(); + + size_t allEdgesCnt = 0; + for ( i = 0; i < facesCnt; ++i ) { + const MbFace * face = faceSet[i]; + if ( face != c3d_null ) { + size_t loopsCnt = face->GetLoopsCount(); + for ( size_t j = 0; j < loopsCnt; ++j ) { + const MbLoop * loop = face->_GetLoop( j ); + if ( loop != c3d_null ) + allEdgesCnt += loop->GetEdgesCount(); + } + } + } + + edges.reserve( edges.size() + allEdgesCnt ); + + for ( i = 0; i < facesCnt; ++i ) { + if ( faceSet[i] != c3d_null ) + faceSet[i]->GetEdges( edges ); + } } } /// \ru Выдать множество граней оболочки. \en Get a set of faces of the shell. @@ -350,7 +368,7 @@ public : void GetFacesSet( FacesSet & faces ) const { for ( size_t k = 0, kcnt = faceSet.size(); k < kcnt; ++k ) { - if ( faceSet[k] != NULL ) + if ( faceSet[k] != c3d_null ) faces.insert( faceSet[k] ); } } @@ -358,7 +376,8 @@ public : template void GetItems( VerticesVector & vertices, EdgesVector & edges ) const; /// \ru Выдать множество вершин, множество ребер и множество граней оболочки. \en Get a set of vertices, a set of edges and a set of faces of the shell. - void GetItems( RPArray & list ) const; + template + void GetItems( TopologyItemsVector & ) const; /// \ru Выдать вершину по индексу. \en Get a vertex by an index. MbVertex * GetVertex ( size_t index ) const; @@ -423,9 +442,10 @@ public : \return \ru Удалось ли определить расстояния от точки до оболочки. \en Whether the distance from a point to the shell was successfully defined.. \~ */ - bool DistanceToBound( const MbCartPoint3D & pnt, double accuracy, - MbPntLoc & finFaceData, - MbeItemLocation & rShell ) const; + bool DistanceToBound( const MbCartPoint3D & pnt, + double accuracy, + MbPntLoc & finFaceData, + MbeItemLocation & rShell ) const; /** \brief \ru Определить положение точки относительно оболочки. \en Define the point location relative to the shell. \~ @@ -444,9 +464,11 @@ public : \return \ru Удалось ли определить положение точки относительно оболочки. \en Whether the point location relative to the shell was successfully defined. \~ */ - bool PointClassification( const MbCartPoint3D & pnt, double accuracy, - MbCartPoint3D & shellPoint, MbVector3D & shellNormal, - MbeItemLocation & rShell ) const; + bool PointClassification( const MbCartPoint3D & pnt, + double accuracy, + MbCartPoint3D & shellPoint, + MbVector3D & shellNormal, + MbeItemLocation & rShell ) const; /** \brief \ru Определить положение точки относительно оболочки. \en Define the point location relative to the shell. \~ @@ -465,9 +487,11 @@ public : \return \ru Удалось ли определить положение точки относительно оболочки. \en Whether the point location relative to the shell was successfully defined. \~ */ - bool PointClassification( const MbCartPoint3D & pnt, double accuracy, - MbCartPoint3D & shellPoint, MbVector3D & shellNormal, - MbPntLoc & rShell ) const; + bool PointClassification( const MbCartPoint3D & pnt, + double accuracy, + MbCartPoint3D & shellPoint, + MbVector3D & shellNormal, + MbPntLoc & rShell ) const; /** \brief \ru Вычислить точку оболочки. \en Calculate a point of the shell. \~ @@ -594,8 +618,16 @@ public : */ void CurveIntersection( const MbCurve3D & curve, SArray & nn, SArray & uv, SArray & tt ) const; - /// \ru Добавить свой габарит в габаритный куб. \en Add your own bounding box into bounding cube. - void AddYourGabaritTo( MbCube & ) const; + /** \brief \ru Добавить свой габарит в габаритный куб. + \en Add your own bounding box into bounding cube. \~ + \details \ru Добавить свой габарит в габаритный куб. + \en Add your own bounding box into bounding cube. \~ + \param[out] gab -\ru Габаритный куб для добавления габарита оболочки. + \en Bounding box for adding a bounding box of the shell. \~ + \param[out] vec -\ru Контейнер для расширенных габаритов граней оболочки. + \en Сontainer for extended bounding boxes of shell faces. \~ + */ + void AddYourGabaritTo( MbCube & gab, std::vector> * vec = c3d_null ) const; /// \ru Рассчитать габарит оболочки. \en Calculate bounding box of the shell. void CalculateGabarit( MbCube & ) const; /// \ru Рассчитать габарит в локальной системы координат, заданной матрицей matrToLocal преобразования в неё \en Calculate bounding box in the local coordinate system which is given by the matrix 'matrToLocal ' of transformation to it. @@ -624,14 +656,14 @@ public : /** \brief \ru Установить главное имя и вставить старое в индекс копирования. \en Set the main name and insert an old name to the copy index. \~ - \details \ru Установить главное имя и вставить старое в индекс копирования. Объекты с пустыми имена пропускаются. - \en Set the main name and insert an old name to the copy index. Objects with empty names are skipped. \~ - \param[in] newMainName - \ru Новое главное имя. - \en The new main name. \~ + \details \ru Установить главное имя элементам оболочки и вставить старое в индекс копирования. Объекты с пустыми имена пропускаются. + \en Set the main name of topology items and insert an old name to the copy index. Objects with empty names are skipped. \~ + \param[in] newNameMaker - \ru Именователь с новым главным именем. + \en Name maker with a new main name. \~ \param[in] addOldMainName - \ru Вставить старое в индекс копирования. \en Insert an old name to the copy index. \~ */ - void SetMainName ( SimpleName newMainName, bool addOldMainName ); + void SetItemsMainName( const MbSNameMaker & newNameMaker, bool addOldMainName ); /** \brief \ru Вставить индекс копирования. \en Insert copying index. \~ \details \ru Вставить индекс копирования. @@ -646,15 +678,15 @@ public : \en Replace main name by new one, insert old main name and given copy index into name copy indices. Objects with empty names are skipped. \~ \param[in] index - \ru Индекс копирования. \en Copying index. \~ - \param[in] newMainName - \ru Новое главное имя. - \en The new main name. \~ + \param[in] newMainName - \ru Именователь с новым главным именем. + \en A name maker with a new main name. \~ */ - void SetNamesCopyIndex( SimpleName index, const SimpleName & newMainName ); + void SetNamesCopyIndex( SimpleName index, const MbSNameMaker & newNameMaker ); /// \ru Установить главное имя и модифицировать имена граней, рёбер и вершин для оболочки-копии для предотвращения совпадения имен нескольких копий. \en Set the main name and modify names of faces, edges and vertices for the shell-copy in order to prevent coincidence of several copies names. - void MakeNewNames ( SimpleName mainName, SimpleName modifier ); + void MakeItemsNewNames( const MbSNameMaker &, SimpleName modifier ); /// \ru Установить главное имя и модифицировать имена граней для оболочки-копии для предотвращения совпадения имен нескольких копий. \en Set the main name and modify names of faces for the shell-copy in order to prevent coincidence of several copies names. - void MakeNewNames ( const MbSNameMaker &, SimpleName modifier ); + void MakeFacesNewNames( const MbSNameMaker &, SimpleName modifier ); /// \ru Проименовать грани, рёбра и вершины оболочки. \en Rename faces, edges and vertices of the shell. void SetShellNames( const MbSNameMaker & ); @@ -667,7 +699,13 @@ public : \en Clear the names of all shell elements: faces, edges, and vertices. \~ */ void ClearShellNames(); - /// \ru Очистить имена ребер в оболочке. \en Clear all shell edges names. + /** \brief \ru Очистить имена ребер в оболочке. + \en Clear all shell edges names. \~ + \details \ru Очистить имена ребер (и вершин) в оболочке. + \en Clear all shell edges (and vertices) names. \~ + \param[in] clearVerticesNames - \ru Очистить также и имена вершин. + \en Clean up also names of vertices. \~ + */ void ClearEdgesNames( bool clearVerticesNames = true ); /** \brief \ru Проверка оболочки: вершин (удаление совпадающих и лишних), ребер (со слиянием). @@ -751,7 +789,7 @@ public : bool MergeSimilarFaces( SimpleName simMainName = c3d::SIMPLENAME_MAX ); /// \ru Создан ли временный объект сопровождения? \en Is a temporary object for the maintenance created? - bool IsTemporal() const { return (temporal != NULL); } + bool IsTemporal() const { return (temporal != c3d_null); } /// \ru Удалить временный объект сопровождения. \en Delete a temporary maintenance object. void RemoveTemporal( bool removeFacesTemporal = false ) const; /// \ru Создать новый временный объект сопровождения. \en Create new temporary maintenance object. @@ -795,10 +833,10 @@ MbFaceShell::MbFaceShell( const Faces & initFaces ) : MbTopItem() , faceSet ( initFaces.size(), 1 ) , closed ( true ) - , temporal ( NULL ) + , temporal ( c3d_null ) { for ( size_t i = 0, cnt = initFaces.size(); i < cnt; ++i ) { - if ( initFaces[i] != NULL ) + if ( initFaces[i] != c3d_null ) AddFace( *initFaces[i] ); } } @@ -815,7 +853,7 @@ void MbFaceShell::GetVertices( VerticesVector & vertices ) const ptrdiff_t maxCount = SetVerticesLabel( ls_Used ); vertices.reserve( vertices.size() + maxCount ); - SPtr vertex; + c3d::VertexSPtr vertex; // reset label for ( size_t i = 0, fcount = faceSet.size(); i < fcount; ++i ) { @@ -938,6 +976,86 @@ void MbFaceShell::GetItems( VerticesVector & vertices, EdgesVector & edges ) con } +//------------------------------------------------------------------------------ +// \ru Выдать множество вершин, множество ребер и множество граней оболочки. \en Get a set of vertices, a set of edges and a set of faces of the shell. +// --- +template +void MbFaceShell::GetItems( TopologyItemsVector & list ) const +{ + size_t maxCount = 1; + + // поднимаем флаг // set up labels + size_t i, fcount = faceSet.size(); + for ( i = 0; i < fcount; ++i ) { + const MbFace * face = faceSet[i]; + if ( face == c3d_null ) + continue; + + for ( size_t j = 0, lcount = face->GetLoopsCount(); j < lcount; ++j ) { + const MbLoop * loop = face->_GetLoop(j); + if ( loop == c3d_null ) + continue; + + size_t ecount = loop->GetEdgesCount(); + for ( size_t k = 0; k < ecount; ++k ) { + const MbCurveEdge * edge = &loop->_GetOrientedEdge(k)->GetCurveEdge(); + + edge->SetOwnLabel( ls_Used ); + edge->GetBegVertex().SetOwnLabel( ls_Used ); + edge->GetEndVertex().SetOwnLabel( ls_Used ); + } + + maxCount += 2 * ecount; + } + } + + list.reserve( list.size() + faceSet.size() + maxCount ); + + // опускаем флаг // reset labels + for ( i = 0; i < fcount; ++i ) { + MbFace * face = faceSet[i]; + if ( face == c3d_null ) + continue; + + list.push_back( face ); + + c3d::EdgeSPtr edge; + c3d::VertexSPtr vertex; + + for ( size_t j = 0, lcount = face->GetLoopsCount(); j < lcount; ++j ) { + const MbLoop * loop = face->_GetLoop(j); + if ( loop == c3d_null ) + continue; + + for ( size_t k = 0, ecount = loop->GetEdgesCount(); k < ecount; ++k ) { + edge = &loop->_GetOrientedEdge(k)->GetCurveEdge(); + + if ( edge->GetLabel() == ls_Used ) { + list.push_back( edge ); + edge->SetOwnLabel( ls_Null ); + } + + vertex = const_cast( &edge->GetBegVertex() ); + if ( vertex->GetLabel() == ls_Used ) { + list.push_back( vertex ); + vertex->SetOwnLabel( ls_Null ); + } + ::DetachItem( vertex ); + + vertex = const_cast( &edge->GetEndVertex() ); + if ( vertex->GetLabel() == ls_Used ) { + list.push_back( vertex ); + vertex->SetOwnLabel( ls_Null ); + } + ::DetachItem( vertex ); + + ::DetachItem( edge ); + } + } + } +} + + //------------------------------------------------------------------------------ // \ru Для множества граней найти множество их комбинированных номеров. \en For a set of faces find a set of their combined indices. // --- @@ -960,7 +1078,7 @@ bool MbFaceShell::FindIndexByFaces( const FacesPointersVector & initFaces, ItemI for ( size_t i = 0; i < initFacesCount; ++i ) { const MbFace * face = initFaces[i]; - if ( face != NULL ) { + if ( face != c3d_null ) { size_t i0 = SYS_MAX_T; c3d::ConstFaceIndexMap::iterator it = fiMap.find( face ); if ( it != fiMap.end() ) @@ -976,7 +1094,7 @@ bool MbFaceShell::FindIndexByFaces( const FacesPointersVector & initFaces, ItemI if ( directFind ) { for ( size_t i = 0; i < initFacesCount; ++i ) { const MbFace * face = initFaces[i]; - if ( face != NULL ) { + if ( face != c3d_null ) { size_t i0 = GetFaceIndex( *face ); if ( i0 != SYS_MAX_T ) { index.Init( *face, i0 ); @@ -1001,7 +1119,7 @@ bool MbFaceShell::FindConstFacesByIndex( const ItemIndices & indices, ConstFaces for ( size_t j = 0, indicesCnt = indices.size(); j < indicesCnt; ++j ) { MbItemIndex & index = const_cast(indices[j]); // у stl доступ честный как const, у SArray дает на редактирование findFace = FindFaceByIndex( index ); - if ( findFace != NULL ) { + if ( findFace != c3d_null ) { initFaces.push_back( findFace ); ::DetachItem( findFace ); } @@ -1022,7 +1140,7 @@ bool MbFaceShell::FindFacesByIndex( const ItemIndices & indices, FacesPointersVe for ( size_t j = 0, indicesCnt = indices.size(); j < indicesCnt; ++j ) { MbItemIndex & index = const_cast(indices[j]); // у stl доступ честный как const, у SArray дает на редактирование findFace = const_cast(FindFaceByIndex( index )); - if ( findFace != NULL ) { + if ( findFace != c3d_null ) { initFaces.push_back( findFace ); ::DetachItem( findFace ); } @@ -1041,15 +1159,15 @@ bool MbFaceShell::GetBoundaryEdges( ConstEdgesVector & boundaryEdges ) const const size_t boundaryCnt = boundaryEdges.size(); for ( size_t i = 0, facesCnt = faceSet.size(); i < facesCnt; ++i ) { const MbFace * face = faceSet[i]; - if ( face == NULL ) + if ( face == c3d_null ) continue; for ( size_t j = 0, loopsCnt = face->GetLoopsCount(); j < loopsCnt; ++j ) { const MbLoop * loop = face->_GetLoop( j ); - if ( loop == NULL ) + if ( loop == c3d_null ) continue; for ( size_t k = 0, edgesCnt = loop->GetEdgesCount(); k < edgesCnt; ++k ) { const MbOrientedEdge * orientEdge = loop->_GetOrientedEdge( k ); - if ( orientEdge != NULL ) { + if ( orientEdge != c3d_null ) { c3d::ConstEdgeSPtr edge( &orientEdge->GetCurveEdge() ); if ( edge->IsBoundaryFace() ) boundaryEdges.push_back( edge ); @@ -1076,37 +1194,28 @@ bool MbFaceShell::GetBoundaryEdges( ConstEdgesVector & boundaryEdges ) const struct MATH_CLASS MbCheckTopologyParams { protected: bool mergeEdges; ///< \ru Флаг слияния ребер. \en Merge flag for edges. - bool addNameAttributes; ///< \ru Добавить атрибут имени с именами слитых ребер. \en Add name attribute with names of merged edges. - VERSION version; ///< \ru Версия. \en Version. + SPtr nameMaker; ///< \ru Именователь с версией операции. \en Names maker with operation version. SimpleName lastMainName; ///< \ru Главное имя именователя последней операции. \en Main name of the last operation name maker. c3d::ConstFacesVector controlFaces; ///< \ru Грани, по которым может быть взведена ошибка. \en Faces where an error may occur. c3d::ConstEdgesVector boundaryEdges; ///< \ru Исходные краевые ребра (до операции). \en Initial boundary edges (before an operation). public: - explicit MbCheckTopologyParams( bool doMergingEdges, const MbSNameMaker & nameMaker ) - : mergeEdges ( doMergingEdges ) - , addNameAttributes( nameMaker.GetParentNamesAttributes() ) - , version ( nameMaker.GetMathVersion() ) - , lastMainName ( c3d::SIMPLENAME_MAX ) // \ru Неизвестно. \en Unknown. - , controlFaces ( ) - , boundaryEdges ( ) - {} - explicit MbCheckTopologyParams( bool doMergingEdges, VERSION ver, bool addNameAttrs ) - : mergeEdges ( doMergingEdges ) - , addNameAttributes( addNameAttrs ) - , version ( ver ) - , lastMainName ( c3d::SIMPLENAME_MAX ) // \ru Неизвестно. \en Unknown. - , controlFaces ( ) - , boundaryEdges ( ) + explicit MbCheckTopologyParams( bool doMergingEdges, + const MbSNameMaker & nMaker ) + : mergeEdges ( doMergingEdges ) + , nameMaker ( &nMaker.Duplicate() ) + , lastMainName ( c3d::SIMPLENAME_MAX ) // \ru Неизвестно. \en Unknown. + , controlFaces ( ) + , boundaryEdges( ) {} template - explicit MbCheckTopologyParams( bool doMergingEdges, const MbSNameMaker & nameMaker, - const Faces & faces ) - : mergeEdges ( doMergingEdges ) - , addNameAttributes( nameMaker.GetParentNamesAttributes() ) - , version ( nameMaker.GetMathVersion() ) - , lastMainName ( c3d::SIMPLENAME_MAX ) // \ru Неизвестно. \en Unknown. - , controlFaces ( ) - , boundaryEdges ( ) + explicit MbCheckTopologyParams( bool doMergingEdges, + const MbSNameMaker & nMaker, + const Faces & faces ) + : mergeEdges ( doMergingEdges ) + , nameMaker ( &nMaker.Duplicate() ) + , lastMainName ( c3d::SIMPLENAME_MAX ) // \ru Неизвестно. \en Unknown. + , controlFaces ( ) + , boundaryEdges( ) { size_t facesCnt = faces.size(); if ( facesCnt > 0 ) { @@ -1117,32 +1226,15 @@ public: } } template - explicit MbCheckTopologyParams( bool doMergingEdges, VERSION ver, bool addNameAttrs, - const Faces & faces ) - : mergeEdges ( doMergingEdges ) - , addNameAttributes( addNameAttrs ) - , version ( ver ) - , lastMainName ( c3d::SIMPLENAME_MAX ) // \ru Неизвестно. \en Unknown. - , controlFaces ( ) - , boundaryEdges ( ) - { - size_t facesCnt = faces.size(); - if ( facesCnt > 0 ) { - controlFaces.reserve( facesCnt ); - for ( size_t k = 0; k < facesCnt; ++k ) - controlFaces.push_back( faces[k] ); - std::sort( controlFaces.begin(), controlFaces.end() ); - } - } - template - explicit MbCheckTopologyParams( bool doMergingEdges, const MbSNameMaker & nameMaker, - const Faces & faces, const c3d::ConstEdgesVector & edges ) - : mergeEdges ( doMergingEdges ) - , addNameAttributes( nameMaker.GetParentNamesAttributes() ) - , version ( nameMaker.GetMathVersion() ) - , lastMainName ( c3d::SIMPLENAME_MAX ) // \ru Неизвестно. \en Unknown. - , controlFaces ( ) - , boundaryEdges ( edges ) + explicit MbCheckTopologyParams( bool doMergingEdges, + const MbSNameMaker & nMaker, + const Faces & faces, + const c3d::ConstEdgesVector & edges ) + : mergeEdges ( doMergingEdges ) + , nameMaker ( &nMaker.Duplicate() ) + , lastMainName ( c3d::SIMPLENAME_MAX ) // \ru Неизвестно. \en Unknown. + , controlFaces ( ) + , boundaryEdges( edges ) { size_t facesCnt = faces.size(); if ( facesCnt > 0 ) { @@ -1154,10 +1246,12 @@ public: std::sort( boundaryEdges.begin(), boundaryEdges.end() ); } ~MbCheckTopologyParams() {} +public: + const MbSNameMaker & NameMaker() const { return *nameMaker; } public: bool MergeEdges () const { return mergeEdges; } - bool AddNameAttributes() const { return addNameAttributes; } - VERSION MathVersion () const { return version; } + bool AddNameAttributes() const { return nameMaker->GetParentNamesAttributes(); } + VERSION MathVersion () const { return nameMaker->GetMathVersion(); } SimpleName LastMainName() const { return lastMainName; } void SetLastMainName( const SimpleName & lmn ) { lastMainName = lmn; } @@ -1174,14 +1268,14 @@ public: if ( controlFaces.size() > 0 && sortedDelFaces.size() > 0 ) { for ( size_t k = controlFaces.size(); k--; ) { if ( std::binary_search( sortedDelFaces.begin(), sortedDelFaces.end(), controlFaces[k] ) ) { - controlFaces[k] = NULL; + controlFaces[k] = c3d_null; res = true; } } if ( res ) { std::sort( controlFaces.begin(), controlFaces.end() ); controlFaces.erase( std::unique( controlFaces.begin(), controlFaces.end() ), controlFaces.end() ); - if ( controlFaces.front() == NULL ) + if ( controlFaces.front() == c3d_null ) controlFaces.erase( controlFaces.begin() ); } } @@ -1215,19 +1309,19 @@ private: public: /// \ru Конструктор по умолчанию \en Default constructor - MbEdgeFunction () : edge(NULL), function(NULL), slideway(NULL) {} + MbEdgeFunction () : edge(c3d_null), function(c3d_null), slideway(c3d_null) {} /// \ru Конструктор по ребру и функции. \en Constructor by an edge and function. - MbEdgeFunction ( const MbCurveEdge * e, const MbFunction * f ) : edge(e), function(f), slideway(NULL) {} + MbEdgeFunction ( const MbCurveEdge * e, const MbFunction * f ) : edge(e), function(f), slideway(c3d_null) {} /// \ru Конструктор по ребру и опорной кривой. \en Constructor by an edge and a supporting curve. - MbEdgeFunction ( const MbCurveEdge * e, const MbCurve3D * c ) : edge(e), function(NULL), slideway(c) {} + MbEdgeFunction ( const MbCurveEdge * e, const MbCurve3D * c ) : edge(e), function(c3d_null), slideway(c) {} /// \ru Конструктор по другому ребру с функцией. \en Constructor by other edge with a function. MbEdgeFunction ( const MbEdgeFunction & other ) : edge(other.edge), function(other.function), slideway(other.slideway) {} ~MbEdgeFunction() {} public: /// \ru Инициализация по ребру и функции. \en Initialization by an edge and a function. - void Init( const MbCurveEdge * e, const MbFunction * f ) { edge = e; function = f; slideway = NULL; } + void Init( const MbCurveEdge * e, const MbFunction * f ) { edge = e; function = f; slideway = c3d_null; } /// \ru Инициализация по ребру и опорной кривой. \en Initialization by an edge and a supporting curve. - void Init( const MbCurveEdge * e, const MbCurve3D * c ) { edge = e; function = NULL; slideway = c; } + void Init( const MbCurveEdge * e, const MbCurve3D * c ) { edge = e; function = c3d_null; slideway = c; } /// \ru Дать ребро. \en Get an edge. const MbCurveEdge * Edge() const { return edge; } /// \ru Дать функцию изменения радиуса. \en Get a function of radius changing. @@ -1425,7 +1519,7 @@ public: /// \ru Конструктор по умолчанию. \en Default constructor. MbPntLoc() : pntLoc ( iloc_Undefined ) - , shell ( NULL ) + , shell ( c3d_null ) , ind ( SYS_MAX_T ) , dist ( MB_MAXDOUBLE ) , n ( MB_MAXDOUBLE ) @@ -1449,7 +1543,7 @@ public: /// \ru Получить положение пространственной точки. \en Get location of spatial point MbeItemLocation GetLocation() const { return pntLoc; } /// \ru Выбрана ли грань? \en Is a face chosen? - bool IsFaceSelected() const { return ((shell != NULL) && (ind < shell->GetFacesCount()) && (shell->GetFace(ind) != NULL)); } + bool IsFaceSelected() const { return ((shell != c3d_null) && (ind < shell->GetFacesCount()) && (shell->GetFace(ind) != c3d_null)); } /// \ru Выполнена ли классификация по грани? \en Is classification by the face performed? bool IsFaceData() const { return (IsFaceSelected() && !shell->IsTemporal(ind)) ? true : false; } /// \ru Выполнена ли классификация по грани сопровождения? \en Is classification by the face of maintenance performed? @@ -1458,7 +1552,7 @@ public: /// \ru Получить индекс грани. \en Get an index of a face. size_t GetFaceIndex() const { return ind; } /// \ru Получить грань. \en Get a face. - const MbFace * GetFace() const { return (IsFaceSelected() ? shell->GetFace(ind) : NULL); } + const MbFace * GetFace() const { return (IsFaceSelected() ? shell->GetFace(ind) : c3d_null); } /// \ru Получить расстояние до точки проекции. \en Get the distance to projection point. double GetDistance() const { return dist; } /// \ru Получить двумерную точку проекции. \en Get two-dimensional projection point. @@ -1478,7 +1572,7 @@ public: bool IsCorner() const { return corn; } /// \ru Получить поверхности грани. \en Get surfaces of a face. - const MbSurface * GetFaceSurface() const { return (IsFaceSelected() ? &shell->GetFace(ind)->GetSurface() : NULL); } + const MbSurface * GetFaceSurface() const { return (IsFaceSelected() ? &shell->GetFace(ind)->GetSurface() : c3d_null); } /// \ru Получить ориентацию грани относительно поверхности. \en Get face orientation relative a surface. bool GetFaceSense() const { return (IsFaceSelected() ? shell->GetFace(ind)->IsSameSense() : true); } /// \ru Получить поверхность смежной грани. \en Get a surface of adjacent face. @@ -1494,7 +1588,7 @@ public: void Reset() { pntLoc = iloc_Undefined; - shell = NULL; + shell = c3d_null; ind = SYS_MAX_T; dist = MB_MAXDOUBLE; n = MB_MAXDOUBLE; @@ -1549,33 +1643,6 @@ public: }; -//------------------------------------------------------------------------------ -/** \brief \ru Установить главное имя. - \en Set main name. \~ - \details \ru Установить главное имя mainName для имени name. \n - \en Set the main name 'mainName' for the name 'name'. \n \~ - \param[out] name - \ru Имя. - \en Name. \~ - \param[in] mainName - \ru Главное имя. - \en The main name. \~ - \param[in] addOldMainName - \ru При true запомнить заменяемое главное имя в индексе копирования. - \en When it is true remember replaced main name in the copying index. \~ - \ingroup Algorithms_3D -*/ -// --- -inline -bool SetMainName( MbName & name, SimpleName mainName, bool addOldMainName ) -{ - if ( !name.IsEmpty() ) { - if ( addOldMainName ) - name.SetCopyIndex( name.GetMainName() ); - name.SetMainName( mainName ); - return true; - } - return false; -} - - //------------------------------------------------------------------------------ /** \brief \ru Установить заданную метку всем рёбрам оболочки. \en Set the specified label to all edges of the shell. \~ @@ -1589,7 +1656,7 @@ bool SetMainName( MbName & name, SimpleName mainName, bool addOldMainName ) */ // --- template -size_t SetEdgesLabel( const FacesVector & faceSet, MbeLabelState label, void * key = NULL ) +size_t SetEdgesLabel( const FacesVector & faceSet, MbeLabelState label, void * key = c3d_null ) { size_t maxCount = 1; diff --git a/C3d/Include/topology_item.h b/C3d/Include/topology_item.h index 57be739..79f517a 100644 --- a/C3d/Include/topology_item.h +++ b/C3d/Include/topology_item.h @@ -103,11 +103,11 @@ public: /// \ru Деструктор. \en Destructor without parameters. ~MbLabel(); /// \ru Установить частную или собственную метку (соответствующую ключу). \en Set own or private label (according to the key). - void SetLabel( const MbeLabelState, void * key = NULL ); + void SetLabel( const MbeLabelState, void * key = c3d_null ); /// \ru Установить частную или собственную метку (соответствующую ключу). \en Set own or private label (according to the key). void SetLabel( const MbeLabelState, void * key, bool setLock ); /// \ru Получить частную или собственную метку (соответствующую ключу). \en Get own or private label (according to thew key). - int8 GetLabel( void * key = NULL ); + int8 GetLabel( void * key = c3d_null ); /// \ru Удалить частные метки(освободить память) соответствующие ключу. \en Remove private labels (free memory) according to the key. void DeletePrivate( void * key ); /// \ru Присвоить значение собственной метке. \en Assign values to own label. @@ -232,7 +232,7 @@ public : \en Registrator. \~ \ingroup Topology_Items */ - virtual void Transform( const MbMatrix3D & matr, MbRegTransform * iReg = NULL ) = 0; + virtual void Transform( const MbMatrix3D & matr, MbRegTransform * iReg = c3d_null ) = 0; /** \brief \ru Сдвинуть вдоль вектора. \en Move along a vector. \~ @@ -250,7 +250,7 @@ public : \en Registrator. \~ \ingroup Topology_Items */ - virtual void Move ( const MbVector3D & to, MbRegTransform * iReg = NULL ) = 0; + virtual void Move ( const MbVector3D & to, MbRegTransform * iReg = c3d_null ) = 0; /** \brief \ru Повернуть вокруг оси. \en Rotate around an axis. \~ @@ -270,7 +270,7 @@ public : \en Registrator. \~ \ingroup Topology_Items */ - virtual void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * iReg = NULL ) = 0; + virtual void Rotate ( const MbAxis3D & axis, double angle, MbRegTransform * iReg = c3d_null ) = 0; /// \ru Вычислить расстояние до точки. \en Calculate the distance to a point. virtual double DistanceToPoint( const MbCartPoint3D & ) const = 0; @@ -324,15 +324,15 @@ public : bool IsOwnChangedWeakly() const; /// \ru Получить метку. \en Get label. - MbeLabelState GetLabel( void * key = NULL ) const { return (MbeLabelState)label.GetLabel(key); } + MbeLabelState GetLabel( void * key = c3d_null ) const { return (MbeLabelState)label.GetLabel(key); } /// \ru Установить метку. \en Set a label of the loop. - void SetOwnLabel( MbeLabelState l, void * key = NULL ) const { label.SetLabel( l, key ); } + void SetOwnLabel( MbeLabelState l, void * key = c3d_null ) const { label.SetLabel( l, key ); } /// \ru Установить метку. \en Set a label of the loop. void SetOwnLabel( MbeLabelState l, void * key, bool setLock ) const { if ( setLock || GetUseCount() > 1 ) return SetOwnLabel( l, key ); label.SetLabel( l, key ); } /// \ru Предназначен ли объект для удаления? Определяется по меткам. \en Is this object intended for deletion? This is defined by labels. - bool ToDelete() const { return( (MbeLabelState)label.GetLabel(NULL) == ls_Delete || (MbeLabelState)label.GetLabel(NULL) == ls_Error ); } + bool ToDelete() const { return( (MbeLabelState)label.GetLabel(c3d_null) == ls_Delete || (MbeLabelState)label.GetLabel(c3d_null) == ls_Error ); } /// \ru Удалить частную метку. \en Remove private label. - void RemovePrivateLabel ( void * key = NULL ) const { label.DeletePrivate(key); } + void RemovePrivateLabel ( void * key = c3d_null ) const { label.DeletePrivate(key); } /// \ru Копирование данных объекта. \en Copying of the object data. void Assign( const MbTopologyItem & ); @@ -403,11 +403,11 @@ public: /// \ru Тип элемента. \en A type of element. virtual MbeTopologyType IsA() const; // \ru Преобразовать согласно матрице. \en Transform according to the matrix. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Сдвинуть вдоль вектора. \en Move along a vector. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); //\ru Повернуть вокруг оси. \en Rotate around an axis. - virtual void Rotate ( const MbAxis3D &, double, MbRegTransform * = NULL ); + virtual void Rotate ( const MbAxis3D &, double, MbRegTransform * = c3d_null ); public: // \ru Вычислить расстояние до точки. \en Calculate the distance to a point. virtual double DistanceToPoint( const MbCartPoint3D & ) const; diff --git a/C3d/Include/tri_face.h b/C3d/Include/tri_face.h index 6be17c4..a1fd4a7 100644 --- a/C3d/Include/tri_face.h +++ b/C3d/Include/tri_face.h @@ -47,12 +47,12 @@ class MATH_CLASS MbCube; \ingroup Triangulation */ // --- -MATH_FUNC (void) CalculateGrid( const MbFace & face, +MATH_FUNC (void) CalculateGrid( const MbFace & face, const MbStepData & stepData, - MbGrid & grid, - bool dualSeams = true, - bool quad = false, - bool fair = false ); + MbGrid & grid, + bool dualSeams = true, + bool quad = false, + bool fair = false ); //------------------------------------------------------------------------------ diff --git a/C3d/Include/tri_lump.h b/C3d/Include/tri_lump.h index e2934f5..934f116 100644 --- a/C3d/Include/tri_lump.h +++ b/C3d/Include/tri_lump.h @@ -12,24 +12,21 @@ #include -#include +#include +#include #include -class MATH_CLASS MbGrid; - - //---------------------------------------------------------------------------------------- /** \brief \ru Математическая грань и ее рассчитанная решетка. \en Mathematical face and its calculated grid. \~ \ingroup Polygonal_Objects */ // --- -class MATH_CLASS MbFaceAndGrid -{ - SPtr face; ///< \ru Грань. \en A face. +class MATH_CLASS MbFaceAndGrid { + c3d::ConstFaceSPtr face; ///< \ru Грань. \en A face. public: - SPtr grid; ///< \ru Триангуляция грани. \en A face triangulation. + c3d::ConstGridSPtr grid; ///< \ru Триангуляция грани. \en A face triangulation. public: /** \brief \ru Конструктор по грани и ее триангуляции.\n @@ -68,7 +65,8 @@ public: return *this; } - const MbFace & GetFace() const { return *face; } // deprecated + DEPRECATE_DECLARE + const MbFace & GetFace() const { return *face; } // deprecated }; @@ -110,13 +108,13 @@ public: {} /** \brief \ru Добавить грань с триангуляцией. \en Add face with triangulation. \~ - \param[in] face - \ru Грань с триангулюционной решеткой. + \param[in] face - \ru Грань с триангуляционной решеткой. \en A face with triangulation grid. \~ */ void AddFace( const MbFaceAndGrid & face ) { faces.push_back( face ); } // \ru Объявление конструктора копирования и оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration without implementation of the copy-constructor and assignment operator to prevent an assignment by default. - OBVIOUS_PRIVATE_COPY(MbLumpAndFaces); +OBVIOUS_PRIVATE_COPY(MbLumpAndFaces) }; diff --git a/C3d/Include/wire_frame.h b/C3d/Include/wire_frame.h index bad9f89..6802164 100644 --- a/C3d/Include/wire_frame.h +++ b/C3d/Include/wire_frame.h @@ -1,452 +1,452 @@ -//////////////////////////////////////////////////////////////////////////////// -/** - \file - \brief \ru Трехмерный проволочный каркас. - \en Three-dimensional wire frame. \~ - -*/ -//////////////////////////////////////////////////////////////////////////////// - -#ifndef __WIRE_FRAME_H -#define __WIRE_FRAME_H - - -#include -#include -#include -#include -#include -#include -#include - -class MATH_CLASS MbWireFrame; - - -namespace c3d // namespace C3D -{ -typedef SPtr WireFrameSPtr; -typedef SPtr ConstWireFrameSPtr; - -typedef std::vector WireFramesVector; -typedef std::vector ConstWireFramesVector; - -typedef std::vector WireFramesSPtrVector; -typedef std::vector ConstWireFramesSPtrVector; -} // namespace C3D - - -//------------------------------------------------------------------------------ -/** \brief \ru Трехмерный проволочный каркас. - \en Three-dimensional wire frame. \~ - \details \ru Трехмерный проволочный каркас состоит из множества рёбер MbEdge. \n - Каркас может состоять из нескольких связных частей. - Связная часть может иметь топологию звезды, при которой в одной вершине стыкуется более двух рёбер. - Каркас может быть разбит на отдельные связные части. Каждая связная часть обладает функциями составной кривой. - \en Three-dimensional wire frame consists of a set of edges of a type MbEdge. \n - A wire frame may consist of several connected parts. - A connected part may have a topology of a star where one vertex is coincident with more than two edges - A wire frame may be split into separate connected parts. Each connected part has functions of a composite curve. \~ - \ingroup Model_Items -*/ -// --- -class MATH_CLASS MbWireFrame : public MbItem { -protected : - c3d::WireEdgesVector edges; ///< \ru Множество рёбер каркаса. \en A set of edges of the frame. - size_t partsCount; ///< \ru Количество связных частей объекта. \en A number of connected parts of an object. - bool closed; ///< \ru Замкнутость указывает на возможность получит множество замкнутых кривых. \en Closedness indicates to a possibility to get a set of closed curves. - mutable bool normal; ///< \ru Разложен ли каркас на связные части? \en Is a frame split into connected parts? - -private : - /// \ru Конструктор копирования с регистратором. \en Copy-constructor with the registrator. - explicit MbWireFrame( const MbWireFrame &, MbRegDuplicate * ); -public : - /// \ru Конструктор без параметров. \en Constructor without parameters. - MbWireFrame(); - /// \ru Конструктор по кривой и строителю. \en Constructor by a curve and creator. - MbWireFrame( const MbCurve3D &, const MbCreator * = NULL ); - /// \ru Конструктор по множеству кривых и строителю. \en Constructor by a set of curves and creator. - MbWireFrame( const RPArray &, const MbCreator * = NULL ); - /// \ru Конструктор по множеству кривых и строителю. \en Constructor by a set of curves and creator. - MbWireFrame( const c3d::SpaceCurvesSPtrVector &, const MbCreator * = NULL ); - /// \ru Конструктор по ребру и строителю. \en Constructor by an edge and creator. - MbWireFrame( const MbEdge &, const MbCreator * = NULL, bool same = true ); - /// \ru Конструктор по множеству рёбер и строителю. \en Constructor by a set of edges and creator. - MbWireFrame( const RPArray &, const MbCreator * = NULL, bool same = true ); - /// \ru Конструктор по множеству рёбер и строителю. \en Constructor by a set of edges and creator. - MbWireFrame( const c3d::WireEdgesSPtrVector &, const MbCreator * = NULL, bool same = true ); - /// \ru Деструктор. \en Destructor. - virtual ~MbWireFrame(); - -public : - VISITING_CLASS( MbWireFrame ); - - // \ru Общие функции геометрического объекта. \en Common functions of a geometric object. - - virtual MbeSpaceType IsA() const; // \ru Тип объекта. \en An object type. - virtual MbSpaceItem & Duplicate( MbRegDuplicate * iReg = NULL ) const; // \ru Создать копию. \en Create a copy. - virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. - virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвинуть вдоль вектора. \en Translate along a vector. - virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate about an axis. - virtual bool IsSame ( const MbSpaceItem &, double accuracy = LENGTH_EPSILON ) const; // \ru Являются ли объекты равными? \en Are the objects equal? - virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными? \en Are the objects similar? - virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать объекты равными. \en Make the objects equal. - virtual double DistanceToPoint ( const MbCartPoint3D & ) const; // \ru Вычислить расстояние до точки. \en Calculate distance to point. - virtual void AddYourGabaritTo( MbCube & ) const; // \ru Добавь свой габарит в куб. \en Add bounding box into a cube. - virtual void CalculateLocalGabarit( const MbMatrix3D & into, MbCube & cube ) const; // \ru Рассчитать габарит в локальной системы координат. \en Calculate the bounding box in a local coordinate system. - virtual void CalculateMesh( const MbStepData & stepData, const MbFormNote & note, MbMesh & mesh ) const; // \ru Построить полигональную копию mesh. \en Build polygonal copy mesh. - - virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. - virtual void SetProperties( const MbProperties & ); // \ru Установить свойства объекта. \en Set properties of the object. - virtual void GetBasisItems ( RPArray & ); // \ru Дать базовые объекты. \en Get the basis objects. - virtual void GetBasisPoints( MbControlData3D & ) const; // \ru Выдать контрольные точки объекта. \en Get control points of object. - virtual void SetBasisPoints( const MbControlData3D & ); // \ru Изменить объект по контрольным точкам. \en Change the object by control points. - virtual bool GetPlacement( MbPlacement3D & ) const; // \ru Проинициализировать присланную локальную систему координат (совместить плоскость XY), если каркас плоский. \en Initialize the sent local coordinate system (combine the plane XY) if the frame is planar. - // \ru Перестроить объект по журналу построения. \en Reconstruct object according to the history tree. - virtual bool RebuildItem( MbeCopyMode sameShell, RPArray * items, IProgressIndicator * progInd ); - - // \ru Создать полигональный объект - упрощенную копию данного объекта. \en Create a polygonal object - a simplified copy of the given object. - virtual MbItem * CreateMesh( const MbStepData & stepData, const MbFormNote & note, MbRegDuplicate * iReg ) const; - - /** \ru \name Общие функции каркаса. - \en \name Common functions of a frame. - \{ */ - - /// \ru Выдать количество ребер каркаса. \en Get the number of edges of the frame. - size_t GetEdgesCount() const { return edges.size(); } - /// \ru Выдать объект по индексу. \en Get the item by index. - const MbEdge * GetEdge( size_t i ) const { return (i < edges.size()) ? edges[i] : NULL; } - /// \ru Выдать объект по индексу для возможного редактирования. \en Get the item by index for the possible editing. - MbEdge * SetEdge( size_t i ) { return (i < edges.size()) ? edges[i] : NULL; } - - /// \ru Получить ребра. \en Get edges. - template - void GetEdges( EdgesVector & dstEdges ) const - { - if ( !edges.empty() ) { - size_t addCnt = edges.size(); - dstEdges.reserve( dstEdges.size() + addCnt ); - c3d::ConstWireEdgeSPtr edge; - for ( size_t k = 0; k < addCnt; ++k ) { - edge = edges[k]; - dstEdges.push_back( edge ); - } - } - } - /// \ru Получить ребра для возможного редактирования. \en Get edges for the possible editing. - template - void SetEdges( EdgesVector & dstEdges ) - { - if ( !edges.empty() ) { - size_t addCnt = edges.size(); - dstEdges.reserve( dstEdges.size() + addCnt ); - c3d::WireEdgeSPtr edge; - for ( size_t k = 0; k < addCnt; ++k ) { - edge = edges[k]; - dstEdges.push_back( edge ); - } - } - } - /// \ru Добавить ребро по кривой и ее ориентации в ребре. \en Add an edge by a curve and its orientation in relation to an edge. - void AddEdge( const MbCurve3D &, bool sense = true ); - /// \ru Добавить ребро (оригинал, не копию). \en Add an edge (an original, not a copy). - void AddEdge( const MbEdge &, bool same = true ); - /// \ru Добавить массив ребер (оригиналы, не копии). \en Add an array of edges (originals, not copies). - template - void AddEdges( const WireEdgesVector &, bool same = true ); - /// \ru Вставить ребро по индексу (оригинал, не копию). \en Insert an edge by index (an original, not a copy). - void InsertEdge( size_t index, const MbEdge & item, bool same = true ); - /// \ru Отцепить ребро по индексу. \en Detach an edge by index. - MbEdge * DetachEdge( size_t index ); - /// \ru Удалить все рёбра. \en Delete all edges. - void DeleteEdges(); - /// \ru Удалить ребро по индексу. \en Delete an edge by index. - bool DeleteEdge( size_t index ); - /// \ru Удалить ребро, если таковое имеется. \en Delete an edge if it already exists. - bool DeleteEdge( MbEdge * ); - - /// \ru Выдать массив вершин ребер каркаса. \en Get an array of frame edges vertices. - void GetVerticesArray ( RPArray & ); - /// \ru Выдать массив вершин ребер каркаса. \en Get an array of frame edges vertices. - void GetVerticesArray ( RPArray & ) const; - /// \ru выдать индекс вершины. \en Get vertex index. - size_t GetVertexIndex( const MbVertex & find ) const; - /// \ru выдать вершину по индексу \en Get vertex by index. - MbVertex * GetVertex( size_t index ) const; - /// \ru выдать индекс ребра. \en Get edge index. - size_t GetEdgeIndex( const MbEdge & find ) const; - /// \ru Получить вершины. \en Get vertices. - template - void GetVerticesSet( VerticesSet & dstVertices ) const - { - if ( !edges.empty() ) { - size_t addCnt = edges.size(); - c3d::ConstWireEdgeSPtr edge; - c3d::ConstVertexSPtr vertex; - for ( size_t k = 0; k < addCnt; ++k ) { - edge = edges[k]; - vertex = &edge->GetBegVertex(); - dstVertices.insert( vertex ); - if ( &edge->GetEndVertex() != &edge->GetBegVertex() ) { - vertex = &edge->GetEndVertex(); - dstVertices.insert( vertex ); - } - } - } - } - - /// \ru Выдать вершину-начало каркаса. \en Get the start vertex of a frame. - const MbVertex * GetBegVertex() const; - /// \ru Выдать вершину-конец каркаса. \en Get the end vertex of a frame. - const MbVertex * GetEndVertex() const; - - /// \ru Найти вершину по имени. \en Find vertex by name. - const MbVertex * FindVertexByName( const MbName & ) const; - /// \ru Найти ребро по имени. \en Find edge by name. - const MbEdge * FindEdgeByName ( const MbName & ) const; - - /** \brief \ru Разбить ребро по параметрам его кривой на несколько его частей. - \en Split the edge using the curve parameters into several pieces. \~ - \details \ru . Если beginSafe == true - ребро сохранит начальный участок, - Если beginSafe == false - ребро сохранит конечный участок. - По параметру 'eps' отсеиваются значения в контейнере 'params', совпадающие друг с другом и с начальным и конечным параметрами кривой. - Контейнер 'edges' содержит отрезанные части. - \en . If beginSafe == true then the edge saves its starting piece, - If beginSafe == false then the edge saves its ending piece. - According to the parameter 'eps' drop out value in the container 'params', coinciding with each other and with the initial and final parameters of the curve. - The container 'edges' contains cut parts. \~ - \params[in, out] targetEdge - \ru Ребро для разрезания. Возвращается урезанный кусок с учетом флага beginSafe или NULL, - если параметр разрезания находится на расстоянии меньшим еps от соответствующего конца кривой, - \en Edge for cutting. The return value of 'targetEdge' is the shortened edge according to 'beginSafe' flag - or NULL, if the cut param in 'params' lies at the distance less than 'eps' from the corresponding end of the curve, - \param[in] params - \ru Параметры кривой для разбиения ребра, - \en Parameters of intersection curve of edge to split, \~ - \param[in] beginSafe - \ru Ребро сохранит начальную часть (true) или ребро сохранит конечную часть (false), - \en The edge will keep a beginning piece (true) or the edge will keep an end piece (false) \~ - \param[in] eps - \ru Точность совпадения параметров разбиения, - \en Precision matching options of parameters to split, \~ - \param[out] edges - \ru Отрезанные части ребра. - \en The container of cut parts. \~ - \return \ru Возвращает true, если ребро было разрезано. - \en Returns true, if the edge was cut. \~ - */ - bool CuttingEdge( MbEdge *& targetEdge, SArray & params, bool beginSafe, double eps, RPArray & edges ); - - /// \ru Замкнут ли каркас? \en Is frame closed? - bool IsClosed(); - /// \ru Является ли каркас многосвязным? \en Is frame multiply connected? - bool IsMultiWireFrame(); - /// \ru Количество связных частей каркаса. \en A number of connected parts of a frame. - size_t GetPartsCount(); - - /// \ru Является ли объект плоским? \en Is the object planar? - bool IsPlanar() const; - /// \ru Дать плоскую кривую и ее систему координат, если пространственная кривая плоская (после использования вызывать DeleteItem на двумерные кривые). \en Get planar coordinate system if the space curve is planar (after the using call DeleteItem for two-dimensional curves) - bool MakePlaneCurves( RPArray & curves, MbPlacement3D & place ) const; - /// \ru Дать кривую на поверхности, если пространственная кривая на поверхности (после использования вызывать DeleteItem на двумерные кривые). \en Get a surface curve if a space curve is on a surface (after the using call DeleteItem for two-dimensional curves) - bool MakeSurfaceCurves( RPArray & curves, MbSurface *& surface ) const; - /// \ru Построить контуры из копий кривых. \en Construct contours of curves copies. - bool MakeCurves( RPArray & ) const; - /// \ru Положить в массив оригиналы кривых. \en Put originals of curves into an array. - template - void GetCurves( CurvesVector & ) const; - /// \ru Разложен ли каркас на связные части? \en Is a frame split into connected parts? - bool IsNormalizeWire() const { return normal; } - /// \ru Переставить кривые и переориентировать ребра, создав связные цепочки с общими вершинами. \en Perform curves reposition and edges reorientation by creating connected chains with common vertices. - bool NormalizeWire( double precision = METRIC_REGION ); - - /** \brief \ru Отделение частей каркаса. - \en Detachment of frame parts \~ - \details \ru Отделение частей каркаса с сохранением исходного объекта. - Если исходный каркас распадается на части, то все части складываются в parts. \n - \en Detachment of frame parts with saving an initial object. - If the initial frame is decomposed, all the parts are put into array 'parts'. \n \~ - \param[out] parts - \ru Каркасы, полученные из frame. - \en Frames obtained from 'frame'. \~ - \result \ru Возвращает количество каркасов в parts. - \en Returns a number of frames in 'parts'. \~ - */ - size_t CreateParts( RPArray & parts ); - /** \} */ - - /// \ru Установить заданный флаг измененности для всех рёбер и вершин. \en Set flag of changes for all edges and vertices. - void SetOwnChangedThrough( MbeChangedType ); - -private: - /// \ru Связано ли ребро с каким-либо ребром каркаса. \en Whether an edge is connected with another edge of a frame. - bool IsConnectedWith( const MbEdge & ); - /// \ru Нормализовать ребро (выставить общую вершину замкнутого ребра) \en Normalize an edge (set the common vertex af a closed edge) - void NormalizeEdge( MbEdge & ); - -DECLARE_PERSISTENT_CLASS_NEW_DEL( MbWireFrame ) -OBVIOUS_PRIVATE_COPY( MbWireFrame ) -}; - -IMPL_PERSISTENT_OPS( MbWireFrame ) - - -//------------------------------------------------------------------------------ -// \ru Положить в массив оригиналы кривых. \en Put originals of curves into an array. -// --- -template -void MbWireFrame::GetCurves( CurvesVector & curves ) const -{ - size_t edgesCnt = edges.size(); - curves.reserve( curves.size() + edgesCnt ); - c3d::SpaceCurveSPtr curve; - for ( size_t k = 0; k < edgesCnt; ++k ) { - const MbEdge * edge = edges[k]; - if ( edge != NULL ) { - curve = const_cast( &edge->GetCurve() ); - curves.push_back( curve ); - ::DetachItem( curve ); - } - } -} - - -//------------------------------------------------------------------------------ -// \ru Добавить массив ребер (оригиналы, не копии). \en Add an array of edges (originals, not copies). -// --- -template -void MbWireFrame::AddEdges( const WireEdgesVector & items, bool same ) -{ - bool add = false; - MbRegDuplicate * iReg = NULL; - MbAutoRegDuplicate autoReg( iReg ); - - size_t addCnt = items.size(); - edges.reserve( edges.size() + addCnt ); - - c3d::WireEdgeSPtr edge; - for ( size_t k = 0; k < addCnt; ++k ) { - const MbEdge * item = items[k]; - - if ( item != NULL ) { - edge = same ? const_cast(item) : item->DataDuplicate( iReg ); - edge->AddRef(); - edges.push_back( edge ); - add = true; - } - } - if ( add ) { - normal = false; - AttributesChange(); - } -} - - -//------------------------------------------------------------------------------ -/** \brief \ru Забрать кривые и удалить каркас, если он не используется. - \en Take curves and delete a frame if it is not used. \~ - \details \ru Забрать кривые и удалить каркас, если он не используется. \n - \en Take curves and delete a frame if it is not used. \n \~ - \param[in] wireFrame - \ru Каркас, подлежащий удалению. - \en A frame to delete. \~ - \param[out] curves - \ru Кривые, полученные из каркаса. - \en Curves obtained from the frame. \~ - \ingroup Curve3D_Modeling -*/ -// --- -template -void ExtractCurvesDeleteFrame( MbWireFrame *& wireFrame, - CurvesVector & curves ) -{ - if ( wireFrame != NULL ) { - c3d::SpaceCurvesSPtrVector wireCurves; - wireFrame->GetCurves( wireCurves ); - ::DeleteItem( wireFrame ); - - size_t wireCurvesCnt = wireCurves.size(); - - if ( wireCurvesCnt > 0 ) { - curves.reserve( curves.size() + wireCurvesCnt ); - for ( size_t k = 0; k < wireCurvesCnt; ++k ) { - MbCurve3D * curve = ::DetachItem( wireCurves[k] ); - if ( curve != NULL ) { - curves.push_back( curve ); - } - } - } - } -} - - -//------------------------------------------------------------------------------ -/** \brief \ru Забрать первую кривую и удалить каркас, если он пуст и не используется. - \en Take the first curve and delete a frame if it is empty and not used. \~ - \details \ru Забрать первую кривую и удалить каркас, если он пуст и не используется. \n - \en Take the first curve and delete a frame if it is empty and not used. \n \~ - \param[in] wireFrame - \ru Каркас, подлежащий удалению. - \en A frame to delete. \~ - \param[out] curve - \ru Кривая, полученная из каркаса. - \en A curve obtained from the frame. \~ - \ingroup Curve3D_Modeling -*/ -// --- -inline -void ExtractCurveDeleteFrame( MbWireFrame *& wireFrame, - MbCurve3D *& curve ) -{ - if ( wireFrame != NULL ) { - c3d::WireEdgeSPtr edge( wireFrame->DetachEdge( 0 ) ); // \ru Отцепить объект \en Detach an object - ::DeleteItem( wireFrame ); - - if ( edge != NULL ) { - curve = &edge->SetCurve(); - ::AddRefItem( curve ); - edge = NULL; - ::DecRefItem( curve ); - } - } -} - - -//------------------------------------------------------------------------------ -/** \brief \ru Создать каркас по множеству кривых. - \en Create a frame by a set of curves. \~ - \details \ru Создать или обновить каркас по множеству кривых. \n - \en Create or update a frame by a set of curves. \n \~ - \param[out] result - \ru Каркас, подлежащий замене или построению. - \en A frame to replace or construct. \~ - \param[in] curves - \ru Кривые для построения каркаса. - \en Curves for the frame construction. \~ - \param[in] snMaker - \ru Именователь кривых каркаса. - \en An object defining the frame curves names. \~ - \param[in] creator - \ru Строитель каркаса. - \en A creator of a frame. \~ - \result \ru Возвращает true, если присланный каркас обновился, или был создан новый при отсутствии каркаса на входе. - \en Returns true if the sent frame has been updated or if the new frame has been created without a frame in the input. \~ - \ingroup Curve3D_Modeling -*/ -// --- -MATH_FUNC (bool) CreateWireFrame( MbWireFrame *& result, - const RPArray & curves, - const MbSNameMaker & snMaker, - const MbCreator * creator = NULL ); - - -//------------------------------------------------------------------------------ -/** \brief \ru Создать каркас по кривой. - \en Create a frame by a curve. \~ - \details \ru Создать или обновить каркас по кривой. \n - \en Create or update a frame by a curve. \n \~ - \param[out] result - \ru Каркас, подлежащий замене или построению. - \en A frame to replace or construct. \~ - \param[in] curve - \ru Кривая для построения каркаса. - \en A curve for the frame construction. \~ - \param[in] snMaker - \ru Именователь кривых каркаса. - \en An object defining the frame curves names. \~ - \param[in] creator - \ru Строитель каркаса. - \en A creator of a frame. \~ - \result \ru Возвращает true, если присланный каркас обновился, или был создан новый при отсутствии каркаса на входе. - \en Returns true if the sent frame has been updated or if the new frame has been created without a frame in the input. \~ - \ingroup Curve3D_Modeling -*/ -// --- -MATH_FUNC (bool) CreateWireFrame( MbWireFrame *& result, - const MbCurve3D & curve, - const MbSNameMaker & snMaker, - const MbCreator * creator = NULL ); - - -#endif // __WIRE_FRAME_H +//////////////////////////////////////////////////////////////////////////////// +/** + \file + \brief \ru Трехмерный проволочный каркас. + \en Three-dimensional wire frame. \~ + +*/ +//////////////////////////////////////////////////////////////////////////////// + +#ifndef __WIRE_FRAME_H +#define __WIRE_FRAME_H + + +#include +#include +#include +#include +#include +#include +#include + +class MATH_CLASS MbWireFrame; + + +namespace c3d // namespace C3D +{ +typedef SPtr WireFrameSPtr; +typedef SPtr ConstWireFrameSPtr; + +typedef std::vector WireFramesVector; +typedef std::vector ConstWireFramesVector; + +typedef std::vector WireFramesSPtrVector; +typedef std::vector ConstWireFramesSPtrVector; +} // namespace C3D + + +//------------------------------------------------------------------------------ +/** \brief \ru Трехмерный проволочный каркас. + \en Three-dimensional wire frame. \~ + \details \ru Трехмерный проволочный каркас состоит из множества рёбер MbEdge. \n + Каркас может состоять из нескольких связных частей. + Связная часть может иметь топологию звезды, при которой в одной вершине стыкуется более двух рёбер. + Каркас может быть разбит на отдельные связные части. Каждая связная часть обладает функциями составной кривой. + \en Three-dimensional wire frame consists of a set of edges of a type MbEdge. \n + A wire frame may consist of several connected parts. + A connected part may have a topology of a star where one vertex is coincident with more than two edges + A wire frame may be split into separate connected parts. Each connected part has functions of a composite curve. \~ + \ingroup Model_Items +*/ +// --- +class MATH_CLASS MbWireFrame : public MbItem { +protected : + c3d::WireEdgesVector edges; ///< \ru Множество рёбер каркаса. \en A set of edges of the frame. + size_t partsCount; ///< \ru Количество связных частей объекта. \en A number of connected parts of an object. + bool closed; ///< \ru Замкнутость указывает на возможность получит множество замкнутых кривых. \en Closedness indicates to a possibility to get a set of closed curves. + mutable bool normal; ///< \ru Разложен ли каркас на связные части? \en Is a frame split into connected parts? + +private : + /// \ru Конструктор копирования с регистратором. \en Copy-constructor with the registrator. + explicit MbWireFrame( const MbWireFrame &, MbRegDuplicate * ); +public : + /// \ru Конструктор без параметров. \en Constructor without parameters. + MbWireFrame(); + /// \ru Конструктор по кривой и строителю. \en Constructor by a curve and creator. + MbWireFrame( const MbCurve3D &, const MbCreator * = c3d_null ); + /// \ru Конструктор по множеству кривых и строителю. \en Constructor by a set of curves and creator. + MbWireFrame( const RPArray &, const MbCreator * = c3d_null ); + /// \ru Конструктор по множеству кривых и строителю. \en Constructor by a set of curves and creator. + MbWireFrame( const c3d::SpaceCurvesSPtrVector &, const MbCreator * = c3d_null ); + /// \ru Конструктор по ребру и строителю. \en Constructor by an edge and creator. + MbWireFrame( const MbEdge &, const MbCreator * = c3d_null, bool same = true ); + /// \ru Конструктор по множеству рёбер и строителю. \en Constructor by a set of edges and creator. + MbWireFrame( const RPArray &, const MbCreator * = c3d_null, bool same = true ); + /// \ru Конструктор по множеству рёбер и строителю. \en Constructor by a set of edges and creator. + MbWireFrame( const c3d::WireEdgesSPtrVector &, const MbCreator * = c3d_null, bool same = true ); + /// \ru Деструктор. \en Destructor. + virtual ~MbWireFrame(); + +public : + VISITING_CLASS( MbWireFrame ); + + // \ru Общие функции геометрического объекта. \en Common functions of a geometric object. + + virtual MbeSpaceType IsA() const; // \ru Тип объекта. \en An object type. + virtual MbSpaceItem & Duplicate( MbRegDuplicate * iReg = c3d_null ) const; // \ru Создать копию. \en Create a copy. + virtual void Transform( const MbMatrix3D &, MbRegTransform * = c3d_null ); // \ru Преобразовать согласно матрице. \en Transform according to the matrix. + virtual void Move ( const MbVector3D &, MbRegTransform * = c3d_null ); // \ru Сдвинуть вдоль вектора. \en Translate along a vector. + virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = c3d_null ); // \ru Повернуть вокруг оси. \en Rotate about an axis. + virtual bool IsSame ( const MbSpaceItem &, double accuracy = LENGTH_EPSILON ) const; // \ru Являются ли объекты равными? \en Are the objects equal? + virtual bool IsSimilar( const MbSpaceItem & ) const; // \ru Являются ли объекты подобными? \en Are the objects similar? + virtual bool SetEqual ( const MbSpaceItem & ); // \ru Сделать объекты равными. \en Make the objects equal. + virtual double DistanceToPoint ( const MbCartPoint3D & ) const; // \ru Вычислить расстояние до точки. \en Calculate distance to point. + virtual void AddYourGabaritTo( MbCube & ) const; // \ru Добавь свой габарит в куб. \en Add bounding box into a cube. + virtual void CalculateLocalGabarit( const MbMatrix3D & into, MbCube & cube ) const; // \ru Рассчитать габарит в локальной системы координат. \en Calculate the bounding box in a local coordinate system. + virtual void CalculateMesh( const MbStepData & stepData, const MbFormNote & note, MbMesh & mesh ) const; // \ru Построить полигональную копию mesh. \en Build polygonal copy mesh. + + virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object. + virtual void SetProperties( const MbProperties & ); // \ru Установить свойства объекта. \en Set properties of the object. + virtual void GetBasisItems ( RPArray & ); // \ru Дать базовые объекты. \en Get the basis objects. + virtual void GetBasisPoints( MbControlData3D & ) const; // \ru Выдать контрольные точки объекта. \en Get control points of object. + virtual void SetBasisPoints( const MbControlData3D & ); // \ru Изменить объект по контрольным точкам. \en Change the object by control points. + virtual bool GetPlacement( MbPlacement3D & ) const; // \ru Проинициализировать присланную локальную систему координат (совместить плоскость XY), если каркас плоский. \en Initialize the sent local coordinate system (combine the plane XY) if the frame is planar. + // \ru Перестроить объект по журналу построения. \en Reconstruct object according to the history tree. + virtual bool RebuildItem( MbeCopyMode sameShell, RPArray * items, IProgressIndicator * progInd ); + + // \ru Создать полигональный объект - упрощенную копию данного объекта. \en Create a polygonal object - a simplified copy of the given object. + virtual MbItem * CreateMesh( const MbStepData & stepData, const MbFormNote & note, MbRegDuplicate * iReg ) const; + + /** \ru \name Общие функции каркаса. + \en \name Common functions of a frame. + \{ */ + + /// \ru Выдать количество ребер каркаса. \en Get the number of edges of the frame. + size_t GetEdgesCount() const { return edges.size(); } + /// \ru Выдать объект по индексу. \en Get the item by index. + const MbEdge * GetEdge( size_t i ) const { return (i < edges.size()) ? edges[i] : c3d_null; } + /// \ru Выдать объект по индексу для возможного редактирования. \en Get the item by index for the possible editing. + MbEdge * SetEdge( size_t i ) { return (i < edges.size()) ? edges[i] : c3d_null; } + + /// \ru Получить ребра. \en Get edges. + template + void GetEdges( EdgesVector & dstEdges ) const + { + if ( !edges.empty() ) { + size_t addCnt = edges.size(); + dstEdges.reserve( dstEdges.size() + addCnt ); + c3d::ConstWireEdgeSPtr edge; + for ( size_t k = 0; k < addCnt; ++k ) { + edge = edges[k]; + dstEdges.push_back( edge ); + } + } + } + /// \ru Получить ребра для возможного редактирования. \en Get edges for the possible editing. + template + void SetEdges( EdgesVector & dstEdges ) + { + if ( !edges.empty() ) { + size_t addCnt = edges.size(); + dstEdges.reserve( dstEdges.size() + addCnt ); + c3d::WireEdgeSPtr edge; + for ( size_t k = 0; k < addCnt; ++k ) { + edge = edges[k]; + dstEdges.push_back( edge ); + } + } + } + /// \ru Добавить ребро по кривой и ее ориентации в ребре. \en Add an edge by a curve and its orientation in relation to an edge. + void AddEdge( const MbCurve3D &, bool sense = true ); + /// \ru Добавить ребро (оригинал, не копию). \en Add an edge (an original, not a copy). + void AddEdge( const MbEdge &, bool same = true ); + /// \ru Добавить массив ребер (оригиналы, не копии). \en Add an array of edges (originals, not copies). + template + void AddEdges( const WireEdgesVector &, bool same = true ); + /// \ru Вставить ребро по индексу (оригинал, не копию). \en Insert an edge by index (an original, not a copy). + void InsertEdge( size_t index, const MbEdge & item, bool same = true ); + /// \ru Отцепить ребро по индексу. \en Detach an edge by index. + MbEdge * DetachEdge( size_t index ); + /// \ru Удалить все рёбра. \en Delete all edges. + void DeleteEdges(); + /// \ru Удалить ребро по индексу. \en Delete an edge by index. + bool DeleteEdge( size_t index ); + /// \ru Удалить ребро, если таковое имеется. \en Delete an edge if it already exists. + bool DeleteEdge( MbEdge * ); + + /// \ru Выдать массив вершин ребер каркаса. \en Get an array of frame edges vertices. + void GetVerticesArray ( RPArray & ); + /// \ru Выдать массив вершин ребер каркаса. \en Get an array of frame edges vertices. + void GetVerticesArray ( RPArray & ) const; + /// \ru выдать индекс вершины. \en Get vertex index. + size_t GetVertexIndex( const MbVertex & find ) const; + /// \ru выдать вершину по индексу \en Get vertex by index. + MbVertex * GetVertex( size_t index ) const; + /// \ru выдать индекс ребра. \en Get edge index. + size_t GetEdgeIndex( const MbEdge & find ) const; + /// \ru Получить вершины. \en Get vertices. + template + void GetVerticesSet( VerticesSet & dstVertices ) const + { + if ( !edges.empty() ) { + size_t addCnt = edges.size(); + c3d::ConstWireEdgeSPtr edge; + c3d::ConstVertexSPtr vertex; + for ( size_t k = 0; k < addCnt; ++k ) { + edge = edges[k]; + vertex = &edge->GetBegVertex(); + dstVertices.insert( vertex ); + if ( &edge->GetEndVertex() != &edge->GetBegVertex() ) { + vertex = &edge->GetEndVertex(); + dstVertices.insert( vertex ); + } + } + } + } + + /// \ru Выдать вершину-начало каркаса. \en Get the start vertex of a frame. + const MbVertex * GetBegVertex() const; + /// \ru Выдать вершину-конец каркаса. \en Get the end vertex of a frame. + const MbVertex * GetEndVertex() const; + + /// \ru Найти вершину по имени. \en Find vertex by name. + const MbVertex * FindVertexByName( const MbName & ) const; + /// \ru Найти ребро по имени. \en Find edge by name. + const MbEdge * FindEdgeByName ( const MbName & ) const; + + /** \brief \ru Разбить ребро по параметрам его кривой на несколько его частей. + \en Split the edge using the curve parameters into several pieces. \~ + \details \ru . Если beginSafe == true - ребро сохранит начальный участок, + Если beginSafe == false - ребро сохранит конечный участок. + По параметру 'eps' отсеиваются значения в контейнере 'params', совпадающие друг с другом и с начальным и конечным параметрами кривой. + Контейнер 'edges' содержит отрезанные части. + \en . If beginSafe == true then the edge saves its starting piece, + If beginSafe == false then the edge saves its ending piece. + According to the parameter 'eps' drop out value in the container 'params', coinciding with each other and with the initial and final parameters of the curve. + The container 'edges' contains cut parts. \~ + \params[in, out] targetEdge - \ru Ребро для разрезания. Возвращается урезанный кусок с учетом флага beginSafe или c3d_null, + если параметр разрезания находится на расстоянии меньшим еps от соответствующего конца кривой, + \en Edge for cutting. The return value of 'targetEdge' is the shortened edge according to 'beginSafe' flag + or c3d_null, if the cut param in 'params' lies at the distance less than 'eps' from the corresponding end of the curve, + \param[in] params - \ru Параметры кривой для разбиения ребра, + \en Parameters of intersection curve of edge to split, \~ + \param[in] beginSafe - \ru Ребро сохранит начальную часть (true) или ребро сохранит конечную часть (false), + \en The edge will keep a beginning piece (true) or the edge will keep an end piece (false) \~ + \param[in] eps - \ru Точность совпадения параметров разбиения, + \en Precision matching options of parameters to split, \~ + \param[out] edges - \ru Отрезанные части ребра. + \en The container of cut parts. \~ + \return \ru Возвращает true, если ребро было разрезано. + \en Returns true, if the edge was cut. \~ + */ + bool CuttingEdge( MbEdge *& targetEdge, SArray & params, bool beginSafe, double eps, RPArray & edges ); + + /// \ru Замкнут ли каркас? \en Is frame closed? + bool IsClosed(); + /// \ru Является ли каркас многосвязным? \en Is frame multiply connected? + bool IsMultiWireFrame(); + /// \ru Количество связных частей каркаса. \en A number of connected parts of a frame. + size_t GetPartsCount(); + + /// \ru Является ли объект плоским? \en Is the object planar? + bool IsPlanar() const; + /// \ru Дать плоскую кривую и ее систему координат, если пространственная кривая плоская (после использования вызывать DeleteItem на двумерные кривые). \en Get planar coordinate system if the space curve is planar (after the using call DeleteItem for two-dimensional curves) + bool MakePlaneCurves( RPArray & curves, MbPlacement3D & place ) const; + /// \ru Дать кривую на поверхности, если пространственная кривая на поверхности (после использования вызывать DeleteItem на двумерные кривые). \en Get a surface curve if a space curve is on a surface (after the using call DeleteItem for two-dimensional curves) + bool MakeSurfaceCurves( RPArray & curves, MbSurface *& surface ) const; + /// \ru Построить контуры из копий кривых. \en Construct contours of curves copies. + bool MakeCurves( RPArray & ) const; + /// \ru Положить в массив оригиналы кривых. \en Put originals of curves into an array. + template + void GetCurves( CurvesVector & ) const; + /// \ru Разложен ли каркас на связные части? \en Is a frame split into connected parts? + bool IsNormalizeWire() const { return normal; } + /// \ru Переставить кривые и переориентировать ребра, создав связные цепочки с общими вершинами. \en Perform curves reposition and edges reorientation by creating connected chains with common vertices. + bool NormalizeWire( double precision = METRIC_REGION ); + + /** \brief \ru Отделение частей каркаса. + \en Detachment of frame parts \~ + \details \ru Отделение частей каркаса с сохранением исходного объекта. + Если исходный каркас распадается на части, то все части складываются в parts. \n + \en Detachment of frame parts with saving an initial object. + If the initial frame is decomposed, all the parts are put into array 'parts'. \n \~ + \param[out] parts - \ru Каркасы, полученные из frame. + \en Frames obtained from 'frame'. \~ + \result \ru Возвращает количество каркасов в parts. + \en Returns a number of frames in 'parts'. \~ + */ + size_t CreateParts( RPArray & parts ); + /** \} */ + + /// \ru Установить заданный флаг измененности для всех рёбер и вершин. \en Set flag of changes for all edges and vertices. + void SetOwnChangedThrough( MbeChangedType ); + +private: + /// \ru Связано ли ребро с каким-либо ребром каркаса. \en Whether an edge is connected with another edge of a frame. + bool IsConnectedWith( const MbEdge & ); + /// \ru Нормализовать ребро (выставить общую вершину замкнутого ребра) \en Normalize an edge (set the common vertex af a closed edge) + void NormalizeEdge( MbEdge & ); + +DECLARE_PERSISTENT_CLASS_NEW_DEL( MbWireFrame ) +OBVIOUS_PRIVATE_COPY( MbWireFrame ) +}; + +IMPL_PERSISTENT_OPS( MbWireFrame ) + + +//------------------------------------------------------------------------------ +// \ru Положить в массив оригиналы кривых. \en Put originals of curves into an array. +// --- +template +void MbWireFrame::GetCurves( CurvesVector & curves ) const +{ + size_t edgesCnt = edges.size(); + curves.reserve( curves.size() + edgesCnt ); + c3d::SpaceCurveSPtr curve; + for ( size_t k = 0; k < edgesCnt; ++k ) { + const MbEdge * edge = edges[k]; + if ( edge != c3d_null ) { + curve = const_cast( &edge->GetCurve() ); + curves.push_back( curve ); + ::DetachItem( curve ); + } + } +} + + +//------------------------------------------------------------------------------ +// \ru Добавить массив ребер (оригиналы, не копии). \en Add an array of edges (originals, not copies). +// --- +template +void MbWireFrame::AddEdges( const WireEdgesVector & items, bool same ) +{ + bool add = false; + MbRegDuplicate * iReg = c3d_null; + MbAutoRegDuplicate autoReg( iReg ); + + size_t addCnt = items.size(); + edges.reserve( edges.size() + addCnt ); + + c3d::WireEdgeSPtr edge; + for ( size_t k = 0; k < addCnt; ++k ) { + const MbEdge * item = items[k]; + + if ( item != c3d_null ) { + edge = same ? const_cast(item) : item->DataDuplicate( iReg ); + edge->AddRef(); + edges.push_back( edge ); + add = true; + } + } + if ( add ) { + normal = false; + AttributesChange(); + } +} + + +//------------------------------------------------------------------------------ +/** \brief \ru Забрать кривые и удалить каркас, если он не используется. + \en Take curves and delete a frame if it is not used. \~ + \details \ru Забрать кривые и удалить каркас, если он не используется. \n + \en Take curves and delete a frame if it is not used. \n \~ + \param[in] wireFrame - \ru Каркас, подлежащий удалению. + \en A frame to delete. \~ + \param[out] curves - \ru Кривые, полученные из каркаса. + \en Curves obtained from the frame. \~ + \ingroup Curve3D_Modeling +*/ +// --- +template +void ExtractCurvesDeleteFrame( MbWireFrame *& wireFrame, + CurvesVector & curves ) +{ + if ( wireFrame != c3d_null ) { + c3d::SpaceCurvesSPtrVector wireCurves; + wireFrame->GetCurves( wireCurves ); + ::DeleteItem( wireFrame ); + + size_t wireCurvesCnt = wireCurves.size(); + + if ( wireCurvesCnt > 0 ) { + curves.reserve( curves.size() + wireCurvesCnt ); + for ( size_t k = 0; k < wireCurvesCnt; ++k ) { + MbCurve3D * curve = ::DetachItem( wireCurves[k] ); + if ( curve != c3d_null ) { + curves.push_back( curve ); + } + } + } + } +} + + +//------------------------------------------------------------------------------ +/** \brief \ru Забрать первую кривую и удалить каркас, если он пуст и не используется. + \en Take the first curve and delete a frame if it is empty and not used. \~ + \details \ru Забрать первую кривую и удалить каркас, если он пуст и не используется. \n + \en Take the first curve and delete a frame if it is empty and not used. \n \~ + \param[in] wireFrame - \ru Каркас, подлежащий удалению. + \en A frame to delete. \~ + \param[out] curve - \ru Кривая, полученная из каркаса. + \en A curve obtained from the frame. \~ + \ingroup Curve3D_Modeling +*/ +// --- +inline +void ExtractCurveDeleteFrame( MbWireFrame *& wireFrame, + MbCurve3D *& curve ) +{ + if ( wireFrame != c3d_null ) { + c3d::WireEdgeSPtr edge( wireFrame->DetachEdge( 0 ) ); // \ru Отцепить объект \en Detach an object + ::DeleteItem( wireFrame ); + + if ( edge != c3d_null ) { + curve = &edge->SetCurve(); + ::AddRefItem( curve ); + edge = c3d_null; + ::DecRefItem( curve ); + } + } +} + + +//------------------------------------------------------------------------------ +/** \brief \ru Создать каркас по множеству кривых. + \en Create a frame by a set of curves. \~ + \details \ru Создать или обновить каркас по множеству кривых. \n + \en Create or update a frame by a set of curves. \n \~ + \param[out] result - \ru Каркас, подлежащий замене или построению. + \en A frame to replace or construct. \~ + \param[in] curves - \ru Кривые для построения каркаса. + \en Curves for the frame construction. \~ + \param[in] snMaker - \ru Именователь кривых каркаса. + \en An object defining the frame curves names. \~ + \param[in] creator - \ru Строитель каркаса. + \en A creator of a frame. \~ + \result \ru Возвращает true, если присланный каркас обновился, или был создан новый при отсутствии каркаса на входе. + \en Returns true if the sent frame has been updated or if the new frame has been created without a frame in the input. \~ + \ingroup Curve3D_Modeling +*/ +// --- +MATH_FUNC (bool) CreateWireFrame( MbWireFrame *& result, + const RPArray & curves, + const MbSNameMaker & snMaker, + const MbCreator * creator = c3d_null ); + + +//------------------------------------------------------------------------------ +/** \brief \ru Создать каркас по кривой. + \en Create a frame by a curve. \~ + \details \ru Создать или обновить каркас по кривой. \n + \en Create or update a frame by a curve. \n \~ + \param[out] result - \ru Каркас, подлежащий замене или построению. + \en A frame to replace or construct. \~ + \param[in] curve - \ru Кривая для построения каркаса. + \en A curve for the frame construction. \~ + \param[in] snMaker - \ru Именователь кривых каркаса. + \en An object defining the frame curves names. \~ + \param[in] creator - \ru Строитель каркаса. + \en A creator of a frame. \~ + \result \ru Возвращает true, если присланный каркас обновился, или был создан новый при отсутствии каркаса на входе. + \en Returns true if the sent frame has been updated or if the new frame has been created without a frame in the input. \~ + \ingroup Curve3D_Modeling +*/ +// --- +MATH_FUNC (bool) CreateWireFrame( MbWireFrame *& result, + const MbCurve3D & curve, + const MbSNameMaker & snMaker, + const MbCreator * creator = c3d_null ); + + +#endif // __WIRE_FRAME_H diff --git a/C3d/Lib/x32/Debug/c3d.lib b/C3d/Lib/x32/Debug/c3d.lib index 707cd1cb9619a7bca4779d44c4ba724a833929d9..601689d774fd1c0a7dfbb299694203859e78c83d 100644 GIT binary patch delta 1212579 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≩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 z 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

!EZkue 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

8`ZzMauWI9$?`oSl4%>V>+1 z3<~!PHjWDM2wLhktTrl9S>qd*|&EbJU?B5VQ-3z}Rxsq#g+PzL9~6tGAxlRIQT;XmNBE9O?r zsTdY(L3;?fl6q8)l_5wH(naZSVkK$1>XE84KP0!Qy1q2dnoLcwrch(7N!0$*Xe1u_ z9P&l{k$#bjj$tmTXLB$ej1X?=hfr~#zL7gs*C?}C0#*ZRN7f0`A=V~pgdH&t7MJI+ ze^FoY^@11EddXU8Yi3()du@~2hucSr z3XVMvh;tT4OYh=*%lVJ~NTTK5qhEG9T^@;8a)LX7f#khnTyquOO?W=$1>Q1dT?wJG z7N5^wQQ4&Om%Ewgu*cyYU6#;<+a(9Q7b^?CO}>3T7P^hGq416{N4)Ky;a|ZARqYhH zByP!b>kQ{y;XI*GRJUlzKQ5dpJSvm%@EY9ZQ``gYsPEeOYUH`#e)Q zB36&KMcXF4Q@cYuDpn^_D^feMSzDV{i`JOdgcb|)yDpvsYNTVHJ3wsW)2U#N9XovOX} z6DkY;4hc+L6IlN}#5BDNy$-zz(M<0{RMXtZoQToYDfBt?G4z_z#Hg**lnn$&%L6jM z%qQzA?;`IkpQV_on4u`WlE0L{kRMmHQ+^1Q>-DbgaVb?sy~}7XY$trhpqpBTng!Pu zl+|B@--F+R@0D+rApN0;Ct6!QR(FVlpjHW=GSc~jkyO54xR%;p{Z-Q?^e6N))GEj` zu}#~QpF-N|R8^U&XSt?&E5KCD%=gJ(W}PKZXY<%~DQ!#a{p|G=AE%FGGUqepu|O$& zYbjCxupdeS-1F2!k`ol(PC~rM|EFH>!Os~y%FwXE7 zGODBqCS6dMIarDlZIGT~))HM2wII(I{AAt{Zxc)6>v^5%hk@mQO)^B&QL{^PK{HSD zP*a)??iC&h<|#%SYgV=|^esrsh;lS>i%Lnns9H*x1rDfI0zJX+%H3s|^6K(jdAhu+ zd|pA6nOe10D30IGM!1)$bMmG9BQUe1^u@FO8HpV$MR>&aG`G0E5C@Uuxxky z`qy*)&Hv8-$=}Lf%YVt217!dNkd^>4Km-T?3AmmI0~G)WPy^rd3P29*&MN^Za3y~= zPXW-t&pZaWna2W`^WXA6@?Z0n!0r5vyad1jc;IvXPX1nA4^V+U`F;6I`J?%F`A>OG zK~b+MNCjwP(*@I$$k-y~ApxCLI>XXZjIt%NiR`n<S2nLcBPL-{kBH>`8JS!ti5SW@0{d(>MTn)mvc#D72_4p zlI5v~iJZ%nd%#^q6Y?tP>s|ZhR@LtW-mQ&gbUk^sNNRd17LC!9WhFk0(U-K+txFd8 zhZI3&Z3bD{Iyal&g&|`uCSB1H1WTAVJ*lKF74pjS%e`!0crHYvo{NlT;^x z$BzoMO(s%HQ$Z6TIwRUgY8L37oRXUs8xoiykg{eZQL)9!sJWf(fxElO#($o+7m@O>r7r5Y+^=Md{F{Q7utkRQJe7>}Twl;{4)(;`HL! z;=tma3>lv=+$uDNj57#b5&f`gSI(JhuI;MbsQaIGoNkz|ySAIQg?6ufMEC;MV&a4( zqTasVA|>g!!!8-B2}pKpE^6j$9%=I8j-|@Cgteesl{sEm$y4%`CX@xG)9STjNp~QV zA@wYP8D%rr{SKOUr0GN8eGZmC%>2oEL4Ho&#*t8e3T{K1v%ZmjaUHy$v@pFFzlw2} zf1F_zj9|X;4HS$pbrro5H6rg8a9C>`J8=7OyKviZ+i?eQdvJSk{_vox(joXY_(}La z_+9u@_<8ti`1GoS@T>3>@DWHevIUZYu7Qjo-{4SWbmOJc=6iI?B-;K~Cn{oPB_7bN`?r>^S z;leJ$MOv`+hNXpd9d(D5M-XsO(so=B?X+Y8i%%YEmW4_eQtwjobTm!j)=GcRo{h?F z<89}Wa{Yna&O{gF=9pi9Klms60J#s@TED{f);0<4w)e6hvzIx}B?^wYp|&w>7@YeY zL&Z-y_;I##s+f;1Ij=Zfu9Mv6G*sGx9w={u1dw9VO2wNbH1#4e+~rF6b1UU=-g?@% zk~GW1(r@N|y7~r>%6BIlsw$J?-6(}U7L?v3PS)kndwC5=edt4D*%&XW_!nL?ltl1k zgZ5+uGr=>Se?##@kyJKh$dr9@+xX)c%ROKC?-}i-DojI+owH~5J@)qKVX^BWLK0@josGGy(enkf-H|Hh> zX9Y#kaKx-5c!* zZ9+pUEX18HE0oX2JOJS#8!!VflW{*X{WG?3ChX46%QCa@Y*kKKWvSX-80)2nIz`;F z1~NtAAP}u;PT;8SDqvVBc6au0_KqSHdTF``QBdwfdh&%Ky|QsOn7!ej2lk0nI;m!rb^RD z;wa)Y;&kHZ@bV~)kV}_HOG&>XBHZ#)YA}(6nU%DfFtIkUYmmtyW;hX^1p%4B(m&;Y z%YT(0zih5+$(xZjpTi%T z<+$s5RB}_j{k)fb*Zjjx?*q#U)tHbXtf+ypNCs>ClDy=+X0GOerb1h;9a_zSzk|)f z)X5}p&oY>FLYx$*#Az{13(=+sFNLp!An7UWf7sL5D$F38-*^hr9TLHvujmE31epez zTA>BCFER@B!fE}G@C@N3cp4Ug)r6HC@oUT{>?=%D+#J7Qo+(`Fn3I+eq=Xfsm7=$( zvFYQHX5psc|AiZeubY=RHY+!x z=7&F{Ds*RqQ?OI9-wiXcGqF9egz!Y{1ngw&BybZjS7cWj#yF`~Tc8yW>?ix)KoN7*!eFqm$VkGn&69nCFN1|=z-ulZH8Jvg@YHg4Rkeh z&2Sy^T3iU#6tz|9)MikvP(IYxbWvBO^Hltj4O3rK&m`=(tg-eI z4p!1W{0a@ymVz3LwiXJKIT6}Gc!R>4Zb8-)uHe?AcA#FPuA>O1dErl}nyAL8k)ax> zMyPkF@2ExC#n|75W!UA|-q>%b`Pg~bh1dnyZiPXGb%bArpN1varP!94u7v@GIx?bu zE2^Ko7xo5b8|rX@!DsRxFdJENX1p!xAbW56u9p16OyA7k%?&MCGtL%qOmj?kki0j1 zSNuawp95_oZ6nPUEfftD^%ZRu@n9@CDy$S~Nkk5gL+4O9TftD&HgHDLvnZ7aB?Zkx z$VzP|+;VMOaC`6v{O|OiG>K>+l8Htlk*Ft{ikjjm?5m=eJ(w&fv*B<586!*jLa|C$ z=vxLaOeQ}95h05*k3l5Ja?M}!G3*fRGp{vniwjWQ*sWn6VGmSKRL3Bfk7umob5QR@ zWAc@<=K0q7_W64GM){g~c|lW=tdNt6#5;s9z$5QtuQ=0QmcnIlT{*2d(=&C-YnM}0 zZeszn(D*YmAma$V9?PG|+beG>&f~rULilGGEzrp} z&~-&9fPaEr7CHhWf}K%qQ0>J;)C*xtqq(wJJ-U2;`Sn5*$O`RG)hGBn$m7gY)*bS3 z_I64+^@G46tjEHWF9j{UFSOtEcKikWPK?bA3R5lU$`put3Ob3NiS`JftmBZbkQ0z@ zCCEugi2Oq`UW^P4Vhv_VU{cs9^Jp{Dg>p6UH1zZ_^)mG~$zh9gLs&yuGT3;@H_0B! zC#gl+S~^R5O!``UOne4f6&N2~&0p-f&6pbyP;W7$(#9359oLzCwKKKzv`vbkqN2D9 zvO@h?T~Iwo@hg-Sk_uME02E$d%4=_;%5(*7e-u`q(>BjG%YxBs!EeBoC&}14{|J6l z&M7o7)Hkd$%s2cmbBTSNq9yDy?Z_-4*3ERp{m!hE^^(t5xWnmExCy*5d^Mb#MP^sY zddn9m8o?XFSHU&lrtsV529_1p24<{HZ*ODYX%9N)IG(sWdT`zW-rL^mzUKZj{<)@4 zfh!OQYzAa8?mZ-4z92m#-9)#*C`5@+4Rs=Khw}Gedw^a32{X9RQ#PQwG4W*fbY_zL z7Wo)^8>Ng|dM~gGhf`~@E(SkyC(%CBe$m_V3yk^vjtnwWF6hGKi+Tt;ik^!03Sg{- z=?lS^5xUZvzhtnYp64sM!Lqj0X9$o5gaIl z2Q7RnKY|6c32mj~iu`ifobo$mhstXxupx9wybZX88C7Uj{F9l8@}bXTP8f@rhL!WP zysRRN%2NNubll2-P~{So#HPIpya8aUJIX5UT_p_l75ouT#s9^%Abr5LCdsputSn2; zeoy~M+u5xsTex1@5`GWHoWKJ}?@-Hdi?Gerg?zj0VEKDgh5UzXw0eYkh`Mx5eOY~8 z{SnmxKEl()I;4UD`YEecSE+ffbNc(42bqc0a|=&EG`@(iOhn~_b!kaXGCa&i&m)>m zc8m|x8Wq2!j(~Vv@FSrEDFyGPYGv}(CF*Pr0|6B z-v~VVJ2E4@AdHNLtR)cKWid3kGKAh#wz&+eMN776$A%Xfh5A;a-O8awRncQSgMIG3$oh}`+Tvzi zB31Gq(rfZzOsb$ZGij?lz0ju6r%*22%lyI8kpCw$%T~*l z$u6@`vQJPpamt0?1To=6a*kV?#riMx@?RejOt&U@Lrb`@G)vY}PQ?VXB))+#h(APr zM6rmE$^(K0!j=h^i0$Y2U$grQMhKsqdWn9D?qyC3mMUieD!iiV3h*B2L3qbfvQM!$ zbG`~9!aR2xYbt9BYbkdyZvg*3zaU_XdWe3A{u2niCl!Ivi;`)V>bmL@>>8{#tUm0p z@iOc>tPZRJ?1<6EZb>PZf0MbPLTD;*gm9EFNIRCGO%TRs4&f?w1K~^IgW$h~{osAz zpS1nqRCtLDr@)`Vp1_{Mi10@+68tetA<~e>rMp>#w!xlvK4@@!`n#;4E~>e%PPxNE zpW3hfr24G#$BEf_xRd{rGmlcxFk|UEGD$ne~VCo3u|j z7iVR+plsr%Y3)>7{7#s>|WuV5-w_RA=`X}U#Z9b~1MqqZjwyK|wlrfZig>*l++x*6Vq z-Zs83{zd+@sl8>EMQR;tWttNTQHw1a_67sz-UJ@LEns*3Dp7@wnoG;-KP;;$hGD;=(R@9R~FQb$?Y?)j8F06+M2-K}BnvGkG0k0?8tcRy<1nPTotTUFL)#caOV*c16nLmC?`U*0?$c_sZ9o{t@7| zB+aTH35@%aTpgoH&l6L+$I1ly5~e$^nxv%niG}|uD}VDKj9#Q=?nqFbG+_qAcffU? z9RGmAudK-+C|l-E@vkv5(i}#@TtGrq$~2YvOS-WstY8r{nV6=(=D8VtMvNuZDZf{o zU*cu>mZAGf-{Ko2N)r;z(&&E}#y*La(jUf_${D@}DW`vmzg2Qy>@}8{ili2%ULpG+ zuOPCbQ=;9Z57F+)Nx7|onZ&=uDX~ETu4bx0%$kyf#~PsDqI;w|Anrj`!ENZTh@%J? za)I)yc)hq@=4hc0`T*us@^k!f{BC@Gd>qn=To^?rE|+2_(EP-9gc7-#csO-G#Y#KU z2c!QXIr@!>cF5H+yZ#Px7qXsy6#94qifI&k9|Of1aXR`>N{6n8Od*-1C&|Cby9sMz zTk?BC6+1^vp{q!}W1$#1*^{J7nlS)oK52X^otUb>9eqknB(*7Neg*nHzJ6kSqItU1 zPv0-mD782C7E4aWQj1e>ko}O?5W7g9qCJy;h?8T}lCW4K^m}x#)DHA_#Bl@yS*vO` z0k8E)#%Q9Ff}~oqO!G|RCQ}Nw>V@jJ>No0n>X+(gvW)trY`%Jd`jz^% z`U$~EuFt8#Y0qiLY0l{->?v$qA`cQa;JjhICU>`VwQS%hsNV%`S>H(+Gs_ls%y*pP zMd&^F0l`S-Yu{!65L0K-3lSu^Q^00zVVcNWnPxJcOW@+TS!|bL*JAUqGun;QnlmNz zLp2qmMQKodLfmizV!(*1vX$2)SiuLJHt!TAM*Dzd?Y^!t17EX5Z^#>SU7A4Y&x_pbQ^32v>kLiY$kM40l<Z9STHhMIB1PhUu$?w3r!m`4-W)bxcV~t^Fj?YqG>_)Dr6>PZu&%I2nM3Mh+CpwtbVV4r;Zj6K*L2xF;a9Ed3Y9%gyZ6=I1ZkS zqvP!H)uL0;Jsth^LN`Hdhau9b4r4t z!aN7fL2@wMw*F`A;lf7@KYIxI800g&F8WID3#l%BA9g=>5cX*)lg&ZUXY>PYPuatS zc7lUYi}QeRj-bPr;ro;|(hSoCC3`fNGz&D3HDZZIG7z&EGcd!-BC=-5AdOG5Lvv0u zM{{5EF|#qVA~T+aBBup&na2b?mP_GQOeri%FHZaM^0*coz$@Z9Y&F)6`yU}<9vp73 zcZE)dN=W@`!ve!X@-QqPABs0832@y^jR_tS7~2|)!6pp_&K6Eo_{TDnHG?&sHIQEv za6~;tzeHyQ4Gj}Q6GIt?&>JGv6^;r8Lt)Z=As^?6+N0j$`Rv(jL0n~ZiUD!a>JV3n zYgpalqPW`X64wydvUEp@DYs6p`^ ziI01hx>z!qtDrsN4yIj`N_dxP3~67Ujt=7AqgU~*jH~?ljGVMo$s`MEFiXwp{`iP>CPc@2plGd#(9`|l-ZI~SNM#LDq2_6)791e zD<_>$_bI~-3B@+l%|asxFE=h^gF2uk4wMJw>9%0EVoTTx*+5_^ZgSyw5GP@&dMZHj zTZEK;k!m=>>dLBL$mXi&s9&g`t7od8sGrKx>gTdq>e=e2>SyZ3D!xnLnn-v|Xs_DM z{AZA4=E-}QF0zXWkjDWz>W54ix2tSJ=Dn;AXL)9AX02#!<`vGPtzE*sEZVA<;YQ-J zmK~O;b&)k>{%IB1SJ=PWwT>>%1x~oDr)!6c>)!0H=K*L_{ssOn zCKusxU`${%?xyg%@T_n+ZlY_QX^lx>nQY-%OID2eoHcB_?=U;3IbS)8uFWp8d#&5# zIgefK{hx1+uQbEoGO#l+B5=pt(X!W)vaYhWHS=s{`&#>Vd)%?W(bKu#`OxKeKX;cr zP;UqCJ#WJI#MjcV2|O_U2`ErJ%R~#u+SiIQpRopQcO6FO6z2;k;M(XSx>vgmo^#lh z-e$g8zG?pEf$f1|fqKHmW|C`xX{6}3&`oGovNW-@GPf|3ZA2Sd-_6s-^TPMcCq}I_ zEjLvJ%Yt`>9)iR|F<-JicFc2bcd^|Y-M2kaZ)@KIU)=8lGlfn!Qf(4#P| zs=S5g=;gRkxSVCDC1zc04V!;i_u7Q^mG*CToujK0;p*ku>EgM!xa)hs-ZtLT-hi)@ z@1(D;|FwUizpKedcoG;J7=ybdydgX%9D$qUT5now5?ZGG`}+2`V$J8R5!(ZY#W~&i z+F9k=;-a|Mxy_z6-WDa_T;EK8tH7?n$iQ85C(Axd+Pd1>&dj&nwpr}!>_6-Y$3jOh z=K<#sD75tjUf|5=(^TAN#%DK?S~qwntN z>UrsV?vtQanO2xU!SdieVSpgDP|cUE>l|$y^PL>`CiflBLSMqPFVK^N3aU|F!e-M( zlS9%#Gg{M6(?+vjvq^JGvqUpp^Hg(7Q!C%OI3DRjR!G|;>m$=hnY4riOXdZj+Dh%3 zQrTkgQgE3xB>AT4RQZmus&WH2PFn}MUAcf*g7<|FfcHm~5Zw{o5d9Ec5%)R6$c+?K zl{9{p`3_tM+_|htxi63t7p!*i4M-SuEL707B>sV;O`DXbLO9b#<>}ym!S%`w%5vQU z?R5yCYeAd>8IkFj?U3!C9gq!VORcmmwbL?lFh?Oj9lsna9cw^0D|zq_u#3XJ{$H$D zBvyW1`!Ph}H!&*byLRLdI!CFE-%Pz2wQM$v|L$;P+Z6NI+Yam-- ztsq}y}rSskW9(%NVRouQK`qe<(E`!0+6TPwjxpA% zB+30yDHKCg5j|zkRo)6})qC<*%3sPb>O|Tn+E03v(Uw7Cc4k6YsSvqJP-U#TR6Y%S z3OqJGCcd${3#4=b=$!4L?Hp}F>qTxOyHLDX+>zgz-=1%r-`0U74`4*dq537Za^ z1)B<+0h2{IZo3Ni+QfbE9ugzbXWL!T;i zi!L!YbdV{FsC#J?%3|t18kMqyx}OH3a49s(QtAO3owAI2kj9`aryim)DJ!UlX)MZ0 z>Ji#eniF?be@(wnzh9rn`77S&f9a!{QHGHQZ^o552R#XGhkljY!`jC>$lA}^%R0a+ z;V4*283j*)Qs5K}1xbNWP?T~CjDnyLC>0bEg-GF0*c3G7O~t#4w-qz-L-6PERrn&_ zjjMmNDX##7`}IZeJ9u?b<}*f~~? zjYG7MEffpMLbcE=9ZC{2)kGa^scXer=TjF_7f{z(+gm@eKeMIejgU={D-tu;z}0ef zTn$&xRdbEp!_*_xL)3%R1JpSZEcZL-2PYmlWIbX%Y&~k#+YC0N&15@)JdSJxY6xnL zJdZkux@^3TyoQ`cxMv%U9*(x#C2FBsq~4(3r)q029kTzjuR&SWCbd~TMKw(|T{Ttp zTiv>{O=a84+o}nb<15Eij;+K)aZnsu>=e1!uHoDf+>zX2+@ahd+`(KXjYVV7=rkIQ zN@LSjfmVX9S6;2WR;fp;(Y29rwqy6?TPOWAKVn z?jrXx_Y(IC*9vpO>@Ww+2J1{aFa1Z};8A!~9*tLo{mWX0?V+8|eQ*tho&gPp4uSp$ z`dwKYS_}HCGVN}IZ;dBP|G@sjJm}is7QB|cHoR86w!GFnCY?op&$~;%L%&U*?Vjb1 z8Y4y{1`39OlW+tW4o<*R@KPKO0q5ZVR6+1+coqDg0}(ETEP^kAFNRAX91q{a^N2lM zkK7~lh&(cn#3S_xJVAbl5AX`SB2U4PG31O!x&8cu`~&>uj1`PkjFpT-#<(<#8Bc)b z-$Oq@-$94MhQJ2H2EhixuIp~-uIb7J6@n-;#uR&(mhj8)AG}M@i_y>Uo$>4NYw=5@ zX?zMl(03C*5-|!f$@f1&b3sc%3qgDT82?!RIR6vu6#O^H7sw0bb7XJiCB#L<HtH3gNb{T3Z`^|X$)V|fqX;m zN2;4$lft8$s$XILph9_LHQ#S81>4zM7Dv0cINE_fySVgj(zHrtP#ePeNdBrs;vMPz z;u8651=ZpG0tIWl|Bk;60fk562{=4X>K$7?ro3Bu*YfUCkRZe6s#nQ;?-u_UO-s#s&2h~XO-;!G_!anZIA5ZYj4IYF zE-8wO|02DMbBk?@rQ+1$hGML^wrDQ8ig$B|SUbo<*;Lt7#5T-u_Mzm<`0n`S_|iCu zouSN$)@GL{&c{ki&F{_Y*o!FC#BP~`L$|CZc9aa{+@RbM5QUAjcP&FKIBR=q2kRI1 zHHnpbj5=5H+w?5BCv_u5P8-udIeVhVtY#ZkzbdgLX3%d4*3@sbeY3IDZPhDPQTrhK zS^I$m%wY=Ejx7&8iv5Z;a;Vii)W=n%_$7zLIjrQo%88^~$AYjK!?{H+AhlVlGw zM^?oblV{{!W)|j%VI=GzY(MM}>;P;ZY!7TNj2#*q>KU9szDHU}`%Z7mTv--?1R-i9 zu5ty&W&EQ2!um~a=cj?G;0PoP36d|cPLrpyTeJ7FOKT}TCF42oDRSW}OJC|Q_C3i` z$*~|ozZvy}yMT5>D&<|FH6gO3qjddvdODc@fL?=dW6a~XW&lzslOm|a93WjQ6`M{l zy9=sC7esReUzt0VH^rO95bDujG~^7b+_@J217Za9?BJ6RLeH=YCE$qo+kgxJ)(aC%S zV-)`l{|cjqU>S3u=%fK1`lVutPk_IoMrsyo-irqj$Du#DzX)3hCx~d`*Wr)>7uo^d z4Ax{#;SU%Q9*-yD3HY?(e}&Qq@(@ajd!O2n^?=kAbd@$zH=Jjn|DgAVM;MnFT0uKz z8}eqscV_lW!00ST(xp3u>crqcB`GtI(>@t8fQbEz@P9P&ITR zWNKzMxTKhtUJssP`~{r{s|7ijCE|WT_GQlC%3-TvD`Bf(D`3k@Fn5JI9;|RnT#^x* zgru`3BB4lV5~_qDVM^!{mSnF6kX+VONfv2Rk|&zF5+W20`w78Fz}gqC=PtB%qI{Du zgk@lx5y|1#oTf%yrMhedVTvJEE>KN3dg7h1?XY$%4f_)H0<|F54%1)hEH6~$0-J?m zok&+&0d&S)DVtmF3ABfGs2VBxAlW8)CDlorNGD16NuP=jh(BleS#)+*<`OWM>V-9j zIm0c>T9@G}4wL&)o>N|tUeVe!J}|$fm2rhuqy3>f2>t{83oU~!hAo9HfGvS7ge`(C zgAHdv$Y()+D*sll#*BnEfHJ^za10VHL3-h0*log-eh>r;c0%rEzJzau^^(4t)|!o) zlbUIo+LF$p1K;i!|r$Pfu0fGg71=ln`sfN7MWB*t*DJ2qJfUlpH z$Y1Dg;_1v^$oC1_d(V4AKBlO?|Ac?Ash#MnXuDvKa-4Ue@T;&7O9UIE+i7Y|o{p=} zUCTe^A4Te5nQf6-hgn(XPr;<^nPZID?Of_C)phN2iQPNhEbmb7Suf!0;Ct-*;a}!w zq4Fla_;=tSQ%`PB7$ZEyG?3d7#tIKGb>y~$H|){E3F()vVdZp8<@IrNwQ>;4v* z`k9{Ep}K`Ows(u^B4}s%@$wNYD0vufI=w5lJ=TY%V;f*u*sUQP7-hNus(@fhUaKlRm_hqyY}w&?r0qxj>jU1XVTmTVUW0vgFalAMiy9Uq3j zfIooW8?S-C8h7HC$0_U_WfaniTotX$1|=R>ECOALEjJ%Re>87kFQL#A&F}|h8xb6& zi^H_6C3cn!;oPO%7f^+z`<7uAg0%~^ll2?>BIJg|#yvruFZpYF6+E7LoZ_WD>EE2= z(Gymy?HH1)ZwA_wXoXx8bLe*kH|eh;o9H*&hM|Ah#On3xy{fo<9k zl1y5wU#Gv5T!{agtdGByh`F?had>s^I=4IRl9b6iPCJ@g>e?p10YX65B{ix~38=dr zUK*oFPZ51OH@ZUAiI*iw=-p!87%usVcaz?kG|z2F8ZZsu8{isGl)ppaP?{JBWz*ad zerX0HCCy;IF=mo}<*=~2kb02Qy5T8^Aoov)H$#8Hb0_+M$jJqh($osP)4LguS6Pf& zBgDuwD)aNaB;O)*Z|PI~PJGjZ4?i{0BHa}a5e?RFz;{b5muB%FjJNQOlv91RQc!_`h=}NbXbb6>fr$Ma?VB8)JB?oy+!Xju92e^s z7%ODhLYs z5Of4d;iVX-ah5R_p-_2zDdjoiwQx}O02pE7U_Y|DSZ1@Bwj|FD9^@IpuM)iV4G?TM z^%eaURR+%r4uc;Uxrz%6K!!HOC;a z!a2%$&k0J`ms3c0li!lJ6S{;S)|Iy0wOzhG33vN-Ino#2WqKFV0=F?4=kHW}Rv?vM z7_&$tQZPZ18A;62U-I0I%2IBx&RBvPSw>ZUftTWImY9}km4=Ci=({KK@sGyF$^pvS zDTv?dua`U=qo(|+nCOsbE9tl)nfns$mmHBBFL=(Jmn6hGr)DWH8$P<4hd#MRdp@z= zke70%QRlFJk}7#|-fvozUdb5AS1_vuW0*2gKT(bpz-+oAWuAj z^N|u3Heo#^b>Y9}UuNh89hmJ!-$Z=fCm{%1KinWJ)?dk1V7rC8hI_NvWES~y_7rOj z$HmI>@98jt(tBUIxJ9UGXr;BD8DqO{Q`&dfLyozQTdt>Wytlvis_#GlER)GT#-s~; z3<|_Yzy}KxIUgv01PNgy)_u~E;9{QFrZMpV2 zYEeOcg&K;g4DUk4(MNG3^wV(s(1Ofy7!7tFR1QId?U0)wB!mJEL2BtnX-5%6mZ=tj zb$}ITzF>XmusUZr-#DvXTU}K5dbh$MFglF&#j|rd zLubP@V<->~bT57{mH#OJS)N7J4YdfiK+U82U@c(HiEMN|LBJnyFq@Tv?o6IjDjLngp6w zIk18XItP@KC)2*thBAYQ&ya>yro!{$a@2Ix3{Iw0QafAl0sjqIRZlJEKuBQfTY7%Od z2w%N>p~r-a#D|?vIb+Cgg^k@!+}cP_b`Lh#Nv~2@aVz8%q6$XEVuh+A6-`F5QCu_} z4Ml^|!O=lcXhq|yn0ioX2^i%mm`Azv%S*H4<{Hy$}q*X0dJd?LA z>{Wi}|Kxw;|KLB@)d_70Ax(44v&<~lV$;>gmB{5t9rahf!oRPijL|QEJEgy}Ug>&f zdu6(1+GRRs+Go0EI%L{rlqMG90IFkIqw+{~_jHf+^Yo+ill0^C)AY0Sql(p)t15z^ z{}~OH-NCEF!zJ$|TO==}8fhcx1nC~>WAQ$5ee|x1OW@1kwc&v#Y4oY$i2^2mgV~3o zg&tsp`1&{zwnWao#@xpU@B(Z_n8GI7AXE;0Y#C*tSUXX>SKa25`@taYaOZuBb!4AX5LdHQ(>PDv! zf($dBn5@6zxgLE?j3kvQuh(Q$8^K1pQJ7!krTOY6#w41g5u!f&UWsh{o$(I7fwEo- z?r$fs`x_*8$MC68YJMsqIwIOZsu740ju_rWyCz5H<_3QeC&mT@CJJ6NCnX`VZYg1K zdPzCaP}3kbT+{y1KGz=BnhetnT@6aybpzj!0-vnx4C(^v1RANuhYY9#!mzA|e6HfX zd|mETCC)z^`VvHi)POb$i~S!!??HTo5HY$i2HmJqsGU&Qi?U$G6xfIj)mKB!;cYzY zJ!J7i)2#o%`!`EY*$GL4rc^RqE1|vMR>%+tLOi&F4(ee( zqD%w_xEl(WaM)BO<$&_M>?eUvjOnMUAE;-jAFHp){u0Zm15NVMY>6htO>DTEu z>9^^3>G$am>5u78>CfrI^qus5^v(36CHijqHu?$rN&3U^$?${liSQ#28yXXd-obN6HEt8HF?|VqoWti1xwLVWv({=wU*hg*yQ%+ z_6_!p_78Tm!{Qj{81Lxg>g$^9e(i4RY34zAk=}0J?%vDZEB~IwsIQyvtnZw!p&u8( z2gaJlo5q=*2VMmBl}y3FeiI=okJ1?5-Ji)9%wNq_mWPyQq#EXO+f|#w-opOTZgos> z^mC1+J*M4r#oX`cZ`}X$#2Bj?c_zx+!+X_x-q*-K+4M3%W?lGa_bo;Wk$mKQc;LU? zQ(tn3Ucnf|)I@R-e6)UaXmnVV&R{T@j34e_?!WF*ndi5=-1F1@$6ev+faW6CA%CK| zn49R1XdZGs^4CAe^DT5&v^ik^gv6I+mIlP6!Q?>3C%}tK>kMK(R|Ev{8Q|0^b16`>MpMp-4b}Lc%-mm z!l75Di;NtsDXa*p2F--Gg*QOlh4zEg)Q&WcFjiMqRVoqF)DP8TfktMcYrg4?_m%gx zw~ly;_`R^Uc(M4MaI*UUjJ ziWHR+>LAh-1qA8H0*Zi$6hWGFkfx%bbWuUzeGQK!Q|CE5oj|gnmOGV;mVU?m#A!krk#^TBQU~vl^j#i~&yjWH zUv!1tkKOCsVh=^W)N_FE@viWyi0$P$iWBl)%$>gJzQwYK{5;l4b{=;`*%jtP1c^O^ z{WDvJy~Q}~Ka=q~WR=A2aMRbED%^Sup5q!;fB)P{;O6N=a^5A@uY$Si6 z%xg}{56I`p?(>-MUl$V%B%J(_U|(G zE|$}th2{n3hG4t0_GKTVaf;P?c3_N0T`(YDQ_vmX1K$&0hwp~3$M?dIbB=ZHOdL+^ zNE}ZbOB_iYO+Z%x(DUd>x{Mww`X>Jb4Oi`NST7JgcL!>SgyViL&mQ~CzLv( zuJrN(v}83W^Q$T@A#zWre=i;B-(9dZ*0~T7o9e`=tznPqG<}9XLHb0}i7|pZJ{%7V zV=AeDH=aRp#r@WppFGVqReDPOn>wuN%u{Gaq&G>Y@IG+eliuX@R~3*uldb%f3~Kpz z`kC<#vX%T)bfH1*z7o1cm!->N=6H+SP>#uX+Iv=#7O3v$_Khxz_D@*k@1@=}jEnA5 zRYWFw3e9U%&6t55Nrm<#7 zjTl~A)4Qf?&ET4bnr=0NYP!_)j@8wW)f6>VeH``q6^LHl4Cg$CGT>}%Eo8Nqsgz6SDRK>T;;vy-AKk7KB}nEUDh0{92r@jsAaFIn2KyMbwYJB z6`}HB8RR(Rd&s3oPI9(n33raN0TuW$L8GvdwN@PF9Fruu z%cY}vHw&9s?ZwyG$0aH53h5Z$5Ml$7O+4U_26hHAHGa2$sD7B9U$DC9kD@oo;^e#l zA~@78^KCLsArG_X`5tLk>HFwW2DIT`YJudYrcOU17-2J&N@X&COu_krlj<(jir_=! zXp32CQog2rRqIwZX}4&z+QZtfwF|WGXfJ6mY7<(WasqE6FIT}${#sFOlA;P>Cr#E2 z-A$jLxPttlkVzhnEQ6QA0?^Hq`E(*(O(zr(=mqqFa3h9;*_kq6*qGHd2P&5Z%f5J#liy*~H|Uq1DY?yU$zG*|!1nDrO??6Wr$k8%Br$fsK+N;v5-K zG!;J#&d*I1b|9q$*BEbG#Agsv+y_k+x%;bJ`Fr7noVPv z-=v+;rF6^5p-_jQCp0S5KGZG*uS`?V8@@2SZoF-HXqaZaZu~yISFnSr%AcRVjeH+5 zO?V)7H*z9(XYTIE`N--BPgu!X68coPPS;I{jmD4%QA2YMp@!wG&R9Mce#jCwg(l4Mp!1ZZ8^L_zUe| z;iN)N=r8FpDumF+(uTm`$;w!r!Ar=aB+U_%J=FA1bM0sJSD<{xBo+}_b2a3hPRjjEB{JAHBOMF_|fPb!ztI< z&=2%btT66zTTEIL%EU9t%ini%J)NV|qCFD?`542fXgYGobTPN9rb`^}ZIl&zyT-PM zY4KqE-FQs?rFK)%2RvRcETsR-LQ5hwg6eYN6SSix(HO z+~2y-dls7?_@ve1YDslY)z6jqs@s+KGnG#(pCGOxt{`UT97E5-+{@{U>4NKwTZd~w zKfe1x#%0L*MmKg=9Vf6QD=OXc*+nUy3=bMT$=G36%(N0@I5rNYjv2H`H@dX`r- zMmb0Hfc1l{Fz>c?9QJEdQIjJ;Bs5g^6$#6_H+#FIGRs??IR9EobLWIZ=Cor{(J z!0jk4;T@JP<<+PNe4eZ`e}XDkzCm@6-$8y#{;up#{zb(W#h>n9-RjV+P$tw;eKEKv zxIy|RZ=>`rUeCOamO~;x`wDhA_GCW3po|@02idfO%h+MqWh5qB8vc^^8o!64r{bLH zv$Cl*ClKEt&LYkrP9shsPG%7EbLQsE$$2|xUJl6l0R29?drl*&0W}LX8}&)fww$dw zTXM2F>vA^ctk2nya~<^)>POTy)DNg{QI}B{QI}91F=!kL2gl{$khn^86&kuA7F~g! zk9Zp~4*?L15DO6t5bq!yIrbb|jy1=bQ<_tfQ=H={C@?L?FTuZu&n&|)#lMgL0RJw2 z4*eLylxwK^LpR^_2f0Rc8~+Y_J7p{7Gs-sT2E{FW2Xl}pf_;sGFx^1UC^(f|m^ze7 zR84!e6Qsr3}^Y)1~fU!H*R`=SYzXWD$Bf?nB%! zIWnXYsYS2At;F5QAdoqmP&acVNI7yy_09D0^zHPCbh!Y}EZ38zMBYKXBEN;1ikX7xhUtOnjxib?!Bi$#lP;_-s}2cUSUW{Vb~10I zfX_TFS-@pU3A`!NThdd!_OccH@$yc_KD0~fJ;d=eIO?osFY=1!f*zyVBksmgo0QZy z=nnHN`rGu^=&|5Y_%Zl;%13#@$NC}CI_4u+GlhPsKmMqI}EPWO6g(wH`G zLtfHsO4(ET)Nur}kc9sQ{)R-#W%=flmsZ56E7NC^FqD zWAUTA^99y*^k(Hm(YGv4-WBU)E8W(_9&GzVcuwgM?_`!*WMlp3Pi^jYyx&Iy%3vY)dzy}Wd5!TOl4@Yg8TnIC4W4$^)4!IE-@iaRXq z3FpRsm7L@bVJvZ)V>(w@`iZ(kQ^+G~>e63I=kXG%-*^ickJE?rZ^kjQI6oAfZ#eF{ z6uL?mrvtHqc&Xa}Jz1ftsC(iH70P4^{U~Jv6}6F^=-~ms!2D zy`5sa!<@J;z9=4&e=g55_8Wf-WnyopH~AjYTf!ONblG+Ok{CVQ9ABV0saUHxY4jkj zRm>>5Q1lKBi6Q8Sy8c#?eT?g}=aTsk-%Zjlqz@@8DWfUpC>JOliPU6n^4AQt1FWqe_b8m=LB zA)5H@tA|tD=kxPN7i^>5EcjJ}RNvR|$@ethXe3o@Yc2;${TH_1QQ zzt6wl9}YwUp9OXVs{GY{C=To2P3(nUt@|0hDt$WH&)PF%5!##VvEm!ffwV!i(XKu! zv3rl|lILgPUhhTox8~n{LFOOI>56H}2g-W!@9a;M(-b?z)ttL3v+A;BAa}C#Z57)$ zS58yhQ0!6sDv+_FlJ3~)%HNcqD(|T*s=liEsxMVPE520h61U@gls=3(imCE}va|f| zRsO1is>~xI3h_wSC)G2BBCSQ zC>|s3{)ClY**|l>^W>_Y&Wb6BgafDa?sBf`RGy3O2dbS05-FjIV63j@NQv*_64=Z$ie-D zHRMiVjPoEA?dj!(6RNk+KBbM;f19A7`X;|Md}$a(x{*F4(6S8q@8=I7HsiwX#f0}m^+J5K5_t^uO?a(kA8D&_H%k&dke|h?2`-V? zx|u#Sqx?jqWnY!$<^5!xX64ytvq#uyv`4}VN|*R5d#Ms@5d?O}FU9!@M*=4PB6P^+ zwjU%24L@SmM+XpAh3$q5{tE=Nb{nDA@TvVx65Jsx8d|imFzuM)IPKUQMU!)jCkJ|j zF9mLg5s|*drlQY_UM(D2c(m}1!VAS5Qbt!YqvVH@S>i67$8jC0zMvB!Mi4Tls=tpt ziCvB+ORZ5;`m%T>=afn+fpd?f*OWHSqmRUDb5oG+AvpjjGoZ{pox)A zkcUg!F$%e3!ewE0?1==!8^u`R4EeRO3Ak-IgR5Nnx!R|Bg-6%)O&^q=$?#IDaf2viJG%=sd$2*ZI&-^hit__qmnj%iMg=3es5B?cA=>nbGYeND7uy-WNnyl8@ul%!2xADR@M-x$`F6&=(D2yobk_F{9mbd& ze%&Y00+~`UH--;qx{_{_M#Kl=FJp@QTS&j-_u_Gc_cW&!>lL-hJ(V4*zr>xx9l~9~ zUB`WcyNz2&!(s-CdW%No4c2esdzgdtbH8`@Pr)fu?{UwyDki&@2VGpm`O!fxlUO#VXcNPW*m_I*fgp-!Xbo90jr#y->^N!LhZ{8AUiw~{)8 zI-OdgG%6#?M(t*8l`^L6sEli?wM|ts2u?y1p_Y&&j3c0wA0U?_srdOYCO)W~iCT_W zfrw=|@6lhy5691{o>|?#rd>^U^RSXcN+SWkGE*q1&~|3#p_idnUiysGH8 zq6K6r?u_IfwikD-cYX2xym!gf6cpw|^g#47bR+t1{z~*9^m23)`d&VQv^FH5eI2h# z=*s6uKZ-NMtI#XZ_w)B-wjlcFe3Ww*)d`b<;i@HL5%iqTt)ohITW41Fu3B0(scL@J zLw8Gs6(him%Dq&GRa*7fuabFYB(ItR1A?p*^X6 zFQe_Od(6u+SBA<%RiTPdIwVbQs(CfIr(#>hCl#Mo^fH-H%Mv3Z{Sm{1o#@+Xb!9!v zRY0Si4_)2P%aWZX5Exo^M1EZXaAz?BtFI7po|I5 zF&2uAoCo5$oNFqVg1Q@ z>t#8DD~eAQ+s(bjf3oM5ZjlV-KJxzQtu7y$zKcF!iC90j`fZDCF3YdBzIK7*1IJBA zLGc^KpOv6Wn@dlWI-O^o?Ocyt_3l0HQqOKrwRfj?fcc{DD@)Y6*&47dvAHb|Z2j!t z*oBT|j$00O@teiy(jlcMOEWI#IcIy<6IU{u_i$^|

)gx=hRKHgJYW1Az6L?=iEdN|VL4g5*DKjBv3dqcqYzcqA zOeSFSW(g?FwCr8}0a>146-9nZ9Wsc5v%!}73P z>`}kpe@32}gc$Gnj+tT6*u$89Zia8Msw@Sbb)E{d$(CkRnKZ` zWoKHVrc+hCrfXGgRcUqCP;F>XXhHed@>7DN%=to@unVhE__=Tc%O@JEoGbc`bxl^3 zcgOlF8z%Z*84w?5uTqW^pu}&BwVdnX$()NBl}2)oBUSB_v~Y3KYurxKQr;2i`@D84 zBA+ko!k?(3$v3JF@jJ>-%iohd=3i25Ra6S5RU)~45ns{@v zv|#v{VV*95MA^7tPX49}gppT$*6_LEHRCNqMRJPqN8{D>p4>fx?My}fy!_MR8b$6$t+H$sE@ug%^|?Fph1T`- z$)ZavUS4;d50j7i&iba6X&cBMVmpd179U_EEIZ=obT2oG8LM>O68b1CRzD=ZnmdmbV{^)VrVW-KFTm6n$Ar|ZkaCRcG1l9bc$oW17vn@ zm)Iv^YTTcRFOEm#U&yyGYJ6W9Z-ts;Z>1OdKlVMM&j^q6&5-@fpBY1ihs0mOpTWrd zKr_SG&L}sY(mmGwsN1cZT46HcjdP9K>Sp6FMw;W8ir*EhICsS}IJZ>uP# zmc9(5pa&SC4pN7b3fgszo#~9P?~wtUc3b^chQ&nOY}sfr>CzB`Ujf4hcB9* znEs9aBOhy|8lQSQ($)rRXrA)blBL|+Qpo-Fy;ruj;?3%g!95xDZ@8YJx=?+nSEzSr zci=d3N{s}eMkt^Q;XhCt5oW~wAUD_^*AAz4-5}Yj2}oXWZeS~XFT6fBD=e+JO0HI^oxU|N3a%4vUGRL>#j19+QOYaI&y_2b=T#zAm1?|dol35|pxCUi zAkD}+T;_YpN^ZU4`-<7sx2r}mC)8jAn@LluI#eyL8dn9Xnp29(8DA*S3QkWB)=ESRQVXx{8eWpH1 z`c%@HF_QawI1v`b@}u1F~%2x5y(M1N0`)cSmJuh7mv&3h(jpbO+E1p%Pg{oh3`$ZQ= z2PCZWrKz_JuSWN)DkGCTMdo#>A(}~=4^#I&z2YkG1ld4u2Ibou{++^)C*y14w+Z73 zXYsquOXWJnZpJ`ghcr3;F!Wk%L%PNPwx8z5FcyYIy7zs@WJQAaW1Mgg(tQ#`Hzuz0 z|B(8G^ay_dPbBQsJWw1`oYP_TKkN4DB3gBgnPp*FSp@EJvIPEmwG<|T31F(4!WuKI zx<-_N_lcnq%9@YhyWqL%&G0YapTKuj&Cai!Vb?8Jd-ry?-m}S*@MgUo%tw5?Ev44A))L#>HlyVyTdn=Do#p7} zSmOA}kykvfI90Nx1XkKmdZg6m{Ms3F-F09r*$kE+ZC&hN+nJ88j>V229kSv~ak3;^^0Z_?>ETkV^N=&@y5s8L z-r+WSHhWUud)}?yPUd62%pQx&y58!vy<;<5ZrHlnkJ>qo9**}MHyn!M*NV$awv`}C zn@W$BI-EzG3D$>SX$*YIS)8PuA8oQ?oZu1&qhz&dpG0V?0v<2*tZM%4dH65 z!v<`6%QahP`yo5SQR`UbxaN=+k1bA=Y%Y0H(!ccUQj7DTGvd1Kdd2;j+u-@wlk{%! zb~GRLeQ9x9H&|V^1vZQ2XIppsF+11M)3Ma?vqM=tzPO^~laid$fu+Ywi=9WEN!PEg zF7DlKt7n@hQ|aCA?P@;h8)u56&WbA8X9eFd1EO)tw?%)jev;|(?pepP5u$6#)k?qM z6ayoksQ6j@Cg-xMNOFObr}~LoD|PW+QIYu~Sy%pK6+`~9>M*~v{G9v)*;9U~pse5s zxv!$1Vl3@9>K5XC>cV7y#dz;)M5>`aH7fO9`Olf;FybEES=>R~W!z7=A{Pfzn{pWo`R+_u%*PdF=Ff4I84Kl9X^&-wz^V#^&{FZ)SnrR$-qhkJ*o zm-(D;pT%eO+U%BFwmQ42cw+H4&T`l9u5RvP&vs9p`HU}UEwS9S^|qgKR=FOzdb)Rd zdYjMt7AF@a!&ax|zHM^x8E1{_^Ngpz`CH!^!Exqxi(h25&J+F4`cbCMyKDW>YO%e> zo@IlJe1emVLJL}a)%J>gzn$vn=$P-g>JS!>ERK|HD0x^iU##QwF1;asgHtFu&pA-q z)oF14$jx!>a|T^qq)r}*FO=2te|A;7x4DZvboqME*Zin=lQ*B(&YbBaKPx}vdtdg1 zf1n~(a87W785F&$oG*IFx-Qe_-M7BZ&Jq2nT%!yKPBXCLNs3>@Z*i`uw32T*a@BQi zSE-x#0k4CK!WYZB@!wD}<(pMU_+8}Z<;!F+!8lrq_B*wAYGf)+OVE6|$othgfsGXXq+F{E3eGTa;>n7e;whY~ zDxKsaN1?jG?I!i`mhn2OsC)yMD+@Qv_Ia0VgNiuo_q`Y%6LZdI&6v_u$?5 z5I%;F;8&N2@nP7S@*?~hc!Q}J6@^7$X!x7(x8QHUUx!bCPl8W|7vlTD`iIcy?q0xSvZ z1MdQ>fc1rA@N767{z3V8SS9|eie?z2FoNh0ufpHfrto+i88;lZz8nKz4POIa4_^si z1z!ta2j{{uI0DXxoQ1!E!QzNGKXNwyXABNU!Ud3X@M%m9W+whRW&olYp~e^BNrMqh zh(^Rf#2`ciA_p8km2`tkgHcrA8HOT&K0{E$T2q4o#a!adb|I_3L;wt1&B}_Vpa2{k znTA3F$z)UuSTY6014kyKP}z^hqo%;KmnNY2fAOgtwE#FhB_jbulzk-J!A7Am_#hHr+XKc^acMdLq|K_1AP33|ZM zw2)4Lbo)FHcrhA5_B>7l$6(u9WeRw}n0BQy0KFMn1Zw-R3}9WZh6Iv*SUAunS2G7p zB5TP&Mbj`rOZ!q3=-3J+b zv5R?asF+{#4g#JAM>|P4;Hw~1*_xT9B;ZN0xL|RLH8i`VOtT&ib~6aMAU%YI0t>?$ zGK4pLJBSXRq$FEG2 zcdd}lJ%`0)k0vxM1nz%SSv9Cz!{GYHK?DA#L!<4OnmN~?M$;4B|HXbb?1uHJpk;5T zG!00=xTcf?zp_FFTBWTgkp=~Zoxw7)Bd2NdY0pjHoij8n+TYWw z4jNb0ty2~pwlcZdjY~8uF@)zvT{f{ovmZ(Q-$4P6uGBEI%+;Czg7DlZXd{E~Zs0he z(<}`R+*+f-fS(UmGP5mfHCZ_RALVED>os5JWa%GkK16^Gr%}x8rmW^|(z6~&E@3ek zg9n;MdPCN;N7HXIuUG#%&wmg4XA=UN;1nE#2|Sg`k=eXtp*rumO28dAG}7z?3)h18 z`?yS?o-5{n+kISUaCH=2lKpdF;Sfglt%-#bsMH?Kjf0>H{?-c^x4)1Lj?71+z$SNl z8yEr#Wk52|MFoU-3}opx+c-xKcqX@^^_{YMxJHr=GMCz zpk_fK1N6f&L?FGWkPgOvM9+JcYO&G;VBAuOdnrlg{hdN)cPuXKRty=+zfG>bJXe?-#^tXisaN`G;>Yr@(z_*24bEv+$hMt2>0e@XXbKRi+eHuXe zW(Ovqjx<8%^b$1V8lOlAV4R;$0jF#^h1r!?3ZXkz|MzLP8M*Aa?+dj%pRZr^VUZYU zmla{NRQZ1eYcA7M_tX`|NDwr=c=s@r9Bn3yF zNbq3vaa>Uw=wFt+6(j(cu35-nU8R9}@TGw$}6liMc^bC@Pvh$J8*~@>#TztDz`)5TK&+k;zmdb9QpnZiv z={BILU7zOORgI1PD;xXw0aBz^0FI0i4~E+S^|Y)xJ9dUvO9Th@d+30DagZOR1xg&~ zIv&MBo1krdjX67Gp_Yq(zN447uLs=@iic+}0NtLV z=WMX|qE1bG&f3(0fd_Rq5G`Sv!Ma{@(wu6Hy)6MUn`(`Jr!aFN=kMwfaD{zEEvzeri&&YwCJ7*O4{6g>SyN64me`Y67gudez3Q0WU~ zhPn;-e<+ZhPS>xEJpW|jwR#Cy*IADOq}*;oFuk1~@+Ld$F+jiBX8>o86X@V3be%Zx zwAT|r?F|9}T>6?U0xj*HW#!;@7dIjWPFmNV^0Vat2`fT&3 z`Z-Zl{~lE%n!x3+3_S4U5d{Mt{LE%;#u%!|@_1c?#|O>l^q|J3xf@!P37Q4oo;?BObqqTD=X%5T z8X$1fdV{oc>3d-|FManmFKno9YthV-Txcx^xmZBv87W}h4XPBlTN%;zb%LykZ}cK){>C8< z|7{Dwo%&oRp!dkBU4B?-%w@h{%ThN8q_+kjtF;J)2a#-E0a&*Ph0Z?K8k@wq|Jt|$ zXVTaW+)5a6x&L-=Af76_C~2I>7re;Cm-~Xr)+q!o{uU5|w|ckgX)S@1?bp|Mj!&yj z_wUxwZIHirU5|ckp5tKf>YZE`*vZH90ObuM6?7S1kIzn@Xw<@A1cqOiLGgu;@CD$} zBqQ{~xqpjmLtOkGQtPc5Mm)F`p^-u6El8P{M%SxeTHw~(6fC&(1qBDj?Sd@d)G_tc zmtxZ;cxh`}tuI0FK$ka+FYGGRwg6bSQGv|ve8X7z!VW^(V1fmLprQ>2(r+0bzo?ov zSj(h(BA`yH=YaGCBN^;K;>f@wg8nq~0=2XikW8*uJ;OGhqe0#Q)DobdYSh29z@k8$ z2G)_Fi9dC!G4xW{DsfQrOz!o+Q&U+~^-Bwk-3;)&cz8n0$V()$!G%1E@g+o!4LN-c^Bj_j`|WChEOWo6GT%Xbja4_uy$U*z62 z7J(KQlL|`j8RejBQydAJ-U#x*?W2%vC`$vBQ$}SQWAjbp2Uz?+TS?GX_|}McE?66s zG3NdXmAE}34z+M(oB(uJA$brJJ@;3>;TPmOC@7t+5&pYQ{?Ja7s6V-aYDO#!4RN*hN&FP z>u%zMPPHc9-wYDCPLvk3LX@psLH0?l=@vrx!m!O?C~n-k{{T;|8XmaU15)PAat8rW ze30J*c|c?^uA7Mjrme+cfTV}%9?14E3A6g1rU>nM@8mxYsKvh%kzmPS6DAAMwj^VHwS$xa?&^5p!FJSe=Dz@xJJ zMw>QM5k2|=!=D%ixIMP_vyBZ33X?#@qc0-f8Ni~0ledM>kf6t^Ty?A0gUo(7)%2<= z8~NC@49RNUYy=y6H1_P%(ChDzOC9L;jYR~;s%&^~O~elc#$JemVvC-(Qw+#+tR7qk z`7$q*HSnB*-zH1(|0D~n@8S@Gb7dG>mb1-N&VODXrM+@R**+&s9dpQSTiXB3hC$%y zUV{L%oHn5W^^A!FG93p}fJ@ky57sR;BD452rm1ky^*%}j*4;;uTT^s!`wj}4Bln;q zrkZo6*VrgyTkK=aXehvky=S_nd=_QxdKrt(sWuq17rAEWZ$bZd^uW<~JJZ2bnwpP< zLUkT+yB=l8E^wKT>mk>_p|QEKp%1ux%1#G8N?B~+@#P}H_-*|(KsUgQ%D&TRZp4GL z!BFmt13=);2y+cMJ)Z!*|MDUf?)SWoios1;*GRLTLi(>=J$N^j%K+{-%*1TN8|Gn* z=hZfFiCG5@&LZc5b@R*wAZQ3l+frHgA~QqsoOvuiXx2P$9%rmFD*(~Pge=24GbTIw zGxHtPbDNh|cDCOaW*_<=yVX`?*pg6T_Q(OVnfjdYJ6FumsmEzE78JE((!rziW+HH( zGo!%b8awo{F@yn~&qB?IXbQ~p&4&sKfFNf82T-p-&A%}rmzP~~#XLmwJZJ{VA^`n{ zzJPFp!qsX6q zalo48&~Y9F+E-waA=}2Y;d>%<7SsygKn&+W!7#2Wr}ZF6b98_mw5Tnzww&YG06BKUKHMJ+}^W0wDwubkSHSt&9eZh2I93o){o)C9Kw1WUb#vpzmjGIsrie(ampb zg`p7Y!k9Ptm{tsw5ra%?Luv{w{AcK@6y%Pz^<@J_Ab8f`qm-}|T<9&3w-$O@Xpw{M zx6K$(K@AJr>aIOEK-!ilKR(^k&6K}2=O0xwKU+LixR%t7h>O--H;FT9%vL^ z?;_M>clNWKod`Y3#4ce9q<0C4U}~XqaJKh7%XSnJIwc(pE{d9T;Mgm4De(MZxsQr8 z*A4iK*s}v&0Fs^PY_Q`Y)P<&pmJ&F)CT>z@3;wj|vCod(2Jgvpf^j_}#O!LMHS%AR z?D83^7(5O(@v;=6b#M-#18A8Zw^V`z@2arS{8vG1;8u#&4{9k^G(eodu)rv)6}Opc z?FHu#>IE$yW&OML8tkbYR@cd{g2-Sj^#YX%l_oC9>zWI&i%~-(?l{0&_}H} zP&-p*ewLapl0j$V_xR9TbCVE*oMEA%7*G>*G}T%uDZ{e4{laL*>MdN$QJY`N!qyCpR24oJgW8he-OBH1T6xwB;+j8`2!ol zq(2pP*&DUiFFOifcr^1Ym;mjlYJbD>z!`|PRdnwgQg%}|+4P=lIs`}og!BR=1d{A- z=uMJ<$0{q{Zo1M8g3I4wS z^W@31_s*Gq=A1KU&O5i@7+SjKgJIh}bQV1$qWTlVe8?0TYoLyd5iSiYvG=imH4NJ< zFnz-tv7WT(=kTkkZI&69>@7hMIjk{%Usx*Nxlzl{1`jH|At-@bZwks2#BOBih)-kh z%v2K-F^K&#QH@XOV3nl)*_aIR%ca3wIz)Z4jg0G}*o!YDQ%9ALyRxBU*q^Q%$;sPZ zknZhHn_4Yd)H*WOi#n?!Gt^(+#$_ICH4PAtM~$gYi~;UszW{cze{S-km*!-^i+y8Iv{Gcd)H&# zqn=@$SOM{quG#}VRv@LZa?Ub+UG<5dr;@fcBg&xRI#FqMi=`j0eR^eNGOteA{cy%f zH!8l<80^B%wW#_|W1Mo^V;LX%yN{@;T`_vmwK$P#{bUF>yVd@F7_W`1{nBZTl3}C= zSNnOAR|iJ!{ZAkpSUOeC=N9w*fHe3fqB?>{f(iN z^F{_@#^ySHwc?k8caJ;MBlvnRUHuLS(NZ%-4|FjoneSx0=X3=JI}a%NV3KhNS#FE! zOA)t41=7GY97WuFS5$y<=b?;HCmK4?7)Zz7%V?xa?`1$Jj>`z6hYzEQw?oT<$+8m5 z0FMLc(Zd*}?f%FRNYheqFmZQ{d!lmga0a&IgY6c7s{AMeXB3sN@hl(f znOG_OEF;64er+FQcEed>rFAk@e4XLH)u+gp&RvaB&1sGDrRbq${gw998DDG9an`wJ z4%UR(`CiW8{-QYe=`;N(ZS8d)^nHbY0GYQVI_nEJxEgpu$K6Gd^u=2^Ho{{FHE#4a zka?50zk)|sy%UL*2tQFgr8Ro_2?tV?e1rqZL}vF)xTiYe{i&)w-lZWd6F#Mw2>25V zLjx!+0d29YDobFQd?|H+0kU=g#)&;D1qqpEtz(H*=x{70QpbQy7(}<0C8>Ga(gWfY zynD@$K3)#t-EP56P-lsyeYc#CQr5Pbrl$g#?G6j zk)<5$d&h2brt;pn%&i7z=A$`y$$-OgcNnJyUkr3Hj+?zy_1*0G-GD8^jX}`Dko{c_ zoplpS1E^Usd-RqAiDA?+eSk?8Qh0KhzbagNso~(%ykLr&hZ;mRwDje&B;}52nPW{} zT1!q1=xU9_N;1v`aqVwGS?&16HA1n>&HU8eefH92wG$?eglU?7F(sU;JVFf0 zuQy~)U_x4Kuz6gFy)o0Mls08fh@}&6nV?yJ%J-(Py;cU$*?ma4`?X9{ur?DmA%Rp? z@9RnHUx2rwZikmASxZ(%k?mg|Udp-8GhMo3-{6&jW9-{ZGmZYtXi4IJmL;R%3;yTEX}4Y zH}Z*s)0CB<;PI4)F#IH0ZHpyarDzMu+7_kJVAUtgaWr5^mWMKLSk^u_W`M@ibA_ua z=$5>!jnvv|c2ffLv)*=*8x{CbqLq(FWNmcv)L72MUeo%bEN|NVYB^*;VV03rERVqI z-Dfh=(n+f<>aP{@Rv%d7z&cV^iS&_`nn50I<2chj9&eUEO&Z-Y9I{7mG~89G{nQG!>`(v z80V(%R)z3K1&=?vNrRf_ZJU{8RHm)VN^=+E%HKELjr>R6uq092-B}*A%4m&Kf4x#0 z36C~Qz2*ZjNvF|@aB)V0N0mfbv_5NfxwdEN$Fid7@3WqP}Z1M4?ohGjs_1$~UP;AL$^;I96ZdwyeW)p~`R;;n8?;; zR8V&dmfFt8tO(kyK-6FVt!v__(=Qw9#v2vzcV&-Tqxmnz7L@I+wI7ti(CkKY$PKf{ z&t6!&pnBpG`)~F0qxGMOH=870Y7rAGy51qR` z+n^NOmOTr4;5lS^duDVnovV&cqpFvp4T|N#>?dx~NEpBkV$!7emGPuqNQ27CxeIG6 zd%+tdd5UE`pJNTc3wK!%qJn`_{SORo(C|`@Nk@1z7{@-ytqk^A)1R7@|PAIU&cj&p*Qj7EiatQfGV);>!Nx9{&FW7r@C~E4HtWyl|`> zb;n}J4tJ*$+2NTD-vPPM_-(Sg(%LuYVxo2@0IUTTTSbnSuh0W9PFT%#2cw*2#%%LI|c6^lW+qCaD!qeGTdGeKnuQ&N6(f9`7l^P ziqbhbr?2JzgcVTpL$N;Oy)ws}w%rxsMQP31DC9}FrcSQFyH?ZKU}|j(@g&pA9N3I+A%YLRV2}RF*%dkK0{;o3pw`&*EzSvRtwCPUZ|;F~{#*BF zDSu>t?BE`Nh{8KJN-c|o5jr~3NR2n=$ajIX`!%%j=6f(ei#**!sks7l_~lF9p6)2X z3K!nFk^L<+w;~9E(qn_hk@@yOY}z*G_|ot8pfuW04Au7N38FO<6;%-Mtw!uLb7>W&*jl>BWuE4#rgVsVp@yC;s~a@@61_zY)3^&QS|Xd*?k z^GweIPj1?0!RfNCf3(OPMD~4_@w8zsP!r8d+&q=qM{_1>5g4710osy39)Om5pEw+4 z#sR_N_ibXLiqAl5JZ*X`CshJ66uj&2%K#QW6m_dHhzhE+y~rmJW0dxKPG1`HB6zCJ z6Lw_tE!n^bO#v!u|G#lkYkCRYUHk8`INkoy;Gy8r&rQkNm-BO%JiPleR|I2z=IVj{ zWKLu-hh@-EpG0qZ=42p7;trsTnob5LQRhcE)V7?+@lf9TA}6;Cv~lr7&U~YgjNq}; zn39J+hySHKAlHMUPorO#C%{JUoDk!qJbOAPDM%w251!45a8sQJRFU8kN}mi3j8xA3 zom1`ZrkZ;EwNmbu`?_mS1V^)bE>yl(t_y|k#Ms!EM|dfCd{PhS;8Yf$Twn~ocMn43 z6!@1vHoIZ9U;!9ux2Jm)9T*3O+?{4LDwRIDpE3zLat~;vE;f_=?>&-{xcV7oLeF8 zT6Ro?3+|&p6Lo~Z<(hIS*Qoeh%IzPZwkhjggy;x=!vY&+le2+Nk8ug1*2jW^=*2~VuACX;l0@xeT)_IP{ay8#7&Dnx z`$s74i}DTzDXq8Xx%yoJ6I1WvXQJaX1Fxn7qXG@eWy+gi{6_>#I31oC1+Cy70Hetq z6;5k+;FJfy;Ita*hwxA^vch?>0n0R&o=eVOM& zp=T!tDEQUb9T1bL00vX)^1tC;((Wk?B##W|0hAVt(JFRMxCb$skOCJk#hWPYT>NVk zaV|cUQobJ0R|)?y?}$^+WmMRR{o1_eU{p4q%X5F}eBNtEwT)kJ(u_E=SG;jtpXd{y zbhhSC=u00wR}ewJf8YVB@_~m3y?MYdjrJYz^Hy5E&;K;_e*(`?jCTQ|U~h+^5BQ9c zDsRKC()#N_fQU!6H~5I8ICCzlkWQY11FiN+{}k%DqW~zHI|@9g^O}?- z1&>wHm}-Y0V(^<83P3uuoOK5h>@@+9vrzGQrXa*kqyBgb$Jn5;fy6O3{1-4bV_64a zj_i${$bNa#&n+=cWLO`UuQWYZkm>P{2%L4F#jd2z{lMOw*jErm18b)HQOD*K6U`W( zI+*_2oH9T`Dx6-u;ByQrK4&m(E{*f2{qGc*XvZTdS&WZNO6|J^g}S5SQ%Brq5}-O0 z;abM%w2bn{_W0w1)A~W@ROdV0m-RN@NSvfB`lO&Un}F2uQ=axKO!lHL2Ne2IQ&gb~ z4aoKnQZ7anzA>Mnd9N#sg1P1jt#N6kzZ>0H2nX!tM{e|?U7tW0rK~UfNEeh{{cvHj zfbaBE(zX?Pj`;t9?TJ~!AWL&0OH znI0{6wkQKLhi{It^tvGe;KPBEq3Uy#G5`_Sal~gzv^iq+ba+d9Tny@>ReO>1y&D{8&P2fU~H^;n9_0G z@Ib3pa>krCCs4{qo^C2gr{KBaew6x=X9m@pVTqr3)3YyiT0Q&#G4L*;rZb+Q>LYv~ z8B}&|HB4$RFN8vYL|Lm0pJ`Tr)N#(^ART`J(&_3P!n`>4e*e2-@{!pJb)oZNw@6F2K%UJys{20MkiOz6u-h#6Mtl_N>QYTibPr zP0v3N*pE^U1p3mC--ajhUswVo4p;Pw-y!9jktWJtG6JWWi}A1XNFe~gpTe!%@iD5&IwQ@VO8(*z6Mc*hv=3FJyM!AYz#Inep&98e-kx1=80&aHhs`H`nmWE5mlk_YK#e zK3!lPfoEYa!;q^xQpkaKVdH#?pf@6y4scWbra6c@ zZX4l6K;2YR)7DT=vOgRUsnp&!Vu}ReAifqOsT{mx#MBIp$N}J{fLe3h0yU>K0M`tr zru`!#39y??gj!huW1BE5m;H)Sj;}adOttThh*S<79ue&)!#8*_ZI4Dq(xY!$ zX3!U{0olYKcP)+_MOEv4rm=r9RQI7*2KyCEdA8UobZ?zyGBuhF+0;6~D}rkG2VjR; zW|&IR`vWG>s{OH($i8jXFe>;O4Q&2uge#q2oSvcJ@sVHw^1&hJvj&7IzUSeleDT)^ z;17WG38WV1kr;>b;Ly(4v^sl{R}VE=-9 zhwE?xZ^Fkx-08AMd>*v}!b6Fk@jgo1=Oe?Tw34;*I^PINz0TLDocV2JakO90aCIv9 zAr^7);U0+j%}Ml7YJ-br_6lVI9o*wPJQ6q^)gSW#j~{>pYdm7=6&}MgNa)Vm(4sL{ zs6T@KN5Bp*5`Z0O)4K;HT%k0}6#+ZQK87rDMFIEY80W~}v9K5Lpj3qy#a^k);R?_@ zBd?fB613BLs|i@9JLkk*p;_T@Ndm9K$(oP*_2YGukEc)K6*K7YI%YNN&JBZl#XX^K z;RNK)Q&%iaqI9_X?2x6%k7_MNaR2P`GSH^iBXHpXhJ)H)!}hmwjt|^%x0*s&tx@#I z9G_lsNW4}Du7|Ev^_74;JU4(m7PV_v0`hRO28QNg7#;{;fpc)%93PI^`9H~0|A`{wpAwC9 zCFG7{)Qof`_>QEw`;vFe74bom?29;`!T;PChU@ufis)eT|IwlM^US@1%Vax1VW8HV z%~}6k6@&U*i9*RqF8ViIDqSca?8VP{`A~UQk(q2&uDJ}`GnlMT0H}sXR}Iw1-0qLN zFs=rcp**|jbh*Y1SiHeEQ)2-*y=6d{H^cWV$V1Gz`JSQ>7PJwm{zANlFSW!P2B^TF z&NmIPk;8E^e7^2FP8>xuCfo$<$2#>ff?Aq9;fi??zS#5U25}NZrr&xUAUyXJMNspt z*Fj3HFN&qA<)!Y_bbb&5KGqk#Y|w_8@+LV@L;hs>B|K6^3~dUEOLicJhOt$UlgiDZ!K!m#B}g79Wfn#1hA05Vt%Bkf+=RP^#U3Pop;04 zKtq4*fn)K@BEU^=N2~?=r8Iw8)ELwq@RRlu?whLnqsX;8>c^2_l+Yhs zJrL!gfcSkAgZaczjiGoF1NXp}Qw(qPjHeOu$`iixipirYV{xcRMF87rLxR$3ERJ{n zUqC=#9WsRIK|m(DhoPe~M28mxdjF~-HeN=XN7u)@{Hpsdf++7nLTkJ|VGwhIM zGdz316S+4$158oDS}%i=7h8P2v*B7;?aYEIFuMjSO$o){XwPYBao^%t0)PlgYO^;S zwe{W}%Cr57H~Q)EM6et^df>_s)t`VOJ8p>z8wjXA|14NxAKTm19? zjVFrwXABS>on-L85-3RkiT;;DlzSHyKgT>zA|eF_UA&UFvG}bX;Gy(Ak+I6<&Be}r zD1VrTk*Z?nVX%*5#BIOf&|=5^#Y@7R5X1U{b3E10n&(Sxi(L$~d$n^YUGfFch(8{8 z^+3Suhc1Xff66me{4yiVa~=*$^1QMYYjg4A$*N1=0V|?)yNvzl=BQCYbnaMjFg>%& z7@=5?7k||EAE8F{++@V=rC#TnL{)QL4T{}mRL;=e@J8klzKBf78s$w*KZFmWwE+n?}gX-KydE!#CQ9kU^M}m+j>eT=*WohxKAI&{+NQt!Z zLTF!FeF3p)7WT{QLZ~-Qo8|C^`%E77d7yS`j*juYy5WBKW}E-*;fo)xH2+;s$WuHi z)9G6^uQ#vQ`x>C8om${F6_Gy?nc@FT7ZLK zmcSkx>Val-JSD1R3mzI}#N97L)C2{O0eW;(SHXw&H}B}fJ+n=Fw*eiJ0*Ls1YT;W!__uV9(4|(mY+ts(*y=a zs=o!urF*v^#?t{`GBkYU%wL5zFjP~^*Up{{yfjcLa4i|_Mh|`MWumA(@M1pd3AobV zn@hSL&nzW-bZRlswIh zah8*};5hJ9^0CcaV&L#9{X2h60i48vwCb9z)%X&krhPjL;jn!_5KNSI#N?tZ_bssp zsuIwFzH+1Hy*SIA^tlnZiua6u%K5~SCE=O{ziy51AS@SQ$81*IlW9suAY}2w9%c%2 zGV}!tyP1{4!%GGmwQglbsazUU@~8HCCjRpL#F85cNUMXL7_VIiBM}jJFw##se6Hjv zHx1Hi>@@#8YW%IlldhQtcva10e}vew$4kGIJg!Aw-Sj)AFy}W+9DrA@42Q*TW%N&H z|8RBN6#rZ*ivYk0nPCw9hH=lI<{w2zrXh5=^S2V2gQw0_cK%*sb{CkfK;?wf=n*<` zQV}^CE(Q0|9*V_d^nbhHT1^i}10HD_jf)+UjL8hH1!wkqZhkb?jvE_pxwa%iY4jf5 z^nc^EsA{0mgBFKG&!?1}a)YwlJo*b=^jKlo=s0D4*yyubpq7G0ZSfTP4F>QjW4O}M zcXUU%jBDgrD9d+{b1frBAM(&z#%hvnG@$YJ(XPrS+vuqt(hJ8^JC8>8qf!R@XkK9Q zR{BjHeb%!ZObQmg1qTmb&NtL3b#q1+&Hi6tQh(lx11tCUMyLNTSSbhb5C)i9My(&X z$5LBKG`!NoqJ60G0|djg9g9k%%BNwaRn~iCymWYUQ+f_;wB8|AU0(Bl0#;GQlAMqz zNg+?=d3e$U=8)wy@sj4s_$f}QJa}nzj`RNkm@?5vPGd%}c-0hTK%X%)7iiYy!MVOE zI;>Q(vT@OvJfjTl1Xijah2I#D?H0ubP(*xe8qJtEEJA%u4UUMyr43`uwEuKG08aR& z?7eZ!2pIy(^FQ*21?zh!Tyz80jhT^1bx$XFQ{K~nPqjWdW;usgxl!v1Y)1D#HO8Qf zd3ww(F2Gs2Hmr{_D4*;cQ<2OORuucW>k!@|_^7CjwlDz}n>1f_!h4|mER1JFfnDFnlT zD330bQ`!@_)8v^bj|h5Sf$D$smr|Z;q_Rn+OGRE!I`_JZAK7jW@}v`1zky2h%Zg6Gi= z(?En^oY=E$fckiHpQ}-^&nT@ONbA>^{?A~kD5^SJW+dgYxP`R)u{bZ9=H_Oh%dT$8 z?4Osi;oj1BoH-7PKKvDcL=W%qjAQ@&m2LNz`glng z6^+_e>O&`+;5fLq8kno*JYxX;xC#ML{8z;BStbsrVvoMGsm^^cRXtJWK_{9@4NB$q z(oQYJ3MhbJrQ?ax5O=!ckuozKON)ezN&}+!(9;OZZh0D4f|<7@6e-U%m+p+!ENWn_ z5Lx_nsjn{Dvv9q8f6DoAIj&@F0SvC{qf%D|XsfesT5ZdT&M*K~>p7Djwfq>PxlT-2If3UzT(yQwTOg8>uq{v52jqWz%SHXc@;#X%f02r~DP4urgeJ{?)W7mti_-Ve6Xy>O9NzT zoCLnu`Ln^OK{GktrI6zn?!$T}K92T36YoRc-5DRRBtKCW?#d8Bh&wKZ=}{Nz?mrAi!m|9he&j;7LouQBRV@fqK%CaOjgH+0X@j(vsj^gs8}G+_mEM2?T1}q6Uuzy1uOabyqu^IzsJ0mu z#pQ_%;}lD^`Q?7-g=ZSoj4bz53PzSM@fId@5DQQQ_m9J6j{rIWh#?+_ml%WxxpJOaN3*y zGSGW3yN^+3+)zHq=Z1g3A_99yE;)|7AZ6rr6cxR4G23Zxw2*+E>KTKnE#Dod5pV!WS*Uh} zn~#)o05yg4SIU}S%I9iKWuB1sce$As-54K1{MTdgz*z8KtH|-|p5O?$?)Su+DdJlQ zA@)o8{8IT6DFS&(bsym9%kZWJ<}!XMtBuxCleGMI^al8ktkqUehKIUZK%v6PeBRqj zNv*QJI!sGmc#Cf$T|5Jb>w(9t2rszb>ZJgUw2=iA3jZp~Oi%zOD%C}sRzC@Jkq1Lm zwblFjDwe0Lo)KYJ!VDEmRbu{Qy~jJW7nl$Suylci9{a$W9;kU7oP0^!>)RZ1rqIsWM`?+NdP8&LG5MmrFLMZ%0tB-R++ZW2f53N5qbtP?% z38D4ROh?T7$5t0tq*lI2t3Cn3>iUnZr!+LzebSYA#V6JKtdp7zhJ_v=zbX-^*0l@>y~ z&(BixtUGRfT;vH|sWxlM7uG7r%ZmR@3#EdBuF8M>!g`-0g*Q0=lNtV=tpBU7y6P(9 zRW5X7qw7*iJ!y^5ksZIhQmt?8N$cB=lnb|2h0=mgs{Pzq0gs~q4_f!N_0_KQ%@Bv@ zKA#rAQzMUL2l` zdu`5%Qs`jm3Y_6>nC$1pMsfkj{I7DkimJ!QT}x**bd2%%AQgiofC|rBr*}1kFwbhz zawG+^BpifABu}K0PFYXPl(GGJ6$u~;VpUX($PT1$i)`_ZaxPTOQ%Ni!3GN~Zp_B`< zl!NarQ>!WmNeIRK7Z*hB7y)d>`68QO8#Fb9qA!hAr>q2&p^S2dqaNR%Z|Kh%ZwQjY zFev6Hf(Fue|J79EF;k^T14Xz>kw`!M0%2MElhxl*(4Ir%)YhbcEQ0p`WF6^9I=W-7 z+LvS`MY6s$mAORIH9uRU93&OD*h1*?yb86M8K8@zgTGh-MgQ5F;2=8KG)1jqFw&#d zbaPQQ?jibBa5L=;>eFm)TBX3ieX9cHb&u7K+RG3?osWpvd`NG*YxL1 zH<0%H45s5$-~DQhaTK-gw+U)d{ZUk$C<=SQpRI_ikFfvocU+bS7;#yCg^@1*WfjB4rQ!Mgc6Cf< zBEvv6!!&BWeXM9PV=2A@8B3+m<-fa)s%=cya3vx=mCj#;nqKc>!vzk`Ho>xx3Th#_ zAWCCI;~iaM48Y4Dh@^Cu6y6YN7aC2+WP|9!Wor(#vn_zmuM2Rag-*70Y|CpZvfexAQ{>p2!K0eQ-D{)SXrD-9OST) zaAVse0X{vu%@4+V$;XGK14GnNbe9hVtyIsnSdG30kf;i79t0>M9uR3~*|BH^s~pJa4%LWHyy7 zlpY!`nW^5kY{}BuR596>=wK$^G#y7zq6%Mdbee0Dk=mdM z9hB?By3CU(6o~tdd~HJE}-|5v(6Ta z4{I=E>uG9(slx6YKrI?7F_fH?iHGT3q?=#P2&VV`7$=5-X>Gp5nAW}qcdFSUXy@+4 zK-%Xorjc!*e(~>W-TR=M!RWrea_cKudMM%U2vHAjl1?^O(e^+oS(wV;)5en|v;w9gV@jOzL{ixHJ++NxH=R?W4j=2Ty(Q=f;h zYHFW=;N0C`YB47Gd6SqOI9sJ1K%+urlXQz~j-#}b?l!&6DyD-EG@Fj=$P{YJ(KHHo zCu90~ZEX6lM_KLtv7>r8R1RU!g*q2x=cgv&&c!fWoTIeGg)`I{%|b!*XknPm?nu&^ zX!DVIXTM}1Z#IaTW_w+1H}9`hjX)bpSU_vSZF3wY=uC)(6d7R?CdAP-Mrx%-Ga=xO&y!s; z%Qef!k>|A_?@hEbMrur^sCW`nR4XVl);8QRb%lef)%nRp(n^f}!zqb_$bR!=*lr6Y z*E=jh&Wp?vTm{lcV-kZXJ5G)oD~#8}3R?}!Loyj3P@OPaL*enZ3`aY3t-qNz#LLz@ z>gFZ0y4TXhc*#Gfj?YqiP>7^DG^;Hx5w}%d4c)mrLG}RCueNOx$kx%t1luA<-At|W zjxn`*3rct$xYrgG~K2mJGI&yco8fyc5MloJr`fVG15gK7n4&!u#4 z7cn5Dnw=)6(`}tL(Bc8I(V`sA2W&}hWa*&|1EmnLr5(?O3ah?luDLDKW0j&61OMXpPZ~N(^8N< zt&)wT4J{R7lzIsMXXsRx6#Qbb^X{<4{w&$DrN-pxI)So-rH9d}Y+I~@-+J!QcA_ci zBY<6K`#F%0pI{GOpw4Bs%R&48F-(Y-=|tsxB$#!#TcwSr8M%_E`+c)KedchWQjoC$T!$u)KNunM378l`M@K3#6>oEz*}91-0)Q z8|7$*&I_!7V&Kr^f%NMQ*NB1VleGJ@E?;E}8YA4?Y&FdC$qrp)--&s5*yYHaSI zOt3dSY8MVcUJuh<+~j2Je4vXsnyD1ADs<+03;I?)3=(p|@7GUo4lW zPRIV|Dwl=~xL2m1>VsP(N6FrbQaG2fQF()tTByBPQt9>(Z=$o&8OfnNonB&h&zr<{ z_ixd*65AjLC-Tae$-{TZ%t!S$`p3+??H~66JZ!X-&zw}}mv{%&E`GmHG;5fCBy_y? zEtszy$BSY0sS7G8Y9gy^i7rP5oq>dmJ~qi&Eo`z9(-$#nmz{U z?^8>utxDHz-7fqH9W8@Es0siV z8QJjo^*knE$E8fz^C2ieS*O?#I9-<=M&FIMWjf}S^`4Wk>b?{tmQgs_shc31#p>pC z>7e_ni>_bKdil`nwENd+==p3&C9PvrC$_!;MOqHjP|bDl6=_$BU>&g%POG#r6rC_u zFCTQu<6Am7Ne&#FJU*su^1fq9kve~+Xf!8co1*V&&t%Db%rnSaz&wLLpaso4a37tv zp(!{-lxx>)1m#mp@a?3^;@wO3m0)-!py_Q}+ua z*UJrE%YQ|MhqIHyuUz48w5}2y(lK8(WP|~w+aCPRh{igW5t|mlVSlLk*B*v7tChrj z6m`DHKhc(Tc{nU?tdbL`8^yms@lYNFMGudFZWR9pnJp@*mwlV=Sn(prd@V^~h(7IY zE65wDTfCRl43ShjQ%3YdVP+%Wm$}h+(FiKed0XkYSOzH`EI3Ycvt+(^`P}&jW4`Du}bHc z()sZ{Y4`QgkI#-$d6SEf+Y2@QS&*DZYtG6orA~sG=+Iob-Wa>_@nBwNZ_1x1r7&|4 z@+9UU^kGR6bYvlJ)Q+fFpx<5d{eS*iyQ;jd0lArV;=;o02|ar(Mu*QR8y(*+;(QP% z;)5pL$4KW%_M`HJHhdvyfo-suxTfi9L-SFXKTDtJNa8Kq{Ylq$Z938eFhI4{iM(NA zPI;T!EDO{bTLiK|l`NkYjY#gRn+aZI&9zfh2{sk9L3E+UmQPg+5EpavqC{UExhR?s zB`Z3Zk>BQMp>ASf0@TWhWlmLYlQXAkC-RbxZa+!0vqO+hQ8D*ZM zYdTR9#U}aaV(bBXm5iJjSYx8Q==>?`+HRWxwt!h+25&fXiCbv>QrU3bULc14SSq(T zI)fkwD9bAsHy{hHXOQ>@)Lq0CIjd2Wz zE`lYICE+UN*)qZf!|8Ak?q6<;q2CwU#gQS~6!109js*Ln19h$OA!K?1Q0ldcWCNWy zw4X{gn9S?uOHS81fs<7Vd_k@SNP>Tk8$o>0D(ptumS6^ZxYuC!sqDmd`vX+U+CSn< zG{Gpn1*-pRx80xXj!|@Q1@Ul_!pFbSDj|w0N~Gu3@!pm}8K+ zJS|AOL3PD0M00Rjv05%S;lJTb#QZnuEIpd6Yiy~GLO5gV4gm&{vPN$B9E`|kgfZe^ z3}j6Sj`+^(A1hdeu>xmnc1kvcaZ}@e{DHyK95FJM<%O{A>(wZvxdc~mYYlImwiyZv zd?f+5Jef@Ryv+CtF|9fqWSE1@;)QF=l{+MtqxWik?EECdL6+?W;M@asQpJfu;%#Gt zlnL6H(aC8&g>wvqFDGNdHw$D=o~8`iy-rrDI|#^DEA59bOX%uTIe!o>UT4FHX?;xi zLWw4#gjK@1CZC*cu_aUet#Llox_7>agjkm|RVB!yb)4YFYJTn;E(EyN#hSrWzEhV^kc$<*8KPAhJQ)6Uza)Y9!h zM^N}3atF#Q&`IKvwCxVbhPqW!L~HLt06^-UGWbZhDvQlse}>9^(f;uo$j*Xez_6&5PD#poPOONX$(d)eYi&)U0!{Iv0>FD;Rn=h zFiTY`e2H=dE*uWOM;69b9a$gtcFj*x-S65}b zkhR{H?vSUt(5ER5vbK6DadqbVRBi&?YrwY;Zs``I#%7JTi|N5>j7{nRChg%((fMws zgDlSq=lVK@)4E zq;duKbqgD=WQ7WYNLXpSQf8%9(ZTznd>UWEC)F({?V@?QK+9@IB+LjlHC(N*shP=! zYS&ml0J^&$dFgh)v*_qn-R@Tnvf=Gu{>T)kxj(&YGn4I2DUxF*ExpnojJ{juL#Ki1>G{do|PR+whhjvUSb2FD|x?}uAIyI zed^}yfQAR9C=+U%lQFNyJVy4{&G4a}e-Dun-6D}yhZ|?70uav!pVUn;Wm0YZTrm-v zUQ|4YiQhEE6izK`0r<|Hf_o_4kBk>fjg18_jO~{es)Z#pS}%&;CPf%qw!DFC$F+#F z`r2%qr*;n<)`gYS(7H!ayZ!Ar7uqygJ^az{!E~aiR*-wruAMn<)cCMm+bnd1PbUi< zS=^nnvjS$!`C|)2w{#Nd20@N%KaXJ>*!r=Q;XU=$5|zB84&!yCUYbTs+Vdu`^OvQJ zNXSiLd+>B-dn}{NkBSfw7Jt|H+BDU%^)gbIW1y?�Ju%jW)$0aCBUCBW-Gu`ijYA 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 K_|%y*kNJO73HAX1 delta 1188163 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⁡G4 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 WX9|BraUq4{m8^8Y7B^P|9jt8W7`4dGV8 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 z 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%0AHUB$WA$ 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%0Dp7;!P`5e|SBiu;y?D&(BVl(&j#qx-lao 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 z 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 diff --git a/C3d/Lib/x32/Release/c3d.lib b/C3d/Lib/x32/Release/c3d.lib index cce4a13252f5573f615b8bc180eb8a0ecd373bf3..44cf4ad5fcb0f3784dd58384028da34c89f80c7d 100644 GIT binary patch delta 1406163 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

Lukhf|KN?LvD;B;bo9XXsj4ew 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%0Am}9pzaZr7!Zlz1r3hj}nwJF8QUuFV7k4iTy6k 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

xhX@t`|I&sd*qqwkR#JDYZ5Kui#jidR)xYE+dbN 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 mVn<`3}g>THFhxt-f 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

SI-7A;>PREP?Lfg_h|>)G>0U| zE%-XeMx}}+-9)__`v{Q>aJ{g4u+tyvwtF{&e+IgIB+}~Y)s`mP!&s6uymc4l@JF>F6w7rS1b6jkIQ(u zQCy~7uMr#A)W5BGLrjQdLw$>Hjt>+MchM}(N~Bq1Be5I=C7VLq!;!&eeOslmiSb)X zTL)D1R}9UnuyQCEh=fo6+%^abdnhm3SfQIWXin$WE#c@yd?oTye^WBIyq$q)s#jlLd=L%}#}S@9!7q>u%4{Vn^dSwJ z6z}t&(1$hX0Z&GtjsAt1KB7Z$jvS^KfmIeeHE5)F06yMj8pMWcdz4VdVo-Rh$Kc=y zR}{XY>O;abIx7rr7l90eu=24Rx{ov*t8id@=u_^LcB*gy&oE`0of&;&eX#x8N%r#ARqU|RMYA8XB%BP@U zjIyQ_>&>U>TOgdtaGG4KzJ_PUDeCwPxU*bFJuX~hX`P~D9*lQ5HHMMbTb2&D^2K4SJVeZv*i1YDlO z-1tv;sN~o>gkRI3zGLvE5UU)l_}A-6Pcl>~n0!O~?l;-!gtkN#w)LilI`DZ1T)-Xd z(8}7hAo><~O>r4@+QfAAwnnNvJ;ERSrkST0>ni3rcuiF_AV&BJ`W6J+r@Hi8zCx}i z;aDzy&&@*rs9J(xwps%vEzQ6e0L|k@AZrL246)N2k>xwu_u4F5-JoC8Y;*$J=(_~% z3_0VS@#GTGHk8Y?qS5yVX~+^atWlwL_51WK2&$%rw6(G>N9+fh*o&5Fz0@ZoA+Ha? zYc>wD>THaGsq(V1h>tYr={!RgG&)R6(2q4#e!i=3!&D+V_lfrX+kD0PgoZ!W0Hry& zAQ2o1NAsD6I$z-G-_Q(~P-TBb=d!0Xz=`Fy-a|N=(;D>hwMt}JIF2&}2!dAbuzzze zwHhk>u75?HB~*LZz5;XfMfZdg`kYXWIH51-TQF44HY6w{{3U&F2jSziAt0TQjb6Xf z@Trlw?6!;s8~oQAzG$4C%?nPx(U5!Q8l2kD`&L6G&ok^wQ29>#e$Ku>!qa>Y(esss zvDG?%&}gmS5`hn?2EK!0eRU~ViL!}0c)ug$@*~Y6AiJHh*CtVMxQTZ9e^B_R zEFvxrsvpV2hfWWxZ!a{2&)Hj0fcH?|7t%CYDyjAQninr1j=3pU} z=KKeF>>m)<9X`rb0?!;66L0TcB2J5gqppLhd9zXZYG91f`(LcT&RK?3FT;+N7}Lye zKE@BKGDDj|a$!U!6qYCfDPad!H2i@}t(rsBl~xH5w@oSL$MjF#vqnozxE1ODUo0dq zacyrfX-p}^r+v4dEYlEc5#YrLyx%g}Ia4;w*z7a&HEbzjuZo4*>s?!PYQ!3!2GNXo zbu1iM>RPCO)H}-}q|P>p#jC{AaB9k#;>@>cE3&r!VWt}q+_V9__r{ECZNMZ(opQ4V zuy57?KNxgVMvl!Nf_(FaKk^qvn8G}VMtw?LB~rKo*SY~WeR)J%h#VZ+9MY~=js=<9Ri*XZ zu0k$+8vcly6EWR}jild~Xe_TmaGM73<;jcvA$j)#CO;Nx50sc<-r3XZ-@IRpzxisv z1y|&(ZV7cWF`qT3LsMUfS{Kr!VopSJc(hE}648#1&57O}@Qa1ZWiF!vFbzijNQ2Qo z7E0E*#^~ap%nSAvlzGuM7DwO#@3w`~cg#tlbY5aO!yoT)NlM=u@C zI4T_-jJWbi{+xDgq9>99+f)CtCi-JRI7{_Z)G|KX{Nx<%kYg574IwV`ow@LJ7xP)3 zxOp3jI8S=u6nOfl$%fF_YDz2Xhgu2J3)65TF{mGy1l8*l{fQc=;fOm^fH!bTN4E)p zoZE0e>(fVha*U=S?mDf5J80mpHaMDWShcimji9cVuE*m)BxrC+hQqYTa3Yab;2VK4=2J0iHouT3E2Y{KYY!3^rOl(-{OuW;$8dhHAJcXVeF_92&Trq-PaqYy;8klfHH`5(14= zz<7p|+_weXuni;f{~}uMA*nf@dKkSagDu9SXCd1JY^3gaO%f)YU?vf9m3}^n*4AmW z#zsH|36l_ZauyyQ3c-?sIRA(2JsDZU%-JOvZFS%2O4e;vIK%FE(fBS5VW;i&GYOxz zJ?zyes?vjDHW^gR5G4upM1~6g@b51f5=oZ55He<3=e{ugrkfQdlh>)cZ%SL1DLud9 zWXsCzmJT_!(Rf^2VJy3~HOLk3x!PgkQbecJqYL3c&r&Q_-AP&9>3)|xLVmY*EZhvP zX}T~NA<8oKA$pa$;RB%ZVdXg_9mu38nX)ggS?+e3Di(=kv3}U$=!occFyl?{XviD8 z%s3Pk$MXFZTyvE)^c4dB&Vm6SFi=z$ufFQnb8P{AH(R49@< zNP~0-zpXCg_|ox@ zg86tAp*$iQ^8!>(MP~+UxV};(w0dMxw0a!UK&lZ==`m9Vk3sNI0d9m-k$^D_|6nzy zEx@cA)C}$+BFzPg#T|#?4Sy6>x>9vpaj~US9@hx6HNPRz)9}s2n+)Ti>5a{d zrZ=oqzio%hczl;Wa%bpc1~yck)vPQ0{m>fye{vN3J2{HXSlIf2lBh+p<&SCjaa1fs zJZR466+Ib^4S21K!ehPas4h_bF!nt!PfcaQ#S?Qwi>EOS;JSs*WC9zbock^kD6$&B zs~1O)*z(F;oqeD@F{Vj*V%ZvOm?X#MBp$TLLEIsibC3;>3>InJV@d7@L!*1!psj1G zaY#DZ?M$-)i;}k2AZ~{nC$Z8;+eN{=KFV{t%!2R@<27&!d>EN0H5Q8YVm#`ttr=b6!freFz*uq*)9SI)_9&ZiS{gHgmd4W=5f0m4 z^KTAS&-gciqC#AkA>9^GyUTcwi-I9|po#By@vr0X*IfQ}u0Aq#^>7q`QdDO^^z*KO zihw3fVEwtPqit5pB5s)10QbSSGhOiwghj+AzX20Q!cxo~Ct7ZoCfWi9K~WKwD*I%= zGJvS-jH0ezOQ;~Y`{9^4;>;Lk*bxmyK7OW#I#Yy6djcgcyv@>3CFyOVYSA*^@cE;FnA-XkB zgWmsyYk)3iH5xZx`=0#K)gd-kDdJBHbZARB4W9fZcPI@zv{1trEy9!}Ylq0i zFqG1{T^jW0Q)+ULTHeI10kWSqx&cDT9u072k+V4r?Cb9hMLl~qfvo3U7_U@c10Wy7 z&C-qSLhYxV>zt7`9FhlOD496En?^>o>FPEeZA30Y?8Q2?DIAUQ#`9*2;%PO&r0MF} zA_bpUiHlv|Kg?8VkGq&qMud$At&sT=jZF3P%B0IETHrAm z@+{YDsQed{NmX#OlmJ0c>J@D#L($?g4Vt>d+1aj-RHu;cesJ5gN?xwv4=iyug_TP% z={LuvY?!S*TA|}@>8nozt<<4SVaD@KT0`0qSC@tXqP=e<#BhUx&tKP$=?h0}u0hG44w==%+_rgH#4I`ykI$T2Je4ypQXya`n+s;^YG>s*xUY2$ke&%~ogP zP$&bdtm*hG8}Nx%tCg~Z#fung^q*pFx`lXy>l-y_l5e2Np9<@_sUG!`tDoL2;c(Y# zfZEVNJBQ00ig9|ghEHCG=3?!U7^k;r(C=Pt9bp62I0c_Er$;VyZP`lT!1?+!Y zi4q8LV16GlhfrfTBbWnC2uF`AcET+R3%FZDU0T`LB(GgHWs9L1>K+Y$=0szDWUB@^ z`B;W&L<;M`5^vSWePmZ}9zcd+Acuw??<16v`ETX^evQoPT^ZeM>`~C#2AgZlw1lhL zt}(u1RpavprB<^fXysf9V?V^Bp0uIfQH^atg>EsGkMMP?aL*t@3EVB=05O%1pyk!x zof{)9l=z^ApI?IRsFA&}nDX#dOrjt1zG52Ix&2`cb-Dy+mqw@xE*{bFQLnYO<3g;X zc4|?NNdnXo)p(=i z6WlBL-DcUe;YkIfDPp$29^DSgUF~AvN`dm~6G!-WKQK`<)Y}k!04{y%s?=Q^c17FD zQ{?I(_M+^@kRZ75nUd2&UXVLVXETp$knZrvDP`|N!7|nZy*Bv-{C!GU1yb@N^Gb&= zPZF=u3!6qm%WIWgwSKP5L^>hxDeyU?%+KUP`_fGST0%dKL{f*&zkb-VB3I#}+4#t? zk&`=oiD%~G`GuaewDiHlCTFClPf6~X1^)3<^&4Yagp$t6xG_2_dj`tRxb8A!!bi?( zHs!OBU8`&p#PRlXC=u6|TQrfdWbtnege}Owx=)s*^ zd1{z^0GBlw`FTCJ4F?EXGkdtEwK?1?paMAPYaO zFxkw7{HNhc#GEvWlT@jefjGendAldp#6{E zx)O8^3Vz=}eoLNhYr`+!6w^o9oAB{>$|&OyO7cDRX}#BA$KQhD?_CS@M%c^H8jdwZ zllR-CseMmjfv4mNc*H3#K8V$&CikO} zGiziLv0g~KC$XQGZ*j)L58I8b5Cf-MK{c#ArsB$TrbE8$e1C%ar- zXv8{n&&t%uvtn7f^UD0e08y&o-Pk4-x6DKPmdx zdZJDXACr1(2DKSzqc5uzKS3#$--c4ODpxr7PvOGPO0yKWXM>`^{b$tTnN0!1?1-RP zSY>pn`4p+_cIQYN9Qj4=WDJb$iJd(3dq>+rgV+4W@!dKgD(v!jEU88 zExiAmq6PhD=A3>$OPn99?UHK4kyvAV4wrs+x zT6F}#`(1%pO;*sNkw$ZNqo!f{jW`VVm{Yhi7_9#AlnRBmqoWzr! z*i=bRKa(UERAsP*nY=bhh=oYY;a^aQgEl*dNLsp|;6Bsx@mJV>wcFV93L3v5jj=JI z0Z_de&x_2R&1JNcUysylSj7Pv9u&}Ayn2bbB!;tck ztMK~Y>K1O}xkT~C>}8!^R7(43p04*m&ry?&>%!A^A$iP}x(W&t^mP zo5W!n-xjBxcOtE^toy>TOzcackK4ExE0}B+htEPHB59&;Pn+JN<}{wqjzXT1OjAg$ zaI*g}$%W08Hs;)a3fs3ZNH>G3Puu!H#Bw*T%epKw=6%ina52QaqQy{4?A65zX8`Pf zm7cJ*l|O??{;f1{=6~V5H5?`dy@vIAtVH#3&Xma&wQgYJfWKl#RtMCw1r(}1gM>o)S`v@wp+3C2-$!nXmpKEQ1pBGOQ2eP%+zSk%^utWIX*F%~mk z;}CJ?ZY<(t?WmZx+G1Pb(P4Je77HYDX?>krns@^coE_0T&4#GRUI;|owtKLCg0*qs zu-YN+%spnONBpq?kpm5ig9E{CrJ@S%UHK#JU4!Ewr@cE@A6-@zw#OFyPXzzl1RsKs z^IL6)kYF~HNOfy&^3Y-+g~h>#C|L^pd@>NOBO1yxq^cE%tZ zsR=?6aZnkq5TeBs(@2A{Q;|k?2e)zij@GHn0v#YmVaj#~_cgk_tP9I%>}2j@xcah-)qwPTlW>&MbB4k|NjqnNaY;xDY4_Q;gd>s5&F@KS_}(iST$EuOK)yh1j>jizCv30Rz`i`%Fn*_Qq06X>VcRl zyE@z(BA4Ooo>sdPo$nb35e{XTvGLG;mRqO&Y%e5Q@ijg%=cyXk4hmbjjZ4M4k6&d^)h9ndUrN+_U7#A@#KN5p*5H(cuUNh4m6vmKBm?NdF?DiAbs3szsA=BdUi50g| z#Y$|8(&L(J+1}N(E7C>BJkumK7Dsp$H%bWmKbh}FvGE}f=4jzT#(_>MFDeG`%oxeglbQ4x{V8p zBA7c8i5wmffD5nXZlfI%G`B;`!3>1t?8Jab{+qb`otEM@YEg*3XKFZGd&b$9>Cx;v z3UN_eV(eB2qTSJm`(&r>97@Yjrbji0#vm^8QK#LSpJd81-+VpFe8!{N0@LWHSYTu$ zosEy$E--YVa-$SQ%0ckSN1Ys5G3e=r!{d_-XKY+We>oZq!yHH70wMP?`*knIyIF_* zplmq?n?`?%30XqbV%iyx%Y*@@X{QrKmuZfkfaX*`PZlhe(Q@!#?lum=Ng(_e%`+3N ze^Fe0Ou@q0aO^ZDm0Jgcn0qG0!Hj|KJbhLW!*?=SceYq}17B`7;3W~e<)lLDh zeHZ3aTiYe?!C>0rOl<(4-lbWEp&(YI$Vr^0gHzoj1goq=8UWLAzmcX)4Pw2Li~n!l zZ5zm7pNF`pJ+@YlV$tZ4SIb9S@)NB>pxn!+Df~TH8I_{l z0u7fTO-D3&EkbI4?qIv_P{Ro`5jUu`i)pdS6D3uXV0leM)@I=fdYId|D5eXY5fpHk z9S6S+b5GO7E!MM&=rp2^Tj62Eppuj2IiU&<#ls@63Zu8SZva zRg0$>Rx=_#7)rCQ3@4bYWo;tI9pfvOORg8LGudV z%KP<*+wq_e-aD!E!@5BC`k8&J>QI(yU|wk$jf-Kn3?cV^-`O(z~lM@xfx?-7eT6kkcw@GdzP)%-wzmeOxiM|EGz;ChYsnx(mAJ@W$$x0t- zwDE|f1;@>#hQr@t_5d!Lu#}@E?j&mK+ya}Yq1ww|YiU}{3D(wWs1;A+WeY270(z?k zJ!%gXy||5_jf}k8QBw=n_}eYRtV4J`6y#zjPXEv?$%Z{LKo&9?;0A&k{*FdFf1{<} zM*7wcihR1*^-{RBO>qAV#ii*M%9chJT8{j0>JnlX*`SRpWSMafb#8fc#Ga?Shqp-ktT}iUPNBy;LaZE?8Nhn4lQmTOj0GWq6CcunKtLTBXZG zlWmSz1hTojbGFMR(fHj^HVbWh)$^K{vDsL%HfXHgLr}vyh))&?xuLDt%ep^X*abjI z+l(V^->cz*Ao~S;t2pN zm{_(WuKd?#cIK_y5=)nCsgk5S{oZDF2c=?ZxdW*doc2c(p0BJ5Dqp%y>*Qpl^?(K$ zEA7oXQ$5%~>hR~S{NTPJiZzKb^AMyibQ@>HLRt^wyH{pui6f3j*lZr{Vv0l1tilqd zedJDLr09rwA1Pe+qp;ttv?DC~F&O1>hqV09Ifhk9%(4BEtKLO_8m^ktKg3Pa-N>1% ztZg?qS-Ze=`YR^iJ%~%{6J?rw^#-}8)ZkvkUHZV!v|tem-lsuAE57tG#Z!bp_CtEH zA`szp55TEnWmu8Im;)Lv2a)`9uQj(@jEPbFIQU;@h(?qEdV)S-Mdo8zJnQsz%BEc~ z_@ss!Ft#f@G{f5?i~O*Fh;gqj-^ z5mN#d_mr+5zl1%#R2_}a_IwlF63SP(jccajV)V-zE(V_aLn+)Xro~qfGN5N{U+SG< zZDjl`0W$tqiRHAvGI(canwa##s(S}~d~>xs8a^Bw8zX57JAYk6h zWy(cFYaZMQxN@Vh>J{$bB$VBx1o!C18{aOcguQAMcq)`;_XvW>wQjuv8>K&DWPGh# zI~;W*vIZH6THbsPL?vJf;P$Ob3Lu-_-jC{Qe%yuNcM!bka`XntwOGBq3kkO#I17=(04&riF^P%))^9^szh41JL1nD za<_fc24D`?t%`%>%tv~lg6%&Vkso1CX7t2D?{B}kv;`!+qm-{;aN)*!w-ANkj}csX zzDWq2YJXD;NNibX)J36(Etq$D*y0mddYjv*olbdl;tjk{k&e%69VcOR3WYfqGZpS( z=GG#e&k$Gi7N*D59va^Pl0N9zoBqHYNVVdSh59M&FDrFTK68=qX_imHrIwf@xqo)WVpJ%ISx26=$*ildlHEK*@y?Cv*A2{HBBH;9{pAXOUvvd3+6rHyh_9B1!Zc7}wf`uz7`LgS{*8c2#GQxT74D~Xo`uFQAdT|wficj0 ziIUH)YlYh)t<-6_&JgwpRtDx!_8cY!kNE7x4*#ag7vN44tpgM; zH}xC%+-tZg^2^*lB|-m=?dR7xgCYO6tI_@DdGJk;_dSNo(36At54yDbhxSJ@fsF$= z-DxpH;N~6MQT!!P@ltD?~ zcu zfZJPSJ_UIXD1(fF9iDJ&gX~oVHjQrr8{TyuC0q+Q{pmzQdZHp$vv_#>LAOy6OIIrE zft1=DDRsZSX%H-YYk5a~2+_L-EQD?dX@M_!JmfYKm#suvB9XoCp^N(T`!d7Mgd|(V z!=8r?Ns?i617z6V{4E@OUvAnOYL7H+RuQEv__V#XT2P>MJnVYJJxS-55tPrxy`p?B zA7m)&eSB>+^_@uuL!=aLl$6p2MYGf0-ynjAW4z3v%OJjF8Q^!PBOJ2I9jzeY4u>~f z-fMObw6$b{WR8H| z>57uXL=Y0+WJ{4F26jKKY!bxHhESA9{)f&asU53DgduL@hiDO~McgP96&vi+B89a` z^F??(EG-?TN5PiAW^!mGlwb z*DE}TeEIDwGe$Crl^Y}ZN5w<+0VSYAgNuofn~Fvv7w^D(j!48XcNPNOYG9`5RzpW( zDs5drf7qF;Ob9$V4}84dzmy}e6B4Zc$ayP#y-8V5Tm4XH#1)?Jcoh1rRCgNMM25{G_6#DM_!frBJ6J947 zaho@IcZS{DZZssJPXo+3%_ZH5^Mb(4Flc^Au|w-|ZjX4FaY#ANr5!K#Z46TBiLLb> z*=9J@evKod^y>M>NY#TH+$2SedQp?n?J`p#=M6KOybW6*c^j;`-S3E!%pjtDDcI!2 zS#2_?NkazWT(vhfM!L*f))HDoE7_$(&f*Cd-C%G#kw~Q0f1^L@Vt|$T&!T zN1;VAU*?x$zWw5%^^0zNZ~a(GE4Z+>O@ic25B~BGbiJWJ|6t^ITM+}|Vc(0&=8O?^ z|A%QzLK*{cn7-t8Hw;s;`W%FvOMj(pLd9(ctS24+^`V}QfPzY%-BXoYXl0VcVwh!vj5E6CL#?WkgowSG5!|T%w zauGc=9uB}q5@WW8w&7g7uVPivSm0ua zOd<4<5{&=e$>Yv6kj30E193Cf`r6D5Op4Na@(^-pRO=yf znCne)hpEYY;w^c6hiscp=+SD{NEV_C;$ieBYK|D5don3H_q>)!d5T)6i8d*&#E_l{ znMsgMg9GBM;zibsS!)(@pZ1Ec-K-_N!)y%~jQK6Cn^t^2789)RY>g#eEdy3J3HAn* z=R5~l!GoKt=Z1h^6xLQLI;9+STIDpCIKRB#R!+2l=}jAWx`sWE=>GSG{j7!?`CjoMH`m}`YweDodf6;Ah_t@joa)gCL%aIk>ul09EOtf(qB0pdy;*MQ( zvcol&rbtg~n%v?Iu>U)^{@Rqy!e$kXxva!U8?P@UQ3au+Mm$9 zT4sJC$0DKS%W6paQ3-zQu0uE3GNe;AH`2~z#jaru;tqV|W4CLt61@?@JNDQT6)x{4 z#MQhPITCH%yq}>dPiJzihU+998@U1QC><%|dz}|CPighA=1DfxM2&@8bZ9F{kUNsB z-hjooI*IDxXZ?LD_WPUm2y9SPu$`I6M<(#S&WrBr8;sX@&YS@S2)GT(esV9<0m8~| z$4o}{+nDvM&9U5g?a9Bsu21xi7M?>XLe%|^T(Xd`Ia5fUuIBXRsE1Tf> zug1v=ZmX7SHC@Q7mn&X<@a)C^Qq!e=ih#4(lZ=`!g4Sk*)`$Z4|1T|!c;E=Z6%EhN zw4%9#MpAWhW-gq#3Lk?ycShal(wiG}IL{^qh`tl0dU|e$a_h@cAeJk4A@YWEv5wE;Sx?@ z;mYYM<4gC{7bSWK@mmT1yl%`4IJu(!@#G2w+)Dr_SFyIJpG2`xdL#HD=-w`ogPwmFk5^ z&{Q9PFA*HnKXV2hZ|f@23Qrw>s6LD825fmBB((C}p|hqdgEdFW*pDqo~;Y`OJ(9Bm+3{PWJL!6tXS?Woc=Ib$LDQgJzDQY%7HM1+c9l6L56;q;a*@ zZ#Purw&tqei-$q43(Kk_kura`+yflI}gjs+6k;V%e zt`{7+cMTR|9;tXi_QzC+j}K+3_Us|#EOmIn%-Pvk39NYSAUu>E*ewLA0?i_(=Zknu zQf%We_2<~F(bw3#RHL`SVx%^Xz_E6o$wsHtvx%d~?7$W&9pyPJ3#PDJy>l%@8dY#S z$aAw!g8}rC6!*Fm0mrD<$D)_P<@V^|M9K<-Bk!sQKZ4*FHE>TTY?$3oxmN6l&jaOC4m~i+*bm>497zh&mscluOOk*DSn-akP#@Sb0KbveAuf9 zNpF?X#ilI`sB7y*Iv>ZvUtyj;4dM{{41C@*%wt@>Wb>y41a5;872d!$qUu`3LR|#* zXMdLBdC1FgSCSF;COi}F8Q#zaKYqtFD39+gr15vFlsHJcxZIGPIAM4jA%2sC6Rph% zc8_B{ScP4YEqDS+L~gN7DmvIt|UWCmpQU>@Ea; zfby#OxZ8sgC$g+QgyPPg!D_dH;jQ~hG!Jw$()b9@b@tq+14K&0$HYi_a$Gcg(?#jE zbtmx&4D9ML?Igrj<5M`N0<1pcGq}H-;xj}F<|#;u@fa6A#1X=26oHpt%1~MBQ4GT~ z2>IR>*cmoBlul?K1z#Ftu`fnR)KYH;jmmUMaf;^7BCX2gc0=J@tU?P_7~7U&M-*TG z9Lb~(pYL+bhO+BNbb_3Pojb#?2PPU;BQjdPfbZfw{dD<@j(-Wc@oL9u8xVPPsW!Cl z#kRgecFqpzco)7>v)puosVj;5myh7Dsefa~WKM>(L}Peq+dlD-*EdLYU)z)^P-n)8 zG{bKZc7v-kCIbF3&#+Ql7PN<`+WFd~S%d977K-3T3Eg-j-Vh8%#id!e}1!{fOdG93XwqJSpM~t#M!W53p z#K(c03Nd|*aLY8WUc{E4>xPHo+27$r-^RVth!(MIQb!jBa5hshf`3A)Xoe8oJ8h24 zA3~?4O+b`o@-x!>Cn%*WT#j06vLKNY_zU8qgHw7#`P;J$WmEW-*`x65uNov0-W-Q3 z@@DVn88|dXO(PV1`i=TqI}T&=b$t{&;A=DgKrKi341(F=sg~$HWR^rK|+7e3Z0rR zS_Y74|Aw>uJ?kW(G`W7awg>_L5MUtG4)7Qkd&MIE67sXc>DL!3mF*M0^VVrKE0-S0Qe1RJ;B#e9uHf)l}7#A+$8T8X?=mQm~TDMBLC@>$h8N zyovTlFIc?@ug!{r>q3G}HC$g=G?^CR+&G;}Hbcm%8LhB@<||767;W1al8KP!2nku& zaR_`eeU;G#hkc~$A2*8r~MxQY0cVUQFV)KMB;@% zS#fbdbUdt#K)bp;Qt=?%1yO#sZ9Uovw`Z7Lt0?dqkkF(eH+ld>W}0DQ3JEqf8y!QiWl=$d_9(*5Q7PF(1k-2VRT4mTPr>BKQ-oj?C(C21KSqvMM}#sW8j5l= zqu|n1vq;FK7)wSSmH=tl9#i(EK!h_Qim0`z$niMze(3sQVgr#_2Zjb>RgVySEXZOB z)*m8_A8~@_o zMubf8Xsqu=1QyvsLdlRdfm}m=<~+zgS8Uh~|8U{_6zzv1{Gki~5C+*3Jw|OzwnOni zaaZh3dY6>(HrF5Y>6Cjz(`mN^sGQ_65^dPVM5;>+k_*f4I0DKiD+3g9nw%;5$AOSd zc^!vB+!VvWXtT#-gEmUBG&WW{JH)|$1)?oj#S40I1WcZpIStx$S!B`~sevhy8sZ7K zc_yY43adt`wTI+0^#PB02uvWL*OcgdqG-$vy2jXANMniEi|vbi3jbx#kc1Gg7~G=Z z(g_nAS}1wpY|tWAIavb-LvHr6w7f-YcsVt0sG4L$wP7M##%=Y!l+p%Za%11^6m*T5Jm6r$arc z4;owlNYVZnXLILGXM-7~qvPHfp}y9GZ%8>(Fd(Mh0MrRHmd>^NFcxDK|G|m=Ltp;E zaImZvDsjcK9Ev3Sku1yB;3G6I+!$zLfX)aRNSRLk>w%HrJIiC#ZxfgS^%$0^NlY|E zm@gV4199xm@!(5K^_@0hx#uEBZV>+vqxamfTq`z}u|^Rc@(E&pmxlT&h)jfQ6ycr6?s1j(NVHUZzC0(>FzB3{xGs$x$(VV*}@L%xGQ55{?SQuJFe zXujemXbV~4U;h^D>xdeHO;jw*tb()(WossK|Ar>Oo&}0a;{H;S0&9kn6o!%1!(Ew~ za>*#xtHZI&-IG#!*&IEHii0C?f^=hWX?^_cR#5()caWs14{O#Wt*J-y4@z-E+RD?b z*o-Ja1eOb`bbIcUuAe3c-PL3wb2UjRVQ`yASqx|%ALI0lqd5Jj23$^|$4CGbq2PWlXWhkO7^ia`$PwlY@^K zFY*|5k44VMSY-EdZPYM`x=t|@Zh6sWUvcINX}RKX zX%cqsLQgzhI&!_jimq0sMQWW)w2l;K&XH4%NFSX-nC)-2%aIrnZkS4#)r&CPaQ`wz zrxX?7wkRqvjWAxXqg^M5^=%HHb?|Kg`_|!+$CbItk&T#brq}<{$qE!1Be^>1y59al z1U8%$$)9;hLmp-jFyXq)KCownA{eXI^9VTRyO@CxT&G0YC@p}A(UUUygxPmpCO$~} zU9r(1OPL~StW%1p6(m5^4W5H?7}DmR5wy9#HUV0%@)$?HR?j*!0Zy#)7@pM{7Mexu zq%X-#f{+&Z#thHwls2#5V=uwRW}|VG^-l3rjG2ngU%i(rcEfWJ=HC}X8>`z#;~ReJ zW>J?H`v)2&a}_YU>bz)t1I>P^E$Z0KGyjGUtma1JqiB|Y1#9yge#_q(Wy_jcLwbP* z?f_9EJk6oa(##+m@>-A7J;*{Fs%w;iXzjDBfs4GpIMS>vqvW*}AWMl>fNuOFe@b)# z_&$$!tHhRy$&07zJWzU*XS`uFcTF-~|1SiewMukGEai%@rD^?ABH$ZuCCWt*4(@b8 zW{M%~X3u~I`rqs5UiNMxjR@-V}OVP94Zwk(nsT=mU>CK=IfWaP~GM@jwW2C4IuW zJ09M9UU{U#(N<5x0A-Zm*9)+F?Si$n%MWQCrCjFX7AXr zg}XOaHtpUvfY%n!=mxi7^RUrI0tCX3sVVKDaJzDEO_T-Oq@gx-o!A=c`uUp1qOJh$ z0x6&z`K!3eH_2*?q8ppJ8>NjVA?e+?1Ga-*H`s#c1p7{u?NN7Ye4Evh%_MGF-bF1I zrQwBG6r3S{VGdhh|2>{iD1Xrxr!Hk2fJh^(Ae51yL>lZ!2YjSKz*ca>v*^0TLuW4% ziGNVjXHGa2^-<25$xU%T$W7gi{cxwJu;2{##F5`UaCob7eL{45ww$eGTw%@N4Q5APEc4k7d*DQ#`+J6x=s5 zifzc;#u%Su8yyKk+rev_LP+FZSJJm&xN<1f&IJoUw*&mQD}Ii|%=ScLegHOYSL}&B zlBmD*Ao5!NkY9?`fcXrD`$SInAq^KoIofTY@_tV@b*vdq_hCrbp)e!7+9OC~-!1+o zuO__EPK2Zmwevz^<@_jF_t+17FvU()sMx?hMjQ{t4J<-T(E^UCP?(pyM}gp78kimu zY83!=4|<$>_k>z@L*7IGD$hMgXzZE)mgim#hw}W^$4$i&E1xrpfOlba9AY) z(_2{E3&U0I!`&N(=ui5(5uH*-j;WN0d={oW6xZ$;s9&A?Ft5d`PTs zpCC4GarA|Kj~ebA1msB#g5};GQ=;D-3`xqXPe6DUd-4=1c=OGf2Vm+Rl@=9-DBb1J zy8HqHpN4yPdEU{LrBhj2WSlVr=LvRQg?Vhq3*oE zhP^xJ2}w!6QOw<<8^wpPTYE>Pgv*=9ylWCUEr%iZpqkTyRX(^es`7D!8XL7fGh8I- zU_zqugwavLBn$~03g;hJ6v2*!)_LqdX=zi1z*MODWoZE9{Ib-z`%fN^LF7e_HGqtn zT4aE{2)R!x86Z@af{mNXQoIB;PZ|qFy#X7Zk)$+jQQq5|)V;KgxRAc|UO@{u@NR*T^FTGRSPqd0e2akj8#9BYZ7^Ti zAJ^whMIi8P?4aM^cEMPYPRUv!QRyafoM?Tz0;_%CzRA=ml|o^ec0*bxkk+~RO`;&D zwYdm}=;297e_r-b(;^Ftv{=o;@-NA14}IS)FaiSBX|@KN+?SPNs^KHH3h!u;P{==w z+?UR|+D{hz(Y&BqW8hut@a9dJAUn@nsWG7YTJA9U+V_yO*Bq?+bfDAlW)ReJj$R;$ zR(=elgPZp?SUfB|tat|6nzCWjZO;$j*kQ#pizUK`kbXp6BG4o9;>7tQj2eF#+aFpS zRYs?X_k2t}I#!PHo^lmKYb91Qt(88h$KalCK<7va6l=0ip}0y}lZkg*Kf|q(vb)d~ z#vP?~(J2CiKvAdGb~Bz>ho6S%7nOd~GJ?qrLNaIQTNkK)QQ1j~C_*jD{OH;y5%A+q zybB=;vglre6-4%S7Qq*qTpbEaYZPnKr$@$7Hsj}rJ3BU|6C8P2ku>{3p^z^ScR9?j zzbtwo)h7yQBbbAYe@BfccW5^Q<88{CgM#&WFU`~D&1H!D9-`myY}6-U zo`I4w>(Br1M8FS3sQZ@8+ijBG^nf8NcOs&HgyU~|^jn0+mY4NFMsyB^cX2$9dTYT@ z>mWUk;HU{HvGC1}3k+8x1aSdYy{!tOA+1?gd>zs#o`8yvsZ|s&(kd@%kVv@uxF=c{ zg&2iDkraM#IFe!ddj=U1arhaj)W$dx1cH}OES)s${4a3jglD4O0x`kg=#2AM*mP1! zZxx;V4ZN$BPKpvazhkopx;i?-{%XZTp)55gMv;_15Hda1(N#i3C9glJf2pyK2*R|0 zXBDqNCW`Ue=%k-t+X=g)02e6#^JhJ`uk7zeMbE)jb%#nD@S+QVKn2CnqF1 zuS7WVzQ=e2kmf=TpU2?Gs}fgiiC>tx0U3UwBk$SG-(2=N~( z5nrq8YMO{cW-?l^phVL*w?@-eC**P`+?3 zfyl&_sVNB%dqzCT8Fg5-_LlAl6aaSsfFBv5-VzzUeZWm3!)UmU}ErCoTG;v zwIau`Ju*?%!7)T0$&sgGVbRTt5E52jM+h7`>xt7fVKt9X4HpX~Yp}qxcuZZaOT!R% zKG6{c4-cMd%mAbx?lF$;|4-YAh(w6`($lwr zSrMp+B&qmDI^tpKZ_5AHwRjY^lRU@~49Q<9I3DdHDJB|mZE`Uq_2^fMx7NIZdj8vy z8un}J7zn?&o@{iS93?YOyRlA*u;**#pjqF!FoJe2of9GD8>4Gr4V-jAeoo}3q}e1( zk$JFQ$vnCu&SypnW}yD6^iLeobVEq$3_PMaQHL%_s8qO+80wn;j?DIO^pK+&xV}>e z>Rn*Fq%Jt>(P41rJ4Iqb5V46+^*v5HsXZJ>R23{Oa9J93LJ`L><*{Kkpc#+cch5@+ z26sIXQ`usgcUT$}Y)sI=-KEpgSAdM86<{Lb3i47$!0?Z!8H+I1wus^-A+EZ;BL$Mq zDSZ@clw^cpZII5e=P$E^=f$76+}9n!e!U&Dpt2*5E|I4tTt*L^-p(5?LzsR~68y0M zG=0>k!8~h-YCW@9qp*{`65+)QO27>fnxtsg>qJhD=VPWvmLQ_Kj1+`?Lw8a|J18WL z3hi%tBgD4=(~_rNR9K;%E^|SnxDQTj7Zp<%*4r2V&nrOdeflgos}a?Qz&&H_b8@wNg z5i^((`iLR>;J@kAa|o_}e)nYPKZ+4K6o=aHifdw%r+pUxPV2;BiIDk+vg~05B{DN& z2qK0j!e@VYrsxd_-bWBFyOuS=qMHy5gJd#0}%{wuIhNH@mveivy zk~U_cn-sK|XEBgRA#VGuloaSaP`Q{P*6X7YvNaIb>!bcr*}|Eebw@M#7=*<7V|CEC zRETf~SqRzI$nVcR8TawMB)-%7(Ohq`|%#ep&Qs}&=oRWcKx zBcid1PMO(&8G_5b1P;9GaKX0q$O!YqTjg zD7n;JK_o7%tj&qN#S8-85Qq!lk8^U3rHDAL%p=U+_Gph$%@xto`k4Di>*IXFT}i(uo1pkyw5~jL?`6EYfFWm*j~&+ zNbP*wUZA^f0ec5eHMUN4cEtSC5%p~1ZFO7R;3u3=3XfWyz#Js_S#O-pt+OwKMZ9S) zg7X%n^oMGHg+a#AHj!IT$JXaj>y`WP2JlzeN>O1nO^rjkT``|9XZGPZ*whA1vTA0Y zVL@!=R{~2lipvqbfY66VJBnqQVm;lIWjzjo3z5a5agI?C@2jwgIBj%IK!__5(%KX% zd1C6Tj&3OPE$j)Y8IC|nf|%#P0Wt3(lu^hD`PIJ7#czcW=T}&wk4HW2hgqD0fFfiu z+MU83H%wGKHB<~6{0og+W!A;oBBXJ{NXH0yRg1dGN}z6DMuj0?e%alu+X?@A*whnMUFq3 z=@==wvG!~k;zkwXGSq4oBH*|jih~M`+sV{*mN0dF1=6T}+K~lWLuX@1CU=rCN(62t z;#NO{xXbZqf+EjPpH{hZbZmPATx?(HfD8G!Vf^7Er4qJP4yy>-h#X3=&8%T42OEK^ zkLr|?8BSW(|BA zRya?$Sm6k7BsL1Bqa#E%4DU?q8#WSJo83g1xP07>qZ}0s9U#z#k{hCPJA8bxL!l8# zqtjacmWJPMh7J+RHxcc>1@=Z18i`-DY39Z$Lcfk0KmSZ-icRB`e9T5M6oI#*;B&7_ z83^}HQi9By^HM8L--fvSryYa9^IV?Ecyv$4T$87}9WF){8Z|epfb|4$z@F$rql}2S zS+{}sPk0VX8VliB?QbLO@2L0$y(#V>@v;dS-#FdT&&FUFETmD6;HYPD%kKBwVntom>SPI!XM2eF_8W~d zwHl8|YI&HbraR)K6BCCfj}R@NA-L@SELq`@y`?A&xD&c}FEsA-F;_IS*iy;SJW7B7 z$h`)`5h=GDl|)30^fBbF z-2+Lz6l>;gh!UE6;b^Zy_OQLIpS(kc&+`4i|bCF4lPv1M>;EzmGC7brWH` zBNKTN<$Q4!ZgP*$QZ~7wSl?3!sSCky=)jVc9#Gj&(Ff8q2Jq7w&M6@x<>(oNygmrC zl9Kx?RJ5oI2Dh23MC9sO#HEEey1_mLC+y?7#3mJ`WF9A#8|WfR|2!FNg1Ao+;xaMgt)4bSeLcP9gxhKd0G=5M%?s6(Zg+0 z4!QBvJL+#wZA9=91bf}*xCIWRDiYyrrSDP;H71*T;VX)XO?F;bo#I6}T#6l5swFYe z$nWY$*a{?C1-a>k<+?>!TRn!Y=C4UHwTf;#2)-R$7|30D4qJUOvB@)=_r^Z%1VT&(;@36v3*&@D~ zsALosg7vAC;Ikv`@odz9J{u*$E+ECOwBO9^%{e>g-1y$_@AEmcv$M0av$M0a2tL2g zDmqZ?sn}*-iq!=x9f|cngS?ugL_7v<>b8_fYe;g zlVZuyJv;_1K)^xRlj~e*3;}I-S^7Qj+aYXZLm4`$DbZ%OwU|$b5#f3OClq$yT)ynq zy&B4gY1UmB#W!o9MRfQY%T3UYir_|{395j?=;GO(cj!tidKFM$MT(K zX)$|p%YUG-z-gvQ8ygUo2W`YY!S-t V}PmG|Rp(#wC+VDlwX8thMLum@vJR=kAX zu$g~O&Y+weST=u}Y4HX8GYh=`pq%~^PQe)N2Oac&4l_qM%_|BN$lz}j>-z!|T%3K) z(bV@7$4FN%R%02zl{aZRLy^e{$_A$+(&JuMVB?rZQFV+*&NLYp=o1pH_}0L%v|gEz4=uc2>vP5icoondPq++DhAw5kszE$$)-w-&;0cA7Q7==LUmqZ{$3;Gvr} zZ&_y#VH(zY1H6?05neG3nc*7n=R&&)RMkH1rF*WA}Ap<-3fKsa=FqiETnhzER+ zDq32K?|2KI3|(hcrW~9f5SO$H=zElSM_XK@eck~IAxak7b!FQp`^?|l7P1bH*5u) z$7@WA9n(3&3?D>walXSFoi*j!WiN6wSkSajI1g(km|nDqVP7B`<^RDL_R4|yoU3?0 zOQ_yO*f3F3Jv6442Wo%9F7964b1JOKT^3l;N{imwot2*vyX9!}l!`)4x@@1R&@T(& zS>*c{Vs6+u0@O(!CYoQr zBd%*1o-(%hqR@Iyths@$vH>!#Cmwg+^Y9-4~wVAn~^A>ZxP42N+h&$JQ|7>2aMn&ZXCG?#`G z7Csyy5m&>KAn~SoreMe#@F^Erg9vR=h{g9Y3GuJtm=ak!A$ESc5OM*)5$o z^@+wt!ym&_pE)0Eac4Wh7$UfAeM%fS=WB{#SD@xdu>8@K-ms+SJd24X@1BQ-vUXaK zR35`!u^q=m#pzHig10?}r$g}zG!ZHs?g-dXp!i4}a+x(45|TzHLfGRyW3i~x0&`H& zv51D#3!G7`NK0^&))Mh=3_mq=egi1JQ=`mF5Iva4PGK2RZpD8xL(mkDxrnHJ0lx9TOx%p56THAADB6i}q?Z{F+_O@$Q_69_pF1 zZBhQapTzrYm!oFmTkoB;f=4u{T#K3pHQ6hr9M{x4;mD9oyt8gUz{XHr?DpZB z@So(GwA25rIhNa@qSzAxX-{Y`rW<<^?icMvQc|IIsng7KWQCwu70Z^61=>^R+}~h{ zM0@+>m^1JO1a=@`>Cuo(n9)mn=~5gxcSI?is`76IRR=VPC?VDfA%~}?428j^+AI;t zB%M=XeW}w(CQ(Iz#ooLN64|)E=W^Jx%xPT5P`EYE-=!?&D&)DV!rcdJ?$#PpQ&LZ& zOQpW;zaym|?Ao%>)I>WljeyIxS%KmhzZ*7MxdD&y#aRbW7}1IDh&#Cf<0Rs0BgI8K z({6;)$I`Jm+9KxMIdfk6K)iQ*lXL#$`7@n!hfTg6@8M>T=s#!-L@sn;o&2IP<`FLP zt;`7NO$Ih|=6p;Kc;{Yi+6YV210iM4#&;)(MFnZw%-Tdbn|O=&$@`pU;;10vKq40_ z(OgwMfkZ^fZE-r@i$qxSgRkco88*u@(gLxE1 z!cd=7$b8UgCJY(mSlMag)0ddsbsCG6)I(1s^Yp{UJBNq%^Z_PA!WNy5%Q6vH@=mCO zaHe4tkSv5${%VC76ProV#LhrG7UX8o$+QEJ;s1?lh*KLi+{Tawu!^{vL%qj6P2%AdF@arr%1;Nb? z2)XmDpAT+$KxkbbOan4`2qsdCp1f~oOAur!4Zht_*~CP_5(H% zbGr#)SD(X}Th&^vMPueMYm|*Ml2{vmH5#*6zQ^l>SE{s0Ev(7SNO0Sg=G0i|QLS!Y5NrjV-={pep zGRW9ea6RrcFM|kQc^rRi4x0i)LLsdS?y_rM)e20}D6zLj_J2I~4!yOcl`(O!s3-=D z6(nlUm?KxFnV*1ND+&w60uN6((+wv_jQK*d*O>+hJ@c|VbnxUXuTHv*m`a3k!KsAD^ zzo0#{^D3Sio2BrT6JuEbnwa!lt=qk*4YAyL6D1@xTcOT>5Zld1vm)?2M?pJp>e<=S z8NJ!L-e#ZELLt0i5J@#oLbZVG=e6jH9pzG}#w*)p$QJETw}PJ7XoU*Z@hDW;X0)qz zAv0BRnmte9OTTK@!v|huV9Y0Ikuhh4knf;xSW>E>4PO1VO#z-VRH&Ax3|%%@K=>%E zr=Xo3*-;A>D*n%*%$zyELRs!qsIFV7On$v{>Mn(PXL6jcIVEJcNI`dO#baZ8X9RSy zf}T6*ld2Hk5(VAx*H9iAvoo}PWWi9L#8Lwl0Esy*EqW;WU96z1wwlpm49Bccw8kK< z64+DajDy5&c!fs@M%aZ?LYetvVseii3c{D|a^vQt9X_Yum}Rl&pkiqr7dv?DYDcz^*F zo>puq%}xtG9#m9nUU&M#k41mW%nAc)W>blgd`JQAdP5sYF-9vP=Pm4X*{ityv1_D# zFjgsi!G1Lz%`S*$R};!iA`xeuYv9yddh&^`qh+vXyE7KD+edVfLm()W8z_HBNa-5} zu8qz8vf0&?VE+_U!DKVWpJ)&fD;O=B!E1Wn~dsIO;G|2U3gamZ0g1+-sluxLh zcvhjH{oYU()s&?$1fWo9M}mFX3^ACGDd^md5p44y$jhf!}(+XPidyK_{P~Ntl)%A>m z_IghXJ_v*GEL?mam%!?CQI=U@U&^0T&?Swm!zyOQ^Mo>Ih4}UY?D-Id*74_r5UBdV zXsE17o%yHYa@7}5K8~V1v%BTNBw{|IfV*c_7C@T%~$Go#J zEah0E$KePW45&_w@{rsV8bx$lJcNFC>A{jzS z|3yDFhx~tGaMIoI{5)yJSMr1!FLa}(ftsX9e0lNt#z2nMuSpyJP5DJ=`0D| z+z;JOqVtm!ol=p>{uQMcKuESV4#HYsUhz z=n&#f+gPojmG9yX7u&W#S@uF+M+lDr*mv>7(~cLL=c8&O)Hch+m$N#?`9s0i&Q|hJ zK;S=8_@eR4LtuB4Tud;~Wg(R1V*`pMa+~JHN~m2R|55nLue8{+9rcMql}%XQ6kJCX z!`%$k5Da{(pw(Y%1cjsanF8#dxV$BlO^UT}$Z{3Q)t@VT#F>_?1HQ(AVts6t=mzo^ z3SSwOYncOL@*Y#DwC^;F$Zd;BavY9)k9uDE0~T!kFJpQ_LAUlAiSf5XcvLIKNZipm zNl^2S4n@?Mdy1&l(6>}byW})07TM={t>QjBIu|R>>bhX>!YKtUJFRt8Na9NcNIatf zRExS)zf!2GGg_dOQR33b*IvG2GlSsl==LlGUjrt7`bPa!eOB|$giO9Q0DdrQabsR? zEjHXPqVLpC+0$^bsoWRt50iF>TNWE3hVKo02-JMt7fZ)K-I!Mkb4j%~@`L(mji;5b zaS**ct)P|XwO$IXIHLfieMkDif&F;L*RF7a;j;$bzv2L9W7zdTOp6~4co?L;(8`z1 z5%c(*!td@oG78_Nb()1&g^53}P@4~6Zkcd`1nL4r{(=j^)|Q$6u=$5@%iLhGiYb3l z;nQMseJzf3ABX1)U8wtspypj2VK#qOWUlrb84BwTTBoGw?Jv;nS1pVpoY7wunO*ae z@r~B>jP|dUfW=V5r`Izb{`$jOOnOUl5-e2$cb$7zg;>+10SHf}cOU z&@A*0>nx40NhbLDlYTN+bC$VSzW#!3mz~iS37KKArlndpd=aI~%Pf4#{=CHhK;fTS z0;QTHy6L#AP;(!NO8FZd!SZ02arxYufC9L1*g9BDRhVY15r+7Ro}rkgZ*%FCO6ja( z#V~@u9feOx)W4YX_JLg6|4YLPFS!v>P@Rp_u^$E@c<@TIV%eI1M6d$~h+utw^imsy1kbMMeu!xCgEZ&TzGZ#O` zn%OdBb-1H+JJBCoJ@Q0MM!iDR?|U{<;AU&_xC1V1$p|()`1(|Z+aXm6Fn=`@&u9uV zf|7ayy$FbJjc!rV13uj%V_*%!LF%_C$a*x{r?sFHEz(-!kKnpL4j;t~pn3+A<_7;k z+7MFrN5Y%&7@T_}zFr$Zzp>!yx5gMaYUsjp>x-8MU|r1mmqRjs{MR7-3k#IvU*nCr zuO<}6R~SKAVPTBG0xy0pQjKq*7-`|&nFK6X|Mxv@Uia&zAWdkZlP&5XRnH|`I%!w&*g9}Rh|9brVd#Z1SaEf@ z;&z$guscK>c40hPVwP)TmwBYil!WHCVniHNjp`EswT)e7CMZRRSbykhWxN-b_#GC> zvri=2PBE5((+OVeu5W@PpjDWwr&Mq;-xBLOa_&>Lk+ql?yNydqgW3pJGq{j~wxe`Y z{fjiI2J=L!(c1f0WxHIw6l_}-?9JdA0X7p23CG&_+KkwLXv;sCwpR_VKHV|siX>ye z^;c*RxKeU?t8D47p%TnFnNy5O*ZswgmoIl%Sd|p4(bL2_)rDDXk3z>KuPIDg+Q!!o zR_JesI&jsMD7K;IBsKKX$YSl7#(5D{@3csP(q0Sj1=L+;8B$q@z7x{Tygu%F*qxyz zx{~&?mebPL86g|KzynMHp$sL?TcJWrU9dqY=#ZNNpT4SP0gEiAu1KafCjuWyzsZ`{ zi#<@ZC|~8?YL7>ZcXbb1jNu1>iaL$tl{z`8+Gko!eb@Onb;S(}K< zhYd}g<6)>7!o(2)O(av~y)hl~-fl>Pj%{34Lx*k`TLCgzgB7vb{E=NQ1l%8XL^0 z5Zq1JP@+EyF8_Y*sDv)4FcG?-GBOQjb=157LyrvK<7OmMbzk#-aJA|VlM_y(7LPsO zl7_ayb+0jwA~AIo`Ussht>)iF#gEa{h~JNwYag!boo~px`^wliCEP87)K5EOV8~NjSgythdfc14tb*E)8KMfSE11-F-8-J zz?Ky;*|21sStm|d+=*$>HBGa)+-YG_h}GdE-@*#JPD%u)7CN?WfW$@-$576r|kwn>f7MS*+cL5{uz&X;7S@ zErw#qrsDtZZ*j;HdT323Yp&nAnufUW!T3h|ipV09c`-Alqap60%?z8l!5z7drw<{+0F?~iT)y}s``k|qsacUh-h6J=c!FTCT^?PC?2%W1)RW~-goV&u-HaHtr*n?3lfcbm2Z!EOa^4RufV+#shovq43D zSe2-#kEiYr*NWZ&u*DTU5Q_S^EEi0~`^59=7%$rtJxY?NL%JHeL<7x`dGd+VLdu+1+sNA>^uYO)lO=Mjm?d%_OW@Q%q%ibHJOZw2uenx;!U_Ab zH>ydg1EmBtOGc=*4g;FJz|aZPGFA`B{vbFB)(kRv7CH8Jqpqz<_D3&R7XU4H%oAOH zSPmsOxXjvjtl_j+GQfp^d!WH!*L{Xa7$9ExxEJ;ec3EEep!Jd|%ts3M5rt^jFvMk6 z1!6LyGSU5nY6d5siW~3a!mu6xfWp_D?^!Qi)FXLN;Y&8gPw;WWm&(2}!<lg@R7V z$-T)2#c|4WslK@p`jCRU@?7%_5gCpN6C?+BC2SjpeM?Nw#G}i{oC)$?4CBdMGoH-# zD#9CqavD-L(6lpJO$PeN$grr2pYXLxc_~5P0j=@kc28a+Jg2 zd`&sTG<_IG6x65am;_jWzJJw$>tp3a7c=xxm^{LDbDh|zmn;D4iJ+(h$QnB4) ziXGWH#1(94oG#iD-FX69-J*3z93DLh8*kC%NHS&)Xq)yFQr?mt>gzt6pn=8WMx(8Z zcpw5#?DVN_2#zI7g4;k))3AsQK_xaO9d$V0-E7Wn$E-VYocr5v=3JO@k1xy++$5x{?5{f={O zyynB(#qa`b9ABRp{(&^Ae+!L;%AX?eh+!LsqXaYJ?BYcQ&Y;1!$b&VC0$@Cz6jpx; z!P&p}%*2_2mw2{*pcOi$fneiKYuC%H-4L0P*{Y%|Uh(aBQ&2cmPSRXFF>afX?9!Wq z91=nah)j|4)Hf@N+h#P6hx3Diump6Wxs{^(XFND``402-3N>A&DZ`^r1Gkk%f76Jd zu5fm;#tgN@eWaGEkeSK11Py}f7tQUUxZ$>qs9YQw)CqRqv=ATRI;K6rBbs}KfCV>O zo1^=~%x+t3?w^oztE+dN5s}wHUqx23{=};`KisPM>9oOZOLm0n61~Q9nL2;KjLDw7 zsdKaYJDsx&JWkhC&-}Y8#=DaZ!n6Tk-;9bEye|KOJvTIp0{`*uL<3Htxi-{DdxXCs z;n_FNonO}mbUVGEt??JtRpCac9MhZfFK|8T7X?A%-R3@=b}S6OC-G8hXwN*I~S= zbeg8+VrBf7LXG{fQLI1-QhNzx9t#Nq|5gMx|AnW_dNX1!zNwu{(%Bax`em-1cUlI{hL7L_*d&mT zxev##@sLLNM(r$3p2n~-j)rYN;*MOx^mO|e3tc#XxT=9Zb%A7Tw0jV7Ntf{@XuVw$ za5~LQGIobF1syec_8n6T=Lr*#oqbFHL50H$atcSo#{ODmO}d{RM^vbs-C;WwHVKV< z{Ye~h`y`oa`=7dX(3-yy%Eyk5H!OuAyl%t<3GavxQp0Yovojhc*%2CZ?g)+fQ9BJF zI})HeV&Or^;3FTul1=d?12F_2+kX_+<$vS+KXxi?ZG3aiy9ufX$=ZH5_WToAGZ#mD!mfpi;1h`YOrdta(F8Z(>!YVbVyn?u z0xU;c@|g>I%YwP6z@I*+pEem(xd;>0fMSiFh=4Cpqu;)Y=@z9|@k;VRr?#viHKqB} z5qC`CiX?~~VmgZpmWZ&uzG?GI~~Xf6cKppO2e@#EmyC$2a`Wa4YwS`gh%?4m}j zY(z9ZwJ{6}%Zq~k{F5lp{FC<6`S#IRbXaf1sHVn}p=xSBD|~HbbQrxW&Ui~B{1erU z<)4c1r(cYp2Kt~M(R-?bjz{RP1{8CJC^WgDRNLfhV!8MQiY0B^e;3Q|UW&_HW)U@F zQPk%9gFt4K$M*eC`knxp%U$M~lnwM3Bt7Vgh18mWEFayZ(tSLng^+d9)e6Elx6ko0 zMB--cWkvDBK*#lxBASlo;KI^!Oz}1-uR)55ecIn3VLaYxSYN6k>Js#;#V%CdryacU zcX6HknrdTQgPhpF}!HO|o8bB`>F?Isve2Lh?iMbXP7G1p#8k}*p zfbdDVLC|k*U^m%1$r?zfm|_uZ_=+SrDYw6b+4UQ%LKE4V^H+P1zl!KPn9s{O6c zw$1j@zL;^r3OapxTVE0q_u@hnw5BMRbmx5TVU%C$ScAc!OLqyczi5a8^fWB zbgRGsUkqysa^*CV&MtSEN9l%0*@%#32v@`qg=N&sE%OjGVk6EXv1<>7S+tEQit3k< zisFS^a|hKoRKhkjQTX$LZR;Ica(Y-rCqn)?WCOAI!hA?9hB$1xU{}^C)xe2>K)bRw z2T@eBnU|MVv21I6j0BLH8Fo8b;nN}=^{JYqA7kLdpx}uRe{fZWboS8+ma0&_=IYPm zkq%#~SJ`2X63|!}@e>MY-&8!?t4B6uxVQs1oz_G0BA9_XpC?N{ta@$}rmKKjAp(R8!$H^d&_ z-^8Mu!ptP9hF#x<1i+l9v|yiIVUi5!e^r>)3K}su5(_;?M*8v&m|3AUZH%Al)fzGO zZN2=2$5_VRHd4u6BPZZwv@)!YJ5t1^L`{d#s03KfsU!b1(t+Ttf~LpVwr72veuK8pJ{%JFBNZv})ntS#6d5z20{*Zbiwa zYClCZc_2r@MyVH+66% zRQd``!j=Uuw_N68Js}zuR4}(<8j?z6$l4( zw`nOILS9)4@N&H4@0`4Bg}U&H)x)3;voOa)YA6bGSb|TRVCzDEFJB1`OK0uYX@G*R zINPRP>!kUP-NKQJlK;f`GR;hz3NSIpBjFTbFT9SfQ^D&lQCZtG4mWsv{<^jz+IbwT zQ0qGd)XSro7(*1k`umt*D0!)*F{B0t;Pa{aM74?RM&log$Oy^X09KG9RFI(tGz22P z&kuq84n8fKn0&eFr`knvzGSBwL1VzOyA_s2q3qr{9pG#4D##8~WQRXpFIh1QhAX)1 z&Rk!;6qNH7^uV3D^)f6f$rmX6jcpwR>T^njH#tJ#uMJH8-@M726h5VUOJDpL%EzNb z`Enx_K6_E_{}wQ~*}(h3Q^}6M^OkPWplhZjv0o#sU|k#~D-MUTdXJ{uIMAl{k5+Ut z@t6wwG;JFMn-}NWmqrsmM#GLBRJ_84Jl0rok=MJ^c zXStgwG@t>nv{?B^_AN`@NL@=pW?S@bWiiu6pIEI%BL|Ze*-1r>8$oJ`idb04;!kSK zsNUeM2Hw|xjQj|(fG zp;q7RGv**1x7i9hzKg>$7-II$QK-&G|n&&Fil`cM|iEMV{08ULOcRZY((4O6R zOOFY}`bYZYQuH=-b@@6-UR|WJF_3#nqa@J8lm*H!VDbyEpIu&}naR_H02u$RxBU#o%?FEG6 zfmx1cy^rxsMq}}y3IA|GGV8j9Yi>eF4ih@D35fVglbjf^hZLZ!r*%)mv_$(W4JbaP zuq)V?akDe9%J``f#D62_66WpcCpW7Vbd96lZIQ&UA$%JT;=;u$UN@M~t7?;+mr_X2_!o zbzzNK#*#+hYo!S6;7M#zR2I zB#%RbAGNkcZ`aYc){r_Z)FN}CuTKyPV|nK^RkC;CNrejQTi?2hXJ2>{W%z+lDSTny z|ItZVPhF0KRS``sE+$U^vGdwMP%OjMH;^}J7A+Nht2CgEAbV<{Wk(={wNXKxKWWFu z_O_okP=OVhj`}97FkH_-gI|f=Oy%JSoiqKGX9*PtXP%C!cRMByN}eP9B17kxQ(=*x zR|Knnm3GQvAzm<0!I1bImT4)gP+Kg!R4umiAL`GJzgweaf(tA#`Mc#1R|X4SA^;Z7 zdMVx#&tnx7D)ln87zdE3YwMD z&L5t7%;y%`{?k_VQ|cwxC^>Lq@>gl3PhQd{C6BRyZUgsK%0zhF=Yfq~Ctfk|jbKf) z1YaI9|0FEyKh;mQSFB!{7@SuLHCJ{^kajcGA#*}1yRNx79pzK2* z#VmV6`zOplnFC?wRHI%A_?rgYm)Z&I{+5EKHpDlx?5AQj%5TH6>)bMJK{_4V;Z#F+ zOE^AA1s{EMOserag!f3v3h#3V0pejzRI+91vybIYVlED9Z}8!pnEvrD)#KgyZGDJQ zGPm1+HiCx+tF^%tyM2o7QTQGGTUcx{@@g{hFE|y1J*vE%;v<4C8Q9CvitnQ=*%-pM z|69>JJj6P&MXT=;%3Q|n(tD2paTObLeJxQU!umcVVcbTa*$~3$e4wD$DiShe$OeUH zE)O3nRO6?8ni@N+`xL(LX`j4`iMgMlYp*6+dS$m?2fVEQ)u!Hb0@;Jrf&1{5DQ0`d8}zks0)XD9ucGc zRC+?mnpoJfnY&mT3*k3lIZL8-_IZ{0p#2Jb?&*YgcpMrey7A%3s$^f@p>L`>bD5qW?9C-E~szSPp$;F zOdXWL?e7R>F2X!V#iIT_`SC4a%f0m->zRwu4+`4%V1UIy+ST;5g1Xwcu>wVFx0#p7 z37=zvPMv}ctHU! zyxho_H_81L#_^)UUm0b!xMIQnNui2TG#LuO&jtWbqefe4@yLis%P)j)4qMy1&Af3& zi3RIdg^HijgwN>A1xxh<&u)2g(DB)CkkiSHNsR4%?$_-7{$1f=n=+1nNBR$f&hkCL ze=0IpJ89#={SbQc7xg0sHg}BnbrvWpV_fQn_g}VkxDl$-OH8IXZ(7tfy4($O*N+Sd z>H#kdpJrYgQUM8%TRe6B}KF<4(}kyhhYq(d$@vKe(Az#f07r<|-P=hzaNp z)fw(Sh6d4H4gN@XH3Io#G)(B>?qDMH%3eYE)OioLQQ3=b*zn(U$tk!yWcPHN#k54B zlMwvqaL2%|s+4eh7nlZhp)teEN{`|N_)ru<{v<~toN#DjHww|Qnhi!GVTcQVv12yW zx|aq*eyP*E!^dN^wU=9s(OCqClh7`_k^41N9#~{*xw!ZmfdtD7aR-y#Ta!K2s9@P= zBbi7dGx^i_UQn%LX#UaWl6j*HnI=f;TA^b!6!+0c(QRxdMYpk=5~*cFTC+;v8+-|} zgh_KKJ1|oboQ3EpBv>}1=@faLi02+vu3@TFxuzLW&3_w%o72aQ)g~!kFk$BCf=M*e zN}BBG3R_xY4R~=CfeZtW5|zxsXHn8J-BS$}G46~o!hwk9s7aY_Gjj#`Q5~d<)h&pX z$jd=kX3p|xpn8vwd8V83u>>sMj{6z}27)ulV~iwe9`j9_7l(Xzy%iHlHe~CHL6@cS zYi6o>TY|Wjh#PyWITLL{kz_KtTz7f-369!#JVmaK1L=sR^ z1Kei0B)S{RAL)8;Vt3d#z-=l!4;obrVF6HGtt1jac3F!UC>-eSYslNMtPCW}+S&{3 z3uO;HU}`amoux!#Z-X5wybZUx;+DBVi*ZD&E#kJd^KS+_XNKTCSl4`$o_($*D{wX> zUcq~3;)O#|!L(f+(epd0;MQgJL)`jH9IQbi@@+cMOBq`;9TjmvQ7_ zGmetEGZ43Fy5lA|b9RJrGj-Jf5!Q};& zp>iaOTvQVvMPMM!>fT;ptV+Z`Hc7j#U+|q*kJ}-z4*?_h=HfxpO;My^vIBj+ zn5NLFIwVN;z&=j>y8Bhk#9 z#2hN1#=59)?ytsVF82#Fbc7gGzUPm zGMYcef~yvf-UJQ9Phk5+e!>{kg|yjt=IAWcbU_p|7>ke*TUxh=^8$ja3R9s~WgJ3Q z&vsxH&dE9zeTOg}{r@7Z>%_6~{{;NM+V;PwG&B(*+cqV2hb5maw`{Y>S79lVuQCZ| z?X6ggwO4vtkBshEzZA;{aFH1*A5h4n3I(4nM_)K0D2j-gwv5_iI<)>3b%%l}ZnI9V z;i)pywu zl~j65Xci-48Y4QuwP`X|fJrtOr(hN-PB9%@o$Ykw`FLNCydRzu7D;$?G*(u?*Jk+#+C|Rw{&4tca3}i@ z=v8LSzrmA+Mqs~2gX@5L6+)kUcX0q*c33X0n_ zhD4{kjWJD)X}~?AX|TY=CflV5$f^<}xmXLkLxf9nL}?jjLgWeE*&SB9+}9gT8D4?0 zy52=<`c8+W*6`ze4_@PRdQ88?7!g)}8j(e){1J1LQXs4S^#2N8jNsIHI3{+mU~)-! zxYMICDRu};k%)U9?hueYbHS!y5O;yzSuCb56kTeP2J7Z&gHMK>1wq@NlJ0O}o;Ea8 zWsg5nJ>b&r;F_;}G^E4`@a+vF6+-Z%Emr` zxcd;7bzPHXJ~$wIXwbV~(OW2StgIBsWZ6)>;Q?H77irN`1Hl7ChzDtaaz4U{1lIJ$ z*i5+=TSBxN2wK2abcYFxwFOMX{2oGnUj8ROJTD3Z8*38>IcaTL3C<;MvxuHhl~u$^ z(#QCwu^?j1Kqf*na5a=Hb&GN;DvC;6u7Sv6w^`y&FjNWhOkR;l}DW0u>y^C$r@C9N;s`KTV!wlQ3IJQ&Z2&Z9fA zb+{HOqtRfh)X%k0xXjW|{zh}I0?sVcglvq0(LultUb)Nhw;g0KN&7JbuerZvZ{HkQ zI{P@RTJEc}tZqbY9Sw3?Q6zeS|6l!m0yf{H_1EYV6Q)6Xk_acXX_D$=)I{ywr(n;$ zZZjoG)D~M0Bkpq>Wih=4_px{^x6&V5*+8wNewN!CBJS7B8TrdBF!GlxQDA#sNa+e8 z<7b*ykw%XpGgaulcELWIY?OHHr@#m1=*g5q=(#CL~p4h4i2o)dX5Y! zr6f1@1wxr;`=USp!2XO_il+kNcTvvfMSN61QyxM3CD^gjBrQT?FSANz1a+2nLliXI zgsn#wJ32wt6WV*VRCJxkWCSw5SwUJt0W1xMT3CuN=k3K8YiAclgkZUkLQ`_0gwYmo zuQ3_pSQQJDeD$sLEgH@pqln0U>zNH(0#UA~3YL|*jq0_$MPSV%*>0m=&V3ElN+^Ul zLV5+BC^wIg!~p&iHav{1l>HghLdrmt9eR~elMGu$Bf#<@23|w?6!(kZ`DHGS6nxbYIeYG zP2YxtYc+c;y0;w)E41!W)PTE38|!zl?WBYLNe~MfdlWF>?ooJa2RK2CS&L}!PW*kt zGQ91GcH5MWXnhxyJf^iSYJcvg*6(%;L{nzqY=59)8K^A50j* za;8ne@}q=~9M>vOo`wh$^%0ajYnmt!-#&(G`Zr-({sSe?nWlwI8><=ZRX;&NUF_6^ zDpqSVSCs1h6iS}2uhq}sn*L3!I-f(y3))mNmP~G&mdr1(?QLzEG==SBT180)h<(P9 zWjt1g8~%U;pGS<)O4u7jdHNC2<8bXC<~l5wloRwV8u~1l-`mtQidfX(=G>rgQlVZ5?*$jg;+^A{5vfOr|5V0cX;?E zY8s0sz9h_?0v}B<8EWDyg6tXo--{Z5O~Ax_Uqy{s&a|ig2IU;F0z=z)ie#D`GW6Uf zGW6d<&K7s3Av{)kT7{V*3gLW5?OeGts1N+vVu2wRe(8*fWFrPMsm)2b>oX^RfG?E2o0ybm?6`rupHATj~a8U zwrLBVn#B4Gu9!!)4OM1m`<5w^SE1^dOhu?ZuedF5`-ul1Fqw)_6Ha4FMm@|4JZ4l8 z{@T5*{x>`(SP}k{zo9QYCQPs*d|72YE=0DMbQ1Xw(wP|QZW1*Lo4PcTKUCOMOIdN)a-Xs*7IjN zbcfS#Xd2Hegm{|a56F5`Tb*$1RS`{|I<%4a6Q@q~n5Z=9@|G4WH*nk{;r^l)bAHTC zl|Z9KCO8{`m&oR=c1(o{UG6pKBE?}@8We}U3=Q5vKVstgCf%TH2YNLLL$q^W-pho) zF-__EaKv9x_(S8PGYDS~)vJUuSAMln>FI3OAZG`rYGWbVFerMZ3BFomYui}exI47E z{a?Bt)T1#)Dq* z;FBE}jJS)0tK6%NzMZuYVy(r7lsItC*J8tBq#7fw{N3$_zz;`fo7}Vg6e%mAMC)RQ zCJrBw1q01PN(WbANOjXAcyLuu@JNsjC(?;O=l*Y`Ban1>rzZ81Cd#pc5xc&nTOs^_&B#~ZKYMKsZAGoI&DkE}SqL9di z1(E6WDqx`HjTSuzq8Z{Qti@ayJ5IPu(TH2U7K`bwEM90%auznNtz5dF*47x5A8j87 zPMtT!GZUYBTCI6`#@Mu?Pza4pa|xe6a>mrzv*{4EIZR3n3WHrI@9?1r@pZqqu>O9B zXWHZ`Q2l9O3t0Neupqe5Q+qUkXQy~QFE$-^?sJ>3=ZSMYd{nJ?zjm%?*Zr0x@kILfCwhhZIjL7xo+GOPo8U$rhVaiwYfEBoJm}#~{oM*-Kl^ z9$FMqY}gaAy|CJbZ6WlKrZ?gUHAz8Yq2!R;e6K;AF|ZBn^P} zgO$h4apIFrhLDNqryy-0ewoKi=MnienZ#|*WsH5M-KF)GW-j-LW^NW?4o0UWLgSNK zQ>;2<>A5|!^x4?nu7_IpgiDf$Sv*9i0dK0 zJgEyL)@rSiYsxTkO$RWnIjpYLW(RtOO7m_(#6V;zb#>BkcrIs*!IIGCL5R5KAKL}) zoIb-CZjtAE10s%$Z`m1UerYkF%n0SM3{HpLUuxc_u&zV!|Mg!6VS>w7+W#yTdTNfv zcPA3L5pi?YJKRuJS!{3uVzLiK$lR=?uCS|2CsmgX!9zwT@3}N&PhG>etOZc$c^=X# zy*ao8Z23l)FRn3$0u4jR;;*CIL8ouE=EUkUoTzNTaIk>b7sh;rON4~)+~z|c!UPng zSA35PMA>&*LI&9|mNMC}5d<)^bASQ#2BByCw&v!lqA`XhPPv zYd4ed3L4~LGWidhWQ<)Fi-&euw;-*zD)ES}avZ&mrEQCZ`5u)HTTW{VO8oFhk!c)F zjh%0h*Htz~qs|ywC&mzFhhMWUuz7%%xoS8s%n-e1I2IYYa96-g`S2!hljy1!3vx8# z#-+p6v+g;@1QZe)k3>#B9FPhtGR+4aM29A%L+5i^hr}vA5g$)Gr>!tzI!;2`>z{TE z_mONwIA)NhZDBebIPbpQV34~&x3-#+pGP~rB9sYvm4j}Z4$E5RVNiaCmU7MdN81|~ z4b6zj*z%;Bz>ZLS2G4jz9<3dGD}pya&TRJi2cc22Y}R>M~zmr+i2ACZ%<0A zC|+u68s!f$pb3%|V*87`xmULt_c! zQKlvA_H>BN5X=`LW+Pvj&*LJ8qh`ub=-V6|gFiHVLn2C#Xa$^$8=^n77Q{m9 zOoy;PwN;qNa?9k5y0GORzlu(PFM4a2nuJU2POtb&^N1-omq(VenLRX2%L4Oaq3kcs zhKMHSVH4#G{1ae!Q|$p|W41CYG+XB*uH@T}1+e*&W`zxN#BGu}x`Wy*-PIJ+6!tdt zhb=ESLZQ<>ZMP)UbAcC~20Jfn9NH(tLTr9`XmCf!x}r5Nww8AyWa}>6eXcvM3rl~& z`>u3IysBMEG2$%D{%~Y}5i#WYuHy~V&p;@Pz0>sacpmh*=A8!*A$l>hADp+`$3+>Y zO<8p;LONexf(#bCh~+J0+zj&@8A69vOA)f>MJ#+D)<6sVliSA-%7H3I$l(_qcsu1L zx=Eq$xNxc{937*UAa3J^6w8$tu^TE)2iJ8TGp$gxvyA?)iEb}1Hj2&n-3W2Ngq!cx z@ura`?+@>~>1J;^;4a5N8_>}@A2sC z)O|E2VWD~aE~$kUMNN6ADYNo^0_KF~@#CY$ycTZR1K8Y%wlS6`PQ~T72Z_qo(7ayq zcvEz41(K1l}ITvIVKhNSq8`QLB>^xaBXs+ z3u3)C2Go02BkKKX#BJP!_xd7iVRe9ZS=}ZG`N`GpJsCQ}$F;OHK8(Pu!B8+Uvsp!#+$NA1ikqygqj(M5*Wvg$+LMB&Nud$i6%z7+y`oREfPAv8CTf@t?#ikNYjZsLer^&Ix;6B z4=?UnUQNaQxqi_XkYL^xEXW{m!snQ{cX?v_LCgZ}`n5>odK#{e@|bB{;?(gO`ahy+UJm7&NblKv z@tt*rqJqz+`&DEIV@0=~!A+s8na8{+%$!lc*1$f;SZm;gMp(pkpC<;6G|h9+Yvrha zF1M-h22t)VG4O&H9SxmhG`p?jqG#a$1C^sV0}D?2c-@_~Ob5THz%fu6g-&2Se~6Ir zOZdm-Z5T4PhpyQL6X!`U!}u1Szsq*mM7_#imox>I#%gLxL1h-_FzoqeZ1L(VjvF8@ zPJ`GR!z8OX*_gU+z$ɸ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

h!ei!;+50xb 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%0DEQ~&%AMeut!rf0WnJ?$cqO~;!Am=Z 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

ct-J~BFq9vz8fm3rVU?U`kk(&j-7 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 delta 1363655 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%0DSy6$sNkPRIt!Tfs`=}jKkwn| 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

  • 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ⅆmviEr7$?EGM)`+wozkV?A#xdKDZmYKf!Y8q7&GQ4{s(@4;eo<~ zg*+q|xtY6-yM?=zTVz(6Rpw%IiCJyFD?3j;M_pr{X7O3vIhvQ|p?$V&wKV6p;Laf* zgB*ustMY!Wx|b$kt9 z%`f4r_}6JSXxC`}(5}+1&~DOJ0G9(_gI|JQfveC7G^5}@fI{6JF^maj9HF0wgn*Kb}91KY>32HYNuf1se?;2{X~7iW~f!{9F9n{5$-muw}62 zu*vk}nOCk&(9^&T(2dYjKn$cev=CH~6TV0M@l_7ChT>=KNx6Xp%~;J@5wC?{C8&I0 z3<%SMfFO8t1P_6%c!Gb7zu{{`_!sdV@zU2x)LGP3)J1gH4-LQq@IWK3kU)kKp`Qyr z6;u{fBh$#d^pDh&z>UB~!rz3;oM&ByAW*w1wa&# zhv8y+AiEXGj_SYTw9@SrERU&Lz15QD>WnKN=?SOYE8BAT8p6@(kEKJpNKzf6ficAG*463XXtw*OoL6_1_P^v$f7na<_E!0KIknm!sd7*Q;LX zU+X=!-rA`5fcKqigdY>)Moxn@08y$|BgIQ)Pi+a zepE1<@jgjQwNFh?Ia9qWuKQNwSK%L5wsXw(lb|c`EAd|f2ff2x7Qz4MeX^q(zxu!U zKl>NJcOw?U7r{|BR#{E~=9U$MMcJQz5RDkxqCD)F62_aSf|PlqKyQ@W1!EXH1S3j+ z_~l`#wiBl_=M&{Kp+^x^vk}WbWz}{bzxvh;2-PaKu)fgKg&rEIQBa}X_ssN6z3@~KqTsJ z>Xxdh=?-aU`V!j(?=Jrk|t-n5UTYSkm%qkXl$Ak%*Q@E28meWwa`KBT*bxM)8~&j6*#F$io90X3Wy)5RsM!9}0cQVl}WLo-_w)f|_}5C%jsVuEb8 zY;-o6U78hS%d?5>ylngIfb6vF#;iBHF008JvsW_T*hQ4hijqPgGK;;>=~Q*Fym$Hh z@}_zp=K^JXY&qv)c_OjO^v8tfDyhJV=7rn28gn7(o(#_GO3i&1m5Q5{qAhF9ehY!N z&C-%vE5FX`MWe_+8Fz#pHZf-FQX^9ndAnm2>tt&?-TewwVzRDV=%|iv`^z@Cu$0-DQAJ4LF=X@^F=LLz6yf=yXRi)d(HmJ z{A33&vG%UF)^|_dwqk3=p_EGUUN@1GqV8qg(5pS}dS}CT%=ey^L1{<|vV#of*eP#0J2*V9k@`$V;f5IL|N(mCQ-Pj?A@kGK(PU&Uz;2C@{tktU;m)5{h(% zh|NB%G|S+!1=LX?UifKne8DF_v;HXY95F+@PP9-w|X5seZ z*WlOT*W!_e7WJ(tVCoy*WZG1A6*&uBOFyYi3UG|4jB{`c^E$IoG@5mvoZBzrvO56^ zfqy|dK$;9gu=g-P?RaRXhA|CDbkDMTVpqfL`Zo2w>wDv$C_1NGLPOAPkZb9spky&H zy%SVj7KFWnwTD=1*5l~VKj}9380;792ka;8JM3Q=25>h)0<4j(mgzJ*Wkk(Z*-+VV z*)Z8i*(liv*=X5N&B2^(h31H?R^kgQ zA}lhPCoR)~i}Ff{S%V{AqpB@?m-r9+6MG!H2AhZegBqP7V@E1W^Aio%0uRK^w2j); zbtwGbc{B5m1rESEHvB8=DObtcD)!00%T)@$j4abuH&*8&)wk1E>zuR+upO}CNZY*j zd4KW^l>aD$saf(NdRHcmU6#I`P?Rc5W4hCzFf0O#!al>k!al&hz&^r0!M?%vvip$F z0I?7pq!POgIsi%n5kWPOY6ua375iB14v-*C038UY`c>p&WPwbsDbV!N%+oK4yuIRp{HI*4_^b)asIobx5B7VmW^TXxk9)qy>)q$Q>5l}~8XuX)o9CLkT0h$F zyPCTL?mW)|&wlTGUo^1Jc#VCI%m(lP&#>#U(nzoBk(p7MW`Hc99?$@21Vr6C3H}Jy zctmNB9;n-2SDay0PjCD$g-q9Ta~Mzp@-MM7pa?hE7l9NA z3KWB+YTD&hG@JpA$h6OIddfy=@IsUrB|=@nPKK?50ocC~zY$D$ci0r{55(%cyvhRLCvkA;m4l?|IYNPSb4LFV!Y?}d&DnTOUd5|b=+Oz|D_(gKBuN@yJzE%r5b19n~*3HnlY9!P}1L1Bmv za9F=pKVLswzt-R}oWO3>@7B*q55PaiZb$#ql)onYVk;>-6uQFZ*sp+xoGw)w!r^i@ zAx-F8{tmye{30IytIXAYF^SJyfU;!|hSYt9_^36@*c`CT#H@lvdp*2zgWVWj z6ki(dnV6R#I98VI1NTvn2Iq*flC9u_i75^V`h%m+dB9o5zfZHK4g;Z(I2v0-FZdra zNiypL`WaPaguPW?@zToDoJ&$6Ccrb3`8Ik&ai2erz9+N5)wAdyAQKX+vZ=zANH>^J z5g(xKfF`Kyg1ICx<3zkyynE$&!3o9@(nj}^$|IOfa5N(5DHKj>VmK<8Z;S1j9m09c ze;DC;ZfL#7Va5z+}l(oIVOMeSLE3Wolt=UMD$&B4kXFli@r@`ea})lb7`!{3HS z22SmLZ@mwQc_8mjND#VL+{7QKIF%|Os3kvje!`Rrn&KJ$R#{s@t@4d8l5FemE?VkG z1zuL_5)HU#RnlY;VSDmpK}A6dIZy(TGRcz-%dzk{xTz8}~^H3NHq31~R-S)C$xzR95#W*gA6Cx2f(jkOnyvdJ=?2 zqS!x%Y?(Q_f%-!*m-2>5lN_x+1|% zOJ@deh|Yr68Fni4g)OjMtB#cSD_>MzT|O_in)9T5oe5}$R47SkUJt5KjJIqwhb_A- zGYQ{}Z=`Ou(!7(DmU4CC+6o8B*!$z4e2LG z)_KTjOW}%Aq?uLws$`YYib*gFeUYnIQM?M}9;ls1`de^_ag?;#y|l7eIJx*n@w;L$ z>lC7sExvV*|JLp|`=;qvBx2nN+Fdmu_lBe);XPI^`&3 zG}*?#-2b%Fka%8|lO+d9U{V%&ib0Y=#35B(GP6Zkwx&uQ@0MJmTxfXha)jTwR(T|x zW|ShHiFT3Qk-VRe5?rE-86Oy(gk`J>(JEG@WJeQ;{HDmo_Sr1qd#2vzHK~^=E;22ow~AY=-uO{zx1QwUknM zW2vpgGuTOTweX(s2D3;smbFr1k=ARuk{Q_YNJXT#uDoVCwq2xcWCME=c_KMc^B%=Y<%5+GP&+nBw!`ARSOS!4u>aZ)a=5{sJyMv{?N_Qf26;0|HJVl9K$s1d5|?r%7in7OfX~5+OotpyfWSZ@$Tc7ff&(QXGqmGM2}G-TpSi|z z+yXZ7tqUE0937k&oKDvU7sGwXUG6#MdFMUo`|2YFJ_e#eTo7*R;^eq#0kaWm>f~g( zDFLJLDv$xeg32NP02Tt*!q>n7cp#gAKN_-`_nUJW%Lxm_B(N@WL!aY$vQ`mYA);{+s?geJgFIuxW0xpT2@VJf|&W zQgvNeM*QZwf9kK*j{)Cb@Un0PkgL6RK(3*&R)sFV~Cii z-dMk-T3K#s{2uuj`4QPE@G+V<=<5$iucIb5kYl7+xN&uMRdxZmD}Vr;0Gto*(zNW0 zb=}Fe^t1HEECRH?p|t*aHn$(O9<>1#ZM+=W6>*i@%f02g=y3HA^)U5NbqCckxF%W} zRYld&lBhQ7DR-Ce@%YM{+R5d%a&M!f+*v+SJwkoEzAw)KQzl&pcRIG)EjGM+9ARNq4vUd!a2s{l4Fu)(&p0lr6-l6bz^j6 zbsaIe=k-h#N`+9psMnXXR0S%e3a)~wa4L)nt3s>Jh0lh`4Fig|7PYTGuKXtaF8nI| zS7_B~!*j!*%NCmEn|?cI8&5`0M2|;rlzb7+@}E#j7&k%pQgV(%x4U{zdPjOgdUJYX zdV6|PdVQK?9Duln>XKKJ?{0jYdXkdo(xS8^Elx|*vh)?e7Vw-VbB4Uk03HZh6!|La zE-#k1R_u{~lNT$zGNNn_dJW(<=niN}q?eHrJ5zkRI3k^fyNY@i8im`3|Bm}uGZi-y zw->(++s*VMJiLYx9n{E-0%M|BkJyk#66ZKq!W+ci#0NDw`AS5KBvNT^pQyE2Zwgqa z*)G{zxO#bHO<$SiKk08}>=C?ZYGXE-g4XG_%XW*Sw@2<>;6?bx_}Kna{?^8x!O@N1 zWIg0cc^k!E`M+|d!Y3oihQ!F}g^@3^Zt@~|E5&a4S9wvBB#t0k3#g3D53U1r2VMnt z1A1dL0-eAhKyp!Nv;$>h;4(B3nXMnJcNqT0?QF72Y&G1-{9vmo+Z3gRjo3$kC!8Kt z$IFw1f#plfYs=G|%an<+Q>FV#*K(ehF9$3Gv;(#WZZJ`}rBrxD>q0dN%j-imi(8a7 zLVZx8WwSYIA=CC)9zkyN`q91{pCnPKhSZqU-dJviwS(?a1vW8F*E5vTAJ>6wTw7P$ zu#&eW?^NfT6ulknZS|naEp}XZX?$V0dtzpS;#gerx2jCt6WpChE!mrx;rQZcbRKb< z`FCl$RA(r-r6s4Xi}LDv80c^ErV2~BqMem8tHoHsl$ zP--80oB95#*j{lorIUQp&8W!zN!%!FPpDBQlI{JyL@WKzD^-byRfWl2$srPiluN!F zxI~y}0LA}T**((`dKZTV=Zc7INtHO>GkG|;P+4mr8y@RFmMXPq?WNLB`bLAsa2&VP za9{5OT?BUob^>+)jxD_(@}b^}uP78nJ&N}g&CFZ^clDouJ_E{fkRH&g$VmTN;2Yo& z#4yB|`iJP&U}5RR`V*M3^#c(b8xMqc!AE&+cxt3%PKt7dTg+QQZ70^z=CfOn?|5!` z?t3!fz2SXfO5}m(gR=$yGi@us89iTcjQ-H`*t1e#WIXjmgg)j!LOx3`n#p?MdF6TS zdGGnhGgoq6lsj8GF*}}nTEQ>+t2mB$k?-_t?6yy$VOuQMif1pS3ehu z6Sw;EIe zs`ogBGs|cqoOgt`hY#p43|LVCV{LGqXn?za&b`^V58eyV)7ahE!#JZ5tFBc?%p6mR zb*okCxaQ6_l_ExZLH?kzE|_y4Fh$K=liIq?ddMzwTz5Bk2;NcNo<6WYWULPkbgMY? zDd!+w;9T%e=T+!gcmOgJ5|efV5P=;`=agT9!`*|#g}m+5g_Kju-i1Sni;20dI)XZ@ zCaasNbA=;`%Zb|xClNOg3!;j2VY(5{ZMtx1=rwP{^?BV##Z4Pzl=Gh-!V z31b^$JL7ufK;&9ve}ux330hM&Furiwa9VR7QI;_daSn1yxPGc!AmgoOREgIzp7Ruf z3AA;Lk?hgzQS7F=ZH^q~hxkuun;5J4tN0!1D;VGSU-^6Ks~AmVo?sDUF=GoOC=3W4 z%$>pDHb4PQ~6f(uEajVrf-}c;Qv0Lq9>^JSXTlOaWnWK%Xt!tV4f9^q^!5+0& z<6Yxj>m~WfzDd5xzH>g2U+ll&pAncD7-}4D9A@kn>>u1_JRR6>1jJ}DAQSFsOSx(S zn>(5NQ8VPQDPgtQ7T8|c#@cV&9gcRcBz-sihAZs8&G^qf#A9P_Wd6k}^{(?$d`*GT zzx|_)1A=DuiHJAqi5`ytsE4T^$O6V&#sU^U>W=2eqOqQ_UNI08%!Duzo&pcXgY}?1 zI1kc;_TW9c(5H}#3dUkKVzQXs=+nr>1>-QAFb$af=<~?s1(Ps^=xvxjgqFA#n8WBx z$kheYFuO2qFbB{VkShu%V{%34PU!8JzJyk|mYBWhv&f|d6EJf07ECWfb6hjbLG<6q zl?78UJ20&<`_Si*%L*o96zHv(-h>vo=9p=e>6An0i^x?4Q!zU+tucGhXOK$@#$#mY z&6u8qX1GR7KV+m~w;;gS7dTaXviKy16MksC##{*73X1^~z<=Qfa_~b45^NHrx-?oA zDXRr%z(jR}dO}^&^w~MxSmbNU<@(l2e@a=BHPRnarUa+1Q?HZ$lCmZ1rN5;d$wSs2 z@_w>Yw4QZVWMl6mJ4EYPXGB)^JjyWQ65=-9DB=p@1mZg4BQ&R2A7+Ni!beMcHvSj= zUvw`1bIqrkoWmFd3W3#>)zsJI=JezASu8(jXw6yUW5T`2O3zcGm$<0-Hg~V*I6T_m zX`B*j6@C@G7#b{&n0AGChTl3Rx<6%OjgDGX`7&xFxo>U1S}4a!c@KC8c*m*d+@|d0 zY&G$@Ch8up(@f`$qy7+u#4O7(bEAb%J7@VT$9>2fMBBvf55t=-g)WC?@Wj?tR*9{T z?UIdY?_%F!Zynwp#zt6<{ov&eh_heQQE<`e3o+`9dbFz8r_A|!6%HXTB5u*))%EIug(HZ|i1G5ms3Pi&PAlA6IFY!XI9xSS zb)#T{t8d^A;WptO;Vxlt;~;fTeUEs9I8u;gbZMX!j)abYJ^{H{Cdx(*ovWu3ctfd9 zF@x5T?I2$j++%2jV}%`4n4V*eE5WMi{P)1(nS35iO-X`hC!`0f@$3-1*k zMI1vMN1Q+$L7YUKLJV^caTh|z6W0>Q5!VopmGmpDBW^4_S+cXR4e@#ES?Wb9-gu?% zW9maL^(oa#(33%Q1scDrO&XHsuzG}MwWgWogr+E8Q2uxIS@nJOarE=d!|H=IYR+29 z2SuQeg6)X?$*HXwSar61WcljyX655KRBG>n=g7se6P&l@HHoJtCx&3Qa%-uWilc>M z3HWQ0qx|DV_xu9`#za@#t14~sc=CHerl20V(|AkL zO)4XQ3urT!YEW@_)$B|nR1;bn{2s@b%7V8+@H<~ufdcsl3|4qvZ6pSmvV@z9s8~mW{ zSK7byxAwS#UDUStXYungC~1T8k#!K()JOzSV+%@k*w%txj2U$}>~z9E#obF{$`Q(V z$Vl11vGayd9b&TOsF_Y%L|9Ddz_ycr8E0GhIosO!Nk?<%X=iKKG8fKWAFmM58JFWj z;)5!$2<|d=xNjCu6#m6r%*3!5x@oMwUW4R**=Xeeku{(-4ws;%y))n9^F?%atYLKi z-26@X2l9Vu+T`De9E{Wh6~L$xSNf`Mq~d1XkGc70_#pZ^ zK@nq?Fvs+je4u>i&7rLq6z3STg@c%5P(x9LsBs}-ctyA%^fI_ryG?tfP_FK&F2QEg zUBfTKm#wP;y~|3mSFEc8Pc&b&E3`GbjBaF2J3+o`iMB)JA$5pss_c$JRkX5beQ|9A zHIfhRVp=R)BvWdNHS1(J%>Ye*%_7Z0P182h?APqmoKeq{jbi3TGn3L(`fDAnOad;< z+fsIbc#;T7zXaJzmSb`tTfRBZoi~NJi8zh8g}9|~DseNhU49&@gPLn%P%U(Ay0Lg;lk6|pK@1vNptga->K zfC<=4$Yvyso^ObA>V~cDi(b={ipCMY$Jr8QcYU1>6<5(M08Hsfda;g&Go$ z*OzJ$w=8W2^+QRPE#{boLfdP(!|PA`VSJiIry5gZQ~P2wtsQkDm=N~30+*Ps>lI4t zPw2olo~@g0c*(nx_o@pvvc03dogQ4d)s7D@i!TcINX$x59ZO0ss*LK{svbEatz?sG zUt*@?tD~9osMEr~N7JXeKruxbl1V?e>QI%W(%>qrKxL-$o%F~2#qNf#!1q4_uR_$a0J2)DG{zJ zUR^w~_ch25|hp${v}<(EB(nI8Q`kORFUDUdg?PeF$_8hJqalE>hMRD26BcPo*j? zMtiyRv%Z<3)UZ;&%e5;|7}st4C!7Vj5d5g!m=6(1B|RTLKWEZ$#qNxV;8O6z}*Oa`eT5d5pe{hk{ECyHL$MBwWGVD5tY1qTZ}m za*ITu_{^FjVM^DC1Z=wuB{TXoK6-3utW#`4!~<}h*GRLQ$dErFke z4Jh1Pc#nFAdY8JpPz65$gJ9NEBk|MB`K(>i-O`<98>3?zj{%MXP6JK>awh>N0LKB- zfs=ugfYX3efm47xAv+*-z#ic4;Mw3g;2ps2z-_>-z%9VFzzx84!1ci2;9uaM;2+@c z;1A%>;E&)>;6Bhwcm+HLPr%FJEg`KSts!k7Eg+)-qW~iTBLL$8;{am;V*sT<4Nwg% z0UCgMpbn@7zA1cfD99mENDPvI#3FG>JQ9s$k`4pT;gwmrw!Um3?h)*<)gJRqJ${^q9J_b>r$r*NsBltFNzC zHUzxi3t!Yd2QooikPQMtKoBp0ED#T5hky}K!~;O?Ghh$+C6EE)fVwq2%ACwR$(+s% zV-Fxt&^{OZ%Xr0bi3Fl8tj(-bq8*|*TgP6h1#p&8jwl?3uQ>gyhL_KbZRN1J5o#I9 z!#hRwiFcZ-EJoTP%QC`RcAn{Vl9+0pnw&ZsTVOq}gWG!B81~iipN=-pQ%*~YQPh|t zwJL5?ytwK_lK{%%!e!?2yVGCruhUn%1{DQV$x5=jHa<@47px$m7#HJ%;sYyh3BEAS zllHn7SC$Fq7HgE{%pb-6%miU?rh%15=IXGb!z_^ZbR{a;$IGsL>22fdRe-aj?)tx}Ubm@G5q#!84%3HeO`R5dX3C0-C*DvGg-tBT_5lvdMccSqx2 zrqa?iGz@(J^8xiyVuyCS_5?128XW42dJuG#CQ%MnCtMfY01k}05g!QjhC~g}dRit| zI;ix!c67rqUT+c*UYnT*aP%MTU@l)Bn&@^C)@5d{VU!>&0$|?u71u=AeV2gPZ^ot zoUt4Vl}!B?^AHED9fBOK-%kDn{{mkCn*o~%>+9bKs~7)|p+)JWKN#N`IiLsN!J(hk zbxgNSZzF6a1Vp=7BAgfp#(g99$5-J}IE8j?xL4U@;3ME~=m_L?$SzPjh`Z)@dJ^h? z=|wng>EpyM?N04UTrFxys2}QK&|R8Btv6iD{AQ~tyA+1Pme@y}ZdFIi`Qc_PbJox068;>tENIL+7;@|D$+w4ir14`CdOGdm_rsKZKtITH!Hu%>rJD} zzZ%~qDXDg;X{jl^6EV7Vnzg&`Wd%7gS9ejzvUReZvEl9Q?8wTE_QmmDi3JIw<4|I% znV8S)efrxeST0_OW-M`ovRE^~z(!upr=F+{rd9N^r8X_p9NO;faA)`@oy^J(TyXI8<>urIGyBO{<_Q?v&N% zly7~pWNUv9(K0_e@T5|ocu^%!?nve&P$`={)qspctGZ^q!8dVmaFz(iF0InUyC;__ z^)irbkpT~QUWZoKs0Bnm^o!=JW`wz;b+$+E|Hn8s*cHFh8r+Ke&#aRFQqciV8sFjU@E+LI)N-X%7wp5tEPesVu>b=A$Pqt#zA z%7{Bsnt4;ShaHC{VCAqsu>WAcVgG~W!SmsJQANbnC|k|Z9B59Ag5Hw4NCJ|NBulDP z@%E^0C?_k~fX6>mtX3$CoW$Kle;2LAKvd6_?Cko+cK93Er{XSfH~gV>Z=k8#5E>I2 z8{&rr;br0FO^8Qi=y~u(@CK?6WKSsqIyFPB9&WBSb+DeZzPJB!|0Mh(%<>$O`@BtT zbAN`La|Es$uNcP!caaCkpGben`pO~vRkTw1V`+Onj^0VJR}g1(5dJ5hAGjb%Ny9R_ zOv;%-K?^p+e#`pFwerr2qw+s;y&@uG$U5)|^l2F|3<|py7#+=LH)I`INfwJP)UK{x zR?R}63hw}Y12Ir*#oZ0v3~dc<48L-q?`aIaBw~vsVMr*YOa!)<^aqgv+p+U-3vgp_ zKXCJLqj4{Zo*Hs>tmqW13bsyMRT?W@QiL;3!VX1@K(v-M%kD$1LA_UYL3c%e!?Xmq z1-AjKGK^{(ijC?d>nwAWveSRpeZl+zG0-S*4skksCQMiD%qvi*)j2%+5$GMLEkqL5 zgiFKo!zE#Lc${LqelPT=tdCqH@2EH||DRl|2+3%&H-O zmIlNA@Uc)l{0Tr4M(w-7AK{%F(DHC>ctQa?tFw>sXY!TKy^dAo?u&BKj)YE7C6_i@wm! ziA;$wV_%|AqK~5UBHyCySal^XIx8|MGA44a@_Y1NbW~(S#5-p;=irjC*T1gSm{kfwR(bJL@~wKVv;-Eg>IM_zPWyqoVE7G%=K7 zrma=5idJEURsSJ)isl#R*B--PsB0ZvQoOWS1ed|r!ZyOha5;P(Y!j>&>VzWIhlwfm z86t#k(ChV6VFXGd6D$dpTqe}xiH4SNJ^T#*Iq90uCw)L{rW)E{C%TEdwVYg<1YVP# zryr(2ioT!8<1C>ZRM-khSSB`&ZG(NmIi5a|?o)NDd`S6<@@#pA^NiB1;4yMqY%}Lo zc@%U5T$$KxvSXOs7`33HOQ8^X1-YABX4a7&%bdIu)bApmwO2#J}xg`ryoo7HOz&gg`; zd*~jvktLr?zNjwRsP@iwXypvdc6+n%%J|7}|HPaG-Lb61re2_$s$!RHQO$O!(EmDG zI!`!ld^)`>Re`1zu?q4E>Pan%=T{x6DylTPiYqXg+5E0KdZpqi{~!9X%nFx0G_dG4 zbOAJ3B6Nr#LX;zlq2Iahxhut+w6|GX$s4sd$T!J1S*yvnSZm04 zuy?VYvz@Z<6zB7%=dVpKO1~hg^S9tdpuP}__y)LWI?!;}uZNhECZO462e3Y!#sv{!FeC)FNJ-FAE7o_nT4Z4G} zqcT>rRy!2g+(FFYUKw5+sKSVS0QUswYzB>+lqt$^&|~#yxqY~cc{RlL#A@Oxd_@Kd zJy^d=zgpifkCb1ZAHu#)A7c+9heUf=mqdQ{V8k8#LF`@pA?!xOUj0Xc#Y73;GyI#_ zk9$+u!T6RimNW}H8#~{CFl>=-$Dag6Yr-|2Qg3MvOR3>DqK1Vqlxl7RYG{a(t>?q& z3nfL_TxL*4g|7mv*RIq0MLStO(GJ#%`gfrzq!=oS>IL~2 zZy}!|@5q~3_$oaT{}p$}GcDl4%kfhDJA)GcUJu0og=vrJjyUU?9&qCoco}|`Y++8e zLx$D#(;SxVlAV&BR^L;1%=RpJhO`uL3xEaH1zlz9KpQ|k5i|1oAhyV6foA|_0-*GF zh^L6j4U-y@ja7|h#Xmp|pqKfb^Q!av=GEobp*|5eXxD^WWC_`FtW@1y?Z$S5ZxuM; zUdDHSqvNYMfPIJ+K=(q1LUuuNgCVmE_d$k1c0-0h<`mM=3uDU(pOV{Bg4!b$$CBFk ze#jok+`>Q5m4Md3mB2UPzR)OKB1kEtbN=-&{Mn=n1sK2UusW~MpK-WOs zWk0aru`f|yBwr;|LJj35c{b~yK%UVRbHv;+XUraJOmAuI z5jkGBr!Kd*ZeN|EtPG4#%gQr=zameF9%3q*jK*lA1S!U;{L}e;kb{s*qp#qv;Q`yN z$jwN{*guhdk+!imF--Ju^hmTkmWXwWEQ~IS25T?n-_QRbC2%5?&z$C*2bBFB3D-_N z%Kao0@upLO;*?lo(a^fcfAdDt6!L-WXpS7Nf_O z8M_3}n_8IfnEP9vSV~P^>q)EGHrb}OkF;N~8y(M_jjjtWr~9?LyGQJu>xKA6`sn^+ zep8^iv1^bRBg9tZjck}=?qU6GKjiiM7YDx-3}_hG(7&N~W50$$4Y`J?4K>KGg*O!| zitZGG0ly+pz;X8AruSdbUe;w%fDK@tU=JZjMEh7*L_zlQyg`UBDO>GW_c-?s=}zec zcl*d#&#mOz$jZp_NO$oj=}`9p$$rTp$=OJ|FfNvkwlNNNC#@cbz<)bA zICxO9KHeCAVoEtK_}0Z6;^MMW@D}}SvOj-(=@%3Lmb-vSOV2~kL1#dxL#3eK1W!z$ z?xa3c_d83=KCbJ^9tdj-YXh4adK+X*djf9y(v&}xHPlyRK4T6mW@ehY`5=CuvAu<5 z>hAL!$2O=MV_8!}G~28}SO1I<`aeTw;g@FD#_^k$ZWTlcL8ZGS6$J#HbW5yz&*EKg zth;-A*4^FR-QC^2J?nh^8}9pa&ULO|d^53>E0at$q{`Et`uh5&^|KTG6DVeN-Unue zc{guomdRt8^Y^e`@eA4G^M5t|uq+dg)``_d@R&WA#uaQTn#r!_yreDUc<2e?JI*@# z!s0#!4~s7rRB)Ay1Keed^@4)Jd|t1@R|0b>SNN%La%o}NDjv6}f{)`5D;kr$PLG1C zd7BHXc$*4^*q5LmQU|4F+LZJo^oTQ#tgg1ANw>O*!p#l)wfX58+5uXtZjE+Q#HHJ) zyB1H7zZJ>zHVKuYG~ogG5wlzHu#ZU&lKc4<`mT`TzA*Db-njacs=ca}%%{F;=sDOL zLoQ31pX2{cYAMnh#%u~(nH6=L@{CMwV&HvmX?O_eX!nAa@43@u^zmc7`P^|5(t+kNA1}mX782fUq!m|K&63mo2Cx8Lv%u5#ZjtWJ2SX9$O~v} z0zW!FnPa6t;LM|EcgGjlgzm254-j9_C~FeHRm~I!JpfY-dvD3PHy4=J=d&beuzuA8<8^)5=r5`j?{m)2$yw~(?$x-QB zhbPq5*`2r4`7|K)-VX{x+d>0Nk!8%>+co2K5YMkb*Lce9aJ})sU9))PqLLub^S{te z6h3FaYpyh|qv{@N->W2QtopoaY{Libacx>BN-K2Rbmz58wIOu}^+MfU?JU_m)pvFF zJwyo4*U@xj6cyDtqNBv=lZe%p&d!_8ekyue1-%dv!7mC0;%<^%;xb*S&S3>NVe-$o z&$^G7o^!{`prY%-o#OuW+4|9x6_inw<&;D6QL^5m1Z9h6t>~zHtEd%am~4dXk?fgF zU*Cn@o7snn%3q!zEk4S$o{uP&KJZe3)~ zT^C*-2U|LO56V-L*|yGNWK|#aRY|e*xnv}_E#q+YZaH4_+q=`zm8U50Q~IK&B;GNO zFFL9{tL;_uI7?nscaLmM^eG-!@PNC%W<$-CChHnTq?^=TgL_ed`e1#iK3pHEUr~D# zIw~UotH4q)58PJ*2j_sF*J0{bAeSTU)t&I_G#rYp`=@pzXg}y}phIo9+E=w7Yp2DB z#r`X$>Wg7N#ec+yYL){H$S35*bvILYQuoQv`7H%mgMclF3fBmp3)n)Q%FIXeWl$+} zE3yH+uXt*~uCgZ$lhSWfZ*vD{uDUt+QK?93PO5)uYHD+ompoD&C}>`BDS0_L6mCXe zXy_H~6y?|P5l`wK*VSddD~!rqtsf9K}74KaB2=DVeLY zc^`x>Q9hv);U}{pmJOcvjqt7XHS>*Q((-#@o}(AmA7j4t#l24rHax{>VKw9v{D(!Q z=yKTXTX<5}Yb7|sToO>nVjQf_aucX_$aoBWwID%7(IT#qGIW;R; z96S+J1-jT2{(^Wb@jgy>dRHN__yPS){DV#I9xRRpJIUgKNmW;};%1(6>i)P<#Ve@M zg3F$voHB_x`8p$PA2VZhJQ`t7gk|HjS+h@m6)l7!u{$brU#g@ed_{Kx!f!c9wmMnT#+ z{&FG2cgK;>8MYm<>8fs3HLuRIkFo!@ z_jaJ1yBd4+>dTwDju=A5E5@#-JEl^D-n`4KwT!Ynu!yV!t;ejgioD7(mG>)Sw&ONK z)!nLA)pYxKJK*S-bzq%)ovIpNc?;K3L)duL*v)j;RAwkQ?>6f!qb(0DV(TF5ajU!{ zzjAElgUYz=gw0rWuc~!*fqjA<`At9Wz9X z*Np!&-81nG2J;@X-ZIAW$Re>0ww|ymDrlACDj!xRY$t7|s{2)Ksu}i)cCaJsz&rOl zJJo1v0_Ck-2Mj*r1!E`E4O6i}ZQf>9T83HfSjw#ZtcR?k3UcL$%G;G8+hJRzN?Ua^ zTh**O*FM_*%iha@bnbMvuaVU>DbKhL83M*j#?Gc&CZ0iS-eFc-Mp*7y1dV<5N34r@H{0PQz@-8tDT@k(7ni&`!D-e*RlX;(coJCbpP&uJ8X|q&4tZG;7;1=Qv3KPq$N@iSiDvlZJ$`mq~1}m=BmwSv3`pt2$J(>{IPS9Asy# zyqzm$lo=|`ht1Eb{;4ju&#>n@8_GMn?nUlqBTbD8LzP)q@uI3rb-puG{*Md8bmZ+b z>}7e3O!kEQ-@N(~w&|R)gQL9Y{M+J(!9kiw+yk|vXof+SPxhQ6~xM6 zl{YKxoL97fZ4t*yf6rM@KWJ-SrLMYEK(4-Cm8rIIRSZTUo!7gNVjpS$VejF{T1pYl z&xPBak{T1XwtPw{vn=IW!{Zg5Z1^L>F>CVnv)=OA>`D25dESy@QyHxbtG%F9(4)wm zJDYvGYzfCtPYFMAHqx&YRC6_q<%~^&qCy6*Z{b@(MQN$@G zl@)DGyymwR@B}x@8iX4JuLV5eTF@%cYS0=G1t0<>fDE{SEDmJVTl7s}b+7=?12F4N z`dXM9rqQeQRWKXO3zF+CFumRZE7v<=-2o6NsBZ>S>MLMWzypLqVITs4K}67F&>)}# z&>rXnbOeR~YLG;4gz5BJy&YB!ivuwr3SdBJ5DHWWWI!!JIiOac;XpH>DUiy7@SvZ7 zQE$+@U^TF6paJ*;`~n<+9jFD;p#Oos19Y$-=moR_S^_~(3!phL5C{SxAO-vnZ~_Xw z73KnJfWN?C&=AldP(M(A&;ZatP;-z>Z-yy>1b_wo23i9lP(2Udbo zL;?koQDg`iLxz!YB_=gl-m0gr0l+%>cm8+DsO1HAP@-Y9n za&>xT`bp|>Di5|>dz08L(=KgFN0Qd`NB{yZ0dYWFP%(%HVuJ|4f^_y-dP(|aIv>0u z15Lxyko3TWC*336GkuwOiFlF7@-cmLGP5#gqSEMv==9{Y42k5!#_-4T&nRZ_Zz&!q zDx(|`Tf`6*i2jPE2*(OTNthTau8Owix8%3yx8=VPzYqs9c3l@zXVUESku)-MDvi&q zOMghePrpk)COjhakMxO*NDWT~QY%x8R87j6nw9!D)i%{8)hE?AH7PYYwKio;t;(iI zsgjgBwJ#0HyhFT2yhnUMti`Rz9mB1|U5sCdzlh(9>Z01{qv)R4`^bSUDi3O@?h2*o0a$Sum^2{b}Jnn_?2ScC?`KZFKxT6_z91AHBP6MP$d4Sbt< zi+PiIgZYaYi|vW*j_iu;jU;0og6)F?f>N@KEFtgl?e?AV5y=EHo{S?0$bNEn-~W6g zeJ@EbNY6?C`eyl7`OcHhkg#3CDaOC2%Zma25AWyPi_ur0ci@U_crk+yo(J>42uj44bKc3d=*}c|7rMT_+j{N z_-3FQ@hmJWi(^??qI_X~GXF020`?+yXcLeh@Du&tNMA``NJ&vzbVQUA`6G060lEx* z2z?lR1Fed!U@c}XVJ%}VXDwyjW0e>MMxn9P$TyZ5ryBWG0o6pk#lOi13#KF{CnhGQ zCJ^lAY&iR${CD}C^5645@ZRy>@ZRzYOJvy+MTxwmahFgsxg@1ZsurmlRCS12gc6}Z zU`%L})U?dF)cD(2WwM#(nTRwj4M)S%2s9sUgK53#muWJ25_uwdIXT5jvnH^n=T6I= zn!5qM3BD1&9v&5h8Wo9vAS{Ro#tU|__ptY|_pU8i5GU!%`HjXa4wjy#LZiJilo z$K1uNQLI+1Qp~}u!yM3D)&Q2j=0E1&=3i!lCC@^&7#cwS#q~bf$En{6pzPA<4<|>;%|Y*hJVk*m&3^*cccKQG{S3wtBaC z4|_*fjHwt~alPVd*~_xGWo#S=SB%r)URJ!QuvbPZ!<8#4_sRFm%P1y_hN7nItSqoG zImH|fhs|MecpNULgj2-%ALlUbIPDniDD4RC1nng45RF5Zh2>#KcoAeFWHDqx7V-@C z6!skU1U3gc8|uc@;-a`5F;c7&%P~|;F@}QqhK6IjR3EhkH6a-wX^Or~`bP z$R@N2Y+Y@|evV)1&t{qwlR0EI`F~BiHF3D@?rJwU4v9nKjCfOVYw<|V2+nZMe$FtC zp01^<=xVx#uA}#$E9tdDx3HV=D(3>{BIgq4GUp11RLn+>r;nwNq>rMHrjMa7$Qeg} zNFPDp7T+2_8^5cZX`61FVVh=~YWrwYxZ!S29k;GHTh};>*BR>cb=#u@qS1b@iE9@$Wh1<$RP+4j)r657&r=^1FsFbg7M%m;t=9cqE_~gOefn|x310+a0U_q zSQWeqS_P?^Tm_1N$N>2-X^MEN_^MbgsrNMTH23sW_fU6NpI84+?M7~fZi2SLwZUbx zxYoG;pdXv{+m$DHauvE}ll6PF+d;K#vu? zryukj@Lch9^>pzJ^ZXO&6c`*hR(!M=%-vJ4t6)dL_JZ97I}4DE-PAqQz0}Lp6;;cs zmRBvUVprdGeRGY_|I+=`h4mqQ=dA7@T_@d?z|_FH^0?i&!zCjmBPHu4mn63(zp=lth0;b!hg2^uk`^-Pi~>f8k!3LMOCCucOCCy| zNKn!T5`DZpZit8D!@0w_%ebu>tr!y-`>PLDAE@3}eXe?ke5bs3)Fd~`*KyZ!`?CA7 zS98~JpK_-$W-$KCozD1=F;PE3KVCmyFi&ty&{^I^z8b#^{|NsW{{;UN{}c}{1Qj|8 z-%;OFKTr|5v!XMz(dIBB%oAx6$)zk(EL6OSzmCHb#vD_QA?JL~xty~(XL3&GWZ=!< zP2p*H3SJ{^n$s)?qd{qq8nh-yBh?@@MrOALtb4D1S=3yf;= zH~1$=3K_^oayhx3y^X!C{ixkVzTvMS!(b4YkJxB-CO*|Y(>>Rbh~=^4(PPowx;?tR zIxz9N?uPEF?uzc3?y`=QASOx^*X-BrH|!2a)DdwkcKpF%@PBbP1lI)+;Wa^La>p#W z6L~P%L#`(`A-D3k^!N2&BV8q(XmY&C2LC$$djE0%LegB)9MS^Pe9}D9Y*Jy}zVM## z?(o_0G}3GAE38vfqj6}eHFiyv21(8#Bgm3cQK`7JS?Pb#57A%IH=5U)R~oRkid;#y zk;nPR`sey7LbA{x42o;TE^*c_en@&ix=;G){o#fBwmP;rwmG&t?mABE&*{(WFX+$e zFX}Jp&*<~ZTaa6lo0A!_XfzUK$Gp;j)F<^zgVN5@A=2^E=UpHO?rr)y9#N7Nq0 z#hy8yIG#ElIUYOQ&YF-jlnAArNoT^DayB?eIXm#$^L(tfSzbGymo=U@&pFpQ$9dm5 ztX`Xd)j(??HQ<^7HK3XYfn~&%#HGX)#3jVV#QTBe#6?7*SKu{zW5hTyLF`7n9lRBM z9pr|JL)s9ZEFhPWVF(BUir5f37J7|&gZY7JhpERjV0>slI*tAs{u2HimX%A(ca%S< zxnGm*QQEWgf2G|@yO-WB1W1lt z=mzVC>jvru>9V>3x)Hkmx-W#!gqgZoy7`3Zx*588gl9ERYY5zLHQab{oDlHA1YcZb|T zcfu{fT3u$B#no71<67c^Qeo6*o~NE49-4$M$(Qut<5d*ZkD8w~ziNaoEM=AgLz&E* z#GA;w%|jKTi!epOqT(Pk$O;w(*+G4f?O}QJp0C(%*zedc*m1ZCxcRv3cw7YE3;#^{ zT=`V_N7*sdA=E$gAoe4|QMClO0&hcYMYRUE05=CCAUO~u1Pwt!;1C#OhikWMr)!t% ztm|~-RODpjOr%qcjxWO(;5(u_p~s>>I6stV&{}jAdNz6vdL??YbeeRgbh>nwbgFcQ z^qh2xRLPg~BYYss|5H}XA59uX8c7;V8bTUG`mOz=%_HTKsH7*Vr>aM)$Eweb?VH7F zwz^!+QbW}cHAyW~T~SSHnA|X>VPeCrhUcPZqFbVyBADo@=!xi_=xDN>Ss9aqQH33UZ(Ibj)LDPad;Ct*8b8{tgD zf7yml4R0ExAPGnd(t(bFj)IIJ7wC6-d-_MZ3D^d%1lNF_U?bQ7?wdi7U?e!{wiZen z#izl%5{P73W^v{|=ppC0nG-@1@gEeW$}RkX{BFt_ z$~xsK{;KrTR2gcIwtd=?Hl{1mQ1JZp;xrAsG80b@N;s3f((AQs-|UPmIwLtExhc6f z2}%7;-bp@5HcLKA-cQ0)uaobSKa-!5t&%;GXVSaUTGSM6U+t4Db#r>9&Zt|a;{j)h z;l!B4fW)HcR;@I-8#n;W0X74xfd#-!pfEEmB1Roo%;DRjMIyQg5Kj_@lMr!rv>pGY z*r7X|KAB#d-k|d&gDHQqCRvyCC7UGclip-7S(^+b3sSD6JGnRg5wQXHDz1exz_$S9=V=1)jWOXRRS=YQlWOVX+) z2o(ZrT5ha1k!TxDQ^*LWUFJVd2s2wc-8b%aIPz z?e!${DDxIf8_nAIUB428@lMcmaX-ec*T0Tjz^qlw#T?XtEcuq}II*OiWq|yJ{H5%u z1!HYtJ%9xQBk((QE3MdCXJn3NY%RL(U8EJFlXtQgUoiteM}9)4R%9vi$uKrzn|EBr zwX%0*T->XQXypMppJJr!sx0N4qA9`~p>;TvI2ZFB?WZOsITEFI8+LMVdyo?l+qnLw zO-jj5H!R*vJc?6JuM=M5OrW2S-&4-AA>6z=cf?q?H##sXjdc>QL3BsBgL>KKx|#r@ z3LJrxr->C=iO17RJ-hg=v@Pxv^a1o4v@%kkMu*HZl2D8 z-EsZaMf6>C(*n1&t#t2+3a}Ww5C0cAM5eDU<&KhEmawHojHeP~d<3@*<52Z3d7r3R zzMeaiF-gBb&{e(${|pZ){7C&b+7?!ds*fyIWOEWOX+oS5V>J^)zqy%0yPu@prTbca zr~YefcK`@gklWkq$WT~-_(Erh?bF@VkrOxVF$aLZDfox%Be(Y7BVBE>(Z7gPRJS)g zo#fI;OFu^6YR3Di!hpC&{L8z;aarGi9E*meL#1C(&ggT8E0l3|7HmX|*#_bLUK(Q*%v&yq*#w(I`YJ+I-#zeE5}G5A96_dvUN zy*uodVk=y5>T{1!LQws#`ByQ8hb`g+Ii88Q?)VqVPNAQXV$~kk#Rvoc5Bg(?4m}tB zuT;VRTQ-LDSDR0Irpj{FF!edr)P~m$FGYCKebKRo0S!ZiM%47o3vChU7wA9Y5$%G^ zvUGF%_zXRAK7Am4fRsos*KN^>br_%!JO;!9Z`F;4p3xpA&Wu!|RuC5GZZ`aA_}I`$ z@B`feOrVp%&h)l)J-7<&0-M17GC8Etd1WrLeLw`fo@YVgz{oVaF^eyx~#13=9#o;dDuHkOs+2J|i zx#3mp)$BFwak25S39-}lXX?+^_cr%2_cgyUzcs%zAHp2Q9KrO{^w(rH!W>bKIOm=J zz5j#15@W+uVG6U}A}`asK(kP@NVC|z#J$v=&^Bn3+Wq6Ceii*IR>)V%SIMu*uFG!7=E>&E7RW^M#@D2LlWenWi|nZPnD@B%X2q?F+ZE+F z1I~zZR@PLyDpysmu3S@DXe+WYZ9O* zm{Lp*rZGK=X+>>KZ9_F_8+B8yOY7FwYL^9<2Ui472hRl02DJfQKp*&@t-GyShNN-?!KxA-yr3H>SklkKzZi%sQLH+Gs16Au@U5Z^~U zKs-duM=U@rL^K2&ugPE+Syx%Mn=Bbf1=4}3Rnw}bS6vt15Z@HH^tAG{_FPn7QeRdN z#0|m?#*Hl=S3JIWHFXVjEj3ZlP>?LR=DF^<;Tho>=^5o28W(t_EZZ)s^hwG>7m#eS7pT56-Wnficb>JHQI{pU!Ch`{Yb{1KHYAo?Vt*u^H zy}r6Tw+FW;ccWyJWV6H|HA+p=2qVgfF)&iB6eo?wWAS)ADNo7M^5@(a+?U+Xj4zC@ zj0O6I`bGK^f|G(%g5UT*_`mp?LRX=?un~uqi_VRs5~v1LV;8YTsaY6W6j~gL^AfxU z-igAKg{KO$VSmIQ^%rZoTAns!58EU5xApJp-`8IVTnt+@iE)X{*vd(Z5k3 z2Gzo}aP55m0{=q4NoW>Yg!J-)az=S^HpY$dVqK-(r2mr=V#F9JR_AQutam0usZcsJ z#yQqG&iT;!$obegsAh1@kQ%eM(UIYO8+;dhAJm7+Lx#|a(8MfT znxdPbo1^cR-YdOd+M}#zS+6p2t|V8QdnI-?b}dHqkUV4$Hi!%2gLC59x$$}NWv=C} z6|P^N-=067TveVbUnO=)TvFFv-aX!ZUbrYy6fJ60)`O;?!DIB8JPUD)aEoz$@O|<9 z@PG=W0;>ju28ITO9>pHVp2V)8uA;7?@^ff8^qljq3$BZ<&ap1Bt}y{#h!^3)w$|xs_Uv7 zDyR~ygeV=#YNcJtRx*_= z#Vf@N#Y;uF(Vr30UBI2goyWb2zKXt%o{F7_WlzS;Oe538+?KZ`Z)@H!;Sb?YVNm23 z1w_3GJqf)CAjn@Z0D-fhEEubGtYxfKY*cVWaAfeB?~3oLZ?bQqZ<23|Z(`49a8{Sm#UepUVI`iso-%nQu#zOTM-z9=*djbxz@ zVE176VJ*GQy)C>S4DSr@4NdTkv}8QfSZFLVx>!zD4Xbs2%luaP1%8^J?ms6wBRVTm zpk-(|`UUG5>p5$lagK4W(Lrsrbx<(^lmIR0$ZpT>!2X{9HUC?FX$h~Sq-0LXza_Iv z)~HsgR;%m|!NjDZ9e7%(UE;pv7o$8r%#u!_2c-GgvcOf8oF3f8a9((*-jG zc^oPym$RF;leUZ2L{KZJ6AU#BHViTRb^mt%asLhd4*d!7!;SHvaPM%>aIf&<@WSw- z@Fw;K_D1%!*p%4R*yZ|*^_S`gnFp8$nm?QWGk-Fl!koaI#0<@925W|BlsWPoMb20M zXa5(!3**GpV0hlfiZ<^G%`(k$&1&~b_bPXDZBuPC?Q#84{W1Nr*pk@N*mKNN%rneg z&27ycP1=&Qq%7}oZ*lK%J1yHSJ1kS=ljM`-D0z+?DTi1=Rz{?alhh0MJ3LP ztH60Gn^e|UZmQf+xv`RGE4FcMSx!Gre~ySQ$kK&$Z@50}2{*%Ka7}S$u~BRii!nls z2t&X$Zi_ITs2!*ssnuGWwo2>MdbD2cy5O4N+Ti8j#o(o&C147e1O04$Y<+Def1`uP zf0A>YbAmIFo}~|<_ZRjR_7gIS>BR-bujw!8ujs#QKWsm3Mt8Z};2tL)BhHQ$KSw-8 zJVPu;EJZ9sv5v?=U z@-7sfD?DGA@;CUCexa7H6=;+8guTK3rT$a>=lUCgYk}(lMu;9N2%Wc|wV$)g6Vik% z;dRtIJdU-F)s8ieTs#F&#bbqNAx1dNKg2)Of6;&5f5Cq}d^LP6+@Z8xY5P)m3>t&Q zFj*~1i`FjpFZD0;R|{>zDj}zwRn9IK#`rNotdF#pw6`=rmK)291)Y9pz}Yg?Jk%mI z#W~42+4<7>-1)*es%AvZ$Qrx1k*wtX68seW9IOagLe|iQ(7Dk05EKi>La?ncEif%H zZPBgKZO~6kAD2EU&6f2m>tCkM%_?(Mxp!i>Vz*;7Po5{=Lk*IHl;D#1qWI$YI@cQ4 zS{Kv{_CmZxDu$|1rFJP@D%VrqW8M>9s;HqTS!4@V1RK3&o(fN;XC-bqZUt^Iejt7j zK1T&tAygwm!$QMDuVOD^FJpI5w@|lHtem18X3lljRo69FuUL<4tY=Jtm*M63>FBBG zY3L^C#%C&eGkPO>6Z(eqn)JG~DL>86@Wp%~U&Q~b`mOq-s!~^~ZEA*^t}amDQ{7SB zRZW9}B{ljm>`Ho5dK6|&`c3MP_MmnYPzqX@UYfp2gyhZ5Oik`io=fjZgY&kg*XvL~ zmF^hfH8G0^21m{lMZ2j zeh2h$}T6*q;XF?92TG?%G5_E+oGpT_P5Dx96OSR@Z%kNZ_N1>+2{HDES)n3G_YmA1D&&sMA87a0)IgpQX>Eq;s+qWEc1u ziG>^`e$kzbo`_!3J<(k!oowk376yNX|q24L_;5S2J6O0Pg3~ zqv&XcjHCF9eqz5X=Yh|l&Y{kttdJ5&DTI{st>k;j6w(ONcMzR4tKo$RCweTJDO@C+ znPHROXjvo}@Pl|tdortClv$B(VV{(_m_C#~L^?}&OTYr32xFj^v=_A}i7nJy3A+gz z(2leNTnDZIqewx?^2}?{iS!=*T>VYI7TBzqC6_A*@@?{diZ!xnvU2$W*>=TlMMAzp zF;OvJF=R`9k3#lV1 znpOX!UKjlaz6vg()KlhCj!;6By|CSsQLq7&vy{y+1*M#F5b_gp2MUG}^nLV3Xc9g@ zT1c6oSPRF)3K82~6v`;YTyR{wOW#4Ot(&cX9~0<)X?41Yx|3Q5tc`vJd!U;XGvzV` zUcOa+Rn}LrS~gXtm+zNtQ|wY?J0R{MeoJ#@cztjE4I~{kFS=YYUJ*kzcBdh>x#lTG zDlVhmgW#Zj`uX}=aw)|_nMXNF2~+k^M#BbD&QZ3&loSKy3Z;lLSwW?YRqWNz)8F#z zfh~%E-IoGZ|F&=yb-Lj!fdHBz{=GrSkL z@iY<57kbsr)ia?ppdZ8{eK|}4>;>-wcZc+VG(*%NSjZtc!(hWB$9|a zjT#6h<`h8K5DtVQqKbBc_keeU2S7$c215En9FW1Vp|Az8MX-6W9gwbwKH!t6zTkWa z4MKDMU% zhy%PxQ!?Pp_jD7<+%!5v%>0*zWwwC(K>AT4lFQJ)(vHy9&{U2<@;059$;tdp|4IiW zxJ)N#8>kRe3~UAWh4iPihqi=vfVP5~(_?_Kz+_+w0Ll4-_yYL~k-_Egv7qt51i%NX zf$$(P$eJt+1Rn%0hDabAz{4O*VY?v^_Did8%InH&$}9Za$~($i z${YL}>EEfNuo2`wnHlNU=~S{!`Vnw7eJ#B+qfKklZPUZaJm0p=xah4UA%#yNQ|J^b zMNDB**c2}HD19e=0=7uIQ2Um8JKcxaN7svZAJ`M^rE5sO0A2!5fakz7;As|k4D?9! zO!P|pFVQ{GEpZHXjeng#F)9)XMPM;cluRPTlcE>+7x_3z@5~tT{q)21&2(Sl&eXQl zp47(F*3|CQ_SBBluGGHNmek(VhSa9i=G5Kv58O{2E`d#qk4}h=j{cTCB z=Kj2Wd3*EtqEeASR3^%nh!Uchs6iALMMZ^#BEoibf-s6Ont)-USt!=9==k7-;BDU> z-wfYO-%j5yUsqo@-#q4A<{YLVpPyfrKMV6OW&&m+W@G)P`s>VV%&W{lzQ4Y9-uB+F zhA)QChDNkDo@eA5i;W&uJ*x?;V}6JH_W3M7+kaJbS#&Kcx+1zH+JWAQ9)}r^fw7@% z2z!Zfv2l^Hp6a0z1Vq7&qU%N1iXP=Y%zcn6E)kUoOBR(ZELl);R&_>oT2*PPFj-9& zli6f4tuw7PtuZyFWoT&{#*8+j%-<;ADT`POSqoTm1ak$290sR=bC7m`wx8w`_yv=Z zlaSeo$g#*V$kE8rhEax*hMZb>Eut0{Zah=M((s`0;P8s@%J2^McJ?;*&hW1A56Xz> z^yrQHoAo2i!_C9YKg~bP-_1E#BzBButOk`pCVu&U`=?>1W9HP&ty`;Er-9W%YN53w zqbMvIy8*Ki^Fs4dL$Q!8Buh(63rq8?F)@9bE)+N@W05dQTKOaAU2(N%uKr4pUj;I}8JFIq}XTN8^X0K+S zrl5{dH!3>bJHfljyV*OcVr0dL3J?`S1yiRhW-4YVI><$t$1Db zrtEiF4bFuNRR${ql{+f8S8l6(EPpD0BHyXmq1mn(${E5L%u&$gbQwJyj)V`uKH)y& zV&aH6E{=-B;whM^m`Rw)m?_k$)S;5Wl3|h|l0lNq!7afX!JENGr9CjkHrY1GR_V9- zTe;bBR=l0Kt@u3WT$Xc|Gn_t*K9oL4I9NChITbktIRQByIS$#FG*3KHf~!DPK-C`2 zF3oO@z0OfLBRW|;N!&KrE;vw@l?{>&koA{st7{i%A6Qhiuxde7egrE)OE40Y#3`BP zneMr#zNKm%OT2?Kswz;d^qxIwT{dC&{I|99ReRZSBdlYtGFwZ|i&K|}d$}Y&G=h5=62(Ak5%J0kX$&myU0ZYIU5{2=?SRpkx zH+OgREbIu3kiaKA(viqfNSmfovo5qg)P~oZ*NS(o@M__e!sh-Kez{hm9Y}0#Z)I<3 z|5g9Ho*6HS-woUgutS{CRr?kDW&2@R_H249rZ-9`s&xUSv=C?($vbKT5xsek(mz zcC_qBS$VD@H%shJ~7 zwzxLCHo3~ENH5BpwM#DZFYyhoa+luqn)izLlGmcBc~P?>XRs#NNZIv#!+poi#m~mi z!DCf86-G5SG%hqYTB@paTiq4z;n4s-h~J0akKTpejXr=rh<+%&FMT9^AiXC&$3M?M z%RkLO!*{A(>c%2W6)uTQo^IfZPQtckMv}K@uBW$TGu+7I^u4q`txNYN_9ONujv@~u z*P(h4dlJz}Op=r&Ch?8Rw+y<@#H-Ts}mRyv6Ma}kv zswi(M8|tW$$KtU#wTuA!7mWkPLXQF$h;s?2h<_D;5~QqD+LTpFhO$suq#UapryQ?b zuiT*AsBEKbt8Aw{qdcoTr@R`y7QG(5sJNuKtaz$;rg*OK>HNBY?lkTU?kw(k^hNY# z^l0o@?08JiEN2>+8}l~hZO-O>6@C+b7kWfqkx%qLLU%$B!Y}Y|@E>rauEc_{n#G#O zTEvD1hXscRFZwR|F8jv$#``At*84X2Hu~E5+WOl0rZA^6r!krNtbBHU7Bc`d5c3xO z4*edzynaRf%K9_Rv&?hMPrlE-FTMaY2n|7R!|uTD!ZO~b-e%tHYr`AETSE=rg?HoW z#sVY5*cjYkIatl|o9DO4&-Lf|^Zh49r$nbkVzdM;ML%XeVLfHdGX86vZLFl)s8v*i zAV+`{v|+bpw_|_G|D69NpHos?!Y!FmGP7h>$#T^S)k>Ahq&8_xU=zdyH7zzRF)cNP zX%SkK2FjWnfd}TPtZA(2tRL{7@L%vLf~kUO0uqPJp>Vd*w$padY6LEUTQI;d&@jmG z!~N6!%l#wtGxRIO4fDb!;s1rZhkJzQh3AJCgx9jyvDdRF#wNuk$IjKCufI^=&)naf zHNQ81Fn=^3#T>&N#|+R6)C|%{a-=!3oR9wOfBsMYYD^>A8N>3jy&Ugi%@WO0%`*3L z_X>APo7QHuhxCW_NAwG0i(-pok1&rhPcSz$H#N63aZAF|V0ndmjeCRJV%cihW*IM^ zAfG6Q$>DN@{Ey|Y1+a##5o^>s+d9WO*V) zwtBXCe$@V~{Z+d;wk5VTHq<-JJKVe6yTZHDo2?j7F|cB_e2sjq{HE-d?6z#7Y>{lS zOe&YjN zIi>V6I-gz}t_wE_CvhoUHjUGZ%f$w98HSG$V9*#028(G+ZAWcSwQ4K0mD)OO6K%bA zWpGt+b?{v9eDFfBJkXfU3iPz~vh}v<{Ca=6{|M(O=NP9iy&t_ly_c}Ju#YgWIKP-y z{EYsb{(}D1_RaR)*2r{l>)j*8qr{`dj}VU$PY{a`ixEq*h;%R$Y#RKZth=m-EE8xN zXcm}JHM43~)h+RD@f~p+Pg_qr&lUAm^)>Yn+)&&w+=SwZ#gmHHQP)#9P*Vlzf=t0p z&n?ew&uGsW&sfihz{tR;0D_ytMRIWrJcGcvLA^=6MJ=gr0o5U<_OpZz8j0B^B zftM1bL}?=45KqQ4@}}};@>kr~+&A2BjPHyejK%sT`lb5Qf-{1%0)PM_fC;sQb%jj| zF}c`WTy7GTLZwkEjasA8ED0?QEej>Hyc93ZJ6(9D@N8ksANMExCE8MLnKo*V+2i&P z^&jj1tG^t$61W=33+0Dsp;PwL_A_=-LY$B!Y8`csCXN-3m5x;oBA$dN<8y>aAxb#V zKgd7Wf5v~-f6jj?d^vn2+`6>Q|0z1l_NLOV4Oi2&X_89ZT^etbv~hQL-ARkPy9JjS z7-VpV!JQd&a30*<-QAr5-oAfff4Gmm*1FE~Vs~KYCkv8=$&z|-eQEt)p(UZEAw4f= z;2C+%WVMp4WF^^2PO^`vuc)7>I*CXklYV=^9<(<_TSQw%C)y|3C)*#|AK4$$42 z#yAWCW55)68+jLbA8D?Fk7}bQq9>!LqQA{NFO(KZi=`u?Bcr3DkCKm* zPm)*4u9jUZ!-EN6BKW-Xg7c!YSF(4qPf`FE!bR{YkUt^0sSpRm32{NzLpDG*LN16d ziY|!&ZibuXa=2V>4fmV$yYxS)PNtU`WN2Bl5M6dndR=-$T2fbB2dZ<{+3Os2j5=B! zy>43FpLJ8~w$*K^+gjJXu4`Slx{Gz^>n_yYO58}?OkAtIQhT-bRqcz~m$k`;ctfJ$ z0_+^@d=B;|@hb5;aVmKtc`|7r>&SZYzvyk~?dV^;AH1K zF)YlO@=@iZ%RfOrKt4h?_}2N>`!15tlP{2S{{_DVzX#Jr$)Z%zgW`L|_lw&H+6LMM zKB(TQ-m3!e=FlFTrlzQ=Y7fOlaZ@^C+G9FkNFhRq7&^y4!#~THLFyn<$P3Cd%5%zM z^+NR`wG(MaI*{-hXbr5UJGCpd8}&cTH_UfT4U5C#vKF%Dvlg&6NY_c%OVv4zQlrw8 zX~3FN%^J-r&1y{+3t%(YQf-MAter=hLzzn{D9J0yFPU32yJk)ej)tLOX?w7{u)DE= z8efgSW~^$oYK*GDo#)PX7sURbN#nL%)D>a669W96geW8`wM6f6UO3w;TF4SC948wmu|BH@^cnpU{o|zV-d;31M6qA1*ZH z8wv~~-NW4@+`Ifc{5$;xo;**!XJ_)?$mHxv0Flyt2Hiya%!yvOCgV zZ>_gA%gaOc;rhQL8zLJcmm?P=mzoDBeb^8lY8qn7ne-uTNEbRuJ5D=68;Ki^8-W|f z%khTt$aEr|M1PHYiF<|nW%|+F|7_B^G%l@cvS6ZMlHhsC(~@T;t4mgvtSV_2X%lH1 z87v+s9wcrbZX0eFUTB_gUSPg2xGT6P=Rb30fu-10 z=qhrJQH)ZIR%{Oc6W$cQ2fqWq3x8O8zw|*VtBg^`EZc6`YT0HP#>g>-GIj}f2zLst zBD2UMYDs7!v>>2GND)fZD%B#@GSyzvR?<%Lp7ECPj*&Ax;9;x4%>pZkZq%Fy={XH z3rE8-@CqJ`2j`6ojR}nnT@0NMT?k!|U5#Cfbz|qcu)DHLlO;)T5?&9jht;nRtqiRS z*?Cr;jmK2dl?-tj$VkKi=K~`K#QRuXovE460!Qtev5xCY&C2RY&3i%d=wlaEtQr@e~*rf{uX_e ze35*ayi<0o>~1Ry?$AF>s)8L|a( zLv&4aUDTS}lG}!+%cBE+=dZ=igj@JhFX^Kyt+)lJg%oar2^rU*TP(}MD> z>~0yVv<xaIt#_A9Z90R6rqd&m<6MBO+(eT2MG;Wahq<%#$=PiQ^ zO)pAEfoY|S!4>S$&`XFScDqt#=~4Qc>Syfk(680ot4#tJ`Zc1lw6^pqYY6oN3W2^z zI)=&}WxZx!x29}EsTWxjDvW|9tQW)(Wh3hwOALKl-4j{KKtortemWw={U|&1Jz{#( z!ltE7?9A^e3~Nv6&*~{fI0dJ8O;b%CH*adZ41A{Gbit{DlLaRVju#v&m{&Nra8BXu z!dZng3uhEgFO(;Fh^>Vi3fC9@DE?UdsrW;#xKqL8f=LAv3;rmWRxq{T&w?oh9ShWj zszPOIFGYS1Uf6m-FQ3 z)w*jxvyv4+d`@OW`WbIVdLgg?m=DYYiV=TE{})0akw|83_gYz{yt13BtEwG+B3?>7 z(s0vr)YF9%qh7?cryp(bnb$S^-tb$)JM{`D$zB*j`P`XRfLPP;w6Ipf{V~6MV%`;RkTd_5^qGgDw9U27S;)e^M6Xd zH2-OtYe(|m>E7!;=sxK_>RPML=YN&_l2~e8wHx#L!1}@tO4}(qE9L-%*b-qj+l8Em zd5a##AIkqM`6T%$`5^fr`A_m)@=fwt{6%c4HP#wx^|g*#d#$b3T1%DCBvIN=>?Zn3 zy1G<@7vU%7#D9oqFoqE<60>9kABp=RW=rDYnAj@0XdBBP$8SQkK>RH`1Y*>7t96U| zaGwIBc~^ihz-xfgKy9Eklr(}Htr=CO8>gc2I2=|yfj^!fqWY=lFlR9RSp8W8SOZzZ zlEaf{F~O3C5=}A{PsbN!PG!1e7G_Ro$W1xDurj`->W%KL&Y$g*E!W*po`45R>PtrR z$MCa=M#KbhS5BiR>uG4BHPM^y*Uc=LRq$5!pYVt9rx27VN)#pv62*!9L`fnqVMJMQ z*HeQea`eAEC4Vg$OOazb@dsgaECRL@DVOZ;dM$Y)M!5I6Rn4nJgkT2EoWm`~?M)33 z7{&7hBV`xqhw)Q|d=ZE6R`?sEBcYP`DTS7ICEijriuyBmD@U@+Il@HWR7)3{bilb( zbeKmGbP&44YXx1*r%Gm&&=lh0o%|VyJ&4VSBZzAVgXCxYmwi}~E>Glkq`~o4i9n*h z;(_S~u!zSacMx|J=h}-qiQ9?WicxvEycv}zgvW(_AwwVnU!ZAkX92o*kZlJ+`LG zU`4Ph2oH+IMGb`wIPbb9d})6$AkVR)l8Xes?;WaZuI3J>1@CRmZO+8>C;oiiJRU9h zsBvRaf8muP0dy2F5*Q7P0hU-;()WVl^bz#V^xpWkjoQrLutSgq<>TP%;0gFYu+HT- zAqqGVvZY*Fey;o~>^C?Q=7pilzd<^}_QIdQ^Wi zNRD37P@$;MRE#g510P;tsL)oZDk2rS3U!6PLRk^5uqh(NZ}_)?Tfkuty@*jnE9ym3 z*jl3o*$3N)*vl~<{4v9E!%4##!&$>A!#TqV!)e2L!>z!bzzM-I!6Vec%%Kb`7%K=C zT=iC0|LL9Oo#~zIHRBH?4kpr4P0pwDX? z!NK&&`2O@scp|bc=;BC&zqrF{6g8cBdu#ryk@5mu61P|mk{4qU%CnrL*QIys6-~Rm zC-Plsby|_Or7gl9@dvD8(xr+b(%$U8Y~QAFWs7-71cwAi1&0N>d~aTX#5Rd_m3@UW z(!1ZGt2yaC?>*%`?mgkX;9Zy= z)~l@<1J*G!Dx#&Ez#4Up!#^EL5B@!7^X#<|9J=Jw_e=8ooW-Vxqm-o?)T@d5E( z@r{^%@xJlL+WEOO(c9VkSk~3s-Mb~RIWb#0OWNDq$2=+iQMS`NP5MOpTs=+mK_fBN z8l}eOf)At2s4&(U6|s)ljkv;E zowH51S=rANQu`U@3bvFpA%!7Lj&F_s9cLRk#u}r*C^YhnA|uzxH;Rqn^lj2B#ZWJg z-Nidy`WtIp{P*}&X&8N!BBn0H^riekile^MPT~MM8XsXKCEExrB8NGJDCGEcO!5w% ziho|!nLkopOC5rlLNcLds&XB)16*@;clAj3|J(=MNI`4C-!vQU2W<(?B%Wbu&6p+> zh`5Az!c&YLglZy>xzdWT&9GG~tCUS5nfjnqz_ zn*WI0g|DOPS=UJ8RYP1V_d)k3BTBF@HBev{PZtVB?}eXJcXEmrqCH9|hnwo3YU83h z4?CBOu;c)G1R07EQDXg`rz4PTl=kpWDCItSB89Z$KYUFt|UOx{Q07wYMnj~b6oOH8uQvO5|&aPE=r zld8PA8>H)`C#an?2%U(pWnNV_aBAeg#mC2IN)wWE%Fi;Qkz}M8=|+Z;YGfM8Mw*dj zR2gS#K5O*EH2XYzYho{bI)1NrqWlHF(yy7N`fR+W zq&atZU#VwlzGwjU1@@}c1KC4a=NzZ6`I)-E85?Y5byV$RcTkRC{MakAjbZf7+1{1f&uZ#Q#nh?&Wekf~LkHC2PGO z^8>*ijpG~pG)`!IRQj}(WIz9!C97?5f;1!Z6R7PmN`WhMJ`l4kG_lkCqC+U z3sM9Nun!4&@*=q^=<)rMn+-AcD!&`GLahP%`Tg4gYZpCV=y07h_;%Roca;|>%W>=^9}=?fIDDxqB!2+plQXIC_vjqCZn-VbioiTrGY!V>F=- zKb+8$`~f|Ruu=9Yvq#!aCWUp7m9kp0+NqAZaxL9t*9mr*bCPW)MmVPl5m{K)QP!RF zIn!QtNxRB%S-aZtui?FHjzbG46pvMoQI09|%Kh>&WC>YANnw)Id6;u<0`3Ys9#6#M z)b*GRm>%A-@hZ%46U;Tea!w`4azh)Ff2OO5UkYnMilP+Ai?2xdJnJ&$K4{Jt0tMv} zc~~Bj2jrlJQDqrVm+;rZI*_s`4Z1_zj_O7Jgx*iCrT8%gRK5m^p2qn~U4Sh@yr%?p zA>9$yMFYyzf(F6i*z4$0e6i&U;~e2M>l1sC?K*1(Yb9&AJxtlroJl&v?vLES3Uevk zGpxVCA;LArDZ*2A?z(omae@iPuC>iD!r5yxA00~KI8&v%T>V)6PBY#FwtQwg9ZyX` zbBQHjjX1PvON=YHj`ohpW6rm9a2Oryl+zkC#AvSItb2j8w`!mD5o?>{7v(YQf?>O( z)Fp4Y?7HIea{`>fki}RiZezVY=m>g(-XJ)L3POUgATo#umIkYX=pZy$9?TQx6^~Af zO80}wp39DDRTtxxjbo*YWWuJa&@*mCV^!m6cR2O9I$SWaaRFwI_g}gbzsn&N=2l}X za6<^2f#(I@LVw|>(jBFH$`IfU-c5?5lBz_Z_gnt@jNH%mNtvCOK>rc9^!V#avFbdUvqk0rM~3gmfH-n6%pe+RhB zXJyWSeglmM{SKM{dd%A=_#+3J2pYla;O)s8%`(KJ$)vO>o0ol*xtl4;zRbMM{Fm9s zKP_n^-r^C+j%PM|G;uX0iBVA!n7#Z{k{`hv-V)kM>>#=iAD84~IQaXn2d+lWME7j; zE-=S65h{lsh_8g7t+-!AgC36GaP>kmg$$uO_!!gOcQ4ill_Lf3#`>ZX?3b3ko_(Ha zMLz^wMSbzY`myz_yiX;K@nngg%07;?E4ZY*+q7fJ>(*@ zgnE>En0h=%Jw!c5JxE=GU54$5?TYP&?Sk!$?S%bPztO;<@o79-4UJ0^(gZXS?F9A= z_B8es_9XT!_8c~z{Kq4q*V60gQu=$`2V5k{NZ+uwu(z_ewzssuqzdaK7Na z;;fB6;d>89%9nDb0_k$^GVdRerQRjp8NuB4V2|KC4>+^Yr<3dDXKY9>%IigrqK~9M z_jCwQfmt-*c{e_Ip4WE&e{C(RUTlzlXSiweoxN`|<+XQtTexZe5m5497gX{jEGNa-L6~m!8j_ zSDp`^H=d84*PgDPZk~;SzXLAhAAvoIa{;!uC%+fJ4?hxX?L~Nt^4fS$308UkiLCUl z@S4KrFwAENec<3C_z2F^J~AkOO8)=y7w2!!@9sIoGxK}!$pWW%zVN&7siK`|z34t4 z5O)Zl%^-zS{T=Z=>A7C?ZuB1X-t;c?uJrEozVz<+9{4W!Zup+~PWaCFuJ~T~KJPxDU>cMji2-b3y{f2(IU z{$ZBWKjE(UY>mGu(!Q(@@HP4}z9!#M(bn*m@Lt`#>bbe#RrTuX4i$qV$AY7SD}qhI`MwvycmNifRXwvB6Zh8MBrFcaBe5{xKkFan&xMzU=S73frHxO0 z$HK5EE!{V?FLXTiLp~>zh`tOf0#75-=>MYSesJWYUlx)22S(R~)Nzgvl~E$kbI{%n z(Z$|H-mR=U;&!APIm)*U=?XXlmRxkccb@lR^iuS4w1%xf5&gZ@(^N^VS@)ODsK2kz zx}AngCY5!g6>pnmJ8wUx9BJz5e&&AZ#zt<&Zp5agWb}_Xgcuy?YVKxk=RM3mskHlT z{_)WosZe@CS={_;eZzgJzbU#Uno~Wyx&?AM@+`6l#X&8~-tgE!8_nKR zIly@?W6ybgs@KK|%DW`3SLJQ+y0bCuq0(`dqqhGkd#b0XBHG*fz3z9$-z>|mHTHwb zq0UvFJD!!zhcA8nnCGoa;T=Z0V7q3EYZ>+f%Hht#q!B1Da~JUf(?vSs>88G`9;SJ! znWzeC7wVqsbo%l78+xtrs>x{{(Y(1^Yt3P7Q*0dj8T(AfUgZ#H5A|eKSUbwH-nw6T zN!49_Pd!}oOfyLp(&}}KbkB5p{RI6@z0sgEUTcoUjBNH!tg~Wmf7-bAv-Vkzeaf73 zCubK2fvaS1;*4*&uL7$-GV58rR3XD)b}{FWY%`}`c7#V2bQHS9>jdvyRXN{W?;Y1Y z*IrTDeV60HyYUx+8ykLXu+wV*Y9 z0{%+vU`lF?rH9s?u9;nbF0o>-b%r0;XU3e z!7AbF@DiE8Ep)F*yex9LkGOinI-V@pN z?4aR*AzxG=;@0-A{amkXLMadmMlr4Ubji$;fkivY-|~lo7p3PJ7Z?{C|1vHzE-}tG zE;KGR=0e;z>baUF^m+Kf_^vcG?f`uucoTS&%A`K1ZlO7;saCPIE43Wm0NptqQQt$q zRZlW3Gn5zy8B0uOjZV{cQ^L$MpJ?7ZgRO(DYTH|D2irH>dVAVIcZ8fM=N6SkeOTQ} zb6SH`akZbLwd=G3T~2pdN7MJ!@6^)`s}1GGVa-(OC8N)@ z+mtbj&1cO?3)DK?YOsB>cD4PoZL&8yIF7gz@BCNgP#;&f)124juquIey;i6js=K12 z>-*_<=^2JK2B>kk5o)?@^qcmWvSx|-oH=EISw~onw$IjXwmkc0drJq`k#G{6+f+97 zQFR;5Sq)mn)2`L>bwhNQn#aCA`Wh_uo8k|a~-Ozk>AEvviW9a+qck7vkwFa1Rgb`-C z(tLH^Yicytn$Mfl7Pxh!)nxl(?QYArZ?U&>)Hsq(qI0v#tUjb}sX3)Vs5shHTCQ%O z?!1nq@2TIWCmWU;KhL4J!?0#+#pT=O#J};9zDyj&Hy)# zG{Q|+jX~2sQfn1C;k%7IiwNh!tmXG*WDjnjh4$Sbj~8uFhBYhEFJ3(ij`;2+Yj z;{6OI;W*k4t z9%^JNoA!uyN;3>UR)1QrGW=?B zwNc+v579i*$W?ajQLRSzr%tLLr$3`t8=e?jn$DQa=9lI^7LIkEH3znhvk~lv?Cl&H zM{8v-=ifj-NDks_x(D3jzc$r1ZFO9?v_ajp+_LO)?{U91-m^TgJhE&peQbGZd1ZNH zxomlBxnwalZ3ZVeY;Xm5A8SABf2_T%PlAtv4*~)?f*whRVI>_ZP%ZT+HOt3|~WxPxsH=MRD#|&qARS9>@opi_DC=bF@ z?Lm588OJNPxNn1kWj9HOl`~ucH`a5+Inxz%A9W6qyp_BYYibFSOT|;bw@69GdbXDH zs9;4wr^3O-*HVKeKS)yacAkR&uwYq1`@)X=TopBk(XwuVI+7luzA5{;K)N@Qx8iE| zBKJA5x^}J@FF9bW7EGr(a7%G}QvC%6@m#@ZSv|g{XpE(n@u!d{sv*1)?qKXDd`wLS zO#xx$rOe^Pn~JPRs^p|@p!%d*xc=u{B9fsYn5`Hq%845zYryXz;N&BSH*vq`z|RR! z3LY1n7jJgYavf13O=nAHmq2{eDmf)X5(64TJ}YxGv2|msMn$F}^S+i_2dV2*H@nVP zcZj>E9@}^-F~5Fv{Y36;E+cEpO0%l$CfJ44oy6|sXOa;8H?Nl8rs6@t9dat!EwVS* zKR7=a3x>%T&|S-KLnix{k#qNg!N5wD5}v27rid{`q1Jp7WD7;A79ekPA=F-&4@^0$ zjTEj~qjqSp*v*J0W>FEHFhr zJ9)nRupFA|LZ*m8cq-JT zHZyVy2}^38!ePV@$hnEvsY>~u(E?^?qCJGD|7yAI`beR2=CiNRGgE|$H z&kC`anrrF-ni}jqO)pB9nupYpSZ>WAk_RPG&8M2Q2em5QMBPK3SU*aCqB*^Hi$gF@ zHa;-gXfLo?({fq_*Tnlk+k`t|(wqOH55nK4U&iO2n7do-j0VDf#wx<*8VWJWBr^{X zhY%UoS=J)kDBGJF6PwFJ+rJX`+XW7VqZZnzoXMthu2pw+lAV7uxgXYXZ?We;Z$We;X^_#ybA_+j{KI9YH2eG2|N{U^Sk5A1u-|IhQIdHyZ= z<&pc`9+9tu&k{f3DfJ$J7I`nY&b!=kzsD25=7RfHc$RtoqyM1)r2nD|O4^fjs77Hc z!5|q!R3WcZ4knq|49>0fv~;ksyiyLG_iwwFnclg2oqU*+wB=t>q>b&lU?t5;Et4vv<+%3B9 z&Iy{FjZYLk^7&0$fOmq~=|O2Q*@S*g&XRASw~^@-HD(9pDHl(jfceIBvq%~`wlk$| z%{}Tcth$C)vyn6yJfk^X`UJa>=EWs>FKKIW3+Z$4{qc9`XYe|Pgs_LPl(4P_OGGjI z5}($n*)-le;$$|Sa~-vkNh9fU+;Z-vzz})>e*jnkEaleLRn-lx`>QTqx3_LVQ5VnT zqR#@qB2(NsGcd!>`AjRFUOft%@TX%Pw!0& zfp_W0>8I&OX%TQBy(9f9{W?tn-lrd=NdOTb1IN;QfB=Yr`{{dWLFR7yf9X@{=V?0d zEd3(=FuglX1N=Y$hyq?94&;15^RF%t10p~OumNG94PXQsfc`)~Ko3wev`kN+9xwpi zfI&b8$O0XJ?m!9%0sxQ($Qeqe56~BI1H4Q}fSzGwdH}tEMnDU+09?QTpb5|c8lXMU z4rmFq0$KygW+P=1@Bj)x4fF;QKv$qGV95bipfk_~=meMnCom8&0V?2p`dqpWIFmk` z?%jAjdn3EZ^Aq?5jL7^4)HQ-K3+l(z{{SYMm++SIKJcqEKloMryTEronNQ*W$Nz&j z0~iJ*vV9;+AkX=Sn+bb=Wf7zpQUZZMz>rc%83Y8uBWD*G6ux3{-T_4JB;o>Mc#$|; zqM!?}#!pkq&>hK-(RS)_%m?ap>}JyMs1WT7Hbdv)V~kbA?d;P`DQPQASE;YOS9y!L z8ugu$GRy)m10Q2SD&rJr2`d3jgan@w&ZMgm+L&mp&15+lPNVx=!#%{~{1Mb0n7!a7 z@!4>81*hVF&EG$P&b0PClH0B0nFA@^(Er19M)lH;#6QO`Z@xVJ#=BZb0bz<%plgLx z5VlASdRwrq_;=p*LUhpyR*uecKGcqo4wnv--c21!-A^4!jUWv|O^`jJKgH9S8;F~k zGSXh&fXIm8G~eHH) zGkzjr%mVA-Fg)7VN=QGpwy|{&?FfCAKT!N8ibhx4Cp$ibWdTWaS9Bb^io--ba}?wv zi!Q%Thw8V0=q}^SM@5= zFXgjnb*xQnQf$9(p7w+stm~`8=~wu_8rm8U8`UwKpb^5T;hdPF5O)HI?x*W-1$WM z5Yra=%K1z>NA{=eXXTN~IJ6&hr${Aj0UZJjL)&}1RCcTUJv%>}%TCXZ&koI!66>nK z4c9WgK%Ry|(?nH6iZ7+4|2YY;#eB}#QkbTzn54$gN zyI~o(t}eHpJFIR=U7~JZUEkuqh?Rw}iYauds8CcSazI^BiL_Sw6!`|U4AfU`Q>C@b zbPx4N!zJ&Y%Ibmbx2L!FmmvP3nl+MEglQjbq@m3^(Bn<2XUeTtYP4 ze`gL+u4PL&7f=V877}0xRVAt-Re`Ett}0a(tBO}iJ;NHOH`bIX%0y*d%5OnrzLd6lf{MbWOj-FfTtHstZeG%}pEh_tNv z9nv$`u*IAM%%7?6wc0vN-GSP1b!+Nc*Bz}pmpD~>ul5M+S?WPze^N$Xht9p{x%s$? z?iD}C+2pXuso-zHHNn=wNn|``VEHr165mnsn;;N)qO!nIY6B&UsR|w9b0OCtcPP`< zT4Z5OYw8;ei8YnAL@L(&R4>$ous<{_t0z+?)xc=~U@bKlNK;XRRG(a*qLf(o*qqoZ z>h{=#4BM#trVHt3>MO#Z z_5Iu%{h!<$lEVT^0s{>P16K{tISQD~xXMT{^`X&m_E-`o6EMn4%G)4^3718VH=h)H znWQ0Ns=Z(ztsky8ubO@zcRKanROcEcNJqMhf$&uGWkIgB|Ez2%Y&?B6GKIh7ALAbx zE@YGuE+T1`ug;a>OYpUp-i(dHn?j{1Mu3RosTGVVgfo`Mj1Pn(H9O(|!RB~=@30FrCTRCaFZK(|kFXD}?9vnIvIvs1p{*frGUl3CBii5Xp z*qoA<>>-*Yf+yW}Ao{y~67#Nom_rljUHP(ES9B!$y*yLi1o>Balii2IM}2iPq%I^Y znqxe3Q(+h2TIT%jM@sq5o6IOl8BzKd!3My8)#ak6o!ydL_#Y4pWHscBD8XfLKS@=x zYS|^};aW^aU3H{6EN-v3Sx5)v5*6GEVU;qmH_r1IJcART6RCtFAxUu?rH%h)_FEsj zT6vH2Uh--(`vFVin`)7Gzi>{)?23k@KDkdwa^F$D1IjFSWvb0u*Ma~u0OXAjd#l8T>u)lK>)L(?$NfzX~xI8vy@B3~$8 zDk_mxND`8a9O{|rL&7%1P9gJAFTA@e_ePh%MG=8g=-&Z;2I}I5c{HB2py!IQHJ|c7 z=YPm|P;;GGn@9?#gL8_x*|5bhgELw)l5>-_$uN^MMl*`@x8V}&U0@bxtY$RlAH!wV z`@n3@7|w(SNy3#iBo=VSX~uFuhyb)U+}Tvco+;}E&8ym3-JW5ttf*w!*zC56@5E=- zgOF8>25E~bscaDRQvJnxV(BpO5ae*=Xyl}v>mBrWN}PR~J%ln8ITAS*X{+*7)mJuD z{=y$?Xp;cTx|$S~%1V7=A?G*EI8Gs=lWB&mw35Ycop4lHs;pJMDp!@eYDv+~qP10* zRejV}RZ9Cnk9WHamrWncI_uw7Ui0aAuyTZRY33aqFC+-x!~fz+>eg|0a~Id;Vs(4! zp4UCA8`;#cR9kAQm=k|c$w@?Gb2xK3^EmT4Z|h#yU93j4G3+rlZ{fGK#fqDtaiBYu zdkcCOJ_4--jVh=q?3~4Au$kZL`+E+u-jvP-PXjLpKMVXKMkqgs4+0MZH&lmMQA25b zef5Uwm+V*UBG|Xsc5lKH_at+ksOP#WV)(myW3@4}-u*@K5#f;9r68HLS%UQvG_dL) zH_r7I`dzU@bQn6-QwFP(O?HthDV6_gpjR>~izo4Rq+bcfaq3r5PAw)0DA@f zPw}Ux6xJEqHwSIy?gZ@vEr!8hf=XfK;RZ=%ZDmO%6joEot>jnoDtl#yW$F=!8V)vy zD#ev6<2^IE%u`+)`EjU30IK|`I04ZMtK+YZ^#5rQ>OCroNz|pf~acq7C8`z_2lGt>dNq zN0m=1|D(L6T#1MCL;37x-{@<28-*&dFD~$yJawtxYSv;kHBEn9jCNiOa<(&rN+{H_Fjj}H8uww20g&xKv8UgLRB1W8kIjQ z|8k}`Xp1x~@s`0#mHOxsw zFMBw16TNfyj%je2z=c!)HjcD!g7beaQ=(AO$ZdE z4SA#?(mB$F(x$92%gLSuv1)tNwi5q@@(N@H;sRE|bZ9GiQ2GWck%gtxpe^J9>GH(V z1Oc|W=wlHMx)!yTHQPxh4{PosIFzGEsR&jl)+_2_QhVCJv|@TkdWvzKp=7$*i`Yjw zyO|X7U!)y05IxPf!T476D4&!eHV_(mH*{!N7O$s-G25y)D8I(%#vxUjgoQ5<^c9Ld zde5fPe@aWsvI$qh$`=ay3I8tLSPCxV7HuxQt?I9SsR^sH+NHV|x|~)2Snn}>GEcBH zST|dVHj(|J-R}5PIokOI6b7#bX{+ER#(ZeJIKEKUTG0SiKrbwzEF76736FMCRU8gw9IM~%c0$1 zqbg=8-oV=we@QeZIwahQSfZKcOkkj0xVipZh4eD;3c!lrilWkYA|mu>(a`D*RWqwP zSGG??6YUa_gfgy*_ai?;H_^Uhr!xi;=*|zIh#T;vJs8tt)TO)~`5@Rz{vv*9EvUAj zHc}g`_11!6`%0Hu=4g5qAPX1s&r8lp@=Sl!Qxmkrq^7xu^=7@kddWm@5881d*1481fS?3X}|`Lt81z(GYaMhRzLtASWUTjpy=}`KtU= z`P;l(y<5DSy+gQts&c)_pV6agzEKxq&pOI#3u{YiqqV-;P;EIPnY4ZGR_lb zD%w<`(L+!v)gP8)wmHhZs6AjzX*clXil1d^)kMp2+g#;t(k{|y)F{+;+BRBeTqj&} zXo_v(7&&jfx4jR&kG)U5eLMp^9PeZKEYD;Q-uK>n-+MRbo#XlFCHmsw3hxZhM9(x}SMN*j1kW_jckgF@@2U%ui;|y4B)fH0uc|NTMc6W&9Djk(s%p1) zk9U~5N!3;h(M`1&?TeJtovZTt!63!GU~BW%<$b9ez&#)x?rE#&BVWw^pJ-&ZCR?Cz zRdQ?~a?XGzXu6SXs9W??cnt$hL@;|3^~#BC3}-o$Ogafa4Zm7hiUu`q$#lpJ$V}ut zBnrrjP=^t2m99 zfVV(Cf==#07E)Bya#mZ`Tk0{=QPL4okQSu3VVq<5nGW^_wvKa&>9j5q65O|y|A|== zdMUefC3r1(s)A9AKQ)IjfbfEK7SUXFDtQeJC(c)&i33$~+4<7K zvJ0hL_UY1-rA*n`(pIG{OXa1q(x%e7(iWxC(kOcX@_THOx~F!b#cH4B{4chUe@1dv z^2_K=yp!C6jP zM(U30hI-CwsOm$0g3i)Paleawskw~)1P(ixc*d%)DsDifJgHZ#*R0dpb&lgzd(?pD zhz6!wqW#NIVC-wOm^L*>rdZ~~W|MWR^?$bRjvUEhQtno#HHS4&)nD4hhJ0fmquKP2 zDP(4v51EbDE!O?EZVsZus2r!>r_O4QX)099v_;1LMw@AiDQf1JkD9kPTQ%m`4%(FV zo(_t`qWr@-R=ro9(HzylRZF#n#(qYtX|pL}W}A{_^;o`VsZ}VYgDhNQ=19dZt`jnbf&A@6Yw)PtDMOcM*O`9~el)MIyQ z=2y3;G}hdtPQl`9{!>16J!;k(wTO+6{Yl;9BWP!9cb0dRbHNWnit?(!boqSO)$$Fs ztIChc>AIV+Ub@kecarzw(>k=is~!}d2H&J_axe2Aat{p5$_227za-k)dEzNzqGY3Z zS74?=1p8!YWjtuq(y+LOSP+I05Xyf+0Ax$y+{nHNKddkbLa@|KT6bKC_keZ*_rKIq z6W29ZaIIusNhD$w2g6n71%iZsoa~Ee0Bmf9g}xYBhCksS>>m)mM1PAviri{`jU z=)cjA<&p9fWK8qokB$QQe}xC8>`rP9`PN_RoLjqq=_YX_T>l(cPk6uR*)kOPn3E14 z3(-NALRN?xxW(Lg@dKFyu=W*wBS(WngUf@B!CvJLAX9wLgOPv%4h=CO7a&sPlW1kE zRqT)0Zr|?m?(#<=RXHLsQ+~aCP5BY|Z5TK_1HRNhI4~!$J0O86V_{g1RGwd+M$V7? zFTx9pLa|679QO}`EkYjm5Ayd9A3@FyAB4Yxe@D)Z211znhrUB$NEDwgg%7Fj6519z z9Qz=j9g0M2105+Wv5 z{rCwp=ggV8ckcTS+FM_g z$L!1bLVCTxCS1;R`l9~6#j3bUGa+LpNFB1x(OE5_o41NSU77BqMg^q(l;m4qp zGxu_sp`1aS(VP*SebV09>C(y4yJ}}GH#)qA9d*>YvFqh4<;C!0u+E}IrhSwLj9!NJ zhTW8VjBTYriX46v)>ZVEsTI5op5uNY4ffS@Ur>$~HW=CTYIpV<)R{G8UD>kiZrl#+ z2J9}}X6#PfM(kGXi}-u-Efd^aWjEJo!UFL;%$(Gc%+kzZ?DACCOqa}ECfrQS;D>TOLDe}o-qcozmsl4qKH|jGwC)Y6CH^a*A%5$sB!vx z)&ys(=m`EO{wk*}Aw@Win~m$A_f=i0*(4pJS+1$o9MMdX&XvkAA&(X3!~2>K5*1d_U$k?pFK&<{{=f z_8s12>K%TfBZW4HGP<6Ib_Nm|i`|3!9N&j+XMBYpL!62EhFOe(8!j{f6IzQlOU|>- zvCgtu3F5+lc(d3pxh`ZG+J)MOK9&bPlZgFAEpj1dXfhEg-iwt*rBO>ZTpO%iDj9DX zCs`sHXBjJ5E}3YVAXz4vU>Pr2DVc1UBv~PuWSJ;gEtw)&C7CRF9k-MY559?8OGg9` zu@16El17n!kUt>aBc3CkA^LFtkVZ1zA)X?7bN?d&*;evvb{+c`c{`iKDWg1=lDN51 z6rYG@nQGxsr%9U0?sIcgrmURzlsbmnlq?rAStcn=nnhCKePJNBjr@vT&%R0C#%6O2lqXUmcO=CxqFSa{ z*wm?#=CXgd1F0;To%bY1ozDx>5=Ad~t7ri}ihi4aj&2eZGfoPYFxJS3OsudQ^NEaA z^o}`DI8IEGEE6(VMk!R9LDJy;U`JSoS))l~NTlq={2}HUrqK@s2OU7)@vsf4XH23P05@M4v-crV$l+>Iw2Qs!4K+nyUUw-9r6DnePNRX@m}hamq)` z4LMSRd5rX!xsjA)9w$w#e@;=?{Da+|_aQY)evR`y^)~fUd?7UgXDj`TeUa5Q+HnG0 z8}mO++>B?IGE>kxqlrv1vHVK8+0n!C!qLLH*~xbubM}$_H?e$>nd#<954an&Y<9?fT)G z>sEM{H9@4NdCk7-zHR>N#z_Gi(rDh*go!z9$v3gA3$1hQzwB)sXL1g!bB&Yi+UJV6 z!`PRez1|OAtpANa5I_b7h?1tyjv2-yVz~GOK4%_a&YJ2?Ev(J04Z11rN$zr=)n`O5 zG|o3p3rq^cbb+NshW0RBXI^qI*`gsm}zj>|3PfaW{JMtKQm2rhpjw{BU zD-slUEZI_=Yo~CQw1gYrUEyx{N5l)nH%?G7sz{_=CN0*WH3!vwH48MAn!TE(=-KGD zXbq+V+JO_|+M4g12U(t5jHZxPWSiL(9hg*pwcO%(>1gTP;uN@!yZXB2o<&Vqsd3&@ zUXJgKua%$SZ)-e_?;Rin#5kB3BK|GnSA@<*4RwtQ_A0#SJ)kn z>5e;2kL#yvo?Gcz?%{f;do8{jzU}@S#>s(lq{+P7oU|OV08DJ_BI`W+Z+ot-$#+AmE z($DHLO_2tv8LsJ_)6COkG;z%_&2CLiU6*W+!Y2hIWadJ4A)qi-*hMM~yw|+dtjt>r zS`Qi~+bn&c=?(5p*bJ`cfoW@i@4y$~7vPuSZxF8$j}ea$J-EL}uMiIr-MK$Wh7yVL zdi+1;H&8QBx4gRi6aK}Lv6eBC*N|G|hR`JK2SN(*tt_`ku_g4gY`0=UaAI($VwXa# zg=$|xCTiakRzgmvHrH&bIaG7FW=KuD(zd17Q*O)+$WHq%d#!yH@C~>Fyd3^V^v$PW zH;^sd{S>TdE~^KrCGQJ$JFf-p5APzaK@etK5}adbg-e+m#A?Y8_IYcAJx~1AXTtp_ zY7e*N;QxvOnA6((m{Lv!jiVlw6CR8X7)=RzdvMhM7 zJPUP0XArg#ta%O<7C>xhL3U7PQgTI2K#xk_C}#W>8^!p4%B#XVH1 z;2hYyqSM(2*;Cp3*`wKG*(2HiLEJDG>>=zv>=Eo9>;dc_*j?CM$WpgA2lK#Qz@EWg z!k)mM!=Az(!*FSTdZfA5)XBQm_S-ebZSY+)jtk6#EP%|1EQF+*KJl9xTkzSa)0vjh zl_rdRG}%j?LK{Q&QK!*Owl4+@sCmjYZMC#W^hl0%!(KXE^B`{f7Z2j$!XPQhl* zHqI8#R!*^5VOE+;%qp|md{=s&a*ndbJk8>@xTqegoBGMJ)zX~v7iSLX800u4E&H2$ znfpKPMeYUeCGL6d6>fKG4{A4RS85k3Nw$v-z~>qP4$>z=~h zg}FLl8fYkdihP3HTz0MS??N`gXShAc z^&0hW>Q(9$>P_kj;Bw$A@C)!uaCHt9N6`!aD_DZm>9zW0$fd|q{SIU5Dn=K?FB_a;w~T_fDggL@Q$cPke+YgoA_mXGr!3{^NaSIc7}h3ewu!Y zzRtDQRZxZ~JBkK?fS`GBFbD*i3!e|41J4I7hA)9Hg|CFKfG>kDhnGR}5CB9z!T>S4 zEpD^h?l!sIZkxN@?Q%DD8QfO4L?9LL_|+hFA|E9`IBRoE5SW!NPcPsi7Bb^i(e2%0gQGs7MW-ilXx!DtY=2Ofd< z;N5sq(PP{r+zoGQ{5QmR#0zgHVP|1iVHe?DAJh-?!~Km|Ii3V1KtC0JEUYT5DM%IM zrG6wI`)~L!;{S)gOu9mvm~Mu51pfGQd4c=@nsAyl9hE`11?)n!0Tcp}KrWht?orUa zz*1l?SX!{8Am5N@pyJp#W{QzIf_sBe8We^S!zavgeTBAC+fv&~yAk67xB($R5MTpX z0RtQ1xHtKDOds+E%KHQ@**-ZV=}b<>I_pezu{w*P8~J|}o55Oz1Hhf zj=DVFQfhzp4e}qFx^W5?k8;(i8i)G+3B0wn%1&~%u=fDHasEfUEz2lh>R;*Ib)LG2 z=YZ#}bA%5a*QjB!nHU2u_ciBT!uCaxCm zv+uPRm`SwD-hgD0|EhJNe~JHZ>tcUSrk6dH9I)@Vf7CA5{wc{*T!4tx-PA3VQ&SyM zj?^W{Rmc^{Wys%YyWDB`I-W%#VUTa$OqVK$2G-j}hKZO3Ae}^6t zm>CtS(}L}c9Wp6XC>+eB4bPBF@V_Q~lQU!1x_$>4& ze1+Q%y9Vn4Pyo>g3<7F6DWZu~%)!MU)e;Rt(?c^`6VV)(N)ZM`31WhDwsdqhkzJbQ zXDhPt?7VEd?11dF?8dAoyDqEA8nai@Us=WE%|$9XuppPk{KM{4eXyc;#r%qP@zW}gL5-DYXQsgqsj z_M(zyAB{VL51RPu^~sURiQL^$vURext?r*nWPGx&TkxokW@~R7ta_<>r95dvm$xd< zuUeNYM}-!|CWJc2r^T`M1x=bRqH0%slKrhc?bzqg^KMZ!$%5i4;uWT=7_6t(8BU2&5m2^@w$?I?F#uKSW&bx)+#P z<#o#hV@sN1w2WsZ*7P>P9L7=^h?)CDe49q;rX=!(EtuX)y#BlUUi5qI{;K>$2M?j{ zuBXm>Pu8Y#YvrM&Qv6OgsghjucUe;L(i=>?VJ`L+_>1HBszr&diN0c>ghtAb{jBPc z&IFx-7coF!x)8+@RP$q<69)qG6s6L9sRiLgXb@gRR7pTalq4iEhm0#@N-PqG+ycD> zq(D%h7^J?ew(L0(k9IU*gB*Lg2|PnwzS9eQOsp|Rgh}PwE_}2j>#*7Dy8f$ zo5ulAt4Ft&GIP3%fI)%GgC{<9p^H;RG>RvO>sW9afm7 zaOncds314=Brv}4qmPj}N;pSI6Rzh77P6bPk~WTco%296JUu>W4xLqem-dpWWNnM~ z%YMjIMISYODOviFzXAVRJe-ZDc(|u29YyO{<4K$OBj|7WU+A3${|Ig}s)R?Fd&JWW zw}aKHM#)7`Axf{Q*HlOgh>uVpH%~lDbXr_5c@PE|?gbBl_JTUrh{L&A*!{RQxOKR- zxB|mpnU-WQ7+NohoLjkI1**%f7VRoiYRUqz zx3G2)Ywdb04f-dSYK@D+e!+gge!{-PzQNFdyKy35jdZnCr`ahbXtqj+N{35_Nk>XY zNk>RWONVL>N>^x(Nb5AarAIZVr7CC|Muqm1zR^5%K5%~3#EbtCUBs-zydl8CgSnD2 z9k@78MaUZL`5I+i+1vPkn4g&Am^GL@)F0&NGzpU%sVL2lH(c}I7d6v1YFF1IasSJk znSacG0M@bLo3y7)DQi=-Pxf7=Eb>W7Qf*CRO}OTE>T11%Isvu=RuXQL*Dmi*zJdH7 zc`zkQIz;Qrpt8zRx8p^niqfd=G$;fM!y>RxurILpu+Oj$u#d2>u)VB4q%%Ma1PiIk zVYWdBK#3p%s1{NKA>giJ9*JCjBBY6-17X*^3||Z{kjgZLnqHc@nwaLK^oO*!Of73y zbU^k~rY`!V2}mi@Ii~mJ_nggKKGz@De7DE5&vVlk_OCTQG>tdUHFdRqDF4UV+~s%W zxfi(id**v1{&mJ{taBt5fD6by#jM9j!o6xnrbnfl0kVJ$paIYbh`4s*ePN98h@w1l zpniXSNt#(Rz45EGck|9V?6q2lM zn^)Oz1~ekwF2Cs~8>ztwkRqfIc?B~Wwh9Jd{X+akFyP%`Q*xLeh}C(={asi-(oIR2 zkE2s1SAaB#oPF0M=ag{^L@h+`xYJn<(`?%>_?*w_?_*pcHcJi*k139NE{OQzjjV34Gun;Ddn7gPKkh<-+y9g} z#(cz_Yp|TPU`BtYPx5JU$!tlz4i zuOF^oYj7J*U^eP^>u00};GSW&qyA3U83I1Hs$T~@Tv{v#?YeJ(ooO% zyg1&zQne4?qt>A<4DRwdHy}jOXz){BghiXk820|e*6sDL~_-{diXx97n zGpft*d#k_TBvqwOais_kPfzCAXz`+dc=Kp`(hHnDi~j~PAkk`@GE`OI0^=)V1GF7b zcx5?%E)h&W5$hG}UUi;-f_{X!(Y2)N2znD7g$TIig50Dgm}3#+O-XrrhhQFKx$Gqx z%KSonpRR{>gmi)sb<+|+VLPV3lCJ;hej5E*d$0eF6qqT*vDDS7*fdl< zx@%%Szy>@KV57Sgm97i`i(HF=+>!0d>VNdIu8_r{1W3+~km`nOK z`UQr)m8!Q4ai6$Qe$ju^pG$KeQ!0_ukXhZsK&$X=@22|8Kq}-=@Nobdj$r;6 zvSsGT2FefqT=HuMReZGO6zF5wCX9$Z!Tdi~J1d%R04;QP6jTV^zA?h}#_eL4WM<%o z@GNMZVP}zE{uice^^uBx6^klrD&|F3vmaNiGXc$zN(B+c?Lje$a5>9HbI7vGG86yR z_$EP0wn%&)}h z39zswGf>IY|90n|ML~%!p3jDhhDQcY-2+d9w@2l{$}`DQ@h{!f%KVDkW%Y_tib$fh zZ@KSDl_CDDTACOnhDn&DDF$&G5rb5BNzWEySej~etXpDYcjQ4}OgV&A*CL=)^cD*v7C5$1sNgvqrcMr~i|jWV zuL9{145$L~H(()fEqo0efCIAdxT8UvdA~VrIbngA_|`@CJV!^z{~S)|Mkm8{*j4F1 z?SAJuvimnUO zh}&HMcjj7V6nGQ3BLIc#M1D;=!_c!9ur3&DB2NiE!lR-?#hmQr?3FA$iio;1#>|!) zMTMpDd-y~6M|daSOK;wg(`ODyt|KQlkfOwBsBv|6RdxZmD*z9i0Gto*(zNW0_1#Hz zw6nCu%w-5XG}BO;d6wOeT#wv<>-BJx!Kfpi4YrUVLpG4m! zvmE`n`DD7drK^>TA34T8%06T#HxxBU0UAIFKmh1hk`FLPP0>G*yr?!>8r4L*N4rHE z8jh>#LvxTB!YS2kWE;ZI;y=ajNItj+?u9$(qv>|~TXFziPWQu|^x0&v^L_A2h^`a{ zbH^g{OurobATKz}Sf~{Qe`JhxQtc4IfnYm9TfrRTaq%&6Gf8vFyV8@2(Yi6ZvAT}v zXBmbPsYEEBXY>_JWudY_30K0DSS4DCQKFRRLT5vyh5;p8i`!+6E4~W83%&@x39LG8 zXm03J*+SEN({IOY< zVY-=~hlbbEBZC?l5nxmp?GYW)NMs-9h`EDUn|PomBdtofNGy@;6SgwzO@8Y%+okfq zoW0!Ard?+GPWoCJdju|;TAK}~fOWd0?b4n@j%2skU5yS06F^m2xZG?KE z1j}Y~#6qI(u{?y_=Jun0H$F}vlMTr+$-U7T)(*Odm6-T6UC&@re_RK$aco^}!&Gln zZ|Xp1cpNH&OomogTa?i% zv};arA~sm-_@sH6@5VyJJREa?jh!dg|tSp&OB31|)uS%Th6Yi*L zw_rh&ZoH8BgZL?33&X>6iy(_3c-^c7RM>_Yt|aOIb3ce4se&fDdA=Jy7|t8+8_0E! zJk7lAE4No3P3puSbu%je#BY?f!`CX}iFUqT!j-;fRm%8-YI$N;Vu%NqANv3#XU;)70*mx0(bSDfIbCEAw8hg;gP;Kz}LVbh+&8^ znFpv=U_t4`%n9_^%s|A(#si^U@KNp??pg_nog|;(lyFy2+KP14`K-T4cigw!|G3kk zy`g;}ayWP2{oe5x?-O+^uNf_$e~k9P{m8wNZ=^qQhXr27-vS;}FPzDI?tbZh<$mY> z+dWr&UU;^2Vs<>|bP=z(eMwlkvG_jg1L=|Rp|Pi`jcEm9CE|^IWFsN75lPGDW#&Q) z*dFqJQ^?HXelTA!x3^rgbYtaU?O<(TER!;4-C`YT@Vm%`~J-k4l+;2ttjdg)_!U3-SuFb}M@LqtP#_q-*#u;*qx=tN7vrQ`N zR;$E*&6RD6MvU};d;w#9Am=(@ikLYjwRM~IP`T88-PPd6dq#PBdcnS2(3lAfbSc^M z$>$&*;9T%e$5rTAxF0eT5|wlV5P%&_=Mm^Z~0KdV!~D(UY%8w z)Xmg6`AEWY!Z!IN!UjTNq$nj%6{kv4ij*>?N~u$tRB1|^(xo=im($nK7t%M=SJIcz zx6!xLuZItWujRt~!(_IU--^6}{+ZpH-HQE?yo`Q`eUPo<_$V^Il)IWN|!OYLXL1Ga|eB>aJKlAWSelSFlS+{r;lMFBd7=>QV>}z7{eH0++mdP zm(u%3|2B0ncQgk~K~vNkvs!KQZO?3$a%=gR@|)$i%9}7~_SVie&SkEDU4z_%-D;1< zv&OU5L-dlolf09?=e$Cn$aldv!#~qM)HvKY%-Ao`Kd{Ys+P~chh*G0K2Hf2yN4{zT zn>(5NQPQN4DQ>md7TBKK#+KhMx7*t~6SUp58_tmHHvK=>5Vwu7kRIO@d&R#0 z`9>QD1k9`xVNb*zIUWX34pZKf`1CjQ1x#MV70HiAqCKO%q96vC0bwBAg>JMP<3_r% z?gBT;jdSlpohn#Vm>Y}Uh|Z#SqfQqrE*yv6gl<6ZN1ZQNUN{LYM{Ps*!MDKvg+7eB zRIs{m8hRJHHTnSRLcxl{$>?HKC)9RyUwlh!3-n&p*@C5o6VNi$7IZIsb8Iv8LDc^W zRu)b{??AUi??as{SXMX@U4+_-?v4Ko+Z;WOJe_<9b+KSo;nW;@C%P4S59&<8lEU$5 zDQYviC%zfB5#6sK+_0PPr|5vep`)ce z8~=;^8<~syRQs{kZVUhgz#8&u$}3WH+Hu+}rVli<_N?&{{$6;c`w78ASX6SGv)6qb z9%*nlP6@UQy$oCo4i<$?yFxodZyaLXpR%zzqrFa9v5eA4>RZ>Z4$5|r-vQnN-m)|7 z+vJ_>ttKAFMA^e}m}%T`lpn&Nh-o=yZnW^I=Pd0x54eMAs2Eh`wl?W+4+xeqC`_WTCll)F?=gAbd)jzS;ve1*%nd%C-;A6j z_DN`xTcnBrF|bO=Wz8gypaSUaA_?*f!15+h&OB-tSToX`;N0L<JhY%JKw&-x`jC!Da1YsE=Rw0iRMI4c7@~!fTg!P2s z%8|+&g%g~8{de%U@%Qj|@q-%&sdMUkgd2pB`~3zyXxQB;Q1WX zRLoznvoI(NgCu5psd}rt8FMCR3)n)oN>hn%igB{BS-7d*qE<gOt$3rq!XO}#_wvAhNwBL9-&#SX{I@$DbD9t{IBM$`XBXi)U))1nuE1! z_FD4$BEOuB>4^EsuB#nbeYRp`MQ(LPvx@O-3Z-}9vx3FZ6YMt?wecq=2O4j-a_T7P z%A;~o!S#Z>oT+9LF;CWv`-VanO%^RKEw=nJ&$q;=KP@Zp6FB2#1-wmEhwKt-GO3U0 zQ}9!Qne3RHm0Zc)ksMQdD%#Wf!g{ct zZLoc75;{#UM^=3eHD;-p4Hy(%PP9{<6Vs0U* zusLyH$-Lm)quLrGb5r%)Cb}s$isSFM&uBq;*tgV{tx?0>Uc0oG; zHJZPQn4({a4T}w~%H;{5jLSr}`)goD)fMy_cUQrNl3OKuMHK_4s7@~zOk|vQKNfso z9GC4z|3JH$U=paVShpaN6dq?*RjxlV0 zPT;+^Uupl+-`e9vtl~B$KTDpKL5Uj_53Pf87*itwK#49W)nQukd(mgqV=>e5f0uMu zMHM3yv7nK>fnClWLa~cTmZN4GbrF6sz5}bA^vgKg%CoJFowPT1oOZNwE^}gCnOG&C zM!y^z5*t)?g@2d6!*#P{qM$uvF$2w{>!vaLdJN)!%0?>&2(5mtakv;I>7CAfjm;O* zSkZ>j`E&C(giBYZHN0Tuxx3T)}i`jJI9>wnb0uRouSx%h^anL>cTa8V*O z%&(~^YXC!2YwNp~{lyW2Dh zpsKQFU}2dCEXf-I8VOpR1FZoiQqA~d>CO4SeBH`ewXqs*LuFYb_;zF>t|s_4)P?-fd=S%MtHt9noV&YeSD&o80R77SvHK@LUAk>i4b(27uD@I_#&cANHyT&C`+ zR$;QKuAvv9%hpx?-eskjE7sNi$C}UD71~-|S~s$`Ek9qGTcYg{en1%_ohrRkq%2-p zyuPHaffCLKcQGxNE|MxVC7N|otY(0wzh;qUp{D7aY4&UOY0jwUNk=h8GZKPtPf zObnLiZ7DlII7xt{UVv<><>(y9mT%5;90Vc5kSpAMo26ANlV<7ecSYDTq~}YN!d? zB{Y~%228-DRX-7(^S9v|lrvC6Shb|V&Q1K`^lB+3JC$f{+z@GA*$dGZu{+p5C|55D z^;Rto}(C^ZR4BHGh(?3}n^7bOF zycy;Z;0e2D^@)lkK3B1TqxC`(KxGQj@iNeuR5S6Xv z8X}h4mtqmMC~XGyL5Y?v=BR~C-D|nS?N9w-e3C#V8`PP^l}7b!We);X zwMn@zKGXii-pp~-Vd34Q>XTid=;Acdq@P=Ts9IcQaLOx@>FGQN?GbM=?Lc~|vpCqJ z_!RUsbQ*LjbP64u9rv@BF5_ySNfzorrIM|$S7bUnLml2(*)h@1WeeL8L1@e|F|DUk5<7F z-90}H9}O1_4-AyL$DZci4wXA9k0tfuPr8|vc@;NvW$p24MMa{$ueWfO?|GFf{;;|@ zu{$wTTp;0+?)fJfz_I_TdZZhJ?_#jPJRy-KsTRk2CH5lrAy6_}jdqTWC@Jl20K zRcg`N%cY<6%?zc6mHK6d`}&j6xk^w5oVhI8FS;T+Ai63#D7soCFYZ~gzxa}9pJ+cK zSL*!&KY+l)o+QE1&QUnvLiT^z@r~EA*RwaWH?vr1e{;2|ne|?I)Nb{#ylUSxMA2a`E-T*EGE&(P2A4B#--vUQLH^Mi-k%%RbYQ#LiT!0dI7FgD6)OtP>y z^QFup<`;cpP7yOCYlM7OxfCfidNp2JbZE3wbV9?G@b2(Z!FWb)nP38Am?&nd;@+mH z;3r`N@3?D8QXXaa1?MFa0+k|Z~|}~ zFdaAtvW3`7oWTV)svT>= zIVBWI*1MG*6=WWGW|Gx zIz5avfHXn-jQ@@PlI|4pgJ!gW3xD6 zN*U43Jw@?~cABd#M(QEUGW=Rrp6OMBkZhHloIDy`U_Gyc+j`sR<*Q>q?X4ZB9F`=# zxRKbhq;<*S>Jv>$D2o%Dp3Cb_d(OK~TkRZF>{lkLNUplrIIWMrf{3JFj17tnth&Yj zOg~TD>snk@CYW2IQB*K;KT3S*34-1X12d1r(P4y#nIO;UDrBOMhgJ8&)7smua)0Fy z-P5vGigAimqQ7vxZ>s-ml_qg8QDz(~CP>7j*M3m-!1U)>VPL5+$||WYj;&KzO`lvH zjqOdPrE92Y+5pCV%ER~$?RM=6Y#KQ@*cW*};4Dob?aWR&Y!~bRHjJ_n=lA!9L=4aj zHJvLRRQg>zx?vc%HxUZHg=v=}7my0L`~Wh9)Rev?K286d-bT7cx=yOX)#5M)oFRtM zhLL68uv;--0wW9lqzCaA(6{)v`VW&ju-}lMNweH}loqmA+%Z&+Y)Qv*i2kK(kvho_`gc0e4RB*o zPwP9T+N8GOx8nW6T}&ZXgau>268ht+u}N%^c5SFv*(2aX;BV-Ng6)u9ptcZK?eEki zyr}iYa4ml*)5BVVADorBS8?L2)vy|jrMFx2b%tLm!>Z29?D;8JO zRwUT}BhQbnVn3-!#@CtvW+F#TfmXJa>&!~x11XZ*lTs$aS~i%276Nsrr8OrjyUFcM zrOCb+-zLb(w#jM9DcloLnsu7ByY59LDLz-1yQpK@I@!+HaOG{w3#vAjFOKz!FNhQD zhvHN1AM6>&L5Godn_8a46{m=^s`ppRsDR@3STR@}Rss71`w#XT_Ae|Co)6!PEGDc*+G>x2=0wS;Ey;^SAn8a# zRjrJ*Lv}+tn281)?rG8LB1N%-u)Fww#cRz_W7{>&5kp{>fOMXfF${@T|)Kb|aNjn~v)~RSOKSu8$_)j+9e?gp- zgrqd7ggt|d;%|oimiCirWu1$T=45|l`l7IuF73d>)25}tFevPne{>|D)sVGk#aRqW zu3cTTtcHm?71{y%3Zf&|in<%R8QK_H8-9Vlr_eZ6*cMK}3ZUdNA-G)CA4CFd$IQbn zz>dNGz|O~x#=ao9Ye_ZH;#06{*g8>lX|!}nG1fQ)_yhbCd_L?Ya5$6(Vu7p>J7f=jf%gOsL3joH4dRCT z`EFv4f!gPDk-LKZf-6H%1VC^Y zd|OVV>>hV2l_C4r_%iq`fk`$`j!#bG9*Q!pbFKReJL_byCzZxRe0-*EVenSrX7$>_ zGdh9o9;%0Jr0SFEv+|;iQr@{7S~UZ`y}VgyW$a|Ae=a^JPO~pl+0+Y^Q9G{(bUN-UtCj}46VtGdqrNIyf|<@yjBM5PXP%U%d766_6K;xkGU8kFkih$7-q?;WwCjv?&v;=%Lp>;Y(Rh>T~J=I zqF}Y6ObU@MOdZXn8srEQLWL+tcn~^703jrZpx-&~I4eb)w6~dCNgK5{NHH4J&|vkAsvL1*Qbk9tVd- z%j&^RcQv>um-hqu6Z#$cMX$^1vpca{u$!>ku-mcU;~&JUwd$}?JRh?xvj_XC>VhOz zt3h>8bW}uZ*J_6rG`AD5FAc8@6hXLr0OthgY#N1~lrB!QQDgOIIej>bxwV9Lgc`yr zTxA*xJ(yXgU#;(#N6gRU2QjZw$5?|%LE#=|?vl{Q8jQGuJBYc9JA~P2*sK45x0uMG zdxmfE{n*!49gJ`AV~MjcvoZ4x2*Vc1cHBu&q&8IRF7=dR$hDkC?qIISybVqvMv)O@FUY^O^-w2tRBg*#YK<1- z+)O%2+Cn--+L1R?{xUTZ_XT^#Jd+6VNjrK1hKjs0358VqH3fTo244Ez82N?$04H*KNBd4JjMwjD1CblK{bw?_X zCA6{qkUfyO@;}g(fL6ejz}Miu&mnaQ??bb(e?=!i0U2OsB6Je8Z-Eo$fZc}Ogx!JNg57{!hwYIN z@FYADPsT?h;YcJBicB?S#3zii>Yb_q(OZ#kYOMyZ8KzmONo&qXsd+`}FUnqOwrU0F z8mPN8_v8Ppy?0zw_xC?eAUkA0fFz70j06ZPY%)j!fv`!~$PlP|g1dD=YwI3#$Z6Fo z)z)h3z-oQ9E>K%*t%Gh`2UxpZ*!JD!`kk8~rTz5x`FtLq$JamNIj?i>Yux*~_jO+9 z`Mej=@1h_0zl8rMTq>@S{NVROP8r4C@=QQ3%M!V6*AI)bd-DOoBsCD zfPk+<&j;AUbb+VB-UuX`n4maSYtYY{sHo=Lr&KS7t0NAmG;(XCSL7RdcE}D{yR~(3 zXhp!RyxDmbb)~f;)@j2i;|1fq^sDKKhHTRbQ@c6dveltfC){j{; zvQ@TqHb&0k99i!1Tz%dn`f2%R45N(~jq}sLPERt}Oz)YD=BLdGmL-<67JbIInN8NS z*37JHSu?ZMw)Hk<&XOGe+;?&fd81nO)AN1oV*6INC5_J*XPJJs^w@H9U&{Z*b3x<6 z#`%qpHqC2nYiwks2xW81H>sDl~%-SD8B3A3q6!jH7rEbfbRJ0=d%gWb_UM+g1Xr{U=Vo_G> zk?_OeJ>ee|O)T`XR~L`hKb}=-%FYPQy-@jhes}mzN0Z}gLsiDvoE?rvhgz4!cq8=% zzg*g?q+j^%?6bn^h%>CytPa*%Rs{X7INKhY(45dyf44!_aJ7EAd?9-Rdp!Huf*bkr zh}rI6OF34^SG|b3hw&v#OC#44&X6EGTS2Svy>Q=~Z|IMNE0=^3UC?F#&G4N>EtASmb)_@?X z>an0}8dG>!)GtBLh6hEwt_qW9L<%Ao%U6y(??1vlTeUAJOSLyBivJ_+&$t|)v5n~? z%UC+rnVhu3jN+L^Pe<*m?@5(5KA+l_YDwFf`b>3x+8b$~*Vc)Dm&Z%?MkPi!imtd{ zRm`k-r&J-X5HBd*T>7bZZE2O_L&@q^`>CWONv|osEzPE%W9&5eDHEmavU}cRqf?FX zzQW)~r3Uq=q(+vFB~I@$7Nz^j-cG;D{4#j1>^J?@O3$i>s%2GeH3#egrnRQYDQfnW zGGWQHDYFVHQ{PGPFe}W{%!}f$$KTMNHv3p6TgIn)l<%>K3O7487S1T?DDlf^?TkOG zO-p!QJKIMRzgv5tWNpUJ8I74oGYugZWyw{OSj{Yc%m`my>I)S|DpchuR!teN_Sq1N z|CNwU{)cK`vPKomh`H@iT4B@{mkY99h^cV2C1-|i^koH{bUfymUEUjdJm6j5y;(1m ztLfRyyzIEJt+A_O)p6m0KgMR(zT28z68~1%i-DXVcF^y>Kh>6Vy;Go)sTv9oEyzq+q%O*xaw_LUv0;)|2RZ>Ov+`_B7*$>+L>;t_E- za~zcub7!lz=6+iqSJGb*RY@uz59dTE{4VCLPV;cwEuT@_P>_>TZ`xO>14*&T{N&!GRrR-1Po_4eMK>m-k+j~_t*MpCQ<68QT~1x6 z-IVl4@_1x8c(ryn5X4_nY$p#zcGpaVRba~qbNH>uJ`uk^ zdYsQQ!NnmZq3?#pl*X1$mfV#TNS~6% z$=YRK$*TPi`zr#j1Xu%41V#rf4${k|it&=Gl04~q%KMR;;Kfpgx>Bu`wa!+yX;#Y8 zG%Mtt!9^igWv_*d@Shy@TgU-_T1s`OEa0nvf-p9DB?&eq_(D3HN4y~xuL6JXT!Ys z(b22xxWO}|$?6XAc)7`McWYHwt-E$+4&=;GCFtjc|B$DyomwlDpGZBM`dHrA;w?peVoTk;(A5D~!n*SI?0<4(-|nB#fd-0C^sh+i)Hvf)xgzxeye zu^NLWSTiDOr{;T2aFi;^6v>O!(&Om+IrZ+{p=$#UMtoEMOykXln|_O$J}U?jE^nxA zc(Gw&!`g;@BUB^b4J{8Co$+z&$WKN-#We9gtbc4o^N7fzNY*z+Ul$cM{gGfy^h-RJ zuq5%d#8HXwB}UW2N_$6~PUufKA^5)bs}VgliHaSP+fn(^Qc<($j-tM%wc>Q?($d#T zN0qKt$fS>Xe$U%%e@}6MjlML^sNmL{(m?ey z>di^9>35AA(@SJ`(q9#?QLff_hU}49H6O{J@tbS-rQnxJc~x`O3su{KN!5y)_w92` zKbm?x=ceqfy0QunoFL$JU>nmnk&rT2zHx)HDGj@ zfZA~}-66C6XGD30UhzLud)pdcuqdXcqFGy8{!G@VF{2#kk{1e=hi>;B5%7uQDaRA# zv@mwy$G*z!-|}BA|3vtD_KdLIu@_>~;wl0;ah0`O!`cJSW`7g*Q{V~B0pXuQTTm<0 zk5Lz!vZ=CKbt0&|Oqp6{yJmk-bGF>8@?D#{&X%(!hbMH8dO|#}?7gxxRgZ+<89_^Z zu}mN3QF( zG=9J3rPO{@BXDpl*4364)E2y)|A#}|nxx6UpemQARirsK2_6;ROI%QSCVy&8xNs%U z%G=I68&?$>68TG#F4-&jlcW;~5l!19+a<3_`uvxOWV9z5gWcqAfo`fMO;eIvS(Aiz zyF9Gv71{yX_c6O^hiUt0N9)y1;Z3cPpEP{h@VTc)w5Y(lV4mEn%hZ)H9E{HV)@ju} zh7x11accVc^bkXmX}>AK{FM2kIovYea?BEy;hni8^Fn5Y^|-YvD<$iTtVgnaZOd(U zY>(!!bKlOLloyv*q;JeWW+*d$WNbu=nw7g@%kELcV%e<6X zWqsG0mUSU(bhgB{(ss`_H;0>huob_kXV*WH|E{6Z_^EM5`la-6gU)o&lxkjXzG9BH zJZ^cdrI}ZlzcR;Ip0J#>#Aiq|S7lzwthK&xHD>i?jn59SwcBVp3v&dyt=+j(^OEz* z^kehiF;o~oF-}jvn65UYnGTpz%*)LE<|s>><%A_J!!L71W?$wA>w8vx)}^em*)rQ| z+XLJD9M9atxl{5I^Gfui^WQU68$UPBO7BaLG#E^WO*->R^Hp=KWs&85OG1V$b9Lrd znRV7v*7U6YtO?nHwx@0GtvRhZ!rY$R=Dd`=a{ajcqlQxBhsNggFVaH|$tGe-G%q$^ zGDlbzSdLqwGsKxoGcRUVTHmo&XQgI+nKdfg&$hyL*Y;QrC-*?^;o6)%3P0*}T-;XVzF+E$>=lGki0bXI{>%ww|!+vMy$|j>(qVR@v^`=H>8m z59KE0IrO9QPZ~xT&l_i__or(NM$-|K-n`2EwK>l6q~(+)F~dJ|P3G0idg}*PQ`VKN ziP=H6XKWrhZ8@Ucqq(Vh75ee{S-Mh2Q}8t@Uy&>6R^EtI20tymuX3nE(!*ubl#?`S z&1`wT-}>MS5ihrfl=_d1x*f8||C4~Mu;jouG(kZDs(C>-G?s96)UQEn!<7-cRBHL3 z(SJlgDe8{siD3D(d!OO2_P$hoG~!+^@JFR=9dU5P=DO$+EBR4eJy**$bF;b0+&u2w zU^hw3h}pq+{VrCYtbf1WtAG~$Va&C9_vnvfK8g`33MB6vT5F7&z+vLMeVTWfnVN1R)upOoKV)EY8P@0h;J zYRL|@J#X{Nt=CV@@2kFC{fIHakY!5C_#tb0wlud%-;(dC$dPm#jwl^QMR2?Hp31Hc zPCsXylCGA0p5CIICC~Ew1r%gm0P!j zl=u&Xbon2%j?PNX`Zz$GeLkxx+ZvV>7#QTQnj7R}TW0&yHYdj%&dU8y&|A5&dFlK@ z{d3`ph=%-~DwX_H{rzZxB2UtzycroB{EYO0sze={9wD2qoU94g%#j!PZ3w;?@k&UU ze?x23Pa$vke;SY-mJ+xvaIZ!l6sVdXbW@WN9v<~uP)B%h#BNo%oa1v|{IvJB5eG(m zA^uGKxp+?SJ-^4~Q`nQ)jmF1wD)n>HpUA1w3l;g2qsm*6A;Hf|-PEP(u=GgT4CNF} zgyvCsq2G(amm;=?l>0YE{T#B_|FZyFSZd(*z}9^lMNp7xLC`HtW_U!@??DhA649lK zkngX%9yw8?(tH_FAGJqwU89QHMSGpLgSM0Axvmgj4z_kN0+2o+ zL|q2M*UjNpMXPeFc5|nB(e`q`rfscz!flG%WVdFwscu`io4H>mKIzuZeVV(QJCU1A zi`5w!X}VOMjgif$b*ph3;pR!>(YUlCw3f2_ucNg<+$10e&-arHPT+LYu&}Y!P>!^MH|Qc!>y}scipRX&u}MmCvmseJ{j~>)zn* zsC%=H7V~`F<8Bphm2M4g-HhGLS#Ga$U*dLhw{drHU*qnq+s@5(+f}!ko1n9_GV z+#a|sqCH7_g0_IRkk&?foVJQPnx@s67>RCmZhV@O#&_RWHOl&QNd`v7h8;^Gn(h>iKO6CtcQoJY4WI9lbdFaaWqeuI+$!Ljur0pPdZ7|?-#=|io}$f!)PSZdtN<}mAjUmqOfFe9MnE`tSU zSj;5%L<<~U9})=rX@)RpSehq=Mm95|Fu{`7P)t>u_&?WM)HHMYghwrvMUPmUrq6T^ z!(#bIw*y_RP(22b2a}&ZSpEO4b~wsmM!E*^;ys4;zYN02e%OC_`f98cI=_nLbXXWGbM2DVIU1 za=;MK8yfe?SS zC?B-zRXo`8W1K%#ozsO6!Wq)R7OUTk6T-&Ha#xE4)y9xl4d>%nuGa2U*epq2u}6Itz9d(dcxta;yg)be_VVJ@XjgtaQU3VlW6b9-4#Pz zJWmMCzO@SHaiq&z+vH9wfIVWFKU@l|6@g`Us3)}jV&g-XmuxmzlKdE?-&ebXwl>Eq zf`Rln2FN5@;aZzj06PL@5wPPpTL5+2m66bY3(uLzPfLf|?Me~!O^M?Xi&Put0r6_J z8oJbK2{;1KT)cjS5W0f2OmZkdtERz&IkgP(eV{ho9n4BC2VyG16yQ*31(eE%HRWN6 z9lkOK1XP51!@5`1KA;T2bFfmW^#;XhpLp_$QoG87Gk9k;6vGvtWNc5Tj)q%VVItnp zO*d%jP-z|i@W!HGSXo$`Ks7`LRNAivP%@jNgwD+zI{7n6`w_#tXlCh{v3WDcOtDz< zGO{hzHEs|*#u`ojqt`ymBCls^-xfppHmQPauGCs-#G_jKF_U;UXw$sOf@#`=ESRvk z&XY7errk-0FV@xhK<6kegA^>(YTO~_ZL1$>XKEQRwN1+cA)V_Bk!@N}a=A_WIt{eD z>O`=6B)WG$q227^Ijk#1qE23@_V2LIM*k6$&P?M`5z$JZQe!Z9p=B7j*>26AV+k>1QllZ6yw07k1$>Ir#v>xb(3I5=SOcFrj^Am6Zprp&s zPw?-c1jjd`AXgDeY_K2Ti(Tsdx4a_Zu_W(6%8m4DlJudp0uoT1^i~vHOcF__5 zh<9p5x)dxs!h(T&f@dLboKL#RhNVp*W)gfg>3$Hb2@hkyNJm~NSlp9+$aPxsNq6Xd zMa>{VjAR89icXt7VW2k53L;vv5Ej{D(S2b$OLU$xq(QB~zry9iE`2 z@%7MiA&5;bsFDwH$i2Aa3>uj9ygJg7kUTpj2)~fpP>d^7o+ESEI%dJwjw<6Vq<4HW zn@6iA7iJ`#bcPAL!5Hd67+DC;!JlPAF3h;n3JCNrZvi6aiR{vQi031`e58nv%hT zIOdaFxOp~T4a$ZTAw-_bmyqI-DHfr$Y3BH%=FzhzkC|b?0aQCOvvRe$7!+WW`N8DX zDJfIraBZT<2<;0}c;K1BPles9Q@F5ZRSFXVl+A+%N+rdsQucEo?WceWau8DNdEj}m zIRyGIq#n5q3gHvWDlaeI*`$AcYMVP0 zyp-xidN-vWafjM!PCV(~oN7;kf&qyR+IFV;L1)Z#lS^vX;50ciT9gF6J5%uyfGX)d zpZbO;eD`rgGPHb!-dz&4-sRm^hBHUGO`S4iU_f7)B5nV7sfUEnFlBlgbpDo=z^5&N2 z$<5;)qgD^{_%ms{X!PdE6Gp?dF&sbkLnH8?Nt2M+=hC(bLHVRu3Y)g1iJ$?*A~^JN z8XuG|r+Grp^u_pqdri!O7RuUp#yc29o6;Dh^X0VB?(p9G9yK5ejG~iOucqA-!ThV? zVbD&}c)%JvQw=RLCKo!TOcu-^U8EeQ3iv*1=;`pG!-Fb169h6Qi?qL;)+>j;B}I|Y zem;#2^Ry8hxY08+9PXt?I907niqb|1peQv$NIJhr!;oj-mox_KZWejMf}ilDqWW_H zv`-My;nS5~B8aV+6#$(Ncyti@=scm}b1|2gy>zj(As;U=Kj5i`eE1MMNf9{a(vWO4GQXK{^qrJk1Ty#T{H;A4#^Pqbv&ksC(bjd>oFX-~o(P4^@?ytUi z5iEP^uYQO~ou3W^l)w7EyTykAtz%{>s78G$2`|K3A{O8@7X95%1RMNx;eba7q0`-$ z37v1J(P7tUFFtg>gV%4h7Y_c^xLJ68hE7edE;7$--i z4N@T!q7syxj$K}X;E-UwW|qGS8UlumR|Ks!-tohZGRq^Bu2Z+BXxOO}LHfrlv&U-!dw5aU|DvFAGFV#6^!fb=`fv42yIC^1{~;T z_(01Q1|23P>2ko7tn&ixv&B5PdxOCzsOoIc|FJ{}3yj5LP%hAU6Zw3dkOSwQ!lPfD zy@Ut1N+?SM9%!*tc!5wC=F{<{&WoT&D4S?k>+rFaev%ai+O;}y$Io0XI5z6|aOB|Z z;D<#Fa2%Q)`j-}TTNMYEXLW31*`#B-gK%uIvg0MZO2U`bN)Ww*(phVy8XV8*gm7eR zvBFhmS)igr&v%??m%+S1r5k~SNp2WfdPZ020~2=@ z`_MAs=ry*OjQ>jaiYMg!fgN4-9ajL$4;4p2`*&O(jJ$<+nA4DcBuor1zR2+%QgvWC z62^ylhl^!H#|mNf+BqufSWmcdxL8R^0@&CwN9~k4ZsU2>Ci>%TgXQ~g>s0PApyepY z>YsHi8f@DV?CgOE?!7dp78(tHbZ}$~GvUT>Ix#%hGRHYNWgWliRFtN3mEYk8L_vQy zJ`Y5GTqcbCj}D{JUv&~v_^WQW2sZKg3|RL$Ugb$FJ&#faB%h`K!JXK-`g9MN*jFrq zyL>&5oZ;)&i{Q0)FcPGmrX*0Ie>|LRZJsrCrln{mS!~lErbCUA9Z3v@`jP;+=gz8u z#>?JxNV(u0MB>Kl``w9olKx{FObK1df&PhA7;k)3EQG_)&*gM%!W;e4H$oQNUC87^ zOXx}-{CWwut3A)p#ijo>Pp1K;DS9>>d7K$GB=Ml9jmaRDQ}jzD5G<$5!Tyy81KMtR zcoP0o`tNaR*utUC4~GqockyTP7EU7cZ{c8wunvDZPw7RVS;vvUi+xyk(N4XP^zYDr z848?3c5k?`hm0aIvNb`WM zw+wVhHPEGG?pubR85oi_Ec6eB{vsn25}86Jt-7NdMXCKND^rpRaT|{o0Kes`Z`uYIwWH;0X`94Sp`e zqRPNQm%Zx;C11y6{8RJOEk%#mnnvN6Dl)UNL1^nSlzUR=C2xky0UDaI7OM((F=v|% zO!)Y2P>`$LZ{D9T1p85gfa=bb_vZ&givxT5>mHE+norGV;W%&a!7IFaIv)1!Q9}S0 zw0L=ix`ts@C|uPXKRsXW>Sg&cLy+sNWdGnbc--bFWf1JXsbsZ4j0&i4%>&mT8z^oG7G4hd=h%+MqS z!x>2^bbeys!s(-|2xz>IQvC*BDWv~~i+S`-6>iteIBw-_G^`oG34HMuHw2WQKUA;Z zcVO5|3{$v(Pg^d?tHLDEb_FMGkh^jBVsL2E z>Ey$u#wAR6e+_2en)j4QpkbXa15U0no+n?l8|Tnqm#8(4Z7yn>G^TjW9LP8wEb%BP zut0xER1BH@j8V&m`#*=X@TnNefKR$hd`RCq;{q1swTWfm*lhG9uWvSv^Pm^R9}gd4WXA>3zn~p?EP1bX&kcfy74BL zyz-l|qmJ5cHaoYL1hCix;zE96& zk#)Dy|764NddwoV{E^Nj1HY$V52iNvkLUZ!z=U6KAV2z>a%iw=Z5b0X*^8pU^1YN! z#s->hd4TpmDkikwi?ov+O4CXem>yvUkXD;13@^u7j-q3ti37h0RC;juh`6Br4D&;E zC8m@9@Zvd1X-A(Ymvm1yy~KsSIVN22z0|QT$Idw>CfwMpj>EK|4+os;#W;l)M46FZ z@WH?$jGLQHxEr*}lAUGb?4u?lo7y7AJ8K{-A2&@4fWswEhCufQ69xpCd>v_j(G(j9 zw{p!a_~dOjVFuln-0=pfW`5LP7v|of*!Xbjh7RAVX24N zlcaf=tJ$1tOcS`7%f`%vr^%x@ixw;Sq=#qrRltq4J;ojyBI^zy|7OXxCykAXcOfcKQy);5N_vk~+}o=14Ff8_XB1 zsS3kXS{nLZc<>ZvA^lOhtivDe*7887N>F``2?gTCp&b@8oBU}pZxX{N<>pw3(zAU@ zX@yxzBU>uXat;}2FuQvY3NX0bcmdt$MgJUYQViw2pe*uJ2h zY!<`7MDrdnUM^Qa^CaA7Odgb&WcFlp91DZV0~>uK$i*4vY!70eWA?!$fMOQz>XJkJ zAw4++Q`g!M9}vZdNMQaFvlmRcnQpxGN7@3Fi4k&{T|RNKbyikkuFNy^99BsaOi_p<#4r55!IB(6PjL$c$T{hY>F3 zPwt4kUFxQ%bUYAUHPWH$bu(sDwF>e6cg#XIV3;d_mYOhe$5>1R_U~6pU_epf(i+zI z388WI5|`Gy8aG;^8&nmWv5Kzz3bpeX%Ni{2v|w6MYhj8&em67>2F~EHl}|4TBPi|0 zkh;&z;=#phY&G=0ZK9LLYvvE>!2QV_1Q(`P1cK_%C5YkNHuItHwl0}e#+vcV25c=m5JgK+wG9Nfr>j53_Ei-rQvhbn%)G`K$ETR~&EFDzInO7~RIMDcp1#`S2e17&UvtXuH zq-Mg8Fa1qD6RU{t*k|#9gI~1@;l-=VxZpTw!Fl)fGA8t1Sr+FsI#xvZ!@V904~~4j z3}eSc*MW7qO-)9#0uInuC_%}|;DCX#0yCm05xX+O7nku5DsgF3 zXK+CyQHMZ_8h!Y$s)LMB$4S4zN=DCWbp^ZXE3*{awoL|dL;8Q^k8HI!^<%izRAV=el$ z|zLgkT9Ki-wwDK{Q`qmSrH&^0 z_H^T53VX0=r}Wr~5;5+%GMHpnPez0YDt6N`>Z_6Y5#@&&3|G!|H*5TOZ|FMn#J;J&6GE+VTa6;=> z8P7b_?m+K18Jx8@nF4}f=axXS`d&s18}OG8Ir|YmoU&h<1cv>%s&?Bn{-lnX$qs>2 zr#XnDoaTf9zun4%)h}>Z5TnTyz}?_DoWwJ^Jkk}J`Mnrg*RWi8D6IM{qz2kQ3lV|V zlqu-QS1E|nl-cqGD2`=fRQiErEKK}B;zuHnWg=vQV5tyVK4jwlteMXz2$o*{J06Po z>mrWR`rqTB|L}8yqJuT}Z-(>Vp+{Idi+jNBA~(A5-x zNX#?2TuPN-Rvw*u&no0#&dT&h#LbX{_ zMZEop+NsHiG1Piq3^B$by!CmRC-lbi)>9|MDaio;ikA@j-*y?8u=6FQ34|M!h^r)6 zS#VmcmBFSot2ZTi!K%0M3W|grI-Jv4y`Ww!GeV2b`XQCD3Y3XE^j0DC1=eDKF$m%M zz!@Kz4Eh6W>pks`@KiUIjbkO?9kjmhv4Z)#Hc+f~y&?B#{fX){~F{|k- z6T|!mVoZeVurnX{X?@_37|~_tv8W2*#uau9G^Sg*&}FnT;I0tCpf;mb49&r{2uu$) zB!J(7GI5ycRwkH&WE_N!gQ!Y`h$!=kG2NO%rvTy{7cAV8Y4su(GOPtISh!;jhYRa^ zIWl6mTIae$V?|g5Xb*CID2W4o;(6CJ!3Fce1-q7`w)dw2<@w%hLfsxaq#JE+C;(#(#hA1AE z5zAsLjRqI?OT{jqgCUU#Ysf08hX!z-&>41KCB zgvM?nCE&6u%NsgnYG3GW!)P828Vr7JAW+}(X($hF>aq~>Ow3Xel-?`_6XMM<@GIVe z=|5u&#>H6zm$cynz7lFyXZb?cZKiNg+Q;INs?}L?F$DRm5k1~+^CW`JSwb-dNn?JA ziPVZ)Z(<9L#KwcprZC)Z@6J-fI^qEl_#pM_ZuQ6z(O9kI2=5QNGT!YP0} zu44?H1$>{J+2k9aoX`BINz;_?D}l=wy;;kT5|4a z?xzvp_%;+5gNkq`Ky9ZH<@MYgO!2zsDe)BNj&MpubSrlgA2xOu^2q7Cxd^iU1DF== zFTqNl3}8Z=lovA$o$h>J6;72gq5cF<5BVo}0(kpFX(TC7iUnAy8q1J$?bs=UR^8#S%E9xeY=R}snKxLjE+5>Y! zsHQ^86XAAB^(UQ`dDJx>#JOuoTWwyUC&(YD$FGeG-wnbCYVq1@;jcr~1+OBqX<}Y1 zUMw0v7rx!#n+WGO_zGb5sIWD#!zvGifjBv)G3VqVY&jJ5<}LU&Rago<@&FM*Ok8J${npTF;8+pLB9E@jpQC|Cb5jzb#fE$H6;9Nf!d(Sp;dKhj?kw=|hu&t)f}iPV38z#p zDcoJ~v>1A}d4!T_#|yT4kfQerGD^V_SjYi|e<6na@6dywG0_*}W&gq_g%r}Qhk?sX zCUmb)l|frR(}y^s3O{iNOF|)T&Ah3H&S!pYaQ_d#)u3c!&MN)jw29E}jb|fHTPO#| zHRO`C#22Q}$eDz~(liPY$0e8o!+U;J1yeXUvMVSFA#h|mILpHM@lJ`Xm{NGl35zE| z|1=eHc_eCF?6;|thg2sRo(c}4P?EU$g~u`XfRK1csh6BW#76*v;Uh`I>cXG>3F6>d z7Sy$J5uuFdh(KgjM?&weLVr+n%XDy7k|v{69@)C5Fa`1G^i+T7TIh{?^;iKN`mVEa zcRpNYLjQb)KePlR?rCZB_9o`;LcR>_W7&1M$MEI?|42X#tlC}7B^$pe{J!BY!2B;v zyyOvIUl{mS%!U<@_{@REUwj&%TVLeA_U6nyN|^g^Kst30(He?QAn)i&v4mKPicB74 zx1%TsLz=7M$;3RmXhbLlZKsm@rA5yp%I%K`4?@n0)VGY9QmIxeA z?G)=mhLs7Q#`G0J*7yiJS%e8-B1All>e0DVMHuN1Le@^z3$Ba8@hXYJ14;j>qK3gP zP+cdJPZwnk(si9<5Fod-#z51<>v|QzRRLvIh@EDBA*oG999J zL+4WWmRHoUlc%3JD{`26Nv4Z%IXAQXJ>kXPqNBsqMyZhT5agB)I|`BROt>fU#(W{w z4j$?a!r9(pT;T?3kFf` zXkL066@-lZMI6hk&-ze>k8mxL8Dx3^)jAr$JXA1Mgh{rrkPk6w#so1|ty8 z++c)(=oBKMm#;9mr156anj$B(O%U2frqRQ6pA*p53}M+wSlgmTs@J^Pm}A+;#Mq-z z!G=a_BoB(_A_Pm7k^Y?GrOq5+u*(PYe_7DETBmTSnDUDlJUG8XOu9;nry_E5l4XMa zL$m1+dl2ikJW`CC8A^2m$L&9b<|E zz}_=E5`~WlqUOl%Lf}Q-(aDs-tJxUU1&l3@f%$hrgPlbUAG3^5{L$=Cr*`S1*(#?n z<>T4TLrB_`;=_>?M4k$!*JM#-B^0;#!H#Qe3MY?$r4aMcOb&8&b``&m+ja^pZ+?f3 zyXr&5O@CLp@cfIIasQhO7t#+GR}Cv0=qcvGYZuunqx+lQ?Eym*^ON1-Pj0$&hdGHE@J1KkgDSRG#oc%<_} z@kS4Vxb{A8xQu8v>Hn!%90O++b{1_g5PX1tybD@im!!apYm^uQD(!?0V-;)(`9fu1 zub`mq$wXkY*Lsjmd3M}^{Qm*klVv%Gi51xSl!ss#pnY>g5SO4~n?Go-dL+XpIff(^ za(aYIDja9WsJo1(fUX5RHnf)UL{KN@r^3Kq%(*Ff$cpdVi&^Z2Up>WyTTkh6^EKqh z69}{*uZ@z!p&^cE?Al1U_8o?{6rc@_{Boq}e8-SMarj&oT>6e7go(#k zh?Q?-3P5|vPKS$==tfoXLw1ZD~?krB{a;Xo>uB@z=Nb%O?SuH4awDGv${?+;Y*VZmOd z23qzaMSEMk7b5N`k!7`xQf~?)M`GuB2?qv{;sCnC^O0HeuEVKHNyAh}3Y)^sBcOgQ zrWPCbVGQ%&18*jrdllJgLn_hDah!-FQLj2`J>f?RW*^w=@Pd`Q41NS9WG_&tx@ZU) zAIz#bvGxC2N+Ik8|MdNDaQ4C4Tps^|wv*cj95gy48ZhzMwadZjD5f(>Rkx#`3HFH& zPYV6zz?6mlxbxiqP&G1z5_s^AgAbzlzHGR;94Sr|01qQ4J#@h`juVN8FFue9T(w}C z1cVa<1}pt?zt9KxQyv~s^d4TSzbbw7_`4a? z_$M96?HQ_hW#!+T53L`r(roZ_o4=o{T0YG$9d4a;2;soP!FEh>$Xv!k71CGlOGJZR zxOg|nXLyg6p|xw#Lu=165fcu+k7H<@gpj(k(|zyb;C4?Nrs9(Q1|AXgEat48E_LrC zH1yY~9j6?=!_*?H0>kg2lW_XohJ0jHO6! zX*}&n@g>L)*nlWJMGdf2@u+?x-yBT#>9Z;245yx@zlD<$!t_Z7o}b-pT6 zzqf?zVh2EXRv3%*Ul;31?jr#E<@;6IH{DU=+48j}X&qL#n zDi&!uQnCn-X%k05>vIUp^lwE8f4ty}Q%E_K9rTufc0WERu#8LYoG9`4a4(35&MCpj zo8HIPfZ$n9EZntng2|;*CF?O)wIXB!tXYbC$&fQ87x9c!w1S>MiuC$9POdZ0iG7_a zLG@K9!5|9asFvHQmhs06cAxUbD4vq;?lWR+NVTlEP_mW_-4xt5@J)#~OcAK^;KgoZ z3bgfdF|Yn@i97%p=Ojg7@hD}$ISO&3EH2gXg)wQEdWMTDP1j{l0YT>-92nuHP6Fi= zl@OL(X?02DEq>`2_*A%V#MdqEAw5rhMYQ9I(;Hcy(Lk?0DcqgX!UX7&q5&n?(X0R75 zvzfeMMHY|K@q8HvHe?2SI<@`Jm%Z)ePGDTJw+zG1EoF4LBT(f7@+Ojzcvj{En@UWW z$lX%rP5fRi>kaJam6Sr)qkIvZJzB9r63K31^n*N!G-#PEVv)Ar%9i4+;36o}k|;ywiKN^ITJ|GN zpwF+|sUoXz(8`3j(vbskMpE84RE7&fD!y%Yi;Fp6hZK+4Kiek+w6#dSSU97c3ljq( zbkG=p`@)-3B9h39vT~(6i4H73=MG&?-bE}f9IZ->D%u=A3D`p}Cc5Z!O5=dsSEGl{ zOggU8v#_p~yB^3!te|72JGdM|K#w#->ybIF8^YZJdaE*S5X*rXm_JGdjK;VbL$P;+?3OUhWB&#Y!2(ELM7w zh11LLg%G5C;J4I}!hvL{-w^vo3WttjZX`i$EXE|goiZ_zZ7grX>Zm*z@;Ahok;GWW z$=|?_oO{E_t>yT}+Sc;tS#V$sD->dPmJ1+qNw6Ae5W!ry^LB6|Xai9iz0^0I4D2e$ zr}WINNMR3r22{7ef<7uo*kXo=N%$X@>pTEiAX4bxPQ^ALj-#me5;E{fIYti@GX$Rd19K#Y9;f^7 z|DrtB9TpaF)X;eqnN@f11pAPk7s@*Zi6WK{*fQ`xz{a=LmM)e-z-hJ@v}AFZ5IxB( zgN2QFcFmWtXU;PHn`|w#O+tbO)jgL1`6acma|%}t{+BST-?BUc*}l=aEQsqXXOJm< z<@;EmJr(Q=CpY@4V4~Th5E{%Lo{(GN7YUB<%Xx5ThM&eIMRl_9oviQ6KXeD=qe$Vw zH5~Mg4l$C9wqvM=^wmRu8?u8tGjaKK z8c@Yib>pmY`8CfLkzzx|Ttw#viQdTO+oCp5KhE7SzvCUsxk;fQJ(h}t&fTw*0TT_I zh%y3S8>+y(!)l$UllkIO2Tq$+E~&j(U?jKlD_-`2dDEmSd_$93GNvKgyZ*$IpdpnF zZSS*#Tr;P8i7$hUXsq~{N1mTtv7JHDUJ#qn%eYa!_XS@cfgMkKi^#Q&mHJT9eynml z8{{8jkkWDmDQ!rvLDmW-nJ9V)8Z)7I?+Sd zIPgrBi$nuRqLF|y2yuzGo~gnY{!}kjMFR8Xsz_FRnogUXin)Si)qdin)KsPGUn94W z=HVvzVJ^wuT=gUEZ*H)QLM)U3At4%fL}pKhnDTbY8h(MSxfi!s;z&oWzC}Hu8zL& zTGh)#rcPeH1U7MNT&8KSS2Yfq`ooq4qkw8 zR24E^A28;@&Ar2>v2!xC?5^@*P<;&o^S-K~Pf^@~gXEtRudi$HCfk6uif~x?4j}Wn zf2s4-o+=;b-ROnm_ZoCmz^<=ifBctfH;rxB{|sl}fNuUzeZyU%KnOgUuVNUFX(_ zmHL6#TUDjQXC4w>g2#J1pCOacK|(no>E*4e<{_`4hndsMhF(&*^>$SNjBF2A!#b3P zT%8Ywo>60670yOi8Rfci$f5JuCXMrasLF42?g;`gI&0){NFZ z!sVnvr(l;;&)alwnE1mmFGoTRK5_jTTq93I*AN^z%`QV|e1eSI(LKz!@x4aZiA+Sd zP?uXYe6Y3lucvR@^|3COcytMSSQB<0;nIs$K11Ww)-G~&E&=^iaH$80vkQBwR6`Cu z;R{_3G3cPC9I}RNZC}*5Y*ASqLr6itXxMYSs&J?=oY1a0G!tzxR6A?F4WA6XpVa)-4mAUu zbDEj~vDnV0Yq7{#Svu}-E)t;n?DV7h9Ov>2fc|T-_z{q=hh18#-_AKn^;-+K-yJsi ze#Uf{?Gd!aQ#L zPgPm|KgPa0Fv{ZT|3x7XAS94LNFfD6D1qEX0YyrhN{2*L?k<#Ip<{xAf*=WYK}u8@ z{UXhdO8Z){LBNhuf(;ua*cCNkM}+)lW|Mtpo;%<7_fP)FeV#3|(|2~)8M5T%e$Z&& z7))QEXxAK4erbnXDwPx}pYCji21BF$Xoe8x!J>mPxHEC5FWR=KL~DR;u_dhAJEp5e z9e??DL+tZ#>;nlk(*EXcR&0Ljfxl(bZz-@d3~N}n?h{K%+JISxv_TG`l40r3nY`f5 zV0p5Tuax2|473YEbD`0JG4ZhZuzP;R4_{|c7a=N-P-E?oh~K$0;`e;|EfJ1%OT%Lc zZtmihBksD8R_;ujXjb*O6&)>Tq&Vp!SW+dliyG|3u;?HTwzM|)|4(lWBD|wFSh19N z>+MQM9MxcCldABH1X^0xpbFl(((qj};)c-ZchzECado-R(XY%;WFJ_l$vzCl2KUxx zc7sXXg?^yrWlGTU4x_eO9M8q<(bw2%*;27I)F~5|Ivozx?~mzYi5{#LN5H5L#Po6aPmMmdiq2d!{=lzGqbh3Q}Q{ysN_c8L} zppRucrxu%$c(9|(32?D(K`Fm6ko<`lC8;hRAQ?^{{e}l#Ph_?to!$&ejtkpK1Y;=a zYCm<60Mk18l=;KlNVG48Q3;3&z>-hLoMQ*VQ&DVLgmiE5OD66mxU5+$l(g`fxG@PE z8cT~jYe7ak_zHZEt)U??BhZk>5oYHvx!jn`(iVI-&Hz&pIG%vjzvRY&cNLoC5@{e6 zUrvA>p9{WJbS#FRhb0}+u<}UAuuh~7vVYCZgq~-v!vygnsRBrYw>(nsh3`l774>MW zQf!y833`-X=S)zI`$`7>hT}dwcB~_tq&QeCNy}Y@1l{&)W(s^(EzE)PT&{+!nlX9K zqDYaQL|q*HEjJks)Qst2G2}Mb*-fs;WWt@7`kkRFS(pM@Um&aJ^u?rDK^+Re@_UpD zpGr{26J;JzVl&OOweJhT?z9vY{G0DAQ!*}Qw)%>1`MTOspmV(K69c=jqmt@4Z zf{ej#!fZ(X4mD8q#O_VB7eFk)I;sz3|3C?-;_i5B-giRdQUYhyET4&oF2f02Pim;(Dbj@jk%m0=sze`dCW zjmLzErZ#ve)J8cCWyO;2S+MnqIcR!65_+6;ij|2)*j7|w_jnlfvwMM5TzWI&2L6>9 z2fKb2Qwtv3Er_cr=-v)`){6F`QfG9Jq)bLGj_p<)TXwb=a+h?+THBMksUgP5$-v_4 z0&V!KG5FPO^s?nF5LDpo91_m&P$Lx9UO zpa6Gq{R~oX?~VtpRv;VueigJN|CyJCLenKU%EG@hV`1RmnRsMH^03mgcZ26QVTDLw zm?sLs79v2&ib} zJ~;O0n88w_jL*emB`vU$#@fhpb|Nf^#Ip&@8f$}XQX{PWyx=*7IfEHna4&4xNii?0 zg_v5DIRYHm(Nme(PJsAzh!bv8nJPpD38*n;!&g2e&lro_lj-%b-M#=6x zfVf5fWS*mE?s!Pl-9t2_sE?W@K-CxM zo2U#)u!(qhWrYusr_n;7E8{3_TtxIz``vB^wHn)f1d;z$U0UPuC^xdJPEa$rr^nz# zBcC&7tGu`sQeKY}AO+U0ElSeilu`;$5Q^?f_N9g%%tixHqfw^rNvJ;C=a@R1tmA=@ zE_;dqu@G@qUL4%g*ykt>7K2KZABGM?=+hSJ!9&G&;0QLZpR=2xRLT|uNrr`C!jlM&2Die5rammO3-kSNf#)_tIfPIVz<=vo zXzFwJH^_lwLF^74n)~8mLNi}?y9O*i(cg0(*Bvi)w zIfld5v-1jJZ@8GA(dkk?o+qe7MYX!yVR>^gDV36WfqrWTWw&%ogp%*3ITkXwix&-a z)GK418z{`0QkOI>wz!=6R_=?QIwkEu@J> zo6-T?9Hj&HP;(XMo*fM*-xuDYp^(g0y@NwbZtO{*ZXHUh1$`Hm#E1n|e6bfAwe>j> zuKI2t{gwo)@sA~o@`(3i-*xBUVLg=uHIv!yH;LCooXi2lZEKA8qN|XF^1DcXHVfPbOgNAz0~e1?DQ$7Fe!A<5Ps!f~#@zFSg=`KV~(V}o<; za@qN?Eg%N}1S%5Hl9h*}EFg)nz~_zYv5=S5_*1;&&k24Q5+?JGYXZ(`+|P!06CACO%PX3oU|_wB?pJ{B@QLGsR!#N z_aJdoQiR(}-7$_*5nmZxBBX3=hqZrl2S@FFd~I+EFl1B6&RNpQv*)FuDB&Agn(A&{ z6SWRgit1ZzwWcX5DkUYBTX>YjE#Dbj5ZG+%Vk2FA{SV|EIS|H9!>t|IkOyf|Z5 zH<9e70n~eX2^qdrs0&BB>-c~&0F--Rbw=*{-;kVvOSHAS&&e37g*in4XJJ(K_aCCv zx>o3L2XE^tlAb2uiQ90%m2)!wb^A!A*U!{{(vI483@(cp?PoI+QwE?8>9)H$J}2^j z?P&8CB;fyp^~?AL-u))C0KqHL2yt00(45wlm_a+kpxH60J3*EQ%|WXc=%`(jfEgE+ zx>uAu8!9s;C8Z=bHeF$Du19Ej`kY5ilHUX&`#*2i4#u}I%j(Kt^Z1oX3o~Efk@YWv zoIiAJmVi9Pr0Oqy9c;tDf0bC1euduKq$lE7g@qBiPm!RhRPnl}+h@v)LWx zNr9(#jCG}Ch}(FiWH6H8=m22?g9nmK0DK`~pm0)=7flYGo1rX23S?#bV&Kp~5zR4b z1^W1mA|F4MP|p6PvgaLfz=f?nF_5zmuV>$$Em&Xql${LD6;CMBod#t&!kZ&kkXMm<^fb~st(04sk8#;z{J5myiYVPWMC7_ zuICcoN$03wp%)w&>~l6yEf=?@4Hx3#-bTfbxB_+#^yASP=@|3S$dK_erNFwOsG-k9 z`S5}^S-3(XSZ{(;hasP&EN|5eY6}F^BYfTA%Hcw^)#&=0#-cXQi-i53 z3O`Y){{e(@GEDyUyT!G${(|67s^}{*i(JcBm{^6b|MP z9?yI&Z50j8pA%40kBlNtA57nMg!L8pV$0!61c#~OsUfg!G@_zbvrg^DVKTMA^Xv(c zm!bIO#Cq_4q7`_U2j2EOu?|a+iphq<#!E#^rsg>U-=RX9Wn3mQy=p=u3E&Vy`8lKL zH#~57xi8C75xY0*PBmu*22itNR2VedG|zF0NweEPwU7+#idS)uC0P0JY)Z$}SLMWE zo0q`SF=95#Sr|<%_1qWjN@6l2Q6#|R>jpFZ$ZzZSMYn>@gKk4!SzIKz03##jTZ*+W zgIRvGy%Byv9m~9oqTQU!2_@89L*&H0^@E=R==JYx6cbWcV<`l;(;M5tTm1>z^{g1& zSq{=DyJU@&pP<5Nmi1@>m{lYanQAqQ;AoLpO_lH-OT;^PZ&(kwd#n&ImGB-1N5=}a z66|S>hgsukOFbzg@FuirWj_87tN@Wn~C&WGOT|TPh18w47WvbE3+5H ztyj>z3g^X~8_HHTtQ8wVLSKo7ux?%q9>t8E?_v#7G`v_;j&l{HUWqQ)$tbavLrcVq z?t#`~pHh)skOlhEP03BvO=GpG|W{JbvFil{b;3loqBqfRsHo4udm>cDGEssjig##~pdH=X1s&1gEi@ri z5v2$l_22MB$b1&pUlsEz->4i~m!hkW&@f2;FTTEnc*kt1y_iJ=b<$nxx0_+qwc?cWjC^ZQw`--sF;n@H@8pAJvrXGr^9;8weyjRw-Gc6&V+aNLDhSh zKpfRhIyP9F!{j;#c3+2d*fLv~Gx7%b#~!eBHgZ(K!{ISH6G+N{5jhY!2hIKFIYI=L zn|But1J5Kqgm*R%yk1BN=>^uu18}g5NeGU1&+8pR2sjf$=M@=E=M|R_x+0NE1IG6s(oE9MVFfD~ zJb)Cao{JK<{#m~(bx%CVeN#?m1va8P)a{#WGM4w^7Zv7^jgF%v#Jx~>6ROgGZuUDB7D}t%X8w=}{m8N9(UMyQING)Ew!$mGtqc^7PF7l#_hGKtEb23PyrGivJMGNdb|x^2(({&oXqns>*!MF)Hgra3ACqJP4k0 z-z8QRvn^Angx27ccBdn~)Ra{5(^`ZaP4}Q1GD&#C%Hv-LI~EC#p9Q@#YKrk?mf<+o zlQiUbFg;grvu}wV50RcFhU(xqNDO9UWk$sgoM%ScP7guktw`w2w}>rODidVDR0KRs zfO6ZF@Nrt)imM#lyh^!0ij%&(tEVH(yiM>CX$>AP1&5E(cnh-f@WF?yye6=}TEtd7 zUg5b{-i8Wj%k$0fowwUXdzLAKnz)FSUDvW{Q{n0@#M}0PMQMhsXZ6cXHV& zRzvD^7M;3|rvnV&V2FJ-8JYrlvdE{K&gvU8NdI zvurcC9Z>HDSu|Qlp6Skb>KBaufS@#&=g-_7(FC9sH(H za5~~%K-`Ah&Uo8--_93?SV3|jS-X)7`Jw@Pv?@^U!Ap=@fpl8lDd1!Ykqm}mC=`5| z0FE0<`9G#WK6I$S=qaivN>p%&s1j>CsEI@vHyd`L3qSV6RNAhQ#g4p@AHz7RQ-7@ichj=Gs8vlT zIxyvly^gRI@s07K)6ax5QF-z=OiS%UCH7I5u)d)L^P8k^s&2-&;uR|$M=ijkA}#P1 zwv~Nn8r~CebK2k#Tts?+Nr*o9DrAqO^NlTcMju=VxCgQyz<4pmV^YBml!cQtC$BPv zTklwCV;DKXkFVCt4Xn~G*O<;n!|wZ$Z*s1R$4jl}Vv1?N)p#M|(gy^EYy`oh9R~d# z@ZqbdSH&l37!QGt-7(Ay)eqoWmyS&crP!23-w$>F5z%PyR1Uzb)zVI4`h)vOhMB8< zajPB_oa?%RPV6+%c*!BaGj{`uw1}9$NdpoEwOvf^~7rPEt0LX9`Vt0$%XqxM&1Up zT&j5L5#RN8M9Sm;0!7~2%X5B+P)DhTFAWYa#qZ@A6hbwSN#?G8dQ5C%(IEN1vmO^) zDC{-TeKY)1?c=`t?AVy5%5VJ^J3i41D>l^uHS0ce6P}GCjYHhV|J}Y(*l?9o{sDGu z#C3}76SSe$aA5>Du;ob+A(I8?|0X{r?4I>`_@{MG$q(4u!R=1|De`HdFUY&(|IU9} zB!rMG=F|e~>}kjX$4O`B=AtuQ{sz7(vOgzpFpS?M%%5#&(bz2schDt z^ldzh>y20PqOd#tl1s(kW^5DbJN4~J`ZfW)y(3+<0JPTpZNL8t4p9EhDJXmveSo^W zJiIUJXK})soE-kP=QCo=!5gHfsevSzke`E0{1%id}4j|7sLlH#!@XCYJ0ii<`|`GRP}`dCc8$`^z_CDGx}>F{*Z`p+?k^P!`6_H=KlmAW^x$IAm*T`6=NrPuhs z3A;os4=EY`?^C-()`EK=kBWclxmz@Y<1`;^+AT|Auo#1}{azJz!&1HSRY7&l^Zi~E zEI{<;W)8e21WpBY9U%8Ll-TODWS4tK_K?3l^tzazZE^A&qD9Bdy&;Bc)$pu01(z`` z)Yei*D14jJkHeZog{X~12{PlD_?8eJrMA+jfjC&3*CbRCDuoU_kzsF(y=+Q}@qc%` zE$EIKtsc8aI8U^w%tn-^!OL~_U``+^!uZ3k*jjlJ-H zfQ@%=_#$CA`gwbz#o0m?-DenFj}X?2wH9rp@$9lqOka_?&(fW=+J5jw)*fwhyJ^O`SREvc<-vemd-q`Q!Xa{Dw zD&c_OD*N9J^1sSu=|zpThlr8xh>J3KOn`^0grT&2+Vh~`Q{+g4-F8qYO4i&I-f%OX z_XO|Q4>r6fKCu5yeqa9=a~ch*Y|Z;Zx!9Frl}PEz{Q^Y4idni|D5VZc(m$7R7G$$W!d8Wmul9L+L zX~m~v-IZ}23KgHBSfBrylmxQ!cI}pYCf1Io%c4ZadpL~)Fa7jKvkrBs1gr3P`N&ro zfy>u=ePkk3K8=afoE+h3@siMCSDyOm&&86U17qmE?yx&_tw9~aAB;QVTVU64*XY^i zgNSOeRj19xwrXK6tUt#i9fTttZAO|CB56fdg!?>PBP^ZO))S5jZB5kTHu;_y(G>N@J+MxrO1regpxLXIPe9Q#Foxz znFjQL$PDCs*mAWvl}M7#W2NAAY{OW`U5?edN5%?o zT_vr?8C)#f|BgJ4E05ugH;`!PdS}Z}IZ)N_1O(^yi0-2OO{-Iw5TsLzVZwK~#};`J z-V0mytJF&J_9gO~7r~@nbOef0hUyb8EGZafo z6~E(@j625-_x?c?*|OY_^l=lE37d>f^c;pM)Zp|m_ecBP+)jsMVkq1Noe1QgmL3Zg zah^OTbPSasFm~3DqS#Xre+G`^;4n`Y@I?z}pL8^TxacR}6%JdCHb{=f|9UaJlm!^i=owd=?Q@@KrTlYQt58>Ww?Q-A` zp`2SIFzAJzA~NV{JEL_s77`$)>dt6VegIUO(H3xL7oQzcyYz^tbJ6o~ZU!9NUj zUC}jivXPy^*zmms%>?hHytYs>2=mJ8mlrvQU74m-+{DA1-qinr9i9q`R#GdN1)bL= zl-(kioo7OOJgaCX6W6AsQ4Yg(^N|xVhWnk8Fl(s35BEEz(Ks|S3o^nFKyA1mnc}&w zt|->pA)dgA=Kg_p0@N&ziuQq4)2J%X?|KfbZ6OMWc>Z+rC4c@?3%_&L*N&>Fr5F|S ziMlj=E#$WHC&PqC0w4>6mm4CJ!zaqc} z>Lnf`p7c96KTsZ%$2~F9@6?>y6yj%*V%$-s^9(hIATb_+qmh0O6ui|f3Z9G-)h71a zx+wXryhrLW`nChi>`NPcbt3np_~mhfYS>hAdCZEJpMY)A$XfgFPY9*l*~-w3zN{1J zl8}vr$Af>Lq32looF^RLk4k8UZ{~?rb&@pELLF#U=@}zgg%aR&@QBH|E=I5cu7ZdW zBHD(c^c`&lwX8jB-APTSC|W<__yL%93U%~jj?)-c@_ z>lYjMvg-I5SRRWzQ&Zx_QZXgePV=)+7>}ssts8Ud(bWypK;7f~oWZXck6cjxo4BXf z`f0pgDY#zG8|dwEVgPFYdbk; zxMq!VT}Lrr``<;K#D7UVn2cl#_dui0ethKO3e5QipN_PPu_#S0M#IHuJdRUo!p;U$ z7;p0E?C%Jh2H<;NuXGlQ!y5G#>B6X6DO;2-q|9PZODtJ9o=6v*NEMvuf=YW_MN`gO zI%h$wb9$_cf2>_Z>!Z!@DxC+`O$~Xfh;Bk{S#w&}O_)=wfd1?z6p+?_H+2`ySgl{% zT?mNM=O06(9_VnC|J|h}JeA>hW@5iRl_9=W^8G1&8wa0vmG@W3_5O?iZDI44uA!U@ zmBslSPV_|CSl-hw4iqW^9qTD(X1Bz~Wr~%vq~L|3*tHr8Jvf5(bIi_*Oa0lT=P-}p z3RD#$vfb_ZSDWGSYCbgzW}{auj`a;ZS;9B43S&o>5EVP8>~qANn8|Hc_~mo_PF7f% z{_kM-IsPm zv8+BnaGucTHkUc#d|@Z7-0VAFEDakLm8JLmP)|XCMDgh=rtnf($m|o!QS{Y}JR&PBiN8 zcd`?fF3?}lg~XQop=&+=hHV3p`ww?$7s>-ui+zfqanSurzjLxoRk!_P0Gkz{VT0zW zfkHNIP}Ct?kcqNQ%rA7gNgYyp?R1QB)WtbSNqiazALU>i?fm@@zB0Jt`?mPd&B?ZI zf|7EuiLDJe{v3y1xI@G=pyKzlU_>5HEGjKA6b&dp!%$+;vkBUPmZcR$HBM;;M>-`Y z!e6;!fvn^X$`eGl5%8WoA?0jA)!k0`7I7YON7TYRoYvp?_E*ldyw-3eH!%vPT`tm( zR%@Kd7wy>vFS}6mZ7oiti-g6Y=z}iTWp=H&NH{{YsQlmaF7`X;vsoBuZ;yX^`C_3H zRQXi|?7kQ|w`Un%DW`6o3|_ldxOUrK?%WO%c9`0GS4=+P-Dzf_??KW>8t@VwS@EdU zHS$r2TU6rV;t!`itIWP0A_i{#iE%@Pp0>F+c7o_`i0HG?3EEJemk3+GZq@_JzG@Z` z;*6IP^BCANob3OdhN+y9s9P}F5~>rFFUrHh{kXeAWU}oNZ5%F^$S(A#5n`cjw&LIj zp~b9j8#7Y;*XqH;BZVGx2r^0#MCI=jk-jyLV>S-s7iU)1BN|a4>?FxK6Ol4`Nle6- z@g9=NFJo?L=7WhZPDIWv4fJYyBfypB4Hav;xcyINf*3-1yWb{@d+ON@;b3 zqlFluuYEi{RAR*jL)^;uqlJcWC~>Kv1i6E(dNOcAor%+)##bvB%rP#sE7Vo`EZukBJXdtDIn<8_`isJ$$dmz90FFwSm=7-U ziMdm$J>4wA_!oWt#g?|pc4R`O4_W-C<@hjRa3;!@s5AxkFbqu*K5Og;d*I(*>i%Rx^-pPu22Q&`7oi_--T*> z&x7z{vHEt@ycYgq5o6ggaw{~(3#gTgVB~l)6SY0p&rG6gh};7&0Uc1~j@n+~cWxB2 zYqsbLv1WF^y~UNnN?6;mT>V#`(#?U^SK=bRGf<3@)CW(4b_nrZm8<=U@J|$;Gg2uJ z9HZgZQ&$O=qP#1AOQ~LbQRQm1K6sF~3#6PYDsrtBY%xg)4ARiFSTV`(6x6B^=3;6w z4nD3HJA2lDSv}e1zwkiFe;EuLCi|lyVrgDe?ZT)iaR{`YivGmXP65}EDoe)}Qw4Rc z)GwbZCZVD=+^?RB3UB8XKIhFw6-JF9K)gLz;JWh4#z)Ks5z~d!W<#N}=|aUbn=1oc zfJ|039}5_=FKmuS2%3rm0VK>UQ55PIHsH#a=IMvOKQKaO@d3Xnn_t*9h%s1)JBJ_WUo0 ziKWPNb$c<36`c6CoHwFGEE=&8H$bM*M-61cfJriC)KE%VR4P8RhW}`(F#Jk{f6+l!fzmI@pcr|dQL@_qkXnTPqc}F z+A>cVjNjsZBS;&TlXHb(;VG-Di|{spxtPHn^=Q)!*f&pD4|bqvKbWc0;YR;smO5k? znE$A3W2R}~bU9_+g3{8qLvH1U`9f1#SDAl`T;O;1we<{kED$rWQpjHoxk>y)M_zbX zqj6Z*LK!}(07(Nd4mz_Z7SAr-jCXdbXBMpb;il#-l)h|35zEPif?@CjQJOTr%-_e7 z#8x|eT_$qQO15r*gXK7)lvP;U6D;Z0n!H;sXr!#kJZb=+2^ubBkL)Y!BMQiGBz?4E zRbJNr=2A_#S=c`-x`%HTqRT5o7s)YU3UBexb>>OQYr4*le>#1O|5p1GFEyoft>06I zdbHx5$Xr-)){Ran7KJ(tp^Qd3LblzCp35~8MTBbQ_2_Ma{G=fGLkhfaHf`gxjrU`2 zIr!|H&2^l(UF15fQsQ=!u$@~?J29~R2ETK7k0g;HbiDaCgdF`TGQ{y_Cc?}+g`v~? za@BW=eL1A6Vb3eD%{$@f5==;@ENhv88T)B{EfrPP?JkS*>PjP(?^$e7En(M`mQky! zS~MXz-aGoG@M5e}J#LBM0GkZ>Y>7w)FsG|4N0ypS6qT$sV^WbdTZW|aJcFfGD!{WY z&xobMP!iBK5ZpnSZ z)>$XA=}O^PXm!1GrO?UNq{XcgCXE-3lA}ywD&cwv4ge0J=9e&j2*h<8Cr9jbf|ms@ z0{nMcdEusP3H=@rWVb6ja3f-sKyl|ahbIZj{nG~c9 z9vWYd3;yLgp>>rf^(+CBAn*{LC7!xoI3{|iKM7%!7XN}tGM}$$+;^%o(h@WxdPTgFeczx9Wx+6H!iQ5IcA4Ltf ze{RTBm!%I=k;HX3WIcht%;uBrLtWHkEzPFKg&f&QvJhuHA=tyA=@WvcJa{^p#SYE_ z?Dh?EaCVoa&(>zbDwz`-g_6e?G?$3A&V*s%to z=V?uRT4Y*@9eM1O@!LydZ}fOx40QM)

    `Kei9HZN|No<&TFvAi}PeEq0FBEHXPb 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%0DksfFU#`vCa-3U2QQRPh8mvHf?s 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

    e9v?GYYki&OAs20!4{#H9;W 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

    hq<^#!hyYj9t<05+^Z?c!wN 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

    EID|z2erv0w}yZuKl-Ibt22G+-$SV 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%0ARyk3`(xUbS60+NRg>= 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

    uzWaw6w<)U~HpXdKbd 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

    A&P} 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 z z=UMV8`C0h|`C<7n`GNTc1v{t)4 z14>;oC!;cAxAYY9F7nCLo}@1JMcEwP9z8-gvNWpnCp#v9o-2#vuQs zI8CfCAFtSuF3_Vonx+!@0}9K2XTPJ| z;hdpTXi!l`)Qv5sya^`wNCts9Sg=(voOyz&Wch`oSQha(;c)Q}@kJqveFZuQdbJE4 z47~=eL&3|IN@SrK?3wIpxCy?(ywWUl$zA7Wk>$EcR@+8NOVKm0gx1 zuY*;)F zJ*pvSyQn{*)gTMV0Fr^mqstmYC*3nNTi-=D4y`hD)Q!rH$PzHSAm1QFbeb|vBo0<^ zYB={eO}GcSBvBJlbKVg4MIM!3;&0@S7W@+Ag(mR;@kq%@VI^lMo5ru`x=iM_ZUZJo^kF_-Nfsr+nMd8fti7LUiP4TvSLr|{ByWnxGSOyVkg3%)npIJ zrzrL+J0m(Fb|CDKZiuhuewL%werA;|Z69gBW^dxy=>U1gdDPx{-ml(|z9Ie>{#_<~ z@Bx$rUk2TT{|QZ39!&2{m-TzA^=JdSzuxEVUilMJ3J5AIaoY+L`aGiCnbpqu(#m$OEl@BV8SN^Xy|2ia)JO`d*_ZDUp`Pl{NH0B@dMZ7p3IR$?}i@}>wj zjqQzYr7L8{ghqvipwZxn;HG_V)dEC4I6?jr%!W!KCa4wqpn9|D4_`Ome36SVp#-Yp zsMYGHtoN)1W$0%;Gek$z&@A+x>NS+VD5s43jU{poIam6pGF%y{yjl4)@+9&&@+cyc zzQ89qW2iJ)XC8#!Ca_AgShHO7QS(akPIH>qlKw;Fl|ARTXZ#R6Vm_+Ah2Ku$QU;sH zdnWo0nVM1tz^}oza1?Gna)^0?XOi!*X#smayDX(hC=@=KzmvX$ZWGtGc@ly|5XD6) zQCgG{ogZEtE=0x|4u*GzlTlHW6eUCthb7T;l%I4)_J_BJH-@_;Wl>CYeRyq{7ga<# z(XHXVVO6xD;yM0*n(i8h>!;`@{uzEOwTj-H-huI$c?16{@;WlaGSXaa+h4X#^}zin zO#I-MiV_B2mB(za*ioU$_}#>M*8w{cazr|kO_gf-88N@fT? zGdc>`ES0b`tBt9H_^Ei45Y0|tQ`i)K6~$3{QJ7y?SD?u+v9KIJWq>>-KP=xTf6n=b z^EdT4mm)%o8j6-v$}M^8+5e?b>2SJ5x*xGYXeUpeu9go{h_S7*a)FOHLoiQqU%6di z%(oV96^%;h#dg2LU&);+oF}R>j~C-4pzJ;2A=PQXL1eWAzuMA^6;f|{?ZKdSG;AH&*(_22kk=oFWd>!P*9{6K@b#XclUgYEq;t>Z|I1hlX$+^$j-F4m7!R>Zma$CIfy(4|Z zzIV!6?hU#m$Zkvu_+ufQ; znse$7_7(Q`_9qDygVUCREZ_QlwB=t-6Qnfw)#UaKdoNJtwuI0RL zbavW_8K7v3s)N#zS1KVXPOZJ&&Q(g(&3)kQrN5M!_+-Y%+)3Aj;H|P^4{QwVYBH~8 zCYA0tigZjXdqiqm>rB_d+{cdLwrb~g{ElYZ&VgyDNCfY$Emyc_$5t4_5}9ZG#gjY2&{ zwh-SHpC=PzGm<-VmjY`@MDo_yf`C)IT4-l)O)6p?F+VUfQv;AMVX@#53lDQCVEMq$oj|4mX7kK(`M7vghKG1Q@`s+{;3yN2;6jv{TSUW|};(C&i zOvN6O>S5ZF=fqmZ%*nCjR5E~Vg56Bskm{7!WcV5VMrxnTrqcOsnBRnfi4BSJi1cj3 z{KTNtKd~P;bE<9XNa{Ok4C*oR9GM)Ol_Ze2#I`5pvCf!ZnAxdg7%1v0l7<>nT0_+6 ziqciuM$&fDj?%+gh|W{VQoJTEB6ie(75g>&G$<`nyITX({+74bfE0T)do^$^Li>dn zq5Q$^z#YOJ%Rc@1&Piz|vl!VRLMxn=Ig5LL4n z>OwowGegdBH&WwjPsvr;ff6W53BPdYVpr%0`Pqsy73CuphbvxzxzO3TIk*g`Ozpz^ zO*_GBO@F{|!uTw>!Yq)BWR==jYDoG9<>09BWALT0KCmP3Ww5@mqwwXhqlG3oIak8f za#h?`(lteo)FJJv{V$u3w#jCrFSD0$90g7BFMKe(g=m-AMtjFRY20Tt(_S+V>t;}2 zl;MNmtwdwYGQ=17Z|*dT)Bl3oibhuMtjF1HjSfTnp{-EZ72BSr5`xMW@dKEhsdlx$uwFCuTQ2Sbo@oIt) zFU8l39}s^q(<}!Z+-$=zT3n{$`e&{ct`|)B5t-$MWreHgE9kj3#0V<1m7>OvmHf)8 z@G{Ie)jZ_StVe&B+8~alnrJM_FZu}P9F~M#ii8B`9Mf^Xyx(kL!43Ow??+Z=?iAr{ zQ7f*1%i{`pqx?TOb46d6CC*IBWhe;Q4)Y_2pmb%N!JWlTEaMQ_9yt=`g<-z!J7Xmu5U!bv7wopskT!)xOm3 z)c({`vR5*vGfUY#N;Bam)@`AQT~}F8dAx8qeI%VF#N#epj*y7EaV>BOd{1I?^TO~L zL)}pMNl0cmVccunMwyD!5n9Ikl6CmWray>zG6B~c$HKKSw&9-SHV`qb>)31AYuM8T zZG}ehI5A%GK-k~7Hnc9(-r@DuA$Jw62sH`SC4UrY@%5wiqTPz0vmdi0vEM+Dp2Zt$?JHq$KGmDM}i~>+0?X8^!DC?gbaI7qVp( zIb|Gm5^^GPByt4uD|bF+CUXLEIPwd39_11HAId6@fzz2fkaLl9kUCDfgbSfLMKEhG z>qJ@|$p>kX_mH+rx{~Lif8oufzmhrl&*^&EBz}lN6MSH_6C|1c3bruItz`_BLfC;d zO?F6jn>AY4PW(u`L5O6(k{p-RL0^a4;7HtK_Fc+Kj*-)eI)HP5bAUQtx|j>5xkONF zPwNC)jpSo3k@$eNTe^zprhnzlpud*c`OoME*+hPjK^1&tv==0pF9e&JZDdTAT-cE{ zU3OS@hc!yrR{XduUN1zj|C1b()Sz#`?eHb+#cTydNl6rMR}QsoFq>>y`(-=P(b93$ zVRluzA)aX-vv-O2ySJn7t8b|PfgfZh1yiEt#dh2=Tm@Ik)p6C_sw^~nJ7)tmtnLWv z3F@Qot=H-`das_Eb%v~xFd9?r1dZhW3WZ?h2uul6!(949xWl-yIJ$fbumyjtzz9jD zHuW?mQ}K$}*05halUQ(d&{QgRX?AL$+A8ff4M_V--cD1Y*sj^30c#=J18TR+<62Do zOdO-Wz{*gvtd^9EtSlwRYDGB+w4{-<0DgbP`vT~7A}cOMVWJHq?a+sHT0_t@9V z4-f41Pc)^7mBCek+4$F@|3nW()A8$Er%fkK9?J%c%R0xZG{3Yqv;B1BotvF-S69~s zm%)9?o%8&IJK-JdEARAe^$!bN3oHwKGmo>}vb41xw~jKqYQD}g0}ZlZx^y=$*&zWA*uT_z5)lr6)}L(K-8&ZaO-_Du9Z z{Sdzqeav*k#0|28??oA6z+yDNu~s^FJFmFx?sM+1o)+E_zP-Lyrcr@g0XsTLJa0N{ zT8LkSFUdzKHY>r(v8s_uDdIESh=3p_BS#^JayzOB`m}VecC@y!_M-N=cANH_mX9q{ zvF|Z6v2#n^3ZF3B@U!q8E!Qk9tp}{l%yio=o7aBKPIjamlbll5bk{YP%YD(^*TeUY z^gi=8_Ko*F@%64v>)7X?WXcgi!PS8|_&1_gqDP_``1P(crc)-bWuwJyooiK@|Fbr? z{c-@#Ewzar-CP%4M)zrV-gC0-9qQZV+vXo0xE@#@_--C=xov4@Jz*VfcH6$%0Q+e> z)zR9q&oSNkx3j|C*bVi}^@zRWyg$8dd|>}@e=_jf#0uKbZp(U$(>mL#F#l_9YWv~H zIX5|Bt}d?gF1`DtJL@^_9pc;J+u|P@xEfd*_(N1S8(jNL3&iDjqC9c1MA}|;l-G#93;eulGifYhG-5nr9C9pjC~^pL4015? zBX>4sfU;U0jsMH~0cj2CQPHNdVW6d?i#08I0tL_yLtXU!NGPPjbYAr|q&A&XJqtb$ zo>84uarD1*kD;CQeMyU;e`Tg*CubLDmt@N=v%_`6bUQPvv6rAUC*66>u><_HN`v?f ze=3^g$8##Er?_?+UeupWp`7ET=>+~pdX|r8Oc1nZeh~c4ObO?*MvE&Y+c@KFXB^K& zGyUuFPef|OFZg58dhAMlGu&g&E$R@&Zs7?+usn6p?*OLSOGbYrv?sge3E z0QIe^ZdIjHq+!)CKFLG!Ra9vbpm?c@dWuS-&7m!)!x=bc1Lh#6oHc^QWVa1POT|*F z(v8X`kn50j@wIVco${YhNMTxbs%}cO7kwOMh#XR?D*c;(nSYTVn}447V)V*h*cGVd z%4Z6-W>c^(ytn*kky83mB$qxHzZ5?ePeLJZFnl3=K70{;E_?xe9()db8gz*V3a^5% zfG>lugfD?FhcAUMhBwSj$&IoMGCOSrJKQtd^UL?sL@fuWLuW!~KxaW|@RRW4@DuR% zn4g8|(Szpx4h3~P?Gjx{-9fudS5bG;uFz@JYO0#Li*}W+q3)(#qid;qXxHgF>R#Fn zx}Lg^c9VXK9>c#kd@$TL+%Yu9r$9&}-PkU(!noYnG}AD12X+nC4@1mfWM5`qV_#uk zVwbP7#Z(cMOqEbsR1Q^0kfmRZx5bhFM z5SkOBga|>#k#NKuDW^TP9kl~>7AlPD#MuujLJE-H;7gc`m~Mow1dT$g&?ycg4Go|ePB)7GPbNOXS;^Fis}gN z0PcW7G=b58EuvG)&1J(A1JBnzNeQ>hdW2T|3>e3tiCUGUmXjtL9YAuHwMhFb>A=^ttS=xx9J2`Mf#2*}Pf2nLHg`PuI}3 zbTwT?H_*3%w}Ky6J*;|E<-s^GZBR9++2|vN!-l!&Ip{-%b?CK`b%geWc7!IbX0E2L zIb}jF_muaX_l);~7lOy&5qK0HhL4~>mDSD`@|AoQU(Ig@Zw_w(zexX_!@4KKZh|Mm zCc$oi5zyAKRxmiUox3lg4?!VAA<&2)yk+cg zZ+Ew-ZeH!f5+Ni=T?7R}hSWin>mh0o1V|%9V?+}~3q*57Q$#aFHFN`F6JjI62z7Ye z9+$`OaeBg@+6@Fx$P@4cJswXTL0v&>ej9#UzK7{zx|t(#R|MAtR|R{Rdzt&0`pRg(L$?!?=iSP;VkNQvg4|Q)}144bmeBX1z4CGAYdS72*Kj8pjf8iMaD*tN#U;g*FB?Jfz1pAEogc^yu zkGzN6l3ttc8|WOUL#!eGLHQr$Z0;uEOki4IdSFIi2C*HbHRdU1IH)CZ7>Et#fDd5~ zV%{R(ATJ^>Aj>2a5!J-l*feNJ(u`=X-{gy61bjFq)h$Bc1f zhkVEUf6{<=xtHkn`FjN8;VVK9dyW5_zdw;lU=VnCEs74OP9XO;z=ZbN$_EeS^nU0_TYk-!cuO06P?K|xt?*MNf%Zvi8uM zM}AP`w8b#gxA=qjuu#kXC^;{I5e}7W zl59GqIe2l^T38ve+*1Lc3ZDe>g7+g1AX*vMix?sc>mNlQ?F{WO?HTPO?M7{9={dwh z#8re<8j$WSjxJs=)+r7z4l7r%n>BYZ)1nd7|UVKcB(aTS)SpVE&E9$q|>>tsPBX_(E#0d z%OZ=~I)paXisZhMCV97MTciv#B=mRcTgsd+q;b5zqYtflTeabI;%F>mI2-J4IAL^q*9Ctuo5~QZzsUUjef{zjUD%k_BC*!+ z((@@=en$%AnkB=jk~fmy>DBrs$oeGyO8l9oi>Dc;Cich>rrxRzzFw(YtgL^n|7J{^ zYMk1gsu5onA0uO8laqhtb_CA`5ahM7nSq7E@2m|;QEXz$72K$LDmfr|fp~|wgZP4| zuSTQmsj+Abx}my(8i7Wlr^4=oYgzR&Bmv!8y{UR38HH{_`>tQ4I8&X&tn&0O^enZ* zx|REt*>K%#V+z1(K}p4TQ1<6A*%LWk?aez6KMTJAKLI7Gzrus95G^vL4nAnW;H{~(; zDSa5LEBB=6a5?uhI52ciwMdGPos)v)QCVNvYS}fJME65-O`;K06ZeSgbCysqbHlV| zqH$~uDC7Vnm(7KLV~qqJK|tUW+8N6;3sCATYE#}vT6gwGau@Kw^yT`w{75Zu zHxf~w`HUG94rY}pCxjUG7?2Cx8rlX*G$7$?;ih~)*pkw|5*Tx?`k1I!>1<(cVNKyB zzLPwcDZuQobqRnzD|vrbyQ*{*JBb^OsY;J}OLgOT8P^XN!AWpm(4W!AbN#S$ zRo=>BrH+9UBEP=u)87XE#NVn|TvPzslwm4f6ESs&Rd*;Uzh$yEt08_epm zdo$3&CRz&K9bPBgp`ud-3v`1rnfjCZn_R&d!i2KvnPfboOX#SEa}X394adMY!Z*X$ z!8gIz!#BXUz~{0Vlv`jV6b0Rhoet{&lR(6f+L-JDbOgSHJ1u(R$3dBpD6}$5iF^-7 zrL(jnwCA)>w41eErHiFV*?B2M9+UNx{Uy6Dlj?p-u1mI<+d4q*zV4=OlxLpD;a%z- z;eYMFWcp#AVA*Q+*xEV3?tboOZnS5zYmJ{b?|l2T4K)k;a1D;I^1?@~uDzrNnR-jEAxz zF=!3$9+&{-K;qEKT*rzLrSp&@xt^76LOk>eJR8kLbI?Ux7Ty~Enl%SG7kLYAgrjk@ zkee$S1OWCk@=VDTezeSZCVmJeLouAs=D#_|xJXf5Q43yAc004*eoZ~te$t+G)DL}7 zZ|9Nt_4prMGQmD~*)u}0O;8k$@&4y+>eGq)`XBojng)wek~6}as=vJ3YW>BDYy*6i z{+ekZWjX#2-XXzL|9tXT%MMG(y2NTT<3nw15a%LEJ!kolv$yNE%kRGCws{wO|MhnE zjrCRfse!|O1-g^TEMWw%u|kwGagpdcD@++kTr9fE3Q`6TLEMF+jcJ&BMY_9wW$_b# zBLf!r=pUW=Gc!%MSijF^_g*yp1KwA8rg9#eNtwf6!x)U~k4xjExQ;jl?ox;ak(>So zW6MwmBmymgct(QpyWyeXr*Vlfio+Ob#@?B?__nyd7+C%a;ST#e#Vg+=KY=BH=W`w> zR}(OaX@q-(^Mrrmtq7mval(nXlGBnp6BR<8j&|jU5^q53z@K7A%oi{?%Tdlwsy*>P z!cF;pqzaYeS}g}jqolLA@2MY!WtHfsWr;;=9Z4H+MRV^$-$+xuziHc~EHgaxELD~E zr5mRSyl2tJ)`IN{%4z5dzMSZVIvcAoTo0Z%JVKQX7i?28RJ&huMsrKu%D%|{pZ%)g zc|z*wAL<{w8A8Uz@v;NZ9IB#gCsZLwU(`FRobh)KHYVg;=KNN6F5+3~!t_OOCDe}T zp=gaNq2%OKhSP>$$qfWrsw3e?qNOXFm`5n&{^O0IzmVzpcjzy3hg_ExkHJ*v`D8*( zPKw<93DKBZ_7AC{K7rw?hx4109gOL*CNX^yE_lrtPTuVXl3r{_#6CpA(?D=lS)+C)DvC zB52e=b+TGmZLQAdcYF1|4VX!?kAxG1p@|G(TViB-2!SbHXxLAfp4caAM8KL}5C*6= z`TC?p{<1LdU+*83d=Ptwv!t4)mJ;@sQy)OU{$}k<8e*+5PcV~HJ3(1+D0l$#8hIW`Ky6b!mmHF8Fn-1NF$Rqz<$y6{ z?2MNgw;D6JPPi$?|KW5-xbcnAf%6*Mn#b4{m}ZJc$y*1y1fFr5(vs-%ShUTx` zXeUJZrwOl^CW%QBLGYpQ0_2y`C*LeTiG7m9Cho?+#81Z0ME~H36UWR1iz9J}G>7|^ zsuBIREVJmX6U$aQkz;P`t$VkC+#t8CWcOltG za7{^2$y7+zI`XO%TiArvIoxj@CAKFH@{ffP@V~3;CGuET>&hdWnzVi+CKl5)h;erpj^9pMVx4~#A4HAM*fwhCR zi(^72$ucgCR!`K6{fRtMP$_)Q3<-y_hKSJ;w;nFWhOTr))b%#E&?25S$y7nv&Qg6~?!Bg6xYSllJZAH^oQ>A6O^sk!dO z{}mhOrsd*AH{~mO3iC6WEne$eR+|G6%^OzyL_F7IB?Y432~9^VfC$iU6O%7DSV%V~4(@wYUM=jzNmoEG;ke{<8- z>YD05B!_Y-;{@a8>ZXBafmP+=&&pqwzbhM}dxwSwd!RSd((oSeS;bg!2li%WV`fk0 z4rM&;5qT>83B9F0&iq&3p0y7D5I_`>#qm|!sz!qb;c?Wll-o=(yUhM*8XoCNx$v&QeO@8D#^#3YaRnD)Ok)D}GWFQ%6rYZx=z%#EwJF2#U zGT_10o~j{`6XE$%sO+?~LLQR!lC6+kmVK36mUO@z1Koq%hnxz}H$|gh6-dRFe8-+a zn?kR#20{mX*?@EAzF}Ws^#mPmwwV*A<*IR!$gP@aq&ixPE{oo&`NVF_-NJ3gM)QmO zKLs&ifAMGWabY`4V>89(vd0}$UA;UU?_=*nUl0E{)9=6wb9+k@Gu7s{CmgFBy**s- zaPJduL*FA`PycvRMet$G0x3*(rZ(>*EbCpCt(0AneUn^~Y>J*r9}mxyR>@9Df6Ich zp0ee#OR_JLOOoTD{$W}01ZXJuR@D%2&*((LB*J8ZA!3YRsNujCSfB7`!(GDyV*pPv zt}<3tBlEY|mnd%e2Kh1UFVG^+^CThhfN+-ZApSjmCa&SMrtXhk*PYgN=g1P}gP;ST zzTke~6Xp|~Jydt%y8I|<9`_?vCo1c*Ff**uy24_#4yR4F-hpO$cWFHHz0}W?EnSno z8?CWf4CfLjVtK=b;8{aY!w%aO8`JL8jMbb}x3e#^zqMaBJW41Xg-|(mH3X0I;zJxM z%{KK7P5-K2#HVU&{8QNxbFOm!axUeW>CALv*#8u2@(BYd#Y%lkv~d*@HMuvuadad9 z9{qLhm}_cqa`2+!H+Th13@yVhCu3?_Qs(|wk%-+VHPw&ewG8vR0QolK@0cyrb9YJRo3I-cL}HTn7{)+UCex#F3I*@-T3wCN?GpK3r# z;vXz5`OC>WF+-|l>OiWo_@?*_`G0}B#QR2kY+7sG)qKVwV!5 zyqddSrS`9ceFBT1Enow}e*aJK4{!t-L+&fg#&oLk>JAr9ql4J}g<2M`&ihbz#7NH> zk3#a9{h88&yPGSdH4-hS4P=)glnb77p39zjp*NwoAz%24N9{VpOVV-tb@V(R!no?W z?zzwJ!no<_FKEg9B9O5%!ilUqo_{=dJr6x6J-x&?gtv5ui$*RWAEDT&tgEh29%N6V zApg(UTYyJ(bpPY4S$B8IN|JS#tZ$Ot>~50X7!C;#BuGMV-Jr#a6d5R5q_nscmO^oB zDNb>3DHONj_FtfH%lm!X{(pI%JkObPK4<34+?jLFoV)jq1!K`@CRs|cW!OaamCAy$ zCHUfUW7!zgZT>aJDNC_+neaF3?xZztTWKrjyV2R`EOfr*m8~J2@N1iQFVC4j#o0dh zVD4~N%zecjK==`@Jv}79nDkPlx4Spw`@wg}Z^hS}uLV-lY3`}+)8>AdDX=-_S?1a1 zjO+Iv|PnvN#R=F;pmTLHEhSBx(v6cdX{#pGg2F}0XhOfO~> zpXMCm9OrzWfWo3w{qvvQBV1@oV{=`LF1&>EDRfiCpY69HbZ_-o!r4DG=w2U$T#K zYQa6wF9+n0R&(60$wC6j9I}SPyIf%}Lv(&lF zx!gI!HPf})jqx;khI$lUrS~)M6z>D?LvLGOJKtx%TfW=AL4I{W6Ig0qZeC_a1~Zbu zbLKXI^JZhHFr?-(JQ(I(3(eZY`jq*S-qRwmKT2CN!a;JDIafG8cP(H)XTNf_cO$r1 z&oEC*?sjesFUvdC`^bC8H`u@0j0$G+ALREa=vmNEP+xFAe>&66n#5?zVR8YlsGu%= z4;vEtGPES5;cB@$F4M#IBzYdbhvN}=SRSrN=oy@Tz5P2Jny4oJMi@fS;I`l}L=Eu< zVOaWb+Z{LpQ9>{fUr?Ts?hr;1EVw;53eiG*Kp0Li;&$SQL@6OgFcM!Pt3?=As+i`fJIGH{}^f~1T={CX4v@k~!%(&e+ zGSN)DPe>B9xUD!WQAp4dpHhA&-6TB44y|}39>OUNKvfV`99GG`ZccfAq(uA_9H)s$#i%zDv-;+JZk{7QImWpQiOg-DyDK-~ z!n>A=yzKt2m!g?$m-sgOylb#K;65YX#rcB6l|18|a(fVNM7gJ%q=EG=)~+OFJkY z$5~u4J*zjW7wQHg%sa>EC-_mYjX7WVmTAcx$134pp_3#iZd=Jp$q+7sCy`Fzjg+=B zx0PL#eJw@vm%Em^MpoV`y;(ZWL5DI31djpniWeG2*(?8p$vf6$xqX8QcuBeDY7b=Z1r4{QUrJGLjb7k0M$bNA(K#;EHoy~OlzmPm35se%I=_1W3yEeH;i`3bnQwrCY)M^{FV+owZ<`PYuCWtcoXYI)vL_AJR z2{PgjqpZlSLTKbzVOzm+=6qZfcQiCnpozQ)zqOnqNUZk+SDC?xDSIzA7uQEP&3cIT zwc?(zGmD!!GV?o~!1l;G)V7^<%%-B6gd$~9L}y=8tmPXR^O6>S-n|&1sGz8Qky6yB zh#$Wl3fRB4pTh+VSL3H5LvTmK%?&StlK5@h54aJAop!Wi4x!R9#c|oeao&k^b*A#h zhSQN`oLZP&c-84CwB|06s|Yi4@1+k+I4A1I&Mxv1Kz27=OPqziD+d>o#Zb{NT+Jfw zZDXqj>VuZJaZcRW8 zYh&G|TX}VnZw&=rSQthR$9qJ}W6RUue@SHedihd>wMrOuY-DR>d{Lq7`;spW^CK6P z4TTGQVe^TSNvZ{^LnS2ts93;1Lpt6s4qOW($j(@|*umH<+(g_p>_zhiSwMb*K0c6) zo8p}C7tvGkWx;QPnjnY%UD%=97Wh@_v!gT})QKy?7iv)4;eFPLPc@oRU{j9<$ zF3X?jGW96^&${;7d}aYN#1wKa5w}*#plL|OJz=uDo34j3NjBm7CIL?4Z5xJaOIB`-&L-uTvz!` z<&Me&mFp|lR_?0YQ@Oj+pAQHA}TLc$U#u za8US$Y0iY(zO{~JNvKk4G5<1MYH4OaY5ydw%w3j?bOG1*u4J~mG(1yW!dVcm4ZEU5 zNd|YPo2ptX8O&YFrStCUKjpRcie)tOT-9jlWq(U^wd{gyLwr;CD=CUUykaW!OXz0k z4^XYHClp?AGrv1L7hb2b>-c53GF6$h3|i62J=A!vEC?HBoG2e|OqMJ)bwF+|x=^~` zv{byFQxn$O#H!gsq`s#u75jGX1G||pnI)Clz(2huc#;Ma_LOOa#JVdV3Pxx z0~wDPhggYNg|HWYCH{uQw#qBuXNhWiL;RoVn_-nxqdCBv64Z#+{Df-X!#_S(74DEEHxA>d% z$BRF+djdyHGl^5|-T+ItPd`#GF-Q%Z_-Zj$Jybs}zZFZRa4BlCre#0NewZ_wT@!FrX$F;Y#H?{(-HiPf=4a-(xQ31yR|kb$R>5aoBG} zq2_b!Kxj6li@GDB9sdP=u`78~ypn@f#LAn~XH;G&=oztMJ=k0NA=d>bKP2 z)C<-2!l%x{+~m^Sx4DZ&RyMDw4XRhRhW>*A9^=PeMmo95BTeEDL=)I1@fG&{_&(Q^ z;IZtbsAZ^OsG+Dv)KAeuH9MN+zMUNn|4ggaj}>>MdpMtm+l9?hg5)k|9DRp78tshP zgz;olN$%v_&G{*Ztg282xpLKn_+}4Hb3wA2OHT5rytQ;i;<|oCOeAf`tBtHNJo3B< zJ*Rby#$qkK2~)%*F#Wx4Z^mXC6fhAHH|C^{X3}PLzov>F?zo2}<6=eTy-**c+&sMV8R~kPil{fLC0v#8%)c@D+rLw;4mMgDhHmrE{~>=zZaR z=G$zh2FofE6{QuHa$&ivT$(IblpD%1@Vl@(uzB!{8S_wY;C)bCFtwO1nAsU<>_%7$ z=7TRp%}4b`eSzwST7cSFwxeu!83#2f|6pQO;wJwpV}-yX=)oK&I3d`>tPoC7d@aPX zUPyhJc-vGKP5465M0Aa{T``5v7A+U~*{?;j*uN`1;=63C@|-xihqI8wm%QNANlLiC zNK)LcN)b;h?ZKO+l*_(XUgmX|-IA@BlKGG12jpxY#TN;!3(X7dtay`uHGi*UE_a_~ z9=Bg+U&|F?6V^TSNc5d7Np^EqQ&uxpcJ^KL2=qEaHp?GA%bm{aEAJVV2j~jz~{pk!56|8z}IA~&gcdoh#Y{Nhn$bx3*Q6Z4c`Ud3EvFg z3jYqi1^xv282LN$5%MAOCh`vQ7V z*w?VHU`t?M!t&rjcmVE)hv6Z30X!cb&(1e3$F9I8S7Fy-S7X;;*J4*Asrl%RpvY!|4DtT1WSaHzQjdp|- zFm+dlio?am<^a`a1FwMaAvH> zq>`9dFcN$_@;O|E&>@yo&=b$&%*4xh4PU_Mrk6^@TpG8z)G1xYTgp2w-63`JGx?+R zzwq;z(X1_5O9c0$HwyQK1_=%ePB0J9jtTQv&de27hixfqhD}Z#&sSQm#}Gx{qEE@YRh zg;A|L9`2%_AnryFaOQ_Qg`H7`M8KU)-{($5J4r6*RH^E?M%8EWHIgx0H*X{TkzOg? z#CzuH7EQ#ez462zuhTa?vOY4;z%`FneW4l=`$XEppBlV=230)#t&gjGF%lMvrh}_*+Z(L7oonK=LnQF;eQpX@1XGrW7@8g66g@I~DKroa! zNpV}qW<6E35#42NQ9L&7#BUK*upcP<&`ioN#nqfOjE#~{xt*0WlzWu%z})^Cw{et8L~4zLs%Y zyqc3E5pm~B;L=;%uF~&#K-SOLpZY527=8+sfPA7lj(DSbt`{iJhgKDQfEvk~P;eAE=nly^k zNV`wIPP##2>aXM-Ha&trgdan}aH}%5Alhf#ExA}c8h@!6MT+an3W0vQ-bpUUpAYuL zmj&DCO7L%u=)?v75r#kOo2>oBd4lUvQsi>s^TPdwDnUDD@?fZkKpuG--eVzK_X;*K zb0cT7?ABehv5L=y51H!BH`YZ~ooxhbqKzPYpePcZXQdQ;%gq?7C{R>YL>1i(U9*+j z-G&p9L*b@|p@yS&mZO7Xf#a^@Rz&F>9L5zY3LBlS!bi^h+%I!q<}MJK*s`L&**SDb zj1zm4jMTUik@EOm(OC8^rCxl2eJ8%lbt3y{G^%DqW$tiTqr60Gt^Y*ao}SAA;i|A9 zijmypjHZ9*E{{e%EhVRNny7r-EY-O9S;=y4J0*^{ik_LcpwE)a5`Uw#)W6z4 zDEdp-9%~!h8fzgtDceu~)yN9Zi>{6z2@vS3!?OYlrEhrKqo(lG*hbY&`7ZfGV-&_I zTcLTbSwH_v^ebJ?H!#c&rs?x>I_d( znd?2LeC2}(fAPOGzcAB-O&KKRLir*EUO7O7XCGB8kRKOyW}~wr%E#i7oY|69N>gB| zOd)?OKO@HotjyNpI`m=%L3vDp$%-l)m8+HKl@P^Q`3X@M_ObXm)CE+1AXRXeH?_QX zd9p=0nt+3`^y5lKl~4(r5ib!m{FKZ+#=XW(#?3|u@@(-&+AwnS{7(4{^z)25lL`sf z3`LZ{;3OpJ0kJFDNJ5bA6ZIrBsVD7T$+P06*`v^O^wi9HU9Ij>cF=s27{W%dM8)*- zZ}1E7&s4>P5<*8}7i4#29dbbYb+VX(XX4okj-sXRbrH0zhKN9t2~=bd`zG&go?N{H zvP|<-gC$%?JVLa~=$zL(uTS3byqDtfei_&nFfWn+7}U#^;UAqvm~UtktuTA-6J;5|_}2ra^% zk(=SA*86fPpHW}Jp~y(S#owIt1EMdKgU`r25xkJ+Q~Au7R73Ft@DjWfzlOD%)s(bc z^GqWRkweT7JH!pm%U_sZUNFHh+^{o$Q+_NY3(-T=(C&Ois5m5vx(c@EZ_HntUmwj1 z5ksr|_MzB+V^e2z>)UPS$jT9)rK)a0bfTa}+D1x+Dh2{B4u$+}gx zsO&iJCtiS2l(jo+Th@kxNHIHe31d0SoHZ<4PV7)JiaIy@=NwbQL4lM_Ex4ZZTh1@& z>*&ttZs@D%-_W(_?&t_gk6NmU(w=C_X|36N4SNj91bQ7~R-B+AYMN1xksFM1%oDVi zGLJsn$CTI7x~WqY`>BVhGxTqYc*ya^FAP5$MiVHBEBpX6oV7V?0C6aB3-KUvv0zE@ zSH*Xt^vJcsH-(1_^@0J+S-22xcW8hhC(;^m5&3)gN6QJqLBT1eFLEVoH`azL73Nxh zNYchD4hsXUr&3!c(zeuUwSC2!W)o9M!bgfy(Nos93Yo>8_e%^?lv~uSh%UMsx?yW! zKZA1^en%aR48Z*uE;l?6-o(YV`)~sdr|p0saCkJIX%4HqI=*uJ?zkSI5jD<5dBel6 z^2mkK!coo=%|*=|^=Ilk>c#5k&ZL|W&0UcTb1e}yumwdf!jSCFxTZKg{p%cLOc;Yk zYh9I*X7R_Ot?WBWig1CJxtw{@H26| zxR&nY%n5f0+oDtnk2`_B+ubf$9Q_Ql4^!l+kzCAat?I_rsV2oQCna~dHOkh+T;6&* z2br%`Cm!fm#bnZrysnXN439mpLa%6@qs6h--dJL%*XCPKn5uk3X^gCmj4G1KW*g>2 zb|_iqQK}8T##mGTTK~A{53Hck=o`ZG z11{|{sgu7Un#>7zBfKWej19rwK@|q~5RkZ^uuR-m)ouA6`OxC0W#cQ3V}8S&#oWU@ z#azL>#;l;yQ6q(egcCC->c8ieF(&ByG5Rz1@(LOIco9Y`Qftzp@`dGnvra?iLq9DZ zR@^{yLzNT@qE`kpa|HECaZAK{)JV)A?B}T2s9C5UNmK)>9@UEWB;#zbWuAy6Bw2V> zBpS-6C=Hz}iHDApZlli&hodW5?K3x9_UUd3JFs>}*Am;CHkvk>?viz^R=OCYfUo56g$(aLE0LX~e0-Da6aAsel4kx!7ZNTfd4yI|0dO z@|!}E3l6F9N5t#+A<|*eWYVE{-#DFc!_ZzR6iP%_sgJ3@P~DU{@y8jD$})^7<6wvw z+8Mf&p`JV< zI@R2ZT1uyqXe2)Ap0SgWXUm}+Ks+mXQc|U>)~#l|6*R+N46b6l5j4eL2u92IimKQH zW!2?d;#=d3$UR`=_2cwyq^o(YrK@;n%UpTQ=plRozDGtV9z`V$C~mxPoBCKem7^gj^tyNSjdMG++duSJw&&5S>gK=GPEpVUWc#1WMbqEV~4#bIV zp_q$Y3tN|jwPAlln}8jO-BYoM%yQpQszPzDtYC>U7KzhH%>Kz7HxzcfR$B7_YM(JsQ-A@O+5ap+Ib$JkfcV+EgMW?^32lgI)@!Q2p};ClYd(2S6?;6cH|f?=Vdp;`Hd z3Jw?4C(c7}L08Ft=igzh7T5*7n4<)z1>ZAU3TG+S3MnjDW+antTgZYd>qWO%-z(bi z@6y+Z3fNfjQub?QsrWJ5ubd{1b3_s-cZj5tdq=X1+e>NW6-fK>7AcP?vy=Ww(*Cl? zvOQ83|B3vF{ET^!h|K=RbwE6p!wRqi0~533Z!)e~YOF`CZETxu%`FuBD7)RU!+~|? zI~P08=1N?XTn}8$+)vy+Jsj^a?-g%T-z8rU|9Sry^UJ_>O9$&QYnAOgTMG--{)zp* z-Qn2jz&Q(?Upl3($*$x>S9AAMcP|guJKX!Tx0&yLLxVye|| z@8bN*OZ2OP&v0uh)>f>pI99o;;+u+f75gfF#x~DxoAor?m+gWn3Oukc`4UDu={LL! zQY&A@UBZ_#+Dq5-E=q0uRggUFS4B06h3-Y}-ts>3_2y^!*knQf%o*+}`Qtn%W5@Fk z=O4`Pn8~)ya(^zHDVr^OlD|C99~xOO(LB>FwXbpB@STd`f}JvF$;N~$!f!0QoKt2}Y zR-o?$+XRz$WS_z2`JOSRFcqw^j3%5Zyo5Dq$@d-bbvKvT@+<|uI`g)Qv6aKi>neto zPp{}y){VNjazgo{%FoItmv^sd3?)OKg$^ZFCvNe7Wvmof1r5yMf|G*1%u3-@#Zn=T z^-}83B-p00=)#wZrlRYt9g3-Zj%bA_zu%a?;qOds<`7*m%8Y{8zO))_BUzJe7cz=P7g<8frP!;Ot*D}i8owC2ZmY0c4EIq7 zBm2T}!{OioLvKUMe%#J+IFp)jn(x(}9E%+H9mfp6M6#Wwc|*cK<)I3Ng~Oat&3g4I z4Nya9*VGHt*22fmQ0`Z`uX7iQ%xq3kGgK>7L$->(&j5{aW6vWUT&0nU_&w2hwn2P} zeK)?xH92@B8;Up<4XK$?h5Kf9VfZqwjefMahVJ6b2v>)V(IifCn=^*K&0QF^BD@)e zp4O6EImdF!RC(M?)%f_g9=hh7WF?o#Bk)$!WeF7aSN*b>Kw8b~6j^0>;CU8$N~?)R zV$HoJrm*QjiO6I&g%ex7Cf~rw^2o5F5fp(87-mLVQ@R)8%(o~5RNwdp#bo}W(sKWh z=((^y8EY5Y7HcItE&Gw)5V&k4g{MZ>#J>$54G`&T!m|U5r4atws60F^)&ct~$`f3t zT4C&I^cf$eU+qNbFX^_GmKYVrwZ^K7Nk)uGYeX0=`k4NAqsur`y-9aK4?)N?`WX8f zcVYHmc4Bs8swk(9oHi&@uH_4pBxrKPA|-^e5SfLU^I1G0Re7IvLeZ5k7OfZMvNObs*~qMr_yxOI z`ICOGxR`_E4v@6s?&Jj=beclkBuoALt`9$)C%1O0)QI#d-My)(csJSyI50 z>+;N@eNhr+jVw7?&Nn_bTri9)KV3e*{A&4?a--&_tnCRPyvNMSWKj$G7wL6HKgT!N zk%iToMLFADhq5K^^R(uAk}9r}sFq6xayNQfXnxi|qID~5^bL_VGdGbX1NHIcaV-56 zPi9mbd4Vp}AM-m*d0U`ALPtecTCjLa+C_u#@McI+tg|Nu+!gfi)3g#EM817hTl0X}I8HQL-6QtJrf?t_=5p(uF ztP9syINf@fwp4LnSj*yNj>_Dk6WV^a4zulG9k;2eW}#TwC}OZLE7tLijQN&8-u)P{ zC{$EalqKq0B#7S$1?@}i=W#*9ukq87B<@(ah2dpT8oz_vj~i*&Wlv%pa|ulxQyo_v zT<6_LH|NH@apCOztT?SOr|?&&x6qdRm0V4jnR`FC(sf?cpPf_WC(Ow1j%$Up(s$?J zWAYd}y1>;uQWM{u%@glr!4w3Yf6gd^g5 z`UK9RaJR50>PkusTtHWQItQCX6U1en1(M%$=&Bl312>?WAOAt}1$U6c#*%tYFDRfK} z4;x%Lq;fTM4^)%03Hm*B8}w0WW987wECsp(Q*j;FnAIoPFW8bl%k;Ua39=HI6HFAJ zwUk-+T1#!KZG{$yy^sBxUE}EINI4)*rxQ3k%n*%yr;Yo z-yvT|KOu0`-^+Y6aNd%vuzqhXx2?5BEiijO`)_ugV}RpZ2h8bm&UALlJ(|mLed4;| zio377+k0@{Ufwg_nD2YuG_9M_f2<457FD#d)`~(JMQc1Kk4spz8AQhv^29Gur{@Au$5Rc?1SvL z?Iy<%#}-G1)90My?3#NbSKu1wy5lN$-*R{Iki7l87rb%bPrhz`a^RGIfcbvlqNRy- zzqQi#jjhOnun(}`v>P0Q9Ge{or^h+VS(|%2m**Pex|Kfih}@7T?bq+_cC<@7t}I=khb%oV!EyY9Lw+_&AG zJ!Efx??rFIcf!}*PYIm%4>UgroU@c$_oW{duCYZdP=!}I6LMZ z$z{7nxqfriyGz{H-0eJAZ%^-OZ`5}<>FeYt29EiAn{Nd!SSqbQSSxJnY%vSm-rs)1 zu6GP{Y;wSzZs+ID&bh~OxvtT!o34cWH+PK(@9ph9>n-vf_0{@+^7l303H)qnVLfDR zZrf-}SkU$%_PchAqtUU=fp!L*^PJstPvweSpSte3D&2S7wH}IhfcKI&S?W9KtMi}n z4>CUt%r-Se-W7Ia-R1wrXeykpSRo{^UQ2_SBpYBcg|8L66ixUy={(Wra)@{?`>E0| ze!zApUvqj&O1X7PDbFbF#ha_llKrUsh1WxNPxh^p#&46|I{N}~h&(BuKt)pa;9-<) z#f|cL{)u?CVRXryWXVqnV#x^nG0b($8O&YG6U=4IE6fYwJO-)ciEtKUYw?THm!*A! zL$ahfg0f_mEGIMP0sj``7fVa)YT;pPOWU`$7JLm_jV`rd(!XZ4I_5j;a!=<@a5Zt? zb$9XfkyxZu@4)nDkx%)~`jh5If$yXv&7;h%tYsFgz0sch!gpvqclA=ro8AG+&2OmEVA&NtlrG;r0@+S=#(B2;2lios~Qg+byGp~dHh(Bq;_cYhb?#gZiHcF}dSEcQ;@9}RinhAkorI5&a zBhAYs+h(v>!Z(WDil+QqbiQbo94em2ex?kFAF`dwH=JIQGVZtBdSxchB<;8=N$^u$B9UnD6s% zGMWo#C{_tcthdtqOp0wLi!FSs*rRC1zfBj2X3JsX`RwP)p!g9xSNWFHTT;&5#OZLvdvNk|F^_6#Vf^5#Z37VrCr%wIY+r)`7Lwe&S zsIWO$f^HOqiDhA1V5wLibd)K8oMf74N*}YFM7DyogtUOLpiC$OS_0_`?E$4h8=zw# zHIVj@S|}Hq0i9}^Vu~Y6kReDL2nLFR7DB?1uQ0`sF3^*S=Ga}R38+RW35$UKlK44s zCc(x^u@daL1P5CNYlf|WoJfoO%TuIQe z7ocNJ1<3TrJt0`=1n5NQr_j;RG0<_)@lYDJ4m#SDhqORiL)cIiv;cN3p~32~daMDf z#iF6LkZNcG(hf>ZLdToJ$WKf`PU4_yge1ziXI1}cEkF>Fi`Vm|g6 zih<#zUz+&>`y9o@a4{u_1=yCTwy1g7r>K6gB#csmEyfOk4TKGV4T24Z^@qX1og0Y& zSTPGp25)X8aKJkUIp7189O|~G-p*7N!2wuy&9Gcjl&&c-0Y zksB%mm?gjv0k=U-1VDgc0RBTX8E8M3qQIo7QYpCqK$QW`KR{zY@O*QnNHA}Tv?XZ# z35`s>xvrv9Q}!3CTm3P0-RsJ_)z$Ut1iome7O0B;EEn|d-mX{Yy6!%oKmGcIuW55g z+Q9UeT>b=rEA7;oxT3muprYz7H4PxqQ?0`MRs7d^a}QF=u;D~Zm8}CD7_^DaBhe?>phU02KH{~P~EQP{{njgN}awO+>c9GsrgBD zg$&m#UEzO>zj8yBO)IVYh~@Jo(mkJc#Yrc>>-opB_uWW6TBsg|0@JGHq*U)^YB?0V z*`vmS%U_7lVA*mt8@NNP9I!3K!lw=|S8o-P|F8L=#|AYGtSn6{&0nIY0zE;BO?~>K z`g!`qtiL+>0d>)p9+>zqvJ9YK*@pKHiUHTUSJ_-krX8sNV>mLEEHS!!^?~QW&h}5cG1uh~gGg9ZN8WaOGoYF9n?`JaDQB)~U!Lu|a zP%!zFh7C{8Zm_DXlAY?1t%0KcSeWVcmTIln{7(I7jXWsUus)vhsX$P}M1MSwQlY5k z34-%~FZKJG+A}?)Qo6XNW7@C$b$vgGfTvW$1nOKY3)JOnkYHk|1_dq@W0{{dd z@A=#CVQ#l629gd!8YtVX90FD^r6N)n;M&RZj~W9#witMzS+;fq$a^dkf%=y+B&Z+T zf&^rDqI{72)rU$Ua4}-Qb_A9!$QB;(*n42n5{UzCGBk zVzN@(<60UTESzp-WmFcm4fbveuFRnbF>RtBN;ROGu4AN5HPzO;)9&L>CpCAPRt-9} z^|MoLrfWwbJ{B1|`eoqlENuoTo~6ZsIFp()eYO_)u7ppCXKB-)QwY>_Z{O3D7p&>t ztEQnV*k0Yz4311Tky6j*YCnfF{`R7!dMwb+-uH1slSflnz|&2KPvL8ITje0oQ^EvL z9WE>NbfT`khVhrVfBDcdu)1SftJz|t6s}JXJ9Mi~2&xn$M5=y^u5H$Ikpuzm_0S7b z`LQ-_peg@#T?F?xTc)WaK0OhvvIna^@T#s#TYsSX&t*3MK#iUuDSuD>w`ui-`c|Oc8Laq#I?^dK z16+0nTdN-I`>K+ zd0f}EtgdTkFnP6D2re%b_XFc?dOWz@S}zByKW$9{^J|&7=?d97FhMC>lm3mm4wWjb z(tB`V{_r{k&~!=r`q8b$c|gA!DMFik@qB-!*#s`V#5D!;SMboOgI)Ao?8oCi^fIOx z=-n79cuT;(?=T8<>z!_MV#nb7k@%yy!isJ69{1ma@Rz!`r0V?`e!&0DX+KVy)#uPaPhSr4XTy|5vhr*^>G}$O|dU^d9&W!0g4-g&0KTQL6ofWK**Xgc<2rZ*KE z450CqcyQ`Sytqb5aNP z8XV%>f9zWEpMCSCBdfm~3(&()6;J=gfCVcZBtP)}YQO>K>$G|Eucj$s1u67_m!{Ga zYi(Y7UYFsK;PL~51qdogDA1}2zW_A;oUUN}o4g=s{LMg4UHr|^3DYW2)9c@c{cmjx zRd@S;(@Et%G;oVPzWfh@Mm~u9jTxXMH*KM}Wxg219Y*}Sq6-9b@ieeSgXg90d($uW zrb2OJcPHp^O2Z((i#*f+#qWa8P}=7AT+Db-p*1rn*yMHT}S(9R(^d-%3Fs{PpSLm=D8^- z&@lp6rpo3Thrl_eyz~fs?D*c_M$_{YRO87Eux<>~n0ot#5nqJt+OE8RJ-8BT%>f74 z1z6Dc5SsyL_l-2r*aM*f+wZ44pQfB%7XjgfsMH0h=_(XlDL^v-xoZ>w)|d+1smE~BJj+MEa1F*( z0`ylqATmDOuEA;?%?c(lOiZvclj-_E`MfAUIO0h2^j4DN15cl8LN1x)G!fAM@pgZy zrY3|;aSG~>yZK-IX#=Fe589;R3?JCu)WialCKmWV@a}v};lcc|E;P{R6IAb|snN|% zfDP80(>vD2C@I@NUT3Xb+Rb3r_bCQ;JU^H0(Ha0y%)mP>o5hz8qBrKsth zEf|o$71aeSIoVN@nmo^Rsab0EbJN#QAUHvej zh3KFjXQqI<=S~XH^`W3Y6c69+#CcDpw0QF&m^@h5yZb-6>cqQc@Xpf#QPWWSR8x}q zJcUuz_J1R=2Jm1nk_+@QGZrkv%auScHsinxQhLvD@uUfzYLu8qi7EfHxduB1b(VlZ z{h9GI!A>>py8N*T@^_Ijz+76b0IVKtCIfG72^Lfx4Y9%YfoU^*xg|K@YfH@l z^N*$n@bZW>|wKJ`DEX4YUW|?3jt5*50 zS@S<4>W7%opix7{fbHzs_coD%k5ildZwfj8D7^0~A%O3On2Y}b!3DWJ34(tVs_Zfi zm^9E#0&zht5^Uzzsz3BTUDWp2CP!o zlK)ZRKz1%EosKY%`$t5TB7M2v_XdB3^iP+70V2K0THt**Q$$&5g~pL)%Ji?v|BRn_ zHY5QnMwqAnW5f4Hm@`1Dk><(&h?q3ei~@5R6!kwMN($xD55^Cq|BErVwI413DRp<0 zxfV+Q-xcHY0mE1`9dsLQw)~@*0W_CFu745VkCHP0d5l^2@0j!!z*1}ccg#OG!vxE$ zwf2A1F8fD`7F_Bmhz7n0f<-SA;A5%T^V4~XfyR6fppOCTjDwo!|D?|rx#+x1gqMa6}Grv<}EU+DILZ-8T zwbFkpgZMQw z^*>?CgR5o(s6sO3VEb?B#fhYg-xGl3Mp1$IiaCA1LeddHSC-2M=YKTI!2M_@5)7u2 zMDK76unLD&e4ySU@qAEqJ#AZKIGpo=s>?)^$l~HDhy|W z`Wt3GXl#p5M_kqTzXV9I`lt~%T^nYcs#Qd2@2I=nUf$udx1JozNVxa%tOi9hZZ(fZ4GpKrxD0wMSzZU{e zV+rR&J1bg*)5)8(0+{=X!~#`?VcLhH&`)51!-veWRGSy(^uwKxGBiiISPrLbRQiM! zAE<3BB${dWE$9@9YWYeD@{MR#YL3IwiUFj~bgUZsG)xENAshsvEFD<_e<7Or7Y{rx zws1lC({!KSK~jnm3zh(ej4=^_@1!Ul`?ay8x3DE$HNe->LIC$ly7Is|DVhSrtt@zu zjCbY!UvOQaR0A6Cpb21J;y>W3w-_AImUdNws@7?>xuek1cN7V9Z--I6YXb|8lyyy0 ztdb==x1`@6PlW;ud>*n;0!8lS-LSi*m8?m1>zko zI3TVRr58fmt_bky;jk_JBqZI$g+D3Hk+A1IFC}PaSws0aP})JHrso_BhfE#nWl_Vy z<-X}aS6iK)udlfTRO(G%OC|jO;02(5paltDE$@m4mwH*!xqv(Aw0oLorNG*C0hB^C z4^)*%$;fngm@X%_De?x(c?9d- zJ~6+0ySnzByLbFE%1l4@>Crw*686f<;=LMtm4(4{e)aExzVzQ88}o{uHR-tT@2Ue= zhW6xxOF2bY$^UO%;Ls41CB@ooY5%`*rZ|1zY-->s%Lq8}ecIwbDa>>*oJ|y_o}abc zfPzaGENC!EoWY*n!-7aPUa-t$BaH77T89bUd7yDToR*3_vCPf-kXyg3z+j<902Ntf zpyYZwJ6d-)1Dzs>tQiXG|K@qXl_~i2qMD`R!SroFs|iRk=$7YXr9Ao814hg{e6PCh zo!fz#_8naCja4uZ$t;kBlL>Kg`-3 zyclMcypz$UFH*&T?iC%G${%ihKqCBCwgx=-EDd}4D>o-qHN~2fe!BfvPJK=K$Ejem zE0T803$3`+rmw6t$wvxdALf3T)=l|NWr86W4#-ibCGv3AM$ z$c?;*uTEJ};HL=%Y|wZ%lL6ipQ`1jcSCT(!?8>j!bUp;jq=OdMtayN9kf@;R|3}$% z21Ipq?I0|>mtEKemLhfOC?H^?E}()aodwj`02R9e_6{a7#>9d#a(qn`Ofx1HtT!49 z#$LhRDfSL(?1k@{yObr-yzlozyff$AX?NzFGiS~-dmT?<%X1Xkr#3}7QYy)i8^8>W z;i!O7k!MLoxAFAdXE7Gqr#0g+{@T1^PzAp4igP$V>2}Aj4Rr_L#066aS~WMudU3It zl#1NUv=6V5!$;I~eB`amyuvQPj`y<*Xu%xgjpq_50#)3DzbNELj5SrcnZYb}Luqr5 z#8{EvMN=c1Hrc|Q|IH&nVn{w7r|F*#aJ!#}+69<+k2nOrbGFvx+_1IUr&O+I$t1&7@R)qxEqUb+n$en1}JACT_ zApv#*$0s2HPQt@H!b&;hxQHzXyQk-!p6Y~1?ib%OfUVM z%W0p~I~2xRPO-UZD@xiNASSU?;V2Zm@Oq3R-$5PFwf-Dz{=@(&WEbm7cG&^V zob$Vf2e|X^h6Owq>n;P9OIv)#I2Wb`81ar{0G;mVTeG9jI{#(01bGD2dr>*H-Q)hmyOWh~QR#U()dR5i#&#IMN;%;Y2u2Txk&FL#X#qpFSy2_Kss z*h(tW1}d!36WdXap%@#6%h1~!e-!8PRZ{{7X4t>?6s_U#mJY{c*penw6(I2a!x!=o zzDbk@X8hV44&ibx1!4>B;3uZ-)8dS%X7_k&-urT3u5TU$b(b+&ne5QC$+y|VKY}?* zld{IJ)3oL)OqWgP-RAs%^HVoEP1*TsLv6wv{*6^MD)ojj%xc!6#uxblX^^SD;n2*{ z~;F%^7o!SUa|4RVv} z&QgJ?wJ*J*3x+x!Bv;5*H1mJ>NR9nMgg$*3Yw?nbrV!N&ZrzQG6WDepJL zh)jqNP8Xi^QfQ`NyZw?NrZ@4yr-fYpbVBf%7Vzs%@sfn6WQ`M!Fp$Ebdq;_ksw92H zRFY_A!2gsS{7VbP-_J29GpUmm-#Ind-HQVAf)%dsJ4$Yt+$<)h7kt>{Fu+~KXXOP) z8&GaHSo`}w4Ys7|6Mf~B(Qm4RB4UFL__9xf`!_RHS9}p{OA%kd7gr;lV$Mg*4)&EA zFej%_hCU7lDBOEWTPpiHSW2zeLY%7(b5>OTb+8fj*k@%*v%U^?qL9Lb4!nF(@H!lt z2TyUJq%kfAeE5>!d`XM+1irL5c$rFPra7H7b)kY2!A3Hjn1n1^u_xGr9@JU5)2`p8 zQmWk@j93AM+<`CI9h}h2qG6o;n*+g^n~f`j^vZ%g`LD`?zZBEKyZP2sc2pvwnFl3~ ze6i$Nb-#7DOX=}vQ7gh*-jy;!&-O_9f1M(Hg=BnC`dkg1u( zoDTJwYDMjKa6WuRi;yTWJ(andQ;}_=JD*?_GPqe|*GHKtu`3NRC3W7^mfELXjZaHE z!u^=ZCPp%<;V>}XDHZaKE0h%=4~+I|&JY6ooM z4@;dq_$ziHYjlrKa{GmJkTl36Ix#E}!7d(3Gv=8vrJM!hU??~!5HcWA`caOpp($Uh z33)8h+32%Z`0_p>kD7M&LMch}9n7fwwUZYKPvQBA^-pX2bW_lbF4N4lgrYa{)>P2l zKtb5vdusD)=egA9`L1;`FB}8ASl~#E6r1w>2Zu~Dqs8|UtfAd8RNpL_=EuLC6oRP4 zPt@3IpWiaoOb`dc?mIV9VkKnpQJ;k%z-UOSGj`PvBtEofX|R$;Ka{|OG$+KikzhtU z4otIaq&hVc6cm4OntdaIqsoK0F}|TZ1zkBf&7qMh=7YZsDQ}@AFZe1%N$EaV#!Yp8 zd*5;Z72LO!(&aUY?WupXsgzn(O1kh?^Fuxt>$BZzHQT)wgkpWEW_K2IOu|7`fzT-u z_aZl@szW8JzjLftOW@nN7=ev=gAlCW0y}lGQc{wiL{5G?Y{X5Op7hf!TQ7dk;*f*J zGF`o^jbcjb87!uoPKF)$Z9jzcGUBqvjn7Hz5s7W^idt(ss#p^up>c;j?0Mg{A+K0$ zLX)j^ImC`{btU907qS?{De31+3P(EsXnGjcy~0Zq9#41UC3>M7t#n_4UU1^KS%Uw+q=P)rl1+4aYc8$_AURCaWKW@woR>kWo` z<{?XO{@y2{yaCq5Fl}Td341@k&v67eAvDjG-Wf}=X`CH8NUwQ}N)y}Mp3ZQuu@?@0 zYTt^Ae=^5b;x0B7Iqeh@db>>_rfGpe#*{NF6dsXn3J)zoIo!ch%RJ(mTRroxSM^Wt zi*#wKv0GH02Wyxizx&J3&&-;AfMuZ$bkN+)j?Y*YI$n=j7GY#d#^)(`v!c+$x&!nm z9kNKZDpaCl)tsnuvlsGcnX{z}Rjm%?$Tm!jQx*24+KmqsS{j<6Yx6X|!Y@4#x*iL!F?Ax7Uy@y^yr)`D^KtVL`Av{3sqB#4 zgvy7{bYTPq75yYPq=ErzcszQjWqd_XwH4dnG)`QUZb4ONu`c7knCVJo6J;jUW}@7k zd>xFjYA4EESe~5j&6(+_eeyLkv*ODJs7;#*b)lT3EVYEM%2Fqq+KkCc%^H<6GILy3 zLguKfh=`9nB}H|PWdA64qS|h8DMB0jOjK7$%%VnT;*dT*bKKDQ>_Ov4W{v%b{3q&L zQeeK?g&s}NH`hbP1bqwq_h`JndB8{A$1-LFX-&w2%Zj~RpVed7Sj@}%tR7ioh7Fz^ zH*8?m=&@O`S(EwR`Ra=X^sa_ah)I z<<>@syKv@Ia0h&O=hY_k>W;*k#}k6Sx6V@~P^BxZ){18^ z^U@DEi+R;UwcZyx#!q#nsmpsK5<8LUYl*oIr`}{!PgzsYCL~(5O6do~wtgW)!ktvR z=}hjD$42mUj0}@e@7D-iKs@(Io+gC-#(g-b+jyV7oNAnnq?m819OY-i)^&`Nxl%zZ zUlwL& z%l362*snE4g*%X+mk}&VXCqI_-(o1GT{(7gDhagZ8idDJKmv4#nrg45T`nH4=tZ z_0$fftqzNq2=V2F_;Nd{^OuPE<(tC1>m$u;ORS9O%H}XTGLE+LW0B^q=vY@P3vvv1 zZ^dV937hKlUt`XzE`-6xUTkj!r-;1?`DKV@6tTx1!46N~)}q4Y*1$UK zu~+Kk*Iv>`;Mw^wYnG=h9B5|5BQ?(QzXq@81RJ^1x9d`!sr-8@Y)`i0^s!k8dp^~Q zFdvd?!fZ(qW#mLgxoJ@2cf-u+%iJ_e+SShi)Jz94)uwO|Ta17wGyZsOSOANB-+jkf zMFqH}g)*El9<}4sS{DB3CZ=WHRye$W6lO|c(lC76)7^Sd*}gEul7N@L|2XWf9vKuN z2K&KZVV2bS;dC=0Jf4!KK<(jWB_IAYtUb1p2$ZMc6J6YB!Bc=7M!$5E@RcvadgvJ> zARv+|Ujf-6zZGV}k9-~WX|pi;+-FXKy5XgWptqsY18R)qGbbHsFU*4C*$&2wBb*i5 zNP537U0BM3jz2}LY@(~H4OP8EGea^EyEqfyq-h2tC1l5cw^7-U#yA6+>=FkxPmGp!m%HY2;ZO$ zxu=Q4^l{p=pBc2jS#tb>&f)M`HOM=#8v)Glha+c71?SZgZPIbEvn44OJIm?F_ZS8C z#7~P2-(;yH#4@F3_DxoNaYlGc-fuwoLC#R?RG{VfaReHD(hb^bM7WInMuv-c%aP$_ zqJJ!u#hGGTnpJ3TMLGTLWpv?*3t|}WIb&6h3IC>r?i?356GDs}XqO>o?Yjidp3P8f zg2sg#QCKP@bwLWiJ0+0@@Q;iSHz1Xpl?f@_tP~Vz&{ILSa|~sSAfn$4dKy#wZ>A8T z!yIr1#A>eW;D$i{@!@%TB4PKb?ZdlgPBw^Nc82UvF}I|gn=Lp#XJYtP11fteg0C|_ zoa2W~3-72eKm>&0=D*7e|K3tN$T~QIU+`gq3&SrS(HX||6{c>wCcuj92v;4+f1-DU zBghS!fgXKgWKXuP_#KJz3r@y_-%OVgm-?}+&_JT#2MmaqY_8+fVJ|l~{e;(FkB{I; ze$}ldkEh{?2hnhrMo~gjW{Q|_s%IAA50`BevkpY>>YjK zlbB@XO8El~e7vU9I0fl(vj{AQ7Y)IeWzArQeozRz&yDP zNy<&^v`-H=_krZNFN5welL9{A*lBxb-H#271uQxPGdV37&8FV5tUKT)BTGkXhwaO;&f*-DpMI^#eZvJL36$}am2y1)PokB?(9#MDd}SRSZ0IR z1FY5jVKa&2=1Ia(CUx{+QG9biW@d>4=L7z3XaZNL$=8V)$iAT^2(R{}ZFp zaN^3F_U$5VHm*QR#Ir^i^NJx|M*M9{+eoDRT0{nfGwg-%4OsGh8)d=+U* zwQXb}ls^gJNWXW0QIz%oNTGN+G)mH?f$as3hI|bJRYXyFf~_fRuSf{T+x}rfl1I|V zXyE?`S&^PTY*bEq1NP&8$5*_OM1`g3b|zD0=1IHyMu~VpD?T&hZ;y^@tHnxK>L4iU zt82tjz)vdRC`h_4YNLRku+qg(=&~~u1=on8;7is;{iLi1O?1$~OB7pmHKrxNOVIon zSa(YYo3y3!wr~><_L7ECUoWYQH{KW3?%#kE3unr0spJWcuD8vx4CV6DC0`T!Aq0~5@5k%5)KvA9Uym5*@f zY9ViqrXa@{1EWS*L?fI+$j1F@0?MKhPtlwifC|gzIgO}_=Gl#~isspkxQgc4jlc>a zoBB-jY)3Cfdzz4{O;W$Z|IXFH_xwF|l)w`~M1Na@WMV=2Gmx2}`K z47uRTKnqr+-XMYg*w7U|Wd>Ssv=Q4-Gthz~OL{PZl#Xx0r+c@t>k7Ex8$b(u?e4DK zY#Lz-4(~%KM6B*+ZSt@11S(CzCh5!$@fbQ-($bqhez|M-KnlHOHkA3OCa^zdbbrTC zj+VV@7u%TZrG2tHX+DjN-n5%WieRkW;X5PKKm*hVgC&bSqasogzeHz}QShS1jk4ZpKtOeON0#VPSMW+sHJ!Iss8oQsVDsMuqF5VZK>F z5!Ci?Z$c&;jLldQk(d@TGg?q0x1@+ACc=}1s@BU8v%1*Iil4qddamR9LTh)QjkXnl z4Sd9j=!tqCWC2#elfVM$6>H-9K{lWc6tvTNxJ}_Xuzm=GAXFL=ukiX{IW?h)CJcjs zGFY97r*X0QKZDFkC`f=AdR%8Jr>+**LYXszzYjakt^_AFPgH420@F z1ThdQ0mQ&Z;BxRB?j=0b{i1j;?n7V)!r;&cYpksY7q|%J07!tN0=cz46?qR=eek7! z#Ty890&fsR)0B!2e_a7;fRA87^Iy0lytmp+$&b1co%-I-meE%U_)V;dM8F-quU!os zoB%!eH;%A>Bg(0NhvDx9D6dBFK5X+{u@X52Z=%j42AIT91Mu??;H$^ z@LxIp4oCR+7vvv6B(Sf{AG#i$20x$xMtBpgq0(nqyvG-d;5l9fC{FlnfKGkZMN7%= z5eUtw9+dwq+Psk&uyBS~@at<7$@naq;T7OMUEW^GS3QfaP1G?dfLB0xzl+Ga(WF4U zKKv}m;mf;r`_@P&1VEq^BzLpt5$j*dH5wM${N6wkB)xWuq=@`PD_}Gft$9TFr?SxR z#;p?K?b{L}_uVK*Ew8EPTHc9g}siBh}b$HvGGsZg>9{wBMFTy#7;f zAtaw3d=KD3#%a!->UP2*XY@n2EUU%{eTU}3`3^KM76`t#2_4K>aK1fDdh&<1bu%&1 z#@qYZ&9ZwDXplOcAlqlE;Q?>HlJy!cQzcyAsc%0LL>7x>n&kbDqu%Z&xj@C81+ zX2!QU+-<1-{}yFG*whWDl_|~uOHW7izI=6}nDX~@!!;zi2!t)ELoim-eMC+#FhaCY zSqeO&39A$3l;3Bhk~PtS+8popCrv&Kq=(;q#O4cD&GE8sX8eM(ZjYPo3ai!dmMQL_ z*oR8FDT?hT(N$91_0p%3X@I@tZj83$BW`!AYj*mH zvR$YI#quaN+*~&*UncC5{uY|wEK`WjU$ZyLlAl}G?IPfP6&67>Z@Yz?f3142X+<+8SxER9soiVe7n%4#H}y&*81n}KsE|I)~a@7JfhzbyjtcTeaJN9*cPG*mwH5yE%RL1koV{cO_<2^aS`{ziFfG=w0tlVm|N3?%A#XHGrRfs4`XZ z507^r5(p>w2LkuQ_jkrcUR9RsJ|3P8A0tcta>X{3Y7eW${7Z4n zFu~KL6V~5&5y;|}GB~zAm2!*SakQ=*+7C~+dCUgWzlHXnaExs3vyx-bvFbW>jKN+4Euy zsf~phVAOMCOz9wk`L$2-4h>J~2*jralM%WZF)t?4UuUTJ%$+e8WjY!3=x~e+kC6W9 zVje;JCI%mj*RNdfXvF89iwP1_P(M=>IzChh|Iut~OKM$)xbR&UAe7=PK5;#0K-*%m8;uq)e(MpMW6C;jx^y&2K`RHFCjU=1RWgdW=E+d0Zo2Vew8*!I!*>S#77g zSnXn)IaI4#$9nU9tYV)uyP!tMjZ?+u=sHhXCV9SaQuDRmu>-yXtRnN0LoXWbhydwj z2V*yJy;59~@w7H%GVab@h_W{4ZpPk^|IP@2KaIfI5cwnyOeYlCsP z@U1@Su6+tu;z(}p&Dg~PKEaOua|a7$n#njTsvC|IdDT6jA(r2Xl~CPPm?5gNhP?TA zV?7x`fG~h?51*l^%&ool3~%Ug32q8Q0XzsH|0As7e(bVlQBf6yn{7m6ziK%z9`OsKPrl|wAYE3tG>snNvUTU zS?C&v_|-mvex$gM%N|Qz;zYEpU>xuSNb*PyHEIU$WH0g_ZQ@So0!@U{YF|2q!F+K* zAix9%weZA$5fq0XK70=z!kWB(66a8PrlFXZca57c?0*48>{%D5{$D^5;ESMQH>1{+ zG*V^DA6pkUqJ8+k03hnU(Ekd9pc6$_EghR!bb@J`01N_?TNBg2U>yWj-v4^s#~;Qx zaFqCmjhN=#ifaNo;0}*#IE%f<&<>q%$7ynORxr>GI2E2_Xrgn94(I|$ekH^d=>hw@eSh6DseTdJ&fY0LkS880$wIwWs=gXc%Y@5hQ;6i<4T^jm^4 zAGtXGdtl{$jW?n5`W`V_=1%@GB$j?r~`*Iz8%UzcSYbq8 zv{eFI+*T7Ka*N)F-TGdtLv=6{i3PVuvGcg&UFaYah`oCGPK zF(+Y=tO-j&OWGnd;q~GKjuO15xKQolgxE$1g(XYk<>OojKBq7NR|W_;imDX}2#Okr zTM5IzOUUGi@0MuFm;99QrK`?V2AraU&MYo?DsIDI6mEq_608`2B7n*yMu9YB?G(E$ zM-o;T>db4#%NLzUm?>$Rxx)KPUqC$0SPD&P2Ur)Hp{{hmV2QF?hzV*w5J`IZUpD+!$ zqz;9Nd0;hmG}9fK28qD;K10~O!T_!SJc;;hQDRy%RRX|7x=AHnUuBDLxLg2}t zkKhtJ3HXgxRQnb&z4N0CjQASkMCpf+96|`o;U$u`ls__BOf!DQMSTrV24HcOPz$Q>L|_&ab^KGHnVQ^MdMW~6Wsn^1xhF)I;DrIatXO}x--5C8=6 z(qcd|^vtYCz<>x(!#kS!GWdrhA&J>x5`z0Q^~|Jvp(+vnz-B;@N0%I1G9U=<%Q@$0 z#eg6_RJ0W%QFR%(5THTA=%HPR4`1q+=n?mCNz(-6-+}q>`67tJlJ4NyE0rjzL1aIKZgU3#|?%*BnM4i6a z(n}|4I61^cCmC!i@!|a_5y5MXAP*)cGJ=dtR|Nv0U;`^oU6lTm;||Y||m|3(YMJ^nfy{hmYv6{0%*#!`y@( zDJe=cZbFa1U5^s^iY;sPrM_250nJk zB(IiYGCGxLM?Pyqx>3~~4;NZ+*kc&c9gmSzcHUz+?OGQS%?L(({OQDde!9C?1a~;o zD+}zF$~#2DBU>yL^B;?nQau_GD7e-H!kCKPlMEph6=6C_#~V&=bi7THoK!cQINs4G zNo1p2_{@B0qv=6%_rmemo!z$%b)xcA8N3G3Lk-}sle_Sx(Mi`#v^Fp72`|2=N0M08 z=teEkH;@~gh+;V;PWRYUH>~|r3)3m#;y@)m9|vs?~c=l%fS8$ zPsI%TTlYzlfvicX0LIdV`ZKFHV;^ppd^_Hu{;7?pu?(UVAVtN*r1pelw6^*`j?4(v zGWR<=BT#taD+`jg>)wR0!osWrdACETf7~V%ld~5$bnM@d1O(te5HV^h-I~PFAKQ|? zrJd7aWi;TBC6HWulVo&hHKHSHe#as&TW#5imv2uh*M-Z>+?nLfSCl60|9dbI%m4Au zq{VuQzhALS>>Uz7ED^yde8y2rcOG@MXy)A9eLe}mQhCF!q$&&-WNbg5^qn3*<6=@v zUEh$NRkEK^6B2;@UyIRL24E>q70da9bxB|8TB`yXU=>F`N0Pi=$M_Qn6?IOnsl+_l zl-xgocL`5slrY=DgU6F+Z`}#ybj#G8fMNlY262h<(aCi|x^%s>2vwTDGFiq0)Y7)O znm+9Zvt2%TY_bV9b)vWV}FKBk#W1(pNwfcK6J0WSsk}WAvnx>{2eT}&^a@VDkNg!CG?&MWo-Kn-C#w!0*ic)%`$fhm^ zq?TGz1U)d&BuYp zqj*EjST1iz-3>n^?OD==?i*@SW!~RUJr;~S2iDEp{wU9W5ugDx#F{wSPd)q}v<1zv zk%qc(=(Q`wpLT6aF_*njsOma^K~>M-Ln91&1W|-jFC{ln-|cC8(3~ip)4=&5(e&h0 zYoEOGMxHav8!IyTarsGKDidq0sfN=Gl(u^O=A{qFuINPZB2RZJ&eKRJ{emV+y2CVe zAM1&mmIMSwfhUe8yD)lZ(AWCUu66_6y@6i)EDaZsKJBUGERz%OvPwN@w@hP45ubX( z51xlXF8u<{G;y18vNfolTB>Tb7m6K@vD>h^1ndn%>)j%X$v#ypod-zdV z*CE({8*3uDW8E*^oCKN|?J(Btk``Qg`Hl^hZMAe8+G?s9A>Fh8 z=*2e3ZKuukpn_~oVBr%CnWM?hYwbX3Prl}ut^L<}Sx}zMBz#%c+!LXdrL4If7C1J{^E>H)yZ~}iYO=U+_wD;x-veoZQj^Pdv0e3;edi!@veY<| zr-h~m7i*;dj7|1nmghtZ!XUXLoF-}8BX8CB4Qo#bBTnTcU)-+@LNb&kl`u!Va4$)s zg&AG2#LDyV^S#HqrEa8JP|lBTBimB{miPd+i8g<-56~GynQ;gp z$l~8n+ODjrN+auv8>}^5v=kthMl@9BICPX!vNJ#!yhvJSi^6u9_z06zLPdi#QC#sh z%^ud0C@nR~76Y|y-@pns`dwMxDA^vH4z+BWMzeYO&eGG436LO?i$*J@eI7k$GN&6O z?OdvENt^93K4TQ=*O&n5PEvc#WbXE7t|yoPh@pA*nwipoo=+dDkc>rpcdYknNfFj* zfmEx~D7jy+yWV9YEskb8K%{-5n!k_rES~BdG~>Cem&1-RA(}wb9W}G0hDD#AX6;Hu zIf)zan;pkyrAZ12k|Qq>V?4KCha+JiCsCdX+&O(}PP3wu!M$RGmx^@)7@X3ywv=}i zQgYa)=sT<{8ZF(5mOE*ZxL(tFVeO_+t}|Blz1b>`icM1ExX#1Jm9sHQWrR`Oy1o5w zvmU3hr2XQffDmCxN^r$gN?S@NoSO^|y23tR52|+2sA!IhCXws)=lo}EqV!~WQ$^QH z23~cgQO+P=`m;wUg)36cxeF`$->?JE$8^C}Gmx{fT>Z!$$=>AauCXkfrWG_nRO5&q zA4GU^acG<)kYHXi+`$Q?s{FL%pL)}Q_? zX+`1F8)RR&2WE+8L-%vepr&i7>6`FNJo6r>;hwP{H1Om`^;UAPeIK7wfhB|LJW%}Y zsozww;xj4R6UE1T>v50CwgI%TwZ?`_Ts>QoL*l4F(zL>7zckePuM?mS)KbG-JvWep zU512?ZAaxE#tVhY2Qlg}+3h_32^+~QHs?+hsZ|u$sYje_fwS}|lfi>oc5-h|jAVa& z06~-Z{*+?QCG2^5pDpPjG}9Z}B7KCXg1o#jTVvYx+|>xqbbuDigf2@c`1`;*(?dLh*J+7-J5Fs z$#E*)eYE-GXQ80xXsM;uo-iW)piix9Gxo4f=CV z1?%c~Ey;#_+p*=oazi;2&l56DDy>g*JWzjB8(Nnptkho1txg%K+i7r@Ib_0pCDoAW%4p* z9UJ<5Ho`eY9_^_r5CdQ8yY(7VM>ARWyC2n-ln|telbfDbybeM3C&(6l3oAr3jPe(z zD!G?j+F=(^J|*8^Xv!yVwp?Jd;WN~DqL&BY3&GInFI~ExVWrMO?)q(BR@5d0b#1Er zZg&^te$MJD`AHo@C2L_Q)Sbv`N2=}p%w*XI#vJ(=46_--qo35tR3hpFhMcMB-xkcD zU$*$~jsU|Kv^!KYn;Wls@_-4}Ih3r{%;L_wbUhb^0pI9sG;5ll5^j7dLQHsen=PrgBC z*6n~DA`^f)bu1WuokmrgNG zqOT$~*|MscR|JD*2^)pXRcbGwy!r)^Uu;jMG^DKaTc*$dgHkdW@P78mv@WEIPE$(l z2A0+_{kv34a;DJP5UcB^rukEn5|)sj(a%qrf&4A$b%iQDYvOyX8Y_D$MEK$KGH=T3 zs_`U;HjrDzBbkVChPa$@aKve5Vir?nH_b%u?WL`InRr@3>D^&hXPp1GDvi>+VO9D4 zW{KNAZuJkMq!VdMZcE68>r6xaKr>@BqoiG3*VeL6{3H68TM8qu>Nf@p7OZYq)m+yr zhXp|4;?%s(vy>vcscHapcP3*NAK z&udAxRB;d6Nw#RET@oIiVuk(QK=Mn|Xr$}!od1i>kFChn+wbm7>(a23T(K(nVGrbP z)8@h#Ch8MN1wAxMY52UwhuD|?Lrb!t?%^p?D(ivDw?tK*7z5IFkWBY_ji4`kLf|XH z?%!rj+Ch~)VR40+-agF+WhYBoQDuqRp3Ge&gIiwH>cCh4^RYxwPjuOV6?4`%_DIq`AGZ0e(F9{4FMS z_8_-lAMDM#jo$UP0gNP=d2Dntd({e?^1WIn6*F$@HB0!TVM?RXk*}Dl+}BV>;y(DT zCmLYtM5JQ|dMrqN$P~|h&>tPcRU42LxUOkPFF!%(NFR8{9A-l2fR^sW#09?FWGEE< zw&NeL0XaxzePLy*AC+EZBX9_uyZ7OWkKejLsqW&?#_XY=++^bDFi4sEy&UP-20-iu zja_G-7A5UB>+Cbu{UchsGqa@PW!-llKgg;+$|lj;t1VRIn+ZK2NQ`Vrj#7Fo?iefe z7^C~$MB7KknIq_JGMIK$q(&LMQcO5WJNq+5e6t0jq}bcFQ?Ykk>^|rT(|u*A&*?-9 zTU>h%EmyP1;RUmN%UO9<!79obySE#n(Z7n~r|Ow9=S*XKqaVYBfhxR`>~yVSy( zY?q{kQMeJhYMC`#P!*?8bn*c&#DFuqq%5yzlyuFQn3L?y(^?V&KL6~207&zmQL^Jp z4n1XcoMBbRZNeoo!fTF7>@7;nQk7Ew4o7#}gW)XREjhp(M+0FUjhwXn99xs;kX!t- zXOwof3tQ@o5hmx^cR!Ddg`u8Oxzr16gfFn9EsdOviys9eQy!ceCF(xu)^iscH3$NJ z>jOv#!7f=Rg=FdF`qz23$}Z7~!H_I{H)~~Sy`y29#jK-DNL|)a{id=~nWG`@xZiFj zU9K>~2=2|N5jE^fRj{NvECLu-F|wc9gaOv`{kB5ST}Ew<8TZ@{>1ujik{7jP^UgJb{HSvrN4pY&`C; zX^_d|PK@mju-cf*M^=04?Jf2t?lRg;9{ycS5xh5e3{yn42u`tnBe`Y4kDY!)T zj8;lk*6d+}_M8z%$xGz_dB=qP3k)w?*4ce}q>$$T8ZtuqWiWBlv}Te)=~6;8q??#@@ZGD?`#g8L-!&9=*|#~)GML@eau ziEy7de4ToRNe?}iH$rx2+3P2)D=qXeQZ&Kl!mc z{V@d-Bfkz`k_l_B)kE1$CaiJLIt}ALZraS3Y)L~(O@j&VIqJ{Htg|wf#1BeN*Yps5 zDd}13NWV?P_`HeLs7XG2tkTHyyFP>pzE!XC{YDY@&z82MZ zUSS0*8eR}gdchFinbJ|viKbMU4-eXRv$Y0&95-#r(mU*Pn`sFJGnr3=$-}O{KHkG- zi8&+K(d>LpqCxLgRnMt5kL@SQytu-dV9R{odanv>h}2~TkD3XKX8et+O4eUXw4=5R zZX{v$rw_yI|MZaeK_i7U$=UCWBHCB4ryBTW0wri-j7JFsG* z#CNAo8&l&cVrjZk`oeAhr3s+fqZ-o_UR?^m)C{8haWFI1wAp-yZRs4el)+SR12U>| z9mToAsM*yAz1Lqb>;n6&&Qv!W{)MIAE!xeDXBSkicM>x@{3ImT7xt5a zsmdVDjC<`pwJsBMSNda)CW;c~Xa;es4AwkgU2$W1JGjB7XHRxV(w%00iOoO%^X7X@ z40^Dn7nQfp0*L*Tmob%AP7fkqgEVt)bE(zd46u08ny)k~xdVSJKgvwZR@85#wu=CY$12hg3_rgnbiVc%DEu0UFa;5#n z>yb$Mpihssc&Mq@0!*M_hpa!@&bSS&SpbtvZ~aGi*=qL%)50G-aBavem}E@V$a^f8 zTw|-sPx~23Z-WQ!J}H3JnGwA5I1^3&cqx682Q0pYDEald#e$=>EiGJ#W%t+6O}p9Z zXvdP+ihQlz!j)ULWv!EWJ{vwPoSc1s7U`C5}DU35CWnl-2+%Fa9s&r19A zDPdYM`^(MV)ofk`AUp|kzt|lZkUNX87kd=4{}7vhfs8OhdM$R>MJ7;!P=r&o*p2eV z*tL`;j8#f%I~`#sH;_z=HPb~_;m69`(zxlZ`VEy1`_Hn$5bI`_)1n5~{h}3l0c)!(=MkoKsASh1D})09v^l zQ0NfvmiQ%H?AI5Vf$O6ddmbO4}{Msjq+ZH@q_+$}O{U7vu!PmI! z5H7ShE>M+nm}$LETEdkjnslyU-Qgcakte)0;05g3FM0XH@K3Cop?}5 zbRQ-6MMeKpUBMkm{g%S5Qaff;WiFCY=yB0`FWei})~y?*e+xtMWUH9VY;twglI*GG zkQ;tmZFou?chY30;Ny*^_20pgzJE|_m|=tac@J~W%;B$hY#Z2(QM0&*JvzN&+n(;^ zxD1}nQA4&qVqZUoRxSfoK5fDyHs@k#W)ZsjupiEH{ESl~xu6{v53$)4rzI3E*QAL$ z>vy}-o=lfBwRsWSc<&;NNvQPID>lCq7~@Q?a`E14Y#Ao9qzy$3!VkGueT|DzBa1aj zq8Ow6i*0Fo5z{k_vaeW^%zd`q{x9YqO4fO$Xoj(v5>}vmp9eqQVFhY*sM#qU5kVqT zVdH$o7OIi)&0M+eW+(9B9_hx4%kzy9P{BM^a_hlSqD2+k%DYg}3W$dYM_*H_`(BeG z%03rb)|ULgN0VlhON;$H)@M40uj5tgtn&RQFdJ^`G@8n`gbWWN%tKX|#ma936n08sPX7UHQ289T!Ue z5fjAks2abU@RKH9CiO6OK$KyLJPgFDE7rN)CwS3y-*{yIUa-#X;x!-$P zRM?X5FPMRWv(upLr{WkT{Pa+zQH}IGYv=%UKL3iB2i1*5eYKPeTNF)_6%DpOJ2n(l;t1%ME(&xu*Kp8^zt2LRjtjYS9*j9NcE9q#O zS-qEBZ~!cD7^IYh`yXWrYZ#fXft6&~s>>sm9L|zf6f_yPNC^_7<{h^E>~KYtt}s3U zdv^__t!gc#w)?M@Cz*~LiKb-E0RXvRt!A{e-|gy~Y(0+B=3-2k+Lh-rPb%}dRs5WD zpY?DwEm#MiTbtbQ6DlOLNnQdcMz6H)Pnf99p}Z2PQ3s3kORTV56sBrt=tn;5A)c>| zpL?(ia&fWc2F$Rc_0SIM17okTWjdDS;iB;>FZ>MaqtV*4NKv5Gl6S2rZ#}jg#pUo+ zalV+%@?TTo&?p_FY!T9yOgEs{B~_S~^Qy4)lQv=z#Ff@uV+(fzYF|<11>mG_TAXZ+ z`QAOO+Y{NqCY?}sq+)JhkZ>L+P3~Uyj?pIJjW%!1@I%I%P>yW%_Z3W?Oh#_rcl!8Q zkr-wD=>dEZZK=i%yZ9$>Xk*=#6s5sJ|0DQykIhgm**j8N z!EPJ<#&F2&6L(>v~W8J>1uC5(ZJ(} z9&@%!j#jfC&tg>US$%Lp=atk{K*%BoMR7NcSD%go_46ibp`)7>t(%t;)hpu_ zo8hw=$4u_d<~4$-|3X{YvQJYIMMJ*cb)XIKmYSAi&qKWkiYoulVM>|Y(XoQfmoM3X z=&eL_e#B0ED!Z>tD@&366-G4qy4O}p+J)SN@5F*jVy-q97scGbL=hCb;N#DIJ^VN` znCFpGDdyr^@6T^Al{ud!TT=E}HGrR`IH#%G@A}+{>`Uig0g%qO};m#68X+_SAlB*<$9oV*eap8x3bC|q#gqTo(sr;DPf0d-G2>A^lI zui#P*eyHm{&J2W;#ZS78f9H(1zokd}G{Z!hpC7o=2|t$##)5C0f!JUtg4uT=x~9(@ zVlFCe-}Y2K?LL5h6)ke^OF0MNeA{8&_8wDW%Y`ZMjWg`A3k`!`3HCmc&tCVHzS>j%Xr9 zE0-<5=Rrc%5x?XJ|) zVY@J|?XIKP)v4`6&a(CW3rL*`oLkc5OKNAT>Wj^dR5{X|+mw-VdI{*OsOXrcQhM>- z&t*(5{;Fm7VJjg{^ougD){Ul@VWu57Peni~hDo&Vf?`i6l9wZM`Xmz^j$MX&-BAYh zntn@iH-d`FA*}t%HN!dYmaUGkud$Y9mO;bpEZ1a6$Eb~kL)UevXyG5mxNVr(u!##( zqojkk?0CdvY6(cDCyd}C6T^2?bGBEMRHeLjfthyewItZbCtwr=oP^QoSF!aWTlE{X zBrDo+MU8{!A;SZ;K9cnPea^9uwy}ZkcM8sqtEc{~Vas$AEjWcJi>21jYM4J{GniJC z8=2GS`&wTWnl=e*PaX*WnDXvBCi%8B@Z^^pIcqBtqNxnCmmOnzj;EPtAtLG)0oRbx zCMA$&{MA<}y17}hZy`-T%Z^>{dyOWqv(S3WM`(mFvaRfu$)e#0^Ut-W$>%Uu%PVo7 zEWG`0a$hCaZ%gmJBT)7qH2s`rBX>A-WGPd)+gTEw_4O8_bmBxg?v-a+lkWvc=Cbpe zKGG9kwSL6p@CBTQoN3+iI{OBt+T50OC;@6U z@gk1AUa#+Uj}6&wd~q01q2rx&*QERsq|+tq@yDiufk+X^0`i%;7{yp}6j?<%R7)0l`6ue@3 zuZ(i9YUWF7EN^BbRnAflRQ$VhoOXPCxAczUmWog9W9HF`MyiM$-=T_?{$1IGi=+-2qWY@GSY!7xyhaIty1DBGWEjoYcmE6DdQR{hn* z3CGxstHg`RD#*yvmd>$%SIcL;Po8D-uu9A1sTEk++xkRFTa9zx&D32rNVQLKoT3_K zUB4y-rQzGMx6)ulT#Xm$J-{+edWvYgb@w5&s%Lb%#B}L3?Tf&s-d4A#Ud7|$qy==Z zHXfwwIwa%5k=710XKGeZ;pvZ+(s@G{3vsSDv@8f^7u*1|Fh2~>fAN5Mvu@InhcNsu zdu7zJBZpfQUW4P`b^1?_sgS(Ql9p6fgPrXB2bU{ZAMVil$JkBVeA!aB2h0y9dg#&n zt{3?~LKiCTKrB_(LUg4L?e?50w|ne8G-0GQewpQw=5x`{zdPK_q&1HO1drRRs~z<&+sMIy!2|NH73fxAE1>s>a%1{!Exp$PVGyaTP%k+ftX;KKb~PlxABk`MYPm(ER_ zg}e|BGJyEj>RqPX>KukCZ7qMl#FX3MCiaGVaK_O3iyCjh z=TrTKg=rVG`pzR}$P9TOFMgK*a%omiL~kG>$;PMZ?QUjo4gCkN_HKQ&B9M+p;~aPk zMLzosoWm$NHq~7C1p}HCUB5@>4&OT`9DxkiQrAofgOA1^F1zrF*nmFH341pd@8ZW) zV^gi^=s52l^g1Rrp4)t2(r%`cM>4`#?nT?|*6CgvXL62CD{~S4>Kg+N>BVrNKKZCcDxay&d1i1>lJyUbFt>kRv~I~oR;oL z@9OH$IJhwBfFn$#j;Gutv~cbuj7M=I_GjmMUljH=6BxmojFVFPaLy&Zds%lTvbCz`u8&n-;aPT!-N>dnNtn~8XHHX+V zoQftXCPKZ(h8onXRm7x5Nq_I=x0~4y)3kJi*AHw6JUZJxNH~a}PU}-r9VmU9e!bdC z{2Zpk87FZi(_1qbHILiSt>a7fLGoDAhNQXpQY>mqdiRf27nr%1j|!H*5x1kN)YLfX z?~@k`p(Znt8*ig*OUn}Bq84J7U$r>>jiq@n>V<~nbZGs83EnwqNSOgZy2AcO{@b8-wD#jv zGii_M534qT{w3()lfBpAer%W|x4znQn#rWE=veR6$=r9xcU7=qnoEg&@MWL28F7i3 z2lHrmpVVy5*~<1Mvx(-jq>|$MrY1`7cquPOAa4PRRo!v2qMdzHM@z5F+x)60atpM% zNp%16Sa_EE!7BHCvFkXS!wa<}JKC`e)7vi&df2Yj+S1M-eNB)0r^16YBMjbPRa$W2 zl)h%%rgeV^ChHSSszkGc_S3mCSQyjwu~S%Uqc`D9*v*IFigtWe!c|ga(C>p7*uxT_2zC^L>7= z-#`2HTI*W(+H1U~bq(upnz8ym&|eJefDkz8Iw3N4!A$|( z7j$~Ukw@)n2=VV|{7j$(Dk>exoZ8Ko2$}9As3DA!9l^qoLWxU>OEO(Px&yk4psNMD zysvL)5qGl_6Xd@NHXEj8&^jeiu>*?=m-`D-0=>V=QI|}0?O8>*e7f*7%_@(!C53uv z$EGa?6S#FEj#*~!!aBmZdk6sE`6-B&1uUytXak*>S7@R45>%h1#laM)UV-uP(-)r) z!`IRI%_^s$$v&xx`!ZJxme#RtbCdsPCPJn+%Lc)8{sb!jst#ACwbSR7T|f`}|3?p| z|34DH;1MJXvq;ggdP94BpmCfQD!Pk37Q7cPeoJ@pAghnST?{-C_?d9RAu3|q|2sj< z&G=b(OzRV(FPKjme1ACF9scijPAoJMe_3>F-9=)4kNh`OmlYnL)iN<{mZxy%?$yV% z>wh%1P^q8%28=ThPL8O5Mc*G~9#OarN82JVP0Ti9O}0G@O7V)tlRbsE<=(|a>W@*A zIl_ZE_g~P~A7>d+*m~~FlLU+r|LB%`=N5{8 z;%@tz7++>qv2q_-*}>9>G|j(2v)PhWuI*TIEO4x*ENobNw^bi#rvI?i z*_dgFLBmWrsV+VPWc+1O;yZ6NIWIN2ZD5RuuB*nY+%~*s2;XTn{v~LPFwtaWHDS*S zENKpI&aRDQLhlA1gKMW2oe$=yHl3gmLeo=~pXtvpGQGL-Swgq{yT1~Z$zbtw<*_n* z*P_S7nO>qLOiqT&CTBmnVR^p65w6A0WEt2Rk2FWkpqM571M*QW2BkUwEa5w` zDA}m>f2I!Q)Ll_U@kzcD3j#Dg5eB;rc*<(Wj;#0q5Xh!AVFtpu61yApES&?BH;{ua zrO$4-qnJxYgm->4M8uWVn=%<>kSyuAE~KzAgN6FaaJ zAAB*s#(j?NO10)}csg7{td@ZpGf&dVAu9ag$k7WnC))>e%AON7DMsod`8x4RWqHPnuWWmk6seme#ZQN1==2J(5{kH9nYy~%qo`XYbUOf4`kNcfK5aCuNns^kpMdopr8g#UDC_q78q2w+8SPi(4n3B-}fwQ%0=qYgWDv zGQbu8{3o=}Z&=ZKoa`m*+GY|ry)9?E;(>+Ujo*2n$VdgVN{}N|#wPg$!Sl}Vm+3H9Hr63M!gMorR@5IJ z3l*9qnbGUOtgmVngiETZ-7MjB(zF7a>PP9b+Ir~nakF90pbnv_$CPC^`v6+a^nQ~s z7u=`p|49E)!)!JKndE-lGtma-X3^6wkN z5?Zh?1T|qHn<3^j_*r3SsW9M5OnOBltCd=${VpFXY&Wstu4`YVx=ve24ryI>pYZ56 zrj`gIn!VW-j1@`lBwYw<4%_)1{Z7zGA$#KK@^Cb+qau88HaZSv!yf?omH#@%h0`11 znOpT!x-UPZCTX9g7bCo0LY*cWe{27UFn&D_tZuxc&419nXgvPcY`VQoU_jy=?}$Xn zTY*20&q=#S%#|8yhsHZP{A39do1MokL7De>Wkx#^Mem_EmSiJWW*fOM)=CS zOwQ)exooZu8sV|UwJn@bK-D5%ZhA?$4+)HS;D*O6g z0qs5x*KTaX(

    jIgJx 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�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

    )6kBrdbppd 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%0Du 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

    ou6_S`il7fc3`!tZs|f^ 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 HXe9hU-xsF` delta 897152 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 z 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%0DQg^+${7 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 z%0D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�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

    W;h3-Rn@DH-5De*F0 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 z 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 z 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μ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 z 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

    rHET~PgSEAMX(2&Cw9rcddBz*Pa^ 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

    PvlZU-5TX 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

    e$p?39*&wc<9bZM-jf38d%2Ccyo9 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

    } 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 uDjvf!U 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

    V{?@s=8yo#4!03!wwtbTQI^3!V>2H!b4- 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ˁV)Uv|(7oMv{a1RHcYbbBCR=naEA1eTmtl&{aW1)erJ54Ptj1ti z?OBUS)6g4SAo@+*H+&1mQpO0vae|zvVlF0T*i)Ii*jmn2rjGQeXmZixqA5jBijJWt zSAXWbcO4@gCk-kYT(VrXLRDZYG)=Qiw~SGaQjS&*E!mJfK{`nqQc_+$vD#5RjC-}Z zf}3@5GgbU5Xvs&%eBXM;W6L{&#(4_!mXOHnVStlnO1Db?l}^fZ$wV_(i*%B)k^!Pp zs5DQTr^plLErtw`x0C*WIAtBAiy-~vZKX%!hvRJMzJfmmOvoPeUe*?;h&+X?r(C62 zs7%%X)*tE?QeWDsCM2Xky*=Y4!OoO4aw&{ooES|z;$;}xTz@OiE$Ew7W+ zO{g1McO+(~w8R{)IHAPEcg4_%R6Ncz@+S!#p15aU>E2Rg*}!<)c!Fo*PZsPc-CbHy zCMnoo`c*YWU8L=x>aE?YE7WK7IfhmSm}R*oU_EP<+wAt&_D08AWp<(SeNm=lTagoi zEw<)X$7r#CWdju^h#9h7*3#M`H?Q!T1DCrDzA4S-U26P}Y?I)|+wdDJRg@5B6{eEa zj-|oQC#`qwrM1W1zab7gOIFGCO9 zU0jNAfuJC6%n}VGN8Y=lbjj8t2SO09ihYIfyS3_jy_d3$LK z=`;RL{(m`ha&PAB&$S6YyP9*J0CUQBq^D$n_-05y=%n(^iXX7fh4@4^K04km-ZLId zs^WCW;Hq&|L1|H%n3jmjM4hA{5eHIIIIdzhBKtR@H+)pQM|@7;C| znY+O~1M)48!)T^IQ24!cdC5HP<9uEbxxidxE83vA#roH_!*+~y5izErxR5JSia?}F z(uN|9{IQD*sfGw30~EwcLgnPT5p@et3sJ6yE4kWSUG9Imm%W#~7rp;^Csz$Yj3Ad_ zW>te|o3PIvbO}L1k#v&$C223ocBc_>O!j`d75|*^h_Fe~6~U>TfbOnZVR>lVsyvTA zSwb)ES2C}>6x2ht((=f*O?i%VmNWxB9et8^f;JF00N2QFV23#M9H{T7H_z8J`s|zN znd&inb80txR(tAv<-Q!>Z|_zQ!l(502=TldJu5v+JWoSN-*@k#tY?7->_hv?e9JxS zJs2ODKN#^!{90UTVzIj*1|do@o3VJD4gZ+X8FABl%R5KiS2ak>(5_IdJLts@u}Johuu`TOOp2o4(C^~C3=WaW z96^jL7qPQdoE=ON=^E??>=7JSDQkF~o}FHmUc&uM)RH%$k-V$iBrn2qP_&d*7#Eez zBC-0iDl2nocS+D_U35%zYcvljaW|tiM)z{X{LQc>@!#}g6@3_S{x-of20hilyu+GN zA7{_9&$f4<%wZm7eNi4_2ROR;6XsFj@horw5p5_;Q_?V`l-!T3qqwO=R&Q1w?I!64 z={l)7tvS6H;~}GwnP4Aa`#Jw(Hn;8+$lPC*D6vi~D3z3ME!k1BP9ZF2}$xF5+SY-w?MW;c967^w3XaMs>K>{b_---$tuxm z5duoD?3P^17)$uYx{quWHxqw{bc^4wcoS=b@X79!Ld))!D%m$mua#Py>~YD+tm>PlO)$DlB=RqAote=QmNW+yhbmG?~iT#PYwN#?Szh_8xUiCc@I!LD%& zLP+jWd56Mc?Iit68k$89K@;hZaNQX;=5FF~_HE7%(m$lZ=t1b8EHh#x`CDaY8V>ij zsB3Z^V+=vT?h^mOG9gHHie%^HA65?gsrH!TD&m^Dr{=zft=gmAZNM8R8PldSrVeJE z`JOptJ#W2b8{?>Tq?A|HJv8?;EY)u9E(6Xu(FmAM|DU0|Y-=;y0x%45cXxLn0!fGg zarclwfI!_lb#FR#Ii0$@ySux)yL+cTwdqt&f5ZOp?rXhk-;X2T!D(~eb7tM=+_yZV ze0pEjw9sjgE7U&dw_5L+3@e)U(-h*OT!6&sXkiFfH>hu-vfp zvOcuR%zJGt`viN=an{kvS?PS>yx^92?s($fF+QWO-n7*J5A7{!R*k;cP&|Z+X%-1cKIGvrf@_BBiu=l)l6oAU8$THD7jMt~OdWuFja(l&z=b5LK@Y%x#7>y~ zShhvQ%h6!yEt`{^FwAz(i# zMiT#*xSDvF_DeB_Es0{~f8_&8VBSBf4|-)jY$_V-hA*fNR9~wuKsTaVA*W0EG95)2 zWu@k3oBSFwCMNK2(XJQQbKEI+bSY*ac1rba1TPPJw!r(N)y|l ze~Q|MdZ2%a5hoX74@PIkw#RP8ESPjUhmoUDs1D>^srxB!GMMO|>Xhse9f8?E&OeXN zh)zvjC+|p}$Nq~&Qg&2#N@xs#=%b{p+Ez!xjwX&tTuD4mqYc{I{YZ zR6R&i(o@YcRk_xv9i|&DFzDcIt(n{F| z|7CHC^P0Vl@`k;gvX#G$zlHx4w;;DL*FEHoVE91($Y2Leej_A;4x>8Y{;wQ&!j7ap1$1mUQT6&x+tTd=3#8L${4zzgxCx!b7DT&f1Xmh9s>Vr-T^&^y#5vKOFXMz+HtM(trR){on zEo{W8)qMzNtw}pVJ6zj6R|xBxYn|(s%eToLAsoQ(z#k^;#vdZ=#P7vJ;)Sw*%mPct zs%%X#R3=@9+mX4@aIxVu{%~eN!~BNl=x69@O~CNgfP{J&e^=J4_7L8R8CC*A_N?t) z)`kX)=cy-XV<_hsBUqc*K8`yq5%sI$;LV;~g;dm3Y4OlGPkA%Mha`7+WAnT*yiNR% z-Zs1=lCP`@Tp0Bcq!zIV^E%sy5@gcw?wW8`j#*;(Vr$JiEICiSKzzdMOKL;9LRdl= zSb)`qbcf`#bbEE(bhmU%F)v5u^ARDv2AR{@`}x{!Kml+o|!>zR0Eg8MGRS&br#Fp)Zm3P`u}lr>hk) z!54adji8>R)% zP)?V(LyO?UU}SET`kmW}`;vNutLFJ=U*!`1bXu)MYh7hk(-+HnD&FzO(KU*=;4^)# zppMa2`Ax8ckri^8uY`A)L6MDhJulkC+M|%L1>&LXuL_N_fHO`!M=F(V5f^a+a+z%H)=GzV-d+gR47EZ@4UPg$Y{66_<( zpkcWI5N>vGuo2n}>V|ruJ?I6w#9o@-AU*5KhzwO+VMoQL{+NQ zX$NWZTD7*ncA@H#X0b}6)oKT52Wo$+f4@s{$VdZ7OVl6Pdnv8imnomv`zUSLS15by z|E0xhUgCEY;PN%ARnK_P8gva%_Bu0>kSYCzr!|gg3K7(V!IrO<>DB^U+}y&pt|DBy zyz*6L%Kn!f;27vQ`8$nz$2rmEbZ>WyJc~W|Jx1?CZ{Anx8*I8n9Pd~8wFH`!B1K7y z35y(iOuI}e%Oy(}>uoE`TyEQG+xpvR8ESuG&(}DPIJC}d&bF=^JlJ!^gYv3;Fn>$G z%>S=>vE_$ljumF>XC7rcSdpk)SqZ6XS5<3YWB=%Aa1vabU0(Mdce!VcC*^(TJ>z?4 zTH*Jj6P62>&eog1jd6o*yKQq7$v)Wr=(po^$f0&#akh44@IcRH55lYPLHy10eu@7t z$scC4W1Z=elp(!LoNk$F>22<59%$=t>!V-gTH&hkroArocGFhV8viOkOL~P^V-cCH zww+b~v!8I7oVT1D_hk1?56+u5q5N(ALG(r90n&4s_%lryN%2UFW3Vy2K8**t5j*z*Fvh-klqy9_O9+b{driAd)t1YauGTwNw%KIcW!qLowGYeNpW163M;$unb!R&l#Bw?6>jTq9{rn0J5-UZTvZ9JYG0MLueE=22=}^%QQrZKk#U)qb}0 z2C>#6Hrs5ytIDdz+Re_}POcm8&6wKx@%(N65c(?dplQEpryQ+|>zq1?Zmw>EZi}v$ zuAT0V?xL=L-Td4j)H~!1g$Jd`qtK}4sG)M3A6^PAT~)9Jv<);(aajIMHyAvUv9SaFs5V+_kF1h)tEC}=Fa=i4Y- zY@H?h3~7lz7F5$UTnJDfdz zD(K0;2_G=Jh#FWAMR!c+F`S z;in)N_z1`-$niV`4Ic(suX6KR&@RDGLvZkskkOD65G;H+WP?hCk(h)S5AO`*BxIv% zXwybOA7C$vmU)SFk+p$6udx*Bh|G=rO=_=xQ*ZaQD{l)vr)mq0K$nsZlPU|c8V11G z*z-64vz%t3w`bg7d|^gdfBr_4=KansR0Qpfk;Z&u7a<3@q@xp{mK!him-u8wvc7 z`zQB4cLNfIMPRRCf5YCuUcg?#Uc#QkmOys9;;AmqM09mO)lPn!_k?5}XWQjQQFyB(mQuubN5C&=)agQETXn z8MCRi^d*du)Wy^})GU1|V=lFhzKk)CT2Eijm``n>uV5^o=IARKs~Gq3YYpoRQw`G$ zpYbff5yK_J(o8dBlW|UFMg|8%!14z$z`8;%ko$Yy!Ub@_+$q$_)M3=A)c;ZcqE4cY zr;edcpbn>wrH-RcqmH1?piZYQqAsLPq&@{a2Rs8!WY6_!W}|$ZWFhW+l>2+ z`jq;d+8^}_xrMtL5CR23U4UM!2MZyBi5FBCRhLvMq!M|McZ7F{cR0^;Tf7#Z#bfbX z0+x63yR|G7_PE4CHcN^DDQ%WTVSD{MzlhfytoEr1Txd-OZ>$?^xN z`=}yPQ^ntyXPEraip81*nuQvVmac(Rwy9iGc?NwzvsbfE^GN+f{Z#!}JxSXS+#fsu z?9eO#&j-%~&jpu5jZhs1VrM%jj^F##0*}Bca0u*zD#3I53;I*~Gx`(yWBN<_I^bI1 zC-6VukKjg39Y%tJqt>7!hOl8BdM!F+IDnoVcI1h_2tNs4hu`6IsEP9IY{6W?9Kk%n z1lSbVB-muwL|Bl~q_O3C(IL@p)*jYA)?U`?@-2$bSP6+!=Z6JgKG=QO zJ=k5?9oTJ{S#Qys@_MWoC+^1X&Ti%Q5&cA;2ZzOC|0Gg~abk=pSH2^>CA{}^CjyW_ zB)~gJ{HJ(`c(C}hm*?aA1ilVQ08OWV!HtjA-V#{KnhTW%`35kka?sR=|QeVu0b-4bfbu%Aeb`c znX`niIG@pL^ca8Q_8Qukbtuc14JzA-ivYra6d(!k0z80AO(eqmLJn>;^&SnKHl#DfXv+=F!8tS^$RU3y=@6$5IwDAdl1br0sGz@G^W?I(a1)J$(xi6?V=7@aL96Sfp zx^8&WZ0}b;v~p^0g>zulKoG=WGyA^gVe5=5Vd$8XrE(=#OQE7d8WO`#dm!6V%=h;HoOejbV zsoLn}LN^jN5zzkY?zxV9ScqXR&)sRl_|QI-Zw34?VkLYPTvDMgF9VmC8^OsO(MP5i z1x}URtXdURTIPT>1rtGF^-{`{;Dx`jI8Lfm~avf5s{hxNAdShmECYQMdxeK`ixed7o+2v|L%!SN@ zbfE60+39QPZK8#YUW{vu8rF5zYWAOuM7Se$56wYeM{gSiFnTktGiq5kSZmm>_fE8+-CU2{ ztz5HQ+uY|Ylxw3NQMyzZWINnD?*CG^<5S{0$tt3svG(M3Ry^mAq$?Ci^SQv!YH7M}dU1L_ z|7t{STWK4j|DI69R_gy3xUJV!46B&=8^Q-^?pMev2UT*CM=GVkUD0L1v9S#?Mb$P< zL|d%65?k@xpRsqhU$J`yf77FBUQrA3hSb$mWisHfCluNFf)Jyb@{M3M<5qUFgC7`G z)Gn1!w@&h%ouZScw(vajJo%{ei+^*n(Pb7bE;g6wSOq0b*(0J= ztgQ+%8%V*|N%iZh3F4mY773LB@BS~s%-&4qIn~46hPu!09-jA#;feE!JLxJZ%&;b* zP`)YuqXg(}Q~i^@(<}1%WB;Wb)#t0nNJ%mUg%hQw#%Fs4>im!x)4x>Aav%IbxD<{RN% zW=K@YS|G}^_9~=ok$4#UUxijFGZk_si04UVvTfoL&drjLoFQLFTM#e>fBL7RkiI~} zCDLtDd(tyfn3|$&XUt(g=Y5bY&n^w5f{#m(iqUz6Q!zk!UV&0NmB`Xsxl9fe?Iiw? zPUZ4wY5q-GUb2TXhjLIjjrmImVf`t3Cwj?hDZa!$C0%3u80e(wD!U1yVxqd9y5@2w z`3;8s8$X#Lxhd@=`w?OqzXVQ#j)2D2RE8GePY|{ewiC7yM8-)Cy{Hu05B@^>Vots# zr44X5<9=Cdp@8|Bc?}+BJ!e_PGudw`XT=&$Z$KHaC!`mog}xg04JNLe2A$iuqmhCc zSN>Mgwefhvw1#C3LkVA%V>6whDd=9vr_35q=VD&w0H|wu3idCo2c)TXJ6;6k)O07* z!XR)E91I7-0dN}NTZ{wPBj25uM|3CUMY^N%sq*RaY4Vx!S@Ie3+49-Ci}HQCEAk$? z)AHN8+j29s6-)^IOAaah=J?NnEp1cuPI3#k4flh@4^8A(l~;mG3MxpwjjqC=x<@%O z4#$J>=W$zbNDKnAI?Kn+FEJJlYJBT^FX>m-x9oa7jc}=8R^c6A{se4JBSJAs;ZXEf zo>L%|4rPs8Do@r7s_9VkEdy*w&}YC7z&xS$1sw}u03Q`gn@HUt`Wv zZ)qF-B~Ticfz`l%!V2L3!G6KM!+yXD;ioyHD3^c?2osXS?S+njazJcQ3rKSamv9gF zQBv>YLWp@#8e*$~gkOa=$Q?SdZoF=@uC4B-9Hkhea47~VFDTGTml9Q)mCNOu%!ZLF^-z7FI;$e;}5KJEsP521i+Abo2)6bx>>3|f)xTxbhw(G`Re zv<9t4-^I;_ZGsUw5F`{Sh38>&a3JKGg1f%KoDAiqtU)MbDrC2TB8WB5{cN`K{Ct+A zr=&ozl#?}YtRQKARm3abRceAZO{3trfFXS8_#r&yobGBXS}Y2Sce@pyWuA=miMP%- z(X>q(l3f(vDY@;w_ggUE&lw1NRCe6-hGHXN1?xo(zR%=EmRpuS*2h+b`Bq@RZBNxd zGLC(cy~%OjVRz;qIqTh*+%nG=&pl7lJJx6NS~Rj^8Krh_~WCp!P%kjocpD z&MipX0W1S{iybn%u?<XQv4gFya7}0(lX6oENs($p6UM{E;-M#3zwkk6M~r<@EeH zYj56LNEgKm{%E>Nfi_{nS8L!#&h9 zeObj*%!rCb8n>3Fd03&S99%inAW0spOa%8tcLyiMcEnUw`!z?w6Sb4T<4AVR9`Nnh zswyo8ZtrQoX7>x;(X;83KztsO#fXcW|0Ib~>O*pzY+ucr!$u4KsJOlXO!>_S15 z(L(u7u!eCbyUj7K=q^wK>5$5(+a^U$Jn@g{)Uw_fl{zL|MW!$xMJGomB<~8ZF)xyj zJNG5eV0Xdkh~_SDjc1MX@ebCy%gXD-t#N41CegzYUIumkDMg$ zWt>1LHU2bkRcPZc1BCF<(BF6+_XQU={=mI795QS(9>sk#)S4gLCYa7hd8!w_555lk zPqYT~JaljUfBr$CkDhz=w}3*(jX?f~pBJjZ(aL+5XTtkv2+?Zl50*muu;wBNY1)M| zaFG3`Bp79-# zo!r925i`poOjMA${Nc2KL}@*4X=%M+T|~s15ouj|czS*MVdQ`M%lRxgSsL4V*tx?`^+fuS-jcT9Y@YZlv5vS7H_{%-G==U(_)r zaZW2+O};O@z`R60>D-^J5UnhJUkojwupyL<)f90rcI$-RKz4(o{OZwebomS8ccY{3 zo4b!^V&ZnOL{pLI`08CH+l?S+Z4m4{;4*T%QEmJn{Q+kn<*a}se8?~`3t59ies&A-4t7iF zF=@5zr8voHtf&rtF;B37ZSBlGZF?#}mGzas@|7*CFs>!8sQa|L%;WOD_U3%cO>_ON z`O_PgH(Um?AUIGGvI{y4N{L?&^pwf@vuV8~%Q&ql?L==yFIYD5Z1#3(Sk|jdBVB-N zAL;k2O44>So7jAMfS z44UvFBPSFyzYG6ne)o43rC5VlcSJ{65%DbcW~pCxN$lW6vZD+3K!-!mhM&ry1QgveYRsh+d0=MXUKNSI&*6%D9lpyEi^bZ6w`q~Ggt|*U_p%l-W7HQ z$cErSDabvb6v6;CLe`ZnDdm&WmMfNS*1J}Y*=*ZhMY9jLKeJ~Y#~h{38_xEw2QH}R zx(DMe_96VO{R+RpJlbw_YJDja&pgtucdC5}(;Z-5455SSAa?=Ffm`8Q;AjGg!y()b zWGq)L-L3bmT(iZtql#`HVSjF~a~yY+Id3{UxE{J-o*N#lx5S6^xA80eLh~4Vxl`w> zHWB!I^C-K)sqrOE3(KkHhh@vMP@~`2z5J2yv2StiQ{m^rFNK}ak)R4y3nqYil6Df=ilf%b_8Ro>sRt@K557B!Y zbrEf3LDTizwcK)WKL87up9Wk8?h9Z7f7K7AbY$FSY-F!Pu%Tlcn>SDzkE6Gvcc2$F zy$M|oHOA}X&ExU#TKOBpeL~!{Kl!91Ay#H^ncxTEyGL+s5nSvzi*> zx%hnTJncu#XU!+g2hBg4ncBC+cf_#gCln-w%Qx8n$H!Aud1>A`$XOA-!oAGBQRQx| zZPWrR00W>1Fu523sEK4EtOz?2kHjL;$b`uF$hgM4nx4TW=uV^un#JfoBw{hG_!lJs zkHO>c1al@c&iqA9!DGxMJjq;1}8Wg z`D=mxqJE-HrmNB`(r&WuGFaLDl7;$3`o;P_SW2!;El~^A)Lb&ISBupmwLr~RE7UTz zTrE{U2|fl|IIRx{HwRIs?dGj!vSXv^arjaAVfeiUEZ*R~ zS7Ky70{xdZb8Ge2Yi?w&WX|L>=QC$Bmow)wr!&Q-`G^PTZUqg6GnxuAg&9xAo^fUz zncvIJncINf;6(rr&{1v&j|A-q!4xADRf@jKGYYt}N|~06`@6DV3^1m?uX^EMe+tyb6 zU0GcZ=%+mUySZRjX5q$#%tCW7p`U>)j|35n3T$om*2c(y! zuSeF|hUL1RhG#Xs*ZBRiW*D?YHb9!5exa-4`k>YDZ2Owxw>T9LcD|oA{lXSR#ls z{t;|o+|TZEcml4#*rKn%bI?-AEa)GpYITRC%(qgBKgvi=%k~K%V?6(Av6$mbIii!QZ~C{F z^e~nfzZ(!`-ZE*~%TlDVuQ6ymkKb+lYKVevf_njb1AFFyi%Y)-;^?1}XUfW=zlyIE z?abZ+kMW*|z6I(ad1$B5eD7!AC*TsqGQ^ICSC}qfYw6yG3)r0v3lOMg*Mf)O3taDA z?PXGK8|p1y1%Df@pTt97%jr(}Q&Xh%&6FA|2Z+Ud}Fb1Kl7u%>Bl-T6$OfxO8uBF7J-gP&BN#mHK$mdrl$s zyXimEIL%=52E;~0VbSd-N5f9EFIUpA1j^#3saMS{EhT(}^_gXu^{sU%XEdxQtOv|s z_SsI^W>=I4F9j8$$||{iuDydJeHdD3(YJ_s<*G}iQ&X{Ac8?V)XDF`E6h)3&Orx6a-!rF*`c?QL%A>7VYrW^Vl( z0SVa7*lzr0Mc+C5xK!>1?r|QDw}q*ff10z3yOw$t5&713qU0oGxrnXMIT#M9Zwn3KgT zr8i_p#D~RU&R*s$jy$XgOTyCdM$s(RJkvQ-xiG((IV1AMJlrzE(%js_+{V_{maf=Z zQBYZ3nXX(^`JwWk%1l*F)t`>Rjy+C_Ylds4E8q^g54jJ!f77O(6`qxzC!XJejrW;% zoo~HwwrQ?uj%l)givNu1q3^7T8_`EdEP<;p^|hH}8EN?+tv#isxt%Rjv8|%8a&hIy zd}VFb5JzjqNyd9eOXn*l)iui%W$kATV29jC+-gsy_qlhWX{tZOc^GOIZVEpL5os4` z1=LdJPv$zdE!-I9MA}CtMJ7kcEDDRt61v1LnM>}HxD+mtOX^a(4q+}KSD~h2cVgRN z4`VJPSEHt3cVXLOk7KSQ*Q4^Yum;RN>@eaV_|DkVnA^zBsCn2!*lySpm>b9qsM%N} zrY~kcb~v#M{txU?%vI!C)C_DHW)F4 z9ZKws?}S}KT}nNLxrN+>nu|S%?TS5uxq@7SnvN~S?8XizcEoqU4$mX|H=Y#MGOzd^ z6yGnth&2YknVzv$!uG;4z*-;xaRPn{!G+C)bS-UN-m1J6xFxtNqDb3EyQjXh8Rb}O za(kQ}muI&ODKD1pk|E?pQiZmsc8?4tFOlw*p?`m;Kd?_y&QKEKz3kh+chyc);^IB* zTjB_34RtbUBPoAIKb^FdG?%oS^crI``GlJ_${>G^@&tX+EM(9ciD9wKA>@C)2cu|2n@UkOq8@TUkIKL zLL8NPnrX4AMO`Sqh1P|#qHbj!jhmo;1$+Vg;&#q+Ur~>9Pn&hTAng<{Yf=lU zM7TBe17Iu7OGA=Xx%ra0ZD9t*>(z2JaUsLRy0kAckZj=wM zT-9sW3hFDyYeqKQkGh%mN1oD!afxvlKF?Ln`o=oRTFhQ#x@dHAR;Xm!?%IWFkH_m7 zqnb!sPdcSnYI|uXs-}`QlRCz|VNbXryj*omHIKB1G*>-e{Rp+pG0FFm_=5O~_&4!t z(+ur&?Hkf_(sW^K=KRJY)dc8x=o?Uy9i;B(DtTU-h(DQ@kmObLJSRqZB7Dnqie`%j zviNMKcqw~~IAWS6<;m8GRh$Km`Hn$N&+DJn!z$5*O3YkbXV_I3jl)Dc8^&uUXnHoZ zZ)j1`yrN}A2eZe!%CyqdFVr&JDtrNwlVSBg1Ft;qRZP_f)mg+j#CgO8#2Lgz#3jTW z=PailIww!sMVd|8NxGvMr|L*Lq`I#;rRq%rWq=uQraNLu6QBW;L1(a;UcwQ~BFEe& zye_FL*4@<3(;d|H)7{f)3M=CuY94F9YR_X3b)edZwGQrXDo9nY65#saki2~Dtkm=P z;`q^cK0cQ#rwu`UK<rCMvq|f6`Qv zg_516ZY#;U)!IZS+BOpB@#ZU7f&=uF;vr`NWuh4s#HCH?G3hPo?fgsWHMLJ7<7|M6 zlcURY8);>dRNBymrR&=a*i#b+-t881jwo;KqSN#<{m5-uA=WA!h z_Qobu-HW}g`d3zkskiU9YaK%c8b-5pGmNK5g~Fn`k*5{!Pd!ORlcOEsgf*KlIwu&; z7^dV4-!tB3;Z9#*R#DH?2z9UIO6TjMeDqn_NX$&(c5++hyXb=G+$3H^V?87rUD&{( z5S?p{_(XM>{Mh3xe58Sq_tctN0r6O>1k=GZbuT+S+um>39>XaAVV^rd>@(n+`N> zZaUJG-_V3kZEyNn^sA_#_tk$Xydk~)lF-g)-~;JI@YwlX-(7K zru|L(ng(!xQ2*o4q;Ig@t7<7gGyV`-n2$wQSQ%frAFiKVI;E7XzoFC>4K5~@6qu;w zVoa~ZKYMX-ola0BlRrY0^*zEv3X6Kl6fU<0|DwjZj3*P7MGM*Z(Ee~ z)xBehGV$+b8{6zOdvkaoQI)O_g$Gv$Dk4TCtKduyJhRyu!_e2MbB19ST2&ZiVu# zfu+FKC5lpd!%QWtLDs-+_?~O)v>2~8kO5ZX1DVaZyQY14JFqBovwlo@58)hUby$xp z!5MI)%Wv0zVUc~Ua6R<5>i;N3tA90k;_3{Eey4sesAG8tu&vw*RuoJCjR$Q4Z3cDA zbQ8{Ib{CR-|0}Pm?OYRW>`>l55B?gSMd%uUh6ZyBXdMJ(#vY-Kxk5Ca)u<_?!3C@6 zdxaIum7)o(Dd@k@2K17EHMlP*4gdmY%1)PERXMcdv=&_d%$Oh`^tbJRZ$fzm?v?GJ z?}rYp-&fX6-(A15wx5up-c>d{^no@-zEu8B=_=Y^bhLO(qb7s|=SQ12%QwlrI*)Fj zT%nt)o1)vH+pg=R>!`b`yP|ufT_>Nxn#pP{>z)xcXv;O=;(}ApWKcSC$ z0cH}X9c8BDfN(0amE4nCM4r@iDm*AL6EO#IF)$_I((VdQ&?-n&6ORNfYg<~2OGa9S zLXnY?mXQ__b;Bq8Cc`X4)_BZt!O+rp#`rypS1ITfag|5eP@K=WFd z=2=Ba<%r5520`+4r80ORx+6F-wk4*i+NF7+PG~o(hmo|J6Y3kW^;H;qKl^QaSn!sf zO!tF|irSNthV7|4DQ7a~@FmpQrGfh;E_4obHndABt?rnV zJ2w|~kIpJf3D=Vu%xBT*(fpL;BjHu%HS$^K_T+Xr84-rqMF)xx7B4S;S6o$MV1Y|o zXYae(YEFsPvsi2n8$qGg73sHD)5ZPR?GtJP&HXEKKPj#r>n4;V%byv)8O?P+-2FYH z6PFSX(q1XbusOkwe<<%w>|WBjdYE^V_<$Fj3deq>{MA>hC+DRsnTGPkx56lhGE>vD zeFLZ%-@isI;kZ)H=;Z37h+_yEj0(Hu-%--js5bsEAj^DZva-KRQO178ka53ZkMUo_ z1?XnAuA#Kyk>sr8vE-cOiR8TGxw5KgT=CVShmtdr9p+WK{Q{f_-3i|Try*8D8WBqXivi`pQ_$nkNzfC}$lx&%J6#IuFEY&MPoJGQ5SbtOUt~|?+t8KJX3<>M7STM`6iHiiOa3dG1%44WL3Kp+miC&Ke?vQ?GQ%&x z@YubycF~)xwd@nJld|*Wr^EM~&HzpWE&?t9&I8T?&I0BFX98yc=KyB|X8{jD_Cs0$ z^WcHtMc~EYeZalIJ;2?-UBJ!2ZNM$Stw0C_3;{ua5CG&G_y_nu@OSVKXb#>0uZ7pa z>*1Xte?YoGxrNJL-4V@2cNkzY2lQG&Xaii>M9nfMSpw+UDSn~FaEQ5Z|YGhl>E&-XIBe` zG5!@iXB>3QC~BtemMn4hi7qLt5pE@On6IOAqO+2J3&E^AL0i%`-& zJ5Mx<ZR;}bU%1jDcLK_yE{dQ^`UAN8*G5mV9X z+tqQ?Y^hjgpn(1S)PgKNCiZU@H*x|gfAmO6+Kh6IFby+@N_WwDjK5g#X}@CU%FdQu zz_&ur3=Bj6>#r+qLdV&C@%{0Cap|;Ogl4|Mkk&?hgC#q?bVeyYuixG{g+G#v2S34$ z%m|Qtq*j8zkAw znM*k&oX#u|L0N-E??r#JT8S^SPfK;i0@Cf`Cull}0EVcqgD~m}{anRhK{4YLo<~-Y z)no=a9XeZhuF#EtAtA&s$vpU%5@P&vUe-THA=RTr(m`kx;RJDjD2xY}lkuO8XwEm{ zSh7e|Q`(sz2~3yVl6I86GrTs);bURr$dky^$P>s@$TP@ELM@@afXEP(jdF;MQsXHQ zN}Z^kRx_^V6re&q74f35jS$b=;tSy}*1yAV$r@`O5@&PgaHTXE4S>tP!b|GLA{QEt zP=3IF!B@Z*z!t(Ld5^(5OE9cTv`2xa8TzR4-z+-Mt)iY*233FH{^5>K-H*?R?~V70x8~lb?u_i<0utS0hs{ijgy*1% z5(8BcOC|ZEoWmbM^Gg)gW0n?HG5x%?53j4@C4UsXNP#gU)1~PV=?&>c{6`U;ZH;ZL z9+K3>HtS#L^%Wy49#tqShg8av$1C?nC&zZhimLK=VymkV_Fneu_JH6Oy*@21YD3?kQ^!Ae?WkBe5bb||Q9D1}s4qTf_a7WZbiNt78#Zg7;7y^~K0 zszL}kDcP_gQKbA--m3)S?NB|)J6ycSEAyI1)Nwa8l6zRyTmIe%Xb)=07`>Y+fAz>si5dm zOzAw!2-`+i)ceM?*gpW9?~nc6NW~NJP59>ce&|k_&Y8YwU+_rqXUV$;QyeOSh&0gM z1t&l&*!Zn&m#P(hfkt+`wJq!Vd z!=Z2(90^CkkD|?_&FE&eXF%H`0?fJeeKL`9uR5FxMSG$Lq7&?4jcmd<?n&Fo>g7s#Id>VAE8GpkD*jS<6+@I)6$GVU z*&tWR2MR=tZCNY~5BtZrG)%~I#^wIVRp*!(SK0BJLp3tYgW!Hp0a$|GE%~2utnp9d zU?Uhztzi)Sp-iX=Muw`(OTaan;lH=l_v4n~SKz1ML4@V_$@qUsZEDMES`}S_HNy5t zI+eC5-BqM8&B853tU&aZPsklZZ$ZP<{V@YDg}Bb(uHbIqMAlT37op|o!SW&U+ER1o zXZISI{27{sC)}TKa2+mV3H5`GW75`JX z6@Mx(D{xA$vQDm$e*%n0Ru)$k|M>maeNN~S_BQsHzjbNzU{ml;pl$F!fI`%|@(}nt z{3m=l>>uE`JX8phg1nFbh7a>x}fG;9j33YACjk;2HY@RkrUVvh7o z7KJy2R)iLXUL?tp|H2DG^FrtdHG+&R3+2~^=#e3WZUhpT0HeTWhsNv6i#O&nxilV9 zeg%66`v@PQKW&)T@P+-Ay^(TVS*J>?mV`%S6cQRWMBk^>7Hz^VszH-#i?$Yv>dq5> z)DH>oD&AeJhL^&(!gj(m@G|%|*e+NrXb>vWULgIUy-A`nVuq+;E=)x2p3gSdw9woq zwj&f7|A5=!R|#LpZ#@~=J5oRO#>OZqNxE2O$#B6ZGFuFD3}-QbIy`q1^^!87;{AS+ z(j3Nx=1FF1>PdWF{7}4qyaV?Obs*{uazo@G7n(?e9)i2XPMQPQB3>g+o*1So zLEc54#lgqUraAiP|Uy}C|#5ulwO%$ z!oL&I+cw*dqekgVVSuCyrH-xFZx1{{oz!kcJV{rC?dHX$kRG?&3ryDTEMKTl;)rmZy zcxUQf%AZU)0tsz)rC2@9+Lz z_a8Xpv!Cbre9k%V^E~0b%zZo9UlS_}boi94sv3|T?Jg(?$letFnYz|Dqa?%ev0JmC zt@JEM#k$y>9VvK|o5TH#yDKs~#3N*T`Jc7(>JvEWoMcW8r+{PSlyG9CIwo61QEd*| zA9vm7TiL$2E3&Jy-+i{ouK9c|yDYpSTvhjOolDpe%G=cM%XgGNkj7KDiz8^W8JZxj zG^V12c9waReVVh2xtsYdb1`!Xa}o1`RLp!kCnmRfqi}=J>hrrWlDQ_tY%i`f+6zQU z?0Quf>ze1xpsx)_VjER|dlr?H3)M-Jlcpxk74P<}iXFntXC9?|^r$2qJ)Gjga%It2Zi$2IUaH$A+9uj6+9B!` zxi=TOXm-Wri?F!blic?^h*@YhAvJ+Y?uz z-se-U-s^L$mYKWSy^>$Se}$o}dYPHWTw6J-{M)#Y)Sa>uvR$&1vacy?!`KyXh$-R= z&9?Pfc5%EoR?JK?h*^nl;)#L@0^nS><7#qUWZr|8HlL*R=l%-dnFZ!jl(6N`Xo3SyB&FXMz za_w-vN1x5CV8;hcaPe@Z8mm)w)Ge#)s{68TZ(Tvgj+$C#8q-&DC;x8#m-!p>Npt=e z`TO%ZdF;FoM6cN2Vn)?Q*S^hM&YZ)|XXUXju`aSMvwmY;VExKEpixTvB`QgPWO)A2 z{9*Y+^4A#}gU{>t)>KC=x8Khf#^lF@#jK3!j2RbmHpGjP7VQ?*8l4!`LF=Z?3!#Zz zMR)jg4MP(s8Se3yY>m%J>->CuezPIpnxB%NoNvq@lr=a@uCKS(+8gY3_8R+)a>0Nl zd3S2A*8E;`ttKrgl^$81UO32QPTn19iF9oKnEZPA+W|wo4pM)h&gL%UcIMw@-(wFj z-^;t3x6uAa-pRbV_Br;@{B!x|^Be7>?2Gcg$={YgvicbH0+kvP=vV7OQ;uu)`@`dq zU!tt;xrtZuMb=nnLGiwy8G+Cuk0+4Zg)8{vikSa{q1ePg5b_C9fq} zOS2|bkFQcNe=|%=zLWf>@sY7P*HCLZZ~D}nZCPcxWGS?+O?jL$IrUO%WtyvPkVEqP-p5km6+FRbNZL*ei`isy|5kFm119pXOuz)x5v++JfFro1OQ8?SAR*yw1Gsd2@nxYF4Bj4n7oo zB=~aPtlS9uxcpc2%hMW7wbta!<_D$Av%7-7cg%47V`#Eo&e-pm?l32r=m!!$mE}@D zihaW8u}%qwYECeZGuxS~m{By2bbviMdVch+n$Y^pI&tkR-vz93tg)F3K@}w>%E`#VhTehm?;)B2?|3{Ghs^BxAh1 zMLA7-SM{bmLA%>`jjGiDZ}}Jg4T{E4Na3zlbLl4)OcdW3Bx{?1|W|ey&CNv{Ur&48h7YPjwMnGNn1pk!*EW zsupmAzki!X9hdV44%JV?8bk zD_9r5B&RXqY`nKQ(fq1;MHD@n5%rrn+%m`VN`kWZdrL^}4hP9?E%>4!(z+$;vaTTd zGu>RNE^43dM8O6tFJ*Gd&neBh{x{@>W#gHXnf~EJ-3t>om7Fd~DYmC(6h%~h;9sEl z)4xM;zUu4Lw46oZ4_zBeN_4}EgVR0_ALDpCt|(xGyQkN0jyA^|#lHj`^*ZK$Fl|$D zBz^*GfXx!PBjTe7b7Z2oYvkanbGBho`vW(4D}3ZWESYZCw{HgB6-c+1;#<6O|5mNn6#Voce4|fnWAob)au*Ns8n3 z(mfnG>r^(09G4i8_;&(3E+eivDDGKjt|F=Q(b?QxySr!=IzY3*sOXZt*1PmaVgXszBuA&xHZv| zSa0#o*M(flxtwz<_)5+Qjc3^P(4WHJv9GYdBi$lhF5N6W6ZO7sN!SSKq2~BqVdta1 z51S}mrF&2JNJoh(wa-#5^jqZT<+;UkSip(Eo8D9W9;@p72Lv1s%r49+obJK*toCg4 zw8-C+-J;)xA@9zV1xj zn^BX(wpDwnW_zXwt(Hvo&6gc4`>D#yyrkfC)TD^7QeO@CPkS@&Rzz|nwK;Nm;8gFk zwqsG6ctzn)8MDL)f<^+w$1;y!xAx zze6T#^R=>M_vat(%PN%KJ|}fCmU|%gbTLR z&8s_Dx4v$7-A@(8wZ{Vndrh~x)VbCzWn^(FwQp4{sYuC-VN&xc`Kuem%`qi0kuj&E z+he|snHJL>qoZ02Z&&;l{a5r6H*Ph(@0=SZ!EwmK)?o#bI)f3O~p!b8e z#%37Zjl?)WE;W52X;;3dZT9isB`?)p@Ler?!@$oKl^Mzwm2E29qB>f(q4JWw)#PeE zzQF(>8g?Bw(V;*JhaocAWS%z6QT0)E6tV?qbI{0}cSXC?zlzU%r zPqGPfb{C%)?6%Dg+!t{tq9F1mZ~w^2RV45|@5{D(fv!HMw0i_}VVRFirm4<||E6@P z`h?HuqNIco=`4qT)wSa0h|+WES=DtJ-(<)H?x9O0ZxvlE`n_yyuy3Uz;p?KjP-Wr0 z44po;azW(Bk-Ex(nUhLaXRcB|$b2iSykLfiRa#Vfp_ImdnKz7kM1MVajz%vNW>-|* ztqgSpmu#yVo-;0ITehqqEH*X!x_Yp0NlA%gjoU1NEOvS6rR>)#qnic5&F6l}y&O3t zBqoF(R~V;_yAgXndV0eakFPzpdh{q>7y3{?s}GN_$*Lqt0uRM>iketw*MZVQZRY_I!O8S=UCFQ3K!;-Hi z&olmEG#K(shfO)=cg@Xr%@)ft%V|rRH8iC?LuO%-q-ZmNycGD44p1Iw8-<)Cr%UMghH9Tc?%Dt4P)N`o? zX?N15+jQw4rpq$k$Oy=Q^uwKnp%?fAng@fZ2G6^iVVmI&ODhpFDpN5guXfZ ztYK90jpT*KyGFC2xxn<3$!=b4{>z+ZdE0W{l4*@h`5@&%%9zyd)S|R|Y0b9i^pDd$ zGnQqjGmmG^&C1Ohrk|eOZ5W;0lf1M?*Q9%8yp^HJJe4^=%bqn--;({aVR-WI$@80ye;Shw`KB&Yu6dRD zp4n=LCBYCOuFJr2q#B{<`Wd6wfk2%w_(sIF)YmG_yB;`@cgw%_v zWoZx7X4&G?*QR@Cyqyt}`E#ZtYn1+#?3$!%`WV$CPhYL$9DF|u^G8hx( zGnF&6N!oe7m9llJ>zc3p2P#H~x&-V}{N_~>nC`tt8{reCUexSE2`vat3T66!6da}5 zp-%7>gu8_=6?SQkXxybM#3%X7#gEE=)X1_{^QXn{srb3#NOevH@Z&i)j)9ZSad0f0 zV$MR9&?C2Eo{H!3clrIA2Q}Ip_psl?6}7Uk>*3eJReseTzZ%9S$EyBJe$DvMxX^bB zYcea%P-;49YW~=qXN^tyG-YCHdD`D;vu)*pk?Mr>b?GZIw3!82qxCbhcc~}pC+Wu} z+YDuJ|DqqI4;#Ps#)p_ya!v$7{7XBa9>r%jL3=GpY=8`Hxx$LZ%}PfX4DUl^J1~WA(GMCnaYY zs!V516x#w@a{6cKk(m?p^Rge8|5H8{Q}=631y&c^LR(bk6#as1AHQ;slZL~}p~*Vc zd!BAV^+9^$mE^g`1bL6~73Eyt3Yp%pR+VcyWXd+LG~Y3sEpJ+Wwxn9MDXUU$raXNK+T7KF^uQ1ymX;W;)fi~}OpHTHepYZh6>5`1r3`ejsli_b3KIt7Pj{ zH#D342Pwvcx(0l!xa3tDnBl#}`#Wu43h9$5bn2+2 zk#zhuBDx2qkWxjhpj1*ARCnrj&Xs2BvFh2BM#?D4Xi5`hDQ5}icFbJL6wXx6*PIEQ zBx*)dI=vvtk>sG;={1yUN)<&&6;R!%cFJJtFe;BaoVtKAm@svyAgPhe{nrsiYQA zs;OLRUQ#YSGbw|vWiMeZUye-8dA?5#7?JixoNBh_F#4f zjmNdI2C!dZXVUoGNz55c4mXvxfwP|D3ctLg^M;i^jCklCpT>py@oB?ghaW@eWK&_P ziV*{iz6=K(_G65P!%9>j6+r4&>ik{g4I>7QAJH&wu%mJ4sByVN$Bru-I&Mfx!>B>f zx^cJ%x6~Y1WF0f6VX`G3M1c%X&_#qXK{Ru=H=HOME{2{mp+cKem#?$htfkQwOC`l@ z4ov+&Hwv>fRZ8gbVK5+KwT=zzv{gK)4-{xzVk{t>Iok(bexwb8j*}{Lezc|TS?e+X z_vZ5&#*G;|$x@m(Ahlu4xZWvQEdSFKy!*Q79evYZJWu1Z_WxVW!z-F9|9{U#_rFZT z19~<_1#(`@1soBKPl#W;Zo4;h$Gb8JXPfR#W*_)Mxuv1%I0(ZU)(nH5N4g(&386<|5S%Eaz@MTbKA7#3(7CI|4Nb^J8;YrXmK8gc% z>pe%29pj>Au|PQ1Cg^P(l+96G@coV-2*Nrp*4fQ>2fsah2{i5D2NCm(s5C0H#Hz$D z`BAX*K#3IU8`Ug0U&qz-ieb!8YB6+9;c{W%mMAZ$LJr+mIeo2@_LiuCK$81mR0|X0 zo65X_?WIsceHe`n-s__-lF$uNw|$p=t>QyZQ>`0xNLln{n^j@Z@=_EXlvGtHx$r~O zbSeC>h#Ljn`#E&TKP$$sa4zP)16>E$4A}5%lsmM%#g(>QjbcFdX_Xx8CsiD9cq!=6 zbrxlg(<&KkRN^{vE=E;QsW}jJDM|s#%Qgw2qEMGAR&VPf&M_h`MfcYaE z&cfMU?h|<&X}=UzLj`gviVq!gqFC@fS0RM2E=37oELR~VwkuIPT%mnft{OU)2Pij?`<onXA!Y1n&%F$zajUAA3~#Ij8W~X>UExBmmqt@vh@c{xM&tGCEswBkq7S;jhil{#!l;j4XoGu4 zJ;l)Yc{B?~9rX->o)4lK{Kg2 zxGI`QY7RyZ$bwU{7!f$ahti<+d^DYGm&FVh!6&kTG7$V8O@|pFF$|c#I9Ld)++yhD z2Tja(LfE)lErS*V@)7!&-Ez>sk>L+JielK1aEa{&%E2*opsydOa>^JGy4F(#-DN0S zde2qaN1eat>O+JjF@BpN@t9{Cv~XgXu=$uL-U*+nnQ)E4l0naPCYyA)#f}$~6{^@l zc<1j@ag#aw;~qEr(RT66-1^hu(-CCxV;HvxMLfVDFBjZVWiE z8zVIE}N{n%pn{uiZy^zh=;B9h@7r(r>BNSp^K9}n{bohD8Sjsvp5K5B_J+qaL> zg=W*hXMqq;1ZNQ^+ZLLQ^L)ywo>Md;(8Pr#!_q--3a-1?;!{0}#KzOsz9d!GJ1UFI3#RId|WUn_r?pM z?(=v$8Mb^>C6)ZTDL&f;bhCq`(6b_*2@`YWwf)!$zvPHX_m=pne9$cmW{`1v<5%GM zWSA2U%C{S3(Dg2EUG=dEOnBgtt7|(}Edb-g08bEZjt>CyI4*;nzZpM|4LKVFQpx?l z;)8Kr=c#d*$!#o!CSHQT$=38zZ5g?>eWF7XgUkD#F~mgXc3AwzQ$)+BN* z71p}^-jmq@s%VD9CCUQ!H~2o_m^Ft*{O2STbHUJxW6LqgJjlw{1mQ~%f8XDYY`d4B z5kO03o@7~#ROBS+urV`_2kkTYB8Z$iTHfX(@+M0eiOWn-vLtT;Ic!UusDT+<^WwqM zn20yT)G>O3)cb5`etit??UNHF@b1juD5z&^d0?N37pP-$qJaw=|FUpFw^^-$9!DY{ zLXYNoLDS2Le6ngz;z@yL!?+=Njf2LI7(CX3()ou7q3c?X2tro)V zFJBY6V%y|Bzof}}h(FKphL*~ta@bqwnoO#zl0FlY38RwUcO^MvlJt3SrZWleVf;hR z??~F~2Kzq3%FB>fZztMEgt&~YINZ@y-`rH@knCB%c> zDbp2lQ`)X1;UiGUr4u)S{!<=U25IB_v~>%EP0;S8mqGo)VB8d!+7o&eYpHVuLwD zFT@u^CU~HnO%7)2(cG|1WYJ*Dm;eccZVrxwTlrX|>j>89`cgrI#@T^%(0!%g!s2SR zj%=~(2k<~x!1jjv5@WACk=sZT{!wy;y$R4aw~H$ zeonF5G7IskE_c_%;=_6ty{K`-&_Qq{p6&S`TD#>d8|kdcCgvmhE;M1{r6OYgMK5xN zpY4;Xp?!N2joi4XKPdusiz5geud`{;`9RMgk@xkhmB2qaDHJ+A3@q}hr{QyN*x)}I zZHaUN9fWZPCK@q(1z8nmIOq+2t^RD_g^Rh+{hPywY%DYsQJ)KWz+WstQ)3WM0jLpz z?uvs6-~1_HK~u2-&9kSKrJ$@%VZ-)fL&0-d{Bw#A%Bv3lz6Ltdgqr6H9ymVK;L++T z@cFll4rdl?LZQ7JyX>AgnGWxKs0jyqr9sfgF8$pR(ocKqiYB5@>sDcOhZS>~ENB_V z!85K18!+wi_wOsbe3UTYc}H9#C^tmEm@D3+;qG*B6yWJ*E;R6-vrMoQh}h6NXR`1` zWv5mPODha`RNcf2&^y%HN<&b;B1;cxL!Ctg@Z=_r_t|1`A$RuV@V>D%^#q0W6*;_E ztnF7s*W*xuU$vpFpR9iVL0Q5q?9 zePj@l<^zUNEVwy6fDK*S)%f83i11bSwS{=Ve`N@S$j_z(qG5)2mg6T8o;5!jL_~1R zkR%{8E*fH7LFc1EWAWE1xRISQNFdTjKn;5tCsB$ziVWLvb<_+L_aM(0yD_gYFV! zJOAeLp*z<=gB=Fk?{1F48&f$}z}Qrh%y$Jxc`_YZP6)-I93rF>WYJXAPm!XtvCW+Z zZ`!6Mk}1QIFKSq+jpIj+v*e8zDhsE(U5CEpTG1wBb(gVXSCt-j=zS1K?(_%Oz$#=g_Ev-j8rZhKq(QjO+y); zLsE){G&Bt!V;j{lV8mdj!Bv-!9;X?O$gA9|U+`IDF^1!`%Lb45Ukmps@gSb?ztfct z9Xqsf)W13*qXni#uCOJahG7_qi9t#vCVz&j)7|AiDe{LFp&t`Il$(^eOA31bptI;A z7Qi8ni2><%@izM5NfDZ=&T_?RLLZm%O1N>a#k;qOBRbsGdsRvwA7vl)lfqQqN1Yh_ zOcqBieyY8*(_h+K^%ZJy60p2XcoTb>guSBE%Y+K(UMQr2#2W|XyALnNACFpm`&t|1 zQtU%5hh}e6K%Zc*w}}s1K0#aiTW=HkWhM~~TwIHNd)v~w7W?B+mleFC>MLD}-xlwq zL}!&geUxpn*v~niESFcFu0#yJiQT9B>Ip8wNLn$T&CaR!vKC(xABV8uXAvK!^1eIS5Nk9GEdaD3r8Eo8slflxw<&4{U=L*Eie5A+5!xUpc*o zX4@9EC$wak*yMPf>FC1Vk#GFH*xq&x*Tp+|);Kc#y6FZTSOaBVr1MV`l?ovPWcUpH zX+mq!F$-;mJ0_1_mYDCDY*Y}51EOG+Q;n3DOHK}%cGvU;3%37bVuIsd4viE&HvP(k zEIEdxnyRF1GJ|1$%hfdpU6|1OtYC0(%td4m$2^`2yM7KB3-IbJHDU41yI627M(P0$ zcQX%sKbrNFT33ZPxkF}da3NPENl%k{KKRXs2Ic5Pg6_)tIjsh%lC|yS zb9%5=IQK9h_L<8X=H!IX;+cy^)UgtOa$u)Qdbtar^e@LTA~bg9dSBX<>p z2=AWx*g*K|M^D^jtQIC2QE3^$gh@x{q8~WG;s!knf_({6ayEH)xFtQ{Ujc`q{_f{jB z@zx(*;M6?yjo(VLE_NYh$yTpWa48NMMG}TskGm4x2SAg$sixv%{c%GTRLv zALazZ$f;HiIXl&Qk>+%dSkTpK%$Zna374aCnAi=SW?+6B7DVK!~#pqECzIMS82%W3#<+$$z5Z8k3p25 zS(h=%&CS-CO!9T7b+8nwk6CqO|1oPkmFQ1coA8WlH8>P)J3ZpgQQY9 zLF&9K3=J$7x?-fA7_L|YU0~fCI3-_8fR^0)-CBqb8lR23?hUI1s*}sZ;qVPB114U# z&VsxfIEQ*;xhKYYa53Ajtdu=*fcBmUo@`x+vFho3G0dot`SnudrYYqQ?C0UJ<&&qTpK>djel0;MN;rRQVHk8jqG7z^vne955B9)~B!np>=L%99C8T+9$|No< zv@HrIEu&NZp~1HI<+v|i#o;?9r7*!)f>FgGlTv&EZ7CnQN5dQs5qV>x+u$K9$9iTET^$E$Vo11f=rNonK;tj@(o^X~|7p zOhNX=>2H{Unoh>F`FHLQw%5sMe96W05;GDse`wR|e$VaCmme*4MP{N3& zrT!rNB9%irKTkz4CTZSMAJDBxWs@~ur#7*PV|VJT0$4h=H4w}mX?zkPOY@0^l^%GX zw_d3fL;Z(bH&|d5snN+1VVH{bT0oy{iOMaYEho*57<1CxIj}V7wLsEdlD5~CEU8Gd zi$Fc^H5*A8p0@L{9x887kK5JdCX?(olErksYZvkv~&1lE9XRv?p< zpHK6g4}zh#Uf^v6WUco^fMQ0C8#p%bxZpO_hGETho>ib&=jjDInrj5mx=4m!k8;*P z1s$Vfo^IeRV7PA@X4`;!`&gTo%fGQWVI|(JPrl`&Pgci8gAZ}Ket?`LqR0o7OpNtB zE8<2h6KvcNP`2CX@Q90uTklvJ>$E%~Y`6KdoFH8Q)a^xe=TBM&Y5c^dq5`6H7!a(H zFu}CW#wF)JwcS=h2UX?OS6%r7;$1C|b)L{Y#GAY9mMR!5qw=_<P4v|m?b)B&?oOk=&rq-BW|nUu%V@d-dl{}6uHBW z$8s;|`Ynn^T7R>-BapX@s>p?|U+`D?B3u-n5XSHlLG#5}JLqazXe5Sl=xB(G$g0b> zD}Cr)8&l1J`u#Si92eyZUV&#QUL@(cYD2`uiQ>9>@XT*BAo0F_X=O<~4GEqV!EK z_5{H^ITu#GAs4|vugm4+aD4iFDw&p;{vL}|TGM?z;MRIiG3hE#-^7OX^;)!7>M>T| zJs_P9lkCxMpiIW-K<9vT24s0^0@|b)3+&e7Wp#>3$iVawboffG5`o)0UIOSGg4Grl zM|*D2&9Uqb% zK5k^l-E?{h_#F4d2Ax3XEh|36-p4%=%+6A=+Lp=?mUAl4+1zl?TCB#&=4QAgX>P?rOs1%dcwxlSqS}) z&!B@{h0%a!6`K6(>Hc15X8Q+1$3j0hu+#k`L08V;!n+ePJfJByiwC#HXD~oHF@p_t zE3)u`#s*0Hgbar_L6G&`1918TVx%35{rFCb2UlMk%)_mS!6S$2GN((Rb8IFPa+|br zvVCl3r4+)psM(}te&#xs^MW02%=92(uVoG_hjYgeKgJ6rXuFn))tuKy$z$?1UCUhQ z4$agow42I;1#OFiwY_pAq+t0j9pm&fl^i%k&2odLNg8JX20?C-)CtETmJ%aJxE(K3 zn_G~C%<#zCRtAfkvicUD)HP-Oiec8-N;>#04MyQSoN@i!EQXWiL(|GE!3(x+7v2yp z#dMleBq5HuS(_zKaoxEH?ml@ti`~a|zK2(&dkq738I%!(epxyac_6C;1JZZ1z932W zvWSOs`mgY_m86HCy-ZBDDYLJz+7?K0&vs(At)bZp;?QQVNCo?-Y&t>A^$8-vL*p$rPs%>h3&A>fb~h#rUK~~g3m1oR$&P8+Kc0l} zqyWgTBbZGsA%_K8#<$Q!zZht5>2o8?r_CrzIe^rN&e>`(BYPJ#qR9LbR zjd{l|nGXDZl3BsLOXfxl>fDLwZ#@T9ds5{He$7))ggQk+1@y8AsE#Dv8M!;DM39}k zs~15n>QnV1sGS9fqa%V^$AgV^xq;AL87P4E85*2+bb=RYugk6B6NF8F=QwfFO6Zu9 zi)h#gZfzfhIBB($ng_bou5>u}mTN0?x4QBna<%JwPKrk!Ps=@<{GYH>vSUl`ejXUR z^Y9S+HkSd7CYcvZKUIc76DND^tTXB0j3=M;e3v_?sjr|gF%Pkwggk`70|K1z2fBA1 zA64Sv@iyAMTNCnHg#_`{U&`XAykYY_F|?jAuI{3+MCC40;f87!6I4Q*7&rf+fMY8`4my-71^27nlj3O)4dy7O6@+sdyI@tMdamhFC`Qb&-J~W?Bltc4p zi=X46Fk0lQCYz_``&yvJ35sTZlRpgHid>VSwZxSPoJp=JeN=ogI{+e!**rMEJ)a4N ztMg^hv>Ef+BDY|++tSSpDdc_4&^ajyd3SsM6EPs5s)og(*v$DaTp3Uy6-Gl#6q`d@ ze$1cl3YvU*1iW)RUj&u-dJ}|ZE5!ua;$l!nda{AvnZ(7YxIIJYL|={2Dr7Q<#%Nc$ zk{+v_>I&=LW5*%_8OkChHv7<|J{(rJ9FgypG*&g5F~KyL`j;>c-B5b~Y|Z2fV8`#A zP{1O^&Oa(Jcc^Qj{#A87xC!+ZXdTD&1~-u&&lU+fUmLcFvdD&+_HVgPz_y4em)c{* zy^%74knC}9vTeJ4A`=7?S$+_{IXDEmcH0&IMp6BoY_LgYhRN8Z(^gopw?k8)4#eVJrs66dHmq4kbQq&8V0>Y&%VjkkCaV3X` zJ0401BBi?mpF*Si*>0rmL&xWSaGfU7!p22>U(&h9aoZ1W+{PS`!>;IwA|U!E^*R3n z3q>RHvLm3MqDhj1Ni|Hd30kf=BX8%Sn(l3o-H5Z zc8Bn$`f11KM+p(NE=OFkGX=B9&d-$cVERmHA{?4N8Q0b+>nJz)_fZ?ADFRrzKO_Pc zD-k(*)-jq8PmxU(v<~B-!SR&sk8J*{aLDs==n5QkkAb>MgSuaPJ8n9L_G5eT%-)s} z&kXIW+lyzuXjIqZ*x#>4FO=C^<0+J>gj)x+OgP|*i{Fc9zNq>F&wL?6Jk!6gpI$uk zg`yYF#AR_Oh-WUL!fTHl67=bXtX}-GA8WqrFuq{h8VvC-IA{+QvtOW>|5o&?1>0%1or z_bcKAI{UFstg|2Mggg7OPQa zHy3(9^9ijM78j;q*lkFG7V>T_6v6k$3}~!jHBvXB;H&@;GgU*^8nrLkI=3LLKYEHn zxf4A#00O6GxRJy{iz-~BfTo27G=i9E6Rj5k1w=r_n_3Hg2y>#KL9p?b9ep>s7IOtw zDKM?!DQkjKxmEyYx8WkRx&(y6^wkPKm|QniL&CNfjKy%|u>vPh`rg<8Z-~sr!!_%Z zkO0ts5+Z|G&^!@Wp%+GdCQAUz#R5q`1hrSu5$?q$hb|Tj`Cky!#}nC@i+U9S?-$@{>j4Ei zx-W6i5WG_0?$qw;*D%~$5vD9p6>ImSHrr!%(-AVhCf?clAbxDBHbp<}r=M@4e zS?5}K428_XUf`5Rb}$Rgc;%d!sd768vPMq9y{+9g4FkC`rMNZC$3s!>U08#u9odCU zYOjSVCr#OfIy#x|DBP=b0;nS)bW^en7D>IhP?ySN!r8~F01`H)Fwqry#yb;kCKMV7 zQd|Brj4JP7D0&f8f(YtPFBtYlVIZ{pfhT=8tAq`QGiY3B`qNcTmb_6I8xH^6az^Dl z3&l=KN^*A=zOIFX0<;@eokm+?$6&Ou&K;y9baA~fGLf7OEaKz#{cn)9Gpfjq)J7L= z5D`mS(I5}l|FcjHt!w$Q&OeyuQ(c5XKm7)DiRv49d^kL_hz?JV2%T^MCgb$7TQa$c zuyHcqt6vfG$Le6{NL2F)7U43Wr(Wv|j#d!{3KtZ)Fne)W(%xERmk{3%ioQn}yvvB$ zmeo=*v8*rpEQqR9@-~SEB`ZONb3$>1V4z)g&{+|HXe--(Uu$}UJ2h+YrET(rRi>bx-exts;Oz8Gv zNHFbDi#xQw|7;Z^y#3t!wJcC#Le29L1F{TQ>4LL((fOC36r-u*T*2QTBaA=eINs^K zEZ?kT{$+S6?&*8>}9J;@X&oyyn#tN znI&GdUTpfvPNobD_gSG3$tx)!pYTdPq>=@0C9iV;Vd)T9kcrrIy}U#M>#L+P=$4m= zA#9=q8Akao>7?Zi-0mgK)E{xxChvwM9C=)c7@njZ6BZvpLSqKl;&2-ZzMCOm%ffUo&&W$ z&^4!206wn<2lP>1O3hQMv{|VJVImXLtml<7iEv)&VKyMbj5+7qf`ugKwbJ3iPeUYf zvSD-Ss;5Y@g^Ph`UvU_w+Z~sqgTJMeLzaGBI+6yuJoKPzcHl8~az$t=^qdZ5!r>L6 zY{=Im#$?iaqW7_*G$yncY=+2I3=k@>l@8^?H2gJO(7lVufPGSs5$bdCO&GzeLCJm8 znhWzxebnE3EpdI6exIcT>c_YV$vY29hxvfp=ZIE2d1%VzGRan18H?98Cpf;Z^pn}a zz0h<9X%8q1;W%@eW1%CwOibz`%DVjE8<|xNmM20_yoJjGRB*V}iw~`%%jj?*hphq2 z=rRF#WuyD|Oo5)?95ftS=CFmZsHyBquYzC=7gr}BEraA~91c7vz=Zvq1tCIMP#9ux zQd~mDm&Lk3bG9-J99l%1XVCHXUp1+W4O1ozcSnC}0XpZW%Q(}*Y9)!lRFt09(20g@9q=^wpHL>;8?{G7lOc z3@(8uO+pDgYP5=Ay}%7kme0xt@!;_Z%qt!~nXPw1<3SMl6Nd?P+sioQ^!BnLXz=#O z$3^H8<6!F|@a3Og1%l-6(6mv6*72S)22@9|(Q7_{R-51VWpvWCyKFE zhEto&3M9IKas-S{6LvVhWPp+OiyyvREfP5d895ce~P>>jVy2JMcy$BK1Zq`tuf_gv|i91#y>6>k~0bA z6}_mt2D)cDm>@Ki)8VYXTmX@lfLK`dih~8bYZwr5Y6)tyo?`M(_!t*JO#Tpze9Tfp zE%)kJO5>slb-By9`3$RG5KhM zaQtyYKm1+z9Xbr1b(ny-c2&6+gtu8VVt%Xq99jTQ5WZ)S91qaUl&4h7v4xoZI!)yX zotY_5sg@pp46W#zxp&4pjTM2OYYvb z88bXr?vrOa;VTX_ohoO-tL9`cqB~Q5l|^bVl_v_wp}XaNJfd`|pvJ(`nV8ga{a}h4 zsgJ7|5bQ+wadTR!R+AAm6+Q~Gbz()cfFPvrswC$=uGo%w4_{W$2_pA61;p#)pmPOA z(EWN;#y)CQ7pB~|Zo?RM{g-ahU@75Ah~KV?Qh&IP7(P6?T7hq={8qt&>t8NGK;sDp z3WYNr1u2-yd!u)tWK9EN_|6nH5eEie0Z%HWRzKM6lj)ii> zpgxc@N#xCn3pA2>yJ8O&b|C)mG^o)R`2aJdI-`Rauykt@Qhz9E5EG40JQKcePDxdsStdt za0^@YIR^N8srd#;C^^foTpdVmMpu5rBHf0{LwIdE)tEMsfgvw}uV)}Z%2o;gxTghz zSPrqg7z*S6TMJIP_`oJd7gm+99?L*VV;4WEICuz$t5$cR5sFx;zs2Y zZ&+qy*mou%xRx4WTdNFZW%IG%5EyV zx^E*E7DGcsRRF&K$CwAb9UTnAj;6R5-_T%P$#X5{W=Asq>TBTU^#xM)p@HH(A7cYj zXOUa%+}Q35-dMxk$!ebWmdh)Pe)Ovm%gJz6p<5CX2mk1*@_6U>9lJRa#U4&^i!@{~ zY>leQV-Mdm@MH#xJwX&*wUm8veg3tH$jY6p7vxJq%D^iI%hCLNt^}h(0i$E88ri?j z4Y{O3*2~GtVe`_eIZuI3`q5pXOKmte{|_uH{3Rl~-lDm;5W)%CWS z1WycA687%tMUTQzi=ne59G`V${NYGsgL@0NtHCJT;_dA3oI?l&k+I4f9CPry2H1Koo4c<5f)*8FeTtPn;k_*;f!Tp0|Iv5A{Xo=) zJGH~PYhzf46OoO;4qn?D8U_D@t?!P@asU56(M?y^P3tBNEi+1Gb5PN3mNF0SQTB+2 z?2wS1%IIwu$6m#;9U5e%iBd{s7aB6ksNeH-UDfgVK7Rk)kH`D{d|lW5p0D@o{aTm% zv;{Z~`YT+dg}RUKF9BpnjV}su@nfq7C|vo#&Q@hK7xs7}eW8|hq$4W7Jaj-)= z)4>=;&#d6Ve5dKTT>$l}gN&GcQ%@Xp`_xzgnqe}nPsyd-fcIuWgA_)Q8(bjr9>lZe zAqqJ+#xS#rW&j--gq9zT%`K(2^`#f3Ak5R@0K`&-@1~V2DmOgakbkFDQGA7Zh~I6kT$Pil+@UfJiJ6 zT5Q;sI^)XqezYc@8tO?PDX@Z7R-8?>H_?8q}-y^URGh*yzY_ltPl6>gWU&O&&#ad$~!3Pq! z7C$6!i6^-+g_~k2wG5EZ9$^`9Tt>9 z?9l_rjXAa!ta>Eg7Io&&JnGaa=I*Xo$eCq({2bH|J*I0N`U;nuj8UYxDg5Tl$M}Of?D|xKHpurPTiMRD?J^O5wpd zw|rbh3+peIFd7WNJ=8^5N#c%^%pAYDv>iJ)R$;;NM=M5gEe5Q}Zya9iD zNSmjos8^w14(II=NH-2E_000irR`CxWWY{9lHlt(nLy!~O!Z zY@gXW*$U895o*ES+jur-YFm{9D=WZ@SFKD6!~xU4iLEXR zRAL<^z3>)T@>~LfxMR0gq);>Gu?!Wa-n|ghEF2K-=dmMxt+szgv*bf)AlG?*@@HBn zz9MnZNSt(0F)BHC?uzzfYLXvw^hEFWy0oubEHMX_2HfJ-dRf$de?n(-Wmo@Bp_a~P z=RDEUeR`eV&_WBKqA817fdd8EWBV}o7kGByrJzs!fG!YG#Wok1#M;r}yL_6Af2DEg z5%qE*hQjZIbysHb9*fR*GB|5L+drO-0lV9FrDTQIoVStaolz($C3q4$1;n)WRLtVQ?WOSj%-M! zS1esn4PWUu5?xlZ;2DZ8%z6ekP3o7QNyAVVM0F8d z>EA2v(a5c$q8TgS0ihGj-j(~fVD>NC0l@^AGQ;zp?$Y%M&EL}8t)^qje5Z>M`=!Dl z7uG6e{13gQw}`i_!5B=wVh@g4y}CEE=rv2m9bKXMlE!~6tDdD;!=3E6D~nE_5Ee39 zF`f6e?34W`itF%T#ufYSaBooKtl8)7z@pD9W!$g92aDSPU(bT(D7?9Bqns342pg!_ zlG#S0!MfgPu-n2PCG^^jA`s}UaOcNmT>3Exb(`>R_pA2(#CMx-NBW!P-*eL^0@{qe zI6B(12wNK&I~(cJmqjb)K(<-D00NMXTBa5F^sN)LK zUv+vbM{z5&^HGHImjbm5NT?0N{{{B4nZfL5(^`78K(4d*?28Oy-Qjirr_s^Im?b|| zaV$onLiolm^dsu}JV-Xa3Kwo{$(n51G!ZPq4~I;AWoH>2^i+LVT5Fu&!7UHHp$)f< zP+#tDu6HCaA7B}a6iX#L+BGj9%8-~7 zak~*lupqQr0x$fPzFk@RVue08Dq{5GxuA|FYIC;rhW*gUYYXalgJSfGN?Mx-MR4Q| z2)9lVP)tCQtdpc4G@Emuc+DY^WVTuXzt#iThG8YxsdL7B%_U*;Z&(Hui#g8v%QqrE z%A1v}HKNT`M=frIY6<8x;t7&3V*<2Q-<-nB#IV84vS%d4j}i zE@0#9S{lvcgwEs4%^V8p=F9JSl zu>A1No-SN>z1wdI_=gp(M%TXwE5>q*`gHw4obLkFIj{|@(Ze>r33pskcaiG0bIfqb z3)<C!e{agS)BT&4vV73Bgi3c8&XoK?!DIW5QDr@_5ahapUHtzs)0c z&r*q}f*?}5=KUplS_ze;`4Ya_mJY~FLv)m+_ z*PHdYYp7>Gc2=sE@v;sB9?u69CqmwA(gtw5pFxK{Q48Z)%m%EBi_b6IrBO?uq9NE#HfQ;_>W9F6wz?~e z)0ijI?i===Mm9;Lv0|Q^6>hxKkBz_ResBl15pl3eGz>TYtL*qU8l1Z#)S6+g`?I*2 z%VpY*CAW#i+yhb+$F*f0qzEpGiG`>g`h0o?afbVVf^VY{!bUHtREr0+^wianAE<8+ zXbvO(c9F55gGT?&7A|a%$>2Je^6Q1xZE9I6(+h`SmvXAjcX~}48hRiJ9O?8!dnnRF zX|Yw}zU;YqicH&lR4qM{F49=CkxNui0(8Q59KI+wfljUr790T)#x9{p6^W&pRFtu% z+i*CK`0(%p@#;s+bDP3jCq3XVfi*lv+vtpP7}&TKi^^0FU}1eRaGjfEXVFAFp)u{- zxHaq7rfuC-&2B8#V{Krk*EAbhB5uKyo@i>!KVU1f1{qb+A7wM=9oXib6VKPSM)4^X zTQKEj1&+#3zB2xo=fwN8^K$TtJ$LNoEZxsfya!2ADhv`kvvZMPsWJMUf4c+m8pf(J z8q#NYNaLkdOcy_C;Hz!5i(-wk=Wm}x42f&#>r<9yA=k^LI#`Newp}A zSBW~-D;Zfoc41uuK^(~faAuOyCF>7$$!W`Uc8dtd{@kT-mzcE=`)tQTcS8$fZdl(g zQJ;Z9;~Fh%R7itXME_;ZYLC_ntHdw3q{VihXvkg=>MPxFeN-Ox?+OBzO6F{B96yltKZNIwo^U}B=Rq*I z;*E~4=;2D{e25+nf)+w}*!AI|Dth=c0ZaL?6*@absKq)Cia^MnbVT*FKVsgTuznKA6K!M!}#ObBRriW$4-@T zIlfU(XdJ4kexA3*i2*|`3JtC>oy(*WGP_a2*=Ohc^65>DW(X}odwOX9Q=DjKqpClwyN z^VMIUY0#SB>4=9|KlYiB3P`cWe^_cLNH9%B$b>naQh4aR(90^KzthqXSzGWw5WmwE zwwmIVLU-I`nPiyphD@jk&yb{X(FoITsdnWjpMIH40-H8ora^%wZBBy!BRm$qzFEUs@PMoS|Wo&88-u7^IcU~Ahp;?$EI zCk^O(FO~jBzYa5Id0jm{_=A3{p3<}#pxu_Hwy^G)Li~ds!j)fPkn^3oBoiT|eQe-+ zos|6hwy;w{%Ie?U7V&RmA?(N5PnKzy%3snmE$d%bdloFoeu@%DP}?aoen4rTpBBIk z>v41je|HAj$-Y4)sWdLFsDYzmT;Mv%!6ipny#KMYz!>X%THHo;R8UlsWJG5Q-=@7z z5>2TwULLHnHf5n9&;%0~$`L+l}Q&2jj+50l5m{8nS+@P#6 z2`#-l4^V3n8pKL3D*UAS0ord#^I=AR8y4$g&z!cd#_eM$-hFvXWzi5|=B(_JB8(5X zF3qD&Wq}uDIN7vjHeS$))mpEXX`fhBOVeWsBrM$?);dyZ2AM&>QGw|M~A3+ zVF%_I@FSK5W()(=4v@nPq<8WvfETL8Of2{3A6H|Ynd7qV-WiN`N52o%13}qdq(o*o zx42WAZamM%ZN0CfOl?qf5M{(maJI(%dyNroN8T5oX}YyZWu^K;C%WHlgb8nA>w z8%L(Pp_nR_mA=XjKy|0OYHt>Q6Jy|b6U^y(Ws^J_a=KP_)6z^B>vw zXIFf2BBTvf8AxZZZ&N^5SzCHb%>|dPbyrhTjrl)2@RpcE7uGFaF;nOAGpJ7kOvduro=xZM%MNiZID2Y{x>$RGH+)V1u+C%WB16Rh04M9foZ=0jc55SrW210;*Q}Fpd-M$BiL^h(GAk1sC zoYUXew}j@{ktN&%n>qW*+KBE)(2loI$+QYxAJf6=MBrlX=b#?ht|&S)=li&x#ckUn z=;j6z+KQQHi+Xn`gPy2l5-acLuLrX;$%;0S!#g1`ZwXje!BAfVZkormJN|f!3pK&20OjOp%O1iLWRsrNt>HFo>7iUr(S-J{S$RcnTG|`$HU$Z})i$ilrf9tszr& z1#c3}XmL}B3w6Kujc!0gnMsNwNbl=kmI<^9hGE{YHr=MM0UwpESV4`aoQwAHe@yFk zIMYkTq0#NBzQDalP|+BEtvbkT@nS_^rqc)Soz+#9L&_Rg5slW>X~8wVc8Ps_kvMB|(5 zNZ6fpsQgT=_>At%HdA54+^<7vG&}>9XQIq&2ePZRpK(w@j9Cb2}`! z7a!E!L}h~7PtK41vQhL$D%dk8F{i&okTFXL{`-IPHR zzmm{}+%CP43|hP@Dz;%~Z(s~_va!Zwn?4lNTht;rhrmN}g3tPk4$z>Qlv7 zN!0%H8753G7Xrb69EFEOb$`wy7_@S+MYmKUUMxNbv*PSUc$aye$-ROEnVL9sWG4#%qUMWnUAx7bf0d_GeOyJjjT?kEnMr# zgeCF%xizaZ(|8VLp1-!PkQA;g%O>vQ1TPno%%#fagJDv zJ^dV};}3IPh4a#z_?~k-?&VvaD}1Eg`%U{vyKHVTNz;7fsUSL&qZtMS+o?XBWzQh&HqyWQ_?&%K$8*Tb4iIGXP=@$|jC|zCI{}Txh zi>P}}y<7BTx@~b&F6+EbradL+13`tKh@Q7jcebWjF@_sr z>h#VDwZW{Q7>e`${n9_sHFY)fEm8RMDLu-c(D}3m&seta1mE>QYYCzYklH?d-3%xm zYWLRAP^_)T3j?8Rw0Ho!iXbsXRjXv$D~s;RK@(C>gLfc*=}08Fcl>~MZJaYYi?+eK z-*ANYe^97-+xMDxiNCL}hgQ9S!^Y24Fd)JFJ2c?&PqJog5OG*DXxWkU!^I~4sG?=D zkwuh3S>ch@!HQ1C-fTfBtZ-`%Pe_Rey6G~|rW#yYx5mQ7dNVs%rU;O@L>_t7f!S6- z7AU{-o3_9~P`7ZVAD*PqNgB!=Dq!btrrm|*mE#~8p8VxLNgi9Nel};_Wx@0QD26eI zPhcY}cD5IqAXu%ShSCl&;IuxrN>za*oJfvvkJQiZ5eti;q6u3$vR$1mJgPB_gO?_c zxJQd+8}qCLhrG6F?KdYBw^Pxa#ooj5P+o)FPJ5n#PsAz1Wm^4brZ|FPM+1ck`!PV( zS2Rylp4cm>t#*niu3{eCP-~q6lJp{(^EZXBBw){rL@U<+8`!0wP7tijI#t+LZH!lx z(s{Lu>3zrW;;RTvS?n7qkwmjx6(rSZBdzbR0?BTXB)v*;feWzMl1|6V9iF>JTp=3tRnOn}R*>{`}G2bzYvXh@TKnP2E|Aek zHi@!T8c5yNO?|W!SX3R>l64AcuZS#!cwyIFEtmf47WbOY&FBVP`b*)(r~G^L7YVTk zv5JabanO~&=6>^?ku3Mj`OuE}|H5jpe+_qB+~c51ZWk)&dA(M-G~s`XPa2EYEcg3L z@vgw_xPJRPZMnlc-IZ|3sZsbyPLA01X&1|=!Hh*sX}{z*R;8<1_>@@HQ4k06yQX)1 zMS}A&yjrgW3KPhqb&?|q3=*@xiRI2a)0EJSIp|ojrM-NhMa99zH#=PO*$EGx5FZ48 zDzUd<(Q#N4W!f`k+G|&2&(kurc=oEVfq ztnV}{XpAnT-hs-|UIPM)Y`Og}Y9I7qjg|8x$Bz8G*OxtOtb{UIQ#ngw61U)2M>a|m zWxq5RM0!yB3dVyq`g>-U(yoYQo=uc3SnJNxHY`k{bmJn-SQDg#N} zntOMbzyTiD6<@t}e`2rnMoxpJGD+Xsd+FZndNXAk_Gg*>5MdJqB|<0Xuu1DS@u&px zk30V6wG^~FLdH*RQ9~>{k@i^Y$1X_Or=xV0Osu?CY|7$vAh{3IRl0Mr+yKF6;x;>| ztMrvU-tk^5fuV0-nHZCU8a zR=O-`e?T8WFTfe+mwuu1`yPwZSB6M>S6Ns8$@c1Fh|{M-DEE4TruckZp~X}s&>&wQ zHaU^xoCid0$kGjzUfh=x;}hwiN@i&?r5Q7?XkcfPp=8oowHR#gub-8^AbCh6m$|7o z67P@@mBPYWD1*52-6LKQt4d{IEtM9`u?nMVJ_wz-;+FV`?nP+?1W8V8n)YQd+uTxV z71;|pTsH5$6+Q7p20ek;+fViek>}>XuZ{Lzr%Snlr&1Djdd5mCmi|SFWA({w zd(mw2a@t$LXXYurq7}0>QI3*)(;a-zg6WxHvqYI-(x=S?94sh&|Ca@?3IcS#l;n3812f=#j39Y53`foYoFa&F3xP_<$5l`yH@b- ze9lIhfmwA-Sz9?CXaUo+z)A`?S0Y7TQfobgdz!RlX6D$#HhrdMxPhdwfneQ%Bm;AHs|<{w*lAn%*A(JASwP|k}j-AH!ML% zH!P@?BL;mTNv))TM8blkDnmx11$=vwgv-}^+SEZh?Zwk3%}Ujc`Q4eP&zXE0Rz3qy ze?YQT4AbeAI!-LUr?NMB?{Yi5=X~`5_>n-yJ-a?txI&h)pbpAF&gklh7u44>7Ss`) zvl}h_PYVJjq^UNLOy2M!&6Cx3z&bH~?lO?&bi{FR@$J(TYH$U!vsNzUsvag6(T4rR z&RHuLbAdy}TTLZ%=%n-)@0&lScKCq%W+!Dwmhf_Jf0o{Qk!<~?PRh%dI;pO?vo4E$ zWc(+?e{0v`HC~#U%xQtc3f5{REFA}rbb3b{V=|k!QZ-MSG3-!D0E$yIG2<4eTY0mc z&fa~5(?&XY^qFcpZKl>?$aof{Qb>!J3>NN2(;BK_8WvUCe4FDF1*fj*_|M>l4oH@{ zO6AJ0u1*qkv@=lavrE(XH$7+h5s0WWa+`i9E5uB;I9N56+tIk{7xBSa$a8^N`%gth zuF2e%*TV#B%WOi0qe&B~FjNz{h<jD_VRKA=}TIWRKstc)T#@y%1k)Ef~qB=Y7$tTBB z=^$Ff!ZxVjie|9q1KkG}GmVX^VD9Y|=W@DqEMc3eIADlvKDA&e3)_UhwBMu}&t2JY zPw>cDMs?oO;pd;05gQ1kv2va#7uY~=;p~yJo!c|%>{(ui86sb|E=2OpnCFXa`LAZc zR-oVUOQ78|*`k7{!QZpIc_*_5AO&PgYa0HFFA6DW!q?k5^FN*HC*#`O0xd2rLVl zA?ae3eIX6vTEhH&<%q`-6cnRz$&S{4l1s+!5Ed4$n#wP#7@zHg;yN_P`Di=rfL`5NRP36P)|KgoU=fEbhc3QpEj)NEXcz)ojps#d7Z5ClO_F=vZ8m)bJpQ^{X z3cB%bAxMQUdl@fxsF#E$E4oGQL~{#II6fN#noyC(Rd{<`!E8CVC-+n~Iqh#{aXVEj zxWe#VSu~SjEMt$#fR*d$;p0QrSg3*#5-Ib_5L7g4YIayzzg=4N~)dhe`a+GY_A z04@;p^)`!_ICQ+mRAkdFdK;loYTQA*5%dnO+|aOyXHEdN6VOroqMOBDRqx0Vh!e4@ z*i=j7w1YrvhL61AeA$b;4h@Lpl3UN8-I;SFc!Ad*)htQhm0!QX<(JBInMaTvyXJ|!fj-a%9yR#ixlKEpj<-o#1tCP-7Mn( zn2BFoRVQ+^>?)o$raRxHdjZ`;sAXhhHNJ4MAO3Ow^Z7a56OcLJ{EvLvkA3yIKf0IS zT83x#{(qkNJr!ojN{BidY8Os1Gb5g6Wgk7Tf{T1&@{49=Kl6=72V+)Yg2SWG)C_&? zJlfR<2(V*OVdhPkaWsHaEK=8+Q=V%^*v`eibt>veOKcoSkc=U-f(|o75DQp z7VdjTMaYajTm~yM91vigz`yV&L+xJC<^LG)bE_R%BN|x#yBEp3w<85t^5Y_IL1w)^ z%tnfZlswDoK{6gaarxX4m4OB~WBF8Jv7Tfow`Dh$A_->s3AHQt`S9l_#C}c@V8wio zfl=KEnkZb?PUF3?Yq13LkEwilZHKQ#M?rZ;tTkeO$5olU&44k2`r@ouTX!|^J-kZJ z=l9?L!3ht<0MZGe{h3KB^jM>2a$=)2e8&Vnv!iMdv>1y>#Pd=X~n@IbnSP@ANm-#N^^c z)NeQf?)~~S!4+!O252A#L%CsBgG)`7ZpQ-RF7ZTX!Ditkg7Nu0J4ElP`~199OcpdJ@hQ@G+M%Zi=w z#GQsGkdtgCbR2~;b4+O7?2Snm6(Knx8Zov*-0B=!U z!Iqlgy6`>8QxDPen;Ridh046(WQS`TU-MNZIR2yn+LLUKFCx;p?RjjKOncCuiFC}T z(r|5b=tTCxI%A8V_Q^^c{>}+_nuxb&PMh$FOkE>?SALm2mq}2%2(@F;-&VQ`HWR*P zLC#C!T^WGRZE`^N`et+BQ%1&(*N4svp>mlbWXjYT@G`dk(lrwZfOWSsg)T>lxKaoFO3L`(IC4r$jBkKbDW z$|E+hb&b3g8*mpQ00r#v85U#ilKh{K$NaZo#GF2o3{r9GF^R0tQM)P=Sq2-N76eOn z(*x^LTLUft?2(DwBJPPQH|dh4Z8J!sETq4&)M#0!#upUpE(tO5G~GpbqG$`I8yg3k zPsdZvkLlFn6D^+?A|zvGp$>KT|F~N!Ilu1MhS$W!U)JL`QWz+N-ceW?zbN8JAqk|f z>Ty9qK;9+%hvV7bi9fyuqzH8Yb0Vc9;vMADix1l7(^>e28apaPjtsvg_=;dbakHlI zvQ)WBx9#5bgf`6E-w9f>-rcZ(1s-0V_~I?i>bp7uWQ%EtcOw^g>4E_lvS|>D8{VM1 z6%vc!xht@purt^qCk7ozra*)ew6R%ni|(S%%X0*rVPhtQ$+R1}RZ=tF13p*WqBRR@ zhIGr}zx<)<@Cz5c!TH{|odxaBhkBy$t;n5i8-sIQAfg*H-;R&0rYZO+5_Mw7=0UJs z^K)hrO?y9V}yI_f-q|d({U8Ye0ED<)&a&e=#&pr^{j? z{H%f%Jivu#{H#Oy)bUSLG+`4MoQmzohd=~uAXZ zFDbNnKmUfNg*hOF0gbB=KBsg4l%PESf;KqM(SxEl1yKy~>mfQ6?!}T8n9g^P;C$l5 zUwK6XL%5By1Cjd?2;8;&jI>x1_DRIBWT zYac(Qd7N-#`B_g?xZ!`=fB276>D2yTB98dueb8c-UtK2Szg*sSht9H^`bT4H%{#Kt z3{2!*zxK(*$7=z(ML7I!J6c^GDR|EO!6s+oau_DN|HJ~68dNl3HJPfh+|j}@X~c0F zF~uWQkkqrIRV}TG#u9XIWDd467yyh^6vnx9(##LE-!$1@k5$w8eSe(Kq&+5)z+k?u zevd(jk#pOIJ^V>e9D4 z3}NYE*r~!Up;% zZ^up*n4V4k*@HaSatDGu$mQaFDaH`k9$ znFjmVoAnN21n<%lcLk+^E{n@m1xSr8F4mBcrANbTw-i|=1jjc!eQf@)WyC^a&wn2W z0{uDy9H60c7}m)kiI4&Kff1vbG`T}9?KguuDtMEasF4u-8zlD253GbpD;Z16!`7U< zy~jghrqJ)@(N!y7HHllWtyejn94#B_(Df_>TpH@FkNg(-l6<#i`WHaIAvOM$OLC(z6^&V1fod|>$-1rJ zieagLzW&$-AQFXM|P?r1xyymHLwa_68X896Z!sFba$5TLONks$Z z_X=F)V+`VP%CnH9)+<~NUrTaB5@OspcX=RqY*;lAdvT-B{8Q+R7qnruZ_voNC4Bvr zy-LxIdAwHXbJAX;iZD7tQe3sy&=vtJ+V?QIC&*)Yl)_bqzO(e@~h9k z)4;VSia=?keUqX=D0ZOf*4rkBUX?;f1V@XgM$2V^+2|^ZVLWQv>Yk$q&4T za&01?{+c+cJ!<{-fLr2>?#)*9hV4J=bVR8;AO}E&w>k}F>Fc-tCb9G7D_`CsIl8Ne zgGn7nR!$ONxcmDx1;65MZ0ARnH(xRDdOH1ecTigFg@`)wq_^Od$8~n}dO@O04;EOe zn$G2AjQT-asVB=Q$9k+Oh2re#kClQ(s+U-2{#t@eKN>6X73dy5Q0L$t#XUb{CWLzQ zZXjtPvIs}xB_NrPa5Y<7A&9Y$NYP~{E~$dyHEeC2XT;H2Ti;Pj`Vz%-&cG}unVJj_ zyb5qJ9doE(1?N8D5A(D=1$Ux;gf8aJe0!WnM|FP~+Eoj={q|c^%~2dcr~y;Am;Cl; zOi;&~@9Xo7)Ul2t31^AdMK z`|r-UdxQtu^z#~3#;#B5c zH<^M>$*IppA-Y#ClIVU_&EPD5j8FB)V}r%IdHWs4hzCQAH*Rg@GQqLog|BJ<4}par zJ>S%9^+)2UL+ObYEbm9FI^JK~Unx4E`1kRBK*Kytq!?MH@{sDS+FwZ=a5#0+vap3Y zGpmLf6Q1ADPO0V?NT+Ky`$*@_h&qCPY(_O!naA;7HDqCPWuw01`s%w&UbpMvEF$L$ z&4v_^Z0|;B2*-B|Ev6%OBo*5*CkL<>QL=$0h)<1fBv^vnF_xB54sctfJuQfVWI*Fv zrd@bT@~Vf3BkW@YewRBnCx2CfVr=%P5)M_}*V`WRnJ3iOyQgGQv1|;cE@`BQED}acw@*V5&si z1k8F0KfiPT7c@d@v9gmmd4jp=uks^RwEa8*IUj;7qNAxE!#`ZLJ>C_TlJoo<^^s7|? zm`=bEE__OH30*K|P!ahEv&ei*89+o8%)yaDgx^edP)i-m?bstJod#l9Z8$Yjjr3|a z6sl*Oi&2whTCbB5$uI_+4X5@Lt*E!Bu766R>>LCLsb_P?vkLCfZ5rkpsd_5U#x{C5 zAH}&CpmUy`yy+SMO=L5*3m-ht2X$FN}<(Cd6#72BrL~}K~K=JV) zan>AP;|j1b#OT%tpuU7|=XSThDu{u8R5W6$?)a9Uu-|-1foErZ`LPp-{qYBSHf{T` z{9a3ul&5Ea?aR5ZY*9fnNdVPBJk(Y1;v`GD{-9Y$wqiZ? zLas?>Uttj}#Fz0aGUCIMV0S$tu zjo?)>)arzwri3qp4ExRLFN?aKrX7Uml-hbo2CeO-gyJ(!&ZfF7Z`_;#qIPWir@o&F zT}J2%PVsB}9oj&FB5`;NwUUnQ#g;AArAw~(@vs4T|=lb zxugHdqDRA4>+;U(-f94AS%NVhi|=AQnawrEQu(rdieOs{A;6b&uwV3IDP>jU% z1;y4v2wh!HrJaqw7ZE?(B;uV(pcnmmxFa{V*7@Ycv{rk;qa1fBW8c^UTMY{Hx3fU= zOO1@n*ZTNY&GiTgi!K9|p}%%*_}B@zpk<^<_l$ZsHx^(>?=AqjwmdJT8{nvJ04 z4WlB4$eE;YvND?S2ZRh4@X50RU~xj;ggrk24Xo2jIR4VBBvA%EKlNh?CTc`USmEXX z8X?lvmFvD~brmtaZS?RAQBitG=S4d8aXZynK$8Q7gl3pFdAgA}5>|yF|E7X-~&L8{QsCl%{pAO|HV@yID*Jb)U=8 z?bS^*xKk-Re#}7S9;!Se*-%>i(2*Uq#CY87phnz%YdDAsZU>rv_ij_~_7Pz#7Iqr! zT3{+Lk91|V+WsDYkP?%OxLge3RBS+I@TpYsU%@|EPG!&Ee7XZp)9A+~BaZcn!TC;Iav1iE`Ci_elmgMdOtbgZmGn2oNj-F-iKTf$}NII;ZO}n;=fevz&vkRH)SIqbGE_*>Zk%-~H3$sUW%4 zKr)BV~bcQ-`^yoA3boAcA zRMk9eik!-IAzE_2%>SPcv?1?`khz#cCvG54_mU=4^85kaV`+n+2uh!aq{Bm-7Shhgl*?SClSY^!r+9T*a0Gxe z;2^a%yP=6M$2ys=!b}~42j2ac55JIp2Y!HrhKG0HSm(iNcW#np+f?dt3IXjzy^^N` zu8Emfo;)NWBb8|kfspaSzT~#tI(Sv{w19hk{-^ z0nNYwOx}w$x*oy$__obZu%1ZYuj#V^WwNwkSX6#Dp}<=@49se@-rjGE0X!lgj;}JY z6}*HVi?8S``cF(Kn2}7&^a*N%;~dOc-x2CLd`gZ(9_^~E`r7y^YkUWV6lo+<@dq5O z1(7OS#Jl{))$QEo$h5AszC#oIlvTKaP3nxoeL?UZ(d`e_PVZ)yvnK$}A=Hs6Zs1fX zm2Sr1UV|F!gY~2W+JU)*MsRUAZaycD`;3bC8rliGPY}4%${|Fz{v@P*%wrMm>W*So z6*?rig=>^a^c0d6xMM?D+PxKYY0sIShdPimVBd-c0xcjEpXN(|{U^GuUtea?POZ-^ z`eS(lotT9UXj6P>sy%tf3ZCSmPYQQeqpF%@8{{acdr4CyR8xC#i<*xAMrX+jmN6QQ z^%k*xM?=U+Wx8P&*(7uI`c2Wpqn8KU7mu zIrCqAZ0xXOCDdd zy5|b?6QSEVv&+@@X&qKl5q65!@MrdT0fV{VTpY3UL^(~$XF?G~Txx+&!7H$%s{3@l zL#yWt0XV|`or7SmTXK9nn*2hnI*ofmhvrw}Ub>;iUBtEHp{dsAH4F@&(Ixg9MlK`F z80{O<2JW}%_`v2Im3juh;QqEsVnS6S4iiUvqbBUbE%|U!ZmaDV)Qx!!^Va9@NTYx3 z1ZA~IxmCo2zHXHBH}`f-B2o6c2z5YKZ}lYpQOzO2f8qyfE5eQcWL{q2sRurfyhls@ zr&w#v3cb{7UUpBJtKal`kgWib&mzLL*V+5nQcF*d) zf>pd0`j9E$Z{ZiAz!XIG^HXpd{GHe+Qx5U`kIQLO)S(*OvW-njX!jr*5H!{D{d^celGu0uSmAv&^(xo(|q9I~rf9Jo zZK6_XUuiXv@a)4qxWqcmLPNg1X?4eb?6;?0<9BS1r!2%>wG~Xf_TcE+j%w6joEaX{f#zN;{FPl$a zBV^5M4$76u4rc7Rv1gsvhvRJobeQj}Ax5nu!uF!2xWVkrH*0KENRqU!h}+`(uT7e= z=uInIL?%vk;a-+XztKUYhfHY@tF#|F)a8izFBePHf=6HIOw$)h?pLW`_oXx}e=KtS zL9D=l0AFrL($Z2|Q!-}cqh2F*oU<>3m{^M@*d>#b<<^3CNcagq7iru1!-TV}WgP_V z-2)_TCATyw-}IVbcQho-U$YbZ?+}&2J8ju@i?(VjbR#$ghW~OuEcwKs>OvBJjl^1n zxRX~zm_JyU{BMIw@(wi?AzOS0eO*76J|7}#)wd1F1eu7C1&d9_N0!6K;ZyR_^Px-` za3eF5a8nV-N01(3-N0T3H?6TdztPOLu7~2gSVFr^(D=BF64H5^0kZ7X(FDG&9qS^e z=PkfJY~0PH`$vJBi+EI>!GgT~9h9l*#850)&_eYJ>5cU3AE{_bLvXH#Wf$7|uDl}i z*kig&S>XlIY48cSyh!cFcb!-Ih9~9kXTiC`T10hkAp97vCCHYnKg~hB6?-t*R!Kv<*8KsGiQ9j!An)hZ$mc zm*Z$P(OMf%ET9XETS0q%IfQ!NU0pZ?b#_#T24u+f*z6TJE}AxqDyJc`Cty40T2Lvt z0ykL^a{tMtQSOTI+L{R=>E}xIc)lWfMGF0MH?h`=1qES7Ci?Bpr={8* zwZV%m+lUsL=q6C#Ub)bumWI6tas?R@hw^K6Q&M;b^=?g*`=C9W_4% zKc!9Cm+5Ulk1QfOn6U7%A+Frobz{HN75+~VNOw^~o|wmBi-f_RRDKOA(Y0SkeuuRS=>!;C7`~*DeQL{{}jITD7TB^POo3yoq}(A0WQ-c?gb( zAAijHK(qt?4=sz=(Zlxh;h+|w2I#KvlW|vF&R32Fu_F=VYL(^Cj1qI;JIB5X{KdpJ zO<42iD~AZSU#?yH>Qs^ooEnG`jJpvR-Kguxg%EHvpZ2XYfs45#zSnYSD-C238`Mj= zUjC-9EKnRoXe-JxRF~JgHgDRD_IJ zYPNiwc!dhz0$#PEX437ez=!>YkN&@k0MSLdWz(O;Z->`Y+CE2E7<2)ye1+AW9NH2i z043yrd72!ChoaDkI87u*G0iT|^8xNE;>M(??#R5Fc5DZc7aXGmsf+#|FF1|5i6oF~ zpkU_bm_AOT!5P^^GqPjHdS9H-_1)OD>Mi=nVp{QFFJN~T6oIkW|D=NpD-Tz%<9_US z5$jY2Tf-43_c%*J{yrQoAQ7=-$^Va z<-{0~#IC2RE(_A&=;{Ij#xmdS>UmtVRSPTWRpY3LPos~O7%-h3*!V|M&1%d6j2D6B zJJcThxcs08G)#Y?j~UxDY5rNX7~x)e0`tpuLdRO3C6F zMy%NYG58P{6E{zNZu`I?CG+q)6`>b7_>2pAAkL;XBoWe%!#dsC8vaY)p1nt31 z`{_$J!S*p#M1%4jTCtydASMM^K24(0oJPP*&dg?s5THJtCG5pn5iwu;jTz7xRBXvc z?1RqusD*0I_|x%BQfCAZAyRrCQcLj-JN10-QR{2P z>i{euK+Zf4t2b~fv~piAMcqQGOW^hgMikPsi>TRfglNPmxxLKfy_B4SAw zdL?fYA&;l66^PoC_xrB+JEG3wFvG8c4yQUw-M!EgH}jEbb&)d(yVO zkRDUyh4X^1hR}(N*45C<8JK`(dLe?;yv$zjUNe;w^ zwRg^uaiitof^lsvi#iLz;(+bbZ^57op`tAddez-s%wQ}ia&=Y*wP@-oL^7TLeJGP2pE3V= zZF_)QF!Vx01qVY#k zeC!Y*BVtzYBSD@*Zm)M^A-~K{R&W_BZji6*9ioh6o>#!*7VGw^raJ?pB3#k^@PW}t z2L%7@Joq-5gwIG6LnQDaL%u0Wblj|!m0%p%PXLsJ+u?k4;Dx>56za-Z zM_v^^4sd{Z{;Lk*J6a6Cr@%|2&<_6+hq1ygt+j{JeA0|$LFpDPBF17a3gL)2?Z!f{w5Sa>$m?^O8oy2)y?FlDK9^#i{am__9m9um6z=w(iQnI6??K#e2n=gVE3eb{LQjbmulm|@SF-2NRAT;9QEh8wqy4bFu9@Oi{#wW$3rTp zi6@w4qB@WtdF)~#P3}qj-NX+Lf@d}k37mm^pv@7%qIn9Cb2L(-bh!n!PHyQg!F%HL zZ?*V(?Je~veyH!r5}NEYB2+io?zi!-?Q{2}(e?E#AiaIo)+}Wo&RfB!5lQ)xn-o_e z{`G;E&!}lJB9RUGl0l6}sWW%IXen%@SU~`2MCmSszLHW8Ar$oj zYSTXA=*H?5lRNM!?-vLM@(X?}?|8zAjQ&B*PZt9dx3Ep8B`psV1ZeP;;GEpQ?oAPL1IJSlPV%YRn(TfGZc3Ck zg*P?0`GwYL0{R~w-wx8#rFOp?Y~!YZD6FKahAwxBB2jA=bE#d=|J)n-Cci!x(t@}p z;&u7pYKJV4^WWn4J|NC^8<0bVgDuN#juh%at>G6R(o0A`o+KisEao8+nIZqDD_@%0 zCY~ncjtJp0p9vndzcl(Ajrd*ET9~#%?vqUh|C!YwEOkU&<$5FAq*)-kClXC&`+Bc} z3mD9I{Pcw;kLa|#FG5Dl<_qE>1x6?M01bTND0s_103KXo*`9K2z{X17RuGnb)SA2R zsh7#XGfFJMzZ+unJ)dCj93S*q@Yi`L;?DHZ09SsH&Bk|h@TZ8iZP=VFwHH6YJWoiC znu=QIO5A^Z79we;pzcNrW&}1O&YvGKVvLYeJ*}R|D_cF5&w8?;gg9HeSlf!Zn;=o8 zaGC$8SXW7>X9k;`3n6+>3SvbCv9mybt(@C=F(jMxZkZyQ_El~dnFCRILs2JTB|d7X zN4A7-axJzo2Qo%w=a^CwJ{~uq9P=&Hs~b4Mv#d%QSw$1`gh>3kCuZx3dZdXcZW}f~AEZ?hNA2$GpFK&;~=sfCL z4ol02Oi_ML%$|g6ui&0bF`aXFjrp<+B)LS=1)p^{*JCaAwbf=}_cGsAstoBu~)W(9N4q0i4#LqU;86qd~9E8L}jCqrPIJ~;IDds$gZkmZYH zsj(e;;$K|31rKZmH?!wdkIUls`c;mHW`m%R7R=ao>B13M&>Rcwi9i2{F7ibpg6~!~cp$=opsRQfjf$`m61=})8n18| zTD-(zc<|_jpQPD(Db_{4R8Qe@YED(tGI~XIGdb?$ig$FJy=MNe)U){}nNRXbEPI2$ z(x`?eJm@F*n{bUJhjl({K^wtw^sR`uVhdlxUO4n!J3;oucV%Cz7xFi@nFz6C#q~rp z-@qXGy>tINbblyeac|Tsc*(-MB_wCRC!%Ru*5a-2NuMrv=t%#-%HClO6~0xE=A3`d z%bkk4k5s2%PWDjErMFoF^W5^IwGs_Pz+494roruPGw%-Bnh^H#j)vd|WI17*lk1?g zCU$u|t)z0A0KHmyFL8?q>XWn%-Ud?D?Q1`xK~Pag(1P{r)e(Vum!Rnmd#^qr4NT4W zNn7Gm1Hrz95P2vokoMJE%CDr|s%*kMKH|PS;3otvW&VDU3yNT;Ihko)o;_5N!U=2xnotNnc462VsZ4drtDQ~GPgaKZahJO6&w zSDM+XI;2n!ADtIsi^>DHxM&ZKeVjntx4I6FeXEJD)9-E44AJqFk_%>BZJX47x12!p zU7%T~UEFb70=4r;lgJA7EbZ^FFT9|2@)K|=cI{O+1X2sm!xi7#3S9aZI*{=TB1ye% z9QltYN656#CFj$ot`T8F7N@VNC;C(iZr6e+@V!-d5{Uw}zY#TK9zXnf*aDCOg&c(E z-AgYe8f0Uwz=(R(IOrlM1E$$E*sGV<{VXMcK!aseLXB`ZVB}M3Z6hkSWV42ON?FWq zZ_#mBcV2BV3BHZ#MJ?EwRS@sfK4W7o`jYpREEbwgp$)5XfKL_O)&CO`w%Se>((Orr zr`I&}bOn+REo*tCnwD=95rUZ561K%~b58_cP;{504I(AK&3;YmrRo3BI5pMNV!HET z9WdwNBtS|5sr;`C$;3&unqqD0xL65+j6&o#5|iLtTKp*!-=}n%aClWhEz~#2d^cWj zoZ<6Z)IK8asx3loSm8fPxsc(Cx0tK7hF$1vRG@W@rwE0=GW*3^!`>_B6U2>#(TrI0ue9 zZhmBeqAnF%GP@rTJ^vqB-x(HF(zI=s!x?j3MM1!@X2pOB1k90{F=0Z$oDeXs zSq!vcU0`+9HRG;1fnr1?C}sszOo)IH1MuBdXF#9#`!m-yUEO^;R99E(DnFI^HM-eN z(doKJNO#Qd`N+a6?N9jrlt48^@DD$W$j4PAVf_QQ#)%_l4`@xys61HCcf7=gVsrG6 z9O!@uxa5(+HsY~IEICPlg#tpLu_CYyq5H-q5kA*M>4?NC)~x*INQMhSrWFuA)DnG) zfjgf%j!z+)XDLn=Lq<6J=xrQHn^wZL1bVw+g&PaWo?V;%f*$5oftxQqR2Y`5=ingL zWq``!U=@!l;>y#>hy+E>8AE<+m`LoK4IWi$%|vE-H@K6ohXZh%Q=3!B;nkJ^8>EU` zQ=j+7UpxBSSUhpTv#qn0@alfuEI7Z}AA)AvdyV(4a8$9UDt6+}svdr1DTRrNB4~BU z3^0>AS1`d3ozOspR?#kzbQ?pi(S3j<*j2R1k4ugROs(PZ2Yq>iapp#g zD!wNI&`6jXX%UfWxEaSkYa?DBoPxlz(;B?p0%&7`W=Yq=HWw4gbELnp6tN#eSrR^{ z)w%cSYG@)-jkUJI=OU6PM@!m%Qr@9D*`$+dS_T*sc^{EmIJ{N-rr%!@J$52sfaLeI z-z`D~XVFQ81y;u^B90+0sPDwoyM(XJ6lifAyfuHu!lLJjlKX}4`Gi_7R3$+6irm5R z23>)nsa4$U#T}J)fSkECERNR2O(}IQOBmwH9&f7kkw&jO1KylYV#Im)z-!EbSFG;f zN0H}h4^F19v@le#Q_}pg&&0PCA360}OL4xsHc;B$u=nHcsM?DDg2bw|)1^v&1D+B` z@S9Q=I!XtHb`SU|9=Tm1ivX=ftO>CB%q%28{K>hpe`whE#6miAZK%ow>0(;Zds;Ar zrluBsXIYwyzQbXfW1okWE8W7Ce^N1%gmyfUAwW?z4+Ca+?}M#Z zZkd)t>(fC*)X;|DJy>QDeX=9{t%(RZmQ_hj>nR<))tmj2I}yNKY&X*mm!6Ja&t;uO zd2>wvk6{@XZP3n-p4$10g-*#*o0!^q7L4T<0Huvc&YgX6yuwdg7aTcC?t zuUt3`em9Yfzw(B5+u3H^9jzmrEgMq&I8S-#m^hbZbBEtqpGpv$@tMIZ~+lC{0z1UUmqYr@n2q>h) zrVEQ`1^Pph)J{_^Yp}VH_G$oOy1Ir33_D#AmWI8V&HG&|q04um$g=}QTW+TvDLIBM zxlemHh{^(`oQA(~Fp9zS*G?Q-iexeTy8Y0r5Qt(FtSq|U>jLU!h*Cv2-@LlW^TtaJ zHZD)xJdl}yp(0QN0;e7no=m7XOyp^R{d-L3aUzM~LhpdTT_bYX{eA@fwGwX~v_8`A z*U`B&fssm?UmY!+{=nXt_x;g4j@TPN%#2)LruQ3*38JnfWTPJ_j8v^h71>c5mg-cZUw2fKd1iyQG zr20hiWlwoZ53vzEP~?c|4j0185^cHHQWt%ftD4;K2Spi2KI zTd2|JY|a)sm7tTPLApttjCz_<896@tOE0=RJ|F~`u9S^*0%;o7X%1)ZnL#5n0cr9Z z2sbh8sFL1Dk`}h$M94EmGiP*La=aSHB%UQ4n&C!lI**cEb_FXy(F>$6XN~UD63r&) zBKZ$@=dUCk&7l>m4+m7;T|Dw5@l$12_c}kvnM;cmVd;Stq3k8+7VrE-$TrVV{A>1- z#f>*!Bl0o7tO*i_v{!JqN70<;gu5XGbGPz_!a3~7L-*&X520u z-9RIGdPw!pK4)r=fG!Tx0egw*1(^PdJ3z7XtKuzM5k}m|0*sho3WPm+da3gS%RR8=f=K19Z9Cm2Ec(+t&c3 zGY7UK{)OSOOw$o&EPk#9DEw^2CZe|{6bptJL#p7^p4qf>>u7iMYXFN5F2y95c28K- z7GZ#4J=ub-!lLbV!HVF3)xKT>y4snQ+jFU(HhMD#55hdD4 zRc1(27yWyIM2JmF3#>o~W-(;rjV_!}I1=MrXQ3Qegylv~Oxg4Jz!I9cP(ZbX&+nD0 zh~$o1LzcPivxlb9Mr{T>)xyn2{QevnS8sOGc2jkUd(Lsfx6m|#_F924E0Y_~Z`GQc zX02mQ-B!Rsy!%f^?%Ez8`J88!58q?)qL601O~kkZ;OwrQD3!PLxk5s~A5<10xqSMO zKqP9rQiWd`(2EDjCm=MvGXQ^z16{PsR8@2Kac15q8jORzhlb9$r>fSpjU}WYh&B}C z{bX0IRuzA-=X1jJn6l!N-cYBowcA{Gk>7&;g&Aw2Es>O~8_rJqucMQR9PTJB_3jQ* zwCPgFw~;8_sgw>9CEc}Na>MZXnIupDjnb0&Rb1$`zn4lsymA7O?OpWEaE%8iI95oO zynmJMIpO(kv_O!@kj&MJf1^sp!Eed<%UWj@)?K5?JNC7b=RGtXQ z*DkxTIr%U^8ONHyTZIy>9vZ*E+_*4}gUrMN@}2tosYYSDa{TRJ2sZ8E(6XMoib&4Mcq784N*Mam5EzDTQoRGjY% z8Rn_Qs}~ylJw|^m#i7kw_y8gKr>f*l^9CC34PpH4MLf;Slz5Z=WI-SvTBDo)k~ylrcRH2{=<)nya0iIn28uxeqW?PD>=I$Y zB@sLX!y_gqG6IgRlM_xoBgyo#QXV*1tCd=R{rgjIlwDEE)~=Hp3!5R>E^m*d=cF>Y zN`P=_%8IuaXjiT&^_aE?MI(ap)2x%6&gi-b9I6daotk&(2_5%D+P#>D9*$z-utkt! z2l|<-79{R@Oc(VHf~7X}fZw?x1trp>(ANKT*}s@Rl4Pi0B}#^Ay`>bdj!%fl-W0wg za5t5*LF~BirsTH&x2nli>N=UKIEZAmn_=lV6dvWXk{Y{uzVC%9DO4pw`rh$NCZQut z6(fOvVX+k@p&E&aN80yHr>&-cayx`9~2SvF+o>K#zlWUAXeZB{YBDMQL(NVIU0QX*OaPx zH1`bAYzzR^n?T^bPXMXY>6df~WfCAzwocI|ku;Kpxx25e=qLuZ1@f^%^}zC?$3zmJ z0;H~kd%jalMYUL3H&8(WIo`|UIep@p0$HS9^tYDKIsuz)Cu;i|-y54o(|e0=WQmIPl;v}In#M11VL6zHPDp}BXx|9|z46c@APov*+V@_jO{yVVmc-VrS*K&fgi z0w233ta-{#M#yMOq%|ksuok{S{DzX|7H?1$+&<2)4T7)z?Ps{rv`3_PB2aDsdhHH z{ECQwIU~Y0SK+?5v!&?qJML_~zHcF&it-|0x;9WfH2&(Ny7*hcP%-~>EkuZ#uJx7s z8Ci2Sxr)f*bBM;XcQGhUpymi`^(%?Q894rJwoPG60)Q*)$j$O{-UaFu?K~NP4 zJ0oAvWb#G1v?8D>!#3nZYPP#v$YdcXPYeJ>(m&7 z60y&kLfL8pb1i4M)KzGbOiaIwPb_HYW~VF#>)7u4r?B!(CG>O9i^ck5IkYm>sF%() zDc|D?tXkLt+yFN+EuPbgRu}GbF`SwX!51|6s}`~J*KJ<&hqQVo!eO2^P<6T7*An9U zOsS)IHgv)y->{ztVEnAXt_gI7sLD;2_uR$+|@NW=6$%ubR{o0Tx&Zj^E#= zV>Q;1W1Z(ik$G{o-%UCQ7MPG-v=ww_%P~qyj3#gBRxXo1Toa%Jjj#pnztg$@pfxux zXTuhVT7cMx0DbLffjEO^gVl{*)6_sq7eJbyc5di1>fQ=9Q;nO}7D2oqmoNw@O`z90Nv9U?Pc?(4N5&5Lu7tDl%9`K=0W|Z4j1Snwn7fa zf~D?0%&z=)VqQ4V!0Y~yYqawAXc*BLIBDD!>y?k#)HQncUYSi=Lk$)Nh}mt3hlqFx zAuY&P*9~ThdOxV01KO3mZ&FJvn1u7C$s227v|#;f8ekpax=1@oUOoI-B5hDzRLpJc zrV;a#ux81NaM)b09Zw)Gs2*=fJES<|vqA?^J~Y*ZbEDTsGY3aZ({>4(WiA6ktnV=4 zGo1qjn_7$ytRFb?s|J4?qGq4gO|8V5C0LM8^=f}0veO8qL5^Uo4_l!grSno%xfbz`_O~e&H){pN zVhrU0g=`zdu_&E{)9>0L9D+;j-1aa(4|GO-I@J*ykeYjS2+Vb1!6UkpH#A;%+K#M_VExNr(uZAVvk2Bj#I6U0 z@vHXjEg@}Jsv6v;qJ`+Q3*D&i4>vPiym(F_F-_f+Y4<`-zxl&^kZhrjo|^WZHnn@{ ziu{S}ew^azuo;e1gYc&D8h|}$iKkUTPRS7<5^UyZHz(#Xwd_G3w3}HA0lPPqqDrH) zvu_ftr_gQ!cf3U97Eid_i>i9I1@5-rhb21XgTuBi!kLr(^d?wfTMq{j7>R2%q}iIU z)I%S`xPlvZHWST`!U5K13jEdBJT!K^Ng8$QDcT9#0RG)aWzj6X1QG|0mZ}{*kxZ!6 zSJ-X_DlIdb&Kf~)5wRJ#(_%?Ej$G@5iJd*t*g;Hgq=Q{>)%=fyQNAK{3--Bc*6}a& zfqo)y3)-Bxd8(Mk)E{m1&2V=EZ$0I@Ju31!7=Y5yX39AL|4DBXJa#-`?b1NeXB!6i zkI7uVA_l?x9leL#wt7wHeJ~ujwG-5C$r)d1KZh7*tdCn|8R_CyN%-BwTG>-#XDfBT zhcup{!g@RU3%EZogHFdV5wRVo!{=qs>onovqGUS=Mz8vlnP7~dg{}Us2|QvfaeuIy zuECu@;t4NDV$6XqKv{f4iApGS4?AC|0mx72qcF&sUf)>u)QZ$7ZGgJUyFm|W33P@* zy3Pl6jI-8tQYM^t^bSi!dT}-y3)a~5A`f8{4u&i4*+=g%lTKsdujrlX&B!|%1BlLR zqERLZ_Xa}_=Y~Bb76Qfyhrcii*M!mR!!cGw`~}izT%{jBOdCgk&4f!w4-+EMhTCgt zi#_aN<1gmzK-(EX@t^5nj2AgOaIwr-ZD0tE)OD(A_*4pz3aJ2w>Yy#}c{9N65G7YXP+C z>P{XObZf(0K}i)3jGFYEj{g)9vkM5?_wJUA+V~qNs_oY5<$B$ZT_M~HLZ1O{z$3np z=+aToF`1A+I~#0Rbze;v3$emP*Fgy+*+0xDMFa3uw2XFh!&7XU5*<=GYQcj_;{oQ3e=O79Zc?Wq zMJh2IE0nzu4tpCQvw<(@3YOAKKBHd2y6lx`xu#|50!Q6lWnNv%XPNg`56KoW6yN{$ffdMB+)% z(vgFk77#XV7Vf98?}ZnamQYt)Fvys5YNXcv3*%?psH?J4Q9)%lTYd&KQPy;BI|vQ5vDad`c3h zg7`}$pTpWkR$szd$#ziH%ubdX@ndBv<2AHVooqs=orsB!%OiB%9X_IeQ`J}xu$4Y> zxa-nZ8ebrCvI}D@Uu)r*=ItcW~~C3R{*|H)dC>STu`xWL8(iUDA4*?%FZ#7LDqN zGH7I`4)W9?mc=eD9MOujW~MIFU&Rsb{aaQc+)~#=4XzYt zGm~%>UvO;;V!k~Em`BXHtZx1xk7^zRD0Ok8x(eB1zCGuY1sht9)0iW+;kh}}P!2A4 zspf+mLhTbG=_lieKW3fn3HX45h8R@F1G4t7BCHu z$B-i0f!;EDaaj8=+RAK?y8zIkb`TxCCICs}Y+&xb`S1v*k-aEVlQ6Gh)4tgnd?Nuh zU3NKI@z~YZx4iyFqq}7Ia)fgi1ctF|SV<(^*D5cfns>c%mj-tk4SgC^H82r`-158$ z1s4gquTY=uA@P>oSdx@^=M!zjRiRD+jrrPO6SKFC6DNNji#1D-|+Q>wTLl^&bWNf z@@4{^@l+adx(%GhZi7eo+_VWx(rJeEihXW_jMI0pQ;grc(!OO-|F=Z7bZxM@^2(cO z#CF^^)DClXttt9?Rz!TyQn5!0njOW;lXOx34luUchd=p1-Z3;O$g624CRpfHf@Bn_ zX1g|zH0bfJ$ho8SS8b^9Ujh-tdo%&l6E$s#khWDsSpDqmCp5YHBK0nAsdF!v-=Ph8 zfceDv*urb=HqIJ}B~tZcA4_PM55@U=SQVqAv*U?eJfcqRPvL1VY%q#CNowD)kQ4Si z761cNPFf1&dSCH4YFwznZooTtSst- zml!Rw#PWyQ(Q;5r!Tb6YZCpEHUy&n3A-QTd=kF}TJTt6I%;x%5BIjS+(7Z0a%lR;N zKNlH~zz6SW(vg)q*~0rV{=z#qkMQM%IR6+(v7(KC3Qh2(aD4*uxV+0TrvI<-)fDh@!Tu2I9+rMqF&04#Wh)<{#ZwwIML|Y5ta?KXPZYk}T`$u2poE16f zSkoEDL*-C-9Uc?kU0@^* zKGlvh{anVD( zg1e1;-*;*T?eiy$Z=J81z4+rf#-|T1-kzQq{^|rxYijrp`Sv`DaiE3(Ygh9iF$lB5+hz{N6B?NPL88#d_y-kLyRrO z>7?Oa>Nb@p-l0YOj&A5WO*KZK{WE0=2@lL~!m06opwW{UI}i;_&G^pySs$pYA_&{B zpjKYgxpp$Ky2Yqv`h&O+QXNAj+ueBFAG^M304gyO-%wRm;8XaRF1m6Oh8^9{17!U* z<~XPOpR5Kf54X?M{Hn+?Hiy`FEWdo_`_w%8SOtJmOf4))v#p4`swu0SzSBvrNS$TY zu4+pQrjSBu`PQ2(7*rBYIk;fVu34nhidPmfIobfz!0Ju!)8bS?OH3OVvQIHIgiJ(T zH=lY)bukeSt4fR868bWZM5atOATN~N;}~?7*B-CPP)qC>3SZJL`^#%!+@Ci zBpFT0SUL709Ux=zI2QxzRWYAWn=E|a;k2E2+mz3uO2pIO_x%JXf~+Q7^MLAc)dv*P zM5|*BTrMl}NL$g&OJ`oaX3kxLs7nXb0l5dZgi;nL^6T39Tjd8dZ4Uu!b#F-^Ue*!BTace!);DdC)@P=5qv ziG62#o5pA*!arh+)m}$t(|*^cF`87htVK+y(vj>E^5`~oWQ}zw=mw??I1i;Sl3=Q0 zzr?(wVcAf#)FE}ueyX?RCc95xB$zFlX}Y_CUraQhiM%Jb4d3N<00p}@wxO822E_YR zq|2v)*aOtJJLGNFNzt;Z=SOESoz@s8?QnDop0i{$24n7zOO;uqU9Tc;(<~iCwL;9& zY-Rmo!YV|5DFpqT{O^1YNncm06xq=NDc?)+UCKVy`Wk(O=ASAA!eV(t~wJn|1#BVN{g8{7#!~5eBjAWiz6%{If>y# z+R>`r`qSyO8_rbAeTxMvCJo&FDAO!{r_@ZeE7lI@6rj?bokkBdsP7`8N-&&>_wxB6 zuj?kYZi1xu8NpHW-8O~mMoaU*)X$}^n{Ue1O_Gi@J#v>Cwh;RAI)CZn1V5$-Ek!E* zHQm>j8KPFgy@GC%`e7&Sdm8(1hP^SJjF5rJ6?ERJ`A$D>lM%5sjaQ#*)Ij)D)Oo6t zN(4voZDVK;laczZdC5)xM`W17k?Lb@2q4&gDbQZ}~bir~-jC@u;53;c=VvZ z2$|8#tvczrpsgagAeUD=XZI~w-hAfw?$s7wGNVt)yTedpPN%Xu7Q$P|u*sc=5 z3;Gq)2?ir3*ZK00Up4kc^YGqqv}aIRIz(yvi4IvLe|wAgYPuQHeV=QuHTdfzI#mbq zI82FScEeX3s*a&me%^!$WIy4c){T}&m@eRaw*Ap}W(!j!M<)#_)3i%3KV7EP9Uw~7 zx=HfeMBhu)?LgFY?*onl)`HPudq+wP657jWo4ZG&<~) zb?0=WM;d^J1LS8^9iBXvAWDIcrkWeyw!TV@Mga1z54bkwyVybZ?Ya3pfsvxfOy@6W zRW1LS@Y)YGHJ(t-f~)kBWskFr{92TD@PytmYcvac|H{=E3=vab9Xrbj}9)QKqZ9k@R>Q2)GuS)j1C0ZBUkJ)hS% zNG!L(nbwaz!|Y73D5AfeOXii(Z9Y{5+oE#!{=P3r*q-w&9Z87B##0xe?*!_Nt<*ZraygjI1 z-CehC(MHWS)HZDbZ^9tU+Eo;8k&{-ItC!0H%N%h)1Ilo#SL$853g=>{yj$Z9JS0s; zRj$f(+4_bE?L1nKm{H(lGHJ9TTePi=~2p}CS8~q}7 zs~T51bBRW_fY;W{*q|upDc6Z=$?7Hq-mj~hq^cCXgWWU3sA{LtxEMJ`Kb-*8-JTP9 z^TG+H9SwBgOPwxM^%#>)FX`Yd1dP~h*S$y*`Dh_#!@R=zTOHUhW0BZaA5>`PqX%qH zUo5IMz~85-bNHi6L@50opYO~%ilw3ee^t$Q{Kxydj6VD4ZATWx+OPpkzV>L$D>}u$ zW74j_YY-QW)XSp-W6=8tHs2bK1PANdP zb*&-e8?9@9kB;Vg5!w`&k?qZ{cjz+OfWf%8t!pDx6~Mx?2S-%-8SzA@pagcpYBufX zlSk4Ul)z3vxzk4-uh9%6(ePbWD?EjB2Hm^Xd_oG%K%g`@yoNoI3`0zeC7V~J(}y<$ z6wwdYPhc|~*QhGpILz%9n(|s-ytM!oQCK6D&45>|2;EAs)NydpI`wQ^MPFDkiufyQ22;L01^b{xsC~Z2`es z*I&`(4Q;n?^BN%^c)M*zMs&^Q^<$7wUg&6t9pnj0m zCtYr8@U5L_nb%*rG7VP#yH6w@<=>)ROVBLy!YX_Kb|G%0ZXg>?q)nDpUeW!#Tg0@& z{hPbxN<7ijJ?Jc}b*bvJOu;JsVG;g`CiV}oUpHD+@_yuVb2e`pau5KOV(Yo=;}Bs^4jahsv1;{XFcvQ>LC8Ns>pBF0ekFkJuQ_M?>IUz9R#kHZQ)0J zRS86$Pl!$(K`IKjpX3)&C&i(TxLBhe!uG5D36dbEzE>>AW zMaSW38eH1OS-#HDqz1V)QW&lConh1dXF=U;x}naBYVNvea=ZLD9O&yDYToQ`T$i+; zo~pLpTRo;zc%BAsIvG|U%)Bjg57NA6%QG~9A#!~ej5E8+oF7Dr<3(;4od4xTx7nP1 zL1?=I>UO-v10oz3;f@cq@^1L<0^vylz7`nlSW{uZm;r1Q759o(^^%C~2GW>ZCz9<2 zmuUpPJ?gV1Qta+k)Pgu#R@hKd4aWMDUJD=O=RW&8y2CVx<>!~CIvYwP!=EyI!t zW-`UYS`o|HSf8Hg{FE-x6bQ3J;VA|D@{-hfg)H!Xd$!v)SDuSlkrwaC}eU0ybFtPt2-bKnr+V6!gI+?b!X1b4ntvi6_LA-dM$?!0><-V2QDlRxUc zCG@zDo18Q$G+6dm`WWJ5I1ZT1TMH}`fdWaUyhCxrzPSSa) zJA}Jt(H9?~1>I!9egkVpwrTXM5hd#5>}T|;$D+g=m^lB~(r;w$ehsps-*yKHD{J6zpMV#4NOk8wTziE37;NIO_9X9%0K< z(WD=a`HaK%{Mi2)b>cg|hBc|M;5Ob5EA=4d8xzXs1j|aSVlGxZg1Rv|c>FgFddQ~Y zf*{!7*`I>gbGcEQy-em_;JdDFHLXZ?!F7XcSvC9i01mkOlA2{qF+&VLR)XRwn7aJS z{`^q)6=1YNsUyvh9X{BDHAjl-+_O0s>iIXKWd9G{z6dkKh;4pCw^8TsPkMyvH@xfP6tF zfZ@0=2{|l%AB^VriiOG;`N3+h>0<*TyXv|M`x82Ibmj@|W{D(D`RT^1 z7Sy`+k(RWaG5U6&4(^qmQ&}9!b(&d3Nezjd|9AK8dDkRA5evmzhTaw-%IL%qxjKtkhAU6Ga)ngY~36)a) zu&L~q%S3$P=j*R&7RKWIXb|yggPQY`ds#S*A<5`q1RL5^XsE7+1!P%*-Da;x3`!zo ztR`&7>ikvdx;XX_tWIN$T>}rnLu0|w#@R3ZM3YyegY)Om0eg}#S84Umov&&W5i$4h!=a*&otpy(f0BNu`5r%^wJWcVylq_%H{2%wkiqjp#lZgmcTsZD}+_TdJj*jUnEg4F1S= zQ7Ee}?9i{N9-m}ppB%AeRpLsv^wTS_BZg7bcIW2jdMBBu0~Xw0zA#}UB#Lx z2h`N*L9mkN59dUxs`5KerP0{x&{rewVr*;^qve(#zbbx92cs@pt)W)TKCtLIeo|Fl zUOXiU#6CVVYryd;>kIcFumP0|Lzo$DfQFB$Azd%>pOr0(=v*~KY552VE`iN4Ty~0I ze(@R`oEia?wZ#lh@#Lb(B2|@XPnp&t(#KRtq{&16yic7t(s<9#!Qo_wS9%tuvcRhf zB6v**=CDxlDp$-oa@gBOMFeY#FNBZ6X@GjxAgw;lTyl%LbfRW4r(mCBKT{^Jd6!pQ zC73gsof?JJ$03AKU>EYNe_ol9L#WYABu>}qRi|qgzNa(gLcN5~^?+S@hR)OCu^5(0 zG~N}(IQao%14hjlC)|NsY)O+^R{s!3a2VERLUw5Nx#vgfr8)JIOuclT4PM~JOnC5J za&MYa3$PaA^-P^simtsh%L;$to;*vZms0LkDWQ&9iPN*t(J}Lpe8hjFj$Gy`9pPo@ z(AF&9x29r;bx8huXg0Lh)$ICzp=a4`48=|&Xf2kf(;Sf6sJKYBZnZ6IvVW=`F*&lp z;zuPNVP>hFC_hgJsy-J9i(}vR$)=UAQdr<~TbM^#>UL@vBd98s)B3K0_LMVj8=pbfdp8G3D2) zA@a`pBM{z#(}^9?zIz!!Evkp=MoF(uzkEjFZ9IMfL?t$_DtscaaOWrJq0u@vj~`$5 zFjTox%NTDT^zD>XyAL0Fa?s75Wl)VW&GQq{_P>!=_)%%EGN`c#`^OE@O`hmIrGe9* zacG*}B6uN|eO)+~J#**83|jU+N?B&h@qHD=;*TxsFOm4-Nq}HEyLdkvy1lS~vE#7p zO|K)yOY}UDFo%aTi)h*VDxhDNz3MGne#Yxv+UjsV(tzbx)O+I9?9p86-v=OHfA|#? zFM%Xkt!?k9d4E)lUsB7^{7_A& zN7Q^kX=!P5IniYAJ8C{qfxyl}3%+&nIVt8nTYlkG-Ghtr=b^tk%tulG=YP zpy7`pXf5G95%^ZRx*SYRF08mYlWvQ#=sI|!o0)jK277Im)c7tr5sWJ>RaLNr`gJXC zuP-)hAJ7%zuYlmmN4wQ574swIr0i{aoW+#!fTvCbHuh>Wv2OwtP(5W-o%ZA4nJww{nKS}ZMAQadUE$eoJo5XsUtwW%w0#;8fGmYN7&QL&jAQuVxbIUt|UkA(- zU`imScD|BA*V`-+PJf^OnDm8+!EE}Ah*vfAqa;6*s84h{<|t(fQq1u;mxr9o{vDLOjEM^ilL>3*{e&IY^%X(!Fp6)wdhG_G?tB9b?%idi@8ZjzH)xka zMAlZFojAN7tdq$*To^4kXyV%duz&#JQvWX|_eirAs?^h6D5d37M<0AffH0x`1GJnw zh`tXZ?{?wGMld-*ZjlK76UP`GbP(Q@_e$ZpPS?{(e{-W%(M%PVQ27k$M6+FY2@jTvygy;P=p0&dg|;7&JN^V(pw%d8 z=M`s;b@;ndhHtwo8uueVJXs60Tm;AHYKybI^xjf6(?fj2u29O(6_g_M*se~wv{Wkz z5Fp2X-+M)azpJp@8G#T2OJa21a+f#z)9FaBR!W;HH-+~*eRtWX{e2D=vZl1b;Sb|* zA<`Q7gw4K9JHA$U?*KjQb3vUn^eS)mDZ!% zf*>$HAcP1{L=o3#p3BdsgSDX)bhwUwl7;r^Q`{tccL6y| z7G1eSI1ovH!H6Bl4_|s?T@G-F1|fWRlG%nO~KQ}UIL;Ge>GAI@CTzqnR2YK-qL zb<5fOi4J2F0YasQW{cUH5Utb;nq7K(jD7EXlgMujM($e#HnelmINWS2K+BS?V{+&m z{-uE6-CJC#rgDQ!+SHI0c{@r$dBv4};X+gsg$)m=7}PDi#kxJ{ez zx1kuisM38L6Wbl)6dC_0fWt3!>d0)I-$_M9>?XfgxW>XudH*4tOHMX;sFIHo(3}ACq=fG` zQ)xB#EA^tijSQ2rPxr@Lq&DwTX%q)Uvw!i~pj;4rO#wjj;$h)>R990(SMmp4CHhife8=ZRUt$%2%N8}F>k%)^Y~#?}EM^;z zltJ-y(Fr#;ug&W%-`U0eUxEfoYyPR7MPvDo{%R2F9nNdq6)%wMx9x9fKt~m*?nO25 zQ-k~wNqF_|9I@e;h&_gp9=YI?LX_t?{bht4Z4}m&^OK%XikR^51ID!Z+J|(hKuvx^ z2Qg+YP%!f=mPI$|+b4?6a*6<ky6Bvoj9d_gmi{1!DehLi0fe|3v z+J4y0fQ{)7iBUi(asq_7%9u(aIMLeck8|)HL?J%~InX1(hF^x97p7-u04nSY51{qs zwsACoI0bO{DV_Nw+~-rmk3OKCj3+>#G_1`qw(DLHC1-Gmu(2J4eOHj}sSh4prbBd* z0HIQM+aVW-v?VC@fL`uO;(=QShP)zPMN-a`^ZfMomQpWIRimm{w+*~di#U5u0CXE437(56NiL4y zS=F~znj6)cd4Y~Xy2!hvTOyzK+Q?V!9i<{7@8C=m;=6J<5cyuKVL7xkcL7fwZRsHF zu7Ee((p-C$(DxonP3O7&CJtZ0M}t!nINjfUrEa4#HnY1_a3Sgg?d$_lauv7KAuFs# zlomMn*~vPauCIp#SR^&sZptZcA1U>UCaMesg4j5@TlNhO`S}

    )sgK0cT34y4qT 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≤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Νbzkk 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 z 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 BcZ~o5

    E4|FOznUb=m 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%0DdF-1q|wh4;_Y{Elm`#FYIlyZks)-0ntRac)z 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

  • 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

    Hc@13PB;wO{ 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�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