feature.cc
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:6k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) 1997 University of Southern California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *      This product includes software developed by the Information Sciences
  16.  *      Institute of the University of Southern California.
  17.  * 4. Neither the name of the University nor of the Institute may be used
  18.  *    to endorse or promote products derived from this software without
  19.  *    specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  *
  33.  * @(#) $Header: /cvsroot/nsnam/nam-1/feature.cc,v 1.8 2001/04/18 00:14:15 mehringe Exp $ (LBL)
  34.  */
  35. #ifdef WIN32
  36. #include <windows.h>
  37. #endif
  38. #include "netview.h"
  39. #include "agent.h"
  40. #include "node.h"
  41. #include "edge.h"
  42. #include "paint.h"
  43. #include "feature.h"
  44. Feature::Feature(Agent *a, const char* name) :
  45. Animation(0, 0),
  46. next_(0),
  47. x_(0.),
  48. y_(0.),
  49. agent_(a),
  50. anchor_(0),
  51. mark_(0)
  52. {
  53. varname_ = new char[strlen(name) + 1];
  54. strcpy(varname_, name);
  55. paint_ = Paint::instance()->thick();
  56. }
  57. void Feature::size(double s)
  58. {
  59. size_ = s;
  60. update_bb();
  61. }
  62. void Feature::update_bb()
  63. {
  64. double off = 0.5 * size_;
  65. /*XXX*/
  66. bb_.xmin = x_ - off;
  67. bb_.ymin = y_ - off;
  68. bb_.xmax = x_ + off;
  69. bb_.ymax = y_ + off;
  70. }
  71. int Feature::inside(double, float px, float py) const
  72. {
  73. return (px >= bb_.xmin && px <= bb_.xmax &&
  74. py >= bb_.ymin && py <= bb_.ymax);
  75. }
  76. const char* Feature::info() const
  77. {
  78. static char text[128];
  79. sprintf(text, "%s", varname_);
  80. return (text);
  81. }
  82. void Feature::monitor(double /*now*/, char *result, int /*len*/)
  83. {
  84.   sprintf(result, "This should not happen");
  85. }
  86. void Feature::varname(const char* name, int anchor)
  87. {
  88. delete varname_;
  89. varname_ = new char[strlen(name) + 1];
  90. strcpy(varname_, name);
  91. anchor_ = anchor;
  92. }
  93. void Feature::drawlabel(View* nv) const
  94. {
  95. /*XXX node number */
  96. if (varname_ != 0)
  97. nv->string(x_, y_, size_, varname_, anchor_);
  98. }
  99. void Feature::reset(double)
  100. {
  101. paint_ = Paint::instance()->thick();
  102. }
  103. void Feature::place(double x, double y)
  104. x_ = x;
  105. y_ = y;
  106. mark_ = 1;
  107. update_bb();
  108. }
  109. ListFeature::ListFeature(Agent *a, const char* name) : 
  110.   Feature(a,name), value_(NULL)
  111. {
  112. ListFeature::size(a->size());
  113. }
  114. void ListFeature::set_feature(char *value)
  115. {
  116.   if (value_!=NULL)
  117.     delete value_;
  118.   value_ = new char[strlen(value) + 1];
  119.   strcpy(value_, value);
  120. }
  121. void ListFeature::size(double s)
  122. {
  123. Feature::size(s);
  124. double delta = 0.5 * s;
  125. x0_ = x_ - delta;
  126. y0_ = y_ - delta;
  127. x1_ = x_ + delta;
  128. y1_ = y_ + delta;
  129. }
  130. void ListFeature::monitor(double /*now*/, char *result, int /*len*/)
  131. {
  132.   sprintf(result, "%s:%s", varname_, value_);
  133. }
  134. void ListFeature::draw(View* nv, double now) {
  135. nv->rect(x0_, y0_, x1_, y1_, paint_);
  136. drawlabel(nv);
  137. }
  138. void ListFeature::place(double x, double y)
  139. {
  140. Feature::place(x, y);
  141. double delta = 0.5 * size_;
  142. x0_ = x_ - delta;
  143. y0_ = y_ - delta;
  144. x1_ = x_ + delta;
  145. y1_ = y_ + delta;
  146. }
  147. VariableFeature::VariableFeature(Agent *a, const char* name) : 
  148.   Feature(a,name), value_(NULL)
  149. {
  150. VariableFeature::size(a->size());
  151. }
  152. void VariableFeature::set_feature(char *value)
  153. {
  154.   if (value_!=NULL)
  155.     delete value_;
  156.   value_ = new char[strlen(value) + 1];
  157.   strcpy(value_, value);
  158. }
  159. void VariableFeature::size(double s)
  160. {
  161. Feature::size(s);
  162. double delta = 0.5 * s;
  163. x0_ = x_ - delta;
  164. y0_ = y_ - delta;
  165. x1_ = x_ + delta;
  166. y1_ = y_ + delta;
  167. }
  168. void VariableFeature::monitor(double /*now*/, char *result, int /*len*/)
  169. {
  170.   sprintf(result, "%s:%s", varname_, value_);
  171. }
  172. void VariableFeature::draw(View* nv, double now) {
  173. nv->rect(x0_, y0_, x1_, y1_, paint_);
  174. drawlabel(nv);
  175. }
  176. void VariableFeature::place(double x, double y)
  177. {
  178. Feature::place(x, y);
  179. double delta = 0.5 * size_;
  180. x0_ = x_ - delta;
  181. y0_ = y_ - delta;
  182. x1_ = x_ + delta;
  183. y1_ = y_ + delta;
  184. }
  185. TimerFeature::TimerFeature(Agent *a, const char* name) : 
  186.   Feature(a,name)
  187. {
  188.   TimerFeature::size(a->size());
  189. }
  190. void TimerFeature::set_feature(double timer, int direction, double time_set)
  191. {
  192.   timer_=timer;
  193.   direction_=direction;
  194.   time_set_=time_set;
  195. }
  196. void TimerFeature::size(double s)
  197. {
  198. Feature::size(s);
  199. double delta = 0.5 * s;
  200. x0_ = x_ - delta;
  201. y0_ = y_ - delta;
  202. x1_ = x_ + delta;
  203. y1_ = y_ + delta;
  204. }
  205. void TimerFeature::monitor(double /*now*/, char *result, int /*len*/)
  206. {
  207.   sprintf(result, "%s:%f", varname_, timer_);
  208. }
  209. void TimerFeature::draw(View* nv, double now) {
  210. nv->rect(x0_, y0_, x1_, y1_, paint_);
  211. drawlabel(nv);
  212. }
  213. void TimerFeature::place(double x, double y)
  214. {
  215. Feature::place(x, y);
  216. double delta = 0.5 * size_;
  217. x0_ = x_ - delta;
  218. y0_ = y_ - delta;
  219. x1_ = x_ + delta;
  220. y1_ = y_ + delta;
  221. }