乐筑天下

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

实现填充和图块例子

[复制链接]

84

主题

543

帖子

12

银币

中流砥柱

Rank: 25

铜币
886
发表于 2010-12-7 21:32:00 | 显示全部楼层 |阅读模式
请教老师: 如何实现将图形进行填充之后再建成块
谢谢狐哥的指导,问题已解决...
回复

使用道具 举报

84

主题

543

帖子

12

银币

中流砥柱

Rank: 25

铜币
886
发表于 2010-12-7 21:34:00 | 显示全部楼层
以下是简单绘制实体
  1.         public void test()
  2.         {        
  3.             Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  4.             Editor ed = doc.Editor;
  5.             Database db = doc.Database;
  6.             using (doc.LockDocument())
  7.             using (Transaction tr = db.TransactionManager.StartTransaction())
  8.             {               
  9.                 BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
  10.                 BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
  11.                 Circle c1 = new Circle(new Point3d(0, 0, 0), Vector3d.ZAxis, 8);
  12.                 Line l1 = new Line(new Point3d(10, 0, 0), new Point3d(-10, 0, 0));
  13.                 btr.AppendEntity(c1);
  14.                 btr.AppendEntity(l1);
  15.                 tr.AddNewlyCreatedDBObject(c1, true);
  16.                 tr.AddNewlyCreatedDBObject(l1, true);
  17.                 tr.Commit();      
  18.             }
  19.         }
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-12-8 10:11:00 | 显示全部楼层

创建和编辑AutoCad图元
回复

使用道具 举报

84

主题

543

帖子

12

银币

中流砥柱

Rank: 25

铜币
886
发表于 2010-12-8 12:31:00 | 显示全部楼层
我现在遇到的问题是,如果我做了填充就做块不成功,如果做了块就做填充不成功,我最终的要求是填充和块一起做,请老师指导一下。。。
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-12-8 13:52:00 | 显示全部楼层
[code]
        [CommandMethod("tt4")]
        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);”不能通过编译,
回复

使用道具 举报

84

主题

543

帖子

12

银币

中流砥柱

Rank: 25

铜币
886
发表于 2010-12-8 20:14:00 | 显示全部楼层
我的代码有这个扩展函数了,一时就没改了
5楼代码已更改
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-12-8 20:25:00 | 显示全部楼层

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

5c23kbn3chg.gif

5c23kbn3chg.gif

回复

使用道具 举报

84

主题

543

帖子

12

银币

中流砥柱

Rank: 25

铜币
886
发表于 2010-12-8 20:44:00 | 显示全部楼层
另为请教一下在这段程序中如何更改填充样例的角度和比例?
回复

使用道具 举报

84

主题

543

帖子

12

银币

中流砥柱

Rank: 25

铜币
886
发表于 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);
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

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

© 2020-2025 乐筑天下

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