明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7144|回复: 11

如何用ARX实现直线的offset偏移功能?

  [复制链接]
发表于 2007-7-19 16:11:00 | 显示全部楼层 |阅读模式

想实现直线的偏移,然后利用AcDbCurve::getOffsetCurves函数来实现,可是调试的时候,没有出现偏移出来的直线阿??程序又没有报错,这是怎么回事啊?

哪位高手指点阿!!!

程序如下:(lineId是已经创建好了的直线的ID)

 AcDbLine * Pline;

double wide;  //偏移量

 acdbOpenObject(Pline, lineId, AcDb::kForRead);
 AcDbVoidPtrArray offsetCurves;
  line->getOffsetCurves(wide , offsetCurves);
 AcDbObjectId ofsID;
 enty.AppendEntityToBlockTable((AcDbEntity*)offsetCurves[0], ofsID);  //把实体添加到块表记录中
  line->close();

 楼主| 发表于 2007-7-22 15:31:00 | 显示全部楼层

咋没有大侠来回呢?

俺自己换了个方法,改用acedCommand命令了,虽然没啥技术性可言,可只要能实现功能就好~

 楼主| 发表于 2007-7-22 16:28:00 | 显示全部楼层

用acedCommand命令还是遇到问题了。。。

acedCommand(RTSTR, "OFFSET", RTREAL, wide, RTLB , RTENAME , lineName1 , RTPOINT , pt1 , RTLE , RT3DPOINT, OffsetPoint, RTSTR, "", 0);

调试会出错,为什么呢?

请高人指点啊~~

发表于 2007-8-2 20:49:00 | 显示全部楼层

你改成这样试试

acedCommand(RTSTR, _T("OFFSET"), RTREAL, wide, RTLB , RTENAME , lineName1 , RTPOINT , pt1 , RTLE , RT3DPOINT, OffsetPoint, RTSTR, _T(""), 0);

发表于 2007-8-4 21:36:00 | 显示全部楼层

将你的程序作如下修改;将OK

AcDbLine * Pline;
double wide;  //偏移量
 acdbOpenObject(Pline, lineId, AcDb::kForRead);
 AcDbVoidPtrArray offsetCurves;
wide=3;//例如
  Pline->getOffsetCurves(wide , offsetCurves);
 AcDbObjectId ofsID;
for(int i=0;i<offsetCurves.length();i++)
 enty.AppendEntityToBlockTable((AcDbEntity*)offsetCurves, ofsID);  //把实体添加到块表记录中
  Pline->close();

发表于 2007-8-5 21:41:00 | 显示全部楼层

你可以程序中增加这个子函数

Acad::ErrorStatus
addToModelSpace(AcDbObjectId &objId, AcDbEntity* pEntity)
{
 AcDbBlockTable *pBlockTable;
 AcDbBlockTableRecord *pSpaceRecord;

 acdbHostApplicationServices()->workingDatabase()
  ->getSymbolTable(pBlockTable, AcDb::kForRead);
 pBlockTable->getAt(ACDB_MODEL_SPACE, pSpaceRecord,
  AcDb::kForWrite);

 pSpaceRecord->appendAcDbEntity(objId, pEntity);

 pBlockTable->close();
 pEntity->close();
 pSpaceRecord->close();

 return Acad::eOk;
}

然后用这个函数把你偏移后的对象添加到图纸空间中去

Pline->getOffsetCurves(wide , offsetCurves);
AcDbObjectId ofsID;
addToModelSpace(ofsID, (AcDbEntity*)offsetCurves[0]);

发表于 2011-11-18 21:12:14 | 显示全部楼层
gymic 发表于 2007-8-5 21:41
你可以程序中增加这个子函数Acad::ErrorStatusaddToModelSpace(AcDbObjectId &amp;objId, AcDbEntity* pEntit ...

在进行偏移时需要指定偏移的方向,该怎么实现,请给予指点一下……
发表于 2011-11-28 22:08:20 | 显示全部楼层
学习了。。。。。。。。。。。。。
发表于 2011-12-18 11:00:22 | 显示全部楼层
Fred0612 发表于 2011-11-18 21:12
在进行偏移时需要指定偏移的方向,该怎么实现,请给予指点一下……

同问?麻烦指点下,呵呵
发表于 2011-12-20 23:07:37 | 显示全部楼层
Fred0612 发表于 2011-11-18 21:12
在进行偏移时需要指定偏移的方向,该怎么实现,请给予指点一下……

已知一个点pt ,和曲线curve,获得pt在曲线的getclosestpointto(最近点),获得此处的firstDeriv,由此得到切线方向,然后根据切线方向和点,用右手法则,判断方向(或者符号的正负)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 10:42 , Processed in 0.170954 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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