标签: revit-api

从外部Revit访问Revit API

我使用了RevitPythonShell和Dynamo,但想使用现有的Python IDE(Eclipse),在其中进行日志记录,调试,GitHub集成等配置。

我对交易和整个API都很满意,并且花了一些时间阅读有关Revit API和无模式连接的信息,其他人也提出了类似的问题。其中一些已经几岁了。目前是否可以从Revit外部执行的Python与Revit进行交互?

例如,我尝试过;

import clr
clr.AddReference(r'C:\Program Files\Autodesk\Revit 2016\RevitAPI')
import Autodesk.Revit.DB as rvt_db
print(dir(rvt_db))
Run Code Online (Sandbox Code Playgroud)

但这似乎没有揭示任何有用的东西。

python revit-api revitpythonshell pyrevit

4
推荐指数
1
解决办法
809
查看次数

如何根据 C# 中缺少的属性生成编译器错误?

我为 Revit Structure API 创建了许多插件。每个工具都必须有一个实现 IExternalCommand 接口的类。

在最新版本的 Revit 中,为了让您的工具正常工作,您需要在实现该接口的类上拥有两个属性:

[再生(RegenesisOption.Manual)] [事务(TransactionMode.Automatic)]

括号中的值可以改变,但那里一定有东西。我经常发现自己忘记添加属性,然后在运行时它会崩溃。Visual Studio 2010 中是否有任何方法可以添加编译器警告或错误,指出如果您的类实现该接口,则它必须具有这两个属性?如果有帮助的话我有磨刀器。

有人能指出我正确的方向吗?

c# compiler-construction revit-api

3
推荐指数
1
解决办法
444
查看次数

pyRevit WPF非模态问题

所以我刚刚开始涉足 pyRevit 中的 WPF。我尝试像这样实现pyrevit.forms.WPFWindow 类:

# -*- coding: UTF-8 -*-
"""
Third-Party software credits:
pyRevit: repository at https://github.com/eirannejad/pyRevit
"""

import System, clr, json, sys
clr.AddReference("System.Windows.Forms")
clr.AddReference('IronPython.Wpf')
import wpf
from Autodesk.Revit.DB import *
from pyrevit import revit, script, forms

class FactorySettings(forms.WPFWindow):

    def __init__(self):
        forms.WPFWindow.__init__(self, script.get_bundle_file('settings.xaml'))

    def something_click(self, A, B):
        plantings = FilteredElementCollector(revit.doc) \
            .WhereElementIsElementType() \
            .OfCategory(BuiltInCategory.OST_Planting)

ui = FactorySettings()
ui.show()
Run Code Online (Sandbox Code Playgroud)

这是我的 xaml:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        xmlns:Collections="clr-namespace:System.Collections;assembly=mscorlib"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
        mc:Ignorable="d"
        ShowInTaskbar="False" ResizeMode="CanResize"
        WindowStartupLocation="CenterScreen"
        HorizontalContentAlignment="Center"
        Title="Set worksets" Width="300" SizeToContent="Height"
        >
    <StackPanel Margin="0,0,0,0" …
Run Code Online (Sandbox Code Playgroud)

revit-api pyrevit

3
推荐指数
1
解决办法
1063
查看次数

获取BuiltInParameterGroup枚举值的可读名称

使用Revit API有一种方法可以获得BuiltInParameterGroup枚举值的人类可读版本(尺寸,材料和表面处理等)吗?

c# revit revit-api

2
推荐指数
1
解决办法
758
查看次数

Revit C#运行代码"OnShutDown"和"OnStartup"

"AIPAppStartup"的Revit SDK示例包含用于执行"OnShutDown"(关闭Revit会话时)或"OnStartup"(启动Revit会话时)的代码的预构建部分,但我希望能够为加载的每个文档运行代码.具体来说,我希望Revit清除与加载的特定模型相关联的临时文件.

我尝试创建一个新的结果,公共Autodesk.Revit.UI.Result OnLoad(UIControlledApplication应用程序),这不起作用.我还尝试了另一对On****的可能性(OnOpen等),这也失败了.

是否有一个特定的"On*****"结果可以实现我的愿望?

c# startup revit-api

2
推荐指数
1
解决办法
1486
查看次数

如何在 revitpythonshell 中选择正确的 LoadFamily 函数

revitpythonshell 提供了两种非常相似的方法来加载族。

LoadFamily(self: Document, filename:str) -> (bool, Family)
LoadFamily(self: Document, filename:str) -> bool
Run Code Online (Sandbox Code Playgroud)

所以似乎只有返回值不同。我尝试以几种不同的方式调用它:

