Initial import of KiCad.

This commit is contained in:
plyatov 2007-05-06 16:03:28 +00:00
commit 23c40f7e86
914 changed files with 210683 additions and 0 deletions

269
3d-viewer/3d_aux.cpp Normal file
View File

@ -0,0 +1,269 @@
/////////////////////////////////////////////////////////////////////////////
// Name: 3d_aux.cpp
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#pragma implementation
#pragma interface
#endif
#include "fctsys.h"
#if !wxUSE_GLCANVAS
#error Please set wxUSE_GLCANVAS to 1 in setup.h.
#endif
#include "common.h"
#include "trigo.h"
#include "bitmaps.h"
#include "3d_viewer.h"
#include "3d_struct.h"
#include "trackball.h"
/**************************************************************************/
void Struct3D_Master::Set_Object_Coords(S3D_Vertex * coord, int nbcoord )
/**************************************************************************/
{
int ii;
/* adjust object scale, rotation and offset position */
for ( ii = 0; ii < nbcoord; ii++ )
{
coord[ii].x *= m_MatScale.x;
coord[ii].y *= m_MatScale.y;
coord[ii].z *= m_MatScale.z;
/* adjust rotation */
if ( m_MatRotation.x )
RotatePoint(&coord[ii].y, &coord[ii].z,
(int)(m_MatRotation.x * 10));
if ( m_MatRotation.y )
RotatePoint(&coord[ii].z, &coord[ii].x,
(int)(m_MatRotation.y * 10));
if ( m_MatRotation.z )
RotatePoint(&coord[ii].x, &coord[ii].y,
(int)(m_MatRotation.z * 10));
/* adjust offset position (offset is given in UNIT 3D (0.1 inch) */
#define SCALE_3D_CONV (PCB_INTERNAL_UNIT/UNITS3D_TO_UNITSPCB)
coord[ii].x += m_MatPosition.x * SCALE_3D_CONV;
coord[ii].y += m_MatPosition.y * SCALE_3D_CONV;
coord[ii].z += m_MatPosition.z * SCALE_3D_CONV;
}
}
/************************************************************/
void Set_Object_Data(const S3D_Vertex * coord, int nbcoord )
/************************************************************/
{
int ii;
GLfloat ax,ay,az,bx,by,bz,nx,ny,nz,r;
/* ignore faces with less than 3 points */
if (nbcoord < 3) return;
/* calculate normal direction */
ax = coord[1].x - coord[0].x;
ay = coord[1].y - coord[0].y;
az = coord[1].z - coord[0].z;
bx = coord[nbcoord-1].x - coord[0].x;
by = coord[nbcoord-1].y - coord[0].y;
bz = coord[nbcoord-1].z - coord[0].z;
nx = ay * bz - az * by;
ny = az * bx - ax * bz;
nz = ax * by - ay * bx;
r = sqrt(nx*nx + ny*ny + nz*nz);
if (r >= 0.000001) /* avoid division by zero */
{
nx /= r; ny /= r; nz /= r;
glNormal3f(nx,ny,nz);
}
/* glBegin/glEnd */
switch (nbcoord)
{
case 3:
glBegin(GL_TRIANGLES);
break;
case 4:
glBegin(GL_QUADS);
break;
default:
glBegin(GL_POLYGON);
break;
}
/* draw polygon/triangle/quad */
for (ii = 0; ii < nbcoord; ii++)
{
glVertex3f(coord[ii].x * DataScale3D,
coord[ii].y * DataScale3D,
coord[ii].z * DataScale3D);
}
glEnd();
}
/**********************************************/
GLuint Pcb3D_GLCanvas::DisplayCubeforTest(void)
/**********************************************/
{
GLuint gllist = glGenLists( 1 );
glNewList( gllist, GL_COMPILE_AND_EXECUTE );
/* draw six faces of a cube */
glBegin(GL_QUADS);
glNormal3f( 0.0F, 0.0F, 1.0F);
glVertex3f( 0.5F, 0.5F, 0.5F); glVertex3f(-0.5F, 0.5F, 0.5F);
glVertex3f(-0.5F,-0.5F, 0.5F); glVertex3f( 0.5F,-0.5F, 0.5F);
glNormal3f( 0.0F, 0.0F,-1.0F);
glVertex3f(-0.5F,-0.5F,-0.5F); glVertex3f(-0.5F, 0.5F,-0.5F);
glVertex3f( 0.5F, 0.5F,-0.5F); glVertex3f( 0.5F,-0.5F,-0.5F);
glNormal3f( 0.0F, 1.0F, 0.0F);
glVertex3f( 0.5F, 0.5F, 0.5F); glVertex3f( 0.5F, 0.5F,-0.5F);
glVertex3f(-0.5F, 0.5F,-0.5F); glVertex3f(-0.5F, 0.5F, 0.5F);
glNormal3f( 0.0F,-1.0F, 0.0F);
glVertex3f(-0.5F,-0.5F,-0.5F); glVertex3f( 0.5F,-0.5F,-0.5F);
glVertex3f( 0.5F,-0.5F, 0.5F); glVertex3f(-0.5F,-0.5F, 0.5F);
glNormal3f( 1.0F, 0.0F, 0.0F);
glVertex3f( 0.5F, 0.5F, 0.5F); glVertex3f( 0.5F,-0.5F, 0.5F);
glVertex3f( 0.5F,-0.5F,-0.5F); glVertex3f( 0.5F, 0.5F,-0.5F);
glNormal3f(-1.0F, 0.0F, 0.0F);
glVertex3f(-0.5F,-0.5F,-0.5F); glVertex3f(-0.5F,-0.5F, 0.5F);
glVertex3f(-0.5F, 0.5F, 0.5F); glVertex3f(-0.5F, 0.5F,-0.5F);
glEnd();
glEndList();
return gllist;
}
/**********************/
/* class Info_3D_Visu */
/**********************/
/* Constructor */
Info_3D_Visu::Info_3D_Visu(void)
{
int ii;
m_Beginx = m_Beginy = 0.0; /* position of mouse */
m_Zoom = 1.0; /* field of view in degrees */
trackball( m_Quat, 0.0, 0.0, 0.0, 0.0 );
for ( ii = 0; ii < 4; ii++ ) m_Rot[ii] = 0.0;
m_Layers = 1;
m_BoardSettings = NULL;
}
Info_3D_Visu::~Info_3D_Visu(void)
{
}
/*****************************************************************/
/* Classe pour afficher et editer un Vertex (triplet de valeurs),*/
/* en INCHES ou MM ou sans unites */
/*****************************************************************/
WinEDA_VertexCtrl::WinEDA_VertexCtrl(wxWindow *parent, const wxString & title,
wxBoxSizer * BoxSizer,
int units, int internal_unit)
{
wxString text;
wxStaticText * msgtitle;
m_Units = units;
m_Internal_Unit = internal_unit;
if ( title.IsEmpty() ) text = _("Vertex ");
else text = title;
text += ReturnUnitSymbol(units);
msgtitle = new wxStaticText(parent, -1, text, wxDefaultPosition, wxSize(-1,-1), 0 );
BoxSizer->Add(msgtitle, wxGROW|wxLEFT|wxRIGHT|wxTOP|wxBOTTOM|wxADJUST_MINSIZE);
wxFlexGridSizer * GridSizer = new wxFlexGridSizer(3, 2, 0, 0);
BoxSizer->Add(GridSizer, 0, wxGROW|wxALL, 5);
msgtitle = new wxStaticText(parent, -1, wxT("X:"));
GridSizer->Add(msgtitle, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxADJUST_MINSIZE, 5);
m_XValueCtrl = new wxTextCtrl(parent, -1, wxEmptyString, wxDefaultPosition, wxSize(-1,-1), 0 );
GridSizer->Add(m_XValueCtrl, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5);
msgtitle = new wxStaticText(parent, -1, wxT("Y:"), wxDefaultPosition, wxSize(-1,-1), 0 );
GridSizer->Add(msgtitle, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxADJUST_MINSIZE, 5);
m_YValueCtrl = new wxTextCtrl(parent, -1, wxEmptyString, wxDefaultPosition, wxSize(-1,-1), 0 );
GridSizer->Add(m_YValueCtrl, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5);
msgtitle = new wxStaticText(parent, -1, wxT("Z:"), wxDefaultPosition, wxSize(-1,-1), 0 );
GridSizer->Add(msgtitle, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxADJUST_MINSIZE, 5);
m_ZValueCtrl = new wxTextCtrl(parent, -1, wxEmptyString, wxDefaultPosition, wxSize(-1,-1), 0 );
GridSizer->Add(m_ZValueCtrl, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5);
}
WinEDA_VertexCtrl::~WinEDA_VertexCtrl(void)
{
}
/*******************************************/
S3D_Vertex WinEDA_VertexCtrl::GetValue(void)
/*******************************************/
/* Retourne (en unites internes) les coordonnes entrees (en unites utilisateur)
*/
{
S3D_Vertex value;
double dtmp;
m_XValueCtrl->GetValue().ToDouble(&dtmp);
value.x = dtmp;
m_YValueCtrl->GetValue().ToDouble(&dtmp);
value.y = dtmp;
m_ZValueCtrl->GetValue().ToDouble(&dtmp);
value.z = dtmp;
return value;
}
/**************************************************/
void WinEDA_VertexCtrl::SetValue(S3D_Vertex vertex)
/**************************************************/
{
wxString text;
text.Printf( wxT("%f"), vertex.x);
m_XValueCtrl->Clear();
m_XValueCtrl->AppendText(text);
text.Printf(wxT("%f"), vertex.y);
m_YValueCtrl->Clear();
m_YValueCtrl->AppendText(text);
text.Printf(wxT("%f"), vertex.z);
m_ZValueCtrl->Clear();
m_ZValueCtrl->AppendText(text);
}
/*****************************************/
void WinEDA_VertexCtrl::Enable(bool onoff)
/*****************************************/
{
m_XValueCtrl->Enable(onoff);
m_YValueCtrl->Enable(onoff);
m_ZValueCtrl->Enable(onoff);
}

619
3d-viewer/3d_canvas.cpp Normal file
View File

@ -0,0 +1,619 @@
/////////////////////////////////////////////////////////////////////////////
// Name: 3d_canvas.cpp
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#pragma implementation
#pragma interface
#endif
#include "fctsys.h"
#include "trigo.h"
#include "wx/image.h"
#if !wxUSE_GLCANVAS
#error Please set wxUSE_GLCANVAS to 1 in setup.h.
#endif
#include "wx/dataobj.h"
#include "wx/clipbrd.h"
#include "fctsys.h"
#include "common.h"
#include "id.h"
#include "3d_viewer.h"
#include "trackball.h"
/* Tool and button Bitmaps */
#define XPM_3D_MAIN
#include "bitmaps3d.h"
#include "bitmaps.h"
enum onrclick_id
{
ID_POPUP_3D_VIEW_START = 2000,
ID_POPUP_ZOOMIN,
ID_POPUP_ZOOMOUT,
ID_POPUP_VIEW_XPOS,
ID_POPUP_VIEW_XNEG,
ID_POPUP_VIEW_YPOS,
ID_POPUP_VIEW_YNEG,
ID_POPUP_VIEW_ZPOS,
ID_POPUP_VIEW_ZNEG,
ID_POPUP_MOVE3D_LEFT,
ID_POPUP_MOVE3D_RIGHT,
ID_POPUP_MOVE3D_UP,
ID_POPUP_MOVE3D_DOWN,
ID_POPUP_3D_VIEW_END
};
/*
* Pcb3D_GLCanvas implementation
*/
BEGIN_EVENT_TABLE(Pcb3D_GLCanvas, wxGLCanvas)
EVT_SIZE(Pcb3D_GLCanvas::OnSize)
EVT_PAINT(Pcb3D_GLCanvas::OnPaint)
EVT_CHAR(Pcb3D_GLCanvas::OnChar)
EVT_MOUSE_EVENTS(Pcb3D_GLCanvas::OnMouseEvent)
EVT_ERASE_BACKGROUND(Pcb3D_GLCanvas::OnEraseBackground)
EVT_MENU_RANGE(ID_POPUP_3D_VIEW_START, ID_POPUP_3D_VIEW_END,
Pcb3D_GLCanvas::OnPopUpMenu)
END_EVENT_TABLE()
/*************************************************************************/
Pcb3D_GLCanvas::Pcb3D_GLCanvas(WinEDA3D_DrawFrame *parent, wxWindowID id,
int* gl_attrib):
wxGLCanvas(parent, id, wxPoint(-1,-1), wxSize(-1,-1), 0, wxT("Pcb3D_glcanvas"), gl_attrib)
/*************************************************************************/
{
m_init = FALSE;
m_gllist = 0;
m_Parent = parent;
DisplayStatus();
}
/*************************************/
Pcb3D_GLCanvas::~Pcb3D_GLCanvas(void)
/*************************************/
{
ClearLists();
}
/*************************************/
void Pcb3D_GLCanvas::ClearLists(void)
/*************************************/
{
if( m_gllist > 0 )
glDeleteLists(m_gllist, 1);
m_init = FALSE;
m_gllist = 0;
}
/*********************************************/
void Pcb3D_GLCanvas::OnChar(wxKeyEvent& event)
/*********************************************/
{
SetView3D(event.GetKeyCode());
event.Skip();
}
/*********************************************/
void Pcb3D_GLCanvas::SetView3D(int keycode)
/*********************************************/
{
int ii;
double delta_move = 0.7 * g_Parm_3D_Visu.m_Zoom;
switch(keycode)
{
case WXK_LEFT:
g_Draw3d_dx -= delta_move;
break;
case WXK_RIGHT:
g_Draw3d_dx += delta_move;
break;
case WXK_UP:
g_Draw3d_dy += delta_move;
break;
case WXK_DOWN:
g_Draw3d_dy -= delta_move;
break;
case WXK_HOME:
g_Parm_3D_Visu.m_Zoom = 1.0;
g_Draw3d_dx = g_Draw3d_dy = 0;
trackball( g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 );
break;
case WXK_END:
break;
case WXK_F1:
g_Parm_3D_Visu.m_Zoom /= 1.4;
if ( g_Parm_3D_Visu.m_Zoom <= 0.01)
g_Parm_3D_Visu.m_Zoom = 0.01;
break;
case WXK_F2:
g_Parm_3D_Visu.m_Zoom *= 1.4;
break;
case '+':
break;
case '-':
break;
case 'r':
case 'R':
g_Draw3d_dx = g_Draw3d_dy = 0;
for ( ii = 0; ii < 4; ii++ )
g_Parm_3D_Visu.m_Rot[ii] = 0.0;
trackball(g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 );
break;
case 'x':
for ( ii = 0; ii < 4; ii++ )
g_Parm_3D_Visu.m_Rot[ii] = 0.0;
trackball(g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 );
g_Parm_3D_Visu.m_ROTZ = -90;
g_Parm_3D_Visu.m_ROTX = -90;
break;
case 'X':
for ( ii = 0; ii < 4; ii++ )
g_Parm_3D_Visu.m_Rot[ii] = 0.0;
trackball(g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 );
g_Parm_3D_Visu.m_ROTZ = 90;
g_Parm_3D_Visu.m_ROTX = -90;
break;
case 'y':
for ( ii = 0; ii < 4; ii++ )
g_Parm_3D_Visu.m_Rot[ii] = 0.0;
trackball(g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 );
g_Parm_3D_Visu.m_ROTX = -90;
break;
case 'Y':
for ( ii = 0; ii < 4; ii++ )
g_Parm_3D_Visu.m_Rot[ii] = 0.0;
trackball( g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 );
g_Parm_3D_Visu.m_ROTX = -90;
g_Parm_3D_Visu.m_ROTZ = -180;
break;
case 'z':
for ( ii = 0; ii < 4; ii++ )
g_Parm_3D_Visu.m_Rot[ii] = 0.0;
trackball(g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 );
break;
case 'Z':
for ( ii = 0; ii < 4; ii++ )
g_Parm_3D_Visu.m_Rot[ii] = 0.0;
trackball(g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 );
g_Parm_3D_Visu.m_ROTX = -180;
break;
default:
return;
}
DisplayStatus();
Refresh(FALSE);
}
/********************************************************/
void Pcb3D_GLCanvas::OnMouseEvent(wxMouseEvent& event)
/********************************************************/
{
wxSize size(GetClientSize());
float spin_quat[4];
if( event.RightDown() )
{
OnRightClick(event); return;
}
if ( event.m_wheelRotation )
{
if ( event.GetWheelRotation() > 0 )
{
g_Parm_3D_Visu.m_Zoom /= 1.4;
if ( g_Parm_3D_Visu.m_Zoom <= 0.01)
g_Parm_3D_Visu.m_Zoom = 0.01;
}
else g_Parm_3D_Visu.m_Zoom *= 1.4;
DisplayStatus();
Refresh(FALSE);
}
if (event.Dragging())
{
/* drag in progress, simulate trackball */
trackball(spin_quat,
(2.0*g_Parm_3D_Visu.m_Beginx - size.x) / size.x,
(size.y - 2.0*g_Parm_3D_Visu.m_Beginy) / size.y,
( 2.0*event.GetX() - size.x) / size.x,
( size.y - 2.0*event.GetY()) / size.y);
add_quats( spin_quat, g_Parm_3D_Visu.m_Quat, g_Parm_3D_Visu.m_Quat );
/* orientation has changed, redraw mesh */
DisplayStatus();
Refresh(FALSE);
}
g_Parm_3D_Visu.m_Beginx = event.GetX();
g_Parm_3D_Visu.m_Beginy = event.GetY();
}
/*******************************************************/
void Pcb3D_GLCanvas::OnRightClick(wxMouseEvent& event)
/*******************************************************/
/* Construit et affiche un menu Popup lorsque on actionne le bouton droit
de la souris
*/
{
wxPoint pos;
wxMenu PopUpMenu;
pos.x = event.GetX(); pos.y = event.GetY();
wxMenuItem *item = new wxMenuItem(&PopUpMenu, ID_POPUP_ZOOMIN,
_("Zoom +"));
item->SetBitmap(zoom_in_xpm);
PopUpMenu.Append(item);
item = new wxMenuItem(&PopUpMenu, ID_POPUP_ZOOMOUT,
_("Zoom -"));
item->SetBitmap(zoom_out_xpm);
PopUpMenu.Append(item);
PopUpMenu.AppendSeparator();
item = new wxMenuItem(&PopUpMenu, ID_POPUP_VIEW_ZPOS,
_("Top View"));
item->SetBitmap(axis3d_top_xpm);
PopUpMenu.Append(item);
item = new wxMenuItem(&PopUpMenu, ID_POPUP_VIEW_ZNEG,
_("Bottom View"));
item->SetBitmap(axis3d_bottom_xpm);
PopUpMenu.Append(item);
PopUpMenu.AppendSeparator();
item = new wxMenuItem(&PopUpMenu, ID_POPUP_VIEW_XPOS,
_("Right View"));
item->SetBitmap(axis3d_right_xpm);
PopUpMenu.Append(item);
item = new wxMenuItem(&PopUpMenu, ID_POPUP_VIEW_XNEG,
_("Left View"));
item->SetBitmap(axis3d_left_xpm);
PopUpMenu.Append(item);
PopUpMenu.AppendSeparator();
item = new wxMenuItem(&PopUpMenu, ID_POPUP_VIEW_YPOS,
_("Front View"));
item->SetBitmap(axis3d_front_xpm);
PopUpMenu.Append(item);
item = new wxMenuItem(&PopUpMenu, ID_POPUP_VIEW_YNEG,
_("Back View"));
item->SetBitmap(axis3d_back_xpm);
PopUpMenu.Append(item);
PopUpMenu.AppendSeparator();
item = new wxMenuItem(&PopUpMenu, ID_POPUP_MOVE3D_LEFT,
_("Move left <-"));
item->SetBitmap(left_xpm);
PopUpMenu.Append(item);
item = new wxMenuItem(&PopUpMenu, ID_POPUP_MOVE3D_RIGHT,
_("Move right ->"));
item->SetBitmap(right_xpm);
PopUpMenu.Append(item);
item = new wxMenuItem(&PopUpMenu, ID_POPUP_MOVE3D_UP,
_("Move Up ^"));
item->SetBitmap(up_xpm);
PopUpMenu.Append(item);
item = new wxMenuItem(&PopUpMenu, ID_POPUP_MOVE3D_DOWN,
_("Move Down"));
item->SetBitmap(down_xpm);
PopUpMenu.Append(item);
PopupMenu( &PopUpMenu, pos);
}
/*******************************************************/
void Pcb3D_GLCanvas::OnPopUpMenu(wxCommandEvent & event)
/*******************************************************/
{
int key = 0;
switch( event.GetId() )
{
case ID_POPUP_ZOOMIN:
key = WXK_F1;
break;
case ID_POPUP_ZOOMOUT:
key = WXK_F2;
break;
case ID_POPUP_VIEW_XPOS:
key = 'x';
break;
case ID_POPUP_VIEW_XNEG:
key = 'X';
break;
case ID_POPUP_VIEW_YPOS:
key = 'y';
break;
case ID_POPUP_VIEW_YNEG:
key = 'Y';
break;
case ID_POPUP_VIEW_ZPOS:
key = 'z';
break;
case ID_POPUP_VIEW_ZNEG:
key = 'Z';
break;
case ID_POPUP_MOVE3D_LEFT:
key = WXK_LEFT;
break;
case ID_POPUP_MOVE3D_RIGHT:
key = WXK_RIGHT;
break;
case ID_POPUP_MOVE3D_UP:
key = WXK_UP;
break;
case ID_POPUP_MOVE3D_DOWN:
key = WXK_DOWN;
break;
default:
return;
}
SetView3D(key);
}
/***************************************/
void Pcb3D_GLCanvas::DisplayStatus(void)
/***************************************/
{
wxString msg;
msg.Printf(wxT("dx %3.2f"), g_Draw3d_dx);
m_Parent->SetStatusText(msg,1);
msg.Printf(wxT("dy %3.2f"), g_Draw3d_dy);
m_Parent->SetStatusText(msg,2);
msg.Printf(wxT("View: %3.1f"), 45 * g_Parm_3D_Visu.m_Zoom);
m_Parent->SetStatusText(msg,3);
}
/*************************************************/
void Pcb3D_GLCanvas::OnPaint( wxPaintEvent& event )
/*************************************************/
{
wxPaintDC dc(this);
#ifndef __WXMOTIF__
if (!GetContext()) return;
#endif
Redraw();
event.Skip();
}
/**********************************************/
void Pcb3D_GLCanvas::OnSize(wxSizeEvent& event)
/**********************************************/
{
// this is also necessary to update the context on some platforms
wxGLCanvas::OnSize(event);
// set GL viewport (not called by wxGLCanvas::OnSize on all platforms...)
int w, h;
GetClientSize(&w, &h);
#ifndef __WXMOTIF__
if (GetContext())
#endif
{
SetCurrent();
glViewport(0, 0, (GLint) w, (GLint) h);
}
}
/***********************************************************/
void Pcb3D_GLCanvas::OnEraseBackground(wxEraseEvent& event)
/***********************************************************/
{
// Do nothing, to avoid flashing.
}
/****************************/
void Pcb3D_GLCanvas::InitGL()
/****************************/
/* Int parametres generaux pour OPENGL
*/
{
wxSize size = GetClientSize();
if (! m_init)
{
m_init = TRUE;
g_Parm_3D_Visu.m_Zoom = 1.0;
ZBottom = 1.0; ZTop = 10.0;
}
SetCurrent();
/* set viewing projection */
double ratio_HV = (double) size.x / size.y; // Ratio largeur /hauteur de la fenetre d'affichage
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
#define MAX_VIEW_ANGLE 160.0/45.0
if ( g_Parm_3D_Visu.m_Zoom > MAX_VIEW_ANGLE)
g_Parm_3D_Visu.m_Zoom = MAX_VIEW_ANGLE;
gluPerspective( 45.0 * g_Parm_3D_Visu.m_Zoom, ratio_HV, 1 ,10 );
// glFrustum(-1., 1.1F, -1.1F, 1.1F, ZBottom, ZTop);
/* position viewer */
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0F, 0.0F, - ( ZBottom +ZTop) / 2);
/* clear color and depth buffers */
glClearColor( g_Parm_3D_Visu.m_BgColor.m_Red,
g_Parm_3D_Visu.m_BgColor.m_Green,
g_Parm_3D_Visu.m_BgColor.m_Blue, 1 );
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
/* Setup light souces: */
SetLights();
glDisable(GL_CULL_FACE); // show back faces
glEnable(GL_DEPTH_TEST); // Enable z-buferring
glEnable(GL_LINE_SMOOTH);
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE);
/* speedups */
glEnable(GL_DITHER);
glShadeModel(GL_SMOOTH);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
glHint(GL_POLYGON_SMOOTH_HINT, GL_FASTEST);
/* blend */
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
/***********************************/
void Pcb3D_GLCanvas::SetLights(void)
/***********************************/
/* Init sources lumineuses pour OPENGL
*/
{
double light;
GLfloat light_color[4];
SetCurrent();
/* set viewing projection */
light_color[3] = 1.0;
GLfloat Z_axis_pos[4] = { 0.0, 0.0, 3.0, 0.0 };
GLfloat lowZ_axis_pos[4] = { 0.0, 0.0, -3.0, 0.5 };
/* activate light */
light = 1.0;
light_color[0] = light_color[1] = light_color[2]= light;
glLightfv(GL_LIGHT0, GL_POSITION, Z_axis_pos);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_color);
light = 0.3;
light_color[0] = light_color[1] = light_color[2] = light;
glLightfv(GL_LIGHT1, GL_POSITION, lowZ_axis_pos);
glLightfv(GL_LIGHT1, GL_DIFFUSE, light_color);
glEnable(GL_LIGHT0); // White spot on Z axis
glEnable(GL_LIGHT1); // White spot on Z axis ( bottom)
glEnable(GL_LIGHTING);
}
/**********************************************************/
void Pcb3D_GLCanvas::TakeScreenshot(wxCommandEvent & event)
/**********************************************************/
/* Create a Screenshot of the current 3D view.
Output file format is png or jpeg, or image is copied on clipboard
*/
{
wxString FullFileName;
wxString file_ext, mask;
bool fmt_is_jpeg = FALSE;
if ( event.GetId() == ID_MENU_SCREENCOPY_JPEG ) fmt_is_jpeg = TRUE;
if ( event.GetId() != ID_TOOL_SCREENCOPY_TOCLIBBOARD )
{
file_ext = fmt_is_jpeg ? wxT(".jpg") : wxT(".png";)
mask = wxT("*") + file_ext;
FullFileName = m_Parent->m_Parent->GetScreen()->m_FileName;
ChangeFileNameExt(FullFileName,file_ext);
FullFileName =
EDA_FileSelector( _("3D Image filename:"),
wxEmptyString, /* Chemin par defaut */
FullFileName, /* nom fichier par defaut */
file_ext, /* extension par defaut */
mask, /* Masque d'affichage */
this,
wxFD_SAVE,
TRUE
);
if ( FullFileName.IsEmpty() ) return;
}
wxSize image_size = GetClientSize();
wxClientDC dc(this);
wxBitmap bitmap(image_size.x, image_size.y );
wxMemoryDC memdc;
memdc.SelectObject( bitmap );
memdc.Blit(0, 0, image_size.x, image_size.y, &dc, 0, 0);
memdc.SelectObject( wxNullBitmap );
if ( event.GetId() == ID_TOOL_SCREENCOPY_TOCLIBBOARD )
{
wxBitmapDataObject *dobjBmp = new wxBitmapDataObject;
dobjBmp->SetBitmap(bitmap);
if (wxTheClipboard->Open())
{
if ( !wxTheClipboard->SetData(dobjBmp) )
wxLogError( _T("Failed to copy image to clipboard"));
wxTheClipboard->Flush(); /* the data on clipboard
will stay available after the application exits */
wxTheClipboard->Close();
}
}
else
{
wxImage image = bitmap.ConvertToImage();
if ( !image.SaveFile( FullFileName,
fmt_is_jpeg ? wxBITMAP_TYPE_JPEG : wxBITMAP_TYPE_PNG))
wxLogError(wxT("Can't save file"));
image.Destroy();
}
}

119
3d-viewer/3d_class.cpp Normal file
View File

@ -0,0 +1,119 @@
/////////////////////////////////////////////////////////////////////////////
// Name: 3d_class.cpp
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#pragma implementation
#pragma interface
#endif
#include "fctsys.h"
#include "common.h"
#include "3d_struct.h"
#include "3d_viewer.h"
/****************************/
S3D_Vertex::S3D_Vertex(void)
/****************************/
{
x = y = z = 0.0;
}
/**************************************************************************/
S3D_Material::S3D_Material(Struct3D_Master * father, const wxString & name):
EDA_BaseStruct( father, -1)
/**************************************************************************/
{
m_DiffuseColor.x = m_DiffuseColor.y = m_DiffuseColor.z = 1.0;
m_SpecularColor.x = m_SpecularColor.y = m_SpecularColor.z = 1.0;
m_AmbientIntensity = 1.0;
m_Transparency = 0.0;
m_Shininess = 1.0;
m_Name = name;
}
/***********************************/
void S3D_Material::SetMaterial(void)
/***********************************/
{
glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE);
glColor4f(m_DiffuseColor.x * m_AmbientIntensity,
m_DiffuseColor.y * m_AmbientIntensity,
m_DiffuseColor.z * m_AmbientIntensity,
1.0 - m_Transparency );
#if 0
glColorMaterial(GL_FRONT_AND_BACK,GL_SPECULAR);
glColor3f(m_SpecularColor.x, m_SpecularColor.y,m_SpecularColor.z);
#endif
glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE);
}
/****************************************************/
void Struct3D_Master::Copy(Struct3D_Master * pattern)
/****************************************************/
{
m_Shape3DName = pattern->m_Shape3DName;
m_MatScale = pattern->m_MatScale;
m_MatRotation = pattern->m_MatRotation;
m_MatPosition = pattern->m_MatPosition;
m_3D_Drawings = NULL;
m_Materials = NULL;
}
/***************************************************************/
Struct3D_Master::Struct3D_Master(EDA_BaseStruct * StructFather):
EDA_BaseStruct( StructFather, -1)
/***************************************************************/
{
m_MatScale.x = m_MatScale.y = m_MatScale.z = 1.0;
m_3D_Drawings = NULL;
m_Materials = NULL;
}
/***************************************/
Struct3D_Master:: ~Struct3D_Master(void)
/***************************************/
{
Struct3D_Shape * next;
S3D_Material * nextmat;
for( ; m_3D_Drawings != NULL; m_3D_Drawings = next )
{
next = (Struct3D_Shape *) m_3D_Drawings->Pnext;
delete m_3D_Drawings;
}
for( ; m_Materials != NULL; m_Materials = nextmat )
{
nextmat = (S3D_Material *) m_Materials->Pnext;
delete m_Materials;
}
}
/***************************************************************/
Struct3D_Shape::Struct3D_Shape(EDA_BaseStruct * StructFather):
EDA_BaseStruct( StructFather, -1)
/***************************************************************/
{
m_3D_Coord = NULL;
m_3D_CoordIndex = NULL;
m_3D_Points = 0;
}
/***************************************/
Struct3D_Shape:: ~Struct3D_Shape(void)
/***************************************/
{
delete m_3D_Coord;
delete m_3D_CoordIndex;
}

787
3d-viewer/3d_draw.cpp Normal file
View File

