天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 301|回复: 10

ObjectArx笔记

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-2-27 16:25:03 | 显示全部楼层 |阅读模式
  1. asPnt3d();                //将ads采用point转换成AcGePoint3d
  2. asVec3d();                //将ads采用point转换成AcGeVector3d
  3. asDblArray();        //将AcGePoint3d或AcGeVector3d转换成ads采用point
复制代码

 

 

 

 

ObjectArx笔记

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
 楼主| 发表于 2024-2-27 16:25:09 | 显示全部楼层
  1. acdbOpenAcDbEntity(); acdbOpenAcDbObject(); acdbOpenObject(); //从ID到指针(更优雅的方式:智能指针)
  2. AcDbObject::objectId();                //从指针到ID
  3. AcDbDatabase::getAcDbObjectId();        //从句柄到ID
  4. AcDbObjectId::handle();                //从ID到句柄
  5. AcDbObject::getAcDbHandle();                //从指针到句柄
  6. 全局函数::acdbGetObjectId();                //从ads采用name到ID
  7. 全局函数::acdbGetAdsName();                        //从ID到ads采用name
复制代码

 

 

 

 

ObjectArx笔记

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
 楼主| 发表于 2024-2-27 16:25:16 | 显示全部楼层
  1. //功能:用户坐标系转换为世界坐标系
  2. AcGePoint3d UcsToWcsPoint( const AcGePoint3d &point );
  3. //功能:世界坐标系转换成用户坐标系
  4. AcGePoint3d WcsToUcsPoint( const AcGePoint3d &point );
  5. //功能:世界坐标转显示坐标
  6. AcGePoint3d WcsToDcsPoint(const AcGePoint3d &point);
  7. AcGePoint3d CCommonFunc::UcsToWcsPoint( const AcGePoint3d &point )
  8. {
  9.         // 转换成世界坐标 ;
  10.         AcGePoint3d pt;
  11.         struct resbuf rbFrom, rbTo;
  12.         rbFrom.restype = RTSHORT;
  13.         rbFrom.resval.rint = 1; // from UCS;
  14.         rbTo.restype = RTSHORT;
  15.         rbTo.resval.rint = 0; // to WCS;
  16.         acedTrans(asDblArray(point), &rbFrom, &rbTo, Adesk::kFalse, asDblArray(pt));
  17.         return pt;
  18. }
  19. AcGePoint3d CCommonFunc::WcsToUcsPoint( const AcGePoint3d &point )
  20. {
  21.         // 转换成用户坐标        ;
  22.         AcGePoint3d pt;
  23.         struct resbuf rbFrom, rbTo;
  24.         rbFrom.restype = RTSHORT;
  25.         rbFrom.resval.rint = 0; // from WCS;
  26.         rbTo.restype = RTSHORT;
  27.         rbTo.resval.rint = 1; // to UCS;
  28.         acedTrans(asDblArray(point), &rbFrom, &rbTo, Adesk::kFalse, asDblArray(pt));
  29.         return pt;
  30. }
  31. AcGePoint3d CCommonFunc::WcsToDcsPoint( const AcGePoint3d &point )
  32. {
  33.         // 转换成显示坐标       
  34.         AcGePoint3d pt;
  35.         struct resbuf rbFrom, rbTo;
  36.         rbFrom.restype = RTSHORT;
  37.         rbFrom.resval.rint = 0; // from WCS
  38.         rbTo.restype = RTSHORT;
  39.         rbTo.resval.rint = 2; // to DCS
  40.         acedTrans(asDblArray(point), &rbFrom, &rbTo, Adesk::kFalse, asDblArray(pt));
  41.         return pt;
  42. }
复制代码

 

 

 

 

ObjectArx笔记

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
 楼主| 发表于 2024-2-27 16:25:24 | 显示全部楼层
  1. //功能:三维点转换为二维点
  2. AcGePoint2d ToPoint2d(const AcGePoint3d &point3d);
  3. //功能:二维点转换为三维点
  4. AcGePoint3d ToPoint3d(const AcGePoint2d &point2d, double z = 0);
  5. AcGePoint2d CCommonFunc::ToPoint2d( const AcGePoint3d &point3d )
  6. {
  7.         return AcGePoint2d(point3d.x, point3d.y);
  8. }
  9. AcGePoint3d CCommonFunc::ToPoint3d( const AcGePoint2d &point2d, double z /*= 0*/ )
  10. {
  11.         return AcGePoint3d(point2d.x, point2d.y, z);
  12. }
复制代码

 

 

 

 

ObjectArx笔记

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
 楼主| 发表于 2024-2-27 16:25:32 | 显示全部楼层
  1. AcDbObjectId PubFunc::GetIdByPoint(const AcGePoint3d& pt)
  2. {
  3.         AcDbObjectId id = AcDbObjectId::kNull;
  4.         ads采用name ssname;
  5.         if (RTNORM != acedSSGet(NULL, asDblArray(pt),NULL,NULL, ssname))
  6.                 return id;
  7.         //遍历选择集
  8.         long lLength = 0;
  9.         acedSSLength(ssname,&lLength);
  10.         for (int i = 0; i < lLength; i++)
  11.         {
  12.                 ads采用name name;
  13.                 acedSSName(ssname,i,name);
  14.                 acdbGetObjectId(id, name);
  15.         }
  16.        
  17.         return id;
  18. }
