找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 919|回复: 14

[求助] 请大神出手看看

[复制链接]
发表于 2018-11-21 21:06:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
这种效果怎么实现,有什么思路嘛,有例子最好了
13.gif
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-11-21 21:08:42 | 显示全部楼层
点监视器+BPOLY
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-21 21:36:58 | 显示全部楼层
不懂啊,能进一步说下嘛
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-21 21:38:16 | 显示全部楼层
bploy是啥!!!!!!!!!!!!!!!!!!!!!

点评

你在ACAD里面执行下 bpoly 就是获取边界  详情 回复 发表于 2018-11-21 21:42
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2018-11-21 21:42:42 | 显示全部楼层
zx0913 发表于 2018-11-21 21:38
bploy是啥!!!!!!!!!!!!!!!!!!!!!

你在ACAD里面执行下 bpoly
就是获取边界
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2018-11-22 10:32:42 | 显示全部楼层
最简单的十字线用grread动态拾取点,画十字线,用ssget “f”模式,选择对象,获取碰撞对象交点
另外一种就是用bpoly,在cad2011开始有函数提供acedTraceBoundary。
个人觉得第一种很好实现。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-22 12:57:45 | 显示全部楼层
看来是个很麻烦的功能,放弃了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2018-11-22 14:19:32 | 显示全部楼层


