How to create Maximum Dimension to all drafting view
Hello everyone ,
I have to create maximum dimension to all drafting view , for that I find the maximum and minimum coordinate of solid body using bounding box api , using this coordinates I create datum coordinate system , now I want to add dimension using these coordinate system but it's giving me some error , Please help me to resolve this error ,
I am sharing the code for your reference ,
Code : -
void MaxDimension()
{
ProErr err;
ProDrawing drawing;
ProView *views;
Pro3dPnt outline[2];
ProSolid solid;
ProVector csys_pos;
list<ProView> view_collect;
err = ProMdlCurrentGet((ProMdl*)&drawing);
err = ProDrawingViewsCollect(drawing, &views);
int viewCount;
err = ProArraySizeGet((ProArray)views, &viewCount);
for (size_t i = 0; i < viewCount; i++)
{
view_collect.push_front(views[i]);
}
err = ProDrawingViewSolidGet(drawing, view_collect.front(), &solid);
err = ProSolidOutlineGet((ProSolid)solid, outline);
double minCoor[3] = { outline[0][0],outline[0][1],outline[0][2] };
double maxCoor[3] = { outline[1][0], outline[1][1],outline[1][2] };
/*------------------Create Offset Datum Csys To place the dimension ----------------------*/
ProSelection csys_sel;
wchar_t *csys_name = L"PRT_CSYS_DEF";
ProCsys p_csys;
ProModelitem mdlitem;
ProName offset_csys_name_1 = L"PTN01";
ProName offset_csys_name_2 = L"PTN02";
ProUtilCsysFind(solid, csys_name, &p_csys);
err = ProCsysToGeomitem(solid, p_csys, (ProGeomitem*)&mdlitem);
err = ProSelectionAlloc(NULL, &mdlitem, &csys_sel);
err = ProSelectionPoint3dGet(csys_sel, csys_pos);
ProFeature offset_csys_1 = ProDemoGeneralCsysCreate(minCoor[0], minCoor[1], minCoor[2], &csys_sel, offset_csys_name_1, solid);
ProFeature offset_csys_2 = ProDemoGeneralCsysCreate(maxCoor[0], maxCoor[1], maxCoor[2], &csys_sel, offset_csys_name_2, solid);
for (size_t i = 0; i < viewCount; i++)
{
int view_id;
err = ProDrawingViewIdGet(drawing, views[i], &view_id);
err = ProDwgViewRegenerate(drawing, view_id);
}
ProType featureType = PRO_CSYS;
ProModelitem *item1;
ProModelitem *item2;
err = ProUtilCollectFeatureGeomitems(&offset_csys_1, featureType, &item1);
err = ProUtilCollectFeatureGeomitems(&offset_csys_1, featureType, &item2);
ProSelection selection_1;
ProSelection selection_2;
err = ProSelectionAlloc(NULL,item1, &selection_1);
err = ProSelectionAlloc(NULL, item2, &selection_2);
ProGeomitem csys_geom_1;
ProAsmcomppath csys_comppath1;
err = ProSelectionModelitemGet(selection_1, &csys_geom_1);
err = ProSelectionAsmcomppathGet(selection_1, &csys_comppath1);
/*--------------------------------------------------------------------*\
Get the root solid
\*--------------------------------------------------------------------*/
ProSolid newSolid;
if (csys_comppath1.table_num > 0)
newSolid = csys_comppath1.owner;
else
newSolid = (ProSolid)csys_geom_1.owner;
ProSelectionPoint3dGet(csys_sel, csys_pos);
ProMatrix trf1;
ProVector csys_pos1;
if (csys_comppath1.table_num > 0)
{
ProAsmcomppathTrfGet(&csys_comppath1, PRO_B_TRUE, trf1);
ProPntTrfEval(csys_pos, trf1, csys_pos);
}
ProView selView;
ProVector csys_3dpos;
memcpy(csys_3dpos, csys_pos, sizeof(ProVector));
err = ProSelectionViewGet(csys_sel, &selView);
err = ProDrawingViewTransformGet(drawing, selView, PRO_B_TRUE, trf1);
err = ProPntTrfEval(csys_pos1, trf1, csys_pos1);
ProVector view_outline[2];
err = ProDrawingViewOutlineGet(drawing, selView, view_outline);
ProSelection *attachments;
ProDimSense *senses;
ProArrayAlloc(2, sizeof(ProSelection), 1, (ProArray*)&attachments);
ProArrayAlloc(2, sizeof(ProDimSense), 1, (ProArray*)&senses);
senses[0].type = PRO_DIM_SNS_TYP_PNT;
senses[0].sense = PRO_POINT_TYP_CENTER;
senses[0].orient_hint = PRO_DIM_ORNT_VERT;
/*--------------------------------------------------------------------*\
Set up the "sense" information for the csys attachment
\*--------------------------------------------------------------------*/
senses[1].type = PRO_DIM_SNS_TYP_PNT;
senses[1].sense = PRO_POINT_TYP_CENTER;
senses[1].orient_hint = PRO_DIM_ORNT_NONE;
ProSelectionCopy(selection_1, &attachments[0]);
ProSelectionViewSet(selView, &attachments[0]);
ProSelectionCopy(selection_2, &attachments[1]);
ProVector dim_pos;
dim_pos[0] = view_outline[0][0] - 20.0;
dim_pos[1] = (csys_pos1[1]) / 2.0;
dim_pos[2] = 0.0;
ProDimension dimension;
err = ProDrawingDimCreate(drawing, attachments, senses, dim_pos,PRO_B_FALSE, &dimension);
err = ProAnnotationShow((ProAnnotation*)&dimension, NULL, selView);
ProSelectionFree(&attachments[0]);
ProSelectionFree(&attachments[1]);
}

