Exemplo n.º 1
0
 /// <summary>
 /// Disable mesh extrusion for the features in this layer.
 /// </summary>
 public virtual void DisableExtrusion()
 {
     if (extrusionType != ExtrusionType.None)
     {
         extrusionType = ExtrusionType.None;
         HasChanged    = true;
     }
 }
Exemplo n.º 2
0
 public GeometryExtrusionWithAtlasOptions(GeometryExtrusionOptions extrusionOptions)
 {
     extrusionType         = extrusionOptions.extrusionType;
     extrusionGeometryType = extrusionOptions.extrusionGeometryType;
     propertyName          = extrusionOptions.propertyName;
     minimumHeight         = extrusionOptions.minimumHeight;
     maximumHeight         = extrusionOptions.maximumHeight;
     extrusionScaleFactor  = extrusionOptions.extrusionScaleFactor;
 }
        public GeometryExtrusionWithAtlasOptions(GeometryExtrusionOptions extrusionOptions, UVModifierOptions uvOptions)
        {
            extrusionType         = extrusionOptions.extrusionType;
            extrusionGeometryType = extrusionOptions.extrusionGeometryType;
            propertyName          = extrusionOptions.propertyName;
            minimumHeight         = extrusionOptions.minimumHeight;
            maximumHeight         = extrusionOptions.maximumHeight;

            texturingType = uvOptions.texturingType;
            atlasInfo     = uvOptions.atlasInfo;
        }
Exemplo n.º 4
0
 /// <summary>
 /// Changes extrusion type to "Range Height" and extrudes all features by
 /// the choosen property's value such that all vertices (roof) will be
 /// flat at the highest vertex elevation (after terrain elevation taken into account).
 /// </summary>
 /// <param name="extrusionGeometryType">Option to create top and side polygons after extrusion.</param>
 /// <param name="propertyName">Name of the property to use for extrusion</param>
 /// <param name="extrusionScaleFactor">Height multiplier</param>
 void ISubLayerExtrusionOptions.EnableMaxExtrusion(ExtrusionGeometryType extrusionGeometryType, string propertyName, float extrusionScaleFactor)
 {
     if (extrusionType != ExtrusionType.MaxHeight ||
         this.extrusionGeometryType != extrusionGeometryType ||
         this.propertyName != propertyName ||
         !Mathf.Approximately(this.extrusionScaleFactor, extrusionScaleFactor))
     {
         this.extrusionType         = ExtrusionType.MaxHeight;
         this.extrusionGeometryType = extrusionGeometryType;
         this.propertyName          = propertyName;
         this.extrusionScaleFactor  = extrusionScaleFactor;
         HasChanged = true;
     }
 }
Exemplo n.º 5
0
 /// <summary>
 /// Changes extrusion type to "Minimum Height" and extrudes all features by
 /// the choosen property's value such that all vertices (roof) will be
 /// flat at the lowest vertex elevation (after terrain elevation taken into account).
 /// </summary>
 /// <param name="extrusionGeometryType">Option to create top and side polygons after extrusion.</param>
 /// <param name="propertyName">Name of the property to use for extrusion</param>
 /// <param name="extrusionScaleFactor">Height multiplier</param>
 public virtual void EnableMinExtrusion(ExtrusionGeometryType extrusionGeometryType, string propertyName = "height", float extrusionScaleFactor = 1)
 {
     if (extrusionType != ExtrusionType.MinHeight ||
         this.extrusionGeometryType != extrusionGeometryType ||
         this.propertyName != propertyName ||
         !Mathf.Approximately(this.extrusionScaleFactor, extrusionScaleFactor))
     {
         extrusionType = ExtrusionType.MinHeight;
         this.extrusionGeometryType = extrusionGeometryType;
         this.propertyName          = propertyName;
         this.extrusionScaleFactor  = extrusionScaleFactor;
         HasChanged = true;
     }
 }
Exemplo n.º 6
0
 /// <summary>
 /// Changes extrusion type to "Property" and extrudes all features by
 /// the choosen property's value.
 /// </summary>
 /// <param name="geometryType">Option to create top and side polygons after extrusion.</param>
 /// <param name="propertyAttribute">Name of the property to use for extrusion</param>
 /// <param name="scaleFactor">Height multiplier</param>
 public virtual void EnablePropertyExtrusion(ExtrusionGeometryType geometryType, string propertyAttribute = "height", float scaleFactor = 1)
 {
     if (extrusionType != ExtrusionType.PropertyHeight ||
         extrusionGeometryType != geometryType ||
         propertyName != propertyAttribute ||
         !Mathf.Approximately(extrusionScaleFactor, scaleFactor))
     {
         extrusionType         = ExtrusionType.PropertyHeight;
         extrusionGeometryType = geometryType;
         propertyName          = propertyAttribute;
         extrusionScaleFactor  = scaleFactor;
         HasChanged            = true;
     }
 }
