891 lines
31 KiB
C++
891 lines
31 KiB
C++
//-------------------------------------------------------------------------------------------------------+
|
|
// Copyright (C), 1998-2007, SH Software Co. Ltd.
|
|
// = FileName : 导出全局函数头文件
|
|
// = Version : ver2.0
|
|
// = Author : zjq
|
|
// = CreateDate : 2002-09-09
|
|
// = Description: 全局函数的声明
|
|
// = Maintainers:
|
|
//
|
|
//-------------------------------------------------------------------------------------------------------+
|
|
|
|
#ifndef _XGLOBALFUNC_H_
|
|
#define _XGLOBALFUNC_H_
|
|
|
|
#ifndef _XASTRING_H_
|
|
#include "XAString.h"
|
|
#endif
|
|
|
|
#ifndef _XWCSTRING_H_
|
|
#include "XWString.h"
|
|
#endif
|
|
|
|
#ifndef _XASTRINGLIST_H_
|
|
#include "XAStringList.h"
|
|
#endif
|
|
|
|
#ifndef _XWSTRINGLIST_H_
|
|
#include "XWStringList.h"
|
|
#endif
|
|
|
|
#ifndef _PICKSET_H_
|
|
#include "PickSet.h"
|
|
#endif
|
|
|
|
#ifndef _XPOINT_H_
|
|
#include "XPoint.h"
|
|
#endif
|
|
|
|
#ifndef _XMASTERPROPERTIES_H_
|
|
#include "XMasterProperties.h"
|
|
#endif
|
|
|
|
#include "dbltrans.h"
|
|
#include <list>
|
|
|
|
class AEntityBase;
|
|
namespace XExport
|
|
{
|
|
static XPoint g_ptBase; // UCS
|
|
GEOAPI int MoveSamplerStatic(ads_point pt0, ads_matrix mat);
|
|
|
|
// 实体添加到模型空间或页面空间
|
|
//modify by zjq on 100824 添加实体时考虑工作集
|
|
//GEOAPI AcDbObjectId AddToModelSpace(AcDbEntity *pEntity, Adesk::Boolean bDoneClose = Adesk::kTrue);
|
|
//GEOAPI AcDbObjectId AddToPaperSpace(AcDbEntity *pEntity, Adesk::Boolean bDoneClose);
|
|
//GEOAPI AcDbObjectId AddToCurrentSpace(AcDbEntity *pEntity, Adesk::Boolean bDoneClose);
|
|
GEOAPI AcDbObjectId AddToModelSpace(AcDbEntity *pEntity, Adesk::Boolean bDoneClose = Adesk::kTrue ,Adesk::Boolean bWorkset = Adesk::kFalse);
|
|
GEOAPI AcDbObjectId AddToPaperSpace(AcDbEntity *pEntity, Adesk::Boolean bDoneClose ,Adesk::Boolean bWorkset = Adesk::kFalse);
|
|
GEOAPI AcDbObjectId AddToCurrentSpace(AcDbEntity *pEntity, Adesk::Boolean bDoneClose ,Adesk::Boolean bWorkset = Adesk::kFalse);
|
|
|
|
// 把一组新创建的实体添加到模型空间中去
|
|
// bDelWhenfail:当某实体添加不成功时,是否删除已成功添加的对象;
|
|
// arEntitySet:当返回的状态不正确时,arEntitySet中遗留的对象,需要调用处,负责delete;
|
|
GEOAPI int AddArrayToModelSpace(AcDbVoidPtrArray& arEntitySet, AcDbObjectIdArray &arObjId, bool bDelWhenfail = false);
|
|
|
|
// 取图块插入控制点,另一个控制点应为基点
|
|
GEOAPI BOOL GetBlcCtrlPoint(AcDbObjectId blockTableRecordId, XPoint &ptMax);
|
|
|
|
// 对一个文件转换代码页, 只能转R10~R14版本
|
|
GEOAPI int ConvertDwgCodePage(const TCHAR *tmpFile);
|
|
|
|
GEOAPI CView* GetCurDwgView();
|
|
|
|
GEOAPI BOOL IsDigital(const TCHAR *pStr);
|
|
|
|
#if ARX > 17
|
|
// 是否找到 manifest 资源
|
|
GEOAPI bool FindRT_MANIFEST();
|
|
#endif
|
|
|
|
GEOAPI void arxZoomCursor(XPoint ptDcs, double nScale);
|
|
|
|
// 让GsView固定下来
|
|
GEOAPI BOOL PersistGsView(AcGsView *pGsView);
|
|
|
|
/* * * 定 义 对 给 定 的 目 标 点 进 行 正 交 和 咬 住 捕 捉 的 函 数 * * */
|
|
// ptBase(IN) -- 参考基点, ptDest(IN) -- 目标点, ptCapture(OUT) -- 对ptDest进行捕捉修正后的点
|
|
GEOAPI void CapturePoint(const ads_point ptBase, const ads_point ptDest, ads_point ptCapture);
|
|
|
|
// ptBase--UCS
|
|
GEOAPI int DragMovePickSet(PickSet &ss, const TCHAR *pszPrompt, const XPoint &ptBase, XPoint &ptFinal);
|
|
GEOAPI int DragMovePickSet(PickSet &ss, const TCHAR *pszPrompt, const XPoint &ptBase, XPoint &ptFinal,const TCHAR* sKeyword);
|
|
|
|
GEOAPI int DragRotatePickSet(PickSet &ss, const TCHAR *pszPrompt, XPoint ptBase);
|
|
|
|
// 用于不带橡皮筋的移动
|
|
GEOAPI int DragPickSet(PickSet &ss, XPoint &ptBase);
|
|
|
|
// 用于带橡皮筋的复制
|
|
GEOAPI int DragPickSet1(PickSet &ss, XPoint &ptBase);
|
|
|
|
GEOAPI Acad::ErrorStatus ExplodeBlockRef(const AcDbBlockTableRecord &blockRec, const AcGeMatrix3d &mat, AcDbVoidPtrArray &entSet);
|
|
|
|
GEOAPI XString GetTempFileName(const TCHAR *pExt);
|
|
|
|
GEOAPI BOOL GetWcsCursor(XPoint &ptLoc);
|
|
GEOAPI XPoint GetCursorWcs();
|
|
|
|
GEOAPI int ExpInsertDwg(const TCHAR *pszDwg, XPoint ptInsert);
|
|
GEOAPI int ExpInsertDwg(const TCHAR* pszDwg,XPoint ptBase,XPoint ptMin,XPoint ptMax,XPoint ptInsert);
|
|
|
|
GEOAPI void PostCommand(const TCHAR *str, bool bEcho = false);
|
|
|
|
GEOAPI BOOL IsKeyPressed(int vk);
|
|
GEOAPI int GetBlockExtents(AcDbObjectId idBlock, XPoint &ptLow, XPoint &ptUp);
|
|
|
|
GEOAPI void InitLocalMsg(BOOL bTrue);
|
|
GEOAPI void InitGetBegin(int nFlag, const TCHAR *szKeyTable);
|
|
|
|
GEOAPI BOOL IsOfAcadWindows(HWND hwnd);
|
|
|
|
// 把$DWB$DWG分解
|
|
GEOAPI Acad::ErrorStatus SplitBlockName(const TCHAR *sName, XString &sDwb, XString &sDwg);
|
|
|
|
GEOAPI Acad::ErrorStatus ConvertToInteger(const VARIANT *val, int *pInt);
|
|
GEOAPI Acad::ErrorStatus ConvertToDouble(const VARIANT *val, double *pRes);
|
|
|
|
// 从块表中取所有的曲线: 包括LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,以及在INSERT中的前述实体
|
|
GEOAPI void Get2DCurveFromBlock(AcDbBlockTableRecord &blockRec, ads_matrix matForInsert);
|
|
|
|
// 安全方式开窗口搜索选择集
|
|
GEOAPI Acad::ErrorStatus GetSafeSelection(PickSet &ss, BOOL bCrossing, const XPoint &ptLow,const XPoint &ptUp, const TCHAR *pDxfWizard,BOOL bRealCornerSel);
|
|
GEOAPI Acad::ErrorStatus GetSafeSelection(PickSet &ss, BOOL bCrossing, const XPoint &ptLow, const XPoint &ptUp, const TCHAR *szDxf);
|
|
GEOAPI Acad::ErrorStatus GetSafeSelection(PickSet &ss, BOOL bCrossing, const XPoint &ptLow, const XPoint &ptUp, const AcRxClass *pClass,BOOL bRealCornerSel = FALSE);
|
|
// 安全方式开窗口搜索选择集,以arIDs方式返回[zjq 2009-1-17]
|
|
GEOAPI Acad::ErrorStatus GetSafeSelection(AcDbObjectIdArray &arIDs, BOOL bCrossing, const XPoint &ptLow, const XPoint &ptUp, const TCHAR *pDxfWizard,AcDbObjectId idBlock,BOOL bRealCornerSel = FALSE);
|
|
// 安全方式开窗口搜索选择集,以arIDs方式返回[zjq 2009-1-17]
|
|
GEOAPI Acad::ErrorStatus GetSafeSelection(AcDbObjectIdArray &arIDs, BOOL bCrossing, const XPoint &ptLow, const XPoint &ptUp, const AcRxClass *pClass,AcDbObjectId idBlock,BOOL bRealCornerSel = FALSE);
|
|
GEOAPI Acad::ErrorStatus GetSafeSelection(PickSet &ss, BOOL bCrossing, const XPoint &ptLow, const XPoint &ptUp, const AcRxClass *pClass,AcDbObjectId idBlock);
|
|
GEOAPI Acad::ErrorStatus GetSafeSelectionEx(PickSet &ss, BOOL bCrossing, const XPoint &ptLow, const XPoint &ptUp, const AcRxClass *pClass);
|
|
GEOAPI Acad::ErrorStatus GetSafeSelectionEx(PickSet &ss, BOOL bCrossing, const XPoint &ptLow, const XPoint &ptUp, const AcRxClass *pClass,AcDbObjectId idBlock);
|
|
GEOAPI Acad::ErrorStatus GetSafeSelection(PickSet &ss, const XPoint &ptLow, const XPoint &ptUp,std::list<AcRxClass*> &lstClass, AcDbObjectId idLayer);
|
|
// 当前工作集搜索选择集
|
|
GEOAPI Acad::ErrorStatus GetSafeSelection2(PickSet &ss, BOOL bCrossing, const XPoint &ptLow, const XPoint &ptUp, const TCHAR *szDxf);
|
|
GEOAPI Acad::ErrorStatus GetSafeSelection2(PickSet &ss, BOOL bCrossing, const XPoint &ptLow, const XPoint &ptUp, const AcRxClass *pClass);
|
|
GEOAPI Acad::ErrorStatus GetSafeSelection2(PickSet &ss, BOOL bCrossing, const XPoint &ptLow, const XPoint &ptUp, const AcRxClass *pClass,AcDbObjectId idBlock);
|
|
GEOAPI Acad::ErrorStatus GetSafeSelection2(PickSet &ss, const XPoint &ptLow, const XPoint &ptUp,std::list<AcRxClass*> &lstClass, AcDbObjectId idLayer);
|
|
GEOAPI Acad::ErrorStatus GetSafeSelectionEx2(PickSet &ss, BOOL bCrossing, const XPoint &ptLow, const XPoint &ptUp, const AcRxClass *pClass);
|
|
GEOAPI Acad::ErrorStatus GetSafeSelectionEx2(PickSet &ss, BOOL bCrossing, const XPoint &ptLow, const XPoint &ptUp, const AcRxClass *pClass,AcDbObjectId idBlock);
|
|
|
|
//当前视觉空间的图元选择,遇到块引用,选择块对应的rec 中实体[zjq 2009-1-17]
|
|
GEOAPI Acad::ErrorStatus GetViewSafeSelection(AcDbObjectIdArray &arIDs, BOOL bCrossing, const XPoint &ptLow, const XPoint &ptUp,const TCHAR* pszDxf,BOOL bRealCornerSel = FALSE);
|
|
GEOAPI Acad::ErrorStatus GetViewSafeSelection(AcDbObjectIdArray &arIDs, BOOL bCrossing, const XPoint &ptLow, const XPoint &ptUp,const AcRxClass* pClass,BOOL bRealCornerSel = FALSE);
|
|
//获取对应名字的blockrec的id
|
|
GEOAPI AcDbObjectId GetBlockIdFromString(const TCHAR *pszBlock, AcDbDatabase *pDb=NULL);
|
|
|
|
//把图层名字转化为ID
|
|
GEOAPI AcDbObjectId GetLayerIdFromString(const TCHAR* pStr, AcDbDatabase *pDb=NULL);
|
|
|
|
//把线型名字转化为ID
|
|
GEOAPI AcDbObjectId GetLinetypeIdFromString(const TCHAR* pStr, AcDbDatabase *pDb=NULL);
|
|
|
|
//把字样名字转化为ID
|
|
GEOAPI AcDbObjectId GetTextStyleId(const TCHAR *styleName, AcDbDatabase *pDb=NULL);
|
|
|
|
//获取标注样式记录的id
|
|
GEOAPI AcDbObjectId GetDimStyleId(const TCHAR *styleName, AcDbDatabase *pDb=NULL);
|
|
|
|
GEOAPI int GetLayerColor(AcDbObjectId idLay);
|
|
|
|
//把字样ID转化为AcGi的样式
|
|
GEOAPI Acad::ErrorStatus GetAcGiTextStyle(AcDbObjectId styleId, AcGiTextStyle &newStyle);
|
|
|
|
// 把AutoCAD的颜色转成Windows颜色
|
|
GEOAPI void ColorToRGB(int nAcadColor, int *nR, int *nG, int *nB);
|
|
|
|
//构造图块插入的矩阵 (对图块定义的原始坐标用该矩阵进行变换将是WCS下的坐标)
|
|
// ptBase--Block定义的基点; ptInsert--图块插入的点; sx,sy,sz--插入比例; rot--旋转弧度
|
|
// result--变换矩阵
|
|
GEOAPI void get_matrix(const XPoint &ptBase, const XPoint &ptInsert,double sx, double sy, double sz, double rot, ads_matrix result);
|
|
|
|
//释放对象的指针数组, 不仅把数组清空, 而且把数组元素的内存给释放掉
|
|
GEOAPI void ReleaseEntSet(AcDbVoidPtrArray &entSet);
|
|
|
|
//从当前DWG块表记录中选取指定的实体
|
|
// lstObjects--结果; pDxfWizard--实体DXF类型的过滤;
|
|
// nCmpMethod--比较方法, 采用匹配(asd_match)还是相等(stricmp); pszBlk--图块名称
|
|
GEOAPI Acad::ErrorStatus GetEntFromBlockByDxf(DList<AcDbObjectId> &lstObjects, LPCTSTR pDxfWizard, int nCmpMethod = 0, LPCTSTR pszBlk = ACDB_MODEL_SPACE);
|
|
GEOAPI Acad::ErrorStatus GetEntFromBlockByDxf2(DList<AcDbObjectId> &lstObjects, LPCTSTR pDxfWizard, int nCmpMethod = 0, LPCTSTR pszBlk = ACDB_MODEL_SPACE);
|
|
|
|
GEOAPI Acad::ErrorStatus GetEntFromBlockByClass(DList<AcDbObjectId> &lstObjects,AcRxClass *pClass, int nCmpMethod, const TCHAR *pszBlk,LPVOID pReserve = NULL);
|
|
GEOAPI Acad::ErrorStatus GetEntFromBlockByClass(DList<AcDbObjectId> &lstObjects,AcRxClass *pClass, int nCmpMethod, AcDbObjectId idBlock,LPVOID pReserve = NULL);
|
|
GEOAPI Acad::ErrorStatus GetEntFromBlockByClass2(DList<AcDbObjectId> &lstObjects,AcRxClass *pClass, int nCmpMethod, AcDbObjectId idBlock,LPVOID pReserve = NULL);
|
|
|
|
//从当前DWG的模型空间中选取指定的实体
|
|
// lstObjects--结果; pDxfWizard--实体DXF类型的过滤;
|
|
// nCmpMethod--比较方法, 采用匹配(asd_match)还是相等(stricmp)
|
|
GEOAPI Acad::ErrorStatus GetEntByDxf(PickSet &lstObjects, LPCTSTR pDxfWizard, int nCmpMethod=0);
|
|
GEOAPI Acad::ErrorStatus GetEntByDxf2(PickSet &lstObjects, LPCTSTR pDxfWizard, int nCmpMethod=0);
|
|
|
|
//得到块内可见对象
|
|
GEOAPI void GetVisibleEnts(AcDbObjectIdArray &idArray,AcDbObjectId idBlock=AcDbObjectId::kNull,bool bAEntityBaseCast = false,LPVOID pReserv = NULL);
|
|
|
|
// nCmpMethod: 0--Use stricmp; 1--Use ads_TWcmatch
|
|
GEOAPI Acad::ErrorStatus GetEntityFromDatabase(DList<AcDbObjectId> &lstObjects, AcDbDatabase &db, LPCTSTR pDxfWizard, int nCmpMethod, LPCTSTR pszBlock);
|
|
|
|
//增加了区域判断
|
|
GEOAPI Acad::ErrorStatus GetEntityFromDatabase(DList<AcDbObjectId> &lstObjects, AcDbDatabase &db, LPCTSTR pDxfWizard, int nCmpMethod, LPCTSTR pszBlock,XPoint ptMin,XPoint ptMax);
|
|
|
|
//无类型匹配
|
|
GEOAPI Acad::ErrorStatus GetEntityFromDatabase(DList<AcDbObjectId> &lstObjects, AcDbDatabase &db, const TCHAR *pszBlock,XPoint ptMin,XPoint ptMax);
|
|
|
|
// 把象素值换算到WCS下的坐标尺寸
|
|
GEOAPI double PixelToWcs(int nPixel);
|
|
|
|
// 得到耙区在WCS下的大小
|
|
GEOAPI double GetApertureWcs();
|
|
|
|
// 得到拾取框的大小
|
|
GEOAPI double GetPickBoxWcs();
|
|
|
|
// 确保ptLow(左下), ptUp(右上)指定的区域在当前视图的显示范围内
|
|
// 根据需要进行ZOOM, 以便可以开窗口ssget
|
|
GEOAPI Acad::ErrorStatus AssureInCurrentView(const XPoint &ptLow, const XPoint &ptUp);
|
|
|
|
// 用arx的方法进行ZOOM, 不通过COMMAND接口
|
|
GEOAPI Acad::ErrorStatus arxZoom(const XPoint &ptLow, const XPoint &ptUp);
|
|
GEOAPI Acad::ErrorStatus arxZoomTo(const XPoint &ptCen, double nWidth, double nHeight);
|
|
GEOAPI Acad::ErrorStatus arxPan(const XPoint &vtPan);
|
|
|
|
// 取字样的默认尺寸, 已经根据图纸比例换算成为模型空间的尺寸
|
|
GEOAPI double GetTextSize(const TCHAR *m_sTextStyle);
|
|
|
|
// 获取图块插入的参数
|
|
// pBlk(IN)--图块插入; ptBase--基点; nRot--转角
|
|
// ptCen--包络中心; nSizeX, nSizeY, nSizeZ--图块尺寸
|
|
GEOAPI int GetBlockRefSizeInfo(const AcDbBlockReference *pBlk, XPoint &ptBase, double *nRot,XPoint &ptCen, double *nSizeX, double *nSizeY, double *nSizeZ);
|
|
|
|
// 取得下一个图块的名称, 如根据A(a001)推算下一个不存在的图块, 如A(a002)
|
|
// dwb(IN)--图库名称, 全路径; dwg(IN, OUT)--当前图块传人,下一图块名传出
|
|
GEOAPI int GetNextItem(const TCHAR *dwb, TCHAR *dwg);
|
|
|
|
GEOAPI int GetCurveFromInsert2D(Entity &ent, PickSet &ssRes);
|
|
|
|
// 求由一组曲线组成的边界,返回polyline线,用后需要删除
|
|
GEOAPI AcDbCurve* ConvertCurves2Loops(const AcDbVoidPtrArray& arpCurve, AcDbVoidPtrArray& arpResult);
|
|
|
|
GEOAPI double GetBulgeBy3Pt(const AcGePoint3d& ptStart, const AcGePoint3d& ptEnd, const AcGePoint3d& ptSample);
|
|
|
|
GEOAPI int LoadArxApp(const TCHAR *pszAppReg, const TCHAR *pszFileName);
|
|
|
|
GEOAPI resbuf *GetLineFence(double dist, ads_point startPoint, ads_point endPoint);
|
|
|
|
// 建立一个包含一条线的多边形,除了没有将起点封闭外,其余同上
|
|
GEOAPI resbuf *GetLinePoly(double dist, ads_point startPoint, ads_point endPoint);
|
|
|
|
GEOAPI int LoadBlock(const TCHAR *blk);
|
|
|
|
GEOAPI int ExplodeBlockReference(const Entity &ent, ads_matrix mat);
|
|
|
|
//获取文字实体的边框
|
|
GEOAPI int TextGeometry(Entity & textEnt, ads_point cen,double *w, double *h, double *ang);
|
|
GEOAPI int TextGeometry(const TCHAR *text, double *w);
|
|
|
|
GEOAPI int HandleCurveDup(PickSet &ss);
|
|
|
|
GEOAPI int SplitSlbName(const TCHAR *totalName, TCHAR *slbFile, TCHAR *sldFile);
|
|
|
|
//加载dwb块
|
|
GEOAPI int LoadDwbBlock(const TCHAR *sDwbFile, TCHAR *sBlockName);
|
|
GEOAPI int LoadDwbBlock(const TCHAR *sDwbFile, TCHAR *sBlockName,AcDbDatabase*pDb);
|
|
GEOAPI int LoadDwbBlock(const TCHAR *sDwbFile, const TCHAR *sDwgName, TCHAR *sBlockName);
|
|
GEOAPI int LoadDwbBlock(const TCHAR *sDwbFile, const TCHAR *sDwgName, TCHAR *sBlockName,AcDbDatabase*pDb);
|
|
|
|
GEOAPI int GetColorDlg(int color);
|
|
GEOAPI int XGetPoint(const ads_point ref, const TCHAR *prompt, ads_point res);
|
|
|
|
GEOAPI int YesNoQuestion(const TCHAR *s, int nDefaultAnswer=Q_YES);
|
|
|
|
GEOAPI BOOL SplitLibraryPath(const TCHAR *totalName, TCHAR *slbFile, TCHAR *sldFile);
|
|
|
|
GEOAPI XString GetSymbolName(AcDbObjectId idSymbolRec);
|
|
|
|
GEOAPI XString GetTempSymbolName(const TCHAR *symb);
|
|
GEOAPI XString GetTempSymbolName(const TCHAR *symb, const TCHAR *prefix);
|
|
|
|
GEOAPI AcDbObjectId GetTempEntityId(AcRxClass *pClass, const TCHAR *szBlockName, BOOL *bFirstNew);
|
|
|
|
//添加文字样式
|
|
GEOAPI AcDbObjectId AddTextStyle(AcDbTextStyleTableRecord *pRec, BOOL bDoneClosed, AcDbDatabase *pDb=NULL);
|
|
|
|
//添加块记录
|
|
GEOAPI AcDbObjectId AddBlock(AcDbBlockTableRecord *pRec, BOOL bDoneClosed, AcDbDatabase *pDb=NULL);
|
|
|
|
//添加标注样式
|
|
GEOAPI AcDbObjectId AddDimStyle(AcDbDimStyleTableRecord *pRec, BOOL bDoneClosed, AcDbDatabase *pDb=NULL);
|
|
|
|
//添加图层记录
|
|
GEOAPI AcDbObjectId AddLayer(AcDbLayerTableRecord *pLay, BOOL bDoneClosed, AcDbDatabase *pDb=NULL);
|
|
|
|
GEOAPI AcDbObjectId InitLineType(const TCHAR *szLineType, AcDbDatabase *pDb=NULL);
|
|
GEOAPI AcDbObjectId InitTchLineType(const TCHAR *szLineType, AcDbDatabase *pDb=NULL);
|
|
GEOAPI AcDbObjectId MakeBlock(const TCHAR *szBlock, PickSet &ss, XPoint ptInsert);
|
|
|
|
//arx建立图层或取得已有图层id, bApplyChang-是否调用应用图层的改变,TRUE用于ADS, FALSE用于ARX
|
|
GEOAPI AcDbObjectId MakeLayer(const TCHAR *LayName, BOOL bApplyChange);
|
|
GEOAPI AcDbObjectId MakeLayer(const TCHAR *LayName, AcDbDatabase*pDb);
|
|
|
|
// add by zjq on 101118 由对象的id获得对象ownerId,返回值为ownerId
|
|
GEOAPI AcDbObjectId GetOwnerIdFromId(AcDbObjectId idObj);
|
|
GEOAPI int GetViewport(int vp, class Entity &res);
|
|
GEOAPI AcDbObjectId GetMSpaceId(AcDbDatabase *pDb=NULL);
|
|
|
|
GEOAPI void GetSearchPath(XStringList &lstSearchPath);
|
|
GEOAPI int GetFileDia(XString &fullName, int nFlag, const TCHAR *ext, const TCHAR *title);
|
|
GEOAPI void MakeFullPath(const TCHAR *pExt, XString &sFileBm1);
|
|
|
|
// 创建一个指定的目录, 可以不要求事先存在上一级目录
|
|
GEOAPI BOOL MakeDir(const TCHAR *pDir);
|
|
|
|
GEOAPI int arxAssureLayer(const TCHAR *szLayer, int nFlag);
|
|
GEOAPI int AssureLayer(const TCHAR *szLayer, int nFlag);
|
|
|
|
GEOAPI void AssureOnScreen(const XPoint &ptLow, const XPoint &ptUp);
|
|
GEOAPI void AssureTileMode(int nMode);
|
|
|
|
GEOAPI int IsWCS();
|
|
|
|
GEOAPI int TypeOfCode(int code);
|
|
GEOAPI void ApplicationError(const TCHAR *,...);
|
|
GEOAPI int MakeEntity(int,...);
|
|
|
|
GEOAPI void PrintList(const PGroups list);
|
|
|
|
GEOAPI int CT_Inverse_mat(double *A, int order, double ep);
|
|
|
|
// 三点确定的平面法向量
|
|
GEOAPI int CT_vector_plan3p(const ads_point pt1, const ads_point pt2,const ads_point pt3, ads_vector result);
|
|
|
|
// 由点和法向量计算平面的标准方程, 得到plan--存储平面的标准参数
|
|
GEOAPI int CT_plan_equation(const ads_point pt, const ads_vector vt,struct plan_para *plan);
|
|
|
|
// 求线与平面的交点
|
|
GEOAPI int CT_inter_line_plan1(const ads_point pt1, const ads_point pt2,const struct plan_para *plan, ads_point result);
|
|
GEOAPI int CT_inter_line_plan2(const ads_point pt1, const ads_vector vt,const struct plan_para *plan, ads_point result);
|
|
|
|
// 点到平面的投影
|
|
GEOAPI int CT_point_prj_plan(const ads_point pt, const struct plan_para *plan,ads_point qt);
|
|
|
|
// 改变向量格式从点格式到长度,角度格式
|
|
GEOAPI int CT_XYZtoRsita(const ads_point vt, double *direct, double *dist);
|
|
|
|
// 求两向量的夹角
|
|
GEOAPI double CT_VectorAngle(ads_vector pt1, ads_vector pt2);
|
|
|
|
// 去除文件名的路径, 不改变 FileName 如: FileName = _T("d:\abc\exam.dat"), 返回 _T("exam.dat")
|
|
GEOAPI TCHAR * CT_NoPath_FileName(TCHAR *FileName);
|
|
|
|
// 清除字符数组
|
|
GEOAPI void CT_clear_strbuf(char *strbeg, int strsize);
|
|
|
|
// Copy file from f1 to f2
|
|
GEOAPI int CT_cp_file(const TCHAR *f1, const TCHAR *f2);
|
|
|
|
//INI 操作:
|
|
GEOAPI int CT_get_INIB(FILE *fp,const TCHAR *topic,const TCHAR *item_id,TCHAR *item_value);
|
|
GEOAPI int CT_get_INIA(const TCHAR *ini_file,const TCHAR *topic,const TCHAR *item_id,TCHAR *item_value);
|
|
|
|
GEOAPI TCHAR *CT_get_INI2(const struct INI_struct *buf, const TCHAR *desc_handle);
|
|
GEOAPI int CT_get_INIs(const TCHAR *ini_file,const TCHAR *topic,struct INI_struct **res);
|
|
|
|
GEOAPI int CT_ini_item(const TCHAR *string, int i, TCHAR *item);
|
|
GEOAPI TCHAR *CT_strnth(const TCHAR *string, int i, TCHAR *item);
|
|
|
|
GEOAPI int CT_set_INI(const TCHAR *ini_file,const TCHAR *topic,const TCHAR *item_id,const TCHAR *item_value);
|
|
GEOAPI int CT_set_INIB(const TCHAR *ini_file,const TCHAR *topic,const struct INI_struct *desc);
|
|
|
|
// 释放 INI描述链表
|
|
GEOAPI int CT_free_INIs(struct INI_struct *res);
|
|
|
|
// int变字符, 3 --> _T("3").
|
|
GEOAPI int CT_itoa(int num, TCHAR *nn);
|
|
|
|
// 改变字符串长度
|
|
GEOAPI int CT_stradj(TCHAR *str, int len);
|
|
|
|
// change a string to alphabet string
|
|
GEOAPI int CT_alphabet_str(const TCHAR *str, TCHAR *res, int res_size);
|
|
|
|
|
|
GEOAPI BOOL IsWindowsNT();
|
|
|
|
GEOAPI AcDbPolyline* AsPolyline(const AcDbEntity *pEntity);
|
|
|
|
GEOAPI int DisplaySlide(CWnd *pWnd, const TCHAR *pszSlide);
|
|
|
|
GEOAPI void FindDirs(const TCHAR *sDir, XStringList &lstSubDirs);
|
|
GEOAPI int FindFile(const TCHAR *sDbfPath);
|
|
GEOAPI void FindFiles(const TCHAR *sDir, const TCHAR *sFilter, XStringList &lstRes,int bIncludeSubDir=0, time_t tLastModify=0L);
|
|
GEOAPI int FindFile(const TCHAR *sPath, TCHAR *sFullPath);
|
|
|
|
GEOAPI int GetProtectCode();
|
|
|
|
// 取得矩形的几何参数
|
|
GEOAPI int GetRectTangle(resbuf *ptList, Point &cen, double *width, double *height);
|
|
|
|
GEOAPI int GetInsertMatrix(const Entity & insertEnt, ads_matrix result);
|
|
GEOAPI void MatrixMultiply(ads_matrix result, ads_matrix m1, ads_matrix m2, ...);
|
|
GEOAPI void CalTransformMatrix(const XPoint &base, XVector3D scl, double rot,const XPoint &insPt, ads_matrix result);
|
|
|
|
GEOAPI void get_matrix(ads_point pt1,ads_point pt2,ads_point pt3,ads_matrix tran_mt);
|
|
GEOAPI int GetCirDivNum(double r, double h);
|
|
|
|
//编号排序 <-1,==0,>1
|
|
GEOAPI int ACmpLabel(const char*sLabel1,const char*sLabel2);
|
|
GEOAPI int UCmpLabel(const wchar_t* sLabel1,const wchar_t* sLabel2);
|
|
|
|
//复制新字符串,外部负责析构
|
|
GEOAPI char *strnew(const char *src);
|
|
GEOAPI wchar_t *wstrnew(const wchar_t *src);
|
|
|
|
GEOAPI char *strchr_new(const char *string, int c,bool bToFile=true);
|
|
GEOAPI wchar_t *wstrchr_new(const wchar_t *string, int c,bool bToFile=true);
|
|
|
|
// dest include TCHAR from 'from' to 'to, with EOS
|
|
// include 'from', but not include 'to'
|
|
GEOAPI char* StrCpy(char *dest, const char *from, const char *to);
|
|
GEOAPI wchar_t* StrCpy(wchar_t *dest, const wchar_t *from, const wchar_t *to);
|
|
|
|
GEOAPI void getdate(STDate *curDate);
|
|
GEOAPI STDate operator - (STDate &d1, STDate &d2);
|
|
|
|
// yyyymmdd
|
|
GEOAPI void GetDate(TCHAR *pDate);
|
|
|
|
GEOAPI int StrToDate(const TCHAR *strDate, STDate &res );
|
|
GEOAPI int StringToList(const TCHAR *s, XStringList &res);
|
|
|
|
GEOAPI Acad::ErrorStatus ExplodeAcis(const AcDbEntity *pEnt, AcDbVoidPtrArray &entSet);
|
|
|
|
GEOAPI double GetBulgeBy3Pt(const AcGePoint3d& ptStart, const AcGePoint3d& ptEnd, const AcGePoint3d& ptSample);
|
|
|
|
GEOAPI int AT_loaded(const TCHAR * AppName);
|
|
|
|
GEOAPI int AT_amatrix(const ads_matrix mat, ads_matrix amat);
|
|
GEOAPI int AT_ScrCorner(ads_point lowerpt, ads_point upperpt);
|
|
GEOAPI int AT_ScrSize(double *width, double *height);
|
|
GEOAPI int AT_get_blkname(const TCHAR *prefix, TCHAR *blk_name);
|
|
GEOAPI void AT_GetCurDwg(TCHAR *curDwg);
|
|
|
|
GEOAPI struct resbuf *AT_get_resbuf(struct resbuf *p,int code);
|
|
GEOAPI BOOL IsMaskBlock(AcDbBlockTableRecord &block, AcRxClass *pClass);
|
|
|
|
//近似0将转化为0,近似PI2*n将转化为0!
|
|
GEOAPI int LimitCycle(int n, int nLen);
|
|
|
|
GEOAPI int AT_move(ads_name ssname, ads_point bpt, ads_point res);
|
|
GEOAPI int AT_scale(ads_name ssname, ads_point bpt, double *res);
|
|
GEOAPI int AT_rotate(ads_name ssname, ads_point bpt, double *res);
|
|
|
|
GEOAPI struct resbuf *AT_link_list(struct resbuf *list1, struct resbuf *list2);
|
|
|
|
GEOAPI int IsEqual(double prec, int n, double num1, double num2, ...);
|
|
GEOAPI int IsEqual(int n, int num1, int num2, ...);
|
|
|
|
// 初始化平面旋转变换的矩阵 rotAngle -- 转角(弧度) rotMat -- 要被初始化的矩阵
|
|
GEOAPI void AT_InitRotMatrix(double rotAngle, ads_matrix rotMat);
|
|
// 初始化单位矩阵
|
|
GEOAPI void AT_InitIdenMat(ads_matrix id);
|
|
// 根据变换点初始化矩阵 Tx: X轴方向变换距离
|
|
GEOAPI void AT_InitTranMat(ads_matrix tran,double Tx,double Ty,double Tz);
|
|
GEOAPI int AT_multiply_matrix(ads_matrix mat1, ads_matrix mat2, ads_matrix result);
|
|
// 把 pt绕 base旋转 ang 弧度后的结果放回 pt
|
|
GEOAPI void AT_PointRotation(ads_point pt, ads_point base, double ang);
|
|
|
|
//模拟insert命令,可以处理属性
|
|
GEOAPI void InsertInCurrentSpace(AcDbObjectId idBlockRecord,AcGePoint3d ptIns,AcGeScale3d scale,double angle);
|
|
|
|
GEOAPI int GetPickSetByGroup(const TCHAR *szGroup, PickSet &ss);
|
|
|
|
GEOAPI int MakeGroup(PickSet &ss, const TCHAR *pGroupName, BOOL bClearOld);
|
|
// 100115
|
|
// 把一组实体添加成组,若为无名组,pGroupName为_T("*")
|
|
GEOAPI int MakeGroup(AcDbObjectIdArray &arObjId, AcDbObjectId &objId, const TCHAR *pGroupName = _T("*"), bool bClearOld = true, bool bSelectable = true);
|
|
GEOAPI void InitView(AcDbViewTableRecord &view);
|
|
|
|
GEOAPI BOOL IsAcadDwgView(HWND hwnd);
|
|
|
|
GEOAPI BOOL IsCurDwgView(HWND hwnd);
|
|
GEOAPI int ExpInsertDwg0(const TCHAR* pszDwg,XPoint ptBase,XPoint ptMin,XPoint ptMax,XPoint ptInsert);
|
|
//删除模型空间包围盒外的内容
|
|
GEOAPI Acad::ErrorStatus EraseEntityFromDatabase(AcDbDatabase &db,XPoint ptMin,XPoint ptMax);
|
|
|
|
GEOAPI void MakeVisible(PickSet &ss, bool bTrue);
|
|
GEOAPI BOOL IsValidPath(const TCHAR *szPath);
|
|
GEOAPI BOOL AsStdPath(XString &sPath);
|
|
|
|
GEOAPI BOOL arxWBlock(PickSet &ss, const TCHAR* szFileName, XPoint ptIns);
|
|
GEOAPI BOOL IsModelSpace(AcDbObjectId idBlock);
|
|
|
|
#ifdef _REF_EDIT_PATCH
|
|
GEOAPI AcDbLongTransWorkSetIterator* GetCurrentWorkSet();
|
|
GEOAPI BOOL WorkSetHas(AcDbObjectId idEnt);
|
|
#endif
|
|
|
|
GEOAPI BOOL IsArxLoaded(const TCHAR *pszFileName);
|
|
GEOAPI BOOL OnCharAsHotKey(UINT_PTR nChar, UINT_PTR nRepCnt, CPoint ptScreen);
|
|
#if ARX > 22
|
|
GEOAPI bool LocalHotKeyMonitor(MSG* msg);
|
|
#else
|
|
GEOAPI BOOL LocalHotKeyMonitor(MSG* msg);
|
|
#endif
|
|
|
|
GEOAPI void InitGeLib(bool bAttach = true);
|
|
GEOAPI BOOL IsPaperSpace();
|
|
|
|
|
|
GEOAPI BOOL IsUpdateMVBlock();
|
|
GEOAPI void UpdateMVBlockVal(BOOL bTrue);
|
|
GEOAPI int IsExplode3D();
|
|
|
|
GEOAPI void BeginModelRecordZone();
|
|
GEOAPI void ModifyModelRecordZone(const AcDbObject* pObj);
|
|
GEOAPI void EndModelRecordZone();
|
|
GEOAPI bool GetGeomExtentsInRecordZone(AcDbObjectId& id,AcDbExtents& ext);
|
|
|
|
//提示用户选择一个实体, 或者从PickFirst中选取(如果存在), 排除重合实体
|
|
//szPrompt--提示; entResult--结果; ptPick--点取位置; rbBaseMask--DXF过滤表
|
|
GEOAPI int SelectEntity1(const TCHAR *szPrompt, Entity &entResult, XPoint &ptPick, RBList &rbBaseMask);
|
|
|
|
GEOAPI int SelectEntity1(double nPrec, const TCHAR *szPrompt, Entity &entResult, XPoint &ptPick, RBList &rbBaseMask);
|
|
|
|
//提示用户选择一个实体, 或者从PickFirst中选取(如果存在)
|
|
//szPrompt--提示; entResult--结果; ptPick--点取位置; rbBaseMask--DXF过滤表
|
|
GEOAPI int SelectEntity(const TCHAR *szPrompt, Entity &entResult, XPoint &ptPick, RBList &rbBaseMask);
|
|
|
|
//支持关键字,其它同上
|
|
GEOAPI int SelectEntity(const TCHAR *szPrompt, Entity &entResult, XPoint &ptPick, RBList &rbBaseMask,const TCHAR* szKeyword,TCHAR& cRet);
|
|
|
|
//提示用户选择一个实体, 或者从PickFirst中选取(如果存在)
|
|
//szPrompt--提示; entResult--结果; rbBaseMask--DXF过滤表
|
|
GEOAPI int SelectEntity(const TCHAR *szPrompt, Entity &entResult, RBList &rbBaseMask);
|
|
|
|
GEOAPI int SelectEntities(const TCHAR *szPrompt, PickSet &ssResult, RBList &rbBaseMask);
|
|
|
|
GEOAPI int SelectEntities(const TCHAR *szPrompt, PickSet &ssResult, RBList &rbBaseMask,const TCHAR* szKeyword,TCHAR& cRet);
|
|
|
|
inline XString Int2Char8(unsigned nIndex)
|
|
{
|
|
XString sIndex(_T("%d"), nIndex);
|
|
size_t nLen = _tcslen(sIndex);
|
|
XString sRet;
|
|
size_t nSpace = 8 - nLen;
|
|
for (size_t i = 0; i < nSpace; i++)
|
|
{
|
|
sRet << _T("0");
|
|
}
|
|
sRet << sIndex;
|
|
ASSERT(sRet.Length() == 8);
|
|
return sRet;
|
|
}
|
|
|
|
// 求标准周期内的整数
|
|
// nPeriod--周期 (>0)
|
|
// nIndex -- 给定的整数
|
|
// 返回: 0~nPeriod-1内的数值
|
|
inline int DePeriod(int nPeriod, int nIndex)
|
|
{
|
|
ASSERT(nPeriod>0);
|
|
while(nIndex >= nPeriod)
|
|
{
|
|
nIndex -= nPeriod;
|
|
}
|
|
while(nIndex < 0)
|
|
{
|
|
nIndex += nPeriod;
|
|
}
|
|
return nIndex;
|
|
}
|
|
|
|
//获取系统变量
|
|
inline int xg_getvar(const TCHAR *var, int *res)
|
|
{
|
|
resbuf v;
|
|
if (ads_getvar(var, &v) != RTNORM || v.restype != RTSHORT )
|
|
{
|
|
return RTERROR;
|
|
}
|
|
*res = v.resval.rint;
|
|
return RTNORM;
|
|
}
|
|
|
|
inline int xg_getvar(const TCHAR *var, XPoint *res)
|
|
{
|
|
resbuf v;
|
|
if (ads_getvar(var, &v) != RTNORM || (v.restype != RT3DPOINT && v.restype != RTPOINT) )
|
|
{
|
|
return RTERROR;
|
|
}
|
|
*res = v.resval.rpoint;
|
|
return RTNORM;
|
|
}
|
|
|
|
inline int xg_getvar(LPCTSTR var, XPoint &res)
|
|
{
|
|
return xg_getvar(var,&res);
|
|
}
|
|
|
|
inline int xg_getvar(const TCHAR *var, double *res)
|
|
{
|
|
resbuf v;
|
|
if (ads_getvar(var, &v) != RTNORM || v.restype != RTREAL )
|
|
{
|
|
return RTERROR;
|
|
}
|
|
*res = v.resval.rreal;
|
|
return RTNORM;
|
|
}
|
|
|
|
inline int xg_getvar(const TCHAR *var, TCHAR *res)
|
|
{
|
|
resbuf v;
|
|
if (ads_getvar(var, &v) != RTNORM || v.restype != RTSTR )
|
|
{
|
|
return RTERROR;
|
|
}
|
|
_tcscpy(res, v.resval.rstring);
|
|
free(v.resval.rstring);
|
|
return RTNORM;
|
|
}
|
|
|
|
inline int xg_getvar(const TCHAR *var, XString *res)
|
|
{
|
|
resbuf v;
|
|
if (ads_getvar(var, &v) != RTNORM || v.restype != RTSTR )
|
|
{
|
|
return RTERROR;
|
|
}
|
|
|
|
_tcscpy(*res, v.resval.rstring);
|
|
free(v.resval.rstring);
|
|
return RTNORM;
|
|
}
|
|
|
|
inline int xg_getsym(const TCHAR *var, int *res)
|
|
{
|
|
resbuf *v = NULL;
|
|
if (ads_getsym(var, &v) != RTNORM || !v)
|
|
{
|
|
return RTERROR;
|
|
}
|
|
if ( v->restype != RTSHORT )
|
|
{
|
|
ads_relrb(v);
|
|
return RTERROR;
|
|
}
|
|
*res = v->resval.rint;
|
|
ads_relrb(v);
|
|
return RTNORM;
|
|
}
|
|
|
|
inline int xg_getsym(const TCHAR *var, XPoint *res)
|
|
{
|
|
resbuf *v = NULL;
|
|
if (ads_getsym(var, &v) != RTNORM || !v)
|
|
{
|
|
return RTERROR;
|
|
}
|
|
if (v->restype != RT3DPOINT )
|
|
{
|
|
ads_relrb(v);
|
|
return RTERROR;
|
|
}
|
|
*res = v->resval.rpoint;
|
|
ads_relrb(v);
|
|
return RTNORM;
|
|
}
|
|
|
|
inline int xg_getsym(LPCTSTR var, XPoint &res)
|
|
{
|
|
return xg_getsym(var, &res);
|
|
}
|
|
|
|
inline int xg_getsym(const TCHAR *var, double *res)
|
|
{
|
|
resbuf *v = NULL;
|
|
if (ads_getsym(var, &v) != RTNORM || !v)
|
|
{
|
|
return RTERROR;
|
|
}
|
|
if (v->restype != RTREAL )
|
|
{
|
|
ads_relrb(v);
|
|
return RTERROR;
|
|
}
|
|
*res = v->resval.rreal;
|
|
ads_relrb(v);
|
|
return RTNORM;
|
|
}
|
|
|
|
inline int xg_getsym(const TCHAR *var, TCHAR *res)
|
|
{
|
|
resbuf *v;
|
|
if (ads_getsym(var, &v) != RTNORM || !v)
|
|
{
|
|
return RTERROR;
|
|
}
|
|
if (v->restype != RTSTR )
|
|
{
|
|
ads_relrb(v);
|
|
return RTERROR;
|
|
}
|
|
_tcscpy(res, v->resval.rstring);
|
|
ads_relrb(v);
|
|
return RTNORM;
|
|
}
|
|
|
|
inline void ftoa(double f, int nPrec, TCHAR *res)
|
|
{
|
|
XString sFormat;
|
|
sFormat << _T("%.") << nPrec << _T("f");
|
|
_stprintf(res, sFormat, f);
|
|
}
|
|
|
|
inline XString Point2d2Str(const XPoint &pt)
|
|
{
|
|
int luprec;
|
|
xg_getvar(_T("LUPREC"), &luprec);
|
|
XString sFormats;
|
|
sFormats << _T("(%.") << luprec << _T("f,%.") << luprec << _T("f)");
|
|
return XString(sFormats, pt.x, pt.y);
|
|
}
|
|
|
|
inline XString Point3d2Str(const XPoint &pt)
|
|
{
|
|
int luprec;
|
|
xg_getvar(_T("LUPREC"), &luprec);
|
|
XString sFormats;
|
|
sFormats << _T("(%.") << luprec << _T("f,%.") << luprec << _T("f,%.") << luprec << _T("f)");
|
|
return XString(sFormats, pt.x, pt.y, pt.z);
|
|
}
|
|
|
|
inline XString Dist2Str(double nDist)
|
|
{
|
|
int luprec;
|
|
xg_getvar(_T("LUPREC"), &luprec);
|
|
XString sFormat;
|
|
sFormat << _T("%.") << luprec << _T("f");
|
|
return XString(sFormat, nDist);
|
|
}
|
|
|
|
inline XString Angle2Str(double nAng)
|
|
{
|
|
int luprec;
|
|
xg_getvar(_T("AUPREC"), &luprec);
|
|
XString sFormat;
|
|
sFormat << _T("%.") << luprec << _T("f");
|
|
return XString(sFormat, nAng);
|
|
}
|
|
|
|
inline int TextGeometry(resbuf *textEnt, double *w, double *h)
|
|
{
|
|
Point lowLeft, upRight;
|
|
if (ads_textbox(textEnt, lowLeft, upRight) != RTNORM)
|
|
{
|
|
return RTERROR;
|
|
}
|
|
*w = fabs(upRight.x-lowLeft.x);
|
|
*h = fabs(upRight.y-lowLeft.y);
|
|
return RTNORM;
|
|
}
|
|
|
|
// 改变角度范围在(0~2*PI)
|
|
// ang -- 指定源角度
|
|
// 返回值 -- 转化结果(0~2*PI)
|
|
inline double CT_std_angle(double dAngle)
|
|
{
|
|
double dAngleTmp = dAngle;
|
|
|
|
if ( fabs(dAngleTmp - 2.0 * PI) < 1.0E-9 )
|
|
{
|
|
dAngleTmp = 0.0;
|
|
return dAngleTmp;
|
|
}
|
|
|
|
while((dAngleTmp > (PI * 2.0 + 1.0E-9)) || (dAngleTmp < -1.0E-9))
|
|
{
|
|
if (dAngleTmp < -1.0E-9)
|
|
{
|
|
dAngleTmp = dAngleTmp + 2.0 * PI;
|
|
}
|
|
else if (dAngleTmp > (PI * 2.0 + 1.0E-9))
|
|
{
|
|
dAngleTmp = dAngleTmp - 2.0 * PI;
|
|
}
|
|
}
|
|
|
|
return dAngleTmp;
|
|
}
|
|
|
|
// identify a string is null (contains only _T(',') _T(' ') and _T('\t'))
|
|
// string -- the specified string
|
|
// return:
|
|
// 0 -- not null
|
|
// 1 -- null
|
|
inline int CT_null_string(const TCHAR *string)
|
|
{
|
|
const TCHAR *p;
|
|
|
|
p = string;
|
|
while(*p != _T('\0'))
|
|
{
|
|
if (*p != _T(' ') && *p != _T(',') && *p != _T('\t') && *p != _T('\n'))
|
|
{
|
|
return 0;
|
|
}
|
|
p++;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
//0-PI的角度
|
|
inline double CT_acute_angle(double dAngle)
|
|
{
|
|
dAngle = CT_std_angle(dAngle);
|
|
if (dAngle > PI + 1.0E-9)
|
|
{
|
|
dAngle = 2 * PI - dAngle;
|
|
}
|
|
return dAngle;
|
|
}
|
|
|
|
// 求向量 pt1->pt2
|
|
inline void CT_Vector(ads_point pt1, ads_point pt2, ads_vector result)
|
|
{
|
|
result[0] = pt2[0] - pt1[0];
|
|
result[1] = pt2[1] - pt1[1];
|
|
result[2] = pt2[2] - pt1[2];
|
|
}
|
|
|
|
inline int Maximum(int n, int r1, ...)
|
|
{
|
|
MAX_MIN(max, int);
|
|
}
|
|
|
|
inline double Maximum(int n, double r1, ...)
|
|
{
|
|
MAX_MIN(max, double);
|
|
}
|
|
|
|
inline int Minimum(int n, int r1, ...)
|
|
{
|
|
MAX_MIN(min, int);
|
|
}
|
|
|
|
inline double Minimum(int n, double r1, ...)
|
|
{
|
|
MAX_MIN(min, double);
|
|
}
|
|
|
|
inline XPoint Maximum(int n, class XPoint r1, ...)
|
|
{
|
|
MAX_MIN(Max, XPoint);
|
|
}
|
|
|
|
inline XPoint Minimum(int n, class XPoint r1, ...)
|
|
{
|
|
MAX_MIN(Min, XPoint);
|
|
}
|
|
};
|
|
|
|
//转为正常观察文字时的角度
|
|
inline double AsViewAngle(double ang)
|
|
{
|
|
double dAngleTmp;
|
|
dAngleTmp = XExport::CT_std_angle(ang);
|
|
if (dAngleTmp > PI/2.0+0.0001 && dAngleTmp<PI+0.0001)
|
|
{
|
|
dAngleTmp += PI;
|
|
}
|
|
else if (dAngleTmp > PI-0.0001 && dAngleTmp < PI*1.5+0.0001)
|
|
{
|
|
dAngleTmp -= PI;
|
|
}
|
|
return dAngleTmp;
|
|
}
|
|
|
|
using namespace XExport;
|
|
|
|
#endif
|