复制代码

 

 

 

 

ObjectArx笔记

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
 楼主| 发表于 2024-2-27 16:25:41 | 显示全部楼层
  1. //CAD实体定位
  2. bool OrientationEntity(const AcDbObjectId& entId);
  3. //设置窗口的比例
  4. void SetScaleOfWindow(AcGePoint3d& MinPt, AcGePoint3d& MaxPt, double dScale);
复制代码

 

 

 

 

ObjectArx笔记

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
 楼主| 发表于 2024-2-27 16:25:50 | 显示全部楼层
  1. bool PubFunc::OrientationEntity(const AcDbObjectId& entId)
  2. {
  3.         //移动当前视图
  4.         AcDbExtents extent;
  5.         AcDbEntity* pEnt = NULL;
  6.         if (Acad::eOk == acdbOpenAcDbEntity(pEnt, entId, AcDb::kForWrite))
  7.         {
  8.                 pEnt->getGeomExtents(extent);
  9. //                pEnt->highlight();//设置实体为高亮状态
  10.                 pEnt->close();
  11.         }
  12.         AcGePoint3d MinPt = extent.minPoint();
  13.         AcGePoint3d MaxPt = extent.maxPoint();
  14.         SetScaleOfWindow(MinPt, MaxPt, 2);//设置窗口的倍数
  15.         CString strCommand;
  16.         strCommand.Format(采用T("ZOOM\nw\n%lf,%lf,%lf\n%lf,%lf,%lf\n"), MinPt.x, MinPt.y, MinPt.z, MaxPt.x, MaxPt.y, MaxPt.z);
  17.         acDocManager->sendStringToExecute(acDocManager->curDocument(), strCommand, true, false, false);
  18.         return true;
  19. }
  20. void PubFunc::SetScaleOfWindow(AcGePoint3d& MinPt, AcGePoint3d& MaxPt, double dScale)
  21. {
  22.         double dWidth = fabs(MaxPt.x - MinPt.x);
  23.         double dHeight = fabs(MaxPt.y - MaxPt.y);
  24.         AcGePoint3d CenterPt;
  25.         CenterPt.x = (MaxPt.x + MinPt.x) / 2;
  26.         CenterPt.y = (MaxPt.y + MinPt.y) / 2;
  27.         MaxPt.x = CenterPt.x + (dWidth / 2) * dScale;
  28.         MaxPt.y = CenterPt.y + (dHeight / 2) * dScale;
  29.         MinPt.x = CenterPt.x - (dWidth / 2) * dScale;
  30.         MinPt.y = CenterPt.y - (dHeight / 2) * dScale;
  31. }
复制代码

 

 

 

 

ObjectArx笔记

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
 楼主| 发表于 2024-2-27 16:25:59 | 显示全部楼层
  1. //************************************
  2. // Summary:         得到当前视图设置
  3. // Parameters:        
  4. //    view                -         输出当前视图信息
  5. // Returns:          
  6. //************************************
  7. void GetCurrentView(AcDbViewTableRecord &view);
  8. //************************************
  9. // Summary:         根据指定范围切换视图
  10. // Parameters:        
  11. //    ptMin                -         输入视图最小点
  12. //    ptMax                -         输入视图最大点
  13. //    scale                -         输入比例(一般不会直接切换到实体大小,可以用scale调整一下)
  14. // Returns:          
  15. //************************************
  16. void SetViewExtent(const AcGePoint3d &ptMin, const AcGePoint3d &ptMax, double scale = 1.0);
复制代码

 

 

 

 