(success, newFamily) = doc.LoadFamily(path)
success, newFamily = doc.LoadFamily(path)
o = doc.LoadFamily(path)
Run Code Online (Sandbox Code Playgroud)

但我总是得到一个布尔值。我也想要家人

python overloading revit revit-api revitpythonshell

2
推荐指数
1
解决办法
642
查看次数

WPF Revit 插件的最佳起点

我想重写我的 Revit 插件之一,以便它通过 MVVM 使用 WPF,因为与 Windows 窗体相比,我更喜欢 WPF 的外观和功能。

我已将 Jeremy Tammik 的 Revit 模板向导用于基于表单的加载项,但添加 WPF 用户控件似乎不起作用(无法找到 xaml 资源的运行时错误)。

我在示例中找到了一个 WPF MVVM revit add(AddMaterials,这里是 github 链接,它将从 Excel 电子表格添加材料),但它不符合我期望在顶层看到的内容。

  • Revit Add ins 有一个 app.cs 文件,它告诉 Revit 如何注册和访问 DLL(功能区面板按钮等)。
  • Windows WPF 应用程序将 app.xaml 作为顶级入口点。
  • 添加材料项目两者都没有,这告诉我它必须是一个类库,但是视图没有使用 UserControls,而是我更喜欢的 Windows。但是,Visual Studio 不允许您为类库类型项目添加窗口。

第三个问题很容易解决,只需将 WPF 应用程序项目中的窗口复制到类库项目中即可。但我不太明白如果不遵循模板中的 app.cs 代码,类库将如何在 Revit 中实例化。还有其他人以这种方式创建加载项吗?如果是的话,您能让我了解任何有帮助的技巧或讨论吗?有人为 Visual Studio 创建了 WPF Revit 插件模板吗?

当我添加 WPF 窗口并尝试实例化它时,出现错误,指出找不到 xaml 资源(System.IO.IOException:无法找到资源“xxxx.xaml”)。我尝试根据谷歌搜索此错误时找到的建议来修复此问题,但无济于事。我认为它来自于基于表单的项目,并且我可能必须从一个没有表单内容的新项目开始。

我现在已经验证,您确实可以从 Revit AddIn Wizard 开始并使用 WPF 。。。我从头开始,复制到另一个项目中创建的窗口中并让它运行(在添加各种引用、命名空间等之后)。所以我的问题似乎只是与原始项目有关,它已经添加了一堆表单内容。

wpf mvvm revit-api

2
推荐指数
1
解决办法
4451
查看次数

使用Revit API编码:减少内存使用的提示?

我有一个非常"普遍"的问题.我正在使用Revit API(使用python)进行开发,我有时会观察到Revit会话在我的测试和试验期间变慢(Revit保持打开的时间越长,它看起来就越多).它没有达到真正有问题的程度,但它让我无论如何都要考虑它.

所以,由于我没有编程背景,我很确定我的代码充满了真正"非正统"的东西,可能会好得多.

我是否可以遵循一些基本的"技巧和窍门"(我的意思是,与Revit API相关)以帮助提高代码执行速度?或者我应该说:帮助减少内存使用?

例如,我已经阅读了可用的'Dispose'方法,特别是在使用Transactions时(例如:http://thebuildingcoder.typepad.com/blog/2012/09/disposal-of-revit-api-objects). html),但最后我不是很清楚这是否真的非常重要(此外,因为我使用的是Python,并且不知道在哪里让我参与讨论使用"使用"或不)?

我应该'弃置'一切吗?;)

除了'Dispose'方法,还有别的吗?

非常感谢,Arnaud.

revit-api revitpythonshell pyrevit

2
推荐指数
1
解决办法
455
查看次数

如何在不重新启动的情况下构建Revit Apps

有没有人知道如何构建.NET C#Revit应用程序而无需每次都重新启动Revit?这适用于REVIT MEP 2013.

revit revit-api

1
推荐指数
1
解决办法
685
查看次数

如何在 Revit API 中检索嵌套族实例

我正在使用 FilteredElementCollector 来检索家庭实例:

    var collector = new FilteredElementCollector(doc, doc.ActiveView.Id);
    var familyInstances = collector.OfClass(typeof(FamilyInstance));
Run Code Online (Sandbox Code Playgroud)

这适用于没有嵌套族实例的族。但是如果我在项目中有 A 族的实例,而 A 族本身包含 B 族的实例,则此代码无法获取 B 族的实例。如何获取 B 族的实例?

我是 Revit API 的新手,似乎必须有一个简单的解决方案,但我在网上找不到。如果这有所作为,我正在使用 Revit 2015。

revit-api

1
推荐指数
1
解决办法
4805
查看次数