
实践“出”坑
临风小红楼
专注revit二次开发
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
AutoCAD—对象ID持久化
在每张dwg图纸上DBObject的Handle是唯一的,但同时如果两张dwg图纸同源(在某个时期复制成两份,分别修改演化),这两张dwg图纸中,同源部分会存在相同Handle的对象。再进行二次开发的过程中,有时需要将DBOjbect对象的“ID“信息记录来,以满足不同的业务要要求,比如在Block分解后的DBObject对象中,记录一下分解前的块参照”ID“标志,引便于将这些分解的对象分组。所以DBObject对象的Id属性不适合持久化管理,因为他是易变,不符合持久化的常理。原创 2024-08-23 16:02:59 · 655 阅读 · 0 评论 -
AutoCAD-扩展记录Xrecord
Xrecord(扩展记录)该类的设计就是为了提供更好的存储扩展数据的体验,它不算是一个图形对象,一般与DataBase的【命名字典】或者DBObject对象的【扩展字典】联合使用,实质上这两种字典是一种类型的对象(DBDictionary),只是所属对象不同。Xrecord会作为字典的键值存储相关扩展的信息。Xrecord关联数据的属性是Data,而非XData这是一个需要注意的地方,这里我建议就不要管其XData属性了,它继承自DBobject基类,直接当它不存在,不要有什么心里负担。原创 2024-08-16 21:28:52 · 1369 阅读 · 1 评论 -
Revit插件兼容2022版本升级策略(3) —方案设计
三、方案设计a、方案描述 通过上面两篇文章对背景和问题的分析,我们设计如下解决方案: 以兼容DIsplayUnityType和UnitForgeId(ForgeTypeId)为例 1、定义Revit单位类型替换类(UnifyTypeId统一类型ID) 2、将Revit对象实例中,包含DIsplayUnityType或者UnitForgeId(ForgeTypeId)的 方法或者属性,进行扩展重写,使用UnifyTypeId替代相关...原创 2021-12-13 12:50:14 · 1366 阅读 · 0 评论 -
Revit—创建IndependentTag报错
1、问题描述 有时候我们在通过IndependentTag.Create 创建标记时,会发生错误,“There is no tag available.”; 给人的感觉时,我们明明已经加载进了族类型,同时也激活了,怎么还会出问题?百思不得其解 2、问题分析: 其实这个可能和Revit的创建标签的机制有关系,其创建流程应该时,先在默认的设置里面去取一个类型创建出来,然后在修改成我们控制的类型。 ...原创 2021-04-14 09:06:36 · 720 阅读 · 0 评论 -
Revit—IUpdater注册注销报错
问题:你可能被下面的异常所困扰:Updater::getUpdaerId()::getAddInId() does not match currently active add-in's AddInId 看到这个异常,你可能还要去调试,确定这个addinId怎么就不匹配了,吧啦吧啦调试半天,也没弄出个所以然。问题剖析: 其实这个错误提示可能给了一些误导,之所以产生这个异常很大程度上是因为你在调用UpdaterRegistry中相关的注册,注销方法时没有处在一个...原创 2021-04-07 09:17:12 · 422 阅读 · 0 评论 -
Revit—视图可用性控制
预期效果:使指定视图对应的UI失去对键盘和鼠标的响应,类似于给控件设置了Enabled属性一、基本思路1、找到视图关联的界面窗体handle2、将handle设置为不可用二、涉及Win32Api1、获取窗体Textprivate const string DllName = "user32.dll"; [DllImport(DllName)] public static extern int GetWindowText(IntPtr hwnd, StringBuilder lp原创 2020-12-23 15:57:47 · 249 阅读 · 0 评论 -
计算几何——数轴区间判断相交(1)
问题描述: 给定区间A(Amin,Amax),B(Bmin,Bmax)。判断区间A与区间B是否相交问题分析: 如果我们把区间A看成固定不动的,区间B相对于区间A的位置状态有哪些呢? 将区间B的左端点固定不同,调整区间B的右端点,从左往右推导,能列出6种区间B的形态。如下图, 通过观察图形特点,聪明如你,一定很快就想到了一个简单的算法——分类讨论。 比如:1、当B的Bmin和Bmax同时小于Amin时,不相交...原创 2020-11-24 11:30:51 · 1120 阅读 · 1 评论 -
WPF实战—让Grid的网格线显示出来
一、代码价值描述: 1、对附加属性的理解和应用 2、网格线细节处理(重叠边线问题的解决)二、主要思路: 将grid的子元素,套在一个border里面。控制border边框的显示形成网格线三、 使用方法和案例:<Grid Height="120" Grid.Row="1" cui:GridOptions.ShowBorder="True" ></Grid>四、工具源码: p...原创 2020-11-20 13:52:19 · 8602 阅读 · 2 评论 -
Revit—部分枚举中文名称获取LabelUtils
在二次开发过程中,可能会遇到取BuiltInCategory,BuiltInParameter等枚举的汉化中文显示的需求。Revit API提供了一个工具,LabelUtils。该工具能对一些常用的的内置枚举可以获取指定的语言显示。重点再说一遍:LabelUtils public class LabelUtils : IDisposable { ~LabelUtils(); public bool IsValidObject { g...原创 2020-09-09 09:03:26 · 489 阅读 · 0 评论 -
c#基础工具—对象克隆ObjectCloneUtils
一、情景分析 对象克隆对程序开发来说是一个很常见的小需求,就c#而言实现也很简单,浅克隆的的话使用MemberwiseClone,深克隆的话使用一种序列化方式,然后在反序列化就可以了。这篇文章提供的代码,不涉及到高深的技术,如果有什么亮点的话,可能就是通用话强点。二、代码设计要求 1、要实现两个方法:浅克隆Clone和深DeepClone 2、要做到比较通用,支持泛型。使用方便,一遍需求不用增加代码 3、根据约定优于配置的原则,在设计中减少接口和配置文件的约束。但要能灵活的控制...原创 2020-09-06 19:03:26 · 1480 阅读 · 0 评论 -
WPF—多值转换器IMultiValueConverter
在实际的开发中,经常会有这样的需要,当一个属性变化时,需要其他属性一起联动发生变化。这种变化如果只是后台之间属性之间的约束,直接写在后台代码中也无所谓,甚至可以说是这样组织是一个不错的策略。 但是,如果这种变化只体现在界面的联动效果上,比如属性A的变化,影响到属性B在界面上是否可以编辑。在这种场景中,如果后台代码过分干预前台的显示效果,反而显得设计过于耦合了。我们可以把这种变化,通过转换器在前台实现控制。WPF的转换器分为单值转换器,和多值转换器。既然是属性变化影响的是其...原创 2020-07-26 21:47:45 · 3928 阅读 · 0 评论 -
c#—string相关方法,日用而不知的细节
string.IsNullOrWhiteSpace(),这个方法可以过滤功能符号,比如说换行符,回车符号。 “aaa”.Contains(string.Empty),返回True原创 2020-07-19 16:05:33 · 177 阅读 · 0 评论 -
你的代码能力是哪个级别?
闲来有感,感叹学习能力的下降和学习目的的盲目,静下心来找找自己的位置。 欢迎大家自动来对号入座 我把程序员写代码分成六个状态,后来想了想,其实这套分级可以对应到任何领域一、 具体分级和练级指南起心立志 道路:学习和记忆基础知识识别基本语法(能看得下去) 道路:掌握一些通用成熟的固定技巧,常规表达方式。读懂代码(能看懂) 道路:1、 能根据需求实现功能。但具体原理不是太清楚,不太清楚的意思是:不知道怎么用好,怎么用不好,存在什...原创 2020-07-06 10:45:26 · 2009 阅读 · 0 评论 -
WPF—添加字体,fontawesome
WPF使用字体时,可以不在系统中进行安装,直接引用字体文件就可以。这是一个不错的性能,这样尽可能保持了程序本身的自管理。 经常有一些需求需要引用一些常见图标,fontawesome就是一个不错的选择。矢量字符充当图标与位图相比有他自身的优势,这里就不展开说了。那么WPF程序中,如何引用字符图标呢? 准备: 1、下载字体 2、将字体文件,放到指定的目录下。例如放在下图位置, 方法一:xaml方式,定义资源引用<...原创 2020-05-17 22:22:40 · 1245 阅读 · 1 评论 -
WPF—Win32交互
我们如何设置Window的Owner为指定的Handle呢?这涉及一个win32交互的问题。方法一:使用WindowInteropHelper首先我们一般的常规做法是,重写窗体的OnSourceInitialized方法或者绑定SourceInitialized事件。在它们相关联的代码中面去处理。为什么在这里处理呢,因为窗体执行到这一步才能确定自己的Handle值。WindowInteropHelper取到的Handle值才有意义,否则就要使用EnsureHandle了。 ..原创 2020-05-10 20:17:24 · 441 阅读 · 0 评论 -
WPF—ToolTip没有数据时,自动不显示
<Style TargetType="ToolTip"> <Style.Triggers> <Trigger Property="Content" Value="{x:Static sys:String.Empt...原创 2020-05-03 21:19:05 · 1977 阅读 · 1 评论 -
Revit—门关联房间
门(Door)相关FamilyInstance存在两个有效的可用属性ToRoom,FromRoom,在我们判断房间关系和门朝向时是不错的参考信息。但不幸的是,在项目使用过程中,发现在某些情况下直接获取上述两个属性会发生异常。一开始并没有发现导致异常的原因是什么,所以项目中就放弃了使用这两个属性。 后来经过研究发现,应该是当Door的删除阶段(DemolishedP...原创 2020-04-22 14:01:08 · 794 阅读 · 0 评论 -
WPF—TextBox 后台绑定double,如何让前台不显示默认0
采用的方法是使用Nullable<double>代替double 。 Nullable<double>和double的操纵对用户来说是透明的,可以无差别的混合使用它们。 但是Nullable<double>多了一个可以判断值类型是否有效的好处,这个体现到前台的好处就是TextBox可以显示空白。 ...原创 2020-03-29 20:58:00 · 2554 阅读 · 0 评论 -
C#—空集Any函数和All函数语义
在c#集合列表的众多扩展方法中,Any方法和All方法是比较常用。Any语义:任意一个元素满足条件则返回true,否则返回fase;All语义:所有元素满足条件则返回true,否则返回false但是,如果集合本身是空集,即集合元素个数为0,可能会对使用者的正常逻辑产生混淆当集合是空集的情况,Any方法和All方法,会忽略条件判断语句,以空集的意义返回判断结果。即:当集合为空集时...原创 2020-03-15 07:24:49 · 6056 阅读 · 0 评论 -
Revit—WPF类库不明原因的不能加载?
乱语: 你打发无聊时间的方法,决定了你的成色。 今天是庚子年一月一日,就是俗话说的大年初一。全国被新型冠状病毒引发的传染病所笼罩,当看到那些冲向灾区的逆行者,除了泪目之外,还从心底发出一定要做点儿什么的急切心愿。 我们这些做程序的,自嘲了称呼声码农,往大了说那也是工程师,留下下点儿有用于世间的东西吧。于是写下了这篇文章。 正文: ...原创 2020-01-25 18:27:18 · 711 阅读 · 2 评论 -
命名这门学问
写在最前面,这篇文章敬网上有这方面思考的各位大神。我有这方面困惑的时候,参考了很多前人的思考,再次感谢。此篇文章更像是自己总结的一个备忘笔记 名不正,则言不顺。好的命名,堪比好的算法。甚至有时候一个合适的命名,就能省掉几十行的注释。并且让人印象深刻。当你开始关注命名这个问题时,你可能已经发现其中的秒处了。 在懊恼的选择中,纵向寻求一些规则,让自己做事显得...原创 2020-01-06 12:33:03 · 345 阅读 · 0 评论 -
c# await和async入门
一、是什么: await async都是所谓的上下文关键字。上下文关键字,就是在特殊的语境下是关键字,脱离语境就是普通的标识符二、怎么用(大匠诲人必以规矩的规矩)async 用来修饰方法,表明方法是异步的。方法的返回值必须是void、Task、Task<TResult>其中的一种。await表示等待某个任务执行完。await必须用来修饰Task或Task&...原创 2019-12-08 22:44:34 · 678 阅读 · 0 评论 -
Revit—获取文件版本(支持17至20)
写过一篇文章,是分析如何在不打开Revit情况下获取Revit文件的版本信息。里面介绍了解决这个问题的整体思路,但现在看来太繁琐了。这里直接将获取版本的方法代码奉上。如果对其他Revit文件感兴趣,可以移步这里获取Revit文件版本。 下面的方法兼容了2017到2020的特殊处理。 public static class RevitFil...原创 2019-10-23 11:49:30 · 2150 阅读 · 0 评论 -
Revit—CableTray and Conduit 桥架线管打断
承接上两篇文章的讨论第一篇:Revit—线管连接桥架第二篇:Revit—Duct打断和Pipe打断这篇文章讲一下实现桥架线管打断的思路,并提供可用方法代码 打断管线并不复杂,复杂的是要恢复原有管线的连接。桥架和线管有和水管不一样的特点,上面第一篇文章写了,它能连接成你“意想不到”的样子,要恢复这种连接,也就存在一些技巧了。 另外,根据文章二提到的R...原创 2019-10-16 12:47:30 · 1850 阅读 · 1 评论 -
Revit—Duct打断和Pipe打断
在Revit管线连接过程中,有些情况下需要将输入的管线进行打断处理在进行连接。 风系统和水系统提供了相关的的打断API,非常完美,可以放心使用。线管和桥架的打断,Revit没有提供相应的API,如果自己实现的话思路上不难,但是里面有坑要填。什么坑呢?具体的下次有机会再说,主要是桥架上也能产生Curve类型的Connector。 风系统管线打...原创 2019-10-10 13:06:01 · 2304 阅读 · 0 评论 -
RegistryKey读取注册表,明明看得到却读不到?
注册表这个东西,我们平常用的很少。真正在开发中遇到使用的时候,大多也是现学现卖。如果你遇到了如题的那种窘况,很可能是操作系统的位数原因导致的。不要直接使用:var localMachineKey=Registry.LocalMachine;而是使用如下与计算机位数相关的代码var useRegistryView = Environment.Is64BitOpera...原创 2019-09-27 21:55:48 · 1162 阅读 · 0 评论 -
Revit——获取线管类型可以使用的管径
如题要获取线管类型的可用直径,主要使用到的是ConduitSizeSettings这个类。namespace Autodesk.Revit.DB.Electrical{ public class ConduitSizeSettings : Element, IEnumerable<KeyValuePair<string, ConduitSizes>> ...原创 2019-09-26 11:15:34 · 1006 阅读 · 0 评论