找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3605|回复: 16

[ARX函数]:急求HATCH的用法

[复制链接]
发表于 2002-4-3 12:43:03 | 显示全部楼层 |阅读模式

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

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

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

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-4-3 13:24:52 | 显示全部楼层

Re: [ARX函数]:急求HATCH的用法

最初由 hhj9611 发布
[B]急求HATCH的用法 [/B]


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

使用道具 举报

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-4-5 15:35:01 | 显示全部楼层
最初由 hhj9611 发布
[B]代码运行正常!! [/B]


正常? 没有问题了?

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

使用道具 举报

 楼主| 发表于 2002-4-6 08:08:20 | 显示全部楼层
编译没问题,但没达到添充
的目的!!请帮忙看一下,填充一个圆和一个矩形。我很急,没有资料,OBJECTARX文档研究了几遍了,没效果。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-4-6 09:09:10 | 显示全部楼层
看了你的代码,最后你没有把AcDbHatch对象append到数据库里面,当然不会有结果了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-4-6 13:13:31 | 显示全部楼层
你好!!我照您教的做了,但还是不能显示,望赐教,如有成功例程更好,我的课题快进行不下去了。我又用实体组的方法也没见效,我是初学者,没办法了。如hatch  hatch1
            学生:胡红军
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-4-6 14:17:43 | 显示全部楼层
最初由 hhj9611 发布
[B]你好!!我照您教的做了,但还是不能显示,望赐教,如有成功例程更好,我的课题快进行不下去了。我又用实体组的方法也没见效,我是初学者,没办法了。如hatch  hatch1
            学生:胡红军 [/B]


下面是 XDRX_API的 制作HATCH的三个重载函数,你参考下,问题解决后,请到论坛告诉下大家原因,谢谢!


  1. BOOL makeHatch(AcDbObjectId layId,const char *patternName,AcDbHatch::HatchPatternType patternType,AcDbHatch::HatchStyle hStyle,double scale,double angle,BOOL doubleFlag,AcDbVoidPtrArray * loopPath,Adesk::Boolean assocFlag)
  2. {
  3.         if (loopPath->isEmpty())
  4.                 return FALSE;
  5.        
  6.         AcDbHatch* pHatch = new AcDbHatch();
  7.        
  8.         // Set hatch plane
  9.         AcGeVector3d normal(0.0, 0.0, 1.0);
  10.         pHatch->setNormal(normal);
  11.         pHatch->setElevation(0.0);
  12.        
  13.         // Set hatch pattern to ANSI31 predefined type //
  14.         pHatch->setPatternScale(scale);
  15.         pHatch->setHatchStyle(hStyle);
  16.         pHatch->setPatternAngle(angle);
  17.         pHatch->setPatternDouble(doubleFlag);
  18.        
  19.         // Set Associativity
  20.         pHatch->setAssociative(assocFlag);
  21.        
  22.         // Construct database AcDbLines
  23.         AcDbObjectId id;
  24.         AcDbObjectIdArray  dbObjIds;
  25.        
  26.        
  27.         AcDbEntity *pEnt;
  28.         for (int i=0;i<loopPath->length();i++){
  29.                 dbObjIds.setLogicalLength(0);
  30.                 pEnt=(AcDbEntity *)loopPath->at(i);
  31.                 id=XdDbUtils::appendToDb(pEnt);
  32.                 pEnt->close();
  33.                 dbObjIds.append(id);
  34.                 if (i==0){
  35.                         pHatch->appendLoop(AcDbHatch::kExternal, dbObjIds);
  36.                 }
  37.                 else{
  38.                         pHatch->appendLoop(AcDbHatch::kDefault, dbObjIds);
  39.                 }
  40.         }
  41.        
  42.         // Append an external rectangular loop to hatch boundary //
  43.        
  44.         // Elaborate hatch lines
  45.         pHatch->setPattern(patternType, patternName);
  46.         pHatch->evaluateHatch();
  47.        
  48.         dbObjIds.setLogicalLength(0);
  49.         pHatch->getAssocObjIds(dbObjIds);
  50.        
  51.         pHatch->setLayer(layId);
  52.        
  53.         // Post hatch entity to database
  54.         id=XdDbUtils::appendToDb(pHatch);
  55.         pHatch->close();
  56.        
  57.         // Attach hatchId to all source boundary objects for notification. //
  58.         if (assocFlag==Adesk::kTrue){
  59.                 int numObjs = dbObjIds.length();
  60.                 for (i = 0; i < numObjs; i++) {
  61.                         if (acdbOpenAcDbEntity(pEnt, dbObjIds[i],
  62.                                 AcDb::kForWrite)==Acad::eOk) {
  63.                                 pEnt->addPersistentReactor(id);
  64.                                 pEnt->close();
  65.                         }
  66.                 }
  67.         }
  68.        
  69.         // Get all associative source boundary object Ids for later use. //
  70.        
  71.         return TRUE;
  72. }

