你好,这里是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 clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
# 该节点的输入内容将存储为 IN 变量中的一个列表。
dataEnteringNode = IN
# 将代码放在该行下面
# IronPython 库的环境变量,一般在这个位置
import sys
sys.path.append('C:/Program Files (x86)/IronPython 2.7/Lib')
from System.Net import WebRequest
from System.IO import StreamReader
from 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 np
from flask import Flask, request
from 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)
# 获得density
density = request.args.get('density')
# 还原他们的类型
polyline, density = eval(polyline), eval(density)
# 获得图形信息
polygon = Polygon(polyline)
bbox = polygon.bounds
start_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 * y
point = 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 clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
# 该节点的输入内容将存储为 IN 变量中的一个列表。
dataEnteringNode = IN
# 将代码放在该行下面
# IronPython 库的环境变量,一般在这个位置
import sys
sys.path.append('C:/Program Files (x86)/IronPython 2.7/Lib')
from System.Net import WebRequest
from System.IO import StreamReader
from 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
来完成这项计算:
暂无评论
要发表评论,您必须先 登录