<HTML><HEAD><link type="text/css" href="../css/main_styles.css" rel="stylesheet"></HEAD>
<BODY><TITLE>%mqc_pdq_gc1_adjacent_curves</TITLE><H1>%mqc_pdq_gc1_adjacent_curves  </H1><P CLASS="Paragraph">Classname: <B>%mqc_pdq_gc1_adjacent_curves  </B></P><P CLASS="Paragraph">Inherits from: <B><A href=..\checkmate\xug_base_checker.html>%ug_base_checker </A></B></P><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"> </PRE><PRE STYLE=\"text-align : left;\" CLASS=\"Code\">  DOCUMENTATION</PRE><PRE STYLE=\"text-align : left;\" CLASS=\"Code\">
<B>Description:</B>
    This checker finds adjacent curve segments with GC1 discontinuity.  GC1 means that the
    first derivatives of the two curves are collinear and point into the same direction.
    Checking is only carried out if the transition points are already GC0 continuous.
    Transition points are checked between adjacent curves (including boundary curves) and
    between adjacent curve segments of one curve. The angle between the unitized derivative
    vectors is computed. The criterion is violated if the angle exceeds the Tangent Angle
    constraint value.
    Recommendation: Interactively correct the curves by recreating them with identical
    tangential conditions, or round off with an additional curve with suitable tangential
    specifications (i.e., round off two straight with a radius).
Reference:
    SASIG-PDQ Criteria Code: Non-tangent Segments (G-CU-NT)
Parameters:
    ************************* Geometry Identification *************************
    ( List )  filter             - This parameter is used to display filter
                                   option button in checker customization dialog.
                                   This parameter is also used to collect entities
                                   selected by the class selection dialog.
                                   If Solid_Body or Sheet_Body is selected, the
                                   checker will collect all faces of these bodies
                                   to validate their edges.
                                   Default is empty.
    ( Name )  filter_type_mode   - This parameter is used to set entity type filter mode
                                   which can be Include or Exclude.
                                   Include - Collect entities with the specified entity
                                             types in the list filter_type_filter.
                                   Exclude - Collect entities without the specified entity
                                             types in the list filter_type_filter.
                                   Default is Include.
    ( List )  filter_type_filter - This Parameter is used to collect the entity types
                                   for entity type filter.
                                   It can be a list of entity type names
                                   Default is
                                   {Spline,Arc,Line,Conic,Ellipse,Hyperbola,Parabola};
    ( Name )  filter_layer_mode  - This parameter is used to set layer filter mode
                                   which can be Include or Exclude.
                                   See filter_type_mode.
                                   Default is Include.
    ( List )  filter_layer_filter- This Parameter is used to collect the layers
                                   for layer filter.
                                   It can be a list of layers string or category
                                   name string, For example: {"8,10-12", "SOLID"}
                                   Default is {ALL}.
    ( Name )  filter_color_mode  - This parameter is used to set color filter mode
                                   which can be Include or Exclude.
                                   See filter_type_mode.
                                   Default is Include.
    ( List )  filter_color_filter- This parameter is used to collect the colors
                                   for color filter.
                                   It can be a list of color RGB,
                                   such as {{255,0,0},{102,102,102}},
                                   or color index, such as {1,2,3}
                                   Default is {ALL}.
    ( Any )filter_class_selection- This parameter is used to add a class selection
                                   dialog for the user to select face or solid objects.
                                   The available entity types are set by the entity type
                                   filter parameter filter_type_filter.
    ( Boolean) check_invisible_layers
                                   This parameter is used to determine to check the entity
                                   on invisible layers or not.
                                   Default is False.
    1. If selection list is empty, and the filter setting is default,
       Checker will collect all curves in part to validate.
    2. If selection list is empty, and the filter setting is not default,
       Checker will use filter option to collect curves to validate.
    3. If selection list is not empty, and the filter setting is default,
       Checker will validate curves in the selection list.
    4. If selection list is not empty, and the filter setting is not default,
       Checker will use intersection of selection and filter option to
       collect curves to validate.
    ****************************    Unit Option    ****************************
    (Name)    unit              - Unit for the distance tolerance. Can be:
                                      grams_and_millimeters
                                      pounds_and_inches
                                  Default is grams_and_millimeters.
    *************************** Validation Criteria ***************************
    (Number)  distance_tolerance- Length criteria of the specified curve.
                                  Default is 0.01 mm.
    (Boolean) edge curve check  - true or false
    (Integer) edge_curve_points - Number of edge curve points for evaluating
                                  the topology, default is 10.
    (Boolean) segment_check     - True:Check the length of curve and segment
                                  False:Only check the length of the curve
                                  Default is False.
    (Integer) sample_point      - Number of points per segment for evaluation.
                                  Default is 10.
    ***************************  Topology Tolerance ***************************
    (Number)  distance          - Topological distance tolerance.
                                  Default is 0.1 mm
    (Number)  tangent_angle     - Topological angle tolerance.
                                  Unit is degrees.
                                  Default is 30 degrees.
    (Number)  curvature         - Topological curvature tolerance.
                                  Default is 2.
    ***************************     Log Setting     ***************************
    (Name)    log_type        - Indicate which logging type to use to report
                                the violation.
                                    LOG_ERROR
                                    LOG_WARNING
                                    LOG_INFO
                                Default is LOG_ERROR
    (String)  log_msg         - User defined message to be added when the system
                                reports the violation.
                                Default is an empty string.
    ***************************        Others       ***************************
    (Boolean) disabled?       - If it is true, the checker is disabled.
                                Default is False.
    (Boolean) save_log_in_part- The flag indicates whether the checking results
                                can be saved to the part file.
                                Default is True.
