szwMatrix CSYSmatrix; ZwEntityMatrixGet(CSYS, &CSYSmatrix); szwPoint SelPoint{}; cvxMsgDisp(_T("请选择面上的一个点")); ZwPointGetByPick(_T("请选择打孔的点"), ZW_INPUT_POINT_ON_ANY_FACE, 1, &SelPoint, NULL); ToWorkPlane(CSYS, &SelPoint); double L = 20, W = 10, R = W / 2, H = (L - W) / 2; szwPoint tr = { SelPoint.x + H, SelPoint.y - R, SelPoint.z }; szwPoint tl = { SelPoint.x - H, SelPoint.y - R, SelPoint.z }; szwPoint bl = { SelPoint.x - H, SelPoint.y + R, SelPoint.z }; szwPoint br = { SelPoint.x + H, SelPoint.y + R, SelPoint.z }; szwPoint cl = { SelPoint.x - H, SelPoint.y, SelPoint.z }; szwPoint cr = { SelPoint.x + H, SelPoint.y, SelPoint.z }; ToAbsolutePlane(CSYS, &tr); ToAbsolutePlane(CSYS, &tl); ToAbsolutePlane(CSYS, &bl); ToAbsolutePlane(CSYS, &br); ToAbsolutePlane(CSYS, &cl); ToAbsolutePlane(CSYS, &cr); szwEntityHandle SelFaceShape{}; ZwFaceShapeGet(SelFace, &SelFaceShape); szwBoundingBox ShapeBox; ZwEntityBoundingBoxGet(SelFaceShape, ZW_COORDINATE_CUSTOM, CSYSmatrix, &ShapeBox); double ShapeHeight = ShapeBox.z.max - ShapeBox.z.min; // ===== 只改了这段:用线+弧画腰型孔,绑定到面上 ===== auto PE = [](szwPoint* p) -> szwPointOnEntity { szwPointOnEntity e = {}; e.point = p; return e; }; szwEntityHandle lt{}, al{}, lb{}, ar{}; szwLineData dl = {}; dl.lineType = ZW_LINE_2POINT; dl.alignPlane = SelFace; // ← 绑到面上,和 GetRectangle 里 plane 一样 dl.projectToPlane = 1; dl.point1 = PE(&tr); dl.point2 = PE(&tl); ZwFeatureLineCreate(dl, <); szwArcData da = {}; da.type = ZW_ARC_CENTER; da.alignPlane = SelFace; // ← 同样绑到面上 da.projectToPlane = 1; da.data.center.centerPoint = PE(&cl); da.data.center.firstPoint = PE(&tl); da.data.center.secondPoint = PE(&bl); ZwFeatureArcCreate(da, &al); dl.point1 = PE(&bl); dl.point2 = PE(&br); ZwFeatureLineCreate(dl, &lb); da.data.center.centerPoint = PE(&cr); da.data.center.firstPoint = PE(&br); da.data.center.secondPoint = PE(&tr); ZwFeatureArcCreate(da, &ar); szwEntityHandle curveHandles[4] = { lt, al, lb, ar }; szwEntityHandle CurveList{}; ZwFeatureCurvelistCreate(4, curveHandles, &CurveList); // ===== 改到这里结束 ===== szwExtrudeData extrudeData; ZwFeatureExtrudeInit(&extrudeData); extrudeData.profileHandle = CurveList; extrudeData.extrudeType = ZW_DRFAT_ONE_SIDE; extrudeData.startS = 0; extrudeData.endE = ShapeHeight; extrudeData.direction = { -CSYSmatrix.zx, -CSYSmatrix.zy, -CSYSmatrix.zz }; szwEntityHandle shapeHandle{}; ZwFeatureExtrudeCreate(extrudeData, &shapeHandle); int shapeId = 0; ZwEntityIdGet(1, &shapeHandle, &shapeId); cvxPartDefeature(1, &shapeId); evxColor Color = VX_COLOR_RED; int FaceCount = 0; int* FaceIds = 0; cvxPartInqShapeFaces(shapeId, &FaceCount, &FaceIds); cvxEntColorSet(Color, FaceCount, FaceIds); ZwHistoryOperationDelete(4, curveHandles, ZW_DELETE_ASSOCIATED_OPERATION); int SelFaceShapeId = 0; ZwEntityIdGet(1, &SelFaceShape, &SelFaceShapeId); cvxPartBool(VX_BOOL_REMOVE, SelFaceShapeId, 1, &shapeId, 0); cvxPartDefeature(1, &SelFaceShapeId); ZwHistoryOperationDelete(1, &CSYS, ZW_DELETE_ASSOCIATED_OPERATION); CSYS.innerData = NULL;