国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

利用國(guó)產(chǎn)建模平臺(tái)自動(dòng)創(chuàng)建FAST 索網(wǎng)數(shù)字化模型

2019-11-22 08:22趙正旭趙士偉王威張慶海姜鵬郭峰
現(xiàn)代計(jì)算機(jī) 2019年29期
關(guān)鍵詞:鋼索拉索表格

趙正旭,趙士偉,王威,張慶海,姜鵬,郭峰

(1.青島理工大學(xué),青島266520;2.石家莊鐵道大學(xué)復(fù)雜網(wǎng)絡(luò)與可視化研究所,石家莊050043;3.中國(guó)科學(xué)院國(guó)家天文臺(tái),北京100012)

0 引言

位于貴州的500 米口徑球面射電望遠(yuǎn)鏡(Fivehundred- meter Aperture Spherical Telescope),簡(jiǎn) 稱FAST,是人類發(fā)現(xiàn)脈沖星的“眼睛”。FAST 結(jié)構(gòu)復(fù)雜多樣,其中索網(wǎng)結(jié)構(gòu)信息量十分巨大,如此巨大的FAST 索網(wǎng)模型若使用手工實(shí)施索網(wǎng)建模工作,不僅工作量巨大,且建模精度會(huì)由于人為原因而有所欠缺,且對(duì)后續(xù)模型修改和編輯帶來(lái)極大的不便,同時(shí)在與圈梁等其他部分拼接的時(shí)候也會(huì)帶來(lái)不便。本文在國(guó)產(chǎn)操作系統(tǒng)中標(biāo)麒麟7.0 上基于開(kāi)源的建模軟件Blender-2.79b,使用Blender 的內(nèi)置Python API 進(jìn)行腳本數(shù)據(jù)建模,既可以大大簡(jiǎn)化建模的工作量,同時(shí)提高了建模精準(zhǔn)度,為模型后續(xù)修改也提供了極大的便利。

1 系統(tǒng)環(huán)境與建模工具

1.1 系統(tǒng)環(huán)境

我國(guó)大部分用戶對(duì)操作系統(tǒng)的選擇是Windows 操作系統(tǒng),Windows 操作系統(tǒng)對(duì)隱私信息的保護(hù)存在一定的弊端,為了實(shí)現(xiàn)我國(guó)信息安全自主可控,很有必要

發(fā)展國(guó)產(chǎn)操作系統(tǒng),在國(guó)產(chǎn)操作系統(tǒng)上進(jìn)行國(guó)家重大科研項(xiàng)目和相關(guān)項(xiàng)目的開(kāi)發(fā),能夠?qū)ξ覈?guó)的信息安全有所保障[6]。FAST 索網(wǎng)模型的建立基于國(guó)產(chǎn)操作系統(tǒng)中標(biāo)麒麟7.0 桌面平臺(tái),其操作系統(tǒng)平臺(tái)完全實(shí)現(xiàn)了我國(guó)信息的安全自主可控。中標(biāo)麒麟操作系統(tǒng)使用Linux 內(nèi)核,中標(biāo)麒麟桌面操作系統(tǒng)是一款面向桌面應(yīng)用的圖形化桌面操作系統(tǒng),針對(duì)x86 及龍芯、申威、眾志、飛騰等國(guó)產(chǎn)CPU 平臺(tái)進(jìn)行自主開(kāi)發(fā),率先實(shí)現(xiàn)了對(duì)x86 及國(guó)產(chǎn)CPU 平臺(tái)的支持,提供性能最優(yōu)的操作系統(tǒng)產(chǎn)品。通過(guò)進(jìn)一步對(duì)硬件外設(shè)的適配支持、對(duì)桌面應(yīng)用的移植優(yōu)化和對(duì)應(yīng)用場(chǎng)景解決方案的構(gòu)建,完全滿足項(xiàng)目支撐,應(yīng)用開(kāi)發(fā)和系統(tǒng)定制的需求。

1.2 Blender開(kāi)源三維軟件

