NCF参数化建筑论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 12230|回复: 7
打印 上一主题 下一主题

[工作记录] 将地理信息数据调入到Grasshopper平台连载-02(完结)(转)

[复制链接]
跳转到指定楼层
1m
发表于 2012-11-21 09:46:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
转自 :http://cadesign.cn/bbs/thread-62-1-1.html
接将地理信息数据调入到Grasshopper平台连载-01
可以将Python代码直接粘入到Python组件中使用,但是同时需要修改输入输出选项

                               
登录/注册后可看大图

基于Python编写的数据处理基本模块Python代码解读:
mport rhinoscriptsyntax as rs
import re
point=point#调入相对控制点
print(point)  #编写过程中通过Print查看运行结果
pcoordi=rs.PointAdd (point,(0,0,0))#通过点相加的方式改变数据格式
print(pcoordi)
file=File
print(file)
f=open(file,'r')#以只读的方式打开.txt文件
x=[]
y=[]
z=[]
xyz=[]
rexyz=[]
firstpoint=f.readline()#以读取单独行的方式获得第一个点的坐标
repoint=[]
orpoint=[]
print(firstpoint)
subdistance=rs.PointSubtract (rs.AddPoint (firstpoint),rs.AddPoint (pcoordi))
print(subdistance[0])
for line in f.readlines():#循环遍历.txt文件数据
    lst=re.split('[,]+',line)
    x.append(float(lst[0]))#X值输出
    y.append(float(lst[1]))#Y值输出
    z.append(float(lst[2]))#Z值输出
xyz.append((float(lst[0]),float(lst[1]),float(lst[2])))
#xyz坐标值输出
    orpoint.append(rs.AddPoint(float(lst[0]),float(lst[1]),float(lst[2])))#xyz坐标点输出
    rexyz.append(((float(lst[0])-subdistance[0]),(float(lst[1])-subdistance[1]),\#相对xyz坐标值输出
    (float(lst[2])-subdistance[2])))
    repoint.append(rs.AddPoint((float(lst[0])-subdistance[0]),(float(lst[1])-subdistance[1]),\
    (float(lst[2])-subdistance[2])))#相对xyz坐标点输出
print(orpoint)

                               
登录/注册后可看大图


基于Python编写的分类模块:

                               
登录/注册后可看大图


import math
import rhinoscriptsyntax as rs
data=data
cal=classification
print(cal)
for i in cal:
    cal[cal.index(i)]=float(i)#将文本值改为浮点数值模式
print(cal)
for k in range(len(cal)-1):#遍历输入列表,将同一分类区间值赋予相同值
    a=cal[k]
    b=cal[k+1]
    for q in range(len(data)):
        if a<=data[q]<b:
            data[q]=a
for w in range(len(data)):
    if data[w]>=cal[-1]:
        data[w]=0
clalist=data#输出分类列表数据

基于Python编写的图例模块:

                               
登录/注册后可看大图


import math
import rhinoscriptsyntax as rs
color=color#输入颜色值
value=value#输入分类值
selectvalue=value
boolean=switch#设置开关,当数据量较大时可以先输入False值,禁止运算
print(boolean)

def classification(color,value,selectvalue):
    color=color
    value=value
selectvalue=selectvalue
    symcolor=[]
    symvalue=[]
    sym=[]
    for m in value:
        for n in range(len(selectvalue)):
            if selectvalue[n]==m:
                selectvalue[n]=None#将相同的值赋予None,占据列表
        sym.append(m)
    for i in range(len(sym)):
        if sym!=None:#排除None值
            symvalue.append(sym)
            symcolor.append(color)
    return symvalue,symcolor
if boolean==True:#True,False判断,为True时则运行函数classification()
    symvalue,symcolor=classification(color,value,selectvalue)

坡度值的调入:
    在GIS平台处理的坡度等信息数据调入到GH中的方式与高程调入方式是一样的,之前编写的程序同样可以在这里使用。

                               
登录/注册后可看大图



--Richie
可以查看01   http://cadesign.cn/bbs/thread-56-1-1.html
将地理信息数据调入到Grasshopper平台连载-01







分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享分享
头像被屏蔽
2m
发表于 2012-11-21 09:47:51 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
3m
发表于 2012-11-21 12:54:02 | 只看该作者
很给力,期待楼主的更新
4m
发表于 2012-11-21 16:40:24 | 只看该作者
等学会python在看吧,有大侠知道把python放到gh组件下面显示不出来什么原因吗?
5m
发表于 2012-11-21 20:30:54 | 只看该作者
moplee 发表于 2012-11-21 16:40
等学会python在看吧,有大侠知道把python放到gh组件下面显示不出来什么原因吗?

要使用Rhino5,GH要新版的~~
6m
发表于 2012-11-22 15:56:51 | 只看该作者
程序能稍微讲解一下吗
7m
发表于 2012-11-25 12:19:59 | 只看该作者
受教了,谢谢楼主
8m
发表于 2014-4-21 21:13:42 | 只看该作者
很给力,期待楼主的更新

小黑屋|手机版|NCF参数化建筑论坛 ( 浙ICP备2020044100号-2 )    辽公网安备21021102000973号

GMT+8, 2024-4-28 03:41 , Processed in 0.313125 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表