Exemplo n.º 7
0
 /// <summary>
 /// Changes extrusion type to "Absolute height" and extrudes all features by
 /// the given fixed value.
 /// </summary>
 /// <param name="geometryType">Option to create top and side polygons after extrusion.</param>
 /// <param name="height">Extrusion value</param>
 /// <param name="scaleFactor">Height multiplier</param>
 public virtual void EnableAbsoluteExtrusion(ExtrusionGeometryType geometryType, float height, float scaleFactor = 1)
 {
     if (extrusionType != ExtrusionType.AbsoluteHeight ||
         extrusionGeometryType != geometryType ||
         !Mathf.Approximately(maximumHeight, height) ||
         !Mathf.Approximately(extrusionScaleFactor, scaleFactor))
     {
         extrusionType         = ExtrusionType.AbsoluteHeight;
         extrusionGeometryType = geometryType;
         maximumHeight         = height;
         extrusionScaleFactor  = scaleFactor;
         HasChanged            = true;
     }
 }
Exemplo n.º 8
0
 /// /// <summary>
 /// Changes extrusion type to "Minimum Height" and extrudes all features by
 /// the choosen property's value such that they'll be in provided range.
 /// Lower values will be increase to Minimum Height and higher values will
 /// be lowered to Maximum height.
 /// </summary>
 /// <param name="extrusionGeometryType">Option to create top and side polygons after extrusion.</param>
 /// <param name="minHeight">Lower bound to be used for extrusion</param>
 /// <param name="maxHeight">Top bound to be used for extrusion</param>
 /// <param name="extrusionScaleFactor">Height multiplier</param>
 public virtual void EnableRangeExtrusion(ExtrusionGeometryType extrusionGeometryType, float minHeight, float maxHeight, float extrusionScaleFactor = 1)
 {
     if (extrusionType != ExtrusionType.RangeHeight ||
         this.extrusionGeometryType != extrusionGeometryType ||
         !Mathf.Approximately(minimumHeight, minHeight) ||
         !Mathf.Approximately(maximumHeight, maxHeight) ||
         !Mathf.Approximately(this.extrusionScaleFactor, extrusionScaleFactor))
     {
         extrusionType = ExtrusionType.RangeHeight;
         this.extrusionGeometryType = extrusionGeometryType;
         minimumHeight             = minHeight;
         maximumHeight             = maxHeight;
         this.extrusionScaleFactor = extrusionScaleFactor;
         HasChanged = true;
     }
 }
        /// <summary>
        /// Gets the default sub layer properties for the chosen preset type.
        /// </summary>
        /// <returns>The sub layer properties.</returns>
        /// <param name="type">Type.</param>
        public static VectorSubLayerProperties GetSubLayerProperties(PresetFeatureType type)
        {
            //CoreOptions properties
            VectorPrimitiveType geometryType = VectorPrimitiveType.Polygon;
            string layerName    = "building";
            string sublayerName = "Untitled";

            //Line Geometry Options
            float lineWidth = 1.0f;

            //Geometry Extrusion Options
            ExtrusionType         extrusionType         = ExtrusionType.None;
            ExtrusionGeometryType extrusionGeometryType = ExtrusionGeometryType.RoofAndSide;
            string propertyName         = "height";
            float  extrusionScaleFactor = 1.0f;
            float  extrusionHeight      = 1.0f;

            //Filter Options
            LayerFilterCombinerOperationType combinerType = LayerFilterCombinerOperationType.Any;
            List <LayerFilter> filters = new List <LayerFilter>();


            // Material Options
            StyleTypes style = StyleTypes.Realistic;

            //Misc options
            bool buildingsWithUniqueIds           = true;
            PositionTargetType positionTargetType = PositionTargetType.TileCenter;

            //Modifiers
            List <MeshModifier>       meshModifiers       = new List <MeshModifier>();
            List <GameObjectModifier> gameObjectModifiers = new List <GameObjectModifier>();
            ColliderType colliderType = ColliderType.None;

            switch (type)
            {
            case PresetFeatureType.Buildings:
                layerName             = "building";
                geometryType          = VectorPrimitiveType.Polygon;
                extrusionType         = ExtrusionType.PropertyHeight;
                extrusionGeometryType = ExtrusionGeometryType.RoofAndSide;
                propertyName          = "height";
                style = StyleTypes.Realistic;
                break;

            case PresetFeatureType.Roads:
                layerName             = "road";
                geometryType          = VectorPrimitiveType.Line;
                lineWidth             = 1.0f;
                style                 = StyleTypes.Dark;
                extrusionType         = ExtrusionType.AbsoluteHeight;
                extrusionGeometryType = ExtrusionGeometryType.RoofAndSide;
                break;

            case PresetFeatureType.Points:
                layerName    = "poi_label";
                geometryType = VectorPrimitiveType.Point;
                break;

            case PresetFeatureType.Landuse:
                layerName    = "landuse";
                geometryType = VectorPrimitiveType.Polygon;
                style        = StyleTypes.Color;
                break;

            case PresetFeatureType.Custom:
                layerName    = "";
                geometryType = VectorPrimitiveType.Custom;
                style        = StyleTypes.Custom;
                break;

            default:
                break;
            }

            VectorSubLayerProperties _properties = new VectorSubLayerProperties();

            _properties.presetFeatureType = type;

            _properties.coreOptions = new CoreVectorLayerProperties
            {
                isActive      = true,
                layerName     = layerName,
                geometryType  = geometryType,
                snapToTerrain = true,
                combineMeshes = false,
                sublayerName  = sublayerName
            };

            _properties.lineGeometryOptions = new LineGeometryOptions
            {
                Width = lineWidth
            };

            _properties.extrusionOptions = new GeometryExtrusionOptions
            {
                extrusionType         = extrusionType,
                extrusionGeometryType = extrusionGeometryType,
                propertyName          = propertyName,
                extrusionScaleFactor  = extrusionScaleFactor,
                maximumHeight         = extrusionHeight
            };

            _properties.filterOptions = new VectorFilterOptions
            {
                combinerType = combinerType,
                filters      = filters
            };

            _properties.materialOptions = new GeometryMaterialOptions
            {
                style           = style,
                colorStyleColor = Constants.GUI.Colors.EDITOR_FEATURE_DEFAULT_COLOR
            };
            _properties.materialOptions.SetDefaultMaterialOptions();
            _properties.buildingsWithUniqueIds = buildingsWithUniqueIds;
            _properties.moveFeaturePositionTo  = positionTargetType;
            _properties.MeshModifiers          = meshModifiers;
            _properties.GoModifiers            = gameObjectModifiers;
            _properties.colliderOptions        = new ColliderOptions
            {
                colliderType = colliderType
            };

            return(_properties);
        }
