你好,这里是BIMBOX。
我们的老朋友,建筑学和计算机双修的小神仙@VCTCN93又来BOX分享了。
当我问到他这次打算聊点啥,VCTCN93说,100%原创首发,聊一个很多人还不知道的事,可能有点超前,但他相信代表了未来的工作方式:给Dynamo搭一个服务器,让它成为真正的变形金刚。

下面的文章,代码部分你可以照着实操一下,绝对可以验证;如果你从来没写过Python、甚至没用过Dynamo,也完全可以跳过代码部分,看这套方法背后的思想,还能给给涨点谈资。
Let’s rock it.

from pyecharts.charts import Bar
import plotly.express as px
import pandas as pd
import pandas_profiling
#前两行是导入,命令就下面一行
df = pd.read_csv(‘churn.csv’)


from flask import Flask
app = Flast(__name__)if __name__ == '__main__':app.run()

from flask import Flask
__author__ = ‘Vctcn93’
__publisher__ = ‘ArchiPython’
app = Flask(__name__)@app.route('/connect')def connect():return '连接成功!'if __name__ == '__main__':app.run()
connect 函数,如果连接成功,网页上就会显示出 连接成功 四个字。
add 函数,让他求参数 a 和 参数 b 的和:


.NET 的库,与 CPython 有非常大的不同,我们需要把发送和接受转化成 CPython 的方式,下面直接送上 DynamoPythonScript 中实现的代码:(代码中带有#的灰色行是代码说明)# 启用 Python 支持和加载 DesignScript 库import clrclr.AddReference('ProtoGeometry')from Autodesk.DesignScript.Geometry import *# 该节点的输入内容将存储为 IN 变量中的一个列表。dataEnteringNode = IN# 将代码放在该行下面# IronPython 库的环境变量,一般在这个位置import syssys.path.append('C:/Program Files (x86)/IronPython 2.7/Lib')from System.Net import WebRequestfrom System.IO import StreamReaderfrom System.Text import Encoding
__author__ = ‘Vctcn93’
__publisher__ = ‘ArchiPython’
# 服务器地址url = r'http://127.0.0.1:5000/'# 可在在此处对 URL 进行编辑,使其支持参数# 发送请求request = WebRequest.Create(url)# 获取计算的结果response = request.GetResponse()result = StreamReader(response.GetResponseStream()).ReadToEnd()# 将输出内容指定给 OUT 变量。OUT = result
下面我们来试试具体能做些什么,抛砖引玉,欢迎大家迸发新的灵感。
在 CPython 中有一个几何库,称为 shapely,它功能强大,运算速度极快,是目前 Python 世界中非常流行的几何库之一。
绕开了 IronPython 的封锁后,你就可以通过服务器,使用 shapely 做相关的几何运算。运算速度一般比 Dynamo 自带电池快 1000 倍以上。
def create_grid(polyline: List[list], deisty: float): -> List(list)pass
import numpy as npfrom flask import Flask, requestfrom shapely.geometry import Polygon, Point
__author__ = ‘Vctcn93’
__publisher__ = ‘ArchiPython’
app = Flask(__name__)@app.route('/connect')def connect():return '连接成功!'@app.route('/add')def add():# 拿到 URL 中的参数a = request.args.get('a')b = request.args.get('b')# 将他们还原成数字a, b = eval(a), eval(b)# 计算result = a + b# 只能返回字符串return str(result)@app.route('/create_grid')def create_grid():# 获得polyline参数polyline = request.args.get('polyline')print(polyline)# 获得densitydensity = request.args.get('density')# 还原他们的类型polyline, density = eval(polyline), eval(density)# 获得图形信息polygon = Polygon(polyline)bbox = polygon.boundsstart_coords = bbox[:-2]width = bbox[2] - bbox[0]height = bbox[3] - bbox[1]round_x = round(width / density)round_y = round(height / density)# 定义基本矢量vector_right = np.array([density, 0])vector_up = np.array([0, density])vector_point_start = np.array(start_coords)# 获得原始点矩阵matrix = list()for x in range(round_x):for y in range(round_y):vector_point = vector_point_start + vector_right * x + vector_up * ypoint = Point(vector_point)# 同时做判断,如果点在范围内if polygon.contains(point):matrix.append(point)# 将结果输出为字符result = [list(p.coords)[0] for p in matrix]return str(result)if __name__ == '__main__':app.run()
输入一个 polyline,其几何为 [[0,0],[100,0],[100,100],[0,100]], density 为 10,求出其结果。

# 启用 Python 支持和加载 DesignScript 库
—
import clrclr.AddReference('ProtoGeometry')from Autodesk.DesignScript.Geometry import *# 该节点的输入内容将存储为 IN 变量中的一个列表。dataEnteringNode = IN# 将代码放在该行下面# IronPython 库的环境变量,一般在这个位置import syssys.path.append('C:/Program Files (x86)/IronPython 2.7/Lib')from System.Net import WebRequestfrom System.IO import StreamReaderfrom System.Text import Encoding
__author__ = ‘Vctcn93’
__publisher__ = ‘ArchiPython’
# 服务器地址url = http://127.0.0.1:5000/url += 'creaet_grid?'url += 'polyline=[[0,0],[100,0],[100,100],[0,100]]&'url += 'density=10'# 发送请求request = WebRequest.Create(url)# 获取计算的结果response = request.GetResponse()result = StreamReader(response.GetResponseStream()).ReadToEnd()# 将结果处理为一个个的点:points = [Point.ByCoordinates(*coords) for coords in eval(result)]# 将输出内容指定给 OUT 变量。OUT = points


到这一步,我们就真正实现了 0 节点运算,仅靠服务器本身完成复杂的功能,Dynamo 在整个链条中,仅仅起到了显示的作用。
Polyline 与 NumberSlider 来完成这项计算:






暂无评论
要发表评论,您必须先 登录