乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 58|回复: 4

[求助]请教一个填充的问题?

[复制链接]

16

主题

51

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2010-12-7 15:32:00 | 显示全部楼层 |阅读模式

dvsuewkf2b0.JPG

dvsuewkf2b0.JPG


该图是我做的一个自定义块(由一椭圆、一条直线、一段圆弧封闭组成),块定义代码如下:
  1. public ObjectId CreateStation(Database db, string strBlockName, double dRadius, double dLength, Point3d pt1, double dZxlc, double dStartAngle, double dEndAngle)
  2. {
  3. ObjectId blockId = ObjectId.Null;
  4. BlockTableRecord record = new BlockTableRecord();
  5. record.Name = strBlockName;
  6. using (Transaction trans = db.TransactionManager.StartTransaction())
  7. {
  8. Point3d pStart = new Point3d(0, 0, 0);//块基点
  9. Point3d pEnd = new Point3d(0, dLength, 0);//结束点
  10. Point3d ptCir = new Point3d(0, dLength - dRadius, 0);
  11. Vector3d vec1 = new Vector3d(0, dRadius, 0);
  12. //Vector3d vec2 = new Vector3d(-6, 0, 0);
  13. Ellipse eLL = new Ellipse(ptCir, Vector3d.ZAxis, vec1, 0.7, 0, 0);
  14. Line lLen = new Line(pStart, pEnd);
  15. //车站图例上文字标注
  16. Point3d ptText = new Point3d(pt1.X, pt1.Y - dRadius * 2,0);
  17. DBText txt = new DBText();
  18. txt.TextString = Public.PublicClass.ConvertDmlc(CGlobal.GC, dZxlc);
  19. txt.WidthFactor = 1;
  20. txt.Height = 3;
  21. //txt.ColorIndex = iColor;
  22. txt.VerticalMode = TextVerticalMode.TextVerticalMid;
  23. txt.HorizontalMode = TextHorizontalMode.TextMid;
  24. txt.AlignmentPoint = ptText;
  25. //txt.LayerId = layerId;
  26. txt.Rotation = 90 * CMath.dConvertAngle;
  27. //加入半圆
  28. Arc objArc = new Arc(ptCir, dRadius * 0.5, dStartAngle, dEndAngle);
  29. //块记录定义
  30. record.Origin = pStart;//设置块基点
  31. record.AppendEntity(eLL);
  32. record.AppendEntity(lLen);
  33. record.AppendEntity(txt);
  34. record.AppendEntity(objArc);
  35. BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForWrite);
  36. if (!bt.Has(strBlockName))//判断是否存在同名块
  37. {
  38. blockId = bt.Add(record);
  39. trans.AddNewlyCreatedDBObject(record, true);
  40. //========图块填充============
  41. BlockTableRecordEnumerator enume = record.GetEnumerator();//获取块中图元对象计数器
  42. ObjectIdCollection ids1 = new ObjectIdCollection();
  43. int i = 0;
  44. while (enume.MoveNext())
  45. {
  46. DBObject dbobj = trans.GetObject(enume.Current, OpenMode.ForRead);
  47. ids1.Add(dbobj.ObjectId);
  48. }
  49. List IDS = new List();
  50. IDS.Add(ids1);
  51. //填充图块
  52. //CDraw.HatchObject(db, trans, record, IDS, "SOLID", eColor.White);
  53. //============================
  54. trans.Commit();
  55. }
  56. }
  57. return blockId;
  58. }
请问,如果实现阴影部分的填充?我把该块的组成图元:圆弧、直线、椭圆添加到objectidcollection中,填充时则报错:eillegalityinput。
回复

使用道具 举报

16

主题

51

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2010-12-7 16:10:00 | 显示全部楼层
着急啊,请求大家的帮助,自已顶一下
回复

使用道具 举报

16

主题

51

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2010-12-7 17:11:00 | 显示全部楼层
搞定了,由一个内圈的弧、一个外圈的弧、两个弧中间的两个线段组成的封闭区间,这种情况下,可以填充。
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-12-7 17:26:00 | 显示全部楼层
没错,填充区域必须是首尾相连的封闭区间
回复

使用道具 举报

84

主题

543

帖子

12

银币

中流砥柱

Rank: 25

铜币
886
发表于 2010-12-7 19:35:00 | 显示全部楼层
楼主可以将你修正好的代码贴上来学习以下吗。。。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-15 17:39 , Processed in 0.342415 second(s), 65 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表