3D Max 建模軟件適用于Windows 操作系統(tǒng),而基于中標(biāo)麒麟操作系統(tǒng)的建模,Blender 是一個(gè)很好的選擇。Blender 的開(kāi)源性、免費(fèi)性受到廣大用戶的支持,其功能的強(qiáng)大更是受到商業(yè)、企業(yè)的青睞。Blender 的開(kāi)源性就意味著用戶可以參與開(kāi)發(fā),其版本更新迭代相對(duì)較快,對(duì)于有特殊需求的公司完全可以根據(jù)自己的需求進(jìn)行二次開(kāi)發(fā)。同時(shí)Blender 可以完美地進(jìn)行跨平臺(tái)使用,無(wú)論實(shí)在Windows、Mac 還是基于Linux內(nèi)核的開(kāi)源系統(tǒng),都可以完美的使用。

Blender 的各項(xiàng)功能堪比3D Max,它具有建模、渲染、制作動(dòng)畫(huà)、后期處理、跨平臺(tái)交互制作等功能。Blender 具有API 支持,其中Python API 的使用最為廣泛,也最為成熟??梢酝ㄟ^(guò)Python 代碼的編寫(xiě)來(lái)實(shí)現(xiàn)模型的創(chuàng)建、模型的貼圖、渲染等,還能仿真粒子、碰撞、力等較為抽象的效果??梢哉f(shuō)Blender 完全滿足在索網(wǎng)建模在中標(biāo)麒麟7.0 操作系統(tǒng)上建模需求。

1.3 Python編程語(yǔ)言

當(dāng)需要對(duì)一個(gè)系統(tǒng)進(jìn)行仿真研究時(shí),首先需要對(duì)其進(jìn)行數(shù)學(xué)模型的建立,采用相應(yīng)的算法并編寫(xiě)仿真程序來(lái)把數(shù)學(xué)模型轉(zhuǎn)化為仿真模型。程序是人與計(jì)算機(jī)進(jìn)行交流的媒介,通過(guò)程序的編寫(xiě)來(lái)對(duì)計(jì)算機(jī)軟件中的功能進(jìn)行控制與管理,從而達(dá)到設(shè)定的目標(biāo)。對(duì)索網(wǎng)進(jìn)行模型的創(chuàng)建,就是用編程來(lái)實(shí)現(xiàn)模型的創(chuàng)建、模型位置與大小的確定,管理簡(jiǎn)便,易于修改,采用的編程語(yǔ)言為Python 語(yǔ)言。

首先,Python 是一種面向?qū)ο蟆⒔忉屝缘挠?jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,也是一種功能強(qiáng)大且完善的編程語(yǔ)言。Python 簡(jiǎn)潔而清晰的語(yǔ)法,使其受到廣泛的應(yīng)用,Python 可用簡(jiǎn)短的編程語(yǔ)句來(lái)實(shí)現(xiàn)復(fù)雜的任務(wù),其適用于眾多操作系統(tǒng)[7]。Python 易于實(shí)現(xiàn)模型的創(chuàng)建、動(dòng)畫(huà)的制作、系統(tǒng)的模擬等,能很好地與C/C++等語(yǔ)言互相兼容,它幾乎囊括了所有語(yǔ)言的高級(jí)特性,而且可以被自動(dòng)生成。

最為主要的是,Blender 是一款開(kāi)源軟件,其內(nèi)部提供的API 為Python 編程的運(yùn)行提供了支持,可利用Python 編程語(yǔ)言來(lái)實(shí)現(xiàn)各項(xiàng)功能。此外,Python 內(nèi)部包含著諸多已完成的軟件包、Python 庫(kù),在使用的時(shí)候可以直接調(diào)用,為使用者提供了很大的便利。本文應(yīng)用到了bpy、math、xlrd、xlwt 等包就是平Python 針對(duì)各個(gè)不同的方向所開(kāi)發(fā)的軟件包,它們能夠在Blender 中兼容運(yùn)行。

2 索網(wǎng)結(jié)構(gòu)分析與數(shù)據(jù)提取

2.1 索網(wǎng)結(jié)構(gòu)分析

