找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1246|回复: 2

[求助] 这是在论坛里找到的一个函数,有些地方看不明白,请各位大神指点一下。

[复制链接]
发表于 2014-3-22 15:13:33 | 显示全部楼层 |阅读模式

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

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

×


/******************************************************************************/
  /* 関数名   :        GetCrossPoint                                                                                                        */
  /* 機能     :        得到交叉點的位置和交點坐標。                                                                        */
  /* 入力引数 :        AcGePoint3dArray                                Polyline的點列。                                */
  /*                        AcGePoint3d                                                選擇点。                                                */
  /*                        double                                                        PickBox的長度。                                        */
  /*                        Adesk::Boolean                                        閉合屬性。                                                */
  /* 出力引数 :        int                                                                交叉點的位置(前)。                        */
  /*                        int                                                                交叉點的位置(後)。                        */
  /*                        AcGePoint3d                                                交點坐標                                                */
  /* 返り値   :        TRUE                        正常。                                                                                        */
  /*                        FALSE                        異常。                                                                                        */
  /* 備考     :        無                                                                                                                                */
   /******************************************************************************/
BOOL GetCrossPoint(AcGePoint3dArray gePoi3dA, AcGePoint3d gePoi3d, double dPickLen, int & iCrsID1,
                                   int & iCrsID2, AcGePoint3d & gePoi3dCrs, Adesk::Boolean bIsClosed = Adesk::kTrue)
{
        ads_point                        spt1, spt2, spt3, spt4;
        AcGePoint3d                        GePoi3dStart, GePoi3dNext;
        int                                        iReturn, iNum;
        
        iNum = gePoi3dA.length();
        if (iNum < 2) {
                return FALSE;
        }

        /*得到交叉點的位置*/
        for (int i = 0; i < iNum; i++) {
                iCrsID1 = i;

                //得到前一個點
                asPnt3d(spt3) = gePoi3dA[iCrsID1];

                //得到後一個點
                if (i == iNum - 1) {
                        //實體是否是閉合。
                        if (!bIsClosed)        {
                                break;
                        }
                        else {
                                iCrsID2 = 0;
                        }
                }
                else {
                        iCrsID2 = i + 1;
                }
                asPnt3d(spt4) = gePoi3dA[iCrsID2];
               
                spt3[Z] = 0;
                spt4[Z] = 0;

                /*X方向是否有交叉點。*/
                spt1[X] = gePoi3d.x + (dPickLen / 2);        spt2[X] = gePoi3d.x - (dPickLen / 2);
                spt1[Y] = gePoi3d.y;                                        spt2[Y] = gePoi3d.y;
                spt1[Z] = 0;                                                        spt2[Z] = 0;
                iReturn = acdbInters(spt1, spt2, spt3, spt4, 1, asDblArray(gePoi3dCrs));
                if (iReturn == RTNORM) {
                        return TRUE;
                }

                /*Y方向是否有交叉點。*/
                spt1[X] = gePoi3d.x;                                        spt2[X] = gePoi3d.x;
                spt1[Y] = gePoi3d.y + (dPickLen / 2);        spt2[Y] = gePoi3d.y - (dPickLen / 2);
                spt1[Z] = 0;                                                        spt2[Z] = 0;
                iReturn = acdbInters(spt1, spt2, spt3, spt4, 1, asDblArray(gePoi3dCrs));
                if (iReturn == RTNORM) {
                        return TRUE;
                }
        }
        return FALSE;
}



请问asPnt3d(spt3) = gePoi3dA[iCrsID1];中的asPnt3d(spt3) 函数是什么意思,定义在哪里?

- 本文出自晓东CAD家园-论坛,原文地址:http://bbs.xdcad.net/thread-57844-2-1.html

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

已领礼包: 12个

财富等级: 恭喜发财

发表于 2014-3-25 08:09:43 | 显示全部楼层
转换AcGePoint3d 到 ads_point

点评

明白了,可是请问这个函数式判断两条polyline的交点的吗?貌似看不出来  详情 回复 发表于 2014-3-25 19:46
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-25 19:46:10 | 显示全部楼层
小龙龙 发表于 2014-3-25 08:09
转换AcGePoint3d 到 ads_point

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 12:28 , Processed in 0.374951 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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