Results:
    PASS --  all adjacent curves with GC1 continuity.
    FAIL --  Found adjacent curves with the GC1 geometric discontinuity.
UG Objects log:
    Adjacent curves with GC1 discontinuity.
</PRE><PRE><FONT COLOR= blue>DefClass: %mqc_pdq_gc1_adjacent_curves ( %ug_base_checker );
</FONT></PRE><PRE STYLE=\"text-align : left;\" CLASS=\"Code\">  Check-Mate Attributes and Parameters</PRE><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( String )    %test_category: "SASIG-PDQ.Curves (G-CU)";
    ( String )    %displayed_name: "Non-Tangent Segments (G-CU-NT)";
    
</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( Boolean Parameter )    Disabled?: False;
    ( Boolean Parameter )    save_log_in_part: True;
</SPAN></FONT></PRE></DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\">  Checker specific Attributes and Parameters</PRE><PRE STYLE=\"text-align : left;\" CLASS=\"Code\">  Parameter for unit</PRE><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( Name Parameter  )   unit: grams_and_millimeters ;
</SPAN></FONT></PRE></DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\">  Checker Criteria</PRE><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( List )              unit_option:{grams_and_millimeters, pounds_and_inches};
    ( String )            unit_label: "Unit";

</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( String )            Angle_tol_label: "Tangent Angle Tolerance";

</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( String )            edge_curve_check_label: "Edge Curve Check";
</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( String )            edge_curve_points_label: "Number of Points per edge curve";

</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( String )            segment_check_label: "Segment Check";
</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( Number Parameter  ) Angle_tol: 0.01;
    ( Boolean Parameter ) edge_curve_check: FALSE;
    ( Integer Parameter ) edge_curve_points: 10;
    ( Boolean Parameter ) segment_check: False;
    ( Integer Parameter ) sample_point: 10;
</SPAN></FONT></PRE></DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\">  Geometry Selection and Filters</PRE><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( String )            sample_point_label: "Number of Sample Points";

</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( String )            filter_begin_group: "Geometry Identification";
</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( String )            filter_label: "Filter Methods";
</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( List Parameter )    filter: {};
    ( Name Parameter )    filter_Type_Mode: Include;
    ( List Parameter )    filter_Type_Filter: {Spline,Arc,Line,Conic,Ellipse,Hyperbola,Parabola};
    ( Name Parameter )    filter_Layer_Mode: Include;
    ( List Parameter )    filter_Layer_Filter: {ALL};
    ( Name Parameter )    filter_Color_Mode: Include;
    ( List Parameter )    filter_Color_Filter: {ALL};
</SPAN></FONT></PRE></DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\">  Check invisible Layers or not</PRE><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( Any )               filter_Class_Selection: "Selections";

</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( Boolean Parameter ) check_invisible_layers: False;
</SPAN></FONT></PRE></DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\">  Topological tolerances    </PRE><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( String )            check_invisible_layers_label: "Check Invisible Layers";
    ( Any )               filter_end_group: ;