三維模型作為點(diǎn)和其他信息數(shù)據(jù)的集合,可以由手工進(jìn)行建立:利用一些基本的集合元素(如立方體、球體、圓柱等),通過(guò)一些列集合運(yùn)算(平移、旋轉(zhuǎn)、拉伸以及布爾運(yùn)算)來(lái)構(gòu)建復(fù)雜的幾何場(chǎng)景。然而B(niǎo)lender支持Python 腳本建模,秉承“模型即是數(shù)據(jù),數(shù)據(jù)即是模型”的宗旨,可以分析FAST 索網(wǎng)結(jié)構(gòu)、提取FAST 索網(wǎng)節(jié)點(diǎn)數(shù)據(jù)進(jìn)項(xiàng)腳本三維建模,從而提高效率,加快進(jìn)度,使得建模和數(shù)據(jù)有效地結(jié)合起來(lái)。

2.2 FAST索網(wǎng)結(jié)構(gòu)

索網(wǎng)結(jié)構(gòu)包括主索網(wǎng)結(jié)構(gòu)和下拉索結(jié)構(gòu),主索網(wǎng)結(jié)構(gòu)為三角形網(wǎng)格形狀,除邊界節(jié)點(diǎn)外,每個(gè)主索網(wǎng)節(jié)點(diǎn)連接著6 根主索以及1 根下拉索,其中一共有2225個(gè)主索節(jié)點(diǎn)、6670 根主索和2225 根下拉索。主索網(wǎng)結(jié)構(gòu)固定在周圈環(huán)梁結(jié)構(gòu)上,2225 下拉索的下端與促動(dòng)器相連接[8]。主索滿足五分之一旋轉(zhuǎn)對(duì)稱,下拉索根據(jù)地勢(shì)調(diào)整其拉索長(zhǎng)度[9]。平面圖如圖1 所示,側(cè)面圖如圖2 所示,索網(wǎng)節(jié)點(diǎn)關(guān)系圖如圖3 所示。A 到E 區(qū)的主索節(jié)點(diǎn)采用“各區(qū)域字母+幾點(diǎn)位置標(biāo)號(hào)”的方式編制,如:A001:表示A 區(qū)1 號(hào)節(jié)點(diǎn)。

圖1 索網(wǎng)平面圖

圖2 主索網(wǎng)側(cè)面圖

圖3 索網(wǎng)節(jié)點(diǎn)關(guān)系圖

2.3 FAST索網(wǎng)節(jié)點(diǎn)坐標(biāo)的提取與校準(zhǔn)

FAST 索網(wǎng)主索節(jié)點(diǎn)位置關(guān)于原點(diǎn)五分之一對(duì)稱,下拉索根據(jù)主索和地勢(shì)確定其相應(yīng)的長(zhǎng)度,每個(gè)下拉索由主索和一個(gè)地錨點(diǎn)所確定。所以數(shù)據(jù)有主索節(jié)點(diǎn)信息和下拉索節(jié)點(diǎn)信息。使用OCR 工具將索網(wǎng)節(jié)點(diǎn)的PDF 信息轉(zhuǎn)化成Excel 表格,然后使用Blender 讀取表格中的索網(wǎng)數(shù)據(jù)信息進(jìn)行模型的建立。

FAST 索網(wǎng)節(jié)點(diǎn)信息是由PDF 格式存儲(chǔ)的,由于數(shù)據(jù)信息十分巨大,手工輸入不僅效率低下,還容易出現(xiàn)差錯(cuò)??赏ㄟ^(guò)OCR 軟件提取索網(wǎng)節(jié)點(diǎn)信息。OCR識(shí)別PDF 會(huì)有所誤差,可以通過(guò)編寫(xiě)相對(duì)應(yīng)的Python腳本進(jìn)行數(shù)據(jù)的校準(zhǔn)檢驗(yàn):將OCR 軟件提取出來(lái)的String 類型數(shù)據(jù)在Excel 中使用VALUE()函數(shù)進(jìn)行String 與Float 的轉(zhuǎn)化,再使用Blender 中的Python API將這些點(diǎn)具現(xiàn)化。具體方法就是在這些三維坐標(biāo)點(diǎn)上繪制相應(yīng)大小經(jīng)緯球,以位置編號(hào)對(duì)小球名稱進(jìn)行編號(hào)。若某個(gè)編號(hào)的小球沒(méi)有在相應(yīng)的位置上,則人工進(jìn)行修改,直至所有經(jīng)緯球能按照預(yù)期的主索結(jié)構(gòu)排列,即大致成半球形排列。

3 Python標(biāo)準(zhǔn)庫(kù)安裝與數(shù)據(jù)讀取

