(* LPM/6 Express Schema (Long Form) Formal Release Dated July 21st 2003 This schema incorporates the changes made to STEP Parts 41, 42, 43 and 45 The EXPRESS constructs contained in LPM/5 taken from those parts have been amended to be accordance with the following documents: - ISO 10303-41 2nd Edition (ISO TC 184/SC4/WG12 N525 2000-05-30) - ISO 10303-42 2nd Edition (ISO TC 184/SC4/WG12 N617 2000-09-23 as modified by TC1 WG12 N616) - ISO 10303-43 2nd Edition - ISO 10303-45 Technical Corrigendum 1 (ISO TC 184/SC4/WG12 N256) *) (* Schema Declaration *) SCHEMA STRUCTURAL_FRAME_SCHEMA; (* Object identifier *) (* {cimsteel logical product model version (6) object (1) structural-frame-schema(1)} *) (* Constant Declarations - new for LPM/6 *) CONSTANT dummy_gri : geometric_representation_item := representation_item('')|| geometric_representation_item(); dummy_tri : topological_representation_item := representation_item('')|| topological_representation_item(); END_CONSTANT; (* STEP Part 42 2nd Edition *) (* Type Declarations *) TYPE action_source_accidential = ENUMERATION OF (fire, impulse, impact, undefined); END_TYPE; TYPE action_source_permanent = ENUMERATION OF (dead, self_weight, prestress, lack_of_fit, undefined); END_TYPE; TYPE action_source_variable_long_term = ENUMERATION OF (live, system_imperfection, settlement, temperature_effect, undefined); END_TYPE; TYPE action_source_variable_short_term = ENUMERATION OF (buoyancy, wind, snow, ice, current, wave, rain, undefined); END_TYPE; TYPE action_source_variable_transient = ENUMERATION OF (transport, erection, propping, undefined); END_TYPE; (* Modified for LPM/6 *) TYPE ahead_or_behind = ENUMERATION OF (ahead, exact, behind); END_TYPE; (* STEP Part 41 (Modified in 2nd edition) *) TYPE area_measure = REAL; END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) (* Modified for LPM/6 *) TYPE assembly_component_select = SELECT (located_assembly, located_part, located_feature, located_joint_system); END_TYPE; TYPE axis2_placement = SELECT (axis2_placement_2d, axis2_placement_3d); END_TYPE; (* STEP Part 42 (unchanged in 2nd edition) *) TYPE b_spline_curve_form = ENUMERATION OF (polyline_form, circular_arc, elliptic_arc, parabolic_arc, hyperbolic_arc, unspecified); END_TYPE; (* STEP Part 42 (unchanged in 2nd edition) *) TYPE b_spline_surface_form = ENUMERATION OF (plane_surf, cylindrical_surf, conical_surf, spherical_surf, toroidal_surf, surf_of_revolution, ruled_surf, generalised_cone, quadric_surf, surf_of_linear_extrusion, unspecified); END_TYPE; (* STEP Part 42 (unchanged in 2nd edition) *) TYPE bending_method = ENUMERATION OF (hot_bend, cold_bend, undefined); END_TYPE; (* Modified for LPM/6 *) TYPE boolean_operand = SELECT (solid_model, half_space_solid, csg_primitive, boolean_result, half_space_2d); END_TYPE; (* STEP Part 42 (Modified in 2nd edition) *) TYPE boolean_operator = ENUMERATION OF (union, intersection, difference); END_TYPE; (* STEP Part 42 (unchanged in 2nd edition) *) (* New for LPM/6 - see Issue 81 *) TYPE boolean_value = BOOLEAN; END_TYPE; (* New for LPM/6 *) TYPE brazing_type = ENUMERATION OF (diffusion_brazing, dip_brazing, furnace_brazing, induction_brazing, infrared_brazing, resistance_brazing, torch_brazing); END_TYPE; TYPE buckling_direction = ENUMERATION OF (x_dir, y_dir, z_dir); END_TYPE; (* Modified for LPM/6 - see Issue 83 *) TYPE cardinal_point_ref = INTEGER; WHERE WRTC1 : {0 < SELF < 100}; END_TYPE; TYPE castellation_type = ENUMERATION OF (circular, hexagonal, octagonal, undefined); END_TYPE; TYPE chemical_mechanism_type = ENUMERATION OF (adhesive, grout, filler, sealant, undefined); END_TYPE; TYPE cleaning_method = ENUMERATION OF (chemical_wash, blast_clean, undefined); END_TYPE; TYPE coating_method = ENUMERATION OF (sprayed, brushed, dipped, electroplated, undefined); END_TYPE; TYPE coating_purpose = ENUMERATION OF (corrosion_protection, fire_protection, aesthetic, undefined); END_TYPE; TYPE complexity_level = ENUMERATION OF (low, medium, high); END_TYPE; TYPE connection_type = ENUMERATION OF (pinned, semi_rigid_full_str, semi_rigid_partial_str, rigid_full_str, rigid_partial_str); END_TYPE; TYPE context_dependent_measure = REAL; END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) TYPE count_measure = NUMBER; END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) (* Modified for LPM/6 *) TYPE csg_primitive = SELECT (sphere, ellipsoid, block, right_angular_wedge, faceted_primitive, rectangular_pyramid, torus, right_circular_cone, eccentric_cone, right_circular_cylinder, cyclide_segment_solid, primitive_2d); END_TYPE; (* STEP Part 42 (modified in 2nd edition) *) TYPE csg_select = SELECT (boolean_result, csg_primitive); END_TYPE; (* STEP Part 42 (unchanged in 2nd edition) *) TYPE curve_on_surface = SELECT (pcurve, surface_curve, composite_curve_on_surface); END_TYPE; (* STEP Part 42 (Unchanged in 2nd edition) *) TYPE cutting_type = ENUMERATION OF (sawn, flame_cut, sheared, punched, drilled, laser, abrasion, undefined); END_TYPE; TYPE data_status_type = ENUMERATION OF (deleted, superseded, archived, erroneous, undefined); END_TYPE; TYPE day_in_month_number = INTEGER; WHERE WRTD1 : { 1 <= SELF <= 31 }; END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) TYPE degrees_rotation = INTEGER; WHERE WRTD2 : {-180 < SELF <= 180}; END_TYPE; TYPE derived_measure = SELECT (force_per_length_measure, inertia_measure, linear_acceleration_measure, linear_stiffness_measure, linear_velocity_measure, mass_per_length_measure, modulus_measure, moment_measure, rotational_acceleration_measure, rotational_stiffness_measure, rotational_velocity_measure); END_TYPE; (* New for LPM/6 *) TYPE description_attribute_select = SELECT (person_and_organization_role, person_and_organization, representation); END_TYPE; (* STEP Part 41 2nd edition (reduced) *) TYPE descriptive_measure = STRING; END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) TYPE dimension_count = INTEGER; WHERE WRTD3 : SELF > 0; END_TYPE; (* STEP Part 42 (unchanged in 2nd edition) *) TYPE direct_or_indirect_action = ENUMERATION OF (direct_action, indirect_action); END_TYPE; (* New for LPM/6 - see Issue 97 *) TYPE drawing_class = ENUMERATION OF (assembly_drawing, part_drawing, placement_drawing, undefined); END_TYPE; TYPE dynamic_analysis_type = ENUMERATION OF (free_vibration, stressed_free_vibration, damped_vibration, linear_dynamic, response_spectrum, undefined); END_TYPE; TYPE elastic_or_plastic_resistance = ENUMERATION OF (elastic_resistance, plastic_resistance); END_TYPE; TYPE element_surface_shape = ENUMERATION OF (quadrilateral, triangle); END_TYPE; (* Modified for LPM/6 *) TYPE element_volume_shape = ENUMERATION OF (hexahedron_element, wedge_element, tetrahedron_element, pyramid_element); END_TYPE; TYPE fabrication_type = ENUMERATION OF (rolled, welded, cold_formed, cast, forged, extruded, undefined); END_TYPE; TYPE force_measure = REAL; END_TYPE; TYPE force_per_length_measure = REAL; END_TYPE; (* New for LPM/6 *) TYPE founded_item_select = SELECT (founded_item, representation_item); END_TYPE; (* STEP Part 43 2nd Edition *) TYPE frame_continuity = ENUMERATION OF (simple, continuous, semi_continuous); END_TYPE; TYPE frame_type = ENUMERATION OF (space_frame, space_truss, plane_frame, plane_truss, grillage, undefined); END_TYPE; TYPE frequency_measure = REAL; END_TYPE; TYPE geometric_set_select = SELECT (point, curve, surface); END_TYPE; (* STEP Part 42 (unchanged in 2nd edition) *) TYPE global_or_local_load = ENUMERATION OF (global_load, local_load); END_TYPE; TYPE global_or_local_resistance = ENUMERATION OF (global_resistance, local_resistance); END_TYPE; (* New for LPM/6 - See Issues 80 and 103 *) TYPE globally_unique_id = STRING; WHERE WRTG1 : LENGTH(SELF) > 0; END_TYPE; TYPE hour_in_day = INTEGER; WHERE WRTH1 : { 0 <= SELF < 24 }; END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) (* New for LPM/6 *) TYPE id_attribute_select = SELECT (action, address, group, representation); END_TYPE; (* STEP Part 41 2nd edition (reduced) *) TYPE identifier = STRING; END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) TYPE inertia_measure = REAL; WHERE WRTI1 : (SELF > 0.0); END_TYPE; TYPE knot_type = ENUMERATION OF (UNIFORM_KNOTS, UNSPECIFIED, QUASI_UNIFORM_KNOTS, PIECEWISE_BEZIER_KNOTS); END_TYPE; (* STEP Part 42 (unchanged in 2nd edition) *) TYPE label = STRING; END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) TYPE left_or_right = ENUMERATION OF (left_hand, right_hand); END_TYPE; TYPE length_measure = REAL; END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) TYPE linear_acceleration_measure = REAL; END_TYPE; TYPE linear_stiffness_measure = REAL; WHERE WRTL1 : (SELF >= 0.0); END_TYPE; TYPE linear_velocity_measure = REAL; END_TYPE; TYPE list_of_reversible_topology_item = LIST [0:?] OF reversible_topology_item; END_TYPE; (* STEP Part 42 (unchanged in 2nd edition) *) TYPE loading_status = ENUMERATION OF (load_increasing, load_decreasing, load_constant, unloaded); END_TYPE; TYPE mass_measure = REAL; END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) TYPE mass_per_length_measure = REAL; WHERE WRTM1 : (SELF > 0.0); END_TYPE; TYPE maximum_or_minimum = ENUMERATION OF (maximum, minimum); END_TYPE; (* New for LPM/6 - see Issue 81 *) TYPE measure_select = SELECT (measure_with_unit, measure_value, boolean_value); END_TYPE; TYPE measure_value = SELECT (length_measure, mass_measure, time_measure, thermodynamic_temperature_measure, plane_angle_measure, solid_angle_measure, area_measure, volume_measure, ratio_measure, parameter_value, numeric_measure, force_measure, frequency_measure, pressure_measure, context_dependent_measure, descriptive_measure, positive_length_measure, positive_plane_angle_measure, positive_ratio_measure, count_measure, derived_measure); END_TYPE; (* STEP Part 41 expanded (2nd Edition unchanged) *) (* New for LPM/6 *) TYPE member_beam_role = ENUMERATION OF (edge_beam, eaves_beam, gantry_girder, joist, lintel, portal_rafter, purlin, rafter, ring_beam, side_rail, waling_beam); END_TYPE; TYPE member_beam_type = ENUMERATION OF (box_girder, fish_bellied_beam, haunched_beam, plate_girder, stub_girder, tapered_beam); END_TYPE; (* New for LPM/6 *) TYPE member_brace_type = ENUMERATION OF (cross_brace, diagonal_brace, horizontal_brace, knee_brace, lateral_brace, longitudinal_brace, plan_brace, raker, sway_brace, vertical_brace); END_TYPE; (* New for LPM/6 *) TYPE member_cable_type = ENUMERATION OF (stay, suspension_cable, suspension_chain); END_TYPE; TYPE member_class = ENUMERATION OF (primary_member, secondary_member, tertiary_member, undefined_class); END_TYPE; (* New for LPM/6 *) TYPE member_column_type = ENUMERATION OF (battened_column, box_column, compound_strut, portal_column); END_TYPE; TYPE member_cubic_type = ENUMERATION OF (floor, stair, ramp, structural_core, structural_shell, undefined); END_TYPE; (* Modified for LPM/6 *) TYPE member_linear_type = ENUMERATION OF (beam, column, truss_element, brace, spring_element, cable, pipe, wire, tie, undefined, arch, beam_column); END_TYPE; TYPE member_planar_type = ENUMERATION OF (wall, slab, stair_element, ramp_element, undefined, plate); END_TYPE; (* New for LPM/6 *) TYPE member_plate_type = ENUMERATION OF (bearing_plate, diaphragm, flange, web); END_TYPE; TYPE member_role = ENUMERATION OF (compression_member, tension_member, bending_member, combined_member, undefined_role); END_TYPE; (* New for LPM/6 *) TYPE member_slab_type = ENUMERATION OF (flat_slab, ribbed_slab, solid_slab, trough_slab, voided_slab, waffle_slab); END_TYPE; (* New for LPM/6 *) TYPE member_wall_type = ENUMERATION OF (load_bearing_wall, retaining_wall, shear_wall); END_TYPE; TYPE minute_in_hour = INTEGER; WHERE WRTM2 : { 0 <= SELF <= 59 }; END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) TYPE minutes_rotation = INTEGER; WHERE WRTM3 : {0 <= SELF < 60}; END_TYPE; TYPE modulus_measure = REAL; WHERE WRTM4 : (SELF > 0.0); END_TYPE; TYPE moment_measure = REAL; END_TYPE; TYPE month_in_year_number = INTEGER; WHERE WRTM5 : { 1 <= SELF <= 12 }; END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) (* New for LPM/6 *) TYPE name_attribute_select = SELECT (address, derived_unit, person_and_organization); END_TYPE; (* STEP Part 41 2nd edition (Reduced) *) TYPE numeric_measure = NUMBER; END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) TYPE orientation_select = SELECT (plane_angle_measure_with_unit, direction); END_TYPE; TYPE parameter_value = REAL; END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) TYPE part_select = SELECT (part, design_part, located_part); END_TYPE; TYPE pcurve_or_surface = SELECT (pcurve, surface); END_TYPE; (* STEP Part 42 (unchanged in 2nd edition) *) TYPE plane_angle_measure = REAL; END_TYPE; TYPE plane_stress_or_strain = ENUMERATION OF (plane_stress, plane_strain, undefined); END_TYPE; TYPE positive_length_measure = length_measure; WHERE WRTP1 : SELF > 0.0; END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) TYPE positive_plane_angle_measure = plane_angle_measure; WHERE WRTP2 : SELF > 0.0; END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) TYPE positive_ratio_measure = ratio_measure; WHERE WRTP3 : SELF > 0.0; END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) TYPE preferred_surface_curve_representation = ENUMERATION OF (curve_3d, pcurve_s1, pcurve_s2); END_TYPE; (* STEP Part 42 (unchanged in 2nd edition) *) TYPE pressure_measure = REAL; END_TYPE; (* New for LPM/6 - See Issue 15 *) TYPE product_item_select = SELECT (structural_frame_product, assembly_component_select); END_TYPE; TYPE project_select = SELECT (project, zone_of_project); END_TYPE; (* Modified for LPM/6 *) TYPE projected_or_true_length = ENUMERATION OF (projected_length, true_length); END_TYPE; TYPE ratio_measure = REAL; END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) TYPE reversible_topology = SELECT (reversible_topology_item, list_of_reversible_topology_item, set_of_reversible_topology_item); END_TYPE; (* STEP Part 42 (unchanged in 2nd edition) *) TYPE reversible_topology_item = SELECT (edge, path, face, face_bound, closed_shell, open_shell); END_TYPE; (* STEP Part 42 (unchanged in 2nd edition) *) (* New for LPM/6 *) TYPE role_select = SELECT (group_assignment); END_TYPE; (* STEP Part 41 2nd edition (reduced) *) TYPE rotational_acceleration_measure = REAL; END_TYPE; TYPE rotational_stiffness_measure = REAL; WHERE WRTR1 : (SELF >= 0.0); END_TYPE; TYPE rotational_velocity_measure = REAL; END_TYPE; TYPE second_in_minute = REAL; WHERE WRTS1 : { 0 <= SELF < 60 }; END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) TYPE seconds_rotation = REAL; WHERE WRTS2 : {0.0 <= SELF < 60.0}; END_TYPE; TYPE select_analysis_item = SELECT (select_analysis_model_item, select_loading_item, select_response_item); END_TYPE; TYPE select_analysis_model_item = SELECT (analysis_method, boundary_condition, element_eccentricity, element_node_connectivity, analysis_model, analysis_model_mapping, analysis_model_relationship, element, element_mapping, node, node_dependency, release); END_TYPE; TYPE select_data_item = SELECT (managed_data_deleted, select_generic_item, select_analysis_item, select_design_item, select_physical_item, select_project_definition_item, select_structural_item); END_TYPE; TYPE select_data_source = SELECT (managed_application_installation, step_file); END_TYPE; TYPE select_design_item = SELECT (assembly_design, assembly_map, assembly_relationship, design_criterion, design_joint_system, design_part, design_result, effective_buckling_length, functional_role, resistance, restraint); END_TYPE; (* Modified for LPM/6 *) TYPE select_generic_item = SELECT (action, action_directive, action_method, address, approval, approval_status, box_domain, certification, certification_type, contract, contract_type, coordinated_universal_time_offset, date, date_and_time, derived_unit, derived_unit_element, description_attribute, dimensional_exponents, document, document_type, document_relationship, document_representation_type, document_usage_constraint, founded_item, functionally_defined_transformation, group, group_assignment, group_relationship, id_attribute, item_defined_transformation, local_time, measure_qualification, measure_with_unit, name_attribute, named_unit, object_role, organization, organization_relationship, person, person_and_organization, person_and_organization_role, representation, representation_context, representation_item, representation_map, representation_relationship, role_association, surface_patch, value_qualifier, versioned_action_request); END_TYPE; TYPE select_loading_item = SELECT ( applied_load, load_case, load, loaded_product, loading_combination, load_combination_occurrence, physical_action); END_TYPE; TYPE select_physical_item = SELECT (located_item, located_part_joint); END_TYPE; TYPE select_project_definition_item = SELECT (assembly, building, building_complex, currency_measure_with_unit, project, project_plan, project_plan_item, project_plan_item_relationship, project_organization, site, structure); END_TYPE; TYPE select_response_item = SELECT ( analysis_result, analysis_results_set, design_result, reaction); END_TYPE; (* modified for LPM/6 *) TYPE select_structural_item = SELECT (coord_system, grid, grid_intersection, grid_offset, geographical_location, item_cost_code, item_cost_code_assigned, item_property, item_property_assigned, item_reference, item_reference_assigned, item_ref_source, item_ref_source_documented, section_properties, setting_out_point, structural_frame_item, structural_frame_item_approved, structural_frame_item_certified, structural_frame_item_documented, structural_frame_item_priced, structural_frame_item_relationship, zone); END_TYPE; TYPE set_of_reversible_topology_item = SET [1:?] OF reversible_topology_item; END_TYPE; (* STEP Part 42 (unchanged in 2nd edition) *) TYPE shell = SELECT (vertex_shell, wire_shell, open_shell, closed_shell); END_TYPE; (* STEP Part 42 (unchanged in 2nd edition) *) TYPE shop_or_site = ENUMERATION OF (shop_process, site_process, undefined); END_TYPE; TYPE si_prefix = ENUMERATION OF (EXA, PETA, TERA, GIGA, MEGA, KILO, HECTO, DECA, DECI, CENTI, MILLI, MICRO, NANO, PICO, FEMTO, ATTO); END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) TYPE si_unit_name = ENUMERATION OF (METRE, GRAM, SECOND, AMPERE, KELVIN, MOLE, CANDELA, RADIAN, STERADIAN, HERTZ, NEWTON, PASCAL, JOULE, WATT, COULOMB, VOLT, FARAD, OHM, SIEMENS, WEBER, TESLA, HENRY, DEGREE_CELSIUS, LUMEN, LUX, BECQUEREL, GRAY, SIEVERT); END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) TYPE site_select = SELECT (site, located_site, zone_of_site, zone_of_building, building_complex); END_TYPE; (* New for LPM/6 *) TYPE soldering_type = ENUMERATION OF (dip_soldering, furnace_soldering, induction_soldering, infrared_soldering, iron_soldering, resistance_soldering, torch_soldering, wave_soldering); END_TYPE; TYPE solid_angle_measure = REAL; END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) TYPE spatial_variation = ENUMERATION OF (free_action, fixed_action); END_TYPE; TYPE start_or_end_face = ENUMERATION OF (start_face, end_face); END_TYPE; TYPE static_analysis_type = ENUMERATION OF (elastic_1st_order, elastic_2nd_order, rigid_plastic, elasto_plastic, elastic_perfectly_plastic, undefined); END_TYPE; TYPE static_or_dynamic = ENUMERATION OF (static, dynamic, quasi_dynamic); END_TYPE; TYPE structure_select = SELECT (structure, located_structure, zone_of_structure, zone_of_building, located_assembly); END_TYPE; TYPE surface_model = SELECT (shell_based_surface_model, face_based_surface_model); END_TYPE; (* STEP Part 42 (unchanged in 2nd edition) *) TYPE text = STRING; END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) TYPE thermodynamic_temperature_measure = REAL; END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) TYPE time_measure = REAL; END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) TYPE top_or_bottom = ENUMERATION OF (top_edge, bottom_edge); END_TYPE; TYPE transformation = SELECT (item_defined_transformation, functionally_defined_transformation); END_TYPE; (* STEP Part 43 (unchanged in the 2nd edition) *) TYPE transition_code = ENUMERATION OF (discontinuous, continuous, cont_same_gradient, cont_same_gradient_same_curvature); END_TYPE; (* STEP Part 42 (unchanged in the 2nd edition) *) TYPE trimming_preference = ENUMERATION OF (cartesian, parameter, unspecified); END_TYPE; (* STEP Part 42 (unchanged in the 2nd edition) *) TYPE trimming_select = SELECT (cartesian_point, parameter_value); END_TYPE; (* STEP Part 42 (unchanged in the 2nd edition) *) TYPE unit = SELECT (named_unit, derived_unit); END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) TYPE value_qualifier = SELECT (precision_qualifier, type_qualifier, uncertainty_qualifier); END_TYPE; (* STEP Part 45 (unchanged in TC1) *) TYPE vector_or_direction = SELECT (direction, vector); END_TYPE; (* STEP Part 42 (unchanged in the 2nd edition) *) TYPE volume_measure = REAL; END_TYPE; (* STEP Part 41 (unchanged in 2nd edition) *) (* new for LPM/6 - see Issues 87 and 88 *) TYPE weld_alignment = ENUMERATION OF(staggered, chained); END_TYPE; (* new for LPM/6 - see Issues 87 and 88 *) TYPE weld_backing_type = ENUMERATION OF (none, permanent, copper_backing_bar, ceramic_tape, flare_backing_ring, permanent_backing_ring, removable_backing_ring, user_defined); END_TYPE; (* New for LPM/6 - see Issues 87 and 88 *) TYPE weld_configuration = ENUMERATION OF (butt_joint, tee_joint, corner_joint, lap_joint, edge_joint, cruciform_joint, undefined); END_TYPE; (* new for LPM/6 - see Issues 87 and 88 *) TYPE weld_intermittent_rule = ENUMERATION OF (none, fixed_rule, member_depth, percent_length); END_TYPE; TYPE weld_penetration = ENUMERATION OF (full_penetration, deep_penetration, partial_penetration, undefined); END_TYPE; (* new for LPM/6 - see Issues 87 and 88 *) TYPE weld_shape_bevel = ENUMERATION OF (flare_single_V, flare_double_V, flare_single_bevel, flare_double_bevel, single_bevel, double_bevel, single_V, double_V, single_J, double_J, single_U, double_U, user_defined); END_TYPE; (* new for LPM/6 - see Issues 87 and 88 *) TYPE weld_shape_butt = ENUMERATION OF (square, scarf, user_defined); END_TYPE; (* new for LPM/6 - see Issues 87 and 88 *) TYPE weld_sidedness = ENUMERATION OF (one_side, both_sides); END_TYPE; (* new for LPM/6 - see Issues 87 and 88 *) TYPE weld_surface_shape = ENUMERATION OF (flush, convex, concave, undefined); END_TYPE; (* new for LPM/6 - see Issues 87 and 88 *) TYPE weld_taper_type = ENUMERATION OF (non_taper, one_side_taper, both_sides_taper); END_TYPE; (* Modified for LPM/6 - see Issues 87 and 88 *) TYPE weld_type = ENUMERATION OF (butt_weld, fillet_weld, spot_weld, plug_weld, seam_weld, slot_weld, stud_weld, surfacing_weld, undefined); END_TYPE; TYPE welding_type = ENUMERATION OF (fusion_weld, friction_weld, flash_weld, laser_weld, forge_weld, undefined); END_TYPE; (* New for LPM/6 *) TYPE welding_type_arc = ENUMERATION OF (generic_arc_welding, metal_arc_welding, manual_metal_arc_welding, gravity_arc_welding, self_shielded_arc_welding, submerged_arc_welding, gas_shielded_metal_arc_welding, metal_inert_gas_welding, metal_active_gas_welding, tubular_inert_gas_welding, tubular_active_gas_welding, tungsten_inert_gas_welding, atomic_hydrogen_welding, plasma_arc_welding, carbon_arc_welding, magnetically_impelled_arc_butt_welding); END_TYPE; (* New for LPM/6 *) TYPE welding_type_beam = ENUMERATION OF (electron_beam_welding, laser_beam_welding, gas_laser_welding); END_TYPE; (* New for LPM/6 *) TYPE welding_type_gas = ENUMERATION OF (generic_gas_welding, oxyacetylene_welding, oxyhydrogen_welding, oxypropane_welding); END_TYPE; (* New for LPM/6 *) TYPE welding_type_other = ENUMERATION OF (aluminothermic_welding, electroslag_welding, electrogas_welding, induction_welding, induction_butt_welding, induction_seam_welding, infrared_welding, percussion_welding); END_TYPE; (* New for LPM/6 *) TYPE welding_type_pressure = ENUMERATION OF (generic_pressure_welding, ultrasonic_welding, friction_welding, forge_welding, explosive_welding, diffusion_welding, oxyfuel_gas_pressure_welding, cold_pressure_welding, hot_pressure_welding, roll_welding, high_frequency_pressure_welding); END_TYPE; (* New for LPM/6 *) TYPE welding_type_resistance = ENUMERATION OF (generic_resistance_welding, spot_welding, seam_welding, projection_welding, flash_welding, resistance_butt_welding, high_frequency_resistance_welding); END_TYPE; (* New for LPM/6 *) TYPE welding_type_stud = ENUMERATION OF (generic_stud_welding, resistance_stud_welding, drawn_arc_stud_welding, friction_stud_welding); END_TYPE; TYPE wireframe_model = SELECT (shell_based_wireframe_model, edge_based_wireframe_model); END_TYPE; (* STEP Part 42 (unchanged in 2nd edition) *) TYPE year_number = INTEGER; WHERE WRTY1 : SELF > 1000; END_TYPE; (* based on STEP Part 41 *) (* Entity Declarations *) (* Modified for LPM/6 *) ENTITY action SUPERTYPE OF (executed_action); name : label; description : OPTIONAL text; chosen_method : action_method; DERIVE id : identifier := get_id_value (SELF); WHERE WRA34 : SIZEOF (USEDIN (SELF, 'STRUCTURAL_FRAME_SCHEMA.' + 'ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1; END_ENTITY; (* STEP Part 41 (modified in 2nd edition) *) (* Modified for LPM/6 *) ENTITY action_directive; name : label; description : OPTIONAL text; analysis: text; comment : text; requests: SET [1:?] OF versioned_action_request; END_ENTITY; (* STEP Part 41 2nd edition *) (* Modified for LPM/6 *) ENTITY action_method; name : label; description : OPTIONAL text; consequence : text; purpose : text; END_ENTITY; (* STEP Part 41 2nd edition *) (* Modified for LPM/6 *) ENTITY address SUPERTYPE OF (personal_address ANDOR organizational_address); internal_location : OPTIONAL label; street_number : OPTIONAL label; street : OPTIONAL label; postal_box : OPTIONAL label; town : OPTIONAL label; region : OPTIONAL label; postal_code : OPTIONAL label; country : OPTIONAL label; facsimile_number : OPTIONAL label; telephone_number : OPTIONAL label; electronic_mail_address : OPTIONAL label; telex_number : OPTIONAL label; DERIVE name : label := get_name_value (SELF); url : identifier := get_id_value (SELF); WHERE WRA1 : EXISTS (internal_location) OR EXISTS (street_number) OR EXISTS (postal_box) OR EXISTS (town) OR EXISTS (region) OR EXISTS (postal_code) OR EXISTS (country) OR EXISTS (facsimile_number) OR EXISTS (telephone_number) OR EXISTS (electronic_mail_address) OR EXISTS (telex_number); END_ENTITY; (* STEP Part 41 2nd edition *) ENTITY analysis_method SUPERTYPE OF (ONEOF (analysis_method_dynamic, analysis_method_pseudo_dynamic, analysis_method_static) ANDOR analysis_method_documented); analysis_name : label; analysis_assumptions : OPTIONAL text; END_ENTITY; ENTITY analysis_method_documented SUBTYPE OF (analysis_method); documented_constraints : SET [1:?] OF document_usage_constraint; END_ENTITY; ENTITY analysis_method_dynamic SUBTYPE OF (analysis_method); analysis_type : dynamic_analysis_type; END_ENTITY; ENTITY analysis_method_pseudo_dynamic SUBTYPE OF (analysis_method); analysis_type : label; END_ENTITY; ENTITY analysis_method_static SUBTYPE OF (analysis_method); analysis_type : static_analysis_type; END_ENTITY; ENTITY analysis_model SUPERTYPE OF (ONEOF (analysis_model_2D, analysis_model_3D) ANDOR analysis_model_located ANDOR analysis_model_child); model_name : label; model_description : OPTIONAL text; model_type : frame_type; method_of_analysis : OPTIONAL analysis_method; coordinate_space_dimension : dimension_count; INVERSE component_elements : SET [1:?] OF element FOR parent_model; component_nodes : SET [2:?] OF node FOR parent_model; END_ENTITY; ENTITY analysis_model_2D SUBTYPE OF (analysis_model); WHERE WRA2 : SELF\analysis_model.coordinate_space_dimension = 2; WRA3 : (SELF\analysis_model.model_type = PLANE_FRAME) OR (SELF\analysis_model.model_type = PLANE_TRUSS) OR (SELF\analysis_model.model_type = GRILLAGE); END_ENTITY; ENTITY analysis_model_3D SUBTYPE OF (analysis_model); WHERE WRA4 : SELF\analysis_model.coordinate_space_dimension = 3; WRA5 : (SELF\analysis_model.model_type = SPACE_FRAME) OR (SELF\analysis_model.model_type = SPACE_TRUSS); END_ENTITY; ENTITY analysis_model_child SUBTYPE OF (analysis_model); parent_model : analysis_model; WHERE WRA6 : parent_model :<>: (SELF); WRA7 : SELF\analysis_model.coordinate_space_dimension <= parent_model.coordinate_space_dimension; END_ENTITY; ENTITY analysis_model_located SUBTYPE OF (analysis_model); model_coord_sys : coord_system; WHERE WRA8 : SELF\analysis_model.coordinate_space_dimension <= model_coord_sys.coord_system_dimensionality; END_ENTITY; ENTITY analysis_model_mapping; mapped_analysis_model : analysis_model; represented_assemblies : SET [1:?] OF assembly; END_ENTITY; ENTITY analysis_model_relationship; relationship_name : label; relationship_description : OPTIONAL text; relating_model : analysis_model; related_model : analysis_model; WHERE WRA9 : relating_model :<>: related_model; END_ENTITY; ENTITY analysis_result ABSTRACT SUPERTYPE OF (ONEOF (analysis_result_node, analysis_result_element_node, analysis_result_element)); analysis_result_name : label; sign_convention : OPTIONAL text; results_for_analysis : analysis_method; UNIQUE URA1 : analysis_result_name; END_ENTITY; ENTITY analysis_result_element ABSTRACT SUPERTYPE OF (ONEOF (analysis_result_element_curve, analysis_result_element_surface, analysis_result_element_point, analysis_result_element_volume)) SUBTYPE OF (analysis_result); END_ENTITY; ENTITY analysis_result_element_curve SUBTYPE OF (analysis_result_element); result_for_element_curve : element_curve; x_increasing : BOOLEAN; result_values : reaction; result_position : length_measure_with_unit; position_label : OPTIONAL label; END_ENTITY; ENTITY analysis_result_element_node SUBTYPE OF (analysis_result); result_for_element_node : element_node_connectivity; result_values : reaction; END_ENTITY; ENTITY analysis_result_element_point SUBTYPE OF (analysis_result_element); result_for_element_point : element_point; result_values : reaction; END_ENTITY; ENTITY analysis_result_element_surface ABSTRACT SUPERTYPE OF (ONEOF (analysis_result_element_surface_stresses, analysis_result_element_surface_tractions)) SUBTYPE OF (analysis_result_element); result_for_element_surface : element_surface; result_position : point; position_label : OPTIONAL label; END_ENTITY; ENTITY analysis_result_element_surface_stresses SUBTYPE OF (analysis_result_element_surface); direct_stress_sigma_y : pressure_measure_with_unit; membrane_stress_tau_yz : pressure_measure_with_unit; direct_stress_sigma_z : pressure_measure_with_unit; END_ENTITY; ENTITY analysis_result_element_surface_tractions SUBTYPE OF (analysis_result_element_surface); thrust_tz : OPTIONAL force_per_length_measure_with_unit; bending_traction_my : force_measure_with_unit; thrust_ty : OPTIONAL force_per_length_measure_with_unit; torsional_traction_mzy : force_measure_with_unit; torsional_traction_myz : force_measure_with_unit; shear_traction_qz : force_per_length_measure_with_unit; shear_traction_qy : force_per_length_measure_with_unit; bending_traction_mz : force_measure_with_unit; END_ENTITY; ENTITY analysis_result_element_volume ABSTRACT SUPERTYPE OF (analysis_result_element_volume_stress_tensor) SUBTYPE OF (analysis_result_element); result_for_element_volume : element_volume; result_position : point; position_label : OPTIONAL label; END_ENTITY; ENTITY analysis_result_element_volume_stress_tensor SUBTYPE OF (analysis_result_element_volume); shear_stress_tau_zy : pressure_measure_with_unit; shear_stress_tau_xz : pressure_measure_with_unit; normal_stress_sigma_z : pressure_measure_with_unit; normal_stress_sigma_y : pressure_measure_with_unit; normal_stress_sigma_x : pressure_measure_with_unit; shear_stress_tau_zx : pressure_measure_with_unit; shear_stress_tau_yz : pressure_measure_with_unit; shear_stress_tau_yx : pressure_measure_with_unit; shear_stress_tau_xy : pressure_measure_with_unit; END_ENTITY; ENTITY analysis_result_node SUBTYPE OF (analysis_result); result_for_node : node; result_values : reaction; END_ENTITY; ENTITY analysis_results_set SUPERTYPE OF (ONEOF (analysis_results_set_basic, analysis_results_set_combined, analysis_results_set_envelope, analysis_results_set_redistributed)); results_set_name : label; component_results : SET [1:?] OF analysis_result; END_ENTITY; ENTITY analysis_results_set_basic SUBTYPE OF (analysis_results_set); basic_load_case : load_case; END_ENTITY; ENTITY analysis_results_set_combined SUBTYPE OF (analysis_results_set); loading_combination_ref : loading_combination; END_ENTITY; ENTITY analysis_results_set_envelope SUBTYPE OF (analysis_results_set); max_or_min : maximum_or_minimum; component_combinations : SET [1:?] OF analysis_results_set_combined; END_ENTITY; ENTITY analysis_results_set_redistributed SUBTYPE OF (analysis_results_set); redistribution_factors : LIST [1:?] OF ratio_measure_with_unit; END_ENTITY; ENTITY applied_load ABSTRACT SUPERTYPE OF (ONEOF(applied_load_static, applied_load_dynamic)); applied_load_name : label; END_ENTITY; ENTITY applied_load_dynamic SUPERTYPE OF (ONEOF (applied_load_dynamic_acceleration, applied_load_dynamic_velocity)) SUBTYPE OF (applied_load); initial_value : OPTIONAL applied_load_static; final_value : OPTIONAL applied_load_static; maximum_value : OPTIONAL applied_load_static; minimum_value : OPTIONAL applied_load_static; number_of_cycles : OPTIONAL count_measure; load_duration : OPTIONAL time_measure_with_unit; load_frequency : OPTIONAL frequency_measure_with_unit; WHERE WRA10 : EXISTS (initial_value) OR EXISTS (final_value) OR EXISTS (maximum_value) OR EXISTS (minimum_value) OR EXISTS (number_of_cycles) OR EXISTS (load_duration) OR EXISTS (load_frequency) OR ('STRUCTURAL_FRAME_SCHEMA.APPLIED_LOAD_DYNAMIC_ACCELERATION' IN TYPEOF (SELF)) OR ('STRUCTURAL_FRAME_SCHEMA.APPLIED_LOAD_DYNAMIC_VELOCITY' IN TYPEOF (SELF)); END_ENTITY; ENTITY applied_load_dynamic_acceleration SUBTYPE OF (applied_load_dynamic); preset_acceleration_ax : OPTIONAL linear_acceleration_measure_with_unit; preset_acceleration_ay : OPTIONAL linear_acceleration_measure_with_unit; preset_acceleration_az : OPTIONAL linear_acceleration_measure_with_unit; preset_acceleration_arx : OPTIONAL rotational_acceleration_measure_with_unit; preset_acceleration_ary : OPTIONAL rotational_acceleration_measure_with_unit; preset_acceleration_arz : OPTIONAL rotational_acceleration_measure_with_unit; WHERE WRA11 : EXISTS (preset_acceleration_ax) OR EXISTS (preset_acceleration_ay) OR EXISTS (preset_acceleration_az) OR EXISTS (preset_acceleration_arx) OR EXISTS (preset_acceleration_ary) OR EXISTS (preset_acceleration_arz); END_ENTITY; ENTITY applied_load_dynamic_velocity SUBTYPE OF (applied_load_dynamic); preset_velocity_vx : OPTIONAL linear_velocity_measure_with_unit; preset_velocity_vy : OPTIONAL linear_velocity_measure_with_unit; preset_velocity_vz : OPTIONAL linear_velocity_measure_with_unit; preset_velocity_vrx : OPTIONAL rotational_velocity_measure_with_unit; preset_velocity_vry : OPTIONAL rotational_velocity_measure_with_unit; preset_velocity_vrz : OPTIONAL rotational_velocity_measure_with_unit; WHERE WRA12 : EXISTS (preset_velocity_vx) OR EXISTS (preset_velocity_vy) OR EXISTS (preset_velocity_vz) OR EXISTS (preset_velocity_vrx) OR EXISTS (preset_velocity_vry) OR EXISTS (preset_velocity_vrz); END_ENTITY; ENTITY applied_load_static ABSTRACT SUPERTYPE OF (ONEOF (applied_load_static_displacement, applied_load_static_force, applied_load_static_pressure)) SUBTYPE OF (applied_load); END_ENTITY; ENTITY applied_load_static_displacement SUBTYPE OF (applied_load_static); preset_displacement_dx : OPTIONAL length_measure_with_unit; preset_displacement_dy : OPTIONAL length_measure_with_unit; preset_displacement_dz : OPTIONAL length_measure_with_unit; preset_displacement_rx : OPTIONAL plane_angle_measure_with_unit; preset_displacement_ry : OPTIONAL plane_angle_measure_with_unit; preset_displacement_rz : OPTIONAL plane_angle_measure_with_unit; WHERE WRA13 : EXISTS (preset_displacement_dx) OR EXISTS (preset_displacement_dy) OR EXISTS (preset_displacement_dz) OR EXISTS (preset_displacement_rx) OR EXISTS (preset_displacement_ry) OR EXISTS (preset_displacement_rz); END_ENTITY; ENTITY applied_load_static_force SUBTYPE OF (applied_load_static); applied_force_fx : OPTIONAL force_measure_with_unit; applied_force_fy : OPTIONAL force_measure_with_unit; applied_force_fz : OPTIONAL force_measure_with_unit; applied_moment_mx : OPTIONAL moment_measure_with_unit; applied_moment_my : OPTIONAL moment_measure_with_unit; applied_moment_mz : OPTIONAL moment_measure_with_unit; WHERE WRA14 : EXISTS (applied_force_fx) OR EXISTS (applied_force_fy) OR EXISTS (applied_force_fz) OR EXISTS (applied_moment_mx) OR EXISTS (applied_moment_my) OR EXISTS (applied_moment_mz); END_ENTITY; ENTITY applied_load_static_pressure SUBTYPE OF (applied_load_static); applied_pressure_px : OPTIONAL pressure_measure_with_unit; applied_pressure_py : OPTIONAL pressure_measure_with_unit; applied_pressure_pz : OPTIONAL pressure_measure_with_unit; WHERE WRA15 : EXISTS (applied_pressure_px) OR EXISTS (applied_pressure_py) OR EXISTS (applied_pressure_pz); END_ENTITY; ENTITY approval; status : approval_status; level : label; END_ENTITY; (* STEP Part 41 (unchanged in 2nd edition) *) ENTITY approval_status; name : label; END_ENTITY; (* STEP Part 41 (unchanged in 2nd edition) *) ENTITY area_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE WRA16 : 'STRUCTURAL_FRAME_SCHEMA.AREA_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); WRA17 : 'STRUCTURAL_FRAME_SCHEMA.AREA_MEASURE' IN TYPEOF (SELF\measure_with_unit.value_component); END_ENTITY; (* based STEP Part 41 *) ENTITY area_unit SUBTYPE OF (named_unit); WHERE WRA18 : (SELF\named_unit.dimensions.length_exponent = 2.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent = 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0); END_ENTITY; (* STEP Part 41 (unchanged in 2nd edition) *) ENTITY assemble SUBTYPE OF (structural_frame_process); resulting_assembly : located_assembly; components : SET [1:?] OF assembly_component_select; required_processes : SET [1:?] OF structural_frame_process; WHERE WRA29 : 'STRUCTURAL_FRAME_SCHEMA.ASSEMBLY_MANUFACTURING' IN TYPEOF (resulting_assembly.descriptive_assembly); WRA30 : SIZEOF(QUERY(component <* components | component :=: resulting_assembly)) = 0; WRA31 : SIZEOF(QUERY(process <* required_processes | process :=: (SELF))) = 0; END_ENTITY; (* Modified for LPM/6 *) ENTITY assembly ABSTRACT SUPERTYPE OF (ONEOF (assembly_design, assembly_manufacturing) ANDOR assembly_with_shape) SUBTYPE OF (structural_frame_product); assembly_sequence_number : OPTIONAL INTEGER; complexity : OPTIONAL complexity_level; DERIVE uses : SET [0:?] OF located_assembly := bag_to_set (USEDIN(SELF,'STRUCTURAL_FRAME_SCHEMA.LOCATED_ASSEMBLY.DESCRIPTIVE_ASSEMBLY')); END_ENTITY; ENTITY assembly_design SUPERTYPE OF (ONEOF (assembly_design_structural_frame, assembly_design_structural_member, assembly_design_structural_connection) ANDOR assembly_design_child) SUBTYPE OF (assembly); designed : BOOLEAN; checked : BOOLEAN; roles : SET [0:?] OF functional_role; governing_criteria : SET [0:?] OF design_criterion; END_ENTITY; ENTITY assembly_design_child SUBTYPE OF (assembly_design); parent_assemblies : SET [1:?] OF assembly_design; WHERE WRA27 : SIZEOF(QUERY(assembly <* parent_assemblies | assembly :=: (SELF)) ) = 0; END_ENTITY; ENTITY assembly_design_structural_connection SUPERTYPE OF (ONEOF (assembly_design_structural_connection_internal, assembly_design_structural_connection_external)) SUBTYPE OF (assembly_design); struc_connection_type : OPTIONAL connection_type; END_ENTITY; ENTITY assembly_design_structural_connection_external SUBTYPE OF (assembly_design_structural_connection); connected_member : assembly_design_structural_member; END_ENTITY; ENTITY assembly_design_structural_connection_internal SUBTYPE OF (assembly_design_structural_connection); connected_members : SET [2:?] OF assembly_design_structural_member; END_ENTITY; ENTITY assembly_design_structural_frame SUBTYPE OF (assembly_design); type_of_frame : frame_type; continuity : OPTIONAL frame_continuity; sway_frame : OPTIONAL BOOLEAN; braced_frame : OPTIONAL BOOLEAN; bracing_frame : OPTIONAL BOOLEAN; frame_members : SET [0:?] OF assembly_design_structural_member; frame_connections : SET [0:?] OF assembly_design_structural_connection; END_ENTITY; (* Modified for LPM/6 - DERIVE added *) ENTITY assembly_design_structural_member SUPERTYPE OF (ONEOF (assembly_design_structural_member_cubic, assembly_design_structural_member_linear, assembly_design_structural_member_planar)) SUBTYPE OF (assembly_design); key_member : OPTIONAL BOOLEAN; structural_member_use : member_role; structural_member_class : member_class; DERIVE restraints : SET [0:?] OF restraint := bag_to_set (USEDIN(SELF,'STRUCTURAL_FRAME_SCHEMA.RESTRAINT.RESTRAINED_MBR')); effective_lengths : SET [0:?] OF effective_buckling_length := bag_to_set (USEDIN(SELF,'STRUCTURAL_FRAME_SCHEMA.EFFECTIVE_BUCKLING_LENGTH.APPLICABLE_MEMBER')); END_ENTITY; ENTITY assembly_design_structural_member_cubic SUBTYPE OF (assembly_design_structural_member); cubic_member_type : member_cubic_type; cubic_member_components : SET [0:?] OF assembly_design_structural_member; WHERE WRA28 : SIZEOF(QUERY(member <* cubic_member_components | member :=: (SELF)) ) = 0; END_ENTITY; (* Modified for LPM/6 - subtypes added *) ENTITY assembly_design_structural_member_linear SUPERTYPE OF (ONEOF ( assembly_design_structural_member_linear_beam, assembly_design_structural_member_linear_brace, assembly_design_structural_member_linear_cable, assembly_design_structural_member_linear_column) ANDOR assembly_design_structural_member_linear_cambered) SUBTYPE OF (assembly_design_structural_member); linear_member_type : member_linear_type; END_ENTITY; (* New for LPM/6 *) ENTITY assembly_design_structural_member_linear_beam SUBTYPE OF (assembly_design_structural_member_linear); beam_type : SET [0:?] OF member_beam_type; beam_role : SET [0:?] OF member_beam_role; unrestrained_beam : LOGICAL; deep_beam : LOGICAL; WHERE WRA35 : SELF\assembly_design_structural_member_linear.linear_member_type = BEAM; WRA42 : SIZEOF(SELF\assembly_design_structural_member.restraints) > 1; WRA43 : SIZEOF(SELF\assembly_design_structural_member.effective_lengths) > 0; END_ENTITY; (* New for LPM/6 *) ENTITY assembly_design_structural_member_linear_brace SUBTYPE OF (assembly_design_structural_member_linear); brace_type : member_brace_type; WHERE WRA36 : SELF\assembly_design_structural_member_linear.linear_member_type = BRACE; END_ENTITY; (* New for LPM/6 *) ENTITY assembly_design_structural_member_linear_cable SUBTYPE OF (assembly_design_structural_member_linear); cable_type : member_cable_type; WHERE WRA37 : SELF\assembly_design_structural_member_linear.linear_member_type = CABLE; END_ENTITY; (* New for LPM/6 - see Issue 92 *) ENTITY assembly_design_structural_member_linear_cambered SUPERTYPE OF (assembly_design_structural_member_linear_cambered_absolute ANDOR assembly_design_structural_member_linear_cambered_relative) SUBTYPE OF (assembly_design_structural_member_linear); camber_description : OPTIONAL text; END_ENTITY; (* New for LPM/6 - see Issue 92 *) ENTITY assembly_design_structural_member_linear_cambered_absolute SUBTYPE OF (assembly_design_structural_member_linear_cambered); absolute_offset_position : positive_length_measure_with_unit; absolute_offset_y : length_measure_with_unit; absolute_offset_z : length_measure_with_unit; END_ENTITY; (* New for LPM/6 - see Issue 92 *) ENTITY assembly_design_structural_member_linear_cambered_relative SUBTYPE OF (assembly_design_structural_member_linear_cambered); relative_offset_position : ratio_measure_with_unit; relative_offset_y : ratio_measure_with_unit; relative_offset_z : ratio_measure_with_unit; END_ENTITY; (* New for LPM/6 *) ENTITY assembly_design_structural_member_linear_column SUBTYPE OF (assembly_design_structural_member_linear); column_type : SET [1:?] OF member_column_type; slender_column : LOGICAL; WHERE WRA38 : SELF\assembly_design_structural_member_linear.linear_member_type = COLUMN; WRA44 : SIZEOF(SELF\assembly_design_structural_member.restraints) > 1; WRA45 : SIZEOF(SELF\assembly_design_structural_member.effective_lengths) > 0; END_ENTITY; (* Modified for LPM/6 - subtypes added *) ENTITY assembly_design_structural_member_planar SUPERTYPE OF (ONEOF ( assembly_design_structural_member_planar_plate, assembly_design_structural_member_planar_slab, assembly_design_structural_member_planar_wall)) SUBTYPE OF (assembly_design_structural_member); planar_member_type : member_planar_type; planar_member_components : SET [0:?] OF assembly_design_structural_member_linear; END_ENTITY; (* New for LPM/6 *) ENTITY assembly_design_structural_member_planar_plate SUBTYPE OF (assembly_design_structural_member_planar); plate_type : member_plate_type; stiffened_plate : LOGICAL; thick_plate : LOGICAL; WHERE WRA39 : SELF\assembly_design_structural_member_planar.planar_member_type = PLATE; END_ENTITY; (* New for LPM/6 *) ENTITY assembly_design_structural_member_planar_slab SUBTYPE OF (assembly_design_structural_member_planar); slab_type : member_slab_type; WHERE WRA40 : SELF\assembly_design_structural_member_planar.planar_member_type = SLAB; END_ENTITY; (* New for LPM/6 *) ENTITY assembly_design_structural_member_planar_wall SUBTYPE OF (assembly_design_structural_member_planar); wall_type : member_wall_type; WHERE WRA41 : SELF\assembly_design_structural_member_planar.planar_member_type = WALL; END_ENTITY; ENTITY assembly_manufacturing SUPERTYPE OF (assembly_manufacturing_child) SUBTYPE OF (assembly); surface_treatment : OPTIONAL text; assembly_sequence : OPTIONAL text; assembly_use : OPTIONAL text; place_of_assembly : OPTIONAL shop_or_site; END_ENTITY; ENTITY assembly_manufacturing_child SUBTYPE OF (assembly_manufacturing); parent_assembly : assembly_manufacturing; WHERE WRA19 : parent_assembly :<>: (SELF); END_ENTITY; ENTITY assembly_map; represented_assembly : assembly; representing_elements : SET [1:?] OF element; END_ENTITY; ENTITY assembly_relationship; relationship_name : label; relationship_description : OPTIONAL text; related_assembly : assembly; relating_assembly : assembly; WHERE WRA20 : related_assembly :<>: relating_assembly; END_ENTITY; ENTITY assembly_with_shape SUBTYPE OF (assembly); shape : shape_representation_with_units; END_ENTITY; (* New for LPM/6 - see Issue 22 *) ENTITY assembly_with_bounding_box SUBTYPE OF (assembly_with_shape); DERIVE bounding_box : SET [1:?] OF representation_item := (SELF\assembly_with_shape.shape\representation.items); WHERE WRA32 : SIZEOF(bounding_box) = 1; (* the assembly will have only 1 representation item *) WRA33 : SIZEOF(QUERY(tmp <* bounding_box | ('STRUCTURAL_FRAME_SCHEMA.BLOCK') IN TYPEOF(tmp))) = 1; (* the bounding box is made up of only 1 representation item which will be of the type block *) END_ENTITY; (* Modified for LPM/6 *) ENTITY axis1_placement SUBTYPE OF (placement); axis : OPTIONAL direction; DERIVE z : direction := NVL(normalise(axis), dummy_gri || direction([0.0,0.0,1.0])); WHERE WRA21 : SELF\geometric_representation_item.dim = 3; END_ENTITY; (* STEP Part 42 (modified in 2nd edition) *) ENTITY axis2_placement_2d SUBTYPE OF (placement); ref_direction : OPTIONAL direction; DERIVE p : LIST [2:2] OF direction := build_2axes(ref_direction); WHERE WRA22 : SELF\geometric_representation_item.dim = 2; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* Modified for LPM/6 *) ENTITY axis2_placement_3d SUBTYPE OF (placement); axis : OPTIONAL direction; ref_direction : OPTIONAL direction; DERIVE p : LIST [3:3] OF direction := build_axes(axis,ref_direction); WHERE WRA23 : SELF\placement.location.dim = 3; WRA24 : (NOT (EXISTS (axis))) OR (axis.dim = 3); WRA25 : (NOT (EXISTS (ref_direction))) OR (ref_direction.dim = 3); WRA26 : (NOT (EXISTS (axis))) OR (NOT (EXISTS (ref_direction))) OR (cross_product(axis,ref_direction).magnitude > 0.0); END_ENTITY; (* STEP Part 42 (modified in 2nd edition) *) ENTITY b_spline_curve SUPERTYPE OF ((ONEOF (b_spline_curve_with_knots, uniform_curve, quasi_uniform_curve, bezier_curve)) ANDOR rational_b_spline_curve) SUBTYPE OF (bounded_curve); degree : INTEGER; control_points_list : LIST [2:?] OF cartesian_point; curve_form : b_spline_curve_form; closed_curve : LOGICAL; self_intersect : LOGICAL; DERIVE upper_index_on_control_points : INTEGER := (SIZEOF(control_points_list) - 1); control_points : ARRAY [0:upper_index_on_control_points] OF cartesian_point := list_to_array(control_points_list, 0, upper_index_on_control_points); WHERE WRB1 : ('STRUCTURAL_FRAME_SCHEMA.UNIFORM_CURVE' IN TYPEOF(self)) OR ('STRUCTURAL_FRAME_SCHEMA.QUASI_UNIFORM_CURVE' IN TYPEOF(self)) OR ('STRUCTURAL_FRAME_SCHEMA.BEZIER_CURVE' IN TYPEOF(self)) OR ('STRUCTURAL_FRAME_SCHEMA.B_SPLINE_CURVE_WITH_KNOTS' IN TYPEOF(self)); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY b_spline_curve_with_knots SUBTYPE OF (b_spline_curve); knot_multiplicities : LIST [2:?] OF INTEGER; knots : LIST [2:?] OF parameter_value; knot_spec : knot_type; DERIVE upper_index_on_knots : INTEGER := SIZEOF(knots); WHERE WRB2 : constraints_param_b_spline(degree, upper_index_on_knots, upper_index_on_control_points, knot_multiplicities, knots); WRB3 : SIZEOF(knot_multiplicities) = upper_index_on_knots; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY b_spline_surface SUPERTYPE OF ((ONEOF (b_spline_surface_with_knots, uniform_surface, quasi_uniform_surface, bezier_surface)) ANDOR rational_b_spline_surface) SUBTYPE OF (bounded_surface); u_degree : INTEGER; v_degree : INTEGER; control_points_list : LIST [2:?] OF LIST [2:?] OF cartesian_point; surface_form : b_spline_surface_form; u_closed : LOGICAL; v_closed : LOGICAL; self_intersect : LOGICAL; DERIVE u_upper : INTEGER := SIZEOF(control_points_list) - 1; v_upper : INTEGER := SIZEOF(control_points_list[1]) - 1; control_points : ARRAY [0:u_upper] OF ARRAY [0:v_upper] OF cartesian_point := make_array_of_array (control_points_list, 0, u_upper, 0, v_upper); WHERE WRB4 : ('STRUCTURAL_FRAME_SCHEMA.UNIFORM_SURFACE' IN TYPEOF(SELF)) OR ('STRUCTURAL_FRAME_SCHEMA.QUASI_UNIFORM_SURFACE' IN TYPEOF(SELF)) OR ('STRUCTURAL_FRAME_SCHEMA.BEZIER_SURFACE' IN TYPEOF(SELF)) OR ('STRUCTURAL_FRAME_SCHEMA.B_SPLINE_SURFACE_WITH_KNOTS' IN TYPEOF(SELF)); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY b_spline_surface_with_knots SUBTYPE OF (b_spline_surface); u_multiplicities : LIST [2:?] OF INTEGER; v_multiplicities : LIST [2:?] OF INTEGER; u_knots : LIST [2:?] OF parameter_value; v_knots : LIST [2:?] OF parameter_value; knot_spec : knot_type; DERIVE knot_u_upper : INTEGER := SIZEOF(u_knots); knot_v_upper : INTEGER := SIZEOF(v_knots); WHERE WRB5 : constraints_param_b_spline(SELF\b_spline_surface.u_degree, knot_u_upper, SELF\b_spline_surface.u_upper, u_multiplicities, u_knots); WRB6 : constraints_param_b_spline(SELF\b_spline_surface.v_degree, knot_v_upper, SELF\b_spline_surface.v_upper, v_multiplicities, v_knots); WRB7 : SIZEOF(u_multiplicities) = knot_u_upper; WRB8 : SIZEOF(v_multiplicities) = knot_v_upper; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* New for LPM/6 *) ENTITY b_spline_volume SUPERTYPE OF (ONEOF( b_spline_volume_with_knots, uniform_volume, quasi_uniform_volume, bezier_volume) ANDOR rational_b_spline_volume) SUBTYPE OF (volume); u_degree : INTEGER; v_degree : INTEGER; w_degree : INTEGER; control_points_list : LIST [2:?] OF LIST [2:?] OF LIST [2:?] OF cartesian_point; DERIVE u_upper : INTEGER := SIZEOF(control_points_list) - 1; v_upper : INTEGER := SIZEOF(control_points_list[1]) - 1; w_upper : INTEGER := SIZEOF(control_points_list[1][1]) - 1; control_points : ARRAY [0:u_upper] OF ARRAY [0:v_upper] OF ARRAY [0:w_upper] OF cartesian_point := make_array_of_array_of_array (control_points_list,0,u_upper,0,v_upper,0,w_upper ); WHERE WRB17 : ('STRUCTURAL_FRAME_SCHEMA.BEZIER_VOLUME' IN TYPEOF(SELF)) OR ('STRUCTURAL_FRAME_SCHEMA.UNIFORM_VOLUME' IN TYPEOF(SELF)) OR ('STRUCTURAL_FRAME_SCHEMA.QUASI_UNIFORM_VOLUME' IN TYPEOF(SELF)) OR ('STRUCTURAL_FRAME_SCHEMA.B_SPLINE_VOLUME_WITH_KNOTS' IN TYPEOF(SELF)) ; END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) (* New for LPM/6 *) ENTITY b_spline_volume_with_knots SUBTYPE OF (b_spline_volume); u_multiplicities : LIST [2:?] OF INTEGER; v_multiplicities : LIST [2:?] OF INTEGER; w_multiplicities : LIST [2:?] OF INTEGER; u_knots : LIST [2:?] OF parameter_value; v_knots : LIST [2:?] OF parameter_value; w_knots : LIST [2:?] OF parameter_value; DERIVE knot_u_upper : INTEGER := SIZEOF(u_knots); knot_v_upper : INTEGER := SIZEOF(v_knots); knot_w_upper : INTEGER := SIZEOF(w_knots); WHERE WRB18 : constraints_param_b_spline(SELF\b_spline_volume.u_degree, knot_u_upper, SELF\b_spline_volume.u_upper, u_multiplicities, u_knots); WRB19 : constraints_param_b_spline(SELF\b_spline_volume.v_degree, knot_v_upper, SELF\b_spline_volume.v_upper, v_multiplicities, v_knots); WRB20 : constraints_param_b_spline(SELF\b_spline_volume.w_degree, knot_w_upper, SELF\b_spline_volume.w_upper, w_multiplicities, w_knots); WRB21 : SIZEOF(u_multiplicities) = knot_u_upper; WRB22 : SIZEOF(v_multiplicities) = knot_v_upper; WRB23 : SIZEOF(w_multiplicities) = knot_w_upper; END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) ENTITY bend SUBTYPE OF (structural_frame_process); method : bending_method; END_ENTITY; ENTITY bezier_curve SUBTYPE OF (b_spline_curve); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY bezier_surface SUBTYPE OF (b_spline_surface); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* New for LPM/6 *) ENTITY bezier_volume SUBTYPE OF (b_spline_volume); END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) ENTITY block SUBTYPE OF (geometric_representation_item); position : axis2_placement_3d; x : positive_length_measure; y : positive_length_measure; z : positive_length_measure; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* New for LPM/6 *) ENTITY block_volume SUBTYPE OF (volume); position : axis2_placement_3d; x : positive_length_measure; y : positive_length_measure; z : positive_length_measure; END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) ENTITY boolean_result SUBTYPE OF (geometric_representation_item); operator : boolean_operator; first_operand : boolean_operand; second_operand : boolean_operand; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY boundary_condition ABSTRACT SUPERTYPE OF (ONEOF (boundary_condition_logical, boundary_condition_spring_linear, boundary_condition_spring_non_linear) ANDOR boundary_condition_skewed); boundary_condition_name : label; boundary_condition_description : OPTIONAL text; INVERSE restrained_nodes : SET [1:?] OF node FOR restraints; END_ENTITY; ENTITY boundary_condition_logical SUBTYPE OF (boundary_condition); bc_x_displacement_free : LOGICAL; bc_y_displacement_free : LOGICAL; bc_z_displacement_free : LOGICAL; bc_x_rotation_free : LOGICAL; bc_y_rotation_free : LOGICAL; bc_z_rotation_free : LOGICAL; END_ENTITY; ENTITY boundary_condition_skewed SUBTYPE OF (boundary_condition); x_skew_angle : OPTIONAL plane_angle_measure_with_unit; y_skew_angle : OPTIONAL plane_angle_measure_with_unit; z_skew_angle : OPTIONAL plane_angle_measure_with_unit; WHERE WRB9 : EXISTS (x_skew_angle) OR EXISTS (y_skew_angle) OR EXISTS (z_skew_angle); END_ENTITY; ENTITY boundary_condition_spring_linear SUPERTYPE OF (boundary_condition_warping) SUBTYPE OF (boundary_condition); bc_x_displacement : OPTIONAL linear_stiffness_measure_with_unit; bc_y_displacement : OPTIONAL linear_stiffness_measure_with_unit; bc_z_displacement : OPTIONAL linear_stiffness_measure_with_unit; bc_x_rotation : OPTIONAL rotational_stiffness_measure_with_unit; bc_y_rotation : OPTIONAL rotational_stiffness_measure_with_unit; bc_z_rotation : OPTIONAL rotational_stiffness_measure_with_unit; WHERE WRB10 : EXISTS (bc_x_displacement) OR EXISTS (bc_y_displacement) OR EXISTS (bc_z_displacement) OR EXISTS (bc_x_rotation) OR EXISTS (bc_y_rotation) OR EXISTS (bc_z_rotation); END_ENTITY; ENTITY boundary_condition_spring_non_linear SUBTYPE OF (boundary_condition); change_values : LIST [2:?] OF measure_with_unit; values : LIST [2:?] OF boundary_condition_spring_linear; DERIVE number_of_values : INTEGER := SIZEOF(change_values); WHERE WRB12 : SIZEOF(values) = SIZEOF(change_values); END_ENTITY; ENTITY boundary_condition_warping SUBTYPE OF (boundary_condition_spring_linear); bc_warping : rotational_stiffness_measure_with_unit; END_ENTITY; ENTITY boundary_curve SUBTYPE OF (composite_curve_on_surface); WHERE WRB13 : SELF\composite_curve.closed_curve; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY bounded_curve SUPERTYPE OF (ONEOF (composite_curve, polyline, b_spline_curve, trimmed_curve, bounded_pcurve, bounded_surface_curve)) SUBTYPE OF (curve); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY bounded_pcurve SUBTYPE OF (pcurve, bounded_curve); WHERE WRB14 : ('STRUCTURAL_FRAME_SCHEMA.BOUNDED_CURVE' IN TYPEOF(SELF\pcurve.reference_to_curve.items[1])); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY bounded_surface SUPERTYPE OF (ONEOF (b_spline_surface, rectangular_trimmed_surface, curve_bounded_surface, rectangular_composite_surface)) SUBTYPE OF (surface); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY bounded_surface_curve SUBTYPE OF (surface_curve, bounded_curve); WHERE WRB15 : ('STRUCTURAL_FRAME_SCHEMA.BOUNDED_CURVE' IN TYPEOF(SELF\surface_curve.curve_3d)); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY box_domain; corner : cartesian_point; xlength : positive_length_measure; ylength : positive_length_measure; zlength : positive_length_measure; WHERE WRB16 : SIZEOF(QUERY(item <* USEDIN(SELF,'')| NOT ('STRUCTURAL_FRAME_SCHEMA.BOXED_HALF_SPACE' IN TYPEOF(item)))) = 0; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY boxed_half_space SUBTYPE OF (half_space_solid); enclosure : box_domain; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* New for LPM/6 *) ENTITY braze SUBTYPE OF (structural_frame_process); braze_type : brazing_type; END_ENTITY; (* New for LPM/6 *) ENTITY brep_2d SUBTYPE OF (solid_model); extent : face; WHERE WRB25 : SIZEOF (['STRUCTURAL_FRAME_SCHEMA.FACE_SURFACE', 'STRUCTURAL_FRAME_SCHEMA.SUBFACE', 'STRUCTURAL_FRAME_SCHEMA.ORIENTED_FACE'] * TYPEOF (SELF.extent)) = 0; WRB26 : SIZEOF (QUERY (bnds <* extent.bounds | NOT ('STRUCTURAL_FRAME_SCHEMA.EDGE_LOOP' IN TYPEOF(bnds.bound))) ) = 0; WRB27 : SIZEOF (QUERY (bnds <* extent.bounds | 'STRUCTURAL_FRAME_SCHEMA.FACE_OUTER_BOUND' IN TYPEOF(bnds))) = 1; WRB28 : SIZEOF(QUERY (elp_fbnds <* QUERY (bnds <* extent.bounds | 'STRUCTURAL_FRAME_SCHEMA.EDGE_LOOP' IN TYPEOF(bnds.bound)) | NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list | NOT (('STRUCTURAL_FRAME_SCHEMA.EDGE_CURVE' IN TYPEOF(oe.edge_element)) AND (oe.edge_element\geometric_representation_item.dim = 2)))) = 0))) = 0; END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) ENTITY brep_with_voids SUBTYPE OF (manifold_solid_brep); voids : SET [1:?] OF oriented_closed_shell; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* Modified for LPM/6 *) ENTITY building SUPERTYPE OF (building_with_shape) SUBTYPE OF (structural_frame_item); building_class : OPTIONAL label; owner : OPTIONAL person_and_organization; building_structures : OPTIONAL LIST [1:?] OF structure; UNIQUE URB1 : SELF\structural_frame_item.item_number, SELF\structural_frame_item.item_name; END_ENTITY; ENTITY building_complex SUBTYPE OF (structural_frame_item); building_site : site; buildings : LIST [1:?] OF building; UNIQUE URB2 : SELF\structural_frame_item.item_number, SELF\structural_frame_item.item_name; END_ENTITY; ENTITY building_with_shape SUBTYPE OF (building); shape : shape_representation_with_units; END_ENTITY; ENTITY calendar_date SUBTYPE OF (date); day_component : day_in_month_number; month_component : month_in_year_number; WHERE WRC1: valid_calendar_date (SELF); END_ENTITY; (* STEP Part 41 (unchanged in 2nd edition) *) (* Modified for LPM/6 *) ENTITY cartesian_point SUPERTYPE OF (ONEOF(cylindrical_point, polar_point, spherical_point)) SUBTYPE OF (point); coordinates : LIST [1:3] OF length_measure; END_ENTITY; (* STEP Part 42 (modified in 2nd edition) *) ENTITY cartesian_transformation_operator SUPERTYPE OF (ONEOF (cartesian_transformation_operator_3d, cartesian_transformation_operator_2d)) SUBTYPE OF (geometric_representation_item, functionally_defined_transformation); axis1 : OPTIONAL direction; axis2 : OPTIONAL direction; local_origin : cartesian_point; scale : OPTIONAL REAL; DERIVE scl : REAL := NVL(scale, 1.0); WHERE WRC2 : scl > 0.0; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY cartesian_transformation_operator_2d SUBTYPE OF (cartesian_transformation_operator); DERIVE u : LIST [2:2] OF direction := base_axis(2,SELF\cartesian_transformation_operator.axis1, SELF\cartesian_transformation_operator.axis2,?); WHERE WRC3 : SELF\geometric_representation_item.dim = 2; END_ENTITY; (* STEP Part 42 (modified in 2nd edition) *) ENTITY cartesian_transformation_operator_3d SUBTYPE OF (cartesian_transformation_operator); axis3 : OPTIONAL direction; DERIVE u : LIST [3:3] OF direction := base_axis(3,SELF\cartesian_transformation_operator.axis1, SELF\cartesian_transformation_operator.axis2,axis3); WHERE WRC4 : SELF\geometric_representation_item.dim = 3; END_ENTITY; (* STEP Part 42 (modified in 2nd edition) *) ENTITY certification; name : label; purpose : label; kind : certification_type; END_ENTITY; (* STEP Part 41 (unchanged in 2nd edition) *) ENTITY certification_type; description : text; END_ENTITY; (* STEP Part 41 (unchanged in 2nd edition) *) ENTITY chemical_mechanism SUBTYPE OF (structural_frame_product); layer_thickness : positive_length_measure_with_unit; layer_design_strength : OPTIONAL pressure_measure_with_unit; layer_type : chemical_mechanism_type; END_ENTITY; ENTITY circle SUBTYPE OF (conic); radius : positive_length_measure; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* New for LPM/6 *) ENTITY circular_area SUBTYPE OF (primitive_2d); centre: cartesian_point; radius: positive_length_measure; END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) (* New for LPM/6 *) ENTITY clothoid SUBTYPE OF (curve); position : axis2_placement; clothoid_constant : length_measure; END_ENTITY; (* STEP Part 42 (new for 2nd edition) *) ENTITY closed_shell SUBTYPE OF (connected_face_set); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY coating SUBTYPE OF (structural_frame_product); primary_purpose : coating_purpose; END_ENTITY; ENTITY composite_curve SUPERTYPE OF (composite_curve_on_surface) SUBTYPE OF (bounded_curve); segments : LIST [1:?] OF composite_curve_segment; self_intersect : LOGICAL; DERIVE n_segments : INTEGER := SIZEOF(segments); closed_curve : LOGICAL := segments[n_segments].transition <> discontinuous; WHERE WRC5 : ((NOT closed_curve) AND (SIZEOF(QUERY(temp <* segments | temp.transition = discontinuous)) = 1)) OR ((closed_curve) AND (SIZEOF(QUERY(temp <* segments | temp.transition = discontinuous)) = 0)); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY composite_curve_on_surface SUBTYPE OF (composite_curve); DERIVE basis_surface : SET [0:2] OF surface := get_basis_surface(SELF); WHERE WRC6 : SIZEOF(basis_surface) > 0; WRC7 : constraints_composite_curve_on_surface(SELF); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* Modified for LPM/6 *) ENTITY composite_curve_segment SUBTYPE OF (founded_item); transition : transition_code; same_sense : BOOLEAN; parent_curve : curve; INVERSE using_curves : BAG [1:?] OF composite_curve FOR segments; WHERE WRC8 : ('STRUCTURAL_FRAME_SCHEMA.BOUNDED_CURVE' IN TYPEOF(parent_curve)); END_ENTITY; (* STEP Part 42 (modified in 2nd edition) *) ENTITY conic SUPERTYPE OF (ONEOF(circle, ellipse, hyperbola, parabola)) SUBTYPE OF (curve); position : axis2_placement; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY conical_surface SUBTYPE OF (elementary_surface); radius : length_measure; semi_angle : plane_angle_measure; WHERE WRC9 : radius >= 0.0; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY connected_edge_set SUBTYPE OF (topological_representation_item); ces_edges : SET [1:?] OF edge; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY connected_face_set SUPERTYPE OF (ONEOF(open_shell, closed_shell)) SUBTYPE OF (topological_representation_item); cfs_faces : SET [1:?] OF face; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY context_dependent_unit SUBTYPE OF (named_unit); name : label; END_ENTITY; (* STEP Part 41 (unchanged in 2nd edition) *) ENTITY contract; name : label; purpose : label; kind : contract_type; END_ENTITY; (* STEP Part 41 (unchanged in 2nd edition) *) ENTITY contract_type; description : text; END_ENTITY; (* STEP Part 41 (unchanged in 2nd edition) *) ENTITY conversion_based_unit SUBTYPE OF (named_unit); name : label; conversion_factor : measure_with_unit; END_ENTITY; (* STEP Part 41 (unchanged in 2nd edition) *) (* New for LPM/6 *) ENTITY convex_hexahedron SUBTYPE OF (faceted_primitive); WHERE WRC27 : SIZEOF(points) = 8 ; WRC28 : above_plane(points[1], points[2], points[3], points[4]) = 0.0; WRC29 : above_plane(points[5], points[8], points[7], points[6]) = 0.0; WRC30 : above_plane(points[1], points[4], points[8], points[5]) = 0.0; WRC31 : above_plane(points[4], points[3], points[7], points[8]) = 0.0; WRC32 : above_plane(points[3], points[2], points[6], points[7]) = 0.0; WRC33 : above_plane(points[1], points[5], points[6], points[2]) = 0.0; WRC34 : same_side([points[1], points[2], points[3]], [points[5], points[6], points[7], points[8]]); WRC35 : same_side([points[1], points[4], points[8]], [points[3], points[7], points[6], points[2]]); WRC36 : same_side([points[1], points[2], points[5]], [points[3], points[7], points[8], points[4]]); WRC37 : same_side([points[5], points[6], points[7]], [points[1], points[2], points[3], points[4]]); WRC38 : same_side([points[3], points[7], points[6]], [points[1], points[4], points[8], points[5]]); WRC39 : same_side([points[3], points[7], points[8]], [points[1], points[5], points[6], points[2]]); END_ENTITY; (* STEP Part 41 (new in 2nd edition) *) ENTITY coord_system ABSTRACT SUPERTYPE OF (ONEOF (coord_system_cartesian_2d, coord_system_cartesian_3d, coord_system_spherical, coord_system_cylindrical) ANDOR coord_system_child); coord_system_name : label; coord_system_use : label; sign_convention : OPTIONAL text; coord_system_dimensionality : dimension_count; END_ENTITY; ENTITY coord_system_cartesian_2d SUBTYPE OF (coord_system); axes_definition : axis2_placement_2d; DERIVE origin_1 : REAL := axes_definition.location\cartesian_point.coordinates[1]; origin_2 : REAL := NVL(axes_definition.location\cartesian_point.coordinates[2], 0.0); WHERE WRC10 : SELF\coord_system.coord_system_dimensionality = 2; WRC11 : SIZEOF (axes_definition.location\cartesian_point.coordinates) = 2; END_ENTITY; ENTITY coord_system_cartesian_3d SUBTYPE OF (coord_system); axes_definition : axis2_placement_3d; DERIVE origin_x : REAL := axes_definition.location\cartesian_point.coordinates[1]; origin_y : REAL := NVL(axes_definition.location\cartesian_point.coordinates[2], 0.0); origin_z : REAL := NVL(axes_definition.location\cartesian_point.coordinates[3], 0.0); WHERE WRC12 : SELF\coord_system.coord_system_dimensionality = 3; WRC13 : SIZEOF (axes_definition.location\cartesian_point.coordinates) = 3; END_ENTITY; ENTITY coord_system_child SUBTYPE OF (coord_system); parent_coord_system : coord_system; WHERE WRC14 : parent_coord_system :<>: (SELF); WRC15 : SELF\coord_system.coord_system_dimensionality <= parent_coord_system.coord_system_dimensionality; END_ENTITY; ENTITY coord_system_cylindrical SUBTYPE OF (coord_system); origin : cylindrical_point; axes_definition : LIST [2:3] OF direction; END_ENTITY; ENTITY coord_system_spherical SUBTYPE OF (coord_system); origin : spherical_point; axes_definition : LIST [3:3] OF direction; END_ENTITY; (* Modified for LPM/6 *) ENTITY coordinated_universal_time_offset; hour_offset : hour_in_day; minute_offset : OPTIONAL minute_in_hour; sense : ahead_or_behind; DERIVE actual_minute_offset: INTEGER := NVL(minute_offset,0); WHERE WRC23: { 0 <= hour_offset < 24 }; WRC24: { 0 <= actual_minute_offset <= 59 }; WRC25: NOT (((hour_offset <> 0) OR (actual_minute_offset <>0)) AND (sense = exact)); END_ENTITY; (* STEP Part 41 2nd edition *) ENTITY csg_solid SUBTYPE OF (solid_model); tree_root_expression : csg_select; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY currency_measure_with_unit SUPERTYPE OF (ONEOF(currency_rate_with_unit)); amount : REAL; unit : currency_unit; END_ENTITY; ENTITY currency_rate_with_unit SUBTYPE OF (currency_measure_with_unit); per_quantity : measure_with_unit; END_ENTITY; ENTITY currency_unit; name : label; description : OPTIONAL text; END_ENTITY; (* Modified for LPM/6 *) ENTITY curve SUPERTYPE OF (ONEOF (line, clothoid, conic, pcurve, surface_curve, offset_curve_2d, offset_curve_3d, curve_replica) ANDOR bounded_curve) SUBTYPE OF (geometric_representation_item); END_ENTITY; (* STEP Part 42 (expanded in 2nd edition) *) (* Modified for LPM/6 *) ENTITY curve_bounded_surface SUBTYPE OF (bounded_surface); basis_surface : surface; boundaries : SET [1:?] OF boundary_curve; implicit_outer : BOOLEAN; WHERE WR16: (NOT implicit_outer) OR (SIZEOF (QUERY (temp <* boundaries | 'STRUCTURAL_FRAME_SCHEMA.OUTER_BOUNDARY_CURVE' IN TYPEOF(temp))) = 0); WR17: (NOT(implicit_outer)) OR ('STRUCTURAL_FRAME_SCHEMA.BOUNDED_SURFACE' IN TYPEOF(basis_surface)); WR18: SIZEOF(QUERY(temp <* boundaries | 'STRUCTURAL_FRAME_SCHEMA.OUTER_BOUNDARY_CURVE' IN TYPEOF(temp))) <= 1; WR19: SIZEOF(QUERY(temp <* boundaries | (temp\composite_curve_on_surface.basis_surface [1] <> SELF.basis_surface))) = 0; END_ENTITY; (* STEP Part 42 (modified in 2nd edition) *) ENTITY curve_replica SUBTYPE OF (curve); parent_curve : curve; transformation : cartesian_transformation_operator; WHERE WRC20 : transformation.dim = parent_curve.dim; WRC21 : acyclic_curve_replica (SELF, parent_curve); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY cut SUBTYPE OF (structural_frame_process); cutting_method : cutting_type; END_ENTITY; (* New for LPM/6 *) ENTITY cyclide_segment_solid SUBTYPE OF (geometric_representation_item); position : axis2_placement_3d; radius1 : positive_length_measure; radius2 : positive_length_measure; cone_angle1 : plane_angle_measure; cone_angle2 : plane_angle_measure; turn_angle : plane_angle_measure; END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) (* Modified for LPM/6 - CIS entity replaced by STEP entity *) ENTITY cylindrical_point SUBTYPE OF (cartesian_point); r : length_measure; theta : plane_angle_measure; z : length_measure; DERIVE SELF\cartesian_point.coordinates : LIST [1:3] OF length_measure := [r*cos(theta), r*sin(theta), z]; WHERE WRC26: r >= 0.0; END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) ENTITY cylindrical_surface SUBTYPE OF (elementary_surface); radius : positive_length_measure; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* New for LPM/6 *) ENTITY cylindrical_volume SUBTYPE OF (volume); position : axis2_placement_3d; radius : positive_length_measure; height : positive_length_measure; END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) ENTITY date SUPERTYPE OF (ONEOF(calendar_date)); year_component : year_number; END_ENTITY; (* STEP Part 41 trimmed (2nd edition unchanged) *) ENTITY date_and_time; date_component : calendar_date; time_component : local_time; END_ENTITY; (* STEP Part 41 (2nd edition unchanged) *) ENTITY definitional_representation SUBTYPE OF (representation); WHERE WRD1 : 'STRUCTURAL_FRAME_SCHEMA.PARAMETRIC_REPRESENTATION_CONTEXT' IN TYPEOF( SELF\representation.context_of_items ); END_ENTITY; (* STEP Part 43 (unchanged in 2nd edition) *) ENTITY degenerate_pcurve SUBTYPE OF (point); basis_surface : surface; reference_to_curve : definitional_representation; WHERE WRD2 : SIZEOF(reference_to_curve\representation.items) = 1; WRD3 : 'STRUCTURAL_FRAME_SCHEMA.CURVE' IN TYPEOF (reference_to_curve\representation.items[1]); WRD4 : reference_to_curve\representation. items[1]\geometric_representation_item.dim =2; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY degenerate_toroidal_surface SUBTYPE OF (toroidal_surface); select_outer : BOOLEAN; WHERE WRD5 : major_radius < minor_radius; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY derived_measure_with_unit SUPERTYPE OF (ONEOF (force_per_length_measure_with_unit, inertia_measure_with_unit, linear_acceleration_measure_with_unit, linear_stiffness_measure_with_unit, linear_velocity_measure_with_unit, mass_per_length_measure_with_unit, modulus_measure_with_unit, moment_measure_with_unit, rotational_acceleration_measure_with_unit, rotational_stiffness_measure_with_unit, rotational_velocity_measure_with_unit)) SUBTYPE OF (measure_with_unit); WHERE WRD6 : 'STRUCTURAL_FRAME_SCHEMA.DERIVED_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); END_ENTITY; (* Modified for LPM/6 *) ENTITY derived_unit SUPERTYPE OF (ONEOF (force_per_length_unit, inertia_unit, linear_acceleration_unit, linear_stiffness_unit, linear_velocity_unit, mass_per_length_unit, modulus_unit, moment_unit, rotational_acceleration_unit, rotational_stiffness_unit, rotational_velocity_unit)); elements : SET [1:?] OF derived_unit_element; DERIVE name : label := get_name_value (SELF); WHERE WRD7 : ( SIZEOF ( elements ) > 1 ) OR (( SIZEOF ( elements ) = 1 ) AND ( elements[1].exponent <> 1.0 )); WRD13 : SIZEOF (USEDIN (SELF, 'STRUCTURAL_FRAME_SCHEMA.' + 'NAME_ATTRIBUTE.NAMED_ITEM')) <= 1; END_ENTITY; (* expanded STEP Part 41 (modified in 2nd edition) *) ENTITY derived_unit_element; unit : named_unit; exponent : REAL; END_ENTITY; (* STEP Part 41 (2nd edition unchanged) *) (* New for LPM/6 *) ENTITY description_attribute; attribute_value : text; described_item : description_attribute_select; END_ENTITY; (* STEP Part 41 2nd edition *) ENTITY design_criterion SUPERTYPE OF (design_criterion_documented); criterion_name : label; criterion_description : text; design_assumptions : OPTIONAL text; INVERSE governed_assemblies : SET [1:?] OF assembly_design FOR governing_criteria; END_ENTITY; ENTITY design_criterion_documented SUBTYPE OF (design_criterion); documented_reference : document_usage_constraint; END_ENTITY; ENTITY design_joint_system; design_joint_system_name : label; design_joint_system_spec : joint_system; parent_assemblies : LIST [1:?] OF assembly_design; locations : OPTIONAL LIST [1:?] OF coord_system; connected_parts : SET [0:?] OF design_part; WHERE WRD8 : NOT(EXISTS(locations) AND (SIZEOF(locations) <> SIZEOF(parent_assemblies))); END_ENTITY; ENTITY design_part; design_part_name : label; design_part_spec : part; parent_assemblies : LIST [1:?] OF assembly_design; locations : OPTIONAL LIST [1:?] OF coord_system; WHERE WRD9 : NOT(EXISTS(locations) AND (SIZEOF(locations) <> SIZEOF(parent_assemblies))); END_ENTITY; ENTITY design_result ABSTRACT SUPERTYPE OF (ONEOF (design_result_connection, design_result_joint_system, design_result_member, design_result_part) ANDOR design_result_mapped ANDOR design_result_resolved); design_result_name : label; design_resistance : resistance; END_ENTITY; ENTITY design_result_connection SUBTYPE OF (design_result); result_for_connection : assembly_design_structural_connection; result_position : OPTIONAL point; position_label : OPTIONAL label; END_ENTITY; ENTITY design_result_joint_system SUBTYPE OF (design_result); result_for_joint_system : design_joint_system; END_ENTITY; ENTITY design_result_mapped SUBTYPE OF (design_result); origin_of_forces : analysis_results_set; END_ENTITY; ENTITY design_result_member SUBTYPE OF (design_result); result_for_member : assembly_design_structural_member; result_position : point; position_label : label; END_ENTITY; ENTITY design_result_part SUBTYPE OF (design_result); result_for_part : design_part; END_ENTITY; ENTITY design_result_resolved SUBTYPE OF (design_result); design_forces : reaction_force; design_factor : REAL; END_ENTITY; ENTITY dimensional_exponents; length_exponent : REAL; mass_exponent : REAL; time_exponent : REAL; electric_current_exponent : REAL; thermodynamic_temperature_exponent : REAL; amount_of_substance_exponent : REAL; luminous_intensity_exponent : REAL; END_ENTITY; (* STEP Part 41 (2nd edition unchanged) *) ENTITY directed_action SUBTYPE OF (executed_action); directive : action_directive; END_ENTITY; (* STEP Part 41 (2nd edition unchanged) *) ENTITY direction SUBTYPE OF (geometric_representation_item); direction_ratios : LIST [2:3] OF REAL; WHERE WRD10 : SIZEOF(QUERY(tmp <* direction_ratios | tmp <> 0.0)) > 0; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* Modified for LPM/6 - See Issue 15 *) ENTITY dispatch SUBTYPE OF (structural_frame_process); transported_products : LIST [1:?] OF product_item_select; dispatch_address : organizational_address; delivery_address : organizational_address; dispatch_date : calendar_date; delivery_date : calendar_date; END_ENTITY; (* Modified for LPM/6 *) ENTITY document SUPERTYPE OF (document_with_class); id : identifier; name : label; description : text; kind : document_type; INVERSE representation_types : SET[0:?] OF document_representation_type FOR represented_document; END_ENTITY; (* STEP Part 41 2nd edition *) (* Modified for LPM/6 *) ENTITY document_relationship SUPERTYPE OF (document_usage); name : label; description : OPTIONAL text; relating_document : document; related_document : document; END_ENTITY; (* STEP Part 41 2nd edition *) (* New for LPM/6 *) ENTITY document_representation_type; name : label; represented_document : document; END_ENTITY; (* STEP Part 41 (added in 2nd edition) *) ENTITY document_standard SUBTYPE OF (document_with_class); DERIVE clauses : SET [1:?] OF document_usage_constraint := bag_to_set (USEDIN(SELF, 'STRUCTURAL_FRAME_SCHEMA.DOCUMENT_USAGE_CONSTRAINT.SOURCE')); INVERSE relevant_clauses : SET [1:?] OF document_usage_constraint FOR source; WHERE WRD11 : ((SELF\document.kind.product_data_type = 'Standard Specification') OR (SELF\document.kind.product_data_type = 'Code of Practice')); END_ENTITY; ENTITY document_type; product_data_type : label; END_ENTITY; (* STEP Part 41 (2nd edition unchanged) *) ENTITY document_usage SUBTYPE OF (document_relationship); UNIQUE URD2 : SELF\document_relationship.name, SELF\document_relationship.relating_document, SELF\document_relationship.related_document; WHERE WRD12 : acyclic_document_relationship(SELF, [SELF\document_relationship.related_document], 'STRUCTURAL_FRAME_SCHEMA.DOCUMENT_RELATIONSHIP.RELATED_DOCUMENT'); END_ENTITY; ENTITY document_usage_constraint; source : document; subject_element : label; subject_element_value : text; END_ENTITY; (* STEP Part 41 (2nd edition unchanged) *) ENTITY document_with_class SUPERTYPE OF (document_standard) SUBTYPE OF (document); class : identifier; END_ENTITY; (* STEP Part 41 (2nd edition unchanged) *) (* New for LPM/6 *) ENTITY eccentric_cone SUBTYPE OF (geometric_representation_item); position : axis2_placement_3d; semi_axis_1 : positive_length_measure; semi_axis_2 : positive_length_measure; height : positive_length_measure; x_offset : length_measure; y_offset : length_measure; ratio : REAL; WHERE WRE23 : ratio >= 0.0; END_ENTITY; (* STEP Part 42 (New for 2nd edition) *) (* New for LPM/6 *) ENTITY eccentric_conical_volume SUBTYPE OF (volume); position : axis2_placement_3d; semi_axis_1 : positive_length_measure; semi_axis_2 : positive_length_measure; height : positive_length_measure; x_offset : length_measure; y_offset : length_measure; ratio : REAL; WHERE WRE22 : ratio >= 0.0; END_ENTITY; (* STEP Part 42 (New for 2nd edition) *) (* Modified for LPM/6 *) ENTITY edge SUPERTYPE OF (ONEOF(oriented_edge, edge_curve, subedge)) SUBTYPE OF (topological_representation_item); edge_start : vertex; edge_end : vertex; END_ENTITY; (* STEP Part 42 (modified for 2nd edition) *) ENTITY edge_based_wireframe_model SUBTYPE OF (geometric_representation_item); ebwm_boundary : SET [1:?] OF connected_edge_set; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY edge_curve SUBTYPE OF (edge, geometric_representation_item); edge_geometry : curve; same_sense: BOOLEAN; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY edge_loop SUBTYPE OF (loop, path); DERIVE ne : INTEGER := SIZEOF(SELF\path.edge_list); WHERE WRE1 : (SELF\path.edge_list[1].edge_start) :=: (SELF\path.edge_list[ne].edge_end); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY effective_buckling_length; effective_length_name : label; effective_length_factor : OPTIONAL REAL; effective_length_use : OPTIONAL text; effective_length_direction : OPTIONAL buckling_direction; applicable_member : assembly_design_structural_member; END_ENTITY; ENTITY element SUPERTYPE OF (ONEOF (element_volume, element_surface, element_curve, element_point) ANDOR element_with_material); element_name : label; element_description : OPTIONAL text; parent_model : analysis_model; element_dimensionality : INTEGER; INVERSE connectivity : SET [1:?] OF element_node_connectivity FOR connecting_element; UNIQUE URE1 : element_name, parent_model; WHERE WRE2 : element_dimensionality <= parent_model.coordinate_space_dimension; WRE21 : (element_dimensionality >= 0) AND (element_dimensionality <= 3); END_ENTITY; ENTITY element_curve ABSTRACT SUPERTYPE OF (ONEOF(element_curve_simple, element_curve_complex)) SUBTYPE OF (element); element_subdivision : OPTIONAL INTEGER; DERIVE connectivities : SET [2:2] OF element_node_connectivity := bag_to_set (USEDIN(SELF, 'STRUCTURAL_FRAME_SCHEMA.ELEMENT_NODE_CONNECTIVITY.CONNECTING_ELEMENT')); WHERE WRE3 : SELF\element.element_dimensionality = 1; WRE4 : connectivities[1] :<>: connectivities[2]; WRE5 : connectivities[1].connecting_node :<>: connectivities[2].connecting_node; END_ENTITY; ENTITY element_curve_complex SUBTYPE OF (element_curve); cross_sections : LIST [2:?] OF section_profile; points_defining_element_axis : LIST [2:?] OF point_on_curve; element_orientations : LIST [2:?] OF orientation_select; DERIVE number_of_sections : INTEGER := SIZEOF (cross_sections); curve_defining_element : curve := points_defining_element_axis[1]\point_on_curve.basis_curve; WHERE WRE6 : ( (SIZEOF (points_defining_element_axis) = number_of_sections) AND (SIZEOF (element_orientations) = number_of_sections) ); WRE7 : SIZEOF(QUERY(temp <* points_defining_element_axis | (temp\point_on_curve.basis_curve) :<>: curve_defining_element)) = 0; END_ENTITY; ENTITY element_curve_simple SUBTYPE OF (element_curve); cross_section : section_profile; element_orientation : orientation_select; END_ENTITY; ENTITY element_eccentricity; element_eccentricity_name : label; x_eccentricity : OPTIONAL length_measure_with_unit; y_eccentricity : OPTIONAL length_measure_with_unit; z_eccentricity : OPTIONAL length_measure_with_unit; INVERSE eccentric_connectivities: SET [1:?] OF element_node_connectivity FOR eccentricity; WHERE WRE8 : EXISTS (x_eccentricity) OR EXISTS (y_eccentricity) OR EXISTS (z_eccentricity); END_ENTITY; ENTITY element_mapping; mapped_element : element; represented_part : part_select; END_ENTITY; ENTITY element_node_connectivity; connectivity_number : INTEGER; connectivity_name : label; connecting_node : node; connecting_element : element; eccentricity : OPTIONAL element_eccentricity; fixity : OPTIONAL release; UNIQUE URE2 : connecting_node, connecting_element; WHERE WRE9 : NOT( (connectivity_number > 2) AND (connecting_element.element_dimensionality < 2) ); WRE10 : NOT( (connectivity_name <> 'Start Node') AND (connectivity_number = 1) ); WRE11 : NOT( (connectivity_name <> 'End Node') AND (connectivity_number = 2) AND (connecting_element.element_dimensionality = 1) ); WRE12 : connecting_node.parent_model :=: connecting_element.parent_model; END_ENTITY; ENTITY element_point ABSTRACT SUPERTYPE OF (ONEOF (element_point_grounded_damper, element_point_stationary_mass, element_point_grounded_spring)) SUBTYPE OF (element); DERIVE connectivities : BAG [1:1] OF element_node_connectivity := USEDIN(SELF,'STRUCTURAL_FRAME_SCHEMA.ELEMENT_NODE_CONNECTIVITY.CONNECTING_ELEMENT'); WHERE WRE13 : SELF\element.element_dimensionality = 0; END_ENTITY; ENTITY element_point_grounded_damper SUBTYPE OF (element_point); damping_coefficients : ARRAY [1:6] OF REAL; END_ENTITY; ENTITY element_point_grounded_spring SUBTYPE OF (element_point); stiffness_coefficients : ARRAY [1:6] OF REAL; END_ENTITY; ENTITY element_point_stationary_mass SUBTYPE OF (element_point); masses : ARRAY [1:3] OF REAL; moments_of_inertia : ARRAY [1:3] OF ARRAY [1:3] OF REAL; END_ENTITY; ENTITY element_surface SUPERTYPE OF (ONEOF(element_surface_simple, element_surface_complex)) SUBTYPE OF (element); thickness : positive_length_measure_with_unit; DERIVE connectivities : SET [3:?] OF element_node_connectivity := bag_to_set (USEDIN(SELF,'STRUCTURAL_FRAME_SCHEMA.ELEMENT_NODE_CONNECTIVITY.CONNECTING_ELEMENT')); WHERE WRE14 : SELF\element.element_dimensionality = 2; WRE15 : SELF\element.parent_model.coordinate_space_dimension > 1; END_ENTITY; ENTITY element_surface_complex SUPERTYPE OF (ONEOF(element_surface_plane, element_surface_profiled)) SUBTYPE OF (element_surface); surface_definition : surface; END_ENTITY; ENTITY element_surface_plane SUBTYPE OF (element_surface_complex); WHERE WRE16 : 'STRUCTURAL_FRAME_SCHEMA.PLANE' IN TYPEOF (SELF\element_surface_complex.surface_definition); END_ENTITY; ENTITY element_surface_profiled SUBTYPE OF (element_surface_complex); profile : curve; END_ENTITY; ENTITY element_surface_simple SUBTYPE OF (element_surface); shape : element_surface_shape; assumption : plane_stress_or_strain; END_ENTITY; ENTITY element_volume ABSTRACT SUPERTYPE OF (ONEOF(element_volume_simple, element_volume_complex)) SUBTYPE OF (element); DERIVE connectivities : SET [4:?] OF element_node_connectivity := bag_to_set (USEDIN(SELF, 'STRUCTURAL_FRAME_SCHEMA.ELEMENT_NODE_CONNECTIVITY.CONNECTING_ELEMENT')); WHERE WRE17 : SELF\element.element_dimensionality = 3; WRE18 : SELF\element.parent_model.coordinate_space_dimension = 3; END_ENTITY; ENTITY element_volume_complex SUBTYPE OF (element_volume); shape : shape_representation_with_units; END_ENTITY; ENTITY element_volume_simple SUBTYPE OF (element_volume); shape : element_volume_shape; END_ENTITY; ENTITY element_with_material SUBTYPE OF (element); material_definition : material; END_ENTITY; ENTITY elementary_surface SUPERTYPE OF (ONEOF (plane, cylindrical_surface, conical_surface, spherical_surface, toroidal_surface)) SUBTYPE OF (surface); position : axis2_placement_3d; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY ellipse SUBTYPE OF (conic); semi_axis_1 : positive_length_measure; semi_axis_2 : positive_length_measure; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* New for LPM/6 *) ENTITY ellipsoid SUBTYPE OF (geometric_representation_item); position : axis2_placement_3d; semi_axis_1 : positive_length_measure; semi_axis_2 : positive_length_measure; semi_axis_3 : positive_length_measure; END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) (* New for LPM/6 *) ENTITY ellipsoid_volume SUBTYPE OF (volume); position : axis2_placement_3d; semi_axis_1 : positive_length_measure; semi_axis_2 : positive_length_measure; semi_axis_3 : positive_length_measure; END_ENTITY; (* New for LPM/6 *) ENTITY elliptic_area SUBTYPE OF (primitive_2d); position : axis2_placement_2d; semi_axis_1 : positive_length_measure; semi_axis_2 : positive_length_measure; END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) ENTITY evaluated_degenerate_pcurve SUBTYPE OF (degenerate_pcurve); equivalent_point : cartesian_point; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY executed_action SUBTYPE OF (action); END_ENTITY; (* STEP Part 41 (2nd edition unchanged) *) ENTITY extruded_area_solid SUBTYPE OF (swept_area_solid); extruded_direction : direction; depth : positive_length_measure; WHERE WRE19 : dot_product( (SELF\swept_area_solid.swept_area.basis_surface\ elementary_surface.position.p[3]), extruded_direction) <> 0.0; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY extruded_face_solid SUBTYPE OF (swept_face_solid); extruded_direction : direction; depth : positive_length_measure; WHERE WRE20 : dot_product( (SELF\swept_face_solid.swept_face.face_geometry\ elementary_surface.position.p[3]), extruded_direction) <> 0.0; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY face SUPERTYPE OF (ONEOF(face_surface, oriented_face, subface)) SUBTYPE OF (topological_representation_item); bounds : SET [1:?] OF face_bound; WHERE WRF1 : NOT (mixed_loop_type_set(list_to_set(list_face_loops(SELF)))); WRF2 : SIZEOF(QUERY(temp <* bounds | 'STRUCTURAL_FRAME_SCHEMA.FACE_OUTER_BOUND' IN TYPEOF(temp))) <= 1; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY face_based_surface_model SUBTYPE OF (geometric_representation_item); fbsm_faces : SET [1:?] OF connected_face_set; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY face_bound SUBTYPE OF (topological_representation_item); bound : loop; orientation : BOOLEAN; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY face_outer_bound SUBTYPE OF (face_bound); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* modified for LPM/6 *) ENTITY face_surface SUBTYPE OF (face, geometric_representation_item); face_geometry : surface; same_sense: BOOLEAN; WHERE WRF30 : NOT ('STRUCTURAL_FRAME_SCHEMA.ORIENTED_SURFACE' IN TYPEOF(face_geometry)); END_ENTITY; (* STEP Part 42 (modified in 2nd edition) *) ENTITY faceted_brep SUBTYPE OF (manifold_solid_brep); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* new for LPM/6 *) ENTITY faceted_primitive SUPERTYPE OF (ONEOF(tetrahedron, convex_hexahedron)) SUBTYPE OF (geometric_representation_item) ; points : LIST[4:?] OF UNIQUE cartesian_point ; WHERE WRF31 : points[1].dim = 3 ; END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) ENTITY fastener SUPERTYPE OF (ONEOF(fastener_simple, fastener_complex)) SUBTYPE OF (structural_frame_product); fastener_grade : OPTIONAL label; END_ENTITY; ENTITY fastener_complex SUBTYPE OF (fastener); fastener_shape : shape_representation_with_units; END_ENTITY; ENTITY fastener_mechanism SUBTYPE OF (structural_frame_product); sequence : OPTIONAL text; fasteners : LIST [1:?] OF fastener; END_ENTITY; (* new for LPM/6 - see Issue 85 *) ENTITY fastener_mechanism_with_position SUBTYPE OF (fastener_mechanism); fastener_positions : LIST [1:?] OF length_measure_with_unit; WHERE WRF32 : SIZEOF(fastener_positions) = SIZEOF(SELF\fastener_mechanism.fasteners); (* the number of fasteners must equal the number of positions *) END_ENTITY; ENTITY fastener_simple SUPERTYPE OF (ONEOF (fastener_simple_bolt, fastener_simple_nut, fastener_simple_washer, fastener_simple_stud, fastener_simple_nail, fastener_simple_pin, fastener_simple_screw, fastener_simple_shear_connector) ANDOR fastener_simple_countersunk ANDOR fastener_simple_curved) SUBTYPE OF (fastener); nominal_diameter : positive_length_measure_with_unit; nominal_length : OPTIONAL positive_length_measure_with_unit; END_ENTITY; (* Modified for LPM/6 *) ENTITY fastener_simple_bolt SUPERTYPE OF (ONEOF (fastener_simple_bolt_circular_head, fastener_simple_bolt_hexagonal_head, fastener_simple_bolt_square_head)) SUBTYPE OF (fastener_simple); length_of_shank : OPTIONAL positive_length_measure_with_unit; bolt_preload : OPTIONAL force_measure_with_unit; full_section_area : OPTIONAL area_measure_with_unit; reduced_section_area : OPTIONAL area_measure_with_unit; DERIVE bolt_ref : BAG OF identifier := SELF\structural_frame_item.item_ref; END_ENTITY; ENTITY fastener_simple_bolt_circular_head SUBTYPE OF (fastener_simple_bolt); bolt_head_height : positive_length_measure_with_unit; head_diameter : positive_length_measure_with_unit; END_ENTITY; ENTITY fastener_simple_bolt_hexagonal_head SUBTYPE OF (fastener_simple_bolt); bolt_head_height : positive_length_measure_with_unit; distance_across_vertices : OPTIONAL positive_length_measure_with_unit; distance_across_flats : OPTIONAL positive_length_measure_with_unit; WHERE WRF3 : EXISTS (distance_across_vertices) OR EXISTS (distance_across_flats); WRF4 : NOT( (distance_across_flats.value_component > distance_across_vertices.value_component) AND (EXISTS (distance_across_vertices) AND EXISTS (distance_across_flats)) ); END_ENTITY; ENTITY fastener_simple_bolt_square_head SUBTYPE OF (fastener_simple_bolt); bolt_head_height : positive_length_measure_with_unit; distance_across_flats : positive_length_measure_with_unit; END_ENTITY; ENTITY fastener_simple_countersunk SUBTYPE OF (fastener_simple); countersink_angle : plane_angle_measure_with_unit; countersink_depth : OPTIONAL positive_length_measure_with_unit; END_ENTITY; ENTITY fastener_simple_curved SUBTYPE OF (fastener_simple); curve_definition : curve; END_ENTITY; ENTITY fastener_simple_nail SUBTYPE OF (fastener_simple); nail_type : OPTIONAL text; nail_drive_type : OPTIONAL text; nail_head_shape : OPTIONAL text; nail_point_type : OPTIONAL text; END_ENTITY; (* Modified for LPM/6 *) ENTITY fastener_simple_nut SUPERTYPE OF (ONEOF (fastener_simple_nut_circular, fastener_simple_nut_hexagonal, fastener_simple_nut_square) ANDOR fastener_simple_nut_closed) SUBTYPE OF (fastener_simple); DERIVE nut_ref : BAG OF identifier := SELF\structural_frame_item.item_ref; WHERE WRF28 : NOT('STRUCTURAL_FRAME_SCHEMA.FASTENER_SIMPLE_CURVED' IN TYPEOF(SELF)); END_ENTITY; ENTITY fastener_simple_nut_circular SUBTYPE OF (fastener_simple_nut); outside_diameter : positive_length_measure_with_unit; END_ENTITY; ENTITY fastener_simple_nut_closed SUBTYPE OF (fastener_simple_nut); nut_depth : positive_length_measure_with_unit; WHERE WRF5 : SELF\fastener_simple.nominal_length.value_component > nut_depth.value_component; END_ENTITY; ENTITY fastener_simple_nut_hexagonal SUBTYPE OF (fastener_simple_nut); distance_across_vertices : OPTIONAL positive_length_measure_with_unit; distance_across_flats : OPTIONAL positive_length_measure_with_unit; WHERE WRF6 : EXISTS (distance_across_vertices) OR EXISTS (distance_across_flats); WRF7 : NOT( (distance_across_flats.value_component > distance_across_vertices.value_component) AND (EXISTS (distance_across_vertices) AND EXISTS (distance_across_flats)) ); END_ENTITY; ENTITY fastener_simple_nut_square SUBTYPE OF (fastener_simple_nut); distance_across_flats : positive_length_measure_with_unit; END_ENTITY; ENTITY fastener_simple_pin SUBTYPE OF (fastener_simple); pin_type : OPTIONAL text; END_ENTITY; ENTITY fastener_simple_screw SUPERTYPE OF (ONEOF (fastener_simple_screw_machine, fastener_simple_screw_tapered) ANDOR fastener_simple_screw_self_drilling ANDOR fastener_simple_screw_self_tapping) SUBTYPE OF (fastener_simple); screw_type : OPTIONAL text; screw_drive_type : OPTIONAL text; screw_point_type : OPTIONAL text; screw_head_height : OPTIONAL positive_length_measure_with_unit; full_section_area : OPTIONAL area_measure_with_unit; reduced_section_area : OPTIONAL area_measure_with_unit; END_ENTITY; ENTITY fastener_simple_screw_machine SUBTYPE OF (fastener_simple_screw); WHERE WRF29 : NOT ('STRUCTURAL_FRAME_SCHEMA.FASTENER_SIMPLE_CURVED' IN TYPEOF(SELF)); END_ENTITY; ENTITY fastener_simple_screw_self_drilling SUBTYPE OF (fastener_simple_screw); hole_cutting_method : cutting_type; pilot_hole_diameter : OPTIONAL positive_length_measure_with_unit; drill_diameter : OPTIONAL positive_length_measure_with_unit; WHERE WRF8 : NOT( (pilot_hole_diameter.value_component > drill_diameter.value_component) AND (EXISTS (pilot_hole_diameter) AND EXISTS (drill_diameter)) ); END_ENTITY; ENTITY fastener_simple_screw_self_tapping SUBTYPE OF (fastener_simple_screw); thread_cutting_method : cutting_type; pilot_hole_diameter : OPTIONAL positive_length_measure_with_unit; END_ENTITY; ENTITY fastener_simple_screw_tapered SUBTYPE OF (fastener_simple_screw); absolute_taper : OPTIONAL length_measure_with_unit; relative_taper : OPTIONAL ratio_measure_with_unit; WHERE WRF9 : EXISTS (absolute_taper) OR EXISTS (relative_taper); END_ENTITY; ENTITY fastener_simple_shear_connector SUBTYPE OF (fastener_simple); head_shape : OPTIONAL text; connector_type : OPTIONAL text; connection_method : OPTIONAL text; END_ENTITY; (* Modified for LPM/6 - see Issue 14 *) ENTITY fastener_simple_stud SUBTYPE OF (fastener_simple); thread_length_1 : positive_length_measure_with_unit; thread_length_2 : OPTIONAL positive_length_measure_with_unit; length_of_shank : OPTIONAL positive_length_measure_with_unit; full_section_area : OPTIONAL area_measure_with_unit; reduced_section_area : OPTIONAL area_measure_with_unit; DERIVE thread_length_value_1 : REAL := thread_length_1.value_component; thread_length_value_2 : REAL := NVL(thread_length_2.value_component, 0.0); length_of_shank_value : REAL := NVL(length_of_shank.value_component, 0.0); WHERE WRF33 : NOT (EXISTS(SELF\fastener_simple.nominal_length) AND ( (thread_length_value_1 + thread_length_value_2 + length_of_shank_value) > (SELF\fastener_simple.nominal_length.value_component) ) ); (* if a nominal length is specified its value shall be greater than the sum of the 2 thread lengths and the shank *) END_ENTITY; (* Modified for LPM/6 *) ENTITY fastener_simple_washer SUPERTYPE OF (ONEOF (fastener_simple_washer_tapered, fastener_simple_washer_load_indicating)) SUBTYPE OF (fastener_simple); washer_shape : OPTIONAL text; inside_diameter : OPTIONAL positive_length_measure_with_unit; external_dimension : OPTIONAL positive_length_measure_with_unit; DERIVE washer_ref : BAG OF identifier := SELF\structural_frame_item.item_ref; WHERE WRF10 : NOT( (EXISTS (inside_diameter) AND EXISTS (external_dimension)) AND (inside_diameter.value_component > external_dimension.value_component) ); WRF11 : NOT( (EXISTS (inside_diameter)) AND (inside_diameter.value_component < (SELF\fastener_simple.nominal_diameter.value_component)) ); END_ENTITY; ENTITY fastener_simple_washer_load_indicating SUBTYPE OF (fastener_simple_washer); final_gap : positive_length_measure_with_unit; END_ENTITY; ENTITY fastener_simple_washer_tapered SUBTYPE OF (fastener_simple_washer); taper : ratio_measure_with_unit; END_ENTITY; (* Modified for LPM/6 *) ENTITY feature SUPERTYPE OF (ONEOF (feature_cutting_plane, feature_edge_chamfer, feature_surface, feature_thread, feature_volume)) SUBTYPE OF (structural_frame_item); DERIVE uses : SET [0:?] OF located_feature := bag_to_set (USEDIN(SELF,'STRUCTURAL_FRAME_SCHEMA.LOCATED_FEATURE.DESCRIPTIVE_FEATURE')); END_ENTITY; ENTITY feature_cutting_plane SUBTYPE OF (feature); plane_definition : plane; END_ENTITY; ENTITY feature_edge_chamfer ABSTRACT SUPERTYPE OF (ONEOF (feature_edge_chamfer_straight, feature_edge_chamfer_fillet, feature_edge_chamfer_rounding) ) SUBTYPE OF (feature); follow_round : BOOLEAN; END_ENTITY; ENTITY feature_edge_chamfer_fillet SUBTYPE OF (feature_edge_chamfer); edge_fillet_radius : positive_length_measure_with_unit; END_ENTITY; ENTITY feature_edge_chamfer_rounding SUBTYPE OF (feature_edge_chamfer); edge_rounding_radius : positive_length_measure_with_unit; END_ENTITY; ENTITY feature_edge_chamfer_straight SUBTYPE OF (feature_edge_chamfer); edge_chamfer_width : positive_length_measure_with_unit; edge_chamfer_depth : positive_length_measure_with_unit; END_ENTITY; (* Modified for LPM/6 *) ENTITY feature_surface ABSTRACT SUPERTYPE OF (ONEOF (feature_surface_complex, feature_surface_point, feature_surface_simple) ANDOR feature_surface_name_tag ANDOR feature_surface_treatment ANDOR feature_surface_with_layout) SUBTYPE OF (feature); END_ENTITY; ENTITY feature_surface_complex SUBTYPE OF (feature_surface); feature_boundary : bounded_surface; END_ENTITY; ENTITY feature_surface_name_tag SUBTYPE OF (feature_surface); name_tag_items : LIST [1:?] OF text; END_ENTITY; (* New for LPM/6 *) ENTITY feature_surface_point SUBTYPE OF (feature_surface); feature_point : point; END_ENTITY; (* New for LPM/6 *) ENTITY feature_surface_point_mark SUBTYPE OF (feature_surface); marking_process : surface_treatment_hard_stamp; END_ENTITY; ENTITY feature_surface_simple SUBTYPE OF (feature_surface); feature_boundary : LIST [3:?] OF point; END_ENTITY; ENTITY feature_surface_treatment SUBTYPE OF (feature_surface); treatment_definition : surface_treatment; END_ENTITY; ENTITY feature_surface_with_layout SUBTYPE OF (feature_surface); layout : SET [2:?] OF point; END_ENTITY; ENTITY feature_thread SUBTYPE OF (feature); thread_pitch : positive_length_measure_with_unit; thread_length : positive_length_measure_with_unit; thread_profile : OPTIONAL shape_representation_with_units; right_handed : BOOLEAN; number_of_threads : INTEGER; WHERE WRF12 : number_of_threads > 0; END_ENTITY; (* Modified for LPM/6 - see Issue 84 *) ENTITY feature_volume ABSTRACT SUPERTYPE OF (ONEOF (feature_volume_complex, feature_volume_hole, feature_volume_prismatic) ANDOR feature_volume_curved ANDOR feature_volume_with_depth ANDOR feature_volume_with_limit ANDOR feature_volume_with_layout ANDOR feature_volume_with_process) SUBTYPE OF (feature); END_ENTITY; ENTITY feature_volume_complex SUBTYPE OF (feature_volume); feature_shape : shape_representation_with_units; END_ENTITY; ENTITY feature_volume_curved SUBTYPE OF (feature_volume); feature_trace : curve; END_ENTITY; ENTITY feature_volume_curved_line SUBTYPE OF (feature_volume_curved); WHERE WRF13 : 'STRUCTURAL_FRAME_SCHEMA.LINE' IN TYPEOF (SELF\feature_volume_curved.feature_trace); END_ENTITY; ENTITY feature_volume_hole ABSTRACT SUPERTYPE OF ( ONEOF (feature_volume_hole_circular, feature_volume_hole_rectangular, feature_volume_hole_slotted)) SUBTYPE OF (feature_volume); END_ENTITY; ENTITY feature_volume_hole_circular SUPERTYPE OF (feature_volume_hole_circular_threaded) SUBTYPE OF (feature_volume_hole); hole_radius : positive_length_measure_with_unit; END_ENTITY; ENTITY feature_volume_hole_circular_threaded SUBTYPE OF (feature_volume_hole_circular); thread_definition : feature_thread; END_ENTITY; ENTITY feature_volume_hole_rectangular SUBTYPE OF (feature_volume_hole); hole_length : positive_length_measure_with_unit; hole_height : positive_length_measure_with_unit; fillet_radius : OPTIONAL positive_length_measure_with_unit; DERIVE fillet_radius_value : REAL := NVL(fillet_radius.value_component, 0.0); hole_length_value : REAL := hole_length.value_component; hole_height_value : REAL := hole_height.value_component; WHERE WRF14 : fillet_radius_value < (hole_length_value/2); WRF15 : fillet_radius_value < (hole_height_value/2); END_ENTITY; ENTITY feature_volume_hole_slotted SUPERTYPE OF (feature_volume_hole_slotted_curved) SUBTYPE OF (feature_volume_hole); slot_height : positive_length_measure_with_unit; slot_length : positive_length_measure_with_unit; WHERE WRF16 : slot_length.value_component > slot_height.value_component; END_ENTITY; ENTITY feature_volume_hole_slotted_curved SUBTYPE OF (feature_volume_hole_slotted); curve_radius : positive_length_measure_with_unit; sector_angle : plane_angle_measure_with_unit; DERIVE slot_radius : REAL := (SELF\feature_volume_hole_slotted.slot_height.value_component)/2.0; END_ENTITY; ENTITY feature_volume_prismatic ABSTRACT SUPERTYPE OF ( ONEOF (feature_volume_prismatic_chamfer, feature_volume_prismatic_flange_notch, feature_volume_prismatic_flange_chamfer, feature_volume_prismatic_notch, feature_volume_prismatic_skewed_end)) SUBTYPE OF (feature_volume); top_or_bottom_edge : top_or_bottom; start_or_end : start_or_end_face; original_face : BOOLEAN; END_ENTITY; ENTITY feature_volume_prismatic_chamfer SUBTYPE OF (feature_volume_prismatic); chamfer_length : positive_length_measure_with_unit; chamfer_depth : positive_length_measure_with_unit; END_ENTITY; ENTITY feature_volume_prismatic_flange_chamfer SUBTYPE OF (feature_volume_prismatic); left_or_right_hand : left_or_right; flange_chamfer_length : positive_length_measure_with_unit; flange_chamfer_width : positive_length_measure_with_unit; END_ENTITY; ENTITY feature_volume_prismatic_flange_notch SUBTYPE OF (feature_volume_prismatic); left_or_right_hand : left_or_right; flange_notch_length : positive_length_measure_with_unit; flange_notch_width : positive_length_measure_with_unit; flange_notch_radius : OPTIONAL positive_length_measure_with_unit; END_ENTITY; ENTITY feature_volume_prismatic_notch SUBTYPE OF (feature_volume_prismatic); notch_length : positive_length_measure_with_unit; notch_depth : positive_length_measure_with_unit; notch_radius : OPTIONAL positive_length_measure_with_unit; END_ENTITY; ENTITY feature_volume_prismatic_skewed_end SUBTYPE OF (feature_volume_prismatic); skew_angle_1 : plane_angle_measure_with_unit; skew_angle_2 : plane_angle_measure_with_unit; END_ENTITY; (* New for LPM/6 - see Issue 84 *) ENTITY feature_volume_with_depth SUBTYPE OF (feature_volume); penetration_depth : positive_length_measure_with_unit; WHERE WRF34 : NOT('STRUCTURAL_FRAME_SCHEMA.FEATURE_VOLUME_COMPLEX' IN TYPEOF(SELF)); (* the feature must be simple to be assigned a depth *) END_ENTITY; ENTITY feature_volume_with_layout SUBTYPE OF (feature_volume); layout : SET [2:?] OF point; END_ENTITY; (* New for LPM/6 - see Issue 84 *) ENTITY feature_volume_with_limit SUBTYPE OF (feature_volume); penetration_limit : INTEGER; WHERE WRF35 : NOT('STRUCTURAL_FRAME_SCHEMA.FEATURE_VOLUME_COMPLEX' IN TYPEOF(SELF)); (* the feature must be simple to be assigned a penetration limit *) WRF36 : penetration_limit > 0; (* the feature must penetrate at least one surface *) END_ENTITY; ENTITY feature_volume_with_process SUBTYPE OF (feature_volume); process_definition : cut; END_ENTITY; (* New for LPM/6 *) ENTITY fixed_reference_swept_surface SUBTYPE OF (swept_surface); directrix : curve; fixed_reference : direction; END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) ENTITY flavour SUBTYPE OF (group_assignment); items : SET [2:?] OF item_reference; END_ENTITY; ENTITY force_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE WRF17 : 'STRUCTURAL_FRAME_SCHEMA.FORCE_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); WRF18 : 'STRUCTURAL_FRAME_SCHEMA.FORCE_MEASURE' IN TYPEOF (SELF\measure_with_unit.value_component); END_ENTITY; ENTITY force_per_length_measure_with_unit SUBTYPE OF (derived_measure_with_unit); WHERE WRF19 : 'STRUCTURAL_FRAME_SCHEMA.FORCE_PER_LENGTH_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); WRF20 : 'STRUCTURAL_FRAME_SCHEMA.FORCE_PER_LENGTH_MEASURE' IN TYPEOF (SELF\measure_with_unit.value_component); END_ENTITY; ENTITY force_per_length_unit SUBTYPE OF (derived_unit); WHERE WRF21 : SIZEOF(SELF\derived_unit.elements) = 2; WRF22 : ('STRUCTURAL_FRAME_SCHEMA.FORCE_UNIT' IN TYPEOF (SELF\derived_unit.elements[1]\derived_unit_element.unit)) AND (SELF\derived_unit.elements[1]\derived_unit_element.exponent = 1.0); WRF23 : ('STRUCTURAL_FRAME_SCHEMA.LENGTH_UNIT' IN TYPEOF (SELF\derived_unit.elements[2]\derived_unit_element.unit)) AND (SELF\derived_unit.elements[2]\derived_unit_element.exponent = -1.0); END_ENTITY; ENTITY force_unit SUBTYPE OF (named_unit); WHERE WRF24 : (SELF\named_unit.dimensions.length_exponent = 1.0) AND (SELF\named_unit.dimensions.mass_exponent = 1.0) AND (SELF\named_unit.dimensions.time_exponent = -2.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0); END_ENTITY; (* New for LPM/6 *) ENTITY founded_item; END_ENTITY; (* STEP Part 43 2nd Edition *) ENTITY frequency_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE WRF25 : 'STRUCTURAL_FRAME_SCHEMA.FREQUENCY_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); WRF26 : 'STRUCTURAL_FRAME_SCHEMA.FREQUENCY_MEASURE' IN TYPEOF (SELF\measure_with_unit.value_component); END_ENTITY; ENTITY frequency_unit SUBTYPE OF (named_unit); WHERE WRF27 : (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent = -1.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0); END_ENTITY; ENTITY functional_role SUPERTYPE OF (functional_role_documented); functional_role_name : label; functional_role_description : text; INVERSE role_for_assemblies : SET [1:?] OF assembly_design FOR roles; END_ENTITY; ENTITY functional_role_documented SUBTYPE OF (functional_role); document_reference : document_usage_constraint; END_ENTITY; ENTITY functionally_defined_transformation; name : label; description : text; END_ENTITY; (* STEP Part 43 (unchanged in 2nd edition) *) ENTITY geographical_location ABSTRACT SUPERTYPE OF (ONEOF(global_location, map_location)); height_above_datum : length_measure_with_unit; datum_name : label; END_ENTITY; ENTITY geometric_curve_set SUBTYPE OF (geometric_set); WHERE WRG1 : SIZEOF(QUERY(temp <* SELF\geometric_set.elements | 'STRUCTURAL_FRAME_SCHEMA.SURFACE' IN TYPEOF(temp))) = 0; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY geometric_representation_context SUBTYPE OF (representation_context); coordinate_space_dimension : dimension_count; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* Modified for LPM/6 *) ENTITY geometric_representation_item SUPERTYPE OF (ONEOF (point, direction, vector, placement, cartesian_transformation_operator, curve, surface, edge_curve, face_surface, poly_loop, vertex_point, solid_model, boolean_result, sphere, right_circular_cone, right_circular_cylinder, torus, block, primitive_2d, right_angular_wedge, eccentric_cone, ellipsoid, faceted_primitive, rectangular_pyramid, cyclide_segment_solid, volume, half_space_solid, half_space_2d, shell_based_surface_model, face_based_surface_model, shell_based_wireframe_model, edge_based_wireframe_model, geometric_set)) SUBTYPE OF (representation_item); DERIVE dim : dimension_count := dimension_of(SELF); WHERE WRG2 : SIZEOF (QUERY (using_rep <* using_representations (SELF) | NOT ('STRUCTURAL_FRAME_SCHEMA.GEOMETRIC_REPRESENTATION_CONTEXT' IN TYPEOF (using_rep.context_of_items)))) = 0; END_ENTITY; (* STEP Part 42 (Modified in 2nd edition) *) ENTITY geometric_set SUPERTYPE OF (ONEOF(geometric_curve_set, geometric_set_replica)) SUBTYPE OF (geometric_representation_item); elements : SET [1:?] OF geometric_set_select; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY geometric_set_replica SUBTYPE OF (geometric_set); parent_set : geometric_set; transformation : cartesian_transformation_operator; DERIVE SELF\geometric_set.elements : SET [1:?] OF geometric_set_select := build_transformed_set(transformation, parent_set); WHERE WRG3 : acyclic_set_replica(SELF, parent_set); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY global_location SUBTYPE OF (geographical_location); latitude_degrees : degrees_rotation; latitude_minutes : minutes_rotation; latitude_seconds : OPTIONAL seconds_rotation; longitude_degrees : degrees_rotation; longitude_minutes : minutes_rotation; longitude_seconds : OPTIONAL seconds_rotation; END_ENTITY; ENTITY global_uncertainty_assigned_context SUBTYPE OF (representation_context); uncertainty : SET [1:?] OF uncertainty_measure_with_unit; END_ENTITY; (* STEP Part 43 (unchanged in 2nd edition) *) ENTITY global_unit_assigned_context SUBTYPE OF (representation_context); units : SET [1:?] OF unit; END_ENTITY; (* STEP Part 41 (2nd edition unchanged) *) ENTITY grid SUPERTYPE OF (ONEOF (grid_of_building, grid_of_site, grid_of_structure) ANDOR ONEOF (grid_orthogonal, grid_skewed, grid_radial)); grid_name : label; grid_description : OPTIONAL text; grid_use : OPTIONAL text; DERIVE gridlines : SET [1:?] OF gridline := bag_to_set (USEDIN(SELF,'STRUCTURAL_FRAME_SCHEMA.GRIDLINE.PARENT_GRID')); grid_levels : SET [0:?] OF grid_level := bag_to_set (USEDIN(SELF,'STRUCTURAL_FRAME_SCHEMA.GRID_LEVEL.PARENT_GRID')); INVERSE constituent_lines : SET [1:?] OF gridline FOR parent_grid; END_ENTITY; ENTITY grid_intersection SUPERTYPE OF (grid_intersection_resolved); grid_intersection_name : label; gridlines : SET [2:2] OF gridline; level : OPTIONAL grid_level; WHERE WRG4 : gridlines[1].parent_grid :=: gridlines[2].parent_grid; WRG5 : NOT (EXISTS(level) AND (level.parent_grid :<>: gridlines[1].parent_grid)); END_ENTITY; ENTITY grid_intersection_resolved SUBTYPE OF (grid_intersection); resolution_point : geographical_location; END_ENTITY; ENTITY grid_level SUBTYPE OF (plane); parent_grid : grid; UNIQUE URG1 : SELF\elementary_surface.position; END_ENTITY; ENTITY grid_of_building SUBTYPE OF (grid); grid_for_building : building; END_ENTITY; ENTITY grid_of_site SUBTYPE OF (grid); grid_for_site : site; END_ENTITY; ENTITY grid_of_structure SUBTYPE OF (grid); grid_for_structure : structure; END_ENTITY; ENTITY grid_offset; intersection : grid_intersection; offset : LIST [2:3] OF length_measure_with_unit; END_ENTITY; ENTITY grid_orthogonal SUBTYPE OF (grid); spacing_1 : LIST [0:?] OF positive_length_measure_with_unit; spacing_2 : LIST [0:?] OF positive_length_measure_with_unit; END_ENTITY; ENTITY grid_radial SUBTYPE OF (grid); spacing_1 : LIST [0:?] OF plane_angle_measure_with_unit; END_ENTITY; ENTITY grid_skewed SUBTYPE OF (grid); skew_angle : plane_angle_measure_with_unit; spacing_1 : LIST [0:?] OF positive_length_measure_with_unit; spacing_2 : LIST [0:?] OF positive_length_measure_with_unit; END_ENTITY; ENTITY gridline SUBTYPE OF (plane); parent_grid : grid; preceding_line : OPTIONAL gridline; INVERSE succeeding_line : SET [0:1] OF gridline FOR preceding_line; UNIQUE URG2 : SELF\elementary_surface.position; WHERE WRG7 : NOT( EXISTS(preceding_line) AND (preceding_line :=: (SELF)) ); END_ENTITY; (* Modified for LPM/6 *) ENTITY group SUPERTYPE OF (media_file); group_name : label; group_description : text; DERIVE id : identifier := get_id_value (SELF); WHERE WRG8 : SIZEOF (USEDIN (SELF, 'STRUCTURAL_FRAME_SCHEMA.' + 'ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1; END_ENTITY; (* STEP Part 41 2nd edition *) (* Modified for LPM/6 - see Issue 90 and 94 *) ENTITY group_assignment ABSTRACT SUPERTYPE OF (ONEOF (flavour, group_of_analysis_data, group_of_design_data, group_of_physical_data, group_of_project_definition_data, group_of_structural_data, group_of_generic_data, managed_data_group) ANDOR group_assignment_actioned ANDOR group_assignment_approved ANDOR media_content ANDOR project_data_group); assigned_group : group; DERIVE role : object_role := get_role (SELF); WHERE WRG9 : SIZEOF (USEDIN (SELF, 'STRUCTURAL_FRAME_SCHEMA.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1; END_ENTITY; (* STEP Part 41 2nd edition *) ENTITY group_assignment_actioned SUBTYPE OF (group_assignment); assigned_action : action; UNIQUE URG3 : SELF\group_assignment.assigned_group, assigned_action; END_ENTITY; ENTITY group_assignment_approved SUBTYPE OF (group_assignment); assigned_approval : approval; UNIQUE URG4 : SELF\group_assignment.assigned_group, assigned_approval; END_ENTITY; ENTITY group_of_analysis_data SUBTYPE OF (group_assignment); items : SET [2:?] OF select_analysis_item; END_ENTITY; ENTITY group_of_design_data SUBTYPE OF (group_assignment); items : SET [2:?] OF select_design_item; END_ENTITY; ENTITY group_of_generic_data SUBTYPE OF (group_assignment); items : SET [1:?] OF select_generic_item; END_ENTITY; ENTITY group_of_physical_data SUBTYPE OF (group_assignment); items : SET [2:?] OF select_physical_item; END_ENTITY; ENTITY group_of_project_definition_data SUBTYPE OF (group_assignment); items : SET [2:?] OF select_project_definition_item; END_ENTITY; ENTITY group_of_structural_data SUBTYPE OF (group_assignment); items : SET [1:?] OF select_structural_item; END_ENTITY; (* Modified for LPM/6 *) ENTITY group_relationship SUPERTYPE OF (group_usage); name : label; description : OPTIONAL text; relating_group : group; related_group : group; END_ENTITY; (* STEP Part 41 (modified in 2nd edition) expanded *) ENTITY group_usage SUBTYPE OF (group_relationship); UNIQUE URG5 : SELF\group_relationship.name, SELF\group_relationship.relating_group, SELF\group_relationship.related_group; WHERE WRG6 : acyclic_group_relationship(SELF, [SELF\group_relationship.related_group], 'STRUCTURAL_FRAME_SCHEMA.GROUP_RELATIONSHIP.RELATED_GROUP'); END_ENTITY; (* New for LPM/6 *) ENTITY half_space_2d SUBTYPE OF (geometric_representation_item); base_curve: curve; agreement_flag: BOOLEAN; END_ENTITY; (* STEP Part 42 (New in 2nd edition) *) ENTITY half_space_solid SUPERTYPE OF (boxed_half_space) SUBTYPE OF (geometric_representation_item); base_surface : surface; agreement_flag : BOOLEAN; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* New for LPM/6 *) ENTITY hexahedron_volume SUBTYPE OF (volume); points : LIST[8:8] OF cartesian_point; WHERE WRH1: above_plane(points[1], points[2], points[3], points[4]) = 0.0; WRH2: above_plane(points[5], points[8], points[7], points[6]) = 0.0; WRH3: above_plane(points[1], points[4], points[8], points[5]) = 0.0; WRH4: above_plane(points[4], points[3], points[7], points[8]) = 0.0; WRH5: above_plane(points[3], points[2], points[6], points[7]) = 0.0; WRH6: above_plane(points[1], points[5], points[6], points[2]) = 0.0; WRH7: same_side([points[1], points[2], points[3]], [points[5], points[6], points[7], points[8]]); WRH8: same_side([points[1], points[4], points[8]], [points[3], points[7], points[6], points[2]]); WRH9: same_side([points[1], points[2], points[5]], [points[3], points[7], points[8], points[4]]); WRH10: same_side([points[5], points[6], points[7]], [points[1], points[2], points[3], points[4]]); WRH11: same_side([points[3], points[7], points[6]], [points[1], points[4], points[8], points[5]]); WRH12: same_side([points[3], points[7], points[8]], [points[1], points[5], points[6], points[2]]); WRH13: points[1].dim = 3; END_ENTITY; (* STEP part 42 (new for 2nd edition) *) ENTITY hyperbola SUBTYPE OF (conic); semi_axis : positive_length_measure; semi_imag_axis : positive_length_measure; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* New for LPM/6 *) ENTITY id_attribute; attribute_value : identifier; identified_item : id_attribute_select; END_ENTITY; (* STEP Part 41 2nd edition *) ENTITY inertia_measure_with_unit SUBTYPE OF (derived_measure_with_unit); WHERE WRI1 : 'STRUCTURAL_FRAME_SCHEMA.INERTIA_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); WRI2 : 'STRUCTURAL_FRAME_SCHEMA.INERTIA_MEASURE' IN TYPEOF (SELF\measure_with_unit.value_component); END_ENTITY; ENTITY inertia_unit SUBTYPE OF (derived_unit); WHERE WRI3 : SIZEOF(SELF\derived_unit.elements) = 1; WRI4 : ('STRUCTURAL_FRAME_SCHEMA.LENGTH_UNIT' IN TYPEOF (SELF\derived_unit.elements[1]\derived_unit_element.unit)) AND (SELF\derived_unit.elements[1]\derived_unit_element.exponent = 4.0); END_ENTITY; ENTITY intersection_curve SUBTYPE OF (surface_curve); WHERE WRI5 : SIZEOF(SELF\surface_curve.associated_geometry) = 2; WRI6 : associated_surface(SELF\surface_curve.associated_geometry[1]) <> associated_surface(SELF\surface_curve.associated_geometry[2]); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* New for LPM/6 - See Issue 96 *) ENTITY item_cost_code SUPERTYPE OF (item_cost_code_with_source); cost_code : label; description : OPTIONAL text; END_ENTITY; (* New for LPM/6 - See Issue 96 *) ENTITY item_cost_code_assigned; code : item_cost_code; costed_item : structural_frame_item; UNIQUE URI8 : code, costed_item; (* the combination of cost code and item shall not be repeated *) END_ENTITY; (* New for LPM/6 - See Issue 96 *) ENTITY item_cost_code_with_source SUBTYPE OF (item_cost_code); source : item_ref_source; UNIQUE URI9 : SELF\item_cost_code.cost_code, source; (* the cost code shall be unique within the source *) END_ENTITY; ENTITY item_defined_transformation; name : label; description : text; transform_item_1 : representation_item; transform_item_2 : representation_item; END_ENTITY; (* STEP Part 43 (unchanged in 2nd edition) *) (* Modified for LPM/6 - See Issue 81 *) ENTITY item_property SUPERTYPE OF (item_property_with_source); property_name : label; property_description : OPTIONAL text; property_value : measure_select; END_ENTITY; ENTITY item_property_assigned; property : item_property; item : structural_frame_item; UNIQUE URI1 : property, item; END_ENTITY; (* New for LPM/6 - See Issue 81 *) ENTITY item_property_with_source SUBTYPE OF (item_property); source : item_ref_source; UNIQUE URI7 : SELF\item_property.property_name, source; (* the property name shall be unique within the source *) END_ENTITY; ENTITY item_ref_source ABSTRACT SUPERTYPE OF (ONEOF (item_ref_source_standard, item_ref_source_proprietary, item_ref_source_library)); END_ENTITY; ENTITY item_ref_source_documented; documented_item_source : item_ref_source; document_reference : document_usage_constraint; UNIQUE URI2 : documented_item_source, document_reference; END_ENTITY; (* Modified for LPM/6 - See Issue 81 *) ENTITY item_ref_source_library SUBTYPE OF (item_ref_source); library_owner : person_and_organization; library_name : label; date_of_library : calendar_date; version_of_library : OPTIONAL label; INVERSE library_items : SET [0:?] OF item_reference_library FOR source; END_ENTITY; (* Modified for LPM/6 - See Issue 81 *) ENTITY item_ref_source_proprietary SUBTYPE OF (item_ref_source); manufacturers_name : organization; manufacturers_range : label; year_of_range : year_number; version_of_range : OPTIONAL label; INVERSE proprietary_items : SET [0:?] OF item_reference_proprietary FOR source; END_ENTITY; (* Modified for LPM/6 - See Issue 81 *) ENTITY item_ref_source_standard SUBTYPE OF (item_ref_source); standardization_organization : label; name_of_standard : label; year_of_standard : year_number; version_of_standard : OPTIONAL label; INVERSE standard_items : SET [0:?] OF item_reference_standard FOR source; END_ENTITY; ENTITY item_reference SUPERTYPE OF (ONEOF (item_reference_standard, item_reference_proprietary, item_reference_library)); ref : identifier; WHERE WRI7 : LENGTH(ref) > 0; END_ENTITY; ENTITY item_reference_assigned; assigned_reference : item_reference; assigned_to_item : structural_frame_item; UNIQUE URI3 : assigned_reference, assigned_to_item; END_ENTITY; ENTITY item_reference_library SUBTYPE OF (item_reference); source : item_ref_source_library; UNIQUE URI4 : SELF\item_reference.ref, source; END_ENTITY; ENTITY item_reference_proprietary SUBTYPE OF (item_reference); source : item_ref_source_proprietary; UNIQUE URI5 : SELF\item_reference.ref, source; END_ENTITY; ENTITY item_reference_standard SUBTYPE OF (item_reference); source : item_ref_source_standard; UNIQUE URI6 : SELF\item_reference.ref, source; END_ENTITY; (* Modified for LPM/6 *) ENTITY joint_system SUPERTYPE OF (ONEOF (joint_system_amorphous, joint_system_chemical, joint_system_complex, joint_system_mechanical, joint_system_welded)) SUBTYPE OF (structural_frame_item); place_of_assembly : OPTIONAL shop_or_site; DERIVE joint_system_number : INTEGER := SELF\structural_frame_item.item_number; joint_system_name : LABEL := SELF\structural_frame_item.item_name; design_uses : SET [0:?] OF design_joint_system := bag_to_set (USEDIN(SELF,'STRUCTURAL_FRAME_SCHEMA.DESIGN_JOINT_SYSTEM.DESIGN_JOINT_SYSTEM_SPEC')); physical_uses : SET [0:?] OF located_joint_system := bag_to_set (USEDIN(SELF,'STRUCTURAL_FRAME_SCHEMA.LOCATED_JOINT_SYSTEM.DESCRIPTIVE_JOINT_SYSTEM')); UNIQUE URJ1 : joint_system_number,joint_system_name; END_ENTITY; ENTITY joint_system_amorphous SUBTYPE OF (joint_system); specification : chemical_mechanism; END_ENTITY; ENTITY joint_system_chemical SUBTYPE OF (joint_system); joining_surface : surface; joined_surface : surface; specification : LIST [1:?] OF chemical_mechanism; DERIVE number_of_layers : INTEGER := SIZEOF(specification); WHERE WRJ1 : joining_surface :<>: joined_surface; END_ENTITY; ENTITY joint_system_complex SUBTYPE OF (joint_system); systems : LIST [1:?] OF joint_system; WHERE WRJ2 : SIZEOF(QUERY(joint <* systems | joint :=: (SELF)) ) = 0; END_ENTITY; ENTITY joint_system_mechanical SUBTYPE OF (joint_system); layout_points : LIST [1:?] OF point; mechanism : fastener_mechanism; END_ENTITY; (* Modified for LPM/6 - Subtype added *) ENTITY joint_system_welded SUPERTYPE OF (ONEOF (joint_system_welded_point, joint_system_welded_linear, joint_system_welded_surface, joint_system_welded_with_shape)) SUBTYPE OF (joint_system); weld_specification : weld_mechanism; END_ENTITY; (* Modified for LPM/6 - See Issues 87 and 88 *) ENTITY joint_system_welded_linear SUBTYPE OF (joint_system_welded); weld_path : composite_curve; WHERE WRJ3 : NOT((SELF\joint_system_welded.weld_specification.weld_mechanism_type = SPOT_WELD) OR (SELF\joint_system_welded.weld_specification.weld_mechanism_type = PLUG_WELD)); (* the weld shall not be a plug or spot weld *) END_ENTITY; (* Modified for LPM/6 - See Issues 87 and 88 *) ENTITY joint_system_welded_point SUBTYPE OF (joint_system_welded); weld_position : point; WHERE WRJ4 : (SELF\joint_system_welded.weld_specification.weld_mechanism_type = SPOT_WELD) OR (SELF\joint_system_welded.weld_specification.weld_mechanism_type = PLUG_WELD) OR (SELF\joint_system_welded.weld_specification.weld_mechanism_type = STUD_WELD); (* the weld shall be a plug, stud, or spot weld *) END_ENTITY; (* Modified for LPM/6 - See Issues 87 and 88 *) ENTITY joint_system_welded_surface SUBTYPE OF (joint_system_welded); weld_surface : bounded_surface; WHERE WRJ5 : (SELF\joint_system_welded.weld_specification.weld_mechanism_type = PLUG_WELD) OR (SELF\joint_system_welded.weld_specification.weld_mechanism_type = SURFACING_WELD) OR (SELF\joint_system_welded.weld_specification.weld_mechanism_type = SLOT_WELD); (* the weld shall be a plug or slot weld *) END_ENTITY; (* new for LPM/6 - See Issues 87 and 88 *) ENTITY joint_system_welded_with_shape SUBTYPE OF (joint_system_welded); weld_shape : shape_representation_with_units; END_ENTITY; ENTITY length_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE WRL38 : 'STRUCTURAL_FRAME_SCHEMA.LENGTH_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); WRL39 : 'STRUCTURAL_FRAME_SCHEMA.LENGTH_MEASURE' IN TYPEOF (SELF\measure_with_unit.value_component); END_ENTITY; (* based on STEP Part 41 2nd edition (WR added) *) ENTITY length_unit SUBTYPE OF (named_unit); WHERE WRL1 : (SELF\named_unit.dimensions.length_exponent = 1.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent = 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0); END_ENTITY; (* STEP Part 41 (2nd edition unchanged) *) ENTITY line SUBTYPE OF (curve); pnt : cartesian_point; dir : vector; WHERE WRL2 : dir.dim = pnt.dim; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY linear_acceleration_measure_with_unit SUBTYPE OF (derived_measure_with_unit); WHERE WRL3 : 'STRUCTURAL_FRAME_SCHEMA.LINEAR_ACCELERATION_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); WRL4 : 'STRUCTURAL_FRAME_SCHEMA.LINEAR_ACCELERATION_MEASURE' IN TYPEOF (SELF\measure_with_unit.value_component); END_ENTITY; ENTITY linear_acceleration_unit SUBTYPE OF (derived_unit); WHERE WRL5 : SIZEOF(SELF\derived_unit.elements) = 2; WRL6 : ('STRUCTURAL_FRAME_SCHEMA.LENGTH_UNIT' IN TYPEOF (SELF\derived_unit.elements[1]\derived_unit_element.unit)) AND (SELF\derived_unit.elements[1]\derived_unit_element.exponent = 1.0); WRL7 : ('STRUCTURAL_FRAME_SCHEMA.TIME_UNIT' IN TYPEOF (SELF\derived_unit.elements[2]\derived_unit_element.unit)) AND (SELF\derived_unit.elements[2]\derived_unit_element.exponent = -2.0); END_ENTITY; ENTITY linear_stiffness_measure_with_unit SUBTYPE OF (derived_measure_with_unit); WHERE WRL8 : 'STRUCTURAL_FRAME_SCHEMA.LINEAR_STIFFNESS_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); WRL9 : 'STRUCTURAL_FRAME_SCHEMA.LINEAR_STIFFNESS_MEASURE' IN TYPEOF (SELF\measure_with_unit.value_component); END_ENTITY; ENTITY linear_stiffness_unit SUBTYPE OF (derived_unit); WHERE WRL10 : SIZEOF(SELF\derived_unit.elements) = 2; WRL11 : ('STRUCTURAL_FRAME_SCHEMA.FORCE_UNIT' IN TYPEOF (SELF\derived_unit.elements[1]\derived_unit_element.unit)) AND (SELF\derived_unit.elements[1]\derived_unit_element.exponent = 1.0); WRL12 : ('STRUCTURAL_FRAME_SCHEMA.LENGTH_UNIT' IN TYPEOF (SELF\derived_unit.elements[2]\derived_unit_element.unit)) AND (SELF\derived_unit.elements[2]\derived_unit_element.exponent = -1.0); END_ENTITY; ENTITY linear_velocity_measure_with_unit SUBTYPE OF (derived_measure_with_unit); WHERE WRL13 : 'STRUCTURAL_FRAME_SCHEMA.LINEAR_VELOCITY_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); WRL14 : 'STRUCTURAL_FRAME_SCHEMA.LINEAR_VELOCITY_MEASURE' IN TYPEOF (SELF\measure_with_unit.value_component); END_ENTITY; ENTITY linear_velocity_unit SUBTYPE OF (derived_unit); WHERE WRL15 : SIZEOF(SELF\derived_unit.elements) = 2; WRL16 : ('STRUCTURAL_FRAME_SCHEMA.LENGTH_UNIT' IN TYPEOF (SELF\derived_unit.elements[1]\derived_unit_element.unit)) AND (SELF\derived_unit.elements[1]\derived_unit_element.exponent = 1.0); WRL17 : ('STRUCTURAL_FRAME_SCHEMA.TIME_UNIT' IN TYPEOF (SELF\derived_unit.elements[2]\derived_unit_element.unit)) AND (SELF\derived_unit.elements[2]\derived_unit_element.exponent = -1.0); END_ENTITY; (* Modified for LPM/6 - see Issue 5 *) ENTITY load ABSTRACT SUPERTYPE OF (ONEOF(load_element, load_node, load_member, load_connection)); parent_load_case : load_case; load_name : label; load_description : OPTIONAL text; END_ENTITY; (* Modified for LPM/6 *) ENTITY load_case SUPERTYPE OF (load_case_documented); load_case_name : label; load_case_factor : OPTIONAL REAL; governing_analyses : SET [0:?] OF analysis_method; time_variation : physical_action; DERIVE load_components : SET [1:?] OF load := bag_to_set (USEDIN(SELF, 'STRUCTURAL_FRAME_SCHEMA.LOAD.PARENT_LOAD_CASE')); INVERSE loads : SET [1:?] OF load FOR parent_load_case; WHERE WRL60 : NOT ((SIZEOF(QUERY(components <* load_components | ('STRUCTURAL_FRAME_SCHEMA.LOAD_ELEMENT') IN TYPEOF(components))) > 0 ) AND (SIZEOF(QUERY(components <* load_components | ('STRUCTURAL_FRAME_SCHEMA.LOAD_MEMBER') IN TYPEOF(components))) > 0) ); WRL61 : NOT ((SIZEOF(QUERY(components <* load_components | ('STRUCTURAL_FRAME_SCHEMA.LOAD_NODE') IN TYPEOF(components))) > 0 ) AND (SIZEOF(QUERY(components <* load_components | ('STRUCTURAL_FRAME_SCHEMA.LOAD_CONNECTION') IN TYPEOF(components))) > 0) ); WRL62 : NOT ((SIZEOF(QUERY(components <* load_components | ('STRUCTURAL_FRAME_SCHEMA.LOAD_NODE') IN TYPEOF(components))) > 0 ) AND (SIZEOF(QUERY(components <* load_components | ('STRUCTURAL_FRAME_SCHEMA.LOAD_MEMBER') IN TYPEOF(components))) > 0) ); WRL63 : NOT ((SIZEOF(QUERY(components <* load_components | ('STRUCTURAL_FRAME_SCHEMA.LOAD_ELEMENT') IN TYPEOF(components))) > 0 ) AND (SIZEOF(QUERY(components <* load_components | ('STRUCTURAL_FRAME_SCHEMA.LOAD_CONNECTION') IN TYPEOF(components))) > 0) ); (* All of the above rules simply prevent analytical loads and design loads being mixed in the same load case *) END_ENTITY; ENTITY load_case_documented SUBTYPE OF (load_case); code_ref : document_usage_constraint; END_ENTITY; ENTITY load_combination_occurrence; load_combination_factor : OPTIONAL REAL; parent_load_combination : loading_combination; component_load_case : load_case; UNIQUE URL1 : parent_load_combination, component_load_case; END_ENTITY; ENTITY load_connection SUBTYPE OF (load); supporting_connection : assembly_design_structural_connection; load_values : applied_load; WHERE WRL59 : NOT ('STRUCTURAL_FRAME_SCHEMA.APPLIED_LOAD_STATIC_PRESSURE' IN TYPEOF(load_values)); END_ENTITY; ENTITY load_element ABSTRACT SUPERTYPE OF (ONEOF (load_element_distributed, load_element_thermal, load_element_concentrated)) SUBTYPE OF (load); supporting_element : element; load_position_label : OPTIONAL label; reference_system : OPTIONAL text; destablizing_load : OPTIONAL BOOLEAN; global_or_local : global_or_local_load; END_ENTITY; ENTITY load_element_concentrated SUBTYPE OF (load_element); load_position : point; load_value : applied_load; WHERE WRL40 : NOT ('STRUCTURAL_FRAME_SCHEMA.APPLIED_LOAD_STATIC_PRESSURE' IN TYPEOF(load_value)); END_ENTITY; (* Modified for LPM/6 *) ENTITY load_element_distributed ABSTRACT SUPERTYPE OF (ONEOF (load_element_distributed_surface, load_element_distributed_curve)) SUBTYPE OF (load_element); projected_or_true : projected_or_true_length; WHERE WRL18 : NOT ('STRUCTURAL_FRAME_SCHEMA.ELEMENT_POINT' IN TYPEOF (SELF\load_element.supporting_element)); END_ENTITY; ENTITY load_element_distributed_curve SUPERTYPE OF (load_element_distributed_curve_line) SUBTYPE OF (load_element_distributed); start_load_value : applied_load; end_load_value : applied_load; curve_definition : curve; WHERE WRL41 : NOT ('STRUCTURAL_FRAME_SCHEMA.APPLIED_LOAD_STATIC_PRESSURE' IN TYPEOF(start_load_value)); WRL42 : NOT ('STRUCTURAL_FRAME_SCHEMA.APPLIED_LOAD_STATIC_PRESSURE' IN TYPEOF(end_load_value)); WRL44 : TYPEOF(start_load_value) = TYPEOF(end_load_value); END_ENTITY; ENTITY load_element_distributed_curve_line SUBTYPE OF (load_element_distributed_curve); WHERE WRL19 : 'STRUCTURAL_FRAME_SCHEMA.LINE' IN TYPEOF (SELF\load_element_distributed_curve.curve_definition); END_ENTITY; ENTITY load_element_distributed_surface ABSTRACT SUPERTYPE OF (ONEOF (load_element_distributed_surface_uniform, load_element_distributed_surface_varying)) SUBTYPE OF (load_element_distributed); surface_definition : bounded_surface; WHERE WRL20 : NOT ('STRUCTURAL_FRAME_SCHEMA.ELEMENT_CURVE' IN TYPEOF (SELF\load_element.supporting_element)); END_ENTITY; ENTITY load_element_distributed_surface_uniform SUBTYPE OF (load_element_distributed_surface); load_value : applied_load_static_pressure; END_ENTITY; ENTITY load_element_distributed_surface_varying SUBTYPE OF (load_element_distributed_surface); load_values : SET [4:4] OF applied_load_static_pressure; WHERE WRL45 : 'STRUCTURAL_FRAME_SCHEMA.RECTANGULAR_TRIMMED_SURFACE' IN TYPEOF (SELF\load_element_distributed_surface.surface_definition); END_ENTITY; ENTITY load_element_thermal SUBTYPE OF (load_element); temperature_gradients : LIST [1:3] OF measure_with_unit; END_ENTITY; (* New for LPM/6 - see Issue 5 *) ENTITY load_member ABSTRACT SUPERTYPE OF (ONEOF(load_member_distributed, load_member_concentrated)) SUBTYPE OF (load); supporting_member : assembly_design_structural_member; load_position_label : OPTIONAL label; reference_system : OPTIONAL text; destablizing_load : OPTIONAL BOOLEAN; global_or_local : global_or_local_load; END_ENTITY; (* New for LPM/6 - see Issue 5 *) ENTITY load_member_concentrated SUBTYPE OF (load_member); load_position : point; load_value : applied_load; WHERE WRL53 : NOT ('STRUCTURAL_FRAME_SCHEMA.APPLIED_LOAD_STATIC_PRESSURE' IN TYPEOF(load_value)); (* the applied load shall not be a pressure *) END_ENTITY; (* New for LPM/6 - see Issue 5 *) ENTITY load_member_distributed ABSTRACT SUPERTYPE OF (ONEOF (load_member_distributed_surface, load_member_distributed_curve)) SUBTYPE OF (load_member); projected_or_true : projected_or_true_length; END_ENTITY; (* New for LPM/6 - see Issue 5 *) ENTITY load_member_distributed_curve SUPERTYPE OF (load_member_distributed_curve_line) SUBTYPE OF (load_member_distributed); start_load_value : applied_load; end_load_value : applied_load; curve_definition : curve; WHERE WRL54 : NOT ('STRUCTURAL_FRAME_SCHEMA.APPLIED_LOAD_STATIC_PRESSURE' IN TYPEOF(start_load_value)); (* the start load shall not be a pressure *) WRL55 : NOT ('STRUCTURAL_FRAME_SCHEMA.APPLIED_LOAD_STATIC_PRESSURE' IN TYPEOF(end_load_value)); (* the end load shall not be a pressure *) WRL56 : TYPEOF(start_load_value) = TYPEOF(end_load_value); (* the start and end loads shall be of the same type *) END_ENTITY; (* New for LPM/6 - see Issue 5 *) ENTITY load_member_distributed_curve_line SUBTYPE OF (load_member_distributed_curve); WHERE WRL57 : 'STRUCTURAL_FRAME_SCHEMA.LINE' IN TYPEOF (SELF\load_member_distributed_curve.curve_definition); (* the load is applied on a line *) END_ENTITY; (* New for LPM/6 - see Issue 5 *) ENTITY load_member_distributed_surface ABSTRACT SUPERTYPE OF (ONEOF (load_member_distributed_surface_uniform, load_member_distributed_surface_varying)) SUBTYPE OF (load_member_distributed); surface_definition : bounded_surface; END_ENTITY; (* New for LPM/6 - see Issue 5 *) ENTITY load_member_distributed_surface_uniform SUBTYPE OF (load_member_distributed_surface); load_value : applied_load_static_pressure; END_ENTITY; (* New for LPM/6 - see Issue 5 *) ENTITY load_member_distributed_surface_varying SUBTYPE OF (load_member_distributed_surface); load_values : SET [4:4] OF applied_load_static_pressure; WHERE WRL58 : 'STRUCTURAL_FRAME_SCHEMA.RECTANGULAR_TRIMMED_SURFACE' IN TYPEOF (SELF\load_element_distributed_surface.surface_definition); (* the boundary of the load is defined by a rectangular surface *) END_ENTITY; ENTITY load_node SUBTYPE OF (load); supporting_node: node; load_values : applied_load; WHERE WRL43 : NOT ('STRUCTURAL_FRAME_SCHEMA.APPLIED_LOAD_STATIC_PRESSURE' IN TYPEOF(load_values)); END_ENTITY; ENTITY loaded_product; product : structural_frame_product; load_definition : applied_load; time_variation : OPTIONAL physical_action; END_ENTITY; (* Modified for LPM/6 *) ENTITY loading_combination; loading_combination_name : label; loading_combination_description : OPTIONAL text; loaded_model : OPTIONAL analysis_model; DERIVE cases : SET [1:?] OF load_combination_occurrence := bag_to_set (USEDIN(SELF, 'STRUCTURAL_FRAME_SCHEMA.LOAD_COMBINATION_OCCURRENCE.PARENT_LOAD_COMBINATION')); INVERSE load_cases : SET [1:?] OF load_combination_occurrence FOR parent_load_combination; END_ENTITY; ENTITY local_time; hour_component : hour_in_day; minute_component : OPTIONAL minute_in_hour; second_component : OPTIONAL second_in_minute; zone : coordinated_universal_time_offset; WHERE WRL21 : valid_time (SELF); END_ENTITY; (* STEP Part 41 (2nd edition unchanged) *) (* Modified for LPM/6 - see Issue 9 *) ENTITY located_assembly SUPERTYPE OF (located_assembly_child ANDOR located_assembly_marked) SUBTYPE OF (located_item); location_on_grid : OPTIONAL SET [1:?] OF grid_offset; descriptive_assembly : assembly; parent_structure : structure_select; DERIVE component_parts : SET [0:?] OF located_part := bag_to_set (USEDIN(SELF,'STRUCTURAL_FRAME_SCHEMA.LOCATED_PART.PARENT_ASSEMBLY')); sub_assemblies : SET [0:?] OF located_assembly := bag_to_set (USEDIN(SELF,'STRUCTURAL_FRAME_SCHEMA.LOCATED_ASSEMBLY.PARENT_STRUCTURE')); UNIQUE URL2 : SELF\located_item.location, descriptive_assembly, parent_structure; (* the coordinate system is unique to this assembly in this structure *) WHERE WRL22 : SELF\located_item.location.coord_system_use = 'Assembly Coordinate System'; (* the coordinate system shall be an 'Assembly Coordinate System' *) WRL46 : parent_structure :<>: (SELF); (* the assembly cannot be part of itself *) END_ENTITY; (* Modified for LPM/6 - see Issue 9 *) ENTITY located_assembly_child SUBTYPE OF (located_assembly); WHERE WRL47 : 'STRUCTURAL_FRAME_SCHEMA.ASSEMBLY_MANUFACTURING_CHILD' IN TYPEOF(SELF\located_assembly.descriptive_assembly); (* the assembly is a manufacturing sub-assembly *) WRL48 : ('STRUCTURAL_FRAME_SCHEMA.LOCATED_ASSEMBLY' IN TYPEOF(SELF\located_assembly.parent_structure)) AND ('STRUCTURAL_FRAME_SCHEMA.ASSEMBLY_MANUFACTURING' IN TYPEOF(SELF\located_assembly.parent_structure.descriptive_assembly)); (* the sub-assembly is located within a located manufacturing assembly *) WRL49 : SELF\located_assembly.descriptive_assembly.parent_assembly :=: SELF\located_assembly.parent_structure.descriptive_assembly; (* the sub-assembly belongs to the same structure as its parent *) WRL50 : 'STRUCTURAL_FRAME_SCHEMA.COORD_SYSTEM_CHILD' IN TYPEOF (SELF\located_item.location); (* the sub-assembly is located by a child coordinate system *) WRL51 : SELF\located_item.location.parent_coord_system :=: SELF\located_assembly.parent_structure\located_item.location; (* the assembly_manufacturing_child is located with respect to the assembly_manufacturing to which it belongs *) WRL52 : NOT ( (SIZEOF(SELF\located_assembly.component_parts) = 0) AND (SIZEOF(SELF\located_assembly.sub_assemblies) = 0) ); (* the sub-assembly must be composed of either parts or sub-assemblies *) END_ENTITY; (* New for LPM/6 - see Issue 96 *) ENTITY located_assembly_marked SUBTYPE OF (located_assembly); assembly_mark : label; client_mark : OPTIONAL label; prelim_mark : OPTIONAL label; shipping_mark : OPTIONAL label; bar_code : OPTIONAL label; END_ENTITY; ENTITY located_feature ABSTRACT SUPERTYPE OF (ONEOF (located_feature_for_assembly, located_feature_for_design_part, located_feature_for_located_assembly, located_feature_for_located_part, located_feature_for_part)) SUBTYPE OF (located_item); descriptive_feature : feature; WHERE WRL23 : SELF\located_item.location.coord_system_use = 'Feature Coordinate System'; END_ENTITY; ENTITY located_feature_for_assembly SUBTYPE OF (located_feature); modified_assembly : assembly; UNIQUE URL3 : SELF\located_item.location, SELF\located_feature.descriptive_feature, modified_assembly; END_ENTITY; ENTITY located_feature_for_design_part SUBTYPE OF (located_feature); modified_part : design_part; UNIQUE URL4 : SELF\located_item.location, SELF\located_feature.descriptive_feature, modified_part; END_ENTITY; ENTITY located_feature_for_located_assembly SUBTYPE OF (located_feature); modified_assembly : located_assembly; UNIQUE URL5 : SELF\located_item.location, SELF\located_feature.descriptive_feature, modified_assembly; WHERE WRL24 : 'STRUCTURAL_FRAME_SCHEMA.COORD_SYSTEM_CHILD' IN TYPEOF (SELF\located_item.location); WRL25 : SELF\located_item.location.parent_coord_system :=: modified_assembly\located_item.location; END_ENTITY; ENTITY located_feature_for_located_part SUPERTYPE OF (located_feature_joint_dependent) SUBTYPE OF (located_feature); modified_part : located_part; UNIQUE URL6 : SELF\located_item.location, SELF\located_feature.descriptive_feature, modified_part; WHERE WRL26 : 'STRUCTURAL_FRAME_SCHEMA.COORD_SYSTEM_CHILD' IN TYPEOF (SELF\located_item.location); WRL27 : SELF\located_item.location.parent_coord_system :=: modified_part\located_item.location; END_ENTITY; ENTITY located_feature_for_part SUBTYPE OF (located_feature); modified_part : part; UNIQUE URL7 : SELF\located_item.location, SELF\located_feature.descriptive_feature, modified_part; END_ENTITY; ENTITY located_feature_joint_dependent SUBTYPE OF (located_feature_for_located_part); feature_for_joint : located_joint_system; END_ENTITY; ENTITY located_item ABSTRACT SUPERTYPE OF (ONEOF (located_assembly, located_feature, located_joint_system, located_part, located_site, located_structure)) SUBTYPE OF (structural_frame_item); location : coord_system; END_ENTITY; ENTITY located_joint_system SUBTYPE OF (located_item); descriptive_joint_system : joint_system; parent_assembly : located_assembly; DERIVE features : SET [0:?] OF located_feature_joint_dependent := bag_to_set (USEDIN(SELF,'STRUCTURAL_FRAME_SCHEMA.LOCATED_FEATURE_JOINT_DEPENDENT.FEATURE_FOR_JOINT')); UNIQUE URL8 : SELF\located_item.location, descriptive_joint_system, parent_assembly; WHERE WRL28 : SELF\located_item.location.coord_system_use = 'Joint System Coordinate System'; WRL29 : 'STRUCTURAL_FRAME_SCHEMA.COORD_SYSTEM_CHILD' IN TYPEOF (SELF\located_item.location); WRL30 : 'STRUCTURAL_FRAME_SCHEMA.ASSEMBLY_MANUFACTURING' IN TYPEOF (parent_assembly.descriptive_assembly); WRL31 : SELF\located_item.location.parent_coord_system :=: parent_assembly\located_assembly\located_item.location; END_ENTITY; ENTITY located_part SUBTYPE OF (located_item); descriptive_part : part; parent_assembly : located_assembly; DERIVE features : SET [0:?] OF located_feature_for_located_part := bag_to_set (USEDIN(SELF,'STRUCTURAL_FRAME_SCHEMA.LOCATED_FEATURE_FOR_LOCATED_PART.MODIFIED_PART')); UNIQUE URL9 : SELF\located_item.location, descriptive_part, parent_assembly; WHERE WRL32 : SELF\located_item.location.coord_system_use = 'Part Coordinate System'; WRL33 : 'STRUCTURAL_FRAME_SCHEMA.COORD_SYSTEM_CHILD' IN TYPEOF (SELF\located_item.location); WRL34 : 'STRUCTURAL_FRAME_SCHEMA.ASSEMBLY_MANUFACTURING' IN TYPEOF (parent_assembly.descriptive_assembly); WRL35 : SELF\located_item.location.parent_coord_system :=: parent_assembly\located_assembly\located_item.location; END_ENTITY; (* New for LPM/6 - see Issue 91 *) ENTITY located_part_marked SUBTYPE OF (located_part); piece_mark : OPTIONAL label; prelim_mark : OPTIONAL label; bar_code : OPTIONAL label; quantity : OPTIONAL INTEGER; main_piece : LOGICAL; END_ENTITY; ENTITY located_part_joint; part_joint_label : label; part_joint_nature : OPTIONAL text; logically_joined_parts : SET [2:2] OF located_part; required_joints : SET [1:?] OF located_joint_system; END_ENTITY; ENTITY located_site SUBTYPE OF (located_item); descriptive_site : site; parent_project : project_select; UNIQUE URL10 : SELF\located_item.location, descriptive_site, parent_project; WHERE WRL36 : SELF\located_item.location.coord_system_use = 'Site Coordinate System'; END_ENTITY; ENTITY located_structure SUBTYPE OF (located_item); descriptive_structure : structure; parent_site : site_select; UNIQUE URL11 : SELF\located_item.location, descriptive_structure, parent_site; WHERE WRL37 : SELF\located_item.location.coord_system_use = 'Structure Coordinate System'; END_ENTITY; ENTITY loop SUPERTYPE OF (ONEOF(vertex_loop, edge_loop, poly_loop)) SUBTYPE OF (topological_representation_item); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY managed_application_installation; application_id : INTEGER; application_name : label; application_version : label; application_description : OPTIONAL text; application_vendor : OPTIONAL organization; installation_id : INTEGER; installation_name : label; installation_owner : OPTIONAL organization; UNIQUE URM1 : application_id,installation_id; WHERE WRM1 : installation_id > 0; WRM2 : application_id > 0; END_ENTITY; ENTITY managed_data_creation SUBTYPE OF (managed_data_transaction); DERIVE created_set : SET [1:?] OF managed_data_item := bag_to_set (USEDIN(SELF, 'STRUCTURAL_FRAME_SCHEMA.MANAGED_DATA_ITEM.HISTORY')); WHERE WRM3 : SELF\managed_data_transaction.new_ids_assigned = TRUE; WRM4 : SIZEOF(QUERY(tmp <* created_set | tmp.originating_application :<>: (SELF\managed_data_transaction.application)) ) = 0; END_ENTITY; ENTITY managed_data_deleted; data_status : data_status_type; DERIVE deleted_data_items : SET [1:?] OF managed_data_item := bag_to_set (USEDIN(SELF, 'STRUCTURAL_FRAME_SCHEMA.MANAGED_DATA_ITEM.DATA_ITEM')); END_ENTITY; ENTITY managed_data_export SUBTYPE OF (managed_data_transaction); data_destination : select_data_source; DERIVE exported_set : SET [1:?] OF managed_data_item := bag_to_set (USEDIN(SELF, 'STRUCTURAL_FRAME_SCHEMA.MANAGED_DATA_ITEM.HISTORY')); assignments : SET [0:?] OF managed_data_group := bag_to_set (USEDIN(SELF, 'STRUCTURAL_FRAME_SCHEMA.MANAGED_DATA_GROUP.ITEMS')); END_ENTITY; ENTITY managed_data_group SUBTYPE OF (group_assignment); items : SET [1:?] OF managed_data_transaction; END_ENTITY; ENTITY managed_data_import SUBTYPE OF (managed_data_transaction); data_source : select_data_source; DERIVE imported_set : SET [1:?] OF managed_data_item := bag_to_set (USEDIN(SELF, 'STRUCTURAL_FRAME_SCHEMA.MANAGED_DATA_ITEM.HISTORY')); assignments : SET [0:?] OF managed_data_group := bag_to_set (USEDIN(SELF, 'STRUCTURAL_FRAME_SCHEMA.MANAGED_DATA_GROUP.ITEMS')); END_ENTITY; (* Modified for LPM/6 - See Issues 80 and 103 *) ENTITY managed_data_item; instance_id : globally_unique_id; originating_application : OPTIONAL managed_application_installation; data_item : select_data_item; history : LIST [0:?] OF UNIQUE managed_data_transaction; original_data : LOGICAL; UNIQUE URM5 : instance_id, data_item; (* the meta-data provided by the managed_data_item (in particular, its unique identifier) shall be unique to the item of data associated here *) WHERE WRM36 : unique_data_item(data_item); (* The instance of the data entity referenced by the attribute data_item shall be unique to this managed_data_item, or it shall be of the type managed_data_deleted *) END_ENTITY; (* New for LPM/6 - See Issues 80 and 102 *) ENTITY managed_data_item_with_history SUBTYPE OF (managed_data_item); DERIVE number_of_uses : INTEGER := SIZEOF(SELF\managed_data_item.history); first_managing_application : managed_application_installation := SELF\managed_data_item.history[1] \managed_data_transaction.application; first_managing_person : person := SELF\managed_data_item.history[1] \managed_data_transaction.user.the_person; date_first_managed : calendar_date := SELF\managed_data_item.history[1] \managed_data_transaction.processing_date.date_component; last_managing_application : managed_application_installation := SELF\managed_data_item.history[number_of_uses] \managed_data_transaction.application; last_managing_person : person := SELF\managed_data_item.history[number_of_uses] \managed_data_transaction.user.the_person; date_last_managed : calendar_date := SELF\managed_data_item.history[number_of_uses] \managed_data_transaction.processing_date.date_component; WHERE WRM60 : number_of_uses > 0; (* the data must have history *) WRM61 : EXISTS(SELF\managed_data_item.originating_application); (* the data must be associated with an application *) WRM6 : first_managing_application :=: originating_application; (* the application that first managed the data must be the one that provided its unique identifier *) WRM7 : ('STRUCTURAL_FRAME_SCHEMA.MANAGED_DATA_CREATION' IN TYPEOF(SELF\managed_data_item.history[1])); (* the first data processing event that may be recorded for each instance of manged_data_item will be its creation *) WRM8 : NOT ( (original_data = TRUE) AND ('STRUCTURAL_FRAME_SCHEMA.MANAGED_DATA_IMPORT' IN TYPEOF(SELF\managed_data_item.history[1])) ); (* the data cannot be deemed as original if has been imported *) WRM37 : SIZEOF(QUERY(creation <* SELF\managed_data_item.history | ('STRUCTURAL_FRAME_SCHEMA.MANAGED_DATA_CREATION') IN TYPEOF(creation))) = 1; (* an instance of manged_data_item can only be created once *) WRM38 : NOT( ('STRUCTURAL_FRAME_SCHEMA.MANAGED_DATA_DELETED' IN TYPEOF(SELF\managed_data_item.data_item)) AND (number_of_uses = 1) ); (* an instance of managed_data_item has to be created before the data associated with it can be deleted. *) WRM39 : NOT( ('STRUCTURAL_FRAME_SCHEMA.MANAGED_DATA_DELETED' IN TYPEOF(SELF\managed_data_item.data_item)) AND (SIZEOF(QUERY(modification <* SELF\managed_data_item.history | ('STRUCTURAL_FRAME_SCHEMA.MANAGED_DATA_MODIFICATION') IN TYPEOF(modification))) < 1) ); (* there must be at least one instance of managed_data_modification associated with the managed_data_item if the engineering data has been deleted. In other words, the data processing event that deleted the engineering data is recorded by the instance of managed_data_modification. (Deletion is considered in CIS/2 to be a type of data modification.) *) END_ENTITY; ENTITY managed_data_modification SUBTYPE OF (managed_data_transaction); DERIVE modified_set : SET [1:?] OF managed_data_item := bag_to_set (USEDIN(SELF, 'STRUCTURAL_FRAME_SCHEMA.MANAGED_DATA_ITEM.HISTORY')); WHERE WRM9 : SELF\managed_data_transaction.new_ids_assigned = FALSE; END_ENTITY; ENTITY managed_data_transaction SUPERTYPE OF (ONEOF(managed_data_export, managed_data_import) ANDOR ONEOF (managed_data_creation, managed_data_modification)); application : managed_application_installation; user : person_and_organization; processing_date : date_and_time; new_ids_assigned : BOOLEAN; life_cycle_stage : OPTIONAL label; transaction_description : OPTIONAL text; INVERSE processed_items : SET [1:?] OF managed_data_item FOR history; UNIQUE URM3 : application, processing_date; END_ENTITY; ENTITY manifold_solid_brep SUPERTYPE OF (ONEOF(brep_with_voids, faceted_brep)) SUBTYPE OF (solid_model); outer : closed_shell; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY map_location SUBTYPE OF (geographical_location); map_name : label; map_code : identifier; eastings : length_measure_with_unit; northings : length_measure_with_unit; END_ENTITY; ENTITY mapped_item SUBTYPE OF (representation_item); mapping_source : representation_map; mapping_target : representation_item; WHERE WRM10 : acyclic_mapped_representation(using_representations(SELF), [SELF]); END_ENTITY; (* STEP Part 43 (unchanged in 2nd edition) *) ENTITY mass_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE WRM11 : 'STRUCTURAL_FRAME_SCHEMA.MASS_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); WRM12 : 'STRUCTURAL_FRAME_SCHEMA.MASS_MEASURE' IN TYPEOF (SELF\measure_with_unit.value_component); END_ENTITY; (* based on STEP Part 41 2nd edition (WR added) *) ENTITY mass_per_length_measure_with_unit SUBTYPE OF (derived_measure_with_unit); WHERE WRM13 : 'STRUCTURAL_FRAME_SCHEMA.MASS_PER_LENGTH_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); WRM14 : 'STRUCTURAL_FRAME_SCHEMA.MASS_PER_LENGTH_MEASURE' IN TYPEOF (SELF\measure_with_unit.value_component); END_ENTITY; ENTITY mass_per_length_unit SUBTYPE OF (derived_unit); WHERE WRM15 : SIZEOF(SELF\derived_unit.elements) = 2; WRM16 : ('STRUCTURAL_FRAME_SCHEMA.MASS_UNIT' IN TYPEOF (SELF\derived_unit.elements[1]\derived_unit_element.unit)) AND (SELF\derived_unit.elements[1]\derived_unit_element.exponent = 1.0); WRM17 : ('STRUCTURAL_FRAME_SCHEMA.LENGTH_UNIT' IN TYPEOF (SELF\derived_unit.elements[2]\derived_unit_element.unit)) AND (SELF\derived_unit.elements[2]\derived_unit_element.exponent = -1.0); END_ENTITY; ENTITY mass_unit SUBTYPE OF (named_unit); WHERE WRM18 : (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 1.0) AND (SELF\named_unit.dimensions.time_exponent = 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0); END_ENTITY; (* STEP Part 41 (2nd edition unchanged) *) (* Modified for LPM/6 *) ENTITY material SUPERTYPE OF (ONEOF (material_anisotropic, material_isotropic, material_orthotropic) ANDOR material_constituent) SUBTYPE OF (structural_frame_item); DERIVE material_number : INTEGER := SELF\structural_frame_item.item_number; material_name : label := SELF\structural_frame_item.item_name; material_grade : BAG OF identifier := SELF\structural_frame_item.item_ref; UNIQUE URM6 : material_number, material_name; END_ENTITY; ENTITY material_anisotropic SUBTYPE OF (material); properties : LIST [2:?] OF UNIQUE material_representation; material_location : LIST [2:?] OF UNIQUE placement; WHERE WRM41 : SIZEOF(properties) = SIZEOF(material_location); END_ENTITY; ENTITY material_constituent SUBTYPE OF (material); parent_material : material; constituent_amount : ratio_measure_with_unit; composition_basis : OPTIONAL label; class : label; determination_method : OPTIONAL text; WHERE WRM19 : parent_material :<>: (SELF); END_ENTITY; ENTITY material_elasticity SUBTYPE OF (material_representation_item); poisson_ratio : OPTIONAL REAL; young_modulus : OPTIONAL pressure_measure; shear_modulus : OPTIONAL pressure_measure; secant_modulus : OPTIONAL pressure_measure; WHERE WRM20 : EXISTS (poisson_ratio) OR EXISTS (young_modulus) OR EXISTS (shear_modulus) OR EXISTS (secant_modulus); END_ENTITY; ENTITY material_hardness SUBTYPE OF (material_representation_item); hardness_values : context_dependent_measure; END_ENTITY; ENTITY material_isotropic SUBTYPE OF (material); definition : material_representation; END_ENTITY; ENTITY material_mass_density SUBTYPE OF (material_representation_item); mass_density : context_dependent_measure; END_ENTITY; ENTITY material_orthotropic SUBTYPE OF (material); in_plane_properties : material_representation; out_of_plane_properties : material_representation; WHERE WRM40 : in_plane_properties :<>: out_of_plane_properties; END_ENTITY; ENTITY material_property_context ABSTRACT SUPERTYPE OF ( material_property_context_dimensional ANDOR material_property_context_loading ANDOR material_property_context_strain ANDOR material_property_context_stress ANDOR material_property_context_temperature) SUBTYPE OF (representation_context); END_ENTITY; ENTITY material_property_context_dimensional SUBTYPE OF (material_property_context); lower_value_for_dimension : length_measure; upper_value_for_dimension : length_measure; END_ENTITY; ENTITY material_property_context_loading SUBTYPE OF (material_property_context); loading : loading_status; END_ENTITY; ENTITY material_property_context_strain SUBTYPE OF (material_property_context); lower_value_for_strain : ratio_measure; upper_value_for_strain : ratio_measure; END_ENTITY; ENTITY material_property_context_stress SUBTYPE OF (material_property_context); lower_value_for_stress : pressure_measure; upper_value_for_stress : pressure_measure; END_ENTITY; ENTITY material_property_context_temperature SUBTYPE OF (material_property_context); temperature_lower_bound : thermodynamic_temperature_measure; temperature_upper_bound : thermodynamic_temperature_measure; END_ENTITY; ENTITY material_representation SUBTYPE OF (representation); WHERE WRM21 : ('STRUCTURAL_FRAME_SCHEMA.MATERIAL_PROPERTY_CONTEXT' IN TYPEOF (SELF\representation.context_of_items)) AND ('STRUCTURAL_FRAME_SCHEMA.GLOBAL_UNIT_ASSIGNED_CONTEXT' IN TYPEOF (SELF\representation.context_of_items)); WRM22 : SIZEOF(QUERY(temp <* SELF\representation.items | ('STRUCTURAL_FRAME_SCHEMA.MATERIAL_REPRESENTATION_ITEM') IN TYPEOF(temp))) > 0; END_ENTITY; ENTITY material_representation_item SUPERTYPE OF (ONEOF (material_elasticity, material_mass_density, material_thermal_expansion, material_strength, material_hardness, material_toughness)) SUBTYPE OF (representation_item); WHERE WRM23 : SIZEOF (QUERY (tmp_rep <* using_representations (SELF) | NOT ('STRUCTURAL_FRAME_SCHEMA.MATERIAL_PROPERTY_CONTEXT' IN TYPEOF (tmp_rep.context_of_items)))) = 0; END_ENTITY; ENTITY material_strength SUBTYPE OF (material_representation_item); material_strength_value : pressure_measure; END_ENTITY; ENTITY material_thermal_expansion SUBTYPE OF (material_representation_item); thermal_expansion_coeff : context_dependent_measure; END_ENTITY; ENTITY material_toughness SUBTYPE OF (material_representation_item); toughness_values : context_dependent_measure; END_ENTITY; ENTITY measure_qualification; name : label; description : text; qualified_measure : measure_with_unit; qualifiers : SET [1:?] OF value_qualifier; WHERE WRM24 : SIZEOF(QUERY(temp <* qualifiers | 'STRUCTURAL_FRAME_SCHEMA.PRECISION_QUALIFIER' IN TYPEOF(temp))) < 2; END_ENTITY; (* STEP Part 45 (unchanged in TC1) *) ENTITY measure_with_unit SUPERTYPE OF (ONEOF (length_measure_with_unit, mass_measure_with_unit, time_measure_with_unit, thermodynamic_temperature_measure_with_unit, plane_angle_measure_with_unit, solid_angle_measure_with_unit, area_measure_with_unit, volume_measure_with_unit, ratio_measure_with_unit, force_measure_with_unit, frequency_measure_with_unit, pressure_measure_with_unit, positive_length_measure_with_unit, derived_measure_with_unit, uncertainty_measure_with_unit)); value_component : measure_value; unit_component : unit; WHERE WRM25 : valid_units (SELF); END_ENTITY; (* STEP Part 41 expanded (2nd edition unchanged) *) ENTITY media_content SUBTYPE OF (group_assignment); WHERE WRM26 : 'STRUCTURAL_FRAME_SCHEMA.MEDIA_FILE' IN TYPEOF (SELF\group_assignment.assigned_group); END_ENTITY; (* New for LPM/6 - see Issue 97 *) ENTITY media_content_drawing SUBTYPE OF (media_content); WHERE WRM42 : 'STRUCTURAL_FRAME_SCHEMA.MEDIA_FILE_DRAWING' IN TYPEOF (SELF\group_assignment.assigned_group); (* the content shall be assigned to a drawing *) END_ENTITY; (* Modified for LPM/6 *) ENTITY media_file SUPERTYPE OF (ONEOF(step_file, media_file_drawing, media_file_cnc)) SUBTYPE OF (group); file_source : label; file_format : label; file_date : date_and_time; media_type : label; author : LIST [1:?] OF person_and_organization; owner : LIST [0:?] OF person_and_organization; END_ENTITY; (* New for LPM/6 - see Issue 97 *) ENTITY media_file_cnc SUBTYPE OF (media_file); cnc_data_format : label; DERIVE cnc_file_title : label := SELF\group.group_name; created_by : person := SELF\media_file.author[1].the_person; detail_company : organization := SELF\media_file.author[1].the_organization; creation_date : date_and_time := SELF\media_file.file_date; cnc_filename : label := SELF\media_file.file_source; END_ENTITY; (* New for LPM/6 - see Issue 97 *) ENTITY media_file_drawing SUBTYPE OF (media_file); drawing_number : OPTIONAL label; drawing_type : drawing_class; drawing_size : OPTIONAL label; current_revision_mark : OPTIONAL label; current_revision_by : OPTIONAL person_and_organization; current_revision_date : OPTIONAL date_and_time; current_revision_note : OPTIONAL text; DERIVE drawing_title : label := SELF\group.group_name; drawn_by : person := SELF\media_file.author[1].the_person; detail_company : organization := SELF\media_file.author[1].the_organization; creation_date : date_and_time := SELF\media_file.file_date; drawing_filename : label := SELF\media_file.file_source; END_ENTITY; ENTITY modulus_measure_with_unit SUBTYPE OF (derived_measure_with_unit); WHERE WRM27 : 'STRUCTURAL_FRAME_SCHEMA.MODULUS_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); WRM28 : 'STRUCTURAL_FRAME_SCHEMA.MODULUS_MEASURE' IN TYPEOF (SELF\measure_with_unit.value_component); END_ENTITY; ENTITY modulus_unit SUBTYPE OF (derived_unit); WHERE WRM29 : SIZEOF(SELF\derived_unit.elements) = 1; WRM30 : ('STRUCTURAL_FRAME_SCHEMA.LENGTH_UNIT' IN TYPEOF (SELF\derived_unit.elements[1]\derived_unit_element.unit)) AND (SELF\derived_unit.elements[1]\derived_unit_element.exponent = 3.0); END_ENTITY; ENTITY moment_measure_with_unit SUBTYPE OF (derived_measure_with_unit); WHERE WRM31 : 'STRUCTURAL_FRAME_SCHEMA.MOMENT_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); WRM32 : 'STRUCTURAL_FRAME_SCHEMA.MOMENT_MEASURE' IN TYPEOF (SELF\measure_with_unit.value_component); END_ENTITY; ENTITY moment_unit SUBTYPE OF (derived_unit); WHERE WRM33 : SIZEOF(SELF\derived_unit.elements) = 2; WRM34 : ('STRUCTURAL_FRAME_SCHEMA.FORCE_UNIT' IN TYPEOF (SELF\derived_unit.elements[1]\derived_unit_element.unit)) AND (SELF\derived_unit.elements[1]\derived_unit_element.exponent = 1.0); WRM35 : ('STRUCTURAL_FRAME_SCHEMA.LENGTH_UNIT' IN TYPEOF (SELF\derived_unit.elements[2]\derived_unit_element.unit)) AND (SELF\derived_unit.elements[2]\derived_unit_element.exponent = 1.0); END_ENTITY; ENTITY move SUBTYPE OF (structural_frame_process); initial_location : placement; final_location : placement; path : OPTIONAL curve; END_ENTITY; (* New for LPM/6 *) ENTITY name_attribute; attribute_value : label; named_item : name_attribute_select; END_ENTITY; (* STEP Part 41 2nd edition *) ENTITY named_unit SUPERTYPE OF ((ONEOF (length_unit, mass_unit, time_unit, thermodynamic_temperature_unit, plane_angle_unit, solid_angle_unit, area_unit, volume_unit, ratio_unit, force_unit, frequency_unit, pressure_unit)) ANDOR (ONEOF (si_unit, conversion_based_unit, context_dependent_unit))); dimensions : dimensional_exponents; END_ENTITY; (* STEP Part 41 (2nd edition unchanged) *) ENTITY node; node_name : label; node_coords : point; restraints : OPTIONAL boundary_condition; parent_model : analysis_model; UNIQUE URN1 : node_name, parent_model; URN2 : node_coords, parent_model; WHERE WRN1 : node_coords.dim = parent_model.coordinate_space_dimension; END_ENTITY; ENTITY node_dependency; master_node : node; slave_node : node; dependency_description : OPTIONAL text; WHERE WRN2 : master_node :<>: slave_node; END_ENTITY; (* New for LPM/6 *) ENTITY object_role; name : label; description : OPTIONAL text; END_ENTITY; (* STEP Part 41 2nd edition *) ENTITY offset_curve_2d SUBTYPE OF (curve); basis_curve: curve; distance : length_measure; self_intersect : LOGICAL; WHERE WRO1 : basis_curve.dim = 2; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY offset_curve_3d SUBTYPE OF (curve); basis_curve: curve; distance : length_measure; self_intersect : LOGICAL; ref_direction : direction; WHERE WRO2 : (basis_curve.dim = 3) AND (ref_direction.dim = 3); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY offset_surface SUBTYPE OF (surface); basis_surface : surface; distance : length_measure; self_intersect : LOGICAL; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY open_path SUBTYPE OF (path); DERIVE ne : INTEGER := SIZEOF(SELF\path.edge_list); WHERE WRO3 : (SELF\path.edge_list[1].edge_element.edge_start) :<>: (SELF\path.edge_list[ne].edge_element.edge_end); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY open_shell SUBTYPE OF (connected_face_set); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY organization; id : OPTIONAL identifier; name : label; description : text; END_ENTITY; (* STEP Part 41 (2nd edition unchanged) *) ENTITY organizational_address SUBTYPE OF (address); organizations : SET [1:?] OF organization; description : text; END_ENTITY; (* STEP Part 41 (2nd edition unchanged) *) (* Modified for LPM/6 *) ENTITY organization_relationship SUPERTYPE OF (organization_relationship_contractual); name : label; description : OPTIONAL text; relating_organization : organization; related_organization : organization; END_ENTITY; (* STEP Part 41 2nd edition expanded *) ENTITY organization_relationship_contractual SUBTYPE OF (organization_relationship); assigned_contract : contract; effective_start_date : date_and_time; effective_end_date : OPTIONAL date_and_time; UNIQUE URO1 : SELF\organization_relationship.name, SELF\organization_relationship.relating_organization, SELF\organization_relationship.related_organization; WHERE WRO4 : acyclic_organization_relationship(SELF, [SELF\organization_relationship.related_organization], 'STRUCTURAL_FRAME_SCHEMA.ORGANIZATION_RELATIONSHIP.RELATED_ORGANIZATION'); END_ENTITY; ENTITY oriented_closed_shell SUBTYPE OF (closed_shell); closed_shell_element : closed_shell; orientation : BOOLEAN; DERIVE SELF\connected_face_set.cfs_faces : SET [1:?] OF face := conditional_reverse(SELF.orientation, SELF.closed_shell_element.cfs_faces); WHERE WRO5 : NOT ('STRUCTURAL_FRAME_SCHEMA.ORIENTED_CLOSED_SHELL' IN TYPEOF (SELF.closed_shell_element)); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY oriented_edge SUBTYPE OF (edge); edge_element : edge; orientation : BOOLEAN; DERIVE SELF\edge.edge_start : vertex := boolean_choose (SELF.orientation, SELF.edge_element.edge_start, SELF.edge_element.edge_end); SELF\edge.edge_end : vertex := boolean_choose (SELF.orientation, SELF.edge_element.edge_end, SELF.edge_element.edge_start); WHERE WRO6 : NOT ('STRUCTURAL_FRAME_SCHEMA.ORIENTED_EDGE' IN TYPEOF (SELF.edge_element)); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY oriented_face SUBTYPE OF (face); face_element : face; orientation : BOOLEAN; DERIVE SELF\face.bounds : SET [1:?] OF face_bound := conditional_reverse (SELF.orientation,SELF.face_element.bounds); WHERE WRO7 : NOT ('STRUCTURAL_FRAME_SCHEMA.ORIENTED_FACE' IN TYPEOF (SELF.face_element)); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY oriented_open_shell SUBTYPE OF (open_shell); open_shell_element : open_shell; orientation : BOOLEAN; DERIVE SELF\connected_face_set.cfs_faces : SET [1:?] OF face := conditional_reverse (SELF.orientation, SELF.open_shell_element.cfs_faces); WHERE WRO8 : NOT ('STRUCTURAL_FRAME_SCHEMA.ORIENTED_OPEN_SHELL' IN TYPEOF (SELF.open_shell_element)); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* Modified for LPM/6 *) ENTITY oriented_path SUBTYPE OF (path); path_element : path; orientation : BOOLEAN; DERIVE SELF\path.edge_list: LIST [1:?] OF UNIQUE oriented_edge := conditional_reverse (SELF.orientation, SELF.path_element.edge_list); WHERE WRO9 : NOT ('STRUCTURAL_FRAME_SCHEMA.ORIENTED_PATH' IN TYPEOF (SELF.path_element)); END_ENTITY; (* STEP Part 42 (modified in 2nd edition) *) (* New for LPM/6 *) ENTITY oriented_surface SUBTYPE OF (surface); orientation : BOOLEAN; END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) ENTITY outer_boundary_curve SUBTYPE OF (boundary_curve); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY parabola SUBTYPE OF (conic); focal_dist : length_measure; WHERE WRP1 : focal_dist <> 0.0; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY parametric_representation_context SUBTYPE OF (representation_context); END_ENTITY; (* STEP Part 43 (unchanged in 2nd edition) *) (* Modified for LPM/6 *) ENTITY part SUPERTYPE OF (ONEOF (part_prismatic, part_sheet, part_complex) ANDOR part_derived) SUBTYPE OF (structural_frame_product); fabrication_method : fabrication_type; manufacturers_ref : OPTIONAL text; DERIVE part_number : INTEGER := SELF\structural_frame_item.item_number; part_name : label := SELF\structural_frame_item.item_name; design_uses : SET [0:?] OF design_part := bag_to_set (USEDIN(SELF,'STRUCTURAL_FRAME_SCHEMA.DESIGN_PART.DESIGN_PART_SPEC')); physical_uses : SET [0:?] OF located_part := bag_to_set (USEDIN(SELF,'STRUCTURAL_FRAME_SCHEMA.LOCATED_PART.DESCRIPTIVE_PART')); UNIQUE URP6 : part_number,part_name; END_ENTITY; ENTITY part_complex SUBTYPE OF (part); part_shape : shape_representation_with_units; END_ENTITY; ENTITY part_derived SUBTYPE OF (part); made_from : part; involved_processes : SET [0:?] OF structural_frame_process; WHERE WRP2 : made_from :<>: (SELF); END_ENTITY; ENTITY part_map; represented_part : part; representing_elements : SET [1:?] OF element; END_ENTITY; ENTITY part_prismatic ABSTRACT SUPERTYPE OF (ONEOF(part_prismatic_complex, part_prismatic_simple)) SUBTYPE OF (part); END_ENTITY; ENTITY part_prismatic_complex SUPERTYPE OF (part_prismatic_complex_tapered) SUBTYPE OF (part_prismatic); cross_sections : LIST [2:?] OF section_profile; points_defining_part_axis : LIST [2:?] OF UNIQUE point_on_curve; section_orientations : LIST [2:?] OF orientation_select; DERIVE number_of_sections : INTEGER := SIZEOF(cross_sections); curve_defining_part : curve := points_defining_part_axis[1]\point_on_curve.basis_curve; WHERE WRP3 : ( (SIZEOF (points_defining_part_axis) = number_of_sections) AND (SIZEOF (section_orientations) = number_of_sections) ); WRP4 : SIZEOF(QUERY(temp <* points_defining_part_axis | (temp\point_on_curve.basis_curve) :<>: curve_defining_part)) = 0; END_ENTITY; ENTITY part_prismatic_complex_tapered SUBTYPE OF (part_prismatic_complex); taper_description : OPTIONAL text; absolute_taper_1 : OPTIONAL length_measure_with_unit; absolute_taper_2 : OPTIONAL length_measure_with_unit; relative_taper_1 : OPTIONAL ratio_measure_with_unit; relative_taper_2 : OPTIONAL ratio_measure_with_unit; WHERE WRP5 : EXISTS (absolute_taper_1) OR EXISTS (absolute_taper_2) OR EXISTS (relative_taper_1) OR EXISTS (relative_taper_2); END_ENTITY; ENTITY part_prismatic_simple SUPERTYPE OF (part_prismatic_simple_cambered ANDOR part_prismatic_simple_castellated ANDOR part_prismatic_simple_curved) SUBTYPE OF (part_prismatic); profile : section_profile; cut_length : positive_length_measure_with_unit; stock_length : OPTIONAL positive_length_measure_with_unit; x_offset : OPTIONAL positive_length_measure_with_unit; END_ENTITY; ENTITY part_prismatic_simple_cambered SUPERTYPE OF (part_prismatic_simple_cambered_absolute ANDOR part_prismatic_simple_cambered_relative) SUBTYPE OF (part_prismatic_simple); camber_description : OPTIONAL text; END_ENTITY; ENTITY part_prismatic_simple_cambered_absolute SUBTYPE OF (part_prismatic_simple_cambered); absolute_offset_position : positive_length_measure_with_unit; absolute_offset_y : length_measure_with_unit; absolute_offset_z : length_measure_with_unit; END_ENTITY; (* Modified for LPM/6 *) ENTITY part_prismatic_simple_cambered_relative SUBTYPE OF (part_prismatic_simple_cambered); relative_offset_position : ratio_measure_with_unit; relative_offset_y : ratio_measure_with_unit; relative_offset_z : ratio_measure_with_unit; END_ENTITY; ENTITY part_prismatic_simple_castellated SUBTYPE OF (part_prismatic_simple); part_castellation_type : castellation_type; end_post_width_1 : positive_length_measure_with_unit; end_post_width_2 : OPTIONAL positive_length_measure_with_unit; castellation_spacing : OPTIONAL positive_length_measure_with_unit; castellation_height : OPTIONAL positive_length_measure_with_unit; castellation_width : OPTIONAL positive_length_measure_with_unit; castellation_depth : OPTIONAL positive_length_measure_with_unit; END_ENTITY; ENTITY part_prismatic_simple_curved SUBTYPE OF (part_prismatic_simple); axis_definition : curve; END_ENTITY; ENTITY part_sheet SUPERTYPE OF (part_sheet_bounded ANDOR part_sheet_profiled) SUBTYPE OF (part); sheet_thickness : positive_length_measure_with_unit; END_ENTITY; ENTITY part_sheet_bounded ABSTRACT SUPERTYPE OF (ONEOF (part_sheet_bounded_complex, part_sheet_bounded_simple)) SUBTYPE OF (part_sheet); END_ENTITY; ENTITY part_sheet_bounded_complex SUBTYPE OF (part_sheet_bounded); sheet_boundary : bounded_surface; END_ENTITY; ENTITY part_sheet_bounded_simple SUBTYPE OF (part_sheet_bounded); cut_y_dimension : positive_length_measure_with_unit; cut_z_dimension : positive_length_measure_with_unit; stock_y_dimension : OPTIONAL positive_length_measure_with_unit; stock_z_dimension : OPTIONAL positive_length_measure_with_unit; y_offset : OPTIONAL positive_length_measure_with_unit; z_offset : OPTIONAL positive_length_measure_with_unit; END_ENTITY; ENTITY part_sheet_profiled SUBTYPE OF (part_sheet); sheet_profile : curve; profile_properties : OPTIONAL section_properties; END_ENTITY; (* Modified for LPM/6 *) ENTITY path SUPERTYPE OF (ONEOF(oriented_path, open_path, edge_loop)) SUBTYPE OF (topological_representation_item); edge_list : LIST [1:?] OF UNIQUE oriented_edge; WHERE WRP6 : path_head_to_tail(SELF); END_ENTITY; (* STEP Part 42 (modified in 2nd edition) *) ENTITY pcurve SUBTYPE OF (curve); basis_surface : surface; reference_to_curve : definitional_representation; WHERE WRP7 : SIZEOF(reference_to_curve\representation.items) = 1; WRP8 : 'STRUCTURAL_FRAME_SCHEMA.CURVE' IN TYPEOF (reference_to_curve\representation.items[1]); WRP9 : reference_to_curve\representation. items[1]\geometric_representation_item.dim = 2; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY person; id : identifier; last_name : OPTIONAL label; first_name : OPTIONAL label; middle_names : OPTIONAL LIST [1:?] OF label; prefix_titles : OPTIONAL LIST [1:?] OF label; suffix_titles : OPTIONAL LIST [1:?] OF label; UNIQUE URP1 : id; WHERE WRP10 : EXISTS (last_name) OR EXISTS (first_name); END_ENTITY; (* based on STEP Part 41 2nd edition (UR added) *) (* Modified for LPM/6 *) ENTITY person_and_organization; the_person : person; the_organization : organization; DERIVE name : label := get_name_value (SELF); description : text := get_description_value (SELF); WHERE WRP27 : SIZEOF (USEDIN (SELF, 'STRUCTURAL_FRAME_SCHEMA.' + 'NAME_ATTRIBUTE.NAMED_ITEM')) <= 1; WRP28 : SIZEOF (USEDIN (SELF, 'STRUCTURAL_FRAME_SCHEMA.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1; END_ENTITY; (* STEP Part 41 2nd edition *) (* Modified for LPM/6 *) ENTITY person_and_organization_role; name : label; DERIVE description : text := get_description_value (SELF); WHERE WRP29 : SIZEOF (USEDIN (SELF, 'STRUCTURAL_FRAME_SCHEMA.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1; END_ENTITY; (* STEP Part 41 2nd edition *) ENTITY personal_address SUBTYPE OF (address); people : SET [1:?] OF person; description : text; END_ENTITY; (* STEP Part 41 (2nd edition unchanged) *) ENTITY physical_action SUPERTYPE OF (ONEOF (physical_action_permanent, physical_action_variable, physical_action_accidental, physical_action_seismic)); action_nature : static_or_dynamic; action_spatial_variation : spatial_variation; action_type : direct_or_indirect_action; basic_magnitude : OPTIONAL measure_with_unit; derived_magnitude : OPTIONAL measure_with_unit; derivation_factors : LIST [0:?] OF REAL; derivation_factor_labels : LIST [0:?] OF label; WHERE WRP11 : SIZEOF (derivation_factors) = SIZEOF (derivation_factor_labels); END_ENTITY; ENTITY physical_action_accidental SUBTYPE OF (physical_action); action_source : action_source_accidential; END_ENTITY; ENTITY physical_action_permanent SUBTYPE OF (physical_action); action_source : action_source_permanent; END_ENTITY; ENTITY physical_action_seismic SUBTYPE OF (physical_action); END_ENTITY; ENTITY physical_action_variable ABSTRACT SUPERTYPE OF (ONEOF (physical_action_variable_long_term, physical_action_variable_transient, physical_action_variable_short_term)) SUBTYPE OF (physical_action); END_ENTITY; ENTITY physical_action_variable_long_term SUBTYPE OF (physical_action_variable); action_source : action_source_variable_long_term; END_ENTITY; ENTITY physical_action_variable_short_term SUBTYPE OF (physical_action_variable); action_source : action_source_variable_short_term; END_ENTITY; ENTITY physical_action_variable_transient SUBTYPE OF (physical_action_variable); action_source : action_source_variable_transient; END_ENTITY; ENTITY placement SUPERTYPE OF (ONEOF (axis2_placement_2d, axis2_placement_3d, axis1_placement)) SUBTYPE OF (geometric_representation_item); location : cartesian_point; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY plane SUBTYPE OF (elementary_surface); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY plane_angle_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE WRP12 : 'STRUCTURAL_FRAME_SCHEMA.PLANE_ANGLE_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); WRP13 : 'STRUCTURAL_FRAME_SCHEMA.PLANE_ANGLE_MEASURE' IN TYPEOF (SELF\measure_with_unit.value_component); END_ENTITY; (* based on STEP Part 41 2nd edition (WR added) *) ENTITY plane_angle_unit SUBTYPE OF (named_unit); WHERE WRP14 : (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent = 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0); END_ENTITY; (* STEP Part 41 (2nd edition unchanged) *) (* Modified for LPM/6 *) ENTITY point SUPERTYPE OF (ONEOF (cartesian_point, point_in_volume, point_on_curve, point_on_surface, point_replica, degenerate_pcurve)) SUBTYPE OF (geometric_representation_item); END_ENTITY; (* STEP Part 42 (modified in 2nd edition) *) (* New for LPM/6 *) ENTITY point_in_volume SUBTYPE OF (point); basis_volume : volume; point_parameter_u : parameter_value; point_parameter_v : parameter_value; point_parameter_w : parameter_value; END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) ENTITY point_on_curve SUBTYPE OF (point); basis_curve : curve; point_parameter : parameter_value; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY point_on_surface SUBTYPE OF (point); basis_surface : surface; point_parameter_u : parameter_value; point_parameter_v : parameter_value; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY point_replica SUBTYPE OF (point); parent_pt : point; transformation : cartesian_transformation_operator; WHERE WRP15 : transformation.dim = parent_pt.dim; WRP16 : acyclic_point_replica (SELF,parent_pt); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* New for LPM/6 *) ENTITY polar_point SUBTYPE OF (cartesian_point); r : length_measure; theta : plane_angle_measure; DERIVE SELF\cartesian_point.coordinates : LIST [1:3] OF length_measure := [r*cos(theta), r*sin(theta)]; WHERE WRP30 : r >= 0.0; END_ENTITY; (* STEP Part 42 (new for 2nd edition) *) (* modified for LPM/6 *) ENTITY poly_loop SUBTYPE OF (loop, geometric_representation_item); polygon : LIST [3:?] OF UNIQUE cartesian_point; END_ENTITY; (* STEP Part 42 (modified in 2nd edition) *) (* New for LPM/6 *) ENTITY polygonal_area SUBTYPE OF (primitive_2d); bounds : LIST [3:?] OF UNIQUE cartesian_point; END_ENTITY; (* STEP Part 42 (new for 2nd edition) *) ENTITY polyline SUBTYPE OF (bounded_curve); points : LIST [2:?] OF cartesian_point; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY positive_length_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE WRP17 : 'STRUCTURAL_FRAME_SCHEMA.LENGTH_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); WRP18 : 'STRUCTURAL_FRAME_SCHEMA.POSITIVE_LENGTH_MEASURE' IN TYPEOF (SELF\measure_with_unit.value_component); END_ENTITY; ENTITY precision_qualifier; precision_value : INTEGER; END_ENTITY; (* STEP Part 45 (unchanged in TC1) *) ENTITY pressure_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE WRP19 : 'STRUCTURAL_FRAME_SCHEMA.PRESSURE_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); WRP20 : 'STRUCTURAL_FRAME_SCHEMA.PRESSURE_MEASURE' IN TYPEOF (SELF\measure_with_unit.value_component); END_ENTITY; ENTITY pressure_unit SUBTYPE OF (named_unit); WHERE WRP21 : (SELF\named_unit.dimensions.length_exponent = -1.0) AND (SELF\named_unit.dimensions.mass_exponent = 1.0) AND (SELF\named_unit.dimensions.time_exponent = -2.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0); END_ENTITY; (* New for LPM/6 *) ENTITY primitive_2d SUPERTYPE OF (ONEOF ( circular_area, elliptic_area, rectangular_area, polygonal_area)) SUBTYPE OF (geometric_representation_item); WHERE WR1 : SELF\geometric_representation_item.dim = 2; END_ENTITY; (* STEP Part 42 (new for 2nd edition) *) (* Modified for LPM/6 *) ENTITY procure SUBTYPE OF (structural_frame_process); vendors : person_and_organization; purchaser : person_and_organization; purchased_products : LIST [1:?] OF product_item_select; sales_contract : contract; delivery_dates : LIST [1:?] OF calendar_date; INVERSE prices : SET [1:?] OF structural_frame_item_priced FOR priced_item; WHERE WRP23 : SIZEOF (delivery_dates) = SIZEOF (purchased_products); END_ENTITY; ENTITY project SUBTYPE OF (structural_frame_item); UNIQUE URP2 : SELF\structural_frame_item.item_number, SELF\structural_frame_item.item_name; END_ENTITY; (* New for LPM/6 - See Issues 90 *) ENTITY project_data_group SUBTYPE OF (group_assignment); parent_project : project; END_ENTITY; ENTITY project_organization; project_participant : person_and_organization; related_project : project; role : person_and_organization_role; END_ENTITY; ENTITY project_plan SUBTYPE OF (structural_frame_item); project_plan_author : project_organization; project_plan_date : date_and_time; related_project : project; INVERSE items : SET [1:?] OF project_plan_item FOR item_for_plan; UNIQUE URP3 : SELF\structural_frame_item.item_number, related_project; WHERE WRP25 : project_plan_author.related_project :=: related_project; END_ENTITY; ENTITY project_plan_item SUPERTYPE OF (ONEOF(project_process_item)) SUBTYPE OF (structural_frame_item); item_for_plan : project_plan; start_date : date_and_time; end_date : date_and_time; item_duration : time_measure_with_unit; actors : OPTIONAL SET [1:?] OF project_organization; sequence_number : OPTIONAL INTEGER; item_status : OPTIONAL label; UNIQUE URP4 : SELF\structural_frame_item.item_number, item_for_plan; WHERE WRP26 : NOT (EXISTS(actors) AND (SIZEOF(QUERY(the_project <* actors | the_project.related_project :<>: (item_for_plan.related_project)) ) <> 0)); END_ENTITY; ENTITY project_plan_item_relationship; relationship_name : label; relationship_description : OPTIONAL text; related_plan_item : project_plan_item; relating_plan_item : project_plan_item; WHERE WRP24 : related_plan_item :<>: relating_plan_item; END_ENTITY; (* Modified for LPM/6 - See Issue 15 *) ENTITY project_process_item SUBTYPE OF (project_plan_item); scheduled_process : structural_frame_process; resulting_product : SET [0:?] OF product_item_select; processed_products : SET [1:?] OF product_item_select; END_ENTITY; (* New for LPM/6 *) ENTITY pyramid_volume SUBTYPE OF (volume); position : axis2_placement_3d; xlength : positive_length_measure; ylength : positive_length_measure; height : positive_length_measure; END_ENTITY; (* STEP Part 42 (new for 2nd edition) *) ENTITY qualitative_uncertainty SUBTYPE OF (uncertainty_qualifier); uncertainty_value : text; END_ENTITY; (* STEP Part 45 (unchanged in TC1) *) ENTITY quasi_uniform_curve SUBTYPE OF (b_spline_curve); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY quasi_uniform_surface SUBTYPE OF (b_spline_surface); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* New for LPM/6 *) ENTITY quasi_uniform_volume SUBTYPE OF (b_spline_volume); END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) ENTITY ratio_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE WRR1 : 'STRUCTURAL_FRAME_SCHEMA.RATIO_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); WRR2 : 'STRUCTURAL_FRAME_SCHEMA.RATIO_MEASURE' IN TYPEOF (SELF\measure_with_unit.value_component); END_ENTITY; (* based on STEP Part 41 2nd edition (WR added) *) ENTITY ratio_unit SUBTYPE OF (named_unit); WHERE WRR3 : (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent = 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0); END_ENTITY; (* STEP Part 41 (2nd edition unchanged) *) ENTITY rational_b_spline_curve SUBTYPE OF (b_spline_curve); weights_data : LIST [2:?] OF REAL; DERIVE weights : ARRAY [0:upper_index_on_control_points] OF REAL := list_to_array (weights_data, 0, upper_index_on_control_points); WHERE WRR4 : SIZEOF(weights_data) = SIZEOF(SELF\b_spline_curve.control_points_list); WRR5 : curve_weights_positive(SELF); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY rational_b_spline_surface SUBTYPE OF (b_spline_surface); weights_data : LIST [2:?] OF LIST [2:?] OF REAL; DERIVE weights : ARRAY [0:u_upper] OF ARRAY [0:v_upper] OF REAL := make_array_of_array (weights_data, 0, u_upper, 0, v_upper); WHERE WRR6 : (SIZEOF(weights_data) = SIZEOF(SELF\b_spline_surface.control_points_list)) AND (SIZEOF(weights_data[1]) = SIZEOF(SELF\b_spline_surface.control_points_list[1])); WRR7 : surface_weights_positive(SELF); END_ENTITY; (* STEP Part 42 (unchanged in 2nd editon) *) (* New for LPM/6 *) ENTITY rational_b_spline_volume SUBTYPE OF (b_spline_volume); weights_data : LIST [2:?] OF LIST [2:?] OF LIST [2:?] OF REAL; DERIVE weights : ARRAY [0:u_upper] OF ARRAY [0:v_upper] OF ARRAY [0:w_upper] OF REAL := make_array_of_array_of_array (weights_data,0,u_upper,0,v_upper,0,w_upper); WHERE WRR53 : (SIZEOF(weights_data) = SIZEOF(SELF\b_spline_volume.control_points_list)) AND (SIZEOF(weights_data[1]) = SIZEOF(SELF\b_spline_volume.control_points_list[1])) AND (SIZEOF(weights_data[1][1]) = SIZEOF(SELF\b_spline_volume.control_points_list[1][1])); WRR54 : volume_weights_positive(SELF); END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) ENTITY reaction ABSTRACT SUPERTYPE OF (ONEOF (reaction_force, reaction_displacement, reaction_velocity, reaction_acceleration, reaction_dynamic, reaction_equilibrium)); END_ENTITY; ENTITY reaction_acceleration SUBTYPE OF (reaction); reaction_acceleration_ax : OPTIONAL linear_acceleration_measure_with_unit; reaction_acceleration_ay : OPTIONAL linear_acceleration_measure_with_unit; reaction_acceleration_az : OPTIONAL linear_acceleration_measure_with_unit; reaction_acceleration_arx : OPTIONAL rotational_acceleration_measure_with_unit; reaction_acceleration_ary : OPTIONAL rotational_acceleration_measure_with_unit; reaction_acceleration_arz : OPTIONAL rotational_acceleration_measure_with_unit; WHERE WRR8 : EXISTS (reaction_acceleration_ax) OR EXISTS (reaction_acceleration_ay) OR EXISTS (reaction_acceleration_az) OR EXISTS (reaction_acceleration_arx) OR EXISTS (reaction_acceleration_ary) OR EXISTS (reaction_acceleration_arz); END_ENTITY; ENTITY reaction_displacement SUBTYPE OF (reaction); reaction_displacement_dx : OPTIONAL length_measure_with_unit; reaction_displacement_dy : OPTIONAL length_measure_with_unit; reaction_displacement_dz : OPTIONAL length_measure_with_unit; reaction_displacement_rx : OPTIONAL plane_angle_measure_with_unit; reaction_displacement_ry : OPTIONAL plane_angle_measure_with_unit; reaction_displacement_rz : OPTIONAL plane_angle_measure_with_unit; WHERE WRR9 : EXISTS (reaction_displacement_dx) OR EXISTS (reaction_displacement_dy) OR EXISTS (reaction_displacement_dz) OR EXISTS (reaction_displacement_rx) OR EXISTS (reaction_displacement_ry) OR EXISTS (reaction_displacement_rz); END_ENTITY; ENTITY reaction_dynamic SUBTYPE OF (reaction); phase_angle : OPTIONAL plane_angle_measure_with_unit; response_amplitude : OPTIONAL length_measure_with_unit; natural_frequency : OPTIONAL frequency_measure_with_unit; WHERE WRR10 : EXISTS (phase_angle) OR EXISTS (response_amplitude) OR EXISTS (natural_frequency); END_ENTITY; ENTITY reaction_equilibrium SUBTYPE OF (reaction); equilibrium_dx : OPTIONAL ratio_measure_with_unit; equilibrium_dy : OPTIONAL ratio_measure_with_unit; equilibrium_dz : OPTIONAL ratio_measure_with_unit; equilibrium_mx : OPTIONAL ratio_measure_with_unit; equilibrium_my : OPTIONAL ratio_measure_with_unit; equilibrium_mz : OPTIONAL ratio_measure_with_unit; WHERE WRR11 : EXISTS (equilibrium_dx) OR EXISTS (equilibrium_dy) OR EXISTS (equilibrium_dz); WRR12 : EXISTS (equilibrium_mx) OR EXISTS (equilibrium_my) OR EXISTS (equilibrium_mz); END_ENTITY; ENTITY reaction_force SUBTYPE OF (reaction); reaction_force_fx : OPTIONAL force_measure_with_unit; reaction_force_fy : OPTIONAL force_measure_with_unit; reaction_force_fz : OPTIONAL force_measure_with_unit; reaction_force_mx : OPTIONAL moment_measure_with_unit; reaction_force_my : OPTIONAL moment_measure_with_unit; reaction_force_mz : OPTIONAL moment_measure_with_unit; WHERE WRR13 : EXISTS (reaction_force_fx) OR EXISTS (reaction_force_fy) OR EXISTS (reaction_force_fz) OR EXISTS (reaction_force_mx) OR EXISTS (reaction_force_my) OR EXISTS (reaction_force_mz); END_ENTITY; ENTITY reaction_velocity SUBTYPE OF (reaction); reaction_velocity_vx : OPTIONAL linear_velocity_measure_with_unit; reaction_velocity_vy : OPTIONAL linear_velocity_measure_with_unit; reaction_velocity_vz : OPTIONAL linear_velocity_measure_with_unit; reaction_velocity_vrx : OPTIONAL rotational_velocity_measure_with_unit; reaction_velocity_vry : OPTIONAL rotational_velocity_measure_with_unit; reaction_velocity_vrz : OPTIONAL rotational_velocity_measure_with_unit; WHERE WRR14 : EXISTS (reaction_velocity_vx) OR EXISTS (reaction_velocity_vy) OR EXISTS (reaction_velocity_vz) OR EXISTS (reaction_velocity_vrx) OR EXISTS (reaction_velocity_vry) OR EXISTS (reaction_velocity_vrz); END_ENTITY; (* New for LPM/6 *) ENTITY rectangular_area SUBTYPE OF (primitive_2d); position: axis2_placement_2d; x: positive_length_measure; y: positive_length_measure; END_ENTITY; (* STEP Part 42 (new for 2nd edition) *) (* Modified for LPM/6 *) ENTITY rectangular_composite_surface SUBTYPE OF (bounded_surface); segments : LIST [1:?] OF LIST [1:?] OF surface_patch; DERIVE n_u : INTEGER := SIZEOF(segments); n_v : INTEGER := SIZEOF(segments[1]); WHERE WRR15 : SIZEOF(QUERY (s <* segments | n_v <> SIZEOF (s))) = 0; WRR16 : constraints_rectangular_composite_surface(SELF); END_ENTITY; (* STEP Part 42 (modified in 2nd edition) *) (* New for LPM/6 *) ENTITY rectangular_pyramid SUBTYPE OF (geometric_representation_item); position : axis2_placement_3d; xlength : positive_length_measure; ylength : positive_length_measure; height : positive_length_measure; END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) ENTITY rectangular_trimmed_surface SUBTYPE OF (bounded_surface); basis_surface : surface; u1 : parameter_value; u2 : parameter_value; v1 : parameter_value; v2 : parameter_value; usense : BOOLEAN; vsense : BOOLEAN; WHERE WRR17 : u1 <> u2; WRR18 : v1 <> v2; WRR19 : (('STRUCTURAL_FRAME_SCHEMA.ELEMENTARY_SURFACE' IN TYPEOF(basis_surface)) AND (NOT ('STRUCTURAL_FRAME_SCHEMA.PLANE' IN TYPEOF(basis_surface)))) OR ('STRUCTURAL_FRAME_SCHEMA.SURFACE_OF_REVOLUTION' IN TYPEOF(basis_surface)) OR (usense = (u2 > u1)); WRR20 : (('STRUCTURAL_FRAME_SCHEMA.SPHERICAL_SURFACE' IN TYPEOF(basis_surface)) OR ('STRUCTURAL_FRAME_SCHEMA.TOROIDAL_SURFACE' IN TYPEOF(basis_surface))) OR (vsense = (v2 > v1)); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY release ABSTRACT SUPERTYPE OF (ONEOF (release_logical, release_spring_linear, release_spring_non_linear)); release_name : label; release_description : OPTIONAL text; INVERSE release_for_element_nodes : SET [1:?] OF element_node_connectivity FOR fixity; END_ENTITY; ENTITY release_logical SUBTYPE OF (release); release_axial_force : LOGICAL; release_y_force : LOGICAL; release_z_force : LOGICAL; release_torsional_moment : LOGICAL; release_y_bending_moment : LOGICAL; release_z_bending_moment : LOGICAL; END_ENTITY; ENTITY release_spring_linear SUPERTYPE OF (release_warping) SUBTYPE OF (release); release_axial_force : OPTIONAL linear_stiffness_measure_with_unit; release_y_force : OPTIONAL linear_stiffness_measure_with_unit; release_z_force : OPTIONAL linear_stiffness_measure_with_unit; release_torsional_moment : OPTIONAL rotational_stiffness_measure_with_unit; release_y_bending_moment : OPTIONAL rotational_stiffness_measure_with_unit; release_z_bending_moment : OPTIONAL rotational_stiffness_measure_with_unit; WHERE WRR21 : EXISTS (release_axial_force) OR EXISTS (release_y_force) OR EXISTS (release_z_force) OR EXISTS (release_torsional_moment) OR EXISTS (release_y_bending_moment) OR EXISTS (release_z_bending_moment); END_ENTITY; ENTITY release_spring_non_linear SUBTYPE OF (release); change_values : LIST [2:?] OF measure_with_unit; values : LIST [2:?] OF release_spring_linear; DERIVE number_of_values : INTEGER := SIZEOF(change_values); WHERE WRR23 : SIZEOF(values) = SIZEOF(change_values); END_ENTITY; ENTITY release_warping SUBTYPE OF (release_spring_linear); release_warping_moment : rotational_stiffness_measure_with_unit; END_ENTITY; ENTITY reparametrised_composite_curve_segment SUBTYPE OF (composite_curve_segment); param_length : parameter_value; WHERE WRR24 : param_length > 0.0; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* Modified for LPM/6 *) ENTITY representation SUPERTYPE OF (ONEOF (shape_representation, material_representation) ANDOR definitional_representation); name : label; items : SET [1:?] OF representation_item; context_of_items : representation_context; DERIVE id : identifier := get_id_value (SELF); description : text := get_description_value (SELF); WHERE WRR51: SIZEOF (USEDIN (SELF, 'STRUCTURAL_FRAME_SCHEMA.' + 'ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1; WRR52: SIZEOF (USEDIN (SELF, 'STRUCTURAL_FRAME_SCHEMA.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1; END_ENTITY; (* STEP Part 43 expanded (modified in 2nd edition) *) ENTITY representation_context SUPERTYPE OF (ONEOF (geometric_representation_context, parametric_representation_context, material_property_context) ANDOR global_unit_assigned_context ANDOR global_uncertainty_assigned_context); context_identifier : identifier; context_type : text; INVERSE representations_in_context : SET [1:?] OF representation FOR context_of_items; END_ENTITY; (* STEP Part 43 expanded (unchanged in 2nd edition) *) ENTITY representation_item SUPERTYPE OF(geometric_representation_item ANDOR topological_representation_item ANDOR mapped_item ANDOR material_representation_item); name : label; WHERE WRR25 : SIZEOF(using_representations(SELF)) > 0; END_ENTITY; (* STEP Part 43 expanded (unchanged in 2nd edition) *) ENTITY representation_map; mapping_origin : representation_item; mapped_representation : representation; INVERSE map_usage : SET [1:?] OF mapped_item FOR mapping_source; WHERE WRR26 : item_in_context(SELF.mapping_origin, SELF.mapped_representation.context_of_items); END_ENTITY; (* STEP Part 43 (unchanged in 2nd edition) *) ENTITY representation_relationship SUPERTYPE OF (representation_relationship_with_transformation); name : label; description : text; rep_1 : representation; rep_2 : representation; END_ENTITY; (* STEP Part 43 (unchanged in 2nd edition) *) ENTITY representation_relationship_with_transformation SUBTYPE OF (representation_relationship); transformation_operator : transformation; WHERE WRR27 : SELF\representation_relationship.rep_1.context_of_items :<>: SELF\representation_relationship.rep_2.context_of_items; END_ENTITY; (* STEP Part 43 (unchanged in 2nd edition) *) ENTITY resistance ABSTRACT SUPERTYPE OF (ONEOF(resistance_bending, resistance_shear, resistance_axial)); resistance_type : label; resistance_description : OPTIONAL text; resistance_factor : REAL; elastic_or_plastic : elastic_or_plastic_resistance; local_or_global : global_or_local_resistance; INVERSE results : SET [1:?] OF design_result FOR design_resistance; END_ENTITY; ENTITY resistance_axial SUBTYPE OF (resistance); tensile_resistance_ptx : OPTIONAL force_measure_with_unit; compressive_resistance_pcx : OPTIONAL force_measure_with_unit; WHERE WRR30 : EXISTS (tensile_resistance_ptx) OR EXISTS (compressive_resistance_pcx); END_ENTITY; ENTITY resistance_bending SUBTYPE OF (resistance); torsional_resistance_mx : OPTIONAL moment_measure_with_unit; bending_resistance_my : OPTIONAL moment_measure_with_unit; bending_resistance_mz : OPTIONAL moment_measure_with_unit; buckling_resistance_mb : OPTIONAL moment_measure_with_unit; WHERE WRR28 : EXISTS (torsional_resistance_mx) OR EXISTS (bending_resistance_my) OR EXISTS (bending_resistance_mz) OR EXISTS (buckling_resistance_mb); END_ENTITY; ENTITY resistance_shear SUBTYPE OF (resistance); normal_shear_resistance_pv : OPTIONAL force_measure_with_unit; buckling_shear_resistance_pbv : OPTIONAL force_measure_with_unit; WHERE WRR29 : EXISTS(normal_shear_resistance_pv) OR EXISTS(buckling_shear_resistance_pbv); END_ENTITY; ENTITY restraint ABSTRACT SUPERTYPE OF (ONEOF(restraint_logical, restraint_spring)); restraint_name : label; restraint_description : OPTIONAL text; restraint_location : point; restrained_mbr : assembly_design_structural_member; END_ENTITY; ENTITY restraint_logical SUBTYPE OF (restraint); restraint_x_displacement : LOGICAL; restraint_y_displacement : LOGICAL; restraint_z_displacement : LOGICAL; restraint_x_rotation : LOGICAL; restraint_y_rotation : LOGICAL; restraint_z_rotation : LOGICAL; END_ENTITY; ENTITY restraint_spring SUPERTYPE OF (restraint_warping) SUBTYPE OF (restraint); restraint_x_displacement : OPTIONAL linear_stiffness_measure_with_unit; restraint_y_displacement : OPTIONAL linear_stiffness_measure_with_unit; restraint_z_displacement : OPTIONAL linear_stiffness_measure_with_unit; restraint_x_rotation : OPTIONAL rotational_stiffness_measure_with_unit; restraint_y_rotation : OPTIONAL rotational_stiffness_measure_with_unit; restraint_z_rotation : OPTIONAL rotational_stiffness_measure_with_unit; WHERE WRR31 : EXISTS (restraint_x_displacement) OR EXISTS (restraint_y_displacement) OR EXISTS (restraint_z_displacement) OR EXISTS (restraint_x_rotation) OR EXISTS (restraint_y_rotation) OR EXISTS (restraint_z_rotation); END_ENTITY; ENTITY restraint_warping SUBTYPE OF (restraint_spring); restraint_w_rotation : rotational_stiffness_measure_with_unit; END_ENTITY; (* Modified for LPM/6 *) ENTITY revolved_area_solid SUBTYPE OF (swept_area_solid); axis : axis1_placement; angle : plane_angle_measure; DERIVE axis_line : line := representation_item('')|| geometric_representation_item()|| curve()|| line(axis.location, representation_item('')|| geometric_representation_item()|| vector(axis.z, 1.0)); END_ENTITY; (* STEP Part 42 (modified in 2nd edition) *) (* Modified for LPM/6 *) ENTITY revolved_face_solid SUBTYPE OF (swept_face_solid); axis : axis1_placement; angle : plane_angle_measure; DERIVE axis_line : line := representation_item('')|| geometric_representation_item()|| curve()|| line(axis.location, representation_item('')|| geometric_representation_item()|| vector(axis.z, 1.0)); END_ENTITY; (* STEP Part 42 (modified in 2nd edition) *) ENTITY right_angular_wedge SUBTYPE OF (geometric_representation_item); position : axis2_placement_3d; x : positive_length_measure; y : positive_length_measure; z : positive_length_measure; ltx : length_measure; WHERE WRR33 : ((0.0 <= ltx) AND (ltx < x)); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY right_circular_cone SUBTYPE OF (geometric_representation_item); position : axis1_placement; height : positive_length_measure; radius : length_measure; semi_angle : plane_angle_measure; WHERE WRR34 : radius >= 0.0; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY right_circular_cylinder SUBTYPE OF (geometric_representation_item); position : axis1_placement; height : positive_length_measure; radius : positive_length_measure; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* New for LPM/6 *) ENTITY role_association; role : object_role; item_with_role : role_select; END_ENTITY; (* STEP Part 41 (new for 2nd edition) *) ENTITY rotational_acceleration_measure_with_unit SUBTYPE OF (derived_measure_with_unit); WHERE WRR35 : 'STRUCTURAL_FRAME_SCHEMA.ROTATIONAL_ACCELERATION_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); WRR36 : 'STRUCTURAL_FRAME_SCHEMA.ROTATIONAL_ACCELERATION_MEASURE' IN TYPEOF (SELF\measure_with_unit.value_component); END_ENTITY; ENTITY rotational_acceleration_unit SUBTYPE OF (derived_unit); WHERE WRR37 : SIZEOF(SELF\derived_unit.elements) = 2; WRR38 : ('STRUCTURAL_FRAME_SCHEMA.PLANE_ANGLE_UNIT' IN TYPEOF (SELF\derived_unit.elements[1]\derived_unit_element.unit)) AND (SELF\derived_unit.elements[1]\derived_unit_element.exponent = 1.0); WRR39 : ('STRUCTURAL_FRAME_SCHEMA.TIME_UNIT' IN TYPEOF (SELF\derived_unit.elements[2]\derived_unit_element.unit)) AND (SELF\derived_unit.elements[2]\derived_unit_element.exponent = -2.0); END_ENTITY; ENTITY rotational_stiffness_measure_with_unit SUBTYPE OF (derived_measure_with_unit); WHERE WRR40 : 'STRUCTURAL_FRAME_SCHEMA.ROTATIONAL_STIFFNESS_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); WRR41 : 'STRUCTURAL_FRAME_SCHEMA.ROTATIONAL_STIFFNESS_MEASURE' IN TYPEOF (SELF\measure_with_unit.value_component); END_ENTITY; ENTITY rotational_stiffness_unit SUBTYPE OF (derived_unit); WHERE WRR42 : SIZEOF(SELF\derived_unit.elements) = 3; WRR43 : ('STRUCTURAL_FRAME_SCHEMA.FORCE_UNIT' IN TYPEOF (SELF\derived_unit.elements[1]\derived_unit_element.unit)) AND (SELF\derived_unit.elements[1]\derived_unit_element.exponent = 1.0); WRR44 : ('STRUCTURAL_FRAME_SCHEMA.LENGTH_UNIT' IN TYPEOF (SELF\derived_unit.elements[2]\derived_unit_element.unit)) AND (SELF\derived_unit.elements[2]\derived_unit_element.exponent = 1.0); WRR45 : ('STRUCTURAL_FRAME_SCHEMA.PLANE_ANGLE_UNIT' IN TYPEOF (SELF\derived_unit.elements[3]\derived_unit_element.unit)) AND (SELF\derived_unit.elements[3]\derived_unit_element.exponent = -1.0); END_ENTITY; ENTITY rotational_velocity_measure_with_unit SUBTYPE OF (derived_measure_with_unit); WHERE WRR46 : 'STRUCTURAL_FRAME_SCHEMA.ROTATIONAL_VELOCITY_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); WRR47 : 'STRUCTURAL_FRAME_SCHEMA.ROTATIONAL_VELOCITY_MEASURE' IN TYPEOF (SELF\measure_with_unit.value_component); END_ENTITY; ENTITY rotational_velocity_unit SUBTYPE OF (derived_unit); WHERE WRR48 : SIZEOF(SELF\derived_unit.elements) = 2; WRR49 : ('STRUCTURAL_FRAME_SCHEMA.PLANE_ANGLE_UNIT' IN TYPEOF (SELF\derived_unit.elements[1]\derived_unit_element.unit)) AND (SELF\derived_unit.elements[1]\derived_unit_element.exponent = 1.0); WRR50 : ('STRUCTURAL_FRAME_SCHEMA.TIME_UNIT' IN TYPEOF (SELF\derived_unit.elements[2]\derived_unit_element.unit)) AND (SELF\derived_unit.elements[2]\derived_unit_element.exponent = -1.0); END_ENTITY; ENTITY seam_curve SUBTYPE OF (surface_curve); WHERE WRS1 : SIZEOF(SELF\surface_curve.associated_geometry) = 2; WRS2 : associated_surface(SELF\surface_curve.associated_geometry[1]) = associated_surface(SELF\surface_curve.associated_geometry[2]); WRS3 : 'STRUCTURAL_FRAME_SCHEMA.PCURVE' IN TYPEOF(SELF\surface_curve.associated_geometry[1]); WRS4 : 'STRUCTURAL_FRAME_SCHEMA.PCURVE' IN TYPEOF(SELF\surface_curve.associated_geometry[2]); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* Modified for LPM/6 *) ENTITY section_profile SUPERTYPE OF (ONEOF(section_profile_simple, section_profile_complex)) SUBTYPE OF (structural_frame_item); section_classification : OPTIONAL label; cardinal_point : cardinal_point_ref; mirrored : LOGICAL; DERIVE section_ref : BAG OF identifier := SELF\structural_frame_item.item_ref; END_ENTITY; ENTITY section_profile_angle SUBTYPE OF (section_profile_simple); depth : positive_length_measure_with_unit; width : OPTIONAL positive_length_measure_with_unit; thickness : positive_length_measure_with_unit; internal_fillet_radius : OPTIONAL positive_length_measure_with_unit; edge_fillet_radius : OPTIONAL positive_length_measure_with_unit; leg_slope : OPTIONAL ratio_measure_with_unit; DERIVE width_value : REAL := NVL(width.value_component, depth.value_component); WHERE WRS5 : depth.value_component > thickness.value_component; END_ENTITY; ENTITY section_profile_centreline SUBTYPE OF (section_profile_complex); centreline : curve; thickness : positive_length_measure_with_unit; END_ENTITY; ENTITY section_profile_channel SUBTYPE OF (section_profile_simple); overall_depth : positive_length_measure_with_unit; flange_width : positive_length_measure_with_unit; flange_thickness : positive_length_measure_with_unit; web_thickness : positive_length_measure_with_unit; root_radius : OPTIONAL positive_length_measure_with_unit; fillet_radius : OPTIONAL positive_length_measure_with_unit; flange_slope : OPTIONAL ratio_measure_with_unit; DERIVE overall_depth_value : REAL := overall_depth.value_component; flange_width_value : REAL := flange_width.value_component; flange_thickness_value : REAL := flange_thickness.value_component; web_thickness_value : REAL := web_thickness.value_component; WHERE WRS6 : flange_thickness_value < (overall_depth_value/2); WRS7 : web_thickness_value < flange_width_value; END_ENTITY; ENTITY section_profile_circle SUPERTYPE OF (section_profile_circle_hollow) SUBTYPE OF (section_profile_simple); external_radius : positive_length_measure_with_unit; END_ENTITY; ENTITY section_profile_circle_hollow SUBTYPE OF (section_profile_circle); wall_thickness : positive_length_measure_with_unit; DERIVE external_radius_value : REAL := (SELF\section_profile_circle.external_radius.value_component); wall_thickness_value : REAL := wall_thickness.value_component; inside_diameter : REAL := ((external_radius_value - wall_thickness_value)*2); WHERE WRS8 : wall_thickness_value < external_radius_value; END_ENTITY; ENTITY section_profile_complex ABSTRACT SUPERTYPE OF (ONEOF (section_profile_compound, section_profile_edge_defined, section_profile_centreline, section_profile_derived)) SUBTYPE OF (section_profile); END_ENTITY; ENTITY section_profile_compound SUBTYPE OF (section_profile_complex); component_sections : LIST [2:?] OF section_profile; positions : LIST [2:?] OF point; orientations : LIST [2:?] OF orientation_select; DERIVE number_of_sections : INTEGER := SIZEOF (component_sections); WHERE WRS9 : SIZEOF (positions) = number_of_sections; WRS10 : SIZEOF (orientations) = number_of_sections; WRS11 : SIZEOF (QUERY(sections <* component_sections | sections :=: (SELF))) = 0; END_ENTITY; ENTITY section_profile_derived SUBTYPE OF (section_profile_complex); original_section : section_profile; WHERE WRS12 : original_section :<>: SELF; END_ENTITY; ENTITY section_profile_edge_defined SUBTYPE OF (section_profile_complex); external_edge : bounded_curve; internal_edges : LIST [0:?] OF bounded_curve; END_ENTITY; ENTITY section_profile_i_type SUPERTYPE OF (section_profile_i_type_asymmetric) SUBTYPE OF (section_profile_simple); overall_depth : positive_length_measure_with_unit; overall_width : positive_length_measure_with_unit; web_thickness : positive_length_measure_with_unit; flange_thickness : positive_length_measure_with_unit; internal_depth : OPTIONAL positive_length_measure_with_unit; flange_slope : OPTIONAL ratio_measure_with_unit; root_radius : OPTIONAL positive_length_measure_with_unit; edge_radius : OPTIONAL positive_length_measure_with_unit; DERIVE overall_depth_value : REAL := overall_depth.value_component; overall_width_value : REAL := overall_width.value_component; web_thickness_value : REAL := web_thickness.value_component; flange_thickness_value : REAL := flange_thickness.value_component; WHERE WRS13 : flange_thickness_value < (overall_depth_value/2); WRS14 : web_thickness_value < overall_width_value; END_ENTITY; ENTITY section_profile_i_type_asymmetric SUPERTYPE OF (section_profile_i_type_rail) SUBTYPE OF (section_profile_i_type); top_flange_width : positive_length_measure_with_unit; bottom_flange_width : positive_length_measure_with_unit; bottom_flange_thickness : positive_length_measure_with_unit; bottom_root_radius : OPTIONAL positive_length_measure_with_unit; bottom_flange_slope : OPTIONAL ratio_measure_with_unit; bottom_flange_edge_radius : OPTIONAL positive_length_measure_with_unit; WHERE WRS43 : (SELF\section_profile_i_type.overall_width :=: top_flange_width) OR (SELF\section_profile_i_type.overall_width :=: bottom_flange_width); END_ENTITY; ENTITY section_profile_i_type_rail SUBTYPE OF (section_profile_i_type_asymmetric); top_edge_radius : positive_length_measure_with_unit; bottom_edge_radius : positive_length_measure_with_unit; top_flange_inner_slope : ratio_measure_with_unit; bottom_flange_inner_slope : ratio_measure_with_unit; transition_radius_top : OPTIONAL positive_length_measure_with_unit; transition_radius_bottom : OPTIONAL positive_length_measure_with_unit; END_ENTITY; ENTITY section_profile_rectangle SUPERTYPE OF (section_profile_rectangle_hollow) SUBTYPE OF (section_profile_simple); overall_depth : positive_length_measure_with_unit; overall_width : OPTIONAL positive_length_measure_with_unit; external_fillet_radius : OPTIONAL positive_length_measure_with_unit; DERIVE overall_depth_value : REAL := overall_depth.value_component; overall_width_value : REAL := NVL(overall_width.value_component, overall_depth.value_component); external_fillet_value : REAL := NVL(external_fillet_radius.value_component, 0.0); WHERE WRS15 : external_fillet_value < (overall_depth_value/2); END_ENTITY; ENTITY section_profile_rectangle_hollow SUBTYPE OF (section_profile_rectangle); wall_thickness : positive_length_measure_with_unit; internal_fillet_radius : OPTIONAL positive_length_measure_with_unit; DERIVE wall_thickness_value : REAL := wall_thickness.value_component; internal_radius_value : REAL := NVL(internal_fillet_radius.value_component, 0.0); WHERE WRS16 : wall_thickness_value < ((SELF\section_profile_rectangle.overall_depth_value)/2); WRS17 : internal_radius_value < ((SELF\section_profile_rectangle.overall_depth_value)/2); END_ENTITY; ENTITY section_profile_simple ABSTRACT SUPERTYPE OF (ONEOF (section_profile_i_type, section_profile_t_type, section_profile_channel, section_profile_angle, section_profile_circle, section_profile_rectangle)) SUBTYPE OF (section_profile); END_ENTITY; ENTITY section_profile_t_type SUBTYPE OF (section_profile_simple); overall_depth : positive_length_measure_with_unit; flange_width : positive_length_measure_with_unit; flange_thickness : positive_length_measure_with_unit; web_thickness : positive_length_measure_with_unit; root_radius : OPTIONAL positive_length_measure_with_unit; flange_slope : OPTIONAL ratio_measure_with_unit; web_slope : OPTIONAL ratio_measure_with_unit; edge_radius : OPTIONAL positive_length_measure_with_unit; DERIVE overall_depth_value : REAL := overall_depth.value_component; flange_width_value : REAL := flange_width.value_component; flange_thickness_value : REAL := flange_thickness.value_component; web_thickness_value : REAL := web_thickness.value_component; WHERE WRS18 : flange_thickness_value < overall_depth_value; WRS19 : web_thickness_value < flange_width_value; END_ENTITY; ENTITY section_properties SUPERTYPE OF (section_properties_asymmetric); profile : section_profile; origin_offset : ARRAY [1:2] OF OPTIONAL length_measure_with_unit; torsional_constant_Ix : OPTIONAL inertia_measure_with_unit; inertia_moment_Iy : OPTIONAL inertia_measure_with_unit; inertia_moment_Iz : OPTIONAL inertia_measure_with_unit; section_area_Ax : OPTIONAL area_measure_with_unit; shear_area_Asy : OPTIONAL area_measure_with_unit; shear_area_Asz : OPTIONAL area_measure_with_unit; shear_deformation_area_Ay : OPTIONAL area_measure_with_unit; shear_deformation_area_Az : OPTIONAL area_measure_with_unit; surface_per_length : OPTIONAL positive_length_measure_with_unit; radius_of_gyration_ry : OPTIONAL positive_length_measure_with_unit; radius_of_gyration_rz : OPTIONAL positive_length_measure_with_unit; plastic_modulus_Sy : OPTIONAL modulus_measure_with_unit; plastic_modulus_Sz : OPTIONAL modulus_measure_with_unit; warping_constant : OPTIONAL derived_measure_with_unit; torsional_index : OPTIONAL REAL; buckling_parameter : OPTIONAL REAL; nominal_mass : OPTIONAL mass_per_length_measure_with_unit; actual_mass : OPTIONAL mass_per_length_measure_with_unit; DERIVE y_offset : REAL := NVL(origin_offset[1].value_component, 0.0); z_offset : REAL := NVL(origin_offset[2].value_component, 0.0); WHERE WRS39 : NOT( (profile.cardinal_point = 10) AND (y_offset <> 0.0) ); WRS40 : NOT( (profile.cardinal_point = 10) AND (z_offset <> 0.0) ); END_ENTITY; ENTITY section_properties_asymmetric SUBTYPE OF (section_properties); neutral_axis_shear_centre : ARRAY [1:2] OF OPTIONAL length_measure_with_unit; theta_angle_z_axis_v_axis : OPTIONAL plane_angle_measure_with_unit; inertia_moment_Iu : OPTIONAL inertia_measure_with_unit; inertia_moment_Iv : OPTIONAL inertia_measure_with_unit; radius_of_gyration_ru : OPTIONAL positive_length_measure_with_unit; radius_of_gyration_rv : OPTIONAL positive_length_measure_with_unit; section_modulii : ARRAY [1:8] OF OPTIONAL modulus_measure_with_unit; END_ENTITY; ENTITY setting_out_point; set_out_site : site; location : geographical_location; END_ENTITY; ENTITY shape_representation SUPERTYPE OF (shape_representation_with_units) SUBTYPE OF (representation); END_ENTITY; (* STEP Part 41 expanded (2nd edition unchanged) *) ENTITY shape_representation_with_units SUBTYPE OF (shape_representation); WHERE WRS20 : ('STRUCTURAL_FRAME_SCHEMA.GEOMETRIC_REPRESENTATION_CONTEXT' IN TYPEOF (SELF\representation.context_of_items)) AND ('STRUCTURAL_FRAME_SCHEMA.GLOBAL_UNIT_ASSIGNED_CONTEXT' IN TYPEOF (SELF\representation.context_of_items)); WRS21 : SIZEOF(QUERY(temp <* SELF\representation.items | ('STRUCTURAL_FRAME_SCHEMA.GEOMETRIC_REPRESENTATION_ITEM') IN TYPEOF(temp))) > 0; END_ENTITY; ENTITY shell_based_surface_model SUBTYPE OF (geometric_representation_item); sbsm_boundary : SET [1:?] OF shell; WHERE WRS22 : constraints_geometry_shell_based_surface_model(SELF); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY shell_based_wireframe_model SUBTYPE OF (geometric_representation_item); sbwm_boundary : SET [1:?] OF shell; WHERE WRS23 : constraints_geometry_shell_based_wireframe_model(SELF); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY si_unit SUBTYPE OF (named_unit); prefix : OPTIONAL si_prefix; name : si_unit_name; DERIVE SELF\named_unit.dimensions : dimensional_exponents := dimensions_for_si_unit (SELF.name); END_ENTITY; (* STEP Part 41 (2nd edition unchanged) *) ENTITY site SUPERTYPE OF (site_with_shape) SUBTYPE OF (structural_frame_item); site_address : OPTIONAL address; UNIQUE URS5 : SELF\structural_frame_item.item_number, SELF\structural_frame_item.item_name; END_ENTITY; ENTITY site_with_shape SUBTYPE OF (site); shape : shape_representation_with_units; END_ENTITY; (* New for LPM/6 *) ENTITY solder SUBTYPE OF (structural_frame_process); solder_type : soldering_type; END_ENTITY; ENTITY solid_angle_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE WRS24 : 'STRUCTURAL_FRAME_SCHEMA.SOLID_ANGLE_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); WRS25 : 'STRUCTURAL_FRAME_SCHEMA.SOLID_ANGLE_MEASURE' IN TYPEOF (SELF\measure_with_unit.value_component); END_ENTITY; (* based on STEP Part 41 2nd edition (WR added) *) ENTITY solid_angle_unit SUBTYPE OF (named_unit); WHERE WRS26 : (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent = 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0); END_ENTITY; (* STEP Part 41 (2nd edition unchanged) *) (* Modified for LPM/6 *) ENTITY solid_model SUPERTYPE OF (ONEOF (manifold_solid_brep, csg_solid, swept_face_solid, swept_area_solid, solid_replica, brep_2d, trimmed_volume)) SUBTYPE OF (geometric_representation_item); END_ENTITY; (* STEP Part 42 (modified in 2nd edition) *) (* Modified for LPM/6 *) ENTITY solid_replica SUBTYPE OF (solid_model); parent_solid : solid_model; transformation : cartesian_transformation_operator_3d; WHERE WRS27 : acyclic_solid_replica(SELF, parent_solid); WRS44 : parent_solid\geometric_representation_item.dim = 3; END_ENTITY; (* STEP Part 42 (modified in 2nd edition) *) ENTITY sphere SUBTYPE OF (geometric_representation_item); radius : positive_length_measure; centre : point; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* Modified for LPM/6 - CIS entity replaced with STEP Part 42 entity *) ENTITY spherical_point SUBTYPE OF (cartesian_point); r : length_measure; theta : plane_angle_measure; phi : plane_angle_measure; DERIVE SELF\cartesian_point.coordinates : LIST [1:3] OF length_measure := [r*sin(theta)*cos(phi), r*sin(theta)*sin(phi), r*cos(theta)]; WHERE WRS45 : r >= 0.0; END_ENTITY; (* STEP Part 42 (New in 2nd edition) *) ENTITY spherical_surface SUBTYPE OF (elementary_surface); radius : positive_length_measure; END_ENTITY; (* STEP Part 42 (unchanded in 2nd edition) *) (* New for LPM/6 *) ENTITY spherical_volume SUBTYPE OF (volume); position : axis2_placement_3d; radius : positive_length_measure; END_ENTITY; (* STEP Part 42 (New in 2nd edition) *) ENTITY standard_uncertainty SUBTYPE OF (uncertainty_qualifier); uncertainty_value : REAL; END_ENTITY; (* STEP Part 45 (unchanged in TC1) *) (* Modified for LPM/6 *) ENTITY step_file SUBTYPE OF (media_file); INVERSE selected_content : SET [1:?] OF group_assignment FOR assigned_group; WHERE WRS28 : (SELF\media_file.file_format = 'STP') OR (SELF\media_file.file_format = 'stp'); END_ENTITY; (* Modified for LPM/6 *) ENTITY structural_frame_item SUPERTYPE OF (ONEOF (building, building_complex, feature, joint_system, located_item, material, project, project_plan, project_plan_item, section_profile, site, structural_frame_process, structural_frame_product, structure)); item_number : INTEGER; item_name : label; item_description : OPTIONAL text; DERIVE item_ref : BAG OF identifier := get_item_ref(SELF); cost_code : BAG OF label := get_item_cost_code(SELF); object_id : globally_unique_id := get_instance_id(SELF); WHERE WRS49 : SIZEOF (USEDIN (SELF, 'STRUCTURAL_FRAME_SCHEMA.MANAGED_DATA_ITEM.DATA_ITEM')) <= 1; END_ENTITY; ENTITY structural_frame_item_approved; approved_item : structural_frame_item; assigned_approval : approval; UNIQUE URS1 : approved_item, assigned_approval; END_ENTITY; ENTITY structural_frame_item_certified; certified_item : structural_frame_item; assigned_certification : certification; UNIQUE URS2 : certified_item, assigned_certification; END_ENTITY; ENTITY structural_frame_item_documented; documented_item : structural_frame_item; document_reference : document_usage_constraint; UNIQUE URS3 : documented_item, document_reference; END_ENTITY; ENTITY structural_frame_item_priced; priced_item : structural_frame_item; assigned_price: currency_measure_with_unit; price_description : text; UNIQUE URS4 : priced_item, assigned_price; END_ENTITY; ENTITY structural_frame_item_relationship; relationship_name : label; relationship_description : OPTIONAL text; related_item : structural_frame_item; relating_item : structural_frame_item; WHERE WRS29 : related_item :<>: relating_item; END_ENTITY; (* Modified for LPM/6 - subtypes added *) ENTITY structural_frame_process SUPERTYPE OF (ONEOF (assemble, bend, braze, cut, dispatch, move, procure, solder, surface_treatment, weld)) SUBTYPE OF (structural_frame_item); place_of_process : OPTIONAL organizational_address; END_ENTITY; ENTITY structural_frame_product SUPERTYPE OF (ONEOF (assembly, coating, part, fastener, fastener_mechanism, weld_mechanism, chemical_mechanism) ANDOR structural_frame_product_with_material) SUBTYPE OF (structural_frame_item); life_cycle_stage : OPTIONAL label; END_ENTITY; ENTITY structural_frame_product_with_material SUBTYPE OF (structural_frame_product); material_definition : material; nominal_mass : OPTIONAL mass_measure_with_unit; actual_mass : OPTIONAL mass_measure_with_unit; END_ENTITY; ENTITY structure SUBTYPE OF (structural_frame_item); UNIQUE URS6 : SELF\structural_frame_item.item_number, SELF\structural_frame_item.item_name; END_ENTITY; (* New for LPM/6 *) ENTITY subedge SUBTYPE OF (edge); parent_edge : edge; END_ENTITY; (* STEP Part 42 2nd edition *) ENTITY subface SUBTYPE OF (face); parent_face : face; WHERE WRS30 : NOT (mixed_loop_type_set(list_to_set(list_face_loops(SELF)) + list_to_set(list_face_loops(parent_face)))); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY surface SUPERTYPE OF (ONEOF (elementary_surface, swept_surface, bounded_surface, offset_surface, surface_replica)) SUBTYPE OF (geometric_representation_item); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY surface_curve SUPERTYPE OF (ONEOF(intersection_curve, seam_curve) ANDOR bounded_surface_curve) SUBTYPE OF (curve); curve_3d : curve; associated_geometry : LIST [1:2] OF pcurve_or_surface; master_representation : preferred_surface_curve_representation; DERIVE basis_surface : SET [1:2] OF surface := get_basis_surface(SELF); WHERE WRS31 : curve_3d.dim = 3; WRS32 : ('STRUCTURAL_FRAME_SCHEMA.PCURVE' IN TYPEOF(associated_geometry[1])) OR (master_representation <> pcurve_s1); WRS33 : ('STRUCTURAL_FRAME_SCHEMA.PCURVE' IN TYPEOF(associated_geometry[2])) OR (master_representation <> pcurve_s2); WRS34 : NOT ('STRUCTURAL_FRAME_SCHEMA.PCURVE' IN TYPEOF(curve_3d)); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* new for LPM/6 *) ENTITY surface_curve_swept_area_solid SUBTYPE OF (swept_area_solid); directrix : curve; start_param : REAL; end_param : REAL; reference_surface : surface; WHERE WRS46 : (NOT ('STRUCTURAL_FRAME_SCHEMA.SURFACE_CURVE' IN TYPEOF(directrix))) OR (reference_surface IN (directrix\surface_curve.basis_surface)); END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) (* new for LPM/6 *) ENTITY surface_curve_swept_face_solid SUBTYPE OF (swept_face_solid); directrix : curve; start_param : REAL; end_param : REAL; reference_surface : surface; WHERE WRS47 : (NOT ('STRUCTURAL_FRAME_SCHEMA.SURFACE_CURVE' IN TYPEOF(directrix))) OR (reference_surface IN (directrix\surface_curve.basis_surface)); END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) (* New for LPM/6 *) ENTITY surface_curve_swept_surface SUBTYPE OF (swept_surface); directrix : curve; reference_surface : surface; WHERE WRS48 : (NOT ('STRUCTURAL_FRAME_SCHEMA.SURFACE_CURVE' IN TYPEOF(directrix))) OR (reference_surface IN (directrix\surface_curve.basis_surface)); END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) ENTITY surface_of_linear_extrusion SUBTYPE OF (swept_surface); extrusion_axis : vector; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* modified for LPM/6 *) ENTITY surface_of_revolution SUBTYPE OF (swept_surface); axis_position : axis1_placement; DERIVE axis_line : line := dummy_gri || curve() || line (axis_position.location,dummy_gri || vector(axis_position.z, 1.0)); END_ENTITY; (* STEP Part 42 (modified in 2nd edition) *) ENTITY surface_patch; parent_surface : bounded_surface; u_transition : transition_code; v_transition : transition_code; u_sense : BOOLEAN; v_sense : BOOLEAN; INVERSE using_surfaces : BAG [1:?] OF rectangular_composite_surface FOR segments; WHERE WRS35 : (NOT ('STRUCTURAL_FRAME_SCHEMA.CURVE_BOUNDED_SURFACE' IN TYPEOF(parent_surface))); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* modified for LPM/6 *) ENTITY surface_replica SUBTYPE OF (surface); parent_surface : surface; transformation : cartesian_transformation_operator_3d; WHERE WRS36 : acyclic_surface_replica(SELF, parent_surface); END_ENTITY; (* STEP Part 42 (modified in 2nd edition) *) ENTITY surface_treatment ABSTRACT SUPERTYPE OF (ONEOF (surface_treatment_clean, surface_treatment_coat, surface_treatment_grind, surface_treatment_hard_stamp, surface_treatment_thermal)) SUBTYPE OF (structural_frame_process); surface_finish_specification : text; END_ENTITY; ENTITY surface_treatment_clean SUBTYPE OF (surface_treatment); method : cleaning_method; END_ENTITY; ENTITY surface_treatment_coat SUBTYPE OF (surface_treatment); methods : LIST [1:?] OF coating_method; layer_thicknesses : LIST [1:?] OF positive_length_measure_with_unit; coating_specifications : LIST [1:?] OF coating; DERIVE number_of_layers : INTEGER := SIZEOF(methods); WHERE WRS41 : SIZEOF(layer_thicknesses) = number_of_layers; WRS42 : SIZEOF(coating_specifications) = number_of_layers; END_ENTITY; ENTITY surface_treatment_grind SUBTYPE OF (surface_treatment); finished_surface_irregularity : OPTIONAL length_measure_with_unit; END_ENTITY; ENTITY surface_treatment_hard_stamp SUBTYPE OF (surface_treatment); stamp_method : cutting_type; END_ENTITY; ENTITY surface_treatment_thermal SUPERTYPE OF (surface_treatment_thermal_timed) SUBTYPE OF (surface_treatment); initial_temperature : thermodynamic_temperature_measure_with_unit; final_temperature : thermodynamic_temperature_measure_with_unit; maximum_temperature : thermodynamic_temperature_measure_with_unit; END_ENTITY; ENTITY surface_treatment_thermal_timed SUBTYPE OF (surface_treatment_thermal); time_to_maximum : time_measure_with_unit; time_at_maximum : time_measure_with_unit; time_to_final : time_measure_with_unit; END_ENTITY; (* Modified for LPM/6 *) ENTITY swept_area_solid SUPERTYPE OF (ONEOF( extruded_area_solid, revolved_area_solid, surface_curve_swept_area_solid)) SUBTYPE OF (solid_model); swept_area : curve_bounded_surface; WHERE WRS37 : 'STRUCTURAL_FRAME_SCHEMA.PLANE' IN TYPEOF(swept_area.basis_surface); END_ENTITY; (* STEP Part 42 (modified in 2nd edition) *) (* modified for LPM/6 *) ENTITY swept_face_solid SUPERTYPE OF (ONEOF( extruded_face_solid, revolved_face_solid, surface_curve_swept_face_solid)) SUBTYPE OF (solid_model); swept_face : face_surface; WHERE WRS38 : 'STRUCTURAL_FRAME_SCHEMA.PLANE' IN TYPEOF(swept_face.face_geometry); END_ENTITY; (* STEP Part 42 (modified in 2nd edition) *) (* modified for LPM/6 *) ENTITY swept_surface SUPERTYPE OF (ONEOF( surface_of_linear_extrusion, surface_of_revolution, surface_curve_swept_surface, fixed_reference_swept_surface)) SUBTYPE OF (surface); swept_curve : curve; END_ENTITY; (* STEP Part 42 (modified in 2nd edition) *) (* New for LPM/6 *) ENTITY tetrahedron SUBTYPE OF (faceted_primitive); WHERE WRT15 : SIZEOF(points) = 4 ; WRT16: above_plane(points[1], points[2], points[3], points[4]) <> 0.0; END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) (* New for LPM/6 *) ENTITY tetrahedron_volume SUBTYPE OF (volume); point_1 : cartesian_point; point_2 : cartesian_point; point_3 : cartesian_point; point_4 : cartesian_point; WHERE WRT10 : point_1.dim = 3; WRT11 : above_plane(point_1, point_2, point_3, point_4) <> 0.0 ; END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) ENTITY thermodynamic_temperature_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE WRT1 : 'STRUCTURAL_FRAME_SCHEMA.THERMODYNAMIC_TEMPERATURE_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); WRT2 : 'STRUCTURAL_FRAME_SCHEMA.THERMODYNAMIC_TEMPERATURE_MEASURE' IN TYPEOF (SELF\measure_with_unit.value_component); END_ENTITY; (* based on STEP Part 41 2nd edition (WR added) *) ENTITY thermodynamic_temperature_unit SUBTYPE OF (named_unit); WHERE WRT3 : (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent = 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 1.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0); END_ENTITY; (* STEP Part 41 (2nd edition unchanged) *) ENTITY time_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE WRT4 : 'STRUCTURAL_FRAME_SCHEMA.TIME_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); WRT5 : 'STRUCTURAL_FRAME_SCHEMA.TIME_MEASURE' IN TYPEOF (SELF\measure_with_unit.value_component); END_ENTITY; (* based on STEP Part 41 2nd edition (WR added) *) ENTITY time_unit SUBTYPE OF (named_unit); WHERE WRT6 : (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent = 1.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0); END_ENTITY; (* STEP Part 41 (2nd edition unchanged) *) ENTITY topological_representation_item SUPERTYPE OF (ONEOF (connected_edge_set, connected_face_set, edge, face, face_bound, vertex, vertex_shell, wire_shell) ANDOR loop ANDOR path) SUBTYPE OF (representation_item); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY toroidal_surface SUBTYPE OF (elementary_surface); major_radius : positive_length_measure; minor_radius : positive_length_measure; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* New for LPM/6 *) ENTITY toroidal_volume SUBTYPE OF (volume); position : axis2_placement_3d; major_radius : positive_length_measure; minor_radius : positive_length_measure; WHERE WR13 : minor_radius < major_radius; END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) ENTITY torus SUBTYPE OF (geometric_representation_item); position : axis1_placement; major_radius : positive_length_measure; minor_radius : positive_length_measure; WHERE WRT7 : major_radius > minor_radius; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY trimmed_curve SUBTYPE OF (bounded_curve); basis_curve : curve; trim_1 : SET [1:2] OF trimming_select; trim_2 : SET [1:2] OF trimming_select; sense_agreement : BOOLEAN; master_representation : trimming_preference; WHERE WRT8 : (HIINDEX(trim_1) = 1) XOR (TYPEOF(trim_1[1]) <> TYPEOF(trim_1[2])); WRT9 : (HIINDEX(trim_2) = 1) XOR (TYPEOF(trim_2[1]) <> TYPEOF(trim_2[2])); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* New for LPM/6 *) ENTITY trimmed_volume SUBTYPE OF (solid_model); basis_volume : volume; u1 : parameter_value; u2 : parameter_value; v1 : parameter_value; v2 : parameter_value; w1 : parameter_value; w2 : parameter_value; WHERE WRT12 : u1 <> u2; WRT13 : v1 <> v2; WRT14 : w1 <> w2; END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) ENTITY truncated_pyramid SUBTYPE OF (boolean_result); END_ENTITY; (* STEP Part 225 *) ENTITY type_qualifier; name : label; END_ENTITY; (* STEP Part 45 (unchanged in TC1) *) (* Modified for LPM/6 *) ENTITY uncertainty_measure_with_unit SUBTYPE OF (measure_with_unit); name : label; description : text; WHERE WRU1 : valid_measure_value (SELF\measure_with_unit.value_component); END_ENTITY; (* STEP Part 43 (WR Modified in 2nd edition) *) ENTITY uncertainty_qualifier SUPERTYPE OF (ONEOF(qualitative_uncertainty, standard_uncertainty)); measure_name : label; description : text; END_ENTITY; (* STEP Part 45 (unchanged in TC1) *) ENTITY uniform_curve SUBTYPE OF (b_spline_curve); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY uniform_surface SUBTYPE OF (b_spline_surface); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* New for LPM/6 *) ENTITY uniform_volume SUBTYPE OF (b_spline_volume); END_ENTITY; (* STEP Part 42 (new in 2nd edition) *) ENTITY vector SUBTYPE OF (geometric_representation_item); orientation : direction; magnitude : length_measure; WHERE WRV1 : magnitude >= 0.0; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* Modified for LPM/6 *) ENTITY versioned_action_request; id : identifier; version : label; purpose : text; description : OPTIONAL text; END_ENTITY; (* STEP Part 41 (unchanged in 2nd edition) *) ENTITY vertex SUBTYPE OF (topological_representation_item); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY vertex_loop SUBTYPE OF (loop); loop_vertex : vertex; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY vertex_point SUBTYPE OF (vertex, geometric_representation_item); vertex_geometry : point; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY vertex_shell SUBTYPE OF (topological_representation_item); vertex_shell_extent : vertex_loop; END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) (* New for LPM/6 *) ENTITY volume SUPERTYPE OF (ONEOF( block_volume, wedge_volume, spherical_volume, cylindrical_volume, eccentric_conical_volume, toroidal_volume, pyramid_volume, b_spline_volume, ellipsoid_volume, tetrahedron_volume, hexahedron_volume)) SUBTYPE OF (geometric_representation_item); WHERE WRV5 : SELF\geometric_representation_item.dim = 3; END_ENTITY; (* STEP Part 42 (new for 2nd edition) *) ENTITY volume_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE WRV2 : 'STRUCTURAL_FRAME_SCHEMA.VOLUME_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component); WRV3 : 'STRUCTURAL_FRAME_SCHEMA.VOLUME_MEASURE' IN TYPEOF (SELF\measure_with_unit.value_component); END_ENTITY; (* based on STEP Part 41 2nd editon (WR added) *) ENTITY volume_unit SUBTYPE OF (named_unit); WHERE WRV4 : (SELF\named_unit.dimensions.length_exponent = 3.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent = 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0); END_ENTITY; (* STEP Part 41 (2nd edition unchanged) *) (* New for LPM/6 *) ENTITY wedge_volume SUBTYPE OF (volume); position : axis2_placement_3d; x : positive_length_measure; y : positive_length_measure; z : positive_length_measure; ltx : length_measure; WHERE WRE5 : ((0.0 <= ltx) AND (ltx < x)); END_ENTITY; (* STEP Part 42 (New for 2nd edition) *) (* Modified for LPM/6 Subtypes added - see Issue 99 *) ENTITY weld SUPERTYPE OF (ONEOF(weld_arc, weld_beam, weld_gas, weld_other, weld_pressure, weld_resistance, weld_stud)) SUBTYPE OF (structural_frame_process); electrode_type : OPTIONAL label; weld_type : welding_type; END_ENTITY; (* New for LPM/6 *) ENTITY weld_arc SUBTYPE OF (weld); weld_arc_type : welding_type_arc; WHERE WRW13 : SELF\weld.weld_type = FUSION_WELD; WRW14 : EXISTS(SELF\weld.electrode_type); END_ENTITY; (* New for LPM/6 *) ENTITY weld_beam SUBTYPE OF (weld); weld_beam_type : welding_type_beam; WHERE WRW19 : (SELF\weld.weld_type = FUSION_WELD) OR (SELF\weld.weld_type = LASER_WELD); WRW20 : NOT(EXISTS(SELF\weld.electrode_type)); END_ENTITY; (* New for LPM/6 *) ENTITY weld_gas SUBTYPE OF (weld); weld_gas_type : welding_type_gas; WHERE WRW15 : SELF\weld.weld_type = FUSION_WELD; WRW16 : NOT(EXISTS(SELF\weld.electrode_type)); END_ENTITY; (* New for LPM/6 *) ENTITY weld_other SUBTYPE OF (weld); weld_other_type : welding_type_other; END_ENTITY; (* New for LPM/6 *) ENTITY weld_pressure SUBTYPE OF (weld); weld_pressure_type : welding_type_pressure; WHERE WRW17 : NOT((SELF\weld.weld_type = LASER_WELD) OR (SELF\weld.weld_type = FLASH_WELD)); WRW18 : NOT(EXISTS(SELF\weld.electrode_type)); END_ENTITY; (* New for LPM/6 *) ENTITY weld_resistance SUBTYPE OF (weld); weld_resistance_type : welding_type_resistance; END_ENTITY; (* New for LPM/6 *) ENTITY weld_stud SUBTYPE OF (weld); weld_stud_type : welding_type_stud; END_ENTITY; (* Modified for LPM/6 - subtypes added *) ENTITY weld_mechanism SUPERTYPE OF (ONEOF( weld_mechanism_complex, weld_mechanism_prismatic, weld_mechanism_fillet, weld_mechanism_groove, weld_mechanism_spot_seam)) SUBTYPE OF (structural_frame_product); weld_mechanism_type : weld_type; penetration : weld_penetration; weld_dimension : OPTIONAL positive_length_measure_with_unit; weld_dimension_name : OPTIONAL label; weld_design_strength : OPTIONAL pressure_measure_with_unit; END_ENTITY; (* new for LPM/6 - see Issues 87 and 88 *) ENTITY weld_mechanism_complex SUBTYPE OF (weld_mechanism); weld_shape : shape_representation_with_units; END_ENTITY; (* new for LPM/6 - see Issues 87 and 88 *) ENTITY weld_mechanism_fillet SUPERTYPE OF (ONEOF(weld_mechanism_fillet_continuous, weld_mechanism_fillet_intermittent)) SUBTYPE OF (weld_mechanism); sidedness : weld_sidedness; surface_shape : weld_surface_shape; joint_configuration : weld_configuration; leg_length_y : OPTIONAL positive_length_measure_with_unit; leg_length_z : OPTIONAL positive_length_measure_with_unit; WHERE WRW7 : SELF\weld_mechanism.weld_mechanism_type = FILLET_WELD; WRW8 : NOT ((SELF\weld_mechanism.penetration = FULL_PENETRATION) OR (SELF\weld_mechanism.penetration = PARTIAL_PENETRATION)); END_ENTITY; (* new for LPM/6 - see Issues 87 and 88 *) ENTITY weld_mechanism_fillet_continuous SUBTYPE OF (weld_mechanism_fillet); END_ENTITY; (* new for LPM/6 - see Issues 87 and 88 *) ENTITY weld_mechanism_fillet_intermittent SUBTYPE OF (weld_mechanism_fillet); end_rules : weld_intermittent_rule ; cutout_rules : weld_intermittent_rule ; penetration_rules : weld_intermittent_rule ; fillet_weld_length : positive_length_measure_with_unit; fillet_weld_spacing : positive_length_measure_with_unit; fillet_alignment : weld_alignment; END_ENTITY; (* new for LPM/6 - see Issues 87 and 88 *) ENTITY weld_mechanism_groove SUPERTYPE OF(ONEOF(weld_mechanism_groove_beveled, weld_mechanism_groove_butt)) SUBTYPE OF (weld_mechanism); sidedness : weld_sidedness; backing_type : OPTIONAL weld_backing_type; weld_joint_spacer : BOOLEAN; surface_shape : weld_surface_shape; joint_configuration : weld_configuration; root_gap : OPTIONAL positive_length_measure_with_unit; root_face : OPTIONAL positive_length_measure_with_unit; WHERE WRW9 : SELF\weld_mechanism.weld_mechanism_type = BUTT_WELD; WRW10 : NOT (SELF\weld_mechanism.penetration = DEEP_PENETRATION); END_ENTITY; (* new for LPM/6 - see Issues 87 and 88 *) ENTITY weld_mechanism_groove_beveled SUBTYPE OF (weld_mechanism_groove); endcut_shape : weld_shape_bevel; groove_angle : OPTIONAL plane_angle_measure_with_unit; groove_depth : OPTIONAL positive_length_measure_with_unit; groove_radius : OPTIONAL positive_length_measure_with_unit; taper : weld_taper_type; taper_angle : OPTIONAL plane_angle_measure_with_unit; WHERE WRW12 : NOT ((taper = NON_TAPER) AND EXISTS(taper_angle)); END_ENTITY; (* new for LPM/6 - see Issues 87 and 88 *) ENTITY weld_mechanism_groove_butt SUBTYPE OF (weld_mechanism_groove); face_shape : weld_shape_butt; END_ENTITY; (* new for LPM/6 - see Issues 87 and 88 *) ENTITY weld_mechanism_prismatic SUBTYPE OF (weld_mechanism); cross_sections : LIST [2:?] OF section_profile; points_defining_weld_path : LIST [2:?] OF UNIQUE point_on_curve; section_orientations : LIST [2:?] OF orientation_select; joint_configuration : weld_configuration; DERIVE number_of_sections : INTEGER := SIZEOF(cross_sections); curve_defining_weld : curve := points_defining_weld_path[1]\point_on_curve.basis_curve; joints : SET [0:?] OF joint_system_welded := bag_to_set (USEDIN(SELF,'STRUCTURAL_FRAME_SCHEMA.JOINT_SYSTEM_WELDED.WELD_SPECIFICATION')); WHERE WRW3 : ( (SIZEOF (points_defining_weld_path) = number_of_sections) AND (SIZEOF (section_orientations) = number_of_sections) ); (* the number of cross sections, points and orientations used to define the weld shall all be equal *) WRW4 : SIZEOF(QUERY(temp <* points_defining_weld_path | (temp\point_on_curve.basis_curve) :<>: curve_defining_weld)) = 0; (* all the points used to define the weld path all lie on the same curve *) WRW5 : SIZEOF(QUERY(joint <* joints | ( NOT('STRUCTURAL_FRAME_SCHEMA.JOINT_SYSTEM_WELDED_LINEAR' IN TYPEOF(joint)))))=0; (* the joint systems in which this weld is used shall all be linear *) WRW6 : SIZEOF(QUERY(joint <* joints | (NOT(joint.weld_path :=: curve_defining_weld)))) = 0; (* the weld path declared for the joint system shall be instance equal to curve defining the weld path here *) END_ENTITY; (* new for LPM/6 - see Issue 87 *) ENTITY weld_mechanism_spot_seam SUBTYPE OF (weld_mechanism); joint_configuration : weld_configuration; WHERE WRW11 : (SELF\weld_mechanism.weld_mechanism_type = SPOT_WELD) OR (SELF\weld_mechanism.weld_mechanism_type = SEAM_WELD); END_ENTITY; ENTITY wire_shell SUBTYPE OF (topological_representation_item); wire_shell_extent : SET [1:?] OF loop; WHERE WRW1 : NOT mixed_loop_type_set(wire_shell_extent); END_ENTITY; (* STEP Part 42 (unchanged in 2nd edition) *) ENTITY zone ABSTRACT SUPERTYPE OF (ONEOF (zone_of_building, zone_of_project, zone_of_site, zone_of_structure) ANDOR zone_bounded); zone_name : label; zone_description : OPTIONAL text; END_ENTITY; ENTITY zone_bounded SUBTYPE OF (zone); bounding_gridlines : SET [2:4] OF gridline; bounding_levels : OPTIONAL SET [1:2] OF grid_level; DERIVE bounding_grid : grid := bounding_gridlines[1].parent_grid; WHERE WRZ1 : SIZEOF(QUERY(line <* bounding_gridlines | line.parent_grid :<>: (bounding_grid)) ) = 0; WRZ2 : NOT (EXISTS(bounding_levels) AND (SIZEOF(QUERY(level <* bounding_levels | level.parent_grid :<>: (bounding_grid)) ) <> 0)); END_ENTITY; ENTITY zone_of_building SUPERTYPE OF (zone_of_building_storey) SUBTYPE OF (zone); zone_for_building : building; END_ENTITY; ENTITY zone_of_building_storey SUBTYPE OF (zone_of_building); storey_height : positive_length_measure_with_unit; storey_level : OPTIONAL length_measure_with_unit; datum_name : OPTIONAL text; END_ENTITY; ENTITY zone_of_project SUBTYPE OF (zone); zone_for_project : project; END_ENTITY; ENTITY zone_of_site SUBTYPE OF (zone); zone_for_site : site; END_ENTITY; (* Extended for LPM/6 - see Issue 98 *) ENTITY zone_of_structure SUPERTYPE OF (ONEOF(zone_of_structure_sequence)) SUBTYPE OF (zone); zone_for_structure : structure; END_ENTITY; (* New for LPM/6 - see Issue 98 *) ENTITY zone_of_structure_sequence SUPERTYPE OF (ONEOF(zone_of_structure_sequence_lot)) SUBTYPE OF (zone_of_structure); parent_zone : zone_of_structure; DERIVE lots : SET[0:?] OF zone_of_structure_sequence_lot := bag_to_set (USEDIN(SELF, 'STRUCTURAL_FRAME_SCHEMA.' + 'ZONE_OF_STRUCTURE_SEQUENCE_LOT.' + 'PARENT_SEQUENCE')); assemblies : SET[1:?] OF located_assembly := bag_to_set (USEDIN(SELF, 'STRUCTURAL_FRAME_SCHEMA.LOCATED_ASSEMBLY.PARENT_STRUCTURE')); WHERE WRZ3 : parent_zone :<>: (SELF); (* A sequence cannot be its own parent *) WRZ4 : NOT ('STRUCTURAL_FRAME_SCHEMA.ZONE_OF_STRUCTURE_SEQUENCE_LOT' IN TYPEOF (parent_zone)); (* A sequence cannot have a lot as its parent *) END_ENTITY; (* New for LPM/6 - see Issue 98 *) ENTITY zone_of_structure_sequence_lot SUBTYPE OF (zone_of_structure_sequence); DERIVE parent_sequence : zone_of_structure := SELF\zone_of_structure_sequence.parent_zone; WHERE WRZ5 : 'STRUCTURAL_FRAME_SCHEMA.ZONE_OF_STRUCTURE_SEQUENCE' IN TYPEOF(parent_sequence); (* A lot must have a sequence as its parent *) WRZ6 : SIZEOF (SELF\zone_of_structure_sequence.lots) = 0; (* A lot cannot be sub-divided into other lots *) WRZ7 : (SELF\zone_of_structure_sequence.parent_zone) :<>: (SELF); (* A lot cannot be its own parent *) END_ENTITY; (* Rule Declaration *) RULE compatible_dimension FOR(cartesian_point, direction, representation_context, geometric_representation_context); WHERE WRRC1 : (* ensure that the count of coordinates of each cartesian_point matches the coordinate_space_dimension of each geometric_context in which it is geometrically_founded *) SIZEOF(QUERY(x <* cartesian_point| SIZEOF(QUERY (y <* geometric_representation_context | item_in_context(x,y) AND (HIINDEX(x.coordinates) <> y.coordinate_space_dimension))) > 0 )) =0; WRRC2 : (* ensure that the count of direction_ratios of each direction matches the coordinate_space_dimension of each geometric_context in which it is geometrically_founded *) SIZEOF(QUERY(x <* direction | SIZEOF( QUERY (y <* geometric_representation_context | item_in_context(x,y) AND (HIINDEX(x.direction_ratios) <> y.coordinate_space_dimension))) > 0 )) = 0; END_RULE; (* Function Declarations *) (* New for LPM/6 *) FUNCTION above_plane (p1, p2, p3, p4 : cartesian_point) : REAL; LOCAL dir2, dir3, dir4 : direction := dummy_gri || direction([1.0, 0.0, 0.0]); val, mag : REAL; END_LOCAL; IF (p1.dim <> 3) THEN RETURN(?); END_IF; REPEAT i := 1 TO 3; dir2.direction_ratios[i] := p2.coordinates[i] - p1.coordinates[i]; dir3.direction_ratios[i] := p3.coordinates[i] - p1.coordinates[i]; dir4.direction_ratios[i] := p4.coordinates[i] - p1.coordinates[i]; mag := dir4.direction_ratios[i]*dir4.direction_ratios[i]; END_REPEAT; mag := sqrt(mag); val := mag*dot_product(dir4, cross_product(dir2, dir3).orientation); RETURN(val); END_FUNCTION; (* STEP Part 42 (New for 2nd edition) *) FUNCTION acyclic_curve_replica (rep : curve_replica; parent : curve) : BOOLEAN; IF NOT (('STRUCTURAL_FRAME_SCHEMA.CURVE_REPLICA') IN TYPEOF(parent)) THEN RETURN (TRUE); END_IF; IF (parent :=: rep) THEN RETURN (FALSE); ELSE RETURN(acyclic_curve_replica(rep, parent\curve_replica.parent_curve)); END_IF; END_FUNCTION; (* STEP Part 42 (unchanged in 2nd edition) *) (* Modified for LPM/6 *) FUNCTION acyclic_document_relationship (relation : document_relationship; relatives : SET [1:?] OF document; specific_relation : STRING) : BOOLEAN; LOCAL x : SET OF document_relationship; END_LOCAL; IF relation.relating_document IN relatives THEN RETURN (FALSE); END_IF; x := QUERY (doc <* bag_to_set (USEDIN (relation.relating_document, 'STRUCTURAL_FRAME_SCHEMA.' + 'DOCUMENT_RELATIONSHIP.' + 'RELATED_DOCUMENT')) | specific_relation IN TYPEOF (doc)); REPEAT i := 1 TO HIINDEX(x); IF NOT acyclic_document_relationship (x[i], relatives + relation.relating_document, specific_relation) THEN RETURN(FALSE); END_IF; END_REPEAT; RETURN(TRUE); END_FUNCTION; (* STEP Part 41 2nd edition *) (* Modified for LPM/6 *) FUNCTION acyclic_group_relationship (relation : group_relationship; relatives : SET [1:?] OF group; specific_relation : STRING) : BOOLEAN; LOCAL x : SET OF group_relationship; END_LOCAL; IF relation.relating_group IN relatives THEN RETURN (FALSE); END_IF; x := QUERY (grp <* bag_to_set (USEDIN (relation.relating_group, 'STRUCTURAL_FRAME_SCHEMA.' + 'GROUP_RELATIONSHIP.' + 'RELATED_GROUP')) | specific_relation IN TYPEOF (grp)); REPEAT i := 1 TO HIINDEX(x); IF NOT acyclic_group_relationship (x[i], relatives + relation.relating_group, specific_relation) THEN RETURN(FALSE); END_IF; END_REPEAT; RETURN(TRUE); END_FUNCTION; (* STEP Part 41 2nd edition *) FUNCTION acyclic_mapped_representation (parent_set : SET OF representation; children_set : SET OF representation_item) : BOOLEAN; LOCAL x,y : SET OF representation_item; i : INTEGER; END_LOCAL; (* Determine the subset of children_set that are mapped_items. *) x := QUERY(z <* children_set | 'STRUCTURAL_FRAME_SCHEMA.MAPPED_ITEM' IN TYPEOF(z)); (* Determine that the subset has elements. *) IF SIZEOF(x) > 0 THEN (* Check each element of the set. *) REPEAT i := 1 TO HIINDEX(x); (* If the selected element maps a representation in the parent_set, then return false. *) IF x[i]\mapped_item.mapping_source.mapped_representation IN parent_set THEN RETURN (FALSE); END_IF; (* Recursive check of the items of mapped_rep. *) IF NOT acyclic_mapped_representation (parent_set + x[i]\mapped_item.mapping_source.mapped_representation, x[i]\mapped_item.mapping_source.mapped_representation.items) THEN RETURN (FALSE); END_IF; END_REPEAT; END_IF; (* Determine the subset of children_set that are not mapped_items. *) x := children_set - x; (* Determine that the subset has elements. *) IF SIZEOF(x) > 0 THEN (* For each element of the set: *) REPEAT i := 1 TO HIINDEX(x); (* Determine the set of representation_items referenced. *) y := QUERY(z <* bag_to_set( USEDIN(x[i], '')) | 'STRUCTURAL_FRAME_SCHEMA.REPRESENTATION_ITEM' IN TYPEOF(z)); (* Recursively check for an offending mapped_item. Return false for any errors encountered. *) IF NOT acyclic_mapped_representation(parent_set, y) THEN RETURN (FALSE); END_IF; END_REPEAT; END_IF; (* Return true when all elements are checked and no error conditions found. *) RETURN (TRUE); END_FUNCTION; (* STEP Part 43 (unchanged in 2nd edition) *) (* Modified for LPM/6 *) FUNCTION acyclic_organization_relationship (relation : organization_relationship; relatives : SET [1:?] OF organization; specific_relation : STRING) : BOOLEAN; LOCAL x : SET OF organization_relationship; END_LOCAL; IF relation.relating_organization IN relatives THEN RETURN (FALSE); END_IF; x := QUERY (org <* bag_to_set (USEDIN (relation.relating_organization, 'STRUCTURAL_FRAME_SCHEMA.' + 'ORGANIZATION_RELATIONSHIP.' + 'RELATED_ORGANIZATION')) | specific_relation IN TYPEOF (org)); REPEAT i := 1 TO HIINDEX(x); IF NOT acyclic_organization_relationship (x[i], relatives + relation.relating_organization, specific_relation) THEN RETURN(FALSE); END_IF; END_REPEAT; RETURN(TRUE); END_FUNCTION; (* STEP Part 41 (modified in 2nd edition) *) FUNCTION acyclic_point_replica (rep : point_replica; parent : point) : BOOLEAN; IF NOT (('STRUCTURAL_FRAME_SCHEMA.POINT_REPLICA') IN TYPEOF(parent)) THEN RETURN (TRUE); END_IF; IF (parent :=: rep) THEN RETURN (FALSE); ELSE RETURN(acyclic_point_replica(rep, parent\point_replica.parent_pt)); END_IF; END_FUNCTION; (* STEP Part 42 (unchanged in 2nd edition) *) FUNCTION acyclic_set_replica (rep : geometric_set_replica; parent : geometric_set) : BOOLEAN; IF NOT (('STRUCTURAL_FRAME_SCHEMA.GEOMETRIC_SET_REPLICA') IN TYPEOF(parent)) THEN RETURN (TRUE); END_IF; IF (parent :=: rep) THEN RETURN (FALSE); ELSE RETURN(acyclic_set_replica(rep, parent\geometric_set_replica.parent_set)); END_IF; END_FUNCTION; (* STEP Part 42 (unchanged in 2nd edition) *) FUNCTION acyclic_solid_replica (rep : solid_replica; parent : solid_model) : BOOLEAN; IF NOT (('STRUCTURAL_FRAME_SCHEMA.SOLID_REPLICA') IN TYPEOF(parent)) THEN RETURN (TRUE); END_IF; IF (parent :=: rep) THEN RETURN (FALSE); ELSE RETURN(acyclic_solid_replica(rep, parent\solid_replica.parent_solid)); END_IF; END_FUNCTION; (* STEP Part 42 (unchanged in 2nd edition) *) FUNCTION acyclic_surface_replica (rep : surface_replica; parent : surface) : BOOLEAN; IF NOT (('STRUCTURAL_FRAME_SCHEMA.SURFACE_REPLICA') IN TYPEOF(parent)) THEN RETURN (TRUE); END_IF; IF (parent :=: rep) THEN RETURN (FALSE); ELSE RETURN(acyclic_surface_replica(rep, parent\surface_replica.parent_surface)); END_IF; END_FUNCTION; (* STEP Part 42 (unchanged in 2nd edition) *) FUNCTION associated_surface (arg : pcurve_or_surface) : surface; LOCAL surf : surface; END_LOCAL; IF 'STRUCTURAL_FRAME_SCHEMA.PCURVE' IN TYPEOF(arg) THEN surf := arg.basis_surface; ELSE surf := arg; END_IF; RETURN(surf); END_FUNCTION; (* STEP Part 42 (unchanged in 2nd edition) *) (* Modified for LPM/6 *) FUNCTION bag_to_set (the_bag : BAG OF GENERIC : intype) : SET OF GENERIC : intype; LOCAL the_set: SET OF GENERIC : intype := []; END_LOCAL; IF SIZEOF (the_bag) > 0 THEN REPEAT i := 1 to HIINDEX (the_bag); the_set := the_set + the_bag [i]; END_REPEAT; END_IF; RETURN (the_set); END_FUNCTION; (* STEP Part 41 2nd edition *) (* Modified for LPM/6 *) FUNCTION base_axis (dim : INTEGER; axis1, axis2, axis3 : direction) : LIST [2:3] OF direction; LOCAL u : LIST [2:3] OF direction; factor : REAL; d1, d2 : direction; END_LOCAL; IF (dim = 3) THEN d1 := NVL(normalise(axis3), dummy_gri || direction([0.0,0.0,1.0])); d2 := first_proj_axis(d1,axis1); u := [d2, second_proj_axis(d1,d2,axis2), d1]; ELSE IF EXISTS(axis1) THEN d1 := normalise(axis1); u := [d1, orthogonal_complement(d1)]; IF EXISTS(axis2) THEN factor := dot_product(axis2,u[2]); IF (factor < 0.0) THEN u[2].direction_ratios[1] := -u[2].direction_ratios[1]; u[2].direction_ratios[2] := -u[2].direction_ratios[2]; END_IF; END_IF; ELSE IF EXISTS(axis2) THEN d1 := normalise(axis2); u := [orthogonal_complement(d1), d1]; u[1].direction_ratios[1] := -u[1].direction_ratios[1]; u[1].direction_ratios[2] := -u[1].direction_ratios[2]; ELSE u := [dummy_gri || direction([1.0, 0.0]), dummy_gri || direction([0.0, 1.0])]; END_IF; END_IF; END_IF; RETURN(u); END_FUNCTION; (* STEP Part 42 (modified in 2nd edition) *) (* Modified for LPM/6 *) FUNCTION boolean_choose (b : boolean; choice1, choice2 : generic : item) : generic : item; IF b THEN RETURN (choice1); ELSE RETURN (choice2); END_IF; END_FUNCTION; (* STEP Part 42 (modified for 2nd edition) *) (* Modified for LPM/6 *) FUNCTION build_2axes (ref_direction : direction) : LIST [2:2] OF direction; LOCAL d : direction := NVL(normalise(ref_direction), dummy_gri || direction([1.0,0.0])); END_LOCAL; RETURN([d, orthogonal_complement(d)]); END_FUNCTION; (* STEP part 42 (modified in 2nd edition) *) (* Modified for LPM/6 *) FUNCTION build_axes (axis, ref_direction : direction) : LIST [3:3] OF direction; LOCAL d1, d2 : direction; END_LOCAL; d1 := NVL(normalise(axis), dummy_gri || direction([0.0,0.0,1.0])); d2 := first_proj_axis(d1, ref_direction); RETURN([d2, normalise(cross_product(d1,d2)).orientation, d1]); END_FUNCTION; (* STEP Part 42 (modified in 2nd edition) *) (* Modified for LPM/6 *) FUNCTION build_transformed_set (tr: cartesian_transformation_operator; gset : geometric_set) : SET [0:?] OF geometric_set_select; LOCAL s : SET [1:?] OF geometric_set_select := gset.elements; trset : SET [0:?] OF geometric_set_select := []; END_LOCAL; REPEAT j := 1 TO SIZEOF(s); IF ('STRUCTURAL_FRAME_SCHEMA.CURVE' IN TYPEOF(s[j])) THEN trset := trset + dummy_gri || curve() ||curve_replica(s[j],tr); ELSE IF ('STRUCTURAL_FRAME_SCHEMA.POINT' IN TYPEOF(s[j])) THEN trset := trset + dummy_gri || point() || point_replica(s[j],tr); ELSE IF ('STRUCTURAL_FRAME_SCHEMA.SURFACE' IN TYPEOF(s[j])) THEN trset := trset + dummy_gri || surface() || surface_replica(s[j], tr || cartesian_transformation_operator_3d (?)); END_IF; END_IF; END_IF; END_REPEAT; RETURN(trset); END_FUNCTION; (* STEP Part 42 (modified in 2nd edition) *) (* New for LPM/6 *) FUNCTION closed_shell_reversed (a_shell : closed_shell) : oriented_closed_shell; LOCAL the_reverse : oriented_closed_shell; END_LOCAL; IF ('STRUCTURAL_FRAME_SCHEMA.ORIENTED_CLOSED_SHELL' IN TYPEOF (a_shell) ) THEN the_reverse := dummy_tri || connected_face_set ( a_shell\connected_face_set.cfs_faces) || closed_shell () || oriented_closed_shell( a_shell\oriented_closed_shell.closed_shell_element, NOT(a_shell\oriented_closed_shell.orientation)); ELSE the_reverse := dummy_tri || connected_face_set ( a_shell\connected_face_set.cfs_faces) || closed_shell () || oriented_closed_shell (a_shell, FALSE); END_IF; RETURN (the_reverse); END_FUNCTION; (* STEP Part 42 (new in 2nd edition) *) FUNCTION conditional_reverse (p : BOOLEAN; an_item : reversible_topology) : reversible_topology; IF p THEN RETURN (an_item); ELSE RETURN (topology_reversed (an_item)); END_IF; END_FUNCTION; (* STEP Part 42 (unchanged in 2nd edition) *) FUNCTION constraints_composite_curve_on_surface (c: composite_curve_on_surface) : BOOLEAN; LOCAL n_segments : INTEGER := SIZEOF(c.segments); END_LOCAL; REPEAT k := 1 TO n_segments; IF (NOT('STRUCTURAL_FRAME_SCHEMA.PCURVE' IN TYPEOF(c\composite_curve.segments[k].parent_curve))) AND (NOT('STRUCTURAL_FRAME_SCHEMA.SURFACE_CURVE' IN TYPEOF(c\composite_curve.segments[k].parent_curve))) AND (NOT('STRUCTURAL_FRAME_SCHEMA.COMPOSITE_CURVE_ON_SURFACE' IN TYPEOF(c\composite_curve.segments[k].parent_curve))) THEN RETURN (FALSE); END_IF; END_REPEAT; RETURN(TRUE); END_FUNCTION; (* STEP Part 42 (unchanged in 2nd edition) *) FUNCTION constraints_geometry_shell_based_surface_model (m: shell_based_surface_model): BOOLEAN; LOCAL result : BOOLEAN := TRUE; END_LOCAL; REPEAT j := 1 TO SIZEOF(m.sbsm_boundary); IF (NOT ('STRUCTURAL_FRAME_SCHEMA.OPEN_SHELL' IN TYPEOF(m.sbsm_boundary[j])) AND (NOT ('STRUCTURAL_FRAME_SCHEMA.CLOSED_SHELL' IN TYPEOF(m.sbsm_boundary[j])))) THEN result := FALSE; RETURN(result); (* A surface model is composed of OPEN_ and CLOSED_SHELLs. *) END_IF; END_REPEAT; RETURN(result); END_FUNCTION; (* STEP Part 42 (unchanged in 2nd edition) *) FUNCTION constraints_geometry_shell_based_wireframe_model (m : shell_based_wireframe_model) : BOOLEAN; LOCAL result : BOOLEAN := TRUE; END_LOCAL; REPEAT j := 1 TO SIZEOF(m.sbwm_boundary); IF (NOT ('STRUCTURAL_FRAME_SCHEMA.WIRE_SHELL' IN TYPEOF(m.sbwm_boundary[j])) AND (NOT ('STRUCTURAL_FRAME_SCHEMA.VERTEX_SHELL' IN TYPEOF(m.sbwm_boundary[j])))) THEN result := FALSE; RETURN(result); (* A wireframe model is composed of WIRE_ and VERTEX_SHELLs *) END_IF; END_REPEAT; RETURN(result); END_FUNCTION; (* STEP Part 42 (unchanged in 2nd edition) *) FUNCTION constraints_param_b_spline (degree, up_knots, up_cp : INTEGER; knot_mult : LIST OF INTEGER; knots : LIST OF parameter_value) : BOOLEAN; LOCAL result : BOOLEAN := TRUE; k,l,sum : INTEGER; END_LOCAL; sum := knot_mult[1]; REPEAT i := 2 TO up_knots; sum := sum + knot_mult[i]; END_REPEAT; IF (degree < 1) OR (up_knots < 2) OR (up_cp < degree) OR (sum <> (degree + up_cp + 2)) THEN result := FALSE; RETURN(result); END_IF; k := knot_mult[1]; IF (k < 1) OR (k > degree + 1) THEN result := FALSE; RETURN(result); END_IF; REPEAT i := 2 TO up_knots; IF (knot_mult[i] < 1) OR (knots[i] <= knots[i-1]) THEN result := FALSE; RETURN(result); END_IF; k := knot_mult[i]; IF (i < up_knots) AND (k > degree) THEN result := FALSE; RETURN(result); END_IF; IF (i = up_knots) AND (k > degree + 1) THEN result := FALSE; RETURN(result); END_IF; END_REPEAT; RETURN(result); END_FUNCTION; (* STEP Part 42 (unchanged in 2nd edition) *) FUNCTION constraints_rectangular_composite_surface (s : rectangular_composite_surface) : BOOLEAN; REPEAT i := 1 TO s.n_u; REPEAT j := 1 TO s.n_v; IF NOT (('STRUCTURAL_FRAME_SCHEMA.B_SPLINE_SURFACE' IN TYPEOF (s.segments[i][j].parent_surface)) OR ('STRUCTURAL_FRAME_SCHEMA.RECTANGULAR_TRIMMED_SURFACE' IN TYPEOF (s.segments[i][j].parent_surface))) THEN RETURN(FALSE); END_IF; END_REPEAT; END_REPEAT; REPEAT i := 1 TO s.n_u-1; REPEAT j := 1 TO s.n_v; IF s.segments[i][j].u_transition = discontinuous THEN RETURN(FALSE); END_IF; END_REPEAT; END_REPEAT; REPEAT i := 1 TO s.n_u; REPEAT j := 1 TO s.n_v-1; IF s.segments[i][j].v_transition = discontinuous THEN RETURN(FALSE); END_IF; END_REPEAT; END_REPEAT; RETURN(TRUE); END_FUNCTION; (* STEP Part 42 (unchanged in 2nd edition) *) (* Modified for LPM/6 *) FUNCTION cross_product (arg1, arg2 : direction) : vector; LOCAL mag : REAL; res : direction; v1,v2 : LIST[3:3] OF REAL; result : vector; END_LOCAL; IF ( NOT EXISTS (arg1) OR (arg1.dim = 2)) OR ( NOT EXISTS (arg2) OR (arg2.dim = 2)) THEN RETURN(?); ELSE BEGIN v1 := normalise(arg1).direction_ratios; v2 := normalise(arg2).direction_ratios; res := dummy_gri || direction([(v1[2]*v2[3] - v1[3]*v2[2]), (v1[3]*v2[1] - v1[1]*v2[3]), (v1[1]*v2[2] - v1[2]*v2[1])]); mag := 0.0; REPEAT i := 1 TO 3; mag := mag + res.direction_ratios[i]*res.direction_ratios[i]; END_REPEAT; IF (mag > 0.0) THEN result := dummy_gri || vector(res, SQRT(mag)); ELSE result := dummy_gri || vector(arg1, 0.0); END_IF; RETURN(result); END; END_IF; END_FUNCTION; (* STEP Part 42 (modified in 2nd edition) *) FUNCTION curve_weights_positive (b: rational_b_spline_curve) : BOOLEAN; LOCAL result : BOOLEAN := TRUE; END_LOCAL; REPEAT i := 0 TO b.upper_index_on_control_points; IF b.weights[i] <= 0.0 THEN result := FALSE; RETURN(result); END_IF; END_REPEAT; RETURN(result); END_FUNCTION; (* STEP Part 42 (unchanged in 2nd edition) *) FUNCTION derive_dimensional_exponents (x : unit) : dimensional_exponents; LOCAL i : INTEGER; result : dimensional_exponents := dimensional_exponents(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); END_LOCAL; IF 'STRUCTURAL_FRAME_SCHEMA.DERIVED_UNIT' IN TYPEOF(x) THEN (* x is a derived unit *) REPEAT i := LOINDEX(x.elements) TO HIINDEX(x.elements); result.length_exponent := result.length_exponent + (x.elements[i].exponent * x.elements[i].unit.dimensions.length_exponent); result.mass_exponent := result.mass_exponent + (x.elements[i].exponent * x.elements[i].unit.dimensions.mass_exponent); result.time_exponent := result.time_exponent + (x.elements[i].exponent * x.elements[i].unit.dimensions.time_exponent); result.electric_current_exponent := result.electric_current_exponent + (x.elements[i].exponent * x.elements[i].unit.dimensions.electric_current_exponent); result.thermodynamic_temperature_exponent := result.thermodynamic_temperature_exponent + (x.elements[i].exponent * x.elements[i].unit.dimensions.thermodynamic_temperature_exponent); result.amount_of_substance_exponent := result.amount_of_substance_exponent + (x.elements[i].exponent * x.elements[i].unit.dimensions.amount_of_substance_exponent); result.luminous_intensity_exponent := result.luminous_intensity_exponent + (x.elements[i].exponent * x.elements[i].unit.dimensions.luminous_intensity_exponent); END_REPEAT; ELSE (* x is a unitless or a named unit *) result := x.dimensions; END_IF; RETURN (result); END_FUNCTION; (* based on STEP Part 41 2nd edition *) (* Modified for LPM/6 *) FUNCTION dimension_of (item : geometric_representation_item) : dimension_count; LOCAL x : SET OF representation; y : representation_context; dim : dimension_count; END_LOCAL; (* For cartesian_point, direction, or vector dimension is determined by counting components. *) IF 'STRUCTURAL_FRAME_SCHEMA.CARTESIAN_POINT' IN TYPEOF(item) THEN dim := SIZEOF(item\cartesian_point.coordinates); RETURN(dim); END_IF; IF 'STRUCTURAL_FRAME_SCHEMA.DIRECTION' IN TYPEOF(item) THEN dim := SIZEOF(item\direction.direction_ratios); RETURN(dim); END_IF; IF 'STRUCTURAL_FRAME_SCHEMA.VECTOR' IN TYPEOF(item) THEN dim := SIZEOF(item\vector.orientation\direction.direction_ratios); RETURN(dim); END_IF; (* For all other types of geometric_representation_item dim is obtained via context. Find the set of representation in which the item is used. *) x := using_representations(item); (* Determines the dimension_count of the geometric_representation_context. Note that the RULE compatible_dimension ensures that the context_of_items is of type geometric_representation_context and has the same dimension_count for all values of x. The SET x is non-empty since this is required by WR1 of representation_item. *) y := x[1].context_of_items; dim := y\geometric_representation_context.coordinate_space_dimension; RETURN (dim); END_FUNCTION; (* STEP Part 42 (modified in 2nd edition) *) FUNCTION dimensions_for_si_unit (n : si_unit_name) : dimensional_exponents; CASE n OF metre : RETURN (dimensional_exponents (1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); gram : RETURN (dimensional_exponents (0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0)); second : RETURN (dimensional_exponents (0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0)); ampere : RETURN (dimensional_exponents (0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0)); kelvin : RETURN (dimensional_exponents (0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0)); mole : RETURN (dimensional_exponents (0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0)); candela : RETURN (dimensional_exponents (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0)); radian : RETURN (dimensional_exponents (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); steradian : RETURN (dimensional_exponents (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); hertz : RETURN (dimensional_exponents (0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0)); newton : RETURN (dimensional_exponents (1.0, 1.0, -2.0, 0.0, 0.0, 0.0, 0.0)); pascal : RETURN (dimensional_exponents (-1.0, 1.0, -2.0, 0.0, 0.0, 0.0, 0.0)); joule : RETURN (dimensional_exponents (2.0, 1.0, -2.0, 0.0, 0.0, 0.0, 0.0)); watt : RETURN (dimensional_exponents (2.0, 1.0, -3.0, 0.0, 0.0, 0.0, 0.0)); coulomb : RETURN (dimensional_exponents (0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0)); volt : RETURN (dimensional_exponents (2.0, 1.0, -3.0, -1.0, 0.0, 0.0, 0.0)); farad : RETURN (dimensional_exponents (-2.0, -1.0, 4.0, 1.0, 0.0, 0.0, 0.0)); ohm : RETURN (dimensional_exponents (2.0, 1.0, -3.0, -2.0, 0.0, 0.0, 0.0)); siemens : RETURN (dimensional_exponents (-2.0, -1.0, 3.0, 2.0, 0.0, 0.0, 0.0)); weber : RETURN (dimensional_exponents (2.0, 1.0, -2.0, -1.0, 0.0, 0.0, 0.0)); tesla : RETURN (dimensional_exponents (0.0, 1.0, -2.0, -1.0, 0.0, 0.0, 0.0)); henry : RETURN (dimensional_exponents (2.0, 1.0, -2.0, -2.0, 0.0, 0.0, 0.0)); degree_Celsius : RETURN (dimensional_exponents (0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0)); lumen : RETURN (dimensional_exponents (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0)); lux : RETURN (dimensional_exponents (-2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0)); becquerel : RETURN (dimensional_exponents (0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0)); gray : RETURN (dimensional_exponents (2.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0)); sievert : RETURN (dimensional_exponents (2.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0)); OTHERWISE : RETURN(?); END_CASE; END_FUNCTION; (* STEP Part 41 (unchanged in 2nd edition) *) FUNCTION dot_product (arg1, arg2 : direction) : REAL; LOCAL scalar : REAL; vec1, vec2: direction; ndim : INTEGER; END_LOCAL; IF NOT EXISTS (arg1) OR NOT EXISTS (arg2) THEN scalar := ?; ELSE IF (arg1.dim <> arg2.dim) THEN scalar := ?; ELSE BEGIN vec1 := normalise(arg1); vec2 := normalise(arg2); ndim := arg1.dim; scalar := 0.0; REPEAT i := 1 TO ndim; scalar := scalar + vec1.direction_ratios[i]*vec2.direction_ratios[i]; END_REPEAT; END; END_IF; END_IF; RETURN (scalar); END_FUNCTION; (* STEP Part 42 (unchanged in 2nd edition) *) (* Modified for LPM/6 *) FUNCTION edge_reversed (an_edge : edge) : oriented_edge; LOCAL the_reverse : oriented_edge; END_LOCAL; IF ('STRUCTURAL_FRAME_SCHEMA.ORIENTED_EDGE' IN TYPEOF (an_edge) ) THEN the_reverse := dummy_tri || edge(an_edge.edge_end, an_edge.edge_start) || oriented_edge(an_edge\oriented_edge.edge_element, NOT (an_edge\oriented_edge.orientation)) ; ELSE the_reverse := dummy_tri || edge(an_edge.edge_end, an_edge.edge_start) || oriented_edge(an_edge, FALSE); END_IF; RETURN (the_reverse); END_FUNCTION; (* STEP Part 42 (modified in 2nd edition) *) (* Modified for LPM/6 *) FUNCTION face_bound_reversed (a_face_bound : face_bound) : face_bound; LOCAL the_reverse : face_bound ; END_LOCAL; IF ('STRUCTURAL_FRAME_SCHEMA.FACE_OUTER_BOUND' IN TYPEOF (a_face_bound) ) THEN the_reverse := dummy_tri || face_bound(a_face_bound\face_bound.bound, NOT (a_face_bound\face_bound.orientation)) || face_outer_bound() ; ELSE the_reverse := dummy_tri || face_bound(a_face_bound.bound, NOT(a_face_bound.orientation)); END_IF; RETURN (the_reverse); END_FUNCTION; (* STEP PART 42 (modified in 2nd edition) *) (* Modified for LPM/6 *) FUNCTION face_reversed (a_face : face) : oriented_face; LOCAL the_reverse : oriented_face ; END_LOCAL; IF ('STRUCTURAL_FRAME_SCHEMA.ORIENTED_FACE' IN TYPEOF (a_face) ) THEN the_reverse := dummy_tri || face(set_of_topology_reversed(a_face.bounds)) || oriented_face(a_face\oriented_face.face_element, NOT (a_face\oriented_face.orientation)) ; ELSE the_reverse := dummy_tri || face(set_of_topology_reversed(a_face.bounds)) || oriented_face(a_face, FALSE) ; END_IF; RETURN (the_reverse); END_FUNCTION; (* STEP Part 42 (modified in 2nd edition) *) (* Modified for LPM/6 *) FUNCTION first_proj_axis (z_axis, arg : direction) : direction; LOCAL x_axis : direction; v : direction; z : direction; x_vec : vector; END_LOCAL; IF (NOT EXISTS(z_axis)) THEN RETURN (?) ; ELSE z := normalise(z_axis); IF NOT EXISTS(arg) THEN IF ((z.direction_ratios <> [1.0,0.0,0.0]) AND (z.direction_ratios <> [-1.0,0.0,0.0])) THEN v := dummy_gri || direction([1.0,0.0,0.0]); ELSE v := dummy_gri || direction([0.0,1.0,0.0]); END_IF; ELSE IF (arg.dim <> 3) THEN RETURN (?) ; END_IF; IF ((cross_product(arg,z).magnitude) = 0.0) THEN RETURN (?); ELSE v := normalise(arg); END_IF; END_IF; x_vec := scalar_times_vector(dot_product(v, z), z); x_axis := vector_difference(v, x_vec).orientation; x_axis := normalise(x_axis); END_IF; RETURN(x_axis); END_FUNCTION; (* STEP Part 42 (modified in 2nd edition) *) FUNCTION get_basis_surface (c : curve_on_surface) : SET[0:2] OF surface; LOCAL surfs : SET[0:2] OF surface; n : INTEGER; END_LOCAL; surfs := []; IF 'STRUCTURAL_FRAME_SCHEMA.PCURVE' IN TYPEOF (c) THEN surfs := [c\pcurve.basis_surface]; ELSE IF 'STRUCTURAL_FRAME_SCHEMA.SURFACE_CURVE' IN TYPEOF (c) THEN n := SIZEOF(c\surface_curve.associated_geometry); REPEAT i := 1 TO n; surfs := surfs + associated_surface(c\surface_curve.associated_geometry[i]); END_REPEAT; END_IF; END_IF; IF 'STRUCTURAL_FRAME_SCHEMA.COMPOSITE_CURVE_ON_SURFACE' IN TYPEOF (c) THEN n := SIZEOF(c\composite_curve.segments); surfs := get_basis_surface(c\composite_curve.segments[1].parent_curve); IF n > 1 THEN REPEAT i := 2 TO n; surfs := surfs * get_basis_surface(c\composite_curve.segments[i].parent_curve); END_REPEAT; END_IF; END_IF; RETURN(surfs); END_FUNCTION; (* STEP Part 42 (unchanged in 2nd edition) *) (* New for LPM/6 *) FUNCTION get_description_value (obj : description_attribute_select) : text; LOCAL description_bag : BAG OF description_attribute := (USEDIN (obj, 'STRUCTURAL_FRAME_SCHEMA.' + 'DESCRIPTION_ATTRIBUTE.' + 'DESCRIBED_ITEM')); END_LOCAL; IF SIZEOF (description_bag) = 1 THEN RETURN (description_bag[1].attribute_value); ELSE RETURN (?); END_IF; END_FUNCTION; (* STEP Part 41 2nd edition *) (* New for LPM/6 *) FUNCTION get_id_value (obj : id_attribute_select) : identifier; LOCAL id_bag : BAG OF id_attribute := (USEDIN (obj, 'STRUCTURAL_FRAME_SCHEMA.' + 'ID_ATTRIBUTE.' + 'IDENTIFIED_ITEM')); END_LOCAL; IF SIZEOF (id_bag) = 1 THEN RETURN (id_bag[1].attribute_value); ELSE RETURN (?); END_IF; END_FUNCTION; (* STEP Part 41 2nd edition *) (* New for LPM/6 *) FUNCTION get_instance_id (obj : select_data_item) : globally_unique_id; LOCAL id_bag : BAG OF managed_data_item := (USEDIN (obj, 'STRUCTURAL_FRAME_SCHEMA.' + 'MANAGED_DATA_ITEM.' + 'DATA_ITEM')); n : INTEGER; END_LOCAL; n := SIZEOF(id_bag); CASE n OF 0 : RETURN ('UNMANAGED'); 1 : RETURN (id_bag[1].instance_id); OTHERWISE : RETURN (?); END_CASE; END_FUNCTION; (* created for LPM/6 based in STEP Part 41 function get_name_value *) (* New for LPM/6 *) FUNCTION get_item_cost_code (item : structural_frame_item) : BAG OF label; LOCAL i : INTEGER; cost_codes : BAG OF label := []; item_assignment : BAG OF item_cost_code_assigned := (USEDIN (item, 'STRUCTURAL_FRAME_SCHEMA.' + 'ITEM_COST_CODE_ASSIGNED.' + 'COSTED_ITEM')); END_LOCAL; IF SIZEOF (item_assignment) > 0 THEN REPEAT i := 1 to HIINDEX (item_assignment); cost_codes := cost_codes + item_assignment[i].code\item_cost_code.cost_code; END_REPEAT; END_IF; RETURN (cost_codes); END_FUNCTION; (* new for LPM/6 *) (* New for LPM/6 *) FUNCTION get_item_ref (item : structural_frame_item) : BAG OF identifier; LOCAL i : INTEGER; refs : BAG OF identifier := []; item_assignment : BAG OF item_reference_assigned := (USEDIN (item, 'STRUCTURAL_FRAME_SCHEMA.' + 'ITEM_REFERENCE_ASSIGNED.' + 'ASSIGNED_TO_ITEM')); END_LOCAL; IF SIZEOF (item_assignment) > 0 THEN REPEAT i := 1 to HIINDEX (item_assignment); refs := refs + item_assignment[i].assigned_reference\item_reference.ref; END_REPEAT; END_IF; RETURN (refs); END_FUNCTION; (* new for LPM/6 *) (* New for LPM/6 *) FUNCTION get_name_value (obj : name_attribute_select) : label; LOCAL name_bag : BAG OF name_attribute := (USEDIN (obj, 'STRUCTURAL_FRAME_SCHEMA.' + 'NAME_ATTRIBUTE.' + 'NAMED_ITEM')); END_LOCAL; IF SIZEOF (name_bag) = 1 THEN RETURN (name_bag[1].attribute_value); ELSE RETURN (?); END_IF; END_FUNCTION; (* STEP Part 41 2nd edition *) (* New for LPM/6 *) FUNCTION get_role (obj : role_select) : object_role; LOCAL role_bag : BAG OF role_association:= (USEDIN (obj, 'STRUCTURAL_FRAME_SCHEMA.' + 'ROLE_ASSOCIATION.' + 'ITEM_WITH_ROLE')); END_LOCAL; IF SIZEOF (role_bag) = 1 THEN RETURN (role_bag[1].role); ELSE RETURN (?); END_IF; END_FUNCTION; (* STEP Part 41 2nd edition *) FUNCTION item_in_context (item : representation_item; cntxt : representation_context) : BOOLEAN; LOCAL i : INTEGER; y : BAG OF representation_item; END_LOCAL; (* If there is one or more representation using both the item and cntxt return true. *) IF SIZEOF(USEDIN(item,'STRUCTURAL_FRAME_SCHEMA.REPRESENTATION.ITEMS') * cntxt.representations_in_context) > 0 THEN RETURN (TRUE); (* Determine the bag of representation_items that reference item. *) ELSE y := QUERY(z <* USEDIN (item , '') | 'STRUCTURAL_FRAME_SCHEMA.REPRESENTATION_ITEM' IN TYPEOF(z)); (* Ensure that the bag is not empty. *) IF SIZEOF(y) > 0 THEN (* For each element in the bag *) REPEAT i := 1 TO HIINDEX(y); (* Check to see it is an item in the input cntxt. *) IF item_in_context(y[i], cntxt) THEN RETURN (TRUE); END_IF; END_REPEAT; END_IF; END_IF; (* Return false when all possible branches have been checked with no success. *) RETURN (FALSE); END_FUNCTION; (* STEP Part 43 (unchanged in 2nd edition) *) FUNCTION leap_year (year : year_number) : BOOLEAN; IF ((((year MOD 4) = 0) AND ((year MOD 100) <> 0)) OR ((year MOD 400) = 0)) THEN RETURN(TRUE); ELSE RETURN(FALSE); END_IF; END_FUNCTION; (* STEP Part 41 unchanged in 2nd edition *) FUNCTION list_face_loops (f: face) : LIST[0:?] OF loop; LOCAL loops : LIST[0:?] OF loop := []; END_LOCAL; REPEAT i := 1 TO SIZEOF(f.bounds); loops := loops +(f.bounds[i].bound); END_REPEAT; RETURN(loops); END_FUNCTION; (* STEP Part 42 (unchanged in 2nd edition) *) FUNCTION list_loop_edges (l: loop): LIST[0:?] OF edge; LOCAL edges : LIST[0:?] OF edge := []; END_LOCAL; IF 'STRUCTURAL_FRAME_SCHEMA.EDGE_LOOP' IN TYPEOF(l) THEN REPEAT i := 1 TO SIZEOF(l\path.edge_list); edges := edges + (l\path.edge_list[i].edge_element); END_REPEAT; END_IF; RETURN(edges); END_FUNCTION; (* STEP Part 42 (unchanged in 2nd edition) *) FUNCTION list_of_topology_reversed (a_list : list_of_reversible_topology_item) : list_of_reversible_topology_item; LOCAL the_reverse : list_of_reversible_topology_item; END_LOCAL; the_reverse := []; REPEAT i := 1 TO SIZEOF (a_list); the_reverse := topology_reversed (a_list [i]) + the_reverse; END_REPEAT; RETURN (the_reverse); END_FUNCTION; (* STEP Part 42 (unchanged in 2nd edition) *) FUNCTION list_to_array (lis : LIST [0:?] OF GENERIC : T; low,u : INTEGER) : ARRAY[low:u] OF GENERIC : T; LOCAL n : INTEGER; res : ARRAY [low:u] OF GENERIC : T; END_LOCAL; n := SIZEOF(lis); IF (n <> (u-low +1)) THEN RETURN(?); ELSE REPEAT i := 1 TO n; res[low+i-1] := lis[i]; END_REPEAT; RETURN(res); END_IF; END_FUNCTION; (* STEP Part 42 (unchanged in 2nd edition) *) FUNCTION list_to_set (l : LIST [0:?] OF GENERIC:T) : SET OF GENERIC:T; LOCAL s : SET OF GENERIC:T := []; END_LOCAL; REPEAT i := 1 TO SIZEOF(l); s := s + l[i]; END_REPEAT; RETURN(s); END_FUNCTION; (* STEP Part 42 (unchanged in 2nd edition) *) (* Modified for LPM/6 *) FUNCTION make_array_of_array (lis : LIST[1:?] OF LIST [1:?] OF GENERIC : T; low1, u1, low2, u2 : INTEGER): ARRAY OF ARRAY OF GENERIC : T; LOCAL res : ARRAY[low1:u1] OF ARRAY [low2:u2] OF GENERIC : T; END_LOCAL; (* Check input dimensions for consistency *) IF (u1-low1+1) <> SIZEOF(lis) THEN RETURN (?); END_IF; IF (u2 - low2 + 1 ) <> SIZEOF(lis[1]) THEN RETURN (?) ; END_IF; (* Initialise res with values from lis[1] *) res := [list_to_array(lis[1], low2, u2) : (u1-low1 + 1)]; REPEAT i := 2 TO HIINDEX(lis); IF (u2-low2+1) <> SIZEOF(lis[i]) THEN RETURN (?); END_IF; res[low1+i-1] := list_to_array(lis[i], low2, u2); END_REPEAT; RETURN (res); END_FUNCTION; (* STEP Part 42 (modified in 2nd edition) *) (* New for LPM/6 *) FUNCTION make_array_of_array_of_array (lis : LIST[1:?] OF LIST [1:?] OF LIST [1:?] OF GENERIC : T; low1, u1, low2, u2, low3, u3 : INTEGER): ARRAY OF ARRAY OF ARRAY OF GENERIC : T; LOCAL res : ARRAY[low1:u1] OF ARRAY [low2:u2] OF ARRAY[low3:u3] OF GENERIC : T; END_LOCAL; (* Check input dimensions for consistency *) IF (u1-low1+1) <> SIZEOF(lis) THEN RETURN (?); END_IF; IF (u2-low2+1) <> SIZEOF(lis[1]) THEN RETURN (?); END_IF; (* Initialise res with values from lis[1] *) res := [make_array_of_array(lis[1], low2, u2, low3, u3) : (u1-low1 + 1)]; REPEAT i := 2 TO HIINDEX(lis); IF (u2-low2+1) <> SIZEOF(lis[i]) THEN RETURN (?); END_IF; res[low1+i-1] := make_array_of_array(lis[i], low2, u2, low3, u3); END_REPEAT; RETURN (res); END_FUNCTION; (* STEP Part 42 (new for 2nd edition) *) (* Modified for LPM/6 *) FUNCTION mixed_loop_type_set (l: SET[0:?] OF loop): LOGICAL; LOCAL poly_loop_type: LOGICAL; END_LOCAL; IF(SIZEOF(l) <= 1) THEN RETURN(FALSE); END_IF; poly_loop_type := ('STRUCTURAL_FRAME_SCHEMA.POLY_LOOP' IN TYPEOF(l[1])); REPEAT i := 2 TO SIZEOF(l); IF(('STRUCTURAL_FRAME_SCHEMA.POLY_LOOP' IN TYPEOF(l[i])) <> poly_loop_type) THEN RETURN(TRUE); END_IF; END_REPEAT; RETURN(FALSE); END_FUNCTION; (* STEP Part 42 (modified for 2nd edition) *) (* Modified for LPM/6 *) FUNCTION normalise (arg : vector_or_direction) : vector_or_direction; LOCAL ndim : INTEGER; v : direction; result : vector_or_direction; vec : vector; mag : REAL; END_LOCAL; IF NOT EXISTS (arg) THEN result := ?; (* When function is called with invalid data a NULL result is returned *) ELSE ndim := arg.dim; IF 'STRUCTURAL_FRAME_SCHEMA.VECTOR' IN TYPEOF(arg) THEN BEGIN v := dummy_gri || direction(arg.orientation.direction_ratios); IF arg.magnitude = 0.0 THEN RETURN(?); ELSE vec := dummy_gri || vector (v, 1.0); END_IF; END; ELSE v := dummy_gri || direction (arg.direction_ratios); END_IF; mag := 0.0; REPEAT i := 1 TO ndim; mag := mag + v.direction_ratios[i]*v.direction_ratios[i]; END_REPEAT; IF mag > 0.0 THEN mag := SQRT(mag); REPEAT i := 1 TO ndim; v.direction_ratios[i] := v.direction_ratios[i]/mag; END_REPEAT; IF 'STRUCTURAL_FRAME_SCHEMA.VECTOR' IN TYPEOF(arg) THEN vec.orientation := v; result := vec; ELSE result := v; END_IF; ELSE RETURN(?); END_IF; END_IF; RETURN (result); END_FUNCTION; (* STEP Part 42 (modified in 2nd edition) *) (* New for LPM/6 *) FUNCTION open_shell_reversed ( a_shell : open_shell) : oriented_open_shell; LOCAL the_reverse : oriented_open_shell; END_LOCAL; IF ('STRUCTURAL_FRAME_SCHEMA.ORIENTED_OPEN_SHELL' IN TYPEOF (a_shell) ) THEN the_reverse := dummy_tri || connected_face_set ( a_shell\connected_face_set.cfs_faces) || open_shell () || oriented_open_shell( a_shell\oriented_open_shell.open_shell_element, (NOT (a_shell\oriented_open_shell.orientation))); ELSE the_reverse := dummy_tri || connected_face_set ( a_shell\connected_face_set.cfs_faces) || open_shell () || oriented_open_shell (a_shell, FALSE); END_IF; RETURN (the_reverse); END_FUNCTION; (* STEP Part 42 (new for 2nd edition) *) (* Modified for LPM/6 *) FUNCTION orthogonal_complement (vec : direction) : direction; LOCAL result : direction ; END_LOCAL; IF (vec.dim <> 2) OR NOT EXISTS (vec) THEN RETURN(?); ELSE result := dummy_gri || direction([-vec.direction_ratios[2], vec.direction_ratios[1]]); RETURN(result); END_IF; END_FUNCTION; (* STEP Part 42 (modified in 2nd edition) *) FUNCTION path_head_to_tail (a_path : path) : LOGICAL; LOCAL n : INTEGER; p : LOGICAL := TRUE; END_LOCAL; n := SIZEOF (a_path.edge_list); REPEAT i := 2 TO n; p := p AND (a_path.edge_list[i-1].edge_end :=: a_path.edge_list[i].edge_start); END_REPEAT; RETURN (p); END_FUNCTION; (* STEP Part 42 (unchanged in 2nd edition) *) (* Modified for LPM/6 *) FUNCTION path_reversed (a_path : path) : oriented_path; LOCAL the_reverse : oriented_path ; END_LOCAL; IF ('STRUCTURAL_FRAME_SCHEMA.ORIENTED_PATH' IN TYPEOF (a_path) ) THEN the_reverse := dummy_tri || path(list_of_topology_reversed (a_path.edge_list)) || oriented_path(a_path\oriented_path.path_element, NOT(a_path\oriented_path.orientation)) ; ELSE the_reverse := dummy_tri || path(list_of_topology_reversed (a_path.edge_list)) || oriented_path(a_path, FALSE); END_IF; RETURN (the_reverse); END_FUNCTION; (* STEP Part 42 (modified in 2nd edition) *) (* New for LPM/6 *) FUNCTION same_side (plane_pts : LIST [3:3] of cartesian_point; test_points : LIST [2:?] of cartesian_point) : BOOLEAN; LOCAL val1, val2 : REAL; n : INTEGER; END_LOCAL; IF (plane_pts[1].dim = 2) OR (test_points[1].dim = 2) THEN RETURN(?); END_IF; n := SIZEOF(test_points); val1 := above_plane(plane_pts[1], plane_pts[2], plane_pts[3], test_points[1] ); REPEAT i := 2 TO n; val2 := above_plane(plane_pts[1], plane_pts[2], plane_pts[3], test_points[i] ); IF (val1*val2 <= 0.0) THEN RETURN(FALSE); END_IF; END_REPEAT; RETURN(TRUE); END_FUNCTION; (* Modified for LPM/6 *) FUNCTION scalar_times_vector (scalar : REAL; vec : vector_or_direction) : vector; LOCAL v : direction; mag : REAL; result : vector; END_LOCAL; IF NOT EXISTS (scalar) OR NOT EXISTS (vec) THEN RETURN (?) ; ELSE IF 'STRUCTURAL_FRAME_SCHEMA.VECTOR' IN TYPEOF (vec) THEN v := dummy_gri || direction(vec.orientation.direction_ratios); mag := scalar * vec.magnitude; ELSE v := dummy_gri || direction(vec.direction_ratios); mag := scalar; END_IF; IF (mag < 0.0 ) THEN REPEAT i := 1 TO SIZEOF(v.direction_ratios); v.direction_ratios[i] := -v.direction_ratios[i]; END_REPEAT; mag := -mag; END_IF; result := dummy_gri || vector(normalise(v), mag); END_IF; RETURN (result); END_FUNCTION; (* STEP Part 42 (modified in 2nd edition) *) (* Modified for LPM/6 *) FUNCTION second_proj_axis (z_axis, x_axis, arg: direction) : direction; LOCAL y_axis : vector; v : direction; temp : vector; END_LOCAL; IF NOT EXISTS(arg) THEN v := dummy_gri || direction([0.0,1.0,0.0]); ELSE v := arg; END_IF; temp := scalar_times_vector(dot_product(v, z_axis), z_axis); y_axis := vector_difference(v, temp); temp := scalar_times_vector(dot_product(v, x_axis), x_axis); y_axis := vector_difference(y_axis, temp); y_axis := normalise(y_axis); RETURN(y_axis.orientation); END_FUNCTION; (* STEP Part 42 (modified in 2nd edition) *) FUNCTION set_of_topology_reversed (a_set : set_of_reversible_topology_item) : set_of_reversible_topology_item; LOCAL the_reverse : set_of_reversible_topology_item; END_LOCAL; the_reverse := []; REPEAT i := 1 TO SIZEOF (a_set); the_reverse := the_reverse + topology_reversed (a_set [i]); END_REPEAT; RETURN (the_reverse); END_FUNCTION; (* STEP Part 42 (unchanged in 2nd edition) *) (* Modified for LPM/6 *) FUNCTION shell_reversed (a_shell : shell) : shell; IF ('STRUCTURAL_FRAME_SCHEMA.OPEN_SHELL' IN TYPEOF (a_shell) ) THEN RETURN (open_shell_reversed (a_shell)); ELSE IF ('STRUCTURAL_FRAME_SCHEMA.CLOSED_SHELL' IN TYPEOF (a_shell) ) THEN RETURN (closed_shell_reversed (a_shell)); ELSE RETURN (?); END_IF; END_IF; END_FUNCTION; (* STEP Part 42 (modified in 2nd edition) *) FUNCTION surface_weights_positive (b: rational_b_spline_surface) : BOOLEAN; LOCAL result : BOOLEAN := TRUE; END_LOCAL; REPEAT i := 0 TO b.u_upper; REPEAT j := 0 TO b.v_upper; IF (b.weights[i][j] <= 0.0) THEN result := FALSE; RETURN(result); END_IF; END_REPEAT; END_REPEAT; RETURN(result); END_FUNCTION; (* STEP Part 42 (unchanged in 2nd edition) *) FUNCTION topology_reversed (an_item : reversible_topology) : reversible_topology; IF ('STRUCTURAL_FRAME_SCHEMA.EDGE' IN TYPEOF (an_item)) THEN RETURN (edge_reversed (an_item)); END_IF; IF ('STRUCTURAL_FRAME_SCHEMA.PATH' IN TYPEOF (an_item)) THEN RETURN (path_reversed (an_item)); END_IF; IF ('STRUCTURAL_FRAME_SCHEMA.FACE_BOUND' IN TYPEOF (an_item)) THEN RETURN (face_bound_reversed (an_item)); END_IF; IF ('STRUCTURAL_FRAME_SCHEMA.FACE' IN TYPEOF (an_item)) THEN RETURN (face_reversed (an_item)); END_IF; IF ('STRUCTURAL_FRAME_SCHEMA.SHELL' IN TYPEOF (an_item)) THEN RETURN (shell_reversed (an_item)); END_IF; IF ('SET' IN TYPEOF (an_item)) THEN RETURN (set_of_topology_reversed (an_item)); END_IF; IF ('LIST' IN TYPEOF (an_item)) THEN RETURN (list_of_topology_reversed (an_item)); END_IF; RETURN (?); END_FUNCTION; (* STEP Part 42 (unchanged in 2nd edition) *) (* New for LPM/6 - required for FUNCTION using_representations *) FUNCTION using_items (item : founded_item_select; checked_items: SET OF founded_item_select) : SET OF founded_item_select; LOCAL new_check_items : SET OF founded_item_select; result_items : SET OF founded_item_select; next_items : SET OF founded_item_select; END_LOCAL; result_items := []; new_check_items := checked_items + item; (* Find the set of representation_items or founded_items in which item is used directly. *) next_items := QUERY(z <* bag_to_set( USEDIN(item , '')) | ('STRUCTURAL_FRAME_SCHEMA.REPRESENTATION_ITEM' IN TYPEOF(z)) OR ('STRUCTURAL_FRAME_SCHEMA.FOUNDED_ITEM' IN TYPEOF(z))); (* If the set of next_items is not empty; *) IF SIZEOF(next_items) > 0 THEN (* For each element in the set, find the using_items recursively *) REPEAT i := 1 TO HIINDEX(next_items); (* Check for loop in data model, i.e. one of the next_items occurred earlier in the set of check_items; *) IF NOT(next_items[i] IN new_check_items) THEN result_items := result_items + next_items[i] + using_items(next_items[i],new_check_items); END_IF; END_REPEAT; END_IF; (* return the set of representation_items or founded_items in which the input item is used directly and indirectly. *) RETURN (result_items); END_FUNCTION; (* STEP Part 43 2nd Edition *) (* Modified for LPM/6 *) FUNCTION using_representations (item : founded_item_select) : SET OF representation; LOCAL results : SET OF representation; result_bag : BAG OF representation; intermediate_items : SET OF founded_item_select; END_LOCAL; (* Find the representations in which the item is used and add to the results set. *) results := []; result_bag := USEDIN(item,'STRUCTURAL_FRAME_SCHEMA.REPRESENTATION.ITEMS'); IF SIZEOF(result_bag) > 0 THEN REPEAT i := 1 TO HIINDEX(result_bag); results := results + result_bag[i]; END_REPEAT; END_IF; (* Find all representation_items or founded_items by which item is referenced directly or indirectly. *) intermediate_items := using_items(item,[]); (* If the set of intermediate items is not empty; *) IF SIZEOF(intermediate_items) > 0 THEN (* For each element in the set, add the representations of that element. *) REPEAT i := 1 TO HIINDEX(intermediate_items); result_bag := USEDIN(intermediate_items[i], 'STRUCTURAL_FRAME_SCHEMA.REPRESENTATION.ITEMS'); IF SIZEOF(result_bag) > 0 THEN REPEAT j := 1 TO HIINDEX(result_bag); results := results + result_bag[j]; END_REPEAT; END_IF; END_REPEAT; END_IF; (* Return the set of representation in which the input item is used directly and indirectly (through intervening representation_items or founded items). *) RETURN (results); END_FUNCTION; (* STEP Part 43 (modified in 2nd edition) *) FUNCTION unique_data_item (item : select_data_item): LOGICAL; LOCAL bag_of_managed_items : BAG OF managed_data_item; END_LOCAL; IF ('STRUCTURAL_FRAME_SCHEMA.MANAGED_DATA_DELETED' IN TYPEOF(item)) THEN RETURN (UNKNOWN); END_IF; (* find the managed_data_item in which the item is used and add to the bag_of_managed_items *) bag_of_managed_items := USEDIN(item, 'STRUCTURAL_FRAME_SCHEMA.MANAGED_DATA_ITEM.DATA_ITEM'); IF SIZEOF (bag_of_managed_items) = 1 THEN RETURN (TRUE); ELSE RETURN (FALSE); END_IF; END_FUNCTION; (* created for LPM/5 *) (* Modified for LPM/6 *) FUNCTION valid_calendar_date (date : calendar_date) : LOGICAL; CASE date.month_component OF 1 : RETURN({ 1 <= date.day_component <= 31 }); 2 : BEGIN IF (leap_year(date.year_component)) THEN RETURN({ 1 <= date.day_component <= 29 }); ELSE RETURN({ 1 <= date.day_component <= 28 }); END_IF; END; 3 : RETURN({ 1 <= date.day_component <= 31 }); 4 : RETURN({ 1 <= date.day_component <= 30 }); 5 : RETURN({ 1 <= date.day_component <= 31 }); 6 : RETURN({ 1 <= date.day_component <= 30 }); 7 : RETURN({ 1 <= date.day_component <= 31 }); 8 : RETURN({ 1 <= date.day_component <= 31 }); 9 : RETURN({ 1 <= date.day_component <= 30 }); 10 : RETURN({ 1 <= date.day_component <= 31 }); 11 : RETURN({ 1 <= date.day_component <= 30 }); 12 : RETURN({ 1 <= date.day_component <= 31 }); END_CASE; RETURN (FALSE); END_FUNCTION; (* STEP Part 41 2nd edition *) (* Added for LPM/6 *) FUNCTION valid_measure_value (m : measure_value) : BOOLEAN; IF ('REAL' IN TYPEOF (m)) THEN RETURN (m > 0.0); ELSE IF ('INTEGER' IN TYPEOF (m)) THEN RETURN (m > 0); ELSE RETURN (TRUE); END_IF; END_IF; END_FUNCTION; (* New in STEP Part 43 2nd edition *) FUNCTION valid_time (time: local_time) : BOOLEAN; IF EXISTS (time.second_component) THEN RETURN (EXISTS (time.minute_component)); ELSE RETURN (TRUE); END_IF; END_FUNCTION; (* STEP Part 41 (unchanged in 2nd edition) *) FUNCTION valid_units ( m : measure_with_unit ) : BOOLEAN; IF 'STRUCTURAL_FRAME_SCHEMA.LENGTH_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'STRUCTURAL_FRAME_SCHEMA.MASS_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'STRUCTURAL_FRAME_SCHEMA.TIME_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'STRUCTURAL_FRAME_SCHEMA.THERMODYNAMIC_TEMPERATURE_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'STRUCTURAL_FRAME_SCHEMA.PLANE_ANGLE_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'STRUCTURAL_FRAME_SCHEMA.SOLID_ANGLE_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'STRUCTURAL_FRAME_SCHEMA.AREA_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'STRUCTURAL_FRAME_SCHEMA.VOLUME_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'STRUCTURAL_FRAME_SCHEMA.RATIO_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'STRUCTURAL_FRAME_SCHEMA.POSITIVE_LENGTH_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'STRUCTURAL_FRAME_SCHEMA.POSITIVE_PLANE_ANGLE_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; RETURN (TRUE); END_FUNCTION; (* STEP Part 41 (unchanged in 2nd edition) *) (* Modified for LPM/6 *) FUNCTION vector_difference (arg1, arg2 : vector_or_direction) : vector; LOCAL result : vector; res, vec1, vec2 : direction; mag, mag1, mag2 : REAL; ndim : INTEGER; END_LOCAL; IF ((NOT EXISTS (arg1)) OR (NOT EXISTS (arg2))) OR (arg1.dim <> arg2.dim) THEN RETURN (?) ; ELSE BEGIN IF 'STRUCTURAL_FRAME_SCHEMA.VECTOR' IN TYPEOF(arg1) THEN mag1 := arg1.magnitude; vec1 := arg1.orientation; ELSE mag1 := 1.0; vec1 := arg1; END_IF; IF 'STRUCTURAL_FRAME_SCHEMA.VECTOR' IN TYPEOF(arg2) THEN mag2 := arg2.magnitude; vec2 := arg2.orientation; ELSE mag2 := 1.0; vec2 := arg2; END_IF; vec1 := normalise (vec1); vec2 := normalise (vec2); ndim := SIZEOF(vec1.direction_ratios); mag := 0.0; res := dummy_gri || direction(vec1.direction_ratios); REPEAT i := 1 TO ndim; res.direction_ratios[i] := mag1*vec1.direction_ratios[i] + mag2*vec2.direction_ratios[i]; mag := mag + (res.direction_ratios[i]*res.direction_ratios[i]); END_REPEAT; IF (mag > 0.0 ) THEN result := dummy_gri || vector( res, SQRT(mag)); ELSE result := dummy_gri || vector( vec1, 0.0); END_IF; END; END_IF; RETURN (result); END_FUNCTION; (* STEP Part 42 (modified for 2nd edition) *) FUNCTION volume_weights_positive (b: rational_b_spline_volume): BOOLEAN; LOCAL result : BOOLEAN := TRUE; END_LOCAL; REPEAT i := 0 TO b.u_upper; REPEAT j := 0 TO b.v_upper; REPEAT k := 0 TO b.w_upper; IF (b.weights[i][j][k] <= 0.0) THEN result := FALSE; RETURN(result); END_IF; END_REPEAT; END_REPEAT; END_REPEAT; RETURN(result); END_FUNCTION; (* STEP Part 42 (new in 2nd edition) *) END_SCHEMA; (* End of Structural Frame Schema (LPM/6) *)