自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小红楼

关注revit二次开发解决方案

  • 博客(37)
  • 收藏
  • 关注

原创 Revit插件兼容2022版本升级策略(3) —方案设计

三、方案设计a、方案描述 通过上面两篇文章对背景和问题的分析,我们设计如下解决方案: 以兼容DIsplayUnityType和UnitForgeId(ForgeTypeId)为例 1、定义Revit单位类型替换类(UnifyTypeId统一类型ID) 2、将Revit对象实例中,包含DIsplayUnityType或者UnitForgeId(ForgeTypeId)的 方法或者属性,进行扩展重写,使用UnifyTypeId替代相关...

2021-12-13 12:50:14 1140

原创 Revit插件兼容2022版本升级策略(2) —问题分析

二、问题分析a、API变化分析 Revit2022主要的变化,或者说我们最在意的变化,是通用单位表示的变化。以及依赖单位的其他对象的属性和方法都要做调整。我先展示一下Revit版本从2020到2022单位相关的那些对象是如何演变的。 黄色的枚举类型,2021变成了弃用,到2022由绿色的类型代替 DisplayUnitType(int)——>UnitTypeId(ForgeTypeId) ...

2021-12-09 17:50:54 1679

原创 Revit插件兼容2022版本升级策略(1) —背景

一、背景 我们考虑兼容,其实是在做这样一件事:以应用级别源代码能够复用为目标,适应多个版本Revit提供的API的变化。 我们要适应多个Revit的API谈不上向前兼容向后兼容的概念。我们只是在以复用为前提,去做多个版本库Dll的适配。 在以往Revit插件适应新的Revit宿主版本的时候,我们的工作就是找到那些语义和功能一致,但是签名发生变化的那些函数,然后去适配这些函数,重新定义一个满足现有输入输出要求的新函数。常用做法就是做一个专门提供适配的项目,在这...

2021-12-09 16:37:48 1169

原创 计算几何——点P与区间A(Amin,Amax)的距离(2)

一、问题描述: 给定区间A(Amin,Amax)和点P。计算点P与区间A(Amin,Amax)的距离,如果在区间内,距离视为0;如果在区间外,P到区间最近端点的距离定义为点到区间的距离二、问题分析:绘图:分类讨论:1、如果P在区间内,距离为02、如果P小于区间最小值,距离为Amin-P3、如果P大运区间最大值,距离为P-Amax简化计算方法:Math.Max(0, Math.Max(A.Min-P,P-A.Max))...

2021-05-08 18:00:36 624

原创 Revit—创建IndependentTag报错

1、问题描述 有时候我们在通过IndependentTag.Create 创建标记时,会发生错误,“There is no tag available.”; 给人的感觉时,我们明明已经加载进了族类型,同时也激活了,怎么还会出问题?百思不得其解 2、问题分析: 其实这个可能和Revit的创建标签的机制有关系,其创建流程应该时,先在默认的设置里面去取一个类型创建出来,然后在修改成我们控制的类型。 ...

2021-04-14 09:06:36 618

原创 Revit—IUpdater注册注销报错

问题:你可能被下面的异常所困扰:Updater::getUpdaerId()::getAddInId() does not match currently active add-in's AddInId 看到这个异常,你可能还要去调试,确定这个addinId怎么就不匹配了,吧啦吧啦调试半天,也没弄出个所以然。问题剖析: 其实这个错误提示可能给了一些误导,之所以产生这个异常很大程度上是因为你在调用UpdaterRegistry中相关的注册,注销方法时没有处在一个...

2021-04-07 09:17:12 262

原创 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 198

