mxdwg 发表于 2009-9-23 21:36:00

使用梦想绘图控件做自定义实体

<div id="postmessage_232" class="t_msgfont"><font face="黑体 "><font size="3">说明</font></font><br/><font face="黑体 "><font size="3">&nbsp; &nbsp;&nbsp;&nbsp;</font></font><font face="宋体 ">控件支持自定义实体功能,可以从</font><font face="宋体 ">McDbEntity<font face="宋体 ">继承自己的实体,在自定体实体类中,实现相关虚函数来实现实体的自定义功能。</font></font><br/><font face="宋体 "></font><br/><font face="Verdana "><font face="黑体 "><font size="3">1.2</font></font><br/></font><font face="黑体 "><font size="3">&nbsp; &nbsp;&nbsp; &nbsp; 类的类型信息</font></font><br/><font face="黑体 "><font size="3">&nbsp; &nbsp;&nbsp; &nbsp; </font></font><font face="宋体 ">使用</font><font face="宋体 ">MCRX_DECLARE_MEMBERS<font face="宋体 ">宏定义类的类型信息函数,宏的第一个参数是类的类名。使用例如:</font></font><br/><font face="宋体 "><font size="2">MCRX_DECLARE_MEMBERS(CLinkLine);</font></font><br/><br/><font face="宋体 ">&nbsp; &nbsp; 使用</font><font face="宋体 "> ACRX_DXF_DEFINE_MEMBERS <font face="宋体 ">宏实现类的类型信息函数。宏定义参数使用如下:</font></font><br/><font face="宋体 "></font><br/><font face="宋体 "><font size="2">&nbsp; &nbsp; ACRX_DXF_DEFINE_MEMBERS(CLinkLine, McDbEntity,</font></font><br/><font size="2"><font face="宋体 "><br/>&nbsp; &nbsp; AcDb::kDHL_CURRENT, AcDb::kMReleaseCurrent, </font></font><br/><font size="2"><font face="宋体 "><br/>&nbsp; &nbsp; AcDbProxyEntity::kAllAllowedBits, _T("LinkLine"), </font></font><br/><font size="2"><font face="宋体 "><br/>&nbsp; &nbsp; _T("MxDrawObj Test Custom Entity") );</font></font><br/><br/><font face="宋体 "></font><br/><font face="宋体 "></font>参数说明:<br/><font face="宋体 "><font style="FONT-SIZE: 9pt;">&nbsp; &nbsp;CLinkLine&nbsp; &nbsp;</font><font face="宋体 "><font style="FONT-SIZE: 9pt;">自定义实体的类名</font></font></font><font style="FONT-SIZE: 9pt;"></font><br/><font face="宋体 "><font style="FONT-SIZE: 9pt;">&nbsp; &nbsp;McDbEnity&nbsp; &nbsp;</font><font face="宋体 "><font style="FONT-SIZE: 9pt;">自定义实体的基类</font></font></font><br/><font face="宋体 "></font><font face="宋体 ">&nbsp;&nbsp;<font style="FONT-SIZE: 9pt;">AcDb::kDHL_CURRENT&nbsp;&nbsp;</font><font style="FONT-SIZE: 9pt;">当前文件版本</font></font><font style="FONT-SIZE: 9pt;"></font><br/><font face="宋体 "><font style="FONT-SIZE: 9pt;">&nbsp; &nbsp;AcDb::kMReleaseCurrent&nbsp; &nbsp;</font><font face="宋体 "><font style="FONT-SIZE: 9pt;">当前控件版本</font></font></font><font style="FONT-SIZE: 9pt;"></font><br/><font face="宋体 "><font style="FONT-SIZE: 9pt;">&nbsp; &nbsp;AcDbProxyEntity::kAllAllowedBits </font><font face="宋体 "><font style="FONT-SIZE: 9pt;">代理实体处理标志</font></font></font><font style="FONT-SIZE: 9pt;"></font><br/><font face="宋体 "><font style="FONT-SIZE: 9pt;">&nbsp; &nbsp;_T("LinkLine")<br/><br/>&nbsp; &nbsp;Dfx0</font><font face="宋体 "><font style="FONT-SIZE: 9pt;">组码对应值&nbsp;&nbsp;</font></font></font><font face="宋体 "><font style="FONT-SIZE: 9pt;">_T("MxDrawObj Test Custom Entity") </font><font face="宋体 "><font style="FONT-SIZE: 9pt;">类说明</font></font></font><font style="FONT-SIZE: 9pt;"></font><br/><font style="FONT-SIZE: 9pt;"><font face="宋体 "></font></font><br/><font face="宋体 ">&nbsp; &nbsp;&nbsp;&nbsp;在程序启动的时候,调用</font><font face="宋体 ">rxInit<font face="宋体 ">函数,自定义实体的类型信息注册到系统中,使用例如:</font></font><br/><font face="宋体 "><font size="2">&nbsp; &nbsp;BOOL CCustomEntityApp::InitInstance()</font></font><br/><font face="宋体 "><font size="2">&nbsp;&nbsp;{</font></font><br/><font face="宋体 "><font size="2"><br/>&nbsp; &nbsp;…..</font></font><br/><font face="宋体 "><font size="2">&nbsp; &nbsp;// <font face="宋体 ">注册自定义实体类信息。</font></font></font><br/><br/><font face="宋体 "><font size="2">&nbsp; &nbsp;CLinkBlock::rxInit();</font></font><br/><br/><font face="宋体 "><font size="2">&nbsp; &nbsp;CLinkLine::rxInit();</font></font><br/><br/><font style="FONT-SIZE: 9pt;"><font face="宋体 "></font></font><br/><font face="Verdana "><font face="黑体 "><font size="3">1.3</font></font><br/></font><font face="黑体 "><font size="3">&nbsp; &nbsp;&nbsp; &nbsp;worldDraw</font></font><font face="宋体 ">重载该虚函数,绘制自定义实体的显示效果</font><br/><font face="宋体 "><strong><font size="2"><font color="#666699">VC<font face="宋体 ">接口:</font></font></font></strong></font><br/><u><font face="宋体 "><font style="FONT-SIZE: 10pt;"><strong>&nbsp;&nbsp;Adesk::Boolean&nbsp;&nbsp;</strong></font></font></u><font face="宋体 "><font face="宋体 "><font style="FONT-SIZE: 10pt;">worldDraw</font></font><font style="FONT-SIZE: 9pt;">
                                <br/>&nbsp; &nbsp; (</font><strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">AcGiWorldDraw</font></font></u></strong><font style="FONT-SIZE: 9pt;"> * wd);;</font></font><br/><font face="宋体 "><strong><font size="2"><font color="#666699">参数:</font></font></strong></font><br/><font face="宋体 "><font style="FONT-SIZE: 9pt;">&nbsp; &nbsp;Wd&nbsp;&nbsp;</font><font face="宋体 "><font style="FONT-SIZE: 9pt;">显示绘制的上下文对象</font></font></font><font style="FONT-SIZE: 9pt;"></font><br/><font face="宋体 "><strong><font size="2"><font color="#666699">参考例程:</font></font></strong></font><br/><font size="2"><div class="blockcode"><em>复制内容到剪贴板</em>
                                <h5>代码:</h5><code id="code0">Adesk::Boolean<br/>CLinkLine::worldDraw<br/>(AcGiWorldDraw * wd)<br/>{<br/><br/>assertReadEnabled();<br/><br/>wd-&gt;geometry().line(m_start,m_end);<br/><br/><br/>std::auto_ptr&lt;AcDbText&gt; spText(GetDimText() );<br/><br/>spText-&gt;worldDraw(wd);<br/><br/><br/>return Adesk::kTrue;<br/>}</code></div></font><br/><font face="宋体 "><font size="2"></font></font><br/><font face="Verdana "><font face="黑体 "><font size="3">1.4</font></font><br/></font><font face="黑体 "><font size="3">&nbsp; &nbsp;&nbsp; &nbsp; getGripPoints</font></font><font size="3"><font face="宋体 ">重载该虚函数,返回自定义的编辑夹点</font><br/><font face="宋体 "></font><br/></font><font face="宋体 "><strong><font size="2"><font color="#666699">VC<font face="宋体 ">接口:</font></font></font></strong></font><br/><u><font face="宋体 "><font style="FONT-SIZE: 10pt;"></font></font></u><br/><u><font face="宋体 "><font style="FONT-SIZE: 10pt;"><strong>virtual Acad::ErrorStatus </strong></font></font></u><br/><font size="3">getGripPoints</font><strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">(</font></font></u></strong><br/><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"><br/></font></font></strong><strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">AcGePoint3dArray&amp; </font></font></u></strong><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"><br/>gripPoints</font></font></strong><strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">,</font></font></u></strong><br/><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"><br/></font></font></strong><strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">AcGeIntArray&amp;</font></font></u></strong><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"><br/>osnapModes</font></font></strong><strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">,</font></font></u></strong><br/><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"><br/></font></font></strong><strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">AcGeIntArray&amp;</font></font></u></strong><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;">
                                        <br/>geomIds) const;</font></font></strong><br/><strong><font face="宋体 "><font size="2"></font></font></strong><br/><font face="宋体 "><strong><font size="2"><font color="#666699">参数:</font></font></strong></font><br/><font face="宋体 "><font style="FONT-SIZE: 9pt;">&nbsp; &nbsp;gripPoints&nbsp; &nbsp;</font><font face="宋体 "><font style="FONT-SIZE: 9pt;">返回夹点</font></font></font><font style="FONT-SIZE: 9pt;"></font><br/><font face="宋体 "><font style="FONT-SIZE: 9pt;">&nbsp; &nbsp;osnapModes&nbsp; &nbsp;</font><font face="宋体 "><font style="FONT-SIZE: 9pt;">暂没有使用</font></font></font><font style="FONT-SIZE: 9pt;"></font><br/><font face="宋体 "><font style="FONT-SIZE: 9pt;">&nbsp; &nbsp;geomIds&nbsp; &nbsp;&nbsp; &nbsp;</font><font face="宋体 "><font style="FONT-SIZE: 9pt;">暂没有使用</font></font></font><font style="FONT-SIZE: 9pt;"></font><br/><font face="宋体 "><strong><font size="2"><font color="#666699">参考例程:</font></font></strong></font><br/><strong><font face="宋体 "><font size="2"><font color="#666699"></font></font></font></strong><div class="blockcode"><em>复制内容到剪贴板</em>
                        <h5>代码:</h5><code id="code1">Acad::ErrorStatus<br/>CLinkLine::getGripPoints(<br/><br/>AcGePoint3dArray&amp;<br/>gripPoints,<br/><br/>AcGeIntArray&amp;<br/>osnapModes,<br/><br/>AcGeIntArray&amp;<br/>geomIds) const<br/>{<br/><br/>assertReadEnabled();<br/><br/><br/>gripPoints.append(m_start);<br/>// 返回开始点夹点<br/><br/>gripPoints.append(m_end);<br/>// 返回结束点夹点<br/><br/>gripPoints.append(m_start + (m_end - m_start) / 2.0);<br/>// 返回中点夹点。<br/><br/><br/>return Acad::eOk;<br/>}</code></div><font face="Verdana "><font face="黑体 "><font size="3">1.5</font></font><br/></font><font face="黑体 "><font size="3">&nbsp; &nbsp;&nbsp; &nbsp; moveGripPointsAt</font></font><font face="宋体 ">重载该虚函数,处理夹点编辑结果。</font><br/><font face="宋体 "><strong><font size="2"><font color="#666699"></font></font></strong></font><br/><font face="宋体 "><strong><font size="2"><font color="#666699">VC<font face="宋体 ">接口:</font></font></font></strong></font><br/><strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">virtual</font></font></u><br/><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">Acad::ErrorStatus</font></font></u></strong>moveGripPointsAt<strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">(</font></font></u></strong><br/><strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">const</font></font></u></strong><strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">AcGeIntArray&amp;</font></font></u></strong><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"> indices,</font></font></strong><strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;"></font></font></u></strong><br/><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"><br/></font></font></strong><strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">const</font></font></u></strong><strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">AcGeVector3d&amp;</font></font></u></strong><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"> offset);</font></font></strong><br/><font face="宋体 "><strong><font size="2"><font color="#666699"></font></font></strong></font><br/><font face="宋体 "><strong><font size="2"><font color="#666699">参数:</font></font></strong></font><br/><font face="宋体 "><font style="FONT-SIZE: 9pt;">indices<br/><br/><br/>indices </font><font face="宋体 "><font style="FONT-SIZE: 9pt;">参数是传入被编辑的夹点索引</font></font><font style="FONT-SIZE: 9pt;">, </font><font face="宋体 "><font style="FONT-SIZE: 9pt;">其它数组元素暂没有使用。</font></font></font><font style="FONT-SIZE: 9pt;"></font><br/><font face="宋体 "><font style="FONT-SIZE: 9pt;">offset&nbsp; &nbsp; </font><font face="宋体 "><font style="FONT-SIZE: 9pt;">夹点编辑的偏移量</font></font></font><font style="FONT-SIZE: 9pt;"></font><br/><font face="宋体 "><strong><font size="2"><font color="#666699"></font></font></strong></font><br/><font face="宋体 "><strong><font size="2"><font color="#666699"></font></font></strong></font><br/><font face="宋体 "><strong><font size="2"><font color="#666699">参考例程:</font></font></strong></font><br/><font face="宋体 "><font size="2"></font></font><div class="blockcode"><em>复制内容到剪贴板</em>
                        <h5>代码:</h5><code id="code2">Acad::ErrorStatus CLinkLine::moveGripPointsAt(const AcGeIntArray&amp; indices,<br/><br/><br/>const AcGeVector3d&amp; offset)<br/>{<br/><br/>assertWriteEnabled();<br/><br/>int iIndex = indices;<br/><br/>switch(iIndex)<br/><br/>{<br/><br/>case 0:<br/><br/>m_start = m_start + offset;<br/>// 开始点被编辑<br/><br/>break;<br/><br/>case 1:<br/><br/>m_end = m_end + offset;<br/>// 结束点被编辑<br/><br/>break;<br/><br/>case 2:<br/><br/>m_start = m_start + offset;<br/>// 中点被编辑<br/><br/>m_end = m_end + offset;<br/>// 中点被编辑<br/><br/>break;<br/><br/>}<br/><br/>return Mcad::eOk;<br/>}</code></div><font face="Verdana "><font face="黑体 "><font size="3"></font></font></font><br/><font face="Verdana "><font face="黑体 "><font size="3">1.6</font></font><br/></font><font face="黑体 "><font size="3">&nbsp; &nbsp;&nbsp;&nbsp;getGeomExtents</font></font><font face="宋体 ">重载该虚函数,返回自定义实体的外包矩形框</font><br/><font face="宋体 "><strong><font size="2"><font color="#666699"></font></font></strong></font><br/><font face="宋体 "><strong><font size="2"><font color="#666699">VC<font face="宋体 ">接口:</font></font></font></strong></font><br/><strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">virtual</font></font></u><br/><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">Acad::ErrorStatus</font></font></u></strong><br/>getGeomExtents<strong>(</strong><br/><strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">AcDbExtents&amp;</font></font></u></strong><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"> extents) const;</font></font></strong><br/><br/><font face="宋体 "><strong><font size="2"><font color="#666699"></font></font></strong></font><font face="宋体 "><strong><font size="2"><font color="#666699">参数:</font></font></strong></font><br/><strong>extents&nbsp; &nbsp; </strong><font face="宋体 "><font style="FONT-SIZE: 9pt;">返回自定义实体外包矩形框。</font></font><font style="FONT-SIZE: 9pt;"></font><br/><font style="FONT-SIZE: 9pt;"><font face="宋体 "></font></font><br/><font face="宋体 "><strong><font size="2"><font color="#666699">参考例程:</font></font></strong></font><br/><font size="2"><div class="blockcode"><em>复制内容到剪贴板</em>
                                <h5>代码:</h5><code id="code3">Acad::ErrorStatus<br/>CLinkLine::getGeomExtents(AcDbExtents&amp; extents) const<br/>{<br/><br/>assertReadEnabled();<br/><br/>extents.set(m_start,m_end);<br/><br/>return Mcad::eOk;<br/>}</code></div></font><br/><font face="宋体 "><font size="2"></font></font><br/><font face="Verdana "><font face="黑体 "><font size="3">1.7</font></font><br/></font><font face="黑体 "><font size="3">&nbsp; &nbsp;&nbsp;&nbsp;getOsnapPoints</font></font><font size="3"><font face="宋体 ">重载该虚函数,返回自定义实体的捕捉点</font><br/><font face="宋体 "><strong><font color="#666699"></font></strong></font><br/></font><font face="宋体 "><strong><font size="2"><font color="#666699">VC<font face="宋体 ">接口:</font></font></font></strong></font><br/><u><font face="宋体 "><font style="FONT-SIZE: 10pt;"><strong>virtual Acad::ErrorStatus</strong></font></font></u><br/><font size="3">getOsnapPoints(<br/></font><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"><br/></font></font></strong><strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">AcDb::OsnapMode</font></font></u></strong><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"><br/>osnapMode,</font></font></strong><br/><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"><br/></font></font></strong><strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">int</font></font></u></strong><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"><br/>gsSelectionMark,</font></font></strong><br/><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"><br/></font></font></strong><strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">const AcGePoint3d&amp;</font></font></u></strong><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"><br/>pickPoint,</font></font></strong><br/><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"><br/></font></font></strong><strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">const AcGePoint3d&amp;</font></font></u></strong><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"><br/>lastPoint,</font></font></strong><br/><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"><br/></font></font></strong><strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">const AcGeMatrix3d&amp;</font></font></u></strong><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"> viewXform,</font></font></strong><br/><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"><br/></font></font></strong><strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">AcGePoint3dArray&amp;</font></font></u></strong><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"><br/>snapPoints,</font></font></strong><br/><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"><br/></font></font></strong><strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">AcDbIntArray&amp;</font></font></u></strong><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"><br/>geomIds) const;</font></font></strong><br/><strong><font face="宋体 "><font size="2"></font></font></strong><br/><font face="宋体 "><strong><font size="2"><font color="#666699">参数:</font></font></strong></font><br/><font face="宋体 "><font style="FONT-SIZE: 10pt;"></font></font><br/><font face="宋体 "><font style="FONT-SIZE: 10pt;">osnapMode</font></font><font face="宋体 "><font style="FONT-SIZE: 9pt;">&nbsp; &nbsp; </font><font face="宋体 "><font style="FONT-SIZE: 9pt;">捕捉点类型,通过该变量可以确定需要返回什么类型的捕捉点</font></font></font><font style="FONT-SIZE: 9pt;"></font><br/><font face="宋体 "><font style="FONT-SIZE: 10pt;">gsSelectionMark&nbsp; &nbsp;</font></font><font face="宋体 "><font style="FONT-SIZE: 10pt;">暂没有使用</font></font><br/><font face="宋体 "><font style="FONT-SIZE: 10pt;">pickPoint&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;</font></font><font face="宋体 "><font style="FONT-SIZE: 10pt;">当前输入点</font></font><br/><font face="宋体 "><font style="FONT-SIZE: 10pt;">lastPoint&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;</font></font><font face="宋体 "><font style="FONT-SIZE: 10pt;">上一次的输入点</font></font><br/><font face="宋体 "><font style="FONT-SIZE: 10pt;">viewXform&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;</font></font><font face="宋体 "><font style="FONT-SIZE: 10pt;">暂没有使用</font></font><br/><font face="宋体 "><font style="FONT-SIZE: 10pt;">snapPoints&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;</font></font><font face="宋体 "><font style="FONT-SIZE: 10pt;">返回捕捉点</font></font><br/><font face="宋体 "><font style="FONT-SIZE: 10pt;">geomIds&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;</font></font><font face="宋体 "><font style="FONT-SIZE: 10pt;">暂没有使用</font></font><font style="FONT-SIZE: 9pt;"></font><br/><font style="FONT-SIZE: 9pt;"><font face="宋体 "></font></font><br/><font face="宋体 "><strong><font size="2"><font color="#666699">参考例程:</font></font></strong></font><br/><font face="宋体 "></font><div class="blockcode"><em>复制内容到剪贴板</em>
                        <h5>代码:</h5><code id="code4">Acad::ErrorStatus<br/>CLinkLine::getOsnapPoints(<br/><br/>AcDb::OsnapMode<br/>osnapMode,<br/><br/>int<br/>gsSelectionMark,<br/><br/>const AcGePoint3d&amp;<br/>pickPoint,<br/><br/>const AcGePoint3d&amp;<br/>lastPoint,<br/><br/>const AcGeMatrix3d&amp; viewXform,<br/><br/>AcGePoint3dArray&amp;<br/>snapPoints,<br/><br/>AcDbIntArray&amp;<br/>geomIds) const<br/>{<br/><br/>assertReadEnabled();<br/><br/><br/>if(osnapMode == McDb::kOsModeEnd)<br/><br/>{<br/><br/>// 返端点。<br/><br/>snapPoints.append(m_start);<br/><br/>snapPoints.append(m_end);<br/><br/>}<br/><br/>else if(osnapMode == McDb::kOsModeMid)<br/><br/>{<br/><br/>// 返回的是中点。<br/><br/>snapPoints.append(m_start + (m_end - m_start) / 2.0);<br/><br/>}<br/><br/>return Mcad::eOk;<br/>}</code></div><font face="Verdana "><font face="黑体 "><font size="3">1.8</font></font><br/></font><font face="黑体 "><font size="3">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;explode</font></font><font face="宋体 ">重载该虚函数,返回自定义实体打碎后的实体,在控件中,自定义实体保存在到</font><font face="宋体 ">dwg<font face="宋体 ">图中时,使用是块引用来保存,控件使用该函数得到自定义实体在块引用中的实体数据。</font></font><br/><font face="宋体 "></font><br/><font face="宋体 "><strong><font size="2"><font color="#666699">VC<font face="宋体 ">接口:</font></font></font></strong></font><br/><strong><font face="宋体 "><font size="2"><font color="#666699"></font></font></font></strong><br/><strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">virtual</font></font></u><br/><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">Acad::ErrorStatus</font></font></u></strong><br/><br/>explode<strong>(</strong><br/><strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">AcDbVoidPtrArray&amp;</font></font></u></strong><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"> entitySet) const;</font></font></strong><br/><font face="宋体 "><strong><font size="2"><font color="#666699">参数:</font></font></strong></font><br/><font face="宋体 "><font style="FONT-SIZE: 10pt;">entitySet&nbsp; &nbsp; </font></font><font face="宋体 "><font style="FONT-SIZE: 10pt;">返回打碎后的基本实体。实体指针内存控件释放。</font></font><br/><font style="FONT-SIZE: 9pt;"><font face="宋体 "></font></font><br/><font face="宋体 "><strong><font size="2"><font color="#666699">参考例程:</font></font></strong></font><br/><font face="宋体 "></font><div class="blockcode"><em>复制内容到剪贴板</em>
                        <h5>代码:</h5><code id="code5">Acad::ErrorStatus<br/>CLinkLine::explode(AcDbVoidPtrArray&amp; entitySet) const<br/>{<br/><br/>assertReadEnabled();<br/><br/>AcDbLine* pLine = new AcDbLine(m_start,m_end);<br/><br/>entitySet.append(pLine);<br/><br/>entitySet.append(GetDimText() );<br/><br/><br/>return Acad::eOk;<br/>}</code></div><font face="宋体 "></font><br/><font face="Verdana "><font face="黑体 "><font size="3">1.9</font></font><br/></font><font face="黑体 "><font size="3">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;dwgInFields</font></font><font face="宋体 ">重载该虚函数,响应控件系统,读取自定义实体数据,在从文件读取实体,复制实体等地方都会调用该函数。</font><br/><font face="宋体 "></font><br/><font face="宋体 "><strong><font size="2"><font color="#666699">VC<font face="宋体 ">接口:</font></font></font></strong></font><br/><strong><font face="宋体 "><font size="2"><font color="#666699"></font></font></font></strong><br/><u><font face="宋体 "><font style="FONT-SIZE: 10pt;"><strong>virtual Acad::ErrorStatus</strong></font></font></u>dwgInFields<strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">(AcDbDwgFiler* </font></font></u></strong><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;">pFiler);</font></font></strong><br/><strong><font face="宋体 "><font size="2"></font></font></strong><br/><font face="宋体 "><strong><font size="2"><font color="#666699">参数:</font></font></strong></font><br/><font face="宋体 "><font style="FONT-SIZE: 10pt;">pFiler&nbsp; &nbsp;</font></font><font face="宋体 "><font style="FONT-SIZE: 10pt;">数据归档对象,在这个函数,使用该对象读取数据。</font></font><br/><font style="FONT-SIZE: 9pt;"><font face="宋体 "></font></font><br/><font face="宋体 "><strong><font size="2"><font color="#666699">参考例程:</font></font></strong></font><br/><font face="宋体 "><font size="2"></font></font><div class="blockcode"><em>复制内容到剪贴板</em>
                        <h5>代码:</h5><code id="code6">Acad::ErrorStatus CLinkLine::dwgInFields (AcDbDwgFiler* pFiler)<br/>{<br/><br/>assertWriteEnabled();<br/><br/>if(pFiler-&gt;filerType() != McDb::kCustomEntityFileFiler)<br/><br/>{<br/><br/>Mcad::ErrorStatus es;<br/><br/>if ((es = McDbEntity::dwgInFields(pFiler)) != Mcad::eOk)<br/><br/>{<br/><br/>return es;<br/><br/>}<br/><br/>}<br/><br/><br/>int lVar = 1;<br/><br/>pFiler-&gt;readInt(&amp;lVar);<br/><br/><br/>pFiler-&gt;readPoint3d(&amp;m_start);<br/><br/>pFiler-&gt;readPoint3d(&amp;m_end);<br/><br/><br/>return Mcad::eOk;<br/>}</code></div><font face="Verdana "><font face="黑体 "><font size="3">1.10</font></font><br/></font><font face="黑体 "><font size="3">&nbsp; &nbsp;&nbsp; &nbsp;dwgOutFields</font></font><font face="宋体 ">重载该虚函数,响应控件系统,写入自定义实体数据,在把实体写入文件时,复制实体等地方都会调用该函数。</font><br/><font face="宋体 "></font><br/><font face="宋体 "><strong><font size="2"><font color="#666699">VC<font face="宋体 ">接口:</font></font></font></strong></font><br/><strong><font face="宋体 "><font size="2"><font color="#666699"></font></font></font></strong><br/><u><font face="宋体 "><font style="FONT-SIZE: 10pt;"><strong>&nbsp; &nbsp;virtual Acad::ErrorStatus</strong></font></font></u>dwgOutFields<strong><u><font face="宋体 "><font style="FONT-SIZE: 10pt;">(AcDbDwgFiler*</font></font></u></strong><strong><font face="宋体 "><font style="FONT-SIZE: 10pt;"> pFiler) const;</font></font></strong><br/><strong><font face="宋体 "><font size="2"></font></font></strong><br/><font face="宋体 "><strong><font size="2"><font color="#666699">参数:</font></font></strong></font><br/><font face="宋体 "><font style="FONT-SIZE: 10pt;">&nbsp; &nbsp;pFiler&nbsp; &nbsp;</font></font><font face="宋体 "><font style="FONT-SIZE: 10pt;">数据归档对象,在这个函数,使用该对象写入数据。</font></font><br/><font style="FONT-SIZE: 9pt;"><font face="宋体 "></font></font><br/><font face="宋体 "><strong><font size="2"><font color="#666699">参考例程:</font></font></strong></font><br/><br/><font face="宋体 "><font size="2"></font></font><div class="blockcode"><em>复制内容到剪贴板</em>
                        <h5>代码:</h5><code id="code7">Acad::ErrorStatus CLinkLine::dwgOutFields(AcDbDwgFiler* pFiler) const<br/>{<br/>assertReadEnabled();<br/><br/><br/>if(pFiler-&gt;filerType() != McDb::kCustomEntityFileFiler)<br/><br/>{<br/><br/>Mcad::ErrorStatus es;<br/><br/>if ((es = McDbEntity::dwgOutFields(pFiler)) != Mcad::eOk)<br/><br/>{<br/><br/>return es;<br/><br/>}<br/><br/>}<br/><br/><br/>pFiler-&gt;writeInt(LINKLINE_VERSION);<br/><br/>pFiler-&gt;writePoint3d(m_start);<br/><br/>pFiler-&gt;writePoint3d(m_end);<br/><br/><br/>return Mcad::eOk;<br/>}</code></div><font face="Verdana "><font face="黑体 "><font size="3">1.11</font></font><br/></font><font face="黑体 "><font size="3"></font></font><br/><font face="黑体 "><font size="3">控件例程说明</font></font><br/><font face="黑体 "><font size="3">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;</font></font><font face="宋体 ">在控件安装目录下的</font><font face="宋体 ">samples\CustomEntity\ CustomEntity.sln<font face="宋体 ">例程,演示了自定义实体现。在例程实现连接块</font>CLinkBlock<font face="宋体 ">自定义实体,</font>CLinkLine<font face="宋体 ">自定义实体,</font></font><br/><font face="宋体 ">&nbsp; &nbsp;&nbsp;&nbsp;CLinkBlock<font face="宋体 ">类显示通过块引用显示,绘图捕捉点通过块记录中的块属性定义文本来确定,当该实体被编辑后,会自动移动与该实体连接的连接线,实现个连动效果。</font></font><br/><font face="宋体 ">&nbsp; &nbsp;&nbsp;&nbsp;CLinkLine <font face="宋体 ">类实现一个线段实体功能,并带有长度标注功能。</font></font></div>

luowy 发表于 2009-9-25 20:24:00

<p>太佩服了,虽然自定义实体还不是很懂,但能研究到这里真是厉害阿~~~</p><p>貌似有些代码完全抄arx的~~</p>
页: [1]
查看完整版本: 使用梦想绘图控件做自定义实体