Hjälp med formler
När du skriver prisberäkningsformler så är du i en Model3DMeta. Denna är "self". Du kan då använda alla egenskaper ; t ex self.DimensionsX eller self.Vertices. Du kan också navigare till t ex av kunden vald teknologi ; "self.Technology.BasePriceFactor".
Du kan använda alla räknesätt + - * /
Exempel på ett Minipris : (((self.Volume*12)/1000).Round(2)).Max(20) - här betyder x.Max(y) att vi tar det som är störst av x och y - så resultatet kan minst bli 20. Du kan även använda x.Min(y).
Så här når du price add on för finish: self.Finish.PriceAddOn, och för Color self.Color.PriceAddOn: prova self.Finish.PriceAddOn+self.Color.PriceAddOn
Infill kommer vara ett värde mellan 0-100; prova t ex (self.Finish.PriceAddOn+self.Color.PriceAddOn)*(self.InfillPercent/100)
(self.Finish.PriceAddOn+self.Color.PriceAddOn)*(self.InfillPercent/100) -> (100+23)*.77 = 94.71
Villkorad beräkning
Om formeln måste kunna hantera "brist"-på värde - dvs null - så kanske det blir villkor:
(self.Volume->isnull)->casetruefalse(1.0, self.Volume ) : ta värdet av self.Volume bara om det inte är null - annars ta 1.0 (noga med att flyttal och inte bara 1 )
Det blir då 2 olika formler beroende på invärde (boolean) till casetruefalse :
(self.Volume>12)->casetruefalse(self.Volume*2.0,self.Volume*3.0) * self.Area
Procentberäkning för infill
(1.0+(self.InFillPercent/100)) -> omvandlar t ex 90% till faktor 1.9
Decimal vs Double
Efter att prisuppgifter nu sparas med typen Decimal (tidigare double) kan man behöva typ-kasta mellan de två: ((((self.Volume*12)/1000).Round(2).Max(80))+self.Color.PriceAddOn).todecimal
Du märker av behovet genom att se felet:
Returns illegal type: System.Double, must return System.Decimal
Skalning
Notera att DimensionsX,Y,Z numera finns i en scalad variant DimensionsXScaled, YScaled osv.
Även AreaScaled and VolumeScaled bör användas konsekvent för att hantera modeller som skalats upp eller ner för att hamna i centimeter-omfång.