SetAssetParamValue(DB.Visual.Asset asset, string name, Rhino.Display.ColorRGBA value, bool removeAsset = true) { var prop = asset.FindByName(name); switch (prop) { case DB.Visual.AssetPropertyDoubleArray3d tdProp: if (removeAsset) { tdProp.RemoveConnectedAsset(); } tdProp.SetValueAsXYZ(new DB.XYZ( value.R, value.G, value.B )); break; case DB.Visual.AssetPropertyDoubleArray4d fdProp: if (removeAsset) { fdProp.RemoveConnectedAsset(); } fdProp.SetValueAsDoubles(new double[] { value.R, value.G, value.B, value.A }); break; } }
SetTextureDataFromAssetParam(IGH_DataAccess DA, string paramName, DB.Visual.Asset asset, string schemaPropName) { // find param if (asset.FindByName(schemaPropName) is DB.Visual.AssetProperty prop) { var connectedAsset = prop.GetSingleConnectedAsset(); if (connectedAsset != null) { var assetData = AssetData.GetSchemaDataType( // Asset schema names end in "Schema" e.g. "UnifiedBitmapSchema" // They do not match the names for API wrapper // types e.g. "DB.Visual.UnifiedBitmap" // lets remove the extra stuff connectedAsset.Name.Replace("Schema", "") ); if (assetData != null) { SetAssetDataFromAsset(assetData, connectedAsset); DA.SetData(paramName, assetData); } } } }
AssetParamHasNestedAsset(DB.Visual.Asset asset, string name) { // find param var prop = asset.FindByName(name); return(prop != null && prop.GetSingleConnectedAsset() != null); }
SetDataFromAssetParam(IGH_DataAccess DA, string paramName, DB.Visual.Asset asset, string schemaPropName) { // find param if (asset.FindByName(schemaPropName) is DB.Visual.AssetProperty prop) { // determine data type, and set output DA.SetData(paramName, ConvertFromAssetPropertyValue(prop)); } }
GetAssetParamValue(DB.Visual.Asset asset, string name) { // find param var prop = asset.FindByName(name); if (prop != null) { return(ConvertFromAssetPropertyValue(prop)); } return(null); }
SetAssetParamValue(DB.Visual.Asset asset, string name, string value, bool removeAsset = true) { var prop = asset.FindByName(name); switch (prop) { case DB.Visual.AssetPropertyString stringProp: if (removeAsset) { stringProp.RemoveConnectedAsset(); } stringProp.Value = value; break; } }
SetAssetDataFromAsset(AssetData assetData, DB.Visual.Asset asset) { foreach (var assetPropInfo in assetData.GetAssetProperties()) { // determine schema prop name associated with with asset property string schemaPropName = assetData.GetSchemaPropertyName(assetPropInfo); if (schemaPropName is null) { continue; } // find param var prop = asset.FindByName(schemaPropName); if (prop is null) { continue; } // determine data type, and set output assetPropInfo.SetValue(assetData, ConvertFromAssetPropertyValue(prop)); } }
SetAssetParamValue(DB.Visual.Asset asset, string name, double value, bool removeAsset = true) { var prop = asset.FindByName(name); switch (prop) { case DB.Visual.AssetPropertyDouble doubleProp: if (removeAsset) { doubleProp.RemoveConnectedAsset(); } doubleProp.Value = value; break; case DB.Visual.AssetPropertyDistance distProp: if (removeAsset) { distProp.RemoveConnectedAsset(); } distProp.Value = value; break; } }
SetAssetParamValue(DB.Visual.Asset asset, string name, double value, bool removeAsset = true) { var prop = asset.FindByName(name); switch (prop) { case DB.Visual.AssetPropertyDouble doubleProp: if (removeAsset) { doubleProp.RemoveConnectedAsset(); } doubleProp.Value = value; break; case DB.Visual.AssetPropertyDistance distProp: if (removeAsset) { distProp.RemoveConnectedAsset(); } distProp.Value = value * Rhino.RhinoMath.UnitScale(Rhino.RhinoDoc.ActiveDoc?.ModelUnitSystem ?? Rhino.UnitSystem.Meters, distProp.DisplayUnitType.ToUnitSystem()); break; } }
SetAssetParamTexture(DB.Visual.Asset asset, string name, TextureData value) { var prop = asset.FindByName(name); prop.RemoveConnectedAsset(); prop.AddConnectedAsset(value.Schema); var textureAsset = prop.GetSingleConnectedAsset(); foreach (var assetPropInfo in value.GetAssetProperties()) { string schemaPropName = value.GetSchemaPropertyName(assetPropInfo); if (schemaPropName is null) { continue; } object fieldValue = assetPropInfo.GetValue(value); switch (fieldValue) { case bool boolVal: SetAssetParamValue(textureAsset, schemaPropName, boolVal); break; case string stringVal: SetAssetParamValue(textureAsset, schemaPropName, stringVal); break; case double doubleVal: SetAssetParamValue(textureAsset, schemaPropName, doubleVal); break; case Rhino.Display.ColorRGBA colorVal: SetAssetParamValue(textureAsset, schemaPropName, colorVal); break; } } }
private void UpdateAssetFromData(DB.Visual.Asset editableAsset, T assetData) { foreach (var assetPropInfo in _assetData.GetAssetProperties()) { // skip name because it is already set if (assetPropInfo.Name == "Name") { continue; } // determine schema prop name associated with with asset property string schemaPropName = _assetData.GetSchemaPropertyName(assetPropInfo); if (schemaPropName is null) { continue; } bool hasValue = assetData.IsMarked(assetPropInfo.Name); if (hasValue) { object inputValue = assetPropInfo.GetValue(assetData); try { switch (inputValue) { case bool boolVal: SetAssetParamValue(editableAsset, schemaPropName, boolVal); break; case string stringVal: SetAssetParamValue(editableAsset, schemaPropName, stringVal); break; case double dblVal: SetAssetParamValue(editableAsset, schemaPropName, dblVal); break; case Rhino.Display.ColorRGBA colorVal: SetAssetParamValue(editableAsset, schemaPropName, colorVal); break; case TextureData textureVal: SetAssetParamTexture(editableAsset, schemaPropName, textureVal); break; case AssetPropertyDouble1DMap d1dMapVal: if (d1dMapVal.HasTexture) { SetAssetParamTexture(editableAsset, schemaPropName, d1dMapVal.TextureValue); } else { SetAssetParamValue(editableAsset, schemaPropName, d1dMapVal.Value); } break; case AssetPropertyDouble4DMap d4dMapVal: if (d4dMapVal.HasTexture) { SetAssetParamTexture(editableAsset, schemaPropName, d4dMapVal.TextureValue); } else { SetAssetParamValue(editableAsset, schemaPropName, d4dMapVal.ToColorRGBA()); } break; } } catch (Exception ex) { AddRuntimeMessage( GH_RuntimeMessageLevel.Error, $"Can not set value of {inputValue} on schema property {schemaPropName}" + $" | Revit API Error: {ex.Message}" ); } } var schemaTogglePropName = _assetData.GetSchemaTogglePropertyName(assetPropInfo); if (schemaTogglePropName != null) { SetAssetParamValue(editableAsset, schemaTogglePropName, hasValue); } } }
protected void SetOutputsFromAsset(IGH_DataAccess DA, DB.Visual.Asset asset) { // make sure the schemas match if (asset.Name.Replace("Schema", "") != _assetData.Schema) { AddRuntimeMessage( GH_RuntimeMessageLevel.Warning, $"Incorrect asset schema \"{asset.Name}\"" ); return; } foreach (var assetPropInfo in _assetData.GetAssetProperties()) { // determine schema prop name associated with with asset property string schemaPropName = _assetData.GetSchemaPropertyName(assetPropInfo); if (schemaPropName is null) { continue; } // determine which output parameter to set the value on var paramInfo = _assetData.GetGHParameterInfo(assetPropInfo); if (paramInfo is null) { continue; } // check the toggle if available and output only when toggle // is active. otherwise we assume that the property has no value bool sendValueToOutput = true; var schemaTogglePropName = _assetData.GetSchemaTogglePropertyName(assetPropInfo); if (schemaTogglePropName != null) { // then get the asset property object and check its boolean value // if false, the output will not be set sendValueToOutput = ((bool?)GetAssetParamValue(asset, schemaTogglePropName)) == true; } if (sendValueToOutput) { switch (paramInfo.ExtractMethod) { case ExtractMethod.AssetOnly: // set the value from asset to the output param SetTextureDataFromAssetParam(DA, paramInfo.Name, asset, schemaPropName); break; case ExtractMethod.ValueOnly: // to the same to value first case ExtractMethod.ValueFirst: // set the value from asset to the output param SetDataFromAssetParam(DA, paramInfo.Name, asset, schemaPropName); break; case ExtractMethod.AssetFirst: // first check whether asset param has a nested asset if (AssetParamHasNestedAsset(asset, schemaPropName)) { SetTextureDataFromAssetParam(DA, paramInfo.Name, asset, schemaPropName); } else { SetDataFromAssetParam(DA, paramInfo.Name, asset, schemaPropName); } break; } } else { DA.SetData(paramInfo.Name, null); } } }