Blender 自帶Python 環(huán)境,但是自帶的Python 環(huán)境不能滿足我們的需求,需要對(duì)Blender 自帶的Python進(jìn)行一定的修改。

3.1 xlrd標(biāo)準(zhǔn)庫(kù)的安裝

索網(wǎng)各個(gè)點(diǎn)的坐標(biāo)經(jīng)過(guò)讀取和修正之后將數(shù)據(jù)放到Excel 表格之中,使用xls 實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)與讀取。然而B(niǎo)lender 自帶的Python 是沒(méi)有讀取xls 文件的工具包的,需要自行搭建。中標(biāo)麒麟下使用的是版本Blender 2.79b,首先查看當(dāng)前版本的Blender 使用Python 的版本信息,如圖4 所示,當(dāng)前版本信息是Python 3.5.3。

打開(kāi)Blender 的Python 控制臺(tái),輸入import xlrd 會(huì)顯示錯(cuò)誤,所以需要對(duì)庫(kù)進(jìn)行安裝。本文用到的庫(kù)主要是xlrd,即對(duì)xls 文件讀取的Python 標(biāo)準(zhǔn)庫(kù)。Blender下的Python 標(biāo)準(zhǔn)庫(kù)的安裝不同于普通Python 的安裝,需要將安裝好的xlrd 庫(kù)進(jìn)行移植的Blender 下的Python 下。

首先需要打開(kāi)中標(biāo)麒麟7.0 命令提示符界面,使用“python3——version”來(lái)查看當(dāng)前使用的Python3 的版本號(hào),因?yàn)镻ython3 的向下兼容性,盡量使當(dāng)前Python3的版本低于等于Blender 中Python3 中的版本號(hào)。在命令提示符中使用pip3 install xlrd 命令安裝xlrd 工具包,需要找到xlrd 工具包的安裝路徑,其默認(rèn)安裝位置是“/lib/python3.4/site-package”中,找到xlrd 與xlrd-1.00-dist-info 文件夾,直接移動(dòng)到Blender 下的Python文件夾中對(duì)應(yīng)的site-package 文件夾中。本文中所使用的site-package 文件夾所在的位置是/home/username/blender- 2.79b- linux- glibc219x86_64/python/lib/python3.5/sitepackages。然后重啟Blender,再在Blender 的Python 控制臺(tái)下輸入import xlrd 即可,沒(méi)有返回信息即表示移植成功能夠使用。

圖4 查看Python版本和導(dǎo)入xlrd包

完成以上配置后,接下來(lái)將整理好的數(shù)據(jù)存取到xls 文件中,并調(diào)好相應(yīng)的格式,以便將來(lái)數(shù)據(jù)的修改與讀取。

3.2 使用xlrd讀取索網(wǎng)表格信息

xlrd 是Python3 的一個(gè)工具包,用來(lái)讀取表格信息,我們所用到的索網(wǎng)主節(jié)點(diǎn)信息以表格形式存儲(chǔ)在表格中,所以需要使用Python 工具包來(lái)讀取出來(lái)。

url="../data/R131.xls"

#讀取xls 表的數(shù)據(jù)

#讀取A 區(qū)的數(shù)據(jù)

xl=xlrd.open_workbook(url)

#定義表格對(duì)象名稱

sheet1=xl.sheet_by_name("Sheet1")

Acol1=sheet1.col_values(1)

#獲取去表格對(duì)象的第一列

Acol2=sheet1.col_values(2)

#獲取去表格對(duì)象的第二列

Acol3=sheet1.col_values(3)

#獲取去表格對(duì)象的第三列

由于各個(gè)列的數(shù)據(jù)個(gè)數(shù)可能不盡相同,而xlrd 包讀取表格整列的時(shí)候是按照整個(gè)表格數(shù)據(jù)的最長(zhǎng)列數(shù)讀取的,若其他的列沒(méi)有達(dá)到最大列數(shù),多余的空值會(huì)填空值,所以需要對(duì)讀取到的數(shù)據(jù)進(jìn)行去空操作。

Acol1=[i for i in Acol1 if i !='']

#對(duì)list 類型的Acol1 去空操作。

4 邏輯信息建立索網(wǎng)節(jié)點(diǎn)關(guān)系

4.1 建立主索網(wǎng)節(jié)點(diǎn)關(guān)系

由兩個(gè)節(jié)點(diǎn)位置可以確定索網(wǎng)之間的鋼索,所以是否確定索網(wǎng)節(jié)點(diǎn)之間的關(guān)系尤為重要,索網(wǎng)節(jié)點(diǎn)關(guān)系如圖5 所示。在確定好節(jié)點(diǎn)關(guān)系后,可以使用Blender 中Python 中vector_module_angleLR 函數(shù)確定鋼索位置、旋轉(zhuǎn)角度、長(zhǎng)度等信息。再使用getCS_Square 函數(shù)確定鋼索的公稱截面面積,至此為止鋼索的所有信息都已確定完畢,可以使用Blender 中Python 腳本bpy.ops.mesh.primitive_cylinder_add()來(lái)創(chuàng)建鋼索。

難點(diǎn)在與鋼索節(jié)點(diǎn)關(guān)系之間的對(duì)應(yīng)關(guān)系,如圖5所示,1→2,3;2→4,5;4→7,8,等等。本文采用的是Python 的動(dòng)態(tài)變量命名方法來(lái)創(chuàng)建多個(gè)list 類型的數(shù)組來(lái)存儲(chǔ)節(jié)點(diǎn)關(guān)系。由alist 表示1,3,6,10,15,21……這條初始序列(由1 從左下到右上的序列),list1表示由1 為list1[0]的1,2,4,7,11……這條序列,list2表示由3 為list1[0]的……這條序列,依次下去進(jìn)行節(jié)點(diǎn)的表示。節(jié)點(diǎn)連接關(guān)系就是list[i]與list[i+1]和list[i+1]+1 兩個(gè)節(jié)點(diǎn)有連接關(guān)系。以上是呈V 字型聯(lián)系的索網(wǎng)。橫向相連的索網(wǎng)建立一個(gè)新list 列表。關(guān)系為list[i]與list[i+1]有關(guān)系,當(dāng)?shù)竭_(dá)最右端是即節(jié)點(diǎn)編號(hào)等于alist[j],跳過(guò)這層最終節(jié)點(diǎn)的建立即可。

圖5 索網(wǎng)節(jié)點(diǎn)對(duì)應(yīng)關(guān)系圖

以下為動(dòng)態(tài)為變量命名建立節(jié)點(diǎn):

names=locals()

#動(dòng)態(tài)為變量命名

for i in range(1,nd):

#為list 動(dòng)態(tài)命名變量

names['list'+str(i)]=[]

for i in range(1,nd):

#為首元素賦值

names.get("list"+str(i)).append(alist[i-1])

for i in range(1,nd):

for j in range(1,listlen-i):

#為由右下到左上的鋼索節(jié)點(diǎn)names.get("list"+str(i)).append(names.get("list"+str(i))[j-1]+i+j-1)

4.2 索網(wǎng)規(guī)格獲取公稱截面面積

在FAST 索網(wǎng)結(jié)構(gòu)中,每個(gè)鋼索類型的具體粗細(xì)是不確定的,由規(guī)格名稱來(lái)確定公稱截面面積(cm2),代碼如下:

def getCS_Square

(cType,listType,listCS_Square):

for i in range(0,len(listType)):

if cType==listType[i]:

Square=listCS_Square[i]

Rudius=math.sqrt(((Square*100)/math.pi))

return Rudius

參數(shù)cType:string 類型,用來(lái)傳入需要判斷的拉索規(guī)格。

參數(shù)listType:list 類型拉索規(guī)格名稱。

參數(shù)listCS_Square:list 類型,根據(jù)listType 來(lái)對(duì)應(yīng)判斷拉索的公稱截面面積。

在Blender 中寫(xiě)較長(zhǎng)代碼時(shí)可以使用Blender 的文本編輯器進(jìn)行編寫(xiě),由于Blender 下的Python 調(diào)試器無(wú)法顯示具體的錯(cuò)誤,所以調(diào)試的時(shí)候需要使用中標(biāo)麒麟下的Python3 進(jìn)行調(diào)試,從而修改Blender 中的Python 代碼。

5 Blender三維建模

5.1 Blender下Python控制臺(tái)建模

使用Blender 下的Python API 進(jìn)行建模。主要用的有bpy、math、os、xlrd 工具包進(jìn)行主要建模和輔助建模。

