2018年2月24日 星期六

[Windows Batch File] CRLF Problem in Batch file with Git

CRLF Problem in Batch file with Git

最近遇到一個問題

我有一個 Project 裡面含有數個 .bat 檔案。

 平常執行起來並沒有什麼問題,但是一旦經過 Git Commit 過後;就執行不起來了! 

這個是什麼狀況呢? 

原來是在於 git 原本是用來維護 Linux 原始碼的,因此內部使用的斷行符號為 LF。

 當你在 commit 的時候,它會自動將你的文字檔案之中的斷行符號轉為 LF。

也就是說即使你在 Windows 裡面編輯 (Windows 的 Break 為 CRLF 有兩個字元)。

 它也會將 CRLF 轉換成為 LF!但是 Windows CMD 是仰賴 CRLF 去判斷 statement。 

轉換過就會造成執行錯誤。 

解決方法是在專案裡加上一個 .gitattribute 檔,它可以讓 git 知道你要如何處裡這個 Project。 

並且在裡面加上這行

*.bat text=false 

這樣的話當 git 遇到 *.bat 需要 commit 的時候,不會自動地轉換我們的 CRLF。

Chia Xin

2017年7月28日 星期五

[Batch]About variable expansion tip an trick!

最近在用Bat Script在寫一些自動化的東西, 卻發現了一些非常奇怪的問題

比如說以下我想用FOR迴圈去批次執行一個陣列

::
@ECHO OFF
FOR %%A IN (First:1 Second:2 Third:3) DO (
        SET "VAR=%%A"
        SET "VAR=%VAR::=_%"
        ECHO %VAR%
)

這樣子執行下去 是不會Print 任何東西的

為什麼會這樣子呢...因為在一開始 Bat就會把他的變數(包在%中) 擴展

所以第二個指定就變成這樣 :

SET "VAR="

事實上 對Bat而言 他看到的程式碼應該會變成這樣 :
SET "VAR=First:1"
SET "VAR="
ECHO %VAR%

SET "VAR=Second:2"
SET "VAR="
ECHO %VAR%

SET "VAR=Third:3"
SET "VAR="
ECHO %VAR%

也就是一開始就會進行擴張解釋!

解決方法是甚麼呢?

首先 要在開頭加上
SETLOCAL EnableDelayedExpansion

這可以開啟Bat 的延遲擴解

然後對於要操作的變數 將%置換成!

::
@ECHO OFF
FOR %%A IN (First:1 Second:2 Third:3) DO (
        SET "VAR=%%A"
        SET "VAR=!VAR::=_!"
        ECHO !VAR!
)

像這樣

就可以成功Print出我們要的結果了

First_1
Second_2
Third_3

Chiaxin



[Python2]Magic operate in List type

Recently I found a nice operator in Python list

# code :
a_simple_array = [1, 2, 3, 4, 5, 6]
a_simple_array[::2] = ('one', 'three', 'five')
print a_simple_array
#
# result :
['one', 2, 'three', 4, 'five' 6]
# End code

原來Python 的Array 可以這樣子去Insert! Magic...



2017年3月12日 星期日

[Maya]Custom shelf define

Maya custom shelf directory could be set in Maya.eng such as MAYA_SHELF_PATH=D:/Working/Maya/shelf

But note a one problem, If you as well as define  MAYA_SCRIPT_PATH ,you must take MAYA_SHELF_PATH before!

Otherwise, The definition wouldn't go correctly

Chiaxin

2017年3月5日 星期日

[Maya]Maya的路徑動態連結(Dynamic Path Link)

Maya的動態連結 Dynamic Path Link

這個名字是我自己取的 總之就是一般化(泛化)我們的工作路徑

怎麼辦到呢? 一般我們用的貼圖路徑及Reference路徑都是採絕對路徑

這個在分享彼此之間的檔案時很不方便

因為可能在我的本機我把檔案放在D:\Workspace\Project

而其他人可能把檔案放在E:\workdata\project

這樣的話檔案轉移到他那裡的時候 路徑連結就會斷掉了!

因此我們可以增加一個變數去控制上層的路徑

找到C:\users\<USERNAME>\documents\maya\<MAYA-VERSION>\Maya.env

<USERNAME>是你的電腦名稱
<MAYA-VERSION>是你的Maya 版本

用記事本將之打開 加入這一行

PROJECTWORKS=D:\Workspace\Project

之後在打包檔案的時候你只要將Texture or Reference路徑改為

$PROJECTWORKS\assets\sourceimages\texture.tga
or
$PROJECTWORKS\assets\assets.ma

對方只要在自己的Maya.env改變PROJECTWORKS就可以指定他電腦的相對路徑!

但是這個做法可能需要一些打包Package Script來幫忙我們改路徑..

Chiaxin

[MentalRay] Maya Custom Shader Install

How to intall Mental Ray Custom Shader ?

Mental Ray shaders commonly place in 

C:\Program Files\Autodesk\mentalrayForMaya2015\shaders (in Maya2015)

example : MayaShaders.dll

It is a binary data, and the mi place in include : MayaShaders.mi

so you need a pairs file : shader.dll and shader.mi

If you want to place them to custom path

example - D:\shaders\mentalray\

