全球FlexSim系统仿真中文论坛

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

作者: zorsite    时间: 2018-6-7 16:38
标题: 使用命令插入表格标签
assertlabel和setlabel可以新增标签。但是如果想要增加一个标签存放表格,该如何处理呢?在手册中没有发现相关的命令,于是自己想办法来解决了。仔细观察手工插入的三行一列的表格标签,发现其树结构如下:
6 y6 [/ k6 X& ^5 F7 L+ e[attach]4413[/attach]7 H# x( ]9 X8 k0 h2 ^0 s

3 z+ K0 W0 B6 F' |4 I' y* Y/ }3 y思路1:# e  k6 h6 H- W2 `
使用assertsubnode命令插入两次子节点来完成标签表格中的一个单元格。: n6 ]( p/ n1 E% e, V& D7 i2 B3 c. c
$ k" o9 j& |" i
  1. treenode labeltable=assertlabel(item,"order",DATATYPE_NUMBER);//在临时实体上增加一个标签。; V3 B3 Z$ l) F6 B6 l
  2. //treenode labeltable=assertlabel(item,"order",DATATYPE_STRING);
    9 ~  x6 k' Z& P; r. Y1 O! A
  3. //此处增加什么类型的标签都可以。即使是文本型标签,也可以在表格中存放数值型数据。
    ; O' m( \; q, I9 S0 V
  4. //表格中存放的数据类型与此无类,会在后面的在代码中定义。
    + Z! ~8 u4 P# B8 j2 K2 r& I
  5. - h) m( ^9 ]1 M& B" Y) \. B, D& K
  6. for (int i = 1; i <= 3; i++) {3 [) y$ \& `9 S, U1 @# {; h
  7.         string labeltablerowname=concat("类型" , numtostring(i));
    / F5 g. c! A- l% w, r8 a1 v* Y
  8.         treenode labeltablerow=assertsubnode(labeltable,labeltablerowname);//在标签中增加一行8 z8 G+ v) f5 h0 Z" T0 {
  9.         //第二参数不能省略,所以必须为该行起一个名字。如果名字相同的话,只会插入一个的节点。. ~; U" s( R5 T  l
  10.         //第三参数可以省略。该行节点不存放具体数据,所以数据类型可以留空。
    " ~, @/ w3 B* y! m- N: y0 w$ M
  11.         treenode labeltablecell=assertsubnode(labeltablerow,"数量",DATATYPE_NUMBER);//在新增行中加入一列(一个存放数据的单元格)* D% P2 S& T3 z- P  K( i" `
  12.         //因为该节点要存放数值,所以数据类型要设置正确。        ! k1 Q3 K) }- l; W. E% T
  13.         int num=duniform(0,5);
    ) |" ]  D4 {! P: J
  14.         //setnodenum(labeltablecell,num);//为该数据单元赋值
    6 [: }0 |: w  V  O9 }# s2 c$ E
  15.         settablenum(labeltable,i,1,num);//也可以使用settablenum命令赋值。7 w' n3 [! z. J1 |+ n! Y& q! ?
  16. }6 c1 b- e5 M+ G  w5 X
复制代码
思路2:/ m+ b4 P1 D2 t& i) ^6 ?
既然assertsubnode可以,那nodeinsertinto也行得通。6 A+ C6 O& j0 G! D
  1. treenode labeltable=nodeinsertinto(node(">labels", item));//在临时实体上增加一个标签,该标签没有名字% C  s. n- e; f4 l. y( p, e% M
  2. for (int i = 1; i <= 3; i++) {
    : Z0 ]$ k- |1 e- V
  3.         treenode labeltablerow=nodeinsertinto(labeltable);//在标签中增加一行/ {* T: u- o! {3 J0 y3 w5 m, m& @
  4.         treenode labeltablecell=nodeinsertinto(labeltablerow);//在新增行中加入一列(一个存放数据的单元格); ^; n! v+ M1 k9 |: N5 G
  5.         nodeadddata(labeltablecell,DATATYPE_NUMBER);//指定该单元格节点的数据类型为数值型8 `8 Z- A3 U: q9 d, H
  6.         //虽然命令帮助中没有说明,但nodeinsertinto返回对新插入节点的引用。/ Z) I. h: g5 q% \  u6 `, }# k
  7.         int num=duniform(0,5);1 s) P- E) k2 ~+ p$ d
  8.         //setnodenum(labeltablecell,num);//为该数据单元赋值0 E+ d7 s  A% v0 o  b9 O
  9.         settablenum(labeltable,i,1,num);//也可以使用settablenum命令赋值。
      m- v' w) `8 a. B# A: @
  10. }
复制代码
思路3:
. |, x; w1 I; K* u# K既然标签中存放的是表格,那是不是可以使用表格相关命令呢?直接在节点上插入一张表格?6 m0 Z: F0 C9 R" }
  1. treenode labeltable=assertlabel(item,"order",DATATYPE_NUMBER);//在临时实体上增加一个标签4 T9 R- k, ?7 u' {
  2. settablesize(labeltable,3,1,DATATYPE_NUMBER); 3 C& z  e, ~7 s4 p) d5 _+ g
  3. for (int i = 1; i <= 3; i++) {
    ) k: I2 h$ O! i" I& n- ~- ^0 L2 q
  4.         settablenum(labeltable,i,1,duniform(0,5));
    ! Y/ F! m1 t7 r0 y) L. P
  5. }
复制代码
/ P; E9 Q( C4 |0 r" {. Q# M
* E- a& d2 I2 w& Z) T

( K; L: H6 ]# l, ^% _: A8 q! h
作者: 慧娴亚伦    时间: 2018-6-8 09:51
感谢分享!
+ G1 _+ l/ |  _2 `关键是建立起节点格式~
作者: zjj0605    时间: 2018-6-11 17:49
谢谢大神的分享




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