EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 1666|回复: 26
打印 上一主题 下一主题

[规则重定义] 规则重定义

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12406

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-8 16:41:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用AutoCAD.NET二次开发目前还不支持自定义对象,不过我们可以用一些其他的方法来实现自定义对象的效果,规则重定义可以控制对象的显示效果,即线可以显示成一根管,点可以显示成一个圆。下面看看规则重定义的例子把AutoCAD里面的直线变成一个空心管。
using System;
  1. <p>
  2. </p><p>using Autodesk.AutoCAD.DatabaseServices;</p><p>using Autodesk.AutoCAD.Geometry;</p><p>using Autodesk.AutoCAD.Runtime;</p><p>using Autodesk.AutoCAD.GraphicsInterface;</p><p>
  3. </p><p>[assembly: CommandClass(typeof(Sample.LineToPipeOverule))]</p><p>namespace Sample</p><p>{</p><p>    class LineToPipeOverule</p><p>    {</p><p>        [CommandMethod("LineToPipe")]</p><p>        public void Start()</p><p>        {</p><p>            LineToPipe line=new LineToPipe(10);</p><p>            StartOverRule(RXClass.GetClass(typeof(Line)), line); </p><p>        }</p><p>
  4. </p><p>        [CommandMethod("EndOverRule")]</p><p>        public void End()</p><p>        {</p><p>            EndOverRule();</p><p>        }</p><p>
  5. </p><p>        /// <summary></p><p>        /// 启动重定义</p><p>        /// </summary></p><p>        /// <param name="CADClass">要重定义的类型</param></p><p>        /// <param name="overrule">把要重定义的类型定义为的对象</param></p><p>        public static void StartOverRule(RXClass CADClass, Overrule overrule)</p><p>        {</p><p>            Overrule.AddOverrule(CADClass, overrule, false);</p><p>            Overrule.Overruling = true;</p><p>        }</p><p>
  6. </p><p>        /// <summary></p><p>        /// 关闭重定义</p><p>        /// </summary></p><p>        public static void EndOverRule()</p><p>        {</p><p>            Overrule.Overruling = false;</p><p>        }</p><p>    }</p><p>
  7. </p><p>
  8. </p><p>    /// <summary></p><p>    ///  线显示成管</p><p>    /// </summary></p><p>    public class LineToPipe : DrawableOverrule</p><p>    {</p><p>        private double r;</p><p>        public LineToPipe(double R)</p><p>        {</p><p>            r = R;</p><p>        }</p><p>        public override bool WorldDraw(Drawable drawable, WorldDraw wd)</p><p>        {</p><p>            if (drawable is Line)</p><p>            {</p><p>                Line line = (Line)drawable;</p><p>                Circle circle = new Circle(line.StartPoint, line.EndPoint - line.StartPoint, r);</p><p>                ExtrudedSurface pipe = new ExtrudedSurface();</p><p>                pipe.CreateExtrudedSurface(circle, line.EndPoint - line.StartPoint, new SweepOptions());</p><p>                pipe.WorldDraw(wd);</p><p>                circle.Dispose();</p><p>                pipe.Dispose();</p><p>            }</p><p>            return true;</p><p>        }</p><p>    }</p><p>}</p>
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言

11

主题

869

帖子

1482

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1482
推荐
发表于 2014-5-13 10:17:17 | 只看该作者
路过!!! 不发表意见……

6

主题

853

帖子

1347

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1347
推荐
发表于 2014-5-7 10:04:40 | 只看该作者
路过!!! 不发表意见……

7

主题

888

帖子

2054

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
2054
推荐
发表于 2014-3-14 11:30:26 | 只看该作者
(*^__^*) 嘻嘻……

4

主题

851

帖子

1307

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1307
9F
发表于 2014-3-11 11:21:29 | 只看该作者
谢谢BIM大神…

12

主题

861

帖子

1353

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1353
13F
发表于 2014-5-7 10:12:15 | 只看该作者
顶......
楼下跟上.....
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-11-27 06:01

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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