找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 879|回复: 11

[求助] 帮忙解决一下! 谢谢各位

[复制链接]
发表于 2018-8-31 17:14:37 | 显示全部楼层 |阅读模式

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

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

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

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-8-31 17:43:21 | 显示全部楼层
你写错了,才会有错误提示,你不贴代码,没法帮你

点评

标签不是您之前写的,是Love-Lisp子论坛里写的 对不起!!!!  详情 回复 发表于 2018-9-5 09:23
就是你之前写的一段代码中的 //改进后的曲线选择集交点打断 void IntersectBreakSS (ads_name ss,AcDbVoidPtrArray& curveSegments,ads_real rTol) {   Acad::ErrorStatus es;   ads_nam  详情 回复 发表于 2018-9-1 21:23
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-1 21:23:54 | 显示全部楼层
本帖最后由 大愚 于 2018-9-1 21:26 编辑
newer 发表于 2018-8-31 17:43
你写错了,才会有错误提示,你不贴代码,没法帮你

就是你之前写的一段代码中的

  1. //改进后的曲线选择集交点打断
  2. void IntersectBreakSS (ads_name ss,AcDbVoidPtrArray& curveSegments,ads_real rTol)
  3. {
  4.   Acad::ErrorStatus es;
  5.   ads_name e1;
  6.   AcGePoint3dArray nPoints;
  7.   AcGeTol tol;
  8.   tol.setEqualPoint(rTol);
  9.   tol.setEqualVector(rTol);
  10.   if (!(nPoints.isEmpty()))
  11.   {
  12.     nPoints.setPhysicalLength(0);
  13.     nPoints.setLogicalLength(0);
  14.   }
  15.   long len;
  16.   acedSSLength(ss,&len);
  17.   //实体个数小于两个,直接返回值
  18.   if (len < 2)
  19.   {
  20.     if (len = 1)
  21.     {
  22.       AcDbEntity *pEnt;
  23.       AcDbObjectId Id;
  24.       acedSSName(ss,0,e1);
  25.       acdbGetObjectId(Id,e1);
  26.       es = acdbOpenObject(pEnt,Id,AcDb::kForRead);
  27.       if (es != Acad::eOk)
  28.       {
  29.         pEnt->close();

  30.       }
  31.       curveSegments.append(pEnt);
  32.       pEnt->close();
  33.     }
  34.     return;
  35.   }
  36.   //将选择集实体转换到对象数组IdArray
  37.   AcDbObjectIdArray IdArray;
  38.   AcDbEntity *pEnt,*pEnt1;
  39.   AcDbObjectId Id,Id1;
  40.   AcDbCurve *pCurve,*pCurve1;
  41.   for (long i =0;i < len;i++)
  42.   {
  43.     acedSSName(ss,i,e1);
  44.     acdbGetObjectId(Id,e1);
  45.     es = acdbOpenObject(pEnt,Id,AcDb::kForRead);
  46.     if (es != Acad::eOk)
  47.     {
  48.       pEnt->close();

  49.     }
  50.     pCurve = AcDbCurve::cast(pEnt);
  51.     if (pCurve == NULL)
  52.     {
  53.       pEnt->close();
  54.       continue;
  55.     }
  56.     IdArray.append(Id);
  57.     pEnt->close();
  58.   }
  59.   //曲线总个数
  60.   len = IdArray.length();
  61.   //创建每条曲线的交点数组
  62.   AcGePoint3dArray *Pt3DArrays = new AcGePoint3dArray[len];
  63.   for (int i = 0;i < len;i++)
  64.   {
  65.     Pt3DArrays.setPhysicalLength(0);
  66.     Pt3DArrays.setLogicalLength(0);
  67.   }
  68.   //计算所有交点,存储在Pt3DArrays数组中
  69.   for (long i = 0;i < len-1;i++)
  70.   {
  71.     Id = IdArray.at(i);
  72.     acdbOpenObject(pEnt,Id,AcDb::kForRead);
  73.     pCurve = AcDbCurve::cast(pEnt);
  74.     AcGePoint3d pstart0,pend0;
  75.     pCurve->getStartPoint(pstart0);
  76.     pCurve->getEndPoint(pend0);
  77.     for (long j = i+1;j < len;j++)
  78.     {
  79.       Id1 = IdArray.at(j);
  80.       acdbOpenObject(pEnt1,Id1,AcDb::kForRead);
  81.       pCurve1 = AcDbCurve::cast(pEnt1);
  82.       AcGePoint3dArray nPts;
  83.       //计算交点
  84.       pEnt->intersectWith(pEnt1,AcDb::kOnBothOperands,nPts);
  85.       AcGePoint3d pstart1,pend1,pt;
  86.       pCurve1->getStartPoint(pstart1);
  87.       pCurve1->getEndPoint(pend1);      
  88.       //遍历nPts,除落在曲线端点外的点添加到Pt3DArrays
  89.       for (int m = 0;m < nPts.length();m++)
  90.       {
  91.         pt = nPts[m];
  92.         if (!(pstart0.isEqualTo(pt,tol) || pend0.isEqualTo(pt,tol)))
  93.         {
  94.           //交点添加到第i条曲线上
  95.           Pt3DArrays.append(pt);
  96.         }        
  97.         if (!(pstart1.isEqualTo(pt,tol) || pend1.isEqualTo(pt,tol)))
  98.         {
  99.           //交点添加到第j条曲线上
  100.           Pt3DArrays[j].append(pt);
  101.         }      
  102.       }
  103.       //判断pCurve1的端点是否在pCurve容差范围之内,添加到交点表第i条曲线上
  104.       pCurve->getClosestPointTo(pstart1,pt);
  105.       if (pstart1.isEqualTo(pt,tol) && !(pstart0.isEqualTo(pt,tol) || pend0.isEqualTo(pt,tol)))
  106.       {
  107.         Pt3DArrays.append(pt);
  108.       }
  109.       pCurve->getClosestPointTo(pend1,pt);
  110.       if (pend1.isEqualTo(pt,tol) && !(pstart0.isEqualTo(pt,tol) || pend0.isEqualTo(pt,tol)))
  111.       {
  112.         Pt3DArrays.append(pt);
  113.       }  
  114.       //判断pCurve的端点是否在pCurve1容差范围之内,添加到交点表第j条曲线上
  115.       pCurve1->getClosestPointTo(pstart0,pt);
  116.       if (pstart0.isEqualTo(pt,tol) && !(pstart1.isEqualTo(pt,tol) || pend1.isEqualTo(pt,tol)))
  117.       {
  118.         Pt3DArrays[j].append(pt);
  119.       }
  120.       pCurve1->getClosestPointTo(pend0,pt);
  121.       if (pend0.isEqualTo(pt,tol) && !(pstart1.isEqualTo(pt,tol) || pend1.isEqualTo(pt,tol)))
  122.       {
  123.         Pt3DArrays[j].append(pt);
  124.       }  
  125.       pEnt1->close();
  126.     }
  127.     pEnt->close();
  128.   }
  129.   for (long i = 0;i < len;i++)
  130.   {
  131.     AcGePoint3dArray nPts;
  132.     nPts.setPhysicalLength(0);
  133.     nPts.setLogicalLength(0);
  134.     nPts = Pt3DArrays;
  135.     //取出第i条曲线pCurve
  136.     Id = IdArray.at(i);
  137.     acdbOpenObject(pEnt,Id,AcDb::kForRead);
  138.     pCurve = AcDbCurve::cast(pEnt);   
  139.     //根据点nPts打断第i条曲线
  140.     if (nPts.length() > 0)
  141.     {
  142.       //nPts按曲线pCurve排序
  143.       CCalculation::QSortPointsOnCurve(pCurve,nPts);
  144.       //len1打断曲线前curveSegments的长度
  145.       long len1 = curveSegments.length();
  146.       pCurve->upgradeOpen();
  147.       //按参数表params打断曲线pCurve
  148.       es = pCurve->getSplitCurves(nPts,curveSegments);

  149.       //len2打断曲线后curveSegments的长度
  150.       long len2 = curveSegments.length();
  151.       if ((len2 - len1) > 1)/*生成了新的曲线*/
  152.       {
  153.         //acutPrintf(_T("\n共生成直线 %d  条!"),(len2 - len1));
  154.         pCurve->erase();
  155.         pEnt->close();
  156.         for (int ii = len1; ii <len2; ii++)
  157.         {
  158.           AcDbEntity *pEntity = NULL;
  159.           pEntity = (AcDbEntity *)curveSegments[ii];
  160.           //将生成的曲线添加到数据库
  161.           CCreateEnt::PostToSpace(pEntity);
  162.         }

  163.       }
  164.       else /*没有生成新曲线*/
  165.       {
  166.         pEnt->close();
  167.         AcDbEntity *pEnt1;
  168.         pEnt1  = (AcDbEntity *)curveSegments[(len2 - 1)];
  169.         delete(pEnt1);
  170.         curveSegments.setAt(len2 - 1,pCurve);
  171.       }
  172.     }
  173.     else /*曲线没有交点,无需打断*/
  174.     {      
  175.       pEnt->close();
  176.       curveSegments.append(pCurve);
  177.     }

  178.   }
  179.   delete []Pt3DArrays;
  180. }
