view.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:5k
- /*
- * Copyright (c) 1991,1993 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the Computer Systems
- * Engineering Group at Lawrence Berkeley Laboratory.
- * 4. Neither the name of the University nor of the Laboratory may be used
- * to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#) $Header: /cvsroot/nsnam/nam-1/view.h,v 1.11 2003/10/11 22:56:51 xuanc Exp $ (LBL)
- */
- #ifndef nam_view_h
- #define nam_view_h
- #include <tk.h>
- #include "tkcompat.h"
- #include "netmodel.h"
- #include "transform.h"
- #include "bbox.h"
- class NetModel;
- struct TraceEvent;
- class Tcl;
- class Paint;
- /*defines for whether aspect ratio is to be square or not*/
- #define SQUARE 0
- #define NONSQUARE 1
- // Total number of fonts
- #define NFONT 8
- // Indexes into fontName and font_ arrays
- #define TIMES_8POINT 0
- #define TIMES_10POINT 1
- #define TIMES_12POINT 2
- #define TIMES_14POINT 3
- #define TIMES_18POINT 4
- #define TIMES_20POINT 5
- #define TIMES_24POINT 6
- #define TIMES_34POINT 7
- // Anchor locations for use in:
- // string(float fx, float fy, float dim, const char* s,
- // int anchor, const char * color)
- #define ANCHOR_CENTER 0
- #define ANCHOR_NORTH 1
- #define ANCHOR_SOUTH 2
- #define ANCHOR_EAST 3
- #define ANCHOR_WEST 4
- class View {
- public:
- View(const char* name, int aspect, int width, int height);
- virtual ~View();
- virtual void draw();
- void redrawModel() { resize(width_, height_); }
- /*
- * Graphics interface.
- */
- virtual void line(float x0, float y0, float x1, float y1, int color);
- virtual void rect(float x0, float y0, float x1, float y1, int color);
- virtual void polygon(const float* x, const float* y, int n, int color);
- virtual void fill(const float* x, const float* y, int n, int color);
- virtual void circle(float x, float y, float r, int color);
- int getStringScreenWidth(const char * text, int screen_height);
- double getStringWidth(const char * text, double height);
- int getStringHeight(char * text);
- virtual void string(float fx, float fy, float dim, const char* s,
- int anchor, const char* color = NULL);
- int string(const char * text, double world_x, double world_y,
- double size, const char * color = NULL);
- void boxedString(const char * text, double world_x, double world_y,
- double vertical_size, int paint,
- const char * color = NULL);
- int width() {return width_; }
- int height() {return height_; }
- Tk_Window tk() {return tk_;}
- /*
- * Tcl command hooks.
- */
- static int command(ClientData, Tcl_Interp*, int argc, CONST84 char **argv);
- static void handle(ClientData, XEvent*);
- void destroy() { Tk_DestroyWindow(tk_); }
- int getCoord(char *xs, char *ys, float &x, float &y);
- // Interface to transform_'s map
- void map(float& x, float& y) const { matrix_.map(x, y); }
- void imap(float& tx, float& ty) const { matrix_.imap(tx, ty); }
-
- virtual void render() {};
- virtual void render(BBox &) {};
- virtual void BoundingBox(BBox & destination); // Copy bbox into
- // destination
- virtual void getWorldBox(BBox & world_boundary) = 0;
- void setClipRect(BBox &);
- void clearClipRect();
- void setFunction(int);
- View * next_; // Next view in a list of differnet network views
- protected:
- void resize(int width, int height);
- /*
- * transformation matrix for this view of the model.
- */
- Transform matrix_;
- /*information for panning and zooming*/
- float magnification_;
- float panx_;
- float pany_;
- int aspect_;
-
- /*scrollbar widgets*/
- char *xscroll_;
- char *yscroll_;
- int width_;
- int height_;
- Tk_Window tk_;
- Drawable offscreen_;
- GC background_;
- void zoom(float mag);
- void pan(float x, float y);
- double pixelsPerMM_;
- /*
- * Font structures.
- */
- void load_fonts();
- void free_fonts();
- int lookup_font(int d);
- // Look above for index names
- Tk_Font fonts_[NFONT];
- GC font_gc_[NFONT];
- int nfont_;
- int default_font_;
- BBox canvas_clip_;
- BBox clip_;
- int bClip_;
- };
- #endif