标签: pyrevit

从外部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
查看次数

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
查看次数

使用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
查看次数

获取元素类型的名称在 Iron python for Revit 中不起作用

我在 pyRevit 环境中使用 Iron python,我的代码如下:

element_types = \
        DB.FilteredElementCollector(doc)\
          .OfCategory(DB.BuiltInCategory.OST_Walls)\
          .WhereElementIsElementType()\ # getting family types not elements
          .ToElements()

for ele in element_types:
    print(ele.Name)
Run Code Online (Sandbox Code Playgroud)

根据 Revit API 文档,这应该可以工作,并且可能在 C# 中工作。ele.Name既可以作为 setter也可以作为 getter 使用。但是在 Ironpython 上面的代码失败,返回一个AttributeError: Name. 但是当我尝试时ele.Name = "new_family_type_name"它工作正常。

所以我的问题是如何进行ele.Name工作以获取家庭类型名称。

python ironpython revit-api revitpythonshell pyrevit

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