-- This file was generated by exp2mql,
-- git commit id: 0.7, build timestamp 2022/02/17 周四 11:02.
-- You probably don't want to edit it since your modifications
-- will be lost if exp2mql is used to regenerate it.

--- define mql types.

typedef ParameterValue = double
/**
onerror(continue,"already exist")
**/
; 
typedef PlaneAngleMeasure = double /** onerror(continue,"already exist") **/ ; 
typedef YearNumber = int /** onerror(continue,"already exist") **/ ; 
typedef WeekInYearNumber = int /** onerror(continue,"already exist") **/ ; 
typedef MinuteInHour = int /** onerror(continue,"already exist") **/ ; 
typedef Identifier = text /** onerror(continue,"already exist") **/ ; 
typedef ShapeTolerance = double /** onerror(continue,"already exist") **/ ; 
typedef RotAccelerationMeasure = double /** onerror(continue,"already exist") **/ ; 
typedef VelocityMeasure = double /** onerror(continue,"already exist") **/ ; 
typedef DimensionCount = int /** onerror(continue,"already exist") **/ ; 
typedef PositiveLengthMeasure = double /** onerror(continue,"already exist") **/ ; 
typedef HourInDay = int /** onerror(continue,"already exist") **/ ; 
typedef RatioMeasure = double /** onerror(continue,"already exist") **/ ; 
typedef AccelerationMeasure = double /** onerror(continue,"already exist") **/ ; 
typedef DayInMonthNumber = int /** onerror(continue,"already exist") **/ ; 
typedef ElectricCurrentMeasure = double /** onerror(continue,"already exist") **/ ; 
typedef JerkMeasure = double /** onerror(continue,"already exist") **/ ; 
typedef VolumeMeasure = double /** onerror(continue,"already exist") **/ ; 
typedef DayInWeekNumber = int /** onerror(continue,"already exist") **/ ; 
typedef TorqueMeasure = double /** onerror(continue,"already exist") **/ ; 
typedef TimeMeasure = double /** onerror(continue,"already exist") **/ ; 
typedef PowerMeasure = double /** onerror(continue,"already exist") **/ ; 
typedef DayInYearNumber = int /** onerror(continue,"already exist") **/ ; 
typedef MassMeasure = double /** onerror(continue,"already exist") **/ ; 
typedef PositiveRatioMeasure = double /** onerror(continue,"already exist") **/ ; 
typedef MonthInYearNumber = int /** onerror(continue,"already exist") **/ ; 
typedef SecondInMinute = double /** onerror(continue,"already exist") **/ ; 
typedef Label = text /** onerror(continue,"already exist") **/ ; 
typedef RotSpeedMeasure = double /** onerror(continue,"already exist") **/ ; 
typedef SpeedMeasure = double /** onerror(continue,"already exist") **/ ; 
typedef PressureMeasure = double /** onerror(continue,"already exist") **/ ; 
typedef LengthMeasure = double /** onerror(continue,"already exist") **/ ; 
typedef RotJerkMeasure = double /** onerror(continue,"already exist") **/ ; 
typedef CountMeasure = int /** onerror(continue,"already exist") **/ ; 

--- typedef Text = text; 
--- typedef SetOfReversibleTopologyItem = ReversibleTopologyItem[?];
--- typedef ListOfReversibleTopologyItem = ReversibleTopologyItem[?];


-- This file was generated by exp2mql,
-- git commit id: 0.7, build timestamp 2022/02/17 周四 11:02.
-- You probably don't want to edit it since your modifications
-- will be lost if exp2mql is used to regenerate it.

--- define mql enums.

type ProbeType = enum {
	"0":["nulling"],
	"1":["proportional"],
	"2":["switching"]
} /** onerror(continue,"already exist") **/ ;

type ToolReferencePoint = enum {
	"0":["tcp"],
	"1":["ccp"]
} /** onerror(continue,"already exist") **/ ;

type MachineClass = enum {
	"0":["drilling_machine"],
	"1":["gundrill_machine"],
	"2":["machining_centre"],
	"3":["milling_machine"],
	"4":["multi_tasking_machine"],
	"5":["turning_machine"]
} /** onerror(continue,"already exist") **/ ;

type KnotType = enum {
	"0":["uniform_knots"],
	"1":["quasi_uniform_knots"],
	"2":["piecewise_bezier_knots"],
	"3":["unspecified"]
} /** onerror(continue,"already exist") **/ ;

type UnitsType = enum {
	"0":["inch"],
	"1":["inch_and_metric"],
	"2":["metric"]
} /** onerror(continue,"already exist") **/ ;

type TransitionCode = enum {
	"0":["discontinuous"],
	"1":["continuous"],
	"2":["cont_same_gradient"],
	"3":["cont_same_gradient_same_curvature"]
} /** onerror(continue,"already exist") **/ ;

type MachiningCapabilityProfile = enum {
	"0":["boring_capability"],
	"1":["drilling_capability"],
	"2":["gundrill_capability"],
	"3":["milling_capability"],
	"4":["turning_capability"]
} /** onerror(continue,"already exist") **/ ;

type ContactType = enum {
	"0":["side"],
	"1":["front"]
} /** onerror(continue,"already exist") **/ ;

type RotDirection = enum {
	"0":["cw"],
	"1":["ccw"]
} /** onerror(continue,"already exist") **/ ;

type SpeedName = enum {
	"0":["rapid"]
} /** onerror(continue,"already exist") **/ ;

type PalletStorageConfiguration = enum {
	"0":["carousel"],
	"1":["carousel_2_place"],
	"2":["chain"],
	"3":["fixed_2_place"],
	"4":["multi_storey"],
	"5":["straight_line"]
} /** onerror(continue,"already exist") **/ ;

type BSplineCurveForm = enum {
	"0":["polyline_form"],
	"1":["circular_arc"],
	"2":["elliptic_arc"],
	"3":["parabolic_arc"],
	"4":["hyperbolic_arc"],
	"5":["unspecified"]
} /** onerror(continue,"already exist") **/ ;

type FittingType = enum {
	"0":["shaft"],
	"1":["hole"]
} /** onerror(continue,"already exist") **/ ;

type LeftOrRight = enum {
	"0":["left"],
	"1":["right"]
} /** onerror(continue,"already exist") **/ ;

type FixtureStyle = enum {
	"0":["chuck_fixture"],
	"1":["hole"],
	"2":["t_slot_fixture"],
	"3":["vacuum"]
} /** onerror(continue,"already exist") **/ ;

type TrimmingPreference = enum {
	"0":["cartesian"],
	"1":["parameter"],
	"2":["unspecified"]
} /** onerror(continue,"already exist") **/ ;

type StrokeConnectionStrategy = enum {
	"0":["straghtline"],
	"1":["lift_shift_plunge"],
	"2":["degouge"],
	"3":["loop_back"]
} /** onerror(continue,"already exist") **/ ;

type BSplineSurfaceForm = enum {
	"0":["plane_surf"],
	"1":["cylindrical_surf"],
	"2":["conical_surf"],
	"3":["spherical_surf"],
	"4":["toroidal_surf"],
	"5":["surf_of_revolution"],
	"6":["ruled_surf"],
	"7":["generalised_cone"],
	"8":["quadric_surf"],
	"9":["surf_of_linear_extrusion"],
	"10":["unspecified"]
} /** onerror(continue,"already exist") **/ ;

type ToolStorageConfiguration = enum {
	"0":["bi_directional"],
	"1":["box_matrix"],
	"2":["uni_directional"]
} /** onerror(continue,"already exist") **/ ;

type UnlimitedRange = enum {
	"0":["unlimited"]
} /** onerror(continue,"already exist") **/ ;

type MeansOfCoolantDelivery = enum {
	"0":["external"],
	"1":["thru_spindle"],
	"2":["thru_turret"]
} /** onerror(continue,"already exist") **/ ;

type BottomOrSide = enum {
	"0":["bottom"],
	"1":["side"],
	"2":["bottom_and_side"]
} /** onerror(continue,"already exist") **/ ;

type AheadOrBehind = enum {
	"0":["ahead"],
	"1":["exact"],
	"2":["behind"]
} /** onerror(continue,"already exist") **/ ;

type Hand = enum {
	"0":["left"],
	"1":["right"],
	"2":["neutral"]
} /** onerror(continue,"already exist") **/ ;

type PathmodeType = enum {
	"0":["forward"],
	"1":["zigzag"]
} /** onerror(continue,"already exist") **/ ;

type SensorDimensionality = enum {
	"0":["one_d"],
	"1":["two_d"],
	"2":["three_d"]
} /** onerror(continue,"already exist") **/ ;

type CutmodeType = enum {
	"0":["climb"],
	"1":["conventional"]
} /** onerror(continue,"already exist") **/ ;

type ToolpathType = enum {
	"0":["approach"],
	"1":["lift"],
	"2":["connect"],
	"3":["non_contact"],
	"4":["contact"],
	"5":["trajectory_path"]
} /** onerror(continue,"already exist") **/ ;

type ToolCompensation = enum {
	"0":["tool_length"],
	"1":["tool_radius"]
} /** onerror(continue,"already exist") **/ ;

type Interpolation = enum {
	"0":["circular"],
	"1":["helical"],
	"2":["linear"],
	"3":["nurbs"],
	"4":["other"]
} /** onerror(continue,"already exist") **/ ;

type CoolantType = enum {
	"0":["air"],
	"1":["flood"],
	"2":["micro"],
	"3":["mist"],
	"4":["none"]
} /** onerror(continue,"already exist") **/ ;

type Logical = enum {
	"0":["false", "False", "FALSE", ".F."],
	"1":["true", "True", "TRUE", ".T."]
} /** onerror(continue,"already exist") **/ ;


CREATE CLASS IF NOT EXISTS hole_bottom_condition : Task2 (
  )with alias='HoleBottomCondition', nickname='HoleBottomCondition', version=true;


CREATE CLASS IF NOT EXISTS blind_bottom_condition : HoleBottomCondition (
   )with alias='BlindBottomCondition', nickname='BlindBottomCondition', version=true;


CREATE CLASS IF NOT EXISTS flat_hole_bottom : BlindBottomCondition (
   )with alias='FlatHoleBottom', nickname='FlatHoleBottom', version=true;


CREATE CLASS IF NOT EXISTS boolean_expression : Task2 (
  )with alias='BooleanExpression', nickname='BooleanExpression', version=true;


CREATE CLASS IF NOT EXISTS multiple_arity_boolean_expression : BooleanExpression (
 	operands			BooleanExpression[?]
)with alias='MultipleArityBooleanExpression', nickname='MultipleArityBooleanExpression', version=true;


CREATE CLASS IF NOT EXISTS or_expression : MultipleArityBooleanExpression (
   )with alias='OrExpression', nickname='OrExpression', version=true;


CREATE CLASS IF NOT EXISTS tool_body : Task2 (
  )with alias='ToolBody', nickname='ToolBody', version=true;


CREATE CLASS IF NOT EXISTS drilling_type_strategy : Task2 (
	reduced_cut_at_start			double,
	reduced_feed_at_start			double,
	depth_of_start			double,
	reduced_cut_at_end			double,
	reduced_feed_at_end			double,
	depth_of_end			double
)with alias='DrillingTypeStrategy', nickname='DrillingTypeStrategy', version=true;


CREATE CLASS IF NOT EXISTS tool_assembly : Task2 (
	tool_number			text,
	tool_type			text,
	tool_size			text
)with alias='ToolAssembly', nickname='ToolAssembly', version=true;


CREATE CLASS IF NOT EXISTS nc_constant : Task2 (
	its_name			text,
	its_value			double
)with alias='NcConstant', nickname='NcConstant', version=true;


CREATE CLASS IF NOT EXISTS representation_item : Task2 (
    name    varchar
)with alias='RepresentationItem', nickname='RepresentationItem', version=true;


CREATE CLASS IF NOT EXISTS geometric_representation_item : RepresentationItem (
   )with alias='GeometricRepresentationItem', nickname='GeometricRepresentationItem', version=true;


CREATE CLASS IF NOT EXISTS solid_model : GeometricRepresentationItem (
   )with alias='SolidModel', nickname='SolidModel', version=true;


CREATE CLASS IF NOT EXISTS element_capability : Task2 (
	description			text
)with alias='ElementCapability', nickname='ElementCapability', version=true;


CREATE CLASS IF NOT EXISTS executable : Task2 (
	its_id			text
)with alias='Executable', nickname='Executable', version=true;


CREATE CLASS IF NOT EXISTS program_structure : Executable (
   )with alias='ProgramStructure', nickname='ProgramStructure', version=true;


CREATE CLASS IF NOT EXISTS non_sequential : ProgramStructure (
 	its_elements			Executable[?]
)with alias='NonSequential', nickname='NonSequential', version=true;


CREATE CLASS IF NOT EXISTS topological_representation_item : RepresentationItem (
   )with alias='TopologicalRepresentationItem', nickname='TopologicalRepresentationItem', version=true;


CREATE CLASS IF NOT EXISTS vertex : TopologicalRepresentationItem (
   )with alias='Vertex', nickname='Vertex', version=true;


CREATE CLASS IF NOT EXISTS nc_variable : Task2 (
	its_name			text,
	initial_value			double
)with alias='NcVariable', nickname='NcVariable', version=true;


CREATE CLASS IF NOT EXISTS surface : GeometricRepresentationItem (
   )with alias='Surface', nickname='Surface', version=true;


CREATE CLASS IF NOT EXISTS oriented_surface : Surface (
 	orientation			boolean
)with alias='OrientedSurface', nickname='OrientedSurface', version=true;


CREATE CLASS IF NOT EXISTS tool_handling_unit : ElementCapability (
   )with alias='ToolHandlingUnit', nickname='ToolHandlingUnit', version=true;


CREATE CLASS IF NOT EXISTS tool_magazine : ToolHandlingUnit (
 	number_of_tools			double,
	random_access			boolean,
	diameter_full			double,
	diameter_empty			double,
	tool_length			double,
	tool_weight			double,
	storage_configuration			ToolStorageConfiguration,
	tool_magazine_contents			ToolAssembly[?]
)with alias='ToolMagazine', nickname='ToolMagazine', version=true;


CREATE CLASS IF NOT EXISTS tool_direction : Task2 (
  )with alias='ToolDirection', nickname='ToolDirection', version=true;


CREATE CLASS IF NOT EXISTS tool_direction_for_milling : ToolDirection (
   )with alias='ToolDirectionForMilling', nickname='ToolDirectionForMilling', version=true;


CREATE CLASS IF NOT EXISTS curve : GeometricRepresentationItem (
   )with alias='Curve', nickname='Curve', version=true;


CREATE CLASS IF NOT EXISTS slot_end_type : Task2 (
  )with alias='SlotEndType', nickname='SlotEndType', version=true;


CREATE CLASS IF NOT EXISTS radiused_slot_end_type : SlotEndType (
   )with alias='RadiusedSlotEndType', nickname='RadiusedSlotEndType', version=true;


CREATE CLASS IF NOT EXISTS bounded_surface : Surface (
   )with alias='BoundedSurface', nickname='BoundedSurface', version=true;


CREATE CLASS IF NOT EXISTS pocket_bottom_condition : Task2 (
  )with alias='PocketBottomCondition', nickname='PocketBottomCondition', version=true;


CREATE CLASS IF NOT EXISTS hydraulics : Task2 (
	type_of_hydraulic_oil			text,
	pump_outlet_pressure			double,
	capacity_of_hydraulics_tank			double
)with alias='Hydraulics', nickname='Hydraulics', version=true;


CREATE CLASS IF NOT EXISTS bounded_curve : Curve (
   )with alias='BoundedCurve', nickname='BoundedCurve', version=true;


CREATE CLASS IF NOT EXISTS cutting_edge_technological_data : Task2 (
	cutting_angle			double,
	free_angle			double,
	aux_angle			double
)with alias='CuttingEdgeTechnologicalData', nickname='CuttingEdgeTechnologicalData', version=true;


CREATE CLASS IF NOT EXISTS direction : GeometricRepresentationItem (
 	direction_ratios			Double[?]
)with alias='Direction', nickname='Direction', version=true;


CREATE CLASS IF NOT EXISTS nc_function : Executable (
   )with alias='NcFunction', nickname='NcFunction', version=true;


CREATE CLASS IF NOT EXISTS index_pallet : NcFunction (
 	its_index			int
)with alias='IndexPallet', nickname='IndexPallet', version=true;


CREATE CLASS IF NOT EXISTS kinematic_link : Task2 (
  )with alias='KinematicLink', nickname='KinematicLink', version=true;


CREATE CLASS IF NOT EXISTS two_axes : ToolDirection (
   )with alias='TwoAxes', nickname='TwoAxes', version=true;


CREATE CLASS IF NOT EXISTS offset_vector : Task2 (
	translate			NcVariable[?],
	rotate			NcVariable[?]
)with alias='OffsetVector', nickname='OffsetVector', version=true;


CREATE CLASS IF NOT EXISTS person : Task2 (
    id    varchar,
	last_name			text,
	first_name			text,
	middle_names			Text[?],
	prefix_titles			Text[?],
	suffix_titles			Text[?]
)with alias='Person', nickname='Person', version=true;


CREATE CLASS IF NOT EXISTS edge : TopologicalRepresentationItem (
 	edge_start			Vertex,
	edge_end			Vertex
)with alias='Edge', nickname='Edge', version=true;


CREATE CLASS IF NOT EXISTS oriented_edge : Edge (
 	edge_element			Edge,
	orientation			boolean
)with alias='OrientedEdge', nickname='OrientedEdge', version=true;


CREATE CLASS IF NOT EXISTS point : GeometricRepresentationItem (
   )with alias='Point', nickname='Point', version=true;


CREATE CLASS IF NOT EXISTS point_on_surface : Point (
 	basis_surface			Surface,
	point_parameter_u			double,
	point_parameter_v			double
)with alias='PointOnSurface', nickname='PointOnSurface', version=true;


CREATE CLASS IF NOT EXISTS property_parameter : Task2 (
	parameter_name			text
)with alias='PropertyParameter', nickname='PropertyParameter', version=true;


CREATE CLASS IF NOT EXISTS touch_probe : Task2 (
	its_id			text
)with alias='TouchProbe', nickname='TouchProbe', version=true;


CREATE CLASS IF NOT EXISTS machine_functions : Task2 (
  )with alias='MachineFunctions', nickname='MachineFunctions', version=true;


CREATE CLASS IF NOT EXISTS three_axes : ToolDirection (
   )with alias='ThreeAxes', nickname='ThreeAxes', version=true;


CREATE CLASS IF NOT EXISTS electrical : Task2 (
	electric_phase			int,
	electric_power			double,
	electrical_current			double,
	electrical_frequency			text,
	electrical_grounding			text,
	electrical_voltage			double
)with alias='Electrical', nickname='Electrical', version=true;


CREATE CLASS IF NOT EXISTS representation_context : Task2 (
	context_identifier			text,
	context_type			text
)with alias='RepresentationContext', nickname='RepresentationContext', version=true;


CREATE CLASS IF NOT EXISTS geometric_representation_context : RepresentationContext (
 	coordinate_space_dimension			int
)with alias='GeometricRepresentationContext', nickname='GeometricRepresentationContext', version=true;


CREATE CLASS IF NOT EXISTS five_axes_const_tilt_yaw : ToolDirectionForMilling (
 	tilt_angle			double,
	yaw_angle			double
)with alias='FiveAxesConstTiltYaw', nickname='FiveAxesConstTiltYaw', version=true;


CREATE CLASS IF NOT EXISTS application_context : Task2 (
	application			text
)with alias='ApplicationContext', nickname='ApplicationContext', version=true;


CREATE CLASS IF NOT EXISTS rectangular_omit : Task2 (
	row_index			int,
	column_index			int
)with alias='RectangularOmit', nickname='RectangularOmit', version=true;


CREATE CLASS IF NOT EXISTS cartesian_point : Point (
 	coordinates			Double[?]
)with alias='CartesianPoint', nickname='CartesianPoint', version=true;


CREATE CLASS IF NOT EXISTS rational_point : CartesianPoint (
 	weight			double
)with alias='RationalPoint', nickname='RationalPoint', version=true;


CREATE CLASS IF NOT EXISTS numeric_parameter : PropertyParameter (
 	its_parameter_value			double,
	its_parameter_unit			text
)with alias='NumericParameter', nickname='NumericParameter', version=true;


CREATE CLASS IF NOT EXISTS t_link : OrientedEdge (
   )with alias='TLink', nickname='TLink', version=true;


CREATE CLASS IF NOT EXISTS while_statement : ProgramStructure (
 	condition			BooleanExpression,
	body			Executable
)with alias='WhileStatement', nickname='WhileStatement', version=true;


CREATE CLASS IF NOT EXISTS path : TopologicalRepresentationItem (
 	edge_list			OrientedEdge[?]
)with alias='Path', nickname='Path', version=true;


CREATE CLASS IF NOT EXISTS machine_tool_axis : ElementCapability (
 	axis_name			text
)with alias='MachineToolAxis', nickname='MachineToolAxis', version=true;


CREATE CLASS IF NOT EXISTS rotary_axis : MachineToolAxis (
 	displacement_angle_error			double,
	repeatability_angle_error			double,
	rapid_traverse_rotation_feed_rate			double,
	minimum_cutting_rotation_feed_rate			double,
	maximum_cutting_rotation_feed_rate			double,
	maximum_rotation_acceleration			double,
	maximum_rotation_deceleration			double,
	maximum_rotation_jerk			double
)with alias='RotaryAxis', nickname='RotaryAxis', version=true;


CREATE CLASS IF NOT EXISTS continuous_rotary : RotaryAxis (
   )with alias='ContinuousRotary', nickname='ContinuousRotary', version=true;


CREATE CLASS IF NOT EXISTS coordinated_universal_time_offset : Task2 (
	hour_offset			int,
	minute_offset			int,
	sense			AheadOrBehind
)with alias='CoordinatedUniversalTimeOffset', nickname='CoordinatedUniversalTimeOffset', version=true;


CREATE CLASS IF NOT EXISTS through_pocket_bottom_condition : PocketBottomCondition (
   )with alias='ThroughPocketBottomCondition', nickname='ThroughPocketBottomCondition', version=true;


CREATE CLASS IF NOT EXISTS loop_slot_end_type : SlotEndType (
   )with alias='LoopSlotEndType', nickname='LoopSlotEndType', version=true;


CREATE CLASS IF NOT EXISTS swept_surface : Surface (
 	swept_curve			Curve
)with alias='SweptSurface', nickname='SweptSurface', version=true;


CREATE CLASS IF NOT EXISTS representation : Task2 (
    name    varchar,
	items			RepresentationItem[?],
	context_of_items			RepresentationContext
)with alias='Representation', nickname='Representation', version=true;


CREATE CLASS IF NOT EXISTS kinematic_link_representation : Representation (
 	representation_context_of_items			GeometricRepresentationContext
)with alias='KinematicLinkRepresentation', nickname='KinematicLinkRepresentation', version=true;


CREATE CLASS IF NOT EXISTS tool_changer : ToolHandlingUnit (
 	spindle_name			text,
	cut_to_cut_min_tool_change_time			double,
	cut_to_cut_max_tool_change_time			double
)with alias='ToolChanger', nickname='ToolChanger', version=true;


CREATE CLASS IF NOT EXISTS open_slot_end_type : SlotEndType (
   )with alias='OpenSlotEndType', nickname='OpenSlotEndType', version=true;


CREATE CLASS IF NOT EXISTS optional_stop : NcFunction (
   )with alias='OptionalStop', nickname='OptionalStop', version=true;


CREATE CLASS IF NOT EXISTS loop : TopologicalRepresentationItem (
   )with alias='Loop', nickname='Loop', version=true;


CREATE CLASS IF NOT EXISTS edge_loop : Loop (
 	edge_list			OrientedEdge[?]
)with alias='EdgeLoop', nickname='EdgeLoop', version=true;


CREATE CLASS IF NOT EXISTS date : Task2 (
	year_component			int
)with alias='Date', nickname='Date', version=true;


CREATE CLASS IF NOT EXISTS calendar_date : Date (
 	day_component			int,
	month_component			int
)with alias='CalendarDate', nickname='CalendarDate', version=true;

CREATE CLASS IF NOT EXISTS turret : ToolHandlingUnit (
 	spindle_name			Text[?],
	number_of_fixed_tools			double,
	number_of_rotating_tools			double,
	cut_to_cut_min_turret_index_time			double,
	cut_to_cut_max_turret_index_time			double,
	turret_contents			ToolAssembly[?]
)with alias='Turret', nickname='Turret', version=true;

CREATE CLASS IF NOT EXISTS vector : GeometricRepresentationItem (
 	orientation			Direction,
	magnitude			double
)with alias='Vector', nickname='Vector', version=true;

CREATE CLASS IF NOT EXISTS profile_floor : Task2 (
	floor_radius			NumericParameter,
	start_or_end			boolean
)with alias='ProfileFloor', nickname='ProfileFloor', version=true;


CREATE CLASS IF NOT EXISTS two5d_milling_strategy : Task2 (
	overlap			double,
	allow_multiple_passes			boolean
)with alias='Two5dMillingStrategy', nickname='Two5dMillingStrategy', version=true;


CREATE CLASS IF NOT EXISTS bidirectional_contour : Two5dMillingStrategy (
 	feed_direction			Direction,
	stepover_direction			LeftOrRight,
	rotation_direction			RotDirection,
	spiral_cutmode			CutmodeType
)with alias='BidirectionalContour', nickname='BidirectionalContour', version=true;


CREATE CLASS IF NOT EXISTS tailstock : ElementCapability (
 	spindle_name			text,
	taper			text,
	maximum_workpiece_weight_of_quill			double
)with alias='Tailstock', nickname='Tailstock', version=true;


CREATE CLASS IF NOT EXISTS t_pointset : GeometricRepresentationItem (
 	control_points			RationalPoint[?]
)with alias='TPointset', nickname='TPointset', version=true;


CREATE CLASS IF NOT EXISTS program_stop : NcFunction (
   )with alias='ProgramStop', nickname='ProgramStop', version=true;


CREATE CLASS IF NOT EXISTS item_defined_transformation : Task2 (
    name    varchar,
	description			text,
	transform_item_1			RepresentationItem,
	transform_item_2			RepresentationItem
)with alias='ItemDefinedTransformation', nickname='ItemDefinedTransformation', version=true;


CREATE CLASS IF NOT EXISTS characterized_object : Task2 (
    name    varchar,
	description			text
)with alias='CharacterizedObject', nickname='CharacterizedObject', version=true;


CREATE CLASS IF NOT EXISTS representation_map : Task2 (
	mapping_origin			RepresentationItem,
	mapped_representation			Representation
)with alias='RepresentationMap', nickname='RepresentationMap', version=true;


CREATE CLASS IF NOT EXISTS machining_size : Task2 (
	description			text,
	x			double,
	y			double,
	z			double
)with alias='MachiningSize', nickname='MachiningSize', version=true;


CREATE CLASS IF NOT EXISTS circular_omit : Task2 (
	index			int
)with alias='CircularOmit', nickname='CircularOmit', version=true;


CREATE CLASS IF NOT EXISTS display_message : NcFunction (
 	its_text			text
)with alias='DisplayMessage', nickname='DisplayMessage', version=true;


CREATE CLASS IF NOT EXISTS linear_axis : MachineToolAxis (
 	minimum_range_of_motion			double,
	maximum_range_of_motion			double,
	displacement_error			double,
	repeatability_error			double,
	rapid_traverse_feed_rate			double,
	minimum_cutting_feed_rate			double,
	maximum_cutting_feed_rate			double,
	maximum_acceleration			double,
	maximum_deceleration			double,
	maximum_jerk			double
)with alias='LinearAxis', nickname='LinearAxis', version=true;


CREATE CLASS IF NOT EXISTS angle_taper : Task2 (
	angle			double
)with alias='AngleTaper', nickname='AngleTaper', version=true;


CREATE CLASS IF NOT EXISTS through_bottom_condition : HoleBottomCondition (
   )with alias='ThroughBottomCondition', nickname='ThroughBottomCondition', version=true;


CREATE CLASS IF NOT EXISTS unary_boolean_expression : BooleanExpression (
 	operand			BooleanExpression
)with alias='UnaryBooleanExpression', nickname='UnaryBooleanExpression', version=true;


CREATE CLASS IF NOT EXISTS tool_dimension : Task2 (
	diameter			double,
	tool_top_angle			double,
	tool_circumference_angle			double,
	cutting_edge_length			double,
	edge_radius			double,
	edge_center_vertical			double,
	edge_center_horizontal			double
)with alias='ToolDimension', nickname='ToolDimension', version=true;


CREATE CLASS IF NOT EXISTS measuring_capability : Task2 (
	measuring_accuracy			text,
	description			text
)with alias='MeasuringCapability', nickname='MeasuringCapability', version=true;


CREATE CLASS IF NOT EXISTS plus_minus_value : Task2 (
	upper_limit			double,
	lower_limit			double,
	significant_digits			int
)with alias='PlusMinusValue', nickname='PlusMinusValue', version=true;


CREATE CLASS IF NOT EXISTS curve_with_normal_vector : Task2 (
	basiccurve			BoundedCurve,
	surface_normal			BoundedCurve
)with alias='CurveWithNormalVector', nickname='CurveWithNormalVector', version=true;