@ -0,0 +1,787 @@
//////////////////////////////////////
// Name: 3d_draw.cpp
//////////////////////////////////////
#ifdef __GNUG__
#pragma implementation
#pragma interface
#endif
#include "fctsys.h"
#include "trigo.h"
#if !wxUSE_GLCANVAS
#error Please set wxUSE_GLCANVAS to 1 in setup.h.
#endif
#include "common.h"
#include "pcbstruct.h"
#include "macros.h"
//#include "pcbnew.h"
#include "3d_viewer.h"
#include "trackball.h"
#include "3d_struct.h"
static void Draw3D_FilledCircle(double posx, double posy,
double rayon, double hole_rayon, double zpos);
static void Draw3D_FilledSegment(double startx, double starty,
double endx, double endy,double width, double zpos);
static void Draw3D_FilledCylinder(double posx, double posy,
double rayon, double height, double zpos);
static void Draw3D_FilledSegmentWithHole(double startx, double starty,
double endx, double endy,double width,
double holex, double holey, double holeradius, double zpos);
/**********************************/
void Pcb3D_GLCanvas::Redraw( void )
/**********************************/
{
SetCurrent();
InitGL();
glMatrixMode(GL_MODELVIEW); /* position viewer */
/* transformations */
GLfloat mat[4][4];
build_rotmatrix( mat, g_Parm_3D_Visu.m_Quat );
glMultMatrixf( &mat[0][0] );
glTranslatef(g_Draw3d_dx, g_Draw3d_dy, 0.0F);
glRotatef(g_Parm_3D_Visu.m_Rot[0], 1.0, 0.0, 0.0);
glRotatef(g_Parm_3D_Visu.m_Rot[1], 0.0, 1.0, 0.0);
glRotatef(g_Parm_3D_Visu.m_Rot[2], 0.0, 0.0, 1.0);
if( m_gllist ) glCallList( m_gllist );
else
{
m_gllist = CreateDrawGL_List();
// m_gllist = DisplayCubeforTest(); // Only for test
}
glFlush();
SwapBuffers();
}
/**********************************************/
GLuint Pcb3D_GLCanvas::CreateDrawGL_List(void)
/**********************************************/
/* Creation de la liste des elements a afficher
*/
{
GLuint gllist = glGenLists( 1 );
WinEDA_BasePcbFrame * pcbframe = m_Parent->m_Parent;
BOARD * pcb = pcbframe->m_Pcb;
TRACK * pt_piste;
int ii;
wxBusyCursor dummy;
pcb->ComputeBoundaryBox();
g_Parm_3D_Visu.m_BoardSettings = pcb->m_BoardSettings;
g_Parm_3D_Visu.m_BoardSize = pcb->m_BoundaryBox.GetSize();
g_Parm_3D_Visu.m_BoardPos = pcb->m_BoundaryBox.Centre();
g_Parm_3D_Visu.m_BoardPos.y = - g_Parm_3D_Visu.m_BoardPos.y;
g_Parm_3D_Visu.m_Layers = pcb->m_BoardSettings->m_CopperLayerCount;
g_Parm_3D_Visu.m_BoardScale = 2.0 / MAX(g_Parm_3D_Visu.m_BoardSize.x, g_Parm_3D_Visu.m_BoardSize.y);
float epoxy_width = 1.6; // epoxy width in mm
g_Parm_3D_Visu.m_Epoxy_Width = epoxy_width/2.54 * 1000
* g_Parm_3D_Visu.m_BoardScale;
/* calcul de l'altitude de chaque couche */
for ( ii = 0; ii < 32; ii++ )
{
if ( ii < g_Parm_3D_Visu.m_Layers )
g_Parm_3D_Visu.m_LayerZcoord[ii] = g_Parm_3D_Visu.m_Epoxy_Width * ii
/ (g_Parm_3D_Visu.m_Layers-1);
else g_Parm_3D_Visu.m_LayerZcoord[ii] = g_Parm_3D_Visu.m_Epoxy_Width;
}
GLfloat zpos_cu = 500 * g_Parm_3D_Visu.m_BoardScale;
GLfloat zpos_cmp = g_Parm_3D_Visu.m_Epoxy_Width + zpos_cu;
g_Parm_3D_Visu.m_LayerZcoord[ADHESIVE_N_CU] = -zpos_cu*2;
g_Parm_3D_Visu.m_LayerZcoord[ADHESIVE_N_CMP] = zpos_cmp + zpos_cu;
g_Parm_3D_Visu.m_LayerZcoord[SILKSCREEN_N_CU] = -zpos_cu;
g_Parm_3D_Visu.m_LayerZcoord[SILKSCREEN_N_CMP] = zpos_cmp;
g_Parm_3D_Visu.m_LayerZcoord[DRAW_N] = zpos_cmp + zpos_cu;
g_Parm_3D_Visu.m_LayerZcoord[COMMENT_N] = zpos_cmp + zpos_cu;
g_Parm_3D_Visu.m_LayerZcoord[ECO1_N] = zpos_cmp + zpos_cu;
g_Parm_3D_Visu.m_LayerZcoord[ECO2_N] = zpos_cmp + zpos_cu;
glNewList( gllist, GL_COMPILE_AND_EXECUTE );
glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE);
/* draw axes*/
glEnable(GL_COLOR_MATERIAL);
SetGLColor(WHITE);
glBegin(GL_LINES);
glNormal3f( 0.0, 0.0, 1.0); // Normal is Z axis
glVertex3f( 0.0 , 0.0, 0.0); glVertex3f(1.0, 0.0, 0.0); // X axis
glVertex3f( 0.0 , 0.0, 0.0); glVertex3f(0.0, -1.0, 0.0); // y axis
glNormal3f( 1.0, 0.0, 0.0); // Normal is Y axis
glVertex3f( 0.0 , 0.0, 0.0); glVertex3f(0.0, 0.0, 0.3); // z axis
glEnd();
/* Draw epoxy limits (do not use, works and test in progress)*/
#if 0
glEnable(GL_FOG);
GLfloat param;
// param = GL_LINEAR; glFogfv(GL_FOG_MODE,& param);
param = 0.2; glFogfv(GL_FOG_DENSITY,& param);
param = g_Parm_3D_Visu.m_LayerZcoord[15]; glFogfv(GL_FOG_END,& param);
glBegin(GL_QUADS);
SetGLColor(g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[CMP_N]);
double sx = DataScale3D * g_Parm_3D_Visu.m_BoardSize.x / 2;
double sy = DataScale3D * g_Parm_3D_Visu.m_BoardSize.y / 2;
double zpos = g_Parm_3D_Visu.m_LayerZcoord[15];
glNormal3f( 0.0, 0.0, 1.0); // Normal is Z axis
sx = sy = 0.5;
glVertex3f( -sx, -sy , zpos);
glVertex3f( -sx, sy , zpos);
glVertex3f( sx, sy , zpos);
glVertex3f( sx, -sy , zpos);
glEnd();
glBegin(GL_QUADS);
SetGLColor(g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[CUIVRE_N]);
glNormal3f( 0.0, 0.0, -1.0); // Normal is -Z axis
glVertex3f( -sx, -sy , 0);
glVertex3f( -sx, sy , 0);
glVertex3f( sx, sy , 0);
glVertex3f( sx, -sy , 0);
glEnd();
#endif
/* Translation du tracé du BOARD pour placer son centre en 0, 0 */
glTranslatef(-g_Parm_3D_Visu.m_BoardPos.x * g_Parm_3D_Visu.m_BoardScale,
-g_Parm_3D_Visu.m_BoardPos.y * g_Parm_3D_Visu.m_BoardScale,
0.0F);
glNormal3f( 0.0, 0.0, 1.0); // Normal is Z axis
/* Tracé des pistes : */
for (pt_piste = pcb->m_Track ; pt_piste != NULL ; pt_piste = (TRACK*) pt_piste->Pnext )
{
if ( pt_piste->m_StructType == TYPEVIA )
Draw3D_Via((SEGVIA*)pt_piste);
else Draw3D_Track( pt_piste);
}
/* Tracé des edges */
EDA_BaseStruct * PtStruct;
for ( PtStruct = pcb->m_Drawings; PtStruct != NULL; PtStruct = PtStruct->Pnext)
{
#define STRUCT ((DRAWSEGMENT *) PtStruct)
if( PtStruct->m_StructType != TYPEDRAWSEGMENT ) continue;
Draw3D_DrawSegment(STRUCT);
}
/* tracé des modules */
MODULE * Module = (MODULE*) pcb->m_Modules;
for ( ; Module != NULL; Module = (MODULE *) Module->Pnext )
{
Module->Draw3D(this);
}
glEndList();
/* Test for errors */
GLenum err = glGetError();
if ( err != GL_NO_ERROR )
DisplayError(this, wxT("Error in GL commands") );
return gllist;
}
/************************************************/
void Pcb3D_GLCanvas::Draw3D_Track(TRACK * track)
/************************************************/
{
double zpos;
int color = g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[track->m_Layer];
int layer = track->m_Layer;
double ox, oy, fx, fy;
double w;
if ( color & ITEM_NOT_SHOW ) return;
if ( track->m_Layer == CMP_N ) layer = g_Parm_3D_Visu.m_Layers -1;
zpos = g_Parm_3D_Visu.m_LayerZcoord[layer];
SetGLColor(color);
glNormal3f( 0.0, 0.0, (layer == CUIVRE_N) ? -1.0 : 1.0);
w = track->m_Width * g_Parm_3D_Visu.m_BoardScale;
ox = track->m_Start.x * g_Parm_3D_Visu.m_BoardScale;
oy = track->m_Start.y * g_Parm_3D_Visu.m_BoardScale;
fx = track->m_End.x * g_Parm_3D_Visu.m_BoardScale;
fy = track->m_End.y * g_Parm_3D_Visu.m_BoardScale;
Draw3D_FilledSegment(ox, -oy, fx, -fy, w, zpos);
}
/********************************************/
void Pcb3D_GLCanvas::Draw3D_Via(SEGVIA * via)
/*********************************************/
/* 3D drawing for a VIA (cylinder + filled circles)
*/
{
double x, y, r, hole;
int layer, top_layer, bottom_layer;
double zpos, height;
int color;
r = via->m_Width * g_Parm_3D_Visu.m_BoardScale / 2;
hole = g_Parm_3D_Visu.m_BoardSettings->m_ViaDrill * g_Parm_3D_Visu.m_BoardScale / 2;
x = via->m_Start.x * g_Parm_3D_Visu.m_BoardScale;
y = via->m_Start.y * g_Parm_3D_Visu.m_BoardScale;
via->ReturnLayerPair(&top_layer, &bottom_layer);
// Drawing filled circles:
for ( layer = bottom_layer; layer < g_Parm_3D_Visu.m_Layers; layer++ )
{
zpos = g_Parm_3D_Visu.m_LayerZcoord[layer];
if ( layer < g_Parm_3D_Visu.m_Layers-1 )
color = g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[layer];
else color = g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[CMP_N];
if ( color & ITEM_NOT_SHOW ) continue;
SetGLColor(color);
glNormal3f( 0.0, 0.0, (layer == CUIVRE_N) ? -1.0 : 1.0);
Draw3D_FilledCircle(x, -y, r, hole, zpos);
if ( layer >= top_layer) break;
}
// Drawing hole:
SetGLColor(DARKGRAY);
height = g_Parm_3D_Visu.m_LayerZcoord[top_layer] - g_Parm_3D_Visu.m_LayerZcoord[bottom_layer];
Draw3D_FilledCylinder(x, -y, hole, height, g_Parm_3D_Visu.m_LayerZcoord[bottom_layer]);
}
/*************************************************************/
void Pcb3D_GLCanvas::Draw3D_DrawSegment(DRAWSEGMENT * segment)
/*************************************************************/
{
int layer;
double x, y, xf, yf;
double zpos, w;
int color = g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[segment->m_Layer];
if ( color & ITEM_NOT_SHOW ) return;
SetGLColor(color);
w = segment->m_Width * g_Parm_3D_Visu.m_BoardScale;
x = segment->m_Start.x * g_Parm_3D_Visu.m_BoardScale;
y = segment->m_Start.y * g_Parm_3D_Visu.m_BoardScale;
xf = segment->m_End.x * g_Parm_3D_Visu.m_BoardScale;
yf = segment->m_End.y * g_Parm_3D_Visu.m_BoardScale;
if ( segment->m_Layer == EDGE_N)
{
for ( layer = 0; layer < g_Parm_3D_Visu.m_Layers; layer++ )
{
glNormal3f( 0.0, 0.0, (layer == CUIVRE_N) ? -1.0 : 1.0);
zpos = g_Parm_3D_Visu.m_LayerZcoord[layer];
Draw3D_FilledSegment( x, -y, xf, -yf, w, zpos);
}
}
else
{
zpos = g_Parm_3D_Visu.m_LayerZcoord[segment->m_Layer];
Draw3D_FilledSegment( x, -y, xf, -yf, w, zpos);
}
}
/*********************************************/
void MODULE::Draw3D(Pcb3D_GLCanvas * glcanvas)
/*********************************************/
{
D_PAD * pad = m_Pads;
#if 0
if( ! DisplayOpt.Show_Modules_Cmp )
{
if(m_Layer == CMP_N) return;
}
if( ! DisplayOpt.Show_Modules_Cu )
{
if(m_Layer == CUIVRE_N) return;
}
#endif
/* Draw pads */
glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE);
glNormal3f( 0.0, 0.0, 1.0); // Normal is Z axis
for( ; pad != NULL; pad = (D_PAD*) pad->Pnext )
{
pad->Draw3D(glcanvas);
}
/* Draw module shape: 3D shape if exists (or module edge if not exists)*/
Struct3D_Master * Struct3D = m_3D_Drawings;
bool As3dShape = FALSE;
glPushMatrix();
glTranslatef(m_Pos.x * g_Parm_3D_Visu.m_BoardScale,
-m_Pos.y * g_Parm_3D_Visu.m_BoardScale,
g_Parm_3D_Visu.m_LayerZcoord[m_Layer] );
if ( m_Orient )
{
glRotatef( (double)m_Orient / 10, 0.0, 0.0, 1.0 );
}
if ( m_Layer == CUIVRE_N )
{
glRotatef( 180.0, 0.0, 1.0, 0.0 );
glRotatef( 180.0, 0.0, 0.0, 1.0 );
}
DataScale3D = g_Parm_3D_Visu.m_BoardScale*UNITS3D_TO_UNITSPCB;
for ( ; Struct3D != NULL; Struct3D = (Struct3D_Master *) Struct3D->Pnext )
{
if ( ! Struct3D->m_Shape3DName.IsEmpty() )
{
As3dShape = TRUE;
Struct3D->ReadData();
}
}
glPopMatrix();
if ( ! As3dShape)
{
EDA_BaseStruct * Struct = m_Drawings;
glNormal3f( 0.0, 0.0, 1.0); // Normal is Z axis
for( ;Struct != NULL; Struct = Struct->Pnext )
{
switch( Struct->m_StructType )
{
case TYPETEXTEMODULE:
break;
case TYPEEDGEMODULE:
((EDGE_MODULE *) Struct)->Draw3D(glcanvas);
break;
default: break;
}
}
}
}
/***************************************************/
void EDGE_MODULE::Draw3D(Pcb3D_GLCanvas * glcanvas)
/***************************************************/
{
int ux0, uy0, dx, dy,rayon, StAngle, EndAngle;
double scale, x, y, fx, fy, w, zpos ;
int color = g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[m_Layer];
if ( color & ITEM_NOT_SHOW ) return;
SetGLColor(color);
glNormal3f( 0.0, 0.0, (m_Layer == CUIVRE_N) ? -1.0 : 1.0);
scale = g_Parm_3D_Visu.m_BoardScale;
ux0 = m_Start.x;
uy0 = m_Start.y;
dx = m_End.x;
dy = m_End.y;
zpos = g_Parm_3D_Visu.m_LayerZcoord[m_Layer];
w = m_Width * g_Parm_3D_Visu.m_BoardScale;
switch (m_Shape )
{
case S_SEGMENT:
x = m_Start.x * g_Parm_3D_Visu.m_BoardScale;
y = m_Start.y * g_Parm_3D_Visu.m_BoardScale;
fx = dx * g_Parm_3D_Visu.m_BoardScale;
fy = dy * g_Parm_3D_Visu.m_BoardScale;
Draw3D_FilledSegment(x, -y, fx, -fy, w, zpos);
break ;
case S_CIRCLE:
rayon = (int)hypot((double)(dx-ux0),(double)(dy-uy0) );
/* TO DO */
break;
case S_ARC:
rayon = (int)hypot((double)(dx-ux0),(double)(dy-uy0) );
StAngle = (int)ArcTangente( dy-uy0, dx-ux0 );
EndAngle = StAngle + m_Angle;
/* TO DO */
break;
}
}
/***********************************************/
void D_PAD::Draw3D(Pcb3D_GLCanvas * glcanvas)
/***********************************************/
/* Dessin 3D des pads avec leur trou de percage
*/
{
int ii, ll, layer, nlmax;
int ux0,uy0,
dx,dx0,dy,dy0,
delta_cx, delta_cy,
xc, yc;
int angle, delta_angle;
int coord[4][2];
double fcoord[8][2], f_hole_coord[8][2];
float scale;
double zpos;
wxPoint shape_pos;
double x, y, r, w, hole, holeX, holeY;
double drillx, drilly;
bool Oncu, Oncmp, Both;
int color;
scale = g_Parm_3D_Visu.m_BoardScale;
holeX = (double)m_Drill.x * scale / 2;
holeY = (double)m_Drill.y * scale / 2;
hole = MIN (holeX,holeY);
/* calcul du centre des formes des pads : */
shape_pos = ReturnShapePos();
ux0 = shape_pos.x;
uy0 = shape_pos.y;
xc = ux0;
yc = uy0;
/* le trace depend de la rotation de l'empreinte */
dx = dx0 = m_Size.x >> 1 ;
dy = dy0 = m_Size.y >> 1 ; /* demi dim dx et dy */
angle = m_Orient;
drillx = m_Pos.x * scale;
drilly = m_Pos.y * scale;
/* Draw the pad hole (TODO: draw OBLONG hole)*/
if ( holeX && holeY )
{
SetGLColor(DARKGRAY);
Draw3D_FilledCylinder(drillx, -drilly, hole, g_Parm_3D_Visu.m_LayerZcoord[CMP_N], 0.0);
}
glNormal3f( 0.0, 0.0, 1.0); // Normal is Z axis
nlmax = g_Parm_3D_Visu.m_Layers-1;
Oncu = (m_Masque_Layer & CUIVRE_LAYER) ? TRUE : FALSE;
Oncmp = (m_Masque_Layer & CMP_LAYER) ? TRUE : FALSE;
Both = Oncu && Oncmp;
switch (m_PadShape & 0x7F)
{
case CIRCLE :
x = xc * scale;
y = yc * scale;
r = (double)dx * scale;
for ( layer = CUIVRE_N; layer <= CMP_N; layer ++)
{
if (layer && (layer == nlmax) ) layer = CMP_N;
if ( (layer == CMP_N) && ! Oncmp ) continue;
if ( (layer == CUIVRE_N) && ! Oncu ) continue;
if ( (layer > CUIVRE_N) && (layer < CMP_N) && !Both) continue;
color = g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[layer];
if ( color & ITEM_NOT_SHOW ) continue;
SetGLColor(color);
glNormal3f( 0.0, 0.0, (layer == CUIVRE_N) ? -1.0 : 1.0);
zpos = g_Parm_3D_Visu.m_LayerZcoord[layer];
Draw3D_FilledCircle(x, -y, r, hole, zpos);
}
break;
case OVALE :
/* calcul de l'entraxe de l'ellipse */
if( dx > dy ) /* ellipse horizontale */
{
delta_cx = dx - dy; delta_cy = 0;
w = m_Size.y * scale;
delta_angle = angle+900;
}
else /* ellipse verticale */
{
delta_cx = 0; delta_cy = dy - dx;
w = m_Size.x * scale;
delta_angle = angle;
}
RotatePoint(&delta_cx, &delta_cy, angle);
{
double ox, oy, fx, fy;
ox = (double)(ux0 + delta_cx) * scale;
oy = (double)(uy0 + delta_cy) * scale;
fx = (double)(ux0 - delta_cx) * scale;
fy = (double)(uy0 - delta_cy) * scale;
for ( layer = CUIVRE_N; layer <= CMP_N; layer ++)
{
if (layer && (layer == nlmax) ) layer = CMP_N;
if ( (layer == CMP_N) && ! Oncmp ) continue;
if ( (layer == CUIVRE_N) && ! Oncu ) continue;
if ( (layer > CUIVRE_N) && (layer < CMP_N) && !Both) continue;
color = g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[layer];
glNormal3f( 0.0, 0.0, (layer == CUIVRE_N) ? -1.0 : 1.0);
if ( color & ITEM_NOT_SHOW ) continue;
SetGLColor(color);
zpos = g_Parm_3D_Visu.m_LayerZcoord[layer];
Draw3D_FilledSegmentWithHole(ox, -oy, fx, -fy, w, drillx, -drilly, hole, zpos);
}
}
break;
case RECT :
case SPECIAL_PAD:
case TRAPEZE:
{
int ddx, ddy ;
ddx = m_DeltaSize.x >> 1 ;
ddy = m_DeltaSize.y >> 1 ; /* demi dim dx et dy */
coord[0][0] = - dx - ddy;
coord[0][1] = + dy + ddx;
coord[1][0] = - dx + ddy;
coord[1][1] = - dy - ddx;
coord[2][0] = + dx - ddy;
coord[2][1] = - dy + ddx;
coord[3][0] = + dx + ddy;
coord[3][1] = + dy - ddx;
for (ii = 0; ii < 4; ii++)
{
RotatePoint(&coord[ii][0],&coord[ii][1], angle);
coord[ii][0] += ux0;
coord[ii][1] += uy0;
ll = ii*2;
fcoord[ll][0] = coord[ii][0] * scale;
fcoord[ll][1] = coord[ii][1] * scale;
}
for (ii = 0; ii < 7; ii+=2)
{
ll = ii+2; if (ll > 7) ll -= 8;
fcoord[ii+1][0] = (fcoord[ii][0] + fcoord[ll][0])/2;
fcoord[ii+1][1] = (fcoord[ii][1] + fcoord[ll][1])/2;
}
for (ii = 0; ii < 8; ii++)
{
f_hole_coord[ii][0] = -hole*0.707;
f_hole_coord[ii][1] = hole*0.707;
RotatePoint(&f_hole_coord[ii][0], &f_hole_coord[ii][1],
angle -(ii * 450) );
f_hole_coord[ii][0] += drillx;
f_hole_coord[ii][1] += drilly;
}
for ( layer = CUIVRE_N; layer <= CMP_N; layer ++)
{
if (layer && (layer == nlmax) ) layer = CMP_N;
if ( (layer == CMP_N) && ! Oncmp ) continue;
if ( (layer == CUIVRE_N) && ! Oncu ) continue;
if ( (layer > CUIVRE_N) && (layer < CMP_N) && !Both) continue;
color = g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[layer];
glNormal3f( 0.0, 0.0, (layer == CUIVRE_N) ? -1.0 : 1.0);
if ( color & ITEM_NOT_SHOW ) continue;
SetGLColor(color);
zpos = g_Parm_3D_Visu.m_LayerZcoord[layer];
glBegin(GL_QUAD_STRIP);
for ( ii = 0; ii < 8; ii++ )
{
glVertex3f( f_hole_coord[ii][0], -f_hole_coord[ii][1] , zpos);
glVertex3f( fcoord[ii][0], -fcoord[ii][1] , zpos);
}
glVertex3f( f_hole_coord[0][0], -f_hole_coord[0][1] , zpos);
glVertex3f( fcoord[0][0], -fcoord[0][1] , zpos);
glEnd();
}
break;
default:
break;
}
}
}
/*************************/
void SetGLColor(int color)
/*************************/
{
double red, green,blue;
StructColors colordata = ColorRefs[color & MASKCOLOR];
red = colordata.m_Red / 255.0;
blue = colordata.m_Blue / 255.0;
green = colordata.m_Green / 255.0;
glColor3f(red, green,blue);
}
/********************************************************/
static void Draw3D_FilledCircle(double posx, double posy,
double rayon, double hole, double zpos)
/********************************************************/
{
int ii, slice = 16;
double x, y;
glBegin(GL_QUAD_STRIP);
for ( ii = 0; ii <= slice; ii++ )
{
x = hole; y = 0.0;
RotatePoint(&x, &y, ii * 225);
glVertex3f( x + posx, y + posy, zpos);
x = rayon; y = 0.0;
RotatePoint(&x, &y, ii * 225);
glVertex3f( x + posx, y + posy, zpos);
}
glEnd();
}
/*********************************************************/
static void Draw3D_FilledCylinder(double posx, double posy,
double rayon, double height, double zpos)
/*********************************************************/
{
int ii;
double x, y;
#define NB_SEGM 12
S3D_Vertex coords[4];
double tmp = DataScale3D;
DataScale3D = 1.0; //les coord sont deja a l'echelle pour Set_Object_Data();
coords[0].x = coords[1].x = posx + rayon;
coords[0].y = coords[1].y = posy;
coords[0].z = coords[3].z = zpos;
coords[1].z = coords[2].z = zpos + height;
for ( ii = 0; ii <= NB_SEGM; ii++ )
{
x = rayon; y = 0.0;
RotatePoint(&x, &y, ii * (3600/NB_SEGM));
coords[2].x = coords[3].x = posx + x;
coords[2].y = coords[3].y = posy + y;
Set_Object_Data(coords, 4 );
coords[0].x = coords[2].x;
coords[0].y = coords[2].y;
coords[1].x = coords[3].x;
coords[1].y = coords[3].y;
}
glNormal3f( 0.0, 0.0, 1.0); // Normal is Z axis
DataScale3D = tmp;
}
/*****************************************************************/
static void Draw3D_FilledSegment(double startx, double starty,
double endx, double endy,double width, double zpos)
/*****************************************************************/
/* trace un polygone semblable a un segment a bouts ronds
*/
{
double dx, dy, x, y, firstx=0, firsty=0;
int ii, angle;
/* on va calculer les coordonnées du segment supposé horizontal,
puis tourner les cordonnes de l'angle voulu */
dx = endx - startx; dy = endy - starty;
angle = (int)(( atan2( dy, dx ) / M_PI * 1800)+0.5) ;
RotatePoint(&dx, &dy, angle); // apres rotation: dx = longueur du segment
// dy = 0;
width /= 2;
glBegin(GL_POLYGON);
// tracé de l'arrondi a droite (1er demi polygone a la fin du segment)
for ( ii = 0; ii <= 8; ii++ )
{
x = 0.0; y =-width;
RotatePoint(&x, &y, -ii * 225);
x += dx;
RotatePoint(&x, &y, -angle);
glVertex3f( startx + x, starty+y, zpos);
if ( ii == 0 )
{
firstx = startx + x;
firsty = starty + y;
}
}
// tracé de l'arrondi a gauche (2ieme demi polygone a l'origine du segment)
for ( ii = 0; ii <= 8; ii++ )
{
int jj = ii * 225;
x = 0.0; y = width;
RotatePoint(&x, &y, -angle -jj);
glVertex3f( startx + x, starty+y, zpos);
}
glVertex3f( firstx, firsty, zpos);
glEnd();
}
/*****************************************************************/
static void Draw3D_FilledSegmentWithHole(double startx, double starty,
double endx, double endy,double width,
double holex, double holey, double holeradius, double zpos)
/*****************************************************************/
/* trace un polygone semblable a un segment a bouts ronds avec trou
*/
{
double x, y, xin, yin;
double firstx=0, firsty=0, firstxin=0, firstyin=0;
int ii, angle, theta;
/* on va calculer les coordonnées du segment supposé horizontal,
puis tourner les cordonnes de l'angle voulu
Tous des calculs se font avec startx, starty comme origine du tracé */
endx -= startx; endy -= starty;
holex -= startx; holey -= starty;
angle = (int)(( atan2( endy, endx ) / M_PI * 1800)+0.5) ;
RotatePoint(&endx, &endy, angle); // apres rotation: endx = longueur du segment
// endy = 0;
RotatePoint(&holex, &holey, angle);
width /= 2;
glBegin(GL_QUAD_STRIP);
// tracé de l'arrondi a droite (1er demi polygone a la fin du segment)
// autour du demi-trou de percage
for ( ii = 0; ii <= 8; ii++ )
{
x = 0.0; y = -width;
xin = 0.0; yin = - holeradius;
theta = -ii * 225;
RotatePoint(&x, &y, theta);
RotatePoint(&xin, &yin, theta);
x += endx;
RotatePoint(&x, &y, -angle);
xin += holex;
RotatePoint(&xin, &yin, -angle);
glVertex3f( startx + xin, starty+yin, zpos);
glVertex3f( startx + x, starty+y, zpos);
if ( ii == 0 ) // Memorisation du point de départ du tracé
{
firstx = startx + x;
firsty = starty + y;
firstxin = startx + xin;
firstyin = starty + yin;
}
}
// tracé de l'arrondi a gauche (2ieme demi polygone a l'origine du segment)
for ( ii = 0; ii <= 8; ii++ )
{
theta = - ii * 225;
x = 0.0; y = width;
RotatePoint(&x, &y, -angle + theta);
xin = 0.0; yin = holeradius;
RotatePoint(&xin, &yin, theta);
xin += holex;
RotatePoint(&xin, &yin, -angle);
glVertex3f( startx + xin,starty + yin, zpos);
glVertex3f( startx + x, starty + y, zpos);
}
glVertex3f( firstxin, firstyin, zpos);
glVertex3f( firstx, firsty, zpos);
glEnd();
}

322
3d-viewer/3d_frame.cpp Normal file
View File

@ -0,0 +1,322 @@
/////////////////////////////////////////////////////////////////////////////
// Name: 3d_frame.cpp
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#pragma implementation
#pragma interface
#endif
#include "fctsys.h"
#include <wx/colordlg.h>
#if !wxUSE_GLCANVAS
#error Please set wxUSE_GLCANVAS to 1 in setup.h.
#endif
#include "bitmaps.h"
#include "id.h"
#define VIEWER_MAIN
#include "3d_viewer.h"
#include "trackball.h"
BEGIN_EVENT_TABLE(WinEDA3D_DrawFrame, wxFrame)
EVT_TOOL_RANGE(ID_ZOOM_PLUS_BUTT, ID_ZOOM_PAGE_BUTT,
WinEDA3D_DrawFrame::Process_Zoom)
EVT_TOOL_RANGE(ID_START_COMMAND_3D, ID_END_COMMAND_3D,
WinEDA3D_DrawFrame::Process_Special_Functions)
EVT_MENU(wxID_EXIT, WinEDA3D_DrawFrame::Exit3DFrame)
EVT_MENU(ID_MENU_SCREENCOPY_PNG, WinEDA3D_DrawFrame::Process_Special_Functions)
EVT_MENU(ID_MENU_SCREENCOPY_JPEG, WinEDA3D_DrawFrame::Process_Special_Functions)
EVT_CLOSE(WinEDA3D_DrawFrame::OnCloseWindow)
END_EVENT_TABLE()
/*******************************************************************/
WinEDA3D_DrawFrame::WinEDA3D_DrawFrame(WinEDA_BasePcbFrame * parent,
WinEDA_App *app_parent, const wxString& title ):
wxFrame(parent, DISPLAY3D_FRAME, title,
wxPoint(-1,-1), wxSize(-1,-1) )
/*******************************************************************/
{
m_FrameName = wxT("Frame3D");
m_Canvas = NULL;
m_Parent = parent;
m_ParentAppl = app_parent;
m_HToolBar = NULL;
m_VToolBar = NULL;
m_InternalUnits = 10000; // Unites internes = 1/10000 inch
// Give it an icon
SetIcon(wxICON(icon_w3d));
GetSettings();
SetSize(m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y);
// Create the status line
int dims[5] = { -1, 100, 100, 100, 140};
CreateStatusBar(5);
SetStatusWidths(5,dims);
ReCreateMenuBar();
ReCreateHToolbar();
// ReCreateAuxiliaryToolbar();
ReCreateVToolbar();
// Make a Pcb3D_GLCanvas
m_Canvas = new Pcb3D_GLCanvas(this, -1, gl_attrib );
/* init OpenGL once */
m_Canvas->InitGL();
}
/***********************************************************/
void WinEDA3D_DrawFrame::Exit3DFrame(wxCommandEvent& event)
/***********************************************************/
{
Close(TRUE);
}
/***********************************************************/
void WinEDA3D_DrawFrame::OnCloseWindow(wxCloseEvent & Event)
/***********************************************************/
{
SaveSettings();
if ( m_Parent )
{
m_Parent->m_Draw3DFrame = NULL;
}
Destroy();
}
/******************************************/
void WinEDA3D_DrawFrame::GetSettings(void)
/******************************************/
{
wxString text;
wxConfig * Config = m_ParentAppl->m_EDA_Config; // Current config used by application
if( m_ParentAppl->m_EDA_Config )
{
text = m_FrameName + wxT("Pos_x");
Config->Read(text, &m_FramePos.x);
text = m_FrameName + wxT("Pos_y");
Config->Read(text, &m_FramePos.y);
text = m_FrameName + wxT("Size_x");
Config->Read(text, &m_FrameSize.x, 600);
text = m_FrameName + wxT("Size_y");
Config->Read(text, &m_FrameSize.y, 400);
Config->Read(wxT("BgColor_Red"), &g_Parm_3D_Visu.m_BgColor.m_Red, 0.0);
Config->Read(wxT("BgColor_Green"), &g_Parm_3D_Visu.m_BgColor.m_Green, 0.0);
Config->Read(wxT("BgColor_Blue"), &g_Parm_3D_Visu.m_BgColor.m_Blue, 0.0);
}
#ifdef __WXMAC__
// for macOSX, the window must be below system (macOSX) toolbar
if ( m_FramePos.y < GetMBarHeight() ) m_FramePos.y = GetMBarHeight();
#endif
}
/*******************************************/
void WinEDA3D_DrawFrame::SaveSettings(void)
/*******************************************/
{
wxString text;
wxConfig * Config = m_ParentAppl->m_EDA_Config; // Current config used by application
if( ! Config ) return;
Config->Write(wxT("BgColor_Red"), g_Parm_3D_Visu.m_BgColor.m_Red);
Config->Write(wxT("BgColor_Green"), g_Parm_3D_Visu.m_BgColor.m_Green);
Config->Write(wxT("BgColor_Blue"), g_Parm_3D_Visu.m_BgColor.m_Blue);
if( IsIconized() ) return;
m_FrameSize = GetSize();
m_FramePos = GetPosition();
text = m_FrameName + wxT("Pos_x");
Config->Write(text, (long)m_FramePos.x);
text = m_FrameName + wxT("Pos_y");
Config->Write(text, (long)m_FramePos.y);
text = m_FrameName + wxT("Size_x");
Config->Write(text, (long)m_FrameSize.x);
text = m_FrameName + wxT("Size_y");
Config->Write(text, (long)m_FrameSize.y);
}
/***********************************************************/
void WinEDA3D_DrawFrame::Process_Zoom(wxCommandEvent& event)
/***********************************************************/
{
int ii;
switch(event.GetId())
{
case ID_ZOOM_PAGE_BUTT:
for ( ii = 0; ii < 4; ii++ ) g_Parm_3D_Visu.m_Rot[ii] = 0.0;
g_Parm_3D_Visu.m_Zoom = 1.0;
g_Draw3d_dx = g_Draw3d_dy = 0;
trackball(g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 );
break;
case ID_ZOOM_PLUS_BUTT:
g_Parm_3D_Visu.m_Zoom /= 1.2;
if ( g_Parm_3D_Visu.m_Zoom <= 0.01)
g_Parm_3D_Visu.m_Zoom = 0.01;
break;
case ID_ZOOM_MOINS_BUTT:
g_Parm_3D_Visu.m_Zoom *= 1.2;
break;
case ID_ZOOM_REDRAW_BUTT:
break;
default:
return;
}
m_Canvas->DisplayStatus();
m_Canvas->Refresh(FALSE);
}
/************************************************************************/
void WinEDA3D_DrawFrame::OnLeftClick(wxDC * DC, const wxPoint& MousePos)
/************************************************************************/
{
}
/*******************************************************************************/
void WinEDA3D_DrawFrame::OnRightClick(const wxPoint& MousePos, wxMenu * PopMenu)
/*******************************************************************************/
{
}
/************************************/
int WinEDA3D_DrawFrame::BestZoom(void)
/************************************/
// Retourne le meilleur zoom
{
return 1;
}
/*******************************************************************/
void WinEDA3D_DrawFrame::RedrawActiveWindow(wxDC * DC, bool EraseBg)
/*******************************************************************/
{
}
/************************************************************************/
void WinEDA3D_DrawFrame::Process_Special_Functions(wxCommandEvent& event)
/************************************************************************/
{
#define ROT_ANGLE 10.0
switch(event.GetId())
{
case ID_RELOAD3D_BOARD:
NewDisplay();
break;
case ID_ROTATE3D_X_POS:
g_Parm_3D_Visu.m_ROTX += ROT_ANGLE;
break;
case ID_ROTATE3D_X_NEG:
g_Parm_3D_Visu.m_ROTX -= ROT_ANGLE;
break;
case ID_ROTATE3D_Y_POS:
g_Parm_3D_Visu.m_ROTY += ROT_ANGLE;
break;
case ID_ROTATE3D_Y_NEG:
g_Parm_3D_Visu.m_ROTY -= ROT_ANGLE;
break;
case ID_ROTATE3D_Z_POS:
g_Parm_3D_Visu.m_ROTZ += ROT_ANGLE;
break;
case ID_ROTATE3D_Z_NEG:
g_Parm_3D_Visu.m_ROTZ -= ROT_ANGLE;
break;
case ID_MOVE3D_LEFT:
m_Canvas->SetView3D(WXK_LEFT);
return;
case ID_MOVE3D_RIGHT:
m_Canvas->SetView3D(WXK_RIGHT);
return;
case ID_MOVE3D_UP:
m_Canvas->SetView3D(WXK_UP);
return;
case ID_MOVE3D_DOWN:
m_Canvas->SetView3D(WXK_DOWN);
return;
case ID_TOOL_SCREENCOPY_TOCLIBBOARD:
case ID_MENU_SCREENCOPY_PNG:
case ID_MENU_SCREENCOPY_JPEG:
m_Canvas->TakeScreenshot(event);
break;
case ID_MENU3D_BGCOLOR_SELECTION:
Set3DBgColor();
return;
default:
wxMessageBox(
wxT("WinEDA3D_DrawFrame::Process_Special_Functions() error: unknown command"));
return;
}
m_Canvas->DisplayStatus();
m_Canvas->Refresh(FALSE);
}
/*****************************************/
void WinEDA3D_DrawFrame::NewDisplay(void)
/*****************************************/
{
m_Canvas->ClearLists();
m_Canvas->InitGL();
m_Canvas->DisplayStatus();
m_Canvas->Refresh(FALSE);
}
/******************************************/
void WinEDA3D_DrawFrame::Set3DBgColor(void)
/******************************************/
/* called to set the background color of the 3D scene
*/
{
S3D_Color color;
wxColour newcolor, oldcolor;
oldcolor.Set((int) round(g_Parm_3D_Visu.m_BgColor.m_Red*255),
(int) round(g_Parm_3D_Visu.m_BgColor.m_Green*255),
(int) round(g_Parm_3D_Visu.m_BgColor.m_Blue*255));
newcolor = wxGetColourFromUser(this, oldcolor);
if ( newcolor != oldcolor )
{
g_Parm_3D_Visu.m_BgColor.m_Red = (double) newcolor.Red() / 255.0;
g_Parm_3D_Visu.m_BgColor.m_Green = (double) newcolor.Green() / 255.0;
g_Parm_3D_Visu.m_BgColor.m_Blue = (double) newcolor.Blue() / 255.0;
NewDisplay();
}
}