Exemplo n.º 10
0
 /// <summary>
 /// Initializes the extrude algorithm.
 /// </summary>
 /// <param name="pDistance">The distance to applies.</param>
 /// <param name="pExtrusionType">The type of extrusion.</param>
 public Extrude(float pDistance, ExtrusionType pExtrusionType = ExtrusionType.World_Up)
 {
     this.Distance      = pDistance;
     this.ExtrusionType = pExtrusionType;
 }
Exemplo n.º 11
0
        /// <summary>
        /// Выдавливание по направлению, глубине и выдавливаемому объекту
        /// </summary>
        /// <param name="doc3DPart">Kompas document 3D part</param>
        /// <param name="extrusionType">Extrusion type</param>
        /// <param name="extrudableEntity">Extrudable entity</param>
        /// <param name="direction">Extrusion direction</param>
        /// <param name="depth">Extrusion depth</param>
        public KompasExtrusion(KompasExtrusionParameters parameters,
                               ExtrusionType extrusionType)
        {
            if (parameters.Document3DPart == null)
            {
                LastErrorCode = ErrorCodes.KompasFigureNotSet;
                return;
            }

            var entity = (ksEntity)parameters.Document3DPart.NewEntity(
                (short)parameters.ExtrusionType);

            if (entity == null)
            {
                LastErrorCode = ErrorCodes.ExtrusionEntityCreationError;
                return;
            }

            if (parameters.ExtrusionType != Obj3dType.o3d_baseLoft)
            {
                if (parameters.ExtrudableEntity == null)
                {
                    LastErrorCode = ErrorCodes.ExtrudableEntityNotSet;
                    return;
                }
            }

            bool normalDirection = true;

            if (extrusionType == ExtrusionType.ByEntity)
            {
                if (parameters.Direction == Direction_Type.dtNormal)
                {
                    normalDirection = true;
                }
                else if (parameters.Direction == Direction_Type.dtReverse)
                {
                    normalDirection = false;
                }
                else
                {
                    LastErrorCode = ErrorCodes.ExtrusionDirectionNotSupported;
                    return;
                }

                if (parameters.Depth == default(double) ||
                    !DoubleValidator.Validate(parameters.Depth))
                {
                    LastErrorCode = ErrorCodes.ArgumentInvalid;
                    return;
                }
            }

            var faceCollection = (ksEntityCollection)parameters.Document3DPart.
                                 EntityCollection((short)Obj3dType.o3d_face);

            _facesCountBeforeExtrusion = faceCollection.GetCount();

            switch (extrusionType)
            {
            case ExtrusionType.ByEntity:
                if (!CreateExtrusionByDirection(
                        entity,
                        parameters,
                        normalDirection))
                {
                    return;
                }
                break;

            case ExtrusionType.BySketchesCollection:
                if (!CreateExtrusionBySketchCollection(
                        entity,
                        parameters))
                {
                    return;
                }
                break;
            }

            _doc3DPart = parameters.Document3DPart;

            faceCollection.refresh();
            _facesCountAfterExtrusion = faceCollection.GetCount();

            if (_facesCountAfterExtrusion == _facesCountBeforeExtrusion)
            {
                LastErrorCode = ErrorCodes.ExtrusionFacesCountWrong;
                return;
            }
        }