You must to set Maya environment to let Maya know what shader do you install

In common, Maya.env in C:\users\<Username>\documents\maya\<MayaVersion>

We just add two line

MI_CUSTOM_SHADER_PATH=D:\shaders\mentalray\include
MI_LIBRARY_PATH=D:\shaders\mentalray\lib

In here, "lib" just a classify, you also could be place in D:\shaders\mentalray

Best is create yourself AETemplates directory and icon directory

You will not get messy in many file

Try to add 

MAYA_CUSTOM_TEMPLATE_PATH=D:\custom\maya\2015-x64\AETemplates
XBMLANGPATH=D:\custom\maya\2015-x64\prefs\icons

Their are AETemplate & Icons for yours

MI_CUSTOM_SHADER_PATH & MI_LIBRARY_PATH make Maya got custom shaders

Finally, we find C:\Program Files\Autodesk\mentalrayForMaya2015\maya.rayrc

open it and add

registry "{DSO}" value "dll" end registry
registry "{_CUSTOM_SHADERS}" value "D:/shaders/mentalray" end registry
link "{_CUSTOM_SHADERS}/lib/shader.{DSO}"
mi "{_CUSTOM_SHADERS}/include/shader.mi"

Complete install, we now can be use custom shader in Maya

Following reference :

https://knowledge.autodesk.com/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2015/ENU/Maya/files/GUID-3A452245-0676-4FFB-AAF5-72A10F77C54C-htm.html

https://knowledge.autodesk.com/support/maya/learn-explore/caas/mne-help/global/docs/maya2014/en_us/files/mrfMS-Load-shaders-htm.html

2016年10月17日 星期一

如何在Visual Studio 2013裡寫Maya Python?

安裝Visual Studio 2013 Community

如果要在Visual Studio裡寫Python,需要Plug-in PTVS(Python Tools or Visual Studio) 才能建立一個Python環境方便我們工作!
原本免費版本的Visual Studio Express因為不支援Extension的緣故(不能加掛PTVS)

我們需要下載Microsoft的Visual Studio Community,幸好Microsoft目前已經免費釋出了Community版本!我們可以無需付費就可以享受到Visual Studio的完整功能。

雖然目前已經有Visual Studio Community 2015,但是還是推薦使用VS2013。原因是因為目前VS2015還是多少會有一些相容性的問題,使用VS2013功能上已經足夠我們開發。

Microsoft Visual Studio 2013 Community :
http://download.microsoft.com/download/A/A/D/AAD1AA11-FF9A-4B3C-8601-054E89260B78/vs2013.5_ce_enu.iso?type=ISO

下載下來之後是一個ISO檔;將他掛載至光碟之後安裝,安裝完畢之後如果沒有Microsoft Member的話可以選擇註冊一個。

安裝PTVS

接著下載 PTVS 來安裝,在這邊下載2013版
https://github.com/Microsoft/PTVS/releases/v2.2




專案設定

安裝完之後我們打開Visual Studio發現可以新增Python專案,先新增一個Python專案 並且指定資料夾作為工作區。


TOOLS -> Python Tools -> Python Environments,右邊會彈出Python Env 的設定視窗
並且點擊Custom+來新增一個新的Python環境 這邊以Maya 2015為例。





設定如下,請注意 如果你的Maya位置和我不一樣,就必須去對應到該安裝路徑
如果你的Maya是64位元的,請設定Architecture為64,設定完請按Apply完成新增。



到目前為止,我們已經可以在Visual Studio裡面編寫Python Application!
(你也可以自行設定PyQT or PySide 或其他Python package來進行開發)


Search Path Setting

為了要讓Visual Studio可以知道Maya有哪些class和methods可以用,
我們必須在Solution Explorer加入Search Paths

請加入這些 : 
${MAYA_INSTALL_PATH}\Python\Lib\site-packages
${MAYA_INSTALL_PATH}\Python\Lib\site-packages\pymel\core
${MAYA_INSTALL_PATH}\devkit\other\pymel\extras\completion\py\maya
${MAYA_INSTALL_PATH}\devkit\other\pymel\extras\completion\py
${MAYA_INSTALL_PATH}\lib




Install ToMaya plug-in

接著我們要下載並安裝ToMaya2013這個Plug-in來跟Maya進行溝通:

https://visualstudiogallery.msdn.microsoft.com/80e6846e-c40c-435b-b23a-f0cabb23569b

安裝之後,TOOLS底下會出現ToMaya的選項,就代表安裝成功。



接著打開Maya,並且執行Script去開通我們的Command Port,詳情看網頁:

http://josbalcaen.com/scripts/maya/tomaya/

這主要是開通Maya的CommandPort來跟Visual Studio進行溝通



輸入一些Script 並且選取起來,執行ToMaya,如果出現下面視窗代表Command Port無法執行:



請回到Maya裡面再執行CommandPort的Script,回去Visual Studio測試我們的ToMaya。


Maya 有反應代表 成功了!

為了執行上的方便我們可以到Visual Studio TOOLS->Options->Environment->Keyboard裡
輸入ToMaya,設定HotKey,這邊我設定的是Alt + Space。



到這邊 我們就可以順暢地編寫我們的Maya Script了!

Chiaxin