/// <summary> /// Adds the draw call (single model drawing). Calculates target mesh level of detail and picks a proper meshes to draw (based on a material slot index). /// </summary> /// <param name="model">The model mesh to render. Cannot be null.</param> /// <param name="materialSlotIndex">The material slot index to draw.</param> /// <param name="material">The material to apply during rendering. Cannot be null.</param> /// <param name="lodIndex">The model Level Of Detail to draw (zero-based index).</param> /// <param name="world">The world matrix used to transform mesh geometry during rendering. Use <see cref="Matrix.Identity"/> to render mesh 'as is'.</param> /// <param name="flags">The static flags. Used to describe type of the geometry.</param> /// <param name="receiveDecals">True if rendered geometry can receive decals, otherwise false.</param> public void AddDrawCall(Model model, int materialSlotIndex, MaterialBase material, int lodIndex, ref Matrix world, StaticFlags flags = StaticFlags.None, bool receiveDecals = true) { if (model == null) { throw new ArgumentNullException(nameof(model)); } // Pick a proper LOD var lods = model.LODs; if (lods == null || lods.Length < lodIndex || lodIndex < 0) { return; } var lod = lods[lodIndex]; // Draw meshes for (int i = 0; i < lod.Meshes.Length; i++) { if (lod.Meshes[i].MaterialSlotIndex == materialSlotIndex) { AddDrawCall(lod.Meshes[i], material, ref world, flags); } } }
public static MaterialParameter[] GetPublicParameters(MaterialBase material) { var materialParameters = material.Parameters; int parameterCount = 0; for (int i = 0; i < materialParameters.Length; i++) { if (!materialParameters[i].IsPublic) { continue; } parameterCount++; } var publicParameters = new MaterialParameter[parameterCount]; for (int i = 0, j = 0; i < materialParameters.Length; i++) { if (!materialParameters[i].IsPublic) { continue; } publicParameters[j] = materialParameters[i]; j++; } return(publicParameters); }
private void InitDrawing() { // Load content (but async - don't wait and don't block execution) _modelTranslateAxis = FlaxEngine.Content.LoadAsyncInternal <Model>("Editor/Gizmo/TranslateAxis"); _modelScaleAxis = FlaxEngine.Content.LoadAsyncInternal <Model>("Editor/Gizmo/ScaleAxis"); _modelBox = FlaxEngine.Content.LoadAsyncInternal <Model>("Editor/Gizmo/WireBox"); _modelCircle = FlaxEngine.Content.LoadAsyncInternal <Model>("Editor/Gizmo/WireCircle"); _materialAxisX = FlaxEngine.Content.LoadAsyncInternal <MaterialInstance>("Editor/Gizmo/MaterialAxisX"); _materialAxisY = FlaxEngine.Content.LoadAsyncInternal <MaterialInstance>("Editor/Gizmo/MaterialAxisY"); _materialAxisZ = FlaxEngine.Content.LoadAsyncInternal <MaterialInstance>("Editor/Gizmo/MaterialAxisZ"); _materialAxisFocus = FlaxEngine.Content.LoadAsyncInternal <MaterialInstance>("Editor/Gizmo/MaterialAxisFocus"); _materialWire = FlaxEngine.Content.LoadAsyncInternal <MaterialBase>("Editor/Gizmo/MaterialWire"); _materialWireFocus = FlaxEngine.Content.LoadAsyncInternal <MaterialBase>("Editor/Gizmo/MaterialWireFocus"); // Ensure that every asset was loaded if (_modelTranslateAxis == null || _modelScaleAxis == null || _modelBox == null || _modelCircle == null || _materialAxisX == null || _materialAxisY == null || _materialAxisZ == null || _materialAxisFocus == null || _materialWire == null || _materialWireFocus == null ) { // Error Application.Fatal("Failed to load Transform Gizmo resources."); } }
/// <summary> /// Initializes a new instance of the <see cref="ViewportDebugDrawData" /> class. /// </summary> /// <param name="actorsCapacity">The actors capacity.</param> public ViewportDebugDrawData(int actorsCapacity = 0) { _actors = new List <IntPtr>(actorsCapacity); _highlights = new List <HighlightData>(actorsCapacity); _highlightMaterial = FlaxEngine.Content.LoadAsyncInternal <MaterialBase>(EditorAssets.HighlightMaterial); _highlightTrianglesModel = FlaxEngine.Content.CreateVirtualAsset <Model>(); }
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { switch ((BatchType)((e.Source as ComboBox).SelectedItem)) { case BatchType.Metal: matetrialRepository = new MetalRepository(); break; case BatchType.Plastic: matetrialRepository = new PlasticRepository(); break; case BatchType.PurchasedParts: matetrialRepository = new PurchasedPartsRepository(); break; case BatchType.Accessories: matetrialRepository = new AccessoriesRepository(); break; case BatchType.ProjectCost: matetrialRepository = new ProjectCostRepository(); break; case BatchType.CostAdjustment: matetrialRepository = new CostAdjustmentRepository(); break; default: break; } this.DataContext = matetrialRepository.CreateViewModel(); editMetal = null; }
/// <summary> /// Initializes a new instance of the <see cref="ViewportDebugDrawData" /> class. /// </summary> /// <param name="actorsCapacity">The actors capacity.</param> public ViewportDebugDrawData(int actorsCapacity = 0) { _actors = new List <IntPtr>(actorsCapacity); _highlights = new List <HighlightData>(actorsCapacity); _highlightMaterial = EditorAssets.Cache.HighlightMaterialInstance; _highlightTrianglesModel = FlaxEngine.Content.CreateVirtualAsset <Model>(); }
/// <summary> /// Adds the draw call. Calculates target mesh level of detail and picks a proper meshes to draw (based on a material slot index). /// </summary> /// <param name="model">The model mesh to render. Cannot be null.</param> /// <param name="materialSlotIndex">The material slot index to draw.</param> /// <param name="material">The material to apply during rendering. Cannot be null.</param> /// <param name="bounds">The bounds of the model instance that is being drawn (model instance bounds).</param> /// <param name="world">The world matrix used to transform mesh geometry during rendering. Use <see cref="Matrix.Identity"/> to render mesh 'as is'.</param> /// <param name="flags">The static flags. Used to describe type of the geometry.</param> public void AddDrawCall(Model model, int materialSlotIndex, MaterialBase material, ref BoundingSphere bounds, ref Matrix world, StaticFlags flags = StaticFlags.None) { if (model == null) { throw new ArgumentNullException(nameof(model)); } // Pick a proper LOD int lodIndex = RenderTask.Internal_ComputeModelLOD(model.unmanagedPtr, ref bounds, IntPtr.Zero); var lods = model.LODs; if (lods == null || lods.Length < lodIndex || lodIndex < 0) { return; } var lod = lods[lodIndex]; // Draw meshes for (int i = 0; i < lod.Meshes.Length; i++) { if (lod.Meshes[i].MaterialSlotIndex == materialSlotIndex) { AddDrawCall(lod.Meshes[i], material, ref world, flags); } } }
/// <summary> /// Removes the post fx material from the settings. /// </summary> /// <param name="material">The material.</param> public void RemovePostFxMaterial(MaterialBase material) { var materials = PostFxMaterials; materials.RemoveMaterial(material); PostFxMaterials = materials; }
/// <summary> /// Adds the post fx material to the settings. /// </summary> /// <param name="material">The material.</param> public void AddPostFxMaterial(MaterialBase material) { var materials = PostFxMaterials; materials.AddMaterial(material); PostFxMaterials = materials; }
/// <summary> /// Adds the draw call (single terrain patch drawing). /// </summary> /// <param name="terrain">The terrain to render. Cannot be null.</param> /// <param name="patchCoord">The terrain patch coordinates.</param> /// <param name="material">The material to apply during rendering. Cannot be null.</param> /// <param name="lodIndex">The geometry Level Of Detail index.</param> public void AddDrawCall(Terrain terrain, ref Int2 patchCoord, MaterialBase material, int lodIndex = -1) { if (terrain == null) { throw new ArgumentNullException(nameof(terrain)); } if (material == null) { throw new ArgumentNullException(nameof(material)); } for (int i = 0; i < 16; i++) { var drawCall = new RenderTask.DrawCall { Type = RenderTask.DrawCall.Types.TerrainChunk, Flags = StaticFlags.None, LodIndex = lodIndex, Index0 = patchCoord, Index1 = new Int2(i % 4, i / 4), Object = terrain.unmanagedPtr, Material = Object.GetUnmanagedPtr(material), }; _drawCalls.Add(drawCall); } }
public static Dictionary <Guid, RecipeInformation> GetValue(List <BaseItem> ItemList) { //持っている装備を抽出 BaseItem[] equips = ItemList.Where(i => i.IType == ItemType.Weapon || i.IType == ItemType.Shield).ToArray(); //持っている強化素材を抽出 long[] materials = ItemList.Where(i => (i.GetType() == typeof(MaterialBase) && ((MaterialBase)i).MType == MaterialType.Strength)).Select(i => i.ObjNo).Distinct().ToArray(); //強化素材の一覧を抽出 MaterialBase smate = TableMaterial.GetItem(MaterialType.Strength); //TableStrengthData[] datas = Array.FindAll(Table, i => i.RType == type); Dictionary <Guid, RecipeInformation> result = new Dictionary <Guid, RecipeInformation>(); foreach (BaseItem d in equips) { int cnt = 0; if (materials.Length > 0) { foreach (long m in materials) { MaterialBase mb = TableMaterial.GetItem(m, false); if (d.StrengthValue < mb.StrengthValue) { RecipeInformation rec = new RecipeInformation(); rec.Weight = d.Weight; rec.RecipeTargetName = d.DisplayNameNormal; rec.RecipeTargetNo = d.ObjNo; rec.RecipeTargetType = d.IType; rec.SetRecipeValue(d.ObjNo, d.IType, 1, d.StrengthValue); rec.SetRecipeValue(m, ItemType.Material, 1, d.StrengthValue + 1); rec.IsStrength = true; rec.TargetStrength = d; result.Add(rec.Name, rec); cnt++; } } } if (cnt == 0) { RecipeInformation rec = new RecipeInformation(); rec.RecipeTargetName = d.DisplayNameNormal; rec.RecipeTargetNo = d.ObjNo; rec.RecipeTargetType = d.IType; rec.SetRecipeValue(d.ObjNo, d.IType, 1, d.StrengthValue); rec.SetRecipeValue(smate.ObjNo, ItemType.Material, 1, d.StrengthValue + 1); rec.IsStrength = true; rec.TargetStrength = d; result.Add(rec.Name, rec); } } return(result); }
public void DrawPostFxMaterial(MaterialBase material, RenderTarget output, RenderTarget input, SceneRenderTask sceneRenderTask) { #if UNIT_TEST_COMPILANT throw new NotImplementedException("Unit tests, don't support methods calls. Only properties can be get or set."); #else Internal_DrawPostFxMaterial2(unmanagedPtr, GetUnmanagedPtr(material), GetUnmanagedPtr(output), GetUnmanagedPtr(input), ref sceneRenderTask.View, Object.GetUnmanagedPtr(sceneRenderTask.Buffers)); #endif }
public void DrawPostFxMaterial(MaterialBase material, RenderTargetView view, ref Viewport viewport, RenderTarget input = null) { #if UNIT_TEST_COMPILANT throw new NotImplementedException("Unit tests, don't support methods calls. Only properties can be get or set."); #else Internal_DrawPostFxMaterial3(unmanagedPtr, Object.GetUnmanagedPtr(material), view, ref viewport, Object.GetUnmanagedPtr(input)); #endif }
internal MaterialParameter(int hash, MaterialBase material, int index, MaterialParameterType type, bool isPublic) { _hash = hash; _material = material; _index = index; _type = type; _isPublic = isPublic; }
public override void Calculate(MaterialBase material) { var projectCost = material as ProjectCost; var sum = viewModel.Details.Where(x => x.id != 18).Aggregate(0d, (totoal, x) => totoal + Convert.ToDouble(x.cost)); viewModel.Details.Where(x => x.id == 18).First().cost = sum.ToString(); }
public override void Calculate(MaterialBase material) { var parts = material as CostAdjustment; if (parts != null) { parts.US = Math.Round(parts.RMB / Sys.ExchangeRate[0].Current, 2); } }
public override void Calculate(MaterialBase material) { var parts = material as PurchasedParts; if (parts != null) { parts.sum = Math.Round(parts.qty * parts.unitPrice, 2); parts.remark = Math.Round(parts.sum / Sys.ExchangeRate[0].Current, 2); } }
public static MaterialBase GetItem(MaterialType type) { TableMaterialData data = Array.Find(Table, i => i.Mtype == type); MaterialBase item = new MaterialBase(); item.Initialize(); AttachData(item, data, false); return(item); }
public static MaterialBase GetItem(long objNo, bool isRandomValue) { TableMaterialData data = Array.Find(Table, i => i.ObjNo == objNo); MaterialBase item = new MaterialBase(); item.Initialize(); AttachData(item, data, isRandomValue); return(item); }
private void GetAssets() { if (_planeModel) { return; } _planeModel = FlaxEngine.Content.LoadAsyncInternal <Model>("Editor/Primitives/Plane"); _highlightTerrainMaterial = FlaxEngine.Content.LoadAsyncInternal <MaterialBase>(EditorAssets.HighlightTerrainMaterial); _highlightMaterial = EditorAssets.Cache.HighlightMaterialInstance; }
public PostFxRenderer(MaterialBase material, Func <Int2> sizeGetter) : base(sizeGetter) { if (!material.IsPostFx) { throw new ArgumentException("PostFx Material expected", nameof(material)); } if (!material) { throw new ArgumentNullException(nameof(material)); } Material = material; }
private static void AttachData(MaterialBase item, TableMaterialData data, bool isRandomValue) { item.ObjNo = data.ObjNo; item.MType = data.Mtype; if (GameStateInformation.IsEnglish == false) { item.DisplayName = data.DisplayName; item.Description = data.Description; } else { item.DisplayName = data.DisplayNameEn; item.Description = data.DescriptionEn; } item.ThrowDexterity = data.ThrowDexterity; item.StrengthValue = data.Strength; if (isRandomValue == false) { return; } int optioncount = CommonFunction.ConvergenceRandom(data.OptionAddStart, data.OptionAddContinue, data.OptionAddReduce); int index = 0; for (int i = 0; i < optioncount; i++) { //30回回して終わらなかったら強制終了 if (index > 30) { break; } index++; uint rnd = CommonFunction.GetRandomUInt32(); BaseOption newOpt = TableOptionCommon.GetValue(data.OBType, rnd, data.OptionPowStart, data.OptionPowContinue, data.OptionPowReduce); //同じオプションがすでに含まれていたらもう一度算出 if (CommonFunction.IsNull(newOpt) == true) { i--; continue; } BaseOption containOpt = item.Options.Find(o => o.ObjNo == newOpt.ObjNo); if (CommonFunction.IsNull(containOpt) == false) { i--; continue; } item.Options.Add(newOpt); } }
private void DataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) { editMetal = e.Row.Item as MaterialBase; //editMetal.EndEdit(); try { var content = (e.EditingElement as TextBox).Text; matetrialRepository.Calculate(editMetal, e.Column, content); } catch (Exception ex) { //log } }
public override void Calculate(MaterialBase material) { var metal = material as Metal; if (metal != null) { var cost = Sys.metalMaterials.Find(x => x.id == metal.materialId)?.cost ?? 0; var t_cost = Sys.metalTonnages.Find(x => x.id == metal.tonnageId)?.cost ?? 0; //volume metal.m_volume = Math.Round((metal.m_length + 10) * (metal.m_width + 10) * metal.m_thick, 2); //m_weigth metal.m_weigth = Math.Round(metal.m_volume * 0.00000785, 3); //loss metal.loss = Math.Round(metal.m_weigth * 0.03, 4); // 加工成本 metal.finishedCost1 = Math.Round(metal.m_workStation * metal.qty * t_cost, 2); //材料成本 metal.costOfMeterial1 = Math.Round((metal.m_weigth + metal.loss) * cost * metal.qty, 2); //total(材料成本 + 加工成本 + CMF)/ 良率 metal.total1 = Math.Round((metal.costOfMeterial1 + metal.finishedCost1 + metal.CMF1) / (metal.yield / 100), 2); if (double.IsNaN(metal.total1) || double.IsInfinity(metal.total1)) { metal.total1 = 0; } // 加工成本2 metal.finishedCost2 = Math.Round(metal.finishedCost1 / Sys.ExchangeRate.First().Current, 2); //材料成本2 metal.costOfMeterial2 = Math.Round(metal.costOfMeterial1 / Sys.ExchangeRate.First().Current, 2); //CMF2 metal.CMF2 = Math.Round(metal.CMF1 / Sys.ExchangeRate.First().Current, 2); //total2 metal.total2 = Math.Round(metal.total1 / Sys.ExchangeRate.First().Current, 2); if (double.IsNaN(metal.total2) || double.IsInfinity(metal.total2)) { metal.total2 = 0; } } }
public static List <MaterialBase> GetItems(MaterialType type) { TableMaterialData[] datas = Array.FindAll(Table, i => i.Mtype == type); List <MaterialBase> list = new List <MaterialBase>(); foreach (TableMaterialData data in datas) { MaterialBase item = new MaterialBase(); item.Initialize(); AttachData(item, data, false); list.Add(item); } return(list); }
/// <inheritdoc /> public override void OnActivated() { base.OnActivated(); _highlightMaterial = EditorAssets.Cache.HighlightMaterialInstance; if (_needSync) { _needSync = false; // Sync with main transform gizmo var mainTransformGizmo = Editor.Instance.MainTransformGizmo; ActiveMode = mainTransformGizmo.ActiveMode; ActiveTransformSpace = mainTransformGizmo.ActiveTransformSpace; mainTransformGizmo.ModeChanged += () => ActiveMode = mainTransformGizmo.ActiveMode; mainTransformGizmo.TransformSpaceChanged += () => ActiveTransformSpace = mainTransformGizmo.ActiveTransformSpace; } }
/// <inheritdoc /> public override void OnActivated() { base.OnActivated(); _highlightMaterial = FlaxEngine.Content.LoadAsyncInternal <MaterialBase>(EditorAssets.HighlightMaterial); if (_needSync) { _needSync = false; // Sync with main transform gizmo var mainTransformGizmo = Editor.Instance.MainTransformGizmo; ActiveMode = mainTransformGizmo.ActiveMode; ActiveTransformSpace = mainTransformGizmo.ActiveTransformSpace; mainTransformGizmo.ModeChanged += () => ActiveMode = mainTransformGizmo.ActiveMode; mainTransformGizmo.TransformSpaceChanged += () => ActiveTransformSpace = mainTransformGizmo.ActiveTransformSpace; } }
public virtual void Calculate(MaterialBase materialBase, DataGridColumn column, Object value, Dictionary <string, ColumnProp> props) { try { var metal = materialBase as T; var propName = props.Where(x => x.Value.description == column.Header.ToString()).First(); System.Reflection.PropertyInfo prop = materialBase.GetType().GetProperty(propName.Key, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); var val = Convert.ChangeType(value, prop.PropertyType); prop.SetValue(metal, val, null); Calculate(materialBase); metal.NotifyAllProps(); } catch (Exception ex) { //log } }
// Event handler for change in selected list box item. private void lbxMainStocks_SelectedIndexChanged(object sender, EventArgs e) { // Get the selected material. MaterialBase selectedMaterial = (MaterialBase)lbxMainStocks.SelectedItem; // Get the stock in the main storeroom. decimal onHand = _services.AMS.Storeroom(new StoreroomService.StoreroomStocks { MaterialSid = selectedMaterial.MaterialSid }).Value[0].StockOnHand; // Change the rich text box below the stocks list to display information about the selected material. rtbStockInfo.Text = $"ID:\t\t{selectedMaterial.MaterialSid}\n" + $"Unit:\t\t{selectedMaterial.UnitOfMeasure}\n" + $"Quantity:\t\t{onHand}\n" + $"Unit Price:\t${selectedMaterial.UnitCost}"; // Limit the maximum transferable quantity to the stock on hand. numTransferQuantity.Maximum = onHand; // Reset the transfer quantity. numTransferQuantity.Value = 0; }
/// <summary> /// Adds the draw call. /// </summary> /// <param name="mesh">The mesh to render. Cannot be null.</param> /// <param name="material">The material to apply during rendering. Cannot be null.</param> /// <param name="world">The world matrix used to transform mesh geometry during rendering. Use <see cref="Matrix.Identity"/> to render mesh 'as is'.</param> /// <param name="flags">The static flags. Used to describe type of the geometry.</param> public void AddDrawCall(Mesh mesh, MaterialBase material, ref Matrix world, StaticFlags flags = StaticFlags.None) { if (mesh == null) { throw new ArgumentNullException(nameof(mesh)); } if (material == null) { throw new ArgumentNullException(nameof(material)); } var drawCall = new RenderTask.DrawCall { Flags = flags, LodIndex = mesh._lodIndex, MeshIndex = mesh._meshIndex, AssetModel = Object.GetUnmanagedPtr(mesh.ParentModel), AssetMaterialBase = Object.GetUnmanagedPtr(material), World = world }; _drawCalls.Add(drawCall); }