<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      cad.net 圖元做塊后保留繪圖次序

      今天水友在群里提出一個問題,選中一部分對象,做成塊后,繪圖次序發生了變化,如何保留原來的繪圖次序。

      這是一個十分有用的問題,以前從未考慮過,于是我研究了一下

       

      1.驗證

      我先后在cad中創建了3條多段線(多段線設置寬度后可以很方便的看到繪圖次序),這里命名為1、2、3,

      然后我寫了一個較為簡單的做塊代碼,不考慮基點位置,代碼如下

      using var tr = new DBTrans();
      var objectIdList = tr.CurrentSpace.OfType<ObjectId>().ToList();
      if (objectIdList.Count == 0)
          return;
      var drt = (DrawOrderTable)tr.CurrentSpace.DrawOrderTableId.GetObject(OpenMode.ForRead);
      var btrId = tr.BlockTable.Add("*U", btr => { btr.DeepCloneEx(objectIdList.ToCollection()); });
      tr.CurrentSpace.InsertBlock(Point3d.Origin, btrId);
      foreach (var ent in objectIdList.GetObject<Entity>(OpenMode.ForWrite))
      {
          ent.Erase();
      }

      此段代碼使用了ifox,但我相信大家都能看懂它的主要邏輯,即拿到當前空間所有對象,克隆到一個新的塊表記錄中,然后做成塊參照插入圖紙中,然后將原來的圖元刪除

      由于是測試使用所以此處未考慮鎖定圖層等問題。

      經過測試我發現,無論我如何調整原圖的順序,塊內對象繪圖次序從最后到最前都是1->2->3

      2.猜想

      于是我猜想,新塊表記錄中的繪圖次序應該與克隆的ObjectIdCollection中id的排列順序一致,實際上從平時我們畫圖的時候,后畫的對象總是在先畫的對象上面,就可以判斷出來

      3.解決方案

      那么既然克隆后的繪圖次序,與ObjectIdCollection中id的排列順序一致,那么我們只需要在克隆前對ObjectIdCollection中id按照繪圖次序從后到前的順序對id進行排序,就可以實現保留原來繪圖次序的目的。

      那么如何獲得原來的繪圖次序呢?

      經查閱官方文檔DrawOrderTable.GetSortHandle(id)方法,可以獲得一個handle,此handle并不對應數據庫中的圖元,僅使用其value值,value值越小,繪圖次序越靠后(為什么這里不直接設計成long而一定要用handle呢)

      那么我們只需要獲取id對應的此value值,然后按從小到大的順序排序,再克隆即可

      修改后的代碼如下

      using var tr = new DBTrans();
      var objectIdList = tr.CurrentSpace.OfType<ObjectId>().ToList();
      if (objectIdList.Count == 0)
          return;
      var drt = (DrawOrderTable)tr.CurrentSpace.DrawOrderTableId.GetObject(OpenMode.ForRead);
      var objectIdCollection = objectIdList.OrderBy(id => drt.GetSortHandle(id).Value).ToCollection();
      var btrId = tr.BlockTable.Add("*U", btr => { btr.DeepCloneEx(objectIdCollection); });
      tr.CurrentSpace.InsertBlock(Point3d.Origin, btrId);
      foreach (var ent in objectIdList.GetObject<Entity>(OpenMode.ForWrite))
      {
          ent.Erase();
      }

      增加了一行linq排序,并將排序后的ObjectIdCollection傳入了克隆函數即可

       

      posted @ 2024-07-26 12:57  DDYYHH  閱讀(193)  評論(2)    收藏  舉報
      主站蜘蛛池模板: 欧美一本大道香蕉综合视频| 国产免费爽爽视频| 久热re这里精品视频在线6| 久久精品99国产精品日本| 国产精品自拍一二三四区| 日韩精品中文字幕亚洲| 亚洲熟妇自偷自拍另欧美| 亚洲欧美高清在线精品一区二区| 长武县| 国产一区视频一区欧美| 午夜三级成人在线观看| 亚洲欧洲无码av电影在线观看| 99在线小视频| 资源新版在线天堂偷自拍| 婷婷综合缴情亚洲| 伊人久久大香线蕉综合网站| 欧美日韩精品一区二区三区高清视频| 久久久亚洲精品无码| 午夜射精日本三级| 九九电影网午夜理论片| 国产永久免费高清在线| 自拍视频在线观看成人| 最新国产麻豆AⅤ精品无码| 华安县| 国内精品视这里只有精品| 国产成人综合色就色综合| 在线观看国产精品日韩av| 亚洲无av在线中文字幕| 无码专区 人妻系列 在线| 日本深夜福利在线观看| 人人做人人澡人人人爽| 久久精品亚洲精品国产色婷| 免费看的一级毛片| 亚洲国产成人久久一区久久| 日韩一区日韩二区日韩三区| 在线观看美女网站大全免费| 国产一区二区三区十八禁| 亚洲精品无码久久一线| 抚远县| 一二三三免费观看视频| 人妻18毛片A级毛片免费看|