Exemple #1
0
    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));
            }
        }
    }
Exemple #2
0
    // 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);
    }
Exemple #3
0
    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);
    }
Exemple #5
0
    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();
    }