ObjectArx笔记

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
 楼主| 发表于 2024-2-27 16:26:05 | 显示全部楼层
  1. void PubFunc::GetCurrentView(AcDbViewTableRecord &view)
  2. {
  3.         struct resbuf rb;
  4.         struct resbuf wcs, ucs, dcs;        // 转换坐标时使用的坐标系统标记
  5.         wcs.restype = RTSHORT;
  6.         wcs.resval.rint = 0;
  7.         ucs.restype = RTSHORT;
  8.         ucs.resval.rint = 1;
  9.         dcs.restype = RTSHORT;
  10.         dcs.resval.rint = 2;
  11.         // 获得当前视口的"查看"模式
  12.         acedGetVar(TEXT("VIEWMODE"), &rb);
  13.         view.setPerspectiveEnabled((rb.resval.rint & 1) != 0);
  14.         view.setFrontClipEnabled((rb.resval.rint & 2) != 0);
  15.         view.setBackClipEnabled((rb.resval.rint & 4) != 0);
  16.         view.setFrontClipAtEye((rb.resval.rint & 16) == 0);
  17.         // 当前视口中视图的中心点(UCS坐标)
  18.         acedGetVar(TEXT("VIEWCTR"), &rb);
  19.         acedTrans(rb.resval.rpoint, &ucs, &dcs, 0, rb.resval.rpoint);
  20.         view.setCenterPoint(AcGePoint2d(rb.resval.rpoint[X],
  21.                 rb.resval.rpoint[Y]));
  22.         // 当前视口透视图中的镜头焦距长度(单位为毫米)
  23.         acedGetVar(TEXT("LENSLENGTH"), &rb);
  24.         view.setLensLength(rb.resval.rreal);
  25.         // 当前视口中目标点的位置(以 UCS 坐标表示)
  26.         acedGetVar(TEXT("TARGET"), &rb);
  27.         acedTrans(rb.resval.rpoint, &ucs, &wcs, 0, rb.resval.rpoint);
  28.         view.setTarget(AcGePoint3d(rb.resval.rpoint[X],
  29.                 rb.resval.rpoint[Y], rb.resval.rpoint[Z]));
  30.         // 当前视口的观察方向(UCS)
  31.         acedGetVar(TEXT("VIEWDIR"), &rb);
  32.         acedTrans(rb.resval.rpoint, &ucs, &wcs, 1, rb.resval.rpoint);
  33.         view.setViewDirection(AcGeVector3d(rb.resval.rpoint[X],
  34.                 rb.resval.rpoint[Y], rb.resval.rpoint[Z]));
  35.         // 当前视口的视图高度(图形单位)
  36.         acedGetVar(TEXT("VIEWSIZE"), &rb);
  37.         view.setHeight(rb.resval.rreal);
  38.         double height = rb.resval.rreal;
  39.         // 以像素为单位的当前视口的大小(X 和 Y 值)
  40.         acedGetVar(TEXT("SCREENSIZE"), &rb);
  41.         view.setWidth(rb.resval.rpoint[X] / rb.resval.rpoint[Y] * height);
  42.         // 当前视口的视图扭转角
  43.         acedGetVar(TEXT("VIEWTWIST"), &rb);
  44.         view.setViewTwist(rb.resval.rreal);
  45.         // 将模型选项卡或最后一个布局选项卡置为当前
  46.         acedGetVar(TEXT("TILEMODE"), &rb);
  47.         int tileMode = rb.resval.rint;
  48.         // 设置当前视口的标识码
  49.         acedGetVar(TEXT("CVPORT"), &rb);
  50.         int cvport = rb.resval.rint;
  51.         // 是否是模型空间的视图
  52.         bool paperspace = ((tileMode == 0) && (cvport == 1)) ? true : false;
  53.         view.setIsPaperspaceView(paperspace);
  54.         if (!paperspace)
  55.         {
  56.                 // 当前视口中前向剪裁平面到目标平面的偏移量
  57.                 acedGetVar(TEXT("FRONTZ"), &rb);
  58.                 view.setFrontClipDistance(rb.resval.rreal);
  59.                 // 获得当前视口后向剪裁平面到目标平面的偏移值
  60.                 acedGetVar(TEXT("BACKZ"), &rb);
  61.                 view.setBackClipDistance(rb.resval.rreal);
  62.         }
  63.         else
  64.         {
  65.                 view.setFrontClipDistance(0.0);
  66.                 view.setBackClipDistance(0.0);
  67.         }
  68. }
  69. void PubFunc::SetViewExtent(const AcGePoint3d &ptMin, const AcGePoint3d &ptMax, double scale /*= 1.0*/)
  70. {
  71.         AcDbViewTableRecord view;
  72.         GetCurrentView(view);
  73.         // 将参数的两个点从世界坐标系转换到显示坐标系
  74.         AcGePoint2d ptMinDcs = ArxDbgUtils::ucsToDcs(ArxDbgUtils::wcsToUcs(ptMin));
  75.         AcGePoint2d ptMaxDcs = ArxDbgUtils::ucsToDcs(ArxDbgUtils::wcsToUcs(ptMax));
  76.         // 设置视图的中心点
  77.         view.setCenterPoint(AcGePoint2d((ptMinDcs.x + ptMaxDcs.x) / 2, (ptMinDcs.y + ptMaxDcs.y) / 2));
  78.         // 设置视图的高度和宽度
  79.         view.setHeight(fabs(ptMinDcs.y - ptMaxDcs.y) * scale);
  80.         view.setWidth(fabs(ptMinDcs.x - ptMaxDcs.x) * scale);
  81.         // 将视图对象设置为当前视图
  82.         acedSetCurrentView(&view, NULL);
  83. }
复制代码

 

 

 

 

ObjectArx笔记

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
 楼主| 发表于 2024-2-27 16:26:17 | 显示全部楼层
  1. //************************************
  2. // Summary:         设置实体被选中
  3. // Parameters:        
  4. //    idEnt                -         输入实体id
  5. //    bSeled                -         输入布尔值:是否被选中
  6. //    bHighlight                -         输入布尔值:是否高亮显示
  7. // Returns:          
  8. //************************************
  9. void SetEntSelected(const AcDbObjectId& idEnt, bool bSeled = true, bool bHighlight = true);
复制代码

 

 

 

 

ObjectArx笔记
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 11:38 , Processed in 0.152102 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表