Removed obsolete library.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19736 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
2003-03-23 19:06:57 +00:00
parent ce109c530a
commit 6ceef8efe9
39 changed files with 0 additions and 8905 deletions

View File

@@ -1,76 +0,0 @@
#ifndef __WXBOUNDINGBOX_H__
#define __WXBOUNDINGBOX_H__
#if defined(__GNUG__) && !defined(__APPLE__)
#pragma interface "bbox.cpp"
#endif
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
#include "wx/matrix.h"
#include "wx/geometry.h"
enum OVERLAP {_IN,_ON,_OUT};
//Purpose The wxBoundingBox class stores one wxBoundingBox.
//The wxBoundingBox is defined by two coordiates,
//a upperleft coordinate and a lowerright coordinate.
class wxBoundingBox
{
public:
wxBoundingBox();
wxBoundingBox(const wxBoundingBox&);
wxBoundingBox(const wxPoint2DDouble&);
wxBoundingBox(double xmin, double ymin, double xmax, double ymax);
bool And(wxBoundingBox*, double Marge = 0);
void EnLarge(const double Marge);
void Shrink(const double Marge);
void Expand(const wxPoint2DDouble& , const wxPoint2DDouble&);
void Expand(const wxPoint2DDouble&);
void Expand(double x,double y);
void Expand(const wxBoundingBox& bbox);
OVERLAP Intersect( wxBoundingBox &, double Marge = 0);
bool LineIntersect(const wxPoint2DDouble& begin, const wxPoint2DDouble& end );
bool PointInBox( const wxPoint2DDouble&, double Marge = 0);
bool PointInBox( double, double, double Marge = 0);
void Reset();
void Translate( wxPoint2DDouble& );
void MapBbox( const wxTransformMatrix& matrix);
double GetWidth() {return m_maxx-m_minx;};
double GetHeight(){return m_maxy-m_miny;};
bool GetValid() const;
void SetValid(bool);
void SetBoundingBox(const wxPoint2DDouble& a_point);
void SetMin(double, double);
void SetMax(double, double);
inline wxPoint2DDouble GetMin();
inline wxPoint2DDouble GetMax();
inline double GetMinX(){return m_minx;};
inline double GetMinY(){return m_miny;};
inline double GetMaxX(){return m_maxx;};
inline double GetMaxY(){return m_maxy;};
wxBoundingBox& operator+( wxBoundingBox& );
wxBoundingBox& operator=( const wxBoundingBox& );
protected:
//bounding box in world
double m_minx;
double m_miny;
double m_maxx;
double m_maxy;
bool m_validbbox;
};
#endif

View File

@@ -1,863 +0,0 @@
/////////////////////////////////////////////////////////////////////////////
// Name: canvas.h
// Author: Robert Roebling
// Created: XX/XX/XX
// Copyright: 2000 (c) Robert Roebling
// Licence: wxWindows Licence
/////////////////////////////////////////////////////////////////////////////
#ifndef __WXCANVAS_H__
#define __WXCANVAS_H__
#if defined(__GNUG__) && !defined(__APPLE__)
#pragma interface "canvas.cpp"
#endif
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
#include "wx/image.h"
#include "wx/txtstrm.h"
#include "wx/geometry.h"
#include "wx/matrix.h"
#include "bbox.h"
//----------------------------------------------------------------------------
// decls
//----------------------------------------------------------------------------
class wxCanvas;
class wxCanvasAdmin;
//----------------------------------------------------------------------------
// wxCanvasObject
//----------------------------------------------------------------------------
enum wxDRAG_MODE
{
wxDRAG_RECTANGLE,
wxDRAG_ONTOP,
wxDRAG_REDRAW
};
//:defenition
// wxCanvasObject is the base class for Canvas Objects.
// All Objects for drawing one the canvas are derived from this class.
// It supports dragging and moving methods that can be used in derived
// classes for defining several ways of dragging.
// Also it is possible to plug in events handlers to do this for all derived classes at once.
//
// wxCanvasObjects have themselves as their event handlers by default,
// but their event handlers could be set to another object entirely. This
// separation can reduce the amount of derivation required, and allow
// alteration of a wxCanvasObject functionality
class wxCanvasObject: public wxEvtHandler
{
DECLARE_CLASS(wxCanvasObject)
public:
wxCanvasObject();
//If the position (x,y) is within the object this return a pointer to the object
//Normally this function needs to be defined for each derived wxCanvasObject.
//The default is a simple bounding box test.
virtual wxCanvasObject* IsHitWorld( double x, double y, double margin = 0 );
//render this object to the canvas (either on its buffer or directly on the canvas)
//this depends on the wxDC that is set for the active canvas.
virtual void Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height );
//x position in world coordinates of the object
virtual double GetPosX()=0;
//y position in world coordinates of the object
virtual double GetPosY()=0;
//set position in world coordinates for the object
virtual void SetPosXY( double x, double y)=0;
//absolute moving the object to position x,y in world coordinates
//also does an update of the old and new area
virtual void MoveAbsolute( double x, double y );
//relative moving the object to position x,y in world coordinates
//also does an update of the old and new area
virtual void MoveRelative( double x, double y );
//relative translate the object to position x,y in world coordinates
//does NOT update the old and new area
//this function must be defined for each derived object,
//it is used internally for dragging and moving objects.
virtual void TransLate( double x, double y )=0;
//choose one of the three diffrenet drag methods |
//DRAG_RECTANGLE = as a rectangle when drag is in progress |
//DRAG_ONTOP = only redraw the object when dragging |
//DRAG_REDRAW = redraw the damaged areas when dragging
void SetDragMode(wxDRAG_MODE mode) { m_dragmode=mode; };
//return the dragmode
wxDRAG_MODE GetDragMode() { return m_dragmode; };
//called when starting a drag
virtual void DragStart();
//called when dragging is in progress
virtual void DragRelative( double x, double y);
//called when dragging is ended
virtual void DragEnd();
//return the object if it is part of the given object or
//if the given object is part of a group within this object.
//For group objects this means recursively search for it.
virtual wxCanvasObject* Contains( wxCanvasObject* obj );
//calculate the boundingbox in world coordinates
virtual void CalcBoundingBox()=0;
//write the object as SVG (scalable vector grafhics
virtual void WriteSVG( wxTextOutputStream &stream );
//get the administrator for the object,
//this will give access to the canvas's where it is displayed upon.
//It is used to render the object to the active canvas.
//Conversion from world to Device coordinates and visa versa is
//done using the Active canvas at that moment.
wxCanvasAdmin *GetAdmin() { return m_admin; }
//set the administrator
virtual void SetAdmin( wxCanvasAdmin *admin ) { m_admin = admin; }
//is this a control type of canvas object
bool IsControl() { return m_isControl; }
//is this a vector type of canvas object
bool IsVector() { return m_isVector; }
//is this an Image type of canvas object
bool IsImage() { return m_isImage; }
//get minimum X of the boundingbox in world coordinates
inline double GetXMin() { return m_bbox.GetMinX(); }
//get minimum Y of the boundingbox in world coordinates
inline double GetYMin() { return m_bbox.GetMinY(); }
//get maximum X of the boundingbox in world coordinates
inline double GetXMax() { return m_bbox.GetMaxX(); }
//get maximum Y of the boundingbox in world coordinates
inline double GetYMax() { return m_bbox.GetMaxY(); }
//get boundingbox
inline wxBoundingBox GetBbox() { return m_bbox; }
//redirect all mouse events for the canvas to this object
void CaptureMouse();
//release the mouse capture for this object
void ReleaseMouse();
//is the mouse captured for this object
bool IsCapturedMouse();
//set if this object will visible (be rendered or not)
inline void SetVisible(bool visible) { m_visible=visible; }
//get visibility
inline bool GetVisible() {return m_visible; }
//can the object be dragged
inline void SetDraggable(bool drag) { m_dragable=drag; }
//get if the object can be dragged
inline bool GetDraggable() {return m_dragable; }
//get absolute area in the device coordinates where the object
//its boundingbox in world coordinates is first translated using the matrix.
wxRect GetAbsoluteArea(const wxTransformMatrix& cworld);
//get currently used eventhandler (always the first in the list)
wxEvtHandler *GetEventHandler() const { return m_eventHandler; }
//process an event for the object, starting with the first eventhandler
// in the list.
bool ProcessCanvasObjectEvent(wxEvent& event);
// push/pop event handler: allows to chain a custom event handler to
// already existing ones
void PushEventHandler( wxEvtHandler *handler );
//remove first eventhandler in the list (one will be always stay in)
wxEvtHandler *PopEventHandler( bool deleteHandler = FALSE );
//append an eventhandler to the list, this event handler will be called
//if the other skipped the event to process.
void AppendEventHandler(wxEvtHandler *handler);
//remove last event handler in the list (one will always stay in)
wxEvtHandler *RemoveLastEventHandler(bool deleteHandler);
protected:
//administator for rendering and accessing the canvas's
wxCanvasAdmin* m_admin;
//active event handler, default the object itself
wxEvtHandler* m_eventHandler;
bool m_isControl:1;
bool m_isVector:1;
bool m_isImage:1;
bool m_visible:1;
bool m_dragable:1;
wxDRAG_MODE m_dragmode:3;
//boundingbox in world coordinates
wxBoundingBox m_bbox;
//used for dragging
wxBitmap m_atnewpos;
};
//:defenition
// wxCanvasObjectGroup is a container for wxCanvas derived Objects.
// It renders itself by calling the render methods of the wxCanvasObjects it contains.
// It can have nested groups also, in the same way as the other wxCanvasObjects it already contains.
// The group has a matrix to position/rotate/scale the group.
class wxCanvasObjectGroup: public wxCanvasObject
{
DECLARE_CLASS(wxCanvasObjectGroup)
public:
wxCanvasObjectGroup(double x, double y);
virtual ~wxCanvasObjectGroup();
void SetAdmin(wxCanvasAdmin* admin);
//prepend a wxCanvasObject to this group
virtual void Prepend( wxCanvasObject* obj );
//append a wxCanvasObject to this group
virtual void Append( wxCanvasObject* obj );
//insert a wxCanvasObject to this group
virtual void Insert( size_t before, wxCanvasObject* obj );
//remove the given object from the group
virtual void Remove( wxCanvasObject* obj );
//those this group contain the given object.
//in case of nested groups also search in there to the lowwest level.
virtual wxCanvasObject* Contains( wxCanvasObject* obj );
//returns index of the given wxCanvasObject in this group
virtual int IndexOf( wxCanvasObject* obj );
double GetPosX() { return lworld.GetValue(2,0); }
double GetPosY() { return lworld.GetValue(2,1); }
void SetPosXY( double x, double y) {lworld.SetValue(2,0,x);lworld.SetValue(2,1,y);CalcBoundingBox();};
void TransLate( double x, double y );
void CalcBoundingBox();
//remove all wxCanvasObjects from the group (flag for deletion of the objectsalso)
void DeleteContents( bool );
virtual void Render(wxTransformMatrix* cworld,int x, int y, int width, int height );
virtual void WriteSVG( wxTextOutputStream &stream );
//recursive call the IsHitWorld on all contained objects, the first
//one that is hit will be returned
wxCanvasObject* IsHitWorld( double x, double y, double margin = 0 );
//recursive calls for contained objects to set eventhandlers,
//and also sets its own eventhandler
void PushEventHandler( wxEvtHandler *handler );
//recursive calls for contained objects to set eventhandlers,
//and also sets its own eventhandler
wxEvtHandler *PopEventHandler( bool deleteHandler = FALSE );
//recursive calls for contained objects to set eventhandlers,
//and also sets its own eventhandler
void AppendEventHandler(wxEvtHandler *handler);
//recursive calls for contained objects to set eventhandlers,
//and also sets its own eventhandler
wxEvtHandler *RemoveLastEventHandler(bool deleteHandler);
protected:
//to position the object
wxTransformMatrix lworld;
wxList m_objects;
friend class wxCanvas;
};
//:defenition
// wxCanvasObjectRef is a reference to any wxCanvasObject derived class.
// It does not duplicate the referenced object.
// It has a matrix to reposition/rotate/scale the object it references.
// The position/matrix of the referenced Object is accumulated with the one here.
class wxCanvasObjectRef: public wxCanvasObject
{
DECLARE_CLASS(wxCanvasObjectRef)
public:
wxCanvasObjectRef(double x, double y,wxCanvasObject* obj);
//set rotation for the reference
void SetRotation(double rotation);
//set scale in x and y ( > zero)
void SetScale( double scalex, double scaley );
void SetAdmin(wxCanvasAdmin* admin);
double GetPosX() { return lworld.GetValue(2,0); }
double GetPosY() { return lworld.GetValue(2,1); }
void SetPosXY( double x, double y) {lworld.SetValue(2,0,x);lworld.SetValue(2,1,y);CalcBoundingBox();};
void TransLate( double x, double y );
void CalcBoundingBox();
virtual void Render(wxTransformMatrix* cworld,int x, int y, int width, int height );
virtual void WriteSVG( wxTextOutputStream &stream );
//return this object if one of the objects it references is hit
wxCanvasObject* IsHitWorld( double x, double y, double margin = 0 );
virtual wxCanvasObject* Contains( wxCanvasObject* obj );
//recursive calls for contained objects to set eventhandlers,
//and also sets its own eventhandler
void PushEventHandler( wxEvtHandler *handler );
//recursive calls for contained objects to set eventhandlers,
//and also sets its own eventhandler
wxEvtHandler *PopEventHandler( bool deleteHandler = FALSE );
//recursive calls for contained objects to set eventhandlers,
//and also sets its own eventhandler
void AppendEventHandler(wxEvtHandler *handler);
//recursive calls for contained objects to set eventhandlers,
//and also sets its own eventhandler
wxEvtHandler *RemoveLastEventHandler(bool deleteHandler);
protected:
//to position the object
wxTransformMatrix lworld;
//reference to another wxCanvasObject
wxCanvasObject* m_obj;
};
//:defenition
// wxCanvasRect
class wxCanvasRect: public wxCanvasObject
{
DECLARE_CLASS(wxCanvasRect)
public:
wxCanvasRect( double x, double y, double w, double h , double radius=0 );
void SetBrush( const wxBrush& brush) { m_brush = brush; };
void SetPen( const wxPen& pen) { m_pen = pen; CalcBoundingBox(); };
double GetPosX() { return m_x; }
double GetPosY() { return m_y; }
void SetPosXY( double x, double y) {m_x=x; m_y=y; CalcBoundingBox();};
void TransLate( double x, double y );
void CalcBoundingBox();
virtual void Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height );
virtual void WriteSVG( wxTextOutputStream &stream );
private:
wxPen m_pen;
wxBrush m_brush;
double m_x;
double m_y;
double m_width;
double m_height;
double m_radius;
};
//----------------------------------------------------------------------------
// wxCanvasCircle
//----------------------------------------------------------------------------
class wxCanvasCircle: public wxCanvasObject
{
public:
wxCanvasCircle( double x, double y, double radius );
void SetBrush( const wxBrush& brush) { m_brush = brush; };
void SetPen( const wxPen& pen) { m_pen = pen; CalcBoundingBox(); };
double GetPosX() { return m_x; }
double GetPosY() { return m_y; }
void SetPosXY( double x, double y) {m_x=x; m_y=y;CalcBoundingBox(); };
void TransLate( double x, double y );
void CalcBoundingBox();
virtual void Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height );
virtual void WriteSVG( wxTextOutputStream &stream );
wxCanvasObject* IsHitWorld( double x, double y, double margin = 0 );
private:
wxPen m_pen;
wxBrush m_brush;
double m_x;
double m_y;
double m_radius;
};
//:defenition
// wxCanvasEllipse
class wxCanvasEllipse: public wxCanvasObject
{
public:
wxCanvasEllipse( double x, double y, double width, double height );
void SetBrush( const wxBrush& brush) { m_brush = brush; };
void SetPen( const wxPen& pen) { m_pen = pen; CalcBoundingBox(); };
double GetPosX() { return m_x; }
double GetPosY() { return m_y; }
void SetPosXY( double x, double y) {m_x=x; m_y=y; CalcBoundingBox();};
void TransLate( double x, double y );
void CalcBoundingBox();
virtual void Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height );
virtual void WriteSVG( wxTextOutputStream &stream );
wxCanvasObject* IsHitWorld( double x, double y, double margin = 0 );
private:
wxPen m_pen;
wxBrush m_brush;
double m_x;
double m_y;
double m_width;
double m_height;
};
//:defenition
// wxCanvasEllipticArc
class wxCanvasEllipticArc: public wxCanvasObject
{
public:
wxCanvasEllipticArc( double x, double y, double width, double height, double start, double end );
void SetBrush( const wxBrush& brush) { m_brush = brush; };
void SetPen( const wxPen& pen) { m_pen = pen; CalcBoundingBox(); };
double GetPosX() { return m_x; }
double GetPosY() { return m_y; }
void SetPosXY( double x, double y) {m_x=x; m_y=y; CalcBoundingBox();};
void TransLate( double x, double y );
void CalcBoundingBox();
virtual void Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height );
virtual void WriteSVG( wxTextOutputStream &stream );
wxCanvasObject* IsHitWorld( double x, double y, double margin = 0 );
private:
wxPen m_pen;
wxBrush m_brush;
double m_x;
double m_y;
double m_width;
double m_height;
double m_start;
double m_end;
};
//:defenition
// wxCanvasLine
class wxCanvasLine: public wxCanvasObject
{
public:
wxCanvasLine( double x1, double y1, double x2, double y2 );
void SetPen( const wxPen& pen) { m_pen = pen; CalcBoundingBox(); };
double GetPosX() { return m_x1; }
double GetPosY() { return m_y1; }
void SetPosXY( double x, double y) {m_x1=x; m_y1=y; CalcBoundingBox();};
void TransLate( double x, double y );
void CalcBoundingBox();
virtual void Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height );
virtual void WriteSVG( wxTextOutputStream &stream );
wxCanvasObject* IsHitWorld( double x, double y, double margin = 0 );
private:
wxPen m_pen;
double m_x1;
double m_y1;
double m_x2;
double m_y2;
};
//:defenition
// wxCanvasImage
class wxCanvasImage: public wxCanvasObject
{
public:
wxCanvasImage( const wxImage &image, double x, double y, double w, double h );
double GetPosX() { return m_x; }
double GetPosY() { return m_y; }
void SetPosXY( double x, double y);
void TransLate( double x, double y );
void CalcBoundingBox();
virtual void Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height );
virtual void WriteSVG( wxTextOutputStream &stream );
private:
double m_x;
double m_y;
double m_width;
double m_height;
wxImage m_image;
int m_orgw,m_orgh;
// cache
wxBitmap m_cBitmap;
wxImage m_cImage;
int m_cW;
int m_cH;
double m_cR;
};
//----------------------------------------------------------------------------
// wxCanvasControl
//----------------------------------------------------------------------------
class wxCanvasControl: public wxCanvasObject
{
public:
wxCanvasControl( wxWindow *control );
~wxCanvasControl();
double GetPosX();
double GetPosY();
void SetPosXY( double x, double y);
void TransLate( double x, double y );
void MoveRelative( double x, double y );
void CalcBoundingBox();
private:
wxWindow *m_control;
};
//:defenition
// wxCanvasText
class wxCanvasText: public wxCanvasObject
{
public:
wxCanvasText( const wxString &text, double x, double y, const wxString &foneFile, int size );
~wxCanvasText();
double GetPosX() { return m_x; }
double GetPosY() { return m_y; }
void SetPosXY( double x, double y) {m_x=x; m_y=y;CalcBoundingBox(); };
void TransLate( double x, double y );
void CalcBoundingBox();
virtual void Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height );
virtual void WriteSVG( wxTextOutputStream &stream );
void SetRGB( unsigned char red, unsigned char green, unsigned char blue );
void SetFlag( int flag );
int GetFlag() { return m_flag; }
private:
wxString m_text;
double m_x;
double m_y;
unsigned char *m_alpha;
void *m_faceData;
int m_flag;
int m_red;
int m_green;
int m_blue;
wxString m_fontFileName;
int m_size;
};
//:defenition
// wxCanvas is used to display a wxCanvasGroupObject, which contains wxCanvasObject derived
// drawable objects. The group to draw is called the root.
// All objects are defined in world coordinates, relative to its parent (e.g. nested groups)
// There are methods to convert from world to device coordinates and visa versa.
// Rendering a draw is normally started on the root, it to a buffer, afterwords
// an update of the damaged parts will blitted from the buffer to the screen.
// This is done in Idle time, but can also be forced.
// World coordinates can be with the Y axis going up are down.
// The area of the drawing in world coordinates that is visible on the canvas
// can be set. Parts of this area can be zoomed into resulting in scroll bars
// to be displayed.
class wxCanvas: public wxScrolledWindow
{
public:
// constructors and destructors
wxCanvas( wxCanvasAdmin* admin ,wxWindow *parent, wxWindowID id = -1,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxScrolledWindowStyle );
virtual ~wxCanvas();
//background colour for the canvas
virtual void SetColour( const wxColour& background );
//update the area given in device coordinates
virtual void Update( int x, int y, int width, int height, bool blit = TRUE );
//blit all updated areas now to the screen, else it will happen in idle time.
//Use this to support dragging for instance, becuase in such cases idle time
//will take to long.
virtual void UpdateNow();
//prevent canvas activety
virtual void Freeze();
//allow canvas activety
virtual void Thaw();
//get the buffer that is used for rendering in general
inline wxBitmap *GetBuffer() { return &m_buffer; }
//get the DC that is used for rendering
inline wxDC *GetDC() { return m_renderDC; }
//set the DC that is used for rendering
inline void SetDC(wxDC* dc) { m_renderDC=dc; }
inline int GetBufferWidth() { return m_buffer.GetWidth(); }
inline int GetBufferHeight() { return m_buffer.GetHeight(); }
//updating is needed for the canvas if the buffer did change
bool NeedUpdate() { return m_needUpdate; }
bool IsFrozen() { return m_frozen; }
//blit damaged areas in the buffer to the screen
void BlitBuffer( wxDC &dc );
//redirect events to this canvas object
void SetCaptureMouse( wxCanvasObject *obj );
//are events redirected, if so return the object else NULL
inline wxCanvasObject* GetCaptured() { return m_captureMouse;}
//set the root group where the objects for this canvas are stored
void SetRoot(wxCanvasObjectGroup* aroot){m_root=aroot;}
//get root group that is displayed on the canvas
wxCanvasObjectGroup* GetRoot(){return m_root;}
//scroll the window in device coordinates
virtual void ScrollWindow( int dx, int dy,
const wxRect* rect = (wxRect *) NULL );
//get y axis orientation
virtual bool GetYaxis() { return FALSE; }
//get the visible part in world coordinates
virtual double GetMinX() const;
virtual double GetMinY() const;
virtual double GetMaxX() const;
virtual double GetMaxY() const;
//convert from window to virtual coordinates
virtual double DeviceToLogicalX(int x) const;
virtual double DeviceToLogicalY(int y) const;
virtual double DeviceToLogicalXRel(int x) const;
virtual double DeviceToLogicalYRel(int y) const;
virtual int LogicalToDeviceX(double x) const;
virtual int LogicalToDeviceY(double y) const;
virtual int LogicalToDeviceXRel(double x) const;
virtual int LogicalToDeviceYRel(double y) const;
protected:
wxBitmap m_buffer;
//always available and m_buffer selected
wxDC* m_renderDC;
bool m_needUpdate;
wxList m_updateRects;
wxCanvasObjectGroup* m_root;
wxColour m_background;
bool m_frozen;
wxCanvasObject *m_lastMouse;
wxCanvasObject *m_captureMouse;
int m_oldDeviceX,m_oldDeviceY;
wxCanvasAdmin* m_admin;
private:
int m_bufferX,m_bufferY;
protected:
void OnMouse( wxMouseEvent &event );
void OnPaint( wxPaintEvent &event );
void OnSize( wxSizeEvent &event );
void OnIdle( wxIdleEvent &event );
void OnSetFocus( wxFocusEvent &event );
void OnKillFocus( wxFocusEvent &event );
void OnEraseBackground( wxEraseEvent &event );
private:
DECLARE_CLASS(wxCanvas)
DECLARE_EVENT_TABLE()
};
class wxVectorCanvas: public wxCanvas
{
public:
// constructors and destructors
wxVectorCanvas( wxCanvasAdmin* admin ,wxWindow *parent, wxWindowID id = -1,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxScrolledWindowStyle );
//scroll the window in device coordinates
virtual void ScrollWindow( int dx, int dy,
const wxRect* rect = (wxRect *) NULL );
//set if the Yaxis goes up or down
void SetYaxis(bool up) { m_yaxis=up; }
//get currently used Yaxis setting
virtual bool GetYaxis() { return m_yaxis; }
//to set the total area in world coordinates that can be scrolled.
// when totaly zoomed out (SetMappingScroll same size as given here),
// this will be the area displayed.
// To display all of a drawing, set this here to the boundingbox of the root group
// of the canvas.
void SetScroll(double vx1,double vy1,double vx2,double vy2);
//given the virtual size to be displayed, the mappingmatrix will be calculated
//in such a manner that it fits (same ratio in width and height) to the window size.
//The window size is used to intitialize the mapping.
//The virtual size is just an indication, it will be ajusted to fit in the client window ratio.
//When border is set an extra margin is added so that the drawing will fit nicely.
// To display all of a drawing, set this here to the boundingbox of the root group
// of the canvas.
void SetMappingScroll(double vx1,double vy1,double vx2,double vy2,bool border);
//matrix for calculating the virtual coordinate given a screen coordinate
wxTransformMatrix GetInverseMappingMatrix();
//matrix for calculating the screen coordinate given a virtual coordinate
wxTransformMatrix GetMappingMatrix();
//get minimum X of the visible part in world coordinates
virtual double GetMinX() const;
virtual double GetMinY() const;
virtual double GetMaxX() const;
virtual double GetMaxY() const;
//convert from window to virtual coordinates and back
virtual double DeviceToLogicalX(int x) const;
virtual double DeviceToLogicalY(int y) const;
virtual double DeviceToLogicalXRel(int x) const;
virtual double DeviceToLogicalYRel(int y) const;
virtual int LogicalToDeviceX(double x) const;
virtual int LogicalToDeviceY(double y) const;
virtual int LogicalToDeviceXRel(double x) const;
virtual int LogicalToDeviceYRel(double y) const;
protected:
// up or down
bool m_yaxis;
// holds the matrix for mapping from virtual to screen coordinates
wxTransformMatrix m_mapping_matrix;
// holds the inverse of the mapping matrix
wxTransformMatrix m_inverse_mapping;
//virtual coordinates of total drawing
double m_virtm_minX, m_virtm_minY, m_virtm_maxX, m_virtm_maxY;
// virtual coordinates box
double m_virt_minX, m_virt_minY, m_virt_maxX, m_virt_maxY;
// bounding box
double m_minX, m_minY, m_maxX, m_maxY;
//are scroll bars active?
bool m_scrolled;
private:
void OnScroll(wxScrollWinEvent& event);
void OnChar( wxKeyEvent &event );
void OnSize( wxSizeEvent &event );
private:
DECLARE_CLASS(wxVectorCanvas)
DECLARE_EVENT_TABLE()
};
//:defenition
//Contains a list of wxCanvas Objects that will be maintained through this class.
//Each wxCanvasObject can be displayed on several wxCanvas Objects at the same time.
//The active wxCanvas is used to render and convert coordinates from world to device.
//So it is important to set the active wxCanvas based on the wxCanvas that has the focus
//or is scrolled etc. This is normally done within wxCanvas when appropriate.
class wxCanvasAdmin
{
public:
// constructors and destructors
wxCanvasAdmin();
virtual ~wxCanvasAdmin();
//convert from window to virtual coordinates
double DeviceToLogicalX(int x) const;
//convert from window to virtual coordinates
double DeviceToLogicalY(int y) const;
//convert from window to virtual coordinates relatif
double DeviceToLogicalXRel(int x) const;
//convert from window to virtual coordinates relatif
double DeviceToLogicalYRel(int y) const;
//convert from virtual to window coordinates
int LogicalToDeviceX(double x) const;
//convert from virtual to window coordinates
int LogicalToDeviceY(double y) const;
//convert from virtual to window coordinates relatif
int LogicalToDeviceXRel(double x) const;
//convert from virtual to window coordinates relatif
int LogicalToDeviceYRel(double y) const;
//update in the buffer off all canvases, the area given in world coordinates
virtual void Update(wxCanvasObject* obj, double x, double y, double width, double height);
//blit all updated areas now to the screen, else it will happen in idle time.
//Use this to support dragging for instance, becuase in such cases idle time
//will take to long.
virtual void UpdateNow();
//append another canvas
virtual void Append( wxCanvas* canvas );
//remove a canvas
virtual void Remove( wxCanvas* canvas );
//set the given canvas as active (for rendering, coordinate conversion etc.)
void SetActive(wxCanvas* activate);
//get active canvas
inline wxCanvas* GetActive() {return m_active;};
private:
wxList m_canvaslist;
wxCanvas* m_active;
};
#endif
// WXCANVAS

