? ? ? ? 基于上述概括出建筑單體的特征部件,本文利用互聯網、三維建模和地理信息等技術設計了基于瀏覽器/服務器(B/S)的傳統聚落建筑科普數字化平臺。該平臺不僅實現了對傳統聚落建筑風貌從基礎到復雜的數字化再現,允許用戶輕松在線構建從簡約到精細的三維建筑模型,更通過其直觀的操作界面和豐富的交互功能,極大地提升了用戶體驗。用戶可以在此平臺上瀏覽各類傳統聚落建筑的三維模型,無論是欣賞其獨特的建筑風格,還是深入了解其構造細節,都能獲得身臨其境般的感受。同時,平臺還支持用戶與模型進行互動操作,如旋轉、光照渲染、建筑部件炸開等,進一步增強了學習的趣味性和互動性,為傳統聚落建筑文化的傳播與普及開辟了一條數字化路徑。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(a)平臺首頁 ??????????????????????(b)模型故事頁面
(c)模型瀏覽交互頁面
圖6 傳統聚落建筑科普數字化建模平臺部分頁面
?
2.2.2模型構建、瀏覽與交互
傳統聚落建筑科普數字化平臺支持簡約(初級)和精細(高級)模型的在線構建。初級模型的在線構建平臺是基于上述建筑單體特征,用戶僅需要選擇屋頂、屋身(包括屋臉、墻面、門、窗、外柱和內柱等部件)和臺基(包括地基、護欄和臺階等部件)各個特征部件的樣式,平臺將自動生成指定樣式的傳統聚落建筑三維模型。生成過后的模型平臺還支持用戶與模型進行互動操作,如建筑部件拆分、旋轉和光照渲染等。
??
? ? ? ? ? ? ? (a)屋頂部件樣式選擇頁面? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (b)屋身部件樣式選擇頁面
(c)臺基部件樣式選擇頁面
圖7 傳統聚落建筑模型的構建
??
? ? ? ? ? ? ? ? ? ? ? ? (a)自動生成的傳統建筑模型 ???????????(b)部件拆分后傳統模型
圖7 ?傳統聚落建筑模型的模型瀏覽與交互
實現核心技術:
Node.js
Node.js學習(一)-CSDN博客
Node.js學習路線-CSDN博客
Node.js的語法主要基于JavaScript,但它在服務器端環境中運行,提供了許多額外的模塊和功能,如文件系統操作、網絡請求處理等。以下是對Node.js語法的詳細概述:
1. 變量與數據類型
- 變量定義:Node.js支持三種變量定義方式:
const
、var
、let
。const
:用于定義常量,定義時必須初始化,之后值不可改變。var
:定義的變量可以修改,如果不初始化會輸出undefined
,且存在變量提升現象。let
:塊級作用域變量,定義后只能在塊級作用域內訪問,且不存在變量提升。
- 數據類型:Node.js支持JavaScript的所有基本數據類型,包括
Number
、String
、Boolean
、Null
、Undefined
,以及ES6新增的Symbol
和BigInt
。此外,Node.js還提供了對象(Object)和特殊對象如Array
、Date
等。
2. 控制流語句
Node.js支持JavaScript的所有控制流語句,包括條件語句(if...else
、switch
)、循環語句(for
、while
、do...while
)、try...catch
異常處理等。
3. 函數
- 匿名函數:可以定義沒有名稱的函數。
- 箭頭函數:ES6引入的簡潔函數寫法,不綁定自己的
this
,arguments
,super
,或new.target
。 - 高階函數:可以接受函數作為參數或返回函數的函數。
4. 模塊系統
Node.js使用CommonJS模塊規范,通過require()
函數來引入模塊,通過module.exports
或exports
對象來導出模塊。
5. 核心模塊
Node.js提供了許多核心模塊,這些模塊提供了豐富的功能,如文件操作、網絡請求、路徑處理等。
- fs模塊:用于文件系統的操作,如讀取文件、寫入文件、創建目錄等。
- path模塊:用于處理文件和目錄的路徑。
- http/https模塊:用于創建HTTP/HTTPS服務器和客戶端。
- url模塊:用于解析URL和將URL對象轉換回字符串。
- querystring模塊:用于解析和字符串化查詢字符串。
6. 異步編程
Node.js是異步的,支持多種異步編程模型,如回調函數、Promise、async/await等。
- 回調函數:傳統的異步編程方式,通過函數作為參數傳遞給另一個函數,并在操作完成時調用。
- Promise:ES6引入的異步編程解決方案,提供了一種更優雅的方式來處理異步操作。
- async/await:基于Promise的語法糖,使得異步代碼看起來像同步代碼一樣。
7. 事件循環與回調函數
Node.js使用事件循環和回調函數來處理非阻塞I/O操作。當Node.js執行輸入/輸出操作時(如讀取文件、網絡請求等),它不會等待操作完成,而是將回調函數放入事件隊列,并在適當的時候調用它們。
8. 第三方模塊
Node.js有一個龐大的生態系統,包含成千上萬的第三方模塊,這些模塊可以通過npm(Node Package Manager)進行安裝和管理。使用第三方模塊可以極大地提高開發效率,減少重復造輪子。
9. 嚴格模式
Node.js支持JavaScript的嚴格模式,通過在腳本或函數頂部添加"use strict";
語句來啟用。嚴格模式有助于捕獲一些常見的編碼錯誤,并強制更嚴格的語義。
10. ES6+新特性
Node.js自6.0版本開始全面支持ES6,并隨著版本的更新不斷支持更多的ES6+新特性,如模板字符串、解構賦值、類、模塊等。
綜上所述,Node.js的語法以JavaScript為基礎,但擴展了服務器端特有的功能,并引入了模塊系統、異步編程等概念。隨著JavaScript和Node.js的不斷發展,新的語法特性和最佳實踐不斷涌現,開發者需要不斷學習和掌握這些新內容以提高開發效率和代碼質量。
Bootstrap
Bootstrap是一個基于HTML、CSS和JavaScript的開源前端框架,由Twitter的設計師Mark Otto和Jacob Thornton合作開發。它以其簡潔、靈活和響應式的特點,成為了最受歡迎的Web開發框架之一。以下是對Bootstrap的詳細解析:
一、Bootstrap的基本特點
-
移動設備優先:從Bootstrap 3開始,框架就融入了移動設備優先的理念,這意味著所有的樣式和組件都是為移動設備首先設計的,然后擴展到平板和桌面設備。這種設計方式使得Bootstrap能夠輕松應對各種屏幕尺寸和分辨率。
-
響應式設計:Bootstrap的響應式CSS能夠自適應于臺式機、平板電腦和手機,為開發人員創建接口提供了一個簡潔統一的解決方案。它包含了功能強大的內置組件,這些組件可以根據設備的屏幕尺寸和分辨率自動調整布局和樣式。
-
易于上手:只要具備HTML和CSS的基礎知識,就可以開始學習Bootstrap。它提供了一套預定義的樣式和組件,開發人員只需要編寫HTML結構,并添加Bootstrap的固定class樣式,就可以輕松實現各種效果。
-
跨瀏覽器兼容性:Bootstrap支持所有主流瀏覽器,包括IE7及以上版本、Chrome、Firefox、Safari等。
二、Bootstrap的核心組件
-
柵格系統:Bootstrap提供了一套響應式的柵格系統,該系統將頁面布局劃分為最多12列,并允許通過不同的類名來控制元素的列寬和偏移。這使得開發人員可以輕松地創建復雜的頁面布局,并確保這些布局在不同設備上都能保持良好的顯示效果。
-
內置組件:Bootstrap提供了豐富的內置組件,包括按鈕、導航條、輪播圖、表單控件等。這些組件都經過精心設計,并提供了多種樣式和變體,以滿足不同的開發需求。
-
JavaScript插件:Bootstrap還包含了一系列的JavaScript插件,這些插件提供了豐富的交互功能,如模態框、下拉菜單、折疊面板等。這些插件都基于jQuery編寫,并具有良好的擴展性和可定制性。
三、Bootstrap的使用方式
-
下載與引入:首先,需要從Bootstrap的官方網站或CDN服務上下載Bootstrap的壓縮包或鏈接。然后,在HTML文件中通過
<link>
標簽引入Bootstrap的CSS文件,以及通過<script>
標簽引入Bootstrap的JavaScript文件和jQuery庫(因為Bootstrap的JavaScript插件依賴于jQuery)。 -
編寫HTML結構:在HTML文件中,按照Bootstrap的規范編寫頁面結構。這包括使用Bootstrap的柵格系統來布局頁面元素,以及使用Bootstrap的內置組件和類名來添加樣式和交互功能。
-
自定義樣式:雖然Bootstrap提供了一套預定義的樣式和組件,但開發人員仍然可以通過自定義CSS來覆蓋或擴展這些樣式。此外,Bootstrap還提供了基于LESS或Sass的定制工具,允許開發人員更靈活地定制框架的樣式和組件。
四、Bootstrap的最新版本
Bootstrap目前已經發展到了多個版本,每個版本都引入了新的特性和改進。最新版本的Bootstrap(截至當前時間,即2024年7月)在保持原有優點的基礎上,進一步優化了性能、增加了新的組件和樣式,并提高了與現代Web技術的兼容性。
總之,Bootstrap是一個功能強大、易于上手且廣泛應用的前端框架。它以其簡潔的語法、豐富的組件和靈活的響應式設計能力,為Web開發人員提供了極大的便利和高效的開發體驗。
三維建模(CityEngine Python庫)
CityEngine的Python接口提供了豐富的庫與方法,使得用戶能夠通過編寫Python腳本來自動化和控制CityEngine中的許多任務。以下是一些常見的CityEngine Python庫與方法概述:
一、常見的庫
雖然CityEngine本身并不直接提供傳統意義上的“庫”(如Python中的庫文件),但它通過其Python API暴露了一系列函數和對象,這些可以視為在CityEngine環境中使用的“庫”。這些函數和對象允許用戶執行各種操作,如選擇對象、修改屬性、創建幾何體等。
二、常見的方法
-
選擇與獲取對象
ce.getObjectsFrom(ce.scene)
: 獲取場景中的所有對象。ce.getObjectsFrom(ce.scene, ce.withName("name"))
: 根據名稱獲取場景中的對象。ce.setSelection(...)
: 設置當前選中的對象。
-
修改對象屬性
ce.setAttribute(object, attributeName, value)
: 設置對象的屬性值。ce.getAttribute(object, attributeName)
: 獲取對象的屬性值。
-
創建與修改幾何體
ce.addGraphLayer(...)
: 添加圖層。ce.createGraphSegments(...)
: 在圖層中創建線段。ce.fitStreetWidths(...)
: 調整街道寬度。
-
導入與導出
ce.importFile(...)
: 導入文件,如Shapefile。- 導出功能通常通過CityEngine的GUI或CGA規則來實現,但Python API也支持通過修改對象屬性來間接影響導出結果。
-
場景操作
ce.delete(...)
: 刪除對象。ce.setName(...)
: 修改對象的名稱。
-
CGA規則
ce.setRuleFile(objects, cgaPath)
: 為對象設置CGA規則文件。ce.setStartRule(object, ruleName)
: 設置對象的起始規則。ce.generateModels(objects)
: 根據CGA規則生成模型。
-
其他工具函數
ce.toFSPath(...)
: 將CityEngine內部的路徑轉換為文件系統路徑。ce.print(...)
: 在CityEngine的控制臺中打印信息。
# 假設我們要選擇所有名稱中包含"Broadway"的場景元素
ce.setSelection(ce.getObjectsFrom(ce.scene, ce.withName("*Broadway*"))) # 遍歷選中的元素,并修改它們的某個屬性
for obj in ce.selection(): # 假設我們要修改的屬性名為"/ce/street/streetWidth" currentWidth = ce.getAttribute(obj, "/ce/street/streetWidth") newWidth = currentWidth + 5 # 假設我們想要將寬度增加5 ce.setAttribute(obj, "/ce/street/streetWidth", newWidth)
?
?