199 lines
5.6 KiB
C++
199 lines
5.6 KiB
C++
#include "stdafx.h"
|
|
|
|
|
|
// No Msg file is required
|
|
TARCH_IMPEXP void VpLayerFreeze3D();
|
|
TARCH_IMPEXP void VpLayerFreeze2D();
|
|
TARCH_IMPEXP int UpdatDisp();
|
|
//TARCH_IMPEXP void UpdateTDbEntity();
|
|
|
|
/*
|
|
TARCH_IMPEXP int ShowQ()
|
|
{
|
|
AssureTileMode(0);
|
|
DocSetDrawMode(DRAW_3D);
|
|
UpdatDisp();
|
|
DocSetDrawMode(DRAW_2D);
|
|
UpdateTDbEntity();
|
|
return RTNORM;
|
|
}
|
|
*/
|
|
// Command: 显示2D
|
|
TARCH_IMPEXP int Show2D()
|
|
{
|
|
int nTileMode=0;
|
|
VERIFY(xg_getvar(_T("TILEMODE"), &nTileMode)==RTNORM);
|
|
DocSetDrawMode(DRAW_2D);
|
|
UpdateTDbEntity();
|
|
XSymbolList lstLayers(_T("LAYER"), _T("3D*"));
|
|
for(int i=0; i<lstLayers.Length(); i++)
|
|
AssureLayer(lstLayers[i], LAYSTAT_FREEZE);
|
|
XSymbolList lstLayers1(_T("LAYER"), _T("2D*"));
|
|
for(i=0; i<lstLayers1.Length(); i++)
|
|
AssureLayer(lstLayers1[i], LAYSTAT_ON|LAYSTAT_THAW);
|
|
return RTNORM;
|
|
}
|
|
|
|
|
|
TARCH_IMPEXP int ShowStd()
|
|
{
|
|
int nTileMode=0;
|
|
VERIFY(xg_getvar(_T("TILEMODE"), &nTileMode)==RTNORM);
|
|
DocSetDrawMode(DRAW_2D+DRAW_3D);
|
|
UpdateTDbEntity();
|
|
return RTNORM;
|
|
}
|
|
|
|
// Command: 显示3D
|
|
TARCH_IMPEXP int Show3D()
|
|
{
|
|
int nTileMode=0;
|
|
VERIFY(xg_getvar(_T("TILEMODE"), &nTileMode)==RTNORM);
|
|
DocSetDrawMode(DRAW_3D);
|
|
UpdateTDbEntity();
|
|
XSymbolList lstLayers(_T("LAYER"), _T("2D*"));
|
|
for(int i=0; i<lstLayers.Length(); i++)
|
|
AssureLayer(lstLayers[i], LAYSTAT_FREEZE);
|
|
XSymbolList lstLayers1(_T("LAYER"), _T("3D*,3T*"));
|
|
for(i=0; i<lstLayers1.Length(); i++)
|
|
AssureLayer(lstLayers1[i], LAYSTAT_ON|LAYSTAT_THAW);
|
|
return RTNORM;
|
|
}
|
|
|
|
|
|
TARCH_IMPEXP int GetDwgToWrite(TCHAR * fullName, const TCHAR *pszPlus, const TCHAR *title=NULL)
|
|
{
|
|
resbuf result;
|
|
XString dwgPrefix(256);
|
|
result.resval.rstring=NULL;
|
|
xg_getvar(_T("DWGPREFIX"), dwgPrefix);
|
|
if(pszPlus) {
|
|
TCHAR szDwgName[80]=_T("");
|
|
AT_GetCurDwg(szDwgName);
|
|
dwgPrefix << szDwgName << pszPlus;
|
|
}
|
|
int rc = ads_getfiled((title? title:_T("输入文件名")), dwgPrefix, _T("DWG"), 1, &result);
|
|
if(rc==RTNORM) {
|
|
_tcscpy(fullName, result.resval.rstring);
|
|
free(result.resval.rstring);
|
|
}
|
|
return rc;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////
|
|
// command: 裁剪生成详图
|
|
// 用Dview剖切
|
|
// Status: 如果三维图层没有打开,则剖面图可能出现不了这些实体
|
|
// 必须在WCS下
|
|
/*
|
|
int ClipDetail()
|
|
{
|
|
AsureWCS();
|
|
TCHAR fullName[80]=_T("");
|
|
if(StartAnotherDwg()!=RTNORM || GetDwgToWrite(fullName, NULL, _T("输入文件名"))!=RTNORM)
|
|
return RTERROR;
|
|
|
|
XPoint ptLow, ptUp;
|
|
if(XGetPoint(NULL, _T("\n第一个角点: "), ptLow)!=RTNORM ||
|
|
ads_getcorner(ptLow, _T("\n另一个角点: "), ptUp)!=RTNORM)
|
|
return RTERROR;
|
|
|
|
XPushVar<int> expert(_T("EXPERT"), 2);
|
|
ads_command(RTSTR, _T("SAVEAS"), RTSTR, _T(""), RTSTR, fullName, NULL);
|
|
|
|
PickSet ss(SS_FREE);
|
|
if(ss.Get("C", ptLow, ptUp)==RTNORM) {
|
|
PickSet ssAll(SS_FREE);
|
|
ssAll.Get("X");
|
|
ssAll -= ss;
|
|
|
|
PickSet ssVp(SS_FREE);
|
|
if(ssVp.Get("X", NULL, NULL, RBList(RTDXF0, "VIEWPORT", NULL))==RTNORM)
|
|
ssAll -= ssVp;
|
|
|
|
ssAll.Erase();
|
|
|
|
|
|
PickSet ssExplode(SS_FREE);
|
|
long lCount=ss.Length();
|
|
for(long i=0L; i<lCount; i++) {
|
|
Entity ent=ss[i];
|
|
XDbObject obj(ent, AcDb::kForRead);
|
|
if(!obj) continue;
|
|
TDbEntity *pEnt1=TDbEntity::cast(obj.m_pObject);
|
|
TDbCurveEntity *pEnt2=TDbCurveEntity::cast(obj.m_pObject);
|
|
if(pEnt1 || pEnt2) {
|
|
AcDbVoidPtrArray entSet;
|
|
XExplodeStream dc(entSet);
|
|
if(pEnt1) {
|
|
if(pEnt1->ExplodeOrDraw2d(dc)==Acad::eInvalidInput)
|
|
pEnt1->explode(entSet);
|
|
ssExplode += ent;
|
|
} else if(pEnt2) {
|
|
if(pEnt2->ExplodeOrDraw2d(dc)==Acad::eInvalidInput)
|
|
pEnt2->explode(entSet);
|
|
ssExplode += ent;
|
|
}
|
|
long lNum=entSet.length();
|
|
for(long j=0L; j<lNum; j++) {
|
|
AcDbEntity * pDbEnt=(AcDbEntity *)entSet[j];
|
|
ASSERT(pDbEnt);
|
|
AddToModelSpace(pDbEnt, Adesk::kTrue);
|
|
}
|
|
}
|
|
}
|
|
ssExplode.Erase();
|
|
|
|
ptLow.z=ptUp.z=0;
|
|
XRectAngle box(ptLow, ptUp);
|
|
XPoly2D poly(1);
|
|
poly.AppendNode(box.GetLowLeft());
|
|
poly.AppendNode(box.GetLowRight());
|
|
poly.AppendNode(box.GetUpRight());
|
|
poly.AppendNode(box.GetUpLeft());
|
|
|
|
RBList fence=ads_buildlist(RT3DPOINT, &box.GetLowLeft(),
|
|
RT3DPOINT, &box.GetLowRight(),
|
|
RT3DPOINT, &box.GetUpRight(),
|
|
RT3DPOINT, &box.GetUpLeft(),
|
|
RT3DPOINT, &box.GetLowLeft(), NULL);
|
|
|
|
|
|
PickSet ssForClip(SS_FREE), ssIn(SS_FREE), ssOut(SS_FREE);
|
|
if(ssForClip.Get("F", fence, NULL, NULL)==RTNORM) {
|
|
PolyClip(ssForClip, poly, ssIn, ssOut);
|
|
if(!!ssOut)
|
|
ssOut.Erase();
|
|
}
|
|
}
|
|
|
|
|
|
ads_command(RTSTR, ".QSAVE", NULL);
|
|
return RTNORM;
|
|
}
|
|
|
|
// command: 改变高度
|
|
int ChgElevation()
|
|
{
|
|
PickSet ss(SS_FREE);
|
|
if(SelectEntities("\n请选择要移动的实体!", ss, RBList(RTDXF0, "*", NULL))!=RTNORM) return RTERROR;
|
|
|
|
ads_real dist;
|
|
if(ads_getdist(NULL, "\n请输入垂直方向的移动距离(>0:往上; <0:往下): ", &dist)==RTNORM) {
|
|
XPoint base, result(0,0,dist);
|
|
XPushVar<int> vOsMode("OSMODE", 0);
|
|
ads_command(RTSTR, ".MOVE", RTPICKS, (long *)ss, RTSTR, "",
|
|
RT3DPOINT, &base, RT3DPOINT, &result, NULL);
|
|
}
|
|
return RTNORM;
|
|
}
|
|
|
|
*/
|
|
|