明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1289|回复: 3

请教高手

[复制链接]
发表于 2005-10-24 18:13:00 | 显示全部楼层 |阅读模式

我是一个初学者

有一个问题想请教高手

在ARX中用什么方法求POLYLINE的两个顶点的连线同X轴的夹角?

希望能有个例子.

在这里先谢谢了

发表于 2005-10-25 16:08:00 | 显示全部楼层

void adeskfirst()
{
 // TODO: Implement the command
 ads_name ent;
 ads_point pnt;
 int ret = acedEntSel("\nSelect A Entity:",ent,pnt);
 if(RTNORM == ret)
 {
  AcDbObjectId id;
  Acad::ErrorStatus es = acdbGetObjectId(id,ent);
  assert(Acad::eOk == es);
  AcDbEntity *pEnt;
  es = acdbOpenAcDbEntity(pEnt,id,AcDb::kForRead);
  if(Acad::eOk == es)
  {
   AcDbPolyline *pPl = AcDbPolyline::cast(pEnt);
   assert(pPl);
   AcGePoint3d startpnt,endpnt;
   pPl->getStartPoint(startpnt);
   pPl->getEndPoint(endpnt);
   pPl->close();
   AcGeVector3d vec = endpnt - startpnt;
   AcGeVector3d xAxis(1.0,0.0,0.0);
   double angle;
   angle = vec.angleTo(xAxis,AcGeVector3d(0,0,-1));
   angle = angle*180/3.1415926;
  } 
 }

}

这只是对plinetype=2,而且pline只有一节的情况下适用!

 楼主| 发表于 2005-10-26 12:19:00 | 显示全部楼层

        dPTS,dPtE是POLY的两个点,.  下面的代码是VBA的,
        '''''第一顶点と第二顶点の连结线とX轴の夹角
        dAngSE = ThisDrawing.Utility.AngleFromXAxis(dPTS, dPtE)
        '''''第二顶点と第一顶点の连结线とX轴の夹角
        dAngES = ThisDrawing.Utility.AngleFromXAxis(dPtE, dPTS)

上面两句话转换成ARX如下:

       传入的点值是不变的, 类型为:

 AcArray<double>   dPTS;
AcArray<double>    dPTE;

       dAngSE = atan((dPTS.at(1)-dPTE.at(1))/(dPTS.at(0)-dPTE.at(0)));
       dAngES = atan((dPTE.at(1)-dPTS.at(1))/(dPTE.at(0)-dPTS.at(0)));

得到的角度是不同的, 不太明白是什么原因还请高手指点呀

 楼主| 发表于 2005-10-27 10:14:00 | 显示全部楼层

真的很感谢你提供的方法

但现在还存在一个问题
我做的这个东东是要实现VBA的代码的功能
但算的这个角度值,和VBA的有0.0  几的差别,

为什么会这样呢

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-29 17:41 , Processed in 0.151649 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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