明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1209|回复: 4

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

[复制链接]
发表于 2010-12-7 15:32:36 | 显示全部楼层 |阅读模式
该图是我做的一个自定义块(由一椭圆、一条直线、一段圆弧封闭组成),块定义代码如下:
  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<ObjectIdCollection> IDS = new List<ObjectIdCollection>();
  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。

本帖子中包含更多资源

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

x
 楼主| 发表于 2010-12-7 16:10:47 | 显示全部楼层
着急啊,请求大家的帮助,自已顶一下
 楼主| 发表于 2010-12-7 17:11:14 | 显示全部楼层
搞定了,由一个内圈的弧、一个外圈的弧、两个弧中间的两个线段组成的封闭区间,这种情况下,可以填充。
发表于 2010-12-7 17:26:14 | 显示全部楼层
没错,填充区域必须是首尾相连的封闭区间
发表于 2010-12-7 19:35:16 | 显示全部楼层
楼主可以将你修正好的代码贴上来学习以下吗。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 02:01 , Processed in 0.173889 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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