CREATE CLASS IF NOT EXISTS ordinal_date : Date (
 	day_component			int
)with alias='OrdinalDate', nickname='OrdinalDate', version=true;


CREATE CLASS IF NOT EXISTS locator : Task2 (
	business_unit			text,
	plant_location			text,
	building			text,
	cell			text
)with alias='Locator', nickname='Locator', version=true;


CREATE CLASS IF NOT EXISTS and_expression : MultipleArityBooleanExpression (
   )with alias='AndExpression', nickname='AndExpression', version=true;


CREATE CLASS IF NOT EXISTS contour_parallel : Two5dMillingStrategy (
 	rotation_direction			RotDirection,
	cutmode			CutmodeType
)with alias='ContourParallel', nickname='ContourParallel', version=true;


CREATE CLASS IF NOT EXISTS week_of_year_and_day_date : Date (
 	week_component			int,
	day_component			int
)with alias='WeekOfYearAndDayDate', nickname='WeekOfYearAndDayDate', version=true;


CREATE CLASS IF NOT EXISTS binary_boolean_expression : BooleanExpression (
 	operand1			BooleanExpression,
	operand2			BooleanExpression
)with alias='BinaryBooleanExpression', nickname='BinaryBooleanExpression', version=true;


CREATE CLASS IF NOT EXISTS adaptive_control : Task2 (
  )with alias='AdaptiveControl', nickname='AdaptiveControl', version=true;


CREATE CLASS IF NOT EXISTS center_milling : Two5dMillingStrategy (
   )with alias='CenterMilling', nickname='CenterMilling', version=true;


CREATE CLASS IF NOT EXISTS shape_representation : Representation (
   )with alias='ShapeRepresentation', nickname='ShapeRepresentation', version=true;


CREATE CLASS IF NOT EXISTS advanced_brep_shape_representation : ShapeRepresentation (
   )with alias='AdvancedBrepShapeRepresentation', nickname='AdvancedBrepShapeRepresentation', version=true;


CREATE CLASS IF NOT EXISTS edge_curve : Edge (
 	edge_geometry			Curve,
	same_sense			boolean
)with alias='EdgeCurve', nickname='EdgeCurve', version=true;


CREATE CLASS IF NOT EXISTS limited_swing : RotaryAxis (
 	minimum_angle_of_motion			double,
	maximum_angle_of_motion			double,
	axis_travel_limit			boolean
)with alias='LimitedSwing', nickname='LimitedSwing', version=true;

CREATE CLASS IF NOT EXISTS line : Curve (
 	pnt			CartesianPoint,
	dir			Vector
)with alias='Line', nickname='Line', version=true;

CREATE CLASS IF NOT EXISTS spindle_range : Task2 (
	minimum_drive_speed			double,
	maximum_drive_speed			double,
	minimum_drive_torque			double,
	maximum_drive_torque			double
)with alias='SpindleRange', nickname='SpindleRange', version=true;


CREATE CLASS IF NOT EXISTS setup_instruction : Task2 (
	description			text,
	external_document			text
)with alias='SetupInstruction', nickname='SetupInstruction', version=true;


CREATE CLASS IF NOT EXISTS rectangular_offset : Task2 (
	offset_direction			Direction,
	offset_distance			double,
	row_index			int,
	column_index			int
)with alias='RectangularOffset', nickname='RectangularOffset', version=true;


CREATE CLASS IF NOT EXISTS exchange_pallet : NcFunction (
   )with alias='ExchangePallet', nickname='ExchangePallet', version=true;


CREATE CLASS IF NOT EXISTS machine_tool_element : Task2 (
    name    varchar,
	description			text,
	weight			double,
	capabilities			ElementCapability[?]
)with alias='MachineToolElement', nickname='MachineToolElement', version=true;


CREATE CLASS IF NOT EXISTS t_slot : Task2 (
	number_of_t_slots			double,
	t_slots_size			double,
	distance_between_t_slot_centres			double
)with alias='TSlot', nickname='TSlot', version=true;


CREATE CLASS IF NOT EXISTS nc_controller : Task2 (
	controller_model			text,
	controller_manufacturer			text,
	units			UnitsType,
	maximum_number_of_simultaneous_control_axes			double,
	maximum_total_number_of_control_feed_axes			double,
	maximum_total_number_of_control_spindles			double,
	minimum_linear_increment			double,
	minimum_angle_increment			double,
	maximum_number_of_multi_channel_control			double,
	cycle_functions			Text[?],
	interpolation_functions			Interpolation[?],
	look_ahead			int,
	adaptive_control			text,
	miscellaneous_controller_functions			text,
	program_memory_size			double,
	cutting_feed_rate_override			Double[?],
	rapid_traverse_override			Double[?],
	tool_compensation_functions			ToolCompensation[?],
	time_sampling			double,
	clock_frequency			double
)with alias='NcController', nickname='NcController', version=true;


CREATE CLASS IF NOT EXISTS unidirectional : Two5dMillingStrategy (
 	feed_direction			Direction,
	cutmode			CutmodeType
)with alias='Unidirectional', nickname='Unidirectional', version=true;


CREATE CLASS IF NOT EXISTS representation_relationship : Task2 (
    name    varchar,
	description			text,
	rep_1			Representation,
	rep_2			Representation
)with alias='RepresentationRelationship', nickname='RepresentationRelationship', version=true;


CREATE CLASS IF NOT EXISTS material : Task2 (
	standard_identifier			text,
	material_identifier			text,
	material_property			PropertyParameter[?]
)with alias='Material', nickname='Material', version=true;


CREATE CLASS IF NOT EXISTS axis_capability : Task2 (
	number_of_axes			double,
	number_of_simultanious_axes			double
)with alias='AxisCapability', nickname='AxisCapability', version=true;


CREATE CLASS IF NOT EXISTS xor_expression : BinaryBooleanExpression (
   )with alias='XorExpression', nickname='XorExpression', version=true;


CREATE CLASS IF NOT EXISTS kinematic_joint : Task2 (
	first_link			KinematicLink,
	second_link			KinematicLink
)with alias='KinematicJoint', nickname='KinematicJoint', version=true;


CREATE CLASS IF NOT EXISTS machine_tool : Task2 (
	description			text
)with alias='MachineTool', nickname='MachineTool', version=true;


CREATE CLASS IF NOT EXISTS spindle_capability : Task2 (
	spindle_name			text,
	spindle_power			double,
	maximum_drive_speed			double
)with alias='SpindleCapability', nickname='SpindleCapability', version=true;


CREATE CLASS IF NOT EXISTS machining_tool : Task2 (
	its_id			text
)with alias='MachiningTool', nickname='MachiningTool', version=true;


CREATE CLASS IF NOT EXISTS composite_curve_segment : Task2 (
	transition			TransitionCode,
	same_sense			boolean,
	parent_curve			Curve
)with alias='CompositeCurveSegment', nickname='CompositeCurveSegment', version=true;


CREATE CLASS IF NOT EXISTS bar_feeder : ElementCapability (
 	minimum_stock_diameter			double,
	maximum_stock_diameter			double,
	maximum_stock_length			double
)with alias='BarFeeder', nickname='BarFeeder', version=true;


CREATE CLASS IF NOT EXISTS coolant : ElementCapability (
 	coolant_type			CoolantType,
	means_of_delivery			MeansOfCoolantDelivery,
	capacity_of_coolant_tank			double,
	coolant_weight			double
)with alias='Coolant', nickname='Coolant', version=true;


CREATE CLASS IF NOT EXISTS definitional_representation : Representation (
   )with alias='DefinitionalRepresentation', nickname='DefinitionalRepresentation', version=true;


CREATE CLASS IF NOT EXISTS descriptive_parameter : PropertyParameter (
 	descriptive_string			text
)with alias='DescriptiveParameter', nickname='DescriptiveParameter', version=true;


CREATE CLASS IF NOT EXISTS bidirectional_milling : Two5dMillingStrategy (
 	feed_direction			Direction,
	stepover_direction			LeftOrRight,
	its_stroke_connection_strategy			StrokeConnectionStrategy
)with alias='BidirectionalMilling', nickname='BidirectionalMilling', version=true;


CREATE CLASS IF NOT EXISTS planar_pocket_bottom_condition : PocketBottomCondition (
   )with alias='PlanarPocketBottomCondition', nickname='PlanarPocketBottomCondition', version=true;


CREATE CLASS IF NOT EXISTS not_expression : UnaryBooleanExpression (
   )with alias='NotExpression', nickname='NotExpression', version=true;


CREATE CLASS IF NOT EXISTS parallel : ProgramStructure (
 	branches			Executable[?]
)with alias='Parallel', nickname='Parallel', version=true;


CREATE CLASS IF NOT EXISTS indexing : RotaryAxis (
 	index_increment			double
)with alias='Indexing', nickname='Indexing', version=true;


CREATE CLASS IF NOT EXISTS if_statement : ProgramStructure (
 	condition			BooleanExpression,
	true_branch			Executable,
	false_branch			Executable
)with alias='IfStatement', nickname='IfStatement', version=true;


CREATE CLASS IF NOT EXISTS selective : ProgramStructure (
 	its_elements			Executable[?]
)with alias='Selective', nickname='Selective', version=true;


CREATE CLASS IF NOT EXISTS bidirectional : Two5dMillingStrategy (
 	feed_direction			Direction,
	stepover_direction			LeftOrRight,
	its_stroke_connection_strategy			StrokeConnectionStrategy
)with alias='Bidirectional', nickname='Bidirectional', version=true;


CREATE CLASS IF NOT EXISTS milling_tool_dimension : Task2 (
	diameter			double,
	tool_top_angle			double,
	tool_circumference_angle			double,
	cutting_edge_length			double,
	edge_radius			double,
	edge_center_vertical			double,
	edge_center_horizontal			double
)with alias='MillingToolDimension', nickname='MillingToolDimension', version=true;


CREATE CLASS IF NOT EXISTS set_mark : NcFunction (
   )with alias='SetMark', nickname='SetMark', version=true;


CREATE CLASS IF NOT EXISTS oriented_path : Path (
 	path_element			Path,
	orientation			boolean
)with alias='OrientedPath', nickname='OrientedPath', version=true;


CREATE CLASS IF NOT EXISTS technology : Task2 (
	feedrate			double,
	feedrate_reference			ToolReferencePoint
)with alias='Technology', nickname='Technology', version=true;


CREATE CLASS IF NOT EXISTS vertex_loop : Loop (
 	loop_vertex			Vertex
)with alias='VertexLoop', nickname='VertexLoop', version=true;


CREATE CLASS IF NOT EXISTS approval_status : Task2 (
    name    varchar
)with alias='ApprovalStatus', nickname='ApprovalStatus', version=true;


CREATE CLASS IF NOT EXISTS five_axes_var_tilt_yaw : ToolDirectionForMilling (
   )with alias='FiveAxesVarTiltYaw', nickname='FiveAxesVarTiltYaw', version=true;


CREATE CLASS IF NOT EXISTS chuck : ElementCapability (
 	minimum_part_diameter			double,
	maximum_part_diameter			double,
	number_of_jaws			double
)with alias='Chuck', nickname='Chuck', version=true;


CREATE CLASS IF NOT EXISTS limits_and_fits : Task2 (
	deviation			double,
	grade			double,
	its_fitting_type			FittingType
)with alias='LimitsAndFits', nickname='LimitsAndFits', version=true;


CREATE CLASS IF NOT EXISTS contour_spiral : Two5dMillingStrategy (
 	rotation_direction			RotDirection,
	cutmode			CutmodeType
)with alias='ContourSpiral', nickname='ContourSpiral', version=true;


CREATE CLASS IF NOT EXISTS explicit_strategy : Two5dMillingStrategy (
   )with alias='ExplicitStrategy', nickname='ExplicitStrategy', version=true;


CREATE CLASS IF NOT EXISTS milling_technology : Technology (
 	cutspeed			double,
	spindle			double,
	feedrate_per_tooth			double,
	synchronize_spindle_with_feed			boolean,
	inhibit_feedrate_override			boolean,
	inhibit_spindle_override			boolean,
	its_adaptive_control			AdaptiveControl
)with alias='MillingTechnology', nickname='MillingTechnology', version=true;


CREATE CLASS IF NOT EXISTS su_parameters : GeometricRepresentationItem (
 	a			double,
	alpha			double,
	b			double,
	beta			double,
	c			double,
	gamma			double
)with alias='SuParameters', nickname='SuParameters', version=true;


CREATE CLASS IF NOT EXISTS through_profile_floor : Task2 (
  )with alias='ThroughProfileFloor', nickname='ThroughProfileFloor', version=true;


CREATE CLASS IF NOT EXISTS kinematic_link_representation_relation : Task2 (
	topological_aspects			KinematicLink,
	geometric_aspects			KinematicLinkRepresentation
)with alias='KinematicLinkRepresentationRelation', nickname='KinematicLinkRepresentationRelation', version=true;


CREATE CLASS IF NOT EXISTS polyline : BoundedCurve (
 	points			CartesianPoint[?]
)with alias='Polyline', nickname='Polyline', version=true;


CREATE CLASS IF NOT EXISTS kinematic_link_representation_association : RepresentationRelationship (
 	representation_relationship_rep_1			KinematicLinkRepresentation
)with alias='KinematicLinkRepresentationAssociation', nickname='KinematicLinkRepresentationAssociation', version=true;


CREATE CLASS IF NOT EXISTS machine_size : Task2 (
	machine_length			double,
	machine_width			double,
	machine_height			double
)with alias='MachineSize', nickname='MachineSize', version=true;


CREATE CLASS IF NOT EXISTS collet : ElementCapability (
 	collet_type			text,
	minimum_part_diameter			double,
	maximum_part_diameter			double
)with alias='Collet', nickname='Collet', version=true;


CREATE CLASS IF NOT EXISTS address : Task2 (
	internal_location			text,
	street_number			text,
	street			text,
	postal_box			text,
	town			text,
	region			text,
	postal_code			text,
	country			text,
	facsimile_number			text,
	telephone_number			text,
	electronic_mail_address			text,
	telex_number			text
)with alias='Address', nickname='Address', version=true;


CREATE CLASS IF NOT EXISTS process_model : Task2 (
	ini_data_file			text,
	its_type			text
)with alias='ProcessModel', nickname='ProcessModel', version=true;


CREATE CLASS IF NOT EXISTS specification_usage_constraint : Task2 (
	element			text,
	class_id			text
)with alias='SpecificationUsageConstraint', nickname='SpecificationUsageConstraint', version=true;


CREATE CLASS IF NOT EXISTS tolerances : Task2 (
	chordal_tolerance			double,
	scallop_height			double
)with alias='Tolerances', nickname='Tolerances', version=true;