518
3d-viewer/3d_read_mesh.cpp Normal file
View File

@ -0,0 +1,518 @@
/////////////////////////////////////////////////////////////////////////////
// Name: 3d_read_mesh.cpp
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#pragma implementation
#pragma interface
#endif
#include "fctsys.h"
#include "common.h"
#include "macros.h"
#include "3d_struct.h"
#include "3d_viewer.h"
/***********************************/
int Struct3D_Master:: ReadData(void)
/************************************/
{
char line[1024], *text;
wxString fullfilename;
FILE * file;
int LineNum = 0;
if ( m_Shape3DName.IsEmpty() )
{
return 1;
}
if ( wxIsAbsolutePath(m_Shape3DName) ) fullfilename.Empty();
else fullfilename = g_RealLibDirBuffer + LIB3D_PATH;
fullfilename += m_Shape3DName;
#if defined (__WINDOWS__)
fullfilename.Replace(UNIX_STRING_DIR_SEP,WIN_STRING_DIR_SEP);
#else
#if defined (__UNIX__)
fullfilename.Replace(WIN_STRING_DIR_SEP,UNIX_STRING_DIR_SEP);
#endif
#endif
file = wxFopen( fullfilename, wxT("rt") );
if ( file == NULL )
{
return -1;
}
while ( GetLine(file, line, &LineNum, 512) )
{
text = strtok(line, " \t\n\r");
if ( stricmp (text, "DEF" ) == 0 )
{
while ( GetLine(file, line, &LineNum, 512) )
{
text = strtok(line, " \t\n\r");
if ( text == NULL ) continue;
if ( * text == '}' ) break;
if ( stricmp (text, "children") == 0 )
{
ReadChildren(file, &LineNum);
}
}
}
}
fclose (file);
return 0;
}
/*********************************************************/
int Struct3D_Master:: ReadMaterial(FILE * file, int *LineNum)
/*********************************************************/
/*
analyse la description du type:
material DEF yellow Material {
diffuseColor 1.00000 1.00000 0.00000e+0
emissiveColor 0.00000e+0 0.00000e+0 0.00000e+0
specularColor 1.00000 1.00000 1.00000
ambientIntensity 1.00000
transparency 0.00000e+0
shininess 1.00000
}
ou du type:
material USE yellow
*/
{
char line[512], * text, * command;
wxString mat_name;
S3D_Material * material = NULL;
// Lecture de la commande:
command = strtok(NULL, " \t\n\r");
text = strtok(NULL, " \t\n\r");
mat_name = CONV_FROM_UTF8(text);
if ( stricmp(command, "USE") == 0 )
{
for ( material = m_Materials; material != NULL;
material = (S3D_Material *) material->Pnext)
{
if ( material->m_Name == mat_name)
{
material->SetMaterial();
return 1;
}
}
printf("ReadMaterial error: material not found\n");
return 0;
}
if ( stricmp(command, "DEF") == 0 )
{
material = new S3D_Material(this, mat_name);
material->Pnext = m_Materials;
m_Materials = material;
while ( GetLine(file, line, LineNum, 512) )
{
text = strtok(line," \t\n\r");
if ( text == NULL ) continue;
if ( text[0] == '}' )
{
material->SetMaterial();
return 0;
}
if ( stricmp (text, "diffuseColor") == 0 )
{
text = strtok(NULL," \t\n\r");
material->m_DiffuseColor.x = atof(from_point(text));
text = strtok(NULL," \t\n\r");
material->m_DiffuseColor.y = atof(from_point(text));
text = strtok(NULL," \t\n\r");
material->m_DiffuseColor.z = atof(from_point(text));
}
else if ( stricmp (text, "emissiveColor") == 0 )
{
text = strtok(NULL," \t\n\r");
material->m_EmissiveColor.x = atof(from_point(text));
text = strtok(NULL," \t\n\r");
material->m_EmissiveColor.y = atof(from_point(text));
text = strtok(NULL," \t\n\r");
material->m_EmissiveColor.z = atof(from_point(text));
}
else if ( strnicmp (text, "specularColor", 13 ) == 0 )
{
text = strtok(NULL," \t\n\r");
material->m_SpecularColor.x = atof(from_point(text));
text = strtok(NULL," \t\n\r");
material->m_SpecularColor.y = atof(from_point(text));
text = strtok(NULL," \t\n\r");
material->m_SpecularColor.z = atof(from_point(text));
}
else if ( strnicmp (text, "ambientIntensity", 16 ) == 0 )
{
text = strtok(NULL," \t\n\r");
material->m_AmbientIntensity = atof(from_point(text));
}
else if ( strnicmp (text, "transparency", 12 ) == 0 )
{
text = strtok(NULL," \t\n\r");
material->m_Transparency = atof(from_point(text));
}
else if ( strnicmp (text, "shininess", 9 ) == 0 )
{
text = strtok(NULL," \t\n\r");
material->m_Shininess = atof(from_point(text));
}
}
}
return -1;
}
/**********************************************************/
int Struct3D_Master::ReadChildren(FILE * file, int *LineNum)
/***********************************************************/
{
char line[1024], *text;
while ( GetLine(file, line, LineNum, 512) )
{
text = strtok(line, " \t\n\r");
if ( * text == ']' ) return 0;
if ( * text == ',' ) continue;
if ( stricmp (text, "Shape" ) == 0 )
{
ReadShape(file, LineNum);
}
else
{
printf ("ReadChildren error line %d <%s> \n", *LineNum, text);
break;
}
}
return 1;
}
/********************************************************/
int Struct3D_Master::ReadShape(FILE * file, int *LineNum)
/********************************************************/
{
char line[1024], *text;
int err = 1;
while ( GetLine(file, line, LineNum, 512) )
{
text = strtok(line, " \t\n\r");
if ( * text == '}' )
{
err = 0;
break;
}
if ( stricmp (text, "appearance" ) == 0 )
{
ReadAppearance(file, LineNum);
}
else if ( stricmp (text, "geometry" ) == 0 )
{
ReadGeometry(file, LineNum);
}
else
{
printf ("ReadShape error line %d <%s> \n", *LineNum, text);
break;
}
}
return err;
}
/*************************************************************/
int Struct3D_Master::ReadAppearance(FILE * file, int *LineNum)
/*************************************************************/
{
char line[1024], *text;
int err = 1;
while ( GetLine(file, line, LineNum, 512) )
{
text = strtok(line, " \t\n\r");
if ( * text == '}' )
{
err = 0; break;
}
if ( stricmp (text, "material" ) == 0 )
{
ReadMaterial(file, LineNum );
}
else
{
printf ("ReadAppearance error line %d <%s> \n", *LineNum, text);
break;
}
}
return err;
}
#define BUFSIZE 2000
/************************************************************************************/
double * ReadCoordsList(FILE * file, char * text_buffer, int * bufsize, int *LineNum)
/************************************************************************************/
/* Read a coordinate liste like:
coord Coordinate { point [
-5.24489 6.57640e-3 -9.42129e-2,
-5.11821 6.57421e-3 0.542654,
-3.45868 0.256565 1.32000 ] }
or:
normal Normal { vector [
0.995171 -6.08102e-6 9.81541e-2,
0.923880 -4.09802e-6 0.382683,
0.707107 -9.38186e-7 0.707107]
}
Return the coordinate list
text_buffer contains the first line of this node :
"coord Coordinate { point ["
*/
{
double * data_list = NULL;
unsigned int ii = 0, jj = 0, nn = BUFSIZE;
char * text;
bool HasData = FALSE;
bool StartData = FALSE;
bool EndData = FALSE;
bool EndNode = FALSE;
char string_num[512];
text = text_buffer;
while ( !EndNode )
{
if ( * text == 0 ) // Needs data !
{
text = text_buffer;
GetLine(file, text_buffer, LineNum, 512);
}
while ( !EndNode && *text )
{
switch ( *text )
{
case '[':
StartData = TRUE;
jj = 0; string_num[jj] = 0;
data_list = (double *) MyZMalloc(nn * sizeof(double) );
break;
case '}':
EndNode = TRUE;
break;
case ']':
case '\t':
case ' ':
case ',':
jj = 0;
if ( ! StartData || !HasData) break;
data_list[ii] = atof(from_point(string_num));
string_num[jj] = 0;
ii++;
if ( ii >= nn )
{
nn *= 2;
data_list = (double *) realloc(data_list, (nn * sizeof(double)) );
}
HasData = FALSE;
if ( *text == ']' )
{
StartData = FALSE;
EndData = TRUE;
}
break;
default:
if ( ! StartData ) break;
if ( jj >= sizeof(string_num) ) break;
string_num[jj] = *text;
jj++; string_num[jj] = 0;
HasData = TRUE;
break;
}
text++;
}
}
if ( data_list )
data_list = (double *) realloc(data_list, (ii * sizeof(double)) );
if ( bufsize ) *bufsize = ii;
return data_list;
}
/***********************************************************/
int Struct3D_Master::ReadGeometry(FILE * file, int *LineNum)
/***********************************************************/
{
char line[1024], buffer[1024], *text;
int err = 1;
int nn = BUFSIZE;
double * points = NULL;
int * index = NULL;
while ( GetLine(file, line, LineNum, 512) )
{
strcpy(buffer,line);
text = strtok(buffer, " \t\n\r");
if ( * text == '}' )
{
err = 0; break;
}
if ( stricmp (text, "normalPerVertex" ) == 0 )
{
text = strtok(NULL, " ,\t\n\r");
if( stricmp (text, "TRUE") == 0 )
{
}
else
{
}
continue;
}
if ( stricmp (text, "colorPerVertex" ) == 0 )
{
text = strtok(NULL, " ,\t\n\r");
if( stricmp (text, "TRUE") == 0 )
{
}
else
{
}
continue;
}
if ( stricmp (text, "normal" ) == 0 )
{
int coord_number;
double * buf_points = ReadCoordsList(file, line, &coord_number, LineNum);
continue;
free(buf_points);
continue;
}
if ( stricmp (text, "normalIndex" ) == 0 )
{
while ( GetLine(file, line, LineNum, 512) )
{
text = strtok(line, " ,\t\n\r");
while ( text )
{
if ( *text == ']') break;
text = strtok(NULL, " ,\t\n\r");
}
if ( text && (*text == ']') ) break;
}
continue;
}
if ( stricmp (text, "color" ) == 0 )
{
int coord_number;
double * buf_points = ReadCoordsList(file, line, &coord_number, LineNum);
continue;
free(buf_points);
continue;
}
if ( stricmp (text, "colorIndex" ) == 0 )
{
while ( GetLine(file, line, LineNum, 512) )
{
text = strtok(line, " ,\t\n\r");
while ( text )
{
if ( *text == ']') break;
text = strtok(NULL, " ,\t\n\r");
}
if ( text && (*text == ']') ) break;
}
continue;
}
if ( stricmp (text, "coord" ) == 0 )
{
int coord_number;
points = ReadCoordsList(file, line, &coord_number, LineNum);
}
else if ( stricmp (text, "coordIndex" ) == 0 )
{
index = (int *) MyMalloc(nn * sizeof(int) );
S3D_Vertex * coords =
(S3D_Vertex *) MyMalloc(nn * sizeof(S3D_Vertex) );
while ( GetLine(file, line, LineNum, 512) )
{
int coord_count = 0, jj;
text = strtok(line, " ,\t\n\r");
while ( text )
{
if ( *text == ']') break;
jj = atoi(from_point(text));
if ( jj < 0 )
{
S3D_Vertex * curr_coord = coords;
for ( jj = 0; jj < coord_count; jj ++ )
{
int kk = index[jj] * 3;
curr_coord->x = points[kk];
curr_coord->y = points[kk+1];
curr_coord->z = points[kk+2];
curr_coord++;
}
Set_Object_Coords(coords, coord_count );
Set_Object_Data(coords, coord_count );
coord_count = 0;
}
else
{
index[coord_count++] = jj;
}
text = strtok(NULL, " ,\t\n\r");
}
if ( text && (*text == ']') ) break;
}
free(index);
free(coords);
}
else
{
printf ("ReadGeometry error line %d <%s> \n", *LineNum, text);
break;
}
}
if ( points ) free (points);
return err;
}
/*********************************************************/
int Struct3D_Shape:: ReadData(FILE * file, int *LineNum)
/*********************************************************/
{
char line[512];
while ( GetLine(file, line, LineNum, 512) )
{
}
return -1;
}

136
3d-viewer/3d_struct.h Normal file
View File

@ -0,0 +1,136 @@
/********************************************************/
/* 3d_struct.h : definition des structures de donnees */
/* pour la representation 3D des modules */
/********************************************************/
#ifndef STRUCT_3D_H
#define STRUCT_3D_H
#include "base_struct.h"
/* 3D modeler units -> PCB units conversion scale:
1 "3D unit modeler" = 1 unit wings3d = 2,54 mm = 0.1 inch */
#define UNITS3D_TO_UNITSPCB 1000
class Struct3D_Master;
class Struct3D_Shape;
class S3D_Color /* This is a 3D color (R, G, G) 3 floats range 0 to 1.0*/
{
public:
double m_Red, m_Green, m_Blue;
public:
S3D_Color(void)
{
m_Red = m_Green = m_Blue = 0;
}
};
class S3D_Vertex /* This is a 3D coordinate (3 float numbers: x,y,z coordinates)*/
{
public:
double x, y, z;
public:
S3D_Vertex(void);
};
class S3D_Material: public EDA_BaseStruct /* openGL "material" data*/
{
public:
wxString m_Name;
S3D_Vertex m_DiffuseColor;
S3D_Vertex m_EmissiveColor;
S3D_Vertex m_SpecularColor;
float m_AmbientIntensity;
float m_Transparency;
float m_Shininess;
public:
S3D_Material(Struct3D_Master * father, const wxString & name);
void SetMaterial(void);
};
/*******************************************/
class Struct3D_Master: public EDA_BaseStruct
/*******************************************/
/* Master structure for a 3D item description */
{
public:
wxString m_Shape3DName; /* 3D shape name in 3D library */
S3D_Vertex m_MatScale;
S3D_Vertex m_MatRotation;
S3D_Vertex m_MatPosition;
Struct3D_Shape * m_3D_Drawings;
S3D_Material *m_Materials;
public:
Struct3D_Master(EDA_BaseStruct * StructFather);
~Struct3D_Master(void);
void Copy(Struct3D_Master * pattern);
int ReadData(void);
int ReadMaterial(FILE * file, int *LineNum);
int ReadChildren(FILE * file, int *LineNum);
int ReadShape(FILE * file, int *LineNum);
int ReadAppearance(FILE * file, int *LineNum);
int ReadGeometry(FILE * file, int *LineNum);
void Set_Object_Coords(S3D_Vertex * coord, int nbcoord );
};
/*********************************************/
class Struct3D_Shape: public EDA_BaseStruct
/*********************************************/
/* decrit une forme complexe 3D */
{
public:
S3D_Vertex * m_3D_Coord;
int * m_3D_CoordIndex;
int m_3D_Points;
public:
Struct3D_Shape(EDA_BaseStruct * StructFather);
~Struct3D_Shape(void);
int ReadData(FILE * file, int *LineNum);
};
/*****************************************************************/
/* Classe pour afficher et editer un Vertex (triplet de valeurs),*/
/* en INCHES ou MM ou sans unites */
/*****************************************************************/
/* internal_unit is the internal unit number by inch:
- 1000 for EESchema
- 10000 for PcbNew
*/
class WinEDA_VertexCtrl
{
private:
int m_Units;
int m_Internal_Unit;
wxTextCtrl * m_XValueCtrl, * m_YValueCtrl, * m_ZValueCtrl;
wxStaticText * m_Text;
public:
// Constructor and destructor
WinEDA_VertexCtrl(wxWindow *parent, const wxString & title,
wxBoxSizer * BoxSizer,
int units, int internal_unit);
~WinEDA_VertexCtrl(void);
S3D_Vertex GetValue(void);
void SetValue(S3D_Vertex vertex);
void Enable(bool enbl);
void SetToolTip(const wxString & text);
};
#endif /* STRUCT_3D_H */

129
3d-viewer/3d_toolbar.cpp Normal file
View File

@ -0,0 +1,129 @@
/*******************************************************************/
/* 3d_toolbar.cpp: construction des tool bars de la frame visu 3d */
/*******************************************************************/
#include "fctsys.h"
#include "macros.h"
#include "bitmaps3d.h"
#include "bitmaps.h"
#include "id.h"
#define BITMAP wxBitmap
#include "3d_viewer.h"
/*********************************************/
void WinEDA3D_DrawFrame::ReCreateHToolbar(void)
/*********************************************/
{
if ( m_HToolBar != NULL )
{ // simple mise a jour de la liste des fichiers anciens
SetToolbars();
return;
}
m_HToolBar = new WinEDA_Toolbar(TOOLBAR_MAIN, this, ID_H_TOOLBAR, TRUE);
SetToolBar(m_HToolBar);
// Set up toolbar
m_HToolBar->AddTool(ID_RELOAD3D_BOARD, wxEmptyString, BITMAP(import3d_xpm),
_("Reload board"));
#ifdef __WINDOWS__ // do not work properly under linux
m_HToolBar->AddSeparator();
m_HToolBar->AddTool(ID_TOOL_SCREENCOPY_TOCLIBBOARD, wxEmptyString, BITMAP(copy_button),
_("Copy 3D Image to Clipboard"));
#endif
m_HToolBar->AddSeparator();
m_HToolBar->AddTool(ID_ZOOM_PLUS_BUTT, wxEmptyString, BITMAP(zoom_in_xpm),
_("zoom + (F1)"));
m_HToolBar->AddTool(ID_ZOOM_MOINS_BUTT, wxEmptyString, BITMAP(zoom_out_xpm),
_("zoom - (F2)"));
m_HToolBar->AddTool(ID_ZOOM_REDRAW_BUTT, wxEmptyString, BITMAP(repaint_xpm),
_("redraw (F3)"));
m_HToolBar->AddTool(ID_ZOOM_PAGE_BUTT, wxEmptyString, BITMAP(zoom_optimal_xpm),
_("auto zoom"));
m_HToolBar->AddSeparator();
m_HToolBar->AddTool(ID_ROTATE3D_X_POS, wxEmptyString, BITMAP(rotate_pos_X_xpm),
_("Rotate X ->") );
m_HToolBar->AddTool(ID_ROTATE3D_X_NEG, wxEmptyString, BITMAP(rotate_neg_X_xpm),
_("Rotate X <-") );
m_HToolBar->AddSeparator();
m_HToolBar->AddTool(ID_ROTATE3D_Y_POS, wxEmptyString, BITMAP(rotate_pos_Y_xpm),
_("Rotate Y ->") );
m_HToolBar->AddTool(ID_ROTATE3D_Y_NEG, wxEmptyString, BITMAP(rotate_neg_Y_xpm),
_("Rotate Y <-") );
m_HToolBar->AddSeparator();
m_HToolBar->AddTool(ID_ROTATE3D_Z_POS, wxEmptyString, BITMAP(rotate_pos_Z_xpm),
_("Rotate Z ->") );
m_HToolBar->AddTool(ID_ROTATE3D_Z_NEG, wxEmptyString, BITMAP(rotate_neg_Z_xpm),
_("Rotate Z <-") );
m_HToolBar->AddSeparator();
m_HToolBar->AddTool(ID_MOVE3D_LEFT, wxEmptyString, BITMAP(left_xpm),
_("Move left <-") );
m_HToolBar->AddTool(ID_MOVE3D_RIGHT, wxEmptyString, BITMAP(right_xpm),
_("Move right ->") );
m_HToolBar->AddTool(ID_MOVE3D_UP, wxEmptyString, BITMAP(up_xpm),
_("Move Up ^") );
m_HToolBar->AddTool(ID_MOVE3D_DOWN, wxEmptyString, BITMAP(down_xpm),
_("Move Down") );
m_HToolBar->Realize();
// SetToolbars();
}
/*********************************************/
void WinEDA3D_DrawFrame::ReCreateVToolbar(void)
/*********************************************/
{
}
/**********************************************/
void WinEDA3D_DrawFrame::ReCreateMenuBar(void)
/**********************************************/
{
wxMenuBar *menuBar = new wxMenuBar;
wxMenu *fileMenu = new wxMenu;
menuBar->Append(fileMenu, _("&File") );
fileMenu->Append(ID_MENU_SCREENCOPY_PNG, _("Create Image (png format)"));
fileMenu->Append(ID_MENU_SCREENCOPY_JPEG, _("Create Image (jpeg format)"));
fileMenu->AppendSeparator();
fileMenu->Append(wxID_EXIT, _("&Exit"));
wxMenu *referencesMenu = new wxMenu;
menuBar->Append(referencesMenu, _("&Preferences") );
ADD_MENUITEM(referencesMenu, ID_MENU3D_BGCOLOR_SELECTION,
_("Choose background color"), palette_xpm)
SetMenuBar(menuBar);
}
/*****************************************/
void WinEDA3D_DrawFrame::SetToolbars(void)
/*****************************************/
{
}

172
3d-viewer/3d_viewer.h Normal file
View File

@ -0,0 +1,172 @@
/////////////////////////////////////////////////////////////////////////////
// Name: 3d_viewer.h
/////////////////////////////////////////////////////////////////////////////
#if !wxUSE_GLCANVAS
#error Please set wxUSE_GLCANVAS to 1 in setup.h.
#endif
#include "wx/glcanvas.h"
#ifdef __WXMAC__
# ifdef __DARWIN__
# include <OpenGL/gl.h>
# include <OpenGL/glu.h>
# else
# include <gl.h>
# include <glu.h>
# endif
#else
# include <GL/gl.h>
# include <GL/glu.h>
#endif
#ifdef VIEWER_MAIN
#define global_3d
#else
#define global_3d extern
#endif
#include "pcbstruct.h"
#include "3d_struct.h"
#define LIB3D_PATH wxT("packages3d/")
class Pcb3D_GLCanvas;
class WinEDA3D_DrawFrame;
class Info_3D_Visu;
class S3D_Vertex;
class SEGVIA;
#define m_ROTX m_Rot[0]
#define m_ROTY m_Rot[1]
#define m_ROTZ m_Rot[2]
/* information needed to display 3D board */
class Info_3D_Visu
{
public:
float m_Beginx, m_Beginy; /* position of mouse */
float m_Quat[4]; /* orientation of object */
float m_Rot[4]; /* man rotation of object */
float m_Zoom; /* field of view in degrees */
S3D_Color m_BgColor;
wxPoint m_BoardPos;
wxSize m_BoardSize;
int m_Layers;
EDA_BoardDesignSettings * m_BoardSettings; // Link to current board design settings
float m_Epoxy_Width; /* Epoxy tickness (normalized) */
float m_BoardScale; /* Normalisation scale for coordinates:
when scaled tey are between -1.0 and +1.0 */
float m_LayerZcoord[32];
public:
Info_3D_Visu(void);
~Info_3D_Visu(void);
};
class Pcb3D_GLCanvas: public wxGLCanvas
{
public:
WinEDA3D_DrawFrame * m_Parent;
private:
bool m_init;
GLuint m_gllist;
public:
Pcb3D_GLCanvas(WinEDA3D_DrawFrame *parent, const wxWindowID id = -1,
int* gl_attrib = NULL);
~Pcb3D_GLCanvas(void);
void ClearLists(void);
void OnPaint(wxPaintEvent& event);
void OnSize(wxSizeEvent& event);
void OnEraseBackground(wxEraseEvent& event);
void OnChar(wxKeyEvent& event);
void OnMouseEvent(wxMouseEvent& event);
void OnRightClick(wxMouseEvent& event);
void OnPopUpMenu(wxCommandEvent & event);
void TakeScreenshot(wxCommandEvent & event);
void SetView3D(int keycode);
void DisplayStatus(void);
void Redraw(void);
GLuint DisplayCubeforTest(void);
void OnEnterWindow( wxMouseEvent& event );
void Render( void );
GLuint CreateDrawGL_List(void);
void InitGL(void);
void SetLights(void);
void Draw3D_Track(TRACK * track);
void Draw3D_Via(SEGVIA * via);
void Draw3D_DrawSegment(DRAWSEGMENT * segment);
DECLARE_EVENT_TABLE()
};
class WinEDA3D_DrawFrame: public wxFrame
{
public:
WinEDA_BasePcbFrame * m_Parent;
WinEDA_App * m_ParentAppl;
Pcb3D_GLCanvas * m_Canvas;
wxToolBar * m_HToolBar;
wxToolBar * m_VToolBar;
int m_InternalUnits;
wxPoint m_FramePos;
wxSize m_FrameSize;
private:
wxString m_FrameName; // name used for writting and reading setup
// It is "Frame3D"
public:
WinEDA3D_DrawFrame(WinEDA_BasePcbFrame * parent, WinEDA_App *app_parent,
const wxString& title );
void Exit3DFrame(wxCommandEvent& event);
void OnCloseWindow(wxCloseEvent & Event);
void ReCreateMenuBar(void);
void ReCreateHToolbar(void);
void ReCreateVToolbar(void);
void SetToolbars(void);
void GetSettings(void);
void SaveSettings(void);
void OnLeftClick(wxDC * DC, const wxPoint& MousePos);
void OnRightClick(const wxPoint& MousePos, wxMenu * PopMenu);
void OnKeyEvent(wxKeyEvent& event);
int BestZoom(void); // Retourne le meilleur zoom
void RedrawActiveWindow(wxDC * DC, bool EraseBg);
void Process_Special_Functions(wxCommandEvent& event);
void Process_Zoom(wxCommandEvent& event);
void NewDisplay(void);
void Set3DBgColor(void);
DECLARE_EVENT_TABLE()
};
void SetGLColor(int color);
void Set_Object_Data(const S3D_Vertex * coord, int nbcoord );
global_3d Info_3D_Visu g_Parm_3D_Visu;
global_3d double g_Draw3d_dx, g_Draw3d_dy;
global_3d double ZBottom, ZTop;
global_3d double DataScale3D; // coeff de conversion unites utilsateut -> unites 3D
global_3d int gl_attrib[]
#ifdef VIEWER_MAIN
= { WX_GL_RGBA, WX_GL_MIN_RED, 8, WX_GL_MIN_GREEN, 8,
WX_GL_MIN_BLUE, 8, WX_GL_DEPTH_SIZE, 16,
WX_GL_DOUBLEBUFFER,
GL_NONE }
#endif
;

15
3d-viewer/bitmaps3d.h Normal file
View File

@ -0,0 +1,15 @@
#include "bitmaps3d/import3d.xpm"
#include "bitmaps3d/rotate+x.xpm"
#include "bitmaps3d/rotate-x.xpm"
#include "bitmaps3d/rotate+y.xpm"
#include "bitmaps3d/rotate-y.xpm"
#include "bitmaps3d/rotate+z.xpm"
#include "bitmaps3d/rotate-z.xpm"
#include "bitmaps3d/axis3d.xpm"
#include "bitmaps3d/axis3d_bottom.xpm"
#include "bitmaps3d/axis3d_top.xpm"
#include "bitmaps3d/axis3d_left.xpm"
#include "bitmaps3d/axis3d_right.xpm"
#include "bitmaps3d/axis3d_front.xpm"
#include "bitmaps3d/axis3d_back.xpm"

View File

@ -0,0 +1,27 @@
/* XPM bitmap */
#ifndef XPM_3D_MAIN
extern char * axis3d_xpm[];
#else
char * axis3d_xpm[] = {
"16 15 3 1",
" c None",
". c Blue",
"x c Red",
" . ",
" ... ",
" . ",
" . ",
" . ",
" . ",
" . . ",
" ............",
" . . ",
" . ",
" . ",
" . ",
" .. ",
" . ",
" "
};
#endif

View File

@ -0,0 +1,27 @@
/* XPM bitmap */
#ifndef XPM_3D_MAIN
extern char * axis3d_back_xpm[];
#else
char * axis3d_back_xpm[] = {
"16 15 3 1",
" c None",
". c Blue",
"x c Red",
" . x ",
" ... x ",
" . x ",
" . xxxxx ",
" . xxx ",
" . x ",
" . . ",
" ............",
" . . ",
" . ",
" . ",
" . ",
" .. ",
" . ",
" "
};
#endif

View File

@ -0,0 +1,27 @@
/* XPM bitmap */
#ifndef XPM_3D_MAIN
extern char * axis3d_bottom_xpm[];
#else
char * axis3d_bottom_xpm[] = {
"16 15 3 1",
" c None",
". c Blue",
"x c Red",
" . ",
" ... ",
" . ",
" . ",
" . ",
" . ",
" . . ",
" ............",
" . . ",
" . x ",
" . xxx ",
" . xxxxx ",
" .. x ",
" . x ",
" x "
};
#endif

View File

@ -0,0 +1,27 @@
/* XPM bitmap */
#ifndef XPM_3D_MAIN
extern char * axis3d_front_xpm[];
#else
char * axis3d_front_xpm[] = {
"16 15 3 1",
" c None",
". c Blue",
"x c Red",
" . ",
" ... ",
" . ",
" . ",
" . ",
" . ",
" . . ",
" ............",
" . x . ",
" . xxx ",
" . xxxxx ",
" . x ",
" .. x ",
" . x ",
" "
};
#endif

View File

@ -0,0 +1,27 @@
/* XPM bitmap */
#ifndef XPM_3D_MAIN
extern char * axis3d_left_xpm[];
#else
char * axis3d_left_xpm[] = {
"16 15 3 1",
" c None",
". c Blue",
"x c Red",
" . ",
" ... ",
" . ",
" . ",
" x. ",
" xx ",
"xxxxxx . ",
" xx...........",
" x . ",
" . ",
" . ",
" . ",
" .. ",
" . ",
" "
};
#endif

View File

@ -0,0 +1,27 @@
/* XPM bitmap */
#ifndef XPM_3D_MAIN
extern char * axis3d_right_xpm[];
#else
char * axis3d_right_xpm[] = {
"16 15 3 1",
" c None",
". c Blue",
"x c Red",
" . ",
" ... ",
" . ",
" . ",
" . x ",
" . xx ",
" . xxxxxx",
" .......xx...",
" . x . ",
" . ",
" . ",
" . ",
" .. ",
" . ",
" "
};
#endif

View File

@ -0,0 +1,27 @@
/* XPM bitmap */
#ifndef XPM_3D_MAIN
extern char * axis3d_top_xpm[];
#else
char * axis3d_top_xpm[] = {
"16 15 3 1",
" c None",
". c Blue",
"x c Red",
" . x ",
" ... x ",
" . x ",
" . xxxxx ",
" . xxx ",
" . x ",
" . . ",
" ............",
" . . ",
" . ",
" . ",
" . ",
" .. ",
" . ",
" "
};
#endif

View File

@ -0,0 +1,48 @@
/* XPM bitmap */
#ifndef XPM_3D_MAIN
extern char *import3d_xpm[];
#else
char *import3d_xpm[] = {
/* columns rows colors chars-per-pixel */
"16 15 3 1",
"- c Black",
"X c None",
"o c Green",
/* pixels */
"XXXXXXXXXXXXXXXX",
"----------------",
"-oooooooooooooo-",
"X-oooooooooooo-X",
"X-oooooooooooo-X",
"XX-oooooooooo-XX",
"XX-oooooooooo-XX",
"----oooooooo----",
"X-oooooooooooo-X",
"XX-oooooooooo-XX",
"XXX-oooooooo-XXX",
"XXXX-oooooo-XXXX",
"XXXXX-oooo-XXXXX",
"XXXXXX-oo-XXXXXX",
"XXXXXXX--XXXXXXX"
"XXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXX"
};
#endif

View File

@ -0,0 +1,32 @@
/* XPM */
#ifndef XPM_3D_MAIN
extern char *rotate_pos_X_xpm[];
#else
char *rotate_pos_X_xpm[] = {
/* width height num_colors chars_per_pixel */
" 16 15 4 1",
/* colors */
". c #000080",
"# c #c0c0c0",
"a c #808080",
"o c #008000",
/* pixels */
"##oo###oo#######",
"###oo#oo########",
"####ooo#########",
"###oo#oo########",
"##oo###oo...a###",
"##.###...###.a##",
"##..#.#######.##",
"##...########.##",
"##....#######.##",
"##.....#####.a##",
"###########a.###",
"################",
"################",
"################",
"################"
};
#endif

View File

@ -0,0 +1,32 @@
/* XPM */
#ifndef XPM_3D_MAIN
extern char *rotate_pos_Y_xpm[];
#else
char *rotate_pos_Y_xpm[] = {
/* width height num_colors chars_per_pixel */
" 16 15 4 1",
/* colors */
". c #000080",
"# c #c0c0c0",
"a c #808080",
"o c #FF0000",
/* pixels */
"##oo###oo#######",
"###oo#oo########",
"####ooo#########",
"####oo##########",
"o##oo...########",
"#oo.####..###.##",
"##.#######.#..##",
"##.########...##",
"##.#######....##",
"##a.#####.....##",
"###.a###########",
"################",
"################",
"################",
"################"
};
#endif

View File

