找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2170|回复: 15

[求助] 自定义实体AcGePoint3dArray的数据成员,如何写dwgInFields函数(已解决)

[复制链接]
发表于 2018-12-14 11:21:09 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 happy24170 于 2018-12-17 21:36 编辑

有如下两个问题,求大神解答:
1、建一个自定义实体,有一个AcGePoint3dArray的数据成员,但该点组的数量是不固定的,比如我建的这个实体是一个不规则的多边形,根据需要,多边形的顶点是会变化的,我有两个数据成员,一个是AcGePoint3dArray,一个是点的数量n,该如何写dwgInFields函数。
2、自定义实体中,有一个数据是字符串的数组,该如何写这个数组数据的读取函数。
非常感谢!!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-12-14 11:35:31 | 显示全部楼层
你这个和自定义实体无关吧
AcGePoint3dArray 你想保存什么点,就append, 删除就remove
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-14 12:53:42 | 显示全部楼层
marting 发表于 2018-12-14 11:35
你这个和自定义实体无关吧
AcGePoint3dArray 你想保存什么点,就append, 删除就remove

举个例子,我要建一个自定义的不规则多边形实体A,有一个点组数据成员AcGePoint3dArray m_points和一个顶点数的数据成员int m_numVertices;
默认构造函数:
A::A():m_points(0,8),
          m_numVertices = 3;      
{
}
在cad中建好一个三角形,调用cad的MOVE命令,
第一步是调用的默认构造函数(自定义实体必须有默认的构造函数),
第二步是把当前实体的数据写入到pFiler*指针中,这两步都没有问题,
第三步是把pFiler*中保存的数据进行读取并记录到移动位置后的实体中,这一步就有问题了,如果你建的是三角形,没有问题,因为默认构造函数中的顶点数是3,但如果你是建的四边形,就有问题了,因为默认构造函数提供的顶点数还是3,那么这一步的读取数据就会出现错误。
您明白我的意思了吗?就是说dwgInFields函数中如何确定点组的数量,因为它是按照默认构造函数生成的
我刚才按照上述的情况建了一个简单的自定义实体,确实是这样的,每次执行移动等命令时,第一步调用的就是默认构造函数,想把默认构造函数注释掉,提示是没有合适的默认构造函数(这证明必须要有默认构造函数)。

点评

去看下ARX安装目录下面的例子 \objectarx 2008\samples\entity\polysamp  详情 回复 发表于 2018-12-14 13:04
那你默认构造函数为什么要固定上顶点数量是3呢?在构造函数里面动态的给赋值不行吗 m_numVertices = this->numVerts();  详情 回复 发表于 2018-12-14 13:01
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-12-14 13:01:51 | 显示全部楼层
happy24170 发表于 2018-12-14 12:53
举个例子,我要建一个自定义的不规则多边形实体A,有一个点组数据成员AcGePoint3dArray m_points和一个顶 ...

那你默认构造函数为什么要固定上顶点数量是3呢?在构造函数里面动态的给赋值不行吗
m_numVertices = this->numVerts();
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 13个

财富等级: 恭喜发财

发表于 2018-12-14 13:04:53 | 显示全部楼层
happy24170 发表于 2018-12-14 12:53
举个例子,我要建一个自定义的不规则多边形实体A,有一个点组数据成员AcGePoint3dArray m_points和一个顶 ...

去看下ARX安装目录下面的例子

\objectarx 2008\samples\entity\polysamp
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-14 13:06:55 | 显示全部楼层
newer 发表于 2018-12-14 13:01
那你默认构造函数为什么要固定上顶点数量是3呢?在构造函数里面动态的给赋值不行吗
m_numVertices = thi ...

大神就是大神,我赶紧试一下,我是一个初学者,之前没接触过C++语言,在起步阶段

麻烦大神解答下第二个问题:
自定义实体中,有一个数据是字符串的数组,该如何写这个数组数据的读取函数。

点评