CREATE CLASS IF NOT EXISTS cutting_component : Task2 (
	tool_offset_length			double,
	its_material			Material,
	technological_data			CuttingEdgeTechnologicalData,
	expected_tool_life			double,
	its_technology			Technology
)with alias='CuttingComponent', nickname='CuttingComponent', version=true;


CREATE CLASS IF NOT EXISTS index_table : NcFunction (
 	its_index			int
)with alias='IndexTable', nickname='IndexTable', version=true;


CREATE CLASS IF NOT EXISTS local_time : Task2 (
	hour_component			int,
	minute_component			int,
	second_component			double,
	zone			CoordinatedUniversalTimeOffset
)with alias='LocalTime', nickname='LocalTime', version=true;


CREATE CLASS IF NOT EXISTS circular_offset : Task2 (
	angular_offset			double,
	index			int
)with alias='CircularOffset', nickname='CircularOffset', version=true;


CREATE CLASS IF NOT EXISTS contour_bidirectional : Two5dMillingStrategy (
 	feed_direction			Direction,
	stepover_direction			LeftOrRight,
	rotation_direction			RotDirection,
	spiral_cutmode			CutmodeType
)with alias='ContourBidirectional', nickname='ContourBidirectional', version=true;


CREATE CLASS IF NOT EXISTS poly_loop : Loop (
 	polygon			CartesianPoint[?]
)with alias='PolyLoop', nickname='PolyLoop', version=true;


CREATE CLASS IF NOT EXISTS mapped_item : RepresentationItem (
 	mapping_source			RepresentationMap,
	mapping_target			RepresentationItem
)with alias='MappedItem', nickname='MappedItem', version=true;


CREATE CLASS IF NOT EXISTS channel : Task2 (
	its_id			text
)with alias='Channel', nickname='Channel', version=true;


CREATE CLASS IF NOT EXISTS process_model_list : Task2 (
	its_list			ProcessModel[?]
)with alias='ProcessModelList', nickname='ProcessModelList', version=true;


CREATE CLASS IF NOT EXISTS emission_property : Task2 (
	emission_type			text,
	weight			double
)with alias='EmissionProperty', nickname='EmissionProperty', version=true;


CREATE CLASS IF NOT EXISTS founded_item : Task2 (
  )with alias='FoundedItem', nickname='FoundedItem', version=true;


typedef TranslationalRangeMeasure = morph <
	LengthMeasure,
	UnlimitedRange
> /** onerror(continue,"already exist") **/ ;


typedef RotationalRangeMeasure = morph <
	PlaneAngleMeasure,
	UnlimitedRange
> /** onerror(continue,"already exist") **/ ;


typedef ProfileSelect = morph <
	ThroughProfileFloor,
	ProfileFloor
> /** onerror(continue,"already exist") **/ ;


typedef AngleOrLength = morph <
	PlaneAngleMeasure,
	LengthMeasure
> /** onerror(continue,"already exist") **/ ;


typedef FoundedItemSelect = morph <
	FoundedItem,
	RepresentationItem
> /** onerror(continue,"already exist") **/ ;


typedef VectorOrDirection = morph <
	Vector,
	Direction
> /** onerror(continue,"already exist") **/ ;


typedef TrimmingSelect = morph <
	CartesianPoint,
	ParameterValue
> /** onerror(continue,"already exist") **/ ;


typedef ToleranceSelect = morph <
	PlusMinusValue,
	LimitsAndFits
> /** onerror(continue,"already exist") **/ ;


typedef Rvalue = morph <
	NcConstant,
	NcVariable
> /** onerror(continue,"already exist") **/ ;


CREATE CLASS IF NOT EXISTS specification : Task2 (
	constraint			SpecificationUsageConstraint[?],
	specification_id			text,
	specification_description			text,
	specification_class			text
)with alias='Specification', nickname='Specification', version=true;


CREATE CLASS IF NOT EXISTS device_id : Task2 (
    id    varchar,
	model_name			text,
	serial_number			text,
	manufacturer			text,
	date_manufactured			CalendarDate
)with alias='DeviceId', nickname='DeviceId', version=true;


CREATE CLASS IF NOT EXISTS milling_tool_body : ToolBody (
 	dimension			ToolDimension,
	number_of_teeth			int,
	hand_of_cut			Hand,
	coolant_through_tool			boolean,
	pilot_length			double
)with alias='MillingToolBody', nickname='MillingToolBody', version=true;


CREATE CLASS IF NOT EXISTS drill : MillingToolBody (
   )with alias='Drill', nickname='Drill', version=true;


CREATE CLASS IF NOT EXISTS reamer : MillingToolBody (
   )with alias='Reamer', nickname='Reamer', version=true;


CREATE CLASS IF NOT EXISTS freeform_strategy : Task2 (
	pathmode			PathmodeType,
	cutmode			CutmodeType,
	its_milling_tolerances			Tolerances,
	stepover			double
)with alias='FreeformStrategy', nickname='FreeformStrategy', version=true;


CREATE CLASS IF NOT EXISTS leading_line_strategy : FreeformStrategy (
 	its_line			BoundedCurve
)with alias='LeadingLineStrategy', nickname='LeadingLineStrategy', version=true;


CREATE CLASS IF NOT EXISTS application_context_element : Task2 (
    name    varchar,
	frame_of_reference			ApplicationContext
)with alias='ApplicationContextElement', nickname='ApplicationContextElement', version=true;


CREATE CLASS IF NOT EXISTS library_context : ApplicationContextElement (
 	library_reference			text
)with alias='LibraryContext', nickname='LibraryContext', version=true;


CREATE CLASS IF NOT EXISTS sensor : ElementCapability (
 	device_id			DeviceId
)with alias='Sensor', nickname='Sensor', version=true;


CREATE CLASS IF NOT EXISTS vertex_point : Vertex (
 	vertex_geometry			Point
)with alias='VertexPoint', nickname='VertexPoint', version=true;


CREATE CLASS IF NOT EXISTS t_vertex : VertexPoint (
 	north_link			TLink,
	west_link			TLink,
	south_link			TLink,
	east_link			TLink
)with alias='TVertex', nickname='TVertex', version=true;


CREATE CLASS IF NOT EXISTS plane_cc_strategy : FreeformStrategy (
 	its_plane_normal			Direction
)with alias='PlaneCcStrategy', nickname='PlaneCcStrategy', version=true;


CREATE CLASS IF NOT EXISTS t_node : TopologicalRepresentationItem (
 	vertex			TVertex,
	control_point			RationalPoint
)with alias='TNode', nickname='TNode', version=true;


CREATE CLASS IF NOT EXISTS tapered_reamer : Reamer (
 	taper_angle			double
)with alias='TaperedReamer', nickname='TaperedReamer', version=true;


CREATE CLASS IF NOT EXISTS plane_cl_strategy : FreeformStrategy (
 	its_plane_normal			Direction
)with alias='PlaneClStrategy', nickname='PlaneClStrategy', version=true;


CREATE CLASS IF NOT EXISTS spindle : ElementCapability (
 	spindle_power			double,
	spindle_name			text,
	spindle_manufacturer			text,
	manufacturer_model_designation			text,
	range			SpindleRange[?]
)with alias='Spindle', nickname='Spindle', version=true;


CREATE CLASS IF NOT EXISTS tool_spindle : Spindle (
 	spindle_tool_holder_style_designation			text,
	coolant_through_spindle			boolean
)with alias='ToolSpindle', nickname='ToolSpindle', version=true;


CREATE CLASS IF NOT EXISTS person_and_address : Task2 (
	its_person			Person,
	its_address			Address
)with alias='PersonAndAddress', nickname='PersonAndAddress', version=true;


CREATE CLASS IF NOT EXISTS work_spindle : Spindle (
 	spindle_nose_designation			text,
	spindle_bore_diameter			double,
	round_bar_stock_diameter			double,
	through_hole_diameter			double,
	hex_bar_stock_capacity			double,
	chuck			Chuck
)with alias='WorkSpindle', nickname='WorkSpindle', version=true;


CREATE CLASS IF NOT EXISTS milling_cutter : MillingToolBody (
   )with alias='MillingCutter', nickname='MillingCutter', version=true;


CREATE CLASS IF NOT EXISTS dovetail_mill : MillingCutter (
 	included_angle			double
)with alias='DovetailMill', nickname='DovetailMill', version=true;


CREATE CLASS IF NOT EXISTS approach_retract_strategy : Task2 (
	tool_orientation			Direction
)with alias='ApproachRetractStrategy', nickname='ApproachRetractStrategy', version=true;


CREATE CLASS IF NOT EXISTS air_strategy : ApproachRetractStrategy (
   )with alias='AirStrategy', nickname='AirStrategy', version=true;


CREATE CLASS IF NOT EXISTS ap_retract_tangent : AirStrategy (
 	radius			double
)with alias='ApRetractTangent', nickname='ApRetractTangent', version=true;


CREATE CLASS IF NOT EXISTS machining_capability : Task2 (
	capability			MachiningCapabilityProfile,
	machining_accuracy			text,
	description			text,
	machining_size			MachiningSize
)with alias='MachiningCapability', nickname='MachiningCapability', version=true;


CREATE CLASS IF NOT EXISTS user_defined_tool : MillingToolBody (
 	identifier			text
)with alias='UserDefinedTool', nickname='UserDefinedTool', version=true;


CREATE CLASS IF NOT EXISTS work_table : ElementCapability (
 	rotatable			boolean,
	workpiece_weight			double,
	fixture_style			FixtureStyle,
	chuck			Chuck,
	t_slot			TSlot
)with alias='WorkTable', nickname='WorkTable', version=true;


CREATE CLASS IF NOT EXISTS circular_work_table : WorkTable (
 	table_diameter			double
)with alias='CircularWorkTable', nickname='CircularWorkTable', version=true;


CREATE CLASS IF NOT EXISTS three_axes_tilted_tool : ToolDirectionForMilling (
 	its_tool_direction			Direction
)with alias='ThreeAxesTiltedTool', nickname='ThreeAxesTiltedTool', version=true;


CREATE CLASS IF NOT EXISTS assignment : ProgramStructure (
 	its_lvalue			NcVariable,
	its_rvalue			Rvalue
)with alias='Assignment', nickname='Assignment', version=true;


CREATE CLASS IF NOT EXISTS b_spline_surface : BoundedSurface (
 	u_degree			int,
	v_degree			int,
	control_points_list			CartesianPoint[?],
	surface_form			BSplineSurfaceForm,
	u_closed			Logical,
	v_closed			Logical,
	self_intersect			Logical
)with alias='BSplineSurface', nickname='BSplineSurface', version=true;


CREATE CLASS IF NOT EXISTS uniform_surface : BSplineSurface (
   )with alias='UniformSurface', nickname='UniformSurface', version=true;


CREATE CLASS IF NOT EXISTS placement : GeometricRepresentationItem (
 	location			CartesianPoint
)with alias='Placement', nickname='Placement', version=true;


CREATE CLASS IF NOT EXISTS axis1_placement : Placement (
 	axis			Direction
)with alias='Axis1Placement', nickname='Axis1Placement', version=true;


CREATE CLASS IF NOT EXISTS standard_machining_process : Task2 (
	process_description			text,
	type_of_machining			text,
	power			double,
	electric_power			double,
	process_emission			EmissionProperty[?]
)with alias='StandardMachiningProcess', nickname='StandardMachiningProcess', version=true;


CREATE CLASS IF NOT EXISTS b_spline_curve : BoundedCurve (
 	degree			int,
	control_points_list			CartesianPoint[?],
	curve_form			BSplineCurveForm,
	closed_curve			Logical,
	self_intersect			Logical
)with alias='BSplineCurve', nickname='BSplineCurve', version=true;


CREATE CLASS IF NOT EXISTS rational_b_spline_curve : BSplineCurve (
 	weights_data			Double[?]
)with alias='RationalBSplineCurve', nickname='RationalBSplineCurve', version=true;


CREATE CLASS IF NOT EXISTS comparison_expression : BooleanExpression (
 	operand1			NcVariable,
	operand2			Rvalue
)with alias='ComparisonExpression', nickname='ComparisonExpression', version=true;


CREATE CLASS IF NOT EXISTS comparison_greater : ComparisonExpression (
   )with alias='ComparisonGreater', nickname='ComparisonGreater', version=true;


CREATE CLASS IF NOT EXISTS toolpath_speed : Task2 (
	speed			BSplineCurve
)with alias='ToolpathSpeed', nickname='ToolpathSpeed', version=true;


CREATE CLASS IF NOT EXISTS endmill : MillingCutter (
   )with alias='Endmill', nickname='Endmill', version=true;


CREATE CLASS IF NOT EXISTS ball_endmill : Endmill (
   )with alias='BallEndmill', nickname='BallEndmill', version=true;


CREATE CLASS IF NOT EXISTS face_bound : TopologicalRepresentationItem (
 	bound			Loop,
	orientation			boolean
)with alias='FaceBound', nickname='FaceBound', version=true;


CREATE CLASS IF NOT EXISTS center_drill : MillingToolBody (
   )with alias='CenterDrill', nickname='CenterDrill', version=true;


CREATE CLASS IF NOT EXISTS tap : MillingToolBody (
   )with alias='Tap', nickname='Tap', version=true;


CREATE CLASS IF NOT EXISTS combined_drill_and_tap : Tap (
 	drill_length			double
)with alias='CombinedDrillAndTap', nickname='CombinedDrillAndTap', version=true;


CREATE CLASS IF NOT EXISTS milling_machine_functions : MachineFunctions (
 	coolant			boolean,
	coolant_pressure			double,
	mist			boolean,
	through_spindle_coolant			boolean,
	through_pressure			double,
	axis_clamping			Text[?],
	chip_removal			boolean,
	oriented_spindle_stop			Direction,
	its_process_model			ProcessModelList,
	other_functions			PropertyParameter[?]
)with alias='MillingMachineFunctions', nickname='MillingMachineFunctions', version=true;

CREATE CLASS IF NOT EXISTS approval : Task2 (
	status			ApprovalStatus,
	level			text
)with alias='Approval', nickname='Approval', version=true;

CREATE CLASS IF NOT EXISTS date_and_time : Task2 (
	date_component			Date,
	time_component			LocalTime
)with alias='DateAndTime', nickname='DateAndTime', version=true;


CREATE CLASS IF NOT EXISTS product_context : ApplicationContextElement (
 	discipline_type			text
)with alias='ProductContext', nickname='ProductContext', version=true;


CREATE CLASS IF NOT EXISTS tool_breakage : Sensor (
   )with alias='ToolBreakage', nickname='ToolBreakage', version=true;


