前端扩展命令开发

本部分内容主要以示例的方式展示如何开发前端命令。

以下是具体说明:

# 一、依赖的接口

ZwGetPoint:用于获取图纸选中点的坐标。 ZwCreateEntityByJson:用于通过 json 对象创建实体。

# 二、扩展命令样例

# 1.创建多段线命令

1、如何获取多段线的点?
   (1) 写一个while循环通过ZwGetPoint函数获取点,详见下列代码。
       设置按钮,点击按钮调用createPolylineFn函数,开始执行多段线命令,键盘输入enter或者ecs结束命令(退出while循环),并绘制创建好的实体。
        async createPolylineFn() {
            let getPoints = [];
            let flag = true;
            while(flag) {
                let res = await window.ZwCloud2D.ZwDataManager.ZwGetPoint();
                if (res.type === 0) {
                    getPoints.push(res.data.point.mX, res.data.point.mY, res.data.point.mZ);
                } else if (res.type === 3) {
                    <!-- ECS取消命令 -->
                    flag = false;
                    getPoints = [];
                } else {
                    flag = false;
                    break;
                }
            }
            if (getPoints.length > 6) {
                this.createPolyline(getPoints); // 见步骤2的函数
                getPoints = []
            }
        }

    (2) 构造多段线JSON,用于生成实体。
        详细代码可参考https://cloud2d.zwsoft.cn/doc/open/questions/1.2 中的“一、演示基于 VUE 框架的图纸显示、打印、图纸编辑、电子签章、json实体转换功能”。

        createPolyline(getPoints) {
            let points = [];
            for (let index = 0; index < getPoints.length - 2; index += 3) {
                points.push([getPoints[index], getPoints[index + 1], getPoints[index + 2]])
            }

            <!-- 经过遍历后,points数据格式样例如下
            points = [
                [
                    120.0,
                    60.0,
                    100.0
                ],
                [
                    146.0,
                    60.0,
                    20.0
                ],
                [
                    142.0,
                    50.0,
                    30.0
                ],
                [
                    117.0,
                    52.0,
                    50.0
                ]
            ]
            -->

            ZwCloud2D.ZwDataManager.ZwCreateEntityByJson({
            "entityList": [
                {
                "type" :  "ZcDb3dPolyline",
                "points" : points,
                "isClosed" : true,
                "color" : 6,
                "layer" : "0",
                "lineType" : "ByLayer",
                "lineTypeScale" : 1.0,
                "lineweight" : -1,
                "transparency" : 0
                }
            ]
            });
        }

# 2.创建圆命令

1、如何获取圆心、半径?
   (1) 写一个while循环通过ZwGetPoint函数获取圆心和端点,详见下列代码。
       设置按钮,点击按钮调用createCircleFn函数,开始执行圆命令,键盘输入enter或者ecs结束命令(退出while循环),并绘制创建好的实体。
        async createCircleFn() {
            let getPoints = [];
            let flag = true;
            while(flag) {
                if (getPoints.length === 6) {
                    flag = false;
                    break;
                }
                let res = await window.ZwCloud2D.ZwDataManager.ZwGetPoint();
                // type:0表示获取的是点,3表示键盘ESC
                if (res.type === 0) {
                    getPoints.push(res.data.point.mX, res.data.point.mY, res.data.point.mZ);
                } else if (res.type === 3) {
                    flag = false;
                    getPoints = [];
                } else {
                    flag = false;
                    break;
                }
            }
            if (getPoints.length === 6) {
                this.createCircle(getPoints);
                getPoints = []
            }
        }

    (2) 构造圆的JSON,用于生成实体。
        详细代码可参考https://cloud2d.zwsoft.cn/doc/open/questions/1.2 中的“一、演示基于 VUE 框架的图纸显示、打印、图纸编辑、电子签章、json实体转换功能”。

        createCircle(getPoints) {
            let radius = Math.sqrt(
                (getPoints[0] - getPoints[3]) * (getPoints[0] - getPoints[3]) +
                (getPoints[1] - getPoints[4]) * (getPoints[1] - getPoints[4]) +
                (getPoints[2] - getPoints[5]) * (getPoints[2] - getPoints[5])
            );

            let jsonData = {
                "entityList": [
                    {
                        "type" :  "ZcDbCircle",
                        "center" :[getPoints[0], getPoints[1], getPoints[2]],
                        "radius" : radius,
                        "color" : 6,
                        "layer" : "0",
                        "lineType" : "ByLayer",
                        "lineTypeScale" : 1.0,
                        "lineweight" : -1,
                        "normal" : [ 0.0, 0.0, 1.0 ],
                        "thickness" : 0.0,
                        "transparency" : 0
                    }
                ]
            };
            window.ZwCloud2D.ZwDataManager.ZwCreateEntityByJson(jsonData);
        }