View File

@@ -1,58 +0,0 @@
/////////////////////////////////////////////////////////////////////////////
// Name: liner.h
// Author: Klaas Holwerda
// Created: 1/10/2000
// Copyright: 2000 (c) Klaas Holwerda
// Licence: wxWindows Licence
/////////////////////////////////////////////////////////////////////////////
#ifndef __WXLINER_H
#define __WXLINER_H
#if defined(__GNUG__) && !defined(__APPLE__)
#pragma interface "liner.cpp"
#endif
#include "wx/geometry.h"
enum OUTPRODUCT {R_IS_LEFT,R_IS_ON,R_IS_RIGHT};
// Status of a point to a wxLine
enum R_PointStatus {R_LEFT_SIDE, R_RIGHT_SIDE, R_ON_AREA, R_IN_AREA};
class wxLine
{
public:
// constructors and destructor
wxLine( double x1, double y1, double x2, double y2 );
wxLine( const wxPoint2DDouble& a, const wxPoint2DDouble& b);
~wxLine();
wxPoint2DDouble GetBeginPoint(); // Get the beginpoint from a wxLine
wxPoint2DDouble GetEndPoint(); // Get the endpoint from a wxLine
bool CheckIntersect( wxLine&, double Marge); // Check if two wxLines intersects
int Intersect( wxLine&, wxPoint2DDouble& bp ,wxPoint2DDouble& ep ,double Marge) ; // Intersects two wxLines
bool Intersect( wxLine& lijn, wxPoint2DDouble& crossing); //intersect two (infinit) lines
R_PointStatus PointOnLine( const wxPoint2DDouble& a_Point, double& Distance, double Marge ); //For an infinite wxLine
R_PointStatus PointInLine( const wxPoint2DDouble& a_Point, double& Distance, double Marge ); //For a non-infinite wxLine
OUTPRODUCT OutProduct( const wxLine& two, double accur); // outproduct of two wxLines
double Calculate_Y( double X); // Caclulate Y if X is known
void Virtual_Point( wxPoint2DDouble& a_point, double distance) const;
wxLine& operator=( const wxLine&); // assignment operator
void CalculateLineParameters(); // Calculate the parameters if nessecary
void OffsetContour( const wxLine& nextline, double factor,wxPoint2DDouble& offsetpoint) const;
private:
int ActionOnTable1(R_PointStatus,R_PointStatus); // Function needed for Intersect
int ActionOnTable2(R_PointStatus,R_PointStatus); // Function needed for Intersect
double m_AA;
double m_BB;
double m_CC;
wxPoint2DDouble m_a;
wxPoint2DDouble m_b;
bool m_valid_parameters;
};
#endif

View File

