chpmould 发表于 2010-12-7 21:32:00

实现填充和图块例子

请教老师: 如何实现将图形进行填充之后再建成块
谢谢狐哥的指导,问题已解决...

chpmould 发表于 2010-12-7 21:34:00

以下是简单绘制实体
      public void test()
      {      
            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            Editor ed = doc.Editor;
            Database db = doc.Database;
            using (doc.LockDocument())
            using (Transaction tr = db.TransactionManager.StartTransaction())
            {               
                BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
                BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt, OpenMode.ForWrite);
                Circle c1 = new Circle(new Point3d(0, 0, 0), Vector3d.ZAxis, 8);
                Line l1 = new Line(new Point3d(10, 0, 0), new Point3d(-10, 0, 0));
                btr.AppendEntity(c1);
                btr.AppendEntity(l1);
                tr.AddNewlyCreatedDBObject(c1, true);
                tr.AddNewlyCreatedDBObject(l1, true);
                tr.Commit();      
            }
      }

雪山飞狐_lzh 发表于 2010-12-8 10:11:00


创建和编辑AutoCad图元

chpmould 发表于 2010-12-8 12:31:00

我现在遇到的问题是,如果我做了填充就做块不成功,如果做了块就做填充不成功,我最终的要求是填充和块一起做,请老师指导一下。。。

雪山飞狐_lzh 发表于 2010-12-8 13:52:00


      
      public void test24()
      {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Editor ed = doc.Editor;
            Database db = doc.Database;
            string blkname = "Test";
            using (Transaction tr = db.TransactionManager.StartTransaction())
            {
                BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
                ObjectId blkdefid = GetRecorId(tr, bt, blkname);
                if (blkdefid == ObjectId.Null)
                {
                  BlockTableRecord blkdef = new BlockTableRecord { Name = blkname };
                  bt.UpgradeOpen();
                  blkdefid = bt.Add(blkdef);
                  tr.AddNewlyCreatedDBObject(blkdef, true);
                  bt.DowngradeOpen();
                  List loopents =
                        new List
                        {
                            new Arc(Point3d.Origin, 10, 0, Math.PI),
                            new Line(new Point3d(-10, 0, 0), new Point3d(10, 0, 0))
                        };
                  ObjectIdCollection loopids =
                        new ObjectIdCollection(
                            loopents.Select(ent => AddEntity(tr, blkdef, ent)).ToArray());
                  Hatch hatch = new Hatch();
                  hatch.SetDatabaseDefaults();
                  hatch.SetHatchPattern(HatchPatternType.PreDefined, "angle");
                  hatch.Associative = false;
                  hatch.AppendLoop(HatchLoopTypes.Outermost, loopids);
                  hatch.EvaluateHatch(true);
                  loopents.ForEach(ent => ent.Erase());
                  List ents =
                        new List
                        {
                            new Circle(Point3d.Origin, Vector3d.ZAxis, 10),
                            new Line(new Point3d(-15, 0, 0), new Point3d(15, 0, 0)),
                            hatch
                        };
                  int i = 1;
                  ents.ForEach(ent => { ent.ColorIndex = i++; AddEntity(tr, blkdef, ent); });
                }
                BlockReference bref = new BlockReference(Point3d.Origin, blkdefid);
                BlockTableRecord btr = tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
                AddEntity(tr, btr, bref);
                tr.Commit();
            }
      }
      ///
      /// 在符号表中获取对应键值的记录Id
      ///
      /// 符号表
      /// 记录键值
      /// 对应键值的记录Id
      public static ObjectId GetRecorId(Transaction tr, T table, string key) where T : SymbolTable
      {
            if (table.Has(key))
            {
                if (Application.Version.Major (tr);”不能通过编译,

chpmould 发表于 2010-12-8 20:14:00

我的代码有这个扩展函数了,一时就没改了
5楼代码已更改

雪山飞狐_lzh 发表于 2010-12-8 20:25:00


谢谢,现在编译成功。
另为请教一下在这段程序中如何更改图片中填充样例的角度和比例?

chpmould 发表于 2010-12-8 20:44:00

另为请教一下在这段程序中如何更改填充样例的角度和比例?

chpmould 发表于 2010-12-9 12:28:00

Hatch hatch = new Hatch();
                  hatch.PatternAngle = Math.PI / 4;
                  hatch.PatternScale = 0.1;
                  hatch.Associative = false;
                  hatch.SetHatchPattern(HatchPatternType.PreDefined, "angle");
                  hatch.AppendLoop(HatchLoopTypes.Outermost, loopids);
                  hatch.SetDatabaseDefaults();
                  hatch.EvaluateHatch(true);
页: [1]
查看完整版本: 实现填充和图块例子