复制代码

点评

AcGePoint3dArray *Pt3DArrays = new AcGePoint3dArray[len]; for (int i = 0;i < len;i++) { Pt3DArrays.setPhysicalLength(0); Pt3DArrays.setLogicalLength(0); } 你定义的是指针, Pt3DA  详情 回复 发表于 2018-9-1 21:50
编译器是提示你在哪行代码出错了?  详情 回复 发表于 2018-9-1 21:45
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-9-1 21:45:42 | 显示全部楼层
大愚 发表于 2018-9-1 21:23
就是你之前写的一段代码中的

编译器是提示你在哪行代码出错了?

点评

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

使用道具 举报

已领礼包: 13个

财富等级: 恭喜发财

发表于 2018-9-1 21:50:20 | 显示全部楼层
大愚 发表于 2018-9-1 21:23
就是你之前写的一段代码中的

AcGePoint3dArray *Pt3DArrays = new AcGePoint3dArray[len];
  for (int i = 0;i < len;i++)
  {
    Pt3DArrays.setPhysicalLength(0);
    Pt3DArrays.setLogicalLength(0);
  }

你定义的是指针,
Pt3DArrays.setLogicalLength(0);
Pt3DArrays.setPhysicalLength(0);

这两个就不能用 . 了,你为什么要定义指针动态分配呢
直接定义
AcGePoint3dArray Pt3DArrays 不就行了。