@ -0,0 +1,32 @@
/* XPM */
#ifndef XPM_3D_MAIN
extern char *rotate_pos_Z_xpm[];
#else
char *rotate_pos_Z_xpm[] = {
/* width height num_colors chars_per_pixel */
" 16 15 4 1",
/* colors */
". c #000080",
"# c #c0c0c0",
"a c #808080",
"o c #008000",
/* pixels */
"###oooooo#######",
"######oo########",
"#####oo#########",
"####oo##########",
"###oooooo...a###",
"##.###..####.a##",
"##..#.#######.##",
"##...########.##",
"##....#######.##",
"##.....#####.a##",
"###########a.###",
"################",
"################",
"################",
"################"
};
#endif

View File

@ -0,0 +1,32 @@
/* XPM */
#ifndef XPM_3D_MAIN
extern char *rotate_neg_X_xpm[];
#else
char *rotate_neg_X_xpm[] = {
/* width height num_colors chars_per_pixel */
" 16 15 4 1",
/* colors */
". c #000080",
"# c #c0c0c0",
"a c #808080",
"o c #004000",
/* pixels */
"##oo###oo#######",
"###oo#oo########",
"####ooo#########",
"###oo#oo########",
"##oo...oo#######",
"##a.####..###.##",
"##.#######.#..##",
"##.########...##",
"##.#######....##",
"##a.#####.....##",
"###.a###########",
"################",
"################",
"################",
"################"
};
#endif

View File

@ -0,0 +1,32 @@
/* XPM */
#ifndef XPM_3D_MAIN
extern char *rotate_neg_Y_xpm[];
#else
char *rotate_neg_Y_xpm[] = {
/* width height num_colors chars_per_pixel */
" 16 15 4 1",
/* colors */
". c #000080",
"# c #c0c0c0",
"a c #808080",
"o c #FF0000",
/* pixels */
"##oo###oo#######",
"###oo#oo########",
"####ooo#########",
"####oo##########",
"o##oo###....a###",
"#oo###..####.a##",
"##..#.#######.##",
"##...########.##",
"##....#######.##",
"##.....#####.a##",
"###########a.###",
"################",
"################",
"################",
"################"
};
#endif

View File

@ -0,0 +1,32 @@
/* XPM */
#ifndef XPM_3D_MAIN
extern char *rotate_neg_Z_xpm[];
#else
char *rotate_neg_Z_xpm[] = {
/* width height num_colors chars_per_pixel */
" 16 15 4 1",
/* colors */
". c #000080",
"# c #c0c0c0",
"a c #808080",
"o c #008000",
/* pixels */
"###oooooo#######",
"######oo########",
"#####oo#########",
"####oo##########",
"###oooooo#######",
"##a.####..###.##",
"##.#######.#..##",
"##.########...##",
"##.#######....##",
"##a.#####.....##",
"###.a###########",
"################",
"################",
"################",
"################"
};
#endif

View File

@ -0,0 +1,28 @@
/* XPM bitmap */
#ifndef XPMMAIN
extern char * zoomoins3d_xpm[];
#else
char * zoomoins3d_xpm[] = {
"16 16 3 1",
" c None",
". c Black",
"X c Gray100",
" .... ",
" ..XXXX.. ",
" .XXXXXXXX. ",
" .XXXXXXXX. ",
".XXXXXXXXXX. ",
".XX......XX. ",
".XX......XX. ",
".XXXXXXXXXX. ",
" .XXXXXXXX. ",
" .XXXXXXXX. ",
" ..XXXX... ",
" .... ... ",
" ... ",
" ... ",
" ... ",
" .. "
};
#endif

View File

@ -0,0 +1,32 @@
/* XPM bitmap */
#ifndef XPMMAIN
extern char * zoompage3d_xpm[];
#else
char *zoompage3d_xpm[] = {
/* columns rows colors chars-per-pixel */
"16 15 5 1",
" c Black",
". c None",
"X c Gray100",
"o c #808080",
"O c Cyan",
/* pixels */
" .......",
" XXXXXXX ......",
" XXXXXXX . .....",
" XXXXXXX ....",
" XXXXXXXXXX ....",
" XXXXXXX ....",
" XXXXXX o..o ...",
" XXXXX oOO.oo ..",
" XXXXX .O..o. ..",
" XXXXX ....o. ..",
" XXXXX o..Ooo ..",
" XXXXXX o..o o..",
" XXXXXXX o .",
" XXXXXXXXXX . ",
" .. "
};
#endif

View File

@ -0,0 +1,29 @@
/* XPM bitmap */
#ifndef XPMMAIN
extern char * zoomplus3d_xpm[];
#else
char * zoomplus3d_xpm[] = {
"16 16 3 1",
" c None",
". c Black",
"X c Gray100",
" .... ",
" ..XXXX.. ",
" .XXXXXXXX. ",
" .XXX..XXX. ",
".XXXX..XXXX. ",
".XX......XX. ",
".XX......XX. ",
".XXXX..XXXX. ",
" .XXX..XXX. ",
" .XXXXXXXX. ",
" ..XXXX... ",
" .... ... ",
" ... ",
" ... ",
" ... ",
" .. "
};
#endif

View File

@ -0,0 +1,29 @@
/* XPM bitmap */
#ifndef XPMMAIN
extern char * zoomrefr3d_xpm[];
#else
char * zoomrefr3d_xpm[] = {
"16 16 3 1",
" c None",
". c #0000A0",
"X c #C0C0A0",
" .... ",
" ..XXXX.. ",
" .XXXXXXXX. ",
" .XXXXXXXX. ",
".XXXXXXXXXX. ",
".XXXXXXXXXX. ",
".XXXXXXXXXX. ",
".XXXXXXXXXX. ",
" .XXXXXXXX. ",
" .XXXXXXXX. ",
" ..XXXX... ",
" .... ... ",
" ... ",
" ... ",
" ... ",
" .. "
};
#endif

24
3d-viewer/makefile.g95 Normal file
View File

@ -0,0 +1,24 @@
WXDIR = $(WXWIN)
TARGET=3d-viewer
DLLSUFF=.dll
include ../libs.win
DLLGEN=dllwrap --export-all --output-def $(TARGET).def --implib lib$(TARGET).a --driver-name c++
all: $(TARGET).a
include makefile.include
$(TARGET).a: $(OBJECTS3D)
ar ruv $@ $(OBJECTS3D)
ranlib $@
clean :
rm -f *.o
rm -f *.bak
rm -f $(TARGET).a

35
3d-viewer/makefile.gtk Normal file
View File

@ -0,0 +1,35 @@
## Makefile for 3d-viewer.a ( wxGTK - LINUX )
CC = gcc
# Compiler flags.
CPPFLAGS = -Wall -O2 -DPCBNEW -I../pcbnew -I ../include -I../common\
`wx-config --cxxflags`
include ../libs.linux
TARGET = 3d-viewer
FINAL = 1
all: $(TARGET).a
include makefile.include
$(TARGET).a: $(OBJECTS3D) makefile.gtk makefile.include
rm -f $@
ar -rv $@ $(OBJECTS3D)
ranlib $@
clean:
rm -f *.o
rm -f *.exe
rm -f *.res
rm -f *.map
rm -f $(TARGET).a

View File

@ -0,0 +1,28 @@
EXTRALIBS =
EXTRACPPFLAGS= -I./ -I../include -I../common -I../pcbnew
OBJECTS3D = 3d_frame.o 3d_read_mesh.o 3d_canvas.o trackball.o 3d_aux.o\
3d_draw.o 3d_toolbar.o 3d_class.o
OBJECTS= ../common/trigo.o
AUXLIBS= -mthreads -o $(TARGET)$(DLLSUFF)\
$(WXLIB_BASE) $(LIBS3D)\
-lrpcrt4 -loleaut32 -lole32 -luuid -lwinspool -lwinmm\
-lshell32 -lcomctl32 -lcomdlg32 -lctl3d32 -ladvapi32 -lwsock32 -lgdi32
3d_class.o: 3d_class.cpp 3d_struct.h 3d_viewer.h
3d_read_mesh.o: 3d_read_mesh.cpp 3d_struct.h 3d_viewer.h
3d_frame.o: 3d_frame.cpp 3d_viewer.h
3d_canvas.o: 3d_canvas.cpp 3d_viewer.h
3d_aux.o: 3d_aux.cpp 3d_viewer.h
3d_draw.o: 3d_draw.cpp 3d_viewer.h 3d_struct.h
3d_toolbar.o: 3d_toolbar.cpp 3d_viewer.h

35
3d-viewer/makefile.macosx Normal file
View File

@ -0,0 +1,35 @@
## Makefile for 3d-viewer.a ( wxMAC - mac os X)
CC = gcc
# Compiler flags.
CPPFLAGS = -Wall -O2 -DPCBNEW -I../pcbnew -I ../include -I../common\
`wx-config --cxxflags`
include ../libs.macosx
TARGET = 3d-viewer
FINAL = 1
all: $(TARGET).a
include makefile.include
$(TARGET).a: $(OBJECTS3D) makefile.gtk makefile.include
rm -f $@
ar -rv $@ $(OBJECTS3D)
ranlib $@
clean:
rm -f *.o
rm -f *.exe
rm -f *.res
rm -f *.map
rm -f $(TARGET).a

324
3d-viewer/trackball.cpp Normal file
View File

@ -0,0 +1,324 @@
/*
* (c) Copyright 1993, 1994, Silicon Graphics, Inc.
* ALL RIGHTS RESERVED
* Permission to use, copy, modify, and distribute this software for
* any purpose and without fee is hereby granted, provided that the above
* copyright notice appear in all copies and that both the copyright notice
* and this permission notice appear in supporting documentation, and that
* the name of Silicon Graphics, Inc. not be used in advertising
* or publicity pertaining to distribution of the software without specific,
* written prior permission.
*
* THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
* AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
* FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
* GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
* SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
* KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
* LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
* THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN
* ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
* POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
*
* US Government Users Restricted Rights
* Use, duplication, or disclosure by the Government is subject to
* restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
* (c)(1)(ii) of the Rights in Technical Data and Computer Software
* clause at DFARS 252.227-7013 and/or in similar or successor
* clauses in the FAR or the DOD or NASA FAR Supplement.
* Unpublished-- rights reserved under the copyright laws of the
* United States. Contractor/manufacturer is Silicon Graphics,
* Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311.
*
* OpenGL(TM) is a trademark of Silicon Graphics, Inc.
*/
/*
* Trackball code:
*
* Implementation of a virtual trackball.
* Implemented by Gavin Bell, lots of ideas from Thant Tessman and
* the August '88 issue of Siggraph's "Computer Graphics," pp. 121-129.
*
* Vector manip code:
*
* Original code from:
* David M. Ciemiewicz, Mark Grossman, Henry Moreton, and Paul Haeberli
*
* Much mucking with by:
* Gavin Bell
*/
#include <math.h>
#include "trackball.h"
/*
* This size should really be based on the distance from the center of
* rotation to the point on the object underneath the mouse. That
* point would then track the mouse as closely as possible. This is a
* simple example, though, so that is left as an Exercise for the
* Programmer.
*/
#define TRACKBALLSIZE (0.8f)
/*
* Local function prototypes (not defined in trackball.h)
*/
static float tb_project_to_sphere(float, float, float);
static void normalize_quat(float [4]);
void
vzero(float *v)
{
v[0] = 0.0;
v[1] = 0.0;
v[2] = 0.0;
}
void
vset(float *v, float x, float y, float z)
{
v[0] = x;
v[1] = y;
v[2] = z;
}
void
vsub(const float *src1, const float *src2, float *dst)
{
dst[0] = src1[0] - src2[0];
dst[1] = src1[1] - src2[1];
dst[2] = src1[2] - src2[2];
}
void
vcopy(const float *v1, float *v2)
{
register int i;
for (i = 0 ; i < 3 ; i++)
v2[i] = v1[i];
}
void
vcross(const float *v1, const float *v2, float *cross)
{
float temp[3];
temp[0] = (v1[1] * v2[2]) - (v1[2] * v2[1]);
temp[1] = (v1[2] * v2[0]) - (v1[0] * v2[2]);
temp[2] = (v1[0] * v2[1]) - (v1[1] * v2[0]);
vcopy(temp, cross);
}
float
vlength(const float *v)
{
return (float) sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
}
void
vscale(float *v, float div)
{
v[0] *= div;
v[1] *= div;
v[2] *= div;
}
void
vnormal(float *v)
{
vscale(v, 1.0f/vlength(v));
}
float
vdot(const float *v1, const float *v2)
{
return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2];
}
void
vadd(const float *src1, const float *src2, float *dst)
{
dst[0] = src1[0] + src2[0];
dst[1] = src1[1] + src2[1];
dst[2] = src1[2] + src2[2];
}
/*
* Ok, simulate a track-ball. Project the points onto the virtual
* trackball, then figure out the axis of rotation, which is the cross
* product of P1 P2 and O P1 (O is the center of the ball, 0,0,0)
* Note: This is a deformed trackball-- is a trackball in the center,
* but is deformed into a hyperbolic sheet of rotation away from the
* center. This particular function was chosen after trying out
* several variations.
*
* It is assumed that the arguments to this routine are in the range
* (-1.0 ... 1.0)
*/
void
trackball(float q[4], float p1x, float p1y, float p2x, float p2y)
{
float a[3]; /* Axis of rotation */
float phi; /* how much to rotate about axis */
float p1[3], p2[3], d[3];
float t;
if (p1x == p2x && p1y == p2y) {
/* Zero rotation */
vzero(q);
q[3] = 1.0;
return;
}
/*
* First, figure out z-coordinates for projection of P1 and P2 to
* deformed sphere
*/
vset(p1, p1x, p1y, tb_project_to_sphere(TRACKBALLSIZE, p1x, p1y));
vset(p2, p2x, p2y, tb_project_to_sphere(TRACKBALLSIZE, p2x, p2y));
/*
* Now, we want the cross product of P1 and P2
*/
vcross(p2,p1,a);
/*
* Figure out how much to rotate around that axis.
*/
vsub(p1, p2, d);
t = vlength(d) / (2.0f*TRACKBALLSIZE);
/*
* Avoid problems with out-of-control values...
*/
if (t > 1.0) t = 1.0;
if (t < -1.0) t = -1.0;
phi = 2.0f * (float) asin(t);
axis_to_quat(a,phi,q);
}
/*
* Given an axis and angle, compute quaternion.
*/
void
axis_to_quat(float a[3], float phi, float q[4])
{
vnormal(a);
vcopy(a, q);
vscale(q, (float) sin(phi/2.0));
q[3] = (float) cos(phi/2.0);
}
/*
* Project an x,y pair onto a sphere of radius r OR a hyperbolic sheet
* if we are away from the center of the sphere.
*/
static float
tb_project_to_sphere(float r, float x, float y)
{
float d, t, z;
d = (float) sqrt(x*x + y*y);
if (d < r * 0.70710678118654752440) { /* Inside sphere */
z = (float) sqrt(r*r - d*d);
} else { /* On hyperbola */
t = r / 1.41421356237309504880f;
z = t*t / d;
}
return z;
}
/*
* Given two rotations, e1 and e2, expressed as quaternion rotations,
* figure out the equivalent single rotation and stuff it into dest.
*
* This routine also normalizes the result every RENORMCOUNT times it is
* called, to keep error from creeping in.
*
* NOTE: This routine is written so that q1 or q2 may be the same
* as dest (or each other).
*/
#define RENORMCOUNT 97
void
add_quats(float q1[4], float q2[4], float dest[4])
{
static int count=0;
float t1[4], t2[4], t3[4];
float tf[4];
vcopy(q1,t1);
vscale(t1,q2[3]);
vcopy(q2,t2);
vscale(t2,q1[3]);
vcross(q2,q1,t3);
vadd(t1,t2,tf);
vadd(t3,tf,tf);
tf[3] = q1[3] * q2[3] - vdot(q1,q2);
dest[0] = tf[0];
dest[1] = tf[1];
dest[2] = tf[2];
dest[3] = tf[3];
if (++count > RENORMCOUNT) {
count = 0;
normalize_quat(dest);
}
}
/*
* Quaternions always obey: a^2 + b^2 + c^2 + d^2 = 1.0
* If they don't add up to 1.0, dividing by their magnitued will
* renormalize them.
*
* Note: See the following for more information on quaternions:
*
* - Shoemake, K., Animating rotation with quaternion curves, Computer
* Graphics 19, No 3 (Proc. SIGGRAPH'85), 245-254, 1985.
* - Pletinckx, D., Quaternion calculus as a basic tool in computer
* graphics, The Visual Computer 5, 2-13, 1989.
*/
static void
normalize_quat(float q[4])
{
int i;
float mag;
mag = (q[0]*q[0] + q[1]*q[1] + q[2]*q[2] + q[3]*q[3]);
for (i = 0; i < 4; i++) q[i] /= mag;
}
/*
* Build a rotation matrix, given a quaternion rotation.
*
*/
void
build_rotmatrix(float m[4][4], float q[4])
{
m[0][0] = 1.0f - 2.0f * (q[1] * q[1] + q[2] * q[2]);
m[0][1] = 2.0f * (q[0] * q[1] - q[2] * q[3]);
m[0][2] = 2.0f * (q[2] * q[0] + q[1] * q[3]);
m[0][3] = 0.0f;
m[1][0] = 2.0f * (q[0] * q[1] + q[2] * q[3]);
m[1][1]= 1.0f - 2.0f * (q[2] * q[2] + q[0] * q[0]);
m[1][2] = 2.0f * (q[1] * q[2] - q[0] * q[3]);
m[1][3] = 0.0f;
m[2][0] = 2.0f * (q[2] * q[0] - q[1] * q[3]);
m[2][1] = 2.0f * (q[1] * q[2] + q[0] * q[3]);
m[2][2] = 1.0f - 2.0f * (q[1] * q[1] + q[0] * q[0]);
m[2][3] = 0.0f;
m[3][0] = 0.0f;
m[3][1] = 0.0f;
m[3][2] = 0.0f;
m[3][3] = 1.0f;
}

78
3d-viewer/trackball.h Normal file
View File

@ -0,0 +1,78 @@
/*
* (c) Copyright 1993, 1994, Silicon Graphics, Inc.
* ALL RIGHTS RESERVED
* Permission to use, copy, modify, and distribute this software for
* any purpose and without fee is hereby granted, provided that the above
* copyright notice appear in all copies and that both the copyright notice
* and this permission notice appear in supporting documentation, and that
* the name of Silicon Graphics, Inc. not be used in advertising
* or publicity pertaining to distribution of the software without specific,
* written prior permission.
*
* THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
* AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
* FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
* GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
* SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
* KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
* LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
* THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN
* ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
* POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
*
* US Government Users Restricted Rights
* Use, duplication, or disclosure by the Government is subject to
* restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
* (c)(1)(ii) of the Rights in Technical Data and Computer Software
* clause at DFARS 252.227-7013 and/or in similar or successor
* clauses in the FAR or the DOD or NASA FAR Supplement.
* Unpublished-- rights reserved under the copyright laws of the
* United States. Contractor/manufacturer is Silicon Graphics,
* Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311.
*
* OpenGL(TM) is a trademark of Silicon Graphics, Inc.
*/
/*
* trackball.h
* A virtual trackball implementation
* Written by Gavin Bell for Silicon Graphics, November 1988.
*/
/*
* Pass the x and y coordinates of the last and current positions of
* the mouse, scaled so they are from (-1.0 ... 1.0).
*
* The resulting rotation is returned as a quaternion rotation in the
* first paramater.
*/
void
trackball(float q[4], float p1x, float p1y, float p2x, float p2y);
/*
* Given two quaternions, add them together to get a third quaternion.
* Adding quaternions to get a compound rotation is analagous to adding
* translations to get a compound translation. When incrementally
* adding rotations, the first argument here should be the new
* rotation, the second and third the total rotation (which will be
* over-written with the resulting new total rotation).
*/
void
add_quats(float *q1, float *q2, float *dest);
/*
* A useful function, builds a rotation matrix in Matrix based on
* given quaternion.
*/
void
build_rotmatrix(float m[4][4], float q[4]);
/*
* This function computes a quaternion based on an axis (defined by
* the given vector) and an angle about which to rotate. The angle is
* expressed in radians. The result is put into the third argument.
*/
void
axis_to_quat(float a[3], float phi, float q[4]);

28
bitmaps/3d.xpm Normal file
View File

@ -0,0 +1,28 @@
/* XPM */
#ifndef XPMMAIN
extern char *show_3d_xpm[];
#else
char *show_3d_xpm[] = {
/* columns rows colors chars-per-pixel */
"16 15 3 1",
"J c #FF0000",
"x c #0000FF",
". c none",
"................",
"..JJJJ...JJ.....",
".JJJJJJ..JJJJ...",
".JJ..JJ..JJ.JJ..",
".....JJ..JJ..JJ.",
"..JJJJ...JJ...JJ",
"..JJJJJ..JJ...JJ",
".....JJ..JJ...JJ",
".JJ..JJ..JJ..JJJ",
".JJJJJJ..JJJJJJ.",
"..JJJJ....JJJJ.x",
"..........xxxxxx",
".....xxxxxx.....",
"xxxxxx..........",
"x..............."
};
#endif

72
bitmaps/Add_Arc.xpm Normal file
View File

@ -0,0 +1,72 @@
/* XPM */
#ifndef XPMMAIN
extern char *add_arc_xpm[];
#else
char * add_arc_xpm[] = {
"16 16 48 1",
" c None",
". c #222224",
"+ c #07071F",
"@ c #000087",
"# c #00009C",
"$ c #00009B",
"% c #474747",
"& c #FEE2CA",
"* c #C59A74",
"= c #000047",
"- c #00009A",
"; c #000095",
"> c #473C33",
", c #FEBB7F",
"' c #C57B3A",
") c #000015",
"! c #000017",
"~ c #00003A",
"{ c #000075",
"] c #000097",
"^ c #000096",
"/ c #211306",
"( c #060300",
"_ c #000000",
": c #000083",
"< c #000094",
"[ c #00008D",
"} c #000090",
"| c #000055",
"1 c #000081",
"2 c #222222",
"3 c #080807",
"4 c #000091",
"5 c #00008B",
"6 c #070300",
"7 c #14141F",
"8 c #12112D",
"9 c #000059",
"0 c #161616",
"a c #F2D7C1",
"b c #F2BD8E",
"c c #120C10",
"d c #161210",
"e c #F2B279",
"f c #F29747",
"g c #130901",
"h c #140B04",
"i c #140900",
" ",
" .+@#$#$ ",
" %&*=$$$$-; ",
" >,')! ~{]$^ ",
" /(_ :$< ",
" [$} ",
" ]$| ",
" -$1 ",
" 23 $4 ",
" %&*_ $; ",
" >,'_ $5 ",
" /6 789 ",
" 0abc ",
" defg ",
" hi_ ",
" "};
#endif

60
bitmaps/Add_Circle.xpm Normal file
View File

@ -0,0 +1,60 @@
/* XPM */
#ifndef XPMMAIN
extern char *add_circle_xpm[];
#else
char * add_circle_xpm[] = {
"16 16 36 1",
" c None",
". c #00009B",
"+ c #000096",
"@ c #00008C",
"# c #000053",
"$ c #00008A",
"% c #00009A",
"& c #000073",
"* c #00007A",
"= c #000092",
"- c #00006F",
"; c #161616",
"> c #161513",
", c #12122F",
"' c #121125",
") c #F2D7C1",
"! c #F2BD8E",
"~ c #140D08",
"{ c #151519",
"] c #130D07",
"^ c #161210",
"/ c #F2B279",
"( c #F29747",
"_ c #140A01",
": c #151213",
"< c #130901",
"[ c #140B04",
"} c #140900",
"| c #000000",
"1 c #120A18",
"2 c #12080C",
"3 c #00003F",
"4 c #000094",
"5 c #000044",
"6 c #000083",
"7 c #00006A",
" .... ",
" .......+ ",
" ..@# #$.% ",
" ..& *.= ",
" .@ =.- ",
"..# ;> ,' ",
".. ;)!~ {)!] ",
".. ^/(_ :/(< ",
"..# [}| 12| ",
" .$ .@3| ",
" +.* ..4 ",
" %.= ..%5 ",
" =......45 ",
" -64467 ",
" ",
" "};
#endif

91
bitmaps/Add_Component.xpm Normal file
View File

@ -0,0 +1,91 @@
/* XPM */
#ifndef XPMMAIN
extern char *add_component_xpm[];
#else
char * add_component_xpm[] = {
"16 16 67 1",
" c None",
"! c black",
"# c #D72E2E",
"$ c #D72F2F",
"% c #D62E2E",
"& c #D83434",
"' c #FEFEFF",
"( c #FBFBFF",
") c #F6F6FF",
"* c #F1F1FF",
"+ c #EBE9FC",
", c #E3C3D7",
"- c #DA6C77",
". c #D13838",
"0 c #FF0000",
"1 c #FAFAFF",
"2 c #F5F5FF",
"3 c #F0F0FF",
"4 c #EBEBFF",
"5 c #E6E6FF",
"6 c #E1E1FF",
"7 c #DBDBFF",
"8 c #D6555F",
"9 c #BD5C5C",
": c #9B9B9B",
"; c #F4F4FF",
"< c #EFEFFF",
"= c #EAEAFF",
"> c #E5E5FF",
"? c #E0E0FF",
"@ c #D6D6FF",
"A c #D390AC",
"B c #CB4444",
"C c #E4E4FF",
"D c #DFDFFF",
"E c #DADAFF",
"F c #D5D5FF",
"G c #D0D0FF",
"H c #CCB8E6",
"I c #D73334",
"J c #E9E9FF",
"K c #D4D4FF",
"L c #CFCFFF",
"M c #CACAFF",
"N c #CB8BAF",
"O c #CB4141",
"P c #E3E3FF",
"Q c #DEDEFF",
"R c #D9D9FF",
"S c #C9C9FF",
"T c #C4C4FF",
"U c #D05364",
"V c #B96262",
"W c #9C9C9C",
"X c #DDDDFF",
"Y c #D8D8FF",
"Z c #D3D3FF",
"[ c #CECEFF",
"] c #C9C7FC",
"^ c #C7A8D8",
"_ c #CE647C",
"` c #CD3E3E",
"a c #9E9595",
"b c #D62F2F",
"c c #CC4141",
"d c #BC5C5C",
"e c #9D9595",
" ",
" ",
" ",
" ######$% ",
" &'()*+,-. ",
"0##&123456789 ",
" :&;<=>?7@AB ",
" &<=CDEFGH###0",
" IJCDEKLMNO:::",
" IPQRKLSTUVW ",
"0##IXYZ[]^_`a ",
" :#####bcde: ",
" :::::::: ",
" ",
" ",
" "};
#endif

View File

@ -0,0 +1,39 @@
/* XPM */
#ifndef XPMMAIN
extern char *add_dashed_line_xpm[];
#else
char * add_dashed_line_xpm[] = {
"16 16 15 1",
" c None",
". c #03039B",
"+ c #8E8E9B",
"@ c #00009B",
"# c #1F1F9B",
"$ c #93939B",
"% c #00009A",
"& c #46469A",
"* c #9B9B9B",
"= c #93939A",
"- c #16169A",
"; c #0B0B9B",
"> c #97979B",
", c #1E1E9B",
"' c #91919B",
" ",
" .+ ",
" @#$ ",
" @#$ ",
" @#$ ",
" ",
" %&* ",
" %#= ",
" %#= ",
" -= ",
" ;* ",
" @#> ",
" @#$ ",
" @,$ ",
" ' ",
" "};
#endif

34
bitmaps/Add_Entry.xpm Normal file
View File

@ -0,0 +1,34 @@
/* XPM */
#ifndef XPMMAIN
extern char *add_entry_xpm[];
#else
char * add_entry_xpm[] = {
"16 16 10 1",
" c None",
". c #006800",
"+ c #006900",
"@ c #6C8B6C",
"# c #9B9B9B",
"$ c #6C8C6C",
"% c #9A9A9A",
"& c #6B8B6B",
"* c #9C9C9C",
"= c #6A8B6A",
" ",
" ",
" . ",
" +@ ",
" +@# ",
" +$% ",
" +$% ",
" +&# ",
" .&* ",
" .&* ",
" .&# ",
" +=# ",
" =# ",
" % ",
" ",
" "};
#endif

78
bitmaps/Add_GLabel.xpm Normal file
View File

@ -0,0 +1,78 @@
/* XPM */
#ifndef XPMMAIN
extern char *add_glabel_xpm[];
#else
char * add_glabel_xpm[] = {
"16 16 54 1",
" c None",
". c #695F00",
"+ c #837E52",
"@ c #6D640F",
"# c #6F6714",
"$ c #706818",
"% c #9C9C9C",
"& c #9191FF",
"* c #9B9BFF",
"= c #A5A5FF",
"- c #857F66",
"; c #746D25",
"> c #827D4F",
", c #7E7841",
"' c #8F8C76",
") c #9E9EFF",
"! c #A8A8FF",
"~ c #B2B2FF",
"{ c #BBBBF9",
"] c #7D7539",
"^ c #7A7437",
"/ c #95948B",
"( c #878460",
"_ c #7D773E",
": c #ACACFF",
"< c #B6B6FF",
"[ c #C0C0FF",
"} c #CACAFF",
"| c #BFBDCC",
"1 c #8C896D",
"2 c #6C6209",
"3 c #989894",
"4 c #B9B9FF",
"5 c #C3C3FF",
"6 c #CECEFF",
"7 c #D5D5F9",
"8 c #847C39",
"9 c #7B7437",
"0 c #9B9B9B",
"a c #797233",
"b c #817C4D",
"c c #756D25",
"d c #898664",
"e c #C7C7FF",
"f c #D1D1FF",
"g c #DBDBFF",
"h c #9B9566",
"i c #999997",
"j c #96958D",
"k c #86825B",
"l c #766F2B",
"m c #706716",
"n c #97968F",
"o c #9A9A9A",
" ",
" ",
" ",
" .. ",
" ...+ ..... ",
" .@#$% .&*=-; ",
" .>,.' .)!~{]^ ",
" ../(._ .:<[}|.1",
" .....23.4567890",
"..abbc.d.efgh;i0",
"..j00k.l....mn0 ",
" o0 0o00000 ",
" ",
" ",
" ",
" "};
#endif

84
bitmaps/Add_Junction.xpm Normal file
View File

@ -0,0 +1,84 @@
/* XPM */
#ifndef XPMMAIN
extern char *add_junction_xpm[];
#else
char * add_junction_xpm[] = {
"16 16 60 1",
" c None",
". c #007D00",
"+ c #4D8B4D",
"@ c #9B9B9B",
"# c #000000",
"$ c #000700",
"% c #0A130A",
"& c #282828",
"* c #222222",
"= c #868483",
"- c #E1D5CA",
"; c #B7A595",
"> c #564A3F",
", c #080707",
"' c #151515",
") c #EAE2DB",
"! c #FFEBDA",
"~ c #FFE0C5",
"{ c #FFD5B1",
"] c #FFCA9C",
"^ c #806044",
"/ c #004C00",
"( c #645F59",
"_ c #FFE6CF",
": c #FFDBBB",
"< c #FFD0A6",
"[ c #FFC591",
"} c #FFBA7D",
"| c #E49C5D",
"1 c #000D00",
"2 c #2F552F",
"3 c #64584D",
"4 c #FFD5B0",
"5 c #FFCA9B",
"6 c #FFBF87",
"7 c #FFB472",
"8 c #FFA95D",
"9 c #E48D41",
"0 c #080F08",
"a c #757575",
"b c #16120F",
"c c #EAB485",
"d c #FFB97C",
"e c #FFAF67",
"f c #FFA453",
"g c #FF993E",
"h c #804715",
"i c #3A3A3A",
"j c #414141",
"k c #22180F",
"l c #865931",
"m c #E18B40",
"n c #B76925",
"o c #562E0A",
"p c #131110",
"q c #8E8E8E",
"r c #686868",
"s c #242424",
"t c #3F3F3F",
"u c #909090",
" .. ",
" .+@ ",
" .+@ ",
" #$%& ",
" *=-;>, ",
" ')!~{]^* ",
".../(_:<[}|1... ",
".++234567890+++@",
" @@abcdefghi@@@@",
" jklmnopq ",
" rs$%tu ",
" @.+@ ",
" .+@ ",
" .+@ ",
" .+@ ",
" @@ "};
#endif

27
bitmaps/Add_Line.xpm Normal file
View File

@ -0,0 +1,27 @@
/* XPM */
#ifndef XPMMAIN
extern char *add_line_xpm[];
#else
char * add_line_xpm[] = {
"16 16 3 1",
" c None",
". c #006900",
"+ c #9B9B9B",
" ",
" ",
"...... ",
" ++++.+ ",
" .+ ",
" .+ ",
" .+ ",
" .+ ",
" .+ ",
" .+ ",
" .+ ",
" .......... ",
" ++++++++++",
" ",
" ",
" "};
#endif

View File

@ -0,0 +1,48 @@
/* XPM */
#ifndef XPMMAIN
extern char *add_line_label_xpm[];
#else
char * add_line_label_xpm[] = {
"16 16 24 1",
" c None",
". c #000000",
"+ c #020202",
"@ c #8D8D8D",
"# c #202020",
"$ c #555555",
"% c #9A9A9A",
"& c #8C8C8C",
"* c #080808",
"= c #161616",
"- c #9B9B9B",
"; c #131313",
"> c #969696",
", c #212121",
"' c #7C7C7C",
") c #414141",
"! c #515151",
"~ c #525252",
"{ c #070707",
"] c #0B0B0B",
"^ c #979797",
"/ c #1F1F1F",
"( c #6B6B6B",
"_ c #009B00",
" ",
" ..+ ",
" ..+@ ",
" .#.$% ",
" ..&*=- ",
" .;>,.' ",
" ......)- ",
" ..!~~{]^ ",
" ./-% #+( ",
" -- -- ",
" ",
"________________",
"________________",
"----------------",
" ",
" "};
#endif

78
bitmaps/Add_Polygon.xpm Normal file
View File

@ -0,0 +1,78 @@
/* XPM */
#ifndef XPMMAIN
extern char *add_polygon_xpm[];
#else
char * add_polygon_xpm[] = {
"16 16 54 1",
" c None",
". c #161616",
"+ c #161513",
"@ c #080808",
"# c #222222",
"$ c #F2D7C0",
"% c #F2BC8E",
"& c #120C24",
"* c #00009B",
"= c #000047",
"- c #C5C4C4",
"; c #FEE2CA",
"> c #46372A",
", c #16120F",
"' c #F2B279",
") c #F29647",
"! c #12091F",
"~ c #C5A68C",
"{ c #FEBB7F",
"] c #462B17",
"^ c #000033",
"/ c #140C04",
"( c #130900",
"_ c #000000",
": c #070402",
"< c #1F1211",
"[ c #00005E",
"} c #000091",
"| c #00008C",
"1 c #00009A",
"2 c #00005F",
"3 c #000040",
"4 c #858484",
"5 c #857D75",
"6 c #26262B",
"7 c #FFE3CB",
"8 c #FFC796",
"9 c #25190E",
"0 c #856243",
"a c #855327",
"b c #00006E",
"c c #12122F",
"d c #12112D",
"e c #F2D7C1",
"f c #F2BD8E",
"g c #130D07",
"h c #161210",
"i c #F29747",
"j c #12091E",
"k c #120F2A",
"l c #130901",
"m c #140B04",
"n c #130800",
"o c #130A04",
" .+ @# ",
".$%&**=-;> ",
",')!**=~{]^ ",
" /(__ :<[} ",
" |12 ",
" 345_ ",
" 6789 ",
" _0a_ ",
" bb_ ",
" ** ",
" ** ",
" .+ cd_ ",
" .ef&*****cefg ",
" h'ij*****k'il ",
" mn__ _on_ ",
" "};
#endif