复制代码


  1. //
  2. BOOL makeHatch(AcDbObjectId layId,const char *patternName,
  3.                            AcDbHatch::HatchPatternType patternType,
  4.                            AcDbHatch::HatchStyle hStyle,double scale,BOOL doubleFlag,
  5.                            double angle,AcDbVoidPtrArray * outLoop,
  6.                            AcDbVoidPtrArray * interLoop,Adesk::Boolean assocFlag)
  7. {
  8.         if (outLoop->isEmpty())
  9.                 return FALSE;
  10.        
  11.         AcDbHatch* pHatch = new AcDbHatch();
  12.        
  13.         // Set hatch plane
  14.         AcGeVector3d normal(0.0, 0.0, 1.0);
  15.         pHatch->setNormal(normal);
  16.         pHatch->setElevation(0.0);
  17.        
  18.         // Set hatch pattern to ANSI31 predefined type //
  19.         pHatch->setPatternScale(scale);
  20.         pHatch->setHatchStyle(hStyle);
  21.         pHatch->setPatternAngle(angle);
  22.         pHatch->setPatternDouble(doubleFlag);
  23.        
  24.         // Set Associativity
  25.         pHatch->setAssociative(assocFlag);
  26.        
  27.         // Construct database AcDbLines
  28.         AcDbObjectId id;
  29.         AcDbObjectIdArray  dbObjIds;
  30.        
  31.        
  32.         AcDbEntity *pEnt;
  33.         AcDbObjectIdArray objIds;
  34.         for (int i=0;i<outLoop->length();i++){
  35.                 dbObjIds.setLogicalLength(0);
  36.                 pEnt=(AcDbEntity *)outLoop->at(i);
  37.                 id=XdDbUtils::appendToDb(pEnt);
  38.                 pEnt->close();
  39.                 dbObjIds.append(id);
  40.                 objIds.append(id);
  41.                 pHatch->appendLoop(AcDbHatch::kExternal, dbObjIds);
  42.         }
  43.        
  44.         for (i=0;i<interLoop->length();i++){
  45.                 dbObjIds.setLogicalLength(0);
  46.                 pEnt=(AcDbEntity *)interLoop->at(i);
  47.                 id=XdDbUtils::appendToDb(pEnt);
  48.                 pEnt->close();
  49.                 dbObjIds.append(id);
  50.                 objIds.append(id);
  51.                 pHatch->appendLoop(AcDbHatch::kDefault, dbObjIds);
  52.         }
  53.        
  54.         // Append an external rectangular loop to hatch boundary //
  55.        
  56.         // Elaborate hatch lines
  57.         pHatch->setPattern(patternType, patternName);
  58.         pHatch->evaluateHatch();
  59.        
  60.         dbObjIds.setLogicalLength(0);
  61.         pHatch->getAssocObjIds(dbObjIds);
  62.        
  63.         pHatch->setLayer(layId);
  64.        
  65.         // Post hatch entity to database
  66.         id=XdDbUtils::appendToDb(pHatch);
  67.         pHatch->close();
  68.        
  69.         // Attach hatchId to all source boundary objects for notification. //
  70.         if (assocFlag==Adesk::kTrue){
  71.                 int numObjs = objIds.length();
  72.                 for (i = 0; i < numObjs; i++) {
  73.                         if (acdbOpenAcDbEntity(pEnt, dbObjIds[i],
  74.                                 AcDb::kForWrite)==Acad::eOk) {
  75.                                 pEnt->addPersistentReactor(id);
  76.                                 pEnt->close();
  77.                         }
  78.                 }
  79.         }
  80.        
  81.         // Get all associative source boundary object Ids for later use. //
  82.        
  83.         return TRUE;
  84. }
