/// <summary> /// Disable mesh extrusion for the features in this layer. /// </summary> public virtual void DisableExtrusion() { if (extrusionType != ExtrusionType.None) { extrusionType = ExtrusionType.None; HasChanged = true; } }
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; }
/// <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; } }
/// <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; } }
/// <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; } }
/// <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; } }
/// /// <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); }
/// <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; }
/// <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; } }
/// <summary> /// Default constructor. /// </summary> public Extrude(float pDistance) : base("extrude", new List <AArgument> () { new Float(pDistance) }) { this.ExtrusionType = ExtrusionType.World_Up; this.Distance = pDistance; }
public Extrude(ExtrusionType pExtrusionType, float pDistance) : base("extrude", new List <AArgument> () { new Enumeration <ExtrusionType>(pExtrusionType), new Float(pDistance) }) { this.ExtrusionType = pExtrusionType; this.Distance = pDistance; }
/// <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; } }