指定范围输出dwg
下面我们将介绍如何利用 mxcad 插件实现在CAD图纸中的指定范围输出dwg功能。该功能中用户可以自主选择图纸范围并导出dwg格式的图纸文件。指定范围输出dwg功能能够实现高效的文件压缩、帮助用户精确提取图纸种的设计信息,是一个非常实用的图纸剪切功能。
功能实现
- 指定范围
我们可以调用 MxCADUiPrPoint 方法获取导出dwg图纸的范围。
ts
// 选择导出范围.
let getPoint = new MxCADUiPrPoint();
getPoint.setMessage("\n指定输出范围第一点:");
// 获取范围的第一个角点
let pt1 = await getPoint.go();
if (!pt1) return;
getPoint.setMessage("\n指定输出范围第二点:");
// 设置选择范围动态填充样式
getPoint.setUserDraw((currentPoint: McGePoint3d, worldDraw) => {
// 设置范围框颜色即位置
worldDraw.setColor(0xFF0000);
let pl = new McDbPolyline();
pl.addVertexAt(pt1);
pl.addVertexAt(new McGePoint3d(pt1.x, currentPoint.y))
pl.addVertexAt(currentPoint);
pl.addVertexAt(new McGePoint3d(currentPoint.x, pt1.y))
pl.constantWidth = MxFun.screenCoordLong2Doc(2);
pl.isClosed = true;
worldDraw.drawMcDbEntity(pl);
// 设置范围框内的填充样式
let points = [];
points.push(pt1.toVector3());
points.push(new McGePoint3d(pt1.x, currentPoint.y).toVector3());
points.push(currentPoint.toVector3());
points.push(new McGePoint3d(currentPoint.x, pt1.y).toVector3())
worldDraw.setColor(0x003244);
worldDraw.drawSolid(points, 0.5)
});
// 设置禁用捕捉与正射追踪
getPoint.setDisableOsnap(true);
getPoint.setDisableOrthoTrace(true);
// 获取范围的第二个角点
let pt2 = await getPoint.go();
if (!pt2) return;
- 导出pdf
在上述步骤中我们已经获取到了pdf在图纸上的范围,因此接下来我们可以直接调用 McObject.saveFileToUrl() 方法来导出目标pdf。其中,如果不设置导出图纸范围则将默认导出所有的图纸内容。
ts
// 范围参数设置
let param = {
bd_pt1_x: "" + pt1.x,
bd_pt1_y: "" + pt1.y,
bd_pt2_x: "" + pt2.x,
bd_pt2_y: "" + pt2.y
};
// 把mxweb文件 ,保存到服务器上,再转成dwg。
// cutDwgUrl:后端请求接口
MxCpp.getCurrentMxCAD().saveFileToUrl(cutDwgUrl, (iResult: number, sserverResult: string) => {
try {
let ret = JSON.parse(sserverResult);
if (ret.ret == "ok") {
// filePath:下载文件的 URL 地址
MxTools.downloadFileFromUrl(filePath, ret.file);
}
else {
console.log(sserverResult);
}
} catch {
console.log("Mx: sserverResult error");
}
}, undefined, JSON.stringify(param));
功能实践
实践效果如下:
- 点击导出jpg按钮,执行导出jpg方法
- 根据命令行提示点击鼠标左键开始拉框选择导出范围
- 再次点击鼠标左键结束框选
- 成功将目标范围的图纸内容导出为jpg格式的图片