简单演示,十字线碰撞,暂不考虑倾斜线的情况,
示例代码(仅供参考)
  1. //acedSSGet "f"模式获取交点
  2.         static bool MyGetCrossPoint(ads_point ptCenter,ads_point ptPolar,ads_point &ptEnd)
  3.         {               
  4.                 bool bflag=false;
  5.                 ads_name ss;               
  6.                 struct resbuf *rbList;
  7.                 struct resbuf *rbFilters;
  8.                 rbList=acutBuildList(RT3DPOINT,ptCenter,RT3DPOINT,ptPolar,RTNONE);
  9.                 rbFilters = acutBuildList(RTDXF0,_T("circle,arc,*Line,ellipse"),RTNONE);
  10.                 if (RTNORM == acedSSGet(_T("F"),rbList,NULL,rbFilters,ss))
  11.                 {
  12.                         struct resbuf *rbOut;
  13.                         acedSSNameX(&rbOut,ss,0);
  14.                         while(rbOut)
  15.                         {
  16.                                 if (rbOut->restype == RT3DPOINT)
  17.                                 {                                       
  18.                                         ptEnd[X] = rbOut->resval.rpoint[X];
  19.                                         ptEnd[Y] = rbOut->resval.rpoint[Y];
  20.                                         ptEnd[Z] = rbOut->resval.rpoint[Z];                                       
  21.                                         bflag=true;
  22.                                         break;
  23.                                 }
  24.                                 rbOut=rbOut->rbnext;
  25.                         }
  26.                         acutRelRb(rbOut);
  27.                         acedSSFree(ss);
  28.                 }
  29.                 acutRelRb(rbList);
  30.                 acutRelRb(rbFilters);
  31.                 return bflag;
  32.         }
  33.         static AcDbObjectId PostToModelSpace(AcDbEntity* pEnt)
  34.         {
  35.                 AcDbBlockTable *pBlockTable;
  36.                 acdbHostApplicationServices()->workingDatabase()
  37.                         ->getBlockTable(pBlockTable, AcDb::kForRead);
  38.                 AcDbBlockTableRecord *pBlockTableRecord;
  39.                 pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
  40.                         AcDb::kForWrite);  
  41.                 AcDbObjectId entId;
  42.                 pBlockTableRecord->appendAcDbEntity(entId, pEnt);  
  43.                 pBlockTable->close();
  44.                 pBlockTableRecord->close();
  45.                 pEnt->close();  
  46.                 return entId;
  47.         }
  48.         // - sk_ArxTestCode20181101.mycross command (do not rename)
  49.         static void sk_ArxTestCode20181101mycross(void)
  50.         {
  51.                
  52.                 // Add your code for command sk_ArxTestCode20181101.mycross here
  53.                 const double myPI = 3.14159265358979323846;
  54.                 int nTrack=1,nType;
  55.                 AcDbObjectId txtObjId=AcDbObjectId::kNull;
  56.                 struct resbuf rbRet;
  57.                 while(nTrack>0)
  58.                 {       
  59.                         acedGrRead(nTrack,&nType,&rbRet);
  60.                         ads_point ptCenter;
  61.                         ptCenter[X]=rbRet.resval.rpoint[X];
  62.                         ptCenter[Y]=rbRet.resval.rpoint[Y];
  63.                         ptCenter[Z]=rbRet.resval.rpoint[Z];
  64.                         //设置十字线的四点,最好按屏幕坐标点计算,这里只是演示
  65.                         ads_point ptLeft,ptRight,ptUp,ptDown;
  66.                         acutPolar(ptCenter,myPI,10000000.0,ptLeft);
  67.                         acutPolar(ptCenter,0.0,10000000.0,ptRight);
  68.                         acutPolar(ptCenter,myPI*0.5,10000000.0,ptUp);
  69.                         acutPolar(ptCenter,myPI*1.5,10000000.0,ptDown);
  70.                         //重画消除Grdraw绘制的线
  71.                         acedRedraw(NULL,NULL);
  72.                         ads_point ptEnd1,ptEnd2,ptEnd3,ptEnd4;
  73.                         bool bIsEnd1=false,bIsEnd2=false,bIsEnd3=false,bIsEnd4=false;
  74.                         //调用函数获取十字线与之相交的交点
  75.                         if (MyGetCrossPoint(ptCenter,ptLeft,ptEnd1))
  76.                         {
  77.                                 bIsEnd1 = true;                               
  78.                         }
  79.                         if (MyGetCrossPoint(ptCenter,ptRight,ptEnd2))
  80.                         {
  81.                                 bIsEnd2 = true;                                       
  82.                         }
  83.                         if (MyGetCrossPoint(ptCenter,ptUp,ptEnd3))
  84.                         {
  85.                                 bIsEnd3 = true;                               
  86.                         }
  87.                         if (MyGetCrossPoint(ptCenter,ptDown,ptEnd4))
  88.                         {
  89.                                 bIsEnd4 = true;                               
  90.                         }
  91.                         if (bIsEnd1 && bIsEnd2)
  92.                         {
  93.                                 //虚拟绘制水平线
  94.                                 acedGrDraw(ptEnd1,ptEnd2,6,-1);
  95.                                 //以下是创建和修改长度对象的文字,类似的可以添加箭头线
  96.                                 ads_point ptMid1;
  97.                                 ptMid1[X]=ptEnd1[X]*0.5+ptEnd2[X]*0.5;
  98.                                 ptMid1[Y]=ptEnd1[Y]*0.5+ptEnd2[Y]*0.5;
  99.                                 ptMid1[Z]=ptEnd1[Z]*0.5+ptEnd2[Z]*0.5;
  100.                                 double dLineLenth=acutDistance(ptEnd1,ptEnd2);
  101.                                 CString strLenth1;
  102.                                 strLenth1.Format(_T("lenth=%0.2lf"),dLineLenth);
  103.                                 if (txtObjId == AcDbObjectId::kNull)
  104.                                 {       
  105.                                         //首次新建文字
  106.                                         AcDbText *pNewTxt=new AcDbText(asPnt3d(ptMid1),strLenth1);
  107.                                         pNewTxt->setHorizontalMode(AcDb::kTextCenter);
  108.                                         pNewTxt->setAlignmentPoint(asPnt3d(ptMid1));
  109.                                         txtObjId=PostToModelSpace(pNewTxt);
  110.                                 }
  111.                                 else
  112.                                 {
  113.                                         //修改文字特性
  114.                                         AcDbEntity *pEnt=NULL;
  115.                                         Acad::ErrorStatus es=acdbOpenAcDbEntity(pEnt,txtObjId,AcDb::kForWrite);
  116.                                         if (Acad::eOk == es)
  117.                                         {
  118.                                                 AcDbText *pTxt=NULL;
  119.                                                 pTxt=AcDbText::cast(pEnt);
  120.                                                 if (pTxt!=NULL)
  121.                                                 {                                                       
  122.                                                         pTxt->setTextString(strLenth1);
  123.                                                         pTxt->setAlignmentPoint(asPnt3d(ptMid1));
  124.                                                 }
  125.                                                 pEnt->close();
  126.                                         }
  127.                                 }
  128.                         }
  129.                         else
  130.                         {
  131.                                 if (txtObjId != AcDbObjectId::kNull)
  132.                                 {
  133.                                         //无效区域删除文字,并置空objId
  134.                                         AcDbEntity *pEnt=NULL;
  135.                                         Acad::ErrorStatus es=acdbOpenAcDbEntity(pEnt,txtObjId,AcDb::kForWrite);
  136.                                         if (Acad::eOk == es)
  137.                                         {
  138.                                                 pEnt->erase();
  139.                                                 pEnt->close();
  140.                                         }
  141.                                         txtObjId =AcDbObjectId::kNull;
  142.                                 }
  143.                         }
  144.                         if (bIsEnd3 && bIsEnd4)
  145.                         {
  146.                                 //虚拟绘制垂直线
  147.                                 acedGrDraw(ptEnd3,ptEnd4,6,-1);
  148.                         }
  149.                         //鼠标左键退出
  150.                         if (nType == 3)
  151.                         {
  152.                                 nTrack = 0;
  153.                                 //退出重画消除Grdraw绘制的线
  154.                                 acedRedraw(NULL,NULL);
  155.                         }
  156.                 }               
  157.         }


