全球FlexSim系统仿真中文论坛

标题: 使用命令插入表格标签 [打印本页]

作者: zorsite    时间: 2018-6-7 16:38
标题: 使用命令插入表格标签
assertlabel和setlabel可以新增标签。但是如果想要增加一个标签存放表格,该如何处理呢?在手册中没有发现相关的命令,于是自己想办法来解决了。仔细观察手工插入的三行一列的表格标签,发现其树结构如下:0 O9 x0 f, _" G) Z  j' U
[attach]4413[/attach]+ L) h: |  c* M# Q
+ k9 M4 N4 Y6 p! p4 }% K! r0 |7 H
思路1:
1 ~% u$ v, @! U" Z3 W: B- S: H* c使用assertsubnode命令插入两次子节点来完成标签表格中的一个单元格。5 b( d3 |* q! L) v. W5 D! D" z
. q# B4 a. s# H# u# m+ w
  1. treenode labeltable=assertlabel(item,"order",DATATYPE_NUMBER);//在临时实体上增加一个标签。; }3 ^; A, |# E+ j; J' `1 H
  2. //treenode labeltable=assertlabel(item,"order",DATATYPE_STRING);
    ; B/ v- p. q5 e4 `
  3. //此处增加什么类型的标签都可以。即使是文本型标签,也可以在表格中存放数值型数据。9 b! _. d) j4 C, S3 K
  4. //表格中存放的数据类型与此无类,会在后面的在代码中定义。9 o8 B1 t# ^) v9 N

  5. ( Z2 B3 e5 x; x' d. S
  6. for (int i = 1; i <= 3; i++) {
    & Z, z6 h! Y' v; |  Z4 e# h/ |
  7.         string labeltablerowname=concat("类型" , numtostring(i));
    * {2 c. ^* A7 m, h# F; l7 H
  8.         treenode labeltablerow=assertsubnode(labeltable,labeltablerowname);//在标签中增加一行
    5 @: Q( `* `" W; M5 S
  9.         //第二参数不能省略,所以必须为该行起一个名字。如果名字相同的话,只会插入一个的节点。6 \; G2 e5 @) \4 r& t4 w
  10.         //第三参数可以省略。该行节点不存放具体数据,所以数据类型可以留空。3 w- \% m" o. B1 f& [( I$ a
  11.         treenode labeltablecell=assertsubnode(labeltablerow,"数量",DATATYPE_NUMBER);//在新增行中加入一列(一个存放数据的单元格)
    & P/ c7 G; V( Q3 I
  12.         //因为该节点要存放数值,所以数据类型要设置正确。        ! _3 A, ]+ ~  C/ W
  13.         int num=duniform(0,5);
    : Z# F$ N% J6 T. Z. U5 ~; U" L
  14.         //setnodenum(labeltablecell,num);//为该数据单元赋值6 ^0 \4 v0 s9 Z  }) z% ~  t; p
  15.         settablenum(labeltable,i,1,num);//也可以使用settablenum命令赋值。7 w, R4 z$ }2 v# o# v
  16. }
    $ ~" t# i: o% P; |7 f  J
复制代码
思路2:
9 S+ c; _) h5 L. ]: r! ~既然assertsubnode可以,那nodeinsertinto也行得通。
# T: h8 Q2 `* C1 M+ s1 E* X
  1. treenode labeltable=nodeinsertinto(node(">labels", item));//在临时实体上增加一个标签,该标签没有名字3 }; q. U' ~& V( j0 Y4 k
  2. for (int i = 1; i <= 3; i++) {9 l; A3 A0 D, G$ u- T5 o
  3.         treenode labeltablerow=nodeinsertinto(labeltable);//在标签中增加一行
      V" w; R  T; M1 p" ~
  4.         treenode labeltablecell=nodeinsertinto(labeltablerow);//在新增行中加入一列(一个存放数据的单元格)7 d- z5 o, {2 t& \( c. F7 }
  5.         nodeadddata(labeltablecell,DATATYPE_NUMBER);//指定该单元格节点的数据类型为数值型
    6 R% S$ \% p+ J$ s
  6.         //虽然命令帮助中没有说明,但nodeinsertinto返回对新插入节点的引用。
    8 `4 n9 U) d' a! Q$ O# e
  7.         int num=duniform(0,5);
    1 q: H5 a7 I( E8 j
  8.         //setnodenum(labeltablecell,num);//为该数据单元赋值. T, q$ B* k/ o. a& K
  9.         settablenum(labeltable,i,1,num);//也可以使用settablenum命令赋值。  e0 z! M+ K* z
  10. }
复制代码
思路3:! S' d/ W. l7 ^: C: _; W/ a
既然标签中存放的是表格,那是不是可以使用表格相关命令呢?直接在节点上插入一张表格?) d$ p* V- H: g5 S
  1. treenode labeltable=assertlabel(item,"order",DATATYPE_NUMBER);//在临时实体上增加一个标签
    ) u) G+ R" ?5 I3 k, g
  2. settablesize(labeltable,3,1,DATATYPE_NUMBER);
    8 U. p. t4 G, E3 a7 Q
  3. for (int i = 1; i <= 3; i++) {5 y% A7 z- Y& m: A5 x6 ?: g
  4.         settablenum(labeltable,i,1,duniform(0,5));
    0 N0 Y  D6 |* l- c9 u' y
  5. }
复制代码
. D3 D; ^' Y( e  l! a4 y
! B) q- h1 W0 C5 _" `/ g$ Q

9 b4 \* {! ]8 f' Q; E# G+ |
作者: 慧娴亚伦    时间: 2018-6-8 09:51
感谢分享!
& X+ M: }& `- J+ h* w关键是建立起节点格式~
作者: zjj0605    时间: 2018-6-11 17:49
谢谢大神的分享




欢迎光临 全球FlexSim系统仿真中文论坛 (http://www.flexsimasia.com/) Powered by Discuz! X3.3