Python 腳本建模:即可以在Blender 中使用Python腳本進(jìn)行腳本的建立和控制,在Blender 中的Python控制臺(tái)中輸入bpy.ops.mesh.primitive_cube_add(),可在Blender 中的3D 視圖中間看到一個(gè)立方體。在bpy.ops.mesh.primitive_cube_add()函數(shù)中有許多函數(shù)參數(shù)location 可以控制立方體的三維坐標(biāo)位置,參數(shù)rotation可以控制立方體的旋轉(zhuǎn)角度,參數(shù)radius 可以控制立方體的大小,其他參數(shù)可以進(jìn)行具體查看。此為簡(jiǎn)單的創(chuàng)建一個(gè)立方體。可右鍵點(diǎn)擊Blender 左上角中創(chuàng)建中的立方體→在線Python 參考來(lái)進(jìn)行具體的查看,創(chuàng)建其他物體也可進(jìn)行相似的操作。

5.2 FAST主索三維建模

索網(wǎng)的節(jié)點(diǎn)信息在Blender 中是三維空間的坐標(biāo)點(diǎn),已知兩個(gè)三維空間坐標(biāo)點(diǎn)的信息來(lái)建立索網(wǎng)的鋼索,使得柱體的兩端在正好坐落在兩個(gè)坐標(biāo)點(diǎn)上。需要計(jì)算的就是兩點(diǎn)間的距離,以及柱體關(guān)于坐標(biāo)軸的旋轉(zhuǎn)角度。具體代碼如下所示:

def vector_module_angleLR(vec1,vec2):

dx=(vec1[0]-vec2[0])

dy=(vec1[1]-vec2[1])

dz=(vec1[2]-vec2[2])

px=(vec1[0]+vec2[0])/2

py=(vec1[1]+vec2[1])/2

pz=(vec1[2]+vec2[2])/2

module=math.sqrt(dx*dx+dy*dy+dz*dz)

rx = 90/(180/ math.pi)+ math.atan(dz/ math.sqrt(dx *dx+dy*dy))

ry=0

if(dy!=0):

rz=math.atan(dx/dy)

else:

rz=math.pi/2

return module,px,py,pz,rx,ry,rz

vector_module_angleLR:函數(shù)名稱;vec1:三維空間坐標(biāo)點(diǎn)1,vec2:三維空間坐標(biāo)點(diǎn)2,根據(jù)兩個(gè)三維空間坐標(biāo)點(diǎn)來(lái)計(jì)算兩點(diǎn)間的距離并作為module 返回,rx,ry,rz 作為柱體的旋轉(zhuǎn)角度成為返回值。px,py,pz 是兩點(diǎn)間的中點(diǎn)坐標(biāo),即是柱體的中心位置坐標(biāo),根據(jù)這些信息可以建立一個(gè)位于兩個(gè)三維坐標(biāo)點(diǎn)的柱體。

調(diào)用函數(shù)后根據(jù)函數(shù)的返回信息進(jìn)行索網(wǎng)鋼結(jié)構(gòu)的建立:

(module,px,py,pz,rx,ry,rz)= vector_module_angleLR(vec1,vec2)

bpy.ops.mesh.primitive_cylinder_add (vertices=Cylinder-Vertices,radius=clRadius,depth=module,location=(px,py,pz),rotation=(-rx,ry,-rz))

objName=AreaName+"SWLR-"+str(index1)+"->"+str(index2)

bpy.context.object.name=objName

建立長(zhǎng)度為module、位置在(px,py,pz)、旋轉(zhuǎn)角度為(-rx,ry,-rz)的圓柱,并同時(shí)根據(jù)需要給創(chuàng)建的柱體進(jìn)行重命名,以objName 命名。

5.3 下拉索三維建模

