]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blobdiff - Constructor/union.cpp
el conexionado se verifica pero hay casos en que falla, estaria bueno que hagan algun...
[z.facultad/75.42/plaqui.git] / Constructor / union.cpp
index 82a51409f12e7f795266dfd4e434f5bef6da7aba..e422133aee9c647797cc7c73f7a78bbb16702145 100644 (file)
@@ -11,6 +11,7 @@ Union::Union()
        image = imageN;
        set_size_request(image->get_width(), image->get_height());
        property_wnd->set_title("Propiedades del Empalme");
+       name = "union";
 }
 
 Union::~Union()
@@ -91,3 +92,56 @@ void Union::save(FILE *archivo)
        dato += "\t</union>\n";
        fprintf(archivo,dato.c_str());  
 }
+
+bool Union::check_connection()
+{
+       switch (get_img_actual()) {
+                       case 0:
+                               if ( is_other_connection_area( get_position_x() - 5, get_position_y() +16) &&
+                                        is_other_connection_area( get_position_x()+get_image()->get_width()+5, get_position_y()+16) &&
+                                        is_other_connection_area( get_position_x()+get_image()->get_width()/2, get_position_y()+get_image()->get_height()+5) )
+                                       return true;                            
+                               break;
+                       case 1:
+                               if ( is_other_connection_area( get_position_x()-5, get_position_y()+get_image()->get_height()/2) &&
+                                        is_other_connection_area( get_position_x()+get_image()->get_width()-16, get_position_y()-5) &&
+                                        is_other_connection_area( get_position_x()+get_image()->get_width()-16, get_position_y()+get_image()->get_height()+5) )
+                                       return true;                            
+                               break;
+                       case 2:
+                               if ( is_other_connection_area( get_position_x()-5, get_position_y()+get_image()->get_height()-16) &&
+                                        is_other_connection_area( get_position_x()+get_image()->get_width()/2, get_position_y()-5) &&
+                                        is_other_connection_area( get_position_x()+get_image()->get_width()+5, get_position_y()+get_image()->get_height()-16) )
+                                       return true;
+                               break;
+                       case 3:
+                               if ( is_other_connection_area( get_position_x()+16, get_position_y()-5) &&
+                                        is_other_connection_area( get_position_x()+get_image()->get_width()+5, get_position_y()+get_image()->get_height()/2) &&
+                                        is_other_connection_area( get_position_x()+16, get_position_y()+get_image()->get_height()+5) )
+                                       return true;
+       }
+       return false;   
+}
+
+bool Union::is_connection_area(int _a, int _b)
+{
+       switch ( imgActual) {
+               case 0: if ( ((_a <= x+10) && (_a > x+1) && (_b<= y + 22) && (_b >= y+10)) ||
+                                                 ((_a <= x+image->get_width()-1) && (_a >= x+image->get_width()-10)&&(_b <= y+22) && (_b >= y+10)) ||
+                                                 ((_a <= x+image->get_width()/2 + 5)&&( _a>= x+image->get_width()/2 - 5) && (_b<=y+image->get_height()-1)&&(_b >= y+image->get_height()-10)) )
+                                               return true;
+               case 1: if ( ((_a <= x+image->get_width()-10) && (_a >= x+image->get_width() -22) && (_b<= y + 10) && (_b > y )) ||
+                                                 ((_a <= x +10) && (_a > x )&&(_b <= y+image->get_height()/2+5 ) && (_b >= y+image->get_height()/2-5)) ||
+                                                 ((_a <= x+image->get_width() - 10)&&( _a>= x+image->get_width()-22) && (_b<=y+image->get_height()-1)&&(_b >= y+image->get_height()-10)) )
+                                               return true;
+               case 2: if ( ((_a <= x+10) && (_a > x+1) && (_b<= y+image->get_height()-1) && (_b >= y+image->get_height()-10)) ||
+                                                 ((_a <= x+image->get_width()-1) && (_a >= x+image->get_width()-10)&&(_b <= y+image->get_height()-10) && (_b >= y+image->get_height()-22)) ||
+                                                 ((_a <= x+image->get_width()/2 + 5)&&( _a>= x+image->get_width()/2 - 5) && (_b<=y+10)&&(_b > y)) )
+                                               return true;
+               case 3: if ( ((_a <= x+22) && (_a >= x+10) && (_b<= y + 10) && (_b > y )) ||
+                                                 ((_a <= x+22) && (_a >= x+10 )&&(_b <= y+image->get_height()-1 ) && (_b >= y+image->get_height()+10)) ||
+                                                 ((_a <= x+image->get_width() -1)&&( _a>= x+image->get_width()-10) && (_b<=y+image->get_height()/2+5)&&(_b >= y+image->get_height()/2-5)) )
+                                               return true;
+       }
+       return false;
+}