48
bitmaps/Add_Rectangle.xpm Normal file
View File

@ -0,0 +1,48 @@
/* XPM */
#ifndef XPMMAIN
extern char *add_rectangle_xpm[];
#else
char * add_rectangle_xpm[] = {
"16 16 24 1",
" c None",
". c #161616",
"+ c #161513",
"@ c #F2D7C0",
"# c #F2BC8E",
"$ c #120C24",
"% c #00009B",
"& c #16120F",
"* c #F2B279",
"= c #F29647",
"- c #12091F",
"; c #120A21",
"> c #12081D",
", c #000000",
"' c #12122F",
") c #12112D",
"! c #F2D7C1",
"~ c #F2BD8E",
"{ c #130D07",
"] c #120F2A",
"^ c #F29747",
"/ c #130901",
"( c #130A04",
"_ c #130800",
" .+ ",
".@#$%%%%%%%%%% ",
"&*=-%%%%%%%%%% ",
" ;>,, %% ",
" %%, %% ",
" %% %% ",
" %% %% ",
" %% %% ",
" %% %% ",
" %% %% ",
" %% %% ",
" %% '), ",
" %%%%%%%%%%'!~{ ",
" %%%%%%%%%%]*^/ ",
" ,(_, ",
" "};
#endif

28
bitmaps/Add_Text.xpm Normal file
View File

@ -0,0 +1,28 @@
/* XPM */
#ifndef XPMMAIN
extern char *add_text_xpm[];
#else
char * add_text_xpm[] = {
"16 16 4 1",
" c None",
". c #00009B",
"+ c #000098",
"@ c #00005D",
" .............. ",
" .............. ",
" .+ .... +. ",
" .@ .... . ",
" .... ",
" .... ",
" .... ",
" .... ",
" .... ",
" .... ",
" .... ",
" .... ",
" .... ",
" .....+ ",
" ........ ",
" "};
#endif

40
bitmaps/Apply.xpm Normal file
View File

@ -0,0 +1,40 @@
/* XPM */
#ifndef XPMMAIN
extern char *apply_xpm[];
#else
char * apply_xpm[] = {
"16 16 16 1",
" c None",
". c #000000",
"+ c #C8D7E5",
"@ c #8EA8C0",
"# c #9DB8D2",
"$ c #7E94AA",
"% c #8299AF",
"& c #D6E1EB",
"* c #C4CED6",
"= c #ACBED0",
"- c #404040",
"; c #ACB9C5",
"> c #727272",
", c #889FB6",
"' c #B1BFCB",
") c #98B2CC",
" ",
" ",
" ",
" .. ",
" .+@. ",
" .+#$. ",
" .. .+#%. ",
" .&&. .+#%. ",
" .*#=. .+#%. ",
" -=#=.&#%. ",
" .;####%. ",
" >,##%. ",
" .')$. ",
" ... ",
" ",
" "};
#endif

127
bitmaps/Cancel.xpm Normal file
View File

@ -0,0 +1,127 @@
/* XPM */
#ifndef XPMMAIN
extern char *cancel_xpm[];
#else
char * cancel_xpm[] = {
"16 16 103 2",
" c None",
"! c black",
"# c #422019",
"$ c #391C17",
"% c #0D0D0D",
"& c #020202",
"' c #050505",
"( c #321813",
") c #DD8D7D",
"* c #D05F49",
"+ c #4E1D14",
", c #2D1714",
"- c #C16E5E",
". c #AD4632",
"0 c #090504",
"1 c #3E1E18",
"2 c #D3634E",
"3 c #C95641",
"4 c #C64D37",
"5 c #4C1B13",
"6 c #301914",
"7 c #D9705B",
"8 c #C24129",
"9 c #962E1C",
": c #120502",
"; c #0E0B09",
"< c #C34C36",
"= c #C03B22",
"> c #BF3B22",
"? c #C44D36",
"@ c #5C251B",
"A c #1D0F0C",
"B c #D66F5B",
"C c #B93B24",
"D c #922C1B",
"E c #4E160D",
"F c #2F1510",
"G c #BE3B22",
"H c #B23821",
"I c #3B1711",
"J c #CA6D5B",
"K c #B83E27",
"L c #822617",
"M c #2C0B05",
"N c #2B130E",
"O c #BD3B22",
"P c #BA3B22",
"Q c #B73922",
"R c #B45B4A",
"S c #CE523A",
"T c #992F1D",
"U c #200804",
"V c #3C1812",
"W c #BA3A22",
"X c #C84E37",
"Y c #B63922",
"Z c #2F0E07",
"[ c #49160C",
"] c #CE6653",
"^ c #BD3C24",
"_ c #BB3B22",
"` c #B43922",
"a c #2C140F",
"b c #1B0704",
"c c #D17F70",
"d c #BE3F27",
"e c #B63D26",
"f c #BC3B22",
"g c #B03720",
"h c #381914",
"i c #CB7868",
"j c #BD3F28",
"k c #922F1E",
"l c #090909",
"m c #B43A23",
"n c #25120F",
"o c #010101",
"p c #572119",
"q c #CC7261",
"r c #B93A22",
"s c #96311E",
"t c #200B08",
"u c #411710",
"v c #A23A26",
"w c #080505",
"x c #230A06",
"y c #CD7261",
"z c #BD3D25",
"{ c #98311E",
"| c #240D09",
"} c #C23B22",
"~ c #AD3620",
" ! c #26110D",
"!! c #0F0907",
"#! c #912F1E",
"$! c #94301E",
"%! c #180906",
"&! c #A13521",
"'! c #26110E",
"(! c #2C0E09",
")! c #1C0905",
"*! c #341A15",
"+! c #311712",
" ",
" # $ % & ' ",
" ( ) * + % , - . 0 ",
" 1 2 3 4 5 6 7 8 9 : ",
" ; < = > ? @ A B C D E ",
" F < G G H I ' J K L M ",
" N < O P Q R S T U ",
" V < W W X Y Z & ",
" & [ ] ^ W _ ` a ",
" b c d e Q f O g N ",
" h i j k l I < G G m n ",
" o p q r s t u ? > = v w ",
" x y z { | 5 4 } ~ ! ",
" !!#!$!%! % + X &!'! ",
" (!)! % *!+! ",
" "};
#endif

42
bitmaps/CopyBlock.xpm Normal file
View File

@ -0,0 +1,42 @@
/* XPM */
#ifndef XPMMAIN
extern char *copyblock_xpm[];
#else
char * copyblock_xpm[] = {
"16 16 18 1",
" c None",
". c #000000",
"+ c #B3B3B3",
"@ c #FFFFFF",
"# c #D6D6D6",
"$ c #646464",
"% c #4D4D4D",
"& c #505050",
"* c #696969",
"= c #787878",
"- c #4C4C4C",
"; c #E3E3E3",
"> c #5A5A5A",
", c #535353",
"' c #919191",
") c #A2A2A2",
"! c #5C5C5C",
"~ c #666666",
".......... ",
".+@@@@@@#. ",
".@@@@@@@@. ",
".@$%&@*=@. ",
".@@@@@@@@. ",
".@&-@&......... ",
".@@@@.+@@@@@@#. ",
".;>,'.@@@@@@@@. ",
".@@@@.@$%&@*=@. ",
".#@@@.@@@@@@@@. ",
"......@&-@)*+@. ",
" .@@@@@@@@. ",
" .;>,'@!~@. ",
" .@@@@@@@@. ",
" .#@@@@@@#. ",
" ......... "};
#endif

77
bitmaps/Cursor_Shape.xpm Normal file
View File

@ -0,0 +1,77 @@
/* XPM */
#ifndef XPMMAIN
extern char *cursor_shape_xpm[];
#else
char * cursor_shape_xpm[] = {
"16 16 53 1",
" c None",
". c #373737",
"+ c #9B9B9B",
"@ c #2E2E2E",
"# c #323232",
"$ c #252525",
"% c #121212",
"& c #696969",
"* c #858585",
"= c #777777",
"- c #040404",
"; c #383838",
"> c #7D7D7D",
", c #FFFFFF",
"' c #BDBDCB",
") c #28282F",
"! c #6D6D6D",
"~ c #F7F7FF",
"{ c #E6E6FF",
"] c #D1D1F9",
"^ c #61617D",
"/ c #050507",
"( c #363636",
"_ c #5E5E5E",
": c #F0F0FF",
"< c #DFDFFF",
"[ c #BFBFEC",
"} c #6E6E93",
"| c #1C1C27",
"1 c #4C4C4E",
"2 c #E8E8FF",
"3 c #9F9FBC",
"4 c #7B7B9D",
"5 c #343434",
"6 c #9A9A9A",
"7 c #38383B",
"8 c #52525D",
"9 c #1C1C1D",
"0 c #A6A6DE",
"a c #393953",
"b c #636363",
"c c #242424",
"d c #7E7E7E",
"e c #7A7A7A",
"f c #4E4E6C",
"g c #9B9BED",
"h c #12121F",
"i c #959595",
"j c #2D2D30",
"k c #9494EC",
"l c #54548A",
"m c #000000",
"n c #181827",
" . ",
" .+ ",
"..@#........... ",
" +$%&++++++++++ ",
" .*=- ",
" ;>,') ",
" .!~{]^/ ",
" (_:<[}| ",
" (123456+ ",
" .7890ab ",
" .cdefgh ",
" .i+ jklm ",
" .6 !n# ",
" .+ e++ ",
" .+ + ",
" + "};
#endif

46
bitmaps/Datasheet.xpm Normal file
View File

@ -0,0 +1,46 @@
/* XPM */
#ifndef XPMMAIN
extern char *datasheet_xpm[];
#else
char * datasheet_xpm[] = {
"16 16 22 1",
" c None",
". c #000000",
"+ c #010101",
"@ c #FEFEFE",
"# c #EBEBEB",
"$ c #696969",
"% c #272727",
"& c #FFFFFF",
"* c #787878",
"= c #D4D4D4",
"- c #212121",
"; c #3A3A3A",
"> c #757575",
", c #595959",
"' c #B0B0B0",
") c #8E8E8E",
"! c #C3C3C3",
"~ c #913131",
"{ c #8D2D2D",
"] c #852525",
"^ c #C69696",
"/ c #C29292",
" ..........+. ",
".@#########$%. ",
".&##.#.#.#.*=-. ",
".&#........;>,. ",
".&#';######.)!. ",
".&#';######.#!. ",
".&#.........#!. ",
".&##.#.#.#.##!. ",
".&###########!. ",
".~{{{{{{{{{{{]. ",
".~&&^{&&^{&&&]. ",
".~&{&{&{&{&{{]. ",
".~&{&{&{&{&&{]. ",
".~&&^{&{&{&{{]. ",
".~&]]]&&/]&]]]. ",
"............... "};
#endif

162
bitmaps/Delete_Arc.xpm Normal file
View File

@ -0,0 +1,162 @@
/* XPM */
#ifndef XPMMAIN
extern char *delete_arc_xpm[];
#else
char * delete_arc_xpm[] = {
"16 16 138 2",
" c None",
". c #00009B",
"+ c #000099",
"@ c #000097",
"# c #000096",
"$ c #000073",
"% c #000039",
"& c #000036",
"* c #000051",
"= c #000086",
"- c #00008E",
"; c #000093",
"> c #000085",
", c #000074",
"' c #0D0D0D",
") c #414141",
"! c #494949",
"~ c #3D3D3D",
"{ c #2B2B2B",
"] c #000001",
"^ c #010177",
"/ c #000082",
"( c #000000",
"_ c #838170",
": c #EEEBD6",
"< c #F0EFE7",
"[ c #ECEBE2",
"} c #C5C4B8",
"| c #525146",
"1 c #01013F",
"2 c #0F0F0F",
"3 c #C0BEA3",
"4 c #BFBDA3",
"5 c #797866",
"6 c #47463F",
"7 c #262624",
"8 c #35342D",
"9 c #858371",
"0 c #9E9C86",
"a c #A19F89",
"b c #A3A18B",
"c c #2A2A2A",
"d c #D1CFBA",
"e c #DAD8C2",
"f c #E0DECD",
"g c #B7B5A0",
"h c #63615A",
"i c #383735",
"j c #3B3B32",
"k c #605F52",
"l c #989681",
"m c #B5B39A",
"n c #B1B097",
"o c #A2A089",
"p c #E6E2D1",
"q c #F2EFE7",
"r c #F0EFE2",
"s c #E8E7D8",
"t c #E3E0D0",
"u c #D3D0BC",
"v c #C1BFA5",
"w c #ADAB92",
"x c #BEBCA2",
"y c #C4C2AB",
"z c #B6B49B",
"A c #787665",
"B c #888774",
"C c #EFEBD0",
"D c #F9F6E7",
"E c #F7F3EB",
"F c #F6F5EC",
"G c #F6F5EA",
"H c #F3F1E4",
"I c #EAE8D7",
"J c #DCDBC9",
"K c #9B9988",
"L c #626154",
"M c #575649",
"N c #515045",
"O c #727064",
"P c #9D9B8F",
"Q c #E2DFC6",
"R c #E7E3CD",
"S c #E0DEC9",
"T c #CFCFC9",
"U c #8C8B7E",
"V c #757463",
"W c #676658",
"X c #424138",
"Y c #282721",
"Z c #1E1E1A",
"` c #33332F",
" . c #4A4843",
".. c #676661",
"+. c #6F6E65",
"@. c #6A6A63",
"#. c #6D6B5C",
"$. c #57564A",
"%. c #383830",
"&. c #161514",
"*. c #191915",
"=. c #1E1D18",
"-. c #292922",
";. c #9E9E93",
">. c #4C4C3F",
",. c #35352F",
"'. c #292925",
"). c #2E2E29",
"!. c #0E0E0C",
"~. c #0A0A08",
"{. c #0F0F0C",
"]. c #3D3D37",
"^. c #33332A",
"/. c #23231E",
"(. c #2A2A23",
"_. c #A3A297",
":. c #B5B4AC",
"<. c #706F66",
"[. c #9F9F90",
"}. c #737262",
"|. c #3F3F34",
"1. c #68685A",
"2. c #38382E",
"3. c #68685E",
"4. c #3E3E33",
"5. c #25251F",
"6. c #2B2B24",
"7. c #ABABA1",
"8. c #D7D7D0",
"9. c #89897E",
"0. c #D4D3CC",
"a. c #86867A",
"b. c #57564E",
"c. c #919185",
"d. c #49493C",
"e. c #77776A",
"f. c #4F4F41",
"g. c #282821",
" . . . . . ",
" . . . . . . . . + @ ",
" # $ % & * = . . - ",
" ; . > ",
" # . , ",
" ' ) ! ~ { ] ^ / ",
" ( ( _ : < [ } | ] ] 1 ",
" 2 3 4 5 6 7 8 9 0 a b ( ",
" c d e f g h i j k l m n o ( ",
" ( p q r s t u v w x y z A ( ",
" ( B C D E F G H I J K L M ( ",
" ( N O P Q R S T U V W X Y ( ",
" Z ` ...+.@.#.$.%.&.*.=. ",
" -.;.>.,.'.).!.~.{.].^./. ",
" (._.:.<.[.}.|.1.2.3.4.5. ",
" 6.7.8.9.0.a.b.c.d.e.f.g. "};
#endif

150
bitmaps/Delete_Circle.xpm Normal file
View File

@ -0,0 +1,150 @@
/* XPM */
#ifndef XPMMAIN
extern char *delete_circle_xpm[];
#else
char * delete_circle_xpm[] = {
"16 16 126 2",
" c None",
". c #00009B",
"+ c #000096",
"@ c #00008C",
"# c #000053",
"$ c #00008A",
"% c #00009A",
"& c #000073",
"* c #00007A",
"= c #000092",
"- c #00006F",
"; c #000083",
"> c #0D0D0D",
", c #414141",
"' c #494949",
") c #3D3D3D",
"! c #2B2B2B",
"~ c #000001",
"{ c #010177",
"] c #000081",
"^ c #000000",
"/ c #838170",
"( c #EEEBD6",
"_ c #F0EFE7",
": c #ECEBE2",
"< c #C5C4B8",
"[ c #525146",
"} c #010101",
"| c #010140",
"1 c #0F0F0F",
"2 c #C0BEA3",
"3 c #BFBDA3",
"4 c #797866",
"5 c #47463F",
"6 c #262624",
"7 c #35342D",
"8 c #858371",
"9 c #9E9C87",
"0 c #A19F89",
"a c #A3A18B",
"b c #2A2A2B",
"c c #D1CFBA",
"d c #DAD8C2",
"e c #E0DECD",
"f c #B7B5A0",
"g c #63615A",
"h c #383735",
"i c #3B3B32",
"j c #605F53",
"k c #989682",
"l c #B5B39A",
"m c #B1B096",
"n c #A2A089",
"o c #E6E2D1",
"p c #F2EFE7",
"q c #F0EFE2",
"r c #E8E7D8",
"s c #E3E0D0",
"t c #D3D0BC",
"u c #C1BFA6",
"v c #ADAB93",
"w c #BEBCA3",
"x c #C4C2AB",
"y c #B6B49A",
"z c #787665",
"A c #888775",
"B c #EFEBD1",
"C c #F9F6E8",
"D c #F7F3EC",
"E c #F6F5ED",
"F c #F6F5EB",
"G c #F3F1E5",
"H c #EAE8D8",
"I c #DCDBCA",
"J c #9B9987",
"K c #626153",
"L c #575649",
"M c #00003B",
"N c #515046",
"O c #727065",
"P c #9D9B90",
"Q c #E2DFC7",
"R c #E7E3CE",
"S c #E0DECA",
"T c #CFCFCA",
"U c #8C8B7F",
"V c #757463",
"W c #676657",
"X c #424137",
"Y c #282721",
"Z c #1E1E1A",
"` c #33332F",
" . c #4A4844",
".. c #676662",
"+. c #6F6E66",
"@. c #6A6A64",
"#. c #6D6B5C",
"$. c #57564A",
"%. c #383830",
"&. c #161514",
"*. c #191915",
"=. c #1E1D18",
"-. c #292922",
";. c #9E9E93",
">. c #4C4C3F",
",. c #35352F",
"'. c #292925",
"). c #2E2E29",
"!. c #0E0E0C",
"~. c #0A0A08",
"{. c #0F0F0C",
"]. c #3D3D37",
"^. c #33332A",
"/. c #23231E",
"(. c #2A2A23",
"_. c #A3A297",
":. c #B5B4AC",
"<. c #706F66",
"[. c #9F9F90",
"}. c #737262",
"|. c #3F3F34",
"1. c #68685A",
"2. c #38382E",
"3. c #68685E",
"4. c #3E3E33",
"5. c #25251F",
" . . . . ",
" . . . . . . . + ",
" . . @ # # $ . % ",
" . . & * . = ",
" . @ = . - ",
". . # . ; ",
". . > , ' ) ! ~ { ] ",
". . ^ ^ / ( _ : < [ ~ ~ } ",
". . | 1 2 3 4 5 6 7 8 9 0 a ^ ",
" . b c d e f g h i j k l m n ^ ",
" + ~ o p q r s t u v w x y z ^ ",
" ~ A B C D E F G H I J K L ^ ",
" M N O P Q R S T U V W X Y ^ ",
" Z ` ...+.@.#.$.%.&.*.=. ",
" -.;.>.,.'.).!.~.{.].^./. ",
" (._.:.<.[.}.|.1.2.3.4.5. "};
#endif

134
bitmaps/Delete_Cotation.xpm Normal file
View File

@ -0,0 +1,134 @@
/* XPM */
#ifndef XPMMAIN
extern char *delete_cotation_xpm[];
#else
char * delete_cotation_xpm[] = {
"16 16 110 2",
" c None",
". c #000000",
"+ c #00009B",
"@ c #000097",
"# c #000099",
"$ c #00008B",
"% c #000095",
"& c #000088",
"* c #000072",
"= c #010101",
"- c #0D0D0D",
"; c #414141",
"> c #494949",
", c #3D3D3D",
"' c #2B2B2B",
") c #01014F",
"! c #000081",
"~ c #00008F",
"{ c #010166",
"] c #838170",
"^ c #EEEBD6",
"/ c #F0EFE7",
"( c #ECEBE2",
"_ c #C5C4B8",
": c #525146",
"< c #000001",
"[ c #01016F",
"} c #0F0F0F",
"| c #C0BEA3",
"1 c #BFBDA3",
"2 c #797866",
"3 c #47463F",
"4 c #262624",
"5 c #35342D",
"6 c #858371",
"7 c #9E9C87",
"8 c #A19F88",
"9 c #A3A18A",
"0 c #2A2A2A",
"a c #D1CFBA",
"b c #DAD8C2",
"c c #E0DECD",
"d c #B7B5A0",
"e c #63615A",
"f c #383735",
"g c #3B3B32",
"h c #605F52",
"i c #989681",
"j c #B5B399",
"k c #B1B096",
"l c #A2A08A",
"m c #E6E2D1",
"n c #F2EFE7",
"o c #F0EFE2",
"p c #E8E7D8",
"q c #E3E0D0",
"r c #D3D0BC",
"s c #C1BFA5",
"t c #ADAB92",
"u c #BEBCA2",
"v c #C4C2AA",
"w c #B6B49A",
"x c #787666",
"y c #888774",
"z c #EFEBD0",
"A c #F9F6E7",
"B c #F7F3EB",
"C c #F6F5EC",
"D c #F6F5EA",
"E c #F3F1E4",
"F c #EAE8D7",
"G c #DCDBC9",
"H c #9B9987",
"I c #626153",
"J c #57564A",
"K c #515045",
"L c #727064",
"M c #9D9B8F",
"N c #E2DFC6",
"O c #E7E3CD",
"P c #E0DEC9",
"Q c #CFCFC9",
"R c #8C8B7E",
"S c #757463",
"T c #676657",
"U c #424137",
"V c #282722",
"W c #1E1E1A",
"X c #33332F",
"Y c #4A4843",
"Z c #676661",
"` c #6F6E65",
" . c #6A6A63",
".. c #6D6B5C",
"+. c #383830",
"@. c #161514",
"#. c #191915",
"$. c #1E1D19",
"%. c #292922",
"&. c #9E9E93",
"*. c #4C4C3F",
"=. c #35352F",
"-. c #292925",
";. c #2E2E29",
">. c #0E0E0C",
",. c #0A0A08",
"'. c #0F0F0C",
"). c #3D3D37",
"!. c #33332A",
"~. c #23231E",
" . . ",
" . . . ",
" . . . . ",
" . . ",
"+ + @ . . # + ",
"+ $ @ % + ",
"+ # + + + + + + + + + + + + + ",
"+ & * = - ; > , ' . ) ! + . ",
"+ ~ { . . ] ^ / ( _ : < . [ ",
"+ } | 1 2 3 4 5 6 7 8 9 < ",
"+ 0 a b c d e f g h i j k l . ",
"+ . m n o p q r s t u v w x . ",
"+ . y z A B C D E F G H I J . ",
"+ . K L M N O P Q R S T U V . ",
" W X Y Z ` ...J +.@.#.$. ",
" %.&.*.=.-.;.>.,.'.).!.~. "};
#endif

148
bitmaps/Delete_Field.xpm Normal file
View File

@ -0,0 +1,148 @@
/* XPM */
#ifndef XPMMAIN
extern char *delete_field_xpm[];
#else
char * delete_field_xpm[] = {
"16 16 124 2",
" c None",
". c #D2D2D2",
"+ c #9D9D9D",
"@ c #DEDEDE",
"# c #E0E0E0",
"$ c #5C5C5C",
"% c #000000",
"& c #EDEDED",
"* c #939393",
"= c #FDFDFD",
"- c #E4E4E4",
"; c #F1F1F1",
"> c #C8C8C8",
", c #E7E7E7",
"' c #F4F4F4",
") c #8F8F8F",
"! c #E9E9E9",
"~ c #F6F6F6",
"{ c #C0C0C0",
"] c #FAFAFA",
"^ c #9C9C9C",
"/ c #999999",
"( c #F0F0F0",
"_ c #B5B5B5",
": c #0E0E0E",
"< c #424242",
"[ c #4A4A4A",
"} c #3E3E3E",
"| c #2C2C2C",
"1 c #010101",
"2 c #C1C1C1",
"3 c #DDDDDD",
"4 c #7B7B7B",
"5 c #848271",
"6 c #EFECD7",
"7 c #F1F0E8",
"8 c #EDECE3",
"9 c #C6C5B9",
"0 c #535246",
"a c #707070",
"b c #0F0F0F",
"c c #C0BEA3",
"d c #BFBDA3",
"e c #797866",
"f c #47463F",
"g c #262624",
"h c #35342D",
"i c #858371",
"j c #9E9C86",
"k c #A19F88",
"l c #A3A18A",
"m c #2A2A2A",
"n c #D1CFBA",
"o c #DAD8C2",
"p c #E0DECD",
"q c #B7B5A0",
"r c #63615A",
"s c #383735",
"t c #3B3B32",
"u c #605F52",
"v c #989681",
"w c #B5B399",
"x c #B1B096",
"y c #A2A089",
"z c #E6E2D1",
"A c #F2EFE7",
"B c #F0EFE2",
"C c #E8E7D8",
"D c #E3E0D0",
"E c #D3D0BC",
"F c #C1BFA5",
"G c #ADAB92",
"H c #BEBCA2",
"I c #C4C2AA",
"J c #B6B49A",
"K c #787665",
"L c #888774",
"M c #EFEBD0",
"N c #F9F6E7",
"O c #F7F3EB",
"P c #F6F5EC",
"Q c #F6F5EA",
"R c #F3F1E4",
"S c #EAE8D7",
"T c #DCDBC9",
"U c #9B9987",
"V c #626153",
"W c #575649",
"X c #515045",
"Y c #727064",
"Z c #9D9B8F",
"` c #E2DFC6",
" . c #E7E3CD",
".. c #E0DEC9",
"+. c #CFCFC9",
"@. c #8C8B7E",
"#. c #757463",
"$. c #676657",
"%. c #424137",
"&. c #282721",
"*. c #1E1E1A",
"=. c #33332F",
"-. c #4A4843",
";. c #676661",
">. c #6F6E65",
",. c #6A6A63",
"'. c #6D6B5C",
"). c #57564A",
"!. c #383830",
"~. c #161514",
"{. c #191915",
"]. c #1E1D18",
"^. c #292922",
"/. c #9E9E93",
"(. c #4C4C3F",
"_. c #35352F",
":. c #292925",
"<. c #2E2E29",
"[. c #0E0E0C",
"}. c #0A0A08",
"|. c #0F0F0C",
"1. c #3D3D37",
"2. c #33332A",
"3. c #23231E",
". + + + + + + + + + + + + + + . ",
"+ . @ @ @ @ @ @ @ @ @ @ @ @ @ + ",
"+ # $ % % $ & % % % * & = = = + ",
"+ - % ; ; % ; % ; > % ; = = = + ",
"+ , % ' ' % ' % % % ) ' = = = + ",
"+ ! % % % % ~ % ~ { % ~ = = = + ",
"+ & % ] ] % ] % % % ^ ] / = / + ",
"+ ( = & _ : < [ } | 1 2 3 = = + ",
". + 4 1 1 5 6 7 8 9 0 1 1 a + . ",
" b c d e f g h i j k l % ",
" m n o p q r s t u v w x y % ",
" % z A B C D E F G H I J K % ",
" % L M N O P Q R S T U V W % ",
" % X Y Z ` ...+.@.#.$.%.&.% ",
" *.=.-.;.>.,.'.).!.~.{.]. ",
" ^./.(._.:.<.[.}.|.1.2.3. "};
#endif

155
bitmaps/Delete_Line.xpm Normal file
View File

@ -0,0 +1,155 @@
/* XPM */
#ifndef XPMMAIN
extern char *delete_line_xpm[];
#else
char * delete_line_xpm[] = {
"16 16 131 2",
" c None",
". c #007D00",
"+ c #4D8B4D",
"@ c #9B9B9B",
"# c #060606",
"$ c #202020",
"% c #242424",
"& c #1E1E1E",
"* c #151515",
"= c #000000",
"- c #48473F",
"; c #97968B",
"> c #9C9C98",
", c #94948F",
"' c #787872",
") c #292822",
"! c #080808",
"~ c #605F51",
"{ c #5F5E51",
"] c #7E7D6B",
"^ c #9A988A",
"/ c #8B8A85",
"( c #908F87",
"_ c #A5A494",
": c #787766",
"< c #504F44",
"[ c #515045",
"} c #161616",
"| c #706F65",
"1 c #CDCBB3",
"2 c #CFCDB8",
"3 c #989683",
"4 c #55534C",
"5 c #2F2F2D",
"6 c #383830",
"7 c #737161",
"8 c #9B9984",
"9 c #ABA991",
"0 c #AAA990",
"a c #515044",
"b c #DBD8C5",
"c c #E6E3D4",
"d c #E8E6D7",
"e c #CFCEBC",
"f c #A3A095",
"g c #858379",
"h c #7E7D6C",
"i c #868572",
"j c #ABA992",
"k c #BDBBA2",
"l c #B4B298",
"m c #8D8B77",
"n c #B7B5A2",
"o c #F0EDDB",
"p c #F4F2E4",
"q c #EFEDE1",
"r c #ECEADE",
"s c #E4E2D3",
"t c #DAD8C4",
"u c #CBC9B5",
"v c #CDCBB6",
"w c #B0AE99",
"x c #8C8A77",
"y c #676657",
"z c #6D6C5C",
"A c #B0AD9A",
"B c #CBC8BB",
"C c #ECE9D8",
"D c #EEECDC",
"E c #EBE9D9",
"F c #E1E0D6",
"G c #BBBAAA",
"H c #A8A796",
"I c #817F6F",
"J c #525145",
"K c #3F3F35",
"L c #383730",
"M c #525149",
"N c #747269",
"O c #A4A293",
"P c #ABA899",
"Q c #A5A496",
"R c #9E9D92",
"S c #727164",
"T c #565649",
"U c #3F3E36",
"V c #2E2D26",
"W c #23221D",
"X c #24241E",
"Y c #696961",
"Z c #4B4A41",
"` c #4E4D48",
" . c #4C4B45",
".. c #4C4C46",
"+. c #3E3D34",
"@. c #313029",
"#. c #2A2926",
"$. c #262620",
"%. c #21201B",
"&. c #2A2A23",
"*. c #A1A095",
"=. c #808076",
"-. c #52524A",
";. c #64645B",
">. c #505045",
",. c #272720",
"'. c #393931",
"). c #24241D",
"!. c #39392F",
"~. c #24241F",
"{. c #2B2B24",
"]. c #A7A79C",
"^. c #C6C5BE",
"/. c #7D7C72",
"(. c #BAB9AE",
"_. c #7D7C6E",
":. c #7D7D70",
"<. c #404035",
"[. c #6F6F64",
"}. c #46463A",
"|. c #ABABA1",
"1. c #D7D7D0",
"2. c #8B8B7F",
"3. c #D7D7CF",
"4. c #989888",
"5. c #59594F",
"6. c #98988B",
"7. c #4A4A3E",
"8. c #77776A",
"9. c #4F4F41",
"0. c #282821",
" ",
". . . . . . . . . . . . . . . ",
". + + + + + + + + + + + + + + @ ",
" @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
" # $ % & * = ",
" = = - ; > , ' ) = = ",
" ! ~ { ] ^ / ( _ : < [ = ",
" } | 1 2 3 4 5 6 7 8 9 0 a = ",
" * b c d e f g h i j k l m = ",
" = n o p q r s t u v w x y = ",
" = z A B C D E F G H I J K = ",
" L M N O P Q R S T U V W ",
" X Y Z ` ...+.@.X #.$.%. ",
" &.*.=.-.;.>.,.'.).-.!.~. ",
" {.].^./.(._.Z :.<.[.}.,. ",
" {.|.1.2.3.4.5.6.7.8.9.0. "};
#endif

144
bitmaps/Delete_Polygon.xpm Normal file
View File

@ -0,0 +1,144 @@
/* XPM */
#ifndef XPMMAIN
extern char *Delete_Polygon_xpm[];
#else
char * Delete_Polygon_xpm[] = {
"16 16 120 2",
" c None",
". c #00009B",
"+ c #000099",
"@ c #00007D",
"# c #000094",
"$ c #000093",
"% c #00008C",
"& c #000098",
"* c #000080",
"= c #0D0D0D",
"- c #414141",
"; c #494949",
"> c #3D3D3D",
", c #2B2B2C",
"' c #000001",
") c #010101",
"! c #000000",
"~ c #838170",
"{ c #EEEBD6",
"] c #F0EFE7",
"^ c #ECEBE2",
"/ c #C5C4B9",
"( c #525146",
"_ c #0F0F0F",
": c #C0BEA3",
"< c #BFBDA3",
"[ c #797866",
"} c #47463F",
"| c #262624",
"1 c #35342D",
"2 c #858372",
"3 c #9E9C87",
"4 c #A19F88",
"5 c #A3A18A",
"6 c #2A2A2A",
"7 c #D1CFBA",
"8 c #DAD8C2",
"9 c #E0DECD",
"0 c #B7B5A0",
"a c #63615A",
"b c #383735",
"c c #3B3B32",
"d c #605F53",
"e c #989682",
"f c #B5B399",
"g c #B1B096",
"h c #A2A089",
"i c #E6E2D1",
"j c #F2EFE7",
"k c #F0EFE2",
"l c #E8E7D8",
"m c #E3E0D0",
"n c #D3D0BC",
"o c #C1BFA5",
"p c #ADAB93",
"q c #BEBCA3",
"r c #C4C2AA",
"s c #B6B49A",
"t c #787665",
"u c #888775",
"v c #EFEBD1",
"w c #F9F6E8",
"x c #F7F3EC",
"y c #F6F5ED",
"z c #F6F5EB",
"A c #F3F1E5",
"B c #EAE8D8",
"C c #DCDBCA",
"D c #9B9987",
"E c #626153",
"F c #575649",
"G c #00004D",
"H c #515046",
"I c #727065",
"J c #9D9B90",
"K c #E2DFC7",
"L c #E7E3CE",
"M c #E0DECA",
"N c #CFCFCA",
"O c #8C8B7F",
"P c #757464",
"Q c #676657",
"R c #424137",
"S c #282721",
"T c #1E1E1A",
"U c #33332F",
"V c #4A4843",
"W c #676661",
"X c #6F6E65",
"Y c #6A6A63",
"Z c #6D6B5C",
"` c #57564A",
" . c #383830",
".. c #161514",
"+. c #191915",
"@. c #1E1D18",
"#. c #292922",
"$. c #9E9E93",
"%. c #4C4C3F",
"&. c #35352F",
"*. c #292925",
"=. c #2E2E29",
"-. c #0E0E0C",
";. c #0A0A08",
">. c #0F0F0C",
",. c #3D3D37",
"'. c #33332A",
"). c #23231E",
"!. c #2A2A23",
"~. c #A3A297",
"{. c #B5B4AC",
"]. c #706F66",
"^. c #9F9F90",
"/. c #737262",
"(. c #3F3F34",
"_. c #68685A",
":. c #38382E",
"<. c #68685E",
"[. c #3E3E33",
"}. c #25251F",
". . . . . . . . ",
". . . . . . . . + ",
" @ . # ",
" $ . % ",
" & . * ",
" . . ",
" = - ; > , ' ) ",
" ! ! ~ { ] ^ / ( ! ! ",
" _ : < [ } | 1 2 3 4 5 ! ",
" 6 7 8 9 0 a b c d e f g h ! ",
" ! i j k l m n o p q r s t ! ",
" . ' u v w x y z A B C D E F ! ",
" . G H I J K L M N O P Q R S ! ",
" T U V W X Y Z ` ...+.@. ",
" #.$.%.&.*.=.-.;.>.,.'.). ",
" !.~.{.].^./.(._.:.<.[.}. "};
#endif

