平行路径问题

时间:2022-08-29 14:35:47
  1.    GraphicsPath pH;                         //定义一个gdi+路径。
        PointF NmlPT[ 6 ];
        NmlPT[
    0 ] = PointF(  110110 ); NmlPT[ 1 ] = PointF( 310, 110 ); NmlPT[ 2 ] = PointF( 310, 310  );
        NmlPT[
    3 ] = PointF( 410410  ); NmlPT[ 4 ] = PointF( 410, 510 ); NmlPT[ 5 ] = PointF(  110, 610 );
        pH.AddPolygon( NmlPT,
    6 );      //路径中添加一个多边形。
       
        Pen pn(Color(
    255,0,0,0),1);        //定义原路径使用的画笔。颜色为黑色,宽度为1。
        gra->DrawPath(&pn,&pH);        //绘制原路径。

        Pen wdpn( Color(
    0,0,0,0),16 );   //建立一个扩展画笔
  2.     pH.Widen(&wdpn);                    //用这个画笔扩充路径。

        pH.Outline();                              
    //取得路径的轮廓,这一步是必须的。
        pn.SetColor(Color(255,255,0,0));//用红色画笔绘制扩充后的路径。
        gra->DrawPath(&pn,&pH);

        PathData pd;                               
    //建立一个PathData变量
        pH.GetPathData(&pd);             //取得扩充后路径的PathData,PathData中存储了路径上所有的关键点

       
    //下面我仅仅是简单的将路径内外的点分开了,其中PathData中前面6个点是原多边形外面的点,后面6个点是原多边形内部的六个点。
        
    //注意这里的前六个点并不一定就是外面的点,需要根据路径的情况判断,具体的判断方法在这里就不说了。
        for( INT id = 0; id< pd.Count/2; id ++ )                 //用浅绿色绘制前六点。
        {
            Pen pm( Color(
    255,0,255,255 ), 2 );    
            gra
    ->DrawEllipse(&pm,pd.Points[id].X-3,pd.Points[id].Y-3,REAL(6),REAL(6) );
        }

       
    for( INT idx = pd.Count/2; idx< pd.Count; idx ++//用蓝色绘制后六个点。
        {
            Pen pm( Color(
    255,0,0,255 ), 2 );
            gra
    ->DrawEllipse(&pm,pd.Points[idx].X-3,pd.Points[idx].Y-3,REAL(6),REAL(6) );
        }

平行路径问题