624 lines
13 KiB
C++
624 lines
13 KiB
C++
#include "stdafx.h"
|
|
#include "AecGripCback.h"
|
|
//#include "KTSetting.h"
|
|
#include "EarThwormDef.h"
|
|
|
|
static const Adesk::UInt16 kColorByBlock = 0;
|
|
static const Adesk::UInt16 kRed = 1;
|
|
static const Adesk::UInt16 kYellow = 2;
|
|
static const Adesk::UInt16 kGreen = 3;
|
|
static const Adesk::UInt16 kCyan = 4;
|
|
static const Adesk::UInt16 kBlue = 5;
|
|
static const Adesk::UInt16 kMagenta = 6;
|
|
static const Adesk::UInt16 kWhite = 7;
|
|
static const Adesk::UInt16 kColorByLayer = 256;
|
|
|
|
#define LAYER_DIM _T("LAY_CivDim") // Dim
|
|
|
|
// 标注样式
|
|
#define DSTYLE_DIM _T("DSTYLE-1") // Dim
|
|
|
|
using namespace AecGripCback;
|
|
|
|
double PixelToWcs(int nPixel)
|
|
{
|
|
ads_point ptScreenSize;
|
|
double nViewSize;
|
|
struct resbuf rb1, rb2;
|
|
acedGetVar(_T("ScreenSize"), &rb1);
|
|
acedGetVar(_T("ViewSize"), &rb2);
|
|
nViewSize = rb2.resval.rreal;
|
|
ads_point_set(rb1.resval.rpoint, ptScreenSize);
|
|
|
|
if (ptScreenSize[1] < 1.0e-6 || nViewSize < 1.0e-6)
|
|
return 0.0;
|
|
|
|
double hight = (nViewSize / ptScreenSize[Y]) * nPixel;
|
|
return hight;
|
|
}
|
|
|
|
#if (ARX>16)
|
|
const TCHAR* AecGripCback::GripToolTipFunc(AcDbGripData* pThis)
|
|
{
|
|
AecGripData* pAppData = (AecGripData*)pThis->appData();
|
|
if (pAppData->pOwner != NULL)
|
|
{
|
|
|
|
}
|
|
return pAppData->szTip;
|
|
}
|
|
|
|
bool AecGripCback::WorldDrawfunc( AcDbGripData* pThis,
|
|
AcGiWorldDraw* pWd,
|
|
const AcDbObjectId& entId,
|
|
AcDbGripOperations::DrawType type,
|
|
AcGePoint3d* cursor,
|
|
double dGripSize)
|
|
{
|
|
|
|
AcGePoint3d ptGe[5],ptBox[4];
|
|
|
|
AecGripData* pAppData = (AecGripData*)pThis->appData();
|
|
AcGePoint3d ptGrip = pAppData->ptGrip;
|
|
//按 8 个像素点
|
|
int nColor = pWd->subEntityTraits().color();
|
|
pWd->subEntityTraits().setColor(pAppData->nColor);
|
|
|
|
AcGiFillType eFill = pWd->subEntityTraits().fillType();
|
|
pWd->subEntityTraits().setFillType(kAcGiFillAlways);
|
|
|
|
double dCmd = PixelToWcs(15);
|
|
double dOne = PixelToWcs(1);
|
|
double dTxth = 100.0;
|
|
|
|
if (pAppData->ePos == eFlag ||
|
|
pAppData->ePos == eHitEdit )//节点造族中特殊显示,绘制旗帜
|
|
{
|
|
dCmd *= 2;
|
|
|
|
//像素点-->世界坐标系点
|
|
ptGe[0] = ptGrip;
|
|
|
|
acedDwgPoint ptIn;
|
|
ptIn[X] = ptGe[0].x;ptIn[Y] = ptGe[0].y;ptIn[Z] = ptGe[0].z;
|
|
|
|
CPoint ptOut;
|
|
acedCoordFromWorldToPixel(0, ptIn, ptOut);
|
|
|
|
CPoint pt[4];
|
|
pt[0] = ptOut;
|
|
pt[1] = pt[0];pt[1].y -= 10;
|
|
pt[2] = pt[0];pt[2].x += 10;
|
|
pt[3] = pt[0];pt[3].y += 10;
|
|
|
|
acedDwgPoint ptWcs[4];
|
|
for (int k = 0;k < 4;k++)
|
|
{
|
|
acedCoordFromPixelToWorld(0, pt[k], ptWcs[k]);
|
|
ptGe[k].x = ptWcs[k][X];ptGe[k].y = ptWcs[k][Y];
|
|
ptGe[k].z = ptWcs[k][Z];
|
|
}
|
|
|
|
pWd->geometry().polygon(3,ptGe);
|
|
|
|
ptGe[1] = ptGe[3];
|
|
pWd->geometry().polyline(2,ptGe);
|
|
|
|
//pWd->geometry().circle(ptGe[0],dCmd,AcGeVector3d::kZAxis);
|
|
|
|
pWd->subEntityTraits().setFillType(eFill);
|
|
pWd->subEntityTraits().setColor(nColor);
|
|
return true;
|
|
}
|
|
else if ( pAppData->ePos == eEdit)//修改
|
|
{
|
|
dCmd *= 0.5;
|
|
//水平 +字
|
|
//水平
|
|
dCmd *= 0.5;
|
|
|
|
ptGe[0] = ptGrip;
|
|
ptGe[0].x -= dCmd;
|
|
ptGe[1] = ptGrip;
|
|
ptGe[1].x += dCmd;
|
|
|
|
ptBox[0] = ptGe[0];
|
|
ptBox[0].y -= dOne;
|
|
ptBox[1] = ptGe[0];
|
|
ptBox[1].y += dOne;
|
|
ptBox[2] = ptGe[1];
|
|
ptBox[2].y += dOne;
|
|
ptBox[3] = ptGe[1];
|
|
ptBox[3].y -= dOne;
|
|
|
|
pWd->geometry().polygon(4, ptBox);
|
|
|
|
//绘制对角
|
|
ptGe[0].y += dOne;
|
|
ptGe[1].y -= dOne;
|
|
pWd->geometry().polyline(2, ptGe);
|
|
|
|
ptGe[0].y -= 2 * dOne;
|
|
ptGe[1].y += 2 * dOne;
|
|
pWd->geometry().polyline(2, ptGe);
|
|
}
|
|
else if (pAppData->ePos == eAdjust0)//空间十字
|
|
{
|
|
//水平 +字
|
|
//水平
|
|
dCmd *= 0.5;
|
|
|
|
ptGe[0] = ptGrip;
|
|
ptGe[0].x -= dCmd;
|
|
ptGe[1] = ptGrip;
|
|
ptGe[1].x += dCmd;
|
|
|
|
ptBox[0] = ptGe[0];
|
|
ptBox[0].y -= dOne;
|
|
ptBox[1] = ptGe[0];
|
|
ptBox[1].y += dOne;
|
|
ptBox[2] = ptGe[1];
|
|
ptBox[2].y += dOne;
|
|
ptBox[3] = ptGe[1];
|
|
ptBox[3].y -= dOne;
|
|
|
|
pWd->geometry().polygon(4,ptBox);
|
|
|
|
//垂直
|
|
ptGe[0] = ptGrip;
|
|
ptGe[0].y += dCmd;
|
|
ptGe[1] = ptGrip;
|
|
ptGe[1].y -= dCmd;
|
|
|
|
ptBox[0] = ptGe[0];
|
|
ptBox[0].x -= dOne;
|
|
ptBox[1] = ptGe[0];
|
|
ptBox[1].x += dOne;
|
|
ptBox[2] = ptGe[1];
|
|
ptBox[2].x += dOne;
|
|
ptBox[3] = ptGe[1];
|
|
ptBox[3].x -= dOne;
|
|
|
|
pWd->geometry().polygon(4,ptBox);
|
|
|
|
//垂直
|
|
ptGe[0] = ptGrip;
|
|
ptGe[0].z -= dCmd;
|
|
ptGe[1] = ptGrip;
|
|
ptGe[1].z += dCmd;
|
|
|
|
ptBox[0] = ptGe[0];
|
|
ptBox[0].y -= dOne;
|
|
ptBox[1] = ptGe[0];
|
|
ptBox[1].y += dOne;
|
|
ptBox[2] = ptGe[1];
|
|
ptBox[2].y += dOne;
|
|
ptBox[3] = ptGe[1];
|
|
ptBox[3].y -= dOne;
|
|
|
|
pWd->geometry().polygon(4,ptBox);
|
|
|
|
pWd->subEntityTraits().setFillType(eFill);
|
|
pWd->subEntityTraits().setColor(nColor);
|
|
|
|
}
|
|
else if (pAppData->ePos >= eStart && pAppData->ePos <= eEnd)//[]
|
|
{
|
|
ptGe[0] = ptGrip;
|
|
ptGe[0].x -= 4 * dOne;
|
|
ptGe[1] = ptGrip;
|
|
ptGe[1].x += 4 * dOne;;
|
|
|
|
ptBox[0] = ptGe[0];
|
|
ptBox[0].y -= 4 * dOne;
|
|
ptBox[1] = ptGe[0];
|
|
ptBox[1].y += 4 * dOne;
|
|
ptBox[2] = ptGe[1];
|
|
ptBox[2].y += 4 * dOne;
|
|
ptBox[3] = ptGe[1];
|
|
ptBox[3].y -= 4 * dOne;
|
|
|
|
pWd->geometry().polygon(4,ptBox);
|
|
}
|
|
else if(pAppData->ePos == eCommand2)//Mid Cmd
|
|
{
|
|
//+字
|
|
//水平
|
|
dCmd *= 0.6;
|
|
|
|
ptGe[0] = ptGrip;
|
|
ptGe[0].x -= dCmd;
|
|
ptGe[1] = ptGrip;
|
|
ptGe[1].x += dCmd;
|
|
|
|
ptBox[0] = ptGe[0];
|
|
ptBox[0].y -= dOne;
|
|
ptBox[1] = ptGe[0];
|
|
ptBox[1].y += dOne;
|
|
ptBox[2] = ptGe[1];
|
|
ptBox[2].y += dOne;
|
|
ptBox[3] = ptGe[1];
|
|
ptBox[3].y -= dOne;
|
|
|
|
pWd->geometry().polygon(4,ptBox);
|
|
|
|
//垂直
|
|
ptGe[0] = ptGrip;
|
|
ptGe[0].y += dCmd;
|
|
|
|
ptGe[1] = ptGrip;
|
|
|
|
ptBox[0] = ptGe[0];
|
|
ptBox[0].x -= dOne;
|
|
|
|
ptBox[1] = ptGe[0];
|
|
ptBox[1].x += dOne;
|
|
|
|
ptBox[2] = ptGe[1];
|
|
ptBox[2].x += dOne;
|
|
|
|
ptBox[3] = ptGe[1];
|
|
ptBox[3].x -= dOne;
|
|
|
|
pWd->geometry().polygon(4,ptBox);
|
|
pWd->subEntityTraits().setFillType(eFill);
|
|
pWd->subEntityTraits().setColor(nColor);
|
|
}
|
|
else if (pAppData->ePos >= eCommand0 &&
|
|
pAppData->ePos <= eCommand19)//+字
|
|
{
|
|
//+字
|
|
//水平
|
|
dCmd *= 0.6;
|
|
|
|
ptGe[0] = ptGrip;
|
|
ptGe[0].x -= dCmd;
|
|
ptGe[1] = ptGrip;
|
|
ptGe[1].x += dCmd;
|
|
|
|
ptBox[0] = ptGe[0];
|
|
ptBox[0].y -= dOne;
|
|
ptBox[1] = ptGe[0];
|
|
ptBox[1].y += dOne;
|
|
ptBox[2] = ptGe[1];
|
|
ptBox[2].y += dOne;
|
|
ptBox[3] = ptGe[1];
|
|
ptBox[3].y -= dOne;
|
|
|
|
pWd->geometry().polygon(4,ptBox);
|
|
|
|
//垂直
|
|
ptGe[0] = ptGrip;
|
|
ptGe[0].y += dCmd;
|
|
ptGe[1] = ptGrip;
|
|
ptGe[1].y -= dCmd;
|
|
|
|
ptBox[0] = ptGe[0];
|
|
ptBox[0].x -= dOne;
|
|
ptBox[1] = ptGe[0];
|
|
ptBox[1].x += dOne;
|
|
ptBox[2] = ptGe[1];
|
|
ptBox[2].x += dOne;
|
|
ptBox[3] = ptGe[1];
|
|
ptBox[3].x -= dOne;
|
|
|
|
pWd->geometry().polygon(4,ptBox);
|
|
pWd->subEntityTraits().setFillType(eFill);
|
|
pWd->subEntityTraits().setColor(nColor);
|
|
}
|
|
else if (pAppData->ePos >= eDim0 && pAppData->ePos <= eDim2)
|
|
{
|
|
double dUnit = 1.0;
|
|
|
|
struct resbuf rbU;
|
|
acedGetVar(_T("INSUNITS"), &rbU);
|
|
if (rbU.resval.rint == AcDb::kUnitsMeters)
|
|
{
|
|
dUnit = 0.001;
|
|
}
|
|
else if(rbU.resval.rint == AcDb::kUnitsDecimeters)//分米
|
|
{
|
|
dUnit = 0.01;
|
|
}
|
|
else if(rbU.resval.rint == AcDb::kUnitsCentimeters)//厘米
|
|
{
|
|
dUnit = 0.1;
|
|
}
|
|
|
|
AcGiTextStyle txtStyle;
|
|
fromAcDbTextStyle(txtStyle, _T("Pipe_Dim"));
|
|
|
|
struct resbuf rb;
|
|
ads_point vtViewDir;
|
|
acedGetVar(_T("VIEWDIR"),&rb);
|
|
ads_point_set(rb.resval.rpoint,vtViewDir);
|
|
AcGeVector3d vtNorm = asVec3d(vtViewDir);
|
|
|
|
if (pAppData->nDimType == 0)//Line
|
|
{
|
|
AcGePoint3d ptFr = pAppData->ptDim[0];
|
|
AcGePoint3d ptTo = pAppData->ptDim[1];
|
|
AcGePoint3d ptPs = pAppData->ptGrip;
|
|
|
|
//三维标注
|
|
double dLen = ptFr.distanceTo(ptTo);
|
|
TCHAR szDim[256];
|
|
memset(szDim,0,sizeof(szDim));
|
|
_stprintf(szDim,_T("%.f"),dLen);
|
|
|
|
AcGePoint3d ptDim[2],ptOn;
|
|
AcGeLine3d ln3d(ptFr,ptTo);
|
|
ptOn = ln3d.closestPointTo(ptPs);
|
|
|
|
//尺寸线
|
|
AcGeVector3d vt = ptPs - ptOn;
|
|
dLen = vt.length();
|
|
ptDim[0] = ptFr + vt;
|
|
ptDim[1] = ptTo + vt;
|
|
pWd->geometry().polyline(2,ptDim);
|
|
|
|
//Sta侧斜线圆点
|
|
pWd->geometry().circle(ptDim[0],0.25 * dCmd,vtNorm);
|
|
//End侧斜线
|
|
pWd->geometry().circle(ptDim[1],0.25 * dCmd,vtNorm);
|
|
|
|
//Sta侧X线
|
|
vt.normalize();
|
|
vt *= (dLen + 1.5 * 100.0);
|
|
ptDim[0] = ptFr + vt;
|
|
ptDim[1] = ptFr;
|
|
pWd->geometry().polyline(2,ptDim);
|
|
|
|
//End侧X线
|
|
ptDim[0] = ptTo + vt;
|
|
ptDim[1] = ptTo;
|
|
pWd->geometry().polyline(2,ptDim);
|
|
|
|
//标注文字,居中
|
|
AcGeVector3d vtDir = ptTo - ptFr;
|
|
vtDir.normalize();
|
|
txtStyle.setTextSize(dTxth * dUnit);
|
|
txtStyle.setXScale(0.75);
|
|
|
|
AcGePoint2d pt1,pt2;
|
|
txtStyle.extentsBox(szDim,Adesk::kFalse,-1,Adesk::kTrue,pt1,pt2);
|
|
dLen = pt2.x - pt1.x;
|
|
ptPs += 0.5 * dLen * vtDir;
|
|
//vt.normalize();
|
|
//ptPs += vt * 50;
|
|
GetDimDir(vtDir);
|
|
pWd->geometry().text(ptPs,vtNorm,vtDir,szDim,-1,Adesk::kFalse,txtStyle);
|
|
}
|
|
else if (pAppData->nDimType == 1)//半径标注
|
|
{
|
|
AcGePoint3d ptFr = pAppData->ptDim[0];
|
|
AcGePoint3d ptTo = pAppData->ptDim[1];
|
|
AcGePoint3d ptPs = pAppData->ptGrip;
|
|
|
|
TCHAR szDim[256];
|
|
memset(szDim,0,sizeof(szDim));
|
|
_tcscpy(szDim,pAppData->szTip);
|
|
|
|
AcGePoint3d ptDim[2];
|
|
ptDim[0] = ptFr;
|
|
ptDim[1] = ptTo;
|
|
pWd->geometry().polyline(2,ptDim);
|
|
|
|
AcGeVector3d vtL = ptFr - ptTo;
|
|
vtL.normalize();
|
|
vtL *= dTxth * 0.7 * dUnit;
|
|
|
|
AcGeVector3d vtV = vtL;
|
|
vtV.normalize();
|
|
vtV.rotateBy(PI / 2.0,vtNorm);
|
|
vtV *= 41.67 * 0.7 * dUnit;
|
|
|
|
ptGe[0] = ptFr;
|
|
ptGe[1] = ptFr - vtL;
|
|
ptGe[1] += vtV;
|
|
ptGe[2] = ptGe[1] - 2.0 * vtV;
|
|
ptGe[3] = ptGe[0];
|
|
pWd->geometry().polygon(4,ptGe);
|
|
|
|
AcGeVector3d vtDir = ptTo - ptFr;
|
|
vtDir.normalize();
|
|
txtStyle.setTextSize(dTxth * dUnit);
|
|
txtStyle.setXScale(0.75);
|
|
|
|
AcGePoint2d pt1,pt2;
|
|
txtStyle.extentsBox(szDim,Adesk::kFalse,-1,Adesk::kTrue,pt1,pt2);
|
|
double dLen = fabs(pt2.x - pt1.x);
|
|
ptPs += 0.5 * dLen * vtDir;
|
|
//vt.normalize();
|
|
//ptPs += vt * 50;
|
|
GetDimDir(vtDir);
|
|
pWd->geometry().text(ptPs,vtNorm,vtDir,szDim,-1,Adesk::kFalse,txtStyle);
|
|
}
|
|
else if (pAppData->nDimType == 2 ||
|
|
pAppData->nDimType == 4)//DN %%D 直径标注
|
|
{
|
|
AcGePoint3d ptFr = pAppData->ptDim[0];
|
|
AcGePoint3d ptTo = pAppData->ptDim[1];
|
|
AcGePoint3d ptPs = pAppData->ptGrip;
|
|
|
|
TCHAR szDim[256];
|
|
memset(szDim,0,sizeof(szDim));
|
|
_tcscpy(szDim,pAppData->szTip);
|
|
|
|
AcGePoint3d ptDim[2];
|
|
ptDim[0] = ptFr;
|
|
ptDim[1] = ptTo;
|
|
|
|
if (pAppData->nDimType == 2)
|
|
pWd->geometry().polyline(2,ptDim);
|
|
|
|
AcGeVector3d vtL = ptFr - ptTo;
|
|
vtL.normalize();
|
|
vtL *= dTxth * 0.7;
|
|
|
|
AcGeVector3d vtV = vtL;
|
|
vtV.normalize();
|
|
vtV.rotateBy(PI / 2.0,vtNorm);
|
|
vtV *= 41.67 * 0.7 * dUnit;
|
|
|
|
ptGe[0] = ptFr;
|
|
ptGe[1] = ptFr - vtL;
|
|
ptGe[1] += vtV;
|
|
ptGe[2] = ptGe[1] - 2.0 * vtV;
|
|
ptGe[3] = ptGe[0];
|
|
|
|
if (pAppData->nDimType == 2)
|
|
pWd->geometry().polygon(4,ptGe);
|
|
|
|
ptGe[0] = ptTo;
|
|
ptGe[1] = ptTo + vtL;
|
|
ptGe[1] += vtV;
|
|
ptGe[2] = ptGe[1] - 2.0 * vtV;
|
|
ptGe[3] = ptGe[0];
|
|
|
|
if (pAppData->nDimType == 2)
|
|
pWd->geometry().polygon(4,ptGe);
|
|
|
|
AcGeVector3d vtDir = ptTo - ptFr;
|
|
vtDir.normalize();
|
|
txtStyle.setTextSize(dTxth * dUnit);
|
|
txtStyle.setXScale(0.75);
|
|
|
|
AcGePoint2d pt1,pt2;
|
|
txtStyle.extentsBox(szDim,Adesk::kFalse,-1,Adesk::kTrue,pt1,pt2);
|
|
double dLen = fabs(pt2.x - pt1.x);
|
|
ptPs += 0.5 * dLen * vtDir;
|
|
//vt.normalize();
|
|
//ptPs += vt * 50;
|
|
GetDimDir(vtDir);
|
|
pWd->geometry().text(ptPs,vtNorm,vtDir,szDim,-1,Adesk::kFalse,txtStyle);
|
|
}
|
|
else if (pAppData->nDimType == 3)//角度标注
|
|
{
|
|
AcGePoint3d ptFr = pAppData->ptDim[0];
|
|
AcGePoint3d ptTo = pAppData->ptDim[1];
|
|
AcGePoint3d ptCen;
|
|
AcGePoint3d ptMid = pAppData->ptGrip;
|
|
|
|
TCHAR szDim[256];
|
|
memset(szDim,0,sizeof(szDim));
|
|
_tcscpy(szDim,pAppData->szTip);
|
|
|
|
pWd->geometry().circularArc(ptFr,ptMid,ptTo);
|
|
|
|
AcGeCircArc3d cirGe(ptFr,ptMid,ptTo);
|
|
ptCen = cirGe.center();
|
|
|
|
//箭头
|
|
AcGeVector3d vtL = ptFr - ptCen;
|
|
vtL.normalize();
|
|
AcGeVector3d vtV = vtL;
|
|
vtV.rotateBy(PI / 2.0,vtNorm);
|
|
|
|
vtV *= 41.67 * 0.7 * dUnit;
|
|
vtL *= dTxth * 0.7 * dUnit;
|
|
|
|
ptGe[0] = ptFr;
|
|
ptGe[1] = ptFr - vtL;
|
|
ptGe[1] += vtV;
|
|
ptGe[2] = ptGe[1] - 2.0 * vtV;
|
|
ptGe[3] = ptGe[0];
|
|
pWd->geometry().polygon(4,ptGe);
|
|
|
|
vtL = ptTo - ptCen;
|
|
vtL.normalize();
|
|
vtV = vtL;
|
|
vtV.rotateBy(PI / 2.0,vtNorm);
|
|
|
|
vtV *= 41.67 * 0.7 * dUnit;
|
|
vtL *= dTxth * 0.7 * dUnit;
|
|
ptGe[0] = ptTo;
|
|
ptGe[1] = ptTo - vtL;
|
|
ptGe[1] += vtV;
|
|
ptGe[2] = ptGe[1] - 2.0 * vtV;
|
|
ptGe[3] = ptGe[0];
|
|
pWd->geometry().polygon(4,ptGe);
|
|
|
|
vtL = ptFr - ptCen;
|
|
vtL.normalize();
|
|
ptFr += vtL * 1.5 * 100.0;
|
|
|
|
vtL = ptTo - ptCen;
|
|
vtL.normalize();
|
|
ptTo += vtL * 1.5 * 100.0;
|
|
|
|
ptGe[0] = ptCen;
|
|
ptGe[1] = ptFr;
|
|
pWd->geometry().polyline(2,ptGe);
|
|
|
|
ptGe[0] = ptCen;
|
|
ptGe[1] = ptTo;
|
|
pWd->geometry().polyline(2,ptGe);
|
|
|
|
//文字
|
|
vtL = ptMid - ptCen;
|
|
vtL.rotateBy(PI / 2.0,vtNorm);
|
|
vtL.normalize();
|
|
vtL.negate();
|
|
|
|
GetDimDir(vtL);
|
|
pWd->geometry().text(ptMid,vtNorm,vtL,szDim,-1,Adesk::kFalse,txtStyle);
|
|
}
|
|
|
|
pWd->subEntityTraits().setFillType(eFill);
|
|
pWd->subEntityTraits().setColor(nColor);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
void AecGripCback::GetDimDir(AcGeVector3d& vt1)
|
|
{
|
|
double dAngle = 0.0;
|
|
if (vt1.isParallelTo(AcGeVector3d::kXAxis))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (vt1.isParallelTo(AcGeVector3d::kYAxis))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (vt1.x > 1.e-10 && vt1.y > 1.e-10) //I
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (vt1.isCodirectionalTo(-AcGeVector3d::kZAxis))
|
|
{
|
|
vt1.negate();
|
|
return;
|
|
}
|
|
|
|
if (vt1.x < 1.e-10 && vt1.y > 1.e-10) //II
|
|
{
|
|
dAngle = AcGeVector3d::kXAxis.angleTo(vt1,AcGeVector3d::kXAxis);
|
|
dAngle += PI;
|
|
vt1 = AcGeVector3d::kXAxis;
|
|
vt1.rotateBy(dAngle,AcGeVector3d::kZAxis);
|
|
return;
|
|
}
|
|
|
|
if (vt1.x < 1.e-10 && vt1.y < 1.e-10) //III==I
|
|
{
|
|
vt1.negate();
|
|
return;
|
|
}
|
|
|
|
if (vt1.x > 1.e-10 && vt1.y < 1.e-10) //IV==II
|
|
{
|
|
vt1.negate();
|
|
dAngle = AcGeVector3d::kXAxis.angleTo(vt1,AcGeVector3d::kXAxis);
|
|
dAngle += PI;
|
|
vt1 = AcGeVector3d::kXAxis;
|
|
vt1.rotateBy(dAngle,AcGeVector3d::kZAxis);
|
|
return;
|
|
}
|
|
}
|
|
#endif
|