Files
envi-code/SourceCode/Code2026/tg_shs/shs_kerncmd/tchzh.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

6771 lines
132 KiB
C++

// (C) Copyright 1996 by Autodesk, Inc.
#include "stdafx.h"
#include <windows.h>
#include <string.h>
#include <adslib.h>
#include <dbjig.h>
#include <dbents.h>
#include <aced.h>
#include <geassign.h>
#include <acgi.h>
#include <math.h>
#include <rxregsvc.h>
#include "actrans.h"
// 主要问题:
// 1. 墙层有多个, 层名不固定
// 2. 轴线层名称不固定
static BOOL g_nProcessMore=FALSE;
void tch0(double nVal);
static void diatzh(void);
static void diatzha(void);
static void xuwall(void);
static void tzha(void);
static void strlin(void);
static void ul112l(ads_real x01,ads_real y01,ads_real x02,ads_real y02,ads_real b0);
static void ssdelenpp0(void);
static void qmmm(int itdo);
static void tchmtxt(TCHAR txtins[40]);
static void ulin0(void);
static void ulmend2(void);
static void ulin2(ads_real xmen2,ads_real ymen2);
static void ulin3(void);
static void ulin3a(ads_real x0,ads_real y0);
static void ulin3dl(void);
static void ulin4(void);
static void ulin4a(void);
static void ulin4b(void);
static void ulin4ab(void);
static void ulin5(void);
static void ulin5a(int i0);
static void ulin0dd(int i0);
static void ulin0dda(void);
static void uldote(ads_real xp1,ads_real yp1,ads_real xp2,ads_real yp2);
static void wlinTDOTE(ads_point p1,ads_point p2);
static void tzhb(void);
static void qmmma(void);
static void ulendd(void);
static void uldda(int it0);
static void ulddb(int it0,ads_real xp1,ads_real yp1,ads_real xp2,ads_real yp2);
static void ulddc(int it0,ads_real xp1,ads_real yp1,ads_real xp2,ads_real yp2);
static void ulwa00(void);
static void ularc(void);
static void strarcd(void);
static void strarcda(void);
static void qyxpoint(void);
static void ularc3(void);
static void ularc3a(ads_real x0,ads_real y0);
static void ularc4(int i0);
static void ularcdote(void);
static void warc(ads_point p1,ads_real q1,ads_real q2,ads_real rr);
static void qlajd(void);
static void ulddarc(int it0);
static void ulddarcc(int it0);
static void ulenddzf(void);
static void ulinzf(void);
static void ularczf(void);
static void timekey2(void);
static void rucs(void);
static void gworld(void);
static void ulmcdg(void);
static void addentd(void);
static void tzhatd(void);
static void tzhatdc(void);
static void wlinTDWA(ads_real x1,ads_real y1,ads_real x2,ads_real y2);
static void warcTDWA(ads_real x1,ads_real y1,ads_real q1,ads_real q2,ads_real rr);
static void ulin6dd(void);
static void xwbmin(int i);
static void ulin01(void);
static void yyyq(void);
static void yyyqa(void);
static void yyyqb(void);
static void ulyyyqb(void);
static void ulrrxxyy(ads_real x01,ads_real y01,ads_real x02,ads_real y02,ads_real tchyy,ads_real dm);
static ads_real whou=500.0,wwjul=0.0;
static ads_real pi314=3.141592653589793;
static ads_real ds111=1.0,dswa500=500.0;
static ads_real jsjdu=0.001;
static ads_real whouz,whouy;
static ads_real xdot,ydot;
static ads_real qucs=0.0,dsdote=0.0;
static ads_real xx0,yy0,mmrr;
static int itch=0;
static int iul112l=0;
static int itwall=0;
static int icdp3=0,inntm=0,icolo=1,itmen=0;
static int iarry=1;
static int ientd=0,itdote=0;
static ads_real xka1,yka1,xka2,yka2,karr,kaq1,kaq2;
static ads_real xwb1,ywb1,xwb2,ywb2;
static ads_real xdo1,ydo1,xdo2,ydo2,xdz1,ydz1,xdz2,ydz2;
static ads_real dm,xmen0,ymen0,xmen1,ymen1,xmen2,ymen2;
static ads_real mank,manam,qhcjcou;
static ads_real qhcjc;
static ads_real timekey1=0.0,timekey0;
static ads_point porg;
static ads_real arry[302][8];
static ads_real ddar[4][8];
static ads_real arrysa[18][8];
static ads_name ensspp;
static ads_name ensspp0;
static ads_name endd0;
static ads_name entdwa;
static ads_name entch;
//static char htbuf[256]=_T("");
//static char zflay[80]=_T("");
//static char zfsy[80]=_T("");
// 计算直线的角度(以角度衡量)
void qjadu(ads_real xx1,ads_real yy1,ads_real xx2,ads_real yy2)
{
ads_point p1,p2;
p1[0]=xx1; p1[1]=yy1; p1[2]=0;
p2[0]=xx2; p2[1]=yy2; p2[2]=0;
qhcjc=0;
qhcjc=ads_angle(p1,p2);
qhcjc=qhcjc*180/pi314;
}
void hlin(ads_real x1,ads_real y1,ads_real x2,ads_real y2,int i)
{
ads_point p01,p02;
p01[0]=x1; p01[1]=y1; p01[2]=0;
p02[0]=x2; p02[1]=y2; p02[2]=0;
ads_grdraw(p01,p02,i,0);
}
// 屏幕缩放
void ul112l(ads_real x01,ads_real y01,ads_real x02,ads_real y02,ads_real b0)
{
return;
}
class LineDupEntry: public XLine{
public:
Entity m_ent;
char m_bDel;
public:
LineDupEntry(Entity &e): XLine(e), m_ent(e), m_bDel(0){}
int IsDeleted() { return m_bDel; }
int operator !() { return (GetLength()<_DIST_SNAP); }
};
static void ProcessLineDup()
{ /* module 1.1.3 */
PickSet ssAll(SS_FREE);
if (ssAll.Get(_T("X"), NULL, NULL, RBList(RTDXF0, _T("LINE"), 8, _T("TDOTE"), NULL))!=RTNORM)
return;
int len = (int)ssAll.Length();
DList<LineDupEntry> lstLines;
for(int i=0; i<len; i++) {
Entity ent = ssAll[(long)i];
LineDupEntry *pLine=new LineDupEntry(ent);
if (!(*pLine)) {
ent.Delete();
delete pLine;
} else
lstLines.Append(pLine);
}
len = lstLines.Length();
for(i=0; i<len; i++) {
LineDupEntry &line1 = *lstLines[i];
if (line1.IsDeleted()) continue;
for(int j=0; j<len; j++) { // origenal is from 0;
LineDupEntry &line2 = *lstLines[j];
if (j==i) continue;
if (line2.IsDeleted()) continue; // has been del
XVector3D vt1=line1.StartPoint()-line1.EndPoint(),
vt2=line2.StartPoint()-line2.EndPoint();
ads_real len1=vt1.Length(),
len2=vt2.Length();
if (len1) vt1.Scale(1.0/len1);
if (len2) vt2.Scale(1.0/len2);
double nSweepAng=acos(vt1&vt2);
if (nSweepAng<_angSnap || fabs(PI-nSweepAng)<_angSnap) { // same direction, 旧的算法没有考虑夹角精度
int flg=(line2.StartPoint()&line1);
int flg1=(line2.EndPoint()&line1);
if ((flg==PR_ONPT1 && flg1==PR_ONPT2) ||
(flg==PR_ONPT2 && flg1==PR_ONPT1)) {
line2.m_bDel=TRUE;
} else if (flg==PR_INSIDE) { /* p3 within line1*/
line2.m_bDel=TRUE;
XPoint ptOnLine1;
line2.EndPoint().Project(&line1, ptOnLine1);
if ((ptOnLine1&line1)==PR_EXTEND) { /* p4 on extension line1 */
if (ads_distance(line1.StartPoint(), line2.EndPoint())<
ads_distance(line1.EndPoint(), line2.EndPoint()))
line1.StartPoint() = line2.EndPoint();
else line1.EndPoint() = line2.EndPoint();
}
} else if (flg1==PR_INSIDE) {
// line2(EndPoint()) is partial inside line1
line2.m_bDel=TRUE;
XPoint ptOnLine1;
line2.StartPoint().Project(&line1, ptOnLine1);
if ((ptOnLine1&line1)==PR_EXTEND) {
if (ads_distance(line1.StartPoint(),line2.StartPoint())<
ads_distance(line1.EndPoint(),line2.StartPoint()))
line1.StartPoint() = line2.StartPoint();
else line1.EndPoint() = line2.StartPoint();
}
} else if ((line1.StartPoint()&line2)==PR_INSIDE &&
(line1.EndPoint()&line2)==PR_INSIDE) { //line1 is inside line2
line1.StartPoint()=line2.StartPoint(); // replace line1
line1.EndPoint()=line2.EndPoint();
Exchange(line1.m_ent, line2.m_ent);
line2.m_bDel=TRUE;
}
}
} /* end for j */
} /* end for i */
for(i=0; i<len; i++) {
LineDupEntry &ln=*lstLines[i];
if (ln.IsDeleted()) {
//ssAll -= ln.m_ent;
ln.m_ent.Delete();
} else {
ln.Modify(&ln.m_ent);
}
}
}
void tch0(double nVal)
{
TCHAR *appname=_T("TDOTE");
ads_regapp(appname);
whou=nVal+0.001;
dswa500=whou;
arxAssureLayer(_T("TDOTE"), LAYSTAT_THAW|LAYSTAT_ON|LAYSTAT_UNLOCK);
arxAssureLayer(_T("TDWALL"), LAYSTAT_THAW|LAYSTAT_ON|LAYSTAT_UNLOCK);
applyCurDwgLayerTableChanges();
//ads_getstring(0, _T("\nPause:"), XString());
ddar[1][5]=0;
ddar[2][5]=0;
xuwall();
ProcessLineDup();
}
void xuwall(void)
{
struct resbuf *rb;
int rc;
Adesk::Int32 len;
//modifed by whl on 060323
//rb=ads_buildlist(RTDXF0,_T("LINE,ARC"), 8, _T("WALL*"), NULL);
XString sLayer;
sLayer<<_T("WALL*,")<<LAY_WALL;
rb=ads_buildlist(RTDXF0,_T("LINE,ARC"), 8, (const TCHAR*)sLayer, NULL);
rc = ads_ssget(_T("X"),NULL,NULL,rb,ensspp);
ads_relrb(rb);
if (rc!=RTNORM)
return;
rc=ads_sslength(ensspp, &len);
if (rc!=RTNORM) {
ads_printf(_T("\n不能建立选择."));
ads_ssfree(ensspp);
return;
}
PickSet ssWall(ensspp);
XPoint pt1, pt2;
ssWall.GetExtend(pt1, pt2);
AssureOnScreen(pt1, pt2);
icolo=1;
ads_ssadd(NULL,NULL,endd0); //中线
ads_ssadd(NULL,NULL,entdwa); // 已转化的墙线
ientd=0;
// 首先转换>WHOU 直线和圆弧线
tzha();
// 再转换<WHOU 直线墙线
tzhb();
ientd=1;
// 延伸 TDOTE 线
actrTransactionManager->flushGraphics();
//ads_getstring(0,_T("\nPause"), XString());
ulendd();
// 消除重复 TDOTE 线
//ulenddzf();
// 已转换的墙线放到TDWALL 层上
tzhatdc();
ads_ssfree(entdwa);
ads_ssfree(endd0);
ads_ssfree(ensspp);
}
// ensspp0 -- 一段墙的选择集
void addentd(void)
{ Adesk::Int32 len,i;
ads_name en;
// TCHAR zf[40];
if (ads_sslength(ensspp0,&len)==RTNORM) goto cc0;
return;
cc0:if (len==0) return;
i=0;
bbb:ads_ssname(ensspp0,i,en);
ads_ssadd(en,entdwa,entdwa);
i=i+1;
if (i<len) goto bbb;
}
// 从总的选择集中扣除一段墙的选择集
void ssdelenpp0(void)
{
Adesk::Int32 len,i;
ads_name en;
if (ads_sslength(ensspp0,&len)==RTNORM) goto cc0;
return;
cc0:if (len==0) return;
i=0;
bbb:ads_ssname(ensspp0,i,en);
ads_ssdel(en,ensspp);
i=i+1;
if (i<len) goto bbb;
}
// 没有考虑图层的不同
void strlin(void)
{
struct resbuf *ebup,*rb;
ads_point p01,p02;
ads_name ss1,en;
int typi,itn,itdo,it1,it2;
Adesk::Int32 i,len;
ads_real xjc1,yjc1,x1,y1,x2,y2,q,dx,dy,d1,d2,dm;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T("");
ads_point p1,p2,p3,p4,pp;
p1[2]=0; p2[2]=0;
p3[2]=0; p4[2]=0;
itn=0;
sta0:itn=itn+1;
if (itn>300) return;
// p1[0]=xka1; p1[1]=yka1;
// p2[0]=xka2; p2[1]=yka2;
qjadu(xka1,yka1,xka2,yka2);
q=(qhcjc-180)*pi314/180;
p1[0]=xka1+cos(q);
p1[1]=yka1+sin(q);
q=qhcjc*pi314/180;
p2[0]=xka2+cos(q);
p2[1]=yka2+sin(q);
itdo=0;
p01[0]=xka1-10*ds111; p01[1]=yka1-10*ds111; p01[2]=0;
p02[0]=xka1+10*ds111; p02[1]=yka1+10*ds111; p02[2]=0;
ul112l(p01[0],p01[1],p02[0],p02[1],ds111);
//modified by whl on 060323
//RBList mask(RTDXF0, _T("LINE"), 8, _T("WALL*"), NULL);
XString sLayer;
sLayer<<_T("WALL*,")<<LAY_WALL;
RBList mask(RTDXF0, _T("LINE"), 8, (const TCHAR*)sLayer, NULL);
if (ads_ssget(_T("C"),p01,p02, mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto bbb;
return;
bbb:ads_ssname(ss1,i,en);
ebup=ads_entget(en);
if (ebup==NULL) goto mbb1;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==11) {
x2=rb->resval.rpoint[0];
y2=rb->resval.rpoint[1]; }
}
ads_relrb(ebup);
ads_relrb(rb);
//判断图层
//if ((txtnam8[0]==_T('W'))&&(txtnam8[1]==_T('A'))&&(txtnam8[2]==_T('L'))&&(txtnam8[3]==_T('L')))
// goto bbwa;
/// goto mbb1;
//bbwa:if ((txtdxf0[0]==_T('L'))&&(txtdxf0[1]==_T('I'))&&(txtdxf0[2]==_T('N'))&&(txtdxf0[3]==_T('E'))) goto lin;
// goto mbb1;
// lin:
dx=x1-x2; dy=y1-y2;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) goto mbb1;
dm=d1;
d1=800;
d2=1600;
qjadu(p1[0],p1[1],p2[0],p2[1]);
q=(qhcjc+90)*pi314/180;
p4[0]=x1+800*cos(q);
p4[1]=y1+800*sin(q);
q=(qhcjc-90)*pi314/180;
p3[0]=x1+800*cos(q);
p3[1]=y1+800*sin(q);
if (ads_inters(p1,p2,p3,p4,0,pp)==RTNORM) {
dx=pp[0]-x1; dy=pp[1]-y1;
d1=sqrt(dx*dx+dy*dy);
}
it1=0;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) it1=1;
q=(qhcjc+90)*pi314/180;
p4[0]=x2+800*cos(q);
p4[1]=y2+800*sin(q);
q=(qhcjc-90)*pi314/180;
p3[0]=x2+800*cos(q);
p3[1]=y2+800*sin(q);
if (ads_inters(p1,p2,p3,p4,0,pp)==RTNORM) {
dx=pp[0]-x2; dy=pp[1]-y2;
d2=sqrt(dx*dx+dy*dy);
}
it2=0;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) it2=1;
if ((d1<ds111)&&(d2<ds111)) {
if ((it1==0)&&(it2==0)) goto mbb1;
dx=xka1-x1; dy=yka1-y1;
d1=sqrt(dx*dx+dy*dy);
dx=xka1-x2; dy=yka1-y2;
d2=sqrt(dx*dx+dy*dy);
xjc1=x2; yjc1=y2;
if (d2<d1) { xjc1=x1; yjc1=y1; }
q=(qhcjc-180)*pi314/180;
x1=xka1+80*cos(q);
y1=yka1+80*sin(q);
q=qhcjc*pi314/180;
x2=xka1+80*cos(q);
y2=yka1+80*sin(q);
dx=x1-xjc1; dy=y1-yjc1;
d1=sqrt(dx*dx+dy*dy);
dx=x2-xjc1; dy=y2-yjc1;
d2=sqrt(dx*dx+dy*dy);
if (d2<d1) goto mbb1;
xka1=xjc1; yka1=yjc1;
ads_ssadd(en,ensspp0,ensspp0);
ads_ssfree(ss1);
goto sta0; }
if ((d1<ds111)&&(d2>10*ds111)&&(dm<dswa500)||(d1<ds111)&&(d2>10*ds111)&&(dm<=whou)) {
xdo1=x1; ydo1=y1;
xdo2=x2; ydo2=y2;
itdo=1;
ads_name_set(en,entch);
goto mbb1; }
if ((d1>10*ds111)&&(d2<ds111)&&(dm<dswa500)||(d1>10*ds111)&&(d2<ds111)&&(dm<=whou)) {
xdo1=x2; ydo1=y2;
xdo2=x1; ydo2=y1;
itdo=1;
ads_name_set(en,entch);
goto mbb1; }
if ((d1<ds111)&&(d2>10*ds111)&&(dm>dswa500)||(d1<ds111)&&(d2>10*ds111)&&(dm>whou)) {
xdo1=x1; ydo1=y1;
xdo2=x2; ydo2=y2;
itdo=2;
ads_name_set(en,entch);
goto mbb1; }
if ((d1>10*ds111)&&(d2<ds111)&&(dm>dswa500)||(d1>10*ds111)&&(d2<ds111)&&(dm>whou)) {
xdo1=x2; ydo1=y2;
xdo2=x1; ydo2=y1;
itdo=2;
ads_name_set(en,entch);
goto mbb1; }
mbb1:i=i+1;
if (i<len) goto bbb;
ads_ssfree(ss1);
if (itdo==0) {
return; }
icdp3=0;
qmmm(itdo);
if (icdp3==1) goto sta0;
}
void qmmm(int itdo)
{
struct resbuf apps,*ebup,*rb;
ads_name ss1,en;
int typi,it;
Adesk::Int32 i,len;
ads_real x1,y1,x2,y2,dx,dy,d1,d2,gs1,gs2,gs3,dhh;
ads_real r41,r42,q1,bs,q,xjc1,yjc1,xjc2,yjc2;
ads_point p01,p02;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T(""),txtins[40]=_T(""),buf[40]=_T("");
ads_point p1,p2,p3,p4,pp;
p1[2]=0; p2[2]=0;
p3[2]=0; p4[2]=0;
// ads_printf(_T("mmmm"));
// xb1=xdo1; yb1=ydo1;
// xb2=xdo2; yb2=ydo2;
x1=xdo1; x2=xdo2;
if (x2<x1) { x1=xdo2; x2=xdo1;}
y1=ydo1; y2=ydo2;
if (y2<y1) { y1=ydo2; y2=ydo1; }
dx=100*ds111;
p01[0]=x1-dx; p01[1]=y1-dx; p01[2]=0;
p02[0]=x2+dx; p02[1]=y2+dx; p02[2]=0;
ul112l(p01[0],p01[1],p02[0],p02[1],0);
// 搜索门窗
//modified by whl on 060323
//RBList mask(RTDXF0, _T("INSERT"), 8, LAY_WIN, NULL);
XString sLayer;
sLayer<<_T("WINDOW,")<<LAY_WIN;
RBList mask(RTDXF0, _T("INSERT"), 8, (const TCHAR*)sLayer, NULL);
if (ads_ssget(_T("C"),p01,p02,mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto strbb;
return;
strbb:ads_ssname(ss1,i,en);
apps.restype=RTSTR;
_tcscpy(buf,_T("WTHICK"));
apps.resval.rstring=buf;
apps.rbnext=NULL;
ebup=ads_entgetx(en,&apps);
if (ebup==NULL) goto mbb1;
it=0; gs1=0; gs2=0; gs3=0;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==2) _tcscpy(txtins,rb->resval.rstring);
if (typi==41) r41=rb->resval.rreal;
if (typi==42) r42=rb->resval.rreal;
if (typi==50) q1=rb->resval.rreal;
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==1040) {
it=it+1;
if (it==1) gs1=rb->resval.rreal;
if (it==2) gs2=rb->resval.rreal;
if (it==3) gs3=rb->resval.rreal;
}
}
ads_relrb(ebup);
ads_relrb(rb);
//if (_tcsicmp(txtnam8, LAY_WINDOW)==0) goto bbwa;
// goto mbb1;
//bbwa: if (_tcsicmp(txtdxf0, _T("INSERT"))==0) goto bbin;
// goto mbb1;
//bbin:
mank=0; inntm=0; manam=0;
// ads_printf(_T("\ngs1=%f,gs2=%f,gs3=%f"),gs1,gs2,gs3);
if (gs1<=0) gs1=400;
if (mank==0) tchmtxt(txtins);
bs=r41;
if (bs<0) bs=-bs;
mank=bs*mank;
if (mank>10*ds111) {
p3[0]=x1; p3[1]=y1; p3[2]=0;
qhcjc=q1*180/pi314;
if (r41<0) qhcjc=qhcjc+180;
q=(qhcjc+180)*pi314/180;
dx=ds111+mank/2;
p3[0]=x1+dx*cos(q);
p3[1]=y1+dx*sin(q);
p3[2]=0;
q=qhcjc*pi314/180;
p4[0]=x1+dx*cos(q);
p4[1]=y1+dx*sin(q);
p4[2]=0;
xdz1=p3[0]; ydz1=p3[1];
xdz2=p4[0]; ydz2=p4[1];
dx=mank/2;
x2=x1+dx*cos(q);
y2=y1+dx*sin(q);
q=(qhcjc+180)*pi314/180;
x1=x1+dx*cos(q);
y1=y1+dx*sin(q);
p1[0]=xdo1; p1[1]=ydo1; p1[2]=0;
p2[0]=xdo2; p2[1]=ydo2; p2[2]=0;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) goto qjdmm;
goto mbb1;
qjdmm:dx=xdo1-xdo2; dy=ydo1-ydo2;
d1=sqrt(dx*dx+dy*dy);
dhh=d1;
if ((dhh>400)&&(dhh>whou)) dhh=whou;
dx=pp[0]-xka1; dy=pp[1]-yka1;
d1=sqrt(dx*dx+dy*dy);
if (d1>dhh) goto mbb1;
p1[0]=xka1; p1[1]=yka1;
p2[0]=xka2; p2[1]=yka2;
d1=800;
d2=1600;
qjadu(p1[0],p1[1],p2[0],p2[1]);
q=(qhcjc+90)*pi314/180;
p4[0]=x1+800*cos(q);
p4[1]=y1+800*sin(q);
q=(qhcjc-90)*pi314/180;
p3[0]=x1+800*cos(q);
p3[1]=y1+800*sin(q);
if (ads_inters(p1,p2,p3,p4,0,pp)==RTNORM) {
dx=pp[0]-x1; dy=pp[1]-y1;
d1=sqrt(dx*dx+dy*dy);
xjc1=pp[0]; yjc1=pp[1];
}
q=(qhcjc+90)*pi314/180;
p4[0]=x2+800*cos(q);
p4[1]=y2+800*sin(q);
q=(qhcjc-90)*pi314/180;
p3[0]=x2+800*cos(q);
p3[1]=y2+800*sin(q);
if (ads_inters(p1,p2,p3,p4,0,pp)==RTNORM) {
dx=pp[0]-x2; dy=pp[1]-y2;
d2=sqrt(dx*dx+dy*dy);
xjc2=pp[0]; yjc2=pp[1];
}
if ((d1<dhh)&&(d2<dhh)) {
dx=fabs(d1-d2);
if (dx>ds111) goto mbb1;
dx=xka1-x1; dy=yka1-y1;
d1=sqrt(dx*dx+dy*dy);
dx=xka1-x2; dy=yka1-y2;
d2=sqrt(dx*dx+dy*dy);
// ads_printf(_T("\nxjc1=%f,yjc1=%f,xjc2=%f,yjc2=%f"),xjc1,yjc1,xjc2,yjc2);
if (d2>d1) { xjc1=xjc2; yjc1=yjc2; }
q=(qhcjc-180)*pi314/180;
x1=xka1+80*cos(q); y1=yka1+80*sin(q);
q=qhcjc*pi314/180;
x2=xka1+80*cos(q); y2=yka1+80*sin(q);
dx=x1-xjc1; dy=y1-yjc1;
d1=sqrt(dx*dx+dy*dy);
dx=x2-xjc1; dy=y2-yjc1;
d2=sqrt(dx*dx+dy*dy);
if (d2<d1) goto mbb1;
xka1=xjc1; yka1=yjc1;
icdp3=1;
// if (itdo==1) ads_ssadd(entch,ensspp0,ensspp0);
if (itdo==2) {
qjadu(xdo1,ydo1,xdo2,ydo2);
q=qhcjc*pi314/180;
xdo2=xdo1+gs1*cos(q);
ydo2=ydo1+gs1*sin(q);
}
ads_ssfree(ss1);
ulmend2();
return;
}
}
mbb1:i=i+1;
if (i<len) goto strbb;
ads_ssfree(ss1);
}
void ulmend2(void)
{
struct resbuf *ebup,*rb;
ads_point p01,p02;
ads_name ss1,en;
int typi,img;
Adesk::Int32 i,len;
ads_real x1,y1,x2,y2,dx,dy,d1,d2,q1,dq,ds0;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T("");
ads_point p1,p2,p3,p4,pp;
p1[2]=0; p2[2]=0;
p3[2]=0; p4[2]=0;
// hlin(xka1,yka1,xka2,yka2,5);
// ads_getstring(5,NULL,txtdxf0);
img=0;
dx=xka1-xdz1; dy=yka1-ydz1;
d1=sqrt(dx*dx+dy*dy);
dx=xka1-xdz2; dy=yka1-ydz2;
d2=sqrt(dx*dx+dy*dy);
if (d1>d2) {
dx=xdz2; xdz2=xdz1; xdz1=dx;
dx=ydz2; ydz2=ydz1; ydz1=dx; }
dx=xdo1-xdo2; dy=ydo1-ydo2;
ds0=sqrt(dx*dx+dy*dy);
p01[0]=xdz1-10; p01[1]=ydz1-10; p01[2]=0;
p02[0]=xdz1+10; p02[1]=ydz1+10; p02[2]=0;
ul112l(p01[0],p01[1],p02[0],p02[1],ds111);
//modified by whl on 060323
//RBList mask(RTDXF0, _T("LINE"), 8, _T("WALL*"), NULL);
XString sLayer;
sLayer<<_T("WALL*,")<<LAY_WALL;
RBList mask(RTDXF0, _T("LINE"), 8,(const TCHAR*)sLayer, NULL);
if (ads_ssget(_T("C"),p01,p02,mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto bbb;
return;
bbb:ads_ssname(ss1,i,en);
ebup=ads_entget(en);
if (ebup==NULL) goto mbb1;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==11) {
x2=rb->resval.rpoint[0];
y2=rb->resval.rpoint[1]; }
}
ads_relrb(ebup);
ads_relrb(rb);
// 墙层
// if ((txtnam8[0]==_T('W'))&&(txtnam8[1]==_T('A'))&&(txtnam8[2]==_T('L'))&&(txtnam8[3]==_T('L'))) goto bbwa;
// goto mbb1;
//bbwa:
//if ((txtdxf0[0]==_T('L'))&&(txtdxf0[1]==_T('I'))&&(txtdxf0[2]==_T('N'))&&(txtdxf0[3]==_T('E'))) goto lin;
// goto mbb1;
//lin:
dx=x1-x2; dy=y1-y2;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) goto mbb1;
dx=fabs(ds0-d1);
if (dx>0.5*ds0) goto mbb1;
dm=dx;
p1[0]=xdz1; p1[1]=ydz1;
p2[0]=xdz2; p2[1]=ydz2;
p3[0]=x1; p3[1]=y1;
p4[0]=x2; p4[1]=y2;
qjadu(p1[0],p1[1],p2[0],p2[1]);
q1=qhcjc;
qjadu(p3[0],p3[1],p4[0],p4[1]);
dq=q1-qhcjc;
if (dq<0) dq=-dq;
qq1:if (dq>269) { dq=dq-180; goto qq1; }
if ((dq<85)||(dq>95)) goto mbb1;
if (ads_inters(p1,p2,p3,p4,0,pp)==RTNORM) {
// hlin(x1,y1,x2,y2,7);
// hlin(xdo1,ydo1,xdo2,ydo2,5);
if (dm<ds111) {
dx=xka1-x1; dy=yka1-y1;
d1=sqrt(dx*dx+dy*dy);
dx=xka1-x2; dy=yka1-y2;
d2=sqrt(dx*dx+dy*dy);
if (d1>d2) {
dx=x2; x2=x1; x1=dx;
dx=y2; y2=y1; y1=dx; }
if (itmen==0) {
xmen1=x1; ymen1=x2;
xmen2=x2; ymen2=y2;
xmen0=xdo2; ymen0=ydo2;
itmen=1; }
img=1;
}
// ads_ssadd(en,ensspp0,ensspp0);
goto enss0; }
mbb1:i=i+1;
if (i<len) goto bbb;
enss0:ads_ssfree(ss1);
if (itmen==0) {
xmen1=xdo1; ymen1=xdo2;
xmen2=xdo2; ymen2=ydo2;
xmen0=xdo2; ymen0=ydo2;
itmen=1; }
if (img==0) ulmcdg();
}
void ulmcdg(void)
{
struct resbuf apps,*ebup,*rb;
ads_name ss1,en;
int typi,it,itn;
Adesk::Int32 i,len;
ads_real x1,y1,x2,y2,dx,dy,d1,d2,gs1,gs2,gs3,dhh;
ads_real r41,r42,q1,bs,q,xjc1,yjc1,xjc2,yjc2;
ads_real xm1,ym1,xm2,ym2,xd1,yd1,xd2,yd2;
ads_point p01,p02;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T(""),txtins[40]=_T(""),buf[40]=_T("");
ads_point p1,p2,p3,p4,pp;
p1[2]=0; p2[2]=0;
p3[2]=0; p4[2]=0;
// hlin(xka1,yka1,xka1+1000,yka1+1000,7);
// ads_getstring(5,NULL,txtdxf0);
//if (xka1!=1) return;
itn=0;
nn0:itn=itn+1;
if (itn>10) return;
qjadu(xka2,yka2,xka1,yka1);
q=(qhcjc+90)*pi314/180;
dx=dswa500;
if (dx<0.8*whou/2) dx=0.8*whou;
xm1=xka1+dx*cos(q);
ym1=yka1+dx*sin(q);
xm2=xka1-dx*cos(q);
ym2=yka1-dx*sin(q);
q=(qhcjc-180)*pi314/180;
dx=40;
xd1=xka1+dx*cos(q);
yd1=yka1+dx*sin(q);
q=qhcjc*pi314/180;
dx=40000.0;
xd2=xka1+dx*cos(q);
yd2=yka1+dx*sin(q);
x1=xka1; y1=yka1;
dx=180*ds111;
p01[0]=x1-dx; p01[1]=y1-dx; p01[2]=0;
p02[0]=x1+dx; p02[1]=y1+dx; p02[2]=0;
ul112l(p01[0],p01[1],p02[0],p02[1],0);
//modified by whl on 060323
//RBList mask(RTDXF0, _T("INSERT"), 8, LAY_WIN, NULL);
XString sLayer;
sLayer<<_T("WINDOW,")<<LAY_WIN;
RBList mask(RTDXF0, _T("INSERT"), 8, (const TCHAR*)sLayer, NULL);
if (ads_ssget(_T("C"),p01,p02,mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto strbb;
return;
strbb:ads_ssname(ss1,i,en);
apps.restype=RTSTR;
_tcscpy(buf,_T("WTHICK"));
apps.resval.rstring=buf;
apps.rbnext=NULL;
ebup=ads_entgetx(en,&apps);
if (ebup==NULL) goto mbb1;
it=0; gs1=0; gs2=0; gs3=0;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==2) _tcscpy(txtins,rb->resval.rstring);
if (typi==41) r41=rb->resval.rreal;
if (typi==42) r42=rb->resval.rreal;
if (typi==50) q1=rb->resval.rreal;
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==1040) {
it=it+1;
if (it==1) gs1=rb->resval.rreal;
if (it==2) gs2=rb->resval.rreal;
if (it==3) gs3=rb->resval.rreal;
}
}
ads_relrb(ebup);
ads_relrb(rb);
//if ((txtnam8[0]==_T('W'))&&(txtnam8[1]==_T('I'))&&(txtnam8[2]==_T('N'))&&(txtnam8[3]==_T('D'))&&(txtnam8[4]==_T('O'))&&(txtnam8[5]==_T('W'))) goto bbwa;
// goto mbb1;
//bbwa: if ((txtdxf0[0]==_T('I'))&&(txtdxf0[1]==_T('N'))&&(txtdxf0[2]==_T('S'))&&(txtdxf0[3]==_T('E'))&&(txtdxf0[4]==_T('R'))&&(txtdxf0[5]==_T('T'))) goto bbin;
// goto mbb1;
//bbin:
mank=0; inntm=0; manam=0;
// ads_printf(_T("\ngs1=%f,gs2=%f,gs3=%f"),gs1,gs2,gs3);
if (gs1<=0) gs1=400;
if (mank==0) tchmtxt(txtins);
bs=r41;
if (bs<0) bs=-bs;
mank=bs*mank;
if (mank>10*ds111) {
p3[0]=x1; p3[1]=y1; p3[2]=0;
qhcjc=q1*180/pi314;
if (r41<0) qhcjc=qhcjc+180;
q=(qhcjc+180)*pi314/180;
dx=20*ds111+mank/2;
p3[0]=x1+dx*cos(q);
p3[1]=y1+dx*sin(q);
p3[2]=0;
q=qhcjc*pi314/180;
p4[0]=x1+dx*cos(q);
p4[1]=y1+dx*sin(q);
p4[2]=0;
// xdz1=p3[0]; ydz1=p3[1];
// xdz2=p4[0]; ydz2=p4[1];
dx=mank/2;
x2=x1+dx*cos(q);
y2=y1+dx*sin(q);
q=(qhcjc+180)*pi314/180;
x1=x1+dx*cos(q);
y1=y1+dx*sin(q);
p1[0]=xm1; p1[1]=ym1; p1[2]=0;
p2[0]=xm2; p2[1]=ym2; p2[2]=0;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) goto qjdmm;
goto mbb1;
qjdmm:p1[0]=xd1; p1[1]=yd1;
p2[0]=xd2; p2[1]=yd2;
d1=800;
d2=1600;
qjadu(p1[0],p1[1],p2[0],p2[1]);
q=(qhcjc+90)*pi314/180;
p4[0]=x1+800*cos(q);
p4[1]=y1+800*sin(q);
q=(qhcjc-90)*pi314/180;
p3[0]=x1+800*cos(q);
p3[1]=y1+800*sin(q);
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) {
dx=pp[0]-x1; dy=pp[1]-y1;
d1=sqrt(dx*dx+dy*dy);
xjc1=pp[0]; yjc1=pp[1];
goto mm2;
}
goto mbb1;
mm2: q=(qhcjc+90)*pi314/180;
p4[0]=x2+800*cos(q);
p4[1]=y2+800*sin(q);
q=(qhcjc-90)*pi314/180;
p3[0]=x2+800*cos(q);
p3[1]=y2+800*sin(q);
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) {
dx=pp[0]-x2; dy=pp[1]-y2;
d2=sqrt(dx*dx+dy*dy);
xjc2=pp[0]; yjc2=pp[1];
goto mm3;
}
goto mbb1;
mm3:dhh=dswa500;
if (dhh<0.8*whou) dhh=0.8*whou;
if ((d1<dhh)&&(d2<dhh)) {
dx=fabs(d1-d2);
if (dx>ds111) goto mbb1;
dx=xka1-x1; dy=yka1-y1;
d1=sqrt(dx*dx+dy*dy);
dx=xka1-x2; dy=yka1-y2;
d2=sqrt(dx*dx+dy*dy);
// ads_printf(_T("\nxjc1=%f,yjc1=%f,xjc2=%f,yjc2=%f"),xjc1,yjc1,xjc2,yjc2);
if (d2>d1) { xjc1=xjc2; yjc1=yjc2; }
xka1=xjc1; yka1=yjc1;
icdp3=1;
// hlin(xd1,yd1,xd2,yd2,7);
// hlin(xka1,yka1,xka2,yka2,2);
// ads_getstring(5,NULL,txtdxf0);
ads_ssfree(ss1);
goto nn0;
}
}
mbb1:i=i+1;
if (i<len) goto strbb;
ads_ssfree(ss1);
}
void tchmtxt(TCHAR txtins[40])
{
// Zyu modify on 100722,支持64位
//int j,i,ii;
INT_PTR j,i,ii;
ads_real mk[14][2];
for (i=1;i<12;i++) mk[i][1]=0;
ii=0; manam=0;
j=_tcslen(txtins);
if (j<1) goto end;
mk[1][1]=1; mk[2][1]=1; ii=3; manam=1;
/*
if ((j>=4)&&(txtins[0]==_T('_'))&&(txtins[1]==_T('D'))&&(txtins[2]==_T('B'))&&(txtins[3]==_T('L'))&&(txtins[4]==_T('K'))) {
mk[1][1]=1; mk[2][1]=1; ii=3; manam=1; }
if ((j>=4)&&(txtins[0]==_T('_'))&&(txtins[1]==_T('W'))&&(txtins[2]==_T('B'))&&(txtins[3]==_T('L'))&&(txtins[4]==_T('K'))) {
mk[1][1]=1; mk[2][1]=1; ii=3; manam=1; }
if ((j>=4)&&(txtins[0]==_T('_'))&&(txtins[1]==_T('G'))&&(txtins[2]==_T('C'))&&(txtins[3]==_T('B'))&&(txtins[4]==_T('L'))&&(txtins[5]==_T('K'))) {
mk[1][1]=1; mk[2][1]=1; ii=3; manam=1; }
if ((j>=3)&&(txtins[0]==_T('M'))&&(txtins[1]==_T('_'))) {
mk[1][1]=1; mk[2][1]=1; ii=3; manam=1; }
*/
end:mank=mk[2][1];
}
void ulin2(ads_real xmen2,ads_real ymen2)
{
struct resbuf *ebup,*rb;
ads_point p01,p02;
ads_name ss1,en;
int typi;
Adesk::Int32 i,len;
ads_real x1,y1,x2,y2,dx,dy,d1,q1,dq;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T("");
p01[0]=xmen2-10; p01[1]=ymen2-10; p01[2]=0;
p02[0]=xmen2+10; p02[1]=ymen2+10; p02[2]=0;
ul112l(p01[0],p01[1],p02[0],p02[1],ds111);
//modified by whl on 060323
//RBList mask(RTDXF0, _T("LINE"), 8, _T("WALL*"), NULL);
XString sLayer;
sLayer<<_T("WALL*,")<<LAY_WALL;
RBList mask(RTDXF0, _T("LINE"), 8, (const TCHAR*)sLayer, NULL);
if (ads_ssget(_T("C"),p01,p02,mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto bbb;
return;
bbb:ads_ssname(ss1,i,en);
ebup=ads_entget(en);
if (ebup==NULL) goto mbb1;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==11) {
x2=rb->resval.rpoint[0];
y2=rb->resval.rpoint[1]; }
}
ads_relrb(ebup);
ads_relrb(rb);
// if ((txtnam8[0]==_T('W'))&&(txtnam8[1]==_T('A'))&&(txtnam8[2]==_T('L'))&&(txtnam8[3]==_T('L'))) goto bbwa;
// goto mbb1;
//bbwa:if ((txtdxf0[0]==_T('L'))&&(txtdxf0[1]==_T('I'))&&(txtdxf0[2]==_T('N'))&&(txtdxf0[3]==_T('E'))) goto lin;
// goto mbb1;
//lin:
dx=x1-x2; dy=y1-y2;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) goto mbb1;
qjadu(xka1,yka1,xka2,yka2);
q1=qhcjc;
qjadu(x1,y1,x2,y2);
dq=q1-qhcjc;
if (dq<0) dq=-dq;
qq1:if (dq>179) { dq=dq-180; goto qq1; }
if (dq<1) {
itmen=2;
xka1=x1;
yka1=y1;
xka2=x2;
yka2=y2;
ads_ssadd(en,ensspp0,ensspp0);
goto enss0;
}
mbb1:i=i+1;
if (i<len) goto bbb;
enss0:ads_ssfree(ss1);
}
void ulin3(void)
{ int i,id;
ads_real q,dx,dy,d1;
ads_real dd3[5][3];
dx=xka1-xka2;
dy=yka1-yka2;
d1=sqrt(dx*dx+dy*dy);
qjadu(xka1,yka1,xka2,yka2);
dd3[1][1]=(xka1+xka2)/2;
dd3[1][2]=(yka1+yka2)/2;
// id=2;
// if ((d1<1000)||(d1<2*whou)) goto aa0;
q=qhcjc*pi314/180;
dd3[2][1]=xka1+d1*cos(q)/4;
dd3[2][2]=yka1+d1*sin(q)/4;
dd3[3][1]=xka1+3*d1*cos(q)/4;
dd3[3][2]=yka1+3*d1*sin(q)/4;
id=4;
i=1;
aa1:ulin3a(dd3[i][1],dd3[i][2]);
if (itmen==3) return;
i=i+1;
if (i<id) goto aa1;
}
void ulin3dl(void)
{ int i,id;
ads_real q,dx,dy,d1;
ads_real dd3[7][3];
dx=xka1-xka2;
dy=yka1-yka2;
d1=sqrt(dx*dx+dy*dy);
qjadu(xka1,yka1,xka2,yka2);
dd3[1][1]=(xka1+xka2)/2;
dd3[1][2]=(yka1+yka2)/2;
id=2;
if ((d1<1000)||(d1<2*whou)) goto aa0;
q=qhcjc*pi314/180;
dd3[2][1]=xka1+d1*cos(q)/4;
dd3[2][2]=yka1+d1*sin(q)/4;
dd3[3][1]=xka1+3*d1*cos(q)/4;
dd3[3][2]=yka1+3*d1*sin(q)/4;
// dx=20;
// dd3[4][1]=xka1+dx*cos(q);
// dd3[4][2]=yka1+dx*sin(q);
// dd3[5][1]=xka1+(d1-dx)*cos(q);
// dd3[5][2]=yka1+(d1-dx)*sin(q);
id=4;
aa0: i=1;
aa1:ulin3a(dd3[i][1],dd3[i][2]);
if (itmen==3) return;
i=i+1;
if (i<id) goto aa1;
// i=1;
// ulin3adl(dd3[i][1],dd3[i][2]);
}
void ulin3a(ads_real x0,ads_real y0)
{
struct resbuf *ebup,*rb;
ads_name ss1,en,en3,en1;
int typi;
Adesk::Int32 i,len;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T("");
ads_real q0,q,dx,dy,d1,x1,y1,x2,y2,dq;
ads_real ds1,ds2;
ads_real x11,y11,x12,y12,x21,y21,x22,y22;
ads_real ds3,ds4;
ads_real x31,y31,x32,y32,x41,y41,x42,y42;
ads_point p1,p2,p3,p4,pp;
ads_point p01,p02;
p1[2]=0; p2[2]=0;
p3[2]=0; p4[2]=0;
x11=0; y11=0;
x12=0; y12=0;
x31=0; y31=0;
x32=0; y32=0;
qjadu(xka1,yka1,xka2,yka2);
q0=qhcjc;
q=(qhcjc+90)*pi314/180;
dx=2000;
ds1=2000;
ds2=2000;
p1[0]=x0; p1[1]=y0;
p2[0]=x0+dx*cos(q); p2[1]=y0+dx*sin(q);
p01[0]=p1[0]; p01[1]=p1[1]; p01[2]=0;
p02[0]=p2[0]; p02[1]=p2[1]; p02[2]=0;
ul112l(p1[0],p1[1],p2[0],p2[1],ds111);
//modified by whl on 060323
//RBList mask(RTDXF0, _T("LINE"), 8, _T("WALL*"), NULL);
XString sLayer;
sLayer<<_T("WALL*,")<<LAY_WALL;
RBList mask(RTDXF0, _T("LINE"), 8, (const TCHAR*)sLayer, NULL);
if (ads_ssget(_T("C"),p01,p02,mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto bbb;
return;
bbb:ads_ssname(ss1,i,en);
ebup=ads_entget(en);
if (ebup==NULL) goto bb1;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==11) {
x2=rb->resval.rpoint[0];
y2=rb->resval.rpoint[1]; }
}
ads_relrb(ebup);
ads_relrb(rb);
//if ((txtnam8[0]==_T('W'))&&(txtnam8[1]==_T('A'))&&(txtnam8[2]==_T('L'))&&(txtnam8[3]==_T('L'))) goto bbwa;
// goto bb1;
//bbwa:if ((txtdxf0[0]==_T('L'))&&(txtdxf0[1]==_T('I'))&&(txtdxf0[2]==_T('N'))&&(txtdxf0[3]==_T('E'))) goto lin;
// goto bb1;
//lin:
dx=x1-x2; dy=y1-y2;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) goto bb1;
qjadu(x1,y1,x2,y2);
dq=q0-qhcjc;
if (dq<0) dq=-dq;
qq1:if (dq>179) { dq=dq-180; goto qq1; }
if (dq>1) goto bb1;
p3[0]=x1; p3[1]=y1;
p4[0]=x2; p4[1]=y2;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) goto lin2;
goto bb1;
lin2:dx=pp[0]-x0; dy=pp[1]-y0;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) goto bb1;
if (d1<ds1) {
if (fabs(ds1-2000)>1.0E-6) {
ds2=ds1;
x21=x11; y21=y11;
x22=x12; y22=y12;
}
ds1=d1;
x11=x1; y11=y1;
x12=x2; y12=y2;
ads_name_set(en,en1);
goto bb1;
}
if (d1<ds2) {
ds2=d1;
x21=x1; y21=y1;
x22=x2; y22=y2;
}
bb1:i=i+1;
if (i<len) goto bbb;
ads_ssfree(ss1);
q=(q0-90)*pi314/180;
dx=2000;
ds3=2000;
ds4=2000;
p1[0]=x0; p1[1]=y0;
p2[0]=x0+dx*cos(q); p2[1]=y0+dx*sin(q);
p01[0]=p1[0]; p01[1]=p1[1]; p01[2]=0;
p02[0]=p2[0]; p02[1]=p2[1]; p02[2]=0;
ul112l(p1[0],p1[1],p2[0],p2[1],ds111);
if (ads_ssget(_T("C"),p01,p02,mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto ccc;
return;
ccc:ads_ssname(ss1,i,en);
ebup=ads_entget(en);
if (ebup==NULL) goto cc1;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==11) {
x2=rb->resval.rpoint[0];
y2=rb->resval.rpoint[1]; }
}
ads_relrb(ebup);
ads_relrb(rb);
// if ((txtnam8[0]==_T('W'))&&(txtnam8[1]==_T('A'))&&(txtnam8[2]==_T('L'))&&(txtnam8[3]==_T('L'))) goto ccwa;
// goto cc1;
//ccwa:if ((txtdxf0[0]==_T('L'))&&(txtdxf0[1]==_T('I'))&&(txtdxf0[2]==_T('N'))&&(txtdxf0[3]==_T('E'))) goto cclin;
// goto cc1;
//cclin:
dx=x1-x2; dy=y1-y2;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) goto cc1;
qjadu(x1,y1,x2,y2);
dq=q0-qhcjc;
if (dq<0) dq=-dq;
ccqq1:if (dq>179) { dq=dq-180; goto ccqq1; }
if (dq>1) goto cc1;
p3[0]=x1; p3[1]=y1;
p4[0]=x2; p4[1]=y2;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) goto cclin2;
goto cc1;
cclin2:dx=pp[0]-x0; dy=pp[1]-y0;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) goto cc1;
if (d1<ds3) {
if (fabs(ds3-2000)>1.0E-6) {
ds4=ds3;
x41=x31; y41=y31;
x42=x32; y42=y32;
}
ds3=d1;
x31=x1; y31=y1;
x32=x2; y32=y2;
ads_name_set(en,en3);
goto cc1;
}
if (d1<ds4) {
ds4=d1;
x41=x1; y41=y1;
x42=x2; y42=y2;
}
cc1:i=i+1;
if (i<len) goto ccc;
ads_ssfree(ss1);
// ads_printf(_T("\nds1=%f,ds2=%f,ds3=%f,ds4=%f"),ds1,ds2,ds3,ds4);
// ads_printf(_T("\nxka1=%f,yka1=%f,xka2=%f,yka2=%f"),xka1,yka1,xka2,yka2);
if ((fabs(ds3-2000)<1.0E-6)&&(ds1<dswa500)||(fabs(ds3-2000)<1.0E-6)&&(ds1<=whou)) goto d11;
if ((fabs(ds1-2000)<1.0E-6)&&(ds3<dswa500)||(fabs(ds1-2000)<1.0E-6)&&(ds3<=whou)) goto d33;
if ((ds1<dswa500)&&(ds3<dswa500)||(ds1<=whou)&&(ds3<=whou)) {
if ((fabs(ds2-2000)<1.0E-6)&&(fabs(ds4-2000)<1.0E-6)||(ds2<2000)&&(ds4<2000)) {
if (ds1<=ds3) goto d11;
goto d33;
}
if ((fabs(ds2-2000)<1.0E-6)) goto d11;
if ((fabs(ds4-2000)<1.0E-6)) goto d33;
}
if ((ds1<dswa500)&&(ds1<ds3)||(ds1<=whou)&&(ds1<ds3)) goto d11;
if ((ds3<dswa500)&&(ds3<ds1)||(ds3<=whou)&&(ds3<ds1)) goto d33;
return;
d11:xka1=x11; yka1=y11;
xka2=x12; yka2=y12;
itmen=3;
ads_ssadd(en1,ensspp0,ensspp0);
return;
d33:xka1=x31; yka1=y31;
xka2=x32; yka2=y32;
itmen=3;
ads_ssadd(en3,ensspp0,ensspp0);
return;
}
void ulin0(void)
{
// int i;
ads_real ds,x1,y1,x2,y2,dx,dy,d1,d2,x0,y0,q;
// TCHAR zf[40];
ads_ssadd(NULL,NULL,ensspp0);
ads_ssadd(entch,ensspp0,ensspp0);
itmen=0;
strlin();
ds=xka2; xka2=xka1; xka1=ds;
ds=yka2; yka2=yka1; yka1=ds;
strlin();
x1=xka1; y1=yka1;
x2=xka2; y2=yka2;
// if (ientd==1) ads_printf(_T("\n itmen=%d"),itmen);
if (itmen==1) {
ulin2(xmen2,ymen2);
if (itmen==1) ulin2(xmen0,ymen0);
if (itmen==2) {
strlin();
ds=xka2; xka2=xka1; xka1=ds;
ds=yka2; yka2=yka1; yka1=ds;
strlin();
// hlin(x1,y1,x2,y2,7);
// hlin(xka1,yka1,xka2,yka2,7);
// ads_getstring(5,NULL,zf);
goto ssd0;
}
goto ssd;
}
if (itmen==0) {
// hlin(x1,y1,x2,y2,2);
// TCHAR zf[40];
// ads_getstring(5,NULL,zf);
// ads_printf(_T("\nulin3 itmen=%d"),itmen);
ulin3();
if (itmen==3) {
strlin();
ds=xka2; xka2=xka1; xka1=ds;
ds=yka2; yka2=yka1; yka1=ds;
strlin();
// hlin(x1,y1,x2,y2,2);
// hlin(xka1,yka1,xka2,yka2,3);
// TCHAR zf[40];
// ads_getstring(5,NULL,zf);
goto ssd0;
}
goto ssd;
}
goto ssd;
ssd0:qjadu(x1,y1,x2,y2);
dx=800000000.0;
q=(qhcjc-180)*pi314/180;
x0=x1+dx*cos(q);
y0=y1+dx*sin(q);
dx=x0-xka1; dy=y0-yka1;
d1=sqrt(dx*dx+dy*dy);
dx=x0-xka2; dy=y0-yka2;
d2=sqrt(dx*dx+dy*dy);
if (d1>d2) {
ds=xka2; xka2=xka1; xka1=ds;
ds=yka2; yka2=yka1; yka1=ds;
}
arry[1][1]=x1; arry[1][2]=y1;
arry[1][3]=x2; arry[1][4]=y2;
arry[1][5]=0; arry[1][6]=0;
arry[2][1]=xka1; arry[2][2]=yka1;
arry[2][3]=xka2; arry[2][4]=yka2;
arry[2][5]=0; arry[2][6]=0;
iarry=3;
//ads_printf(_T("\narry[1][1]=%f,arry[1][2]=%f,arry[1][3]=%f,arry[1][4]=%f"),arry[1][1],arry[1][2],arry[1][3],arry[1][4]);
//ads_printf(_T("\narry[2][1]=%f,arry[2][2]=%f,arry[2][3]=%f,arry[2][4]=%f"),arry[2][1],arry[2][2],arry[2][3],arry[2][4]);
ulin4();
icolo=icolo+1;
// if (ientd==1) {
// for (i=1;i<iarry;i++) {
// if (i==1) hlin(arry[i][1],arry[i][2],arry[i][3],arry[i][4],2);
// if (i>1) hlin(arry[i][1],arry[i][2],arry[i][3],arry[i][4],7);
// ads_printf(_T("\ni=%d,arry[i][1]=%f,%f,%f,%f"),i,arry[i][1],arry[i][2],arry[i][3],arry[i][4]);
// ads_getstring(5,NULL,zf); }
// }
// 绘 TDOTE 线
ulin5();
// 将以转换的墙端点选上 ensspp0
ulin6dd();
if (ientd==0) addentd();
ssd:ssdelenpp0();
ads_ssfree(ensspp0);
}
void ulin0dda(void)
{
// int i;
ads_real ds,x1,y1,x2,y2,dx,dy,d1,d2,x0,y0,q;
// TCHAR zf[40];
ads_ssadd(NULL,NULL,ensspp0);
// ads_ssadd(entch,ensspp0,ensspp0);
// itmen=0;
// strlin();
// ds=xka2; xka2=xka1; xka1=ds;
// ds=yka2; yka2=yka1; yka1=ds;
// strlin();
x1=xka1; y1=yka1;
x2=xka2; y2=yka2;
// if (ientd==1) ads_printf(_T("\n itmen=%d"),itmen);
itmen=0;
ulin3dl();
//ads_printf(_T("\nulin3 itmen=%d"),itmen);
if (itmen==3) {
strlin();
ds=xka2; xka2=xka1; xka1=ds;
ds=yka2; yka2=yka1; yka1=ds;
strlin();
// hlin(x1,y1,x2,y2,2);
// hlin(xka1,yka1,xka2,yka2,2);
// ads_getstring(5,NULL,zf);
goto ssd0;
}
goto ssd;
ssd0:qjadu(x1,y1,x2,y2);
dx=800000000.0;
q=(qhcjc-180)*pi314/180;
x0=x1+dx*cos(q);
y0=y1+dx*sin(q);
dx=x0-xka1; dy=y0-yka1;
d1=sqrt(dx*dx+dy*dy);
dx=x0-xka2; dy=y0-yka2;
d2=sqrt(dx*dx+dy*dy);
if (d1>d2) {
ds=xka2; xka2=xka1; xka1=ds;
ds=yka2; yka2=yka1; yka1=ds;
}
arry[1][1]=x1; arry[1][2]=y1;
arry[1][3]=x2; arry[1][4]=y2;
arry[1][5]=0; arry[1][6]=0;
arry[2][1]=xka1; arry[2][2]=yka1;
arry[2][3]=xka2; arry[2][4]=yka2;
arry[2][5]=0; arry[2][6]=0;
iarry=3;
//ads_printf(_T("\narry[1][1]=%f,arry[1][2]=%f,arry[1][3]=%f,arry[1][4]=%f"),arry[1][1],arry[1][2],arry[1][3],arry[1][4]);
//ads_printf(_T("\narry[2][1]=%f,arry[2][2]=%f,arry[2][3]=%f,arry[2][4]=%f"),arry[2][1],arry[2][2],arry[2][3],arry[2][4]);
// ulin4();
icolo=icolo+1;
// if (ientd==1) {
// for (i=1;i<iarry;i++) {
// if (i==1) hlin(arry[i][1],arry[i][2],arry[i][3],arry[i][4],2);
// if (i>1) hlin(arry[i][1],arry[i][2],arry[i][3],arry[i][4],7);
// ads_printf(_T("\ni=%d,arry[i][1]=%f,%f,%f,%f"),i,arry[i][1],arry[i][2],arry[i][3],arry[i][4]);
// ads_getstring(5,NULL,zf); }
// }
// 绘 TDOTE 线
ulin5();
// 将以转换的墙端点选上 ensspp0
ulin6dd();
if (ientd==0) addentd();
ssd:ssdelenpp0();
ads_ssfree(ensspp0);
}
void ulin4(void)
{
ulin4a();
ulin4ab();
}
void ulin4a(void)
{ int i;
ads_real q,dx,dy,d1;
ads_point p1,p2,p3,p4,pp;
p1[2]=0; p2[2]=0;
p3[2]=0; p4[2]=0;
aa0:p1[0]=arry[1][1]; p1[1]=arry[1][2];
p2[0]=arry[1][3]; p2[1]=arry[1][4];
i=iarry-1;
qjadu(p1[0],p1[1],p2[0],p2[1]);
q=(qhcjc+90)*pi314/180;
dx=8000.0;
p3[0]=arry[i][3]+dx*cos(q); p3[1]=arry[i][4]+dx*sin(q);
p4[0]=arry[i][3]-dx*cos(q); p4[1]=arry[i][4]-dx*sin(q);
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) goto dd1;
return;
dd1:dx=pp[0]-arry[1][3]; dy=pp[1]-arry[1][4];
d1=sqrt(dx*dx+dy*dy);
// if (d1<10*ds111) return;
if (d1<dswa500) return;
q=qhcjc*pi314/180;
dx=2*whou;
if (dx<1000) dx=1000;
if (dx<d1) dx=d1;
i=iarry-1;
xka2=arry[i][3];
yka2=arry[i][4];
xka1=arry[i][3]+dx*cos(q);
yka1=arry[i][4]+dx*sin(q);
itwall=0;
// ads_printf(_T("\nAAAxka1=%f,yka1=%f,xka2=%f,yka2=%f"),xka1,yka1,xka2,yka2);
ulin4b();
if (itwall==1) {
// ads_printf(_T("\nBBBxka1=%f,yka1=%f,xka2=%f,yka2=%f"),xka1,yka1,xka2,yka2);
i=iarry;
arry[i][1]=xka2; arry[i][2]=yka2;
arry[i][3]=xka1; arry[i][4]=yka1;
arry[i][5]=0; arry[i][6]=0;
if (iarry<300) { iarry=iarry+1; goto aa0; }
}
}
void ulin4b(void)
{ struct resbuf *ebup,*rb;
int typi;
Adesk::Int32 i,len;
ads_name ss1,en;
int it1,it2;
ads_real x0=0,y0=0,x1,y1,x2,y2,q,dx,dy,d1,d2,ds0,ds;
ads_real xp1=0,yp1=0,xp2=0,yp2=0;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T("");
ads_point p1,p2,p3,p4,pp;
ads_point p01,p02;
p1[2]=0; p2[2]=0;
p3[2]=0; p4[2]=0;
ds0=20000;
p1[0]=xka1; p1[1]=yka1;
p2[0]=xka2; p2[1]=yka2;
qjadu(p1[0],p1[1],p2[0],p2[1]);
q=(qhcjc-180)*pi314/180;
p2[0]=p2[0]+10*cos(q);
p2[1]=p2[1]+10*sin(q);
//ads_printf(_T("\nASD22 p1[0]=%f,p1[1]=%f,p2[0]=%f,p2[1]=%f"),p1[0],p1[1],p2[0],p2[1]);
// hlin(p1[0],p1[1],p2[0],p2[1],3);
p01[0]=p1[0]; p01[1]=p1[1]; p01[2]=0;
p02[0]=p2[0]; p02[1]=p2[1]; p02[2]=0;
ul112l(p1[0],p1[1],p2[0],p2[1],ds111);
//modified by whl on 060323
//RBList mask(RTDXF0, _T("LINE"), 8, _T("WALL*"), NULL);
XString sLayer;
sLayer<<_T("WALL*,")<<LAY_WALL;
RBList mask(RTDXF0, _T("LINE"), 8,(const TCHAR*)sLayer, NULL);
if (ads_ssget(_T("C"),p01,p02,mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto bbb;
return;
bbb:ads_ssname(ss1,i,en);
ebup=ads_entget(en);
if (ebup==NULL) goto mbb1;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==11) {
x2=rb->resval.rpoint[0];
y2=rb->resval.rpoint[1]; }
}
ads_relrb(ebup);
ads_relrb(rb);
// if ((txtnam8[0]==_T('W'))&&(txtnam8[1]==_T('A'))&&(txtnam8[2]==_T('L'))&&(txtnam8[3]==_T('L'))) goto bbwa;
goto mbb1;
//
//bbwa:if ((txtdxf0[0]==_T('L'))&&(txtdxf0[1]==_T('I'))&&(txtdxf0[2]==_T('N'))&&(txtdxf0[3]==_T('E'))) goto lin;
// goto mbb1;
// lin:
dx=x1-x2; dy=y1-y2;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) goto mbb1;
d1=800;
d2=1600;
qjadu(p1[0],p1[1],p2[0],p2[1]);
q=(qhcjc+90)*pi314/180;
p4[0]=x1+800*cos(q);
p4[1]=y1+800*sin(q);
q=(qhcjc-90)*pi314/180;
p3[0]=x1+800*cos(q);
p3[1]=y1+800*sin(q);
it1=0; it2=0;
if (ads_inters(p1,p2,p3,p4,0,pp)==RTNORM) {
dx=pp[0]-x1; dy=pp[1]-y1;
d1=sqrt(dx*dx+dy*dy);
}
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) it1=1;
q=(qhcjc+90)*pi314/180;
p4[0]=x2+800*cos(q);
p4[1]=y2+800*sin(q);
q=(qhcjc-90)*pi314/180;
p3[0]=x2+800*cos(q);
p3[1]=y2+800*sin(q);
if (ads_inters(p1,p2,p3,p4,0,pp)==RTNORM) {
dx=pp[0]-x2; dy=pp[1]-y2;
d2=sqrt(dx*dx+dy*dy);
}
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) it2=1;
if ((it1==0)&&(it2==0)) goto mbb1;
if ((d1<ds111)&&(d2<ds111)) {
// ads_printf(_T("\nit1=%d,it2=%d"),it1,it2);
dx=xka2-x1; dy=yka2-y1;
d1=sqrt(dx*dx+dy*dy);
if ((d1>10)&&(d1<ds0)) {
x0=x1; y0=y1;
ds0=d1;
xp1=x2; yp1=y2;
xp2=x1; yp2=y1;
ads_name_set(en,entch);
}
dx=xka2-x2; dy=yka2-y2;
d1=sqrt(dx*dx+dy*dy);
if ((d1>10)&&(d1<ds0)) {
x0=x2; y0=y2;
ds0=d1;
xp1=x1; yp1=y1;
xp2=x2; yp2=y2;
ads_name_set(en,entch);
}
}
mbb1:i=i+1;
if (i<len) goto bbb;
ads_ssfree(ss1);
// ads_printf(_T("\nds0=%f"),ds0);
if (ds0<20000) {
// ads_printf(_T("\nASD ds0=%f"),ds0);
// hlin(xp1,yp1,xp2,yp2,2);
p1[0]=arry[1][1]; p1[1]=arry[1][2];
p2[0]=arry[1][3]; p2[1]=arry[1][4];
qjadu(p1[0],p1[1],p2[0],p2[1]);
q=(qhcjc+90)*pi314/180;
p4[0]=x0+8000*cos(q);
p4[1]=y0+8000*sin(q);
q=(qhcjc-90)*pi314/180;
p3[0]=x0+8000*cos(q);
p3[1]=y0+8000*sin(q);
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) {
// ads_printf(_T("\nASD22 ds0=%f"),ds0);
ads_ssadd(entch,ensspp0,ensspp0);
dx=xka2-xp2; dy=yka2-yp2;
d1=sqrt(dx*dx+dy*dy);
// ads_printf(_T("\nd1=%f"),d1);
itwall=1;
dx=dswa500;
if (dx<whou) dx=whou;
if (d1<dx) {
xka1=xp1; yka1=yp1;
xka2=xp2; yka2=yp2;
strlin(); } else {
xka1=xp2; yka1=yp2;
xka2=xp1; yka2=yp1;
strlin();
ds=xka2; xka2=xka1; xka1=ds;
ds=yka2; yka2=yka1; yka1=ds;
strlin();
}
// hlin(xka1,yka1,xka2,yka2,5);
}
}
}
void ulin4ab(void)
{ int i,j;
ads_real q,dx,dy,d1;
ads_point p1,p2,p3,p4,pp;
p1[2]=0; p2[2]=0;
p3[2]=0; p4[2]=0;
aa0:p1[0]=arry[1][1]; p1[1]=arry[1][2];
p2[0]=arry[1][3]; p2[1]=arry[1][4];
qjadu(p1[0],p1[1],p2[0],p2[1]);
q=(qhcjc+90)*pi314/180;
i=2;
dx=8000.0;
p3[0]=arry[i][1]+dx*cos(q); p3[1]=arry[i][2]+dx*sin(q);
p4[0]=arry[i][1]-dx*cos(q); p4[1]=arry[i][2]-dx*sin(q);
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) goto dd1;
return;
dd1:dx=pp[0]-arry[1][1]; dy=pp[1]-arry[1][2];
d1=sqrt(dx*dx+dy*dy);
// if (d1<10*ds111) return;
if (d1<dswa500) return;
q=(qhcjc-180)*pi314/180;
dx=2*whou;
if (dx<1000) dx=1000;
if (dx<d1) dx=d1;
i=2;
xka2=arry[i][1];
yka2=arry[i][2];
xka1=arry[i][1]+dx*cos(q);
yka1=arry[i][2]+dx*sin(q);
// hlin(xka1,yka1,xka2,yka2,7);
itwall=0;
// ads_printf(_T("\nCCC arry[i][1]=%f,arry[i][2]=%f,arry[i][3]=%f,arry[i][4]=%f"),arry[i][1],arry[i][2],arry[i][3],arry[i][4]);
// ads_printf(_T("\nDDDxka2=%f,yka2=%f,xka1=%f,yka1=%f"),xka2,yka2,xka1,yka1);
ulin4b();
if (itwall==1) {
//ads_printf(_T("\nEEExka2=%f,yka2=%f,xka1=%f,yka1=%f"),xka2,yka2,xka1,yka1);
i=iarry;
j=i-1;
ccc: arry[i][1]=arry[j][1]; arry[i][2]=arry[j][2];
arry[i][3]=arry[j][3]; arry[i][4]=arry[j][4];
arry[i][5]=arry[j][5]; arry[i][6]=arry[j][6];
i=i-1;
j=j-1;
if (i>2) goto ccc;
i=2;
// arry[i][1]=xka2; arry[i][2]=yka2;
// arry[i][3]=xka1; arry[i][4]=yka1;
// arry[i][5]=0; arry[i][6]=0;
arry[i][1]=xka1; arry[i][2]=yka1;
arry[i][3]=xka2; arry[i][4]=yka2;
arry[i][5]=0; arry[i][6]=0;
if (iarry<300) {
iarry=iarry+1; goto aa0; }
}
}
void ulin5(void)
{
int i;
i=2;
aaa:xka1=arry[1][1]; yka1=arry[1][2];
xka2=arry[1][3]; yka2=arry[1][4];
xwb1=arry[i][1]; ywb1=arry[i][2];
xwb2=arry[i][3]; ywb2=arry[i][4];
ulin5a(i);
i=i+1;
if (i<iarry) goto aaa;
}
void uldote(ads_real xp1,ads_real yp1,ads_real xp2,ads_real yp2)
{
struct resbuf *ebup,*rb;
ads_point p01,p02;
ads_name ss1,en;
int typi;
Adesk::Int32 i,len;
ads_real x1,y1,x2,y2,dx,dy,d1,d0,x0,y0;
ads_real q,q1,dq,xp0,yp0;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T("");
ads_point p1,p2,p3,p4,pp;
p1[2]=0; p2[2]=0;
p3[2]=0; p4[2]=0;
x0=(xp1+xp2)/2;
y0=(yp1+yp2)/2;
d0=2000;
p01[0]=xp1; p01[1]=yp1; p01[2]=0;
p02[0]=xp2; p02[1]=yp2; p02[2]=0;
ul112l(p01[0],p01[1],p02[0],p02[1],ds111);
x1=xp1; x2=xp2;
if (x2<x1) { x1=xp2; x2=xp1;}
y1=yp1; y2=yp2;
if (y2<y1) { y1=yp2; y2=yp1; }
p01[0]=x1-1000; p01[1]=y1-1000; p01[2]=0;
p02[0]=x2+1000; p02[1]=y2+1000; p02[2]=0;
//modified by whl on 060323
//RBList mask(RTDXF0, _T("LINE"), 8, LAY_AXIS, NULL);
XString sLayer;
sLayer<<_T("DOTE,")<<LAY_AXIS;
RBList mask(RTDXF0, _T("LINE"), 8, (const TCHAR*)sLayer, NULL);
if (ads_ssget(_T("C"),p01,p02,mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto bbb;
return;
bbb:ads_ssname(ss1,i,en);
ebup=ads_entget(en);
if (ebup==NULL) goto mbb1;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==11) {
x2=rb->resval.rpoint[0];
y2=rb->resval.rpoint[1]; }
}
ads_relrb(ebup);
ads_relrb(rb);
//if ((txtnam8[0]==_T('D'))&&(txtnam8[1]==_T('O'))&&(txtnam8[2]==_T('T'))&&(txtnam8[3]==_T('E'))) goto bbwa;
// goto mbb1;
//bbwa:if ((txtdxf0[0]==_T('L'))&&(txtdxf0[1]==_T('I'))&&(txtdxf0[2]==_T('N'))&&(txtdxf0[3]==_T('E'))) goto lin;
// goto mbb1;
// lin:
dx=x1-x2; dy=y1-y2;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) goto mbb1;
qjadu(xka1,yka1,xka2,yka2);
q1=qhcjc;
qjadu(x1,y1,x2,y2);
dq=q1-qhcjc;
if (dq<0) dq=-dq;
qq1:if (dq>179) { dq=dq-180; goto qq1; }
if (dq>1) goto mbb1;
qjadu(xp1,yp1,xp2,yp2);
q=(qhcjc-180)*pi314/180;
p1[0]=xp1+ds111*cos(q); p1[1]=yp1+ds111*sin(q);
q=qhcjc*pi314/180;
p2[0]=xp2+ds111*cos(q); p2[1]=yp2+ds111*sin(q);
p3[0]=x1; p3[1]=y1;
p4[0]=x2; p4[1]=y2;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) {
dx=pp[0]-x0; dy=pp[1]-y0;
d1=sqrt(dx*dx+dy*dy);
if (d1<d0) {
d0=d1;
xp0=pp[0]; yp0=pp[1];
}
}
mbb1:i=i+1;
if (i<len) goto bbb;
ads_ssfree(ss1);
if (d0<2000) {
itdote=1;
dx=xp0-x0; dy=yp0-y0;
xdz1=xdz1+dx; ydz1=ydz1+dy;
xdz2=xdz2+dx; ydz2=ydz2+dy;
// hlin(xdz1,ydz1,xdz2,ydz2,7);
//ads_printf(_T("\nxdz1=%f,ydz1=%f,xdz2=%f,ydz2=%f"),xdz1,ydz1,xdz2,ydz2);
}
}
void uldote23(int it0,ads_real xp1,ads_real yp1,ads_real xp2,ads_real yp2)
{
struct resbuf *ebup,*rb;
ads_point p01,p02;
ads_name ss1,en;
int typi;
Adesk::Int32 i,len;
ads_real x1,y1,x2,y2,dx,dy,d1,x0,y0;
ads_real q,q1,dq,xp0,yp0;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T("");
ads_point p1,p2,p3,p4,pp;
p1[2]=0; p2[2]=0;
p3[2]=0; p4[2]=0;
x0=(xp1+xp2)/2;
y0=(yp1+yp2)/2;
dx=wwjul;
qjadu(xp1,yp1,xp2,yp2);
q=(qhcjc+90)*pi314/180;
p01[0]=x0+dx*cos(q); p01[1]=y0+dx*sin(q); p01[2]=0;
q=(qhcjc-90)*pi314/180;
p02[0]=x0+dx*cos(q); p02[1]=y0+dx*sin(q); p02[2]=0;
ul112l(p01[0],p01[1],p02[0],p02[1],ds111);
//modified by whl on 060323
//RBList mask(RTDXF0, _T("LINE"), 8, LAY_AXIS, NULL);
XString sLayer;
sLayer<<_T("DOTE,")<<LAY_AXIS;
RBList mask(RTDXF0, _T("LINE"), 8, (const TCHAR*)sLayer, NULL);
if (ads_ssget(_T("C"),p01,p02,mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto bbb;
return;
bbb:ads_ssname(ss1,i,en);
ebup=ads_entget(en);
if (ebup==NULL) goto mbb1;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==11) {
x2=rb->resval.rpoint[0];
y2=rb->resval.rpoint[1]; }
}
ads_relrb(ebup);
ads_relrb(rb);
//if ((txtnam8[0]==_T('D'))&&(txtnam8[1]==_T('O'))&&(txtnam8[2]==_T('T'))&&(txtnam8[3]==_T('E'))) goto bbwa;
// goto mbb1;
//bbwa:if ((txtdxf0[0]==_T('L'))&&(txtdxf0[1]==_T('I'))&&(txtdxf0[2]==_T('N'))&&(txtdxf0[3]==_T('E'))) goto lin;
// goto mbb1;
// lin:
dx=x1-x2; dy=y1-y2;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) goto mbb1;
qjadu(xka1,yka1,xka2,yka2);
q1=qhcjc;
qjadu(x1,y1,x2,y2);
dq=q1-qhcjc;
if (dq<0) dq=-dq;
qq1:if (dq>179) { dq=dq-180; goto qq1; }
if (dq>1) goto mbb1;
p1[0]=p01[0]; p1[1]=p01[1];
p2[0]=p02[0]; p2[1]=p02[1];
p3[0]=x1; p3[1]=y1;
p4[0]=x2; p4[1]=y2;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) {
dx=pp[0]-x0; dy=pp[1]-y0;
d1=sqrt(dx*dx+dy*dy);
if (d1<dsdote) {
dsdote=d1;
xp0=pp[0]; yp0=pp[1];
}
}
mbb1:i=i+1;
if (i<len) goto bbb;
ads_ssfree(ss1);
if (dsdote<2000) {
itdote=it0;
xdot=xp0; ydot=yp0;
// hlin(xdz1,ydz1,xdz2,ydz2,7);
//ads_printf(_T("\nxdz1=%f,ydz1=%f,xdz2=%f,ydz2=%f"),xdz1,ydz1,xdz2,ydz2);
}
}
void wlinTDOTE(ads_point p1,ads_point p2)
{
struct resbuf *rb;
ads_name en;
ads_real dx,dy,d1;
dx=p1[0]-p2[0]; dy=p1[1]-p2[1];
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) return;
rb=ads_buildlist(RTDXF0,_T("LINE"),10,p1,11,p2,
6,_T("BYLAYER"),
8,_T("TDOTE"),
62,256,
39,3000.0,
-3,
1001,_T("TDOTE"),
1040,whouz,
1040,whouy,
NULL);
ads_entmake(rb);
ads_relrb(rb);
if (ads_entlast(en)==RTNORM) {
ads_ssadd(en,endd0,endd0);
}
}
void tzhb(void)
{ struct resbuf *ebup,*rbp;
ads_name en;
int typi,itn;
Adesk::Int32 len,i;
ads_real x1,y1,x2,y2,dx,dy,d1,rr,q1,q2;
TCHAR zf[40]=_T("");
itn=0;
aa0:i=0;
itn=itn+1;
if (itn>5000) return;
if (ads_sslength(ensspp,&len)==RTNORM) goto bbb;
return;
bbb:if (len==0) return;
ads_ssname(ensspp,i,en);
ebup=ads_entget(en);
if (ebup==NULL) goto bb1;
q1=0; q2=2*pi314;
for (rbp=ebup;rbp!=NULL;rbp=rbp->rbnext) {
typi=rbp->restype;
if (typi==0) _tcscpy(zf,rbp->resval.rstring);
if (typi==40) rr=rbp->resval.rreal;
if (typi==50) q1=rbp->resval.rreal;
if (typi==51) q2=rbp->resval.rreal;
if (typi==10) {
x1=rbp->resval.rpoint[0];
y1=rbp->resval.rpoint[1]; }
if (typi==11) {
x2=rbp->resval.rpoint[0];
y2=rbp->resval.rpoint[1]; }
}
ads_relrb(ebup);
ads_relrb(rbp);
if ((zf[0]==_T('L'))&&(zf[1]==_T('I'))&&(zf[2]==_T('N'))&&(zf[3]==_T('E'))) goto lin;
if ((zf[0]==_T('A'))&&(zf[1]==_T('R'))&&(zf[2]==_T('C'))) goto cir;
if ((zf[0]==_T('C'))&&(zf[1]==_T('I'))&&(zf[2]==_T('R'))&&(zf[3]==_T('C'))&&(zf[4]==_T('L'))&&(zf[5]==_T('E'))) goto cir;
goto bb1;
cir:if (rr<ds111) {
ads_ssdel(en,ensspp);
goto aa0; }
// ads_ssadd(en,ensspp0,ensspp0);
ads_ssdel(en,ensspp);
goto aa0;
lin:dx=x1-x2;
dy=y1-y2;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) {
ads_ssdel(en,ensspp);
goto aa0; }
if (d1<60) goto bb1;
// 处理小于墙厚的墙线
// if (d1<whou) goto bb1;
xdo1=x1; ydo1=y1;
xdo2=x2; ydo2=y2;
itmen=0;
// 判定是否窗头线
qmmma();
// ads_printf(_T("\nitmen=%d"),itmen);
xdo1=x1; ydo1=y1;
xdo2=x2; ydo2=y2;
// 判定是否端头线
if (itmen==0) ulwa00();
if (itmen==0) {
ads_name_set(en,entch);
xka1=x2; yka1=y2; xka2=x1; yka2=y1;
ddar[1][5]=0;
ddar[2][5]=0;
ulin0();
goto aa0; }
bb1:i=i+1;
if (i<len) goto bbb;
}
void qmmma(void)
{
struct resbuf apps,*ebup,*rb;
ads_name ss1,en;
int typi,it;
Adesk::Int32 i,len;
ads_real x1,y1,x2,y2,dx,gs1,gs2,gs3;
ads_real r41,r42,q1,bs,q;
ads_point p01,p02;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T(""),txtins[40]=_T(""),buf[40]=_T("");
ads_point p1,p2,p3,p4,pp;
p1[2]=0; p2[2]=0;
p3[2]=0; p4[2]=0;
// ads_printf(_T("mmmm"));
// xb1=xdo1; yb1=ydo1;
// xb2=xdo2; yb2=ydo2;
// hlin(xdo1,ydo1,xdo2,ydo2,7);
x1=xdo1; x2=xdo2;
if (x2<x1) { x1=xdo2; x2=xdo1;}
y1=ydo1; y2=ydo2;
if (y2<y1) { y1=ydo2; y2=ydo1; }
dx=100*ds111;
p01[0]=x1-dx; p01[1]=y1-dx; p01[2]=0;
p02[0]=x2+dx; p02[1]=y2+dx; p02[2]=0;
ul112l(p01[0],p01[1],p02[0],p02[1],0);
//modified by whl
//RBList mask(RTDXF0, _T("INSERT"), 8, LAY_WIN, NULL);
XString sLayer;
sLayer<<_T("WINDOW,")<<LAY_WIN;
RBList mask(RTDXF0, _T("INSERT"), 8, (const TCHAR*)sLayer, NULL);
if (ads_ssget(_T("C"),p01,p02,mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto strbb;
return;
strbb:ads_ssname(ss1,i,en);
apps.restype=RTSTR;
_tcscpy(buf,_T("WTHICK"));
apps.resval.rstring=buf;
apps.rbnext=NULL;
ebup=ads_entgetx(en,&apps);
if (ebup==NULL) return;
it=0; gs1=0; gs2=0; gs3=0;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==2) _tcscpy(txtins,rb->resval.rstring);
if (typi==41) r41=rb->resval.rreal;
if (typi==42) r42=rb->resval.rreal;
if (typi==50) q1=rb->resval.rreal;
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==1040) {
it=it+1;
if (it==1) gs1=rb->resval.rreal;
if (it==2) gs2=rb->resval.rreal;
if (it==3) gs3=rb->resval.rreal;
}
}
ads_relrb(ebup);
ads_relrb(rb);
//if ((txtnam8[0]==_T('W'))&&(txtnam8[1]==_T('I'))&&(txtnam8[2]==_T('N'))&&(txtnam8[3]==_T('D'))&&(txtnam8[4]==_T('O'))&&(txtnam8[5]==_T('W'))) goto bbwa;
// goto mbb1;
//bbwa: if ((txtdxf0[0]==_T('I'))&&(txtdxf0[1]==_T('N'))&&(txtdxf0[2]==_T('S'))&&(txtdxf0[3]==_T('E'))&&(txtdxf0[4]==_T('R'))&&(txtdxf0[5]==_T('T'))) goto bbin;
// goto mbb1;
//bbin:
mank=0; inntm=0; manam=0;
// ads_printf(_T("\ngs1=%f,gs2=%f,gs3=%f"),gs1,gs2,gs3);
if (gs1<=0) gs1=400;
if (mank==0) tchmtxt(txtins);
bs=r41;
if (bs<0) bs=-bs;
mank=bs*mank;
if (mank>10*ds111) {
p3[0]=x1; p3[1]=y1; p3[2]=0;
qhcjc=q1*180/pi314;
if (r41<0) qhcjc=qhcjc+180;
q=(qhcjc+180)*pi314/180;
dx=(mank+ds111)/2;
p3[0]=x1+dx*cos(q);
p3[1]=y1+dx*sin(q);
p3[2]=0;
q=qhcjc*pi314/180;
p4[0]=x1+dx*cos(q);
p4[1]=y1+dx*sin(q);
p4[2]=0;
xdz1=p3[0]; ydz1=p3[1];
xdz2=p4[0]; ydz2=p4[1];
dx=ds111+mank/2;
x2=x1+dx*cos(q);
y2=y1+dx*sin(q);
q=(qhcjc+180)*pi314/180;
x1=x1+dx*cos(q);
y1=y1+dx*sin(q);
p1[0]=xdo1; p1[1]=ydo1;
p2[0]=xdo2; p2[1]=ydo2;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) goto qjdmm;
goto mbb1;
qjdmm:itmen=1;
}
mbb1:i=i+1;
if (i<len) goto strbb;
ads_ssfree(ss1);
}
void ulin5a(int i0)
{ int it11,it12,it21,it22;
ads_real q,dx,dy,d1,dhh;
ads_real xp1,yp1,xp2,yp2,x0,y0;
ads_real x11,y11,x12,y12,x21,y21,x22,y22;
ads_point p1,p2,p3,p4,pp;
p1[2]=0; p2[2]=0;
p3[2]=0; p4[2]=0;
qjadu(xka1,yka1,xka2,yka2);
p1[0]=xka1; p1[1]=yka1;
p2[0]=xka2; p2[1]=yka2;
p3[0]=(xwb1+xwb2)/2;
p3[1]=(ywb1+ywb2)/2;
q=(qhcjc+90)*pi314/180;
p4[0]=p3[0]+100*cos(q);
p4[1]=p3[1]+100*sin(q);
if (ads_inters(p1,p2,p3,p4,0,pp)==RTNORM) goto lin;
return;
lin:dx=p3[0]-pp[0]; dy=p3[1]-pp[1];
dhh=sqrt(dx*dx+dy*dy);
if (dhh<10*ds111) return;
// qjadu(p3[0],p3[1],pp[0],pp[1]);
// q=qhcjc*pi314/180;
// xdz1=p3[0]+dhh*cos(q)/2;
// ydz1=p3[1]+dhh*sin(q)/2;
// qjadu(xka1,yka1,xka2,yka2);
x11=xka1; y11=yka1;
x12=xka2; y12=yka2;
x21=xwb1; y21=ywb1;
x22=xwb2; y22=ywb2;
p1[0]=xka1; p1[1]=yka1;
p2[0]=xka2; p2[1]=yka2;
qjadu(xka1,yka1,xka2,yka2);
q=(qhcjc+90)*pi314/180;
p3[0]=xwb1+8000*cos(q);
p3[1]=ywb1+8000*sin(q);
q=(qhcjc-90)*pi314/180;
p4[0]=xwb1+8000*cos(q);
p4[1]=ywb1+8000*sin(q);
it11=0;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) {
x11=pp[0]; y11=pp[1];
it11=1; }
q=(qhcjc+90)*pi314/180;
p3[0]=xwb2+8000*cos(q);
p3[1]=ywb2+8000*sin(q);
q=(qhcjc-90)*pi314/180;
p4[0]=xwb2+8000*cos(q);
p4[1]=ywb2+8000*sin(q);
it12=0;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) {
x12=pp[0]; y12=pp[1];
it12=1; }
p1[0]=xwb1; p1[1]=ywb1;
p2[0]=xwb2; p2[1]=ywb2;
qjadu(xka1,yka1,xka2,yka2);
q=(qhcjc+90)*pi314/180;
p3[0]=xka1+8000*cos(q);
p3[1]=yka1+8000*sin(q);
q=(qhcjc-90)*pi314/180;
p4[0]=xka1+8000*cos(q);
p4[1]=yka1+8000*sin(q);
it21=0;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) {
x21=pp[0]; y21=pp[1];
it21=1;
if (i0==2) {
dx=x21-xwb1; dy=y21-ywb1;
d1=sqrt(dx*dx+dy*dy);
if ((d1>800.0)&&(ddar[1][5]==200)) {
ddar[1][1]=xwb1; ddar[1][2]=ywb1;
ddar[1][3]=x21; ddar[1][4]=y21;
ddar[1][5]=0; ddar[1][6]=0;
}
}
}
q=(qhcjc+90)*pi314/180;
p3[0]=xka2+8000*cos(q);
p3[1]=yka2+8000*sin(q);
q=(qhcjc-90)*pi314/180;
p4[0]=xka2+8000*cos(q);
p4[1]=yka2+8000*sin(q);
it22=0;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) {
x22=pp[0]; y22=pp[1];
it22=1;
if (i0==iarry-1) {
dx=x22-xwb2; dy=y22-ywb2;
d1=sqrt(dx*dx+dy*dy);
if ((d1>800.0)&&(ddar[2][5]==200)) {
ddar[2][1]=x22; ddar[2][2]=y22;
ddar[2][3]=xwb2; ddar[2][4]=ywb2;
ddar[2][5]=0; ddar[2][6]=0;
}
}
}
xdz1=(x11+x21)/2; ydz1=(y11+y21)/2;
xdz2=(x12+x22)/2; ydz2=(y12+y22)/2;
// hlin(xdz1,ydz1,xdz2,ydz2,3);
xp1=(x11+x12)/2; yp1=(y11+y12)/2;
xp2=(x21+x22)/2; yp2=(y21+y22)/2;
// hlin(xp1,yp1,xp2,yp2,7);
itdote=0;
uldote(xp1,yp1,xp2,yp2);
if ((itdote==0)&&(wwjul>0)) {
xdot=(xdz1+xdz2)/2;
ydot=(ydz1+ydz2)/2;
x0=xdot; y0=ydot;
dsdote=2000.0;
uldote23(2,x11,y11,x12,y12);
uldote23(3,x21,y21,x22,y22);
if (itdote==0) goto aaa;
dx=xdot-x0; dy=ydot-y0;
xdz1=xdz1+dx; ydz1=ydz1+dy;
xdz2=xdz2+dx; ydz2=ydz2+dy;
whouz=0; whouy=0;
qjadu(xdz1,ydz1,xdz2,ydz2);
p3[0]=(xdz1+xdz2)/2;
p3[1]=(ydz1+ydz2)/2;
q=(qhcjc-90)*pi314/180;
p4[0]=p3[0]+8000*cos(q);
p4[1]=p3[1]+8000*sin(q);
p1[0]=xka1; p1[1]=yka1;
p2[0]=xka2; p2[1]=yka2;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) {
dx=p3[0]-pp[0]; dy=p3[1]-pp[1];
d1=sqrt(dx*dx+dy*dy);
if (d1>0.0001) whouy=d1;
}
p1[0]=xwb1; p1[1]=ywb1;
p2[0]=xwb2; p2[1]=ywb2;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) {
dx=p3[0]-pp[0]; dy=p3[1]-pp[1];
d1=sqrt(dx*dx+dy*dy);
if (d1>0.0001) whouz=d1;
}
//ads_printf(_T("\nAAA whouz=%f,whouy=%f"),whouz,whouy);
if ((whouz>0)&&(whouy>0)) {
if (whouy<whouz) {
dx=whouz; whouz=whouy; whouy=dx; }
whouz=-whouz;
// ads_printf(_T("\nAAA whouz=%f,whouy=%f"),whouz,whouy);
goto edd;
}
whouz=0; whouy=0;
p3[0]=(xdz1+xdz2)/2;
p3[1]=(ydz1+ydz2)/2;
q=(qhcjc+90)*pi314/180;
p4[0]=p3[0]+8000*cos(q);
p4[1]=p3[1]+8000*sin(q);
p1[0]=xka1; p1[1]=yka1;
p2[0]=xka2; p2[1]=yka2;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) {
dx=p3[0]-pp[0]; dy=p3[1]-pp[1];
d1=sqrt(dx*dx+dy*dy);
if (d1>0.0001) whouz=d1;
}
p1[0]=xwb1; p1[1]=ywb1;
p2[0]=xwb2; p2[1]=ywb2;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) {
dx=p3[0]-pp[0]; dy=p3[1]-pp[1];
d1=sqrt(dx*dx+dy*dy);
if (d1>0.0001) whouy=d1;
}
//ads_printf(_T("\nBBB whouz=%f,whouy=%f"),whouz,whouy);
if ((whouz>0)&&(whouy>0)) {
if (whouz<whouy) {
dx=whouz; whouz=whouy; whouy=dx; }
whouy=-whouy;
//ads_printf(_T("\nBBB whouz=%f,whouy=%f"),whouz,whouy);
goto edd;
}
return;
}
aaa: whouz=0; whouy=0;
qjadu(xdz1,ydz1,xdz2,ydz2);
p3[0]=(xdz1+xdz2)/2;
p3[1]=(ydz1+ydz2)/2;
q=(qhcjc-90)*pi314/180;
p4[0]=p3[0]+8000*cos(q);
p4[1]=p3[1]+8000*sin(q);
p1[0]=xka1; p1[1]=yka1;
p2[0]=xka2; p2[1]=yka2;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) {
dx=p3[0]-pp[0]; dy=p3[1]-pp[1];
d1=sqrt(dx*dx+dy*dy);
if (d1>0.0001) whouy=d1;
}
p1[0]=xwb1; p1[1]=ywb1;
p2[0]=xwb2; p2[1]=ywb2;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) {
dx=p3[0]-pp[0]; dy=p3[1]-pp[1];
d1=sqrt(dx*dx+dy*dy);
if (d1>0.0001) whouy=d1;
}
p3[0]=(xdz1+xdz2)/2;
p3[1]=(ydz1+ydz2)/2;
q=(qhcjc+90)*pi314/180;
p4[0]=p3[0]+8000*cos(q);
p4[1]=p3[1]+8000*sin(q);
p1[0]=xka1; p1[1]=yka1;
p2[0]=xka2; p2[1]=yka2;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) {
dx=p3[0]-pp[0]; dy=p3[1]-pp[1];
d1=sqrt(dx*dx+dy*dy);
if (d1>0.0001) whouz=d1;
}
p1[0]=xwb1; p1[1]=ywb1;
p2[0]=xwb2; p2[1]=ywb2;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) {
dx=p3[0]-pp[0]; dy=p3[1]-pp[1];
d1=sqrt(dx*dx+dy*dy);
if (d1>0.0001) whouz=d1;
}
edd:p1[0]=xdz1; p1[1]=ydz1; p1[2]=0;
p2[0]=xdz2; p2[1]=ydz2; p2[2]=0;
// hlin(xdz1,ydz1,xdz2,ydz2,3);
wlinTDOTE(p1,p2);
}
void ulwa00(void)
{
struct resbuf *ebup,*rb;
ads_name ss1,en;
int typi;
Adesk::Int32 i,len;
ads_real x1,y1,x2,y2,dx,dy,d1,d01,d02;
ads_real q1,dq;
ads_real x11,y11,x12,y12,x21,y21,x22,y22;
ads_point p01,p02;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T("");
x1=xdo1; x2=xdo2;
if (x2<x1) { x1=xdo2; x2=xdo1;}
y1=ydo1; y2=ydo2;
if (y2<y1) { y1=ydo2; y2=ydo1; }
p01[0]=x1-10*ds111; p01[1]=y1-10*ds111; p01[2]=0;
p02[0]=x2+10*ds111; p02[1]=y2+10*ds111; p02[2]=0;
d01=2000; d02=2000;
ul112l(p01[0],p01[1],p02[0],p02[1],0);
//modified by whl on 060323
//RBList mask(RTDXF0, _T("LINE"), 8, _T("WALL*"), NULL);
XString sLayer;
sLayer<<_T("WALL*,")<<LAY_WALL;
RBList mask(RTDXF0, _T("LINE"), 8,(const TCHAR*)sLayer, NULL);
if (ads_ssget(_T("C"),p01,p02,mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto strbb;
return;
strbb:ads_ssname(ss1,i,en);
ebup=ads_entget(en);
if (ebup==NULL) goto mbb1;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==11) {
x2=rb->resval.rpoint[0];
y2=rb->resval.rpoint[1]; }
}
ads_relrb(ebup);
ads_relrb(rb);
//if ((txtnam8[0]==_T('W'))&&(txtnam8[1]==_T('A'))&&(txtnam8[2]==_T('L'))&&(txtnam8[3]==_T('L'))) goto bbwa;
// goto mbb1;
//bbwa: if ((txtdxf0[0]==_T('L'))&&(txtdxf0[1]==_T('I'))&&(txtdxf0[2]==_T('N'))&&(txtdxf0[3]==_T('E'))) goto bbin;
// goto mbb1;
//bbin:
dx=x1-x2; dy=y1-y2;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) goto mbb1;
if ((fabs(x1-xdo1)<1.0E-6)&&
(fabs(y1-ydo1)<1.0E-6)&&
(fabs(x2-xdo2)<1.0E-6)&&
(fabs(y2-ydo2)<1.0E-6)) goto mbb1;
qjadu(xdo1,ydo1,xdo2,ydo2);
q1=qhcjc;
qjadu(x1,y1,x2,y2);
dq=q1-qhcjc;
if (dq<0) dq=-dq;
qq1:if (dq>269) { dq=dq-180; goto qq1; }
// ads_printf(_T("dq %f"),dq);
if ((dq<70)||(dq>101)) goto mbb1;
dx=xdo1-x1; dy=ydo1-y1;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) {
d01=d1;
x11=x1; y11=y1; x12=x2; y12=y2;
}
dx=xdo1-x2; dy=ydo1-y2;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) {
d01=d1;
x11=x2; y11=y2; x12=x1; y12=y1;
}
dx=xdo2-x1; dy=ydo2-y1;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) {
d02=d1;
x21=x1; y21=y1; x22=x2; y22=y2;
}
dx=xdo2-x2; dy=ydo2-y2;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) {
d02=d1;
x21=x2; y21=y2; x22=x1; y22=y1;
}
mbb1:i=i+1;
if (i<len) goto strbb;
ads_ssfree(ss1);
// ads_printf(_T("\nd01=%f,d02=%f"),d01,d02);
if ((d02<ds111)&&(d01<ds111)) {
qjadu(x11,y11,x12,y12);
q1=qhcjc;
qjadu(x21,y21,x22,y22);
dq=q1-qhcjc;
if (dq<0) dq=-dq;
if (dq>359) dq=dq-360;
if (dq<20) itmen=1;
}
}
void tzha(void)
{ struct resbuf *ebup,*rbp;
ads_name en;
int typi,itn;
Adesk::Int32 len,i;
ads_real x1,y1,x2,y2,dx,dy,d1,rr,dq,q1,q2;
TCHAR zf[40]=_T("");
itn=0;
aa0:i=0;
itn=itn+1;
if (itn>5000) return;
if (ads_sslength(ensspp,&len)==RTNORM) goto bbb;
return;
bbb:if (len==0) return;
ads_ssname(ensspp,i,en);
ebup=ads_entget(en);
if (ebup==NULL) goto bb1;
q1=0; q2=2*pi314;
for (rbp=ebup;rbp!=NULL;rbp=rbp->rbnext) {
typi=rbp->restype;
if (typi==0) _tcscpy(zf,rbp->resval.rstring);
if (typi==40) rr=rbp->resval.rreal;
if (typi==50) q1=rbp->resval.rreal;
if (typi==51) q2=rbp->resval.rreal;
if (typi==10) {
x1=rbp->resval.rpoint[0];
y1=rbp->resval.rpoint[1]; }
if (typi==11) {
x2=rbp->resval.rpoint[0];
y2=rbp->resval.rpoint[1]; }
}
ads_relrb(ebup);
ads_relrb(rbp);
if ((zf[0]==_T('L'))&&(zf[1]==_T('I'))&&(zf[2]==_T('N'))&&(zf[3]==_T('E'))) goto lin;
if ((zf[0]==_T('A'))&&(zf[1]==_T('R'))&&(zf[2]==_T('C'))) goto cir;
if ((zf[0]==_T('C'))&&(zf[1]==_T('I'))&&(zf[2]==_T('R'))&&(zf[3]==_T('C'))&&(zf[4]==_T('L'))&&(zf[5]==_T('E'))) goto cir;
goto bb1;
cir:if (rr<ds111) { //删除小圆弧
ads_ssdel(en,ensspp);
goto aa0; }
ads_name_set(en,entch);
xka1=x1; yka1=y1; karr=rr;
kaq1=q1*180/pi314;
kaq2=q2*180/pi314;
if (kaq2<kaq1) kaq2=kaq2+360;
dq=kaq2-kaq1;
d1=2*pi314*rr*dq/360;
//小于10 长度的墙线不处理
if (d1<10*ds111) goto bb1;
ularc();
goto aa0;
lin:dx=x1-x2;
dy=y1-y2;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) {
ads_ssdel(en,ensspp);
goto aa0; }
//小于墙厚的墙线可能是窗线,不处理
if (d1<whou) goto bb1;
ads_name_set(en,entch);
xka1=x2; yka1=y2; xka2=x1; yka2=y1;
ddar[1][5]=200;
ddar[2][5]=200;
ulin0();
// 可能导致重合墙,因此用全局变量控制执行与否
if (g_nProcessMore) {
if (ddar[1][5]==0) ulin0dd(1);
if (ddar[2][5]==0) ulin0dd(2);
}
goto aa0;
bb1:i=i+1;
if (i<len) goto bbb;
}
void ulin0dd(int i0)
{ ads_real ds2;
ds2=ddar[2][5];
ddar[2][5]=0;
xka1=ddar[i0][1]; yka1=ddar[i0][2]; xka2=ddar[i0][3]; yka2=ddar[i0][4];
ulin0dda();
ddar[2][5]=ds2;
}
void ularc(void)
{
// ads_real ds;
ads_ssadd(NULL,NULL,ensspp0);
ads_ssadd(entch,ensspp0,ensspp0);
arry[2][5]=0;
arry[1][1]=xka1; arry[1][2]=yka1;
arry[1][3]=karr; arry[1][4]=kaq1;
arry[1][5]=6; arry[1][6]=kaq2;
ularc3();
if (arry[2][5]==0) goto sdd;
itmen=0;
// ads_printf(_T("\n111 kaq1=%f,kaq2=%f,karr=%f"),kaq1,kaq2,karr);
yyyq();
if (kaq2<kaq1+359) yyyqa();
// ads_printf(_T("\n111 end kaq1=%f,kaq2=%f"),kaq1,kaq2);
arry[1][1]=xka1; arry[1][2]=yka1;
arry[1][3]=karr; arry[1][4]=kaq1;
arry[1][5]=6; arry[1][6]=kaq2;
// hxucirarry(1,7);
// TCHAR dxfnam[40];
// ads_getstring(5,NULL,dxfnam);
if (arry[2][5]==6) {
xka1=arry[2][1]; yka1=arry[2][2];
karr=arry[2][3]; kaq1=arry[2][4];
kaq2=arry[2][6];
// ads_printf(_T("\n222 kaq1=%f,kaq2=%f,karr=%f"),kaq1,kaq2,karr);
yyyq();
if (kaq2<kaq1+359) yyyqa();
// ads_printf(_T("\n222 end kaq1=%f,kaq2=%f"),kaq1,kaq2);
arry[2][1]=xka1; arry[2][2]=yka1;
arry[2][3]=karr; arry[2][4]=kaq1;
arry[2][5]=6; arry[2][6]=kaq2;
// hxucirarry(2,2);
// TCHAR dxfnam[40];
// ads_getstring(5,NULL,dxfnam);
}
if ((arry[1][5]==6)&&(arry[2][5]==6)) {
ularc4(1);
ularc4(2); }
if ((arry[1][5]==6)&&(arry[2][5]==6)) {
ularcdote();
}
if (ientd==0) addentd();
sdd:ssdelenpp0();
ads_ssfree(ensspp0);
}
void qyxpoint(void)
{
ads_real x0,y0,d1,d2;
ads_real dx,dy,x1,y1,q,dd,dh,dx1,dx2,r1,r2;
ads_real xj1,yj1,xj2,yj2,x01,y01,x02,y02;
arrysa[3][5]=0;
x01=arrysa[1][1]; y01=arrysa[1][2]; r1=arrysa[1][3];
x02=arrysa[2][1]; y02=arrysa[2][2]; r2=arrysa[2][3];
dx=x01-x02;
dy=y01-y02;
dd=sqrt(dx*dx+dy*dy);
dx=r1+r2;
if ((dd>dx)||(dd<jsjdu)) return;
if (r1<r2) {
dy=r1+dd;
if (dy<r2) return; }
if (r2<r1) {
dy=r2+dd;
if (dy<r1) return; }
dx2=(r2*r2-r1*r1+dd*dd)/(2*dd);
dx1=dd-dx2;
dh=r2*r2-dx2*dx2;
if (dh<0) return;
dh=sqrt(dh);
qjadu(x01,y01,x02,y02);
q=qhcjc*pi314/180;
x1=x01+dx1*cos(q);
y1=y01+dx1*sin(q);
q=(qhcjc+90)*pi314/180;
xj1=x1+dh*cos(q);
yj1=y1+dh*sin(q);
q=(qhcjc-90)*pi314/180;
xj2=x1+dh*cos(q);
yj2=y1+dh*sin(q);
qjadu(x01,y01,x02,y02);
q=(qhcjc+90)*pi314/180;
x0=x01+1000*cos(q);
y0=y01+1000*sin(q);
dx=x0-xj1;
dy=y0-yj1;
d1=sqrt(dx*dx+dy*dy);
dx=x0-xj2;
dy=y0-yj2;
d2=sqrt(dx*dx+dy*dy);
arrysa[3][1]=xj1; arrysa[3][2]=yj1;
arrysa[3][3]=xj2; arrysa[3][4]=yj2;
if (d2<d1) {
arrysa[3][1]=xj2; arrysa[3][2]=yj2;
arrysa[3][3]=xj1; arrysa[3][4]=yj1; }
arrysa[3][5]=200;
}
void ularc3(void)
{ int i,id;
ads_real q,dq;
ads_real dd3[5][3];
// dx=xka1-xka2;
// dy=yka1-yka2;
// d1=sqrt(dx*dx+dy*dy);
// qjadu(xka1,yka1,xka2,yka2);
q=(kaq1+kaq2)/2;
q=q*pi314/180;
dd3[1][1]=xka1+karr*cos(q);
dd3[1][2]=yka1+karr*sin(q);
dq=kaq2-kaq1;
q=kaq1+dq/4;
q=q*pi314/180;
dd3[2][1]=xka1+karr*cos(q);
dd3[2][2]=yka1+karr*sin(q);
q=kaq1+3*dq/4;
q=q*pi314/180;
dd3[3][1]=xka1+karr*cos(q);
dd3[3][2]=yka1+karr*sin(q);
id=4;
itmen=0;
i=1;
aa1:ularc3a(dd3[i][1],dd3[i][2]);
if (itmen==3) return;
i=i+1;
if (i<id) goto aa1;
}
void ularc3a(ads_real x0,ads_real y0)
{
struct resbuf *ebup,*rb;
ads_name ss1,en;
int typi;
Adesk::Int32 i,len;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T("");
ads_real q0,q,dx,dy,d1,x1,y1;
ads_real d0,rr,q1,q2,dq;
ads_point p01,p02;
d0=2000;
arry[2][5]=0;
qjadu(xka1,yka1,x0,y0);
q0=qhcjc;
dx=dswa500;
if (dx<whou) dx=whou;
q=qhcjc*pi314/180;
p01[0]=x0+dx*cos(q); p01[1]=y0+dx*sin(q); p01[2]=0;
p02[0]=x0-dx*cos(q); p02[1]=y0-dx*sin(q); p02[2]=0;
ul112l(p01[0],p01[1],p02[0],p02[1],ds111);
//modified by whl on 060323
//RBList mask(RTDXF0, _T("ARC,CIRCLE"), 8, _T("WALL*"), NULL);
XString sLayer;
sLayer<<_T("WALL*,")<<LAY_WALL;
RBList mask(RTDXF0, _T("ARC,CIRCLE"), 8,(const TCHAR*)sLayer, NULL);
if (ads_ssget(_T("C"),p01,p02,mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto bbb;
return;
bbb:ads_ssname(ss1,i,en);
ebup=ads_entget(en);
if (ebup==NULL) goto bb1;
q1=0; q2=2*pi314;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==40) rr=rb->resval.rreal;
if (typi==50) q1=rb->resval.rreal;
if (typi==51) q2=rb->resval.rreal;
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
}
ads_relrb(ebup);
ads_relrb(rb);
//if ((txtnam8[0]==_T('W'))&&(txtnam8[1]==_T('A'))&&(txtnam8[2]==_T('L'))&&(txtnam8[3]==_T('L'))) goto bbwa;
// goto bb1;
//bbwa:
if ((txtdxf0[0]==_T('A'))&&(txtdxf0[1]==_T('R'))&&(txtdxf0[2]==_T('C'))) goto arc;
if ((txtdxf0[0]==_T('C'))&&(txtdxf0[1]==_T('I'))&&(txtdxf0[2]==_T('R'))&&(txtdxf0[3]==_T('C'))&&(txtdxf0[4]==_T('L'))&&(txtdxf0[5]==_T('E'))) goto arc;
goto bb1;
arc:dx=x1-xka1; dy=y1-yka1;
d1=sqrt(dx*dx+dy*dy);
if (d1>10*ds111) goto bb1;
d1=fabs(karr-rr);
if ((d1<d0)&&(d1>ds111)) {
d0=d1;
q1=q1*180/pi314;
q2=q2*180/pi314;
if (q2<q1) q2=q2+360;
dq=q2-q1;
arry[2][1]=x1; arry[2][2]=y1; arry[2][3]=rr;
arry[2][4]=q1; arry[2][5]=6; arry[2][6]=q2;
if (dq>359) {
arry[2][4]=arry[1][4];
arry[2][6]=arry[1][6];
}
}
bb1:i=i+1;
if (i<len) goto bbb;
ads_ssfree(ss1);
if (d0<2000) {
itmen=3;
}
}
void ularc4(int i0)
{
struct resbuf *ebup,*rb;
ads_name ss1,en;
int typi;
Adesk::Int32 i,len;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T("");
ads_real x0,y0,q,dx,dy,d1,d2,x1,y1,x2,y2,rr0;
ads_real rr,q1,q2,q01,q02;
ads_point p01,p02;
x0=arry[i0][1]; y0=arry[i0][2];
rr0=arry[i0][3];
q01=arry[i0][4]-0.001;
q02=arry[i0][6]+0.001;
dx=arry[i0][3]+ds111;
p01[0]=x0-dx; p01[1]=y0-dx; p01[2]=0;
p02[0]=x0+dx; p02[1]=y0+dx; p02[2]=0;
ul112l(p01[0],p01[1],p02[0],p02[1],ds111);
//modified by whl on 060323
//RBList mask(RTDXF0, _T("LINE,ARC"), 8, _T("WALL*"), NULL);
XString sLayer;
sLayer<<_T("WALL*,")<<LAY_WALL;
RBList mask(RTDXF0, _T("LINE,ARC"), 8,(const TCHAR*)sLayer, NULL);
if (ads_ssget(_T("C"),p01,p02,mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto bbb;
return;
bbb:ads_ssname(ss1,i,en);
ebup=ads_entget(en);
if (ebup==NULL) goto bb1;
q1=0; q2=2*pi314;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==40) rr=rb->resval.rreal;
if (typi==50) q1=rb->resval.rreal;
if (typi==51) q2=rb->resval.rreal;
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==11) {
x2=rb->resval.rpoint[0];
y2=rb->resval.rpoint[1]; }
}
ads_relrb(ebup);
ads_relrb(rb);
//if ((txtnam8[0]==_T('W'))&&(txtnam8[1]==_T('A'))&&(txtnam8[2]==_T('L'))&&(txtnam8[3]==_T('L'))) goto bbwa;
// goto bb1;
//bbwa:
if ((txtdxf0[0]==_T('A'))&&(txtdxf0[1]==_T('R'))&&(txtdxf0[2]==_T('C'))) goto arc;
if ((txtdxf0[0]==_T('L'))&&(txtdxf0[1]==_T('I'))&&(txtdxf0[2]==_T('N'))&&(txtdxf0[3]==_T('E'))) goto lin;
goto bb1;
lin:qjadu(x0,y0,x1,y1);
q=qhcjc;
if ((q>q01)&&(q<q02)||(q>q01-360)&&(q<q02-360)||(q>q01+360)&&(q<q02+360)) goto bblin;
qjadu(x0,y0,x2,y2);
q=qhcjc;
if ((q>q01)&&(q<q02)||(q>q01-360)&&(q<q02-360)||(q>q01+360)&&(q<q02+360)) goto bblin;
goto bb1;
bblin:dx=x1-x0; dy=y1-y0;
rr=sqrt(dx*dx+dy*dy);
d1=fabs(arry[1][3]-rr);
d2=fabs(arry[2][3]-rr);
if ((d1>2*ds111)&&(d2>2*ds111)) goto bb1;
dx=x2-x0; dy=y2-y0;
rr=sqrt(dx*dx+dy*dy);
d1=fabs(arry[1][3]-rr);
d2=fabs(arry[2][3]-rr);
if ((d1>2*ds111)&&(d2>2*ds111)) goto bb1;
ads_ssadd(en,ensspp0,ensspp0);
goto bb1;
arc:dx=x1-x0; dy=y1-y0;
d1=sqrt(dx*dx+dy*dy);
if (d1>10*ds111) goto bb1;
d1=fabs(rr0-rr);
if (d1>ds111) goto bb1;
q=q1*180/pi314;
if ((q>q01)&&(q<q02)||(q>q01-360)&&(q<q02-360)||(q>q01+360)&&(q<q02+360)) goto bb20;
goto bb1;
bb20: q=q2*180/pi314;
if ((q>q01)&&(q<q02)||(q>q01-360)&&(q<q02-360)||(q>q01+360)&&(q<q02+360)) goto bb30;
goto bb1;
bb30:ads_ssadd(en,ensspp0,ensspp0);
bb1:i=i+1;
if (i<len) goto bbb;
ads_ssfree(ss1);
}
void ularcdote(void)
{
struct resbuf *ebup,*rb;
ads_name ss1,en;
int typi;
Adesk::Int32 i,len;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T("");
ads_real x0,y0,q,dq,dx,dy,d1,x1,y1,rr1,rr2,rr0;
ads_real rr,q0,q1,q2;
ads_point p01,p02;
x0=arry[1][1]; y0=arry[1][2];
rr1=arry[1][3];
if (rr1>arry[2][3]) rr1=arry[2][3];
rr2=arry[1][3];
if (rr2<arry[2][3]) rr2=arry[2][3];
rr0=(rr2+rr1)/2;
whouy=(rr2-rr1)/2;
whouz=whouy;
//ads_printf(_T("\n arry[1][4]=%f,arry[1][6]=%f"),arry[1][4],arry[1][6]);
//ads_printf(_T("\n arry[2][4]=%f,arry[2][6]=%f"),arry[2][4],arry[2][6]);
dq=(arry[1][6]-arry[1][4]);
if (dq>355) {
q1=arry[2][4]; q2=arry[2][6];
goto aaa; }
dq=(arry[2][6]-arry[2][4]);
if (dq>355) {
q1=arry[1][4]; q2=arry[1][6];
goto aaa; }
q1=arry[1][4];
if (q1<arry[2][4]) q1=arry[2][4];
q2=arry[1][6];
if (q2>arry[2][6]) q2=arry[2][6];
// ads_printf(_T("\n q1=%f,q2=%f"),q1,q2);
if (q2<q1) q2=q2+360;
if (q2>q1+360) q2=q2-360;
aaa: arry[1][4]=q1; arry[1][6]=q2;
arry[2][4]=q1; arry[2][6]=q2;
dq=q2-q1;
if (dq<0.001) return;
q0=(q1+q2)/2;
dx=arry[1][3];
if (dx<arry[2][3]) dx=arry[2][3];
p01[0]=x0-dx; p01[1]=y0-dx; p01[2]=0;
p02[0]=x0+dx; p02[1]=y0+dx; p02[2]=0;
//modified by whl on 060323
//RBList mask(RTDXF0, _T("ARC,CIRCLE"), 8, LAY_AXIS, NULL);
XString sLayer;
sLayer<<_T("DOTE,")<<LAY_AXIS;
RBList mask(RTDXF0, _T("ARC,CIRCLE"), 8, (const TCHAR*)sLayer, NULL);
if (ads_ssget(_T("C"),p01,p02,mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto bbb;
return;
bbb:ads_ssname(ss1,i,en);
ebup=ads_entget(en);
if (ebup==NULL) goto bb1;
q1=0; q2=2*pi314;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==40) rr=rb->resval.rreal;
if (typi==50) q1=rb->resval.rreal;
if (typi==51) q2=rb->resval.rreal;
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
}
ads_relrb(ebup);
ads_relrb(rb);
//if ((txtnam8[0]==_T('D'))&&(txtnam8[1]==_T('O'))&&(txtnam8[2]==_T('T'))&&(txtnam8[3]==_T('E'))) goto bbwa;
// goto bb1;
//bbwa:
if ((txtdxf0[0]==_T('A'))&&(txtdxf0[1]==_T('R'))&&(txtdxf0[2]==_T('C'))) goto arc;
if ((txtdxf0[0]==_T('C'))&&(txtdxf0[1]==_T('I'))&&(txtdxf0[2]==_T('R'))&&(txtdxf0[3]==_T('C'))&&(txtdxf0[4]==_T('L'))&&(txtdxf0[5]==_T('E'))) goto arc;
goto bb1;
arc:dx=x1-x0; dy=y1-y0;
d1=sqrt(dx*dx+dy*dy);
if (d1>10*ds111) goto bb1;
q1=q1*180/pi314;
q2=q2*180/pi314;
if (q2<q1) q2=q2+360;
q=q0;
if ((q>q1)&&(q<q2)||(q>q1-360)&&(q<q2-360)||(q>q1+360)&&(q<q2+360)) goto bb20;
goto bb1;
bb20:if ((rr<rr1-0.001)||(rr>rr2+0.001)) goto bb1;
rr0=rr;
whouy=rr2-rr;
if (whouy<0) whouy=0;
whouz=rr-rr1;
if (whouz<0) whouz=0;
bb1:i=i+1;
if (i<len) goto bbb;
ads_ssfree(ss1);
p01[0]=x0; p01[1]=y0; p01[2]=0;
//ads_printf(_T("\n arry[1][4]=%f,arry[1][6]=%f"),arry[1][4],arry[1][6]);
warc(p01,arry[1][4],arry[1][6],rr0);
}
void warc(ads_point p1,ads_real q1,ads_real q2,ads_real rr)
{ struct resbuf *rb;
ads_name en;
q1=q1*pi314/180;
q2=q2*pi314/180;
rb=ads_buildlist(RTDXF0,_T("ARC"),
6,_T("BYLAYER"),
8,_T("TDOTE"),
62,256,
10,p1,
40,rr,
50,q1,
51,q2,
39,3000.0,
-3,
1001,_T("TDOTE"),
1040,whouz,
1040,whouy,
NULL);
ads_entmake(rb);
ads_relrb(rb);
if (ads_entlast(en)==RTNORM) {
ads_ssadd(en,endd0,endd0);
}
}
void ulendd(void)
{ struct resbuf apps,*ebup,*rb;
ads_name en;
int typi,it;
Adesk::Int32 i,len;
ads_real x1,y1,x2,y2,gs1,gs2,q1,q2,rr;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T(""),buf[40]=_T("");
i=0;
if (ads_sslength(endd0,&len)==RTNORM) goto bbb;
return;
bbb:if (len==0) return;
ads_ssname(endd0,i,en);
apps.restype=RTSTR;
_tcscpy(buf,_T("TDOTE"));
apps.resval.rstring=buf;
apps.rbnext=NULL;
ebup=ads_entgetx(en,&apps);
if (ebup==NULL) goto bb1;
it=0; gs1=0; gs2=0;
q1=0; q2=2*pi314;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==40) rr=rb->resval.rreal;
if (typi==50) q1=rb->resval.rreal;
if (typi==51) q2=rb->resval.rreal;
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==11) {
x2=rb->resval.rpoint[0];
y2=rb->resval.rpoint[1]; }
if (typi==1040) {
it=it+1;
if (it==1) gs1=rb->resval.rreal;
if (it==2) gs2=rb->resval.rreal;
}
}
ads_relrb(ebup);
ads_relrb(rb);
// ads_printf(_T("\ngs1=%f,gs2=%f"),gs1,gs2);
if ((txtdxf0[0]==_T('A'))&&(txtdxf0[1]==_T('R'))&&(txtdxf0[2]==_T('C'))) {
q1=q1*180/pi314;
q2=q2*180/pi314;
if (q2<q1) q2=q2+360;
// ads_printf(_T("\nx1=%f,y1=%f,q1=%f,q2=%f"),x1,y1,q1,q2);
// ads_printf(_T("\ngs1=%f,gs2=%f"),gs1,gs2);
xka1=x1; yka1=y1; karr=rr;
kaq1=q1;
kaq2=q2;
ulddarc(1);
ulddarc(2);
q1=kaq1*pi314/180;
q2=kaq2*pi314/180;
apps.restype=RTSTR;
_tcscpy(buf,_T("TDOTE"));
apps.resval.rstring=buf;
apps.rbnext=NULL;
ebup=ads_entgetx(en,&apps);
if (ebup==NULL) goto bb1;
it=0;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==50) rb->resval.rreal=q1;
if (typi==51) rb->resval.rreal=q2;
}
ads_entmod(ebup);
ads_relrb(ebup);
ads_relrb(rb);
goto bb1;
}
// ads_printf(_T("\nx1=%f,y1=%f,x2=%f,y2=%f"),x1,y1,x2,y2);
// ads_printf(_T("\ngs1=%f,gs2=%f"),gs1,gs2);
xdz1=x1; ydz1=y1;
xdz2=x2; ydz2=y2;
uldda(1);
uldda(2);
apps.restype=RTSTR;
_tcscpy(buf,_T("TDOTE"));
apps.resval.rstring=buf;
apps.rbnext=NULL;
ebup=ads_entgetx(en,&apps);
if (ebup==NULL) goto bb1;
it=0;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==10) {
rb->resval.rpoint[0]=xdz1;
rb->resval.rpoint[1]=ydz1; }
if (typi==11) {
rb->resval.rpoint[0]=xdz2;
rb->resval.rpoint[1]=ydz2; }
}
ads_entmod(ebup);
ads_relrb(ebup);
ads_relrb(rb);
bb1:i=i+1;
if (i<len) goto bbb;
}
void uldda(int it0)
{ struct resbuf *ebup,*rb;
ads_name ss1,en;
int typi,itwa;
Adesk::Int32 i,len;
ads_real dx,dy,d1,d0,x1,y1,x2,y2,xp1,yp1,xp2,yp2;
ads_real dd,q0,q,q1,q2,dq,xp0,yp0,rr;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T("");
ads_point p01,p02;
ads_point p1,p2,p3,p4,pp;
p1[2]=0; p2[2]=0;
p3[2]=0; p4[2]=0;
d0=2000;
qjadu(xdz2,ydz2,xdz1,ydz1);
q0=qhcjc;
q=qhcjc*pi314/180;
dx=dswa500;
if (dx<whou) dx=whou;
xp1=xdz1+dx*cos(q); yp1=ydz1+dx*sin(q);
xp2=xdz1; yp2=ydz1;
if (it0==2) {
qjadu(xdz1,ydz1,xdz2,ydz2);
q=qhcjc*pi314/180;
dx=dswa500;
if (dx<whou) dx=whou;
xp1=xdz2+dx*cos(q); yp1=ydz2+dx*sin(q);
xp2=xdz2; yp2=ydz2;
}
p01[0]=xp1; p01[1]=yp1; p01[2]=0;
p02[0]=xp2; p02[1]=yp2; p02[2]=0;
// ul112l(p01[0],p01[1],p02[0],p02[1],ds111);
RBList mask(RTDXF0,_T("LINE,ARC,CIRCLE"),NULL);
if (ads_ssget(_T("C"),p01,p02,mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto bbb;
return;
bbb:ads_ssname(ss1,i,en);
ebup=ads_entget(en);
if (ebup==NULL) goto mbb1;
q1=0; q2=2*pi314;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==40) rr=rb->resval.rreal;
if (typi==50) q1=rb->resval.rreal;
if (typi==51) q2=rb->resval.rreal;
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==11) {
x2=rb->resval.rpoint[0];
y2=rb->resval.rpoint[1]; }
}
ads_relrb(ebup);
ads_relrb(rb);
itwa=0;
//modified by whl on 060323
//if (_tcsicmp(txtnam8, LAY_AXIS)==0) goto bbwa;
if (_tcsicmp(txtnam8, _T("DOTE"))==0||_tcsicmp(txtnam8, LAY_AXIS)==0) goto bbwa;
//modified by whl on 060323
//if (ads_wcmatch(txtnam8, _T("WALL*"))==RTNORM) {
if (ads_wcmatch(txtnam8, _T("WALL*"))==RTNORM||ads_wcmatch(txtnam8, LAY_WALL)==RTNORM) {
itwa=1;
goto bbwa; }
goto mbb1;
bbwa:if ((txtdxf0[0]==_T('L'))&&(txtdxf0[1]==_T('I'))&&(txtdxf0[2]==_T('N'))&&(txtdxf0[3]==_T('E'))) goto lin;
if ((txtdxf0[0]==_T('A'))&&(txtdxf0[1]==_T('R'))&&(txtdxf0[2]==_T('C'))) goto arc;
if ((txtdxf0[0]==_T('C'))&&(txtdxf0[1]==_T('I'))&&(txtdxf0[2]==_T('R'))&&(txtdxf0[3]==_T('C'))&&(txtdxf0[4]==_T('L'))&&(txtdxf0[5]==_T('E'))) goto arc;
goto mbb1;
arc:if (itwa==1) goto mbb1;
if (rr<ds111) goto mbb1;
q1=q1*180/pi314;
q2=q2*180/pi314;
if (q2<q1) q2=q2+360;
arrysa[1][1]=xp1; arrysa[1][2]=yp1;
arrysa[1][3]=xp2; arrysa[1][4]=yp2;
arrysa[1][5]=0; arrysa[1][6]=0;
arrysa[2][1]=x1; arrysa[2][2]=y1;
arrysa[2][3]=rr; arrysa[2][4]=q1;
arrysa[2][6]=6; arrysa[2][6]=q2;
arrysa[3][5]=200;
qlajd();
if (arrysa[3][5]==0) {
pp[0]=arrysa[3][1];
pp[1]=arrysa[3][2];
dx=pp[0]-xp2; dy=pp[1]-yp2;
d1=sqrt(dx*dx+dy*dy);
if (d1<d0) {
d0=d1;
xp0=pp[0]; yp0=pp[1];
}
}
goto mbb1;
lin:dx=x1-x2; dy=y1-y2;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) goto mbb1;
// qjadu(xka1,yka1,xka2,yka2);
qjadu(xdz2,ydz2,xdz1,ydz1);
q1=qhcjc;
qjadu(x1,y1,x2,y2);
dq=q1-qhcjc;
if (dq<0) dq=-dq;
qq1:if (dq>269) { dq=dq-180; goto qq1; }
if ((dq<30)||(dq>150)) goto mbb1;
if (itwa==1) {
if ((dq<89)||(dq>91)) goto mbb1;
}
qjadu(xp1,yp1,xp2,yp2);
q=(qhcjc-180)*pi314/180;
p1[0]=xp1+ds111*cos(q); p1[1]=yp1+ds111*sin(q);
q=qhcjc*pi314/180;
p2[0]=xp2+ds111*cos(q); p2[1]=yp2+ds111*sin(q);
p3[0]=x1; p3[1]=y1;
p4[0]=x2; p4[1]=y2;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) {
dx=pp[0]-xp2; dy=pp[1]-yp2;
d1=sqrt(dx*dx+dy*dy);
if (itwa==0) {
if (d1<d0) {
d0=d1;
xp0=pp[0]; yp0=pp[1];
}
goto mbb1;
}
if ((d1<d0)&&(d1<ds111)) {
dx=pp[0]-x1; dy=pp[1]-y1;
dd=sqrt(dx*dx+dy*dy);
if (dd<10) goto mbb1;
dx=pp[0]-x2; dy=pp[1]-y2;
dd=sqrt(dx*dx+dy*dy);
if (dd<10) goto mbb1;
d0=d1;
xp0=pp[0]; yp0=pp[1];
}
}
mbb1:i=i+1;
if (i<len) goto bbb;
ads_ssfree(ss1);
if (d0<2000) {
if (it0==1) {
xp2=xdz1; yp2=ydz1;
q=q0*pi314/180;
xdz1=xdz1+d0*cos(q);
ydz1=ydz1+d0*sin(q);
xp1=xdz1; yp1=ydz1;
if (d0>10) ulddc(it0,xp1,yp1,xp2,yp2);
}
if (it0==2) {
xp2=xdz2; yp2=ydz2;
q=(q0+180)*pi314/180;
xdz2=xdz2+d0*cos(q);
ydz2=ydz2+d0*sin(q);
xp1=xdz2; yp1=ydz2;
if (d0>10) ulddc(it0,xp1,yp1,xp2,yp2);
}
}
if (fabs(d0-2000)<1.0E-6) {
qjadu(xdz2,ydz2,xdz1,ydz1);
q=qhcjc*pi314/180;
dx=dswa500;
if (dx<whou) dx=whou;
xp1=xdz1+dx*cos(q); yp1=ydz1+dx*sin(q);
xp2=xdz1; yp2=ydz1;
if (it0==2) {
qjadu(xdz1,ydz1,xdz2,ydz2);
q=qhcjc*pi314/180;
dx=dswa500;
if (dx<whou) dx=whou;
xp1=xdz2+dx*cos(q); yp1=ydz2+dx*sin(q);
xp2=xdz2; yp2=ydz2;
}
ulddb(it0,xp1,yp1,xp2,yp2);
}
}
void ulddb(int it0,ads_real xp1,ads_real yp1,ads_real xp2,ads_real yp2)
{
struct resbuf *ebup,*rb;
ads_name ss1,en;
int typi;
Adesk::Int32 i,len;
ads_real dq0,q0,q,q1,q2,dq,x1,y1,rr,x2,y2,dx,dy,d1,d0;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T("");
ads_point p01,p02;
ads_point p1,p2,p3,p4,pp;
p1[2]=0; p2[2]=0;
p3[2]=0; p4[2]=0;
qjadu(xdz2,ydz2,xdz1,ydz1);
q0=qhcjc;
d0=2000;
x1=(xp1+xp2)/2; y1=(yp1+yp2)/2;
dx=dswa500;
if (dx<whou) dx=whou;
p01[0]=x1-dx; p01[1]=y1-dx; p01[2]=0;
p02[0]=x1+dx; p02[1]=y1+dx; p02[2]=0;
RBList mask(RTDXF0, _T("LINE,ARC,CIRCLE"), 8, _T("TDOTE"), NULL);
if (ads_ssget(_T("C"),p01,p02,mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto bbb;
return;
bbb:ads_ssname(ss1,i,en);
ebup=ads_entget(en);
if (ebup==NULL) goto mbb1;
q1=0; q2=2*pi314;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==40) rr=rb->resval.rreal;
if (typi==50) q1=rb->resval.rreal;
if (typi==51) q2=rb->resval.rreal;
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==11) {
x2=rb->resval.rpoint[0];
y2=rb->resval.rpoint[1]; }
}
ads_relrb(ebup);
ads_relrb(rb);
//if ((txtnam8[0]==_T('T'))&&(txtnam8[1]==_T('D'))&&(txtnam8[2]==_T('O'))&&(txtnam8[3]==_T('T'))&&(txtnam8[4]==_T('E'))) goto bbwa;
// goto mbb1;
//bbwa:
if ((txtdxf0[0]==_T('L'))&&(txtdxf0[1]==_T('I'))&&(txtdxf0[2]==_T('N'))&&(txtdxf0[3]==_T('E'))) goto lin;
if ((txtdxf0[0]==_T('A'))&&(txtdxf0[1]==_T('R'))&&(txtdxf0[2]==_T('C'))) goto arc;
if ((txtdxf0[0]==_T('C'))&&(txtdxf0[1]==_T('I'))&&(txtdxf0[2]==_T('R'))&&(txtdxf0[3]==_T('C'))&&(txtdxf0[4]==_T('L'))&&(txtdxf0[5]==_T('E'))) goto arc;
goto mbb1;
arc: if (rr<ds111) goto mbb1;
q1=q1*180/pi314;
q2=q2*180/pi314;
if (q2<q1) q2=q2+360;
arrysa[1][1]=xp1; arrysa[1][2]=yp1;
arrysa[1][3]=xp2; arrysa[1][4]=yp2;
arrysa[1][5]=0; arrysa[1][6]=0;
dx=dswa500;
if (dx<whou) dx=whou;
dq0=360*dx/2*pi314*rr;
arrysa[2][1]=x1; arrysa[2][2]=y1;
arrysa[2][3]=rr; arrysa[2][4]=q1-dq0;
arrysa[2][6]=6; arrysa[2][6]=q2+dq0;
arrysa[3][5]=200;
qlajd();
if (fabs(arrysa[3][5])<1.0E-6) {
pp[0]=arrysa[3][1];
pp[1]=arrysa[3][2];
dx=pp[0]-xp2; dy=pp[1]-yp2;
d1=sqrt(dx*dx+dy*dy);
if (d1<d0) {
d0=d1;
}
}
goto mbb1;
lin:dx=x1-x2; dy=y1-y2;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) goto mbb1;
qjadu(xdz1,ydz1,xdz2,ydz2);
q1=qhcjc;
qjadu(x1,y1,x2,y2);
dq=q1-qhcjc;
if (dq<0) dq=-dq;
qq1:if (dq>269) { dq=dq-180; goto qq1; }
if ((dq<30)||(dq>150)) goto mbb1;
dx=dswa500;
if (dx<whou) dx=whou;
qjadu(x1,y1,x2,y2);
q=(qhcjc-180)*pi314/180;
p1[0]=x1+dx*cos(q); p1[1]=y1+dx*sin(q);
q=qhcjc*pi314/180;
p2[0]=x2+dx*cos(q); p2[1]=y2+dx*sin(q);
p3[0]=xp1; p3[1]=yp1;
p4[0]=xp2; p4[1]=yp2;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) {
dx=pp[0]-xp2; dy=pp[1]-yp2;
d1=sqrt(dx*dx+dy*dy);
if (d1<d0) {
d0=d1;
}
}
mbb1:i=i+1;
if (i<len) goto bbb;
ads_ssfree(ss1);
if (d0<2000) {
if (it0==1) {
q=q0*pi314/180;
xdz1=xdz1+d0*cos(q);
ydz1=ydz1+d0*sin(q);
}
if (it0==2) {
q=(q0+180)*pi314/180;
xdz2=xdz2+d0*cos(q);
ydz2=ydz2+d0*sin(q);
}
}
}
void ulddc(int it0,ads_real xp1,ads_real yp1,ads_real xp2,ads_real yp2)
{
struct resbuf *ebup,*rb;
ads_name ss1,en;
int typi;
Adesk::Int32 i,len;
ads_real rr,q0,q,q1,q2,dq,x1,y1,x2,y2,dx,dy,d1,d0,xp0,yp0;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T("");
ads_point p01,p02;
ads_point p1,p2,p3,p4,pp;
p1[2]=0; p2[2]=0;
p3[2]=0; p4[2]=0;
qjadu(xdz2,ydz2,xdz1,ydz1);
q0=qhcjc;
d0=2000;
x1=(xp1+xp2)/2; y1=(yp1+yp2)/2;
dx=xp1-xp2; dy=yp1-yp2;
d1=sqrt(dx*dx+dy*dy);
if (d1<10) return;
p01[0]=x1-d1; p01[1]=y1-d1; p01[2]=0;
p02[0]=x1+d1; p02[1]=y1+d1; p02[2]=0;
RBList mask(RTDXF0,_T("LINE,ARC"),8,_T("TDOTE"),NULL);
if (ads_ssget(_T("C"),p01,p02,mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto bbb;
return;
bbb:ads_ssname(ss1,i,en);
ebup=ads_entget(en);
if (ebup==NULL) goto mbb1;
q1=0; q2=2*pi314;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==40) rr=rb->resval.rreal;
if (typi==50) q1=rb->resval.rreal;
if (typi==51) q2=rb->resval.rreal;
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==11) {
x2=rb->resval.rpoint[0];
y2=rb->resval.rpoint[1]; }
}
ads_relrb(ebup);
ads_relrb(rb);
//if ((txtnam8[0]==_T('T'))&&(txtnam8[1]==_T('D'))&&(txtnam8[2]==_T('O'))&&(txtnam8[3]==_T('T'))&&(txtnam8[4]==_T('E'))) goto bbwa;
// goto mbb1;
//bbwa:
if ((txtdxf0[0]==_T('L'))&&(txtdxf0[1]==_T('I'))&&(txtdxf0[2]==_T('N'))&&(txtdxf0[3]==_T('E'))) goto lin;
if ((txtdxf0[0]==_T('A'))&&(txtdxf0[1]==_T('R'))&&(txtdxf0[2]==_T('C'))) goto arc;
goto mbb1;
arc:if (rr<ds111) goto mbb1;
q1=q1*180/pi314;
q2=q2*180/pi314;
if (q2<q1) q2=q2+360;
dx=dswa500;
if (dx<whou) dx=whou;
dq=360*dx/(2*pi314*rr);
q1=q1-dq;
q2=q2+dq;
arrysa[1][1]=xp1; arrysa[1][2]=yp1;
arrysa[1][3]=xp2; arrysa[1][4]=yp2;
arrysa[1][5]=0; arrysa[1][6]=0;
arrysa[2][1]=x1; arrysa[2][2]=y1;
arrysa[2][3]=rr; arrysa[2][4]=q1;
arrysa[2][6]=6; arrysa[2][6]=q2;
arrysa[3][5]=200;
qlajd();
if (fabs(arrysa[3][5])<1.0E-6) {
pp[0]=arrysa[3][1];
pp[1]=arrysa[3][2];
dx=pp[0]-xp2; dy=pp[1]-yp2;
d1=sqrt(dx*dx+dy*dy);
if (d1<d0) {
d0=d1;
xp0=pp[0]; yp0=pp[1];
}
}
goto mbb1;
lin:dx=x1-x2; dy=y1-y2;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) goto mbb1;
qjadu(xdz1,ydz1,xdz2,ydz2);
q1=qhcjc;
qjadu(x1,y1,x2,y2);
dq=q1-qhcjc;
if (dq<0) dq=-dq;
qq1:if (dq>269) { dq=dq-180; goto qq1; }
if ((dq<30)||(dq>150)) goto mbb1;
dx=dswa500;
if (dx<whou) dx=whou;
qjadu(x1,y1,x2,y2);
q=(qhcjc-180)*pi314/180;
p1[0]=x1+dx*cos(q); p1[1]=y1+dx*sin(q);
q=qhcjc*pi314/180;
p2[0]=x2+dx*cos(q); p2[1]=y2+dx*sin(q);
p3[0]=xp1; p3[1]=yp1;
p4[0]=xp2; p4[1]=yp2;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) {
dx=pp[0]-xp2; dy=pp[1]-yp2;
d1=sqrt(dx*dx+dy*dy);
if (d1<d0) {
d0=d1;
xp0=pp[0]; yp0=pp[1];
}
}
mbb1:i=i+1;
if (i<len) goto bbb;
ads_ssfree(ss1);
if (d0<2000) {
if (it0==1) {
xdz1=xp0;
ydz1=yp0;
}
if (it0==2) {
xdz2=xp0;
ydz2=yp0;
}
}
}
void qlajd(void)
{ ads_real q01,q02;
ads_point pa,pb,pdd,pee,ppjd;
ads_real dx,dy,d,d0,x1,y1,q,rr;
ads_real xb1,yb1,xb2,yb2,xj1,yj1,xj2,yj2;
pa[2]=0; pb[2]=0;
pdd[2]=0; pee[2]=0;
pa[0]=arrysa[1][1];
pa[1]=arrysa[1][2];
pb[0]=arrysa[1][3];
pb[1]=arrysa[1][4];
xb1=arrysa[1][1];
yb1=arrysa[1][2];
xb2=arrysa[1][3];
yb2=arrysa[1][4];
d0=arrysa[3][4];
q01=arrysa[2][4]; q02=arrysa[2][6];
if (q01>q02) q01=q01-360;
q01=q01-0.01;
q02=q02+0.01;
qjadu(pa[0],pa[1],pb[0],pb[1]);
q=(qhcjc+90)*pi314/180;
x1=arrysa[2][1];
y1=arrysa[2][2];
rr=arrysa[2][3];
pdd[0]=x1; pdd[1]=y1;
pee[0]=x1+rr*cos(q);
pee[1]=y1+rr*sin(q);
if (ads_inters(pa,pb,pdd,pee,0,ppjd)==RTNORM) {
dx=x1-ppjd[0];
dy=y1-ppjd[1];
d=sqrt(dx*dx+dy*dy);
if (d>rr) return;
dx=rr*rr-d*d;
if (dx<0) dx=0;
dx=sqrt(dx);
q=qhcjc*pi314/180;
xj1=ppjd[0]+dx*cos(q);
yj1=ppjd[1]+dx*sin(q);
q=(qhcjc+180)*pi314/180;
xj2=ppjd[0]+dx*cos(q);
yj2=ppjd[1]+dx*sin(q);
qjadu(x1,y1,xj1,yj1);
if ((qhcjc>q01)&&(qhcjc<q02)||(qhcjc>q01-360)&&(qhcjc<q02-360)||(qhcjc>q01+360)&&(qhcjc<q02+360)) goto arc0a;
goto arc0b;
arc0a:if ((xj1<xb1-jsjdu)&&(xj1<xb2-jsjdu)||(xj1>xb1+jsjdu)&&(xj1>xb2+jsjdu)) goto arc0b;
if ((yj1<yb1-jsjdu)&&(yj1<yb2-jsjdu)||(yj1>yb1+jsjdu)&&(yj1>yb2+jsjdu)) goto arc0b;
arrysa[3][1]=xj1;
arrysa[3][2]=yj1;
arrysa[3][5]=0;
arc0b:qjadu(x1,y1,xj2,yj2);
if ((qhcjc>q01)&&(qhcjc<q02)||(qhcjc>q01-360)&&(qhcjc<q02-360)||(qhcjc>q01+360)&&(qhcjc<q02+360)) goto arc0c;
return;
arc0c:if ((xj2<xb1-jsjdu)&&(xj2<xb2-jsjdu)||(xj2>xb1+jsjdu)&&(xj2>xb2+jsjdu)) return;
if ((yj2<yb1-jsjdu)&&(yj2<yb2-jsjdu)||(yj2>yb1+jsjdu)&&(yj2>yb2+jsjdu)) return;
arrysa[3][1]=xj2;
arrysa[3][2]=yj2;
arrysa[3][5]=0;
}
}
void ulddarc(int it0)
{ struct resbuf *ebup,*rb;
ads_name ss1,en;
int typi,itwa;
Adesk::Int32 i,len;
ads_real dx,dy,d1,d0,x1,y1,x2,y2,xp1,yp1,xp2,yp2;
ads_real q,q1,q2,dq,xp0,yp0,rr,ds;
ads_real q01,q02;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T("");
ads_point p01,p02;
d0=2000;
dx=dswa500;
if (dx<whou) dx=whou;
ds=2*pi314*karr;
if (ds<0.1) return;
dq=360*dx/ds;
q01=kaq1;
q02=kaq1-dq;
if (it0==2) {
q01=kaq2;
q02=kaq2+dq;
}
q=q01*pi314/180;
xp1=xka1+karr*cos(q);
yp1=yka1+karr*sin(q);
q=q02*pi314/180;
xp2=xka1+karr*cos(q);
yp2=yka1+karr*sin(q);
if (it0==1) {
q02=kaq1;
q01=kaq1-dq;
}
// hlin(xp1,yp1,xp2,yp2,7);
x1=xp1; x2=xp2;
if (x1>x2) { x1=xp2; x2=xp1; }
y1=yp1; y2=yp2;
if (y1>y2) { y1=yp2; y2=yp1; }
dx=dswa500;
if (dx<whou) dx=whou;
p01[0]=x1-dx; p01[1]=y1-dx; p01[2]=0;
p02[0]=x2+dx; p02[1]=y2+dx; p02[2]=0;
// ul112l(p01[0],p01[1],p02[0],p02[1],ds111);
RBList mask(RTDXF0,_T("LINE"),NULL);
if (ads_ssget(_T("C"),p01,p02,mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto bbb;
return;
bbb:ads_ssname(ss1,i,en);
ebup=ads_entget(en);
if (ebup==NULL) goto mbb1;
q1=0; q2=2*pi314;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==40) rr=rb->resval.rreal;
if (typi==50) q1=rb->resval.rreal;
if (typi==51) q2=rb->resval.rreal;
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==11) {
x2=rb->resval.rpoint[0];
y2=rb->resval.rpoint[1]; }
}
ads_relrb(ebup);
ads_relrb(rb);
itwa=0;
//modified by whl on 060323
//if (_tcsicmp(txtnam8, LAY_AXIS)==0) goto bbwa;
if (_tcsicmp(txtnam8, _T("DOTE"))==0||_tcsicmp(txtnam8, LAY_AXIS)==0) goto bbwa;
if ((txtnam8[0]==_T('T'))&&(txtnam8[1]==_T('D'))&&(txtnam8[2]==_T('O'))&&(txtnam8[3]==_T('T'))&&(txtnam8[4]==_T('E'))) {
itwa=1;
goto bbwa;
}
// if ((txtnam8[0]==_T('W'))&&(txtnam8[1]==_T('A'))&&(txtnam8[2]==_T('L'))&&(txtnam8[3]==_T('L'))) {
// itwa=1;
// goto bbwa; }
goto mbb1;
bbwa:
//if ((txtdxf0[0]==_T('L'))&&(txtdxf0[1]==_T('I'))&&(txtdxf0[2]==_T('N'))&&(txtdxf0[3]==_T('E'))) goto lin;
//goto mbb1;
//lin:
dx=x1-x2; dy=y1-y2;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) goto mbb1;
if (itwa==1) {
dx=dswa500;
if (dx<whou) dx=whou;
qjadu(x1,y1,x2,y2);
q=(qhcjc-180)*pi314/180;
x1=x1+dx*cos(q);
y1=y1+dx*sin(q);
q=qhcjc*pi314/180;
x2=x2+dx*cos(q);
y2=y2+dx*sin(q);
}
arrysa[1][1]=x1; arrysa[1][2]=y1;
arrysa[1][3]=x2; arrysa[1][4]=y2;
arrysa[1][5]=0; arrysa[1][6]=0;
arrysa[2][1]=xka1; arrysa[2][2]=yka1;
arrysa[2][3]=karr; arrysa[2][4]=q01;
arrysa[2][6]=6; arrysa[2][6]=q02;
arrysa[3][5]=200;
qlajd();
// ads_printf(_T("\n arrysa[3][5]=%f,q01=%f,q02=%f"),arrysa[3][5],q01,q02);
if (fabs(arrysa[3][5])<1.0E-6) {
dx=arrysa[3][1]-xp1; dy=arrysa[3][2]-yp1;
d1=sqrt(dx*dx+dy*dy);
// ads_printf(_T("\n itwa=%d,d1=%f"),itwa,d1);
// hlin(arrysa[3][1],arrysa[3][2],arrysa[3][1]+400,arrysa[3][2]+400,3);
// hlin(xp1,yp1,xp1+400,yp1+400,2);
if (d1<d0) {
d0=d1;
xp0=arrysa[3][1]; yp0=arrysa[3][2];
}
}
mbb1:i=i+1;
if (i<len) goto bbb;
ads_ssfree(ss1);
if (d0<2000) {
if (it0==1) {
qjadu(xka1,yka1,xp0,yp0);
kaq1=qhcjc;
if (kaq1>kaq2) kaq1=kaq1-360;
if (kaq1<kaq2-360) kaq1=kaq1+360;
}
if (it0==2) {
qjadu(xka1,yka1,xp0,yp0);
kaq2=qhcjc;
if (kaq1>kaq2) kaq2=kaq2+360;
if (kaq1<kaq2-360) kaq2=kaq2-360;
}
}
if (d0==2000) ulddarcc(it0);
}
void ulddarcc(int it0)
{ struct resbuf *ebup,*rb;
ads_name ss1,en;
int typi,itwa;
Adesk::Int32 i,len;
ads_real dx,dy,d1,d0,x1,y1,x2,y2,xp1,yp1,xp2,yp2;
ads_real q,q1,q2,dq,xp0,yp0,rr,ds;
ads_real q01,q02;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T("");
ads_point p01,p02;
d0=2000;
dx=dswa500;
if (dx<whou) dx=whou;
ds=2*pi314*karr;
if (ds<0.1) return;
dq=360*dx/ds;
q01=kaq1-dq;
q02=kaq1;
if (it0==2) {
q01=kaq2;
q02=kaq2+dq; }
q=q01*pi314/180;
xp1=xka1+karr*cos(q);
yp1=yka1+karr*sin(q);
q=q02*pi314/180;
xp2=xka1+karr*cos(q);
yp2=yka1+karr*sin(q);
if (it0==1) {
q=q02*pi314/180;
xp1=xka1+karr*cos(q);
yp1=yka1+karr*sin(q);
q=q01*pi314/180;
xp2=xka1+karr*cos(q);
yp2=yka1+karr*sin(q);
}
// hlin(xp1,yp1,xp2,yp2,7);
dx=dswa500;
if (dx<whou) dx=whou;
x1=(xp1+xp2)/2; y1=(yp1+yp2)/2;
p01[0]=x1-dx; p01[1]=y1-dx; p01[2]=0;
p02[0]=x1+dx; p02[1]=y1+dx; p02[2]=0;
// ul112l(p01[0],p01[1],p02[0],p02[1],ds111);
RBList mask(RTDXF0,_T("LINE"),8,_T("TDOTE"),NULL);
if (ads_ssget(_T("C"),p01,p02,mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto bbb;
return;
bbb:ads_ssname(ss1,i,en);
ebup=ads_entget(en);
if (ebup==NULL) goto mbb1;
q1=0; q2=2*pi314;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==40) rr=rb->resval.rreal;
if (typi==50) q1=rb->resval.rreal;
if (typi==51) q2=rb->resval.rreal;
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==11) {
x2=rb->resval.rpoint[0];
y2=rb->resval.rpoint[1]; }
}
ads_relrb(ebup);
ads_relrb(rb);
itwa=0;
//if ((txtnam8[0]==_T('T'))&&(txtnam8[1]==_T('D'))&&(txtnam8[2]==_T('O'))&&(txtnam8[3]==_T('T'))&&(txtnam8[4]==_T('E'))) goto bbwa;
// goto mbb1;
//bbwa:if ((txtdxf0[0]==_T('L'))&&(txtdxf0[1]==_T('I'))&&(txtdxf0[2]==_T('N'))&&(txtdxf0[3]==_T('E'))) goto lin;
// goto mbb1;
//lin:
dx=x1-x2; dy=y1-y2;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) goto mbb1;
dx=dswa500;
if (dx<whou) dx=whou;
qjadu(x1,y1,x2,y2);
q=(qhcjc+180)*pi314/180;
x1=x1+dx*cos(q); y1=y1+dx*sin(q);
q=qhcjc*pi314/180;
x2=x2+dx*cos(q); y2=y2+dx*sin(q);
arrysa[1][1]=x1; arrysa[1][2]=y1;
arrysa[1][3]=x2; arrysa[1][4]=y2;
arrysa[1][5]=0; arrysa[1][6]=0;
arrysa[2][1]=xka1; arrysa[2][2]=yka1;
arrysa[2][3]=karr; arrysa[2][4]=q01;
arrysa[2][6]=6; arrysa[2][6]=q02;
arrysa[3][5]=200;
qlajd();
// ads_printf(_T("\n arrysa[3][5]=%f,q01=%f,q02=%f"),arrysa[3][5],q01,q02);
if (fabs(arrysa[3][5])<1.0E-6) {
dx=arrysa[3][1]-xp2; dy=arrysa[3][2]-yp2;
d1=sqrt(dx*dx+dy*dy);
if (d1<d0) {
d0=d1;
xp0=arrysa[3][1]; yp0=arrysa[3][2];
}
}
mbb1:i=i+1;
if (i<len) goto bbb;
ads_ssfree(ss1);
if (d0<2000) {
if (it0==1) {
qjadu(xka1,yka1,xp0,yp0);
kaq1=qhcjc;
if (kaq1>kaq2) kaq1=kaq1-360;
if (kaq1<kaq2-360) kaq1=kaq1+360;
}
if (it0==2) {
qjadu(xka1,yka1,xp0,yp0);
kaq2=qhcjc;
if (kaq1>kaq2) kaq2=kaq2+360;
if (kaq1<kaq2-360) kaq2=kaq2-360;
}
}
}
void ulenddzf(void)
{ struct resbuf apps,*ebup,*rb;
ads_name en;
int typi,it;
Adesk::Int32 i,len;
ads_real x1,y1,x2,y2,dx,dy,d1,gs1,gs2,q1,q2,rr;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T(""),buf[40]=_T("");
i=0;
if (ads_sslength(endd0,&len)==RTNORM) goto bbb;
return;
bbb:if (len==0) return;
ads_ssname(endd0,i,en);
apps.restype=RTSTR;
_tcscpy(buf,_T("TDOTE"));
apps.resval.rstring=buf;
apps.rbnext=NULL;
ebup=ads_entgetx(en,&apps);
if (ebup==NULL) goto bb1;
it=0; gs1=0; gs2=0;
q1=0; q2=2*pi314;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==40) rr=rb->resval.rreal;
if (typi==50) q1=rb->resval.rreal;
if (typi==51) q2=rb->resval.rreal;
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==11) {
x2=rb->resval.rpoint[0];
y2=rb->resval.rpoint[1]; }
if (typi==1040) {
it=it+1;
if (it==1) gs1=rb->resval.rreal;
if (it==2) gs2=rb->resval.rreal;
}
}
ads_relrb(ebup);
ads_relrb(rb);
// ads_printf(_T("\ngs1=%f,gs2=%f"),gs1,gs2);
if ((txtdxf0[0]==_T('A'))&&(txtdxf0[1]==_T('R'))&&(txtdxf0[2]==_T('C'))) {
xka1=x1; yka1=y1; karr=rr;
kaq1=q1;
kaq2=q2;
ularczf();
goto bb1;
}
if ((txtdxf0[0]==_T('L'))&&(txtdxf0[1]==_T('I'))&&(txtdxf0[2]==_T('N'))&&(txtdxf0[3]==_T('E'))) {
xdz1=x1; ydz1=y1;
xdz2=x2; ydz2=y2;
dx=xdz1-xdz2; dy=ydz1-ydz2;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) { ads_entdel(en); goto bb1; }
ulinzf();
goto bb1;
}
bb1:i=i+1;
if (i<len) goto bbb;
}
void ulinzf(void)
{ struct resbuf apps,*ebup,*rb;
ads_name ss1,en;
int typi,igw,it;
Adesk::Int32 i,len;
ads_real x1,y1,x2,y2;
ads_real q,gs1,gs2;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T(""),buf[40]=_T("");
ads_point p01,p02;
ads_point p1,p2,p3,p4,pp;
p1[2]=0; p2[2]=0;
p3[2]=0; p4[2]=0;
igw=0;
p01[0]=xdz1; p01[1]=ydz1; p01[2]=0;
p02[0]=xdz2; p02[1]=ydz2; p02[2]=0;
RBList mask(RTDXF0,_T("LINE"),8,_T("TDOTE"),NULL);
if (ads_ssget(_T("C"),p01,p02,mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto bbb;
return;
bbb:ads_ssname(ss1,i,en);
apps.restype=RTSTR;
_tcscpy(buf,_T("TDOTE"));
apps.resval.rstring=buf;
apps.rbnext=NULL;
ebup=ads_entgetx(en,&apps);
if (ebup==NULL) goto bb1;
it=0; gs1=0; gs2=0;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==11) {
x2=rb->resval.rpoint[0];
y2=rb->resval.rpoint[1]; }
if (typi==1040) {
it=it+1;
if (it==1) gs1=rb->resval.rreal;
if (it==2) gs2=rb->resval.rreal;
}
}
ads_relrb(ebup);
ads_relrb(rb);
//if ((txtnam8[0]==_T('T'))&&(txtnam8[1]==_T('D'))&&(txtnam8[2]==_T('O'))&&(txtnam8[3]==_T('T'))&&(txtnam8[4]==_T('E'))) goto bbwa;
// goto bb1;
//bbwa:if ((txtdxf0[0]==_T('L'))&&(txtdxf0[1]==_T('I'))&&(txtdxf0[2]==_T('N'))&&(txtdxf0[3]==_T('E'))) goto lin;
// goto bb1;
//lin:
if ((fabs(xdz1-x1)<1.0E-6)
&&(fabs(ydz1-y1)<1.0E-6)
&&(fabs(xdz2-x2)<1.0E-6)
&&(fabs(ydz2-y2)<1.0E-6)) {
igw=igw+1;
if (igw>=2) ads_entdel(en);
goto bb1; }
qjadu(xdz1,ydz1,xdz2,ydz2);
q=(qhcjc+90)*pi314/180;
p1[0]=x1+ds111*cos(q); p1[1]=y1+ds111*sin(q);
q=(qhcjc-90)*pi314/180;
p2[0]=x1+ds111*cos(q); p2[1]=y1+ds111*sin(q);
p3[0]=xdz1; p3[1]=ydz1;
p4[0]=xdz2; p4[1]=ydz2;
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) goto d11;
goto bb1;
d11:q=(qhcjc+90)*pi314/180;
p1[0]=x2+ds111*cos(q); p1[1]=y2+ds111*sin(q);
q=(qhcjc-90)*pi314/180;
p2[0]=x2+ds111*cos(q); p2[1]=y2+ds111*sin(q);
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) ads_entdel(en);
bb1:i=i+1;
if (i<len) goto bbb;
ads_ssfree(ss1);
}
void ularczf(void)
{ struct resbuf apps,*ebup,*rb;
ads_name ss1,en;
int typi,igw,it;
Adesk::Int32 i,len;
ads_real x1,y1,q01,q02;
ads_real q1,q2,rr,gs1,gs2;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T(""),buf[40]=_T("");
ads_point p01,p02;
igw=0;
p01[0]=xka1-karr; p01[1]=yka1-karr; p01[2]=0;
p02[0]=xka1+karr; p02[1]=yka1+karr; p02[2]=0;
RBList mask(RTDXF0,_T("ARC"),8,_T("TDOTE"),NULL);
if (ads_ssget(_T("C"),p01,p02,mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto bbb;
return;
bbb:ads_ssname(ss1,i,en);
apps.restype=RTSTR;
_tcscpy(buf,_T("TDOTE"));
apps.resval.rstring=buf;
apps.rbnext=NULL;
ebup=ads_entgetx(en,&apps);
if (ebup==NULL) goto bb1;
it=0; gs1=0; gs2=0;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==40) rr=rb->resval.rreal;
if (typi==50) q1=rb->resval.rreal;
if (typi==51) q2=rb->resval.rreal;
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==1040) {
it=it+1;
if (it==1) gs1=rb->resval.rreal;
if (it==2) gs2=rb->resval.rreal;
}
}
ads_relrb(ebup);
ads_relrb(rb);
//if ((txtnam8[0]==_T('T'))&&(txtnam8[1]==_T('D'))&&(txtnam8[2]==_T('O'))&&(txtnam8[3]==_T('T'))&&(txtnam8[4]==_T('E'))) goto bbwa;
// goto bb1;
//bbwa:if ((txtdxf0[0]==_T('A'))&&(txtdxf0[1]==_T('R'))&&(txtdxf0[2]==_T('C'))) goto arc;
// goto bb1;
//arc:
if ((fabs(xka1-x1)<1.0E-6)
&&(fabs(yka1-y1)<1.0E-6)
&&(fabs(karr-rr)<1.0E-6)
&&(fabs(kaq1-q1)<1.0E-6)
&&(fabs(kaq2-q2)<1.0E-6)) {
igw=igw+1;
if (igw>=2) ads_entdel(en);
goto bb1; }
if (fabs(xka1-x1)>1.0E-6 ||
fabs(yka1-y1)>1.0E-6 ||
fabs(karr-rr)>1.0E-6) goto bb1;
q01=kaq1*180/pi314;
q02=kaq2*180/pi314;
if (q02<q01) q02=q02+360;
q1=q1*180/pi314;
q2=q2*180/pi314;
if (q2<q1) q2=q2+360;
if ((q1<q01)||(q2>q02)) goto bb1;
ads_entdel(en);
bb1:i=i+1;
if (i<len) goto bbb;
ads_ssfree(ss1);
}
void ulin01(void)
{
// int i;
ads_real ds,x1,y1,x2,y2,dx,dy,d1,d2,x0,y0,q;
// TCHAR zf[40];
ads_ssadd(NULL,NULL,ensspp0);
ads_ssadd(entch,ensspp0,ensspp0);
itmen=0;
// strlin();
// ds=xka2; xka2=xka1; xka1=ds;
// ds=yka2; yka2=yka1; yka1=ds;
// strlin();
x1=xka1; y1=yka1;
x2=xka2; y2=yka2;
// if (ientd==1) ads_printf(_T("\n itmen=%d"),itmen);
if (itmen==0) {
ulin3();
//ads_printf(_T("\nulin3 itmen=%d"),itmen);
if (itmen==3) {
strlin();
ds=xka2; xka2=xka1; xka1=ds;
ds=yka2; yka2=yka1; yka1=ds;
strlin();
// hlin(x1,y1,x2,y2,2);
// hlin(xka1,yka1,xka2,yka2,2);
// ads_getstring(5,NULL,zf);
goto ssd0;
}
goto ssd;
}
goto ssd;
ssd0:qjadu(x1,y1,x2,y2);
dx=800000000.0;
q=(qhcjc-180)*pi314/180;
x0=x1+dx*cos(q);
y0=y1+dx*sin(q);
dx=x0-xka1; dy=y0-yka1;
d1=sqrt(dx*dx+dy*dy);
dx=x0-xka2; dy=y0-yka2;
d2=sqrt(dx*dx+dy*dy);
if (d1>d2) {
ds=xka2; xka2=xka1; xka1=ds;
ds=yka2; yka2=yka1; yka1=ds;
}
arry[1][1]=x1; arry[1][2]=y1;
arry[1][3]=x2; arry[1][4]=y2;
arry[1][5]=0; arry[1][6]=0;
arry[2][1]=xka1; arry[2][2]=yka1;
arry[2][3]=xka2; arry[2][4]=yka2;
arry[2][5]=0; arry[2][6]=0;
iarry=3;
//ads_printf(_T("\narry[1][1]=%f,arry[1][2]=%f,arry[1][3]=%f,arry[1][4]=%f"),arry[1][1],arry[1][2],arry[1][3],arry[1][4]);
//ads_printf(_T("\narry[2][1]=%f,arry[2][2]=%f,arry[2][3]=%f,arry[2][4]=%f"),arry[2][1],arry[2][2],arry[2][3],arry[2][4]);
ulin4();
// icolo=icolo+1;
// if (ientd==1) {
// for (i=1;i<iarry;i++) {
// if (i==1) hlin(arry[i][1],arry[i][2],arry[i][3],arry[i][4],2);
// if (i>1) hlin(arry[i][1],arry[i][2],arry[i][3],arry[i][4],7);
// ads_printf(_T("\ni=%d,arry[i][1]=%f,%f,%f,%f"),i,arry[i][1],arry[i][2],arry[i][3],arry[i][4]);
// ads_getstring(5,NULL,zf); }
// }
ulin5();
// 将以转换的墙端点选上 ensspp0
ulin6dd();
ssd:ssdelenpp0();
ads_ssfree(ensspp0);
}
void tzhatdc(void)
{ struct resbuf *ebup,*rbp;
ads_name en;
int typi;
Adesk::Int32 len,i;
ads_real x1,y1,x2,y2,q1,q2,rr;
TCHAR zf[40]=_T("");
i=0;
if (ads_sslength(entdwa,&len)==RTNORM) goto bbb;
return;
bbb:if (len==0) return;
ads_ssname(entdwa,i,en);
ebup=ads_entget(en);
if (ebup==NULL) goto bb1;
q1=0; q2=2*pi314;
for (rbp=ebup;rbp!=NULL;rbp=rbp->rbnext) {
typi=rbp->restype;
if (typi==0) _tcscpy(zf,rbp->resval.rstring);
if (typi==40) rr=rbp->resval.rreal;
if (typi==50) q1=rbp->resval.rreal;
if (typi==51) q2=rbp->resval.rreal;
if (typi==10) {
x1=rbp->resval.rpoint[0];
y1=rbp->resval.rpoint[1]; }
if (typi==11) {
x2=rbp->resval.rpoint[0];
y2=rbp->resval.rpoint[1]; }
}
ads_relrb(ebup);
ads_relrb(rbp);
if ((zf[0]==_T('L'))&&(zf[1]==_T('I'))&&(zf[2]==_T('N'))&&(zf[3]==_T('E'))) goto lin;
if ((zf[0]==_T('A'))&&(zf[1]==_T('R'))&&(zf[2]==_T('C'))) goto arc;
goto bb1;
arc:warcTDWA(x1,y1,q1,q2,rr);
ads_entdel(en);
goto bb1;
lin:wlinTDWA(x1,y1,x2,y2);
ads_entdel(en);
bb1:i=i+1;
if (i<len) goto bbb;
}
void wlinTDWA(ads_real x1,ads_real y1,ads_real x2,ads_real y2)
{
struct resbuf *rb;
ads_point p1,p2;
p1[0]=x1; p1[1]=y1; p1[2]=0;
p2[0]=x2; p2[1]=y2; p2[2]=0;
rb=ads_buildlist(RTDXF0,_T("LINE"),10,p1,11,p2,
6,_T("BYLAYER"),
8,_T("TDWALL"),
62,256,
39,0.0,
NULL);
ads_entmake(rb);
ads_relrb(rb);
}
void warcTDWA(ads_real x1,ads_real y1,ads_real q1,ads_real q2,ads_real rr)
{ struct resbuf *rb;
ads_point p1;
p1[0]=x1; p1[1]=y1; p1[2]=0;
rb=ads_buildlist(RTDXF0,_T("ARC"),
6,_T("BYLAYER"),
8,_T("TDWALL"),
62,256,
10,p1,
40,rr,
50,q1,
51,q2,
39,0.0,
NULL);
ads_entmake(rb);
ads_relrb(rb);
}
void ulin6dd(void)
{
struct resbuf *ebup,*rb;
ads_point p01,p02;
ads_name ss1,en;
int typi,j;
Adesk::Int32 i,len;
ads_real x1,y1,x2,y2,dx,dy,d1,d2,q1,dq,q;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T("");
ads_point p1,p2,p3,p4,pp;
p1[2]=0; p2[2]=0;
p3[2]=0; p4[2]=0;
if (iarry<3) return;
xwb1=arry[1][1]; ywb1=arry[1][2];
xwb2=arry[1][1]; ywb2=arry[1][2];
xwbmin(1);
xwbmin(2);
xwbmin(iarry-1);
p01[0]=xwb1; p01[1]=ywb1; p01[2]=0;
p02[0]=xwb2; p02[1]=ywb2; p02[2]=0;
//modified by whl on 060323
//RBList mask(RTDXF0,_T("LINE"),8,_T("WALL*"),NULL);
XString sLayer;
sLayer<<_T("WALL*,")<<LAY_WALL;
RBList mask(RTDXF0,_T("LINE"),8,(const TCHAR*)sLayer,NULL);
if (ads_ssget(_T("C"),p01,p02,mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto bbb;
return;
bbb:ads_ssname(ss1,i,en);
ebup=ads_entget(en);
if (ebup==NULL) goto mbb1;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==11) {
x2=rb->resval.rpoint[0];
y2=rb->resval.rpoint[1]; }
}
ads_relrb(ebup);
ads_relrb(rb);
//if ((txtnam8[0]==_T('W'))&&(txtnam8[1]==_T('A'))&&(txtnam8[2]==_T('L'))&&(txtnam8[3]==_T('L'))) goto bbwa;
// goto mbb1;
//bbwa:if ((txtdxf0[0]==_T('L'))&&(txtdxf0[1]==_T('I'))&&(txtdxf0[2]==_T('N'))&&(txtdxf0[3]==_T('E'))) goto lin;
// goto mbb1;
//lin:
dx=x1-x2; dy=y1-y2;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) goto mbb1;
qjadu(arry[1][1],arry[1][2],arry[1][3],arry[1][4]);
q1=qhcjc;
qjadu(x1,y1,x2,y2);
dq=q1-qhcjc;
if (dq<0) dq=-dq;
qq1:if (dq>179) { dq=dq-180; goto qq1; }
if (dq<2) goto mbb1;
q=(qhcjc+180)*pi314/180;
p1[0]=x1+cos(q); p1[1]=y1+sin(q);
q=qhcjc*pi314/180;
p2[0]=x2+cos(q); p2[1]=y2+sin(q);
p3[0]=arry[1][1]; p3[1]=arry[1][2];
p4[0]=arry[1][3]; p4[1]=arry[1][4];
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) goto lin2;
goto mbb1;
lin2:dx=x1-pp[0]; dy=y1-pp[1];
d1=sqrt(dx*dx+dy*dy);
dx=x2-pp[0]; dy=y2-pp[1];
d2=sqrt(dx*dx+dy*dy);
if ((d1>ds111)&&(d2>ds111)) goto mbb1;
j=2;
jjj: p3[0]=arry[j][1]; p3[1]=arry[j][2];
p4[0]=arry[j][3]; p4[1]=arry[j][4];
if (ads_inters(p1,p2,p3,p4,1,pp)==RTNORM) {
// dx=arry[j][1]-pp[0]; dy=arry[j][2]-pp[1];
// d1=sqrt(dx*dx+dy*dy);
// dx=arry[j][3]-pp[0]; dy=arry[j][4]-pp[1];
// d2=sqrt(dx*dx+dy*dy);
dx=x1-pp[0]; dy=y1-pp[1];
d1=sqrt(dx*dx+dy*dy);
dx=x2-pp[0]; dy=y2-pp[1];
d2=sqrt(dx*dx+dy*dy);
if ((d1<ds111)||(d2<ds111)) {
ads_ssadd(en,ensspp0,ensspp0);
goto mbb1;
}
}
j=j+1;
if (j<iarry) goto jjj;
mbb1:i=i+1;
if (i<len) goto bbb;
ads_ssfree(ss1);
}
void xwbmin(int i)
{
if (xwb1>arry[i][1]) xwb1=arry[i][1];
if (ywb1>arry[i][2]) ywb1=arry[i][2];
if (xwb1>arry[i][3]) xwb1=arry[i][3];
if (ywb1>arry[i][4]) ywb1=arry[i][4];
if (xwb2<arry[i][1]) xwb2=arry[i][1];
if (ywb2<arry[i][2]) ywb2=arry[i][2];
if (xwb2<arry[i][3]) xwb2=arry[i][3];
if (ywb2<arry[i][4]) ywb2=arry[i][4];
}
void yyyq(void)
{
struct resbuf *ebup,*rb;
ads_point p01,p02;
ads_name ss1,en;
int typi,itn,itm;
Adesk::Int32 i,len;
ads_real x1,y1,x2,y2,dx,dy,d1,d2,rr0,q;
ads_real q1,q2,q12,rr,xd1,yd1;
ads_real q01,q02;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T("");
itn=0;
sta0:itn=itn+1;
if (itn>300) return;
// ads_printf(_T("\n itn=%d"),itn);
if (kaq2>kaq1+359.99) return;
itm=0;
rr0=karr;
q=kaq2*pi314/180;
xd1=xka1+rr0*cos(q);
yd1=yka1+rr0*sin(q);
q01=kaq1-0.001;
q02=kaq2+0.001;
p01[2]=0; p02[2]=0;
rr=10*ds111;
p01[0]=xd1-rr; p01[1]=yd1-rr;
p02[0]=xd1+rr; p02[1]=yd1+rr;
ul112l(p01[0],p01[1],p02[0],p02[1],0);
//modified by whl on 060323
//RBList mask(RTDXF0, _T("LINE,ARC"), 8, _T("WALL*"),NULL);
XString sLayer;
sLayer<<_T("WALL*,")<<LAY_WALL;
RBList mask(RTDXF0, _T("LINE,ARC"), 8,(const TCHAR*)sLayer,NULL);
if (ads_ssget(_T("C"),p01,p02,mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto strbb;
return;
strbb:ads_ssname(ss1,i,en);
ebup=ads_entget(en);
if (ebup==NULL) goto mbb1;
q1=0; q2=0;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==40) rr=rb->resval.rreal;
if (typi==50) q1=rb->resval.rreal;
if (typi==51) q2=rb->resval.rreal;
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==11) {
x2=rb->resval.rpoint[0];
y2=rb->resval.rpoint[1]; }
}
ads_relrb(ebup);
ads_relrb(rb);
//if ((txtnam8[0]==_T('W'))&&(txtnam8[1]==_T('A'))&&(txtnam8[2]==_T('L'))&&(txtnam8[3]==_T('L'))) goto bbwa;
// goto mbb1;
//bbwa:
if ((txtdxf0[0]==_T('L'))&&(txtdxf0[1]==_T('I'))&&(txtdxf0[2]==_T('N'))&&(txtdxf0[3]==_T('E'))) goto lin;
if ((txtdxf0[0]==_T('A'))&&(txtdxf0[1]==_T('R'))&&(txtdxf0[2]==_T('C'))) goto arcjd;
goto mbb1;
arcjd:dx=xka1-x1;
dy=yka1-y1;
d1=sqrt(dx*dx+dy*dy);
if (d1>ds111) goto mbb1;
dx=fabs(karr-rr);
if (dx>ds111) goto mbb1;
q1=q1*180/pi314;
q2=q2*180/pi314;
if (q2<q1) q2=q2+360;
if ((q1>q01)&&(q1<q02)||(q1>q01-360)&&(q1<q02-360)||(q1>q01+360)&&(q1<q02+360)) goto acc1;
goto mbb1;
acc1:if ((q2>q01)&&(q2<q02)||(q2>q01-360)&&(q2<q02-360)||(q2>q01+360)&&(q2<q02+360)) {
q12=(q1+q2)/2;
if ((q12>q01)&&(q12<q02)||(q12>q01-360)&&(q12<q02-360)||(q12>q01+360)&&(q12<q02+360)) goto mbb1;
}
// ads_printf(_T("\nAAA arc kaq1=%f,kaq2=%f"),kaq1,kaq2);
// ads_printf(_T("\nAAA arc q1=%f,q2=%f"),q1,q2);
if (q2<kaq2) q2=q2+360;
if (q2>kaq1+360) q2=q2-360;
kaq2=q2;
ads_ssfree(ss1);
goto sta0;
lin:dx=x1-x2; dy=y1-y2;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) goto mbb1;
if ((d1<dswa500)||(d1<whou)) {
dx=xd1-x1; dy=yd1-y1;
d1=sqrt(dx*dx+dy*dy);
dx=xd1-x2; dy=yd1-y2;
d2=sqrt(dx*dx+dy*dy);
if ((d1>10*ds111)&&(d2>10*ds111)) goto mbb1;
xdo1=x1; ydo1=y1;
xdo2=x2; ydo2=y2;
itm=1;
if (d2<d1) {
xdo1=x2; ydo1=y2;
xdo2=x1; ydo2=y1;
}
}
mbb1:i=i+1;
if (i<len) goto strbb;
ads_ssfree(ss1);
if (itm==1) {
itmen=0;
ulyyyqb();
if (itmen==1) {
qjadu(xka1,yka1,xdz2,ydz2);
q2=qhcjc;
q01=kaq1+0.001;
q02=kaq2-0.001;
if ((q2>q01)&&(q2<q02)||(q2>q01-360)&&(q2<q02-360)||(q2>q01+360)&&(q2<q02+360)) return;
if (q2<kaq2) q2=q2+360;
if ((q2-kaq2)>180) return;
// ads_printf(_T("END kaq2=%f"),kaq2);
kaq2=q2;
if (kaq2<kaq1+359.99) goto sta0;
}
}
}
void yyyqa(void)
{
struct resbuf *ebup,*rb;
ads_point p01,p02;
ads_name ss1,en;
int typi,itn,itm;
Adesk::Int32 i,len;
ads_real x1,y1,x2,y2,dx,dy,d1,d2,rr0,q;
ads_real q12,q1,q2,rr,xd1,yd1;
ads_real q01,q02;
TCHAR txtdxf0[40]=_T(""),txtnam8[40]=_T("");
itn=0;
sta0:itn=itn+1;
if (itn>300) return;
//ads_printf(_T("\n itn=%d"),itn);
if (kaq2>kaq1+359.99) return;
itm=0;
rr0=karr;
q=kaq1*pi314/180;
xd1=xka1+rr0*cos(q);
yd1=yka1+rr0*sin(q);
q01=kaq1-0.001;
q02=kaq2+0.001;
p01[2]=0; p02[2]=0;
rr=10*ds111;
p01[0]=xd1-rr; p01[1]=yd1-rr;
p02[0]=xd1+rr; p02[1]=yd1+rr;
ul112l(p01[0],p01[1],p02[0],p02[1],0);
//modified by whl on 060323
//RBList mask(RTDXF0, _T("LINE,ARC"), 8, _T("WALL*"),NULL);
XString sLayer;
sLayer<<_T("WALL*,")<<LAY_WALL;
RBList mask(RTDXF0, _T("LINE,ARC"), 8,(const TCHAR*)sLayer,NULL);
if (ads_ssget(_T("C"),p01,p02,mask,ss1)!=RTNORM)
return;
i=0;
if (ads_sslength(ss1,&len)==RTNORM) goto strbb;
return;
strbb:ads_ssname(ss1,i,en);
ebup=ads_entget(en);
if (ebup==NULL) goto mbb1;
q1=0; q2=0;
for (rb=ebup;rb!=NULL;rb=rb->rbnext) {
typi=rb->restype;
if (typi==0) _tcscpy(txtdxf0,rb->resval.rstring);
if (typi==8) _tcscpy(txtnam8,rb->resval.rstring);
if (typi==40) rr=rb->resval.rreal;
if (typi==50) q1=rb->resval.rreal;
if (typi==51) q2=rb->resval.rreal;
if (typi==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (typi==11) {
x2=rb->resval.rpoint[0];
y2=rb->resval.rpoint[1]; }
}
ads_relrb(ebup);
ads_relrb(rb);
//if ((txtnam8[0]==_T('W'))&&(txtnam8[1]==_T('A'))&&(txtnam8[2]==_T('L'))&&(txtnam8[3]==_T('L'))) goto bbwa;
// goto mbb1;
//bbwa:
if ((txtdxf0[0]==_T('L'))&&(txtdxf0[1]==_T('I'))&&(txtdxf0[2]==_T('N'))&&(txtdxf0[3]==_T('E'))) goto lin;
if ((txtdxf0[0]==_T('A'))&&(txtdxf0[1]==_T('R'))&&(txtdxf0[2]==_T('C'))) goto arcjd;
goto mbb1;
arcjd:dx=xka1-x1;
dy=yka1-y1;
d1=sqrt(dx*dx+dy*dy);
if (d1>ds111) goto mbb1;
dx=fabs(karr-rr);
if (dx>ds111) goto mbb1;
q1=q1*180/pi314;
q2=q2*180/pi314;
if (q2<q1) q2=q2+360;
if ((q2>q01)&&(q2<q02)||(q2>q01-360)&&(q2<q02-360)||(q2>q01+360)&&(q2<q02+360)) goto acc1;
goto mbb1;
acc1:if ((q1>q01)&&(q1<q02)||(q1>q01-360)&&(q1<q02-360)||(q1>q01+360)&&(q1<q02+360)) {
q12=(q1+q2)/2;
if ((q12>q01)&&(q12<q02)||(q12>q01-360)&&(q12<q02-360)||(q12>q01+360)&&(q12<q02+360)) goto mbb1;
}
// ads_printf(_T("\nBBB arc kaq1=%f,kaq2=%f"),kaq1,kaq2);
// ads_printf(_T("\nBBB arc q1=%f,q2=%f"),q1,q2);
if (q1>kaq2) q1=q1-360;
if (q1<kaq2-360) q1=q1+360;
kaq1=q1;
ads_ssfree(ss1);
goto sta0;
lin:dx=x1-x2; dy=y1-y2;
d1=sqrt(dx*dx+dy*dy);
if (d1<ds111) goto mbb1;
if ((d1<dswa500)||(d1<whou)) {
dx=xd1-x1; dy=yd1-y1;
d1=sqrt(dx*dx+dy*dy);
dx=xd1-x2; dy=yd1-y2;
d2=sqrt(dx*dx+dy*dy);
if ((d1>10*ds111)&&(d2>10*ds111)) goto mbb1;
itm=1;
xdo1=x1; ydo1=y1;
xdo2=x2; ydo2=y2;
if (d2<d1) {
xdo1=x2; ydo1=y2;
xdo2=x1; ydo2=y1;
}
}
mbb1:i=i+1;
if (i<len) goto strbb;
// kaq2=qdd1;
//if (dqend<dqsta) kaq2=qdd2;
ads_ssfree(ss1);
if (itm==1) {
itmen=0;
ulyyyqb();
if (itmen==1) {
qjadu(xka1,yka1,xdz2,ydz2);
q1=qhcjc;
q01=kaq1+0.001;
q02=kaq2-0.001;
if ((q1>q01)&&(q1<q02)||(q1>q01-360)&&(q1<q02-360)||(q1>q01+360)&&(q1<q02+360)) return;
if (q1>kaq1) q1=q1-360;
if ((kaq1-q1)>180) return;
kaq1=q1;
// ads_printf(_T("\n END kaq1=%f"),kaq1);
if (kaq2<kaq1+359.99) goto sta0;
}
}
}
void ulyyyqb(void)
{
struct resbuf apps,*rbps,*rb;
ads_name ensss,en;
int ires,it,itp;
Adesk::Int32 i,len;
TCHAR dxfnam[40]=_T(""),laynam[40]=_T(""),txtins[40]=_T(""),buf[40]=_T("");
ads_real r41,r42,q1,x1,y1,bs,dx,dy,gs1,gs2,gs3,tchyy,doork;
ads_real x01,y01,x02,y02,d1,d2,dm;
ads_point p1010,p1011;
ads_point pd1,pd2;
pd1[0]=xdo1; pd1[1]=ydo1; pd1[2]=0;
pd2[0]=xdo2; pd2[1]=ydo2; pd2[2]=0;
//modified by whl on 060323
//RBList mask(RTDXF0, _T("INSERT"), 8, LAY_WIN, NULL);
XString sLayer;
sLayer<<_T("WINDOW,")<<LAY_WIN;
RBList mask(RTDXF0, _T("INSERT"), 8, (const TCHAR*)sLayer, NULL);
if (ads_ssget(_T("C"),pd1,pd2,mask,ensss)!=RTNORM)
return;
i=0;
if (ads_sslength(ensss,&len)==RTNORM) goto starb;
return;
starb:ads_ssname(ensss,i,en);
apps.restype=RTSTR;
_tcscpy(buf,_T("WTHICK"));
apps.resval.rstring=buf;
apps.rbnext=NULL;
rbps=ads_entgetx(en,&apps);
if (rbps==NULL) goto starb1;
it=0; gs1=0; gs2=0; gs3=0;
for (rb=rbps;rb!=NULL;rb=rb->rbnext) {
ires=rb->restype;
if (ires==0) _tcscpy(dxfnam,rb->resval.rstring);
if (ires==8) _tcscpy(laynam,rb->resval.rstring);
if (ires==2) _tcscpy(txtins,rb->resval.rstring);
if (ires==41) r41=rb->resval.rreal;
if (ires==42) r42=rb->resval.rreal;
if (ires==50) q1=rb->resval.rreal;
if (ires==10) {
x1=rb->resval.rpoint[0];
y1=rb->resval.rpoint[1]; }
if (ires==1040) {
it=it+1;
if (it==1) gs1=rb->resval.rreal;
if (it==2) gs2=rb->resval.rreal;
if (it==3) gs3=rb->resval.rreal;
}
}
ads_relrb(rbps);
ads_relrb(rb);
itp=0; it=0; tchyy=0;
p1010[0]=0; p1010[1]=0; p1010[2]=0;
p1011[0]=0; p1011[1]=0; p1011[2]=0;
apps.restype=RTSTR;
_tcscpy(buf,_T("WPLINE"));
apps.resval.rstring=buf;
apps.rbnext=NULL;
rbps=ads_entgetx(en,&apps);
if (rbps==NULL) goto starb1;
for (rb=rbps;rb!=NULL;rb=rb->rbnext) {
ires=rb->restype;
if (ires==1040) {
it=it+1;
if (it==1) tchyy=rb->resval.rreal;
}
if (ires==1010) {
if (itp<100) itp=itp+1;
if (itp==1) {
p1010[0]=rb->resval.rpoint[0];
p1010[1]=rb->resval.rpoint[1];
p1010[2]=rb->resval.rpoint[2]; }
if (itp==2) {
p1011[0]=rb->resval.rpoint[0];
p1011[1]=rb->resval.rpoint[1];
p1011[2]=rb->resval.rpoint[2]; }
}
}
ads_relrb(rbps);
ads_relrb(rb);
//if ((laynam[0]==_T('W'))&&(laynam[1]==_T('I'))&&(laynam[2]==_T('N'))&&(laynam[3]==_T('D'))&&(laynam[4]==_T('O'))&&(laynam[5]==_T('W'))) goto strabw;
// goto starb1;
//strabw:if ((dxfnam[0]==_T('I'))&&(dxfnam[1]==_T('N'))&&(dxfnam[2]==_T('S'))&&(dxfnam[3]==_T('E'))&&(dxfnam[4]==_T('R'))&&(dxfnam[5]==_T('T'))) goto bbin;
// goto starb1;
//bbin:
doork=0;
bs=_tstof(txtins);
// ads_printf(_T("\ngs1=%f,gs2=%f"),gs1,gs2);
if (itp>2) {
goto starb1; }
// ads_printf(_T("\np1010[0]=%f,tchyy=%f"),p1010[0],tchyy);
if (fabs(p1010[0])<1.0E-6) goto starb1;
if ((bs>90000.0)&&(fabs(p1010[0])>1.0E-6)) {
bs=r41;
if (bs<0) bs=-bs;
dx=bs*p1010[0];
x01=x1+dx*cos(q1);
y01=y1+dx*sin(q1);
dx=bs*p1011[0];
x02=x1+dx*cos(q1);
y02=y1+dx*sin(q1);
// if (tchyy<0) {
// dx=xdz1; xdz1=xdz2; xdz2=dx;
// dx=ydz1; ydz1=ydz2; ydz2=dx;
// tchyy=-tchyy; }
dm=bs*p1010[0];
// ulrrxxyy(x01,y01,x02,y02,tchyy,dm);
goto dmm; }
if (fabs(p1010[0])>1.0E-6) {
bs=r41;
if (bs<0) bs=-bs;
doork=bs/2;
dm=p1010[0];
if (dm>0) {
x01=x1+doork*cos(q1);
y01=y1+doork*sin(q1);
x02=x1+doork*cos(q1+pi314);
y02=y1+doork*sin(q1+pi314); }
else {
x02=x1+doork*cos(q1);
y02=y1+doork*sin(q1);
x01=x1+doork*cos(q1+pi314);
y01=y1+doork*sin(q1+pi314);
}
//ulrrxxyy(x01,y01,x02,y02,tchyy,dm);
goto dmm;
}
goto starb1;
dmm:dx=x01-xdo1; dy=y01-ydo1;
d1=sqrt(dx*dx+dy*dy);
dx=x02-xdo1; dy=y02-ydo1;
d2=sqrt(dx*dx+dy*dy);
if ((d1>gs1)&&(d2>gs1)) goto starb1;
ulrrxxyy(x01,y01,x02,y02,tchyy,dm);
starb1:i=i+1;
if (i<len) goto starb;
ads_ssfree(ensss);
if (itmen==1) {
dx=xdo1-xdz1; dy=ydo1-ydz1;
d1=sqrt(dx*dx+dy*dy);
dx=xdo1-xdz2; dy=ydo1-ydz2;
d2=sqrt(dx*dx+dy*dy);
if (d2<d1) {
dx=xdz1; xdz1=xdz2; xdz2=dx;
dx=ydz1; ydz1=ydz2; ydz2=dx;
}
}
}
void ulrrxxyy(ads_real x01,ads_real y01,ads_real x02,ads_real y02,ads_real tchyy,ads_real dm)
{
ads_real x0,y0,xd1,yd1,x2,y2,dx,dy,dd,rr,r42,d1,q;
r42=tchyy;
dx=x01-x02; dy=y01-y02;
dd=sqrt(dx*dx+dy*dy);
dx=dd/2;
d1=r42*dx;
dd=r42*dx;
if (dd<0) dd=-dd;
if (dd<0.0001) return;
dy=(dd*dd-dx*dx)/(2*dd);
rr=dd-dy;
qjadu(x01,y01,x02,y02);
q=(qhcjc-90)*pi314/180;
x2=(x01+x02)/2;
y2=(y01+y02)/2;
xd1=x2+d1*cos(q);
yd1=y2+d1*sin(q);
/* hlin(x1,y1,x2,y2,5); */
q=(qhcjc+90)*pi314/180;
if (r42<0) q=(qhcjc-90)*pi314/180;
x0=xd1+rr*cos(q);
y0=yd1+rr*sin(q);
if (dm<0) dm=-dm;
dx=rr*rr-dm*dm;
if (dx<0) dx=0;
dx=sqrt(dx);
dx=x0-xka1; dy=y0-yka1;
d1=sqrt(dx*dx+dy*dy);
// hlin(x01,y01,x02,y02,7);
// hlin(x0,y0,x01,y01,1);
// hlin(x0,y0,x02,y02,2);
// TCHAR zf[40];
//ads_getstring(5,NULL,zf);
if (d1<ds111) {
itmen=1;
// hlin(xx0,yy0,xdz1,ydz1,1);
// hlin(xka1,yka1,xdz2,ydz2,2);
mmrr=rr;
xx0=x0; yy0=y0;
xdz1=x01; ydz1=y01;
xdz2=x02; ydz2=y02;
// hlin(x0,y0,x01,y01,7);
// hlin(x0,y0,x02,y02,7);
}
}