📄 movecopy.cpp
字号:
{
if(nodelist[i].IsSelected==TRUE){
nodelist[i].x+=dx;
nodelist[i].y+=dy;
}
}
EnforcePSLG();
return;
}
if(EditAction==1)
{
for(i=0;i<linelist.GetSize();i++)
{
if(linelist[i].IsSelected==TRUE){
nodelist[linelist[i].n0].IsSelected=TRUE;
nodelist[linelist[i].n1].IsSelected=TRUE;
}
}
TranslateMove(dx,dy,0);
return;
}
if(EditAction==2)
{
for(i=0;i<blocklist.GetSize();i++)
{
if(blocklist[i].IsSelected==TRUE){
blocklist[i].x+=dx;
blocklist[i].y+=dy;
}
}
EnforcePSLG();
return;
}
if(EditAction==3)
{
for(i=0;i<arclist.GetSize();i++)
{
if(arclist[i].IsSelected==TRUE){
nodelist[arclist[i].n0].IsSelected=TRUE;
nodelist[arclist[i].n1].IsSelected=TRUE;
}
}
TranslateMove(dx,dy,0);
return;
}
if(EditAction==4)
{
for(i=0;i<linelist.GetSize();i++)
{
if(linelist[i].IsSelected==TRUE){
nodelist[linelist[i].n0].IsSelected=TRUE;
nodelist[linelist[i].n1].IsSelected=TRUE;
}
}
for(i=0;i<arclist.GetSize();i++)
{
if(arclist[i].IsSelected==TRUE){
nodelist[arclist[i].n0].IsSelected=TRUE;
nodelist[arclist[i].n1].IsSelected=TRUE;
}
}
for(i=0;i<nodelist.GetSize();i++)
{
if(nodelist[i].IsSelected==TRUE){
nodelist[i].x+=dx;
nodelist[i].y+=dy;
}
}
for(i=0;i<blocklist.GetSize();i++)
{
if(blocklist[i].IsSelected==TRUE){
blocklist[i].x+=dx;
blocklist[i].y+=dy;
}
}
EnforcePSLG();
return;
}
}
void CFemmeDoc::RotateCopy(CComplex c, double dt, int ncopies, int EditAction)
{
int i,j,k,nc;
CComplex x,z;
double t;
for(nc=0;nc<ncopies;nc++){
t=((double) (nc+1))*dt;
z=exp(I*t*PI/180);
if(EditAction==0)
{
CNode node;
k=nodelist.GetSize();
for(i=0;i<k;i++)
{
if(nodelist[i].IsSelected==TRUE){
x.Set(nodelist[i].x,nodelist[i].y);
node=nodelist[i];
x=(x-c)*z+c;
node.x=x.re;
node.y=x.im;
node.IsSelected=FALSE;
nodelist.Add(node);
}
}
}
if(EditAction==1)
{
CSegment segm;
CNode n0,n1;
k=linelist.GetSize();
for(i=0;i<k;i++)
{
if(linelist[i].IsSelected==TRUE){
n0=nodelist[linelist[i].n0];
n1=nodelist[linelist[i].n1];
x.Set(n0.x,n0.y);
x=(x-c)*z+c;
n0.x=x.re;
n0.y=x.im;
x.Set(n1.x,n1.y);
x=(x-c)*z+c;
n1.x=x.re;
n1.y=x.im;
j=nodelist.GetSize();
segm=linelist[i];
segm.n0=j; segm.n1=j+1;
segm.IsSelected=FALSE;
nodelist.Add(n0);
nodelist.Add(n1);
linelist.Add(segm);
}
}
}
if(EditAction==2)
{
CBlockLabel lbl;
k=blocklist.GetSize();
for(i=0;i<k;i++)
{
if(blocklist[i].IsSelected==TRUE){
x.Set(blocklist[i].x,blocklist[i].y);
lbl=blocklist[i];
x=(x-c)*z+c;
lbl.x=x.re;
lbl.y=x.im;
lbl.IsSelected=FALSE;
for(j=0;j<blockproplist.GetSize();j++)
if(blockproplist[j].BlockName==blocklist[i].BlockType)
if(blockproplist[j].H_c!=0) lbl.MagDir+=t;
blocklist.Add(lbl);
}
}
}
if(EditAction==3)
{
CArcSegment asegm;
CNode n0,n1;
k=arclist.GetSize();
for(i=0;i<k;i++)
{
if(arclist[i].IsSelected==TRUE){
n0=nodelist[arclist[i].n0];
n1=nodelist[arclist[i].n1];
x.Set(n0.x,n0.y);
x=(x-c)*z+c;
n0.x=x.re;
n0.y=x.im;
x.Set(n1.x,n1.y);
x=(x-c)*z+c;
n1.x=x.re;
n1.y=x.im;
j=nodelist.GetSize();
asegm=arclist[i];
asegm.n0=j; asegm.n1=j+1;
asegm.IsSelected=FALSE;
nodelist.Add(n0);
nodelist.Add(n1);
arclist.Add(asegm);
}
}
}
if(EditAction==4){
// copy selected nodes;
CNode node;
k=nodelist.GetSize();
for(i=0;i<k;i++)
{
if(nodelist[i].IsSelected==TRUE){
x.Set(nodelist[i].x,nodelist[i].y);
node=nodelist[i];
x=(x-c)*z+c;
node.x=x.re;
node.y=x.im;
node.IsSelected=FALSE;
nodelist.Add(node);
}
}
// copy selected segments;
CSegment segm;
CNode n0,n1;
k=linelist.GetSize();
for(i=0;i<k;i++)
{
if(linelist[i].IsSelected==TRUE){
n0=nodelist[linelist[i].n0];
n1=nodelist[linelist[i].n1];
x.Set(n0.x,n0.y);
x=(x-c)*z+c;
n0.x=x.re;
n0.y=x.im;
n0.IsSelected=0;
x.Set(n1.x,n1.y);
x=(x-c)*z+c;
n1.x=x.re;
n1.y=x.im;
n1.IsSelected=0;
j=nodelist.GetSize();
segm=linelist[i];
segm.n0=j; segm.n1=j+1;
segm.IsSelected=FALSE;
nodelist.Add(n0);
nodelist.Add(n1);
linelist.Add(segm);
}
}
// copy selected arc segments
CArcSegment asegm;
k=arclist.GetSize();
for(i=0;i<k;i++)
{
if(arclist[i].IsSelected==TRUE){
n0=nodelist[arclist[i].n0];
n1=nodelist[arclist[i].n1];
x.Set(n0.x,n0.y);
x=(x-c)*z+c;
n0.x=x.re;
n0.y=x.im;
n0.IsSelected=0;
x.Set(n1.x,n1.y);
x=(x-c)*z+c;
n1.x=x.re;
n1.y=x.im;
n1.IsSelected=0;
j=nodelist.GetSize();
asegm=arclist[i];
asegm.n0=j; asegm.n1=j+1;
asegm.IsSelected=FALSE;
nodelist.Add(n0);
nodelist.Add(n1);
arclist.Add(asegm);
}
}
// copy selected block labels
CBlockLabel lbl;
k=blocklist.GetSize();
for(i=0;i<k;i++)
{
if(blocklist[i].IsSelected==TRUE){
x.Set(blocklist[i].x,blocklist[i].y);
lbl=blocklist[i];
x=(x-c)*z+c;
lbl.x=x.re;
lbl.y=x.im;
lbl.IsSelected=FALSE;
for(j=0;j<blockproplist.GetSize();j++)
if(blockproplist[j].BlockName==blocklist[i].BlockType)
if(blockproplist[j].H_c!=0) lbl.MagDir+=t;
blocklist.Add(lbl);
}
}
}
}
EnforcePSLG();
return;
}
void CFemmeDoc::TranslateCopy(double incx, double incy, int ncopies, int EditAction)
{
int i,j,k,nc;
double dx,dy;
for(nc=0;nc<ncopies;nc++){
dx=((double)(nc+1))*incx;
dy=((double)(nc+1))*incy;
if(EditAction==0)
{
CNode node;
k=nodelist.GetSize();
for(i=0;i<k;i++)
{
if(nodelist[i].IsSelected==TRUE){
node=nodelist[i];
node.x+=dx;
node.y+=dy;
node.IsSelected=FALSE;
nodelist.Add(node);
}
}
}
if(EditAction==1)
{
CSegment segm;
CNode n0,n1;
k=linelist.GetSize();
for(i=0;i<k;i++)
{
if(linelist[i].IsSelected==TRUE){
n0=nodelist[linelist[i].n0];
n1=nodelist[linelist[i].n1];
n0.x+=dx;
n0.y+=dy;
n1.x+=dx;
n1.y+=dy;
j=nodelist.GetSize();
segm=linelist[i];
segm.n0=j; segm.n1=j+1;
segm.IsSelected=FALSE;
nodelist.Add(n0);
nodelist.Add(n1);
linelist.Add(segm);
}
}
}
if(EditAction==2)
{
CBlockLabel lbl;
k=blocklist.GetSize();
for(i=0;i<k;i++)
{
if(blocklist[i].IsSelected==TRUE){
lbl=blocklist[i];
lbl.x+=dx;
lbl.y+=dy;
lbl.IsSelected=FALSE;
blocklist.Add(lbl);
}
}
}
if(EditAction==3)
{
CArcSegment asegm;
CNode n0,n1;
k=arclist.GetSize();
for(i=0;i<k;i++)
{
if(arclist[i].IsSelected==TRUE){
n0=nodelist[arclist[i].n0];
n1=nodelist[arclist[i].n1];
n0.x+=dx;
n0.y+=dy;
n0.IsSelected=FALSE;
n1.x+=dx;
n1.y+=dy;
n1.IsSelected=FALSE;
j=nodelist.GetSize();
asegm=arclist[i];
asegm.n0=j; asegm.n1=j+1;
asegm.IsSelected=FALSE;
nodelist.Add(n0);
nodelist.Add(n1);
arclist.Add(asegm);
}
}
}
if(EditAction==4)
{
CNode node;
k=nodelist.GetSize();
for(i=0;i<k;i++)
{
if(nodelist[i].IsSelected==TRUE){
node=nodelist[i];
node.x+=dx;
node.y+=dy;
node.IsSelected=FALSE;
nodelist.Add(node);
}
}
CSegment segm;
CNode n0,n1;
k=linelist.GetSize();
for(i=0;i<k;i++)
{
if(linelist[i].IsSelected==TRUE){
n0=nodelist[linelist[i].n0];
n1=nodelist[linelist[i].n1];
n0.x+=dx;
n0.y+=dy;
n0.IsSelected=FALSE;
n1.x+=dx;
n1.y+=dy;
n1.IsSelected=FALSE;
j=nodelist.GetSize();
segm=linelist[i];
segm.n0=j; segm.n1=j+1;
segm.IsSelected=FALSE;
nodelist.Add(n0);
nodelist.Add(n1);
linelist.Add(segm);
}
}
CBlockLabel lbl;
k=blocklist.GetSize();
for(i=0;i<k;i++)
{
if(blocklist[i].IsSelected==TRUE){
lbl=blocklist[i];
lbl.x+=dx;
lbl.y+=dy;
lbl.IsSelected=FALSE;
blocklist.Add(lbl);
}
}
CArcSegment asegm;
k=arclist.GetSize();
for(i=0;i<k;i++)
{
if(arclist[i].IsSelected==TRUE){
n0=nodelist[arclist[i].n0];
n1=nodelist[arclist[i].n1];
n0.x+=dx;
n0.y+=dy;
n0.IsSelected=FALSE;
n1.x+=dx;
n1.y+=dy;
n1.IsSelected=FALSE;
j=nodelist.GetSize();
asegm=arclist[i];
asegm.n0=j; asegm.n1=j+1;
asegm.IsSelected=FALSE;
nodelist.Add(n0);
nodelist.Add(n1);
arclist.Add(asegm);
}
}
}
}
EnforcePSLG();
return;
}
void CFemmeDoc::EnforcePSLG()
{
EnforcePSLG(0);
}
void CFemmeDoc::EnforcePSLG(double tol)
{
/* need to enforce:
1) no duplicate point;
2) no intersections between line segments, lines and arcs, or arcs;
3) no duplicate block labels;
4) no overlapping lines or arcs.
can do this by cleaning out the various lists, and rebuilding them
using the ``add'' functions that ensure that things come out right.
*/
CArray< CNode, CNode&> newnodelist;
CArray< CSegment, CSegment&> newlinelist;
CArray< CArcSegment, CArcSegment&> newarclist;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -