找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 762|回复: 11

[求助]:创建复合实体问题

[复制链接]
发表于 2002-10-30 15:50:11 | 显示全部楼层 |阅读模式

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

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

×
objectarx里面的帮助里有创建复合实体的代码,代码如下。可是无法正常运行,请问原因何在?
int status;
struct resbuf *entlist, result;
ads_point newpt;

entlist = acutBuildList(
    RTDXF0, "POLYLINE",// Entity type
    62, 5, // Color (blue)
    6, "dashed",// Linetype
    66, 1, // Vertices follow.
    0);

if (entlist == NULL) {
    acdbFail("Unable to create result buffer list\n");
    return BAD;
}

status = acdbEntMake(entlist); //程序运行到此处出问题,调试////发现status=-5003
acutRelRb(entlist); // Release acdbEntMake() buffer.

if (status != RTNORM) {
    acutPrintf ("%d",status);

    acedGetVar ("ERRNO", &result);
    acutPrintf ("ERRNO == %d, result.resval.rint);
    acdbFail("Unable to start polyline\n");
    return BAD;
}

newpt[X] = 1.0;
newpt[Y] = 1.0;
newpt[Z] = 0.0; // The polyline is planar

entlist = acutBuildList(
    RTDXF0, "VERTEX", // Entity type
    62, 5, // Color (blue)
    6, "dashed", // Linetype
    10, newpt, // Start point
    0);

if (entlist == NULL) {
    acdbFail("Unable to create result buffer list\n");

    return BAD;
}

status = acdbEntMake(entlist);
acutRelRb(entlist); // Release acdbEntMake() buffer.

if (status != RTNORM) {
    acdbFail("Unable to add polyline vertex\n");
    return BAD;
}

newpt[X] = 4.0;
newpt[Y] = 6.0;

entlist = acutBuildList(
    RTDXF0, "VERTEX", // Entity type
    62, 5, // Color (blue)
    6, "dashed", // Linetype
    10, newpt, // Second point
    0);

if (entlist == NULL) {
    acdbFail("Unable to create result buffer list\n");

    return BAD;
}

status = acdbEntMake(entlist);
acutRelRb(entlist); // Release acdbEntMake() buffer.

if (status != RTNORM) {
    acdbFail("Unable to add polyline vertex\n");
    return BAD;
}

newpt[X] = 3.0;
newpt[Y] = 2.0;

entlist = acutBuildList(
    RTDXF0, "VERTEX", // Entity type
    62, 5, // Color (blue)
    6, "dashed", // Linetype
    10, newpt, // Third point
    0);

if (entlist == NULL) {
    acdbFail("Unable to create result buffer list\n");

    return BAD;
}

status = acdbEntMake(entlist);
acutRelRb(entlist); // Release acdbEntMake() buffer.

if (status != RTNORM) {
    acdbFail("Unable to add polyline vertex\n");
    return BAD;
}

entlist = acutBuildList(
    RTDXF0, "SEQEND", // Sequence end
    62, 5, // Color (blue)
    6, "dashed", // Linetype
    0);

if (entlist == NULL) {
    acdbFail("Unable to create result buffer list\n");
    return BAD;
}

status = acdbEntMake(entlist);

acutRelRb(entlist); // Release acdbEntMake() buffer.

if (status != RTNORM) {
    acdbFail("Unable to complete polyline\n");
    return BAD;

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

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-30 16:07:36 | 显示全部楼层
不推荐你在ARX里面用ENTMAKE生成对象,复杂不说,效率不高。
推荐你用实例AcDb2dPolyline对象的方法去建立。

下面是引自帮助文件,关于ENTMAKE,你的例子返回了RTREJ,ACAD拒绝错误。看看下面,需要注意的事项。


  1. [FONT=courier new]
  2. 多次单独为每个子图元调用 entmake 可以创建一个复杂图元(老式多段线或块)。
  3. 当 entmake 第一次接收一个复杂图元的初始部件时,它将创建一个临时文件,用于收集定义数据,
  4. 如果有扩展数据,则也包括在内。(请参见扩展数据 -- xdata)。其后的每次 entmake 调用中,
  5. 函数都检查临时文件是否存在。如果存在,则向文件中增加新的子图元。
  6. 当复杂图元的定义结束时(即 entmake 接收到正确的 seqend 或 endblk 子图元),
  7. 将检查图元的一致性。如果合法,则将图元增加到图形中。当复杂图元创建完毕或创建被取消时,该文件会被删除。

  8. 复杂图元在其定义完成之前,不会有任何部分显示在图形中。直到最终的 seqend 和 endblk
  9. 子图元被传入 entmake,图元才会出现在图形数据库中。entlast 函数不能为未完成的复杂图元获取最新创建的子图元。
  10. 您可以输入不带参数的 entmake 来取消创建复杂图元。这将清除临时文件并返回 nil。
  11. 上述内容意味着 entmake 一次仅能构造一个复杂图元。在创建一个复杂图元时,
  12. [color=blue]如果 entmake 接收到无效的数据或接收到的图元不是一个正确的子图元,则该无效图元和整个复杂图元都会被拒绝。[/color]
  13. 通过调用不带参数的 entmake 可以显式地取消创建复杂图元。 [/FONT]
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-10-30 16:16:17 | 显示全部楼层
ENTMAKE生成对象不复杂呀,我觉得要比其它办法简单。objectarx里面的帮助代码难道也有错误?现在问题出来了,我希望发现问题原因。XDSoft 能否帮忙找出原因。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-30 16:32:02 | 显示全部楼层
最初由 arxarx 发布
[B]ENTMAKE生成对象不复杂呀,我觉得要比其它办法简单。objectarx里面的帮助代码难道也有错误?现在问题出来了,我希望发现问题原因。XDSoft 能否帮忙找出原因。 [/B]


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

使用道具 举报

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-30 17:16:34 | 显示全部楼层
最初由 arxarx 发布
[B]plinetype=0也不行, [/B]


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

使用道具 举报

 楼主| 发表于 2002-10-30 17:18:22 | 显示全部楼层
我现在把acutBuildList函数里面的所有设置线型的那一行删掉就行了,是否因为我没有load线型?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-30 17:29:59 | 显示全部楼层
最初由 arxarx 发布
[B]我现在把acutBuildList函数里面的所有设置线型的那一行删掉就行了,是否因为我没有load线型? [/B]


对,如果没有加载,你ENTMAKE里面实体引用了一个不存在的线型对象,当然要出错了。

在代码前面,判断下需要的引用的对象是否加载,没有加载就加载需要的对象。

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

使用道具 举报

 楼主| 发表于 2002-10-30 20:20:32 | 显示全部楼层
匿名块出错误好像还不时这个原因。objectarx里面的帮助说"you must open the block with a name whose first character is * and a block type flag (group 70) whose low-order bit is set to 1. ",但是它给的例子里却是把组码10设置为1(代码如下),可是我改为把组码70设置为1也不行
entlist = acutBuildList(
    RTDXF0, "BLOCK",
    2, "*ANON", // Only the '*' matters.
    10, "1", // No other flags are set.
    0 );
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-30 20:45:17 | 显示全部楼层
最初由 arxarx 发布
[B]匿名块出错误好像还不时这个原因。objectarx里面的帮助说"you must open the block with a name whose first character is * and a block type flag (group 70) whose low-order bit is set to 1. ",但是它给的例子?.. [/B]


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

使用道具 举报

 楼主| 发表于 2002-10-30 20:58:01 | 显示全部楼层
2, "*ANON" 改成 2,"*U" 也不行。我怀疑使用匿名块是否需要先设置一些参数
  objectarx里面的帮助说"you must open the block with a name whose first character is * and a block type flag (group 70) whose low-order bit is set to 1.".为什么它给的例子里却是把组码10设置为1?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-30 23:15:32 | 显示全部楼层
最初由 arxarx 发布
[B]2, "*ANON" 改成 2,"*U" 也不行。我怀疑使用匿名块是否需要先设置一些参数
  objectarx里面的帮助说"you must open the block with a name whose first character is * and a block type flag (group 70) whose low... [/B]


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 04:38 , Processed in 0.204109 second(s), 53 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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