Esempio n. 1
0
// draws a an arc to two tangents connecting (current) to (x1,y1) and (x1,y1) to (x2,y2), also a straight line from (current) to (x1,y1)
void wxGraphicsPathData::AddArcToPoint( wxDouble x1, wxDouble y1 , wxDouble x2, wxDouble y2, wxDouble r )
{
    wxPoint2DDouble current;
    GetCurrentPoint(&current.m_x,&current.m_y);
    wxPoint2DDouble p1(x1,y1);
    wxPoint2DDouble p2(x2,y2);

    wxPoint2DDouble v1 = current - p1;
    v1.Normalize();
    wxPoint2DDouble v2 = p2 - p1;
    v2.Normalize();

    wxDouble alpha = v1.GetVectorAngle() - v2.GetVectorAngle();

    if ( alpha < 0 )
        alpha = 360 + alpha;
    // TODO obtuse angles

    alpha = DegToRad(alpha);

    wxDouble dist = r / sin(alpha/2) * cos(alpha/2);
    // calculate tangential points
    wxPoint2DDouble t1 = dist*v1 + p1;

    wxPoint2DDouble nv1 = v1;
    nv1.SetVectorAngle(v1.GetVectorAngle()-90);
    wxPoint2DDouble c = t1 + r*nv1;

    wxDouble a1 = v1.GetVectorAngle()+90;
    wxDouble a2 = v2.GetVectorAngle()-90;

    AddLineToPoint(t1.m_x,t1.m_y);
    AddArc(c.m_x,c.m_y,r,DegToRad(a1),DegToRad(a2),true);
    AddLineToPoint(p2.m_x,p2.m_y);
}
Esempio n. 2
0
	void CSimPetriDoc::CreateOMPDoc(CString pathToFile)
	{
		ompMode = TRUE;
		delete stepper;

		//Créer le squelette
		const std::wstring pathName(pathToFile);
		const wchar_t *separator = _T(";");
		omp::Reader dataReader(pathName, separator);
		omp::PetriOMP omp(dataReader, skeleton);

		//Créer le stepper
		stepper = new pm::TrackableStepper(&skeleton, &timer);

		//Ajouter les places
		double radiusPlaces = ((double)(3)/4) * min(size.cx/2, size.cy/2);
		pm::Places places = skeleton.getPlaces();
		unsigned index = 0;
		for(auto it=places.begin(); it!=places.end(); ++it)
		{
			int x(size.cx/2 + radiusPlaces*std::cos(((double)(index)/places.size())*2*3.14));
			int y(-size.cy/2 + radiusPlaces*std::sin(((double)(index)/places.size())*2*3.14));
			shapesMap.insert(std::make_pair(*it, AddPlace(Point(x,y), *it)));
			++index;
		}

		//Ajouter les transitions
		double radiusTrans = ((double)(1)/2) * min(size.cx/2, size.cy/2);
		pm::Transitions transitions = skeleton.getTransitions();
		index = 0;
		for(auto it=transitions.begin(); it!=transitions.end(); ++it)
		{
			Point source = shapesMap.at((*it)->getInputArcs().front()->getSourceNode())->GetPosition();
			Point end = shapesMap.at((*it)->getOutputArcs().front()->getEndNode())->GetPosition();
			//int x(size.cx/2 + radiusTrans*std::cos(((double)(index)/transitions.size())*2*3.14));
			//int y(-size.cy/2 + radiusTrans*std::sin(((double)(index)/transitions.size())*2*3.14));
			shapesMap.insert(std::make_pair(*it, AddTransition(Geometry::MiddlePoint(source, end), *it)));
			++index;
		}

		//Ajouter les arcs
		pm::Arcs arcs = skeleton.getArcs();
		std::vector<Point> nullVector;
		for(auto it=arcs.begin(); it!=arcs.end(); ++it)
			AddArc(shapesMap.at((*it)->getSourceNode()),
			shapesMap.at((*it)->getEndNode()),
			nullVector,
			*it);
	}
