The only thing I would never allow is Boolean.
13 September, 2020 - 1 min read - Tags: RhinoCommon,Grasshopper
やったこと
-
HoaryFox の壁開口対応
- 昨日から色々試したが、結果として対象サーフェスからTrimmedSurf作ってそれに対してDiffとった
- BooleanDiffでエラーなのは、EvaluateSurfaceで変な値が返ってきているものだったのでそれ以外は成功していた
- ただし思ったDiffではなかったので、TrimしたSurfにした
-
HoaryFox ver1.1.0のリリース
HoaryFoxアップデートしました。ver1.1.0です。
— hiron (@hiron_rgkr) September 13, 2020
主なアップデート内容
・ST-Bridge ver2.0 に対応!!!!
・壁開口に対応
なおSTB ver1では対応しているが、stb ver2の読み込みに対してまだ非対応な部分があるため、今後アップデートします。https://t.co/ANB2V9I3o4#grasshopper3d #HoaryFox https://t.co/fMTqZhe5a7 pic.twitter.com/0OO0q1vHDm
技術メモ
-
多分だけれど、Surface.Trimは対象サーフェスのTrimmedSurfaceなので絶対にBooleanうまくいく?
- 昨日手法はEvaluateしてサーフェス上の点を取得して別のサーフェスを作っていたので、うまく行かなかったのではないか?
- Surface.Trim Method
- surface.Trimはuvから作成できるので、今回の開口位置のデータの持ち方にあっていて実装しやすかった。
- BooleanDiffの失敗があり得るので、try-catch で Exception 対応している
-
if (open.Id.Count != 0 && brep != null) { var surface = brep.Surfaces[0]; var trimSurf = new List<Brep>(); for (var i = 0; i < open.Id.Count; i++) { var intervalX = new Interval(open.PositionX[i], open.PositionX[i] + open.LengthX[i]); var intervalY = new Interval(open.PositionY[i], open.PositionY[i] + open.LengthY[i]); trimSurf.Add(surface.Trim(intervalX, intervalY).ToBrep()); } try { var diffBrep = Brep.CreateBooleanDifference(new Brep[]{ brep }, trimSurf.ToArray(), tol)[0]; planeBrep = diffBrep; } catch(NullReferenceException) { planeBrep = brep; } }
その他
- Boolean絶対に許さん