数组的读写,看你怎么构造的了 网上多搜搜索字符串数组的处理代码看看 你要用MFC,就用CStringArray 或者用STD的,或者用ARX自己的AcArray去构造保存你的字符串  详情 回复 发表于 2018-12-14 13:10
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-14 13:10:09 | 显示全部楼层
LoveArx 发表于 2018-12-14 13:04
去看下ARX安装目录下面的例子

\objectarx 2008\samples\entity\polysamp

大神您好,我就是在学习这个例子,但是他的例子是正多边形,跟我想说的情况不太一样,他在默认构造函数中的顶点数就是3,newer大神的解答应该可以实现,我先试下。谢谢您的解答
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 13个

财富等级: 恭喜发财

发表于 2018-12-14 13:10:29 | 显示全部楼层
happy24170 发表于 2018-12-14 13:06
大神就是大神,我赶紧试一下,我是一个初学者,之前没接触过C++语言,在起步阶段

麻烦大神解答下第二 ...

数组的读写,看你怎么构造的了
网上多搜搜索字符串数组的处理代码看看

你要用MFC,就用CStringArray 或者用STD的,或者用ARX自己的AcArray去构造保存你的字符串
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-14 13:48:15 | 显示全部楼层
newer 发表于 2018-12-14 13:01
那你默认构造函数为什么要固定上顶点数量是3呢?在构造函数里面动态的给赋值不行吗
m_numVertices = thi ...

我试了下,还是不行啊,是这样写构造函数吗?
AAAA::AAAA()
{
        m_numVertices = this ->numVerts();
        m_points.setLogicalLength(m_numVertices);
}

其中numVerts()函数这样写对吗
int
AAAA::numVerts() const
{
        assertReadEnabled();
        return m_numVertices;
}

dwgInFields函数这样写对吗
        for (int i = 0; i < m_numVertices; i++)
        {
                pFiler ->readPoint2d(&m_points.at(i));
        }
pFiler ->readInt32(&m_numVertices);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-14 14:08:34 | 显示全部楼层
LoveArx 发表于 2018-12-14 13:10
数组的读写,看你怎么构造的了
网上多搜搜索字符串数组的处理代码看看

大神,能帮忙解决下第一个问题么
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2018-12-14 18:31:39 | 显示全部楼层
newer 发表于 2018-12-14 13:01
那你默认构造函数为什么要固定上顶点数量是3呢?在构造函数里面动态的给赋值不行吗
m_numVertices = thi ...

不行啊,大神,求解答啊

点评

建议你还是去看那个polySamp ,把它编译成功,执行,理解里面的代码  详情 回复 发表于 2018-12-14 18:33
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-12-14 18:33:26 | 显示全部楼层
happy24170 发表于 2018-12-14 18:31
不行啊,大神,求解答啊

建议你还是去看那个polySamp ,把它编译成功,执行,理解里面的代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-14 19:03:18 | 显示全部楼层
newer 发表于 2018-12-14 18:33
建议你还是去看那个polySamp ,把它编译成功,执行,理解里面的代码

早就编译成功了,我已经做了好几个自定义实体了,都没有问题,就是现在想建一个类需要建一个不定长度的点组,不知道怎么弄了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2018-12-15 10:47:37 | 显示全部楼层

dwgInFields和dwgOutFields 的读写项最好要匹配,实际上可能可以多写,但是不能多读。
你writeitem一个顶点数值,就要readitem一个数值,
你write一个顶点就要read一个点。
大致流程是。
定义一个AcGePoint3dArray 成员m_pts,
在subworlddraw等内部重写函数中就使用这个m_pts即可。
在dwgOutFields中,先写出m_pts的顶点数目,然后循环依次写出m_pts的点。
在dwgInFields中,先读取顶点数值(因为循环要知道数量,所以要先读写顶点数量),然后循环改写m_pts,至于是append还是修改点值,自己判断.

构造函数,如果你固定至少3点,那么可以要求使用带参数的构造函数。

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-8 02:08 , Processed in 0.422684 second(s), 62 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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