MIRRO 发表于 2007-7-19 16:11:00

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

<p>想实现直线的偏移,然后利用AcDbCurve::getOffsetCurves函数来实现,可是调试的时候,没有出现偏移出来的直线阿??程序又没有报错,这是怎么回事啊?</p><p>哪位高手指点阿!!!</p><p>程序如下:(lineId是已经创建好了的直线的ID)</p><p>&nbsp;AcDbLine * Pline;</p><p>double wide;&nbsp; //偏移量</p><p>&nbsp;acdbOpenObject(Pline, lineId, AcDb::kForRead);<br/>&nbsp;AcDbVoidPtrArray offsetCurves;<br/>&nbsp;&nbsp;Pline-&gt;getOffsetCurves(wide , offsetCurves);<br/>&nbsp;AcDbObjectId ofsID;<br/>&nbsp;enty.AppendEntityToBlockTable((AcDbEntity*)offsetCurves, ofsID);&nbsp; //把实体添加到块表记录中<br/>&nbsp;&nbsp;Pline-&gt;close();</p><p></p>

MIRRO 发表于 2007-7-22 15:31:00

<p>咋没有大侠来回呢?</p><p>俺自己换了个方法,改用acedCommand命令了,虽然没啥技术性可言,可只要能实现功能就好~</p>

MIRRO 发表于 2007-7-22 16:28:00

<p>用acedCommand命令还是遇到问题了。。。</p><p>acedCommand(RTSTR, "OFFSET", RTREAL, wide, RTLB , RTENAME , lineName1 , RTPOINT , pt1 , RTLE , RT3DPOINT, OffsetPoint, RTSTR, "", 0);</p><p>调试会出错,为什么呢?</p><p>请高人指点啊~~<br/></p>

zhml530 发表于 2007-8-2 20:49:00

<p>你改成这样试试</p><p>acedCommand(RTSTR, _T("OFFSET"), RTREAL, wide, RTLB , RTENAME , lineName1 , RTPOINT , pt1 , RTLE , RT3DPOINT, OffsetPoint, RTSTR, _T(""), 0);</p><p></p>

YANGGY 发表于 2007-8-4 21:36:00

<p>将你的程序作如下修改;将OK</p><p>AcDbLine * Pline;<br/>double wide;&nbsp; //偏移量<br/>&nbsp;acdbOpenObject(Pline, lineId, AcDb::kForRead);<br/>&nbsp;AcDbVoidPtrArray offsetCurves;<br/>wide=3;//例如<br/>&nbsp; Pline-&gt;getOffsetCurves(wide , offsetCurves);<br/>&nbsp;AcDbObjectId ofsID;<br/>for(int i=0;i&lt;offsetCurves.length();i++)<br/>&nbsp;enty.AppendEntityToBlockTable((AcDbEntity*)offsetCurves, ofsID);&nbsp; //把实体添加到块表记录中<br/>&nbsp; Pline-&gt;close();</p>

gymic 发表于 2007-8-5 21:41:00

<p>你可以程序中增加这个子函数</p><p>Acad::ErrorStatus<br/>addToModelSpace(AcDbObjectId &amp;objId, AcDbEntity* pEntity)<br/>{<br/>&nbsp;AcDbBlockTable *pBlockTable;<br/>&nbsp;AcDbBlockTableRecord *pSpaceRecord;</p><p>&nbsp;acdbHostApplicationServices()-&gt;workingDatabase()<br/>&nbsp; -&gt;getSymbolTable(pBlockTable, AcDb::kForRead);<br/>&nbsp;pBlockTable-&gt;getAt(ACDB_MODEL_SPACE, pSpaceRecord,<br/>&nbsp; AcDb::kForWrite);</p><p>&nbsp;pSpaceRecord-&gt;appendAcDbEntity(objId, pEntity);</p><p>&nbsp;pBlockTable-&gt;close();<br/>&nbsp;pEntity-&gt;close();<br/>&nbsp;pSpaceRecord-&gt;close();</p><p>&nbsp;return Acad::eOk;<br/>}</p><p>然后用这个函数把你偏移后的对象添加到图纸空间中去</p><p>Pline-&gt;getOffsetCurves(wide , offsetCurves);<br/>AcDbObjectId ofsID;<br/>addToModelSpace(ofsID, (AcDbEntity*)offsetCurves);<br/></p>

Fred0612 发表于 2011-11-18 21:12:14

gymic 发表于 2007-8-5 21:41 static/image/common/back.gif
你可以程序中增加这个子函数Acad::ErrorStatusaddToModelSpace(AcDbObjectId &amp;objId, AcDbEntity* pEntit ...

在进行偏移时需要指定偏移的方向,该怎么实现,请给予指点一下……

vlisp2012 发表于 2011-11-28 22:08:20

学习了。。。。。。。。。。。。。

c735023723 发表于 2011-12-18 11:00:22

Fred0612 发表于 2011-11-18 21:12 static/image/common/back.gif
在进行偏移时需要指定偏移的方向,该怎么实现,请给予指点一下……

同问?麻烦指点下,呵呵

highflybir 发表于 2011-12-20 23:07:37

Fred0612 发表于 2011-11-18 21:12 static/image/common/back.gif
在进行偏移时需要指定偏移的方向,该怎么实现,请给予指点一下……

已知一个点pt ,和曲线curve,获得pt在曲线的getclosestpointto(最近点),获得此处的firstDeriv,由此得到切线方向,然后根据切线方向和点,用右手法则,判断方向(或者符号的正负)。
页: [1] 2
查看完整版本: 如何用ARX实现直线的offset偏移功能?