void CFX_PathGenerator::AddPie(FX_FLOAT x,
                               FX_FLOAT y,
                               FX_FLOAT width,
                               FX_FLOAT height,
                               FX_FLOAT start_angle,
                               FX_FLOAT sweep_angle) {
  if (sweep_angle == 0) {
    int old_count = m_pPathData->GetPointCount();
    m_pPathData->AddPointCount(2);
    m_pPathData->SetPoint(old_count, x, y, FXPT_MOVETO);
    m_pPathData->SetPoint(old_count + 1, x + (width * FXSYS_cos(start_angle)),
                          y + (height * FXSYS_sin(start_angle)), FXPT_LINETO);
    return;
  }
  AddArc(x, y, width, height, start_angle, sweep_angle);
  m_pPathData->AddPointCount(1);
  m_pPathData->SetPoint(m_pPathData->GetPointCount() - 1, x, y,
                        FXPT_LINETO | FXPT_CLOSEFIGURE);
}
void CFX_PathGenerator::AddEllipse(FX_FLOAT x,
                                   FX_FLOAT y,
                                   FX_FLOAT width,
                                   FX_FLOAT height) {
#if 0
    FX_FIXFLOAT16 k;
    k = fix16_to_8(fixsqrt_32_to_16(fixmul_8_8_to_32(width, width) + fixmul_8_8_to_32(height, height)) / 2);
    int old_count = m_pPathData->GetPointCount();
    m_pPathData->AddPointCount(7);
    m_pPathData->SetPoint(old_count, x, y - height / 2, FXPT_MOVETO);
    m_pPathData->SetPoint(old_count + 1, x + k, y - height / 2, FXPT_BEZIERTO);
    m_pPathData->SetPoint(old_count + 2, x + k, y + height / 2, FXPT_BEZIERTO);
    m_pPathData->SetPoint(old_count + 3, x, y + height / 2, FXPT_BEZIERTO);
    m_pPathData->SetPoint(old_count + 4, x - k, y + height / 2, FXPT_BEZIERTO);
    m_pPathData->SetPoint(old_count + 5, x - k, y - height / 2, FXPT_BEZIERTO);
    m_pPathData->SetPoint(old_count + 6, x, y - height / 2, FXPT_BEZIERTO);
#else
  AddArc(x, y, width, height, 0, FX_PI * 2);
#endif
}
Esempio n. 5
0
void wxGraphicsPathData::AddCircle( wxDouble x, wxDouble y, wxDouble r )
{
    MoveToPoint(x+r,y);
    AddArc( x,y,r,0,2*M_PI,false);
    CloseSubpath();
}
Esempio n. 6
0
void wxGraphicsPath::AddArc( const wxPoint2DDouble& c, wxDouble r, wxDouble startAngle, wxDouble endAngle, bool clockwise)
{
    AddArc(c.m_x, c.m_y, r, startAngle, endAngle, clockwise);
}
 //AddArc--------------------------------------------------------------------
 Status GraphicsPath::AddArc( const RectF& rect, REAL startAngle, REAL sweepAngle )
 {
     return AddArc( rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle );
 }
