Subversion Repositories wimsdev

Rev

Rev 8102 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 8102 Rev 12473
Line 17... Line 17...
17
 
17
 
18
#include "flydraw.h"
18
#include "flydraw.h"
19
 
19
 
20
void vimg_init (void)
20
void vimg_init (void)
21
{
21
{
22
    double x1,x2,y1,y2,t;
22
  double x1,x2,y1,y2,t;
23
    char *p, *p1, namebuf[2048];
23
  char *p, *p1, namebuf[2048];
24
    vimgf=NULL;
24
  vimgf=NULL;
25
    if(vimgfilename[0]==0) vimgf=stdout;
25
  if(vimgfilename[0]==0) vimgf=stdout;
26
    else {
26
  else {
27
      p=getenv("flydraw_filebase");
27
    p=getenv("flydraw_filebase");
28
      if(p!=NULL && *p!=0) { /* secured execution */
28
    if(p!=NULL && *p!=0) { /* secured execution */
29
          if(vimgfilename[0]=='/' || strstr(vimgfilename,"..")!=NULL) goto init_fail;
29
      if(vimgfilename[0]=='/' || strstr(vimgfilename,"..")!=NULL) goto init_fail;
30
          for(p1=vimgfilename;*p1;p1++)
30
      for(p1=vimgfilename;*p1;p1++)
31
            if(!isalnum(*p1) && !isspace(*p1) && strchr("~_-/.",*p1)==NULL) goto init_fail;
31
        if(!isalnum(*p1) && !isspace(*p1) && strchr("~_-/.",*p1)==NULL) goto init_fail;
32
          p1=getenv("w_wims_session");
32
      p1=getenv("w_wims_session");
33
          if(p1!=NULL && *p1!=0) {
33
      if(p1!=NULL && *p1!=0) {
34
            snprintf(namebuf,sizeof(namebuf),"../s2/%s/%s",p1,vimgfilename);
34
        snprintf(namebuf,sizeof(namebuf),"../s2/%s/%s",p1,vimgfilename);
35
            vimgf=fopen(namebuf,"w");
35
        vimgf=fopen(namebuf,"w");
36
          }
-
 
37
          else goto init_fail;
-
 
38
      }
36
      }
39
      else vimgf=fopen(vimgfilename,"w");
37
      else goto init_fail;
40
    }
38
    }
-
 
39
    else vimgf=fopen(vimgfilename,"w");
-
 
40
  }
41
    if(vimgf==NULL) {
41
  if(vimgf==NULL) {
42
init_fail: vimg_enable=0; return;
42
    init_fail: vimg_enable=0; return;
43
    }
43
  }
44
    x1=xstart; y1=ystart;
44
  x1=xstart; y1=ystart;
45
    x2=sizex/xscale+xstart;
45
  x2=sizex/xscale+xstart;
46
    y2=sizey/yscale+ystart;
46
  y2=sizey/yscale+ystart;
47
    if(x2<x1) {t=x1;x1=x2;x2=t;}
47
  if(x2<x1) {t=x1;x1=x2;x2=t;}
48
    if(y2<y1) {t=y1;y1=y2;y2=t;}
48
  if(y2<y1) {t=y1;y1=y2;y2=t;}
49
    fprintf(vimgf,"999\nDXF created by Flydraw\n\
49
  fprintf(vimgf,"999\nDXF created by Flydraw\n\
50
  0\nSECTION\n  2\nHEADER\n\
50
  0\nSECTION\n  2\nHEADER\n\
51
  9\n$ACADVER\n  1\nAC1006\n\
51
  9\n$ACADVER\n  1\nAC1006\n\
52
  9\n$INSBASE\n  10\n0.0\n  20\n0.0\n  30\n0.0\n\
52
  9\n$INSBASE\n  10\n0.0\n  20\n0.0\n  30\n0.0\n\
53
  9\n$EXTMIN\n  10\n%f\n  20\n%f\n\
53
  9\n$EXTMIN\n  10\n%f\n  20\n%f\n\
54
  9\n$EXTMAX\n  10\n%f\n  20\n%f\n\
54
  9\n$EXTMAX\n  10\n%f\n  20\n%f\n\
Line 67... Line 67...
67
  0\nENDSEC\n\
67
  0\nENDSEC\n\
68
  0\nSECTION\n  2\nBLOCKS\n  0\nENDSEC\n\
68
  0\nSECTION\n  2\nBLOCKS\n  0\nENDSEC\n\
69
  0\nSECTION\n  2\nENTITIES\n",
69
  0\nSECTION\n  2\nENTITIES\n",
70
     x1,y1,x2,y2, x1,y1,x2,y2);
70
     x1,y1,x2,y2, x1,y1,x2,y2);
71
    vimg_ready=1;
71
    vimg_ready=1;
72
}
72
}
73
 
73
 
74
void vimg_close (void)
74
void vimg_close (void)
75
{
75
{
76
    if(vimgf==NULL || vimg_ready==0) return;
76
  if(vimgf==NULL || vimg_ready==0) return;
77
    fprintf(vimgf,"  0\nENDSEC  \n  0\nEOF\n");
77
  fprintf(vimgf,"  0\nENDSEC  \n  0\nEOF\n");
78
    fclose(vimgf); vimg_ready=vimg_enable=0; vimgf=NULL;
78
  fclose(vimgf); vimg_ready=vimg_enable=0; vimgf=NULL;
79
}
79
}
80
 
80
 