原创 计算几何——数轴区间判断相交(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 879 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 7672 2

原创 Revit—部分枚举中文名称获取LabelUtils

在二次开发过程中,可能会遇到取BuiltInCategory,BuiltInParameter等枚举的汉化中文显示的需求。Revit API提供了一个工具,LabelUtils。该工具能对一些常用的的内置枚举可以获取指定的语言显示。重点再说一遍:LabelUtils public class LabelUtils : IDisposable { ~LabelUtils(); public bool IsValidObject { g...

2020-09-09 09:03:26 395

原创 c#基础工具—对象克隆ObjectCloneUtils

一、情景分析 对象克隆对程序开发来说是一个很常见的小需求,就c#而言实现也很简单,浅克隆的的话使用MemberwiseClone,深克隆的话使用一种序列化方式,然后在反序列化就可以了。这篇文章提供的代码,不涉及到高深的技术,如果有什么亮点的话,可能就是通用话强点。二、代码设计要求 1、要实现两个方法:浅克隆Clone和深DeepClone 2、要做到比较通用,支持泛型。使用方便,一遍需求不用增加代码 3、根据约定优于配置的原则,在设计中减少接口和配置文件的约束。但要能灵活的控制...

2020-09-06 19:03:26 1254

原创 WPF—多值转换器IMultiValueConverter

在实际的开发中,经常会有这样的需要,当一个属性变化时,需要其他属性一起联动发生变化。这种变化如果只是后台之间属性之间的约束,直接写在后台代码中也无所谓,甚至可以说是这样组织是一个不错的策略。 但是,如果这种变化只体现在界面的联动效果上,比如属性A的变化,影响到属性B在界面上是否可以编辑。在这种场景中,如果后台代码过分干预前台的显示效果,反而显得设计过于耦合了。我们可以把这种变化,通过转换器在前台实现控制。WPF的转换器分为单值转换器,和多值转换器。既然是属性变化影响的是其...

2020-07-26 21:47:45 3325

原创 c#—string相关方法,日用而不知的细节

string.IsNullOrWhiteSpace(),这个方法可以过滤功能符号,比如说换行符,回车符号。 “aaa”.Contains(string.Empty),返回True

2020-07-19 16:05:33 125

原创 你的代码能力是哪个级别?

闲来有感,感叹学习能力的下降和学习目的的盲目,静下心来找找自己的位置。 欢迎大家自动来对号入座 我把程序员写代码分成六个状态,后来想了想,其实这套分级可以对应到任何领域一、 具体分级和练级指南起心立志 道路:学习和记忆基础知识识别基本语法(能看得下去) 道路:掌握一些通用成熟的固定技巧,常规表达方式。读懂代码(能看懂) 道路:1、 能根据需求实现功能。但具体原理不是太清楚,不太清楚的意思是:不知道怎么用好,怎么用不好,存在什...

2020-07-06 10:45:26 1861

原创 WPF—添加字体,fontawesome

WPF使用字体时,可以不在系统中进行安装,直接引用字体文件就可以。这是一个不错的性能,这样尽可能保持了程序本身的自管理。 经常有一些需求需要引用一些常见图标,fontawesome就是一个不错的选择。矢量字符充当图标与位图相比有他自身的优势,这里就不展开说了。那么WPF程序中,如何引用字符图标呢? 准备: 1、下载字体 2、将字体文件,放到指定的目录下。例如放在下图位置, 方法一:xaml方式,定义资源引用&lt...

2020-05-17 22:22:40 1008 1

原创 WPF—Win32交互

我们如何设置Window的Owner为指定的Handle呢?这涉及一个win32交互的问题。方法一:使用WindowInteropHelper首先我们一般的常规做法是,重写窗体的OnSourceInitialized方法或者绑定SourceInitialized事件。在它们相关联的代码中面去处理。为什么在这里处理呢,因为窗体执行到这一步才能确定自己的Handle值。WindowInteropHelper取到的Handle值才有意义,否则就要使用EnsureHandle了。 ..

2020-05-10 20:17:24 364

原创 WPF—ToolTip没有数据时,自动不显示

<Style TargetType="ToolTip"> <Style.Triggers> <Trigger Property="Content" Value="{x:Static sys:String.Empt...

2020-05-03 21:19:05 1755 1

原创 Revit—门关联房间

门(Door)相关FamilyInstance存在两个有效的可用属性ToRoom,FromRoom,在我们判断房间关系和门朝向时是不错的参考信息。但不幸的是,在项目使用过程中,发现在某些情况下直接获取上述两个属性会发生异常。一开始并没有发现导致异常的原因是什么,所以项目中就放弃了使用这两个属性。 后来经过研究发现,应该是当Door的删除阶段(DemolishedP...

2020-04-22 14:01:08 613

原创 Revit—视图联动

网上已经有人写过一些视图联动的帖子了,我这里将这个功能封装成一个类,以方便使用。核心思想第一步:组织需要关联的视图集合。这些视图要存在对应的UIView才有意义;第二步:绑定UIApplication的Idling和ViewActivated事件; 1、Idling事件处理UI视图显示范围同步,以ActiveView为基准,调整其他视图;...

2020-04-08 07:45:05 1246

原创 WPF—TextBox 后台绑定double,如何让前台不显示默认0

采用的方法是使用Nullable<double>代替double 。 Nullable<double>和double的操纵对用户来说是透明的,可以无差别的混合使用它们。 但是Nullable<double>多了一个可以判断值类型是否有效的好处,这个体现到前台的好处就是TextBox可以显示空白。 ...

2020-03-29 20:58:00 2164

原创 C#—空集Any函数和All函数语义

在c#集合列表的众多扩展方法中,Any方法和All方法是比较常用。Any语义:任意一个元素满足条件则返回true,否则返回fase;All语义:所有元素满足条件则返回true,否则返回false但是,如果集合本身是空集,即集合元素个数为0,可能会对使用者的正常逻辑产生混淆当集合是空集的情况,Any方法和All方法,会忽略条件判断语句,以空集的意义返回判断结果。即:当集合为空集时...

2020-03-15 07:24:49 5307

原创 Revit—WPF类库不明原因的不能加载?

乱语: 你打发无聊时间的方法,决定了你的成色。 今天是庚子年一月一日,就是俗话说的大年初一。全国被新型冠状病毒引发的传染病所笼罩,当看到那些冲向灾区的逆行者,除了泪目之外,还从心底发出一定要做点儿什么的急切心愿。 我们这些做程序的,自嘲了称呼声码农,往大了说那也是工程师,留下下点儿有用于世间的东西吧。于是写下了这篇文章。 正文: ...

2020-01-25 18:27:18 624 2

原创 命名这门学问

写在最前面,这篇文章敬网上有这方面思考的各位大神。我有这方面困惑的时候,参考了很多前人的思考,再次感谢。此篇文章更像是自己总结的一个备忘笔记 名不正,则言不顺。好的命名,堪比好的算法。甚至有时候一个合适的命名,就能省掉几十行的注释。并且让人印象深刻。当你开始关注命名这个问题时,你可能已经发现其中的秒处了。 在懊恼的选择中,纵向寻求一些规则,让自己做事显得...

2020-01-06 12:33:03 174

原创 c# await和async入门

一、是什么: await async都是所谓的上下文关键字。上下文关键字,就是在特殊的语境下是关键字,脱离语境就是普通的标识符二、怎么用(大匠诲人必以规矩的规矩)async 用来修饰方法,表明方法是异步的。方法的返回值必须是void、Task、Task<TResult>其中的一种。await表示等待某个任务执行完。await必须用来修饰Task或Task&...

2019-12-08 22:44:34 522

原创 Revit MEP二开

前言第一章、创建管线 1、创建普通的管线 2、创建竖向方形管线 3、设备出管 4、其他第二章、连接管线 1、连接件的创建 2、管线打断 3、风口和管道末端 4、来捣乱的保温层第三章、创建设备 1、自由布置 2、管线相关布置:第四章、连接设备 1、初次连接 2、二次修改连接第...

2019-11-03 22:14:58 455 1

原创 Revit—获取文件版本(支持17至20)

写过一篇文章,是分析如何在不打开Revit情况下获取Revit文件的版本信息。里面介绍了解决这个问题的整体思路,但现在看来太繁琐了。这里直接将获取版本的方法代码奉上。如果对其他Revit文件感兴趣,可以移步这里获取Revit文件版本。 下面的方法兼容了2017到2020的特殊处理。 public static class RevitFil...

2019-10-23 11:49:30 1889

原创 Revit—CableTray and Conduit 桥架线管打断

承接上两篇文章的讨论第一篇:Revit—线管连接桥架第二篇:Revit—Duct打断和Pipe打断这篇文章讲一下实现桥架线管打断的思路,并提供可用方法代码 打断管线并不复杂,复杂的是要恢复原有管线的连接。桥架和线管有和水管不一样的特点,上面第一篇文章写了,它能连接成你“意想不到”的样子,要恢复这种连接,也就存在一些技巧了。 另外,根据文章二提到的R...

2019-10-16 12:47:30 1565 1

原创 Revit—线管连接桥架

Revit中,是支持线管连接桥架和无配件桥架与桥架之间相互连接的。 如果你项目中需要类似的功能,这篇文章大概率能解决你的问题。Revit没有显示的API进行类似的操作。但是在一些你可能熟悉的API中提供了类似隐藏的功能。比如这次我们用到的就是NewTeeFitting这个函数。 函数签名:public FamilyInstance NewTeeFitti...

2019-10-10 13:24:16 2811

原创 Revit—Duct打断和Pipe打断

在Revit管线连接过程中,有些情况下需要将输入的管线进行打断处理在进行连接。 风系统和水系统提供了相关的的打断API,非常完美,可以放心使用。线管和桥架的打断,Revit没有提供相应的API,如果自己实现的话思路上不难,但是里面有坑要填。什么坑呢?具体的下次有机会再说,主要是桥架上也能产生Curve类型的Connector。 风系统管线打...

2019-10-10 13:06:01 2110

原创 RegistryKey读取注册表,明明看得到却读不到?

注册表这个东西,我们平常用的很少。真正在开发中遇到使用的时候,大多也是现学现卖。如果你遇到了如题的那种窘况,很可能是操作系统的位数原因导致的。不要直接使用:var localMachineKey=Registry.LocalMachine;而是使用如下与计算机位数相关的代码var useRegistryView = Environment.Is64BitOpera...

2019-09-27 21:55:48 968

原创 Revit获取安装路径,零依赖Revit提供的dll

通过RevitAddInUtility.dll提供的方法,我们很容易获取到一些本地Revit安装的信息,比如安装的版本,安装路径,和插件配置文件所在的文件夹等。 但如果你对代码有洁癖,觉得为了这么点事儿,没必要去引用一个外部Dll。或者其他别的什么原因都可以,导致不想去引用RevitAddInUtility.dll这个类库,同时又想获取到Revit安装的相关信息怎...

2019-09-27 21:46:50 1024

原创 Revit——获取线管类型可以使用的管径

如题要获取线管类型的可用直径,主要使用到的是ConduitSizeSettings这个类。namespace Autodesk.Revit.DB.Electrical{ public class ConduitSizeSettings : Element, IEnumerable<KeyValuePair<string, ConduitSizes>> ...

2019-09-26 11:15:34 901

原创 Revit文件版本判定(不打开Revit方式)

一、问题引入 拿到一个revit的.rvt文件,需要判断一下该文件是由哪个Revit版本创建的。然后根据这个判定执行不同的逻辑。最简单的应用就是,选择合适的revit版本打开revit文件。二、探索1、解析.rvt文件流。思路:拿到.rvt的文件流,然后判断流中是否包含类似2018,2017的东西。结论:这种方法是可以的。探索过程:1、在通过无数次的实验之后...

2019-08-03 21:22:39 4579 8

原创 Revit在平面视图中创建空间

说到Revit批量创建空间,这本不是一个什么困难的事情。Revit本身就自带这样的命令。通过Revit自带命令,在指定的平面视图创建元空间的方式,如下面动图所示: 但我们搞Revit二次开的,要怎么使用代码实现呢? 我尝试了如下思考一、模拟Revit命令操作,调用Revit固有命令创建。步骤1、将视图切换到需要创建空间的平面视图;步骤2、调用Revit命令 分析-...

2019-07-28 23:28:54 1206

原创 Revit文件导出svg格式思考

Revit没有直接导出svg格式文件的方法,但是动动脑子,还是会有一些不太靠谱的方法,可以完成这件事情。说它不太靠谱是因为这些方法非官方,并且这些方法用起来存在这样或那样的问题,很难百分百满足既定需求。 下面列举三种思路,以期抛砖引玉。它们分别为借助外部工具,借助外部dll,自定义解析。我会分别具体叙述一下这几种方法是什么思路。一、借助外部工具 这...

2019-07-25 09:50:49 1235

原创 设置Revit命令默认使用类型

在绘制墙,梁,柱,管道,标记的图元时,如何设置默认使用的类型呢(ElementType of FamilySymbol)?这只是调用一个方法的问题,先把结论奉上public void SetDefaultFamilyTypeId( ElementId familyCategoryId, ElementId familyTypeId)问题引入:对Revit进行操作过的程...

2019-07-23 10:08:40 806

原创 Revit自带命令图标获取

有时候,我们对Revit本身自带的命令显示的图标产生了兴趣,要怎么才能获取到这些图片呢。直接在安装目录下找好像并没有找到。那就只能换个思路了...思路:反编译Revit图标资源类库UIFrameworkRes.dll,获取Revit自身命令的图标资源流,保存到本地。1、首先找到UIFrameworkRes.dll所在的位置,这个文件在Revit的安装目录下。2、调用Revit生成图标的...

2019-07-21 23:39:41 2141

鼠标抖动方式企业微信防离线审查

通过模拟鼠标滑动的方式,保持PC端企业微信等聊天软件的在线状态。只有运行的Exe,没进行加密,C#实现。如果有人感兴趣可以反编译查看

2022-12-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除