#
CrownCAD二次开发

# 程序UI

   二次开发的UI定义方式是在新编程语言CrownCAD Script中定义的新的UI样式,在参数设定上为了贴合用户的使用习惯,减少用户的学习成本, 与CSS样式相类似。同时,为了可以让用户设计更好的UI面板,部分UI组件支持直接使用CSS基础样式,需要注意的是对于CSS基础样式中使用"-"连接的名称需要使用驼峰命名法进行替换, 例如: margin-top: 100px 需要替换成 marginTop="100px"

# 基础组件

  • # 数字输入框

       当需要限定输入框只允许输入数字时,选择数字输入框,当输入其它值时会提示输入信息错误。

    • 定义样式:
    ('数字', bind = 'number', default = 10.0, min = -50.0, max = 50.0);
    
    1
    • 参数含义:
    类型 参数含义 参数类型 默认值 是否必须
    (缺省) 输入框的名字 字符串 '数字'
    bind 参数在程序中使用的变量名 字符串 'number'
    default 输入框默认值 浮点数 10.0
    max 输入框限定的最大值 浮点数 无穷大
    min 输入框限定的最小值 浮点数 无穷小
  • # 整数输入框

       当需要限定输入框只允许输入整数数字时,选择整数输入框,当输入其它值时会提示输入信息错误。

    • 定义样式:
    ('整数', bind = 'integer', default = 10, min = 0, max = 100);
    
    1
    • 参数含义:
    类型 参数含义 参数类型 默认值 是否必须
    (缺省) 输入框的名字 字符串 '整数'
    bind 参数在程序中使用的变量名 字符串 'integer'
    default 输入框默认值 整数 10
    max 输入框限定的最大值 整数 无穷大
    min 输入框限定的最小值 整数 无穷小
  • # 字符串输入框

       当输入内容需要字符串时,可以选择字符串输入框,输入的值默认转换成字符串。

    • 定义样式:
    ('字符串', bind = 'string', default ='string');
    
    1
    • 参数含义:
    类型 参数含义 参数类型 默认值 是否必须
    (缺省) 输入框的名字 字符串 '字符串'
    bind 参数在程序中使用的变量名 字符串 'string'
    default 输入框默认值 字符串 'string'
  • # 单选框

       当需要判断一个元素是否选择时,可以选择使用单选框。

    • 定义样式:
    ('单选框', bind = "check", default = true);
    
    1
    • 参数含义:
    类型 参数含义 参数类型 默认值 是否必须
    (缺省) 单选框的显示名 字符串 '字符串'
    bind 参数在程序中使用的变量名 字符串 'check'
    default 单选框默认值 布尔类型 true
  • # 下拉选择框

       当需要多个选项时,可以选择下拉选择框,使用下拉框是需要提前定义下拉框选项内容,同时选项中定义顺序即为显示顺序。

    • 定义样式:
    var select = {
      "选项1": 10, 
      "选项2": 'string', 
      '选项3': false, 
      '选项4': 10.11
    };
    ('下拉框', bind = "select", default = select['选项1']);
    
    1
    2
    3
    4
    5
    6
    7
    • 参数含义:
    类型 参数含义 参数类型 默认值 是否必须
    (缺省) 下拉框的显示名 字符串 '下拉框'
    bind 参数在程序中使用的变量名 字符串 'select'
    default 下拉框默认值 对象的取值
  • # 图片组件

       当用户需要图片来帮助解释各个输入框等内容时,可以通过图片组件进行显示, 图片需要提前上传,然后定义时引用图片的id来进行显示。

    • 定义样式:
    (id='0', width='100%', height='100%');
    
    1
    • 参数含义:
    类型 参数含义 参数类型 默认值 是否必须
    id 图片上传后返回的Id 字符串 '下拉框'
    width 图片宽度 < 可填写: 分辨率: '1000px', 百分比:'100%'> 字符串 父元素宽度
    height 图片宽度 < 可填写: 分辨率: '1000px', 百分比:'100%'> 字符串 父元素高度
  • # 文字组件

       用户可以通过文字组件来实现对于文本内容的描述信息。

    • 定义样式:
    (value = '文字内容');
    
    1
    • 参数含义:
    类型 参数含义 参数类型 默认值 是否必须
    value 显示的文字内容 字符串 '文字内容'
  • # 表格组件

       用户可以通过表格组件更加直观的信息,同时表格单元格可以设计为可编辑元素,动态的修改表格的内容。

    • 定义样式:
    (name = "定义表格", width = "1000px", height = "500px") {	// 声明一个表格
      (align = "center", type = "text", head = true) {  //声明表格一行和默认属性
        (value = "基本尺寸"); 	// 定义文本内容表格
        (value = 100, bind = "cell", type = "number");  // 定义可修改表格内容
      }
    }
    
    1
    2
    3
    4
    5
    6
    • 参数含义:

      • @table
      参数名 参数含义 参数类型 默认值 是否必须
      name 表格的名字 字符串 '表格'
      width 表格整体宽度 < 可填写: 分辨率: '500px', 百分比:'100%'> 字符串 撑宽
      width 表格整体高度 < 可填写: 分辨率: '500px', 百分比:'100%'> 字符串 撑高
      • @row
      参数名 参数含义 参数类型 默认值 是否必须
      align 行内默认对齐方式 <left: 左对齐,center:居中,right:右对齐 > 字符串 'center'
      type 行内默认类型 <text: 文本类型, number: 数字类型, integer: 整数类型,
      string: 字符串类型, boolean: 单选框, select: 下拉框 >
      字符串 'text'
      head 是否为表头栏 布尔类型 false
      • @cell
      参数名 参数含义 参数类型 默认值 是否必须
      value 单元格的值 与type的类型相对应
      bind 参数在程序中使用的变量名 布尔类型 "cell" 是 (type == "text" 时为非必须)
      type 当前单元格的类型(参数可选值与上方一致) 字符串 撑宽 "text" 或 上一层定义
      align 当前单元格对齐方式(参数可选值与上方一致) 字符串 "center" 或上一层定义
    • 示例程序:

      • 代码:
      (position = "center") {
        (name="尺寸信息", width="1000px", height="100%") {
          (align = "center", type = "text", head = true) { 
             (value = "基本尺寸");  (value = "mm");
             (value = "基本尺寸");  (value = "mm");
             (value = "基本尺寸");  (value = "mm");
          }
          (align = "center", type = "text") { 
             (value = "D");   (value = "300");  (value = "D1");  (value = "220");  (value = "D2");  (value = "300");
          }
          (align = "center", type = "text") { 
             (value = "D3");   (value = "300");  (value = "H");  (value = "220");  (value = "H1");  (value = "300");
          }
          (align = "center", type = "text") { 
             (value = "H2");   (value = "300");  (value = "L");  (value = "220");  (value = "L1");  (value = "300");
          }
          (align = "center", type = "text") { 
             (value = "L2");   (value = "300");  (value = "L3");  (value = "220");  (value = "L4");  (value = "300");
          }
          (align = "center", type = "text") { 
             (value = "L5");   (value = "235");  (value = "W");  (value = "150");  (value = "W1");  (value = "450");
          }
          (align = "center", type = "text") { 
             (value = "W3");   (value = "150");  (value = "W4");  (value = "500");  (value = "f1");  (value = "7");
          }
        }
      }
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      • 图示:

  • # 交互框组件

       用户可以在UI面板中定义交互框组件,可以实现对模型中的元素的拾取,并在程序中可以使用拾取的元素内容。

       注: 交互框组件的使用只可以在发布预览和发布之后使用,即需要通过面板执行,不允许直接执行

    • 定义样式:

      ('顶点', bind='query', filters=[QueryType.Vertex], minCount=2, maxCount=2, tipMsg="请选择两个顶点");
      
      1
    • 参数含义:

    类型 参数含义 参数类型 默认值 是否必须
    (缺省) 交互框的名字 字符串 '交互框'
    bind 参数在程序中使用的变量名 字符串 'query'
    filters 交互框允许拾取的类型 数组 []
    minCount 允许拾取的最少元素数量 整数 1
    maxCount 允许拾取的最多元素数量 整数 100
    tipMsg 交互框的提示信息 字符串 '请选择相关元素'
    • 备注:

       数组内部为拾取元素类型: QueryType。其中: 装配实例(QueryType.Instance)仅支持单独使用; 特征(QueryType.Feature)仅支持单独使用; 实体、三维曲面、草图(QueryType.Solid、QueryType.Shell、QueryType.Sketch)可以组合使用; 其余基础元素(QueryType.?)可以组合使用

    • 示例图:

  • # 基础组件图示