int main(int argc, char *argv[])
{
    AdjBoxPtr my_box;
    CreateAdjBox(&my_box);

    AddPoint(my_box, 1);
    AddPoint(my_box, 2);
    AddPoint(my_box, 3);
    AddPoint(my_box, 4);
    AddPoint(my_box, 5);
    AddPoint(my_box, 6);
    AddPoint(my_box, 7);
    AddPoint(my_box, 8);
    AddPoint(my_box, 9);


    AddArc(my_box, 1, 2);
    AddArc(my_box, 1, 7);
    AddArc(my_box, 1, 6);

    AddArc(my_box, 2, 3);
    AddArc(my_box, 2, 9);
    AddArc(my_box, 2, 7);
    AddArc(my_box, 2, 1);

    AddArc(my_box, 3, 4);
    AddArc(my_box, 3, 9);
    AddArc(my_box, 3, 2);

    AddArc(my_box, 4, 5);
    AddArc(my_box, 4, 8);
    AddArc(my_box, 4, 7);
    AddArc(my_box, 4, 9);
    AddArc(my_box, 4, 3);

    AddArc(my_box, 5, 6);
    AddArc(my_box, 5, 8);
    AddArc(my_box, 5, 4);

    AddArc(my_box, 6, 1);
    AddArc(my_box, 6, 7);
    AddArc(my_box, 6, 5);

    AddArc(my_box, 7, 1);
    AddArc(my_box, 7, 2);
    AddArc(my_box, 7, 4);
    AddArc(my_box, 7, 8);
    AddArc(my_box, 7, 6);

    AddArc(my_box, 8, 4);
    AddArc(my_box, 8, 5);
    AddArc(my_box, 8, 7);

    AddArc(my_box, 9, 2);
    AddArc(my_box, 9, 3);
    AddArc(my_box, 9, 4);

    ShowAdjBox(my_box);

    DFSTraverse(my_box, 1);

//    DFSwithStack(my_box, 1);
    return 0;
}
Esempio n. 9
0
File: realmap.c Progetto: taxusyew/c
void main()
{
	RealMap * rm = CreateRM();

	//AddNode(rm, 1, 33);
	//AddNode(rm, 2, 44);
	//AddNode(rm, 3, 55);
	//AddNode(rm, 4, 66);
	//AddNode(rm, 5, 77);

	//AddArc(rm, 2, 3, 41);
	//AddArc(rm, 1, 3, 16);
	//AddArc(rm, 1, 2, 78);
	//AddArc(rm, 2, 1, 78);
	////AddArc(rm, 1, 7, 78);
	//AddArc(rm, 1, 4, 78);
	//AddArc(rm, 1, 4, 78);
	//AddArc(rm, 1, 5, 78);
	//AddArc(rm, 4, 5, 78);
	//AddArc(rm, 3, 4, 78);
	//AddArc(rm, 3, 1, 78);

	//PrintRM(rm);

	//UpdateArc(rm, 1, 4, 9999, 1);
	////DeleteArc(rm, 1, 5);
	////DeleteArc(rm, 1, 2);
	////DeleteArc(rm, 1, 3);
	////DeleteArc(rm, 1, 7);

	//DeleteNode(rm, 1);
	//PrintRM(rm);

	//EmptyRM(rm);
	//PrintRM(rm);

	AddNode(rm, 1, 33);
	AddNode(rm, 2, 44);
	AddNode(rm, 3, 55);
	AddNode(rm, 4, 66);
	AddNode(rm, 5, 77);
	AddNode(rm, 6, 33);
	AddNode(rm, 7, 44);
	AddNode(rm, 8, 55);
	AddNode(rm, 9, 66);
	AddNode(rm, 10, 77);

	AddArc(rm, 1, 2, 78);
	AddArc(rm, 1, 3, 78);
	AddArc(rm, 1, 4, 78);
	AddArc(rm, 2, 5, 78);
	AddArc(rm, 3, 5, 78);
	AddArc(rm, 3, 7, 78);
	AddArc(rm, 4, 6, 78);
	AddArc(rm, 4, 7, 78);
	AddArc(rm, 5, 6, 78);
	AddArc(rm, 5, 7, 78);

	AddArc(rm, 8, 9, 78);

	// 得到图有多少个连通域
	int count = DomainNum(rm);
	DestoryRM(rm);
}
Esempio n. 10
0
void CFX_PathGenerator::AddEllipse(FX_FLOAT x,
                                   FX_FLOAT y,
                                   FX_FLOAT width,
                                   FX_FLOAT height) {
  AddArc(x, y, width, height, 0, FX_PI * 2);
}