<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## **叁、逐個選擇** **H子:** 接下來就該嘗試怎么逐個選擇模型了把。這個難道bpy也有自帶的API可以實現嗎?! **AOI:** 不,并沒有這么萬能,乖乖的用for去遍歷吧。我們先來看看怎么樣去命令選中模型吧。 這里我們就會涉及到bpy的一個類了: **Data Access(bpy.data)** ![](https://box.kancloud.cn/80f19d2b2cc475851fd50a807c61bb0a_521x290.png) 可以看到,這個類的名稱是Data Access,顧名思義就是數據入口,也就是說,通過這個庫,就可以通過某些手法獲得對象。 通過官方案例API,就可以清楚的看到這個類的作用: ![](https://box.kancloud.cn/b6639db6bb423215ec585b91d2bf4d04_674x614.png) bpy.data: >Access to Blender’s internal data >訪問Blender的內部數據 示例代碼有點長(大概),反正也不知道寫什么(可能),但是我們還是可以提取出有用的信息。 ![](https://box.kancloud.cn/d4665c73b43a52ac1ccb847d0a706b60_273x102.png) 就是,data類里面,包含了各種類型的數據,同時是利用字符串(對象名)去獲取對象的。 ![](https://box.kancloud.cn/e0a9c4ad80f1f0b7d10ec0d37fb91773_365x297.png) 同樣的方法,在交互窗口輸入bpy.data. 然后按下Ctrl+空格鍵,看看輸出的內容。 是不是發現見到很多熟悉的東西呢。 ![](https://box.kancloud.cn/d59622999daa783df45eec2e3d666e5a_331x150.png) **H子:** 啊!我見到了!objects!讓我試試看 bpy.data.objects['TreeTri.004'] ![](https://box.kancloud.cn/78703b9165ee8264d74df9627ef7eb1a_293x40.png) 執行之后確實的見到返回了結果了。 **AOI:** 對的,這樣就可以通過名字獲得對象了。而也可以由此推測,Blender的內部數據,實際上不管你怎么放,在哪個層,什么設置,實際上他們都在底層平等的放置在各自分類的數組里面。而可以通過['對象名']獲取,看起來是不是很像某一種數組呢? **H子:** 看起來就像是字典? **AOI:** 對的,這也就說明了,記錄對象的數組其實是一個字典性質的數據結構,通過key值獲得對象,同時也就說明了,為什么Blender里面同類對象,比如mesh,明明位于兩個不同的對象上面,卻也不允許使用同一個對象名。 為了方便后面的操作,我們可以用python的type方法去查看對象的數據類型。或者用包括且不限于dir等的命令,去查看對象的各種參數和屬性,對期望操作的對象獲得盡可能多的信息。了解對象越多,后面的操作便會越輕松。 ![](https://box.kancloud.cn/ac8ff88c7d40ab93527bdb536bdf63b3_351x39.png) **H子:** 看起來是一個**位于bpy_type類下面的Object類型**呢。好的,記下了。 **H子:** 那么,可以獲得單個對象了,那么怎么才能選中呢。 **AOI:** 這里,我們就該出動API的搜索功能了。 首先打開API頁面,在搜索框輸入select。因為我們的目標是找到選擇對象這個方法,這個時候,就直接搜想要的功能的英文看看能返回什么結果。 ![](https://box.kancloud.cn/230e1aa9ce8716a7c7a4e01ade001d9e_227x104.png) ![](https://box.kancloud.cn/ea1a334edf1d0fe787cbb550fabb4561_1035x873.png) 然后出現了很多結果,這個時候,我們就該開始從里面找出目標了。 為了排除這堆搜索結果,我們可以嘗試利用瀏覽器自帶的搜索功能,按下Ctrl+F,打開搜索框,然后輸入object,因為我們想要的是選中某個對象,那么就直接輸入object就好了 ![](https://box.kancloud.cn/77365ab67d41658af84287e4e51a6542_1062x116.png) 然后我們得到了這么些篩選結果。 我們可以看到,高亮的第一個結果是位于bpy.types.Object類下面的結果,看起來,這個是一個屬于Object類型的一個參數,看起來有戲。那么我們就先點進去看看。 可以看到,這個參數的描述是: >Object selection state >對象選中狀態 是一個布爾型的變量。 ![](https://box.kancloud.cn/395ec0b14e99ac45211f59d5f176abf7_1022x97.png) 這樣,有一種命中的預感。 為了測試對不對,我們直接開始在交互界面嘗試一下就明白了。 **H子:** 好,輸入命令,回車! ![](https://box.kancloud.cn/e602268a4fe48a882f9e757270dcaf91_361x19.png) 好的!被選中了 ![](https://box.kancloud.cn/a033a81fadd803b439f1fb8652b87665_506x334.png) **H子:** 好的,既然知道了規則的話,那么剩下來就是要進行遍歷處理了把。先通過一個變量記錄一下選中的對象,然后再遍歷這個變量,然后逐個選中? 總之先試試看把。 先按A取消全選,然后按F6設置操作動作為【取消選擇】 ![](https://box.kancloud.cn/5fed7cac0fb28d4dc8183a534eb0458b_622x502.png) 得到取消選擇的命令 ![](https://box.kancloud.cn/1973e89cb75f8d9cf2108034a77d5363_356x26.png) 然后開始編寫循環 ~~~ python import bpy objs = bpy.context.selected_objects for o in objs: bpy.ops.object.select_all(action='DESELECT') bpy.data.objects[o.name].select = True ~~~ 看起來是這樣的,應該沒錯的樣子。不過執行完了之后,全選對象就只剩下了選中一個對象了。這樣也不知道對不對啊,有辦法可以打印些什么東西出來嗎,或者說,python的print命令輸出的東西可以在什么地方看到呢。 **AOI:** 看來你已經注意到了,沒有辦法輸出,很不方便debug對吧。 ![](https://box.kancloud.cn/809763d16483072456597b204aff27f7_174x152.png) 選擇 : 窗口-切換顯示系統控制臺,就可以打開控制臺窗口了 ![](https://box.kancloud.cn/278072afe13707e9f28d06b7fff541d2_832x419.png) 對的,就是這個熟悉的黑框框 所有的print輸出,以及代碼錯誤等等的信息,都會在這里顯示。那么,再嘗試一下修改代碼,并且輸出debug信息,對代碼執行過程進行檢查吧。 **H子:** 好的,先修改一下代碼。 ~~~python import bpy objs = bpy.context.selected_objects #打印全部選中對象 print(objs) for o in objs: bpy.ops.object.select_all(action='DESELECT') bpy.data.objects[o.name].select = True #打印當前選中對象(因為selected_objects是一個數組,記錄了全部選中的對象,而因為當前只選中了一個對象,所以直接填寫數組下標值為0,獲取第一個對象就好了) print(bpy.context.selected_objects[0]) ~~~ 代碼執行的輸出結果是: ![](https://box.kancloud.cn/6696bdd54d1dd79b9bc029e6f47eac72_840x190.png) 看來執行的結果是正確的 那么,到此,逐個選擇就算是完成了。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看