@@ -1,220 +0,0 @@
/////////////////////////////////////////////////////////////////////////////
// Name: polygon.h
// Author: Klaas Holwerda
// Created: XX/XX/XX
// Copyright: 2000 (c) Klaas Holwerda
// Licence: wxWindows Licence
/////////////////////////////////////////////////////////////////////////////
#ifndef __WXPOLYGON_H__
#define __WXPOLYGON_H__
#if defined(__GNUG__) && !defined(__APPLE__)
#pragma interface "polygon.cpp"
#endif
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
#include "wx/matrix.h"
#include "wx/geometry.h"
#include "bbox.h"
#include "canvas.h"
enum INOUTPOLY {OUTSIDE_POLY,INSIDE_POLY,ON_POLY};
//----------------------------------------------------------------------------
// wxCanvasPolygon
//----------------------------------------------------------------------------
class wxCanvasPolygon: public wxCanvasObject
{
public:
wxCanvasPolygon( int n, wxPoint2DDouble points[], bool spline = FALSE );
~wxCanvasPolygon();
void SetBrush( const wxBrush& brush) { m_brush = brush; }
void SetPen( const wxPen& pen) { m_pen = pen; CalcBoundingBox(); }
//set colour 1
//being the background color if filling with a monochrome bitmap
//or in case of gradient filling the starting colour for the fill
void SetColour1( const wxColour& fg) { m_textfg=fg;}
//set colour 1
//being the foreground color if filling with a monochrome bitmap
//or in case of gradient filling the ending colour for the fill
void SetColour2( const wxColour& bg) { m_textbg=bg;}
//transparent filling when bitmapbrush is monochrome
void SetTransParent(bool transp) { m_transp=transp;}
//gradient filling using lines chnging in colour from colour1 to colour2
void SetGradient(bool gradient, const wxPen& gpen, double distance)
{ m_gradient=gradient;
m_gpen=gpen;
m_gdistance=distance;
}
double GetPosX() { return m_points[0].m_x; }
double GetPosY() { return m_points[0].m_y; }
void SetPosXY( double x, double y);
void TransLate( double x, double y );
void CalcBoundingBox();
virtual void Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height );
virtual void WriteSVG( wxTextOutputStream &stream );
wxCanvasObject* IsHitWorld( double x, double y, double margin = 0 );
INOUTPOLY PointInPolygon(const wxPoint2DDouble& P, double marge);
private:
bool MoveUp(double horline, int& index, int direction);
void DetectCriticalPoints();
void FillPolygon(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height );
wxList m_CRlist;
wxList m_AETlist;
wxBrush m_brush;
wxPen m_pen;
wxColour m_textbg;
wxColour m_textfg;
//if brush is of type bitmap with a mask fill with mask transparent
bool m_transp;
bool m_gradient;
wxPen m_gpen;
double m_gdistance;
bool m_spline;
int m_n;
wxPoint2DDouble* m_points;
};
//----------------------------------------------------------------------------
// wxCanvasPolyline
//----------------------------------------------------------------------------
class wxCanvasPolyline: public wxCanvasObject
{
public:
wxCanvasPolyline(int n, wxPoint2DDouble points[]);
~wxCanvasPolyline();
void SetPen( const wxPen& pen) { m_pen = pen; CalcBoundingBox(); }
double GetPosX() { return m_points[0].m_x; }
double GetPosY() { return m_points[0].m_y; }
void SetPosXY( double x, double y);
void TransLate( double x, double y );
void CalcBoundingBox();
virtual void Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height );
virtual void WriteSVG( wxTextOutputStream &stream );
wxCanvasObject* IsHitWorld( double x, double y, double margin = 0 );
bool PointOnPolyline(const wxPoint2DDouble& P, double marge);
private:
wxPen m_pen;
int m_n;
wxPoint2DDouble* m_points;
};
//----------------------------------------------------------------------------
// wxCanvasPolygon
//----------------------------------------------------------------------------
class wxCanvasPolygonL: public wxCanvasObject
{
public:
wxCanvasPolygonL(wxList* points, bool spline = FALSE);
~wxCanvasPolygonL();
void SetBrush( const wxBrush& brush) { m_brush = brush; }
void SetPen( const wxPen& pen) { m_pen = pen; CalcBoundingBox(); }
void SetColour1( const wxColour& fg) { m_textfg=fg;}
void SetColour2( const wxColour& bg) { m_textbg=bg;}
void SetTransParent(bool transp) { m_transp=transp;}
double GetPosX();
double GetPosY();
void SetPosXY( double x, double y);
void TransLate( double x, double y );
void CalcBoundingBox();
virtual void Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height );
virtual void WriteSVG( wxTextOutputStream &stream );
wxCanvasObject* IsHitWorld( double x, double y, double margin = 0 );
INOUTPOLY PointInPolygon(const wxPoint2DDouble& P, double marge);
private:
wxBrush m_brush;
wxPen m_pen;
bool m_spline;
wxColour m_textbg;
wxColour m_textfg;
//if brush is of type bitmap with a mask fill with mask transparent
bool m_transp;
wxList* m_lpoints;
};
//----------------------------------------------------------------------------
// wxCanvasPolyline
//----------------------------------------------------------------------------
class wxCanvasPolylineL: public wxCanvasObject
{
public:
wxCanvasPolylineL(wxList* points, bool spline );
~wxCanvasPolylineL();
void SetPen( const wxPen& pen) { m_pen = pen; CalcBoundingBox(); }
double GetPosX();
double GetPosY();
void SetPosXY( double x, double y);
void TransLate( double x, double y );
void CalcBoundingBox();
virtual void Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height );
virtual void WriteSVG( wxTextOutputStream &stream );
wxCanvasObject* IsHitWorld( double x, double y, double margin = 0 );
bool PointOnPolyline(const wxPoint2DDouble& P, double marge);
private:
wxPen m_pen;
bool m_spline;
wxList* m_lpoints;
};
//active edge table
class wxAET
{
public:
inline void CalculateLineParameters( const wxPoint2DDouble& p1 , const wxPoint2DDouble& p2 );
inline void CalculateXs( double y );
//line paramters
bool m_horizontal;
double m_BdivA;
double m_CdivA;
int m_index;
int m_direction;
//intersection point with scanline;
double m_xs;
};
#endif

View File

@@ -1,10 +0,0 @@
# $Id$
CONTRIB_SAMPLES=test simple
all:
@for d in $(CONTRIB_SAMPLES); do (cd $$d && $(MAKE)); done
clean:
@for d in $(CONTRIB_SAMPLES); do (cd $$d && $(MAKE) clean); done

View File

@@ -1,23 +0,0 @@
#
# File: Makefile.in
# Author: Julian Smart
# Created: 2000
# Updated:
# Copyright: (c) 2000 Julian Smart
#
# "%W% %G%"
#
# Makefile for the multicell example (UNIX).
top_srcdir = @top_srcdir@/..
top_builddir = ../../../..
program_dir = contrib/samples/canvas/simple
PROGRAM=simple
OBJECTS=simple.o
APPEXTRALIBS=$(top_builddir)/lib/lib@WX_LIBRARY_BASENAME@_canvas-@WX_RELEASE@.@WX_TARGET_LIBRARY_TYPE@
APPEXTRADEFS=-I$(top_srcdir)/contrib/include
include $(top_builddir)/src/makeprog.env

View File