CREATE CLASS IF NOT EXISTS right_circular_cylinder : GeometricRepresentationItem (
 	position			Axis1Placement,
	height			double,
	radius			double
)with alias='RightCircularCylinder', nickname='RightCircularCylinder', version=true;


CREATE CLASS IF NOT EXISTS tapered_tap : Tap (
 	taper_angle			double
)with alias='TaperedTap', nickname='TaperedTap', version=true;


CREATE CLASS IF NOT EXISTS quasi_uniform_surface : BSplineSurface (
   )with alias='QuasiUniformSurface', nickname='QuasiUniformSurface', version=true;


CREATE CLASS IF NOT EXISTS comparison_less : ComparisonExpression (
   )with alias='ComparisonLess', nickname='ComparisonLess', version=true;


CREATE CLASS IF NOT EXISTS part_probe : Sensor (
 	probe_type			ProbeType,
	dimensionality			SensorDimensionality,
	setting_time			double
)with alias='PartProbe', nickname='PartProbe', version=true;


CREATE CLASS IF NOT EXISTS quasi_uniform_curve : BSplineCurve (
   )with alias='QuasiUniformCurve', nickname='QuasiUniformCurve', version=true;


CREATE CLASS IF NOT EXISTS bullnose_endmill : Endmill (
   )with alias='BullnoseEndmill', nickname='BullnoseEndmill', version=true;


CREATE CLASS IF NOT EXISTS unload_tool : NcFunction (
 	its_tool			MachiningTool
)with alias='UnloadTool', nickname='UnloadTool', version=true;


CREATE CLASS IF NOT EXISTS plunge_strategy : ApproachRetractStrategy (
   )with alias='PlungeStrategy', nickname='PlungeStrategy', version=true;


CREATE CLASS IF NOT EXISTS plunge_helix : PlungeStrategy (
 	radius			double,
	angle			double
)with alias='PlungeHelix', nickname='PlungeHelix', version=true;

CREATE CLASS IF NOT EXISTS machine_element_relationship : Task2 (
	class_yyy			text,
	former_element			MachineToolElement,
	latter_element			MachineToolElement
)with alias='MachineElementRelationship', nickname='MachineElementRelationship', version=true;

CREATE CLASS IF NOT EXISTS surface_of_linear_extrusion : SweptSurface (
 	extrusion_axis			Vector
)with alias='SurfaceOfLinearExtrusion', nickname='SurfaceOfLinearExtrusion', version=true;


CREATE CLASS IF NOT EXISTS plunge_ramp : PlungeStrategy (
 	angle			double
)with alias='PlungeRamp', nickname='PlungeRamp', version=true;


CREATE CLASS IF NOT EXISTS uniform_curve : BSplineCurve (
   )with alias='UniformCurve', nickname='UniformCurve', version=true;


CREATE CLASS IF NOT EXISTS bezier_curve : BSplineCurve (
   )with alias='BezierCurve', nickname='BezierCurve', version=true;


CREATE CLASS IF NOT EXISTS kinematic_structure : Task2 (
	joints			KinematicJoint[?]
)with alias='KinematicStructure', nickname='KinematicStructure', version=true;


CREATE CLASS IF NOT EXISTS trimmed_curve : BoundedCurve (
 	basis_curve			Curve,
	trim_1			TrimmingSelect[?],
	trim_2			TrimmingSelect[?],
	sense_agreement			boolean,
	master_representation			TrimmingPreference
)with alias='TrimmedCurve', nickname='TrimmedCurve', version=true;


CREATE CLASS IF NOT EXISTS pcurve : Curve (
 	basis_surface			Surface,
	reference_to_curve			DefinitionalRepresentation
)with alias='Pcurve', nickname='Pcurve', version=true;


CREATE CLASS IF NOT EXISTS bounded_pcurve : Pcurve (
   )with alias='BoundedPcurve', nickname='BoundedPcurve', version=true;


CREATE CLASS IF NOT EXISTS spade_drill : Drill (
   )with alias='SpadeDrill', nickname='SpadeDrill', version=true;


CREATE CLASS IF NOT EXISTS product_definition_context : ApplicationContextElement (
 	life_cycle_stage			text
)with alias='ProductDefinitionContext', nickname='ProductDefinitionContext', version=true;


CREATE CLASS IF NOT EXISTS rectangular_work_table : WorkTable (
 	table_width			double,
	table_length			double
)with alias='RectangularWorkTable', nickname='RectangularWorkTable', version=true;


CREATE CLASS IF NOT EXISTS threaded_spindle : ToolSpindle (
 	spindle_thread_diameter			double,
	spindle_thread_pitch			double,
	spindle_thread_form			text
)with alias='ThreadedSpindle', nickname='ThreadedSpindle', version=true;


CREATE CLASS IF NOT EXISTS load_tool : NcFunction (
 	its_tool			MachiningTool
)with alias='LoadTool', nickname='LoadTool', version=true;


CREATE CLASS IF NOT EXISTS threading_tool : MillingToolBody (
   )with alias='ThreadingTool', nickname='ThreadingTool', version=true;


CREATE CLASS IF NOT EXISTS comparison_greater_equal : ComparisonExpression (
   )with alias='ComparisonGreaterEqual', nickname='ComparisonGreaterEqual', version=true;


CREATE CLASS IF NOT EXISTS composite_curve : BoundedCurve (
 	segments			CompositeCurveSegment[?],
	self_intersect			Logical
)with alias='CompositeCurve', nickname='CompositeCurve', version=true;


CREATE CLASS IF NOT EXISTS environmental_evaluation : Task2 (
	evaluation_name			text,
	power_in_idling			double,
	time_for_warming_up			double,
	power_for_standard_machining			StandardMachiningProcess[?]
)with alias='EnvironmentalEvaluation', nickname='EnvironmentalEvaluation', version=true;


CREATE CLASS IF NOT EXISTS in_process_geometry : Task2 (
	as_is			AdvancedBrepShapeRepresentation,
	to_be			AdvancedBrepShapeRepresentation,
	removal			AdvancedBrepShapeRepresentation
)with alias='InProcessGeometry', nickname='InProcessGeometry', version=true;


CREATE CLASS IF NOT EXISTS woodruff_keyseat_mill : MillingCutter (
 	cutter_width			double
)with alias='WoodruffKeyseatMill', nickname='WoodruffKeyseatMill', version=true;


CREATE CLASS IF NOT EXISTS wait_for_mark : NcFunction (
 	its_channel			Channel
)with alias='WaitForMark', nickname='WaitForMark', version=true;


CREATE CLASS IF NOT EXISTS kinematic_pair : ItemDefinedTransformation (
 	joint			KinematicJoint
)with alias='KinematicPair', nickname='KinematicPair', version=true;

CREATE CLASS IF NOT EXISTS element_link_association : Task2 (
	element			MachineToolElement,
	machine_link			KinematicLink
)with alias='ElementLinkAssociation', nickname='ElementLinkAssociation', version=true;

CREATE CLASS IF NOT EXISTS face_outer_bound : FaceBound (
   )with alias='FaceOuterBound', nickname='FaceOuterBound', version=true;


CREATE CLASS IF NOT EXISTS twist_drill : Drill (
   )with alias='TwistDrill', nickname='TwistDrill', version=true;


CREATE CLASS IF NOT EXISTS tapered_drill : TwistDrill (
 	taper_angle			double
)with alias='TaperedDrill', nickname='TaperedDrill', version=true;


CREATE CLASS IF NOT EXISTS combined_drill_and_reamer : Reamer (
 	drill_length			double
)with alias='CombinedDrillAndReamer', nickname='CombinedDrillAndReamer', version=true;


CREATE CLASS IF NOT EXISTS revolute_pair : KinematicPair (
   )with alias='RevolutePair', nickname='RevolutePair', version=true;


CREATE CLASS IF NOT EXISTS surface_of_revolution : SweptSurface (
 	axis_position			Axis1Placement
)with alias='SurfaceOfRevolution', nickname='SurfaceOfRevolution', version=true;


CREATE CLASS IF NOT EXISTS face : TopologicalRepresentationItem (
 	bounds			FaceBound[?]
)with alias='Face', nickname='Face', version=true;


CREATE CLASS IF NOT EXISTS face_surface : Face (
 	face_geometry			Surface,
	same_sense			boolean
)with alias='FaceSurface', nickname='FaceSurface', version=true;


CREATE CLASS IF NOT EXISTS oriented_face : Face (
 	face_element			Face,
	orientation			boolean
)with alias='OrientedFace', nickname='OrientedFace', version=true;


CREATE CLASS IF NOT EXISTS comparison_not_equal : ComparisonExpression (
   )with alias='ComparisonNotEqual', nickname='ComparisonNotEqual', version=true;


CREATE CLASS IF NOT EXISTS ap_retract_angle : AirStrategy (
 	angle			double,
	travel_length			double
)with alias='ApRetractAngle', nickname='ApRetractAngle', version=true;


CREATE CLASS IF NOT EXISTS counterbore : MillingToolBody (
   )with alias='Counterbore', nickname='Counterbore', version=true;


CREATE CLASS IF NOT EXISTS product : Task2 (
    id    varchar,
    name    varchar,
	description			text,
	frame_of_reference			ProductContext[?]
)with alias='Product', nickname='Product', version=true;


CREATE CLASS IF NOT EXISTS countersink : MillingToolBody (
 	countersink_radius			double
)with alias='Countersink', nickname='Countersink', version=true;


CREATE CLASS IF NOT EXISTS comparison_equal : ComparisonExpression (
   )with alias='ComparisonEqual', nickname='ComparisonEqual', version=true;


CREATE CLASS IF NOT EXISTS prismatic_pair : KinematicPair (
   )with alias='PrismaticPair', nickname='PrismaticPair', version=true;


CREATE CLASS IF NOT EXISTS tapered_spindle : ToolSpindle (
 	spindle_taper_designation			text
)with alias='TaperedSpindle', nickname='TaperedSpindle', version=true;


CREATE CLASS IF NOT EXISTS straight_spindle : ToolSpindle (
 	spindle_bore_depth			double,
	spindle_bore_diameter			double
)with alias='StraightSpindle', nickname='StraightSpindle', version=true;


CREATE CLASS IF NOT EXISTS comparison_less_equal : ComparisonExpression (
   )with alias='ComparisonLessEqual', nickname='ComparisonLessEqual', version=true;


CREATE CLASS IF NOT EXISTS t_slot_mill : MillingCutter (
 	cutting_thickness			double
)with alias='TSlotMill', nickname='TSlotMill', version=true;


CREATE CLASS IF NOT EXISTS boring_tool : MillingToolBody (
   )with alias='BoringTool', nickname='BoringTool', version=true;


CREATE CLASS IF NOT EXISTS backside_countersink : Countersink (
   )with alias='BacksideCountersink', nickname='BacksideCountersink', version=true;


CREATE CLASS IF NOT EXISTS bezier_surface : BSplineSurface (
   )with alias='BezierSurface', nickname='BezierSurface', version=true;


CREATE CLASS IF NOT EXISTS plunge_zigzag : PlungeStrategy (
 	angle			double,
	width			double
)with alias='PlungeZigzag', nickname='PlungeZigzag', version=true;


CREATE CLASS IF NOT EXISTS range_of_motion : Task2 (
	axis_name			text,
	motion_range			AngleOrLength
)with alias='RangeOfMotion', nickname='RangeOfMotion', version=true;


CREATE CLASS IF NOT EXISTS spherical_pair : KinematicPair (
   )with alias='SphericalPair', nickname='SphericalPair', version=true;


CREATE CLASS IF NOT EXISTS b_spline_curve_with_knots : BSplineCurve (
 	knot_multiplicities			Int[?],
	knots			Double[?],
	knot_spec			KnotType
)with alias='BSplineCurveWithKnots', nickname='BSplineCurveWithKnots', version=true;


CREATE CLASS IF NOT EXISTS tool_setting : Sensor (
 	probe_type			ProbeType,
	measuring_radius			boolean,
	measuring_length			boolean,
	measure_time			double
)with alias='ToolSetting', nickname='ToolSetting', version=true;


CREATE CLASS IF NOT EXISTS axis2_placement_3d : Placement (
 	axis			Direction,
	ref_direction			Direction
)with alias='Axis2Placement3d', nickname='Axis2Placement3d', version=true;


CREATE CLASS IF NOT EXISTS rational_b_spline_surface : BSplineSurface (
 	weights_data			double[?]
)with alias='RationalBSplineSurface', nickname='RationalBSplineSurface', version=true;

CREATE CLASS IF NOT EXISTS installation : Task2 (
	weight			double,
	size			MachineSize,
	electrical			Electrical,
	air_pressure_requirement			double,
	water_flow_rate			double,
	hydraulics			Hydraulics
)with alias='Installation', nickname='Installation', version=true;

CREATE CLASS IF NOT EXISTS tapered_endmill : Endmill (
 	taper_angle			double
)with alias='TaperedEndmill', nickname='TaperedEndmill', version=true;


CREATE CLASS IF NOT EXISTS cylindrical_pair : KinematicPair (
   )with alias='CylindricalPair', nickname='CylindricalPair', version=true;


CREATE CLASS IF NOT EXISTS partial_area_definition : Task2 (
	effective_length			double,
	placement			Axis2Placement3d,
	maximum_length			double
)with alias='PartialAreaDefinition', nickname='PartialAreaDefinition', version=true;


CREATE CLASS IF NOT EXISTS cutting_tool : MachiningTool (
 	its_tool_body			ToolBody,
	its_cutting_edge			CuttingComponent[?],
	overall_assembly_length			double
)with alias='CuttingTool', nickname='CuttingTool', version=true;


CREATE CLASS IF NOT EXISTS b_spline_surface_with_knots : BSplineSurface (
 	u_multiplicities			Int[?],
	v_multiplicities			Int[?],
	u_knots			Double[?],
	v_knots			Double[?],
	knot_spec			KnotType
)with alias='BSplineSurfaceWithKnots', nickname='BSplineSurfaceWithKnots', version=true;


CREATE CLASS IF NOT EXISTS toleranced_length_measure : Task2 (
	theoretical_size			double,
	implicit_tolerance			ToleranceSelect
)with alias='TolerancedLengthMeasure', nickname='TolerancedLengthMeasure', version=true;


CREATE CLASS IF NOT EXISTS product_concept_context : ApplicationContextElement (
 	market_segment_type			text
)with alias='ProductConceptContext', nickname='ProductConceptContext', version=true;

CREATE CLASS IF NOT EXISTS spherical_hole_bottom : BlindBottomCondition (
 	radius			TolerancedLengthMeasure
)with alias='SphericalHoleBottom', nickname='SphericalHoleBottom', version=true;