View File

@ -0,0 +1,138 @@
/* XPM */
#ifndef XPMMAIN
extern char *delete_rectangle_xpm[];
#else
char * delete_rectangle_xpm[] = {
"16 16 114 2",
" c None",
". c #00009B",
"+ c #0D0D0D",
"@ c #414141",
"# c #494949",
"$ c #3D3D3D",
"% c #2B2B2B",
"& c #000001",
"* c #010177",
"= c #000000",
"- c #838170",
"; c #EEEBD6",
"> c #F0EFE7",
", c #ECEBE2",
"' c #C5C4B8",
") c #525146",
"! c #010101",
"~ c #0F0F0F",
"{ c #C0BEA3",
"] c #BFBDA3",
"^ c #797866",
"/ c #47463F",
"( c #262624",
"_ c #35342D",
": c #858371",
"< c #9E9C87",
"[ c #A19F89",
"} c #A3A18A",
"| c #2A2A2A",
"1 c #D1CFBA",
"2 c #DAD8C2",
"3 c #E0DECD",
"4 c #B7B5A0",
"5 c #63615A",
"6 c #383735",
"7 c #3B3B32",
"8 c #605F52",
"9 c #989682",
"0 c #B5B39A",
"a c #B1B096",
"b c #A2A089",
"c c #E6E2D1",
"d c #F2EFE7",
"e c #F0EFE2",
"f c #E8E7D8",
"g c #E3E0D0",
"h c #D3D0BC",
"i c #C1BFA5",
"j c #ADAB92",
"k c #BEBCA3",
"l c #C4C2AB",
"m c #B6B49A",
"n c #787665",
"o c #888775",
"p c #EFEBD1",
"q c #F9F6E8",
"r c #F7F3EC",
"s c #F6F5ED",
"t c #F6F5EB",
"u c #F3F1E5",
"v c #EAE8D8",
"w c #DCDBCA",
"x c #9B9988",
"y c #626153",
"z c #575649",
"A c #00004D",
"B c #515046",
"C c #727065",
"D c #9D9B90",
"E c #E2DFC7",
"F c #E7E3CE",
"G c #E0DECA",
"H c #CFCFCA",
"I c #8C8B7F",
"J c #757464",
"K c #676657",
"L c #424137",
"M c #282721",
"N c #1E1E1A",
"O c #33332F",
"P c #4A4843",
"Q c #676661",
"R c #6F6E65",
"S c #6A6A63",
"T c #6D6B5C",
"U c #57564A",
"V c #383830",
"W c #161514",
"X c #191915",
"Y c #1E1D18",
"Z c #292922",
"` c #9E9E93",
" . c #4C4C3F",
".. c #35352F",
"+. c #292925",
"@. c #2E2E29",
"#. c #0E0E0C",
"$. c #0A0A08",
"%. c #0F0F0C",
"&. c #3D3D37",
"*. c #33332A",
"=. c #23231E",
"-. c #2A2A23",
";. c #A3A297",
">. c #B5B4AC",
",. c #706F66",
"'. c #9F9F90",
"). c #737262",
"!. c #3F3F34",
"~. c #68685A",
"{. c #38382E",
"]. c #68685E",
"^. c #3E3E33",
"/. c #25251F",
". . . . . . . . . . . . . ",
". . . . . . . . . . . . . ",
". . . . ",
". . . . ",
". . . . ",
". . . . ",
". . + @ # $ % & * ",
". . = = - ; > , ' ) & = ",
". . ! ~ { ] ^ / ( _ : < [ } = ",
". . | 1 2 3 4 5 6 7 8 9 0 a b = ",
". . = c d e f g h i j k l m n = ",
". . & o p q r s t u v w x y z = ",
". . A B C D E F G H I J K L M = ",
" N O P Q R S T U V W X Y ",
" Z ` ...+.@.#.$.%.&.*.=. ",
" -.;.>.,.'.).!.~.{.].^./. "};
#endif

135
bitmaps/Delete_Segment.xpm Normal file
View File

@ -0,0 +1,135 @@
/* XPM */
#ifndef XPMMAIN
extern char *delete_segment_xpm[];
#else
char * delete_segment_xpm[] = {
"16 16 111 2",
" c None",
". c #007D00",
"+ c #007C00",
"@ c #0D0D0D",
"# c #414141",
"$ c #494949",
"% c #3D3D3D",
"& c #2B2B2B",
"* c #000000",
"= c #838170",
"- c #EEEBD6",
"; c #F0EFE7",
"> c #ECEBE2",
", c #C5C4B8",
"' c #525145",
") c #0F0F0F",
"! c #C0BEA3",
"~ c #BFBDA3",
"{ c #797866",
"] c #47463F",
"^ c #262624",
"/ c #35342D",
"( c #858371",
"_ c #9E9C86",
": c #A19F88",
"< c #A3A18A",
"[ c #2A2A2A",
"} c #D1CFBA",
"| c #DAD8C2",
"1 c #E0DECD",
"2 c #B7B5A0",
"3 c #63615A",
"4 c #383735",
"5 c #3B3B32",
"6 c #605F52",
"7 c #989681",
"8 c #B5B399",
"9 c #B1B096",
"0 c #A2A089",
"a c #E6E2D1",
"b c #F2EFE7",
"c c #F0EFE2",
"d c #E8E7D8",
"e c #E3E0D0",
"f c #D3D0BC",
"g c #C1BFA5",
"h c #ADAB92",
"i c #BEBCA2",
"j c #C4C2AA",
"k c #B6B49A",
"l c #787665",
"m c #888774",
"n c #EFEBD0",
"o c #F9F6E7",
"p c #F7F3EB",
"q c #F6F5EC",
"r c #F6F5EA",
"s c #F3F1E4",
"t c #EAE8D7",
"u c #DCDBC9",
"v c #9B9987",
"w c #626153",
"x c #575649",
"y c #515045",
"z c #727064",
"A c #9D9B8F",
"B c #E2DFC6",
"C c #E7E3CD",
"D c #E0DEC9",
"E c #CFCFC9",
"F c #8C8B7E",
"G c #757463",
"H c #676657",
"I c #424137",
"J c #282721",
"K c #1E1E1A",
"L c #33332F",
"M c #4A4843",
"N c #676661",
"O c #6F6E65",
"P c #6A6A63",
"Q c #6D6B5C",
"R c #57564A",
"S c #383830",
"T c #161514",
"U c #191915",
"V c #1E1D18",
"W c #292922",
"X c #9E9E93",
"Y c #4C4C3F",
"Z c #35352F",
"` c #292925",
" . c #2E2E29",
".. c #0E0E0C",
"+. c #0A0A08",
"@. c #0F0F0C",
"#. c #3D3D37",
"$. c #33332A",
"%. c #23231E",
"&. c #2A2A23",
"*. c #A3A297",
"=. c #B5B4AC",
"-. c #706F66",
";. c #9F9F90",
">. c #737262",
",. c #3F3F34",
"'. c #68685A",
"). c #38382E",
"!. c #68685E",
"~. c #3E3E33",
"{. c #25251F",
" ",
". . . . . . . . . . . . . . . . ",
"+ . . . . . . . . . . . . . . . ",
" ",
" ",
" ",
" @ # $ % & * ",
" * * = - ; > , ' * * ",
" ) ! ~ { ] ^ / ( _ : < * ",
" [ } | 1 2 3 4 5 6 7 8 9 0 * ",
" * a b c d e f g h i j k l * ",
" * m n o p q r s t u v w x * ",
" * y z A B C D E F G H I J * ",
" K L M N O P Q R S T U V ",
" W X Y Z ` ...+.@.#.$.%. ",
" &.*.=.-.;.>.,.'.).!.~.{. "};
#endif

138
bitmaps/Delete_Text.xpm Normal file
View File

@ -0,0 +1,138 @@
/* XPM */
#ifndef XPMMAIN
extern char *delete_text_xpm[];
#else
char * delete_text_xpm[] = {
"16 16 114 2",
" c None",
". c #00009B",
"+ c #000098",
"@ c #00005D",
"# c #01016F",
"$ c #0D0D0E",
"% c #414142",
"& c #49494A",
"* c #3D3D3D",
"= c #2B2B2B",
"- c #000000",
"; c #000001",
"> c #838171",
", c #EEEBD7",
"' c #F0EFE8",
") c #ECEBE2",
"! c #C5C4B8",
"~ c #525145",
"{ c #0F0F0F",
"] c #C0BEA3",
"^ c #BFBDA4",
"/ c #797867",
"( c #474640",
"_ c #262625",
": c #35342D",
"< c #858371",
"[ c #9E9C86",
"} c #A19F88",
"| c #A3A18A",
"1 c #2A2A2A",
"2 c #D1CFBA",
"3 c #DAD8C2",
"4 c #E0DECE",
"5 c #B7B5A1",
"6 c #63615B",
"7 c #383736",
"8 c #3B3B32",
"9 c #605F52",
"0 c #989681",
"a c #B5B399",
"b c #B1B096",
"c c #A2A089",
"d c #E6E2D1",
"e c #F2EFE7",
"f c #F0EFE3",
"g c #E8E7D9",
"h c #E3E0D1",
"i c #D3D0BD",
"j c #C1BFA5",
"k c #ADAB92",
"l c #BEBCA2",
"m c #C4C2AA",
"n c #B6B49A",
"o c #787665",
"p c #888774",
"q c #EFEBD0",
"r c #F9F6E8",
"s c #F7F3EC",
"t c #F6F5ED",
"u c #F6F5EB",
"v c #F3F1E4",
"w c #EAE8D7",
"x c #DCDBC9",
"y c #9B9987",
"z c #626153",
"A c #575649",
"B c #515045",
"C c #727065",
"D c #9D9B90",
"E c #E2DFC7",
"F c #E7E3CE",
"G c #E0DECA",
"H c #CFCFC9",
"I c #8C8B7E",
"J c #757463",
"K c #676657",
"L c #424137",
"M c #282721",
"N c #1E1E1B",
"O c #333330",
"P c #4A4844",
"Q c #676662",
"R c #6F6E66",
"S c #6A6A64",
"T c #6D6B5D",
"U c #57564B",
"V c #383830",
"W c #161514",
"X c #191915",
"Y c #1E1D18",
"Z c #292923",
"` c #9E9E94",
" . c #4C4C40",
".. c #353530",
"+. c #292926",
"@. c #2E2E2A",
"#. c #0E0E0D",
"$. c #0A0A09",
"%. c #0F0F0C",
"&. c #3D3D37",
"*. c #33332A",
"=. c #23231E",
"-. c #2A2A23",
";. c #A3A297",
">. c #B5B4AC",
",. c #706F66",
"'. c #9F9F90",
"). c #737262",
"!. c #3F3F34",
"~. c #68685A",
"{. c #38382E",
"]. c #68685E",
"^. c #3E3E33",
"/. c #25251F",
". . . . . . . . . . . . . . ",
". . . . . . . . . . . . . . ",
". + . . . . + . ",
". @ . . . . . ",
" . . . . ",
" . . . . ",
" # $ % & * = - ",
" - ; > , ' ) ! ~ - - ",
" { ] ^ / ( _ : < [ } | - ",
" 1 2 3 4 5 6 7 8 9 0 a b c - ",
" - d e f g h i j k l m n o - ",
" - p q r s t u v w x y z A - ",
" - B C D E F G H I J K L M - ",
" N O P Q R S T U V W X Y ",
" Z ` ...+.@.#.$.%.&.*.=. ",
" -.;.>.,.'.).!.~.{.].^./. "};
#endif

114
bitmaps/Display_Options.xpm Normal file
View File

@ -0,0 +1,114 @@
/* XPM */
#ifndef XPMMAIN
extern char *display_options_xpm[];
#else
char * display_options_xpm[] = {
"16 16 90 1",
" c None",
". c #000000",
"+ c #E5E1E1",
"@ c #EDEDE9",
"# c #EDEDED",
"$ c #F1F1ED",
"% c #E9E5E5",
"& c #C9C5BE",
"* c #BDB9B1",
"= c #B5B1AD",
"- c #ADA9A2",
"; c #010101",
"> c #A3A197",
", c #9D9D9D",
"' c #A1A1A1",
") c #A1A5A1",
"! c #919591",
"~ c #818581",
"{ c #5D615D",
"] c #3D413D",
"^ c #2D312D",
"/ c #1D211D",
"( c #A7A299",
"_ c #9DA19D",
": c #8D918D",
"< c #717571",
"[ c #515551",
"} c #424842",
"| c #353935",
"1 c #ABA79C",
"2 c #E9E9E5",
"3 c #999D99",
"4 c #7D817D",
"5 c #797D79",
"6 c #F0F0F0",
"7 c #DEDEDE",
"8 c #DFDFDF",
"9 c #E0E0E0",
"0 c #BFBFBF",
"a c #C0C0C0",
"b c #C1C1C1",
"c c #D1D1CA",
"d c #676961",
"e c #707470",
"f c #979797",
"g c #989898",
"h c #B1ADA6",
"i c #52554F",
"j c #616561",
"k c #E3E3E3",
"l c #DDDDDD",
"m c #C8C8C8",
"n c #656565",
"o c #848484",
"p c #878787",
"q c #A9A59D",
"r c #313931",
"s c #353D35",
"t c #A3A3A3",
"u c #010100",
"v c #A19D94",
"w c #ADA999",
"x c #B1A9A1",
"y c #CFCFCF",
"z c #A4A4A4",
"A c #989897",
"B c #ABABAB",
"C c #EEEEEE",
"D c #999588",
"E c #838383",
"F c #8D8D81",
"G c #656561",
"H c #69655D",
"I c #696559",
"J c #B5B5B5",
"K c #757575",
"L c #6B6B6B",
"M c #777777",
"N c #888888",
"O c #54544C",
"P c #757169",
"Q c #79796E",
"R c #010000",
"S c #E0E0DF",
"T c #C1C1C0",
"U c #A7A7A7",
"V c #7B7B7B",
"W c #747474",
"X c #717171",
"Y c #7D7D7D",
"............... ",
".+@#@$$$@%+&*=-;",
".@;;;;;;;;;;;;>;",
".$;,')!!~{{]^/(;",
".$;_):~~<[[}|/1;",
".2;3:4........;.",
".2;~5.6788888898",
".+;~5.8000000aba",
".c;de.80f...gaba",
".h;ij.80.klm.nop",
".q;rs.80.lat..u.",
".vw-x;9a;yzA.BC#",
".D;;;.8ag...nEbb",
".FGHI.8aJKLnMN..",
" ;OPQRSTUVVWX.kl",
" .;;.8aY.....la"};
#endif

52
bitmaps/Edit.xpm Normal file
View File

@ -0,0 +1,52 @@
/* XPM */
#ifndef XPMMAIN
extern char *edit_xpm[];
#else
char * edit_xpm[] = {
"16 16 28 1",
" c None",
". c #000000",
"+ c #F9E53A",
"@ c #F0B44C",
"# c #FAE93C",
"$ c #F5B343",
"% c #635632",
"& c #FAE73A",
"* c #F5B344",
"= c #6B5E33",
"- c #F8E239",
"; c #F2B043",
"> c #615739",
", c #F7DD38",
"' c #F1AD41",
") c #615637",
"! c #F7DA37",
"~ c #EDB24C",
"{ c #655931",
"] c #F6D636",
"^ c #EEA73E",
"/ c #64582F",
"( c #F4D035",
"_ c #EBA23D",
": c #5B512F",
"< c #D5AC73",
"[ c #60552E",
"} c #4E4014",
" ",
" ... ",
" .+@. ",
" .#$%. ",
" .&*=. ",
" .-;>. ",
" .,'). ",
" .!~{. ",
" .]^/. ",
" .(_:. ",
" .<[. ",
" .}.. ",
" .. ",
" ",
" ",
" "};
#endif

32
bitmaps/Edit_Text.xpm Normal file
View File

@ -0,0 +1,32 @@
/* XPM */
#ifndef XPMMAIN
extern char *edit_text_xpm[];
#else
char * edit_text_xpm[] = {
"16 16 8 1",
" c None",
". c #1D2E40",
"+ c #1B2C3D",
"@ c #1B2B3D",
"# c #1E3043",
"$ c #1C2D3F",
"% c #111B26",
"& c #1C2C3E",
" ",
" ",
" .+ +@ ",
" ## ",
" ## ",
" ## ",
" ## ",
" ## ",
" ## ",
" ## ",
" ## ",
" ## ",
" ## ",
" .$ %&& ",
" ",
" "};
#endif

87
bitmaps/Exit.xpm Normal file
View File

@ -0,0 +1,87 @@
/* XPM */
#ifndef XPMMAIN
extern char *exit_xpm[];
#else
char * exit_xpm[] = {
"16 16 63 1",
" c None",
". c #000000",
"+ c #E2E2E0",
"@ c #D3D3D0",
"# c #C0C0BD",
"$ c #ADADAB",
"% c #929291",
"& c #B7B7B5",
"* c #9A9A98",
"= c #E46245",
"- c #DEDEDC",
"; c #C1C1BE",
"> c #B9B9B7",
", c #9C9C9B",
"' c #060806",
") c #070907",
"! c #E7755B",
"~ c #B3533E",
"{ c #D0D0CD",
"] c #0E110C",
"^ c #0F120D",
"/ c #DF421E",
"( c #B14D36",
"_ c #BDBDBB",
": c #A4A4A2",
"< c #161C14",
"[ c #191F16",
"} c #B0160A",
"| c #B11B10",
"1 c #993929",
"2 c #797977",
"3 c #5B5B5A",
"4 c #1D251B",
"5 c #20281D",
"6 c #990000",
"7 c #880000",
"8 c #AA3F2C",
"9 c #6C6C6A",
"0 c #273124",
"a c #2A3526",
"b c #C83E2B",
"c c #A1100B",
"d c #A3140E",
"e c #2B3727",
"f c #313D2C",
"g c #D4D4D1",
"h c #354331",
"i c #B4B4B2",
"j c #8D8D8B",
"k c #2D3A29",
"l c #3B4A35",
"m c #E0E0DE",
"n c #C9C9C7",
"o c #939491",
"p c #51544F",
"q c #34412F",
"r c #42543D",
"s c #495D43",
"t c #5C6059",
"u c #495C42",
"v c #4F6448",
"w c #53684B",
"x c #546A4D",
" ",
" .......... ",
" .+@#$%.... ",
" ...+@#&*.... ",
" .=.-@;>,.'). ",
"....!~.{;>,.]^. ",
".====/(._:,.<[. ",
".=}}}}|1.23.45. ",
".=666678.9,.0a. ",
".bcd778.;>,.ef. ",
"....78.g;>,.ah. ",
" .8.+g;ij.kl. ",
" ...mnop.qrs. ",
" .&t.luvwx. ",
" .......... ",
" "};
#endif

View File

@ -0,0 +1,62 @@
/* XPM */
#ifndef XPMMAIN
extern char *file_footprint_xpm[];
#else
char * file_footprint_xpm[] = {
"16 16 38 1",
" c None",
". c #000000",
"+ c #F8F8F8",
"@ c #7C7C7C",
"# c #1E1E1E",
"$ c #FFFFFF",
"% c #ECECEC",
"& c #B3B3B3",
"* c #BBBBBB",
"= c #3D3D3D",
"- c #EBEBEB",
"; c #646464",
"> c #CACACA",
", c #B5B5B5",
"' c #A7A7A7",
") c #282828",
"! c #606060",
"~ c #C4C4C4",
"{ c #626262",
"] c #D2D2D2",
"^ c #AEAEAE",
"/ c #7D7D7D",
"( c #FEFEFE",
"_ c #D73333",
": c #AB8989",
"< c #E6E6E6",
"[ c #D93F3F",
"} c #D72E2E",
"| c #AC8989",
"1 c #D73838",
"2 c #AFAFAF",
"3 c #EAE4E4",
"4 c #615E5E",
"5 c #EAE5E5",
"6 c #FDFDFD",
"7 c #646161",
"8 c #ABABAB",
"9 c #050505",
" ......... ",
".++++++++@# ",
".$%%%%%%%&*= ",
".$-;;>>;;,'*) ",
".$-!~{{~!]^^/. ",
".(_:_<<[:_>>^. ",
".(}|}--1|}--2. ",
".(343--543--2. ",
".(_:_--[:_--2. ",
".(}|}--1|}--2. ",
".6343--543--2. ",
".6_:_--_:_--2. ",
".6}|}--}|}--2. ",
".6347;;743--2. ",
".228888882222. ",
"............9. "};
#endif

70
bitmaps/Fonts.xpm Normal file
View File

@ -0,0 +1,70 @@
/* XPM */
#ifndef XPMMAIN
extern const char *fonts_xpm[];
#else
const char * fonts_xpm[] = {
"16 16 46 1",
" c None",
". c #70653B",
"+ c #463F24",
"@ c #6B6139",
"# c #1B180D",
"$ c #2C2818",
"% c #595030",
"& c #252112",
"* c #292516",
"= c #70643B",
"- c #827544",
"; c #3D3721",
"> c #37311D",
", c #3E3721",
"' c #302B1A",
") c #5C5331",
"! c #010101",
"~ c #1A170E",
"{ c #1E1A10",
"] c #403922",
"^ c #584F2F",
"/ c #16140C",
"( c #1E1B10",
"_ c #312B1A",
": c #0F0D07",
"< c #2D2818",
"[ c #322D1A",
"} c #231F11",
"| c #3C3620",
"1 c #5A5230",
"2 c #332E1B",
"3 c #12100A",
"4 c #4F472A",
"5 c #413A23",
"6 c #302B19",
"7 c #342E1B",
"8 c #4A4227",
"9 c #6E633A",
"0 c #080704",
"a c #2F2919",
"b c #4C4529",
"c c #51472B",
"d c #242113",
"e c #322D1B",
"f c #5E5432",
"g c #211E12",
" ",
" .+ ",
" @ # ",
" $ ",
" %&* ",
" = * -;> ",
" , ' )!~ ",
" { !] ^!/ (_ ",
" :<[ }| 1!2<!3[ ",
" 4!5 6!7 ",
" 8!* ^!* ",
" 8!* ^!* ",
" 8!/ 90a ",
" b!!cd~e ",
" f*g a5 ",
" "};
#endif

87
bitmaps/Info.xpm Normal file
View File

@ -0,0 +1,87 @@
/* XPM */
#ifndef XPMMAIN
extern char *info_xpm[];
#else
char * info_xpm[] = {
"16 16 63 1",
" c None",
". c #000000",
"+ c #9CA3AA",
"@ c #B4BCC3",
"# c #E0E9F0",
"$ c #CDDAE7",
"% c #9DAAB6",
"& c #848F9B",
"* c #E6ECF2",
"= c #E7EEF4",
"- c #DEE7EF",
"; c #CBD9E7",
"> c #B5CADD",
", c #9BB5CE",
"' c #596776",
") c #DBE5EE",
"! c #F2F2F2",
"~ c #727679",
"{ c #D0DDE9",
"] c #BACCDF",
"^ c #AAC2D8",
"/ c #9DB1C5",
"( c #D7E2EC",
"_ c #85898D",
": c #A8B0B6",
"< c #A3AEBA",
"[ c #6F7B86",
"} c #C4D4DF",
"| c #C1CBD9",
"1 c #BDCFE0",
"2 c #CDDBE8",
"3 c #79838D",
"4 c #828B93",
"5 c #D7E1E7",
"6 c #CED5E0",
"7 c #8597A8",
"8 c #ADC2D4",
"9 c #B7C8D9",
"0 c #BCCDDC",
"a c #C4D1DF",
"b c #8A939A",
"c c #D1DAE2",
"d c #868F97",
"e c #6D7F90",
"f c #93A7B9",
"g c #A1B4C4",
"h c #8A95A1",
"i c #868F9A",
"j c #7E8892",
"k c #B4AA89",
"l c #C4B069",
"m c #A19156",
"n c #A49B7E",
"o c #F8EECD",
"p c #FDFDFB",
"q c #F6E9BD",
"r c #D8C274",
"s c #686350",
"t c #F5F0DF",
"u c #FCF8EC",
"v c #EADFB7",
"w c #B2A05F",
"x c #3B382D",
" ",
" .... ",
" .+@#$%&. ",
" .+*=-;>,'. ",
" .)=!~{]^/. ",
" .(-_:<[}|. ",
" .1;{23456. ",
" 7890abcd. ",
" .efghij. ",
" .klmn. ",
" .opqr. ",
" slms ",
" .tuvw. ",
" x... ",
" .. ",
" "};
#endif

53
bitmaps/Mirror_H.xpm Normal file
View File

@ -0,0 +1,53 @@
/* XPM */
#ifndef XPMMAIN
extern char *mirror_H_xpm[];
#else
char * mirror_H_xpm[] = {
"16 16 29 1",
" c None",
". c #000000",
"+ c #9B9B9B",
"@ c #858585",
"# c #4C4C4C",
"$ c #1A1A1A",
"% c #939393",
"& c #696969",
"* c #606060",
"= c #D2D2D2",
"- c #202020",
"; c #FFFFFF",
"> c #3C3C3C",
", c #737373",
"' c #A0A0A5",
") c #373737",
"! c #EAEAF9",
"~ c #141417",
"{ c #F9F9FF",
"] c #E9E8FF",
"^ c #666578",
"/ c #F2F2FF",
"( c #E2E1FF",
"_ c #B7B6DF",
": c #0F0E0F",
"< c #EBEAFF",
"[ c #DAD9FF",
"} c #CAC9FF",
"| c #36364B",
" . ",
" .+ ",
" .+. ",
" .+.@ ",
" +.# ",
" .$% ",
" . .&* ",
" .+.=- ",
" .+.;>, ",
" .+.;') ",
" +.;!~@ ",
" .{]^# ",
" . ./(_:% ",
" .+.<[}|* ",
" .+.....- ",
" .+ ++++++"};
#endif

55
bitmaps/Mirror_V.xpm Normal file
View File

@ -0,0 +1,55 @@
/* XPM */
#ifndef XPMMAIN
extern char *mirror_V_xpm[];
#else
char * mirror_V_xpm[] = {
"16 16 30 1",
" c None",
". c #000000",
"+ c #9B9B9B",
"@ c #E3E3FF",
"# c #EBEAFF",
"$ c #F2F2FF",
"% c #F9F9FF",
"& c #FFFFFF",
"* c #D2D2D2",
"= c #696969",
"- c #1A1A1A",
"; c #4D4D4D",
"> c #8C8C8C",
", c #D3D2FF",
"' c #DAD9FF",
") c #E2E1FF",
"! c #E4E3F9",
"~ c #9B9BA5",
"{ c #3A3A3C",
"] c #202020",
"^ c #636363",
"/ c #979797",
"( c #C3C1FF",
"_ c #B1B0DF",
": c #626278",
"< c #141417",
"[ c #373737",
"} c #7A7A7A",
"| c #34344B",
"1 c #0E0E0F",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
".... .... ....",
" ++++ ++++ +++",
" ............. ",
" .@#$%&&*=-;>++ ",
" .,')!~{]^/++ ",
" .(_:<[}++ ",
" .|1;>++ ",
" .^/++ ",
" + "};
#endif

103
bitmaps/Morgan1.xpm Normal file
View File

@ -0,0 +1,103 @@
/* XPM */
#ifndef XPMMAIN
extern char *morgan1_xpm[];
#else
char * morgan1_xpm[] = {
"16 16 79 1",
" c None",
". c #6361D1",
"+ c #6260D0",
"@ c #5452B1",
"# c #474596",
"$ c #5B5AC2",
"% c #5E5CC7",
"& c #615FCE",
"* c #302F66",
"= c #5251AE",
"- c #514FAB",
"; c #504EA9",
"> c #5A59C0",
", c #5755B9",
"' c #D72E2E",
") c #D72D2D",
"! c #D62E2E",
"~ c #FEFEFF",
"{ c #FBFBFF",
"] c #F6F6FF",
"^ c #F1F1FF",
"/ c #EBE9FC",
"( c #E3C5D9",
"_ c #DA727E",
": c #D13737",
"< c #FAFAFF",
"[ c #F5F5FF",
"} c #F0F0FF",
"| c #EBEBFF",
"1 c #E6E6FF",
"2 c #E1E1FF",
"3 c #DBDBFF",
"4 c #D65F6B",
"5 c #BE5A5A",
"6 c #9B9B9B",
"7 c #D53131",
"8 c #F4F4FF",
"9 c #EFEFFF",
"0 c #EAEAFF",
"a c #E5E5FF",
"b c #E0E0FF",
"c c #D6D6FF",
"d c #D398B6",
"e c #D13838",
"f c #D43232",
"g c #E4E4FF",
"h c #DFDFFF",
"i c #DADAFF",
"j c #D5D5FF",
"k c #D0D0FF",
"l c #CBBCEC",
"m c #B5CCFF",
"n c #D62D2D",
"o c #E9E9FF",
"p c #D4D4FF",
"q c #CFCFFF",
"r c #CACAFF",
"s c #CB92B8",
"t c #D03838",
"u c #B56A6A",
"v c #E3E3FF",
"w c #DEDEFF",
"x c #D9D9FF",
"y c #C9C9FF",
"z c #C4C4FF",
"A c #CF5C70",
"B c #BB5E5E",
"C c #DDDDFF",
"D c #D8D8FF",
"E c #D3D3FF",
"F c #CECEFF",
"G c #C9C7FC",
"H c #C6A9DA",
"I c #CD6983",
"J c #CE3D3D",
"K c #9E9494",
"L c #D52E2E",
"M c #CD4040",
"N c #BE5B5B",
" .... ",
" .+@#$+% ",
".&* =.- ... ",
".# .; .> ,,",
".# ....& .",
" ",
" ''''''') ",
" !~{]^/(_: ",
"'''<[}|12345 ",
" 67890ab3cdef ",
" !90ghijkl!mn''",
" !oghipqrs:tu66",
" !vwxpqyzAB6 ",
"'''CDEFGHIJK ",
" 67''''LMNK6 ",
" 66666666 "};
#endif

101
bitmaps/Morgan2.xpm Normal file
View File

@ -0,0 +1,101 @@
/* XPM */
#ifndef XPMMAIN
extern char *morgan2_xpm[];
#else
char * morgan2_xpm[] = {
"16 16 77 1",
" c None",
". c #6361D1",
"+ c #615FCE",
"@ c #4D4CA3",
"# c #4E4CA5",
"$ c #6260D0",
"% c #605ECC",
"& c #5755B8",
"* c #5F5DC8",
"= c #5F5DCA",
"- c #504EA9",
"; c #615FCD",
"> c #5958BD",
", c #5E5CC7",
"' c #4F4DA7",
") c #D72D2D",
"! c #D72E2E",
"~ c #D62D2D",
"{ c #D52D2D",
"] c #EEB7BA",
"^ c #F6F6FF",
"/ c #F1F1FF",
"( c #EAE1F3",
"_ c #E0A1B1",
": c #D73A3C",
"< c #D32D2D",
"[ c #B5CCFF",
"} c #D12C2C",
"| c #D93F40",
"1 c #EEE6F4",
"2 c #EBEBFF",
"3 c #E6E6FF",
"4 c #E1E1FF",
"5 c #DAC2E1",
"6 c #D6383B",
"7 c #C52A2A",
"8 c #992121",
"9 c #CD2B2B",
"0 c #921F1F",
"a c #E5B6C5",
"b c #E5E5FF",
"c c #E0E0FF",
"d c #DBDBFF",
"e c #D6D6FF",
"f c #D2A1C2",
"g c #D62E2E",
"h c #DE93A2",
"i c #DFDFFF",
"j c #DADAFF",
"k c #D5D5FF",
"l c #D0D0FF",
"m c #CBCBFF",
"n c #D25C6D",
"o c #DCA3B8",
"p c #D4D4FF",
"q c #CFCFFF",
"r c #CACAFF",
"s c #CA99C2",
"t c #5E1414",
"u c #D73233",
"v c #D8C6E8",
"w c #C9C9FF",
"x c #C6AEE1",
"y c #D5373B",
"z c #8F1E1E",
"A c #CE2B2B",
"B c #D795AD",
"C c #D3D3FF",
"D c #CECEFF",
"E c #C9C0F3",
"F c #CB8CB1",
"G c #D4373C",
"H c #A02222",
"I c #B12525",
"J c #D32C2C",
"K c #B92727",
"L c #6F1818",
" .... ",
" ..+@#$% ",
"... ..& *. ",
"= -; .. >. ",
" ,...' .. ",
" ",
" )!!!!!! ",
" ~{]^/(_:< ",
"!~[}|1234567 ",
" 890{abcdefg ",
" {hijklmn}!!!",
" ! !ojpqrs~t ",
"!~[}uvpqwxyz ",
" 8A9BCDEFGH ",
" I!!!!JKL ",
" "};
#endif

72
bitmaps/Move.xpm Normal file
View File

