有n个Adhoc节点在现场随机部署。由于需要特殊的节点,我应该从AdhocHost
扩展新节点,并添加一些参数,例如节点坐标。
MySensorNode.ned
import inet.node.inet.AdhocHost;
import inet.node.inet.INetworkNode;
module MySensorNode extends AdhocHost like INetworkNode
{
parameters:
@display("bgb=827.48,663.192;bgu=m;i=misc/transmission_anim");
@class(inet::MySensorNode);
}
MySensorNode.h
#ifndef __INET_MYSENSORNODE_H
#define __INET_MYSENSORNODE_H
namespace inet {
class MySensorNode : public ***????????what should I write here????***
{
public:
bool first_init = true;
MySensorNode();
virtual ~MySensorNode();
virtual void initialize(int stage);
virtual void changecolor();
virtual void handleMessage(cMessage *msg);
?????????others ?????????
};
} // namespace inet
#endif /* __INET_MYSENSORNODE_H */
MySensorNode.cc
#include "MySensorNode.h"
namespace inet {
Define_Module(MySensorNode);
void MySensorNode::initialize(int stage)
{
if(first_init)
{
changecolor();
}
}
void MySensorNode::changecolor()
{
???????????????????
}
} // namespace inet
作为问题的第一部分,我想在初始化时更改节点颜色的5%。我该怎么办?
请在上面的代码中提及我的错误。谢谢
答案 0 :(得分:0)
如果只是要更改颜色,则需要更改显示字符串。
您可以在UDPBasicApp
模块的初始化方法(阶段1)中这样做:
getParentModule()->getDisplayString().setTagArg("i", 1, "yellow");
OMNeT ++ Manual
中描述了不同的标签 AdhocHost
是一个复合模块。尽管可以使用@class属性覆盖复合模块的C ++类,但这是一项永远不应使用的功能。将代码封装到一个简单的模块中,并将其添加为子模块。阅读this了解更多信息。
要将其添加为子模块,需要更改复合模块。可以这样完成:
module SomeName extends AdhocHost
{
submodules:
mySensorNode: MySensorNode;
}
那么您的MySensorNode
是cSimpleModule
:
namespace inet {
class MySensorNode : public cSimpleModule
{
public:
....
在Stack Overflow和INET Framework中有很多示例,例如inet.linklayer.common.WirelessNic