MAXScript學習筆記(1)

一、入門教程

b站上找的教程,

有英文版的,也能看懂,費腦子,找中文的,

1.MaxScript腳本教程-人人都學得會的教程(https://www.bilibili.com/video/BV1AE411q7d7?p=1

講基本語法的

最新的一集(11MeshSurface)看的頭暈,跟着抄下來,各種錯誤,他期間沒有調試過,修改一兩次就能運行了,我的一堆的錯誤,最後把源代碼拷貝過來看了下。

這個教程是按照他推薦的書本的順序講的,還沒講到UI,除了11集的例子。

現在是20年4月22日,他最新的11集的錄製時間是3月20日,後續還沒有。

原本爲什麼先看這個視頻,7小時多,我就喜歡看多的。但,內容還是不夠。面向初學者,特別是沒有編程基礎的,就不能講的太快,太輔助。

他的父類子類的概念我是不認同的,作爲一個程序員,父類是基礎,子類是擴展。而不是他說的,父類是全部,子類是部分繼承。

2.【教程】Maxscript系列教程(https://www.bilibili.com/video/BV1o4411D7xf

講UI的

裏面的第一課的vscode環境安裝挺好的

簡單講了點UI,和上面的能互相補充一些。

------------------

這兩個日期都錄製挺新的,但他們用的max版本倒是挺舊的,還是2014。

我是用的2019,公司建模人員用的2016。

怎麼說呢,作爲開發人員,工具還是要不斷與時俱進的。

還有好多教程,時間有限,先開始幹活吧,目標做一個處理Revit導入的模型,並導出給Unity的腳本。

需要1.建築根據樓層設置分組 2.基本單元模型 3.保存模型座標信息併到unity中重建場景

 

二、字符串操作

1.數字以及其他轉換成字符串並一起打印 

a=1

b="a:"+(a as string)

2.print後面有語句加上括號

print "ModelTypeList.add:"+obj.name --結果打印"ModelTypeList.add:"
print ("ModelTypeList.add:"+obj.name)--結果打印"ModelTypeList.add:Basic Wall 常規 - 370 [355687]"

代碼運行的,Listener裏面好像不會,奇怪

3.分解字符串爲數組 filterstring

4.根據內容替換字符串 substitutestring,不是replace,replace是替換具體的位置上的字符串,這種的不是我需要的。

5.刪除字符串中的空格,沒有找到trim()這樣的操作,

找到一個代碼:

fn RemoveAllWhiteSpace inputString = (
	local outputString = StringStream ""
	for x in filterString inputString " \t\r\n" do format "%" x to:outputString
	outputString as string
)

參考:http://www.scriptspot.com/forums/3ds-max/general-scripting/how-to-rename-without-white-spaces-in-3dmax-objects

簡單的話 用

a="a 1 2 3 "
b=substitutestring a " " ""

也是可以的

三、高級類型操作

1.結構體可以當類來用,裏面可以放屬性也可以放方法(函數), on create do (...) 相當於構造函數吧

四、UI創建

簡單的界面用自帶的就行,複雜的界面需要用.net的,官方文檔中也有提到ActiveX控件已經過時了,測試也沒弄出來。

1.ListView

fn initListView lv =
	(
	lv.gridlines = true
	lv.view = (dotNetclass "System.Windows.forms.View").Details
	lv.fullRowSelect = true
	lv.Columns.Clear()

	layout_def = #("Name", "Count", "Class")
	
	for i = 1 to layout_def.count do
		(
		case i of 
			(
			1: lv.Columns.add layout_def[1] 124
			2: lv.Columns.add layout_def[2] 46
			3: lv.Columns.add layout_def[3] 98
			)
		)
	)

fn fillListView lv items=
	(
	lv.Items.Clear()
	theRange = #()
	for i in items do
		(
		li = dotNetObject "System.Windows.Forms.ListViewItem"  (i as string)
		sub_li = li.SubItems.add (BaseObjCount i as string)
		sub_li = li.SubItems.add (classof i as string)
		append theRange li
		)
	lv.Items.AddRange theRange 
	)

rollout subBaseInfo "基本信息"
(
	button btnRefreshInfo "刷新"
	dotNetControl lv_objects "System.Windows.Forms.ListView" width:300 height:200 align:#center
	fn initInfo =
	(
		baseObjs=collectBaseObj()
		initListView lv_objects
		fillListView lv_objects baseObjs
	)
	on subBaseInfo open do
	(	
		initInfo();
		lv_objects.height=(25+(baseObjs.count*14))
	)
)

參考:http://www.scriptspot.com/3ds-max/scripts/modifier-modifier-zorb

 

五、元素操作

1.不要再for裏面一個個的刪除模型,不然3dmax會報異常,放到一個數組中一起刪除

六、JSON

內容有點多,獨立出來:https://blog.csdn.net/llhswwha/article/details/105700207

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章