Example #1
0
QVector3D Slice::linePLaneIntersection(HalfEdge edge, QVector3D planeOrigin, QVector3D planeNormal){
    QVector3D u=edge.getStart()->toVector3D()-edge.getStop()->toVector3D();
    QVector3D w=edge.getStop()->toVector3D()-planeOrigin;
    QVector3D normal=planeNormal;

    float d=QVector3D::dotProduct(normal,u);
    float n=-QVector3D::dotProduct(normal,w);
    //line is parallel to plane
    if(fabs(d)<0.00000001){
        if(n==0){
            qDebug() << "line is on plane";
            return QVector3D(edge.getStart()->toVector3D());
        }
        else{
            qDebug() << "no intersection";
            return QVector3D();
        }
    }
    //line croses plane
    float sI = n/d;
    if(sI<0 || sI>1){
        qDebug() << "no intersection";
        return QVector3D();
    }
    return edge.getStop()->toVector3D() + u*sI;
}