Exemplo n.º 12
0
 /// <summary>
 /// Default constructor.
 /// </summary>
 public Extrude(float pDistance)
     : base("extrude", new List <AArgument> () { new Float(pDistance) })
 {
     this.ExtrusionType = ExtrusionType.World_Up;
     this.Distance      = pDistance;
 }
Exemplo n.º 13
0
 public Extrude(ExtrusionType pExtrusionType, float pDistance)
     : base("extrude", new List <AArgument> () { new Enumeration <ExtrusionType>(pExtrusionType), new Float(pDistance) })
 {
     this.ExtrusionType = pExtrusionType;
     this.Distance      = pDistance;
 }
Exemplo n.º 14
0
        /// <summary>
        /// Выдавливание по направлению, глубине и выдавливаемому объекту
        /// </summary>
        /// <param name="doc3DPart">Kompas document 3D part</param>
        /// <param name="extrusionType">Extrusion type</param>
        /// <param name="extrudableEntity">Extrudable entity</param>
        /// <param name="direction">Extrusion direction</param>
        /// <param name="depth">Extrusion depth</param>
        public KompasExtrusion(KompasExtrusionParameters parameters, ExtrusionType extrusionType)
        {
            if (parameters.Document3DPart == null)
            {
                LastErrorCode = ErrorCodes.KompasFigureNotSet;
                return;
            }

            // Extrusion entity
            var entity = (ksEntity)parameters.Document3DPart.NewEntity((short)parameters.ExtrusionType);

            if (entity == null)
            {
                LastErrorCode = ErrorCodes.ExtrusionEntityCreationError;
                return;
            }

            // ExtrudABLE entity isn't using ONLY in base loft
            if (parameters.ExtrusionType != Obj3dType.o3d_baseLoft)
            {
                if (parameters.ExtrudableEntity == null)
                {
                    LastErrorCode = ErrorCodes.ExtrudableEntityNotSet;
                    return;
                }
            }

            // Получение направление выдавливания
            bool normalDirection = true;

            if (extrusionType == ExtrusionType.ByEntity)
            {
                if (parameters.Direction == Direction_Type.dtNormal)
                {
                    normalDirection = true;
                }
                else if (parameters.Direction == Direction_Type.dtReverse)
                {
                    normalDirection = false;
                }
                else
                {
                    LastErrorCode = ErrorCodes.ExtrusionDirectionNotSupported;
                    return;
                }

                // Глубина не должна быть равна нулю
                if (parameters.Depth == default(double) || !DoubleValidator.Validate(parameters.Depth))
                {
                    LastErrorCode = ErrorCodes.ArgumentInvalid;
                    return;
                }
            }

            // Entity faces count before extrusion
            var faceCollection = (ksEntityCollection)parameters.Document3DPart.EntityCollection((short)Obj3dType.o3d_face);

            _facesCountBeforeExtrusion = faceCollection.GetCount();

            switch (extrusionType)
            {
            case ExtrusionType.ByEntity:
                if (!CreateExtrusionByDirection(entity, parameters, normalDirection))
                {
                    return;
                }
                break;

            case ExtrusionType.BySketchesCollection:
                if (!CreateExtrusionBySketchCollection(entity, parameters))
                {
                    return;
                }
                break;
            }

            _doc3DPart = parameters.Document3DPart;

            // Get faces count after extrusion
            faceCollection.refresh();
            _facesCountAfterExtrusion = faceCollection.GetCount();

            if (_facesCountAfterExtrusion == _facesCountBeforeExtrusion)
            {
                LastErrorCode = ErrorCodes.ExtrusionFacesCountWrong;
                return;
            }
        }