找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 747|回复: 4

[求助]:请问填充问题

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

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

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

×
用 ARX 编写语句:
ads_name bss;  // 已经构建一选择集
acedCommand(RTSTR, "HATCH", RTSTR, "HEX", RTSTR, "",RTSTR, "",RTPICKS, bss, RTSTR,"", 0);

这样可以实现使用  Select Objects  选择方式进行填充

请问 ,若实现 Pick Points  选择方式进行填充

应该怎么办呢?

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

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-20 00:22:10 | 显示全部楼层
如果你用ADSRX,用命令的话,先用命令 -boundary 构造点边界。然后把构造出来的POLYLINE做命令 -bhatch 的边界。

使用ARX,还是推荐你不要用命令,而是用实例AcDbHatch对象的方法,构造HATCH,然后添加到数据库中。这样效率高,而且给程序员最大的定制性能。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-20 00:39:49 | 显示全部楼层
一个区域填充的函数,希望能对你有点帮助


  1. [FONT=courier new]
  2. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  3. //| 函数名:                        区域填充
  4. //|                                        FillInRegion()
  5. //|                                               
  6. //| 输入参数:                int No                                        区域点的个数
  7. //|                                        ads_point pt[]                        区域各点的坐标
  8. //|                                        int color                                颜色
  9. //|                                        double Scale                        比率
  10. //|                                        char *lpszPatternName        样式
  11. //|                                        char *strLayerName                层名
  12. //|                                        struct resbuf *xData        附加扩展数据
  13. //|
  14. //| 返回:                        AcDbObjectId
  15. //| 说明:                        指定层及区域的各点坐标,在区域中按指定样式和颜色填充
  16. //| 举例:                        略
  17. //|
  18. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  19. AcDbObjectId FillInRegion(int No, ads_point pt[],int color,double Scale,char *lpszPatternName,
  20.                                         char *strLayerName,struct resbuf *xData)
  21. {
  22.         AcGePoint2d temp;
  23.         AcDbObjectId FillId;

  24.         AcGePoint2dArray External;
  25.         for (int j = 0; j < No; j++) {
  26.                 temp.set(pt[j][0],pt[j][1]);
  27.                 External.append(temp);
  28.         }        //填加区域点
  29.         AcDbHatch * pHatch = new AcDbHatch;//创建图案填充对象

  30.     AcDbBlockTable *pBlockTable;

  31.     if (acdbHostApplicationServices()->workingDatabase()->
  32.                 getBlockTable(pBlockTable,AcDb::kForRead) != Acad::eOk) {
  33.                 ads_printf("\n错误:无法获取块表!\n");
  34.                 pHatch->close();
  35.                 return 0;
  36.         }

  37.     AcDbBlockTableRecord *pBlockTableRecord;

  38.     if (pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
  39.         AcDb::kForWrite) != Acad::eOk) {
  40.                 ads_printf("\n错误:无法获取符号表!\n");
  41.                 pBlockTable->close();
  42.                 return 0;
  43.         }

  44.            pBlockTable->close();

  45.         AcGeVector3d normal(0.0,0.0,1.0);
  46.         pHatch -> setNormal(normal);                                                                        //设置法线适量
  47.         pHatch -> setElevation(0.5);                                                                        //设置绘图标高
  48.         pHatch -> setAssociative(Adesk::kTrue);                                                       
  49.         pHatch -> setPatternScale(Scale);                                                                //设置缩放比例
  50.         pHatch -> setPattern(AcDbHatch::kPreDefined,lpszPatternName);        //设置填充图案
  51.         pHatch -> setHatchStyle(AcDbHatch::kNormal);                                        //设置填充样式
  52.         pHatch -> setColorIndex(color);                                                                        //设置剖面线颜色
  53.         pHatch -> setLayer(strLayerName);                                                                //设置所在图图层


  54.         AcGeDoubleArray vertexBulges;
  55.     vertexBulges.setPhysicalLength(0).setLogicalLength(No);
  56.     for (int i = 0 ;i < No ;i++) vertexBulges[i] = 0.0;                                //清零

  57.         //边界生成:外边界
  58.     if (pHatch->appendLoop(AcDbHatch::kExternal, External, vertexBulges) != Acad::eOk) {
  59.                 ads_printf("\n错误:无法形成填充外边界!\n");
  60.                 pBlockTableRecord->close();
  61.                 pHatch->close();
  62.                 return 0;
  63.         }

  64.         if (pHatch -> evaluateHatch() != Acad::eOk) {        //用设定的剖面线样式填充
  65.                 ads_printf("\n错误:无法用设定的剖面线样式填充!\n");
  66.                 pBlockTableRecord->close();
  67.                 pHatch->close();
  68.                 return 0;
  69.         }

  70.         if (pBlockTableRecord->appendAcDbEntity(FillId, pHatch) != Acad::eOk) {
  71.                 ads_printf("\n错误:无法将填充实体填加至数据库中!\n");
  72.                 pBlockTableRecord->close();
  73.                 pHatch->close();
  74.                 return 0;
  75.         }

  76.         pBlockTableRecord->close();               

  77.         //===========加扩展数据===========
  78.         pHatch->upgradeOpen();

  79.         if (pHatch->setXData(xData) != Acad::eOk){

  80.                 ads_printf("\n警告: 实体(填充对象 ID=%d)添加扩展数据时出错!\n",FillId);
  81.         }
  82.         //================================
  83.         pHatch->close();

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-20 00:42:58 | 显示全部楼层
最初由 kfx2002 发布
[B]一个区域填充的函数,希望能对你有点帮助

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
//| 函数名:                        区域填充
//|                                        FillInRegion()
//|                                               
... [/B]


谢谢!加10分。

另:我替你编辑帖子,代码缩进了。

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 17:24 , Processed in 0.194936 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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