# 布局组件

  • # 窗口组件

       窗口组件是声明UI定义的开始,所有UI的定义都需要的在定义UI窗口内部,同时UI的定义要在程序的开始时定义。

    • 使用说明:
    // 声明当前开始定义UI,"…"表示UI组件
    (height = "1000px", width="500px") {}  
    
    1
    2
    • 参数说明:
    类型 参数含义 参数类型 默认值 是否必须
    width UI窗口宽度(分辨率) 字符串 撑宽
    height UI窗口高度(分辨率) 字符串 撑高
  • # 块状布局组件

       用户可以通过栅格布局的方式,定义UI组件的组合关系、位置等来实现适合于当前程序的UI页面。

    • 使用说明:
    // 声明行元素
    (width = "1000px", height = "500px") {
      // 声明列元素 "…"表示UI组件
      (width = "200px") {}
    }  
    
    1
    2
    3
    4
    5
    • 参数说明:
    类型 参数含义 参数类型 默认值 是否必须
    title 块元素的名字 字符串
    width 块的宽度 < 可填写:分别率: '500px',百分比:'100%'> 父元素宽度 撑高
    height 块的高度 < 可填写:分别率: '500px',百分比:'100%'> 父元素高度 撑高
    • 示例程序:
      • 代码:
      (width = "1000px") {
         (width = "100%") {
           (width = "80%") {
            (width = "100%") {
              (width = "100px") { ... }
              (width = "100px") { ... }
              (width = "100px") { ... }
              (width = "100px") { ... }
            }
            (width = "100%") {
              (width = "30%") { ... }
              (width = "30%",marginLeft="40px") { ... }
            }
            (width = "100%", height = "150px",marginTop="40px") {
              (width = "50%") { ... }
              (width = "50%",marginLeft = "100px") { ... }
                (height = "50%", width = "80%") { ... }
                (height = "50%", width = "80%") { ... }
          	}
            (width = "100%", maxWidth="800px") { ... }
          }
           (width = "20%") { ... }
        }
      }
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      • 图示:

  • # 选项卡组件

       当需要展示不同的选项组合时,可以使用Tab标签组件进行区分显示,只有显示的标签内的参数有效。

    • 使用说明:
    // 声明当前开始定义Tab标签,内部使用不同的tab定义不同的标签
     {  
      // 在tab()内定义的是当前标签页的名字
      // 声明不同标签页面,"…"表示UI组件
      tab("页面1") {} 	
      tab("页面2") {}
      // 声明默认打开的标签页面的名字  
      var use = "页面1";  
    }  
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    • 示例程序:
      • 代码:
       {
         {
          tab("页面1") {
                var select = {
                "选项1": 10,
                "选项2": 'string',
                '选项3': false,
                '选项4': 10.11,
              };
              ('下拉框', bind = "select0", default = select['选项1']);
              ('数字', bind = 'number', default = 10.0, min = 1, max = 100);
              ("整数", bind ="integer",default = 10);
          }
          tab("页面2") {
              ("字符串", bind = "string", default = 'string');
        			('单选框', bind = "check", default = true);
          }
          var use = "页面1";
        }
      }
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      • 图示:

  • # 折叠组件

       当用户想要在某些情况下隐藏显示部分的UI窗口内容,可以选择使用该组件,定义在该组件内部的UI内容,用户可以选择展示与折叠隐藏。

    • 使用说明:
    // "…"表示UI组件 
    ("折叠组件", expanded = true) {}  
    
    1
    2
    • 参数说明:
    类型 参数含义 参数类型 默认值 是否必须
    (缺省) 折叠页的名字 字符串 '折叠组件'
    expanded 是否默认展开 布尔类型 true
    • 示例程序:
      • 代码:
      (height = "1000px") {
        ("折叠组件", expanded = true) {
        	('数字', bind = 'number', default = 10.0, max = 100);
          ("整数", bind ="integer",default = 10);
          ("字符串", bind = "string", default = 'string');
          ('单选框', bind = "check", default = true);
        }
      }
      
      1
      2
      3
      4
      5
      6
      7
      8
      • 图示:

