1

ユーザーが画面をクリックすると、ポイントからポイントへと線が描画されるプログラムを実装しようとしています。Curve クラスのサブクラスである Freeform クラスのサブクラスである Polyline クラスがあります。通常、Curve スーパークラスの draw メソッドは getPoint を呼び出します。これにより、その特定のポイントでカーブの加重ポイントが取得されます。ただし、Polyline の draw メソッドの場合、curve クラスをオーバーライドして、ユーザーがクリックしているポイントを取得しようとしています (ご覧のとおり、Polyline クラスの draw メソッドは getPoint を呼び出しません)。しかし、コードをデバッグすると、ポリラインを描画しようとすると getPoint がまだ呼び出されていることがわかります。助言がありますか?

class Curve {

public:
    virtual float2 getPoint(float t)=0;

    void draw(){

        glBegin(GL_LINE_STRIP);
        for (float i = 0; i < 1; i+=.01) {
            float2 point = getPoint(i);
            float x = point.x;
            float y = point.y;
            glVertex2d(x, y);

        }
        glEnd();
        }; 
    };

class Freeform : public Curve
{
protected:
    std::vector<float2> controlPoints;

public:
    virtual float2 getPoint(float t)=0;
    virtual void addControlPoint(float2 p)
    {
        controlPoints.push_back(p);
    }
    void drawControlPoints(){
        glBegin(GL_POINTS);
        for (float i = 0; i < controlPoints.size(); i++) {
            float2 point = controlPoints.at(i);
            float x = point.x;
            float y = point.y;
            glVertex2d(x, y);

        }
        glEnd();// draw points at control points
    }
};

class Polyline : public Freeform {
public:
    float2 getPoint(float t) {
        return float2(0.0, 0.0);
    }
    //we add a control point (in this case, control point is where mouse is clicked)
    void addControlPoint(float2 p)
    {
        controlPoints.push_back(p);
    }
    //trying to override Curve draw method
    void draw(){
        glBegin(GL_LINE_STRIP);
            for (float i = 0; i < controlPoints.size(); i++) {
            float2 point = controlPoints.at(i);
            float x = point.x;
            float y = point.y;
            glVertex2d(x, y);
        }
        glEnd();
    };
};
4

1 に答える 1