CREATE CLASS IF NOT EXISTS milling_cutting_tool : CuttingTool (
 	direction_for_spindle_orientation			Direction,
	tool_holder_diameter_for_spindle_orientation			double
)with alias='MillingCuttingTool', nickname='MillingCuttingTool', version=true;


CREATE CLASS IF NOT EXISTS pallet : WorkTable (
 	random_access			boolean,
	table_width			double,
	table_length			double,
	number_of_pallet			double,
	storage_configuration			PalletStorageConfiguration,
	pallet_change_time_minimum			double,
	pallet_change_time_maximum			double,
	pallet_type			text
)with alias='Pallet', nickname='Pallet', version=true;


CREATE CLASS IF NOT EXISTS advanced_face : FaceSurface (
   )with alias='AdvancedFace', nickname='AdvancedFace', version=true;


CREATE CLASS IF NOT EXISTS thread_mill : MillingCutter (
   )with alias='ThreadMill', nickname='ThreadMill', version=true;
   
CREATE CLASS IF NOT EXISTS TNodeV4 : TNode (
 	north_node			TNodeV4,
	west_node			TNodeV4,
	south_node			TNodeV4,
	east_node			TNodeV4
)with alias='TNodeV4', nickname='TNodeV4', version=true;

CREATE CLASS IF NOT EXISTS side_mill : MillingCutter (
 	cutter_width			double
)with alias='SideMill', nickname='SideMill', version=true;


CREATE CLASS IF NOT EXISTS t_connect : TopologicalRepresentationItem (
 	nodes			TNode[?]
)with alias='TConnect', nickname='TConnect', version=true;


CREATE CLASS IF NOT EXISTS uv_strategy : FreeformStrategy (
 	forward_direction			Direction,
	sideward_direction			Direction
)with alias='UvStrategy', nickname='UvStrategy', version=true;


CREATE CLASS IF NOT EXISTS facemill : MillingCutter (
   )with alias='Facemill', nickname='Facemill', version=true;


CREATE CLASS IF NOT EXISTS backside_counterbore : Counterbore (
   )with alias='BacksideCounterbore', nickname='BacksideCounterbore', version=true;


CREATE CLASS IF NOT EXISTS block : GeometricRepresentationItem (
 	position			Axis2Placement3d,
	x			double,
	y			double,
	z			double
)with alias='Block', nickname='Block', version=true;


CREATE CLASS IF NOT EXISTS t_face : Face (
   )with alias='TFace', nickname='TFace', version=true;


CREATE CLASS IF NOT EXISTS plunge_toolaxis : PlungeStrategy (
   )with alias='PlungeToolaxis', nickname='PlungeToolaxis', version=true;


CREATE CLASS IF NOT EXISTS pair_actuator : Task2 (
	actuated_pair			KinematicPair,
    name    varchar
)with alias='PairActuator', nickname='PairActuator', version=true;


typedef ToolpathSpeedprofile = morph <
	ToolpathSpeed,
	PositiveRatioMeasure,
	SpeedName
> /** onerror(continue,"already exist") **/ ;


typedef PcurveOrSurface = morph <
	Pcurve,
	Surface
> /** onerror(continue,"already exist") **/ ;


typedef CurveWithSurfaceNormal = morph <
	BoundedPcurve,
	CurveWithNormalVector
> /** onerror(continue,"already exist") **/ ;


typedef BoundingGeometrySelect = morph <
	Block,
	RightCircularCylinder,
	AdvancedBrepShapeRepresentation
> /** onerror(continue,"already exist") **/ ;


typedef RestrictedAreaSelect = morph <
	BoundedSurface,
	BoundingGeometrySelect
> /** onerror(continue,"already exist") **/ ;


typedef RigidPlacement = morph <
	Axis2Placement3d,
	SuParameters
> /** onerror(continue,"already exist") **/ ;


CREATE CLASS IF NOT EXISTS travel_path : Task2 (
	placement			Axis2Placement3d
)with alias='TravelPath', nickname='TravelPath', version=true;

CREATE CLASS IF NOT EXISTS circular_path : TravelPath (
 	radius			TolerancedLengthMeasure
)with alias='CircularPath', nickname='CircularPath', version=true;


CREATE CLASS IF NOT EXISTS complete_circular_path : CircularPath (
   )with alias='CompleteCircularPath', nickname='CompleteCircularPath', version=true;
   
CREATE CLASS IF NOT EXISTS toolpath : Task2 (
	its_priority			boolean,
	its_type			ToolpathType,
	its_speed			ToolpathSpeedprofile,
	its_technology			Technology,
	its_machine_functions			MachineFunctions
)with alias='Toolpath', nickname='Toolpath', version=true;

CREATE CLASS IF NOT EXISTS trajectory : Toolpath (
 	its_direction			boolean
)with alias='Trajectory', nickname='Trajectory', version=true;


CREATE CLASS IF NOT EXISTS cutter_contact_trajectory : Trajectory (
 	basiccurve			CurveWithSurfaceNormal,
	its_toolaxis			BoundedCurve,
	its_contact_type			ContactType
)with alias='CutterContactTrajectory', nickname='CutterContactTrajectory', version=true;


CREATE CLASS IF NOT EXISTS parameterised_path : Toolpath (
   )with alias='ParameterisedPath', nickname='ParameterisedPath', version=true;


CREATE CLASS IF NOT EXISTS connector : ParameterisedPath (
   )with alias='Connector', nickname='Connector', version=true;


CREATE CLASS IF NOT EXISTS conic : Curve (
 	position			Axis2Placement3d
)with alias='Conic', nickname='Conic', version=true;


CREATE CLASS IF NOT EXISTS hyperbola : Conic (
 	semi_axis			double,
	semi_imag_axis			double
)with alias='Hyperbola', nickname='Hyperbola', version=true;


CREATE CLASS IF NOT EXISTS conical_hole_bottom : BlindBottomCondition (
 	tip_angle			double,
	tip_radius			TolerancedLengthMeasure
)with alias='ConicalHoleBottom', nickname='ConicalHoleBottom', version=true;


CREATE CLASS IF NOT EXISTS radiused_pocket_bottom_condition : PocketBottomCondition (
 	floor_radius_center			CartesianPoint,
	floor_radius			TolerancedLengthMeasure
)with alias='RadiusedPocketBottomCondition', nickname='RadiusedPocketBottomCondition', version=true;


CREATE CLASS IF NOT EXISTS flat_slot_end_type : SlotEndType (
 	corner_radius1			TolerancedLengthMeasure,
	corner_radius2			TolerancedLengthMeasure
)with alias='FlatSlotEndType', nickname='FlatSlotEndType', version=true;


CREATE CLASS IF NOT EXISTS flat_with_radius_hole_bottom : BlindBottomCondition (
 	corner_radius			TolerancedLengthMeasure
)with alias='FlatWithRadiusHoleBottom', nickname='FlatWithRadiusHoleBottom', version=true;


CREATE CLASS IF NOT EXISTS profile : Task2 (
	placement			Axis2Placement3d
)with alias='Profile', nickname='Profile', version=true;


CREATE CLASS IF NOT EXISTS open_profile : Profile (
   )with alias='OpenProfile', nickname='OpenProfile', version=true;


CREATE CLASS IF NOT EXISTS connect_direct : Connector (
   )with alias='ConnectDirect', nickname='ConnectDirect', version=true;


CREATE CLASS IF NOT EXISTS product_definition_formation : Task2 (
    id    varchar,
	description			text,
	of_product			Product
)with alias='ProductDefinitionFormation', nickname='ProductDefinitionFormation', version=true;


CREATE CLASS IF NOT EXISTS closed_profile : Profile (
   )with alias='ClosedProfile', nickname='ClosedProfile', version=true;

CREATE CLASS IF NOT EXISTS ngon_profile : ClosedProfile (
 	diameter			TolerancedLengthMeasure,
	number_of_sides			int,
	circumscribed_or_across_flats			boolean
)with alias='NgonProfile', nickname='NgonProfile', version=true;

CREATE CLASS IF NOT EXISTS elementary_surface : Surface (
 	position			Axis2Placement3d
)with alias='ElementarySurface', nickname='ElementarySurface', version=true;


CREATE CLASS IF NOT EXISTS spherical_surface : ElementarySurface (
 	radius			double
)with alias='SphericalSurface', nickname='SphericalSurface', version=true;


CREATE CLASS IF NOT EXISTS connected_face_set : TopologicalRepresentationItem (
 	cfs_faces			Face[?]
)with alias='ConnectedFaceSet', nickname='ConnectedFaceSet', version=true;


CREATE CLASS IF NOT EXISTS open_shell : ConnectedFaceSet (
   )with alias='OpenShell', nickname='OpenShell', version=true;


CREATE CLASS IF NOT EXISTS oriented_open_shell : OpenShell (
 	open_shell_element			OpenShell,
	orientation			boolean
)with alias='OrientedOpenShell', nickname='OrientedOpenShell', version=true;


CREATE CLASS IF NOT EXISTS rectangular_closed_profile : ClosedProfile (
 	profile_width			TolerancedLengthMeasure,
	profile_length			TolerancedLengthMeasure
)with alias='RectangularClosedProfile', nickname='RectangularClosedProfile', version=true;

CREATE CLASS IF NOT EXISTS woodruff_slot_end_type : SlotEndType (
 	radius			TolerancedLengthMeasure
)with alias='WoodruffSlotEndType', nickname='WoodruffSlotEndType', version=true;

CREATE CLASS IF NOT EXISTS approach_lift_path : ParameterisedPath (
 	fix_point			CartesianPoint,
	fix_point_dir			Direction
)with alias='ApproachLiftPath', nickname='ApproachLiftPath', version=true;


CREATE CLASS IF NOT EXISTS ap_lift_path_angle : ApproachLiftPath (
 	angle			double,
	benddist			double
)with alias='ApLiftPathAngle', nickname='ApLiftPathAngle', version=true;


CREATE CLASS IF NOT EXISTS simple_pair_range : Task2 (
	applies_to_pair			KinematicPair
)with alias='SimplePairRange', nickname='SimplePairRange', version=true;


CREATE CLASS IF NOT EXISTS spherical_pair_range : SimplePairRange (
 	simple_pair_range_applies_to_pair			SphericalPair,
	lower_limit_yaw			RotationalRangeMeasure,
	upper_limit_yaw			RotationalRangeMeasure,
	lower_limit_pitch			RotationalRangeMeasure,
	upper_limit_pitch			RotationalRangeMeasure,
	lower_limit_roll			RotationalRangeMeasure,
	upper_limit_roll			RotationalRangeMeasure
)with alias='SphericalPairRange', nickname='SphericalPairRange', version=true;

CREATE CLASS IF NOT EXISTS linear_path : TravelPath (
 	distance			TolerancedLengthMeasure,
	its_direction			Direction
)with alias='LinearPath', nickname='LinearPath', version=true;

CREATE CLASS IF NOT EXISTS parabola : Conic (
 	focal_dist			double
)with alias='Parabola', nickname='Parabola', version=true;

CREATE CLASS IF NOT EXISTS positioning_capability : Task2 (
	maximum_range_of_motion			RangeOfMotion[?],
	maximum_displacement_error_of_linear_axis			double,
	maximum_repeatability_error_of_linear_axis			double
)with alias='PositioningCapability', nickname='PositioningCapability', version=true;

CREATE CLASS IF NOT EXISTS cutter_location_trajectory : Trajectory (
 	basiccurve			BoundedCurve,
	its_toolaxis			BoundedCurve,
	surface_normal			BoundedCurve
)with alias='CutterLocationTrajectory', nickname='CutterLocationTrajectory', version=true;


CREATE CLASS IF NOT EXISTS general_closed_profile : ClosedProfile (
 	closed_profile_shape			BoundedCurve
)with alias='GeneralClosedProfile', nickname='GeneralClosedProfile', version=true;


CREATE CLASS IF NOT EXISTS general_profile_floor : ProfileFloor (
 	floor			Face
)with alias='GeneralProfileFloor', nickname='GeneralProfileFloor', version=true;

CREATE CLASS IF NOT EXISTS circular_closed_profile : ClosedProfile (
 	diameter			TolerancedLengthMeasure
)with alias='CircularClosedProfile', nickname='CircularClosedProfile', version=true;

CREATE CLASS IF NOT EXISTS linear_profile : OpenProfile (
 	profile_length			NumericParameter
)with alias='LinearProfile', nickname='LinearProfile', version=true;


CREATE CLASS IF NOT EXISTS t_edge : Edge (
 	left_face			TFace,
	right_face			TFace,
	on_boundary			boolean
)with alias='TEdge', nickname='TEdge', version=true;


CREATE CLASS IF NOT EXISTS ellipse : Conic (
 	semi_axis_1			double,
	semi_axis_2			double
)with alias='Ellipse', nickname='Ellipse', version=true;


CREATE CLASS IF NOT EXISTS general_path : TravelPath (
 	swept_path			BoundedCurve
)with alias='GeneralPath', nickname='GeneralPath', version=true;

CREATE CLASS IF NOT EXISTS square_u_profile : OpenProfile (
 	width			TolerancedLengthMeasure,
	first_radius			TolerancedLengthMeasure,
	first_angle			double,
	second_radius			TolerancedLengthMeasure,
	second_angle			double
)with alias='SquareUProfile', nickname='SquareUProfile', version=true;

CREATE CLASS IF NOT EXISTS t_edge_condition : TopologicalRepresentationItem (
 	edge			TEdge,
	boundary_condition			boolean
)with alias='TEdgeCondition', nickname='TEdgeCondition', version=true;


CREATE CLASS IF NOT EXISTS plane : ElementarySurface (
   )with alias='Plane', nickname='Plane', version=true;


CREATE CLASS IF NOT EXISTS circle : Conic (
 	radius			double
)with alias='Circle', nickname='Circle', version=true;


CREATE CLASS IF NOT EXISTS general_profile : OpenProfile (
 	its_profile			BoundedCurve
)with alias='GeneralProfile', nickname='GeneralProfile', version=true;


CREATE CLASS IF NOT EXISTS vee_profile : OpenProfile (
 	profile_radius			TolerancedLengthMeasure,
	profile_angle			double,
	tilt_angle			double
)with alias='VeeProfile', nickname='VeeProfile', version=true;


CREATE CLASS IF NOT EXISTS feedstop : Toolpath (
 	dwell			double
)with alias='Feedstop', nickname='Feedstop', version=true;


CREATE CLASS IF NOT EXISTS axis_trajectory : Trajectory (
 	axis_list			Text[?],
	commands			BoundedCurve[?]
)with alias='AxisTrajectory', nickname='AxisTrajectory', version=true;


