void arrangement::compute_criticalCurves_type_I() { double radius_1 = ((double)manipulator_diametre)/2.0; double radius_2 = ((double)target_diametre)/2.0; for (int i = 0; i < (int) convolutions_o.size(); ++i) { Arrangement_2 copy(convolutions_o[i]); Walk_pl walk_pl(copy); // Add the critical curves of type I. for (Arrangement_2::Edge_iterator edge = convolutions_o[i].edges_begin(); edge != convolutions_o[i].edges_end(); ++edge) { if (CGAL::COLLINEAR == edge->curve().orientation()) { // Displaced a segment. Nt_traits nt_traits; Algebraic_ft factor = nt_traits.convert(Rational(radius_1) + Rational(radius_2)); Conic_point_2 source = edge->curve().source(); Conic_point_2 target = edge->curve().target(); Algebraic_ft delta_x = target.x() - source.x(); Algebraic_ft delta_y = target.y() - source.y(); Algebraic_ft length = nt_traits.sqrt(delta_x * delta_x + delta_y * delta_y); Algebraic_ft translation_x = - factor * delta_y / length; Algebraic_ft translation_y = factor * delta_x / length; Conic_point_2 point_1(source.x() + translation_x, source.y() + translation_y); Conic_point_2 point_2(target.x() + translation_x, target.y() + translation_y); Algebraic_ft a = delta_y; Algebraic_ft b = - delta_x; Algebraic_ft c = factor * length + (source.y() * target.x() - source.x() * target.y()); X_monotone_curve_2 x_monotone_curve(a, b, c, point_1, point_2); insert(nonCriticalRegions, x_monotone_curve); } else { // Displaces an arc. Rational two(2); Rational r = edge->curve().r(); Rational u = edge->curve().u(); Rational v = edge->curve().v(); Nt_traits nt_traits; Rational x_center = - u / (two * r); Rational y_center = - v / (two * r); Rat_point_2 rat_center(x_center, y_center); Conic_point_2 center(nt_traits.convert(x_center), nt_traits.convert(y_center)); Rational radius = Rational(radius_1) + two * Rational(radius_2); Algebraic_ft coefficient = nt_traits.convert(radius / Rational(radius_2)); Conic_point_2 source_1 = edge->curve().source(); Algebraic_ft x_source_2 = center.x() + coefficient * (source_1.x() - center.x()); Algebraic_ft y_source_2 = center.y() + coefficient * (source_1.y() - center.y()); Conic_point_2 source_2(x_source_2, y_source_2); Conic_point_2 target_1 = edge->curve().target(); Algebraic_ft x_target_2 = center.x() + coefficient * (target_1.x() - center.x()); Algebraic_ft y_target_2 = center.y() + coefficient * (target_1.y() - center.y()); Conic_point_2 target_2(x_target_2, y_target_2); Rat_circle_2 circle(rat_center, radius * radius); Conic_curve_2 conic_arc(circle, CGAL::CLOCKWISE, source_2, target_2); insert(nonCriticalRegions, conic_arc); } } // keep only wanted curves and put it in the arrangement for (Arrangement_2::Edge_iterator e = nonCriticalRegions.edges_begin(); e != nonCriticalRegions.edges_end(); ++e) if ((e->data().compare("") == 0)) keep_arc(e, copy, walk_pl); for (Arrangement_2::Edge_iterator edge = convolutions_o[i].edges_begin(); edge != convolutions_o[i].edges_end(); ++edge) insert(nonCriticalRegions, edge->curve()); } }
void CriticalCurves::setParameters(double radius_1, double radius_2, Arrangements_2 insets_1, Arrangements_2 insets_2) { Arrangement_2_iterator inset_1 = insets_1.begin(); Arrangement_2_iterator inset_2 = insets_2.begin(); while (inset_1 != insets_1.end() && inset_2 != insets_2.end()) { Arrangement_2 arrangement; // Add the curves of the inset. for (Edge_iterator edge = inset_1->edges_begin(); edge != inset_1->edges_end(); ++edge) { insert(arrangement, edge->curve()); } // Add the critical curves of type I. for (Edge_iterator edge = inset_2->edges_begin(); edge != inset_2->edges_end(); ++edge) { if (CGAL::COLLINEAR == edge->curve().orientation()) { // Displaced a segment. Nt_traits nt_traits; Algebraic_ft factor = nt_traits.convert(Rational(radius_1) + Rational(radius_2)); Conic_point_2 source = edge->curve().source(); Conic_point_2 target = edge->curve().target(); Algebraic_ft delta_x = target.x() - source.x(); Algebraic_ft delta_y = target.y() - source.y(); Algebraic_ft length = nt_traits.sqrt(delta_x * delta_x + delta_y * delta_y); Algebraic_ft translation_x = factor * delta_y / length; Algebraic_ft translation_y = - factor * delta_x / length; Conic_point_2 point_1(source.x() + translation_x, source.y() + translation_y); Conic_point_2 point_2(target.x() + translation_x, target.y() + translation_y); Algebraic_ft a = - delta_y; Algebraic_ft b = delta_x; Algebraic_ft c = factor * length - (source.y() * target.x() - source.x() * target.y()); X_monotone_curve_2 x_monotone_curve(a, b, c, point_1, point_2); insert(arrangement, x_monotone_curve); } else { // Displaces an arc. Rational two(2); Rational four(4); Rational r = edge->curve().r(); Rational s = edge->curve().s(); Rational t = edge->curve().t(); Rational u = edge->curve().u(); Rational v = edge->curve().v(); Rational w = edge->curve().w(); Nt_traits nt_traits; Rational x_center = - u / (two * r); Rational y_center = - v / (two * r); Rat_point_2 rat_center(x_center, y_center); Conic_point_2 center(nt_traits.convert(x_center), nt_traits.convert(y_center)); Rational radius = Rational(radius_1) + two * Rational(radius_2); Algebraic_ft coefficient = nt_traits.convert(radius / Rational(radius_2)); Conic_point_2 source_1 = edge->curve().source(); Algebraic_ft x_source_2 = center.x() + coefficient * (source_1.x() - center.x()); Algebraic_ft y_source_2 = center.y() + coefficient * (source_1.y() - center.y()); Conic_point_2 source_2(x_source_2, y_source_2); Conic_point_2 target_1 = edge->curve().target(); Algebraic_ft x_target_2 = center.x() + coefficient * (target_1.x() - center.x()); Algebraic_ft y_target_2 = center.y() + coefficient * (target_1.y() - center.y()); Conic_point_2 target_2(x_target_2, y_target_2); Rat_circle_2 circle(rat_center, radius * radius); Conic_arc_2 conic_arc(circle, CGAL::COUNTERCLOCKWISE, source_2, target_2); insert(arrangement, conic_arc); } } // Add the critical curves of type II. for (Edge_iterator edge = inset_2->edges_begin(); edge != inset_2->edges_end(); ++edge) { double x = CGAL::to_double(edge->curve().source().x()); double y = CGAL::to_double(edge->curve().source().y()); double radius = radius_1 + radius_2; Rat_point_2 center(x, y); Rat_circle_2 circle(center, radius * radius); Conic_arc_2 conic_arc(circle); insert(arrangement, conic_arc); } // Remove the curves which are not include in the inset. Objects objects; Face_handle face; for (Edge_iterator edge = arrangement.edges_begin(); edge != arrangement.edges_end(); ++edge) { CGAL::zone(*inset_1, edge->curve(), std::back_inserter(objects)); for (Object_iterator object = objects.begin(); object != objects.end(); ++object) { if (assign(face, *object)) { if (face->is_unbounded()) { remove_edge(arrangement, edge); break; } } } objects.clear(); } // Print essential information on the standard input. std::cout << "Arrangement:" << std::endl; std::cout << " Number of vertices: " << arrangement.number_of_vertices() << std::endl; std::cout << " Number of edges : " << arrangement.number_of_edges() << std::endl; std::cout << " Number of face : " << arrangement.number_of_faces() << std::endl; this->critical_curves.push_back(arrangement); ++inset_1; ++inset_2; } // Commit changes. emit(criticalCurvesChanged()); return; }
void LinkStatusWidget::paintEvent(QPaintEvent *event){ initLines(); QPainter painter(this); QPixmap pic(QString::fromUtf8(":/computer_white.png")); QRectF dest(0,0,pic.width(),pic.height()); QPixmap pic2(QString::fromUtf8(":/honeywell.png")); QRectF dest2(0,0,pic2.width(),pic2.height()); //220*180 QRectF target_0(this->left_left,this->left_top,this->left_width,this->left_height); QRectF target_1(this->width()-this->right_right-this->right_width,this->right_top,this->right_width,this->right_height); QRectF target_2(this->width()-this->right_right-this->right_width,this->right_top+this->right_height+this->right_space,this->right_width,this->right_height); painter.setPen(Qt::white); painter.drawPixmap(target_0,pic2,dest2); painter.drawText(this->left_left+this->left_width+this->left_space,this->left_top+painter.fontMetrics().height(),Config::LINKSTATUS_LABEL.split("#").at(2)); painter.drawPixmap(target_1,pic,dest); QString text=Config::LINKSTATUS_LABEL.split("#").at(0); int f_w=painter.fontMetrics().width(text); painter.drawText(this->width()-this->right_right-this->right_width-this->right_space*2-f_w,this->right_top+painter.fontMetrics().height()+this->right_space,text); painter.drawPixmap(target_2,pic,dest); text=Config::LINKSTATUS_LABEL.split("#").at(1); f_w=painter.fontMetrics().width(text); painter.drawText(this->width()-this->right_right-this->right_width-this->right_space*2-f_w,this->right_top+this->right_height+this->right_space*2+painter.fontMetrics().height(),text); //draw base line painter.save(); //#353942 QPen pen1(Qt::white,8,Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin); pen1.setColor(QColor(53, 57, 66)); painter.setPen(pen1); painter.drawLines(lines); painter.restore(); if(!this->isConn){ return; } int centerHeight=this->right_top+this->right_height+this->right_space/2; QColor co1 =QColor(146, 196, 15) ; QColor co2 =QColor(0, 255, 0, 0); QColor co3 =QColor( 255,0, 0,200); QColor co4 =QColor( 255,0,0, 0); int mleft=this->width()-this->right_right-this->right_width-this->right_space-this->countMain; int mright=mleft+this->line_width_main; if(this->isBroken_1){ QLinearGradient linearGradient = QLinearGradient(mleft,centerHeight,mright,centerHeight); linearGradient.setColorAt(0,co3); linearGradient.setColorAt(1,co4); QPen pen2(linearGradient,5); pen2.setCapStyle(Qt::RoundCap); painter.setPen(pen2); }else{ QLinearGradient linearGradient = QLinearGradient(mleft,centerHeight,mright,centerHeight); linearGradient.setColorAt(0,co1); linearGradient.setColorAt(1,co2); QPen pen2(linearGradient,5); pen2.setCapStyle(Qt::RoundCap); painter.setPen(pen2); } painter.drawLine(mleft,centerHeight,mright,centerHeight); int sbottom= this->right_top+this->right_height/2+this->countSub; int stop= sbottom-this->line_width_sub; int sright=this->width()-this->right_right+this->right_space; //message 2 if(this->isBroken_2){ QLinearGradient linearGradient2 = QLinearGradient(sright,stop,sright,sbottom); linearGradient2.setColorAt(0,co4); linearGradient2.setColorAt(1,co3); QPen pen3(linearGradient2,4); pen3.setCapStyle(Qt::RoundCap); painter.setPen(pen3); }else{ QLinearGradient linearGradient2 = QLinearGradient(sright,stop,sright,sbottom); linearGradient2.setColorAt(0,co2); linearGradient2.setColorAt(1,co1); QPen pen3(linearGradient2,4); pen3.setCapStyle(Qt::RoundCap); painter.setPen(pen3); } painter.drawLine(sright,stop,sright,sbottom); }