Description: A hole feature has 2 sketches(one for location and the other for hole defining). This hole feature is placed in a component in an assembly.
I would like to place a point at location x, y, z. I have first used Component transform followed by its inverse and then model to sketch transform.
The code I am posting does create the point at the right location but the hole doesn't generate .
HRESULT hr = S_OK;
CComPtr
hr = pSwApp->IGetMathUtility(&PMathUtil);
CComPtr
hr = pSwApp->get_IActiveDoc2(&swModel);
CComPtr
hr = swModel->get_ISelectionManager(&pSelMgr);
CComPtr
hr = swModel->get_Extension(&pModExtn);
VARIANT_BOOL VBStat;
CComBSTR CompName(L"L-1@00/LDS-1@L"); //Selecting the component in the assembly
CComBSTR Type2(L"COMPONENT");
hr = pModExtn->SelectByID2(CompName, Type2, 0.0, 0.0, 0.0, VARIANT_FALSE, 0, NULL, 0, &VBStat);
long Ind , Mark ;
CComPtr
Ind = 1; Mark = -1;
hr = pSelMgr->GetSelectedObject6(Ind, Mark, &pDisp);
CComPtr
hr = pDisp->QueryInterface(&pComp);
CComPtr
hr = pComp->get_Transform2(&pCompTrFrom);
pDisp.Release();
hr = pCompTrFrom->Inverse(&pDisp); //Getting its inverse
pCompTrFrom.Release();
hr = pDisp->QueryInterface(&pCompTrFrom);
double A[3] = {-.050, .030, -.085};
VARIANT var3;
var3.vt = VT_ARRAY|VT_R8;
var3.parray = SafeArrayCreateVector(VT_R8, 0l, 3l);
long i = 0;
hr = SafeArrayPutElement(var3.parray, &i, &A[0]);
hr = SafeArrayPutElement(var3.parray, &++i, &A[1]);
hr = SafeArrayPutElement(var3.parray, &++i, &A[2]);
pDisp.Release();
hr = PMathUtil->CreatePoint(var3, &pDisp);
CComPtr
hr = pDisp->QueryInterface(&pMthPnt);
pDisp.Release();
hr = pMthPnt->MultiplyTransform(pCompTrFrom, &pDisp);
pMthPnt.Release();
hr = pDisp->QueryInterface(&pMthPnt);
VARIANT Var;
hr = pMthPnt->get_ArrayData(&Var);
CComBSTR Name(L"Sketch3@L-1@00/LDS-1@L"); //Selecting the sketch in the hole feature of the component
CComBSTR Type(L"SKETCH");
hr = pModExtn->SelectByID2(Name, Type, VARIANT_FALSE, 0.0, 0.0, 0.0, 0, NULL, 0, &VBStat);
pDisp.Release();
hr = pSelMgr->GetSelectedObject6(Ind, Mark, &pDisp);
CComPtr
hr = pDisp->QueryInterface(&pFeat);
pDisp.Release();
hr = pFeat->GetSpecificFeature2(&pDisp);
CComPtr
hr = pDisp->QueryInterface(&pSketch);//got sketch
CComPtr
hr = pSketch->get_ModelToSketchTransform(&pMathTransform); //getting the model to sketch transform
pDisp.Release();
hr = pMthPnt->MultiplyTransform(pMathTransform, &pDisp);
pMthPnt.Release();
hr = pDisp->QueryInterface(&pMthPnt);
CComVariant VarMn;
hr = pMthPnt->get_ArrayData(&VarMn);
long Sz, lBnd;
hr = GetSafeArrayElementSize(&VarMn, Sz, lBnd);
double B[3];
for(long i = lBnd; i < Sz; i++)
{
hr = SafeArrayGetElement(VarMn.parray, &i, &B[i]);
}
hr = swModel->EditSketch(); Entering the edit sketch mode
hr = swModel->ClearSelection2(VARIANT_TRUE);
CComPtr
hr = swModel->get_SketchManager(&pSkhMgr);
hr = pSkhMgr->put_AddToDB(VARIANT_TRUE);
CComPtr
hr = pSkhMgr->CreatePoint(B[0], B[1], B[2], &pSkhPnt); //Creating the sketch point
hr = pSkhMgr->put_AddToDB(VARIANT_FALSE);
hr = pSkhMgr->InsertSketch(VARIANT_TRUE);
SolidworksApi macros