当前位置: 首页 > 工具软件 > PythonScript > 使用案例 >

如何在Dynamo(PythonScript)中引用py文件(导入函数)

谭飞掣
2023-12-01

欢迎加入BIM行业开发交流1群 群号:711844216(满),二群群号:1016453207

一、背景

小伙伴们在dynamo中使用PythonScript时,可能有些代码可以复用,比如函数,我们就可以将其保存在py文件中,然后再不同的PythonScript中进行调用。

二、思路+代码

首先,我们看下情景

  1. 我们在PythonScript中自定义一个函数加减的功能,然后使用它。
# -*- coding: UTF-8 -*-
import math
import clr
# 导入 RevitAPI 和 RevitAPIUI
clr.AddReference("RevitAPI")
clr.AddReference("RevitAPIUI")
import Autodesk
from Autodesk.Revit.DB import *
from Autodesk.Revit.UI import *
#导入dyamo中的几何图元
clr.AddReference("ProtoGeometry")
from Autodesk.DesignScript.Geometry import *
#导入revit节点
clr.AddReference("RevitNodes")
from Revit.Elements import *
import Revit
# 导入几何体转换方法(将dynamo中输出的几何体转为revit中的几何体)
clr.ImportExtensions(Revit.GeometryConversion)
# 导入元素转换(revit转dynamo)
clr.ImportExtensions(Revit.Elements) 
import sys
IN[0];
#自定义函数
def Add(a,b):  
	c=a+b;
	return c
#然后使用我们自己定义的这个Add函数
result=Add(1,2);
OUT=result;
  1. 我们是否可以把这个Add函数提取出来,放到一个py文件中,然后在不同PythonScript中调用呢?
    答案是肯定的!
    现在我们将这个函数单独提取出来放到电脑上的“D:\自己构建的函数库”路径夹下,并且取名为 “HanShu.py”。
#HanShu.py的内容
# -*- coding: UTF-8 -*-
def Add(a,b):  
	c=a+b;
	return c

再看我们的PythonScript中的代码如何书写

# -*- coding: UTF-8 -*-
import math
import clr
# 导入 RevitAPI 和 RevitAPIUI
clr.AddReference("RevitAPI")
clr.AddReference("RevitAPIUI")
import Autodesk
from Autodesk.Revit.DB import *
from Autodesk.Revit.UI import *
#导入dyamo中的几何图元
clr.AddReference("ProtoGeometry")
from Autodesk.DesignScript.Geometry import *
#导入revit节点
clr.AddReference("RevitNodes")
from Revit.Elements import *
import Revit
# 导入几何体转换方法(将dynamo中输出的几何体转为revit中的几何体)
clr.ImportExtensions(Revit.GeometryConversion)
# 导入元素转换(revit转dynamo)
clr.ImportExtensions(Revit.Elements) 
#前面都一样,主要修改了这部分,导入自定义函数
import sys
#HanShu.py文件的地址
hanShuLocation=r"D:\自己构建的函数库";
#将文件所在的地址导入到系统的环境变量中,这样就可以使用HanShu.py文件了
sys.path.append(hanShuLocation) 
#导入这个py文件中的函数(*代表这个py文件里面的所有函数,博主这里只写了一个函数进去,所以就导入了一个)
from HanShu import *
IN[0];
result=Add(1,3);
OUT=result;

好了,到这里我们就实现了PythonScript中引用自定义py函数的功能。

注意事项

1.不管在自己定义的py文件中,还是PythonScript中,都要把下面的代码放入最前面。免得出现由于中文引起的错误。

# -*- coding: UTF-8 -*-

2.如果我们自定义的函数,用到了revit相关的功能,那么我们需要把下面和revit有关的引用代码添加到自己定义的函数包HanShu.py中,否则会出现global name ‘xxx’ is not defined错误。

# -*- coding: UTF-8 -*-
import math
import clr
# 导入 RevitAPI 和 RevitAPIUI
clr.AddReference("RevitAPI")
clr.AddReference("RevitAPIUI")
import Autodesk
from Autodesk.Revit.DB import *
from Autodesk.Revit.UI import *
#导入dyamo中的几何图元
clr.AddReference("ProtoGeometry")
from Autodesk.DesignScript.Geometry import *
#导入revit节点
clr.AddReference("RevitNodes")
from Revit.Elements import *
import Revit
# 导入几何体转换方法(将dynamo中输出的几何体转为revit中的几何体)
clr.ImportExtensions(Revit.GeometryConversion)
# 导入元素转换(revit转dynamo)
clr.ImportExtensions(Revit.Elements) 
def Add(a,b):  
	c=a+b;
	return c

3.大家好,我是黑夜の骑士,欢迎大家关注我的博客,笔者将持续输出revit二次开发以及编程干货。

 类似资料: