完善主體資料,免費(fèi)贈(zèng)送VIP會(huì)員!
      * 主體類(lèi)型
      * 企業(yè)名稱(chēng)
      * 信用代碼
      * 所在行業(yè)
      * 企業(yè)規(guī)模
      * 所在職位
      * 姓名
      * 所在行業(yè)
      * 學(xué)歷
      * 工作性質(zhì)
      請(qǐng)先選擇行業(yè)
      您還可以選擇以下福利:
      行業(yè)福利,領(lǐng)完即止!

      下載app免費(fèi)領(lǐng)取會(huì)員

      NULL

      ad.jpg

      Dynamo讀取選擇框PickBox剪裁Revit視圖

      發(fā)布于:2021-06-15 14:28:40

      網(wǎng)友投稿

      更多

        前幾天群里有小伙伴發(fā)了一張動(dòng)態(tài)圖,是通過(guò)鼠標(biāo)拖拽框選范圍,自動(dòng)剪裁平面視圖,覺(jué)得這個(gè)可以寫(xiě)篇文章,于是就和小伙伴商量了下,把源文件要過(guò)來(lái)了,整理成今天這篇文章,感謝群里的小伙伴——J.W

      同時(shí)我會(huì)分享我寫(xiě)的另一種方法

      由于我比較懶,所以呢,我就簡(jiǎn)單把小伙伴的代碼邏輯給大家說(shuō)下(詳細(xì)講,估計(jì)一篇文章下不來(lái),小伙伴們見(jiàn)諒哈~):

      首先,這里用到的是View下的GetCropRegionShapeManager方法,用來(lái)管理剪裁框的形狀:

      圖片.png

      然后我們點(diǎn)擊

      ViewCropRegionShapeManager,就能跳轉(zhuǎn)到對(duì)應(yīng)的Class,進(jìn)而找到其對(duì)應(yīng)的方法:

      圖片.png

      詳細(xì)的方法如下:

      圖片.png

        這里需要的是一個(gè)CurveLoop,那么就簡(jiǎn)單了,我們只需要給一組曲線就好了。

              然后這里還有一個(gè)點(diǎn),就是獲取選擇框的輪廓,用到了PickBox這個(gè)方法。而動(dòng)態(tài)圖中的第一步,是框選操作,這必然會(huì)用到UI.Selection下的方法:


      之后就是通過(guò)一系列的自定義函數(shù),將PickBox的最大和最小點(diǎn),投影到平面上,在通過(guò)平面點(diǎn),構(gòu)造出一個(gè)矩形框,最后將整個(gè)舉行框,應(yīng)用給CropBox即可,這里我就不詳述了,小伙伴們可以自己去測(cè)試哈~

       這里需要選擇一種PickBoxStyle,只有三個(gè)枚舉,隨便選一個(gè)理論上就可以,因?yàn)槲覀冇玫降闹皇莃ox。

      圖片.png

      之后就是通過(guò)一系列的自定義函數(shù),將PickBox的最大和最小點(diǎn),投影到平面上,在通過(guò)平面點(diǎn),構(gòu)造出一個(gè)矩形框,最后將整個(gè)舉行框,應(yīng)用給CropBox即可,這里我就不詳述了,小伙伴們可以自己去測(cè)試哈~

      接下來(lái),講講我寫(xiě)的這段代碼的邏輯:

              在看小伙伴這個(gè)程序的時(shí)候,我看到View下的CrowBox屬性是可get可set的,這個(gè)在我們前面文章里是講過(guò)的,這種是可讀又可設(shè)置的屬性,如果通過(guò)這個(gè)來(lái)剪裁視圖,那應(yīng)該會(huì)很簡(jiǎn)單,于是我就自己嘗試了下:

      圖片.png

      可以看出,get和set的,都是一個(gè)BoundingBoxXYZ,那么我們只需要根據(jù)PickBox重新構(gòu)造一個(gè)BoundingBoxXYZ應(yīng)該就是可以的。

              接下來(lái)就開(kāi)始整理我們的代碼:

              首先,獲取選擇框的方法一樣,只是用法略有不同,我是直接獲取PickBox的最大和最小點(diǎn),然后重新構(gòu)造一個(gè)BoundingBoxXYZ,方法如下:

      圖片.png

       然后將這個(gè)新的BoundingBoxXYZ更新給原來(lái)的CropBox即可,似乎到這里就完事兒。

              但是實(shí)際操作下來(lái),不知道為什么出了一個(gè)問(wèn)題,總是提示Box為空,但是我獲取Box的屬性,確顯示不為空,沒(méi)搞明白為什么。

      圖片.png

       不過(guò)好在,在胡亂弄了幾次以后,發(fā)現(xiàn),先將新生成的BoundingBoxXYZ過(guò)繼給Dynamo,之后再重新過(guò)繼回給Revit,這個(gè)問(wèn)題就解決了,可能是這個(gè)API有些問(wèn)題吧,就先湊合用了~

              然后在反復(fù)測(cè)試的時(shí)候,還發(fā)現(xiàn)一個(gè)問(wèn)題,就是如果之前已經(jīng)剪裁過(guò)的視圖,會(huì)出現(xiàn)剪裁框位置錯(cuò)誤的情況,又查了下,在ViewCropRegionShapeManager方法下,有一個(gè)刪除剪裁框的方法,那么我就在程序里添加了兩行代碼,保證程序不會(huì)出錯(cuò)。

      圖片.png


















































      # Copyright(c) 2019, 九哥BIMerimport clrimport sysclr.AddReference('ProtoGeometry')from Autodesk.DesignScript.Geometry import *
      clr.AddReference('RevitAPI')import Autodeskfrom Autodesk.Revit.DB import *
      clr.AddReference("RevitNodes")import Revitclr.ImportExtensions(Revit.GeometryConversion)
      clr.AddReference('RevitServices')import RevitServicesfrom RevitServices.Persistence import DocumentManagerfrom RevitServices.Transactions import TransactionManager
      clr.AddReference('RevitAPIUI')from Autodesk.Revit.UI import *
      doc = DocumentManager.Instance.CurrentDBDocumentuidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocumentview = doc.ActiveView
      pboxS = Autodesk.Revit.UI.Selection.PickBoxStyle.EnclosingpickedBox = uidoc.Selection.PickBox(pboxS, "框選范圍框")minPoint = pickedBox.MinmaxPoint = pickedBox.Max
      t = Transaction(doc, "剪裁視圖")t.Start()
      newbox = BoundingBoxXYZ()newbox.Min = minPointnewbox.Max = maxPointnewbox = newbox.ToProtoType()newbox = newbox.ToRevitType()
      view.CropBoxActive = Trueview.CropBoxVisible = TrueshapeManager = view.GetCropRegionShapeManager()shapeManager.RemoveCropRegionShape()view.CropBox = newbox
      t.Commit()
      OUT= view

      當(dāng)然如果你用的是Revit2022和Dynamo2.10,那么就更簡(jiǎn)單了,你只需要獲取PickBox并構(gòu)造一個(gè)BoundingBoxXYZ即可,其他的都有現(xiàn)成節(jié)點(diǎn)了,就不再詳細(xì)介紹了,直接附上截圖和代碼:

      圖片.png

      # Copyright(c) 2019, 九哥BIMerdoc = DocumentManager.Instance.CurrentDBDocumentuidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocumentview = uidoc.ActiveView
      pboxS=Autodesk.Revit.UI.Selection.PickBoxStyle.EnclosingpickedBox = uidoc.Selection.PickBox(pboxS, "框選范圍框")
      newbox = BoundingBoxXYZ()newbox.Min = pickedBox.Minnewbox.Max = pickedBox.Max
      OUT= view,newbox.ToProtoType()

      本文版權(quán)歸腿腿教學(xué)網(wǎng)及原創(chuàng)作者所有,未經(jīng)授權(quán),謝絕轉(zhuǎn)載。

      未標(biāo)題-1.jpg

      上一篇:Revit房間相關(guān)操作(七)

      下一篇:Revit房間相關(guān)操作(八)

      主站蜘蛛池模板: 在线观看免费视频一区| 乱色熟女综合一区二区三区| 国精无码欧精品亚洲一区| 一区二区三区美女视频| 波多野结衣精品一区二区三区| 亚洲福利电影一区二区?| 在线中文字幕一区| 久久亚洲一区二区| 亚洲国产精品乱码一区二区| 一区二区在线观看视频| 色狠狠AV一区二区三区| 亚洲国产美国国产综合一区二区 | 国精产品一区一区三区| 国产精品一区二区久久国产| 亚洲V无码一区二区三区四区观看| 亚洲熟妇av一区二区三区漫画| 久久精品视频一区二区三区| 亚洲综合一区二区国产精品| 精品熟人妻一区二区三区四区不卡 | 中文字幕一区日韩在线视频 | 天天躁日日躁狠狠躁一区| 无码人妻精品一区二| 一区二区三区四区无限乱码 | 国产成人免费一区二区三区| 日韩精品一区在线| 男人免费视频一区二区在线观看| 天堂不卡一区二区视频在线观看| 国产成人精品a视频一区| 色狠狠一区二区三区香蕉蜜桃| 日本一区二区免费看| 亚洲国产一区在线观看| 国产乱码精品一区二区三区四川人| 精品乱人伦一区二区| 中文字幕一区二区三区免费视频| 亚洲色精品aⅴ一区区三区| 亚洲熟妇av一区二区三区下载| 在线一区二区三区| 免费观看一区二区三区| 人妻视频一区二区三区免费 | 亲子乱av一区二区三区| 肉色超薄丝袜脚交一区二区|