Add a WorkPoint at the intersection of a line and a plane

Top  Previous  Next

Here's a fragment (no error checking) which explains how to do it...


       // Get the proxy of the axis

       CComPtr<WorkAxisProxy> pNodeWAZProxy ;



       CComPtr<TransientGeometry> pTransGeom = GetTransGeomPtr () ;   


       LinePtr pLine = pNodeWAZProxy->GetLine();

       PointPtr pLineRoot = pLine->GetRootPoint();

       UnitVectorPtr pLineDir = pLine->GetDirection();

       CComPtr <Vector> pvecDir  ;

       hRes = pLineDir->AsVector(&pvecDir);


       CComPtr <Line> pZAxis;

       hRes = pTransGeom->CreateLine  (pLineRoot,pvecDir,&pZAxis);


       CComPtr<Point> pOrigin;

       CComPtr<Point> p1;

       CComPtr<Point> p2;


       // Create 3 points in the XY plane...

       pTransGeom->CreatePoint(0, 0, 0, &pOrigin);

       pTransGeom->CreatePoint(1, 0, 0, &p1);

       pTransGeom->CreatePoint(0, 1, 0, &p2);


       // Create the plane with 3 points...

       CComPtr<Plane> pGeomXYPlane;

       hRes = pTransGeom->CreatePlaneByThreePoints(pOrigin, p1, p2, &pGeomXYPlane);


       // In general there could me many intersections of a line and a surfaces,

       // With a plane we expeect pObjEnum to contain a single object

       CComPtr <ObjectsEnumerator> pObjEnum;

       hRes = pTransGeom->CurveSurfaceIntersection(pZAxis, pGeomXYPlane, 0.1, &pObjEnum);


       TRACE ("There are %d intersections...\n",pObjEnum->Count);


       if (pObjEnum->Count < 1) {

           gLogger.Printf(ekErrMsg, "No intersections found...");




       CComPtr <Point> pIntersectionPoint;

       hRes = pObjEnum->get_Item(1,(IDispatch**)&pIntersectionPoint);


       TRACE("Intersection at %.2f %.2f %.2f \n",





       CComPtr<WorkPoints> pWorkPoints;

       hRes = pAssemblyCompDef->get_WorkPoints(&pWorkPoints);


       CComPtr <WorkPoint> pInterWorkPoint;

       pWorkPoints->AddFixed (pIntersectionPoint,FALSE,&pInterWorkPoint);


       CComBSTR bstrPointName("ZeroPoint");

       hRes = pInterWorkPoint->put_Name(bstrPointName);



Text, images and diagrams © 2021 Owen F. Ransen. All rights reserved. (But copy the source code as much as you want!)