@ -0,0 +1,72 @@
/* XPM */
#ifndef XPMMAIN
extern char *move_xpm[];
#else
char * move_xpm[] = {
"16 16 48 1",
" c None",
". c #000000",
"+ c #31313D",
"@ c #DCDCEF",
"# c #33333F",
"$ c #595959",
"% c #84849B",
"& c #FFFFFF",
"* c #010101",
"= c #4B4B4B",
"- c #9B9B9B",
"; c #F1F1FF",
"> c #464646",
", c #E7E5FF",
"' c #5D5D84",
") c #232332",
"! c #767676",
"~ c #FBFBFF",
"{ c #EAEAFF",
"] c #E2E1FF",
"^ c #DBDBFF",
"/ c #D5D3FF",
"( c #CDCDFF",
"_ c #C8C6FF",
": c #C1C1FF",
"< c #BDBBFF",
"[ c #B7B7FF",
"} c #9594D7",
"| c #202020",
"1 c #33333E",
"2 c #808099",
"3 c #D2D0FF",
"4 c #53527C",
"5 c #222231",
"6 c #7D7D7D",
"7 c #C8C8FF",
"8 c #6C6C6C",
"9 c #C0BFFF",
"0 c #B8B8FF",
"a c #B2B0FF",
"b c #52527B",
"c c #ABAAFF",
"d c #4C4C76",
"e c #3E3E3E",
"f c #1F1F2F",
"g c #8887D0",
"h c #1F1F2E",
"i c #181818",
" . ",
" +@#$ ",
" .%&%*= ",
" .&.--- ",
" .&.-- ",
" . .;.-- .> ",
" +%....,.....')!",
".@&~;{]^/(_:<[}|",
" 12....3.....456",
" *---.7.----*8-",
" -- .9.-- --",
" .0.-- ",
" .a.-- ",
" .bcd*e ",
" fgh8-- ",
" i6-- "};
#endif

80
bitmaps/Move_Arc.xpm Normal file
View File

@ -0,0 +1,80 @@
/* XPM */
#ifndef XPMMAIN
extern char *move_arc_xpm[];
#else
char * move_arc_xpm[] = {
"16 16 56 1",
" c None",
". c #00009B",
"+ c #000099",
"@ c #000097",
"# c #000096",
"$ c #000073",
"% c #000039",
"& c #000036",
"* c #000051",
"= c #000086",
"- c #00008E",
"; c #000006",
"> c #00006D",
", c #000085",
"' c #31313D",
") c #DCDCEF",
"! c #31313C",
"~ c #00005D",
"{ c #000074",
"] c #000000",
"^ c #84849B",
"/ c #FFFFFF",
"( c #00004C",
"_ c #000095",
": c #000078",
"< c #000050",
"[ c #000058",
"} c #F1F1FF",
"| c #000001",
"1 c #00003B",
"2 c #E7E5FF",
"3 c #646489",
"4 c #232333",
"5 c #FBFBFF",
"6 c #EAEAFF",
"7 c #E2E1FF",
"8 c #DBDBFF",
"9 c #D5D3FF",
"0 c #CDCDFF",
"a c #C8C6FF",
"b c #C1C1FF",
"c c #9F9DDB",
"d c #30303B",
"e c #7A7A96",
"f c #D2D0FF",
"g c #5A5981",
"h c #1F1F2F",
"i c #C8C8FF",
"j c #00000D",
"k c #C0BFFF",
"l c #5C5C82",
"m c #B8B8FF",
"n c #56557D",
"o c #20202F",
"p c #9493D6",
"q c #1D1D2C",
" ..... ",
" ........+@ ",
" #$% &*=..- ",
" ;>., ",
" ')!~.{ ",
" ]^/^](_ ",
" ]/] :<[ ",
" ] ]}] .|1 ",
" '^]]]2]]]34 ",
" ])5}67890abc]",
" de]]]f]]]gh]",
" ] ]i] |j ",
" ] ]k] ] ",
" ]lmn]] ",
" opq] ",
" ] "};
#endif

73
bitmaps/Move_Circle.xpm Normal file
View File

@ -0,0 +1,73 @@
/* XPM */
#ifndef XPMMAIN
extern char *move_circle_xpm[];
#else
char * move_circle_xpm[] = {
"16 16 49 1",
" c None",
". c #00009B",
"+ c #000096",
"@ c #00008C",
"# c #000053",
"$ c #00008A",
"% c #00009A",
"& c #000073",
"* c #000000",
"= c #000092",
"- c #31313D",
"; c #DCDCEF",
"> c #31313C",
", c #000055",
"' c #00006F",
") c #84849B",
"! c #FFFFFF",
"~ c #00004C",
"{ c #000083",
"] c #00007C",
"^ c #00004A",
"/ c #F1F1FF",
"( c #000001",
"_ c #E7E5FF",
": c #646489",
"< c #232332",
"[ c #FBFBFF",
"} c #EAEAFF",
"| c #E2E1FF",
"1 c #DBDBFF",
"2 c #D5D3FF",
"3 c #CDCDFF",
"4 c #C8C6FF",
"5 c #C1C1FF",
"6 c #9F9DDB",
"7 c #30303B",
"8 c #7A7A96",
"9 c #D2D0FF",
"0 c #5A5981",
"a c #1F1F2F",
"b c #C8C8FF",
"c c #000062",
"d c #00002E",
"e c #C0BFFF",
"f c #5C5C82",
"g c #B8B8FF",
"h c #56557D",
"i c #9493D6",
"j c #1D1D2C",
" .... ",
" .......+ ",
" ..@# #$.% ",
" ..& *#.= ",
" .@ -;>,.' ",
"..# *)!)*~{ ",
".. *!* ]^ ",
".. * */* .(* ",
"..# -)***_***:< ",
" .$*;[/}|123456*",
" +.#78***9***0a ",
" %.,* *b*cd** ",
" =.~].*e*d * ",
" '{^(fgh** ",
" *aij* ",
" * "};
#endif

86
bitmaps/Move_Field.xpm Normal file
View File

@ -0,0 +1,86 @@
/* XPM */
#ifndef XPMMAIN
extern char *move_field_xpm[];
#else
char * move_field_xpm[] = {
"16 16 62 1",
" c None",
". c #D2D2D2",
"+ c #9D9D9D",
"@ c #DEDEDE",
"# c #E0E0E0",
"$ c #5C5C5C",
"% c #000000",
"& c #EDEDED",
"* c #939393",
"= c #FDFDFD",
"- c #E4E4E4",
"; c #F1F1F1",
"> c #C3C3C3",
", c #272727",
"' c #E7E7E7",
") c #F4F4F4",
"! c #30303B",
"~ c #DCDCEF",
"{ c #33333E",
"] c #9A9A9A",
"^ c #E9E9E9",
"/ c #8C8C8C",
"( c #84849B",
"_ c #FFFFFF",
": c #010101",
"< c #7C7C7C",
"[ c #FAFAFA",
"} c #B0B0B0",
"| c #7A7A7A",
"1 c #848484",
"2 c #999999",
"3 c #F0F0F0",
"4 c #B1B1B1",
"5 c #020202",
"6 c #CBCBCB",
"7 c #F1F1FF",
"8 c #989898",
"9 c #7F7F7F",
"0 c #343440",
"a c #E7E5FF",
"b c #646489",
"c c #262635",
"d c #FBFBFF",
"e c #EAEAFF",
"f c #E2E1FF",
"g c #DBDBFF",
"h c #D5D3FF",
"i c #CDCDFF",
"j c #C8C6FF",
"k c #C1C1FF",
"l c #9F9DDB",
"m c #7A7A96",
"n c #D2D0FF",
"o c #5A5981",
"p c #20202F",
"q c #C8C8FF",
"r c #C0BFFF",
"s c #5C5C82",
"t c #B8B8FF",
"u c #56557D",
"v c #9493D6",
"w c #1D1D2C",
".++++++++++++++.",
"+.@@@@@@@@@@@@@+",
"+#$%%$&%%%*&===+",
"+-%;;%;%>,%;===+",
"+'%))%)%!~{]===+",
"+^%%%%/%(_(:<==+",
"+&%[[%-%%_%}|12+",
"+3==456=%7%6=58+",
".++90(%%%a%%%bc]",
" %~d7efghijkl%",
" !m%%%n%%%op ",
" % %q% %% ",
" % %r% % ",
" %stu%% ",
" pvw% ",
" % "};
#endif

72
bitmaps/Move_Line.xpm Normal file
View File

@ -0,0 +1,72 @@
/* XPM */
#ifndef XPMMAIN
extern char *move_line_xpm[];
#else
char * move_line_xpm[] = {
"16 16 48 1",
" c None",
". c #00009B",
"+ c #29299B",
"@ c #43439B",
"# c #45459B",
"$ c #46469B",
"% c #9B9B9B",
"& c #47479B",
"* c #39397D",
"= c #0D0D1E",
"- c #353575",
"; c #70709A",
"> c #2E2E9B",
", c #49499B",
"' c #4A4A9B",
") c #565656",
"! c #32323E",
"~ c #DCDCEF",
"{ c #4A4A4A",
"] c #000000",
"^ c #84849B",
"/ c #FFFFFF",
"( c #F1F1FF",
"_ c #31313D",
": c #E7E5FF",
"< c #646489",
"[ c #232332",
"} c #FBFBFF",
"| c #EAEAFF",
"1 c #E2E1FF",
"2 c #DBDBFF",
"3 c #D5D3FF",
"4 c #CDCDFF",
"5 c #C8C6FF",
"6 c #C1C1FF",
"7 c #9F9DDB",
"8 c #30303B",
"9 c #7A7A96",
"0 c #D2D0FF",
"a c #5A5981",
"b c #20202F",
"c c #C8C8FF",
"d c #C0BFFF",
"e c #5C5C82",
"f c #B8B8FF",
"g c #56557D",
"h c #9493D6",
"i c #1D1D2C",
" ",
"..... ...... ...",
"+@@#$% &*=-; >,'",
" %%%%% )!~!{ %%",
" ]^/^]] ",
" ]/] ",
" ] ](] ] ",
" _^]]]:]]]<[ ",
" ]~}(|1234567]",
" 89]]]0]]]ab ",
" ] ]c] ]] ",
" ] ]d] ] ",
" ]efg]] ",
" bhi] ",
" ] ",
" "};
#endif

70
bitmaps/Move_Polygon.xpm Normal file
View File

@ -0,0 +1,70 @@
/* XPM */
#ifndef XPMMAIN
extern char *move_polygon_xpm[];
#else
char * move_polygon_xpm[] = {
"16 16 46 1",
" c None",
". c #00009B",
"+ c #000099",
"@ c #00007D",
"# c #000094",
"$ c #000074",
"% c #00001E",
"& c #000066",
"* c #31313D",
"= c #DCDCEF",
"- c #30303E",
"; c #000046",
"> c #000000",
", c #84849B",
"' c #FFFFFF",
") c #000001",
"! c #00006D",
"~ c #F1F1FF",
"{ c #00007C",
"] c #E7E5FF",
"^ c #646489",
"/ c #232332",
"( c #FBFBFF",
"_ c #EAEAFF",
": c #E2E1FF",
"< c #DBDBFF",
"[ c #D5D3FF",
"} c #CDCDFF",
"| c #C8C6FF",
"1 c #C1C1FF",
"2 c #9F9DDB",
"3 c #30303B",
"4 c #7A7A96",
"5 c #D2D0FF",
"6 c #5A5981",
"7 c #20202F",
"8 c #000062",
"9 c #C8C8FF",
"0 c #000063",
"a c #00004C",
"b c #C0BFFF",
"c c #5C5C82",
"d c #B8B8FF",
"e c #56557D",
"f c #9493D6",
"g c #1D1D2C",
"........ ",
"........+ ",
" @.# ",
" $%& ",
" *=-; ",
" >,',)> ",
" >'>!> ",
" > >~>{ > ",
" *,>>>]>>>^/ ",
" >=(~_:<[}|12>",
" 34>>>5>>>67 ",
" ...8)!{>9>0>>> ",
" ....a{.>b>{ > ",
" >>cde>> ",
" 7fg> ",
" > "};
#endif

View File

@ -0,0 +1,64 @@
/* XPM */
#ifndef XPMMAIN
extern char *move_rectangle_xpm[];
#else
char * move_rectangle_xpm[] = {
"16 16 40 1",
" c None",
". c #00009B",
"+ c #000000",
"@ c #31313D",
"# c #DCDCEF",
"$ c #31313C",
"% c #000062",
"& c #84849B",
"* c #FFFFFF",
"= c #000001",
"- c #00004C",
"; c #00006D",
"> c #00007C",
", c #F1F1FF",
"' c #E7E5FF",
") c #646489",
"! c #232332",
"~ c #FBFBFF",
"{ c #EAEAFF",
"] c #E2E1FF",
"^ c #DBDBFF",
"/ c #D5D3FF",
"( c #CDCDFF",
"_ c #C8C6FF",
": c #C1C1FF",
"< c #9F9DDB",
"[ c #30303B",
"} c #7A7A96",
"| c #D2D0FF",
"1 c #5A5981",
"2 c #20202F",
"3 c #C8C8FF",
"4 c #000063",
"5 c #C0BFFF",
"6 c #00006F",
"7 c #5C5C82",
"8 c #B8B8FF",
"9 c #56557D",
"0 c #9493D6",
"a c #1D1D2C",
"............. ",
"............. ",
".. .. ",
".. + .. ",
".. @#$%. ",
".. +&*&=- ",
".. +*+;>+ ",
".. + +,+>.+ ",
".. @&+++'+++)! ",
".. +#~,{]^/(_:<+",
".. [}+++|+++12 ",
"....%=;>+3+4>++ ",
".....->.+5+>6+ ",
" ++789++ ",
" 20a+ ",
" + "};
#endif

70
bitmaps/Move_Text.xpm Normal file
View File

@ -0,0 +1,70 @@
/* XPM */
#ifndef XPMMAIN
extern char *move_text_xpm[];
#else
char * move_text_xpm[] = {
"16 16 46 1",
" c None",
". c #00009B",
"+ c #000098",
"@ c #00005D",
"# c #00007D",
"$ c #000000",
"% c #00006C",
"& c #303040",
"* c #DCDCEF",
"= c #31313C",
"- c #000058",
"; c #000001",
"> c #84849B",
", c #FFFFFF",
"' c #00008D",
") c #00007C",
"! c #F1F1FF",
"~ c #31313D",
"{ c #E7E5FF",
"] c #646489",
"^ c #232332",
"/ c #FBFBFF",
"( c #EAEAFF",
"_ c #E2E1FF",
": c #DBDBFF",
"< c #D5D3FF",
"[ c #CDCDFF",
"} c #C8C6FF",
"| c #C1C1FF",
"1 c #9F9DDB",
"2 c #30303B",
"3 c #7A7A96",
"4 c #D2D0FF",
"5 c #5A5981",
"6 c #20202F",
"7 c #00006D",
"8 c #C8C8FF",
"9 c #00004C",
"0 c #C0BFFF",
"a c #000050",
"b c #5C5C82",
"c c #B8B8FF",
"d c #56557D",
"e c #1F1F31",
"f c #9493D6",
"g c #1C1C2F",
".............. ",
".............. ",
".+ .... +. ",
".@ ...#$ . ",
" ..%&*= ",
" .-;>,>$$ ",
" -')$,$ ",
" ;).$!$ $ ",
" ~>$$${$$$]^ ",
" $*/!(_:<[}|1$",
" 23$$$4$$$56 ",
" ;7)$8$ $$ ",
" 9).$0$ $ ",
" ..a;bcd$$ ",
" ....@efg$ ",
" $$$ "};
#endif

157
bitmaps/New_Library.xpm Normal file
View File

@ -0,0 +1,157 @@
/* XPM */
#ifndef XPMMAIN
extern char *new_library_xpm[];
#else
char * new_library_xpm[] = {
"16 16 133 2",
" c None",
". c #060708",
"+ c #323538",
"@ c #1E1E1F",
"# c #FFF500",
"$ c #0A0D0E",
"% c #E4E6E7",
"& c #F5F5F5",
"* c #919175",
"= c #EFE500",
"- c #B4B272",
"; c #F6F6F6",
"> c #D7D7D7",
", c #DFE0E1",
"' c #636222",
") c #F7EE0B",
"! c #F7ED0C",
"~ c #9B9B9B",
"{ c #050608",
"] c #E3E6E7",
"^ c #D7D8D8",
"/ c #D1D1D1",
"( c #A9A881",
"_ c #070A0D",
": c #E5E7E9",
"< c #F8F8F8",
"[ c #D4D4D4",
"} c #BCBCBC",
"| c #CCCCCC",
"1 c #C9C9C9",
"2 c #B4B172",
"3 c #F7EE0C",
"4 c #FBF101",
"5 c #020305",
"6 c #9E9E9F",
"7 c #F4F4F5",
"8 c #CECECE",
"9 c #CFCFCF",
"0 c #B5B5B5",
"a c #CBCAAC",
"b c #FBF20F",
"c c #CBC888",
"d c #F6ED0B",
"e c #626144",
"f c #353535",
"g c #0A0A0A",
"h c #000000",
"i c #838686",
"j c #B3B7BB",
"k c #DDDDDD",
"l c #B7B7B7",
"m c #C8C8C8",
"n c #C4C4C4",
"o c #B7BABD",
"p c #A8AA8F",
"q c #A1A1A1",
"r c #E4E3C6",
"s c #A2A2A2",
"t c #DFDFDF",
"u c #232324",
"v c #1B1B1B",
"w c #98999B",
"x c #BBBBBB",
"y c #C3C3C3",
"z c #BCBDBE",
"A c #A2A5A7",
"B c #CECFD0",
"C c #DADBDB",
"D c #E1E2E3",
"E c #F6F7F8",
"F c #D6D6D8",
"G c #AEB0B1",
"H c #7B7E80",
"I c #B3B6B8",
"J c #BFBFBF",
"K c #AEB1B5",
"L c #B9BBBC",
"M c #F2F2F2",
"N c #FBFCFC",
"O c #F8FAFB",
"P c #F7F8F9",
"Q c #CACBCD",
"R c #858B91",
"S c #171818",
"T c #737E87",
"U c #B9B9B9",
"V c #D8D8D8",
"W c #A7AAAC",
"X c #E4E4E4",
"Y c #E5E5E5",
"Z c #E3E4E4",
"` c #F9FAFB",
" . c #DEDFDF",
".. c #B3B6BA",
"+. c #171A1D",
"@. c #414447",
"#. c #8D9398",
"$. c #ABADAF",
"%. c #FEFEFE",
"&. c #FDFDFD",
"*. c #F9FAFA",
"=. c #F9F9FA",
"-. c #CBCDD0",
";. c #737B84",
">. c #626973",
",. c #868788",
"'. c #EAEAEA",
"). c #FDFEFE",
"!. c #FCFDFD",
"~. c #FAFBFB",
"{. c #EFF0F0",
"]. c #A8ADB3",
"^. c #15171A",
"/. c #11151A",
"(. c #47515D",
"_. c #C0C6CC",
":. c #C4C8CB",
"<. c #D5D6D7",
"[. c #DBDBDB",
"}. c #F3F4F4",
"|. c #D1D1D2",
"1. c #798087",
"2. c #191B1D",
"3. c #2A2D30",
"4. c #474D50",
"5. c #7E8284",
"6. c #9B9D9F",
"7. c #9FA5AB",
"8. c #91989E",
"9. c #0C0E10",
"0. c #2A333D",
"a. c #181D21",
"b. c #1D2227",
" . + @ # ",
" $ % & * = # - # ",
" $ % ; > , ' ) # ! ~ ",
" { ] ; ^ / # # # ( # # # ",
" _ : < [ } | 1 2 3 # 4 2 ~ ~ ",
"5 6 7 8 9 | 0 a b c # 2 d e f g ",
"h i j k l m n o p q # ~ r s t u ",
" v w x m y z A B C D ~ E F G h ",
" h H I t J K L M N O P E Q R h ",
" S T U V W X Y Z ` P ...+. ",
" h @.#.$.[ %.&.N *.=.-.;.h ",
" h >.,.Y '.).!.~.{.].^. ",
" /.(._.:.<.[.}.|.1.h ",
" 2.3.4.5.6.7.8.9. ",
" 0.a.b. ",
" "};
#endif

159
bitmaps/Open_Library.xpm Normal file
View File

@ -0,0 +1,159 @@
/* XPM */
#ifndef XPMMAIN
extern char *open_library_xpm[];
#else
char * open_library_xpm[] = {
"16 16 135 2",
" c None",
". c #060708",
"+ c #323538",
"@ c #1E1E1F",
"# c #0A0D0E",
"$ c #E4E6E7",
"% c #F5F5F5",
"& c #828486",
"* c #040405",
"= c #F6F6F6",
"- c #D5D5D5",
"; c #DFE0E1",
"> c #1F2021",
", c #050608",
"' c #E3E6E7",
") c #F2F2F2",
"! c #7B7C7C",
"~ c #212121",
"{ c #DADADA",
"] c #BEBFC2",
"^ c #0E0E0E",
"/ c #070A0D",
"( c #E5E7E9",
"_ c #191919",
": c #777777",
"< c #C9C9C9",
"[ c #DCDDDD",
"} c #525354",
"| c #020305",
"1 c #9E9E9F",
"2 c #F4F4F5",
"3 c #3F3F3F",
"4 c #292929",
"5 c #272727",
"6 c #A6A7A8",
"7 c #C5C5C5",
"8 c #555555",
"9 c #343434",
"0 c #353535",
"a c #0A0A0A",
"b c #000000",
"c c #838686",
"d c #B3B7BB",
"e c #DDDDDD",
"f c #9A9A9A",
"g c #171717",
"h c #949494",
"i c #6D6D6E",
"j c #0F0F10",
"k c #999A9A",
"l c #FBFCFC",
"m c #FBFBFB",
"n c #FAFAFB",
"o c #F9FAFB",
"p c #E9E9E9",
"q c #232324",
"r c #1B1B1B",
"s c #98999B",
"t c #BBBBBB",
"u c #C2C2C2",
"v c #9E9E9E",
"w c #BBBCBD",
"x c #9EA0A1",
"y c #8A8B8B",
"z c #141414",
"A c #BABBBC",
"B c #F7F8F9",
"C c #F6F7F8",
"D c #DFDFE1",
"E c #AEB0B1",
"F c #7B7E80",
"G c #B3B6B8",
"H c #DFDFDF",
"I c #BEBEBE",
"J c #AEB1B5",
"K c #B9BBBC",
"L c #6B6B6B",
"M c #333334",
"N c #E0E1E2",
"O c #CDCECF",
"P c #CACBCD",
"Q c #858B91",
"R c #171818",
"S c #737E87",
"T c #B9B9B9",
"U c #D8D8D8",
"V c #A7AAAC",
"W c #E4E4E4",
"X c #D7D7D7",
"Y c #767676",
"Z c #4A4A4B",
"` c #626262",
" . c #B3B6BA",
".. c #171A1D",
"+. c #414447",
"@. c #8D9398",
"#. c #ABADAF",
"$. c #D4D4D4",
"%. c #FEFEFE",
"&. c #D0D0D0",
"*. c #323232",
"=. c #0D0D0D",
"-. c #060606",
";. c #AEAFB1",
">. c #737B84",
",. c #626973",
"'. c #868788",
"). c #E5E5E5",
"!. c #EAEAEA",
"~. c #E9EAEA",
"{. c #ABABAB",
"]. c #505050",
"^. c #4D4D4D",
"/. c #A7ACB2",
"(. c #15171A",
"_. c #11151A",
":. c #47515D",
"<. c #C0C6CC",
"[. c #C4C8CB",
"}. c #D5D6D7",
"|. c #D9D9D9",
"1. c #BCBCBC",
"2. c #BCBCBD",
"3. c #798087",
"4. c #191B1D",
"5. c #2A2D30",
"6. c #474D50",
"7. c #7E8284",
"8. c #9B9D9F",
"9. c #9FA5AB",
"0. c #91989E",
"a. c #0C0E10",
"b. c #2A333D",
"c. c #181D21",
"d. c #1D2227",
" . + @ ",
" # $ % & * ",
" # $ = - ; > ",
" , ' ) ! ~ { ] ^ ",
" / ( = ^ _ : < [ } ",
"| 1 2 < 3 ~ 4 5 6 7 8 9 9 9 0 a ",
"b c d e f g h i j k l m n o p q ",
" r s t u v w x y z A B C D E b ",
" b F G H I J K e L M N O P Q b ",
" R S T U V W X Y 5 Z ` ... ",
" b +.@.#.$.%.&.*.=.-.;.>.b ",
" b ,.'.).!.~.{.].^./.(. ",
" _.:.<.[.}.|.1.2.3.b ",
" 4.5.6.7.8.9.0.a. ",
" b.c.d. ",
" "};
#endif

73
bitmaps/Options_Arc.xpm Normal file
View File

@ -0,0 +1,73 @@
/* XPM */
#ifndef XPMMAIN
extern char *options_arc_xpm[];
#else
char * options_arc_xpm[] = {
"16 16 49 1",
" c None",
". c #00009B",
"+ c #000099",
"@ c #000097",
"# c #000096",
"$ c #000073",
"% c #000039",
"& c #000036",
"* c #000051",
"= c #000086",
"- c #00008E",
"; c #000093",
"> c #000085",
", c #000074",
"' c #000095",
") c #000058",
"! c #000000",
"~ c #000001",
"{ c #F0F0F0",
"] c #DEDEDE",
"^ c #DFDFDF",
"/ c #DFDFE0",
"( c #BFBFBF",
"_ c #C0C0C0",
": c #C0C0C1",
"< c #979797",
"[ c #989898",
"} c #E3E3E3",
"| c #DDDDDD",
"1 c #C8C8C8",
"2 c #656565",
"3 c #838384",
"4 c #878788",
"5 c #888888",
"6 c #AFAFAF",
"7 c #A3A3A3",
"8 c #F1F1F1",
"9 c #CECECE",
"0 c #ABABAB",
"a c #EEEEEE",
"b c #EDEDED",
"c c #E9E9E9",
"d c #D9D9D9",
"e c #838383",
"f c #C1C1C1",
"g c #B5B5B5",
"h c #757575",
"i c #6B6B6B",
"j c #777777",
" ..... ",
" ........+@ ",
" #$% &*=..- ",
" ;.> ",
" #., ",
" .' ",
" +.) ",
" !!!!!!!!~~!!",
" !{]^^^^^^//^^",
" !^((((((_::__",
" !^(<!!![_::__",
" !^(!}|1!23456",
" !^(!|_7!!!!!8",
" !^(!97<!0abcd",
" !^_[!!!2effff",
" !^_ghi2j5!!!["};
#endif

View File

@ -0,0 +1,78 @@
/* XPM */
#ifndef XPMMAIN
extern char *options_circle_xpm[];
#else
char * options_circle_xpm[] = {
"16 16 54 1",
" c None",
". c #00009B",
"+ c #000096",
"@ c #00008C",
"# c #000053",
"$ c #00008A",
"% c #00009A",
"& c #000073",
"* c #00007A",
"= c #000092",
"- c #00006F",
"; c #000000",
"> c #000001",
", c #F0F0F0",
"' c #DEDEDE",
") c #DFDFDF",
"! c #DFDFE0",
"~ c #BFBFBF",
"{ c #C0C0C1",
"] c #C0C0C0",
"^ c #979797",
"/ c #989898",
"( c #E3E3E3",
"_ c #DDDDDD",
": c #C8C8C8",
"< c #656566",
"[ c #838384",
"} c #878787",
"| c #888888",
"1 c #AFAFAF",
"2 c #A3A3A4",
"3 c #F1F1F1",
"4 c #BFBFC0",
"5 c #CECECF",
"6 c #979798",
"7 c #ABABAC",
"8 c #EEEEEE",
"9 c #EDEDED",
"0 c #E9E9E9",
"a c #D9D9D9",
"b c #989899",
"c c #838383",
"d c #C1C1C1",
"e c #B5B5B6",
"f c #757576",
"g c #6B6B6C",
"h c #656565",
"i c #777777",
"j c #A7A7A7",
"k c #7B7B7B",
"l c #747474",
"m c #717171",
"n c #7D7D7D",
"o c #A3A3A3",
" .... ",
" .......+ ",
" ..@# #$.% ",
" ..& *.= ",
" .@ =.- ",
"..# ;;;;;;;>>>;;",
".. ;,')))))!!!))",
".. ;)~~~~~~{{{]]",
"..#;)~^;;;/{{{]]",
" .$;)~;(_:><[}|1",
" +.;)~;_]2>>>;;3",
" %>!4>526>7890a",
" >!{b>>><cdddd",
" ;){efghi|;;;/",
" ;)]jkklm;(_:;",
" ;)]n;;;;;_]o;"};
#endif

View File

@ -0,0 +1,77 @@
/* XPM */
#ifndef XPMMAIN
extern char *options_new_pad_xpm[];
#else
char * options_new_pad_xpm[] = {
"16 16 53 1",
" c None",
". c #000000",
"+ c #FFF500",
"@ c #000200",
"# c #003B00",
"$ c #006400",
"% c #007700",
"& c #1E5000",
"* c #ECE300",
"= c #787300",
"- c #005F00",
"; c #007D00",
"> c #428200",
", c #EBE200",
"' c #F6ED00",
") c #007600",
"! c #006100",
"~ c #2B2900",
"{ c #427600",
"] c #EBE600",
"^ c #F8EF00",
"/ c #6A6500",
"( c #268200",
"_ c #EBEB00",
": c #428D00",
"< c #585400",
"[ c #F7ED00",
"} c #007800",
"| c #1E8600",
"1 c #003F00",
"2 c #006E00",
"3 c #003800",
"4 c #F0F0F0",
"5 c #DEDEDE",
"6 c #DFDFDF",
"7 c #BFBFBF",
"8 c #C0C0C0",
"9 c #979797",
"0 c #989898",
"a c #E3E3E3",
"b c #DDDDDD",
"c c #C8C8C8",
"d c #656565",
"e c #838383",
"f c #878787",
"g c #888888",
"h c #A3A3A3",
"i c #CECECE",
"j c #ABABAB",
"k c #EEEEEE",
"l c #EDEDED",
"m c #E9E9E9",
"n c #C1C1C1",
" ..... + ",
" @#$%$&* +=+ ",
" @-;;;;;>,+' ",
".#;;)!)+++~+++ ",
".$;) %{]+^/ ",
".%;! (_:+<[ ",
".$;) }|1+. ",
".#;;%2};;3.. ",
" @-;;...........",
" @#.45666666666",
" ..67777778888",
" .679...08888",
" .67.abc.defg",
" .67.b8h.....",
" .67.ih9.jklm",
" .680...dennn"};
#endif

57
bitmaps/Options_Pad.xpm Normal file
View File

@ -0,0 +1,57 @@
/* XPM */
#ifndef XPMMAIN
extern char *options_pad_xpm[];
#else
char * options_pad_xpm[] = {
"16 16 33 1",
" c None",
". c #000000",
"+ c #000200",
"@ c #003B00",
"# c #006400",
"$ c #007700",
"% c #005F00",
"& c #007D00",
"* c #007600",
"= c #006100",
"- c #006E00",
"; c #007800",
"> c #F0F0F0",
", c #DEDEDE",
"' c #DFDFDF",
") c #BFBFBF",
"! c #C0C0C0",
"~ c #979797",
"{ c #989898",
"] c #E3E3E3",
"^ c #DDDDDD",
"/ c #C8C8C8",
"( c #656565",
"_ c #838383",
": c #878787",
"< c #888888",
"[ c #A3A3A3",
"} c #CECECE",
"| c #ABABAB",
"1 c #EEEEEE",
"2 c #EDEDED",
"3 c #E9E9E9",
"4 c #C1C1C1",
" ..... ",
" +@#$#@+ ",
" +%&&&&&%+ ",
".@&&*=*&&@. ",
".#&* $&#. ",
".$&= -&$. ",
".#&* ;&#. ",
".@&&$-;&&@. ",
" +%&&...........",
" +@.>,'''''''''",
" ..'))))))!!!!",
" .')~...{!!!!",
" .').]^/.(_:<",
" .').^![.....",
" .').}[~.|123",
" .'!{...(_444"};
#endif

View File

@ -0,0 +1,68 @@
/* XPM */
#ifndef XPMMAIN
extern char *options_rectangle_xpm[];
#else
char * options_rectangle_xpm[] = {
"16 16 44 1",
" c None",
". c #00009B",
"+ c #000000",
"@ c #000001",
"# c #F0F0F0",
"$ c #DEDEDE",
"% c #DFDFDF",
"& c #DFDFE0",
"* c #BFBFBF",
"= c #C0C0C1",
"- c #C0C0C0",
"; c #979797",
"> c #989898",
", c #E3E3E3",
"' c #DDDDDD",
") c #C8C8C8",
"! c #656566",
"~ c #838384",
"{ c #878787",
"] c #888888",
"^ c #AFAFAF",
"/ c #A3A3A3",
"( c #F1F1F1",
"_ c #BFBFC0",
": c #CECECF",
"< c #A3A3A4",
"[ c #979798",
"} c #ABABAC",
"| c #EEEEEF",
"1 c #EDEDED",
"2 c #E9E9E9",
"3 c #D9D9D9",
"4 c #989899",
"5 c #C1C1C1",
"6 c #B5B5B5",
"7 c #757575",
"8 c #6B6B6B",
"9 c #656565",
"0 c #777777",
"a c #A7A7A7",
"b c #7B7B7B",
"c c #747474",
"d c #717171",
"e c #7D7D7D",
"............. ",
"............. ",
".. .. ",
".. .. ",
".. .. ",
".. +++++++@@+++",
".. +#$%%%%%&&%%%",
".. +%******==---",
".. +%*;+++>==---",
".. +%*+,')+!~{]^",
".. +%*+'-/+@@++(",
"...@&_@:<[@}|123",
"...@&=4@@@!~5555",
" +%-67890]+++>",
" +%-abbcd+,')+",
" +%-e+++++'-/+"};
#endif

View File

@ -0,0 +1,55 @@
/* XPM */
#ifndef XPMMAIN
extern char *options_segment_xpm[];
#else
char * options_segment_xpm[] = {
"16 16 31 1",
" c None",
". c #007D00",
"+ c #000000",
"@ c #F0F0F0",
"# c #DEDEDE",
"$ c #DFDFDF",
"% c #BFBFBF",
"& c #C0C0C0",
"* c #979797",
"= c #989898",
"- c #E3E3E3",
"; c #DDDDDD",
"> c #C8C8C8",
", c #656565",
"' c #838383",
") c #878787",
"! c #888888",
"~ c #AFAFAF",
"{ c #A3A3A3",
"] c #F1F1F1",
"^ c #CECECE",
"/ c #ABABAB",
"( c #EEEEEE",
"_ c #EDEDED",
": c #E9E9E9",
"< c #D9D9D9",
"[ c #C1C1C1",
"} c #B5B5B5",
"| c #757575",
"1 c #6B6B6B",
"2 c #777777",
" ",
" ",
"................",
"................",
" ",
" ",
" ",
" ++++++++++++",
" +@#$$$$$$$$$$",
" +$%%%%%%&&&&&",
" +$%*+++=&&&&&",
" +$%+-;>+,')!~",
" +$%+;&{+++++]",
" +$%+^{*+/(_:<",
" +$&=+++,'[[[[",
" +$&}|1,2!+++="};
#endif