复制代码

  1. //根据ID
  2. BOOL makeHatch(AcDbObjectId layId,const char *patternName,
  3.                            AcDbHatch::HatchPatternType patternType,
  4.                            AcDbHatch::HatchStyle hStyle,double scale,BOOL doubleFlag,
  5.                            double angle,AcArray<AcDbObjectIdArray> * extIds,AcArray<AcDbObjectIdArray> * intIds,
  6.                            Adesk::Boolean assocFlag)
  7. {
  8.         if (extIds->isEmpty())
  9.                 return FALSE;
  10.         AcDbHatch* pHatch = new AcDbHatch();
  11.        
  12.         // Set hatch plane
  13.         AcGeVector3d normal(0.0, 0.0, 1.0);
  14.         pHatch->setNormal(normal);
  15.         pHatch->setElevation(0.0);
  16.        
  17.         // Set hatch pattern to ANSI31 predefined type //
  18.         pHatch->setPatternScale(scale);
  19.         pHatch->setHatchStyle(hStyle);
  20.         pHatch->setPatternAngle(angle);
  21.         pHatch->setPatternDouble(doubleFlag);
  22.        
  23.         // Set Associativity
  24.         pHatch->setAssociative(assocFlag);
  25.        
  26.         // Construct database AcDbLines
  27.         AcDbObjectId id;
  28.        
  29.         for(int i=0;i<extIds->length();i++)
  30.         {
  31.                 pHatch->appendLoop(AcDbHatch::kExternal, extIds->at(i));
  32.         }
  33.        
  34.         for (i=0;i<intIds->length();i++)
  35.         {
  36.                 pHatch->appendLoop(AcDbHatch::kDefault, intIds->at(i));
  37.         }
  38.        
  39.        
  40.         // Elaborate hatch lines
  41.         pHatch->setPattern(patternType, patternName);
  42.         pHatch->evaluateHatch();
  43.        
  44.         AcDbObjectIdArray objIds1;
  45.         pHatch->getAssocObjIds(objIds1);
  46.        
  47.         pHatch->setLayer(layId);
  48.        
  49.         // Post hatch entity to database
  50.         id=XdDbUtils::appendToDb(pHatch);
  51.         pHatch->close();
  52.        
  53.         // Attach hatchId to all source boundary objects for notification. //
  54.         AcDbEntity *pEnt;
  55.         if (assocFlag==Adesk::kTrue){
  56.                 int numObjs = objIds1.length();
  57.                 for (int i = 0; i < numObjs; i++) {
  58.                         if (acdbOpenAcDbEntity(pEnt, objIds1[i],
  59.                                 AcDb::kForWrite)==Acad::eOk) {
  60.                                 pEnt->addPersistentReactor(id);
  61.                                 pEnt->close();
  62.                         }
  63.                 }
  64.         }
  65.        
  66.         // Get all associative source boundary object Ids for later use. //
  67.        
  68.         return TRUE;
  69. }
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-4-6 14:25:16 | 显示全部楼层
最初由 hhj9611 发布
[B]你好!!我照您教的做了,但还是不能显示,望赐教,如有成功例程更好,我的课题快进行不下去了。我又用实体组的方法也没见效,我是初学者,没办法了。如hatch  hatch1
            学生:胡红军 [/B]


你的问题应该是出在,LOOP环你没有生成AcDbVoidPtrArray数组,你只是用了边界环的AcGe模型,生成的HATCH的边界必须是AcDb类对象,其次,注意下如果生成“关联”边界,还要注意永久反映器的用法,上面帖子的三个函数你可以参考下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-4-8 23:49:52 | 显示全部楼层
谢谢!!我已做到了简单实体的HATCH,但复杂的还不行,而且PATTERN为“SOLID”才可,请问XDRX_API在何处下载!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-4-9 06:05:55 | 显示全部楼层
众多问题求教!!!
  
    XDRX_API是为写LISP程序而提供的,我不懂与API函数库有何关系???能提供可在VC中加载的API函数库吗??而且我下载的XDRX_API在AUTOCAD2000中不能
加载,出现错误,加载WIPEOUT出现APPLOAD命令中发生异常。然后致命错误,然后退出CAD。

  HATCH已成功,我是参照贵站的“在CAD中显示汉字”那篇文章而的,但PATTERN只可为“SOILD”我上载的HATCH1等可以变PATTERN,但复杂实体不可,其他没有显示。
  另我也想写个函数将其封装,但没成功,提供的三个函数我只可参考了,因为XdDbUtil,我没有。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-4-9 06:36:50 | 显示全部楼层
最初由 hhj9611 发布
[B]众多问题求教!!!
  
    XDRX_API是为写LISP程序而提供的,我不懂与API函数库有何关系???能提供可在VC中加载的API函数库吗??而且我下载的XDRX_API在AUTOCAD2000中不能
加载,出现错误,加载WIPEOUT出现AP... [/B]


1. 安装API问题,你下载“下载中心”的秋风和QUELEA制作的“晓东工具箱”吧,定制好了API环境(也包括了我写过的程序)。

2. 给你贴的3个函数,关于HATCH的操作的代码都有了,XDDBUTILS类是些公共函数,自己根据字面意思也应该知道功能的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-4-9 13:19:35 | 显示全部楼层
我以前CAD学的少,课题需要求三维实体的表面积,据我知,CAD中没这个命令,我想用ARX做,不知从那下手!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 02:25 , Processed in 0.263629 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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