<HTML><HEAD><link type="text/css" href="../css/main_styles.css" rel="stylesheet"></HEAD>
<BODY><TITLE>%mqc_check_member_view_overlap</TITLE><H1>%mqc_check_member_view_overlap </H1><P CLASS="Paragraph">Classname: <B>%mqc_check_member_view_overlap </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\">
<B>Description:</B>
   Check if all member views in each drawing are not overlaped.
Parameters:
   (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.
   (Integer)  log_type         -  Indicate which logging type to use to report the violation.
                                  1 - LOG_ERROR,
                                  2 - LOG_WARNING,
                                  3 - LOG_INFO,
                                  Default is 1 to log error.
   (String)   log_msg          -  User defined message to be added when the system
                                  reports the violation.
                                  Default is an empty string.
Results:
   PASS     - If no any member view overlap with another.
   FAILED   - If find member views overlap with another.
</PRE><PRE><FONT COLOR= blue>DefClass: %mqc_check_member_view_overlap( %ug_base_checker );
</FONT></PRE><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>   ( String )              %test_category: "Drafting";
   ( String )              %displayed_name: "Check Overlapped Member Views";

</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\">  Paramter for log_type:</PRE><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>   ( Integer Parameter )   log_type: 1;
</SPAN></FONT></PRE></DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\">  parameter for log_message     </PRE><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: %ug_MSGTXT("Log Option");

</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>   ( string Parameter )    log_msg: "";
</SPAN></FONT></PRE></DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\">  Attributes</PRE><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>   ( string )              log_msg_label: %ug_MSGTXT("Log Message");
   
   
</SPAN></FONT></PRE></DIV><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>   ( List )                all_drawing_views: ug_mqc_ask_entities(DRAW_VIEW);
   ( Boolean Modifiable)   user_msg_logged?:  False;
   

</SPAN></FONT></PRE></DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\">  checking ...</PRE><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>   ( Any Uncached ) do_check:
   @{
        Loop  # deal with each drawing
        {
            For $each_drawing_view In all_drawing_views:;

            # get overlap views on this sheet
            For $overlap_views Is get_overlap_views:( $each_drawing_view );

            # log overlap views for each sheet
            Do log_overlap_views:( $each_drawing_view, $overlap_views );
        };
   };

</SPAN></FONT></PRE></DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\">Method Is_intersect_rectangle:
    validate if 2 rectangles are overlap.
INPUT:
    (List)  rect_1     : consists of 2 corner point coordinates( 4 numbber )
                          ------------- P2
                         |            |
                         |            |
                      P1 |------------|
                         for example, { 0.0, 0.0, 1.1, 1.1 }
     (List) rect_2

<B>Return:</B>
     true   - overlap
     false  - not overlap
</PRE><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>( Method Boolean ) Is_intersect_rectangle:( List $rect1, List $rect2 )
@{
    $Xmin_1 << First( $rect1 );
    $Ymin_1 << Second( $rect1 );
    $Xmax_1 << Third( $rect1 );
    $Ymax_1 << Nth( 4, $rect1 );
    
    $Xmin_2 << First( $rect2 );
    $Ymin_2 << Second( $rect2 );
    $Xmax_2 << Third( $rect2 );
    $Ymax_2 << Nth( 4, $rect2 );    
    
    If ( $Xmin_1 < $Xmin_2 )
    Then
    @{
        If ( $Xmin_2 < $Xmax_1 )
        Then
        @{
            If ( $Ymin_1 < $Ymin_2 )
            Then $Ymin_2 < $Ymax_1
            Else $Ymin_1 < $Ymax_2;
        }
        Else False;
    }
    Else
    @{
        If ( $Xmin_1 < $Xmax_2 )
        Then
        @{
            If ( $Ymin_1 < $Ymin_2 )
            Then $Ymin_2 < $Ymax_1
            Else $Ymin_1 < $Ymax_2;
        }
        Else False;
    };
 };
   
</SPAN></FONT></PRE></DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\">Get all overlap views on the specified sheet.
</PRE><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>( Method List ) get_overlap_views:( Integer $drawing_view )
@{
     # get member views in one drawing view
     $member_views << ug_mqc_askMemberViews( $drawing_view );

     # get member views' bounds 
     $views_bounds << Loop
     {
         For $i_view In $member_views; 
         For $i_view_bound Is ug_mqc_askMemberViewClip( $i_view );
                       
         Append { sublist( $i_view_bound, 3, 6) };
     };
                
     # in one drawing, check if all member views are not overlap
     $overlap_pairs << Loop
     {
         For $i From 1 To Length( $views_bounds )-1;

         For $overlap_views Is Loop 
         {
             For $j From $i+1 To Length( $views_bounds ); 

             If Is_intersect_rectangle:( nth( $i, $views_bounds ),
                                         nth( $j, $views_bounds ) )
             Append { Nth( $j, $member_views ) };
         };
                
         If ( !Empty?( $overlap_views ) )
         Collect {Nth($i,$member_views)}+$overlap_views;
     };

     # get overlap views            
     Removeduplicates(flatten($overlap_pairs));
};

</SPAN></FONT></PRE></DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\">Get sheet name from sheet view tag
</PRE><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>( Method String ) get_sheet_name:( Integer $sheet_tag )
@{
    #Sheet view name is sheet_name with suffix "@0"
    $sheet_view_name << First(mqc_askNameOfObject({$sheet_tag}));

    $sheet_name << First( SplitString( $sheet_view_name, "@") );
};


</SPAN></FONT></PRE></DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\">Log all overlap views on this sheet
</PRE><DIV><PRE STYLE=\"text-align : left;\" CLASS=\"Code\"><FONT COLOR=blue>( Method Any ) log_overlap_views:( Integer $drawing_view, List $overlap_views )
@{
    If ( Empty?( $overlap_views ) )
    Then donothing
    Else
    @{
         $user_msg   << If ( (!user_msg_logged?:)&(log_msg:!="") )
                        Then log_msg: + "~n"
                        Else "";
         
         $detail_msg << "Found " 
                        + Stringvalue( Length( $overlap_views ) )
                        + " overlapped member views on sheet "
                        + get_sheet_name:( $drawing_view ) 
                        + ".";

         ug_mqc_log( Nth( log_type:, log_type_option: ),
                     Reverse($overlap_views), $user_msg+$detail_msg );

         If ( user_msg_logged?: )
         Then donothing
         Else Storevalue( True, self:, user_msg_logged? );
    };
};

</SPAN></FONT></PRE></DIV></TABLE><p class=EndLine>&nbsp;</p><p class=blank>&nbsp;</p></BODY></HTML>