@@ -1,176 +0,0 @@
# Microsoft Developer Studio Project File - Name="SimpleVC" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Application" 0x0101
CFG=SimpleVC - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "SimpleVC.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "SimpleVC.mak" CFG="SimpleVC - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "SimpleVC - Win32 Release" (based on "Win32 (x86) Application")
!MESSAGE "SimpleVC - Win32 Debug" (based on "Win32 (x86) Application")
!MESSAGE "SimpleVC - Win32 Debug DLL" (based on "Win32 (x86) Application")
!MESSAGE "SimpleVC - Win32 Release DLL" (based on "Win32 (x86) Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "SimpleVC - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O1 /Ob2 /I "../../../../include" /I "../../../../contrib/include" /I "../../../../lib/msw" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /FD /c
# SUBTRACT CPP /YX
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
# ADD BASE RSC /l 0x809 /d "NDEBUG"
# ADD RSC /l 0x809 /i "../../../include" /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib winmm.lib /nologo /subsystem:windows /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib winmm.lib wxmsw.lib png.lib zlib.lib jpeg.lib tiff.lib regex.lib canvas.lib /nologo /subsystem:windows /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libci.lib" /nodefaultlib:"msvcrtd.lib" /out:"Release/simple.exe" /libpath:"../../../../lib"
!ELSEIF "$(CFG)" == "SimpleVC - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../../include" /I "../../../../contrib/include" /I "../../../../lib/mswd" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D DEBUG=1 /D "__WXDEBUG__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /FD /c
# SUBTRACT CPP /YX /Yc /Yu
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
# ADD BASE RSC /l 0x809 /d "_DEBUG"
# ADD RSC /l 0x809 /i "../../../include" /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib winmm.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib winmm.lib wxmswd.lib pngd.lib zlibd.lib jpegd.lib tiffd.lib regexd.lib canvasd.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd.lib" /nodefaultlib:"libcid.lib" /nodefaultlib:"msvcrt.lib" /out:"Debug/simple.exe" /pdbtype:sept /libpath:"../../../../lib"
!ELSEIF "$(CFG)" == "SimpleVC - Win32 Debug DLL"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "DebugDLL"
# PROP BASE Intermediate_Dir "DebugDLL"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "DebugDLL"
# PROP Intermediate_Dir "DebugDLL"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../../include" /I "../../../../contrib/include" /I "../../../../lib/mswdlld" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D DEBUG=1 /D "__WXDEBUG__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /D WXUSINGDLL=1 /Yu"wx/wxprec.h" /FD /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
# ADD BASE RSC /l 0x809 /d "_DEBUG"
# ADD RSC /l 0x809 /i "../../../include" /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib winmm.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib winmm.lib wxmsw250d.lib canvasd.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd.lib" /nodefaultlib:"libcid.lib" /out:"DebugDLL/simple.exe" /pdbtype:sept /libpath:"../../../../lib"
!ELSEIF "$(CFG)" == "SimpleVC - Win32 Release DLL"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "ReleaseDLL"
# PROP BASE Intermediate_Dir "ReleaseDLL"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "ReleaseDLL"
# PROP Intermediate_Dir "ReleaseDLL"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O1 /Ob2 /I "../../../../include" /I "../../../../contrib/include" /I "../../../../lib/mswdll" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /D WXUSINGDLL=1 /FD /c
# SUBTRACT CPP /YX
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
# ADD BASE RSC /l 0x809 /d "NDEBUG"
# ADD RSC /l 0x809 /i "../../../include" /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib winmm.lib /nologo /subsystem:windows /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib winmm.lib wxmsw250.lib canvas.lib /nologo /subsystem:windows /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libci.lib" /out:"ReleaseDLL/simple.exe" /libpath:"../../../../lib"
!ENDIF
# Begin Target
# Name "SimpleVC - Win32 Release"
# Name "SimpleVC - Win32 Debug"
# Name "SimpleVC - Win32 Debug DLL"
# Name "SimpleVC - Win32 Release DLL"
# Begin Source File
SOURCE=.\simple.cpp
!IF "$(CFG)" == "SimpleVC - Win32 Release"
!ELSEIF "$(CFG)" == "SimpleVC - Win32 Debug"
# SUBTRACT CPP /YX /Yc /Yu
!ELSEIF "$(CFG)" == "SimpleVC - Win32 Debug DLL"
# SUBTRACT CPP /YX /Yc /Yu
!ELSEIF "$(CFG)" == "SimpleVC - Win32 Release DLL"
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\simple.rc
# ADD BASE RSC /l 0x809
# ADD RSC /l 0x809 /i "../../../../include" /i "..\..\include"
# SUBTRACT RSC /i "../../../include"
# End Source File
# End Target
# End Project

View File

@@ -1,29 +0,0 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "SimpleVC"=.\SimpleVC.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################

View File

@@ -1,18 +0,0 @@
#
# File: makefile.b32
# Author: Julian Smart
# Created: 1999
# Updated:
# Copyright:
#
# Makefile : Builds sample for 32-bit BC++
WXDIR = $(WXWIN)
TARGET=simple
EXTRALIBS=$(WXDIR)\lib\canvas.lib
OBJECTS = $(TARGET).obj
!include $(WXDIR)\src\makeprog.b32

View File

@@ -1,14 +0,0 @@
# File: makefile.g95 for Plot demo
# Author: Julian Smart
# Created: 2001-06-12
# Updated:
WXDIR = ../../../..
TARGET = simple
OBJECTS = $(TARGET).o
EXTRAINC = -I$(WXDIR)/contrib/include
EXTRALIBS = -lcanvas
include $(WXDIR)/src/makeprog.g95

View File

@@ -1,14 +0,0 @@
# File: makefile.vc for Plot sample
# Author: Julian Smart
# Created: 2001-06-12
# Updated:
WXDIR = $(WXWIN)
PROGRAM = simple
OBJECTS = $(PROGRAM).obj
EXTRALIBS = $(WXDIR)\lib\canvas$(LIBEXT).lib
EXTRAINC = -I$(WXDIR)\contrib\include
!include $(WXDIR)\src\makeprog.vc

Binary file not shown.

Before

Width:  |  Height:  |  Size: 766 B

View File

@@ -1,44 +0,0 @@
/* XPM */
static char *mondrian_xpm[] = {
/* columns rows colors chars-per-pixel */
"32 32 6 1",
" c Black",
". c Blue",
"X c #00bf00",
"o c Red",
"O c Yellow",
"+ c Gray100",
/* pixels */
" ",
" oooooo +++++++++++++++++++++++ ",
" oooooo +++++++++++++++++++++++ ",
" oooooo +++++++++++++++++++++++ ",
" oooooo +++++++++++++++++++++++ ",
" oooooo +++++++++++++++++++++++ ",
" oooooo +++++++++++++++++++++++ ",
" oooooo +++++++++++++++++++++++ ",
" ",
" ++++++ ++++++++++++++++++ .... ",
" ++++++ ++++++++++++++++++ .... ",
" ++++++ ++++++++++++++++++ .... ",
" ++++++ ++++++++++++++++++ .... ",
" ++++++ ++++++++++++++++++ .... ",
" ++++++ ++++++++++++++++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++ ",
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
" "
};

View File

@@ -1,172 +0,0 @@
/////////////////////////////////////////////////////////////////////////////
// Name: simple.cpp
// Author: XX
// Created: XX/XX/XX
// Copyright:
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#pragma implementation "simple.cpp"
#endif
// For compilers that support precompilation
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
// Include private headers
#include "simple.h"
// Include icon header
#if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) || defined(__WXMAC__)
#include "mondrian.xpm"
#endif
// Include image
#include "smile.xpm"
// WDR: class implementations
//------------------------------------------------------------------------------
// MyFrame
//------------------------------------------------------------------------------
// WDR: event table for MyFrame
BEGIN_EVENT_TABLE(MyFrame,wxFrame)
EVT_MENU(ID_QUIT, MyFrame::OnQuit)
EVT_CLOSE(MyFrame::OnCloseWindow)
EVT_TIMER(-1, MyFrame::OnTimer)
END_EVENT_TABLE()
MyFrame::MyFrame( wxWindow *parent, wxWindowID id, const wxString &title,
const wxPoint &position, const wxSize& size, long style ) :
wxFrame( parent, id, title, position, size, style )
{
CreateMyMenuBar();
CreateStatusBar(1);
SetStatusText( "Welcome to wxCanvas sample!" );
SetIcon(wxICON(mondrian));
// Create wxCanvasAdmin and wxCanvas.
m_admin = new wxCanvasAdmin;
wxCanvas *canvas = new wxCanvas( m_admin, this, -1 );
canvas->SetScrollbars( 10, 10, 40, 40 );
// The wxCanvasAdmin need to know about all Admin wxCanvas objects.
m_admin->Append( canvas );
// One wxCanvas is the active one (current rendering and current
// world coordinates).
m_admin->SetActive( canvas );
// One object group is the root in every canvas.
wxCanvasObjectGroup *root = new wxCanvasObjectGroup(0,0);
root->DeleteContents( TRUE );
// Bunch of rects and images.
wxBitmap bitmap( smile_xpm );
wxImage image( bitmap.ConvertToImage() );
m_smile1 = new wxCanvasImage( image, 0,70,32,32 );
root->Append( m_smile1 );
wxCanvasCircle *circ = new wxCanvasCircle( 170,70,50 );
circ->SetBrush( *wxBLUE_BRUSH );
root->Append( circ );
int i;
for (i = 10; i < 300; i+=10)
{
wxCanvasRect *r = new wxCanvasRect( i,50,3,140 );
r->SetBrush( *wxRED_BRUSH );
root->Append( r );
}
m_smile2 = new wxCanvasImage( image, 0,110,32,32 );
root->Append( m_smile2 );
for (i = 15; i < 300; i+=10)
{
wxCanvasRect *r = new wxCanvasRect( i,50,3,140 );
r->SetBrush( *wxRED_BRUSH );
root->Append( r );
}
// This will call all object and children recursivly so
// all know what their wxCanvasAdmin is. Call at the end.
root->SetAdmin( m_admin );
// One object group is the root object.
canvas->SetRoot( root );
m_timer = new wxTimer( this );
m_timer->Start( 80, FALSE );
}
MyFrame::~MyFrame()
{
delete m_timer;
}
void MyFrame::CreateMyMenuBar()
{
wxMenu *file_menu = new wxMenu;
file_menu->Append( ID_QUIT, "Quit...", "Quit program" );
wxMenuBar *menu_bar = new wxMenuBar();
menu_bar->Append( file_menu, "File" );
SetMenuBar( menu_bar );
}
// WDR: handler implementations for MyFrame
void MyFrame::OnQuit( wxCommandEvent &event )
{
Close( TRUE );
}
void MyFrame::OnCloseWindow( wxCloseEvent &event )
{
// if ! saved changes -> return
Destroy();
}
void MyFrame::OnTimer( wxTimerEvent &event )
{
m_smile1->MoveRelative( 1, 0);
m_smile2->MoveRelative( 1, 0);
wxWakeUpIdle();
}
//------------------------------------------------------------------------------
// MyApp
//------------------------------------------------------------------------------
IMPLEMENT_APP(MyApp)
MyApp::MyApp()
{
}
bool MyApp::OnInit()
{
MyFrame *frame = new MyFrame( NULL, -1, "SuperApp", wxPoint(20,20), wxSize(500,340) );
frame->Show( TRUE );
return TRUE;
}
int MyApp::OnExit()
{
return 0;
}

View File

@@ -1,80 +0,0 @@
/////////////////////////////////////////////////////////////////////////////
// Name: simple.h
// Author: XX
// Created: XX/XX/XX
// Copyright:
/////////////////////////////////////////////////////////////////////////////
#ifndef __simple_H__
#define __simple_H__
#if defined(__GNUG__) && !defined(__APPLE__)
#pragma interface "simple.cpp"
#endif
// Include wxWindows' headers
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif
#include "wx/canvas/canvas.h"
#include "wx/timer.h"
//----------------------------------------------------------------------------
// constants
//----------------------------------------------------------------------------
#define ID_QUIT 101
// WDR: class declarations
//----------------------------------------------------------------------------
// MyFrame
//----------------------------------------------------------------------------
class MyFrame: public wxFrame
{
public:
// constructors and destructors
MyFrame( wxWindow *parent, wxWindowID id, const wxString &title,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_FRAME_STYLE );
~MyFrame();
private:
// WDR: method declarations for MyFrame
void CreateMyMenuBar();
private:
// WDR: member variable declarations for MyFrame
wxCanvasImage *m_smile1;
wxCanvasImage *m_smile2;
wxCanvasAdmin *m_admin;
wxTimer *m_timer;
private:
// WDR: handler declarations for MyFrame
void OnQuit( wxCommandEvent &event );
void OnCloseWindow( wxCloseEvent &event );
void OnTimer( wxTimerEvent &event );
private:
DECLARE_EVENT_TABLE()
};
//----------------------------------------------------------------------------
// MyApp
//----------------------------------------------------------------------------
class MyApp: public wxApp
{
public:
MyApp();
virtual bool OnInit();
virtual int OnExit();
};
#endif

View File

@@ -1,3 +0,0 @@
#include "wx/msw/wx.rc"

View File

@@ -1,42 +0,0 @@
/* XPM */
static char * smile_xpm[] = {
/* width height ncolors chars_per_pixel */
"32 32 4 1",
/* colors */
" s None c None",
". c #000000",
"+ c #ff0000",
"@ c #ffff00",
/* pixels */
" ........ ",
" ...@@@@@@@@... ",
" ..@@@@@@@@@@@@@@.. ",
" ..@@@@@@@@@@@@@@@@.. ",
" .@@@@@@@@@@@@@@@@@@@@. ",
" .@@@@@@@@@@@@@@@@@@@@@@. ",
" .@@@@@@@@@@@@@@@@@@@@@@@@. ",
" ..@@@@@@@@@@@@@@@@@@@@@@@@.. ",
" .@@@@@@@@ @@@@@@ @@@@@@@@. ",
" .@@@@@@@@ @@@@ @@@@@@@@. ",
" .@@@@@@@@ @@@@ @@@@@@@@. ",
" .@@@@@@@@ @@@@ @@@@@@@@. ",
".@@@@@@@@@ @@@@ @@@@@@@@@.",
".@@@@@@@@@ @@@@ @@@@@@@@@.",
".@@@@@@@@@@ @@@@@@ @@@@@@@@@@.",
".@@@@@@@.@@@@@@@@@@@@@@.@@@@@@@.",
".@@@@@@@.@@@@@@@@@@@@@@.@@@@@@@.",
".@@@@@@.@@@@@@@@@@@@@@@@.@@@@@@.",
".@@@....@@@@@@@@@@@@@@@@....@@@.",
".@@@@@@@.@@@@@@@@@@@@@@.@@@@@@@.",
" .@@@@@@@.@@@@@@@@@@@@.@@@@@@@. ",
" .@@@@@@@..@@@@@@@@@@..@@@@@@@. ",
" .@@@@@@@@...@@@@@@...@@@@@@@@. ",
" .@@@@@@@@.+......+.@@@@@@@@. ",
" ..@@@@@@@@.++++++.@@@@@@@@.. ",
" .@@@@@@@@@.++++.@@@@@@@@@. ",
" .@@@@@@@@@....@@@@@@@@@. ",
" .@@@@@@@@@@@@@@@@@@@@. ",
" ..@@@@@@@@@@@@@@@@.. ",
" ..@@@@@@@@@@@@@@.. ",
" ...@@@@@@@@... ",
" ........ "};

View File

@@ -1,25 +0,0 @@
#
# File: Makefile.in
# Author: Julian Smart
# Created: 2000
# Updated:
# Copyright: (c) 2000 Julian Smart
#
# "%W% %G%"
#
# Makefile for the multicell example (UNIX).
top_srcdir = @top_srcdir@/..
top_builddir = ../../../..
program_dir = contrib/samples/canvas/test
PROGRAM=test
OBJECTS=test.o
DATAFILES = pat4.bmp pat36.bmp
APPEXTRALIBS=$(top_builddir)/lib/lib@WX_LIBRARY_BASENAME@_canvas-@WX_RELEASE@.@WX_TARGET_LIBRARY_TYPE@
APPEXTRADEFS=-I$(top_srcdir)/contrib/include
include $(top_builddir)/src/makeprog.env

View File

@@ -1,175 +0,0 @@
# Microsoft Developer Studio Project File - Name="TestVC" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Application" 0x0101
CFG=TestVC - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "TestVC.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "TestVC.mak" CFG="TestVC - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "TestVC - Win32 Release" (based on "Win32 (x86) Application")
!MESSAGE "TestVC - Win32 Debug" (based on "Win32 (x86) Application")
!MESSAGE "TestVC - Win32 Debug DLL" (based on "Win32 (x86) Application")
!MESSAGE "TestVC - Win32 Release DLL" (based on "Win32 (x86) Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "TestVC - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O1 /Ob2 /I "../../../../include" /I "../../../../contrib/include" /I "../../../../lib/msw" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /FD /c
# SUBTRACT CPP /YX
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
# ADD BASE RSC /l 0x809 /d "NDEBUG"
# ADD RSC /l 0x809 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib winmm.lib /nologo /subsystem:windows /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib winmm.lib wxmsw.lib png.lib zlib.lib jpeg.lib tiff.lib regex.lib canvas.lib /nologo /subsystem:windows /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libci.lib" /nodefaultlib:"msvcrtd.lib" /out:"Release/test.exe" /libpath:"../../../../lib"
!ELSEIF "$(CFG)" == "TestVC - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../../include" /I "../../../../contrib/include" /I "../../../../lib/mswd" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D DEBUG=1 /D "__WXDEBUG__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /FD /c
# SUBTRACT CPP /YX /Yc /Yu
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
# ADD BASE RSC /l 0x809 /d "_DEBUG"
# ADD RSC /l 0x809 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib winmm.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib winmm.lib wxmswd.lib pngd.lib zlibd.lib jpegd.lib tiffd.lib regexd.lib canvasd.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd.lib" /nodefaultlib:"libcid.lib" /nodefaultlib:"msvcrt.lib" /out:"Debug/test.exe" /pdbtype:sept /libpath:"../../../../lib"
!ELSEIF "$(CFG)" == "TestVC - Win32 Debug DLL"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "DebugDLL"
# PROP BASE Intermediate_Dir "DebugDLL"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "DebugDLL"
# PROP Intermediate_Dir "DebugDLL"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../../include" /I "../../../../contrib/include" /I "../../../../lib/mswdlld" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D DEBUG=1 /D "__WXDEBUG__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /D WXUSINGDLL=1 /Yu"wx/wxprec.h" /FD /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
# ADD BASE RSC /l 0x809 /d "_DEBUG"
# ADD RSC /l 0x809 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib winmm.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib winmm.lib wxmsw250d.lib canvasd.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd.lib" /nodefaultlib:"libcid.lib" /out:"DebugDLL/test.exe" /pdbtype:sept /libpath:"../../../../lib"
!ELSEIF "$(CFG)" == "TestVC - Win32 Release DLL"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "ReleaseDLL"
# PROP BASE Intermediate_Dir "ReleaseDLL"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "ReleaseDLL"
# PROP Intermediate_Dir "ReleaseDLL"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O1 /Ob2 /I "../../../../include" /I "../../../../contrib/include" /I "../../../../lib/mswdll" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /D WXUSINGDLL=1 /FD /c
# SUBTRACT CPP /YX
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
# ADD BASE RSC /l 0x809 /d "NDEBUG"
# ADD RSC /l 0x809 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib winmm.lib /nologo /subsystem:windows /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib winmm.lib wxmsw250.lib canvas.lib /nologo /subsystem:windows /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libci.lib" /out:"ReleaseDLL/test.exe" /libpath:"../../../../lib"
!ENDIF
# Begin Target
# Name "TestVC - Win32 Release"
# Name "TestVC - Win32 Debug"
# Name "TestVC - Win32 Debug DLL"
# Name "TestVC - Win32 Release DLL"
# Begin Source File
SOURCE=.\test.cpp
!IF "$(CFG)" == "TestVC - Win32 Release"
!ELSEIF "$(CFG)" == "TestVC - Win32 Debug"
# SUBTRACT CPP /YX /Yc /Yu
!ELSEIF "$(CFG)" == "TestVC - Win32 Debug DLL"
# SUBTRACT CPP /YX /Yc /Yu
!ELSEIF "$(CFG)" == "TestVC - Win32 Release DLL"
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\test.rc
# ADD BASE RSC /l 0x809
# ADD RSC /l 0x809 /i "../../../../include"
# End Source File
# End Target
# End Project

View File

@@ -1,29 +0,0 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "TestVC"=.\TestVC.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################

View File

@@ -1,18 +0,0 @@
#
# File: makefile.b32
# Author: Julian Smart
# Created: 1999
# Updated:
# Copyright:
#
# Makefile : Builds sample for 32-bit BC++
WXDIR = $(WXWIN)
TARGET=test
EXTRALIBS=$(WXDIR)\lib\canvas.lib
OBJECTS = $(TARGET).obj
!include $(WXDIR)\src\makeprog.b32

View File

@@ -1,14 +0,0 @@
# File: makefile.g95 for Plot demo
# Author: Julian Smart
# Created: 2001-06-12
# Updated:
WXDIR = ../../../..
TARGET = test
OBJECTS = $(TARGET).o
EXTRAINC = -I$(WXDIR)/contrib/include
EXTRALIBS = -lcanvas
include $(WXDIR)/src/makeprog.g95

View File

@@ -1,14 +0,0 @@
# File: makefile.vc for Plot sample
# Author: Julian Smart
# Created: 2001-06-12
# Updated:
WXDIR = $(WXWIN)
PROGRAM = test
OBJECTS = $(PROGRAM).obj
EXTRALIBS = $(WXDIR)\lib\canvas$(LIBEXT).lib
EXTRAINC = -I$(WXDIR)\contrib\include
!include $(WXDIR)\src\makeprog.vc

Binary file not shown.

Before

Width:  |  Height:  |  Size: 190 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 630 B

View File

@@ -1,42 +0,0 @@
/* XPM */
static char * smile_xpm[] = {
/* width height ncolors chars_per_pixel */
"32 32 4 1",
/* colors */
" s None c None",
". c #000000",
"+ c #ff0000",
"@ c #ffff00",
/* pixels */
" ........ ",
" ...@@@@@@@@... ",
" ..@@@@@@@@@@@@@@.. ",
" ..@@@@@@@@@@@@@@@@.. ",
" .@@@@@@@@@@@@@@@@@@@@. ",
" .@@@@@@@@@@@@@@@@@@@@@@. ",
" .@@@@@@@@@@@@@@@@@@@@@@@@. ",
" ..@@@@@@@@@@@@@@@@@@@@@@@@.. ",
" .@@@@@@@@ @@@@@@ @@@@@@@@. ",
" .@@@@@@@@ @@@@ @@@@@@@@. ",
" .@@@@@@@@ @@@@ @@@@@@@@. ",
" .@@@@@@@@ @@@@ @@@@@@@@. ",
".@@@@@@@@@ @@@@ @@@@@@@@@.",
".@@@@@@@@@ @@@@ @@@@@@@@@.",
".@@@@@@@@@@ @@@@@@ @@@@@@@@@@.",
".@@@@@@@.@@@@@@@@@@@@@@.@@@@@@@.",
".@@@@@@@.@@@@@@@@@@@@@@.@@@@@@@.",
".@@@@@@.@@@@@@@@@@@@@@@@.@@@@@@.",
".@@@....@@@@@@@@@@@@@@@@....@@@.",
".@@@@@@@.@@@@@@@@@@@@@@.@@@@@@@.",
" .@@@@@@@.@@@@@@@@@@@@.@@@@@@@. ",
" .@@@@@@@..@@@@@@@@@@..@@@@@@@. ",
" .@@@@@@@@...@@@@@@...@@@@@@@@. ",
" .@@@@@@@@.+......+.@@@@@@@@. ",
" ..@@@@@@@@.++++++.@@@@@@@@.. ",
" .@@@@@@@@@.++++.@@@@@@@@@. ",
" .@@@@@@@@@....@@@@@@@@@. ",
" .@@@@@@@@@@@@@@@@@@@@. ",
" ..@@@@@@@@@@@@@@@@.. ",
" ..@@@@@@@@@@@@@@.. ",
" ...@@@@@@@@... ",
" ........ "};

View File

@@ -1,747 +0,0 @@
/*
* Program: canvas
*
* Author: Robert Roebling
*
* Copyright: (C) 1998, Robert Roebling
*
*/
#ifdef __GNUG__
#pragma implementation "test.cpp"
#endif
// For compilers that support precompilation
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#include "test.h"
#include "smile.xpm"
//-----------------------------------------------------
// class MywxCanvasObjectRef
//-----------------------------------------------------
BEGIN_EVENT_TABLE(MywxCanvasObjectRef,wxCanvasObjectRef)
EVT_MOUSE_EVENTS( MywxCanvasObjectRef::OnMouseEvent )
END_EVENT_TABLE()
IMPLEMENT_DYNAMIC_CLASS(MywxCanvasObjectRef, wxCanvasObjectRef)
MywxCanvasObjectRef::MywxCanvasObjectRef(double x, double y,wxCanvasObjectGroup* group)
:wxCanvasObjectRef(x,y,group)
{
}
MywxCanvasObjectRef::MywxCanvasObjectRef()
:wxCanvasObjectRef(0,0,NULL)
{
}
MywxCanvasObjectRef::~MywxCanvasObjectRef()
{
}
void MywxCanvasObjectRef::OnMouseEvent(wxMouseEvent &event)
{
if (!m_dragable)
{
event.Skip();
return;
}
static double xprev;
static double yprev;
//new position of the mouse relative within the object
double x = m_admin->DeviceToLogicalX(event.GetX());
double y = m_admin->DeviceToLogicalY(event.GetY());
if (event.LeftDown())
{
CaptureMouse();
if (m_dragmode != wxDRAG_REDRAW)
DragStart();
}
else if (event.LeftUp())
{
ReleaseMouse();
if (m_dragmode != wxDRAG_REDRAW)
DragEnd();
}
else if (IsCapturedMouse())
{
if (m_dragmode != wxDRAG_REDRAW)
DragRelative(x-xprev,y-yprev);
else
MoveRelative(x-xprev,y-yprev);
m_admin->UpdateNow();
}
xprev=x;
yprev=y;
//well do something extra
if (IsCapturedMouse())
m_admin->GetActive()->SetCursor(*wxHOURGLASS_CURSOR);
else
m_admin->GetActive()->SetCursor(*wxSTANDARD_CURSOR);
}
//---------------------------------------------------
// class MyEventHandler
//---------------------------------------------------
BEGIN_EVENT_TABLE(MyEventHandler,wxEvtHandler)
EVT_MOUSE_EVENTS( MyEventHandler::OnMouseEvent )
END_EVENT_TABLE()
MyEventHandler::MyEventHandler()
{
}
void MyEventHandler::OnMouseEvent(wxMouseEvent &event)
{
wxCanvasObject* obj=(wxCanvasObject*)event.GetEventObject();
if (!obj->GetDraggable())
return;
static double xprev;
static double yprev;
wxCanvasAdmin* adm=obj->GetAdmin();
//new position of the mouse relative within the object
double x = adm->DeviceToLogicalX(event.GetX());
double y = adm->DeviceToLogicalY(event.GetY());
if (event.LeftDown())
{
obj->CaptureMouse();
if (obj->GetDragMode() != wxDRAG_REDRAW)
obj->DragStart();
}
else if (event.LeftUp())
{
obj->ReleaseMouse();
if (obj->GetDragMode() != wxDRAG_REDRAW)
obj->DragEnd();
}
else if (obj->IsCapturedMouse())
{
if (obj->GetDragMode() != wxDRAG_REDRAW)
obj->DragRelative(x-xprev,y-yprev);
else
obj->MoveRelative(x-xprev,y-yprev);
adm->UpdateNow();
}
xprev=x;
yprev=y;
//well do something extra
if (obj->IsCapturedMouse())
obj->GetAdmin()->GetActive()->SetCursor(*wxHOURGLASS_CURSOR);
else
obj->GetAdmin()->GetActive()->SetCursor(*wxSTANDARD_CURSOR);
}
//------------------------------------------------
// class MyFrame
//------------------------------------------------
class MyApp;
class MyCanvas;
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(SPLIT_VERTICAL, MyFrame::SplitVertical)
EVT_MENU(SPLIT_HORIZONTAL, MyFrame::SplitHorizontal)
EVT_MENU(SPLIT_UNSPLIT, MyFrame::Unsplit)
EVT_MENU(SPLIT_QUIT, MyFrame::Quit)
EVT_MENU(SPLIT_SETMINSIZE, MyFrame::SetMinSize)
EVT_UPDATE_UI(SPLIT_VERTICAL, MyFrame::UpdateUIVertical)
EVT_UPDATE_UI(SPLIT_HORIZONTAL, MyFrame::UpdateUIHorizontal)
EVT_UPDATE_UI(SPLIT_UNSPLIT, MyFrame::UpdateUIUnsplit)
EVT_MENU (ID_ABOUT, MyFrame::OnAbout)
EVT_TIMER (-1, MyFrame::OnTimer)
END_EVENT_TABLE()
// My frame constructor
MyFrame::MyFrame(wxFrame* frame, const wxString& title, const wxPoint& pos, const wxSize& size):
wxFrame(frame, SPLITTER_FRAME, title, pos, size)
{
m_eventhandler =new MyEventHandler();
wxPathList pathList;
pathList.Add(".");
pathList.Add("..");
wxString path = pathList.FindValidPath("pat36.bmp");
gs_bmp36_mono.LoadFile(path, wxBITMAP_TYPE_BMP);
wxMask* mask36 = new wxMask(gs_bmp36_mono, *wxBLACK);
/* associate a monochrome mask with this bitmap */
gs_bmp36_mono.SetMask(mask36);
CreateStatusBar(2);
// Make a menubar
fileMenu = new wxMenu;
fileMenu->Append(SPLIT_VERTICAL, "Split &Vertically\tCtrl-V", "Split vertically");
fileMenu->Append(SPLIT_HORIZONTAL, "Split &Horizontally\tCtrl-H", "Split horizontally");
fileMenu->Append(SPLIT_UNSPLIT, "&Unsplit", "Unsplit");
// fileMenu->Append(SPLIT_UNSPLIT, "&Unsplit\tCtrl-U", "Unsplit");
fileMenu->AppendSeparator();
fileMenu->Append(SPLIT_SETMINSIZE, "Set &min size", "Set minimum pane size");
fileMenu->AppendSeparator();
fileMenu->Append(SPLIT_QUIT, "E&xit\tAlt-X", "Exit");
fileMenu->Append( ID_ABOUT, "&About...");
menuBar = new wxMenuBar;
menuBar->Append(fileMenu, "&File");
SetMenuBar(menuBar);
m_splitter = new MySplitterWindow(this, SPLITTER_WINDOW);
m_canvas1 = new MyCanvas(&m_canvasadmin, m_splitter, CANVAS1, wxPoint(0, 0), wxSize(400, 400),wxHSCROLL|wxVSCROLL);
m_canvas1->SetYaxis(FALSE);
m_canvas1->SetMappingScroll(-300,-300,500,500,false);
m_canvas1->SetScroll(-400,-400,600,600);
m_canvas1->SetColour(wxColour(255, 255, 255) );
m_canvas1->SetCursor(wxCursor(wxCURSOR_MAGNIFIER));
m_canvas2 = new MyCanvas(&m_canvasadmin, m_splitter, CANVAS2, wxPoint(0, 0), wxSize(400, 400),wxHSCROLL|wxVSCROLL);
m_canvas2->SetMappingScroll(-100,-100,500,500,false);
m_canvas2->SetScroll(-400,-400,600,600);
m_canvas2->SetColour( wxColour(187, 215, 243) );
m_canvas2->Show(FALSE);
m_canvasadmin.Append(m_canvas1);
m_canvasadmin.Append(m_canvas2);
m_canvasadmin.SetActive(m_canvas1);
m_splitter->Initialize(m_canvas1);
SetStatusText("Min pane size = 0", 1);
int widths[] = { -1, 100 };
SetStatusWidths( 2, widths );
//root group always at 0,0
m_datatree = new wxCanvasObjectGroup(0,0);
m_datatree->DeleteContents( TRUE );
m_datatree->SetAdmin(&m_canvasadmin);
wxBitmap bitmap( smile_xpm );
wxImage image( bitmap.ConvertToImage() );
// m_sm1 = new wxCanvasImage( image, 0,70,32,32 );
// m_datatree->Append( m_sm1 );
int i;
for (i = 10; i < 300; i+=10)
{
wxCanvasRect *r = new wxCanvasRect( i,50,3,140 );
r->SetBrush( *wxRED_BRUSH );
m_datatree->Append( r );
}
// m_sm2 = new wxCanvasImage( image, 0,140,24,24 );
// m_datatree->Append( m_sm2 );
for (i = 15; i < 300; i+=10)
{
wxCanvasRect* rec= new wxCanvasRect( i,50,3,140 );
rec->SetBrush(wxBrush(wxColour(0,10+i,2+i),wxSOLID));
rec->SetDraggable(FALSE);
m_datatree->Append( rec );
}
/*
wxButton *button = new wxButton( m_canvas1, -1, "Hello", wxPoint(80,50) );
m_datatree->Append( new wxCanvasControl( button ) );
m_datatree->Append( new wxCanvasText( "Hello", 180, 50,
wxGetApp().GetFontPath() + "/times.ttf", 20 ) );
m_datatree->Append( new wxCanvasText( "How are you?", 180, 10,
wxGetApp().GetFontPath() + "/times.ttf", 8 ) );
m_datatree->Append( new wxCanvasText( "How are you?", 180, 20,
wxGetApp().GetFontPath() + "/times.ttf", 10 ) );
m_datatree->Append( new wxCanvasText( "How are you?", 180, 30,
wxGetApp().GetFontPath() + "/times.ttf", 12 ) );
m_sm3 = new wxCanvasImage( image, 0,210,32,32 );
m_datatree->Append( m_sm3 );
*/
for (i = 10; i < 300; i+=10)
m_datatree->Append( new wxCanvasLine( 10,-15,i,300 ) );
/*
m_sm4 = new wxCanvasImage( image, 0,270,64,32 );
m_sm4->SetDragMode(wxDRAG_RECTANGLE);
m_datatree->Append( m_sm4 );
*/
// m_canvas->Append( new wxCanvasLine( 10,-1500e6,50,300000e6, 0,255,0 ) );
// m_canvas->Append( new wxCanvasLine( 10,-150000,50,300000, 0,255,0 ) );
//make a group of wxCanvasObjects
wxCanvasObjectGroup* group1 = new wxCanvasObjectGroup(0,0);
wxCanvasLine* line = new wxCanvasLine( 10,-35,50,190);
line->SetPen(wxPen(wxColour(255,161,5),5,wxDOT_DASH ));
group1->Prepend( line );
group1->Prepend( new wxCanvasImage( image, 4,38,32,32 ) );
wxCanvasRect* rec3 = new wxCanvasRect(20,-20,50,170);
rec3->SetBrush(wxBrush(wxColour(0,120,240),wxSOLID));
rec3->SetPen(wxPen(wxColour(252,54,252 ),3,wxSOLID));
group1->Prepend( rec3 );
wxCanvasRect* rec2 = new wxCanvasRect(10,20,104,52);
rec2->SetBrush(wxBrush(wxColour(0,240,240),wxSOLID));
rec2->SetPen(wxPen(wxColour(210,40,50 ),1,wxSOLID));
group1->Prepend( rec2 );
wxPoint2DDouble* todraw2 = new wxPoint2DDouble[3];
todraw2[0].m_x=230;
todraw2[0].m_y=220;
todraw2[1].m_x=300;
todraw2[1].m_y=200;
todraw2[2].m_x=300;
todraw2[2].m_y=300;
wxCanvasPolyline* poly2= new wxCanvasPolyline(3,todraw2);
poly2->SetPen(wxPen(wxColour(200,0,64 ),4,wxDOT));
m_datatree->Prepend( poly2 );
//make another group of wxCanvasObjects
wxCanvasObjectGroup* group2 = new wxCanvasObjectGroup(0,0);
group2->Prepend( new wxCanvasImage( image, 60,38,52,32 ) );
wxCanvasRect* rr = new wxCanvasRect(10,20,104,52,30);
rr->SetBrush(wxBrush(wxColour(10,17,255),wxHORIZONTAL_HATCH ));
rr->SetPen(wxPen(wxColour(9,115,64 ),4,wxSOLID));
group2->Prepend( rr );
//this a reference to group2 put into group1
MywxCanvasObjectRef* m_subref = new MywxCanvasObjectRef(60,50, group2);
m_subref->SetRotation(35);
m_subref->SetRotation(0);
group1->Prepend( m_subref );
wxPoint2DDouble* todraw = new wxPoint2DDouble[5];
todraw[0].m_x=-30;
todraw[0].m_y=-20;
todraw[1].m_x=100;
todraw[1].m_y=0;
todraw[2].m_x=100;
todraw[2].m_y=100;
todraw[3].m_x=50;
todraw[3].m_y=150;
todraw[4].m_x=0;
todraw[4].m_y=100;
wxCanvasPolygon* poly= new wxCanvasPolygon(5,todraw);
poly->SetBrush(wxBrush(wxColour(100,17,255),wxCROSSDIAG_HATCH ));
poly->SetPen(wxPen(wxColour(9,115,64 ),4,wxSOLID));
group1->Prepend( poly );
wxPoint2DDouble* todraw4 = new wxPoint2DDouble[4];
todraw4[0].m_x=-50;
todraw4[0].m_y=-30;
todraw4[1].m_x=-50;
todraw4[1].m_y=70;
todraw4[2].m_x=150;
todraw4[2].m_y=70;
todraw4[3].m_x=150;
todraw4[3].m_y=-30;
wxCanvasPolygon* poly5= new wxCanvasPolygon(4,todraw4);
poly5->SetBrush(wxBrush(wxColour(100,17,255),wxCROSSDIAG_HATCH ));
// poly5->SetBrush(wxBrush(wxColour(100,17,255),wxSOLID ));
// poly5->SetPen(wxPen(wxColour(9,115,64 ),1,wxSOLID));
poly5->SetPen(wxPen(wxColour(9,115,64 ),4,wxSOLID));
wxCanvasObjectGroup* group3 = new wxCanvasObjectGroup(0,0);
group3->Prepend( poly5 );
wxList* pointlist = new wxList();
wxPoint2DDouble* point = new wxPoint2DDouble(0,0);
pointlist->Append((wxObject*)point);
point = new wxPoint2DDouble(-300,100);
pointlist->Append((wxObject*)point);
point = new wxPoint2DDouble(-100,100);
pointlist->Append((wxObject*)point);
point = new wxPoint2DDouble(-100,0);
pointlist->Append((wxObject*)point);
point = new wxPoint2DDouble(-200,50);
pointlist->Append((wxObject*)point);
wxCanvasPolygonL* poly15= new wxCanvasPolygonL(pointlist,TRUE);
poly15->SetColour1(wxColour(250,78,216 ));
poly15->SetColour2(*wxRED);
poly15->SetBrush(wxBrush(gs_bmp36_mono));
poly15->SetTransParent(TRUE);
poly15->SetPen(wxPen(*wxRED,4,wxSOLID));
group1->Prepend( poly15 );
wxList* pointlist2 = new wxList();
wxPoint2DDouble* point2 = new wxPoint2DDouble(-400,100);
pointlist2->Append((wxObject*)point2);
point2 = new wxPoint2DDouble(-400,200);
pointlist2->Append((wxObject*)point2);
point2 = new wxPoint2DDouble(0,200);
pointlist2->Append((wxObject*)point2);
point2 = new wxPoint2DDouble(0,100);
pointlist2->Append((wxObject*)point2);
point2 = new wxPoint2DDouble(-200,175);
pointlist2->Append((wxObject*)point2);
wxCanvasPolylineL* poly16= new wxCanvasPolylineL(pointlist2,TRUE);
poly16->SetPen(wxPen(wxColour(9,115,64 ),4,wxSOLID));
m_datatree->Prepend( poly16 );
wxPoint2DDouble* todraw6 = new wxPoint2DDouble[5];
todraw6[0].m_x=50;
todraw6[0].m_y=305;
todraw6[1].m_x=-200;
todraw6[1].m_y=200;
todraw6[2].m_x=0;
todraw6[2].m_y=500;
todraw6[3].m_x=300;
todraw6[3].m_y=200;
todraw6[4].m_x=-300;
todraw6[4].m_y=-300;
wxCanvasPolygon* poly17= new wxCanvasPolygon(5,todraw6,TRUE);
poly17->SetBrush(wxBrush(wxColour(100,17,255),wxSOLID));
poly17->SetPen(wxPen(wxColour(10,17,25),16,wxLONG_DASH ));
poly17->SetColour1(*wxGREEN);
poly17->SetColour2(*wxRED);
poly17->SetGradient(TRUE,wxPen(wxColour(0,0,0),0,wxSOLID),0);
wxCanvasObjectRef* m_refc = new wxCanvasObjectRef(0,-200, poly17);
m_refc->SetRotation(90);
m_datatree->Prepend( m_refc );
wxCanvasObjectRef* m_refd = new wxCanvasObjectRef(200,-50, poly17);
m_refd->SetRotation(0);
m_datatree->Append( m_refd );
//now make two references to group1 into root group of the canvas
m_ref = new MywxCanvasObjectRef(350,-200, group1);
m_ref->SetRotation(25);
//TODO if rotation is 0 scaling is weird
// m_ref->SetScale(2,3.2);
m_datatree->Append( m_ref );
group3->Prepend( m_ref );
//this a reference to group2 put into group1
MywxCanvasObjectRef* subref2 = new MywxCanvasObjectRef(20,130, group2);
subref2->SetRotation(15);
group3->Prepend( subref2 );
m_datatree->Prepend( subref2 );
m_ref2 = new MywxCanvasObjectRef(80,450, group1);
m_ref2->SetRotation(-35);
m_ref2->SetDragMode(wxDRAG_RECTANGLE);
m_datatree->Prepend( m_ref2 );
wxCanvasCircle* cir = new wxCanvasCircle( -100, -150, 100 );
cir->SetBrush(wxBrush(wxColour(19,215,6),wxHORIZONTAL_HATCH ));
cir->SetPen(wxPen(wxColour(198,3,105 ),30,wxSOLID));
cir->SetDragMode(wxDRAG_REDRAW);
m_datatree->Prepend( cir );
wxCanvasEllipse* elp = new wxCanvasEllipse( -100, 250, 100,300 );
elp->SetBrush(wxBrush(wxColour(100,17,55),wxVERTICAL_HATCH ));
elp->SetPen(wxPen(wxColour(2,255,6 ),10,wxDOT));
m_datatree->Prepend( elp );
wxCanvasEllipticArc* aelp = new wxCanvasEllipticArc( -230, 250, 100,300, 30,270 );
aelp->SetBrush(wxBrush(wxColour(100,17,155),wxSOLID ));
aelp->SetPen(wxPen(wxColour(1,215,6 ),10,wxSOLID));
m_datatree->Prepend( aelp );
//HOW BAD DO THINGS GET
int kk;
for (kk=0;kk<100;kk++)
{
// MywxCanvasObjectRef* m_refx = new MywxCanvasObjectRef(180,50+kk*30, group1);
// m_refx->SetRotation(-35);
// m_datatree->Prepend( m_refx );
}
/*
m_log = new wxTextCtrl( this, -1, "", wxPoint(0,0), wxSize(100,100), wxTE_MULTILINE );
wxLog *old_log = wxLog::SetActiveTarget( new wxLogTextCtrl( m_log ) );
delete old_log;
wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
topsizer->Add( m_canvas, 1, wxEXPAND );
topsizer->Add( m_log, 0, wxEXPAND );
SetAutoLayout( TRUE );
SetSizer( topsizer );
*/
//fancy background
wxPoint2DDouble* todraw8 = new wxPoint2DDouble[4];
todraw8[0].m_x=-350;
todraw8[0].m_y=-350;
todraw8[1].m_x=-350;
todraw8[1].m_y=550;
todraw8[2].m_x=550;
todraw8[2].m_y=550;
todraw8[3].m_x=550;
todraw8[3].m_y=-350;
wxCanvasPolygon* poly18= new wxCanvasPolygon(4,todraw8);
poly18->SetPen(wxPen(wxColour(10,17,25),16,wxTRANSPARENT ));
poly18->SetColour1(wxColour(0,0,0));
poly18->SetColour2(wxColour(0,255,255));
poly18->SetGradient(TRUE,wxPen(wxColour(0,0,0),0,wxSOLID),0);
wxCanvasObjectRef* m_refb = new wxCanvasObjectRef(200,0, poly18);
m_refb->SetRotation(90);
m_datatree->Prepend( m_refb );
/*
wxCanvasCircle* cir = new wxCanvasCircle( -100, -150, 100 );
cir->SetBrush(wxBrush(wxColour(19,215,6),wxHORIZONTAL_HATCH ));
cir->SetPen(wxPen(wxColour(198,3,105 ),30,wxSOLID));
m_datatree->Prepend( cir );
*/
m_datatree->SetAdmin(&m_canvasadmin);
m_datatree->AppendEventHandler( m_eventhandler );
m_canvas1->SetRoot(m_datatree);
//wxCanvasObjectGroup* group3 = new wxCanvasObjectGroup(0,0);
// group3->Prepend( cir );
group3->SetAdmin(&m_canvasadmin);
m_canvas2->SetRoot(group3);
m_timer = new wxTimer( this );
//m_timer->Start( 100, FALSE );
}
MyFrame::~MyFrame()
{
m_datatree->RemoveLastEventHandler( FALSE );
delete m_eventhandler;
delete m_timer;
}
void MyFrame::Quit(wxCommandEvent& WXUNUSED(event) )
{
Close(TRUE);
}
void MyFrame::SplitHorizontal(wxCommandEvent& WXUNUSED(event) )
{
if ( m_splitter->IsSplit() )
m_splitter->Unsplit();
m_canvas1->Show(TRUE);
m_canvas2->Show(TRUE);
m_splitter->SplitHorizontally( m_canvas1, m_canvas2 );
UpdatePosition();
}
void MyFrame::SplitVertical(wxCommandEvent& WXUNUSED(event) )
{
if ( m_splitter->IsSplit() )
m_splitter->Unsplit();
m_canvas1->Show(TRUE);
m_canvas2->Show(TRUE);
m_splitter->SplitVertically( m_canvas1, m_canvas2 );
UpdatePosition();
}
void MyFrame::Unsplit(wxCommandEvent& WXUNUSED(event) )
{
if ( m_splitter->IsSplit() )
m_splitter->Unsplit();
SetStatusText("No splitter");
}
void MyFrame::SetMinSize(wxCommandEvent& WXUNUSED(event) )
{
wxString str;
str.Printf( _T("%d"), m_splitter->GetMinimumPaneSize());
str = wxGetTextFromUser("Enter minimal size for panes:", "", str, this);
if ( str.IsEmpty() )
return;
int minsize = wxStrtol( str, (wxChar**)NULL, 10 );
m_splitter->SetMinimumPaneSize(minsize);
str.Printf( _T("Min pane size = %d"), minsize);
SetStatusText(str, 1);
}
void MyFrame::UpdateUIHorizontal(wxUpdateUIEvent& event)
{
event.Enable( ( (!m_splitter->IsSplit()) || (m_splitter->GetSplitMode() != wxSPLIT_HORIZONTAL) ) );
}
void MyFrame::UpdateUIVertical(wxUpdateUIEvent& event)
{
event.Enable( ( (!m_splitter->IsSplit()) || (m_splitter->GetSplitMode() != wxSPLIT_VERTICAL) ) );
}
void MyFrame::UpdateUIUnsplit(wxUpdateUIEvent& event)
{
event.Enable( m_splitter->IsSplit() );
}
void MyFrame::UpdatePosition()
{
wxString str;
str.Printf( "Sash position = %d", m_splitter->GetSashPosition());
SetStatusText(str);
}
void MyFrame::OnQuit( wxCommandEvent &WXUNUSED(event) )
{
Close( TRUE );
}
void MyFrame::OnTimer( wxTimerEvent &WXUNUSED(event) )
{
m_sm1->MoveRelative( 1, 0);
m_sm2->MoveRelative( 1, 0);
m_sm3->MoveRelative( 1, 0);
m_sm4->MoveRelative( 2, 0);
// m_ref->MoveRelative( 1, 0 );
m_ref2->MoveRelative( 2, 0 );
m_canvas1->UpdateNow();
wxWakeUpIdle();
}
void MyFrame::OnAbout( wxCommandEvent &WXUNUSED(event) )
{
(void)wxMessageBox( "wxCanvas demo\n"
"Robert Roebling (c) 1998,2000 \n Modified by Klaas Holwerda 2000",
"About wxCanvas Demo", wxICON_INFORMATION | wxOK );
}
//------------------------------------------------
// class MyCanvas
//------------------------------------------------
// the event tables connect the wxWindows events with the functions (event
// handlers) which process them.
BEGIN_EVENT_TABLE(MyCanvas,wxVectorCanvas)
EVT_MOUSE_EVENTS (MyCanvas::OnMouseEvent)
END_EVENT_TABLE()
MyCanvas::MyCanvas(wxCanvasAdmin* admin, MySplitterWindow *parent, wxWindowID id,
const wxPoint &position, const wxSize& size, long style ) :
wxVectorCanvas( admin, parent, id, position, size, style )
{
m_parent=parent;
}
void MyCanvas::OnMouseEvent(wxMouseEvent& event)
{
wxClientDC dc(this);
PrepareDC(dc);
wxPoint pos = event.GetPosition();
m_mouse_worldx = DeviceToLogicalX( pos.x );
m_mouse_worldy = DeviceToLogicalY( pos.y );
wxString str;
str.Printf( "Current mouse position: %f,%f", m_mouse_worldx, m_mouse_worldy );
m_parent->SetStatusText( str );
if (!event.m_controlDown && !GetCaptured())
{
if (event.LeftDown())
{
m_zoom_x1=m_zoom_x2=pos.x;
m_zoom_y1=m_zoom_y2=pos.y;
}
if (event.RightDown())
{
SetMappingScroll(m_virtm_minX,m_virtm_minY,m_virtm_maxX,m_virtm_maxY,0);
Update( 0,0, GetBufferWidth(), GetBufferHeight(), TRUE );
UpdateNow();
}
if (event.LeftUp())
{
m_zoom_x2=pos.x;
m_zoom_y2=pos.y;
double x_virt_min=DeviceToLogicalX(m_zoom_x1);
double y_virt_min=DeviceToLogicalY(m_zoom_y2);
double x_virt_max=DeviceToLogicalX(m_zoom_x2);
double y_virt_max=DeviceToLogicalY(m_zoom_y1);
SetMappingScroll(x_virt_min,y_virt_min,x_virt_max,y_virt_max,0);
Update( 0,0, GetBufferWidth(), GetBufferHeight(), TRUE );
UpdateNow();
}
if (event.Dragging()&& event.m_leftDown)
{
dc.SetLogicalFunction(wxINVERT);
dc.DrawRectangle(m_zoom_x1,m_zoom_y1,m_zoom_x2-m_zoom_x1,m_zoom_y2-m_zoom_y1 );
m_zoom_x2=pos.x;
m_zoom_y2=pos.y;
dc.DrawRectangle(m_zoom_x1,m_zoom_y1,m_zoom_x2-m_zoom_x1,m_zoom_y2-m_zoom_y1 );
}
}
else
{
wxVectorCanvas::OnMouse(event);
}
}
//-----------------------------------------------------------------------------
// MyApp
//-----------------------------------------------------------------------------
// main program
IMPLEMENT_APP(MyApp)
bool MyApp::OnInit()
{
m_fontpath = getenv("TRUETYPE");
m_fontpath = "c:/WINNT/Fonts/times.ttf";
if ( !m_fontpath )
{
wxLogError("Please set env var TRUETYPE to the path where times.ttf lives.");
return FALSE;
}
#if wxUSE_LIBPNG
wxImage::AddHandler( new wxPNGHandler );
#endif
wxFrame *frame = new MyFrame((wxFrame *) NULL, "wxCanvas Example", wxPoint(0,0), wxSize(400,500));
frame->Show( TRUE );
SetTopWindow(frame);
return TRUE;
}

View File

@@ -1,216 +0,0 @@
/*
* Program: canvas
*
* Author: Robert Roebling
*
* Copyright: (C) 1998, Robert Roebling
*
*/
// For compilers that support precompilation, includes "wx/wx.h".
#ifndef __test_H__
#define __test_H__
#if defined(__GNUG__) && !defined(__APPLE__)
#pragma interface "test.cpp"
#endif
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
#include <wx/image.h>
#include <wx/file.h>
#include <wx/timer.h>
#include <wx/log.h>
#include <wx/splitter.h>
#include "wx/canvas/canvas.h"
#include "wx/canvas/polygon.h"
class MyCanvas;
// derived classes
class MywxCanvasObjectRef: public wxCanvasObjectRef
{
DECLARE_DYNAMIC_CLASS(MywxCanvasObjectRef)
public:
MywxCanvasObjectRef();
MywxCanvasObjectRef(double x, double y, wxCanvasObjectGroup* group);
~MywxCanvasObjectRef();
void OnMouseEvent(wxMouseEvent &event);
private:
DECLARE_EVENT_TABLE()
};
class MyEventHandler: public wxEvtHandler
{
public:
MyEventHandler();
void OnMouseEvent(wxMouseEvent &event);
private:
DECLARE_EVENT_TABLE()
};
class MySplitterWindow : public wxSplitterWindow
{
public:
MySplitterWindow(wxFrame *parent, wxWindowID id)
: wxSplitterWindow(parent, id, wxDefaultPosition, wxDefaultSize, wxSP_3D )
{
m_frame = parent;
}
virtual bool OnSashPositionChange(int newSashPosition)
{
if ( !wxSplitterWindow::OnSashPositionChange(newSashPosition) )
return FALSE;
wxString str;
str.Printf( _T("Sash position = %d"), newSashPosition);
m_frame->SetStatusText(str);
return TRUE;
}
void SetStatusText(const wxString& str ){m_frame->SetStatusText(str);}
private:
wxFrame *m_frame;
};
// MyFrame
const int ID_ABOUT = 109;
// MyFrame
class MyFrame: public wxFrame
{
public:
MyFrame(wxFrame* frame, const wxString& title, const wxPoint& pos, const wxSize& size);
virtual ~MyFrame();
// Menu commands
void SplitHorizontal(wxCommandEvent& event);
void SplitVertical(wxCommandEvent& event);
void Unsplit(wxCommandEvent& event);
void SetMinSize(wxCommandEvent& event);
void Quit(wxCommandEvent& event);
// Menu command update functions
void UpdateUIHorizontal(wxUpdateUIEvent& event);
void UpdateUIVertical(wxUpdateUIEvent& event);
void UpdateUIUnsplit(wxUpdateUIEvent& event);
void OnAbout( wxCommandEvent &event );
void OnNewFrame( wxCommandEvent &event );
void OnQuit( wxCommandEvent &event );
void OnTimer( wxTimerEvent &event );
wxCanvasObject *m_sm1;
wxCanvasObject *m_sm2;
wxCanvasObject *m_sm3;
wxCanvasObject *m_sm4;
MywxCanvasObjectRef *m_ref;
MywxCanvasObjectRef *m_ref2;
wxTimer *m_timer;
wxTextCtrl *m_log;
wxBitmap gs_bmp36_mono;
private:
void UpdatePosition();
wxMenu* fileMenu;
wxMenuBar* menuBar;
MyCanvas* m_canvas1;
MyCanvas* m_canvas2;
MySplitterWindow* m_splitter;
wxCanvasAdmin m_canvasadmin;
wxCanvasObjectGroup* m_datatree;
DECLARE_EVENT_TABLE()
MyEventHandler* m_eventhandler;
};
// ID for the menu commands
enum
{
SPLIT_QUIT,
SPLIT_HORIZONTAL,
SPLIT_VERTICAL,
SPLIT_UNSPLIT,
SPLIT_SETMINSIZE
};
// Window ids
#define SPLITTER_WINDOW 100
#define SPLITTER_FRAME 101
#define CANVAS1 102
#define CANVAS2 103
class MyCanvas: public wxVectorCanvas
{
public:
MyCanvas( wxCanvasAdmin* admin, MySplitterWindow *parent, wxWindowID id = -1,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxScrolledWindowStyle );
void OnMouseEvent(wxMouseEvent& event);
private:
//mouse position used for displaying it in the statusbar
int m_mouse_x;
//mouse position used for displaying it in the statusbar
int m_mouse_y;
//mouse position used for displaying it in the statusbar
double m_mouse_worldx;
//mouse position used for displaying it in the statusbar
double m_mouse_worldy;
//mouse position used for zooming
double m_zoom_x1;
//mouse position used for zooming
double m_zoom_y1;
//mouse position used for zooming
double m_zoom_x2;
//mouse position used for zooming
double m_zoom_y2;
//declare events
DECLARE_EVENT_TABLE()
//parent of the canvas
MySplitterWindow *m_parent;
};
// MyApp
class MyApp: public wxApp
{
public:
virtual bool OnInit();
const wxString& GetFontPath() const { return m_fontpath; }
private:
wxString m_fontpath;
};
#endif

View File

@@ -1,3 +0,0 @@
#include "wx/msw/wx.rc"

View File

@@ -1,102 +0,0 @@
# Microsoft Developer Studio Project File - Name="CanvasVC" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Static Library" 0x0104
CFG=CanvasVC - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "CanvasVC.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "CanvasVC.mak" CFG="CanvasVC - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "CanvasVC - Win32 Release" (based on "Win32 (x86) Static Library")
!MESSAGE "CanvasVC - Win32 Debug" (based on "Win32 (x86) Static Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "CanvasVC - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O1 /Ob2 /I "../../../include" /I "../../include" /I "../../../lib/msw" /D "WIN32" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /FD /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x809
# ADD RSC /l 0x809
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo /out:"..\..\..\lib\canvas.lib"
!ELSEIF "$(CFG)" == "CanvasVC - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "../../../include" /I "../../include" /I "../../../lib/mswd" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D DEBUG=1 /D "__WXDEBUG__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /FD /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x809
# ADD RSC /l 0x809
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo /out:"..\..\..\lib\canvasd.lib"
!ENDIF
# Begin Target
# Name "CanvasVC - Win32 Release"
# Name "CanvasVC - Win32 Debug"
# Begin Source File
SOURCE=.\bbox.cpp
# End Source File
# Begin Source File
SOURCE=.\canvas.cpp
# End Source File
# Begin Source File
SOURCE=.\liner.cpp
# End Source File
# Begin Source File
SOURCE=.\polygon.cpp
# End Source File
# End Target
# End Project

View File

@@ -1,29 +0,0 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "CanvasVC"=.\CanvasVC.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################

View File

@@ -1,26 +0,0 @@
# $Id$
top_srcdir = @top_srcdir@/..
top_builddir = ../../..
libsrc_dir = contrib/src/canvas
TARGET_LIBNAME=lib@WX_LIBRARY_BASENAME@_canvas-@WX_RELEASE@
LIBVERSION_CURRENT=@WX_CURRENT@
LIBVERSION_REVISION=@WX_REVISION@
LIBVERSION_AGE=@WX_AGE@
HEADER_PATH=$(top_srcdir)/contrib/include/wx
HEADER_SUBDIR=canvas
HEADERS=canvas.h bbox.h liner.h polygon.h
OBJECTS=canvas.o bbox.o liner.o polygon.o
DEPFILES=$(OBJECTS:.o=.d)
APPEXTRADEFS=-I$(top_srcdir)/contrib/include
include $(top_builddir)/src/makelib.env
-include $(DEPFILES)

View File

@@ -1,369 +0,0 @@
/////////////////////////////////////////////////////////////////////////////
// Name: bbox.cpp
// Author: Klaas Holwerda
// Created: XX/XX/XX
// Copyright: 2000 (c) Klaas Holwerda
// Licence: wxWindows Licence
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#pragma implementation "bbox.cpp"
#endif
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#include "wx/canvas/bbox.h"
wxBoundingBox::wxBoundingBox()
{
m_minx = m_miny = m_maxx = m_maxy = 0.0;
m_validbbox = FALSE;
}
wxBoundingBox::wxBoundingBox(const wxBoundingBox &other)
{
m_minx = other.m_minx;
m_miny = other.m_miny;
m_maxx = other.m_maxx;
m_maxy = other.m_maxy;
m_validbbox= other.m_validbbox;
}
wxBoundingBox::wxBoundingBox(const wxPoint2DDouble& a)
{
m_minx = a.m_x;
m_maxx = a.m_x;
m_miny = a.m_y;
m_maxy = a.m_y;
m_validbbox = TRUE;
}
wxBoundingBox::wxBoundingBox(double xmin, double ymin, double xmax, double ymax)
{
m_minx = xmin;
m_miny = ymin;
m_maxx = xmax;
m_maxy = ymax;
m_validbbox = TRUE;
}
// This function checks if two bboxes intersect
bool wxBoundingBox::And(wxBoundingBox *_bbox, double Marge)
{
assert (m_validbbox == TRUE);
assert (_bbox->GetValid());
m_minx = wxMax(m_minx, _bbox->m_minx);
m_maxx = wxMin(m_maxx, _bbox->m_maxx);
m_miny = wxMax(m_miny, _bbox->m_miny);
m_maxy = wxMin(m_maxy, _bbox->m_maxy);
return (bool)
(
((m_minx - Marge) < (m_maxx + Marge)) &&
((m_miny - Marge) < (m_maxy + Marge))
);
}
// Shrink the boundingbox with the given marge
void wxBoundingBox::Shrink(const double Marge)
{
assert (m_validbbox == TRUE);
m_minx += Marge;
m_maxx -= Marge;
m_miny += Marge;
m_maxy -= Marge;
}
// Expand the boundingbox with another boundingbox
void wxBoundingBox::Expand(const wxBoundingBox &other)
{
if (!m_validbbox)
{
*this=other;
}
else
{
m_minx = wxMin(m_minx, other.m_minx);
m_maxx = wxMax(m_maxx, other.m_maxx);
m_miny = wxMin(m_miny, other.m_miny);
m_maxy = wxMax(m_maxy, other.m_maxy);
}
}
// Expand the boundingbox with a point
void wxBoundingBox::Expand(const wxPoint2DDouble& a_point)
{
if (!m_validbbox)
{
m_minx = m_maxx = a_point.m_x;
m_miny = m_maxy = a_point.m_y;
m_validbbox=TRUE;
}
else
{
m_minx = wxMin(m_minx, a_point.m_x);
m_maxx = wxMax(m_maxx, a_point.m_x);
m_miny = wxMin(m_miny, a_point.m_y);
m_maxy = wxMax(m_maxy, a_point.m_y);
}
}
// Expand the boundingbox with a point
void wxBoundingBox::Expand(double x,double y)
{
if (!m_validbbox)
{
m_minx = m_maxx = x;
m_miny = m_maxy = y;
m_validbbox=TRUE;
}
else
{
m_minx = wxMin(m_minx, x);
m_maxx = wxMax(m_maxx, x);
m_miny = wxMin(m_miny, y);
m_maxy = wxMax(m_maxy, y);
}
}
// Expand the boundingbox with two points
void wxBoundingBox::Expand(const wxPoint2DDouble& a, const wxPoint2DDouble& b)
{
Expand(a);
Expand(b);
}
// Enlarge the boundingbox with the given marge
void wxBoundingBox::EnLarge(const double marge)
{
if (!m_validbbox)
{
m_minx = m_maxx = marge;
m_miny = m_maxy = marge;
m_validbbox=TRUE;
}
else
{
m_minx -= marge;
m_maxx += marge;
m_miny -= marge;
m_maxy += marge;
}
}
// Calculates if two boundingboxes intersect. If so, the function returns _ON.
// If they do not intersect, two scenario's are possible:
// other is outside this -> return _OUT
// other is inside this -> return _IN
OVERLAP wxBoundingBox::Intersect(wxBoundingBox &other, double Marge)
{
assert (m_validbbox == TRUE);
// other boundingbox must exist
assert (&other);
if (((m_minx - Marge) > (other.m_maxx + Marge)) ||
((m_maxx + Marge) < (other.m_minx - Marge)) ||
((m_maxy + Marge) < (other.m_miny - Marge)) ||
((m_miny - Marge) > (other.m_maxy + Marge)))
return _OUT;
// Check if other.bbox is inside this bbox
if ((m_minx <= other.m_minx) &&
(m_maxx >= other.m_maxx) &&
(m_maxy >= other.m_maxy) &&
(m_miny <= other.m_miny))
return _IN;
// Boundingboxes intersect
return _ON;
}
// Checks if a line intersects the boundingbox
bool wxBoundingBox::LineIntersect(const wxPoint2DDouble& begin, const wxPoint2DDouble& end )
{
assert (m_validbbox == TRUE);
return (bool)
!(((begin.m_y > m_maxy) && (end.m_y > m_maxy)) ||
((begin.m_y < m_miny) && (end.m_y < m_miny)) ||
((begin.m_x > m_maxx) && (end.m_x > m_maxx)) ||
((begin.m_x < m_minx) && (end.m_x < m_minx)));
}
// Is the given point in the boundingbox ??
bool wxBoundingBox::PointInBox(double x, double y, double Marge)
{
assert (m_validbbox == TRUE);
if ( x >= (m_minx - Marge) && x <= (m_maxx + Marge) &&
y >= (m_miny - Marge) && y <= (m_maxy + Marge) )
return TRUE;
return FALSE;
}
//
// Is the given point in the boundingbox ??
//
bool wxBoundingBox::PointInBox(const wxPoint2DDouble& a, double Marge)
{
assert (m_validbbox == TRUE);
return PointInBox(a.m_x, a.m_y, Marge);
}
wxPoint2DDouble wxBoundingBox::GetMin()
{
assert (m_validbbox == TRUE);
return wxPoint2DDouble(m_minx, m_miny);
}
wxPoint2DDouble wxBoundingBox::GetMax()
{
assert (m_validbbox == TRUE);
return wxPoint2DDouble(m_maxx, m_maxy);
}
bool wxBoundingBox::GetValid() const
{
return m_validbbox;
}
void wxBoundingBox::SetMin(double px, double py)
{
m_minx = px;
m_miny = py;
if (!m_validbbox)
{
m_maxx = px;
m_maxy = py;
m_validbbox = TRUE;
}
}
void wxBoundingBox::SetMax(double px, double py)
{
m_maxx = px;
m_maxy = py;
if (!m_validbbox)
{
m_minx = px;
m_miny = py;
m_validbbox = TRUE;
}
}
void wxBoundingBox::SetValid(bool value)
{
m_validbbox = value;
}
// adds an offset to the boundingbox
// usage : a_boundingbox.Translate(a_point);
void wxBoundingBox::Translate(wxPoint2DDouble& offset)
{
assert (m_validbbox == TRUE);
m_minx += offset.m_x;
m_maxx += offset.m_x;
m_miny += offset.m_y;
m_maxy += offset.m_y;
}
// clears the bounding box settings
void wxBoundingBox::Reset()
{
m_minx = 0.0;
m_maxx = 0.0;
m_miny = 0.0;
m_maxy = 0.0;
m_validbbox = FALSE;
}
void wxBoundingBox::SetBoundingBox(const wxPoint2DDouble& a_point)
{
m_minx = a_point.m_x;
m_maxx = a_point.m_x;
m_miny = a_point.m_y;
m_maxy = a_point.m_y;
}
// Expands the boundingbox with the given point
// usage : a_boundingbox = a_boundingbox + pointer_to_an_offset;
wxBoundingBox& wxBoundingBox::operator+(wxBoundingBox &other)
{
assert (m_validbbox == TRUE);
assert (other.GetValid());
Expand(other);
return *this;
}
// makes a boundingbox same as the other
wxBoundingBox& wxBoundingBox::operator=( const wxBoundingBox &other)
{
assert (other.GetValid());
m_minx = other.m_minx;
m_maxx = other.m_maxx;
m_miny = other.m_miny;
m_maxy = other.m_maxy;
m_validbbox = other.m_validbbox;
return *this;
}
void wxBoundingBox::MapBbox( const wxTransformMatrix& matrix)
{
assert (m_validbbox == TRUE);
double x1,y1,x2,y2,x3,y3,x4,y4;
matrix.TransformPoint( m_minx, m_miny, x1, y1 );
matrix.TransformPoint( m_minx, m_maxy, x2, y2 );
matrix.TransformPoint( m_maxx, m_maxy, x3, y3 );
matrix.TransformPoint( m_maxx, m_miny, x4, y4 );
double xmin = wxMin(x1,x2);
xmin = wxMin(xmin,x3);
xmin = wxMin(xmin,x4);
double xmax = wxMax( x1, x2);
xmax = wxMax(xmax,x3);
xmax = wxMax(xmax,x4);
double ymin = wxMin(y1, y2);
ymin = wxMin(ymin,y3);
ymin = wxMin(ymin,y4);
double ymax = wxMax(y1,y2);
ymax = wxMax(ymax,y3);
ymax = wxMax(ymax,y4);
// Use these min and max values to set the new boundingbox
m_minx = xmin;
m_miny = ymin;
m_maxx = xmax;
m_maxy = ymax;
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,660 +0,0 @@
/*
Program wxLine.CPP
Purpose Mainly used for calculating crossings
Last Update 05-12-1995
*/
#ifdef __GNUG__
#pragma implementation "liner.cpp"
#endif
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#include <math.h>
#include <stdlib.h>
#include "wx/canvas/liner.h"
wxLine::wxLine( double x1, double y1, double x2, double y2 )
{
m_AA = 0.0;
m_BB = 0.0;
m_CC = 0.0;
m_a=wxPoint2DDouble(x1,y1);
m_b=wxPoint2DDouble(x2,y2);
if (m_a==m_b)
assert(0);
m_valid_parameters = FALSE;
}
wxLine::~wxLine()
{
}
wxLine::wxLine(const wxPoint2DDouble& a,const wxPoint2DDouble& b)
{
if (a==b)
assert(0);
m_a=a;
m_b=b;
m_valid_parameters = FALSE;
}
// ActionOnTable1
// This function decide which action must be taken, after PointInLine
// has given the results of two points in relation to a wxLine. See table 1 in the report
//
// input Result_beginPoint:
// Result_endPoint :
// The results can be R_R_LEFT_SIDE, R_R_RIGHT_SIDE, R_R_ON_AREA, R_R_IN_AREA
//
// return -1: Illegal combination
// 0: No action, no crosspoints
// 1: Investigate results points in relation to the other wxLine
// 2: endPoint is a crosspoint, no further investigation
// 3: beginPoint is a crosspoint, no further investigation
// 4: beginPoint and endPoint are crosspoints, no further investigation
// 5: beginPoint is a crosspoint, need further investigation
// 6: endPoint is a crosspoint, need further investigation
int wxLine::ActionOnTable1(R_PointStatus Result_beginPoint, R_PointStatus Result_endPoint)
{
// beginPoint and endPoint are crosspoints
if (
(Result_beginPoint == R_IN_AREA)
&&
(Result_endPoint == R_IN_AREA)
)
return 4;
// there are no crosspoints, no action
if (
(
(Result_beginPoint == R_LEFT_SIDE)
&&
(Result_endPoint == R_LEFT_SIDE)
)
||
(
(Result_beginPoint == R_RIGHT_SIDE)
&&
(Result_endPoint == R_RIGHT_SIDE)
)
)
return 0;
// maybe there is a crosspoint, further investigation needed
if (
(
(Result_beginPoint == R_LEFT_SIDE)
&&
(
(Result_endPoint == R_RIGHT_SIDE)
||
(Result_endPoint == R_ON_AREA)
)
)
||
(
(Result_beginPoint == R_RIGHT_SIDE)
&&
(
(Result_endPoint == R_LEFT_SIDE)
||
(Result_endPoint == R_ON_AREA)
)
)
||
(
(Result_beginPoint == R_ON_AREA)
&&
(
(Result_endPoint == R_LEFT_SIDE)
||
(Result_endPoint == R_RIGHT_SIDE)
||
(Result_endPoint == R_ON_AREA)
)
)
)
return 1;
//there is a crosspoint
if (
(
(Result_beginPoint == R_LEFT_SIDE)
||
(Result_beginPoint == R_RIGHT_SIDE)
)
&&
(Result_endPoint == R_IN_AREA)
)
return 2;
// there is a crosspoint
if (
(Result_beginPoint == R_IN_AREA)
&&
(
(Result_endPoint == R_LEFT_SIDE)
||
(Result_endPoint == R_RIGHT_SIDE)
)
)
return 3;
// beginPoint is a crosspoint, further investigation needed
if (
(Result_beginPoint == R_IN_AREA)
&&
(Result_endPoint == R_ON_AREA)
)
return 5;
// endPoint is a crosspoint, further investigation needed
if (
(Result_beginPoint == R_ON_AREA)
&&
(Result_endPoint == R_IN_AREA)
)
return 6;
// All other combinations are illegal
return -1;
}
// ActionOnTable2
// This function decide which action must be taken, after PointInLine
// has given the results of two points in relation to a wxLine. It can only give a
// correct decision if first the relation of the points from the wxLine
// are investigated in relation to the wxLine wich can be constucted from the points.
//
// input Result_beginPoint:
// Result_endPoint :
// The results can be R_LEFT_SIDE, R_RIGHT_SIDE, R_ON_AREA, R_IN_AREA
//
// return -1: Illegal combination
// 0: No action, no crosspoints
// 1: Calculate crosspoint
// 2: endPoint is a crosspoint
// 3: beginPoint is a crosspoint
// 4: beginPoint and endPoint are crosspoints
int wxLine::ActionOnTable2(R_PointStatus Result_beginPoint, R_PointStatus Result_endPoint)
{
// beginPoint and eindpoint are crosspoints
if (
(Result_beginPoint == R_IN_AREA)
&&
(Result_endPoint == R_IN_AREA)
)
return 4;
// there are no crosspoints
if (
(
(Result_beginPoint == R_LEFT_SIDE)
&&
(
(Result_endPoint == R_LEFT_SIDE)
||
(Result_endPoint == R_ON_AREA)
)
)
||
(
(Result_beginPoint == R_RIGHT_SIDE)
&&
(
(Result_endPoint == R_RIGHT_SIDE)
||
(Result_endPoint == R_ON_AREA)
)
)
||
(
(Result_beginPoint == R_ON_AREA)
&&
(
(Result_endPoint == R_LEFT_SIDE)
||
(Result_endPoint == R_RIGHT_SIDE)
||
(Result_endPoint == R_ON_AREA)
)
)
)
return 0;
// there is a real intersection, which must be calculated
if (
(
(Result_beginPoint == R_LEFT_SIDE)
&&
(Result_endPoint == R_RIGHT_SIDE)
)
||
(
(Result_beginPoint == R_RIGHT_SIDE)
&&
(Result_endPoint == R_LEFT_SIDE)
)
)
return 1;
// endPoint is a crosspoint
if (
(
(Result_beginPoint == R_LEFT_SIDE)
||
(Result_beginPoint == R_RIGHT_SIDE)
||
(Result_beginPoint == R_ON_AREA)
)
&&
(Result_endPoint == R_IN_AREA)
)
return 2;
// beginPoint is a crosspoint
if (
(Result_beginPoint == R_IN_AREA)
&&
(
(Result_endPoint == R_LEFT_SIDE)
||
(Result_endPoint == R_RIGHT_SIDE)
||
(Result_endPoint == R_ON_AREA)
)
)
return 3;
// All other combinations are illegal
return -1;
}
// Calculate the Y when the X is given
double wxLine::Calculate_Y(double X)
{
CalculateLineParameters();
if (m_AA != 0)
return -(m_AA * X + m_CC) / m_BB;
else
// horizontal wxLine
return m_a.m_y;
}
void wxLine::Virtual_Point(wxPoint2DDouble& a_point,double distance) const
{
assert(m_valid_parameters);
//calculate the distance using the slope of the wxLine
//and rotate 90 degrees
a_point.m_y=a_point.m_y + (distance * -m_BB);
a_point.m_x=a_point.m_x - (distance * m_AA );
}
//
// Calculate the lineparameters for the wxLine if nessecary
//
void wxLine::CalculateLineParameters()
{
// if not valid_parameters calculate the parameters
if (!m_valid_parameters)
{
double length;
// bp AND ep may not be the same
if (m_a == m_b)
assert (0);
m_AA = (m_b.m_y - m_a.m_y); // A = (Y2-Y1)
m_BB = (m_a.m_x - m_b.m_x); // B = (X1-X2)
// the parameters A end B can now be normalized
length = sqrt(m_AA*m_AA + m_BB*m_BB);
assert(length !=0);
m_AA = (m_AA / length);
m_BB = (m_BB / length);
m_CC = -((m_AA * m_a.m_x) + (m_a.m_y * m_BB));
m_valid_parameters = TRUE;
}
}
// Checks if a wxLine intersect with another wxLine
// inout wxLine : another wxLine
// Marge: optional, standard on MARGE (declared in MISC.CPP)
//
// return true : wxLines are crossing
// false: wxLines are not crossing
//
bool wxLine::CheckIntersect (wxLine& lijn, double Marge)
{
double distance=0;
// bp AND ep may not be the same
if (m_a == m_b)
assert (0);
int Take_Action1, Take_Action2;
bool Total_Result=FALSE;
R_PointStatus Result_beginPoint,Result_endPoint;
Result_beginPoint = PointInLine(lijn.m_a,distance,Marge);
Result_endPoint = PointInLine(lijn.m_b,distance,Marge);
Take_Action1 = ActionOnTable1(Result_beginPoint,Result_endPoint);
switch (Take_Action1)
{
case 0: Total_Result = FALSE ; break;
case 1: {
Result_beginPoint = lijn.PointInLine(m_a,distance,Marge);
Result_endPoint = lijn.PointInLine(m_b,distance,Marge);
Take_Action2 = ActionOnTable2(Result_beginPoint,Result_endPoint);
switch (Take_Action2)
{
case 0: Total_Result = FALSE; break;
case 1: case 2: case 3: case 4: Total_Result = TRUE; break;
}
}; break; // This break belongs to the switch(Take_Action1)
case 2: case 3: case 4: case 5: case 6: Total_Result = TRUE; break;
}
return Total_Result; //This is the final decision
}
//
// Get the beginPoint from the wxLine
// usage: Point aPoint = a_line.GetBeginPoint()
//
wxPoint2DDouble wxLine::GetBeginPoint()
{
return m_a;
}
//
// Get the endPoint from the wxLine
// usage: Point aPoint = a_line.GetEndPoint()
//
wxPoint2DDouble wxLine::GetEndPoint()
{
return m_b;
}
// Intersects two wxLines
// input wxLine : another wxLine
// Marge: optional, standard on MARGE
//
// return 0: If there are no crossings
// 1: If there is one crossing
// 2: If there are two crossings
int wxLine::Intersect(wxLine& lijn, wxPoint2DDouble& c1 ,wxPoint2DDouble& c2 , double Marge)
{
double distance=0;
// bp AND ep may not be the same
if (m_a == m_b)
assert (0);
R_PointStatus Result_beginPoint,Result_endPoint;
int Take_Action1, Take_Action2, Number_of_Crossings = 0;
Result_beginPoint = PointInLine(lijn.m_a,distance,Marge);
Result_endPoint = PointInLine(lijn.m_b,distance,Marge);
Take_Action1 = ActionOnTable1(Result_beginPoint,Result_endPoint);
// 0: No action, no crosspoints
// 1: Investigate results points in relation to the other wxLine
// 2: endPoint is a crosspoint, no further investigation
// 3: beginPoint is a crosspoint, no further investigation
// 4: beginPoint and endPoint are crosspoints, no further investigation
// 5: beginPoint is a crosspoint, need further investigation
// 6: endPoint is a crosspoint, need further investigation
// The first switch will insert a crosspoint immediatly
switch (Take_Action1)
{
case 2: case 6: c1=lijn.m_b;
Number_of_Crossings = 1;
break;
case 3: case 5: c1=lijn.m_a;
Number_of_Crossings = 1;
break;
case 4: c1=lijn.m_a;
c2=lijn.m_b;
Number_of_Crossings = 2;
break;
default:
break;
}
// This switch wil investigate the points of this wxLine in relation to lijn
// 1: Investigate results points in relation to the other wxLine
// 5: beginPoint is a crosspoint, need further investigation
// 6: endPoint is a crosspoint, need further investigation
switch (Take_Action1)
{
case 1: case 5: case 6:
{
Result_beginPoint = lijn.PointInLine(m_a,distance,Marge);
Result_endPoint = lijn.PointInLine(m_b,distance,Marge);
Take_Action2 = ActionOnTable2(Result_beginPoint,Result_endPoint);
// return -1: Illegal combination
// 0: No action, no crosspoints
// 1: Calculate crosspoint
// 2: endPoint is a crosspoint
// 3: beginPoint is a crosspoint
// 4: beginPoint and endPoint are crosspoints
switch (Take_Action2)
{
// for the cases see the returnvalue of ActionTable2
case 1: { // begin of scope to calculate the intersection
double X, Y, Denominator;
CalculateLineParameters();
Denominator = (m_AA * lijn.m_BB) - (lijn.m_AA * m_BB);
// Denominator may not be 0
assert(Denominator != 0.0);
// Calculate intersection of both linesegments
X = ((m_BB * lijn.m_CC) - (lijn.m_BB * m_CC)) / Denominator;
Y = ((lijn.m_AA * m_CC) - (m_AA * lijn.m_CC)) / Denominator;
c1.m_x=X;
c1.m_y=Y;
}
Number_of_Crossings++;
break;
case 2: c2=m_a;
Number_of_Crossings++;
break;
case 3: c2=m_b;
Number_of_Crossings++;
break;
case 4: c1=m_a;
c2=m_b;
Number_of_Crossings = 2;
break;
}
};
break;
default:
break;
}
return Number_of_Crossings; //This is de final number of crossings
}
//
// test if a point lies in the linesegment. If the point isn't on the wxLine
// the function returns a value that indicates on which side of the
// wxLine the point is (in linedirection from first point to second point
//
// returns R_LEFT_SIDE, when point lies on the left side of the wxLine
// R_RIGHT_SIDE, when point lies on the right side of the wxLine
// R_ON_AREA, when point lies on the infinite wxLine within a range
// R_IN_AREA, when point lies in the area of the linesegment
// the returnvalues are declared in (wxLine.H)
R_PointStatus wxLine::PointInLine(const wxPoint2DDouble& a_Point, double& Distance,double Marge)
{
Distance=0;
// Point may not be the same
assert(m_a != m_b);
int Result_ofm_BBox=FALSE;
R_PointStatus Result_of_Online;
//quick test if point is begin or endpoint
if (a_Point == m_a || a_Point == m_b)
return R_IN_AREA;
// Checking if point is in bounding-box with marge
double xmin=wxMin(m_a.m_x,m_b.m_x);
double xmax=wxMax(m_a.m_x,m_b.m_x);
double ymin=wxMin(m_a.m_y,m_b.m_y);
double ymax=wxMax(m_a.m_y,m_b.m_y);
if ( a_Point.m_x >= (xmin - Marge) && a_Point.m_x <= (xmax + Marge) &&
a_Point.m_y >= (ymin - Marge) && a_Point.m_y <= (ymax + Marge) )
Result_ofm_BBox=TRUE;
// Checking if point is on the infinite wxLine
Result_of_Online = PointOnLine(a_Point, Distance, Marge);
// point in boundingbox of the wxLine and is on the wxLine then the point is R_IN_AREA
if ((Result_ofm_BBox) && (Result_of_Online == R_ON_AREA))
return R_IN_AREA;
else
return Result_of_Online;
}
//
// test if a point lies on the wxLine. If the point isn't on the wxLine
// the function returns a value that indicates on which side of the
// wxLine the point is (in linedirection from first point to second point
//
// returns R_LEFT_SIDE, when point lies on the left side of the wxLine
// R_ON_AREA, when point lies on the infinite wxLine within a range
// R_RIGHT_SIDE, when point lies on the right side of the wxLine
// R_LEFT_SIDE , R_RIGHT_SIDE , R_ON_AREA
R_PointStatus wxLine::PointOnLine(const wxPoint2DDouble& a_Point, double& Distance, double Marge)
{
Distance=0;
// Point may not be queal
assert(m_a!=m_b);
//quick test if point is begin or endpoint
if (a_Point == m_a || a_Point == m_b)
return R_ON_AREA;
CalculateLineParameters();
// calculate the distance of a_Point in relation to the wxLine
Distance = (m_AA * a_Point.m_x)+(m_BB * a_Point.m_y) + m_CC;
if (Distance < -Marge)
return R_LEFT_SIDE;
else
{
if (Distance > Marge)
return R_RIGHT_SIDE;
else
return R_ON_AREA;
}
}
// makes a wxLine same as these
// usage : wxLine1 = wxLine2;
wxLine& wxLine::operator=(const wxLine& a_line)
{
m_AA = a_line.m_AA;
m_BB = a_line.m_BB;
m_CC = a_line.m_CC;
m_a= a_line.m_a;
m_b= a_line.m_b;
m_valid_parameters = a_line.m_valid_parameters;
return *this;
}
void wxLine::OffsetContour(const wxLine& nextline,double factor,wxPoint2DDouble& offsetpoint) const
{
wxPoint2DDouble offs_begin(m_a);
wxPoint2DDouble offs_end(m_b);
wxPoint2DDouble offs_bgn_next(nextline.m_a);
wxPoint2DDouble offs_end_next(nextline.m_b);
// make a wxPoint2DDouble from this point
Virtual_Point(offs_begin,factor);
Virtual_Point(offs_end,factor);
wxLine offs_currentline(offs_begin,offs_end);
nextline.Virtual_Point(offs_bgn_next,factor);
nextline.Virtual_Point(offs_end_next,factor);
wxLine offs_nextline(offs_bgn_next, offs_end_next);
offs_nextline.CalculateLineParameters();
offs_currentline.CalculateLineParameters();
offs_currentline.Intersect(offs_nextline,offsetpoint);
}
// Return the position of the second wxLine compared to this wxLine
// Result = IS_ON | IS_LEFT | IS_RIGHT
// Here Left and Right is defined as being left or right from
// the this wxLine towards the center (common) node
// direction of vetors taken as begin to endpoint with end of this at
// begin of wxLine two
OUTPRODUCT wxLine::OutProduct(const wxLine& two,double accur)
{
R_PointStatus uitp;
double distance;
if (two.m_a==two.m_b)
assert(0);
if (m_a==m_b)
assert(0);
uitp=PointOnLine(two.m_b, distance, accur);
/*double uitp= (_x - first._x) * (third._y - _y) -
(_y - first._y) * (third._x - _x);
if (uitp>0) return IS_LEFT;
if (uitp<0) return IS_RIGHT;
return IS_ON;*/
//depending on direction of this link (going to or coming from centre)
if (uitp==R_LEFT_SIDE)
return R_IS_LEFT;
if (uitp==R_RIGHT_SIDE)
return R_IS_RIGHT;
return R_IS_ON;
}
// Intersects two lines if a crossing return TRUE
// else FALSE
bool wxLine::Intersect(wxLine& lijn,wxPoint2DDouble& crossing)
{
// lijn must exist
assert(m_valid_parameters);
assert(lijn.m_valid_parameters);
double X, Y, Denominator;
Denominator = (m_AA * lijn.m_BB) - (lijn.m_AA * m_BB);
// Denominator may not be 0
if (Denominator == 0.0)
return FALSE;
// Calculate intersection of both linesegments
X = ((m_BB * lijn.m_CC) - (lijn.m_BB * m_CC)) / Denominator;
Y = ((lijn.m_AA * m_CC) - (m_AA * lijn.m_CC)) / Denominator;
crossing.m_x=X;
crossing.m_y=Y;
return TRUE;
}

View File

@@ -1,17 +0,0 @@
#
# File: makefile.b32
# Author: Julian Smart
# Created: 1999
# Updated:
# Copyright:
#
# Makefile : Builds Canvas library for 32-bit BC++
WXDIR = $(WXWIN)
LIBTARGET=$(WXDIR)\lib\canvas.lib
OBJECTS = bbox.obj canvas.obj liner.obj polygon.obj
!include $(WXDIR)\src\makelib.b32

View File

@@ -1,16 +0,0 @@
#
# File: makefile.g95
# Author: Julian Smart
# Created: 1999
# Updated:
# Copyright: (c) Julian Smart, 1999
#
# Makefile for wxWindows Plot library Cygwin/Mingw32).
WXDIR = ../../..
LIBTARGET=$(WXDIR)/lib/libcanvas.a
OBJECTS = bbox.o canvas.o liner.o polygon.o
include $(WXDIR)/src/makelib.g95

View File

@@ -1,159 +0,0 @@
# File: makefile.vc
# Author: Julian Smart
# Created: 2001
# Updated:
# Copyright: (c) 2001, Julian Smart
#
# "%W% %G%"
#
# Makefile : Builds Plot class library (MS VC++).
# Use FINAL=1 argument to nmake to build final version with no debugging
# info
# Set WXDIR for your system
WXDIR = $(WXWIN)
GIZMOSDIR = $(WXDIR)\contrib\src\canvas
GIZMOSINC = $(WXDIR)\contrib\include\wx\canvas
THISDIR = $(WXDIR)\contrib\src\canvas
DOCDIR=$(WXDIR)\contrib\docs
LOCALDOCDIR=$(WXDIR)\contrib\docs\latex\canvas
!include $(WXDIR)\src\makevc.env
OBJECTS = $(D)\bbox.obj $(D)\canvas.obj $(D)\liner.obj $(D)\polygon.obj
LIBTARGET=$(WXDIR)\lib\canvas$(LIBEXT).lib
all: $(D) $(LIBTARGET)
$(D) :
mkdir $(D)
wx:
cd $(WXDIR)\src\msw
nmake -f makefile.vc FINAL=$(FINAL)
cd $(THISDIR)
wxclean:
cd $(WXDIR)\src\msw
nmake -f makefile.vc clean
cd $(THISDIR)
$(LIBTARGET): $(OBJECTS)
-erase $(LIBTARGET)
$(implib) @<<
-out:$(LIBTARGET)
-machine:$(CPU)
$(OBJECTS)
<<
$(D)\bbox.obj: bbox.$(SRCSUFF)
cl @<<
$(CPPFLAGS) /c /Fo$@ /Tp $(*B).$(SRCSUFF)
<<
$(D)\canvas.obj: canvas.$(SRCSUFF)
cl @<<
$(CPPFLAGS) /c /Fo$@ /Tp $(*B).$(SRCSUFF)
<<
$(D)\liner.obj: liner.$(SRCSUFF)
cl @<<
$(CPPFLAGS) /c /Fo$@ /Tp $(*B).$(SRCSUFF)
<<
$(D)\polygon.obj: polygon.$(SRCSUFF)
cl @<<
$(CPPFLAGS) /c /Fo$@ /Tp $(*B).$(SRCSUFF)
<<
clean:
-erase $(D)\*.obj
-erase *.sbr
-erase *.exe
-erase *.res
-erase *.map
-erase *.pdb
-erase $(LIBTARGET)
DOCSOURCES=$(LOCALDOCDIR)\canvas.tex \
$(LOCALDOCDIR)\bugs.tex $(LOCALDOCDIR)\changes.tex\
$(LOCALDOCDIR)\classes.tex $(LOCALDOCDIR)\intro.tex\
$(LOCALDOCDIR)\topics.tex $(LOCALDOCDIR)\sample.tex
html: $(DOCDIR)\html\canvas\canvas.htm
htmlhelp: $(DOCDIR)\htmlhelp\canvas.chm
htb: $(DOCDIR)\htb\canvas.htb
hlp: $(DOCDIR)\winhelp\canvas.hlp
pdfrtf: $(DOCDIR)\pdf\canvas.rtf
ps: $(DOCDIR)\ps\canvas.ps
touchmanual:
touch $(LOCALDOCDIR)\canvas.tex
$(DOCDIR)\winhelp\canvas.hlp: $(LOCALDOCDIR)\canvas.rtf $(LOCALDOCDIR)\canvas.hpj
cd $(LOCALDOCDIR)
-erase canvas.ph
hc canvas
move canvas.hlp $(DOCDIR)\winhelp\canvas.hlp
move canvas.cnt $(DOCDIR)\winhelp\canvas.cnt
cd $(THISDIR)
$(LOCALDOCDIR)\canvas.rtf: $(DOCSOURCES)
cd $(LOCALDOCDIR)
-start $(WAITFLAG) tex2rtf $(LOCALDOCDIR)\canvas.tex $(LOCALDOCDIR)\canvas.rtf -twice -winhelp
cd $(THISDIR)
$(DOCDIR)\pdf\canvas.rtf: $(DOCSOURCES)
cd $(LOCALDOCDIR)
-copy *.bmp $(DOCDIR)\pdf
-start $(WAITFLAG) tex2rtf $(LOCALDOCDIR)\canvas.tex $(DOCDIR)\pdf\canvas.rtf -twice -rtf
cd $(THISDIR)
$(DOCDIR)\html\canvas\canvas.htm: $(DOCSOURCES)
cd $(LOCALDOCDIR)
-mkdir $(DOCDIR)\html\canvas
copy *.gif $(DOCDIR)\html\canvas
-start $(WAITFLAG) tex2rtf $(LOCALDOCDIR)\canvas.tex $(DOCDIR)\html\canvas\canvas.htm -twice -html
-erase $(DOCDIR)\html\canvas\*.con
-erase *.con
-erase $(DOCDIR)\html\canvas\*.ref
cd $(THISDIR)
$(DOCDIR)\htmlhelp\canvas.chm: $(DOCDIR)\html\canvas\canvas.htm $(DOCDIR)\html\canvas\canvas.hhp
cd $(DOCDIR)\html\canvas
-hhc canvas.hhp
move canvas.chm $(DOCDIR)\htmlhelp\canvas.chm
cd $(THISDIR)
# An htb file is a zip file containing the .htm, .gif, .hhp, .hhc and .hhk
# files, renamed to htb.
# This can then be used with e.g. helpview.
# Optionally, a cached version of the .hhp file can be generated with hhp2cached.
$(DOCDIR)\htb\canvas.htb: $(DOCDIR)\html\canvas\canvas.htm
cd $(DOCDIR)\html\canvas
-erase canvas.zip canvas.htb
zip canvas.zip *.htm *.gif *.hhp *.hhc *.hhk
-mkdir $(DOCDIR)\htb
move canvas.zip $(DOCDIR)\htb\canvas.htb
cd $(THISDIR)
$(LOCALDOCDIR)\canvas.dvi: $(DOCSOURCES)
cd $(LOCALDOCDIR)
-latex canvas
-latex canvas
-makeindx canvas
-bibtex canvas
-latex canvas
-latex canvas
cd $(THISDIR)
$(WXDIR)\docs\ps\canvas.ps: $(LOCALDOCDIR)\canvas.dvi
cd $(LOCALDOCDIR)
-dvips32 -o canvas.ps canvas
move canvas.ps $(WXDIR)\docs\ps\canvas.ps
cd $(THISDIR)

File diff suppressed because it is too large Load Diff