点评

请问一下会不会是版本不同的问题!我现在用的是vs2008 之前Love-Lisp用的可能比较低??  详情 回复 发表于 2018-9-5 09:25
不行呀!!! 后边出现了好多问题! \Breakline.cpp(79) : error C2440: “初始化”: 无法从“AcGePoint3dArray *”转换为“AcArray” with [ T=AcGePoint3d  详情 回复 发表于 2018-9-2 12:26
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-2 12:26:14 | 显示全部楼层
LoveArx 发表于 2018-9-1 21:50
AcGePoint3dArray *Pt3DArrays = new AcGePoint3dArray[len];
  for (int i = 0;i < len;i++)
  {

不行呀!!!  后边出现了好多问题!

\Breakline.cpp(79) : error C2440: “初始化”: 无法从“AcGePoint3dArray *”转换为“AcArray<T>”
        with
       [
            T=AcGePoint3d
       ]
      无构造函数可以接受源类型,或构造函数重载决策不明确

点评

你按LOVERARX的改, 编译器提示的所有错误都贴到论坛。 肯定不能只改LOVERARX列出来的,所有跟你定义的,都要相应修改。  详情 回复 发表于 2018-9-2 13:44
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-2 12:27:55 | 显示全部楼层
marting 发表于 2018-9-1 21:45
编译器是提示你在哪行代码出错了?

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2018-9-2 13:44:22 | 显示全部楼层
大愚 发表于 2018-9-2 12:26
不行呀!!!  后边出现了好多问题!

\Breakline.cpp(79) : error C2440: “初始化”:  ...

你按LOVERARX的改,
编译器提示的所有错误都贴到论坛。

肯定不能只改LOVERARX列出来的,所有跟你定义的,都要相应修改。

点评

对应的定义我都有改 会不会是vs版本的问题 我有的是vs2008 而Love-Lisp之前用的版本比我低的原因?  详情 回复 发表于 2018-9-5 09:20
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-5 09:20:56 | 显示全部楼层
XDSoft 发表于 2018-9-2 13:44
你按LOVERARX的改,
编译器提示的所有错误都贴到论坛。

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

使用道具 举报

 楼主| 发表于 2018-9-5 09:23:20 | 显示全部楼层
newer 发表于 2018-8-31 17:43
你写错了,才会有错误提示,你不贴代码,没法帮你

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

使用道具 举报

 楼主| 发表于 2018-9-5 09:25:28 | 显示全部楼层
LoveArx 发表于 2018-9-1 21:50
AcGePoint3dArray *Pt3DArrays = new AcGePoint3dArray[len];
  for (int i = 0;i < len;i++)
  {

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

使用道具 举报

已领礼包: 5295个

财富等级: 富甲天下

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 09:13 , Processed in 0.226697 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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