internal RectFileWriter(RectilinearEdgeRouterWrapper router,
                RectilinearVerifier verifier,
                Dictionary<Port, Shape> freeRelativePortToShapeMap = null,
                bool writeGraph = true,
                bool writePaths = true,
                bool writeScanSegments = true,
                bool writePaddedObstacles = true,
                bool writeConvexHulls = true,
                bool useFreePortsForObstaclePorts = false
            ) 
        {
            this.router = router;
            this.verifier = verifier;
            this.freeRelativePortToShapeMap = freeRelativePortToShapeMap;

            this.writeGraph = writeGraph;
            this.writePaths = writePaths;
            this.writeScanSegments = writeScanSegments;
            this.writePaddedObstacles = writePaddedObstacles;
            this.writeConvexHulls = writeConvexHulls;

            this.useFreePortsForObstaclesPorts = useFreePortsForObstaclePorts;
            this.useSparseVisibilityGraph = router.UseSparseVisibilityGraph;
            this.useObstacleRectangles = router.UseObstacleRectangles;
            this.bendPenalty = router.BendPenaltyAsAPercentageOfDistance;
            this.limitPortVisibilitySpliceToEndpointBoundingBox = router.LimitPortVisibilitySpliceToEndpointBoundingBox;

            // Don't leave these null - they'll be overwritten by caller in most cases.
            this.RandomObstacleArg = RectFileStrings.NullStr;
            this.RandomObstacleDensity = RectFileStrings.NullStr;
        }
        internal RectFileWriter(RectilinearEdgeRouterWrapper router,
                                RectilinearVerifier verifier,
                                Dictionary <Port, Shape> freeRelativePortToShapeMap = null,
                                bool writeGraph                   = true,
                                bool writePaths                   = true,
                                bool writeScanSegments            = true,
                                bool writePaddedObstacles         = true,
                                bool writeConvexHulls             = true,
                                bool useFreePortsForObstaclePorts = false
                                )
        {
            this.router   = router;
            this.verifier = verifier;
            this.freeRelativePortToShapeMap = freeRelativePortToShapeMap;

            this.writeGraph           = writeGraph;
            this.writePaths           = writePaths;
            this.writeScanSegments    = writeScanSegments;
            this.writePaddedObstacles = writePaddedObstacles;
            this.writeConvexHulls     = writeConvexHulls;

            this.useFreePortsForObstaclesPorts = useFreePortsForObstaclePorts;
            this.useSparseVisibilityGraph      = router.UseSparseVisibilityGraph;
            this.useObstacleRectangles         = router.UseObstacleRectangles;
            this.bendPenalty = router.BendPenaltyAsAPercentageOfDistance;
            this.limitPortVisibilitySpliceToEndpointBoundingBox = router.LimitPortVisibilitySpliceToEndpointBoundingBox;

            // Don't leave these null - they'll be overwritten by caller in most cases.
            this.RandomObstacleArg     = RectFileStrings.NullStr;
            this.RandomObstacleDensity = RectFileStrings.NullStr;
        }