一、獲取當(dāng)前選擇
#獲取到的是一個(gè)數(shù)組
ce.selection()
二京郑、修改選中的Name
ce.setName(ce.selection(), 'ShapeNameX')
三宙搬、刪除objects
ce.delete(ce.getObjectsFrom(ce.scene)) #刪除全部
ce.delete(ce.selection()) #刪除選中
選擇某name的obj
# 選擇場(chǎng)景中全部
ce.getObjectsFrom(ce.scene)
# 選擇帶某name
ce.getObjectsFrom(ce.scene,ce.withName("ShapefileSegment"))
注意:導(dǎo)入shp后生成的網(wǎng)絡(luò)名在客戶端顯示是駝峰法空格分開。但這里選擇時(shí)需去掉空格目尖。
四馒吴、導(dǎo)入shp
shpPath = "data/linan/linan.shp" #我的shp所在地址,放在項(xiàng)目data文件夾下瑟曲,linan文件夾里包含shp饮戳、dbf、prj等文件
settings = SHPImportSettings()
ce.importFile(ce.toFSPath(shpPath), settings)
五洞拨、設(shè)置cga文件及初始規(guī)則并生成模型
cgaPath = "rules/Streets/Street_Modern_Standard.cga" #我的cga文件地址
ce.setRuleFile(ce.selection(), cgaPath)
ce.setStartRule(ce.selection()[0], 'Street') # 自己導(dǎo)入的shp線會(huì)自動(dòng)生成街道并綁定街道初始規(guī)則扯罐,無需設(shè)置
# ce.selection()返回的是list,其中有節(jié)點(diǎn)烦衣、主街道歹河、人行道,沿用不同規(guī)則
ce.generateModels(ce.selection()) #生成模型
六花吟、獲取規(guī)則名
ce.getStartRule(ce.selection()[0])
七秸歧、獲取屬性
#獲取屬性列表
ce.getAttributeList(ce.selection()[0])
#返回值 ['/ce/name', '/ce/rule/randomSeed', '/ce/rule/ruleFile', '/ce/rule/startRule', 'shapeType', 'sidewalkSide']
#獲取屬性值
ce.getAttribute(ce.selection()[0],'sidewalkSide') #第二個(gè)參數(shù)需要是在getAttributeList返回的列表中,如使用sidewalkSide則返回Left 或Right
八衅澈、設(shè)置屬性
ce.setAttribute(ce.selection()[0],'屬性名','屬性值')
九键菱、創(chuàng)建segments
上面第四點(diǎn)通過導(dǎo)入shp線段(其實(shí)是線段,轉(zhuǎn)為geojson是LineString)生成了街道今布。但在ce中使用python也可以直接通過坐標(biāo)生成街道经备。主要分兩步
- 1、創(chuàng)建layer
graphlayer = ce.addGraphLayer('streets') - 2部默、創(chuàng)建段(segments)
vertices = [0,0,0,1,0,0]
graph = ce.createGraphSegments(graphlayer, vertices)
其中vertices 是線段坐標(biāo)弄喘,三個(gè)一組代表一個(gè)點(diǎn),可多個(gè)甩牺。一組中第二個(gè)是高度
十、設(shè)置街道寬度
在使用cityengine gui界面時(shí)繪制的街道累奈,可以獲取/修改屬性來獲取它的街道寬度/設(shè)置街道寬度贬派。
如下:
segment = ce.getObjectsFrom(ce.selection, ce.isGraphSegment)[0]
ce.getAttribute(segment,'/ce/street/streetWidth')
ce.setAttribute(segment,'/ce/street/streetWidth',newWidth)
這是因?yàn)樵讷@取屬性列表getAttributeList時(shí)可以得到'/ce/street/streetWidth'
但是對(duì)于我導(dǎo)入的shp急但,不知道為什么沒有這個(gè)屬性,也無法設(shè)置搞乏。但我發(fā)現(xiàn)可以使用下面的方法設(shè)置波桩。以下為方法原文:
上面第四和第九分別通過導(dǎo)入shp和手動(dòng)創(chuàng)建segments來創(chuàng)建街道。所創(chuàng)建的街道有一個(gè)默認(rèn)的寬请敦「涠悖可以使用下面的方法對(duì)寬度等進(jìn)行修改。如何要設(shè)置固定x寬度侍筛,可setMinStreetWidth setMaxStreetWidth均設(shè)置為x來實(shí)現(xiàn)萤皂。
settings = FitStreetWidthSettings()
settings.setAdjustStreetOffsets(False)
settings.setMinStreetWidth(10.0)
settings.setMaxStreetWidth(10.0)
settings.setAdditionalMargin(1)
settings.setSidewalkScale("DONT")
ce.fitStreetWidths(segments, settings)
注
以下線段寬指主車道總寬(包含上下行,不包含人行道)匣椰。
1.setAdjustStreetOffsets 可設(shè)置為True False裆熙。為街道偏移量是否應(yīng)該改變。如果是False禽笑,segment兩側(cè)始終一樣寬入录,即如果設(shè)置寬度則往segment兩側(cè)擴(kuò)展。如果是True佳镜,則往一側(cè)擴(kuò)展僚稿,segment兩側(cè)不一樣多。
2.setMinStreetWidth & setMaxStreetWidth蟀伸。沒怎么搞懂這兩個(gè)蚀同。但我發(fā)現(xiàn)了一些規(guī)律。
- 默認(rèn)線段寬度(主街道上下行之和)是8望蜡,左右人行道默認(rèn)是2唤崭。
- 如果setAdjustStreetOffsets 為False,即不偏移脖律。那么谢肾,setMinStreetWidth值為道路一個(gè)方向的總寬(道路總寬度的一半)。如設(shè)置成7小泉,則線段寬度(主街道上下行之和)再加上上下行人行道寬(即道路總寬)為14芦疏。
3.setSidewalkScale 有DONT 和SCALE兩個(gè)值,控制人行道是否能縮放微姊。 - 人行道默認(rèn)寬是2酸茴。
- 如果設(shè)置DONE,則始終是2兢交。
- 如果設(shè)置為SCALE薪捍,則根據(jù)設(shè)置的setMinStreetWidth進(jìn)行變動(dòng)。一個(gè)方向人行道寬與一個(gè)方向道路寬度比為1:2。即為道路總寬度的1/6酪穿。也就是setMinStreetWidth的1/3凳干,是主街道總寬(上下行)的1/4。
4.setAdditionalMargin 設(shè)置附加邊距字段被济。街道與其他街道或靜態(tài)幾何圖形之間的額外填充救赐。
這個(gè)可傳入數(shù)值,也比較奇怪只磷。
- 如果上面人行道設(shè)置為SCALE经磅。那么一個(gè)方向人行道寬與一個(gè)方向道路寬度比為1:2。如果setAdditionalMargin 設(shè)置為n钮追,那么人行道寬度-n/3预厌,主車道寬-2n/3。也就是說按人行道主車道1比2的比例縮小該值畏陕。
- 如果人行道不設(shè)置縮放配乓。setAdditionalMargin 設(shè)置為n時(shí),那么主車道寬-n(主車道均指單方向?qū)挘?/li>
- 上面說的setMinStreetWidth 無法設(shè)置小于6惠毁,設(shè)置小于6時(shí)犹芹,顯示的線段寬還是8(理論上線段寬應(yīng)該變?yōu)?setMinStreetWidth - 2人行道寬)。但我們可以通過設(shè)置setAdditionalMargin 來減少線段寬度