<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories=""$(SolutionDir)/windows/lib/ingraphs";"$(SolutionDir)/lib/ingraphs";"C:\gtk\lib\glib-2.0\include";"C:\gtk\include\glib-2.0";"C:\gtk\include\pango-1.0\";C:\gtk\include\cairo;C:\gtk\include\freetype2;C:\gtk\include;"$(SolutionDir)/libltdl";"$(SolutionDir)/lib/neatogen";"$(SolutionDir)/lib/agutil";"$(SolutionDir)/windows/lib/cdt";"$(SolutionDir)/";"$(SolutionDir)/lib/graph";"$(SolutionDir)/lib/vpsc";"$(SolutionDir)/lib/vmalloc";"$(SolutionDir)/lib/twopigen";"$(SolutionDir)/lib/sparse";"$(SolutionDir)/lib/sfio";"$(SolutionDir)/lib/sfpdpgen";"$(SolutionDir)/lib/rbtree";"$(SolutionDir)/lib/pathplan";"$(SolutionDir)/lib/patchwork";"$(SolutionDir)/lib/pack";"$(SolutionDir)/lib/ortho";"$(SolutionDir)/lib/inkpot";"$(SolutionDir)/lib/gd";"$(SolutionDir)/lib/filter";"$(SolutionDir)/lib/fdpgen";"$(SolutionDir)/lib/expr";"$(SolutionDir)/lib/dotgen";"$(SolutionDir)/lib/circogen";"$(SolutionDir)/lib/ast";"$(SolutionDir)/lib/agraph";"$(SolutionDir)/lib/common";"$(SolutionDir)/lib/gvc";"$(SolutionDir)/lib/cdt";"$(SolutionDir)/cmd/gvpr";"$(SolutionDir)/lib/cgraph""
+ AdditionalIncludeDirectories=""$(SolutionDir)/windows/lib/ingraphs";"$(SolutionDir)/lib/ingraphs";"C:\gtk\lib\glib-2.0\include";"C:\gtk\include\glib-2.0";"C:\gtk\include\pango-1.0\";C:\gtk\include\cairo;C:\gtk\include\freetype2;C:\gtk\include;"$(SolutionDir)/libltdl";"$(SolutionDir)/lib/neatogen";"$(SolutionDir)/lib/agutil";"$(SolutionDir)/windows/lib/cdt";"$(SolutionDir)/";"$(SolutionDir)/lib/graph";"$(SolutionDir)/lib/vpsc";"$(SolutionDir)/lib/vmalloc";"$(SolutionDir)/lib/twopigen";"$(SolutionDir)/lib/sparse";"$(SolutionDir)/lib/sfio";"$(SolutionDir)/lib/sfpdpgen";"$(SolutionDir)/lib/rbtree";"$(SolutionDir)/lib/pathplan";"$(SolutionDir)/lib/patchwork";"$(SolutionDir)/lib/pack";"$(SolutionDir)/lib/ortho";"$(SolutionDir)/lib/inkpot";"$(SolutionDir)/lib/gd";"$(SolutionDir)/lib/filter";"$(SolutionDir)/lib/fdpgen";"$(SolutionDir)/lib/expr";"$(SolutionDir)/lib/dotgen";"$(SolutionDir)/lib/circogen";"$(SolutionDir)/lib/ast";"$(SolutionDir)/lib/agraph";"$(SolutionDir)/lib/common";"$(SolutionDir)/lib/gvc";"$(SolutionDir)/lib/cdt";"$(SolutionDir)/cmd/gvpr";"$(SolutionDir)/lib/gvpr";"$(SolutionDir)/lib/cgraph""
PreprocessorDefinitions="MSWIN32;WIN32;_DEBUG;_WINDOWS;HAVE_CONFIG_H;WIN32_DLL;GVDLL"
MinimalRebuild="true"
BasicRuntimeChecks="3"
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="sfio.lib ast.lib expr.lib cdt.lib gvc.lib ingraphs.lib vmalloc.lib cgraph.lib shlwapi.lib"
+ AdditionalDependencies="sfio.lib ast.lib expr.lib cdt.lib gvc.lib ingraphs.lib vmalloc.lib cgraph.lib shlwapi.lib gvprlib.lib"
OutputFile="c:/graphviz-ms/bin/$(ProjectName).exe"
LinkIncremental="2"
AdditionalLibraryDirectories="C:\gtk\lib;"C:\graphviz-ms\bin""
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""$(SolutionDir)/windows/lib/ingraphs";"$(SolutionDir)/lib/ingraphs";"C:\gtk\lib\glib-2.0\include";"C:\gtk\include\glib-2.0";"C:\gtk\include\pango-1.0\";C:\gtk\include\cairo;C:\gtk\include\freetype2;C:\gtk\include;"$(SolutionDir)/libltdl";"$(SolutionDir)/lib/neatogen";"$(SolutionDir)/lib/agutil";"$(SolutionDir)/windows/lib/cdt";"$(SolutionDir)/";"$(SolutionDir)/lib/graph";"$(SolutionDir)/lib/vpsc";"$(SolutionDir)/lib/vmalloc";"$(SolutionDir)/lib/twopigen";"$(SolutionDir)/lib/sparse";"$(SolutionDir)/lib/sfio";"$(SolutionDir)/lib/sfpdpgen";"$(SolutionDir)/lib/rbtree";"$(SolutionDir)/lib/pathplan";"$(SolutionDir)/lib/patchwork";"$(SolutionDir)/lib/pack";"$(SolutionDir)/lib/ortho";"$(SolutionDir)/lib/inkpot";"$(SolutionDir)/lib/gd";"$(SolutionDir)/lib/filter";"$(SolutionDir)/lib/fdpgen";"$(SolutionDir)/lib/expr";"$(SolutionDir)/lib/dotgen";"$(SolutionDir)/lib/circogen";"$(SolutionDir)/lib/ast";"$(SolutionDir)/lib/agraph";"$(SolutionDir)/lib/common";"$(SolutionDir)/lib/gvc";"$(SolutionDir)/lib/cdt";"$(SolutionDir)/cmd/gvpr";"$(SolutionDir)/lib/cgraph""
+ AdditionalIncludeDirectories=""$(SolutionDir)/lib/gvpr";"$(SolutionDir)/windows/lib/ingraphs";"$(SolutionDir)/lib/ingraphs";"C:\gtk\lib\glib-2.0\include";"C:\gtk\include\glib-2.0";"C:\gtk\include\pango-1.0\";C:\gtk\include\cairo;C:\gtk\include\freetype2;C:\gtk\include;"$(SolutionDir)/libltdl";"$(SolutionDir)/lib/neatogen";"$(SolutionDir)/lib/agutil";"$(SolutionDir)/windows/lib/cdt";"$(SolutionDir)/";"$(SolutionDir)/lib/graph";"$(SolutionDir)/lib/vpsc";"$(SolutionDir)/lib/vmalloc";"$(SolutionDir)/lib/twopigen";"$(SolutionDir)/lib/sparse";"$(SolutionDir)/lib/sfio";"$(SolutionDir)/lib/sfpdpgen";"$(SolutionDir)/lib/rbtree";"$(SolutionDir)/lib/pathplan";"$(SolutionDir)/lib/patchwork";"$(SolutionDir)/lib/pack";"$(SolutionDir)/lib/ortho";"$(SolutionDir)/lib/inkpot";"$(SolutionDir)/lib/gd";"$(SolutionDir)/lib/filter";"$(SolutionDir)/lib/fdpgen";"$(SolutionDir)/lib/expr";"$(SolutionDir)/lib/dotgen";"$(SolutionDir)/lib/circogen";"$(SolutionDir)/lib/ast";"$(SolutionDir)/lib/agraph";"$(SolutionDir)/lib/common";"$(SolutionDir)/lib/gvc";"$(SolutionDir)/lib/cdt";"$(SolutionDir)/cmd/gvpr";"$(SolutionDir)/lib/cgraph""
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;HAVE_CONFIG_H;WIN32_DLL;GVDLL"
RuntimeLibrary="2"
UsePrecompiledHeader="0"
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="cgraph.lib sfio.lib ast.lib expr.lib cdt.lib gvc.lib ingraphs.lib vmalloc.lib shlwapi.lib"
+ AdditionalDependencies="cgraph.lib sfio.lib ast.lib expr.lib cdt.lib gvc.lib ingraphs.lib vmalloc.lib shlwapi.lib gvprlib.lib"
OutputFile="c:/graphviz-ms/bin/$(ProjectName).exe"
LinkIncremental="2"
AdditionalLibraryDirectories="C:\graphviz-ms\bin;C:\gtk\lib"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
- <File
- RelativePath=".\actions.h"
- >
- </File>
- <File
- RelativePath=".\compile.h"
- >
- </File>
- <File
- RelativePath=".\gprstate.h"
- >
- </File>
- <File
- RelativePath=".\parse.h"
- >
- </File>
- <File
- RelativePath=".\queue.h"
- >
- </File>
</Filter>
<Filter
Name="Resource Files"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
- RelativePath=".\actions.c"
- >
- </File>
- <File
- RelativePath=".\compile.c"
- >
- </File>
- <File
- RelativePath=".\gprstate.c"
- >
- </File>
- <File
- RelativePath=".\gvpr.c"
- >
- </File>
- <File
- RelativePath=".\parse.c"
- >
- </File>
- <File
- RelativePath=".\queue.c"
+ RelativePath=".\gvprmain.c"
>
</File>
</Filter>
#else
#include "compat_unistd.h"
#endif
+
+
+
#include "gvpr.h"
#ifdef DEBUG
if (param == 1) //selected
fontColor(view->widgets->fontset->fonts[view->widgets->fontset->activefont],view->selectedNodeColor.R, view->selectedNodeColor.G,
view->selectedNodeColor.B,1);
- glprintf(view->widgets->fontset->fonts[view->widgets->fontset->activefont], (x - dx), (GLfloat)op->u.text.y - dy,
+ glprintf(view->widgets->fontset->fonts[view->widgets->fontset->activefont], (x - dx), (GLfloat)op->u.text.y - dy,(GLfloat)0,
(GLfloat)op->u.text.width, op->u.text.text);
}
int draw_node_hintbox(GLfloat x,GLfloat y,GLfloat z,GLfloat fs,char* text)
{
+
glColor3f(1,1,0);
draw_node_hintbox_gl_polygon(x,y,z,fs,text);
glColor3f(0,0,1);
if (event->button == 1) //left click release
{
- if (glCompSetRelease
- (view->widgets, (int) event->x_root,
- (int) event->y_root)) {
- expose_event(view->drawing_area, NULL, NULL); }
- view->mouse.mouse_down = 0;
- if ((view->mouse.mouse_mode == MM_RECTANGULAR_SELECT)
- || (view->mouse.mouse_mode == MM_RECTANGULAR_X_SELECT)) {
- if (view->GLx <= view->GLx2)
- view->Selection.X = view->GLx;
- else
- view->Selection.X = view->GLx2;
- if (view->GLy <= view->GLy2)
- view->Selection.Y = view->GLy;
- else
- view->Selection.Y = view->GLy2;
- view->Selection.W = view->GLx2 - view->GLx;
- if (view->Selection.W < 0)
- view->Selection.W = view->Selection.W * -1;
- view->Selection.H = view->GLy2 - view->GLy;
- if (view->Selection.H < 0)
- view->Selection.H = view->Selection.H * -1;
- if (view->mouse.mouse_mode == 4)
- view->Selection.Type = 1;
- else
- view->Selection.Type = 2;
- view->Selection.Active = 1;
- expose_event(view->drawing_area, NULL, NULL);
- }
+ if (glCompSetRelease(view->widgets, (int) event->x_root,(int) event->y_root))
+ {
+ expose_event(view->drawing_area, NULL, NULL);
+ }
+ view->mouse.mouse_down = 0;
+ if ((view->mouse.mouse_mode == MM_RECTANGULAR_SELECT)
+ || (view->mouse.mouse_mode == MM_RECTANGULAR_X_SELECT))
+ {
+ if (view->GLx <= view->GLx2)
+ view->Selection.X = view->GLx;
+ else
+ view->Selection.X = view->GLx2;
+ if (view->GLy <= view->GLy2)
+ view->Selection.Y = view->GLy;
+ else
+ view->Selection.Y = view->GLy2;
+ view->Selection.W = view->GLx2 - view->GLx;
+ if (view->Selection.W < 0)
+ view->Selection.W = view->Selection.W * -1;
+ view->Selection.H = view->GLy2 - view->GLy;
+ if (view->Selection.H < 0)
+ view->Selection.H = view->Selection.H * -1;
+ if (view->mouse.mouse_mode == 4)
+ view->Selection.Type = 1;
+ else
+ view->Selection.Type = 2;
+ view->Selection.Active = 1;
+ expose_event(view->drawing_area, NULL, NULL);
+ }
- if (view->mouse.mouse_mode == MM_MOVE) {
- move_TVnodes();
- }
+ if (view->mouse.mouse_mode == MM_MOVE)
+ move_TVnodes();
- if ((view->mouse.mouse_mode == MM_FISHEYE_MAGNIFIER) || (view->mouse.mouse_mode == MM_MAGNIFIER)) //fisheye mag mouse release, stop distortion
- {
- originate_distorded_coordinates(view->Topview);
- expose_event(view->drawing_area, NULL, NULL);
- }
- if (view->mouse.mouse_mode==MM_PAN)
+ if ((view->mouse.mouse_mode == MM_FISHEYE_MAGNIFIER) || (view->mouse.mouse_mode == MM_MAGNIFIER)) //fisheye mag mouse release, stop distortion
{
+ originate_distorded_coordinates(view->Topview);
expose_event(view->drawing_area, NULL, NULL);
-
}
-
+ if (view->mouse.mouse_mode==MM_PAN)
+ expose_event(view->drawing_area, NULL, NULL);
}
if (event->button == 3) //right click
{
+ to3D(view->mouse.mouse_X,view->mouse.mouse_Y, &view->mouse.GLX, &view->mouse.GLY,&view->mouse.GLZ);
+ pick_node_from_coords(view->mouse.GLX,view->mouse.GLY,view->mouse.GLZ);
if (view->activeGraph >= 0)
{
if(view->Topview->is_top_fisheye)
{
- GetFixedOGLPoslocal((int) event->x, (int) event->y,view->GLDepth, &(view->GLx2),&(view->GLy2), &(view->GLz2));
+ GetFixedOGLPoslocal((int) event->x, (int) event->y, &(view->GLx2),&(view->GLy2), &(view->GLz2));
changetopfishfocus(view->Topview, &view->GLx2, &view->GLy2, 0,1);
- expose_event(view->drawing_area, NULL, NULL);
}
}
+ expose_event(view->drawing_area, NULL, NULL);
}
dx = 0.0;
#include "selection.h"
#include "gltemplate.h"
#include "toolboxcallbacks.h"
+typedef struct tagXYZ
+{
+ float X, Y, Z;
+}
+XYZ;
+void pick_node_from_coords(float x,float y,float z)
+{
+ topview_node* n;
+ topview_node* sn; /*selected node , closest node*/
+ topview_edge* e;
+ topview_edge* se;/*selected edge , closest one*/
+ GLfloat closest_dif = 1000;
+ GLfloat closest_dif2 = 1000;
+ static char buf[512];
+ float a, b,c;
+ int ind;
+ sn=(topview_node*)0;
+ se=(topview_edge*)0;
+
+ for (ind = 0; ind < view->Topview->Nodecount; ind++)
+ {
+ n = &view->Topview->Nodes[ind];
+ a = ABS(n->distorted_x - view->mouse.GLX);
+ b = ABS(n->distorted_y - view->mouse.GLY);
+ c = ABS(n->distorted_z - view->mouse.GLZ);
+ a = (float) pow((a * a + b * b+ c*c), (float) 0.5);
+ if (a < closest_dif)
+ {
+ sn=n;
+ closest_dif=a;
+ }
+ }
+
+ for (ind = 0; ind < view->Topview->Edgecount; ind++)
+ {
+ XYZ p1,p2,p3;
+ e = &view->Topview->Edges[ind];
+
+ p1.X=e->Node1->distorted_x;
+ p1.Y=e->Node1->distorted_y;
+ p1.Z=e->Node1->distorted_z;
+
+ p2.X=e->Node2->distorted_x;
+ p2.Y=e->Node2->distorted_y;
+ p2.Z=e->Node2->distorted_z;
+
+ p3.X=view->mouse.GLX;
+ p3.Y=view->mouse.GLY;
+ p3.Z=view->mouse.GLZ;
+ if(DistancePointLine( &p3, &p1, &p2, &a))
+ {
+ if (a < closest_dif2 )
+ {
+ se=e;
+ closest_dif2=a;
+ }
+ }
+ }
+
+ if (closest_dif < closest_dif2 * 10)
+ {
+ if (sn)
+ {
+ if (!is_node_picked(sn))
+ add_to_pick_list(sn);
+ else
+ remove_from_pick_list(sn);
+ }
+ }
+ else
+ {
+ if (se)
+ {
+ if (!is_edge_picked(se))
+ add_edge_to_pick_list(se);
+ else
+ remove_edge_from_pick_list(se);
+ }
+ }
+
+}
-int pick_node(topview_node * n)
+
+
+
+
+
+
+/*int pick_node(topview_node * n)
{
static int closest_dif = 3;
static char buf[512];
float a, b;
- a = ABS(n->distorted_x - view->GLx);
- b = ABS(n->distorted_y - view->GLy);
+ a = ABS(n->distorted_x - view->mouse.GLX);
+ b = ABS(n->distorted_y - view->mouse.GLY);
a = (float) pow((a * a + b * b), (float) 0.5);
if (a < closest_dif) {
if (!is_node_picked(n)) {
return 0;
} else {
if (remove_from_pick_list(n)) {
-// printf("node has been unpicked ,name:%s\n",
-// agnameof(n->Node));
return 1;
}
return 0;
}
return 0;
-}
+}*/
int is_node_picked(topview_node * n)
{
{
int ind = 0;
int found = 0;
- for (; ind < view->Topview->picked_node_count; ind++) {
+ printf("removed\n");
+ for (; ind < view->Topview->picked_node_count; ind++) {
if ((view->Topview->picked_nodes[ind] == n) && (!found))
found = 1;
if ((found) && (ind < (view->Topview->picked_node_count - 1))) {
int add_to_pick_list(topview_node * n)
{
view->Topview->picked_node_count++;
- view->Topview->picked_nodes =
- realloc(view->Topview->picked_nodes,
- sizeof(topview_node *) * view->Topview->picked_node_count);
+ view->Topview->picked_nodes =realloc(view->Topview->picked_nodes,sizeof(topview_node *) * view->Topview->picked_node_count);
view->Topview->picked_nodes[view->Topview->picked_node_count - 1] = n;
+ printf("picked count:%d\n",view->Topview->picked_node_count);
return 1;
+}
+int is_edge_picked(topview_edge * e)
+{
+ int ind = 0;
+ int found = 0;
+ for (; ind < view->Topview->picked_edge_count; ind++) {
+ if ((view->Topview->picked_edges[ind] == e) && (!found))
+ return 1;
+ }
+ return 0;
}
+int remove_edge_from_pick_list(topview_edge * e)
+{
+ int ind = 0;
+ int found = 0;
+ printf("removed\n");
+ for (; ind < view->Topview->picked_edge_count; ind++)
+ {
+ if ((view->Topview->picked_edges[ind] == e) && (!found))
+ found = 1;
+ if ((found) && (ind < (view->Topview->picked_edge_count - 1)))
+ {
+ view->Topview->picked_edges[ind] = view->Topview->picked_edges[ind + 1];
+ }
+ }
+ if (found)
+ {
+ view->Topview->picked_edge_count--;
+ view->Topview->picked_edges =realloc(view->Topview->picked_edges,sizeof(topview_edge *) *view->Topview->picked_edge_count);
+ return 1;
+ }
+ return 0;
+}
+
+int add_edge_to_pick_list(topview_edge * e)
+{
+ view->Topview->picked_edge_count++;
+ view->Topview->picked_edges =realloc(view->Topview->picked_edges,sizeof(topview_edge *) * view->Topview->picked_edge_count);
+ view->Topview->picked_edges[view->Topview->picked_edge_count - 1] = e;
+ printf("picked edge count:%d\n",view->Topview->picked_edge_count);
+ return 1;
+}
+
+
+
+
int draw_node_hint_boxes(void)
{
int ind;
- /* int fs = 12; */
- for (ind = 0; ind < view->Topview->picked_node_count; ind++)
+ float fs = GetOGLDistance(12);
+ char* lbl;
+ topview_node* n;
+ topview_edge* e;
+ double dx, dy, dz;
+ char buf[512];
+
+ view->widgets->fontset->fonts[view->widgets->fontset->activefont]->fontheight=fs;
+
+
+ for (ind = 0; ind < view->Topview->picked_node_count; ind++)
+ {
+ n = view->Topview->picked_nodes[ind];
+ lbl = agnameof(n->Node);
+ dx = n->distorted_x;
+ dy = n->distorted_y;
+ dz = n->distorted_z;
+
+
+ /*blue font color*/
+ glColor4f(0, 0, 1, 1);
+ glprintfglut (GLUT_BITMAP_HELVETICA_12, dx,dy,dz,"[");
+ glprintfglut (GLUT_BITMAP_HELVETICA_12, dx,(dy+fs+fs/(GLfloat)5.0),dz,lbl);
+ }
+ glLineWidth(5);
+ glColor4f(0, 1, 0, 0.5);
+ glBegin(GL_LINES);
+ for (ind = 0; ind < view->Topview->picked_edge_count; ind++)
{
- draw_node_hintbox(view->Topview->picked_nodes[ind]->distorted_x,
- view->Topview->picked_nodes[ind]->distorted_y,
- view->Topview->picked_nodes[ind]->distorted_z+(float)0.001,
- (GLfloat) view->FontSizeConst,
- agnameof(view->Topview->picked_nodes[ind]->Node));
-/* fontSize(fs);
- fontColorA(0, 0, 1, 1);
- glprintf((int)
- (view->Topview->picked_nodes[ind]->distorted_x -
- fs / 3 + 1 - fs),
- (int) (view->Topview->picked_nodes[ind]->
- distorted_y + fs + 1),
- agnameof(view->Topview->picked_nodes[ind]->Node),
- fs *
- strlen(agnameof
- (view->Topview->picked_nodes[ind]->Node)) /
- 2);*/
+ float x1,x2,x3,y1,y2,y3,z1,z2,z3l;
+ e = view->Topview->picked_edges[ind];
+ x1=e->Node1->distorted_x;
+ x2=e->Node2->distorted_x;
+ y1=e->Node1->distorted_y;
+ y2=e->Node2->distorted_y;
+ z1=e->Node1->distorted_z;
+ z2=e->Node2->distorted_z;
+
+ dx = (x1+x2)/2.0;
+ dy = (y1+y2)/2.0;
+ dz = (z1+z2)/2.0;
+
+
+ glVertex3f(x1,y1,z1);
+ glVertex3f(x2,y2,z2);
+
+
+ /*blue font color*/
+ glprintfglut (GLUT_BITMAP_HELVETICA_12, dx,dy,dz,"[");
+ glprintfglut (GLUT_BITMAP_HELVETICA_12, dx,(dy+fs+fs/(GLfloat)5.0),dz,lbl);
}
+ glEnd();
+ glLineWidth(0);
+
+ for (ind = 0; ind < view->Topview->picked_edge_count; ind++)
+ {
+ buf[0]=(char*)0;
+ float x1,x2,x3,y1,y2,y3,z1,z2,z3l;
+ glColor4f(0, 1, 0, 0.5);
+ e = view->Topview->picked_edges[ind];
+ x1=e->Node1->distorted_x;
+ x2=e->Node2->distorted_x;
+ y1=e->Node1->distorted_y;
+ y2=e->Node2->distorted_y;
+ z1=e->Node1->distorted_z;
+ z2=e->Node2->distorted_z;
+
+ strcat(buf,agnameof(e->Node1->Node));
+ strcat(buf," - ");
+ strcat(buf,agnameof(e->Node2->Node));
+
+ dx = (x1+x2)/2.0;
+ dy = (y1+y2)/2.0;
+ dz = (z1+z2)/2.0;
+
+
+
+ glColor4f(0, 0, 1, 1);
+
+ /*blue font color*/
+ glprintfglut (GLUT_BITMAP_HELVETICA_12, dx,dy,dz,"|");
+ glprintfglut (GLUT_BITMAP_HELVETICA_12, dx,(dy+fs+fs/(GLfloat)5.0),dz,buf);
+ }
+
+
return 1;
}
+
int is_node_picked(topview_node * n);
int remove_from_pick_list(topview_node * n);
int add_to_pick_list(topview_node * n);
-int draw_node_hint_boxes(void);
#endif
#include <stdlib.h>
#include <assert.h>
#include <glade/glade.h>
-#include <viewport.h>
-#include <gltemplate.h>
+
+//#include <viewport.h>
+//#include <gltemplate.h>
#include <gvpr.h>
Name="VCCLCompilerTool"
AdditionalOptions="/D "_CRT_SECURE_NO_DEPRECATE""
Optimization="0"
- AdditionalIncludeDirectories=""$(SolutionDir)/lib/gvc";"C:\gtk\include\libglade-2.0";"$(SolutionDir)/lib/neatogen";"$(SolutionDir)/lib/sparse";"$(SolutionDir)/lib/topfish";"C:\gtk\lib\gtkglext-1.0\include";"C:\gtk\include\gtkglext-1.0\";C:\gtk\include\cairo;"C:\gtk\include\atk-1.0";"C:\gtk\lib\gtk-2.0\include\cairo";"C:\gtk\lib\gtk-2.0\include";"C:\gtk\include\gtk-2.0\";"$(SolutionDir)/cmd/smyrna/gui";"$(SolutionDir)/cmd/smyrna";"$(SolutionDir)";"$(SolutionDir)/lib/glcomp";"C:\gtk\lib\glib-2.0\include";"C:\gtk\include\glib-2.0";"C:\gtk\include\pango-1.0\";C:\gtk\include;"$(SolutionDir)/lib/common";"$(SolutionDir)/lib/gvpr";"$(SolutionDir)/lib/cdt";"$(SolutionDir)/lib/cgraph";"$(SolutionDir)/lib/glut/glut-3.7.6-bin";"$(SolutionDir)/lib/xdot""
+ AdditionalIncludeDirectories=""$(SolutionDir)/lib/expr";"$(SolutionDir)/lib/vmalloc";"$(SolutionDir)/lib/ast";"$(SolutionDir)/lib/sfio";"$(SolutionDir)/lib/gvc";"C:\gtk\include\libglade-2.0";"$(SolutionDir)/lib/neatogen";"$(SolutionDir)/lib/sparse";"$(SolutionDir)/lib/topfish";"C:\gtk\lib\gtkglext-1.0\include";"C:\gtk\include\gtkglext-1.0\";C:\gtk\include\cairo;"C:\gtk\include\atk-1.0";"C:\gtk\lib\gtk-2.0\include\cairo";"C:\gtk\lib\gtk-2.0\include";"C:\gtk\include\gtk-2.0\";"$(SolutionDir)/cmd/smyrna/gui";"$(SolutionDir)/cmd/smyrna";"$(SolutionDir)";"$(SolutionDir)/lib/glcomp";"C:\gtk\lib\glib-2.0\include";"C:\gtk\include\glib-2.0";"C:\gtk\include\pango-1.0\";C:\gtk\include;"$(SolutionDir)/lib/common";"$(SolutionDir)/lib/gvpr";"$(SolutionDir)/lib/cdt";"$(SolutionDir)/lib/cgraph";"$(SolutionDir)/lib/glut/glut-3.7.6-bin";"$(SolutionDir)/lib/xdot""
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;HAVE_TRIANGLE;HAVE_CONFIG_H;HAVE_GTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;WIN32_DLL"
MinimalRebuild="true"
BasicRuntimeChecks="3"
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""$(SolutionDir)/lib/gvc";"C:\gtk\include\libglade-2.0";"$(SolutionDir)/lib/neatogen";"$(SolutionDir)/lib/sparse";"$(SolutionDir)/lib/topfish";"C:\gtk\lib\gtkglext-1.0\include";"C:\gtk\include\gtkglext-1.0\";C:\gtk\include\cairo;"C:\gtk\include\atk-1.0";"C:\gtk\lib\gtk-2.0\include\cairo";"C:\gtk\lib\gtk-2.0\include";"C:\gtk\include\gtk-2.0\";"$(SolutionDir)/cmd/smyrna/gui";"$(SolutionDir)/cmd/smyrna";"$(SolutionDir)";"$(SolutionDir)/lib/glcomp";"C:\gtk\lib\glib-2.0\include";"C:\gtk\include\glib-2.0";"C:\gtk\include\pango-1.0\";C:\gtk\include;"$(SolutionDir)/lib/common";"$(SolutionDir)/lib/gvpr";"$(SolutionDir)/lib/cdt";"$(SolutionDir)/lib/cgraph";"$(SolutionDir)/lib/glut/glut-3.7.6-bin";"$(SolutionDir)/lib/xdot""
+ AdditionalIncludeDirectories=""$(SolutionDir)/lib/expr";"$(SolutionDir)/lib/vmalloc";"$(SolutionDir)/lib/ast";"$(SolutionDir)/lib/sfio";"$(SolutionDir)/lib/gvc";"C:\gtk\include\libglade-2.0";"$(SolutionDir)/lib/neatogen";"$(SolutionDir)/lib/sparse";"$(SolutionDir)/lib/topfish";"C:\gtk\lib\gtkglext-1.0\include";"C:\gtk\include\gtkglext-1.0\";C:\gtk\include\cairo;"C:\gtk\include\atk-1.0";"C:\gtk\lib\gtk-2.0\include\cairo";"C:\gtk\lib\gtk-2.0\include";"C:\gtk\include\gtk-2.0\";"$(SolutionDir)/cmd/smyrna/gui";"$(SolutionDir)/cmd/smyrna";"$(SolutionDir)";"$(SolutionDir)/lib/glcomp";"C:\gtk\lib\glib-2.0\include";"C:\gtk\include\glib-2.0";"C:\gtk\include\pango-1.0\";C:\gtk\include;"$(SolutionDir)/lib/common";"$(SolutionDir)/lib/gvpr";"$(SolutionDir)/lib/cdt";"$(SolutionDir)/lib/cgraph";"$(SolutionDir)/lib/glut/glut-3.7.6-bin";"$(SolutionDir)/lib/xdot""
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;"
RuntimeLibrary="2"
UsePrecompiledHeader="0"
<File
RelativePath=".\gvprpipe.c"
>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ GeneratePreprocessedFile="0"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath=".\hier.c"
#define SMYRNADEFS_H
#ifdef WIN32
+#ifndef NO_WIN_HEADER
#include "windows.h"
+#endif
//#include "gltexfont.h"
//#define SMYRNA_GLADE "C:/Projects/graphviz2/share/gui/smyrna.glade"
#define SMYRNA_ATTRS "c:/graphviz-ms/graphviz2/share/gui/attrs.txt"
int animate;
topview_node** picked_nodes;
int picked_node_count;
+ topview_edge** picked_edges;
+ int picked_edge_count;
+
graph_data Graphdata;
int maxnodedegree;
float maxedgelen;
float begin_x;
float begin_y;
float dx;
- float dy;
+ float dy;
+ float GLX;/*opengl coordiantes for right click*/
+ float GLY;
+ float GLZ;
mouse_rotate_axis rotate_axis;
clicked_mouse_button button;
} mouse_attr;
if((v==t->fs->foci_nodes[0]) &&(focusnodes))
{
glColor4f((float)0, (float)0, (float)1, (float)1);
- glprintfglut(GLUT_BITMAP_HELVETICA_18,gg[v].physical_x_coord,gg[v].physical_y_coord,buf);
+ glprintfglut(GLUT_BITMAP_HELVETICA_18,gg[v].physical_x_coord,gg[v].physical_y_coord,0,buf);
}
else if (finenodes)
{
glColor4f(0, 0, 0, 1);
- glprintfglut(GLUT_BITMAP_HELVETICA_10,gg[v].physical_x_coord,gg[v].physical_y_coord,buf);
+ glprintfglut(GLUT_BITMAP_HELVETICA_10,gg[v].physical_x_coord,gg[v].physical_y_coord,0,buf);
}
}
static int update_topview_node_from_cgraph(topview_node * Node);
#endif
static int get_color_from_edge(topview_edge * e);
-static int draw_node_hint_boxes(void);
static int pick_node(topview_node * n);
#ifdef UNUSED
/*reset picked nodes*/
t->picked_node_count = 0;
t->picked_nodes = '\0';
+ t->picked_edge_count = 0;
+ t->picked_edges = '\0';
}
}
if (view->Selection.single_selected_node)
{
- if (view->mouse.button== rightmousebutton) //right click pick mode
- pick_node(view->Selection.single_selected_node);
+ if (view->mouse.button== rightmousebutton)
+ //right click pick mode
+ ;
+ /* pick_node(view->Selection.single_selected_node);*/
else
{ //left click single select mode
if (view->Selection.single_selected_node->data.Selected == 0)
float ddx, ddy, ddz;
int ind = 0;
float dotsize = set_gl_dot_size(view->Topview); //sets the size of the gl points
-
- set_topview_options();
+ set_topview_options();
begintopviewnodes(g, dotsize);
view->visiblenodecount=0;
for (ind = 0; ind < view->Topview->Nodecount; ind++) {
if(!view->drawnodes || !node_visible(v))
continue;
- select_topview_node(v);
+ /*check for each node if it needs to be selected or picked*/
+ select_topview_node(v);
//UPDATE view->Topview data from cgraph
/* if (v->update_required) */
/* update_topview_node_from_cgraph(v); */
- if (v->data.Selected == 1) {
- glColor4f(view->selectedNodeColor.R,
- view->selectedNodeColor.G,
- view->selectedNodeColor.B,
- view->selectedNodeColor.A);
- ddx = dx;
- ddy = dy;
- ddz = dz;
+ if (v->data.Selected == 1)
+ {
+ glColor4f(view->selectedNodeColor.R, view->selectedNodeColor.G, view->selectedNodeColor.B, view->selectedNodeColor.A);
+ ddx = dx;
+ ddy = dy;
+ ddz = dz;
}
- else { //get the color from node
- glColor4f(v->Color.R, v->Color.G, v->Color.B,
- v->node_alpha*view->defaultnodealpha);
- ddx = 0;
- ddy = 0;
- ddz = 0;
+ else
+ { //get the color from node
+ glColor4f(v->Color.R, v->Color.G, v->Color.B,v->node_alpha*view->defaultnodealpha);
+ ddx = 0;
+ ddy = 0;
+ ddz = 0;
}
if (v->distorted_x != v->x)
topview_node *v;
float f;
- if ((view->visiblenodecount >view->labelnumberofnodes) || (!view->labelshownodes) ||(!view->drawnodes))
+ if (
+ ((view->visiblenodecount >view->labelnumberofnodes) && (view->active_camera == -1))
+ || (!view->labelshownodes) ||(!view->drawnodes))
return 0;
if (view->Topview->maxnodedegree > 15)
f=15;
v = &view->Topview->Nodes[ind];
- if( ((float)view->visiblenodecount > view->labelnumberofnodes * v->degree / f) && view->labelwithdegree)
- continue;
+ if (view->active_camera == -1)
+ {
+ if( ((float)view->visiblenodecount > view->labelnumberofnodes * v->degree / f) && view->labelwithdegree)
+ continue;
+ }
if (!node_visible(v))
continue;
draw_topview_label(v, 1);
}
}
-static int is_node_picked(topview_node * n)
-{
- int ind = 0;
- int found = 0;
- for (; ind < view->Topview->picked_node_count; ind++) {
- if ((view->Topview->picked_nodes[ind] == n) && (!found))
- return 1;
- }
- return 0;
-}
-static int remove_from_pick_list(topview_node * n)
-{
- int ind = 0;
- int found = 0;
- view->mouse.button=-1; //reset button click to avoid extra selection and pick chekcs
-
- for (; ind < view->Topview->picked_node_count; ind++) {
- if ((view->Topview->picked_nodes[ind] == n) && (!found))
- found = 1;
- if ((found) && (ind < (view->Topview->picked_node_count - 1))) {
- view->Topview->picked_nodes[ind] =
- view->Topview->picked_nodes[ind + 1];
- }
- }
- if (found) {
- view->Topview->picked_node_count--;
- view->Topview->picked_nodes =
- realloc(view->Topview->picked_nodes,
- sizeof(topview_node *) *
- view->Topview->picked_node_count);
- return 1;
- }
- return 0;
-}
-
-static int add_to_pick_list(topview_node * n)
-{
- view->Topview->picked_node_count++;
- view->Topview->picked_nodes =
- realloc(view->Topview->picked_nodes,
- sizeof(topview_node *) * view->Topview->picked_node_count);
- view->Topview->picked_nodes[view->Topview->picked_node_count - 1] = n;
- view->mouse.button=-1; //reset button click to avoid extra selection and pick chekcs
-
- return 1;
-
-}
-static int pick_node(topview_node * n)
+/*static int pick_node(topview_node * n)
{
if (!is_node_picked(n))
{
}
return 0;
-}
+}*/
-static int draw_node_hint_boxes(void)
-{
- int ind;
- float fs = GetOGLDistance(12);
- char* lbl;
- topview_node* n;
- double dx, dy, dz;
-
- view->widgets->fontset->fonts[view->widgets->fontset->activefont]->fontheight=fs;
- for (ind = 0; ind < view->Topview->picked_node_count; ind++) {
- n = view->Topview->picked_nodes[ind];
- lbl = agnameof(n->Node);
- dx = n->distorted_x;
- dy = n->distorted_y;
- dz = n->distorted_z;
-
- draw_node_hintbox(dx, dy, dz, (GLfloat) fs, lbl);
-
- /*blue font color*/
- glColor4f(0, 0, 1, 1);
- glprintfglut (GLUT_BITMAP_HELVETICA_12, dx,(dy+fs+fs/(GLfloat)5.0),lbl);
- }
- return 1;
-}
static int select_topview_node(topview_node * n)
{
-/* if (!view->Selection.Active) {
+ if (!view->Selection.Active) {
//implement hint box here
- if (view->mouse.button== rightmousebutton)
+/* if (view->mouse.button== rightmousebutton)
{
if (pick_node(n))
view->mouse.button = -1;
}
- return 0;
- }*/
+ return 0;*/
+ }
if (
(( view->Selection.Type == 0) && (view->Selection.Active))
||
(view->mouse.button== rightmousebutton)) //single selection or right click (picking)
{
float dist=(float)DIST2(view->Selection.X-n->distorted_x, view->Selection.Y-n->distorted_y);
+
if ((view->Selection.node_distance==-1) ||(dist < view->Selection.node_distance))
{
view->Selection.node_distance=dist;
float ddx = 0;
float ddy = 0;
char* buf;
- if ((v->distorted_x / view->zoom * -1 > view->clipX1)
+ char bf[256];
+ if (((v->distorted_x / view->zoom * -1 > view->clipX1)
&& (v->distorted_x / view->zoom * -1 < view->clipX2)
&& (v->distorted_y / view->zoom * -1 > view->clipY1)
- && (v->distorted_y / view->zoom * -1 < view->clipY2))
+ && (v->distorted_y / view->zoom * -1 < view->clipY2)) || (view->active_camera >=0))
{
if (v->data.Selected == 1)
{
glColor4f(view->nodelabelcolor.R,view->nodelabelcolor.G,view->nodelabelcolor.B,view->nodelabelcolor.A);
buf=agget(agraphof(v->Node),"nodelabelattribute");
if (buf)
- glprintfglut(view->glutfont,(v->distorted_x - ddx),(v->distorted_y - ddy),
+ glprintfglut(view->glutfont,(v->distorted_x - ddx),(v->distorted_y - ddy),v->distorted_z,
agget(v->Node,buf));
return 1;
} else
float ddx = 0;
float ddy = 0;
char* buf;
- float x1,y1,x2,y2,x,y;
+ float x1,y1,z1,x2,y2,z2,x,y,z;
x1=e->Node1->distorted_x;
y1=e->Node1->distorted_y;
x2=e->Node2->distorted_x;
y2=e->Node2->distorted_y;
+ z1=e->Node1->distorted_z;
+ z2=e->Node2->distorted_z;
if ((x1 / view->zoom * -1 > view->clipX1)
x=(x2-x1)/2.00 + x1;
y=(y2-y1)/2.00 + y1;
+ z=(z2-z1)/2.00 + z1;
if (e->data.Selected==1)
{
ddx = dx;
glColor4f(view->edgelabelcolor.R,view->edgelabelcolor.G,view->edgelabelcolor.B,view->edgelabelcolor.A);
buf=agget(agraphof(e->Edge),"edgelabelattribute");
if (buf)
- glprintfglut(view->glutfont,x - ddx,y - ddy,agget(e->Edge,buf));
+ glprintfglut(view->glutfont,x - ddx,y - ddy,z,agget(e->Edge,buf));
return 1;
} else
return 0;
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cdt", "lib\cdt\cdt.vcproj", "{83CF0498-7884-49D3-8B3C-263C5AF5FE1B}"
+ ProjectSection(ProjectDependencies) = postProject
+ {0DEA7FAC-4190-4B39-BEF0-1C055758FED3} = {0DEA7FAC-4190-4B39-BEF0-1C055758FED3}
+ EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gvc", "lib\gvc.vcproj", "{15229511-9F6C-48A5-9194-660CA6492563}"
ProjectSection(ProjectDependencies) = postProject
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gvplugin_neato_layout", "plugin\neato_layout\gvplugin_neato_layout.vcproj", "{92EA9398-9244-4DAA-8E7D-2F6BEC338CAB}"
ProjectSection(ProjectDependencies) = postProject
+ {443EB1A7-C634-4292-9F2D-C752BB2BF40F} = {443EB1A7-C634-4292-9F2D-C752BB2BF40F}
{AE706502-3203-4815-BF50-4D73BF96BA58} = {AE706502-3203-4815-BF50-4D73BF96BA58}
{15229511-9F6C-48A5-9194-660CA6492563} = {15229511-9F6C-48A5-9194-660CA6492563}
{C5CEB09E-79AF-4091-ACCF-D28EC3D7D90F} = {C5CEB09E-79AF-4091-ACCF-D28EC3D7D90F}
p->fontsize) / (GLfloat) 2.0 + p->pos.y + p->thickness;
- glprintf(p->font, fontx,fonty, fontwidth,p->caption);
+ glprintf(p->font, fontx,fonty, p->bevel,fontwidth,p->caption);
}
//put glyph
else
p->font->fontheight=p->size;
fontColor(p->font,p->color.R, p->color.G, p->color.B, p->color.A);
- glprintf(p->font, p->pos.x, p->pos.y,
- (p->size * p->fontsizefactor *
- strlen(p->text)), p->text);
+ glprintf(p->font, p->pos.x, p->pos.y,p->panel->bevel,(p->size * p->fontsizefactor *strlen(p->text)), p->text);
if (p->panel) {
p->pos.x = p->pos.x - p->panel->pos.x;
p->pos.y = p->pos.y - p->panel->pos.y;
glDisable (GL_TEXTURE_2D);
glMatrixMode (f->glcache.matrix);
}
-void glprintfglut (void* font, GLfloat xpos, GLfloat ypos, char *bf)
+void glprintfglut (void* font, GLfloat xpos, GLfloat ypos, GLfloat zpos,char *bf)
{
- glRasterPos3f(xpos,ypos,1);
- print_bitmap_string(font,bf);
-}
-
-void glprintfglutz (void* font, GLfloat xpos, GLfloat ypos, GLfloat zpos, char *bf)
-{
- glRasterPos3f(xpos,ypos,zpos+0.01);
+ glRasterPos3f(xpos,ypos,zpos+0.001);
print_bitmap_string(font,bf);
}
return;
if (font->isglut)
{
- if (usez)
- glprintfglutz (font->glutfont, xpos,ypos,zpos,bf);
- else
- glprintfglut (font->glutfont, xpos,ypos,bf);
+ glprintfglut (font->glutfont, xpos,ypos,zpos,bf);
return;
}
}
void
-glprintf (glCompText* font, GLfloat xpos, GLfloat ypos, GLfloat width, char *bf)
+glprintf (glCompText* font, GLfloat xpos, GLfloat ypos, GLfloat zpos,GLfloat width, char *bf)
+
{
- glPrintf (font, xpos, ypos, 0, width, bf, 0);
+ glPrintf (font, xpos, ypos, zpos, width, bf, 0);
}
void
extern void copy_font(glCompText* targetfont,const glCompText* sourcefont);
extern glCompText* add_font(fontset_t* fontset,char* fontdesc);
extern glCompText* add_glut_font(fontset_t* fontset,void* glutfont);
-extern void glprintf (glCompText*, GLfloat , GLfloat , GLfloat, char*);
-extern void glprintfglut (void* font, GLfloat xpos, GLfloat ypos, char *bf);
-extern void glprintfz (glCompText*, GLfloat , GLfloat , GLfloat, GLfloat, char*);
-extern void glprintfglutz (void* font, GLfloat xpos, GLfloat ypos, GLfloat, char *bf);
+extern void glprintf (glCompText*, GLfloat , GLfloat , GLfloat ,GLfloat, char*);
+
+extern void glprintfglut (void* font, GLfloat xpos, GLfloat ypos, GLfloat zpos,char *bf);
extern glCompText* font_init(void);
extern void fontColor (glCompText* font,float r, float g, float b,float a);
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
glGetDoublev(GL_PROJECTION_MATRIX, projection);
glGetIntegerv(GL_VIEWPORT, viewport);
-
gluProject(-100.0, -100.0, 1.00, modelview, projection, viewport, &wwinX,
&wwinY, &wwinZ);
*Y = (float) posY;
*Z = (float) posZ;
// glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+// printf("==>(%d,%d,%d) -> (%f,%f,%f)\n",x,y,wwinZ,*X,*Y,*Z);
+
return 1;
return ((float) (posXX - posX));
}
-int GetFixedOGLPoslocal(int x, int y, float kts, GLfloat * X, GLfloat * Y,
+/*
+ functions def: returns opengl coordinates of firt hit object by using screen coordinates
+ x,y; 2D screen coordiantes (usually received from mouse events
+ X,Y,Z; pointers to coordinates values to be calculated
+ return value: no return value
+
+
+*/
+
+void to3D(int x, int y, GLfloat *X, GLfloat *Y,GLfloat *Z)
+{
+ int const WIDTH = 40;
+
+ GLint viewport[4];
+ GLdouble modelview[16];
+ GLdouble projection[16];
+ GLfloat winX, winY;
+ GLfloat winZ[1600];
+ GLdouble posX, posY, posZ;
+ int idx;
+ static float comp;
+ glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
+ glGetDoublev(GL_PROJECTION_MATRIX, projection);
+ glGetIntegerv(GL_VIEWPORT, viewport);
+
+ winX = (float) x;
+ winY = (float) viewport[3] - (float) y;
+
+ glReadPixels(x-WIDTH/2.0, (int)winY-WIDTH/2.0, WIDTH, WIDTH, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);
+ comp=-9999999;
+ for (idx=0;idx < WIDTH* WIDTH ; idx ++)
+ {
+ if ((winZ[idx] > comp) && (winZ[idx] < 1))
+ comp = winZ[idx];
+ printf ("%f\n",winZ[idx]);
+ }
+ gluUnProject(winX,winY, comp,modelview, projection, viewport, &posX,
+ &posY, &posZ);
+
+ *X = (GLfloat) posX;
+ *Y = (GLfloat) posY;
+ *Z = (GLfloat) posZ;
+// printf ("%f %f %f\n",*X,*Y,*Z);
+// glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ return ;
+
+
+
+
+
+}
+
+
+int GetFixedOGLPoslocal(int x, int y, GLfloat * X, GLfloat * Y,
GLfloat * Z)
{
GLdouble wwinX;
glGetDoublev(GL_PROJECTION_MATRIX, projection);
glGetIntegerv(GL_VIEWPORT, viewport);
+
+
glColor4f((GLfloat)0,(GLfloat)0,(GLfloat)0,(GLfloat)0.001);
glBegin(GL_POINTS);
glVertex3f(10.00, 10.00, 0.00);
}
#endif
+#include <math.h>
+
+typedef struct {
+ double x, y, z;
+} point;
+
+
+typedef struct {
+ point u, v;
+} line;
+typedef struct {
+ point N; /* normal */
+ double d; /* offset */
+} plane;
+
+
+static point add (point p, point q)
+{
+ p.x += q.x;
+ p.y += q.y;
+ p.z += q.z;
+ return p;
+}
+
+static point sub (point p, point q)
+{
+ p.x -= q.x;
+ p.y -= q.y;
+ p.z -= q.z;
+ return p;
+}
+
+static double dot (point p, point q)
+{
+ return (p.x*p.x + p.y*p.y + p.z*p.z); }
+
+double len (point p)
+{
+ sqrt(dot(p,p));
+}
+
+point scale (double d, point p)
+{
+ p.x *= d;
+ p.y *= d;
+ p.z *= d;
+ return p;
+}
+
+point normalize (point p)
+{
+ double d = len (p);
+
+ return scale (1/d, p);
+}
+
+double dist (point p, point q)
+{
+ return (len (sub (p,q)));
+}
+
+point intersect (line l, plane J)
+{
+ double t = -(J.d + dot(l.u,J.N))/dot(l.v,J.N);
+ return (add(l.u, scale(t,l.v)));
+}
+
+/*
+ * Given a line l determined by two points a and b, and a 3rd point p:
+ */
+double point_to_line_dist (point a, point b, point p) {
+ line l;
+ plane J;
+ point q;
+
+ l.u = a;
+ l.v = normalize (sub (b, a));
+
+ J.N = l.v;
+ J.d = -dot(p, l.v);
+
+ q = intersect (l, J);
+
+ return (dist (p, q));
+}
+
+
+
+typedef struct tagXYZ
+{
+ float X, Y, Z;
+}
+XYZ;
+
+float Magnitude( XYZ *Point1, XYZ *Point2 )
+{
+ XYZ Vector;
+
+ Vector.X = Point2->X - Point1->X;
+ Vector.Y = Point2->Y - Point1->Y;
+ Vector.Z = Point2->Z - Point1->Z;
+
+ return (float)sqrt( Vector.X * Vector.X + Vector.Y * Vector.Y + Vector.Z * Vector.Z );
+}
+
+int DistancePointLine( XYZ *Point, XYZ *LineStart, XYZ *LineEnd, float *Distance )
+{
+ float LineMag;
+ float U;
+ XYZ Intersection;
+
+ LineMag = Magnitude( LineEnd, LineStart );
+
+ U = ( ( ( Point->X - LineStart->X ) * ( LineEnd->X - LineStart->X ) ) +
+ ( ( Point->Y - LineStart->Y ) * ( LineEnd->Y - LineStart->Y ) ) +
+ ( ( Point->Z - LineStart->Z ) * ( LineEnd->Z - LineStart->Z ) ) ) /
+ ( LineMag * LineMag );
+
+ if( U < 0.0f || U > 1.0f )
+ return 0; // closest point does not fall within the line segment
+
+ Intersection.X = LineStart->X + U * ( LineEnd->X - LineStart->X );
+ Intersection.Y = LineStart->Y + U * ( LineEnd->Y - LineStart->Y );
+ Intersection.Z = LineStart->Z + U * ( LineEnd->Z - LineStart->Z );
+
+ *Distance = Magnitude( Point, &Intersection );
+
+ return 1;
+}
+
+/*void main( void )
+{
+ XYZ LineStart, LineEnd, Point;
+ float Distance;
+
+
+ LineStart.X = 50.0f; LineStart.Y = 80.0f; LineStart.Z = 300.0f;
+ LineEnd.X = 50.0f; LineEnd.Y = -800.0f; LineEnd.Z = 1000.0f;
+ Point.X = 20.0f; Point.Y = 1000.0f; Point.Z = 400.0f;
+
+ if( DistancePointLine( &Point, &LineStart, &LineEnd, &Distance ) )
+ printf( "closest point falls within line segment, distance = %f\n", Distance );
+ else
+ printf( "closest point does not fall within line segment\n" );
+
+
+ LineStart.X = 0.0f; LineStart.Y = 0.0f; LineStart.Z = 50.0f;
+ LineEnd.X = 0.0f; LineEnd.Y = 0.0f; LineEnd.Z = -50.0f;
+ Point.X = 10.0f; Point.Y = 50.0f; Point.Z = 10.0f;
+
+ if( DistancePointLine( &Point, &LineStart, &LineEnd, &Distance ) )
+ printf( "closest point falls within line segment, distance = %f\n", Distance );
+ else
+ printf( "closest point does not fall within line segment\n" );
+}*/
#include <GL/glu.h>
+
+
+
int GetFixedOGLPos(int x, int y, float kts, GLfloat * X, GLfloat * Y,
GLfloat * Z);
int GetOGLPosRef(int x, int y, float *X, float *Y, float *Z);
float GetOGLDistance(int l);
-int GetFixedOGLPoslocal(int x, int y, float kts, GLfloat * X, GLfloat * Y,
+int GetFixedOGLPoslocal(int x, int y, GLfloat * X, GLfloat * Y,
GLfloat * Z);
+void to3D(int x, int y, GLfloat * X, GLfloat * Y,GLfloat * Z);
void linear_interplotate (float x1,float y1,float x3,float y3,float x2,float* y2);
-
#endif
gdefs.h: $(top_srcdir)/lib/gvpr/gprdata mkdefs
./mkdefs gdefs.h < $(top_srcdir)/lib/gvpr/gprdata
-EXTRA_DIST = $(man_MANS) $(pdf_DATA) Makefile.old gprdata mkdefs.c gdefs.h trie.c
+EXTRA_DIST = $(man_MANS) $(pdf_DATA) Makefile.old gprdata mkdefs.c gdefs.h trie.c gvprlib.vcproj
DISTCLEANFILES = $(pdf_DATA) gdefs.h mkdefs
#include <string.h>
#include <ctype.h>
#include <setjmp.h>
+#include "getopt.h"
#define DFLT_GPRPATH "."
void SaveBitmapToStream(Bitmap &bitmap, IStream *stream, int format)
{
/* search the encoders for one that matches our device id, then save the bitmap there */
+ GdiplusStartupInput gdiplusStartupInput;
+ ULONG_PTR gdiplusToken;
+ GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
UINT encoderNum;
UINT encoderSize;
GetImageEncodersSize(&encoderNum, &encoderSize);
<Tool
Name="VCLinkerTool"
AdditionalDependencies="libpng.lib gtk-win32-2.0.lib asprintf.lib atk-1.0.lib bz2.lib cairo.lib charset.lib croco-0.6.lib expat.lib expatw.lib glade-2.0.lib fontconfig.lib freetype.lib gdk_pixbuf-2.0.lib gdkglext-win32-1.0.lib gdk-win32-2.0.lib glib-2.0.lib pathplan.lib gmodule-2.0.lib gobject-2.0.lib gsf-1.lib gsf-win32-1.lib gthread-2.0.lib gtkglext-win32-1.0.lib iconv.lib intl.lib jpeg.lib libexpat.lib libexpatw.lib pango-1.0.lib pangocairo-1.0.lib pangoft2-1.0.lib pangowin32-1.0.lib popt.lib rsvg-2.lib tiff.lib xml2.lib libgdkglext-win32-1.0.dll.a libgtkglext-win32-1.0.dll.a glu32.lib opengl32.lib ltdl.lib hs_regex.lib zdll.lib cdt.lib graph.lib gvc.lib circogen.lib neatogen.lib fdpgen.lib patchwork.lib sparse.lib twopigen.lib gd.lib gts.lib Ole32.lib user32.lib gdi32.lib gdiplus.lib $(NOINHERIT)"
+ OutputFile="c:/graphviz-ms/bin/$(ProjectName).dll"
LinkIncremental="2"
AdditionalLibraryDirectories="C:\graphviz-ms\bin;C:\gtk\lib"
ModuleDefinitionFile="gvplugin_gdiplus.def"