64
bitmaps/Options_Text.xpm Normal file
View File

@ -0,0 +1,64 @@
/* XPM */
#ifndef XPMMAIN
extern char *options_text_xpm[];
#else
char * options_text_xpm[] = {
"16 16 40 1",
" c None",
". c #00009B",
"+ c #000098",
"@ c #00005D",
"# c #000000",
"$ c #000001",
"% c #F0F0F0",
"& c #DEDEDE",
"* c #DFDFE0",
"= c #DFDFDF",
"- c #BFBFBF",
"; c #BFBFC0",
"> c #C0C0C0",
", c #979798",
"' c #989898",
") c #C1C1C1",
"! c #E3E3E4",
"~ c #DDDDDE",
"{ c #C8C8C9",
"] c #656565",
"^ c #838383",
"/ c #878787",
"( c #888888",
"_ c #AFAFAF",
": c #C0C0C1",
"< c #A3A3A4",
"[ c #F1F1F1",
"} c #CECECF",
"| c #ABABAC",
"1 c #EEEEEE",
"2 c #EDEDED",
"3 c #E9E9E9",
"4 c #D9D9D9",
"5 c #989899",
"6 c #656566",
"7 c #838384",
"8 c #B5B5B5",
"9 c #757575",
"0 c #6B6B6B",
"a c #777777",
".............. ",
".............. ",
".+ .... +. ",
".@ .... . ",
" .... ",
" .... ",
" .... ",
" ##$$$$#######",
" #%&****=======",
" #=-;;;;->>>>>>",
" #=-,$$$'>>>>>)",
" #=-$!~{#]^/(_)",
" #=;$~:<#####[>",
" #*;$}<,$|1234)",
" #*:5$$$67))))>",
" #=>890]a(###'>"};
#endif

138
bitmaps/Orient.xpm Normal file
View File

@ -0,0 +1,138 @@
/* XPM */
#ifndef XPMMAIN
extern char *orient_xpm[];
#else
char * orient_xpm[] = {
"16 16 114 2",
" c None",
". c #000000",
"+ c #010101",
"@ c #656565",
"# c #B2B2B2",
"$ c #6E6E70",
"% c #6A6A70",
"& c #A1A1AD",
"* c #585860",
"= c #1A1A1A",
"- c #C19393",
"; c #F6DBDD",
"> c #F5F5FB",
", c #76767B",
"' c #72727A",
") c #DDDDF3",
"! c #D5D5F1",
"~ c #9A9AB2",
"{ c #141418",
"] c #BEBEBE",
"^ c #F3DBDD",
"/ c #CE0D0C",
"( c #E0959D",
"_ c #E4E4F6",
": c #DCDCF3",
"< c #D5D5F0",
"[ c #CDCDEE",
"} c #C5C5EB",
"| c #8E8EAE",
"1 c #676262",
"2 c #FAF3F5",
"3 c #F2F0F8",
"4 c #C42223",
"5 c #CD0100",
"6 c #D14D54",
"7 c #D3C7E1",
"8 c #CCCCEE",
"9 c #BDBDE8",
"0 c #B5B5E6",
"a c #45455A",
"b c #B1A4A6",
"c c #E18185",
"d c #D96166",
"e c #C8282B",
"f c #CD1416",
"g c #CCA4BE",
"h c #BCBCE8",
"i c #B4B4E5",
"j c #ADADE3",
"k c #74749D",
"l c #6C6C70",
"m c #767278",
"n c #DB8E99",
"o c #CD474E",
"p c #D87F81",
"q c #F5F3F6",
"r c #C4C4EA",
"s c #ACACE3",
"t c #51516F",
"u c #464663",
"v c #69696F",
"w c #70707A",
"x c #DADAF2",
"y c #D09AB0",
"z c #C81415",
"A c #E0ACAF",
"B c #FFFFFF",
"C c #DCDCEE",
"D c #C1C1E9",
"E c #4D4D6E",
"F c #424262",
"G c #9F9FAC",
"H c #D2D2EF",
"I c #CACAED",
"J c #B99BB0",
"K c #F7F5F6",
"L c #E2E2ED",
"M c #C0C0E9",
"N c #66669B",
"O c #565660",
"P c #C2C2EA",
"Q c #B2B2DD",
"R c #8484A3",
"S c #D4D4DD",
"T c #DBDBE6",
"U c #9696DB",
"V c #9292DA",
"W c #3B3B5A",
"X c #9797B1",
"Y c #C1C1EA",
"Z c #B9B9E7",
"` c #B2B2E5",
" . c #A7A7DE",
".. c #7B7BAA",
"+. c #A4A4BB",
"@. c #F8F8FA",
"#. c #8E8ED0",
"$. c #6262A0",
"%. c #000001",
"&. c #8B8BAD",
"*. c #B1B1E4",
"=. c #A9A9E2",
"-. c #50506F",
";. c #4C4C6D",
">. c #8080BF",
",. c #75759D",
"'. c #7777A0",
"). c #0D0D15",
"!. c #43435A",
"~. c #71719D",
"{. c #444462",
"]. c #414162",
"^. c #616197",
"/. c #313150",
" ",
" . . . . ",
" + @ # $ % & * + ",
" = - ; > , ' ) ! ~ { ",
" + ] ^ / ( _ : < [ } | + ",
" 1 2 3 4 5 6 7 8 } 9 0 a . ",
" . b c d e 5 5 f g h i j k . ",
" . l m n o 5 5 p q r s t u . ",
" . v w x y z A B B C D E F . ",
" . G x H I J K B B L ! M N . ",
" O H I P Q R S B T U V W . ",
" + X Y Z ` ...+.@.#.$.%. ",
" { &.*.=.-.;.>.,.'.).. ",
" + !.~.{.].^./.. . ",
" . . . . . . ",
" "};
#endif

27
bitmaps/Pad_Sketch.xpm Normal file
View File

@ -0,0 +1,27 @@
/* XPM */
#ifndef XPMMAIN
extern char *pad_sketch_xpm[];
#else
char * pad_sketch_xpm[] = {
"16 16 3 1",
" c None",
". c #007D00",
"+ c #007C00",
" ",
" .... ",
" ..++++.. ",
" .. .. ",
" .. .. ",
" . .. . ",
" .+ .... +. ",
" .+ .. .. +. ",
" .+ .. .. +. ",
" .+ .... +. ",
" . .. . ",
" .. .. ",
" .. .. ",
" ..++++.. ",
" .... ",
" "};
#endif

109
bitmaps/Read_SetUp.xpm Normal file
View File

@ -0,0 +1,109 @@
/* XPM */
#ifndef XPMMAIN
extern char *read_setup_xpm[];
#else
char * read_setup_xpm[] = {
"16 16 85 1",
" c None",
". c #000000",
"+ c #E1E1E1",
"@ c #C1C1C1",
"# c #999999",
"$ c #9A9A9A",
"% c #C2C2C2",
"& c #E5E5E5",
"* c #DFDFDF",
"= c #CACACA",
"- c #666666",
"; c #858585",
"> c #898989",
", c #8A8A8A",
"' c #B1B1B1",
") c #A5A5A5",
"! c #F3F3F3",
"~ c #D0D0D0",
"{ c #ADADAD",
"] c #F0F0F0",
"^ c #EFEFEF",
"/ c #EBEBEB",
"( c #DBDBDB",
"_ c #C3C3C3",
": c #E4E5DF",
"< c #D5D6CB",
"[ c #D6D7CA",
"} c #B7B7B7",
"| c #767676",
"1 c #6C6C6C",
"2 c #787878",
"3 c #8D907B",
"4 c #92957E",
"5 c #90937D",
"6 c #A9A9A9",
"7 c #7C7C7C",
"8 c #757575",
"9 c #505050",
"0 c #8A8C7D",
"a c #8E917B",
"b c #91947F",
"c c #7E7E7E",
"d c #878A75",
"e c #666858",
"f c #4B4D3F",
"g c #4D4F40",
"h c #404135",
"i c #424337",
"j c #434437",
"k c #404236",
"l c #3C3D32",
"m c #48493C",
"n c #1A1A16",
"o c #939393",
"p c #848672",
"q c #25261F",
"r c #F1F2E9",
"s c #DDE0C7",
"t c #D6DABB",
"u c #CDD2AC",
"v c #C7CCA7",
"w c #989C80",
"x c #5F6152",
"y c #888980",
"z c #A7AB8C",
"A c #878A70",
"B c #6D6D6D",
"C c #676767",
"D c #777777",
"E c #EFF0E5",
"F c #9EA284",
"G c #606060",
"H c #888888",
"I c #818181",
"J c #7B7B7B",
"K c #96968D",
"L c #E3E5D1",
"M c #83866D",
"N c #EDEFE2",
"O c #A2A688",
"P c #E7E9DA",
"Q c #D1D3BD",
"R c #BBBF9D",
"S c #989B80",
"T c #6E715C",
" .+@#...$%%%%%",
" .+@.&*=.-;>,'",
" .+@.*%).....!",
" .+@.~)#.{]^/(",
"....+%$...-;____",
":<[.+%}|1-2,...$",
"345.+%67789.&*=.",
"0ab.+%c.....*%).",
"defghiijklmno)#.",
"pqrstuuuuuvw...-",
"xysuuuuuuuzA.BCD",
"qEtuuuuuuuF.GHIJ",
"KLuuuuuuuuM.....",
"NuuuuuuuuO.. ",
"PQRRRRRRST. ",
"........... "};
#endif

102
bitmaps/Repaint.xpm Normal file
View File

@ -0,0 +1,102 @@
/* XPM */
#ifndef XPMMAIN
extern char * repaint_xpm[];
#else
char * repaint_xpm[] = {
"16 16 78 1",
" c None",
". c #000000",
"+ c #817858",
"@ c #D6D0BD",
"# c #413C27",
"$ c #E7D8A6",
"% c #F2EDD9",
"& c #877B52",
"* c #E9DBAE",
"= c #F1EBD6",
"- c #918458",
"; c #DACD9F",
"> c #F4EED9",
", c #6B6040",
"' c #EDE4C6",
") c #0C0B07",
"! c #A29771",
"~ c #9A8F6A",
"{ c #ADA281",
"] c #D5CCAF",
"^ c #7F7862",
"/ c #A39B7B",
"( c #7B6F4A",
"_ c #CCBC85",
": c #E2CF8B",
"< c #BCAC75",
"[ c #CEBD82",
"} c #C1B178",
"| c #5B5438",
"1 c #A39878",
"2 c #918C74",
"3 c #8B8468",
"4 c #8B8365",
"5 c #91896C",
"6 c #90886A",
"7 c #6A634C",
"8 c #D1C7A8",
"9 c #E8E7E3",
"0 c #D3D2CE",
"a c #B9B8B5",
"b c #948E78",
"c c #51504F",
"d c #161616",
"e c #101010",
"f c #121211",
"g c #0E0D0B",
"h c #555555",
"i c #050505",
"j c #040404",
"k c #6B372D",
"l c #6D392E",
"m c #974E3F",
"n c #44231C",
"o c #2F2F2F",
"p c #272727",
"q c #9D5546",
"r c #6C392E",
"s c #9C5344",
"t c #964E3F",
"u c #6C382D",
"v c #542B22",
"w c #9F5647",
"x c #A75E4F",
"y c #AD5C4B",
"z c #A55C4D",
"A c #2F1813",
"B c #B35D4B",
"C c #7E4134",
"D c #8D493B",
"E c #582D24",
"F c #6C372D",
"G c #613228",
"H c #64332A",
"I c #623228",
"J c #65342A",
"K c #502921",
"L c #4C271F",
"M c #3C1E18",
" .. ",
" .+@#. ",
" .$%&. ",
" .*=-. ",
" .;>,. ",
" ...').. ",
" .!~{]^/(. ",
" ._::::<[}|. ",
" .123444567. ",
" .890a9a9ab. ",
" .cdedddfdg. ",
" .hij.k.jlm. ",
" nholpqrstu. ",
" vwxyxzxzxA ",
"BCDEFGHIJIKLM ",
" "};
#endif

117
bitmaps/Rotate+.xpm Normal file
View File

@ -0,0 +1,117 @@
/* XPM */
#ifndef XPMMAIN
extern char *rotate_pos_xpm[];
#else
char * rotate_pos_xpm[] = {
"16 16 93 2",
" c None",
". c #202020",
"+ c #090909",
"@ c #0C0C0C",
"# c #CACACB",
"$ c #3E3E3E",
"% c #9B9B9B",
"& c #010101",
"* c #A8A8A9",
"= c #FEFEFF",
"- c #727275",
"; c #646469",
"> c #505057",
", c #141416",
"' c #4A4A4A",
") c #F8F8FF",
"! c #F1F1FF",
"~ c #EBEBFF",
"{ c #E0E0FA",
"] c #A3A3BC",
"^ c #484855",
"/ c #171717",
"( c #96969A",
"_ c #C3C3CE",
": c #E6E6FA",
"< c #E4E4FF",
"[ c #DDDDFF",
"} c #D7D7FF",
"| c #707089",
"1 c #3B3B3D",
"2 c #000000",
"3 c #272727",
"4 c #444444",
"5 c #727272",
"6 c #4B4B4C",
"7 c #46464C",
"8 c #B3B3CE",
"9 c #D0D0FF",
"0 c #49495C",
"a c #5B5B5B",
"b c #5A5A76",
"c c #656580",
"d c #3B3B48",
"e c #5C5C5C",
"f c #313131",
"g c #4B4B4B",
"h c #494949",
"i c #8C8C8C",
"j c #212122",
"k c #BCBCDF",
"l c #8686AA",
"m c #474747",
"n c #8888B2",
"o c #C9C9FF",
"p c #B1B1D9",
"q c #262627",
"r c #595959",
"s c #2F2F2F",
"t c #40404C",
"u c #686880",
"v c #5A5A72",
"w c #262626",
"x c #4C4C64",
"y c #A9A9C9",
"z c #404048",
"A c #0D0D0F",
"B c #C0C0C5",
"C c #323232",
"D c #222222",
"E c #4D4D4D",
"F c #535353",
"G c #28282A",
"H c #737392",
"I c #DFDFF9",
"J c #BCBCCC",
"K c #93939C",
"L c #A1A1A2",
"M c #383838",
"N c #353535",
"O c #4F4F5F",
"P c #A3A3C1",
"Q c #DADAFC",
"R c #424242",
"S c #6C6C6C",
"T c #3D3D3F",
"U c #595961",
"V c #62626A",
"W c #73737A",
"X c #404040",
"Y c #040404",
"Z c #303031",
"` c #989898",
" . c #8F8F8F",
" ",
" . + ",
" @ # $ % ",
" & * = - ; > , ",
" ' = = ) ! ~ { ] ^ ",
" / * = ( _ : < [ } | 1 ",
" 2 2 2 3 # 4 5 6 7 8 } 9 0 a ",
"2 b c d e f g h i j k 9 l m ",
"2 n o p q r s q t u v w ",
" x o 9 y z A w B C D E E F ",
" G H 9 } [ I J K ) L M % % % ",
" N O P Q < ~ ! ) = R S ",
" r T U V W ) L ' % ",
" % % X B $ % % ",
" Y Z ` % ",
" .% "};
#endif

120
bitmaps/Rotate-.xpm Normal file
View File

@ -0,0 +1,120 @@
/* XPM */
#ifndef XPMMAIN
extern char *rotate_neg_xpm[];
#else
char * rotate_neg_xpm[] = {
"16 16 96 2",
" c None",
". c #000000",
"+ c #2A2A2B",
"@ c #C5C5CB",
"# c #313131",
"$ c #141416",
"% c #4D4D57",
"& c #5F5F67",
"* c #6F6F75",
"= c #F8F8FF",
"- c #A8A8A9",
"; c #343434",
"> c #444454",
", c #9F9FBC",
"' c #D9D9FA",
") c #E4E4FF",
"! c #EBEBFF",
"~ c #F1F1FF",
"{ c #FEFEFF",
"] c #4A4A4A",
"^ c #646464",
"/ c #6C6C89",
"( c #D0D0FF",
"_ c #D7D7FF",
": c #DDDDFF",
"< c #E0E0FA",
"[ c #BEBECE",
"} c #92929A",
"| c #3F3F3F",
"1 c #9B9B9B",
"2 c #46465C",
"3 c #C9C9FF",
"4 c #AEAECE",
"5 c #44444C",
"6 c #4B4B4C",
"7 c #727272",
"8 c #444444",
"9 c #363636",
"0 c #949494",
"a c #3A3A3A",
"b c #8282AA",
"c c #B6B6DF",
"d c #252526",
"e c #939393",
"f c #8F8F8F",
"g c #494949",
"h c #202020",
"i c #2C2C2D",
"j c #686868",
"k c #3D3D48",
"l c #686880",
"m c #5D5D76",
"n c #575772",
"o c #656580",
"p c #3E3E4C",
"q c #6E6E6E",
"r c #959595",
"s c #1E1E1E",
"t c #050505",
"u c #828282",
"v c #050507",
"w c #B7B7D9",
"x c #8C8CB2",
"y c #272727",
"z c #4D4D4D",
"A c #929292",
"B c #1F1F1F",
"C c #C4C4C5",
"D c #292929",
"E c #2C2C2C",
"F c #3A3A41",
"G c #AEAEC9",
"H c #4F4F64",
"I c #6F6F6F",
"J c #2F2F2F",
"K c #A1A1A2",
"L c #98989C",
"M c #C1C1CC",
"N c #E5E5F9",
"O c #777792",
"P c #545455",
"Q c #424242",
"R c #E1E1FC",
"S c #A7A7C1",
"T c #51515F",
"U c #525252",
"V c #101010",
"W c #77777A",
"X c #65656A",
"Y c #5B5B61",
"Z c #3D3D3F",
"` c #5D5D5D",
" . c #3E3E3E",
".. c #989898",
"+. c #3D3D3D",
"@. c #404040",
" ",
" . + ",
" . @ # ",
" $ % & * = - ; ",
" > , ' ) ! ~ = { ] ^ ",
" / ( _ : < [ } = - | 1 ",
" 2 3 ( 4 5 6 7 8 @ 9 0 a . . ",
". b 3 c d e f g h i 0 j k l m . ",
". n o p q r s t u e v w ( x y ",
" | z z A B C D E F G _ ( H I ",
" 1 1 J K { L M N ) : _ O P 1 ",
" Q { { = ~ ! R S T U 1 1 ",
" V K { W X Y Z ` r 1 1 ",
" 1 .C 8 1 1 1 1 1 1 ",
" ..+.@.1 1 1 1 ",
" e ` "};
#endif

100
bitmaps/Rotate_Field.xpm Normal file
View File

@ -0,0 +1,100 @@
/* XPM */
#ifndef XPMMAIN
extern char *rotate_field_xpm[];
#else
char * rotate_field_xpm[] = {
"16 16 76 1",
" c None",
". c #D2D2D2",
"+ c #9D9D9D",
"@ c #DEDEDE",
"# c #E0E0E0",
"$ c #5C5C5C",
"% c #000000",
"& c #EDEDED",
"* c #939393",
"= c #FDFDFD",
"- c #E4E4E4",
"; c #F1F1F1",
"> c #CFCFCF",
", c #C7C7C7",
"' c #E7E7E7",
") c #F4F4F4",
"! c #8F8F8F",
"~ c #E9E9E9",
"{ c #B1B1B1",
"] c #373737",
"^ c #67676A",
"/ c #3B3B3B",
"( c #A3A3A3",
"_ c #D1D1D1",
": c #FAFAFA",
"< c #636363",
"[ c #F7F7F8",
"} c #F8F8FF",
"| c #EBEBF9",
"1 c #E0E0F3",
"2 c #BFBFD6",
"3 c #8B8BA0",
"4 c #4F4F57",
"5 c #B6B6B6",
"6 c #F0F0F0",
"7 c #9F9F9F",
"8 c #F1F1FF",
"9 c #EBEBFF",
"0 c #E4E4FF",
"a c #DDDDFF",
"b c #CECEF4",
"c c #393945",
"d c #777777",
"e c #606060",
"f c #3A3A3A",
"g c #69696C",
"h c #353536",
"i c #3B3B3E",
"j c #3F3F45",
"k c #777789",
"l c #D4D4FC",
"m c #8888A7",
"n c #2E2E2E",
"o c #9494B0",
"p c #B8B8E2",
"q c #A1A1CC",
"r c #A0A0C4",
"s c #757594",
"t c #CFCFFE",
"u c #7D7D94",
"v c #383842",
"w c #2F2F34",
"x c #1D1D1F",
"y c #5C5C61",
"z c #434345",
"A c #2B2B37",
"B c #C2C2EE",
"C c #D7D7FF",
"D c #F5F5FC",
"E c #6F6F6F",
"F c #22222A",
"G c #83839B",
"H c #B5B5D1",
"I c #D8D8F2",
"J c #E5E5F9",
"K c #59595E",
".++++++++++++++.",
"+.@@@@@@@@@@@@@+",
"+#$%%$&%%%*&===+",
"+-%;;%;%>,%;===+",
"+'%))%)%%%!)===+",
"+~%%%%{]^/%(_==+",
"+&%::%<[}|12345+",
"+6===7<[}890abcd",
".+++++efghijklmn",
" %%% % %op%",
" %qr% % %%%",
" %stuvwxyz ",
" ABCa098DE ",
" FGHIJ8DE% ",
" %%%Kz% ",
" %% "};
#endif

123
bitmaps/Save_CmpStuff.xpm Normal file
View File

@ -0,0 +1,123 @@
/* XPM */
#ifndef XPMMAIN
extern char *save_cmpstuff_xpm[];
#else
char * save_cmpstuff_xpm[] = {
"16 16 99 2",
" c None",
". c #160A00",
"+ c #FF7800",
"@ c #000000",
"# c #231000",
"$ c #E1DFDE",
"% c #44260C",
"& c #E86D00",
"* c #FFFFFF",
"= c #C35B00",
"- c #FAF6F3",
"; c #A38F7C",
"> c #C7B4A5",
", c #FDBD85",
"' c #FFBF87",
") c #FFF3EC",
"! c #FEE6D6",
"~ c #D8BDA8",
"{ c #C7874F",
"] c #F9B880",
"^ c #FFF5EF",
"/ c #FFE8D8",
"( c #FFDBC2",
"_ c #B9957C",
": c #010101",
"< c #FFEADC",
"[ c #FFDDC5",
"} c #FFD0AF",
"| c #F6F7F9",
"1 c #CADCEA",
"2 c #C78980",
"3 c #D08E83",
"4 c #CF8D82",
"5 c #CF8E82",
"6 c #FFDFC8",
"7 c #FFD1B2",
"8 c #FFC49C",
"9 c #DAE6EF",
"0 c #8CA8BC",
"a c #B6867D",
"b c #C67568",
"c c #C67467",
"d c #C57366",
"e c #C57365",
"f c #FFD3B5",
"g c #FFC69F",
"h c #FFB988",
"i c #010100",
"j c #CEDFEB",
"k c #D6D6D5",
"l c #FDFDFD",
"m c #FCFCFC",
"n c #FFC8A2",
"o c #FFBB8C",
"p c #FFAE75",
"q c #D6D6D6",
"r c #D5D5D5",
"s c #FFBD8F",
"t c #FFB079",
"u c #FFA262",
"v c #8CA8BD",
"w c #FBFBFB",
"x c #F3F3F3",
"y c #E9E9E9",
"z c #FFB27C",
"A c #FFA465",
"B c #FE9A55",
"C c #D6D5D5",
"D c #D3D2D2",
"E c #C4C3C3",
"F c #C4C4C4",
"G c #C3C3C3",
"H c #FFA669",
"I c #FAA162",
"J c #A37E60",
"K c #CEDFEC",
"L c #EDEDED",
"M c #F1F0F0",
"N c #EAE9E9",
"O c #EAEAEA",
"P c #E1A074",
"Q c #442102",
"R c #CEDEEB",
"S c #ADBDCB",
"T c #C8D4DD",
"U c #C5CDD8",
"V c #BEC9D4",
"W c #BECAD5",
"X c #BDC9D4",
"Y c #8CA7BC",
"Z c #87A4BA",
"` c #7E98AC",
" . c #8098AC",
".. c #7F98AC",
"+. c #7D97AB",
"@. c #8BA6BB",
"#. c #A6AFBB",
"$. c #CDCCCC",
"%. c #9A9B9B",
" . + + + ",
" @ # + + + ",
" @ $ % & * = + * + @ @ ",
" @ * - ; > , ' ' * * + + + * @ ",
" @ * ) ! ~ { ] ' * * + + + * @ ",
"@ @ ^ / ( _ : : : : : : : : : @ ",
" @ < [ } : | 1 2 3 3 3 3 4 4 5 ",
" @ 6 7 8 : 9 0 a b c c c d e d ",
" @ f g h i j 0 k l l l l m m m ",
" @ n o p i j 0 q q q q q r r r ",
"@ @ s t u i j v q l l l l w x y ",
" @ z A B i j v q q q C D E F G ",
" @ H I J : K v L l l M N N O y ",
" @ P Q @ R v S T U V W V X X ",
" @ # @ R Y Y Z ` . . ...+.",
" . @ R Y @.#.G E $.N r %."};
#endif

123
bitmaps/Save_Library.xpm Normal file
View File

@ -0,0 +1,123 @@
/* XPM */
#ifndef XPMMAIN
extern char *save_library_xpm[];
#else
char * save_library_xpm[] = {
"16 16 99 2",
" c None",
". c #070809",
"+ c #323538",
"@ c #1F1F20",
"# c #0B0D0E",
"$ c #E5E7E8",
"% c #F6F6F6",
"& c #838587",
"* c #050506",
"= c #0B0D0F",
"- c #F7F7F7",
"; c #D8D8D8",
"> c #E0E1E2",
", c #1F2021",
"' c #050709",
") c #E4E7E8",
"! c #D8D9D9",
"~ c #D2D2D2",
"{ c #E2E2E2",
"] c #BFC1C3",
"^ c #0F0F0F",
"/ c #000000",
"( c #363737",
"_ c #D18F84",
": c #D19084",
"< c #D39186",
"[ c #BFD5E8",
"} c #565656",
"| c #353535",
"1 c #363636",
"2 c #0B0B0B",
"3 c #C77467",
"4 c #C77466",
"5 c #C87668",
"6 c #CD867A",
"7 c #8DA9BE",
"8 c #54697C",
"9 c #FCFDFD",
"0 c #FCFCFC",
"a c #FBFBFC",
"b c #FAFBFC",
"c c #EAEAEA",
"d c #242425",
"e c #FEFEFE",
"f c #F9F9F9",
"g c #84A0B5",
"h c #4F6475",
"i c #E2E3E4",
"j c #F8F9FA",
"k c #F7F8F9",
"l c #E0E0E2",
"m c #AFB1B2",
"n c #D7D7D7",
"o c #D6D6D6",
"p c #F1F1F1",
"q c #819AAE",
"r c #496072",
"s c #F9FBFC",
"t c #CBCCCE",
"u c #868C92",
"v c #F4F4F4",
"w c #EBEBEB",
"x c #DFE0E0",
"y c #B4B7BB",
"z c #181B1E",
"A c #D4D4D4",
"B c #C5C5C5",
"C c #FAFBFB",
"D c #FAFAFB",
"E c #CCCED1",
"F c #747C85",
"G c #F2F2F2",
"H c #EEEEEE",
"I c #FBFCFC",
"J c #F0F1F1",
"K c #A9AEB4",
"L c #16181B",
"M c #BFCBD6",
"N c #A1B6C4",
"O c #F4F5F5",
"P c #D2D2D3",
"Q c #7A8188",
"R c #7E99AD",
"S c #7D97AC",
"T c #A0A6AD",
"U c #92999F",
"V c #0D0F11",
"W c #CECECE",
"X c #9C9D9D",
"Y c #2F4656",
"Z c #80868C",
"` c #191E22",
" . c #1E2328",
".. c #183042",
"+. c #33495A",
"@. c #B9B9B9",
"#. c #132D3C",
"$. c #586D80",
"%. c #97A5B0",
" . + @ ",
" # $ % & * ",
" = $ - ; > , ",
" ' ) - ! ~ { ] ^ ",
"/ / / / / / / / / ( ",
"_ _ _ _ : _ < [ [ / } | | | 1 2 ",
"3 3 3 4 3 5 6 7 8 / 9 0 a b c d ",
"e e e e e e f g h / i j k l m / ",
"n n n n n o p q r / s j k t u / ",
"e e 0 v w w p q r / b j x y z ",
"n A B B B B p q r / C D E F / ",
"G w w w w w H q r / I J K L ",
"M M M M M M N q r / O P Q / ",
"q q q q R S q q r / T U V ",
"B W w n X Y Z q r / ` . ",
"..+.o B @.#.$.%.r / "};
#endif

115
bitmaps/Save_NetList.xpm Normal file
View File

@ -0,0 +1,115 @@
/* XPM */
#ifndef XPMMAIN
extern char *save_netlist_xpm[];
#else
char * save_netlist_xpm[] = {
"16 16 91 1",
" c None",
". c #000000",
"+ c #F0F0F0",
"@ c #FFFFFF",
"# c #0F0F0F",
"$ c #EFEFEF",
"% c #101010",
"& c #B3D7F0",
"* c #0B0D0F",
"= c #B3D6EF",
"- c #51616D",
"; c #39454D",
"> c #BFE5FF",
", c #0B0E10",
"' c #FAF9F9",
") c #746355",
"! c #E3C8B4",
"~ c #FFCAA5",
"{ c #FFBD8E",
"] c #F1B58B",
"^ c #4C392A",
"/ c #F3F1F0",
"( c #A7C8E0",
"_ c #C3DCEC",
": c #B9C9D3",
"< c #A38266",
"[ c #FDC49C",
"} c #FEB481",
"| c #AE8868",
"1 c #777471",
"2 c #C4DCEB",
"3 c #BFE5FE",
"4 c #FFEBD9",
"5 c #FFEAD7",
"6 c #E9CAAF",
"7 c #E3BB9E",
"8 c #EBBB99",
"9 c #E4C2A5",
"0 c #A38E7B",
"a c #FFFDFC",
"b c #8EA0AA",
"c c #010101",
"d c #000101",
"e c #FFC38E",
"f c #F6F7F9",
"g c #CADCEA",
"h c #C78980",
"i c #D08E83",
"j c #CF8E82",
"k c #DBB48E",
"l c #DAE6F0",
"m c #8CA8BD",
"n c #B6867E",
"o c #C67568",
"p c #C67467",
"q c #C57366",
"r c #C67466",
"s c #CEDFEC",
"t c #D6D6D6",
"u c #FDFDFD",
"v c #FCFCFC",
"w c #FB7E0F",
"x c #010100",
"y c #CEDEEB",
"z c #D6D6D5",
"A c #D6D5D5",
"B c #D5D5D5",
"C c #FF800F",
"D c #FDFDFC",
"E c #FDFCFC",
"F c #FBFBFB",
"G c #F3F3F3",
"H c #E9E9E9",
"I c #D5D6D6",
"J c #D3D3D3",
"K c #C3C3C3",
"L c #C4C4C4",
"M c #EDEDED",
"N c #F1F1F1",
"O c #EAEAEA",
"P c #ADBECC",
"Q c #C9D5DE",
"R c #C6CED9",
"S c #BECAD5",
"T c #BDC9D4",
"U c #CDDEEB",
"V c #8BA7BC",
"W c #87A4BA",
"X c #7E98AC",
"Y c #7F98AC",
"Z c #7D97AB",
" ...............",
".+@@@@#$@#$@@@@%",
".&*=-......;>*=,",
".+@@')!~{]^/@@@%",
".&.(_:<[}|123.(,",
".+@@45678905a@@%",
".&*=_bccccdcc.c.",
".+@@ecfghiiiiiij",
".&.(kclmnopppqrq",
".+@@@csmtuuuuuuv",
".&*=wxymtzzAtBtB",
".+@@CxymtDDEuFGH",
".&.(>csmttItJKLK",
".+@@@csmMuuNOOOH",
".&*=>csmPQRSSTST",
" .....UVVWXYYYYZ"};
#endif

87
bitmaps/Save_Project.xpm Normal file
View File

@ -0,0 +1,87 @@
/* XPM */
#ifndef XPMMAIN
extern char *save_project_xpm[];
#else
char * save_project_xpm[] = {
"16 16 63 1",
" c None",
". c #000000",
"+ c #020202",
"@ c #F8F8F8",
"# c #ECECEC",
"$ c #EBEBEB",
"% c #6B6B6B",
"& c #2D2D2D",
"* c #181818",
"= c #C5C5C5",
"- c #434343",
"; c #5E5E5E",
"> c #F0F0F0",
", c #707070",
"' c #3D3D3D",
") c #C3C3C3",
"! c #0E0E0E",
"~ c #9C9C9C",
"{ c #4B4B4B",
"] c #616161",
"^ c #131313",
"/ c #D18F84",
"( c #D19084",
"_ c #D39186",
": c #BFD5E8",
"< c #C6C6C6",
"[ c #1B1B1B",
"} c #C77467",
"| c #C77466",
"1 c #C87668",
"2 c #CD867A",
"3 c #8DA9BE",
"4 c #54697C",
"5 c #FEFEFE",
"6 c #F9F9F9",
"7 c #84A0B5",
"8 c #4F6475",
"9 c #D7D7D7",
"0 c #D6D6D6",
"a c #F1F1F1",
"b c #819AAE",
"c c #496072",
"d c #FCFCFC",
"e c #F4F4F4",
"f c #090909",
"g c #D4D4D4",
"h c #F2F2F2",
"i c #EEEEEE",
"j c #121212",
"k c #BFCBD6",
"l c #A1B6C4",
"m c #7E99AD",
"n c #7D97AC",
"o c #CECECE",
"p c #9C9D9D",
"q c #2F4656",
"r c #80868C",
"s c #183042",
"t c #33495A",
"u c #B9B9B9",
"v c #132D3C",
"w c #586D80",
"x c #97A5B0",
" ......+ ",
" .@#$$$%& ",
" ......*=$-;.",
" .>#$$$,')$=!",
".........~{]^$=!",
"////(/_::.$<[$=!",
"}}}|}1234.$<[$=!",
"555555678.$<[$=!",
"999990abc.$<[$=!",
"55de$$abc.$<[))f",
"9g====abc.$<[.. ",
"h$$$$$ibc.))j ",
"kkkkkklbc.... ",
"bbbbmnbbc. ",
"=o$9pqrbc. ",
"st0=uvwxc. "};
#endif

Some files were not shown because too many files have changed in this diff Show More