jxzz016590 发表于 2011-5-5 09:57:33

请论坛高手帮我解决一个关于填充的问题,谢谢

using (Transaction trans = db.TransactionManager.StartTransaction())
                {
                  Line Bottomline, wall1, wall2; //定义三条直线构成路面和两面墙壁
                  Arc top; //定义半圆顶拱
                  Bottomline = new Line(point1, point2);
                  wall1 = new Line(new Point3d(0, 0, 0), point3);
                  wall2 = new Line(new Point3d( width,0, 0), point4);
                  top = new Arc(center,radius,0,-3.1415);
                  BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId,OpenMode.ForRead);
                  BlockTableRecord btr = (BlockTableRecord)trans.GetObject(db.CurrentSpaceId,OpenMode.ForWrite);
                  btr.AppendEntity(Bottomline);
                  btr.AppendEntity(wall1);
                  btr.AppendEntity(wall2);
                  btr.AppendEntity(top);
                  //以上完成大体的轮廓
                  //主体轮廓向外偏移,构成锚网
                  //墙的顶点向外偏移100
                  Point3d point13=new Point3d(-100,wallHeight,0);
                  Point3d point14 = new Point3d(width + 100, wallHeight, 0);
                  double radius2 = radius + 100;
                  Line line1 = new Line(point1,point13);
                  Line line2 = new Line(point2,point14);
                  Arc newarc = new Arc(center, radius2, 0, -3.1415);
                  ObjectId id4= btr.AppendEntity(line1);
                  ObjectId id5 = btr.AppendEntity(line2);
                  ObjectId id6 = btr.AppendEntity(newarc);
                  //画锚喷
                  //先取样点
                  double thickness = 100;//锚喷厚度
                  Point3dCollection points = new Point3dCollection();
                  points.Add(new Point3d(point1.X-thickness,0,0));
                  points.Add(new Point3d(point13.X-thickness-150,wallHeight,0));
                  points.Add(new Point3d(center.X-radius2-400,center.Y+150+thickness,0));
                  points.Add(new Point3d(center.X, center.Y + radius2 + thickness+200, 0));
                  points.Add(new Point3d(center.X+radius2+250,center.Y+thickness+50,0));
                  points.Add(new Point3d(point14.X+thickness+150,wallHeight,0));
                  points.Add(new Point3d(point2.X + thickness, 0, 0));
                  ObjectId id3=huamaopen.draw(points);
                  //将底部直线与样条曲线闭合
                  Line l1 = new Line(new Point3d(point1.X, 0, 0), new Point3d(point1.X - thickness, 0, 0));
                  Line l2 = new Line(new Point3d(point2.X, 0, 0), new Point3d(point2.X + thickness, 0, 0));
                  ObjectId id1= btr.AppendEntity(l1);
                  ObjectId id2 = btr.AppendEntity(l2);
                  //增加填充
                  Hatch hatch = new Hatch();
                  hatch.Normal = new Vector3d(0, 0, 1);
                  hatch.Elevation = 0.0;
                  hatch.SetHatchPattern(HatchPatternType.PreDefined,"AR-CONC");
                  ObjectIdCollection objectids = new ObjectIdCollection();
                  objectids.Add(id1);
                  objectids.Add(id2);
                  objectids.Add(id3);
                  objectids.Add(id4);
                  objectids.Add(id5);
                  objectids.Add(id6);
                  //在下面这句出现eInvalidInput错误,高手能不能帮我看看?
                  hatch.AppendLoop(Autodesk.AutoCAD.DatabaseServices.HatchLoopTypes.External,objectids);
                  hatch.EvaluateHatch(true);
                  btr.AppendEntity(hatch);
                  trans.Commit();
                  trans.Dispose();
                }

epwt 发表于 2011-5-6 10:55:54

你用的CAD是哪个版本的?
07版本的只能填充圆,08版本的都可以。

jxzz016590 发表于 2011-5-6 17:38:35

我用的是09版,也不知道哪里错了,能不能帮我看看,谢谢了
页: [1]
查看完整版本: 请论坛高手帮我解决一个关于填充的问题,谢谢