无线仿真中无法设置节点颜色的解决方案

       NS中提供了配置节点与流量颜色标识的方法,给一条流“上色”是经常用的方法,但是在无线仿真的时候不好用,经常出现只有fid=0的流上了颜色,经过仔细研究源代码,发现有下面一段,[cmu-trace.cc] 之后还有一些判断,好像是在802.15.4的情况下才有颜色,如果添上下面这段,颜色是都有了,但是很可能不太正确,期望有高手能解决。

      //  A simple hack for scadds demo (fernandez's visit) -- Chalermek
      int  pkt_color  =   0 ;

 再说节点的颜色配置,可能很少有人用到。但是在无线环境下,尤其是节点会移动的情况下,把节点标记成不同的颜色,会大大提高可视化程度。NS给用户提供的节点配置颜色的方法定义在Ns-namsupp.tcl中,函数的声明为:

Node instproc color { color } {
 
$self
 instvar attr_ id_

 set ns [Simulator instance]

 
if [$ns is-
started] {
  
# color must be initialized


  
$ns puts-nam-config 
  [
eval list "n -t [format "%.15g" [$ns now]] -s $id_ -S COLOR -c $color -o $attr_(COLOR) -i $color -I $attr_(LCOLOR)" ]
  set attr_(COLOR) 
$color

         set attr_(LCOLOR) 
$color
 } 
else  {
  set attr_(COLOR) 
$color

         set attr_(LCOLOR) 
$color
 }
}

前几天我在配置脚本的时候想使用节点颜色,还有节点标签,所以我做了如下配置:

$node_ ( 1 ) color red
$node_ ( 1 ) label mobile_node

但是Nam播放中,节点仍然是黑色的,我又仔细看了函数声明,发现配置方法没错,可是为什么节点的颜色就是没变呢?进一步深入研究了NamTrace文件,我发现前面的若干行是用来初始化节点的位置、形状、颜色的:

n -t * -s 1  -x 300 -y 200 -Z 0 -z 30  -v circle -c black

可以清楚的看见颜色的配置是黑色,可是我明明指定它为红色了!我要看看是哪里打印了这一行,一番搜索,找到了在Ns-lib.tcl中负责Node的Nam配置初始化函数:

Simulator instproc initial_node_pos {nodep size} {
 
$self  instvar addressType_
 
$self  instvar energyModel_ 

 
if  [info  exists  energyModel_] {  
  set nodeColor 
" green "
 } 
else  {
  set nodeColor 
" black "
 }
......
  
#  Flat addressing
   $self  puts - nam - config  " n -t * -s [$nodep id] 
-x [$nodep set X_] -y [$nodep set Y_] -Z [$nodep set Z_] -z $size 
-v circle -c $nodeColor
"
 }
}

 注意看那个 if 结构,由于只有两种情况,开启了能量模型节点就是绿色的否则就是黑的,所以我们前面所做的配置都没有用了,于是乎,改之!将那个 if 结构的内容改成如下所示:

if  [info  exists  energyModel_] {  
  set nodeColor 
" green "
 } 
else  {
#   set nodeColor "black"
  set tempcolor [ $nodep  set attr_(COLOR)]
  
if  { $tempcolor   ==   " green " } {
   puts 
" Green is reserved for energy model, you may not set your node green... "
   set tempcolor 
" black "
  }
  puts 
" Node color is set to $tempcolor "
  set nodeColor 
$tempcolor
 }

 然后重新make一下,甚至不用重新make,只要你把改过的Simulator instproc initial_node_pos 的声明与定义都写到你的TCL脚本的头部,这样你这个脚本中调用的函数就是你自定义的了。再重新运行一遍试试。检查一下NamTrace文件:

n -t * -s 1  -x 300 -y 200 -Z 0 -z 30  -v circle -c red

好了,这次配置正确了,用Nam跑一遍,赏心悦目啊~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值