插件放在用戶目錄下的plugins目錄。插件后綴該為.pyd, .pypv(加密文件)。 C4D 啟動(dòng)后,尋找并執(zhí)行此目錄下所有以.pyp 或 .pypv結(jié)尾的插件。一個(gè)簡單的插件如下:
成都創(chuàng)新互聯(lián)網(wǎng)絡(luò)公司擁有十載的成都網(wǎng)站開發(fā)建設(shè)經(jīng)驗(yàn),近千家客戶的共同信賴。提供成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站開發(fā)、網(wǎng)站定制、買鏈接、建網(wǎng)站、網(wǎng)站搭建、響應(yīng)式網(wǎng)站、網(wǎng)頁設(shè)計(jì)師打造企業(yè)風(fēng)格,提供周到的售前咨詢和貼心的售后服務(wù)
這個(gè)插件不好玩,就能輸出個(gè)hello world! 但是,我們可以在程序的各個(gè)部分注冊插件鉤子。
所有插件的鉤子都從 BaseData 繼承而來, 這些類包含能被C4D調(diào)用的方法。 MessageData 的例子:
向C4D注冊插件需使用 Register () 。 注冊函數(shù)可接收實(shí)例也能接收類,在內(nèi)部自己創(chuàng)建對象:
plugins.RegisterCommandPlugin(id=PLUGIN_ID, str="TestBase-Plugin", info=0, dat=SampleData())
NodeData的注冊方法需要一個(gè)類名:
數(shù)據(jù)類的聲明周期還有點(diǎn)說道,上面的例子中將新的實(shí)例傳給了注冊函數(shù),在C4D的session周期內(nèi)此實(shí)例都存在。其構(gòu)造和析構(gòu)函數(shù)正常調(diào)用,不用多想多做。需要將名字傳給注冊函數(shù)的數(shù)據(jù)類在C4D的節(jié)點(diǎn)上游對應(yīng)的 1:1 標(biāo)志,其生命周期和node一樣,分配和刪除都由C4D控制。其構(gòu)造和析構(gòu)也如常調(diào)用,但C4D會(huì)額外調(diào)用 NodeData.Init() 。
.pyp 或.pypv 可以放在插件目錄,將其組織成層次會(huì)更好。 插件的標(biāo)準(zhǔn)層次結(jié)構(gòu)如下:
主文件myPlugin.pyp 注冊了鉤子。 res目錄包含插件資源,現(xiàn)指dialogs,description, strings。
每個(gè)description都會(huì)有一個(gè).h文件,枚舉了description用到的常量。 查看Descriptions in cinema4D。 每個(gè)dialog包含自己的 .res文件。 c4d_symbols.h包含了.res使用的常量。
可能會(huì)有個(gè)string_xx的目錄來做國際化,xx是兩個(gè)目錄,代表一種語言,依據(jù)是iso 639,iso3361-1. 當(dāng)前C4D有一下編碼:
每種語言的目錄應(yīng)該包含dialog的.str文件。 c4d_string.str是給其他資源用的。 推薦的做法是先做一種語言,翻譯前拷貝一份。最后你可以有很多文件,例如插件的icon和logo,這些可以方便地通過 file 訪問
PluginMessage(id, data)
定義此函數(shù)可以接收插件信息。 可以從C4D或者從其他插件調(diào)用GetPluginMessage()
隨時(shí)接收C4D的命令行參數(shù),實(shí)現(xiàn)PluginMessage() 填入 C4DPL_COMMANDLINEARGS 信息:
C4D的函數(shù)重載,重編譯.pyp文件。 被pyp文件import的庫不會(huì)reload. python首先檢查模塊是否導(dǎo)入, 已導(dǎo)入就跳過,并建立引用.
當(dāng)PluginMessage()接收到 C4DPL_RELOADPYTHONPLUGINS , 可以用reload()來強(qiáng)制重載python模塊. 此處可以關(guān)閉以前打開的資源(socket,file等)
添加自己的菜單, 在PluginMessage()中攔截 C4DPL_BUILDMENU, 并調(diào)用GetMenuResource()來接收主菜單容器,下面是一個(gè)完整的例子。
要以Python生成器為媒介。
用以下代碼可以簡單行程一個(gè)三維圖,在這個(gè)基礎(chǔ)上根據(jù)您的需要改寫代碼就可以了。
在生成器內(nèi)的python代碼會(huì)生成一個(gè)object。默認(rèn)下,生成了一個(gè)立方體,并返回:
import c4d
def main():
return c4d.BaseObject(c4d.Ocube)
UserData輸入
當(dāng)然也可以返回別的物體,或者用userdata調(diào)整物體參數(shù)。注意op可以快速引用生成器對象。
importc4d
defmain():
cone =c4d.BaseObject(c4d.Ocone)
cone[c4d.PRIM_CONE_TRAD] = op[c4d.ID_USERDATA,1]
return cone
具體創(chuàng)建三維圖步驟如下
1首先要【創(chuàng)建】-【造型】-【python生成器】,默認(rèn)生成一個(gè)立方體即python編輯器
2-選中對象,右下角【打開python編輯器】
3-代碼表示定義一個(gè)函數(shù)并返回C4D基本物體
4-這里簡單改一下,把原代碼中的Ocube改成Osphere,點(diǎn)一下執(zhí)行,會(huì)生成一個(gè)三維球體。對于基本造型對象,這里的對象名稱通用語法為大寫字母O加對象的英文。
5-這里還可以用定義變量返回值的表達(dá)方法,比如這里定義變量cone(圓錐),c4d的屬性就是大寫字母O加上圓錐的英文即Ocone,返回這個(gè)變量值,執(zhí)行就得到了一個(gè)圓錐。
6-除了生成基本三維圖形,python編輯器可以做很多事情,這里如果有一定的python編碼基礎(chǔ),會(huì)更容易一些??梢栽诰W(wǎng)上找?guī)讉€(gè)實(shí)例試一下,比如這種,生成數(shù)字的??梢栽谒阉饕孑斎腙P(guān)鍵字Cinema 4D - Python scripts來檢索別人寫好的腳本。
python生成器有什么作用
1、主要是開發(fā)快,語言簡潔,沒那么多技巧,所以讀起來很清楚容易。
2、C/C++可以寫python的module,標(biāo)準(zhǔn)庫里就有用C/C++寫的東西,這個(gè)跟java的JNI類似。
3、python的gui一般是用tkinter,就是tk的python的wrapper。python沒有像xna那么方便的工具。
4、python不是為了網(wǎng)絡(luò)設(shè)計(jì)的。python是1991年有的,WWW是1993年才被CERN開放的。網(wǎng)絡(luò)編程用python主要是為了開發(fā)快。
5、像VS那樣功能強(qiáng)的IDE,有要錢的PyCharm和不要錢的PyDev。PyDev有Eclipse的插件版本或者是Aptana Studio版本。