81
void vimg_arc (double x0,double y0, double rx, double ry,double a1, double a2)
81
void vimg_arc (double x0,double y0, double rx, double ry,double a1, double a2)
82
{
82
{
83
    double mx,my,ratio;
83
  double mx,my,ratio;
84
    if(rx==ry) {
84
  if(rx==ry) {
85
      fprintf(vimgf,"  0\nARC\n  8\n1\n  10\n%f\n  20\n%f\n  40\n%f\n\
85
    fprintf(vimgf,"  0\nARC\n  8\n1\n  10\n%f\n  20\n%f\n  40\n%f\n\
86
  50\n%f\n51\n%f\n",x0,y0,rx,a1,a2);
86
  50\n%f\n51\n%f\n",x0,y0,rx,a1,a2);
87
      return;
87
    return;
88
    }
88
  }
89
    if(rx>ry) {mx=rx;my=0;ratio=ry/rx;}
89
  if(rx>ry) {mx=rx;my=0;ratio=ry/rx;}
90
    else {mx=0;my=ry;ratio=rx/ry;}
90
  else {mx=0;my=ry;ratio=rx/ry;}
91
    fprintf(vimgf,"  0\nELLIPSE\n  10\n%f\n  20\n%f\n\
91
  fprintf(vimgf,"  0\nELLIPSE\n  10\n%f\n  20\n%f\n\
92
  11\n%f\n  21\n%f\n  40\n%f\n  41\n%f\n  42\n%f\n",
92
  11\n%f\n  21\n%f\n  40\n%f\n  41\n%f\n  42\n%f\n",
93
          x0,y0,mx,my,ratio,
93
          x0,y0,mx,my,ratio,
94
          a1*3.14159265/180,a2*3.14159265/180);
94
          a1*3.14159265/180,a2*3.14159265/180);
95
 
95
 
96
}
96
}
97
 
97
 
98
void vimg_ellipse (double x0, double y0, double rx, double ry)
98
void vimg_ellipse (double x0, double y0, double rx, double ry)
99
{
99
{
100
    if(rx==ry) {
100
  if(rx==ry) {
101
      fprintf(vimgf,"  0\nCIRCLE\n  8\n1\n  10\n%f\n  20\n%f\n\
101
    fprintf(vimgf,"  0\nCIRCLE\n  8\n1\n  10\n%f\n  20\n%f\n\
102
  40\n%f\n",x0,y0,rx);
102
    40\n%f\n",x0,y0,rx);
103
      return;
103
    return;
104
    }
104
  }
105
    else vimg_arc (x0,y0,rx,ry,0,360);
105
  else vimg_arc (x0,y0,rx,ry,0,360);
106
}
106
}
107
 
107
 
108
void vimg_line (double x1,double y1,double x2,double y2)
108
void vimg_line (double x1,double y1,double x2,double y2)
109
{
109
{
110
    fprintf(vimgf,"  0\nLINE\n  8\n1\n10\n%f\n  20\n%f\n  11\n%f\n  21\n%f\n",
110
  fprintf(vimgf,"  0\nLINE\n  8\n1\n10\n%f\n  20\n%f\n  11\n%f\n  21\n%f\n",
111
         x1,y1,x2,y2);
111
       x1,y1,x2,y2);
112
}
112
}
113
 
113
 
114
void vimg_polyline (double xy[], int cnt, int closed)
114
void vimg_polyline (double xy[], int cnt, int closed)
115
{
115
{
116
    int i;
116
  int i;
117
    fprintf(vimgf,"  0\nPOLYLINE\n  70\n%d\n",closed);
117
  fprintf(vimgf,"  0\nPOLYLINE\n  70\n%d\n",closed);
118
    for(i=0;i<2*cnt;i++,i++) {
118
  for(i=0;i<2*cnt;i++,i++) {
119
      fprintf(vimgf,"  0\nVERTEX\n  8\n1\n  10\n%f\n  20\n%f\n",
119
    fprintf(vimgf,"  0\nVERTEX\n  8\n1\n  10\n%f\n  20\n%f\n",
120
            xy[i],xy[i+1]);
120
          xy[i],xy[i+1]);
121
    }
121
  }
122
    fprintf(vimgf,"  0\nSEQEND\n");
122
  fprintf(vimgf,"  0\nSEQEND\n");
123
}
123
}
124
 
124
 
125
void vimg_rect (double x1, double y1, double x2, double y2)
125
void vimg_rect (double x1, double y1, double x2, double y2)
126
{
126
{
127
    double d[8];
127
  double d[8];
128
    d[0]=x1; d[1]=y1; d[2]=x1; d[3]=y2;
128
  d[0]=x1; d[1]=y1; d[2]=x1; d[3]=y2;
129
    d[4]=x2; d[5]=y2; d[6]=x2; d[7]=y1;
129
  d[4]=x2; d[5]=y2; d[6]=x2; d[7]=y1;
130
    vimg_polyline (d,4,1);
130
  vimg_polyline (d,4,1);
131
}
131
}
132
 
132
 
133
void vimg_plotstart (void)
133
void vimg_plotstart (void)
134
{
134
{
135
    fprintf(vimgf,"  0\nPOLYLINE\n  8\n1\n  70\n0\n");
135
  fprintf(vimgf,"  0\nPOLYLINE\n  8\n1\n  70\n0\n");
136
}
136
}
137
 
137
 
138
void vimg_plot1 (double x, double y)
138
void vimg_plot1 (double x, double y)
139
{
139
{
140
    fprintf(vimgf,"  0\nVERTEX\n  8\n1\n  10\n%f\n  20\n%f\n", x,y);
140
  fprintf(vimgf,"  0\nVERTEX\n  8\n1\n  10\n%f\n  20\n%f\n", x,y);
141
}
141
}
142
 
142
 
143
void vimg_plotend (void)
143
void vimg_plotend (void)
144
{
144
{
145
    fprintf(vimgf,"  0\nSEQEND\n");
145
  fprintf(vimgf,"  0\nSEQEND\n");
146
}
146
}
147
 
-