# 示例UI

  • 代码:
// 声明UI,须声明定义在程序开始
(width = "1000px") {
   (width = "100%") {
     (width = "80%") {
      (width = "100%") {
        (width = "100px") { 
          ('上海', bind = 'shanghai', default = true); 
        }
        (width = "100px") { 
          ('北京', bind = 'beijing', default = false); 
        }
        (width = "100px") { 
          ('广州', bind = 'guangzhou', default = false); 
        }
        (width = "100px") { 
          ('深圳', bind = 'shenzhen', default = false); 
        }
      }
      (width = "100%") {
        (width = "30%") {  
          ('长度', bind = 'lenght', default = 10); 
        }
        (width = "30%",marginLeft="40px") {
          var select = { "给定深度": 1, "成型到面": 2, '两侧对称': 3 };
          ('方式', bind = 'mode', default = select["给定深度"]);
        }
      }
      (width = "100%", height = "150px",marginTop="40px") {
        (width = "50%") {
          var DJ = { "160L": 160, "180L": 180, "200L": 200 };
          (name = "基本信息",minWidth = "400px") {
            (align = "center", type = "text") { (value = "设备位号"); (value = "1021-P-04AB"); }
            (align = "center", type = "text") { (value = "设备名称"); (value = "升压泵"); }
            (align = "center", type = "text") {
              
              (value = "叶轮直径"); 
              
              (value = 300, bind ="abcdefg", type="number"); }
            (align = "center", type = "text") { 
              (value = "电机基座号");
              (value = DJ["160L"], bind = "dianji", type = "select");}
          }
        }
        (width = "50%",marginLeft = "100px") {
          (height = "50%", width = "80%") { 
            ('尺寸', bind = 'size', default = 90); 
          }
          (height = "50%", width = "80%") { 
            ('单位单', bind = 'unit', default = 'mm'); 
          }
        }
    	}
      (width = "100%", maxWidth="800px") {
        var grade = { "150": 150, "160000000": 1600000, "180": 180 };
        var seal = { "RF": true, "LF": false };
        var measure = { "15": 150, "16": 160, "17": 170 };
        (name = "管口信息") {
          (align = "center", type = "text") {
            (value = "设备位号"); (value = "接口名称"); (value = "管口方向"); 
            (value = "法兰标准"); (value = "等级");  (value = "密封面"); (value = "尺寸"); 
            (value = "L(mm)"); (value = "W(mm)"); (value = "H(mm)");
          }
          (align = "center", type = "text") {
            (value = "N1"); (value = "进水口"); (value = "无"); (value = "ASME B16.5"); 
            (value = grade["150"], type = "select", bind = "grand"); 
            (value = seal["RF"], type = "select", bind = "seal");
            (value = measure["15"], type = "select", bind = "measure");
            (value = "无需填写"); (value = "无需填写"); (value = "无需填写");
          }
          (align = "center", type = "text") {
            (value = "N2"); (value = "进水口"); (value = "无"); (value = "ASME B16.5"); 
            (value = grade["150"], type = "select", bind = "grand1"); 
            (value = seal["RF"], type = "select", bind = "seal1");
            (value = measure["15"], type = "select", bind = "measure1");
            (value = "无需填写"); (value = "无需填写"); (value = "无需填写");
          }
        }
      }
    }
     (width = "20%") {
      (id='61e8e834a6dda6508d0a5b6a', width='100%', height='100%');
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
  • 图示: