找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 815|回复: 4

[ARX程序]:获得了AcDbLine 的实体指针,怎么修改其端点的坐标呢?

[复制链接]
发表于 2003-3-5 20:55:28 | 显示全部楼层 |阅读模式

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

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

×
我将直线从dwg文件中读出并存入到数组
AcDbVoidPtrArray m_LineArray; 中。
当我打开其中直线: AcDbLine * pLine=(AcDbLine *)m_LLineArray.at(i);
时,可以读出pLine的StartPoint 和EndPoint的坐标志。
此时我想改变其起始点坐标,方法如下:
AcGePoint3d p(23,23,34);
pLine->SetStartPoint(p);          //执行到这里出错

提示“...eNotOpenForWrite"
该问题苦恼我一个下午还没解决。望高手指点迷经 !!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-3-5 21:00:18 | 显示全部楼层

Re: [ARX程序]:获得了AcDbLine 的实体指针,怎么修改其端点的坐标呢?

最初由 ppengxm 发布
[B]我将直线从dwg文件中读出并存入到数组
AcDbVoidPtrArray m_LineArray; 中。
当我打开其中直线: AcDbLine * pLine=(AcDbLine *)m_LLineArray.at(i);
时,可以读出pLine的StartPoint 和EndPoint的坐标志。
此时我... [/B]


以前是用 forRead (读)打开的对象,你现在对对象编辑(写),当然要提示你“对象没有作为写打开”啊。

如果你前面已经打开过对象,没有关闭(CLOSE),那么你可以用: pObj->upgradeOpen()  升级对象为“写”,就可以了,写操作完毕后,记得关闭对象(不需要),或者第一时间降级为读,用pObj->downgradeOpen();
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-3-5 21:31:02 | 显示全部楼层
晓东,你好!
当我用
Acad::ErrorStatus es;
es=pLine->upgradeOpen() ;
后再:pLine->setStartPoint(p);
j结果还是出现同样的错误。后来我发在升级为对象写时返回 es为eInvalidOpenState。
还有没有别地方存在问题啊?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-3-7 08:55:05 | 显示全部楼层
应该贴代码出来看看。
以下代码我测试应该没问题。
void CWeightTable::prtTest()
{
        AcGePoint3d p1,p2;
        p2.set(10,1000,0);
        p1.set(1,100,0);
        AcDbVoidPtrArray m_LineArray;
        AcDbLine* hsd =  new AcDbLine(p1,p2);
        m_LineArray.append(hsd);
        hsd->close();
        AcDbLine* ks = (AcDbLine*)m_LineArray.at(0);
        ks->setEndPoint(AcGePoint3d(10,10,0));
        ks->endPoint();
        addToModelSpace(oid,ks);
        ks->close();
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-3-7 19:53:04 | 显示全部楼层
最初由 chxmhsd 发布
[B]应该贴代码出来看看。
以下代码我测试应该没问题。
void CWeightTable::prtTest()
{
        AcGePoint3d p1,p2;
        p2.set(10,1000,0);
        p1.set(1,100,0);
        AcDbVoidPtrArray m_LineArray;
        AcDbLine* hsd =  new Ac... [/B]


他的问题应该是打开一个已经在数据库的对象进行编辑,而不是新建一个对象加到数据库。

上面的朋友,把你的完整代码贴出来吧。如果你调试过,尽量把知道的信息告诉给大家。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 06:52 , Processed in 0.220455 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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