module drawrings_module {
#include "ldata.h"
#include <stdio.h>
#include <math.h>
#define RING_GAP {0.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0}
#define W_RING 10.0
#define WCELLS 1000
#define HCELLS 1000
void draw_a_ring(LCell Cell_Now,LLayer Layer_Now,LPoint pt1,LPoint pt2,float R_corner,float W_ring)
{
float Wcells,Hcells;
//float R_corner;
//float W_ring;
float X_base,Y_base;
float x0,y0,x1,y1;
x0 = pt1.x;
y0 = pt1.y;
x1 = pt2.x;
y1 = pt2.y;
Wcells = abs(x1-x0);
Hcells = abs(y1-y0);
X_base = (x1+x0)/2.0;
Y_base = (y1+y0)/2.0;
//up border
LBox_New (Cell_Now, Layer_Now, X_base-(Wcells-2*R_corner)/2.0, Y_base+Hcells/2.0, X_base+(Wcells-2*R_corner)/2.0, Y_base+Hcells/2.0+W_ring);
//left border
LBox_New (Cell_Now, Layer_Now, X_base-Wcells/2.0, Y_base-(Hcells-2*R_corner)/2.0, X_base-Wcells/2.0-W_ring, Y_base+(Hcells-2*R_corner)/2.0);
//right border
LBox_New (Cell_Now, Layer_Now, X_base+Wcells/2.0, Y_base-(Hcells-2*R_corner)/2.0, X_base+Wcells/2.0+W_ring, Y_base+(Hcells-2*R_corner)/2.0);
//bot border
LBox_New (Cell_Now, Layer_Now, X_base-(Wcells-2*R_corner)/2.0, Y_base-Hcells/2.0, X_base+(Wcells-2*R_corner)/2.0, Y_base-Hcells/2.0-W_ring);
//定义圆环
LTorusParams tParams;
// left bottom
tParams.ptCenter = LPoint_Set(X_base-(Wcells-2*R_corner)/2.0,Y_base-(Hcells-2*R_corner)/2.0);
tParams.nInnerRadius = R_corner;
tParams.nOuterRadius = R_corner + W_ring;
tParams.dStartAngle = 180;
tParams.dStopAngle = 270;
LTorus_CreateNew(Cell_Now, Layer_Now, &tParams);
// left up
tParams.ptCenter = LPoint_Set(X_base-(Wcells-2*R_corner)/2.0,Y_base+(Hcells-2*R_corner)/2.0);
tParams.dStartAngle = 90;
tParams.dStopAngle = 180;
LTorus_CreateNew(Cell_Now, Layer_Now, &tParams);
// right up
tParams.ptCenter = LPoint_Set(X_base+(Wcells-2*R_corner)/2.0,Y_base+(Hcells-2*R_corner)/2.0);
tParams.dStartAngle = 0;
tParams.dStopAngle = 90;
LTorus_CreateNew(Cell_Now, Layer_Now, &tParams);
// right bottom
tParams.ptCenter = LPoint_Set(X_base+(Wcells-2*R_corner)/2.0,Y_base-(Hcells-2*R_corner)/2.0);
tParams.dStartAngle = 270;
tParams.dStopAngle = 0;
LTorus_CreateNew(Cell_Now, Layer_Now, &tParams);
}
void drawrings()
{
LCell Cell_Now = LCell_GetVisible ();
LFile File_Now = LCell_GetFile( Cell_Now );
LGrid Grid_Now;
LLayer Layer_Now = LLayer_GetCurrent(File_Now);
if(LCell_GetLock(Cell_Now)!=0)
{
LDialog_AlertBox("Error:The Cell is Locked! Unlock it First");
return;
}
LFile_GetGrid(File_Now, &Grid_Now);
long locator_scale = Grid_Now.locator_scaling;
float R_corner,W_ring;
LPoint pt1,pt2;
float x0,y0,x1,y1;
R_corner = 100*locator_scale;
x0 = 0;
x1 = 1000*locator_scale;
y0 = 0;
y1 = 1000*locator_scale;
//W_ring = 13*locator_scale;
float Wcells,Hcells;
Wcells = 1000*locator_scale;
Hcells = 1000*locator_scale;
float w,h,r;
float gap_list[] = RING_GAP;
w = Wcells;
h = Hcells;
r = R_corner;
int k;
float gap;
for (k=0;k<sizeof(gap_list)/sizeof(gap_list[0]);k++)
{
gap = gap_list[k]*locator_scale;
W_ring = (13.0-gap)*locator_scale;
w = w + 2*gap;
h = h + 2*gap;
r = r + gap;
pt1 = LPoint_Set(-w/2.0,-h/2.0);
pt2 = LPoint_Set(w/2.0,h/2.0);
draw_a_ring(Cell_Now,Layer_Now,pt1,pt2,r,W_ring);
r = r + W_ring;
w = w + W_ring*2;
h = h + W_ring*2;
}
//运行完成,刷新显示
LDisplay_Refresh();
}
void cnt_main ( void ) {
LMacro_BindToHotKey ( KEY_F1, "drawrings_gaopeng", "drawrings" );
}
}
cnt_main();
最新发布