public void ReComputeArea() { //relax agentPts = agentPosition.ToRhino().ToList(); _relax.Compute(ref agentPts, minDist, offsetShape, (double)gridSize / 5.0); agentPosition = agentPts.ToHost(); if (debug) { debugPreview.Add(RhinoPreview.PtsShow(agentPts, gridSize, Color.black)); } //rect select _rectSelect.Compute(agentPts, shapedGrid, gridSize, ref rectPts, ref othersPts); //gridGrowth _gridGrowth.Compute(rectPts.ToVector3d().ToList(), othersPts.ToVector3d().ToList(), gridSize, targetAreaSize, minGridNum, ref currentAreaSize, ref RoomPts); if (debug) { for (int i = 0; i < RoomPts.Count; i++) { var col = Color.HSVToRGB((float)((float)i / (float)(rectPts.Count)), 1, 1f, true); debugPreview.Add(RhinoPreview.TileShow(RoomPts[i], gridSize, col)); } } }
// Start is called before the first frame update void Start() { var plane = new Rhino.Geometry.Plane(Point3d.Origin, Vector3d.ZAxis); var interval = new Interval(-0.5, 0.5); rect = new Rectangle3d(plane, interval, interval); var intervalR = new Interval(-5, 5); region = new Rectangle3d(plane, intervalR, intervalR); pts = RhinoWrapper.RandomPt(rect, numSphere); _relax = gameObject.AddComponent <Relax>(); spheres = new List <GameObject>(); var col = new Color(0.5f, 0, 0, 0.01f); for (int i = 0; i < pts.Count; i++) { var sphere = GameObject.CreatePrimitive(PrimitiveType.Quad); sphere.GetComponent <MeshRenderer>().material.color = Random.ColorHSV(1f, 1f, 1f, 1f, 0, 0); spheres.Add(sphere); } RhinoPreview.PolyLineShow(region.ToPolyline(), col, 0.3f); }
public void ReloadPreview(bool isResourceUnload) { if (agents.Count != 0) { foreach (var agent in agents) { Destroy(agent); } } if (tiles.Count != 0) { foreach (var tile in tiles) { Destroy(tile); } } //agent var agentPts = agentPosition.ToRhino().ToList(); agents.Add(RhinoPreview.PtsShow(agentPts, gridSize, Color.white, convertM)); //Room for (int i = 0; i < RoomPts.Count; i++) { var col = Color.HSVToRGB((float)((float)i / (float)(rectPts.Count)), 1, 1f, true); tiles.Add(RhinoPreview.TileShow(RoomPts[i], gridSize, col, convertM)); } for (int i = 0; i < rectPts.Count; i++) { var pts = rectPts[i].Select(pt => pt + new Rhino.Geometry.Vector3d(0, 0, -1000f)).ToList(); tiles.Add(RhinoPreview.TileShow(pts, gridSize, Color.white, convertM)); } if (isResourceUnload) { Resources.UnloadUnusedAssets(); } }
// Start is called before the first frame update void Start() { var render = obj.GetComponent <LineRenderer>(); var vetx = new List <Point3d>(); for (int i = 0; i < render.positionCount; i++) { vetx.Add(render.GetPosition(i).ToRhino()); } var shapeCrv = new Rhino.Geometry.Polyline(vetx).ToPolylineCurve(); shapeCrv.MakeClosed(1); var plane = new Rhino.Geometry.Plane(AreaMassProperties.Compute(shapeCrv).Centroid, Vector3d.ZAxis); shapeCrv.Offset(plane, (-gridSize * minGridNum) / 2.0 * 0.001f, 1, CurveOffsetCornerStyle.Sharp)[0].TryGetPolyline(out Polyline offsetShapeCrv); Debug.Log(shapeCrv.Offset(plane, (-gridSize * minGridNum) / 2.0 * 0.001f, 1, CurveOffsetCornerStyle.Sharp).Length); RhinoPreview.PolyLineShow(offsetShapeCrv, Color.red, 0.3f, "offset", false); RhinoPreview.PolyLineShow(new Rhino.Geometry.Polyline(vetx), Color.green, 0.3f, "offset", false); }
public void ReComputeShape() { //Shape Rhino.Geometry.Point3d origin = originVec.ToRhino(); _shapedGrid.Compute(gridSize, x_Ex, y_Ex, offsetValue, offsetValue2, maxReduceNum, minGridNum, origin, ref shapedGrid, ref shape, ref offsetShape, ref originalShape); if (Rhino.Geometry.AreaMassProperties.Compute(offsetShape.ToPolylineCurve()).Area < (Rhino.Geometry.AreaMassProperties.Compute(shape).Area / 2f)) { ReComputeShape(); Debug.Log("Failed RecomputeShape and start RecomputeShape again"); return; } _areaRatio.Compute(shape, minAreaRatio, roomNum, ref areaSize, ref areaRatio); targetAreaSize = areaSize.ToIntList(); if (debug) { debugPreview.Add(RhinoPreview.PtsShow(shapedGrid, gridSize, Color.white)); } if (show) { if (polyLines.Count != 0) { foreach (var line in polyLines) { Destroy(line); } } polyLines.Add(RhinoPreview.PolyLineShow(shape.ToPolyline(), Color.cyan, 0.3f, "shape")); polyLines.Add(RhinoPreview.PolyLineShow(offsetShape, Color.blue, 0.3f, "offsetShape")); polyLines.Add(RhinoPreview.PolyLineShow(originalShape.ToPolyline(), Color.gray, 0.3f, "originalShape")); } // make first agent position var center = Rhino.Geometry.AreaMassProperties.Compute(shape).Centroid; rectMin = RhinoWrapper.MakeRect(center, gridSize, gridSize); var areaCenters = RhinoWrapper.RandomPt(rectMin, roomNum); if (debug) { debugPreview.Add(RhinoPreview.PolyLineShow(rectMin.ToPolyline(), Color.green, 0.3f, "minRect")); debugPreview.Add(RhinoPreview.PtsShow(areaCenters, gridSize, Color.black)); var centersList = new List <Rhino.Geometry.Point3d>(); centersList.Add(center); debugPreview.Add(RhinoPreview.PtsShow(centersList, gridSize, Color.magenta)); } //relax agent position minDist = (int)Math.Ceiling(Math.Sqrt(2) * gridSize) * (minGridNum + 1); _relax.Compute(ref areaCenters, minDist, offsetShape, (double)gridSize / 2.0); if (debug) { debugPreview.Add(RhinoPreview.PtsShow(areaCenters, gridSize, Color.red)); } agentPosition = areaCenters.ToHost(); }