评分

参与人数 1D豆 +5 收起 理由
marting + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2018-11-22 14:22:29 | 显示全部楼层
mycross.gif

点评

漂亮啊,代码能分享吗  详情 回复 发表于 2018-11-22 14:24
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-11-22 14:24:31 | 显示全部楼层

漂亮啊,代码能分享吗

点评

代码不是在8楼么,没看到吗, 在论坛发帖很累,那个滑动验证99%失败,只有刷新整个页面后,快速的点验证, 表示很无语,不知道你们会不会这样。  详情 回复 发表于 2018-11-22 15:02
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2018-11-22 15:02:42 | 显示全部楼层
marting 发表于 2018-11-22 14:24
漂亮啊,代码能分享吗

代码不是在8楼么,没看到吗,
在论坛发帖很累,那个滑动验证99%失败,只有刷新整个页面后,快速的点验证,
表示很无语,不知道你们会不会这样。

点评

不如你发个申请版主的帖子,来做版主帮助大家吧,这样也就不用验证发帖了。 你的学识大家都知道的。  详情 回复 发表于 2018-11-22 15:33
应该是网速的事,我积分高,发帖不用验证了,你在升个级别应该就不用验证了。 加验证也没办法的事,防止机器人恶意发帖  详情 回复 发表于 2018-11-22 15:26
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-11-22 15:26:26 | 显示全部楼层
edata 发表于 2018-11-22 15:02
代码不是在8楼么,没看到吗,
在论坛发帖很累,那个滑动验证99%失败,只有刷新整个页面后,快速的点验证 ...

应该是网速的事,我积分高,发帖不用验证了,你在升个级别应该就不用验证了。
加验证也没办法的事,防止机器人恶意发帖
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-11-22 15:33:15 | 显示全部楼层
edata 发表于 2018-11-22 15:02
代码不是在8楼么,没看到吗,
在论坛发帖很累,那个滑动验证99%失败,只有刷新整个页面后,快速的点验证 ...

不如你发个申请版主的帖子,来做版主帮助大家吧,这样也就不用验证发帖了。
你的学识大家都知道的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-23 13:13:45 | 显示全部楼层
非常好,这两条引线能不能换成两道尺寸类型

点评

那不就很容易了,知道直线两点,你生成个DIM不就行了  详情 回复 发表于 2018-11-23 13:19
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-11-23 13:19:33 | 显示全部楼层
zx0913 发表于 2018-11-23 13:13
非常好,这两条引线能不能换成两道尺寸类型

那不就很容易了,知道直线两点,你生成个DIM不就行了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-22 10:28 , Processed in 0.253488 second(s), 68 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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