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

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) 1991,1993 Regents of the University of 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 Computer Systems
  16.  * Engineering Group at Lawrence Berkeley Laboratory.
  17.  * 4. Neither the name of the University nor of the Laboratory 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/animation.h,v 1.27 2003/10/11 22:56:49 xuanc Exp $ (LBL)
  34.  */
  35. #ifndef nam_animation_h
  36. #define nam_animation_h
  37. #include <tcl.h>
  38. #include "state.h"
  39. #include "paint.h"
  40. #include "bbox.h"
  41. class View;
  42. //class PSView;
  43. class EditView;
  44. class Monitor;
  45. struct MonState;
  46. #define UP 0
  47. #define DOWN 1
  48. #define BPACKET 1
  49. // Assign an ID for all derived classes of Animation
  50. const int ClassAllID =  0;
  51. const int ClassAnimationID =  1;
  52. const int ClassPacketID =  ClassAnimationID + 1;
  53. const int ClassNodeID =  ClassPacketID + 1;
  54. const int ClassEdgeID =  ClassNodeID + 1;
  55. const int ClassQueueItemID =  ClassEdgeID + 1;
  56. const int ClassAgentID =  ClassQueueItemID + 1;
  57. const int ClassLanID =  ClassAgentID + 1;
  58. const int ClassTagID =  ClassLanID + 1;
  59. const int ClassTrafficSourceID = ClassTagID + 1;
  60. const int ClassLossModelID = ClassTrafficSourceID + 1;
  61. const int ClassQueueHandleID = ClassLossModelID + 1;
  62. const int AnimationTagIncrement = 5;
  63. class Animation {
  64. public:
  65. virtual ~Animation();
  66. virtual void draw(View*, double now) = 0;
  67. // This one is obsolete. Need not pass "now" if everything is 
  68. // updated timely.
  69. virtual int inside(double now, float px, float py) const;
  70. virtual int inside(float px, float py) const {
  71. return bb_.inside(px, py);
  72. }
  73. // Move this object by a displacement in window coordinates
  74. virtual void move(EditView* editview,
  75.                   float x_displacement,
  76.                   float y_displacement) {}
  77. virtual float distance(float x, float y) const;
  78. void merge(BBox & b);
  79. virtual void update_bb() = 0;
  80. virtual void update(double now);
  81. virtual void reset(double now);
  82. virtual const char* info() const;
  83. virtual const char* property();
  84. virtual const char* getProperties(const char * type);
  85. virtual const char* getname() const;
  86. virtual const char* getfid() const;
  87. virtual const char* getesrc() const;
  88. virtual const char* getedst() const;
  89. virtual const char* gettype() const;
  90. int id() const { return id_; }
  91. const BBox& bbox() { return bb_; }
  92. virtual void monitor(Monitor *m, double now, char *result, int len);
  93. virtual MonState *monitor_state(void);
  94. void remove_monitor() {monitor_=0;}
  95. void insert(Animation **);
  96. void detach();
  97. void paint(int id) { paint_ = id; }
  98. void color(const char *color);
  99. void change_color(char *color);
  100. void toggle_color();
  101. inline StateInfo stateInfo() { return (si_); }
  102. inline int paint() const { return (paint_); }
  103. inline Animation* next() const { return (next_); }
  104. inline Animation** prev() const { return (prev_); }
  105. static unsigned int LASTID_;
  106. static Tcl_HashTable* AniHash_;
  107. static unsigned int nAniHash_;
  108. static Animation* find(unsigned int id);
  109. virtual int classid() const { return ClassAnimationID; }
  110. inline int isTagged() const { return nTag_ > 0; }
  111. inline int numTag() const { return nTag_; }
  112. inline int type() const { return aType_; }
  113. inline Animation* getTag(int i) const { return tags_[i]; }
  114. Animation* getLastTag();
  115. void deleteTag(Animation *);
  116. void addTag(Animation *); // label myself with a new tag 
  117. // i.e., join a new group
  118. protected:
  119. Animation();
  120. Animation(double, long);
  121. /*
  122.  * id for X graphics context
  123.  * (e.g., color and linewidth)
  124.  */
  125. int paint_;
  126. int oldPaint_;  // saved for node down event
  127. Monitor *monitor_;
  128. BBox bb_;
  129. StateInfo si_;
  130. Animation* next_;
  131. Animation** prev_;
  132. unsigned int id_;  // unique identifier for all animation objs
  133. Animation **tags_; // an dynamic array of tags
  134. int nTag_;
  135. int aType_;
  136. };
  137. #endif