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; }