</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( String )            topo_begin_group: "Topological Tolerances";
</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( String )            distance_label: "Distance";
</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( String )            tangent_angle_label: "Tangent Angle (Degrees)";
</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( Number Parameter )  distance: 0.1;
    ( Number Parameter )  tangent_angle: 30;
    ( Number Parameter )  curvature: 2.0;
</SPAN></FONT></PRE></DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\">  Log Paramters</PRE><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( String )            curvature_label: "Curvature";
    ( Any )               topo_end_group: ;

</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( Boolean )           log_detail: False;
</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( List )              log_type_option: {LOG_ERROR, LOG_WARNING, LOG_INFO};
    ( String )            log_type_label: "Log Type";
</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( Name Parameter )    log_type: LOG_ERROR;
    ( String Parameter )  log_msg: "";
</SPAN></FONT></PRE></DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\">  Logical attribute to judge if using filter system of validation function</PRE><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( String )            log_msg_label: "Log Message";

</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( Boolean )           apply_filter?: 
                          if( ((filter_Type_Mode: = Include & filter_Type_Filter: = {ALL}) |
                               (filter_Type_Mode: = Include & filter_Type_Filter: = allowed_entity_types:) |
                               (filter_Type_Mode: = Exclude & filter_Type_Filter: = {}) ) &   
                              (!mqc_applyFilter?( filter_Layer_Mode:, filter_Layer_Filter:, 
                                                  filter_Color_Mode:, filter_Color_Filter: ) ))
                          then false
                          else true;

    ( List )              layer_filters:
                          If ( !check_invisible_layers: )
                          Then
                          @{
                              $filter_layers  << mqc_parse_layerSpecification( filter_Layer_Filter: );
                              $invisble_layers << Nth( 4, mqc_askLayerInfo() );
                              {mqc_convertIntegerListToString(SetDifference( $filter_layers, $invisble_layers ))};
                          }
                          Else filter_Layer_Filter:;

</SPAN></FONT></PRE></DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\">  Attributes for faces collection and selection</PRE><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>    ( List )              allowed_entity_types: {Spline,Arc,Line,Conic,Ellipse,Hyperbola,Parabola};
    ( List )              entities_collection:
                              #Collect curves with type, layer, color filters.
                              mqc_collectEntitiesWithFilterOptions( 
                                  Include, If (filter_Type_Mode: = Include)
                                           Then filter_Type_Filter:
                                           Else SetDifference(allowed_entity_types:,filter_Type_Filter:),
                                  filter_Layer_Mode:,layer_filters:,
                                  filter_Color_Mode:,filter_Color_Filter: );

    ( List )              entities_selection: 
                              mqc_convertHandlesToTags ( filter: );

    ( List )              curve_list:
                              If ( (check_invisible_layers:) & Empty?(filter:) & (!apply_filter?:) )
                              Then {True, {}}  # Check All in Parts
                              Else If ( (!check_invisible_layers:) & Empty?(filter:) & (!apply_filter?:) )
                              Then {False, entities_collection:}
                              Else If ( Empty?(filter:) & apply_filter?: )
                              Then {False, entities_collection:}
                              Else If ( (!Empty?(filter:)) & (!apply_filter?:) )
                              Then {False, entities_selection:}
                              Else If ( (!Empty?(filter:)) & apply_filter?: )
                              Then {False, SetIntersection(entities_collection:, entities_selection:)}
                              Else {False, {}};
       

</SPAN></FONT></PRE></DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\">   Checker function</PRE><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>   (Any Uncached)   do_check: 
@{
       $distance_tol << mqc_convert_unit_for_tolerance(distance:, unit:);

       $topo_tol << {mqc_convert_unit_for_tolerance(distance:, unit:), tangent_angle:, curvature:};

       $criteria << {edge_curve_check:, segment_check:, sample_point:, edge_curve_points:};
       
       $detail_flag << if (log_detail: = True) then 1 else 0;
        
       ug_mqc_log_object_detail_flag( $detail_flag );
            
       if ( curve_list: = {False, {}} )
       then Donothing
       else
       @{
           ug_mqc_log_object_detail_flag( $detail_flag );

           mqc_pdqcad_setCriteriaNameOption( SASIG_PDQ );

           mqc_pdqcad_gc1AdjacentCurves( curve_list:, $topo_tol,
                                         $criteria, $distance_tol,
                                         angle_tol:, 
                                         log_type:, log_msg: ); 
       };
    };
</SPAN></FONT></PRE></DIV></TABLE><p class=EndLine>&nbsp;</p><p class=blank>&nbsp;</p></BODY></HTML>