CREATE CLASS IF NOT EXISTS machine_tool_specification : MachineTool (
 	machine_class			MachineClass,
	device_id			DeviceId,
	machining_capabilities			MachiningCapability[?],
	measuring_capability			MeasuringCapability,
	location			Locator,
	installation			Installation,
	nc_controller_information			NcController,
	environment			EnvironmentalEvaluation,
	its_elements			MachineToolElement[?]
)with alias='MachineToolSpecification', nickname='MachineToolSpecification', version=true;


CREATE CLASS IF NOT EXISTS closed_shell : ConnectedFaceSet (
   )with alias='ClosedShell', nickname='ClosedShell', version=true;


CREATE CLASS IF NOT EXISTS partial_circular_path : CircularPath (
 	sweep_angle			double
)with alias='PartialCircularPath', nickname='PartialCircularPath', version=true;


CREATE CLASS IF NOT EXISTS connect_secplane : Connector (
 	up_dir			Direction,
	down_dir			Direction
)with alias='ConnectSecplane', nickname='ConnectSecplane', version=true;


CREATE CLASS IF NOT EXISTS ap_lift_path_tangent : ApproachLiftPath (
 	radius			double
)with alias='ApLiftPathTangent', nickname='ApLiftPathTangent', version=true;


CREATE CLASS IF NOT EXISTS toolpath_list : Task2 (
	its_list			Toolpath[?]
)with alias='ToolpathList', nickname='ToolpathList', version=true;


CREATE CLASS IF NOT EXISTS diameter_taper : Task2 (
	final_diameter			TolerancedLengthMeasure
)with alias='DiameterTaper', nickname='DiameterTaper', version=true;


CREATE CLASS IF NOT EXISTS product_definition : Task2 (
    id    varchar,
	description			text,
	formation			ProductDefinitionFormation,
	frame_of_reference			ProductDefinitionContext
)with alias='ProductDefinition', nickname='ProductDefinition', version=true;


CREATE CLASS IF NOT EXISTS prismatic_pair_range : SimplePairRange (
 	simple_pair_range_applies_to_pair			PrismaticPair,
	lower_limit_actual_translation			TranslationalRangeMeasure,
	upper_limit_actual_translation			TranslationalRangeMeasure
)with alias='PrismaticPairRange', nickname='PrismaticPairRange', version=true;

CREATE CLASS IF NOT EXISTS Workpiece : Task2 (
	its_id			text,
	its_material			Material,
	global_tolerance			double,
	its_rawpiece			Workpiece,
	its_geometry			AdvancedBrepShapeRepresentation,
	its_bounding_geometry			BoundingGeometrySelect,
	clamping_positions			CartesianPoint[?]
)with alias='Workpiece', nickname='Workpiece', version=true;

CREATE CLASS IF NOT EXISTS workpiece_setup : Task2 (
	its_workpiece			Workpiece,
	its_origin			Axis2Placement3d,
	its_offset			OffsetVector,
	its_restricted_area			RestrictedAreaSelect,
	its_instructions			SetupInstruction[?]
)with alias='WorkpieceSetup', nickname='WorkpieceSetup', version=true;


CREATE CLASS IF NOT EXISTS revolute_pair_range : SimplePairRange (
 	simple_pair_range_applies_to_pair			RevolutePair,
	lower_limit_actual_rotation			RotationalRangeMeasure,
	upper_limit_actual_rotation			RotationalRangeMeasure
)with alias='RevolutePairRange', nickname='RevolutePairRange', version=true;


CREATE CLASS IF NOT EXISTS oriented_closed_shell : ClosedShell (
 	closed_shell_element			ClosedShell,
	orientation			boolean
)with alias='OrientedClosedShell', nickname='OrientedClosedShell', version=true;

CREATE CLASS IF NOT EXISTS rounded_u_profile : OpenProfile (
 	width			TolerancedLengthMeasure
)with alias='RoundedUProfile', nickname='RoundedUProfile', version=true;

CREATE CLASS IF NOT EXISTS tee_profile : OpenProfile (
 	first_angle			double,
	second_angle			double,
	cross_bar_width			TolerancedLengthMeasure,
	cross_bar_depth			TolerancedLengthMeasure,
	radius			TolerancedLengthMeasure,
	width			TolerancedLengthMeasure,
	first_offset			TolerancedLengthMeasure,
	second_offset			TolerancedLengthMeasure
)with alias='TeeProfile', nickname='TeeProfile', version=true;

CREATE CLASS IF NOT EXISTS cylindrical_surface : ElementarySurface (
 	radius			double
)with alias='CylindricalSurface', nickname='CylindricalSurface', version=true;

CREATE CLASS IF NOT EXISTS along_path : ApproachRetractStrategy (
 	path			ToolpathList
)with alias='AlongPath', nickname='AlongPath', version=true;

CREATE CLASS IF NOT EXISTS machine_tool_requirements : MachineTool (
 	number_of_tools_in_tool_magazine			double,
	machining			MachiningCapability[?],
	spindles			SpindleCapability[?],
	positioning			PositioningCapability,
	axis			AxisCapability,
	touch_probing			MeasuringCapability,
	automatically_pallet_changeable			boolean
)with alias='MachineToolRequirements', nickname='MachineToolRequirements', version=true;


CREATE CLASS IF NOT EXISTS conical_surface : ElementarySurface (
 	radius			double,
	semi_angle			double
)with alias='ConicalSurface', nickname='ConicalSurface', version=true;

CREATE CLASS IF NOT EXISTS partial_circular_profile : OpenProfile (
 	radius			TolerancedLengthMeasure,
	sweep_angle			double
)with alias='PartialCircularProfile', nickname='PartialCircularProfile', version=true;

typedef ReversibleTopologyItem = morph <
	Edge,
	Path,
	Face,
	FaceBound,
	ClosedShell,
	OpenShell
> /** onerror(continue,"already exist") **/ ;


typedef Shell = morph <
	OpenShell,
	ClosedShell
> /** onerror(continue,"already exist") **/ ;


typedef TaperSelect = morph <
	DiameterTaper,
	AngleTaper
> /** onerror(continue,"already exist") **/ ;


CREATE CLASS IF NOT EXISTS operation : Task2 (
	its_toolpath			ToolpathList,
	its_tool_direction			ToolDirection
)with alias='Operation', nickname='Operation', version=true;


CREATE CLASS IF NOT EXISTS machining_operation : Operation (
 	its_id			text,
	retract_plane			double,
	start_point			CartesianPoint,
	its_tool			MachiningTool,
	its_technology			Technology,
	its_machine_functions			MachineFunctions
)with alias='MachiningOperation', nickname='MachiningOperation', version=true;


CREATE CLASS IF NOT EXISTS milling_machining_operation : MachiningOperation (
 	overcut_length			double
)with alias='MillingMachiningOperation', nickname='MillingMachiningOperation', version=true;


CREATE CLASS IF NOT EXISTS drilling_type_operation : MillingMachiningOperation (
 	cutting_depth			double,
	previous_diameter			double,
	dwell_time_bottom			double,
	feed_on_retract			double,
	its_machining_strategy			DrillingTypeStrategy
)with alias='DrillingTypeOperation', nickname='DrillingTypeOperation', version=true;


CREATE CLASS IF NOT EXISTS boring_operation : DrillingTypeOperation (
 	spindle_stop_at_bottom			boolean,
	depth_of_testcut			double,
	waiting_position			CartesianPoint
)with alias='BoringOperation', nickname='BoringOperation', version=true;


CREATE CLASS IF NOT EXISTS boring : BoringOperation (
   )with alias='Boring', nickname='Boring', version=true;


CREATE CLASS IF NOT EXISTS drilling_operation : DrillingTypeOperation (
   )with alias='DrillingOperation', nickname='DrillingOperation', version=true;


CREATE CLASS IF NOT EXISTS counter_sinking : DrillingOperation (
   )with alias='CounterSinking', nickname='CounterSinking', version=true;


CREATE CLASS IF NOT EXISTS manifold_solid_brep : SolidModel (
 	outer			ClosedShell
)with alias='ManifoldSolidBrep', nickname='ManifoldSolidBrep', version=true;


CREATE CLASS IF NOT EXISTS faceted_brep : ManifoldSolidBrep (
   )with alias='FacetedBrep', nickname='FacetedBrep', version=true;


CREATE CLASS IF NOT EXISTS manufacturing_feature : Task2 (
	its_id			text,
	its_workpiece			Workpiece,
	its_operations			MachiningOperation[?]
)with alias='ManufacturingFeature', nickname='ManufacturingFeature', version=true;


CREATE CLASS IF NOT EXISTS region : ManufacturingFeature (
 	feature_placement			Axis2Placement3d
)with alias='Region', nickname='Region', version=true;


CREATE CLASS IF NOT EXISTS region_projection : Region (
 	proj_curve			BoundedCurve,
	proj_dir			Direction,
	depth			TolerancedLengthMeasure
)with alias='RegionProjection', nickname='RegionProjection', version=true;


CREATE CLASS IF NOT EXISTS workingstep : Executable (
 	its_secplane			ElementarySurface
)with alias='Workingstep', nickname='Workingstep', version=true;


CREATE CLASS IF NOT EXISTS touch_probing : Workingstep (
 	measured_offset			NcVariable,
	its_toolpath			ToolpathList,
	its_tool_direction			ToolDirection
)with alias='TouchProbing', nickname='TouchProbing', version=true;


CREATE CLASS IF NOT EXISTS tool_probing : TouchProbing (
 	offset			CartesianPoint,
	max_wear			double,
	its_tool			MachiningTool
)with alias='ToolProbing', nickname='ToolProbing', version=true;


CREATE CLASS IF NOT EXISTS tapping : DrillingTypeOperation (
 	compensation_chuck			boolean
)with alias='Tapping', nickname='Tapping', version=true;


CREATE CLASS IF NOT EXISTS two5d_manufacturing_feature : ManufacturingFeature (
 	feature_placement			Axis2Placement3d
)with alias='Two5dManufacturingFeature', nickname='Two5dManufacturingFeature', version=true;


CREATE CLASS IF NOT EXISTS machining_feature : Two5dManufacturingFeature (
 	depth			ElementarySurface
)with alias='MachiningFeature', nickname='MachiningFeature', version=true;


CREATE CLASS IF NOT EXISTS profile_feature : MachiningFeature (
 	profile_swept_shape			LinearPath
)with alias='ProfileFeature', nickname='ProfileFeature', version=true;


CREATE CLASS IF NOT EXISTS shape_profile : ProfileFeature (
 	floor_condition			ProfileSelect,
	removal_direction			Direction
)with alias='ShapeProfile', nickname='ShapeProfile', version=true;


CREATE CLASS IF NOT EXISTS rectangular_closed_shape_profile : ShapeProfile (
 	closed_boundary			RectangularClosedProfile
)with alias='RectangularClosedShapeProfile', nickname='RectangularClosedShapeProfile', version=true;


CREATE CLASS IF NOT EXISTS rectangular_open_shape_profile : ShapeProfile (
 	open_boundary			SquareUProfile
)with alias='RectangularOpenShapeProfile', nickname='RectangularOpenShapeProfile', version=true;


CREATE CLASS IF NOT EXISTS toolpath_feature : MachiningFeature (
   )with alias='ToolpathFeature', nickname='ToolpathFeature', version=true;


CREATE CLASS IF NOT EXISTS tool_length_probing : ToolProbing (
   )with alias='ToolLengthProbing', nickname='ToolLengthProbing', version=true;


CREATE CLASS IF NOT EXISTS boss : MachiningFeature (
 	its_boundary			ClosedProfile,
	slope			double
)with alias='Boss', nickname='Boss', version=true;


CREATE CLASS IF NOT EXISTS machined_surface : Task2 (
	its_machining_feature			MachiningFeature,
	surface_element			BottomOrSide
)with alias='MachinedSurface', nickname='MachinedSurface', version=true;


CREATE CLASS IF NOT EXISTS multistep_drilling : DrillingOperation (
 	retract_distance			double,
	first_depth			double,
	depth_of_step			double,
	dwell_time_step			double
)with alias='MultistepDrilling', nickname='MultistepDrilling', version=true;


CREATE CLASS IF NOT EXISTS thread : MachiningFeature (
 	partial_profile			PartialAreaDefinition,
	applied_shape			MachiningFeature[?],
	inner_or_outer_thread			boolean,
	qualifier			DescriptiveParameter,
	fit_class			DescriptiveParameter,
	form			DescriptiveParameter,
	major_diameter			double,
	number_of_threads			NumericParameter,
	thread_hand			DescriptiveParameter
)with alias='Thread', nickname='Thread', version=true;


CREATE CLASS IF NOT EXISTS defined_thread : Thread (
 	pitch_diameter			double,
	minor_diameter			double,
	crest			double
)with alias='DefinedThread', nickname='DefinedThread', version=true;


CREATE CLASS IF NOT EXISTS tool_radius_probing : ToolProbing (
   )with alias='ToolRadiusProbing', nickname='ToolRadiusProbing', version=true;


CREATE CLASS IF NOT EXISTS back_boring : DrillingTypeOperation (
   )with alias='BackBoring', nickname='BackBoring', version=true;


CREATE CLASS IF NOT EXISTS circular_closed_shape_profile : ShapeProfile (
 	closed_boundary			CircularClosedProfile
)with alias='CircularClosedShapeProfile', nickname='CircularClosedShapeProfile', version=true;


CREATE CLASS IF NOT EXISTS machining_workingstep : Workingstep (
 	its_feature			ManufacturingFeature,
	its_operation			MachiningOperation,
	its_effect			InProcessGeometry
)with alias='MachiningWorkingstep', nickname='MachiningWorkingstep', version=true;


CREATE CLASS IF NOT EXISTS transition_feature : ManufacturingFeature (
 	first_feature			MachiningFeature,
	second_feature			MachiningFeature
)with alias='TransitionFeature', nickname='TransitionFeature', version=true;

CREATE CLASS IF NOT EXISTS edge_round : TransitionFeature (
 	radius			TolerancedLengthMeasure,
	first_offset_amount			TolerancedLengthMeasure,
	second_offset_amount			TolerancedLengthMeasure
)with alias='EdgeRound', nickname='EdgeRound', version=true;

CREATE CLASS IF NOT EXISTS spherical_cap : MachiningFeature (
 	internal_angle			NumericParameter,
	radius			NumericParameter
)with alias='SphericalCap', nickname='SphericalCap', version=true;

CREATE CLASS IF NOT EXISTS milling_type_operation : MillingMachiningOperation (
 	approach			ApproachRetractStrategy,
	retract			ApproachRetractStrategy
)with alias='MillingTypeOperation', nickname='MillingTypeOperation', version=true;


CREATE CLASS IF NOT EXISTS two5d_milling_operation : MillingTypeOperation (
 	its_machining_strategy			Two5dMillingStrategy
)with alias='Two5dMillingOperation', nickname='Two5dMillingOperation', version=true;


