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

656 lines
22 KiB
C++

#include "stdafx.h"
#include "VPOperate.h"
TUTIL_IMPEXP XPoint Mcs2Lcs(CPoint point)
{
CRect rect;
XPoint pt;
acedGetAcadDwgView()->GetClientRect(&rect);
pt[X] =double(point.x) / double(rect.Width());
pt[Y] =double(point.y) / double(rect.Height());
pt[Y] = 1 - pt[Y] ;
if(pt.x<0.0) pt.x=0.0;
if(pt.y<0.0) pt.y=0.0;
if(pt.x>1.0) pt.x=1.0;
if(pt.y>1.0) pt.y=1.0;
return pt;
}
TUTIL_IMPEXP CPoint Lcs2Mcs(XPoint point, BOOL bVector=FALSE)
{
CRect rect;
CPoint pt;
acedGetAcadDwgView()->GetClientRect(&rect);
pt.x = AS_INT(point.x*rect.Width());
if(!bVector) {
pt.y = rect.bottom - AS_INT(point.y*rect.Height());
} else {
pt.y = - AS_INT(point.y*rect.Height());
}
return pt;
}
TUTIL_IMPEXP void ReadVports(DList<TViewportInfo> &vpInfo) //读取视口信息
{
int nTileMode;
xg_getvar(_T("TILEMODE"), &nTileMode);
if(!nTileMode)
return;
struct resbuf *rb=NULL;
TViewportInfo vports;
BOOL flag = FALSE;
if(acedVports(&rb) !=RTNORM)
return;
while(rb = rb->rbnext) {
if(rb->restype == RTSHORT) {
vports.VpID = rb->resval.rint;
flag = TRUE;
}
if(rb->restype == RTPOINT) {
if(flag) {
vports.ptLeft[X] = rb->resval.rpoint[0];
vports.ptLeft[Y] = rb->resval.rpoint[1];
vports.ptLeft[Z] = 0;
flag = FALSE;
} else {
vports.ptRight[X] = rb->resval.rpoint[0];
vports.ptRight[Y] = rb->resval.rpoint[1];
vports.ptRight[Z] = 0;
vpInfo.Append(new TViewportInfo(vports));
}
}
}
if(rb)
ads_relrb(rb);
}
TUTIL_IMPEXP BOOL GetViewportRect(int vpID, CRect &rect)
{
DList<TViewportInfo> vports;
ReadVports(vports);
for(int i=0; i<vports.Length(); i++) {
TViewportInfo *vp=vports[i];
if(vp->VpID==vpID) {
CPoint ptLeft=Lcs2Mcs(vp->ptLeft);
CPoint ptRight=Lcs2Mcs(vp->ptRight);
rect.top = ptRight.y;
rect.bottom = ptLeft.y;
rect.left = ptLeft.x;
rect.right = ptRight.x;
return TRUE;
}
}
return FALSE;
}
////////////////////////////////////////////////////////
// 取得命中目标的矩形
CRect THitViewport::GetRectOnHitPos(int nMethod, CPoint ptOld, CPoint point) const
{
CRect rect;
{
XRectAngle box(m_id.ptLeft, m_id.ptRight);
CPoint ptTopLeft, ptBottomRight;
ptTopLeft=Lcs2Mcs(box.GetUpLeft());
ptBottomRight=Lcs2Mcs(box.GetLowRight());
rect.SetRect(ptTopLeft, ptBottomRight);
}
if(nMethod==VP_COPY || nMethod==VP_MOVE) {//拷贝或移动
CPoint vtMove=point-ptOld;
rect.bottom += vtMove.y;
rect.top += vtMove.y;
rect.left += vtMove.x;
rect.right += vtMove.x;
} else {
switch(m_nHitPosition) {
case 1:
if(m_nHitFlag&HV_ONSIDE) { //命中底边
rect.bottom=point.y;
} else { // LowLeft
rect.bottom=point.y;
rect.left=point.x;
}
break;
case 2:
if(m_nHitFlag&HV_ONSIDE) {//命中右边
rect.right=point.x;
} else { // LowRight
rect.bottom=point.y;
rect.right=point.x;
}
break;
case 3:
if(m_nHitFlag&HV_ONSIDE) { //命中顶边
rect.top = point.y;
} else {// UpRight
rect.top=point.y;
rect.right=point.x;
}
break;
case 4:
if(m_nHitFlag&HV_ONSIDE) {//命中左边
rect.left = point.x;
} else { //UpLeft
rect.top=point.y;
rect.left=point.x;
}
break;
}
}
return rect;
}
DList<THitViewport> TViewportResize::m_lstHitObjects;
CPoint TViewportResize::m_ptOld;
CPoint TViewportResize::m_ptFirstHit; //第一次点中的点
BOOL TViewportResize::m_bTracking=FALSE;
BOOL TViewportResize::m_bApplied=FALSE;
//BOOL TViewportResize::m_bApplyExtend=FALSE;
int TViewportResize::m_nApplyMethod=0; //拖曳方法
// 根据控制键,确定应用方法
int TViewportResize::GetApplyMethod(int nFlags)
{
int nMethod=0;
if((nFlags&MK_CONTROL) && (nFlags&MK_SHIFT)) {//Shift+Ctrl+左键
nMethod=VP_RESIZE;
} else if(nFlags&MK_CONTROL) {
//nMethod=VP_COPY;
nMethod=VP_RESIZE;
} else if(nFlags&MK_SHIFT) {
//nMethod=VP_MOVE;
nMethod=VP_RESIZE;
} else {
nMethod=VP_RESIZE_EX;
}
return nMethod;
}
/////////////////////////////////////////////////
// 左键按下
BOOL TViewportResize::OnLButtonDown(UINT nFlags, CPoint point)
{
if(m_bTracking)
return FALSE;
m_lstHitObjects.Reset();
int nMethod=GetApplyMethod(nFlags);
const TCHAR * pszCursor=HitTest(nMethod, point, m_lstHitObjects);
if(pszCursor) {
// 判断是否存在非延长线命中的视口
BOOL bHitValid=FALSE;
for(int n=0; n<m_lstHitObjects.Length(); n++) {
THitViewport *pHitObj=m_lstHitObjects[n];
if(!(pHitObj->m_nHitFlag&HV_ONEXTEND)) {
bHitValid=TRUE;
break;
}
}
if(!bHitValid)
return FALSE;
m_nApplyMethod=nMethod;
::SetCursor(LoadCursor(NULL, pszCursor));
m_ptFirstHit = m_ptOld=point;
CDC *pDC=acedGetAcadDwgView()->GetDC();
ASSERT(pDC);
CSize size(1,1);
// 绘制矩形拖曳线
for(int i=0; i<m_lstHitObjects.Length(); i++) {
THitViewport *pHitObj=m_lstHitObjects[i];
if(nMethod!=VP_RESIZE_EX) { //不对延长线命中的起作用
if(pHitObj->m_nHitFlag&HV_ONEXTEND)
continue;
}
CRect rectNew=pHitObj->GetRectOnHitPos(nMethod, m_ptFirstHit, point);
if(rectNew.left>rectNew.right || rectNew.top>rectNew.bottom)
continue;
pDC->DrawDragRect(rectNew, size, NULL, size);
}
acedGetAcadDwgView()->ReleaseDC(pDC);
StartTracking();
return TRUE;
}
return FALSE;
}
////////////////////////////////////////////////////////////
// 左键抬起
BOOL TViewportResize::OnLButtonUp(UINT nFlags, CPoint point)
{
if(!m_bTracking) //只出来拖曳结束的动作
return FALSE;
m_ptOld = point;
BOOL bApplyExtend=GetApplyMethod(nFlags);;
StopTracking(TRUE, bApplyExtend);
return TRUE;
}
////////////////////////////////////////////////
// 取消拖曳
BOOL TViewportResize::OnEscape()
{
if(m_bTracking) {
StopTracking(FALSE, m_nApplyMethod);
}
return FALSE;
}
///////////////////////////////////////////////
// 开始拖曳
void TViewportResize::StartTracking()
{
acedGetAcadDwgView()->SetCapture();
m_bTracking=TRUE;
}
// 结束拖曳, 并更加bAccept使得拖曳生效与否
void TViewportResize::StopTracking(BOOL bAccept, int nMethod)
{
if(m_bTracking) {
m_bTracking=FALSE;
CDC *pDC=acedGetAcadDwgView()->GetDC();
ASSERT(pDC);
CSize size(1,1);
// 绘制矩形拖曳线
for(int i=0; i<m_lstHitObjects.Length(); i++) {
THitViewport *pHitObj=m_lstHitObjects[i];
if(nMethod!=VP_RESIZE_EX) { //不对延长线命中的起作用
if(pHitObj->m_nHitFlag&HV_ONEXTEND)
continue;
}
CRect rectNew=pHitObj->GetRectOnHitPos(nMethod, m_ptFirstHit, m_ptOld);
pDC->DrawDragRect(rectNew, size, NULL, size);
}
acedGetAcadDwgView()->ReleaseDC(pDC);
::ReleaseCapture();
if(bAccept) { //进行修改
m_bApplied=FALSE;
m_nApplyMethod=nMethod;
PostCommand(_T("TDragVp\n"), false);
}
}
}
BOOL TViewportResize::OnCaptureChanged(CWnd *pWnd)
{
if (pWnd != acedGetAcadDwgView()) {
StopTracking(FALSE, FALSE); // cancel tracking
}
return FALSE;
}
////////////////////////////////////////////////////////////
// 鼠标移动: 拖曳或者改变鼠标形状
BOOL TViewportResize::OnMouseMove(UINT nFlags, CPoint point)
{
int nMethod=GetApplyMethod(nFlags);
if(m_bTracking) {
if(point!=m_ptOld) {
CDC *pDC=acedGetAcadDwgView()->GetDC();
ASSERT(pDC);
CSize size(1,1);
// 绘制矩形拖曳线
for(int i=0; i<m_lstHitObjects.Length(); i++) {
THitViewport *pHitObj=m_lstHitObjects[i];
if(nMethod!=VP_RESIZE_EX) { //不对延长线命中的起作用
if(pHitObj->m_nHitFlag&HV_ONEXTEND)
continue;
}
CRect rectOld=pHitObj->GetRectOnHitPos(nMethod, m_ptFirstHit, m_ptOld);
CRect rectNew=pHitObj->GetRectOnHitPos(nMethod, m_ptFirstHit, point);
if(rectNew.left>rectNew.right || rectNew.top>rectNew.bottom)
continue;
pDC->DrawDragRect(rectNew, size, rectOld, size);
}
m_ptOld=point;
acedGetAcadDwgView()->ReleaseDC(pDC);
}
return TRUE;
} else {
nMethod=VP_RESIZE;
const TCHAR * pCursor=HitTest(nMethod, point, DList<THitViewport>());
if(pCursor) {
::SetCursor(LoadCursor(NULL, pCursor));
return TRUE;
}
}
return FALSE;
}
// 取得命中的目标
// nMethod--应用方法
const TCHAR * TViewportResize::HitTest(int nMethod, CPoint point, DList<THitViewport> &lstHitObjects)
{
const TCHAR *pCursor=NULL;
DList<TViewportInfo> ss;
ReadVports(ss);
CPoint ptDwgView = point;
BOOL bHitObj=FALSE;
long lCount=ss.Length();
for(long i=0L; i<lCount; i++) {
TViewportInfo &ent=*ss[i];
XRectAngle box(ent.ptLeft, ent.ptRight);
XPoint ptCorners[4];
ptCorners[0]=box.GetLowLeft();
ptCorners[1]=box.GetLowRight();
ptCorners[2]=box.GetUpRight();
ptCorners[3]=box.GetUpLeft();
BOOL bHitCorner=FALSE;
for(int n=0; n<4; n++) {
if(fabs(ptCorners[n].x)<1.0E-6 || fabs(ptCorners[n].y-1.0)<1.0E-6)
continue;
CPoint ptOnView=Lcs2Mcs(ptCorners[n]);
ptOnView -= ptDwgView;
if(abs(ptOnView.x)<HTSIZE && abs(ptOnView.y)<HTSIZE) {
THitViewport *pHitObj = new THitViewport;
pHitObj->m_id = ent;
pHitObj->m_nHitPosition = n+1;
pHitObj->m_nHitFlag=0;
lstHitObjects.Append(pHitObj);
bHitCorner=TRUE;
const TCHAR *pNewCursor = (n==0 || n==2)? IDC_SIZENESW : IDC_SIZENWSE;
if(!pCursor)
pCursor=pNewCursor;
else if(pNewCursor!=pCursor)
pCursor=IDC_SIZEALL;
break;
}
}
if(!bHitCorner) {//对边进行命中测试
CPoint ptTopLeft=Lcs2Mcs(box.GetUpLeft()),
ptBottomRight=Lcs2Mcs(box.GetLowRight());
CRect rect;
rect.SetRect(ptTopLeft, ptBottomRight);
Adesk::UInt8 nHitPos=0, nHitFlag=HV_ONSIDE;
if(abs(ptDwgView.y-rect.bottom)<HTSIZE) {//命中底边
if(ptDwgView.x<rect.left || ptDwgView.x>rect.right) {//延长线命中
if(nMethod==VP_RESIZE_EX) {
nHitPos=1;
nHitFlag |= HV_ONEXTEND;
}
} else {//边界线命中
nHitPos=1;
}
} else if(abs(ptDwgView.x-rect.right)<HTSIZE) {//命中右边
if(ptDwgView.y<rect.top || ptDwgView.y>rect.bottom) {
if(nMethod==VP_RESIZE_EX) {
nHitFlag |= HV_ONEXTEND;
nHitPos=2;
}
} else {
nHitPos=2;
}
} else if(abs(ptDwgView.y-rect.top)<HTSIZE) {//命中顶边
if(ptDwgView.x<rect.left || ptDwgView.x>rect.right) {
if(nMethod==VP_RESIZE_EX) {
nHitFlag |= HV_ONEXTEND;
nHitPos = 3;
}
} else {
nHitPos=3;
}
} else if(abs(ptDwgView.x-rect.left)<HTSIZE) { //命中左边
if(ptDwgView.y<rect.top || ptDwgView.y>rect.bottom) {
if(nMethod==VP_RESIZE_EX) {
nHitFlag |= HV_ONEXTEND;
nHitPos=4;
}
} else {
nHitPos=4;
}
}
if(nHitPos) { //命中边界
THitViewport *pHitObj = new THitViewport;
pHitObj->m_id = ent;
pHitObj->m_nHitPosition = nHitPos;
pHitObj->m_nHitFlag=nHitFlag;
bHitObj=TRUE;
if(!pCursor) {
pCursor = (nHitPos==1 || nHitPos==3)? IDC_SIZENS : IDC_SIZEWE;
}
lstHitObjects.Append(pHitObj);
}
} else {
bHitObj=TRUE;
}
}
if(bHitObj) {
if(nMethod==VP_COPY || nMethod==VP_MOVE) //拷贝和移动采用四方向的箭头
pCursor=IDC_SIZEALL;
} else {
pCursor=NULL;
}
return pCursor;
}
AcDbObjectId FindVport(const TViewportInfo &vp)
{
AcDbDatabase *pCurDwg=acdbCurDwg();
AcDbViewportTable *pVPTable=NULL;
VERIFY(pCurDwg->getViewportTable(pVPTable, AcDb::kForRead)==Acad::eOk);
AcDbViewportTableIterator *pIterator=NULL;
VERIFY(pVPTable->newIterator(pIterator)==Acad::eOk);
pVPTable->close();
AcDbObjectId idRet;
for(pIterator->start(); !pIterator->done(); pIterator->step()) {
AcDbViewportTableRecord *pRecord=NULL;
Acad::ErrorStatus es=pIterator->getRecord(pRecord, AcDb::kForRead);
ASSERT(es==Acad::eOk);
const TCHAR *pszName=NULL;
VERIFY(pRecord->getName(pszName)==Acad::eOk && pszName);
if(_tcsicmp(pszName, _T("__TCHBACK"))==0) {
XPoint ptLow=pRecord->lowerLeftCorner();
XPoint ptUp=pRecord->upperRightCorner();
if(vp.ptLeft.Distance2d(ptLow)<1.0E-3 && vp.ptRight.Distance2d(ptUp)<1.0E-3) {
idRet=pRecord->objectId();
pRecord->close();
break;
}
}
pRecord->close();
}
delete pIterator;
return idRet;
}
Acad::ErrorStatus AddViewport(AcDbViewportTableRecord *pViewport)
{
AcDbDatabase *pCurDwg=acdbCurDwg();
AcDbViewportTable *pVPTable=NULL;
VERIFY(pCurDwg->getViewportTable(pVPTable, AcDb::kForWrite)==Acad::eOk);
//VERIFY(pViewport->setName(_T("__TCHBACK"))==Acad::eOk);
AcDbObjectId id;
Acad::ErrorStatus es=pVPTable->add(id, pViewport);
pVPTable->close();
if(es==Acad::eOk)
pViewport->close();
return es;
}
BOOL TViewportResize::ApplyChange()
{
if(m_bApplied)
return FALSE;
int nTileMode=0;
xg_getvar(_T("TILEMODE"), &nTileMode);
if(!nTileMode)
return FALSE;
CRect rectDwgView;
acedGetAcadDwgView()->GetClientRect(rectDwgView);
double nXHitSize=double(HTSIZE)/rectDwgView.Width();
double nYHitSize=double(HTSIZE)/rectDwgView.Height();
XPushVar<int> expert(_T("EXPERT"), 4);
ads_command(RTSTR, _T("-VPORTS"), RTSTR, _T("S"), RTSTR, _T("__TCHBACK"), RTNONE);
BOOL bVpChanged=FALSE;
for(int i=0; i<m_lstHitObjects.Length(); i++) {
THitViewport *pHitObj=m_lstHitObjects[i];
if((pHitObj->m_nHitFlag&HV_ONEXTEND) && m_nApplyMethod!=VP_RESIZE_EX) {
continue;
}
TViewportInfo ent=pHitObj->m_id;
AcDbObjectId entApply=FindVport(ent);
if(!entApply)
continue;
CRect rect=pHitObj->GetRectOnHitPos(m_nApplyMethod, m_ptFirstHit, m_ptOld);
if(rect.left>rect.right || rect.top>rect.bottom)
rect.left=rect.right=rect.top=rect.bottom=0;
if(abs(rect.left-rectDwgView.left)<=HTSIZE)
rect.left=rectDwgView.left;
if(abs(rect.right-rectDwgView.right)<=HTSIZE)
rect.right=rectDwgView.right;
if(abs(rect.top-rectDwgView.top)<=HTSIZE)
rect.top=rectDwgView.top;
if(abs(rect.bottom-rectDwgView.bottom)<=HTSIZE)
rect.bottom=rectDwgView.bottom;
if(fabs(ent.ptLeft.x)<=nXHitSize)
ent.ptLeft.x=0;
if(fabs(ent.ptLeft.y)<=nYHitSize)
ent.ptLeft.y=0;
if(fabs(ent.ptRight.x-1.0)<=nXHitSize)
ent.ptRight.x=1;
if(fabs(ent.ptRight.y-1.0)<=nYHitSize)
ent.ptRight.y=1;
CPoint ptLowLeft(rect.left, rect.bottom),
ptUpRight(rect.right, rect.top);
XPoint ptLow=Mcs2Lcs(ptLowLeft), ptUp=Mcs2Lcs(ptUpRight);
//if(ptLow.x<0.0) ptLow.x=0.0;
OPENOBJ_BEGIN(entApply, AcDb::kForWrite, AcDbViewportTableRecord, pViewport);
if(pViewport) {
//if(m_nApplyMethod==VP_RESIZE || m_nApplyMethod==VP_RESIZE_EX) {
//}
double xInc=-(ptLow.x-ent.ptLeft.x)+(ptUp.x-ent.ptRight.x);
double yInc=-(ptLow.y-ent.ptLeft.y)+(ptUp.y-ent.ptRight.y);
// 删除视口
if(rect.Width()<=HTSIZE || rect.Height()<=HTSIZE) {
pViewport->erase();
bVpChanged=TRUE;
} else if(fabs(xInc)>nXHitSize || fabs(yInc)>nYHitSize) {
double xIncRatio=xInc/(ent.ptRight.x-ent.ptLeft.x);
double yIncRatio=yInc/(ent.ptRight.y-ent.ptLeft.y);
if(ent.ptLeft.x<=nXHitSize &&
fabs(ptUp.x-ent.ptRight.x)<=nXHitSize &&
fabs(ptUp.y-ent.ptRight.y)<=nYHitSize &&
fabs(ptLow.y-ent.ptLeft.y)<=nYHitSize) {
//从左边新增一视口
AcDbViewportTableRecord *pCloned=(AcDbViewportTableRecord *)pViewport->clone();
XPoint ptUpRight(ptLow.x, ptUp.y);
XPoint ptLowLeft=pCloned->lowerLeftCorner();
ASSERT(ptLowLeft.x>=0.0 && ptLowLeft.y>=0.0 && ptLowLeft.x>=0.0 && ptLowLeft.y>=0.0 && ptLowLeft.x<ptUpRight.x && ptLowLeft.y<ptUpRight.y);
pCloned->setUpperRightCorner(ptUpRight);
pCloned->setWidth(pViewport->width()*fabs(xIncRatio));
AddViewport(pCloned);
} else if(ent.ptLeft.y<=nYHitSize &&
fabs(ptUp.x-ent.ptRight.x)<=nXHitSize &&
fabs(ptUp.y-ent.ptRight.y)<=nYHitSize &&
fabs(ptLow.x-ent.ptLeft.x)<=nXHitSize) {
//从底边新增一视口
AcDbViewportTableRecord *pCloned=(AcDbViewportTableRecord *)pViewport->clone();
XPoint ptUpRight(ptUp.x, ptLow.y);
XPoint ptLowLeft=pCloned->lowerLeftCorner();
ASSERT(ptLowLeft.x<ptUpRight.x && ptLowLeft.y<ptUpRight.y);
pCloned->setUpperRightCorner(ptUpRight);
pCloned->setHeight(pViewport->height()*fabs(yIncRatio));
AddViewport(pCloned);
bVpChanged=TRUE;
} else if(fabs(ent.ptRight.x-1.0)<=nXHitSize &&
fabs(ptLow.y-ent.ptLeft.y)<=nYHitSize &&
fabs(ptUp.y-ent.ptRight.y)<=nYHitSize &&
fabs(ptLow.x-ent.ptLeft.x)<=nXHitSize) {
//从右边新增一视口
AcDbViewportTableRecord *pCloned=(AcDbViewportTableRecord *)pViewport->clone();
XPoint ptLowLeft(ptUp.x, ptLow.y);
XPoint ptUpRight=pCloned->upperRightCorner();
ASSERT(ptLowLeft.x>=0.0 && ptLowLeft.y>=0.0 && ptLowLeft.x<ptUpRight.x && ptLowLeft.y<ptUpRight.y);
pCloned->setLowerLeftCorner(ptLowLeft);
pCloned->setWidth(pViewport->width()*fabs(xIncRatio));
AddViewport(pCloned);
bVpChanged=TRUE;
} else if(fabs(ent.ptRight.y-1.0)<=nYHitSize &&
fabs(ptUp.x-ent.ptRight.x)<=nXHitSize &&
fabs(ptLow.y-ent.ptLeft.y)<=nYHitSize &&
fabs(ptLow.x-ent.ptLeft.x)<=nXHitSize) {
//从顶边新增一视口
AcDbViewportTableRecord *pCloned=(AcDbViewportTableRecord *)pViewport->clone();
XPoint ptLowLeft(ptLow.x, ptUp.y);
XPoint ptUpRight=pCloned->upperRightCorner();
ASSERT(ptLowLeft.x>=0.0 && ptLowLeft.y>=0.0 && ptLowLeft.x<ptUpRight.x && ptLowLeft.y<ptUpRight.y);
pCloned->setLowerLeftCorner(ptLowLeft);
pCloned->setHeight(pViewport->height()*fabs(yIncRatio));
AddViewport(pCloned);
bVpChanged=TRUE;
}
ASSERT(ptLow.x>=0.0 && ptLow.y>=0.0 && ptLow.x<ptUp.x && ptLow.y<ptUp.y);
pViewport->setLowerLeftCorner(ptLow);
pViewport->setUpperRightCorner(ptUp);
pViewport->setWidth(pViewport->width()*(1.0+xIncRatio));
pViewport->setHeight(pViewport->height()*(1.0+yIncRatio));
/*
XPoint ptCen=pViewport->centerPoint();
XVector3D vtInc(xInc, yInc);
CPoint vtIncNew=Lcs2Mcs(vtInc, TRUE);
vtInc.x = vtIncNew.x * pViewport->width()/fabs(Lcs2Mcs(ent.ptRight).x-Lcs2Mcs(ent.ptLeft).x);
vtInc.y = vtIncNew.y * pViewport->height()/fabs(Lcs2Mcs(ent.ptRight).y-Lcs2Mcs(ent.ptLeft).y);
vtInc.x /= 2.0;
vtInc.y /= 2.0;
ptCen += vtInc;
pViewport->setCenterPoint(ptCen);
*/
}
}
OPENOBJ_END();
}
ads_command(RTSTR, _T("-VPORTS"), RTSTR, _T("R"), RTSTR, _T("__TCHBACK"), RTNONE);
ads_command(RTSTR, _T("-VPORTS"), RTSTR, _T("D"), RTSTR, _T("__TCHBACK"), RTNONE);
m_lstHitObjects.Reset();
m_bApplied=TRUE;
m_nApplyMethod=0;
if(bVpChanged)
TDbCamera::ViewportChanged();
return TRUE;
}