找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1426|回复: 10

[求助]:一个关于曲线图形显示的问题

[复制链接]
发表于 2006-8-19 07:48:28 | 显示全部楼层 |阅读模式

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

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

×
我以AcDbSpline为基类派生了一个自定义类WJRedSpline,
现在存在一个WJRedSpline的实例:pRedSpln;
这个pRedSpln共有10个拟合点(0----9),我希望实现这样的一种效果:当实体显示在屏幕上时,我希望曲线的某一段不在屏幕上绘制出来,即只绘制0----4部分和6-----9部分,中间的4-------6部分不画。这个肯定是需要在WordDraw函数中处理,自己用数学公式去绘制曲线我也想过,也是测试过能作到的,但我觉得其优化程度远不如AutoCAD本身的AcDbSpline,所以就还是采用以AcDbSpline为基类进行派生。如果在WordDraw函数中临时创建两条AcDbSpline,然后把0---4的数据和6----9的数据分别输入给刚创建的两条曲线,然后再调用这两条曲线的WordDraw函数,之后在将两条临时曲线删除,这样确实能作到,但却存在一个很大的问题,不管如何去设置参数,这两条临时曲线与原始曲线都会发生曲线变形,如果用getSplitCurves去处理不知道是否会变形,我现在去尝试一下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-8-19 09:00:45 | 显示全部楼层
楼主能不能把“用数学公式去绘制曲线”的方法介绍一下,谢谢。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-19 12:15:13 | 显示全部楼层
没有深入研究,只是简单采用2次洋条曲线的参数方程,用许多线段去绘制出曲线,这个每本计算机图形学上都有介绍的。这个目前不想去做,风险性太大了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-19 16:28:22 | 显示全部楼层
楼主的做法太复杂了,没有必要的.
既然ARX无所不能,那就应该先从ARX中的函数入手,在你的程序中只需要增加一条语句就可实现,如果加上附加的设置语句也不超过10行.
建议看看AcGiClipBoundary结构体.
如果需要编译好的程序,请跟贴说明,但不会提供源码.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-19 18:44:23 | 显示全部楼层
太好了,请你提供一个吧,我确实应该去研究以下你说的那个结构体系。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-20 00:19:02 | 显示全部楼层
请严格按照说明操作,如有不明白的地方请跟贴说明.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-21 09:01:45 | 显示全部楼层
pglyxq,你好,非常感谢你的热情帮助,你为此花了一定的时间写了一个很详细的说明,很感谢。你的这个提示对我有很大的帮助,这样我可以实现以前我要绕很大圈子才能实现的效果。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-21 11:44:11 | 显示全部楼层
TO:  RedCAD
你找到答案了吗?如果没有,请看帮助

Using Clip Boundaries in AcGi (在AcGi中使用边界剪切)

ObjectARX® allows you to define a clipping boundary for geometry contained within xrefs and blocks. The clip-boundary portion of the AcGi API allows compound objects (blocks and objects that behave like blocks) to express these clip boundaries to the AcGi implementation.

During worldDraw() or viewportDraw() any drawable may specify a polygonal clip boundary with which to clip its graphics. The following sections describe how to use this API feature.

Clip boundaries are closed, non-self-intersecting, concave 2D polygons. Optional front and back Z clipping values can be assigned. The clip boundary is expressed in an arbitrary coordinate system relative to the objects being clipped.

In AutoCAD, when the user defines a clipping boundary for a block, the view direction and twist of the current view are used to define the coordinate system for the clip boundary. This might be the same as the coordinate system of the block reference being clipped. This is reflected in the API by the provision of a transformation to the clipping space from the block reference system:

Clip boundaries can be nested. A compound object can define a clipping boundary, and the objects that it contains can also define boundaries for their internal geometry. In this case, the nested geometry is first clipped against its parent's boundary and any resultant fragments are then clipped against the clip boundary of the outer block.

In the following example, the clip boundary is pushed onto the clip boundary stack before anything is drawn and popped off again once the drawing for this object is complete:

Adesk::Boolean
MyObject::worldDraw(AcGiWorldDraw* pDraw)
{
    AcGiWorldGeometry * pGeom = &pDraw->geometry();

    pGeom->pushModelTransform(myTransform());

    AcGiClipBoundary cb;
    cb.m_bDrawBoundary        = true;
    cb.m_vNormal = AcGeVector3d::kZAxis;
    cb.m_ptPoint = AcGePoint3d::kOrigin;

    // Two points treated as a rectangle, three creates a triangle
    cb.m_aptPoints.append(AcGePoint2d(0,0));
    cb.m_aptPoints.append(AcGePoint2d(5,5));

    // We are clipping in our own space
    cb.m_xToClipSpace.setToIdentity();
    cb.m_xInverseBlockRefXForm = myTransform().inverse();
   
    // No Z clipping
    cb.m_bClippingBack = cb.m_bClippingFront = false;
    cb.m_dFrontClipZ = cb.m_dBackClipZ = 0.;
   
    Adesk::Boolean bPopClipBoundary = pGeom->pushClipBoundary(&cb);
   
    // Draw something
    pGeom->circle(...);
   
    pGeom->popModelTransform();
    if(bPopClipBoundary){ pGeom->popClipBoundary(); }
    return true; // world-only
}
Since this clipping is a complex operation, some AcGi implementations might not support it fully. In this case, the AcGi implementation may return false from pushClipBoundary(), and you should not call popClipBoundary().
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-21 15:32:53 | 显示全部楼层
可能要过几天再回过头来处理这个问题,但基本思路我清楚了,到时再来讨论这个问题。


我现在给出了一个多边形(三角形)的裁减框,发现总是保留框内的东西而删除了框外的东西,而我现在希望正好相反,希望保留框外的东西,而删除掉框内的部分,我是在WordDraw函数中做的。但就是达不到这样的效果,不知道应该设置哪个参数?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-11-2 16:10:09 | 显示全部楼层
能给上小短代码么?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-11-25 15:31:26 | 显示全部楼层
楼主能否将代码共享一下,正准备做这方面学习
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 16:29 , Processed in 0.222863 second(s), 52 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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