CREATE CLASS IF NOT EXISTS bottom_and_side_milling : Two5dMillingOperation (
 	axial_cutting_depth			double,
	radial_cutting_depth			double,
	allowance_side			double,
	allowance_bottom			double
)with alias='BottomAndSideMilling', nickname='BottomAndSideMilling', version=true;


CREATE CLASS IF NOT EXISTS bottom_and_side_finish_milling : BottomAndSideMilling (
   )with alias='BottomAndSideFinishMilling', nickname='BottomAndSideFinishMilling', version=true;


CREATE CLASS IF NOT EXISTS workpiece_complete_probing : TouchProbing (
 	its_workpiece			Workpiece,
	probing_distance			TolerancedLengthMeasure,
	its_probe			TouchProbe,
	computed_offset			OffsetVector
)with alias='WorkpieceCompleteProbing', nickname='WorkpieceCompleteProbing', version=true;


CREATE CLASS IF NOT EXISTS general_outside_profile : ProfileFeature (
 	feature_boundary			Profile
)with alias='GeneralOutsideProfile', nickname='GeneralOutsideProfile', version=true;


CREATE CLASS IF NOT EXISTS plane_milling : Two5dMillingOperation (
 	axial_cutting_depth			double,
	allowance_bottom			double
)with alias='PlaneMilling', nickname='PlaneMilling', version=true;


CREATE CLASS IF NOT EXISTS plane_rough_milling : PlaneMilling (
   )with alias='PlaneRoughMilling', nickname='PlaneRoughMilling', version=true;


CREATE CLASS IF NOT EXISTS side_milling : Two5dMillingOperation (
 	axial_cutting_depth			double,
	radial_cutting_depth			double,
	allowance_side			double
)with alias='SideMilling', nickname='SideMilling', version=true;


CREATE CLASS IF NOT EXISTS side_finish_milling : SideMilling (
   )with alias='SideFinishMilling', nickname='SideFinishMilling', version=true;


CREATE CLASS IF NOT EXISTS pocket : MachiningFeature (
 	its_boss			Boss[?],
	slope			double,
	bottom_condition			PocketBottomCondition,
	planar_radius			TolerancedLengthMeasure,
	orthogonal_radius			TolerancedLengthMeasure
)with alias='Pocket', nickname='Pocket', version=true;


CREATE CLASS IF NOT EXISTS closed_pocket : Pocket (
 	feature_boundary			ClosedProfile
)with alias='ClosedPocket', nickname='ClosedPocket', version=true;


CREATE CLASS IF NOT EXISTS t_image : BoundedSurface (
 	faces			TFace[?],
	links			TLink[?],
	edges			TEdge[?],
	vertices			TVertex[?]
)with alias='TImage', nickname='TImage', version=true;


CREATE CLASS IF NOT EXISTS product_definition_relationship : Task2 (
    id    varchar,
    name    varchar,
	description			text,
	relating_product_definition			ProductDefinition,
	related_product_definition			ProductDefinition
)with alias='ProductDefinitionRelationship', nickname='ProductDefinitionRelationship', version=true;


CREATE CLASS IF NOT EXISTS slot : MachiningFeature (
 	course_of_travel			TravelPath,
	swept_shape			OpenProfile,
	end_conditions			SlotEndType[?]
)with alias='Slot', nickname='Slot', version=true;


CREATE CLASS IF NOT EXISTS planar_profile_floor : ProfileFloor (
 	floor			Plane
)with alias='PlanarProfileFloor', nickname='PlanarProfileFloor', version=true;


CREATE CLASS IF NOT EXISTS reaming : BoringOperation (
   )with alias='Reaming', nickname='Reaming', version=true;


CREATE CLASS IF NOT EXISTS freeform_operation : MillingTypeOperation (
 	its_machining_strategy			FreeformStrategy
)with alias='FreeformOperation', nickname='FreeformOperation', version=true;


CREATE CLASS IF NOT EXISTS topological_region : Region (
    name    varchar,
	cfs_faces			Face[?]
)with alias='TopologicalRegion', nickname='TopologicalRegion', version=true;


CREATE CLASS IF NOT EXISTS open_pocket : Pocket (
 	open_boundary			OpenProfile,
	wall_boundary			OpenProfile
)with alias='OpenPocket', nickname='OpenPocket', version=true;


CREATE CLASS IF NOT EXISTS drilling : DrillingOperation (
   )with alias='Drilling', nickname='Drilling', version=true;


CREATE CLASS IF NOT EXISTS center_drilling : DrillingOperation (
   )with alias='CenterDrilling', nickname='CenterDrilling', version=true;


CREATE CLASS IF NOT EXISTS surface_texture_parameter : Task2 (
	its_value			double,
	parameter_name			text,
	measuring_method			text,
	parameter_index			text,
	applied_surfaces			MachinedSurface[?]
)with alias='SurfaceTextureParameter', nickname='SurfaceTextureParameter', version=true;


CREATE CLASS IF NOT EXISTS step : MachiningFeature (
 	open_boundary			LinearPath,
	wall_boundary			VeeProfile,
	its_boss			Boss[?]
)with alias='Step2', nickname='Step2', version=true;


CREATE CLASS IF NOT EXISTS thread_drilling : DrillingTypeOperation (
 	helical_movement_on_forward			boolean
)with alias='ThreadDrilling', nickname='ThreadDrilling', version=true;


CREATE CLASS IF NOT EXISTS replicate_feature : Two5dManufacturingFeature (
 	replicate_base_feature			Two5dManufacturingFeature
)with alias='ReplicateFeature', nickname='ReplicateFeature', version=true;


CREATE CLASS IF NOT EXISTS circular_pattern : ReplicateFeature (
 	angle_increment			double,
	number_of_feature			int,
	relocated_base_feature			CircularOffset[?],
	missing_base_feature			CircularOmit[?],
	base_feature_diameter			TolerancedLengthMeasure,
	base_feature_rotation			double
)with alias='CircularPattern', nickname='CircularPattern', version=true;


CREATE CLASS IF NOT EXISTS general_pocket_bottom_condition : PocketBottomCondition (
 	shape			Region
)with alias='GeneralPocketBottomCondition', nickname='GeneralPocketBottomCondition', version=true;


CREATE CLASS IF NOT EXISTS catalogue_thread : Thread (
 	documentation			Specification
)with alias='CatalogueThread', nickname='CatalogueThread', version=true;


CREATE CLASS IF NOT EXISTS rapid_movement : Workingstep (
 	its_toolpath			ToolpathList,
	its_tool_direction			ToolDirection
)with alias='RapidMovement', nickname='RapidMovement', version=true;

CREATE CLASS IF NOT EXISTS round_hole : MachiningFeature (
 	diameter			TolerancedLengthMeasure,
	change_in_diameter			TaperSelect,
	bottom_condition			HoleBottomCondition
)with alias='RoundHole', nickname='RoundHole', version=true;

CREATE CLASS IF NOT EXISTS t_spline_surface : BoundedSurface (
 	s_degree			int,
	t_degree			int,
	force_bezier_end_condition			boolean,
	image			TImage,
	connect			TConnect,
	pointset			TPointset
)with alias='TSplineSurface', nickname='TSplineSurface', version=true;

CREATE CLASS IF NOT EXISTS workpiece_probing : TouchProbing (
 	start_position			Axis2Placement3d,
	its_workpiece			Workpiece,
	its_direction			Direction,
	expected_value			TolerancedLengthMeasure,
	its_probe			TouchProbe
)with alias='WorkpieceProbing', nickname='WorkpieceProbing', version=true;

CREATE CLASS IF NOT EXISTS rounded_end : MachiningFeature (
 	course_of_travel			LinearPath,
	partial_circular_boundary			PartialCircularProfile
)with alias='RoundedEnd', nickname='RoundedEnd', version=true;


CREATE CLASS IF NOT EXISTS setup : Task2 (
	its_id			text,
	its_origin			Axis2Placement3d,
	its_secplane			ElementarySurface,
	its_workpiece_setup			WorkpieceSetup[?]
)with alias='Setup', nickname='Setup', version=true;


CREATE CLASS IF NOT EXISTS planar_face : MachiningFeature (
 	course_of_travel			LinearPath,
	removal_boundary			LinearProfile,
	face_boundary			ClosedProfile,
	its_boss			Boss[?]
)with alias='PlanarFace', nickname='PlanarFace', version=true;


CREATE CLASS IF NOT EXISTS partial_circular_shape_profile : ShapeProfile (
 	open_boundary			PartialCircularProfile
)with alias='PartialCircularShapeProfile', nickname='PartialCircularShapeProfile', version=true;


CREATE CLASS IF NOT EXISTS return_home : RapidMovement (
   )with alias='ReturnHome', nickname='ReturnHome', version=true;


CREATE CLASS IF NOT EXISTS region_surface_list : Region (
 	surface_list			BoundedSurface[?]
)with alias='RegionSurfaceList', nickname='RegionSurfaceList', version=true;


CREATE CLASS IF NOT EXISTS chamfer : TransitionFeature (
 	angle_to_plane			double,
	first_offset_amount			TolerancedLengthMeasure
)with alias='Chamfer', nickname='Chamfer', version=true;


CREATE CLASS IF NOT EXISTS side_rough_milling : SideMilling (
   )with alias='SideRoughMilling', nickname='SideRoughMilling', version=true;


CREATE CLASS IF NOT EXISTS plane_finish_milling : PlaneMilling (
   )with alias='PlaneFinishMilling', nickname='PlaneFinishMilling', version=true;
   
CREATE CLASS IF NOT EXISTS rectangular_pattern : ReplicateFeature (
 	spacing			TolerancedLengthMeasure,
	its_direction			Direction,
	number_of_rows			int,
	number_of_columns			int,
	row_spacing			TolerancedLengthMeasure,
	row_layout_direction			Direction,
	relocated_base_feature			RectangularOffset[?],
	missing_base_feature			RectangularOmit[?]
)with alias='RectangularPattern', nickname='RectangularPattern', version=true;

CREATE CLASS IF NOT EXISTS general_shape_profile : ShapeProfile (
 	profile_boundary			Profile
)with alias='GeneralShapeProfile', nickname='GeneralShapeProfile', version=true;


CREATE CLASS IF NOT EXISTS bottom_and_side_rough_milling : BottomAndSideMilling (
   )with alias='BottomAndSideRoughMilling', nickname='BottomAndSideRoughMilling', version=true;


CREATE CLASS IF NOT EXISTS general_pattern : ReplicateFeature (
 	replicate_locations			Axis2Placement3d[?]
)with alias='GeneralPattern', nickname='GeneralPattern', version=true;


typedef CharacterizedProductDefinition = morph <
	ProductDefinition,
	ProductDefinitionRelationship
> /** onerror(continue,"already exist") **/ ;


typedef CompoundFeatureSelect = morph <
	MachiningFeature,
	TransitionFeature
> /** onerror(continue,"already exist") **/ ;


CREATE CLASS IF NOT EXISTS workplan : ProgramStructure (
 	its_elements			Executable[?],
	its_channel			Channel,
	its_setup			Setup,
	its_effect			InProcessGeometry
)with alias='Workplan', nickname='Workplan', version=true;


CREATE CLASS IF NOT EXISTS compound_feature : Two5dManufacturingFeature (
 	elements			CompoundFeatureSelect[?]
)with alias='CompoundFeature', nickname='CompoundFeature', version=true;


CREATE CLASS IF NOT EXISTS countersunk_hole : CompoundFeature (
   )with alias='CountersunkHole', nickname='CountersunkHole', version=true;


CREATE CLASS IF NOT EXISTS workplan_physical_resource_association : Task2 (
	workplan_of_resource			Workplan,
	physical_resource			MachineToolRequirements
)with alias='WorkplanPhysicalResourceAssociation', nickname='WorkplanPhysicalResourceAssociation', version=true;


CREATE CLASS IF NOT EXISTS project : Task2 (
	its_id			text,
	main_workplan			Workplan,
	its_workpieces			Workpiece[?],
	its_owner			PersonAndAddress,
	its_release			DateAndTime,
	its_status			Approval
)with alias='Project', nickname='Project', version=true;


CREATE CLASS IF NOT EXISTS counterbore_hole : CompoundFeature (
   )with alias='CounterboreHole', nickname='CounterboreHole', version=true;


CREATE CLASS IF NOT EXISTS project_physical_resource_association : Task2 (
	project_of_resource			Project,
	physical_resource			MachineToolRequirements
)with alias='ProjectPhysicalResourceAssociation', nickname='ProjectPhysicalResourceAssociation', version=true;

typedef ShapeDefinition = morph <
	ProductDefinitionShape,
	ShapeAspect,
	ShapeAspectRelationship
> /** onerror(continue,"already exist") **/ ;

typedef CharacterizedDefinition = morph <
	CharacterizedObject,
	CharacterizedProductDefinition,
	ShapeDefinition
> /** onerror(continue,"already exist") **/ ;

typedef ReversibleTopology = morph <
	ReversibleTopologyItem,
	ListOfReversibleTopologyItem,
	SetOfReversibleTopologyItem
> /** onerror(continue,"already exist") **/ ;

CREATE CLASS IF NOT EXISTS property_definition : Task2 (
    name    varchar,
	description			text,
	definition			CharacterizedDefinition
)with alias='PropertyDefinition', nickname='PropertyDefinition', version=true;

CREATE CLASS IF NOT EXISTS kinematic_property_definition : PropertyDefinition (
 	ground_definition			CharacterizedDefinition
)with alias='KinematicPropertyDefinition', nickname='KinematicPropertyDefinition', version=true;

CREATE CLASS IF NOT EXISTS mechanism : Task2 (
	structure_definition			KinematicStructure,
	base			KinematicLink,
	containing_property			KinematicPropertyDefinition
)with alias='Mechanism', nickname='Mechanism', version=true;

CREATE CLASS IF NOT EXISTS machine_kinematic_association : Task2 (
	machine			MachineToolSpecification,
	kinematics			Mechanism
)with alias='MachineKinematicAssociation', nickname='MachineKinematicAssociation', version=true;

CREATE CLASS IF NOT EXISTS product_definition_shape : PropertyDefinition (
   )with alias='ProductDefinitionShape', nickname='ProductDefinitionShape', version=true;
   
CREATE CLASS IF NOT EXISTS shape_aspect : Task2 (
    name    varchar,
	description			text,
	of_shape			ProductDefinitionShape,
	product_definitional			Logical
)with alias='ShapeAspect', nickname='ShapeAspect', version=true;

CREATE CLASS IF NOT EXISTS shape_aspect_relationship : Task2 (
    name    varchar,
	description			text,
	relating_shape_aspect			ShapeAspect,
	related_shape_aspect			ShapeAspect
)with alias='ShapeAspectRelationship', nickname='ShapeAspectRelationship', version=true;