下拉索上端與主索節(jié)點(diǎn)相互連接,下端與地面促動(dòng)器相連以控制整個(gè)索網(wǎng)的形變。下拉索節(jié)點(diǎn)以vector 三維向量形式存儲(chǔ)在xls 表格內(nèi),一個(gè)主索節(jié)點(diǎn)只與一個(gè)下拉索節(jié)點(diǎn)相對(duì)應(yīng)。只需使用Python 的xlrd 工具包讀取數(shù)據(jù)后與主索網(wǎng)節(jié)點(diǎn)的位置能夠相互對(duì)應(yīng)即可。A_MainCablePointX、A_MainCablePointY、A_Main-CablePointZ、分別表示主索網(wǎng)的(x,y,z)三維坐標(biāo)位置,各自以Python 的list 列表形式存儲(chǔ)。A_BoomVang-PointX、A_BoomVangPointY、A_BoomVangPointZ 也以同樣的方式存儲(chǔ)下拉索節(jié)點(diǎn)的三維坐標(biāo)位置。核心代碼如下:

vec1=[A_MainCablePointX[i], A_MainCablePointY[i],A_MainCablePointZ[i]]

vec3 = [A_BoomVangPointX[i],A_BoomVangPointY[i],A_BoomVangPointZ[i]]

(module,px,py,pz,rx,ry,rz)= vector_module_angleLR(vec1,vec3)

bpy.ops.mesh.primitive_cylinder_add (vertices=Cylinder-Vertices,radius=CylinderRadius,depth=module,location=(px,py,pz),rotation=(-rx,ry,-rz))

objName=AreaName+"SWBV-"+str(i)+str(j)

bpy.context.object.name=objName

建立長(zhǎng)度為module、位置在(px,py,pz)、旋轉(zhuǎn)角度為(-rx,ry,-rz)的柱體,并同時(shí)根據(jù)需要給創(chuàng)建的物體進(jìn)行重命名,名字為objName。

無(wú)論是主索鋼結(jié)構(gòu)模型的命名,還是下拉索鋼結(jié)構(gòu)模型的命名,都十分重要,一定要命名規(guī)范,而且能夠使人容易明白。

6 結(jié)語(yǔ)

微軟出于對(duì)自身專利的保護(hù)拒絕向我國(guó)公布源碼進(jìn)行審核,而不審核源碼就不能夠知道微軟是否留有后門等操作,特別是“棱鏡”事件之后,我國(guó)需要大力發(fā)展國(guó)產(chǎn)操作系統(tǒng),從而保障我國(guó)信息安全。通過(guò)在國(guó)產(chǎn)操作系統(tǒng)上進(jìn)行環(huán)境搭建,可有效的保證我國(guó)信息安全自主可控。

FAST 索網(wǎng)結(jié)構(gòu)復(fù)雜,手工建模已經(jīng)不能滿足需求。通過(guò)這次使用Python-API 進(jìn)行構(gòu)建FAST 模型,極大提高了建模的效率與精準(zhǔn)度,實(shí)現(xiàn)數(shù)據(jù)到模型的轉(zhuǎn)化,為后來(lái)模型的修改與改進(jìn)也做好的鋪墊,大大加快了FAST 整體模型構(gòu)建的進(jìn)度,同時(shí)有利于索網(wǎng)與其他模型的整合。

綜合以上因素,在國(guó)產(chǎn)建模平臺(tái)下進(jìn)行FAST 索網(wǎng)腳本構(gòu)建,是一項(xiàng)不錯(cuò)的選擇。

猜你喜歡
鋼索拉索表格
斜拉索磁致負(fù)剛度阻尼器與黏滯阻尼器減振對(duì)比研究
中小跨徑斜拉橋拉索監(jiān)測(cè)方案研究
駐車?yán)鞴潭ㄖЪ軘嗔训墓收细倪M(jìn)研究
《現(xiàn)代臨床醫(yī)學(xué)》來(lái)稿表格要求
組成語(yǔ)
命運(yùn)在你自己的手中
走鋼索
履歷表格這樣填
表格圖的妙用
“拉索”——麗江的聲音
天长市| 娄烦县| 诏安县| 敦化市| 柏乡县| 平乐县| 新巴尔虎右旗| 霍山县| 伊宁县| 济南市| 河北区| 锡林郭勒盟| 萨迦县| 博野县| 靖江市| 淮安市| 徐州市| 白山市| 葫芦岛市| 抚顺县| 五莲县| 开原市| 石泉县| 屏东市| 普定县| 东阿县| 桂林市| 济南市| 蓝田县| 建湖县| 蒙自县| 盐城市| 济源市| 德格县| 新郑市| 古蔺县| 蚌埠市| 长泰县| 乌海市| 崇信县| 桃园县|