public void Execute(UpdaterData data) { List <ElementId> eids = data.GetModifiedElementIds().ToList(); Document doc = data.GetDocument(); foreach (ElementId eid in eids) { Element ele = doc.GetElement(eid) as Material; var cat = ele.GetElementParam(MaterialParams.Category); if (string.IsNullOrEmpty(cat) || string.IsNullOrWhiteSpace(cat)) { cat = "null"; } var mdl = ele.GetElementParam(MaterialParams.Model); if (string.IsNullOrEmpty(mdl) || string.IsNullOrWhiteSpace(mdl)) { mdl = "null"; } var mfr = ele.GetElementParam(MaterialParams.Manufacturer); if (string.IsNullOrEmpty(mfr) || string.IsNullOrWhiteSpace(mfr)) { mfr = "null"; } var ptn = ele.GetElementParam(MaterialParams.PatternStyle); if (string.IsNullOrEmpty(ptn) || string.IsNullOrWhiteSpace(ptn)) { ptn = "null"; } var clr = ele.GetElementParam(MaterialParams.ColorFinish); if (string.IsNullOrEmpty(clr) || string.IsNullOrWhiteSpace(clr)) { clr = "null"; } var dsc = ele.GetElementParam(MaterialParams.MatDescription); if (string.IsNullOrEmpty(dsc) || string.IsNullOrWhiteSpace(dsc)) { dsc = "null"; } var prj = doc.ProjectInformation.Number; if (string.IsNullOrEmpty(prj) || string.IsNullOrWhiteSpace(prj)) { prj = "null"; } CCMaterial mat = CCMaterial.Get(cat, mdl); mat.Manufacturer = mfr; mat.Color = clr; mat.Description = dsc; mat.AddPattern(ptn); mat.AddProject(prj); mat.Save(); } }
public void Save(string fileName, string presetName, Dictionary <string, bool> dDelNodes) { Maid maid = holder.currentMaid; // カレントのメイドデータからプリセットデータを抽出 var preset = new PresetData(); preset.name = presetName; foreach (SlotInfo slotInfo in ACConstants.SlotNames.Values) { if (!slotInfo.enable) { continue; } TBodySkin slot = maid.body0.GetSlot((int)slotInfo.Id); // マスク情報を抽出 SlotState maskState; if (slot.obj == null) { maskState = SlotState.NotLoaded; } else if (!slot.boVisible) { maskState = SlotState.Masked; } else { maskState = SlotState.Displayed; } Material[] materialList = holder.GetMaterials(slot); if (materialList.Length == 0) { continue; } var slotItem = new CCSlot(slotInfo.Id); slotItem.mask = maskState; foreach (Material material in materialList) { var type = ShaderType.Resolve(material.shader.name); if (type == ShaderType.UNKNOWN) { continue; } var cmat = new CCMaterial(material, type); slotItem.Add(cmat); foreach (var texProp in type.texProps) { var tex2d = material.GetTexture(texProp.propId) as Texture2D; if (tex2d == null || string.IsNullOrEmpty(tex2d.name)) { continue; } var ti = new TextureInfo(); cmat.Add(ti); ti.propName = texProp.keyName; ti.texFile = tex2d.name; var fp = texModifier.GetFilter(maid, slotInfo.Id.ToString(), material.name, tex2d.name); if (fp != null && !fp.hasNotChanged()) { ti.filter = new TexFilter(fp); } } } preset.slots.Add(slotItem); } for (int i = TypeUtil.BODY_START; i <= TypeUtil.BODY_END; i++) { var mpn = (MPN)Enum.ToObject(typeof(MPN), i); MaidProp mp = maid.GetProp(mpn); if (mp != null) { if (!String.IsNullOrEmpty(mp.strFileName)) { preset.mpns.Add(new CCMPN(mpn, mp.strFileName)); } else { preset.mpnvals.Add(new CCMPNValue(mpn, mp.value, mp.min, mp.max)); } } } for (int i = TypeUtil.WEAR_START; i <= TypeUtil.WEAR_END; i++) { var mpn = (MPN)Enum.ToObject(typeof(MPN), i); MaidProp mp = maid.GetProp(mpn); if (mp != null && !String.IsNullOrEmpty(mp.strFileName)) { preset.mpns.Add(new CCMPN(mpn, mp.strFileName)); } } // for (int i = (int)MPN_TYPE_RANGE.FOLDER_BODY_START; i <= (int)MPN_TYPE_RANGE.FOLDER_BODY_END; i++) { // var mpn = (MPN)Enum.ToObject(typeof(MPN), i); // MaidProp mp = maid.GetProp(mpn); // if (mp != null) { // LogUtil.Debug(mpn,":", mp.type, ", value=", mp.value, ", temp=", mp.temp_value, ", file=", mp.strFileName); // } // } // 無限色 for (int j = TypeUtil.PARTSCOLOR_START; j <= TypeUtil.PARTSCOLOR_END; j++) { var pcEnum = (MaidParts.PARTS_COLOR)j; MaidParts.PartsColor part = maid.Parts.GetPartsColor(pcEnum); preset.partsColors[pcEnum.ToString()] = new CCPartsColor(part); } // 表示ノード preset.delNodes = new Dictionary <string, bool>(dDelNodes); LogUtil.Debug("create preset...", fileName); SavePreset(fileName, preset); }
// Token: 0x06000066 RID: 102 RVA: 0x00007270 File Offset: 0x00005470 public void Save(string fileName, string presetName, Dictionary <string, bool> dDelNodes) { Maid currentMaid = this._holder.CurrentMaid; PresetData presetData = new PresetData { name = presetName }; foreach (SlotInfo slotInfo in ACConstants.SlotNames.Values) { if (slotInfo.enable) { TBodySkin slot = currentMaid.body0.GetSlot((int)slotInfo.Id); SlotState mask; if (slot.obj == null) { mask = SlotState.NotLoaded; } else if (!slot.boVisible) { mask = SlotState.Masked; } else { mask = SlotState.Displayed; } Material[] materials = this._holder.GetMaterials(slot); if (materials.Length != 0) { CCSlot ccslot = new CCSlot(slotInfo.Id) { mask = mask }; foreach (Material material in materials) { ShaderType shaderType = ShaderType.Resolve(material.shader.name); if (shaderType != ShaderType.UNKNOWN) { CCMaterial ccmaterial = new CCMaterial(material, shaderType); ccslot.Add(ccmaterial); foreach (ShaderPropTex shaderPropTex in shaderType.texProps) { Texture2D texture2D = material.GetTexture(shaderPropTex.propId) as Texture2D; if (!(texture2D == null) && !string.IsNullOrEmpty(texture2D.name)) { TextureInfo textureInfo = new TextureInfo(); ccmaterial.Add(textureInfo); textureInfo.propName = shaderPropTex.keyName; textureInfo.texFile = texture2D.name; TextureModifier.FilterParam filter = this._texModifier.GetFilter(currentMaid, slotInfo.Id.ToString(), material.name, texture2D.name); if (filter != null && !filter.HasNotChanged()) { textureInfo.filter = new TexFilter(filter); } Vector2 textureOffset = material.GetTextureOffset(shaderPropTex.propId); if (Math.Abs(textureOffset.x) > 0.001f) { textureInfo.offsetX = new float?(textureOffset.x); } if (Math.Abs(textureOffset.y) > 0.001f) { textureInfo.offsetY = new float?(textureOffset.y); } Vector2 textureScale = material.GetTextureScale(shaderPropTex.propId); if (Math.Abs(textureScale.x) > 0.001f) { textureInfo.scaleX = new float?(textureScale.x); } if (Math.Abs(textureScale.y) > 0.001f) { textureInfo.scaleY = new float?(textureScale.y); } } } } } presetData.slots.Add(ccslot); } } } for (int k = TypeUtil.BODY_START; k <= TypeUtil.BODY_END; k++) { MPN mpn = (MPN)Enum.ToObject(typeof(MPN), k); MaidProp prop = currentMaid.GetProp(mpn); if (prop != null) { if (prop.type == 1 || prop.type == 2) { presetData.mpnvals.Add(new CCMPNValue(mpn, prop.value, prop.min, prop.max)); } else if (prop.type == 3 && prop.nFileNameRID != 0) { presetData.mpns.Add(new CCMPN(mpn, prop.strFileName)); } } } for (int l = TypeUtil.WEAR_START; l <= TypeUtil.WEAR_END; l++) { MPN mpn2 = (MPN)Enum.ToObject(typeof(MPN), l); MaidProp prop2 = currentMaid.GetProp(mpn2); if (prop2 != null && prop2.nFileNameRID != 0) { presetData.mpns.Add(new CCMPN(mpn2, prop2.strFileName)); } } for (MaidParts.PARTS_COLOR parts_COLOR = TypeUtil.PARTS_COLOR_START; parts_COLOR <= TypeUtil.PARTS_COLOR_END; parts_COLOR++) { MaidParts.PartsColor partsColor = currentMaid.Parts.GetPartsColor(parts_COLOR); presetData.partsColors[parts_COLOR.ToString()] = new CCPartsColor(partsColor); } presetData.delNodes = new Dictionary <string, bool>(dDelNodes); LogUtil.Debug(new object[] { "create preset...", fileName }); this.SavePreset(fileName, presetData); }
private void LoadSettings() { if (!File.Exists(SaveFileName)) { return; } var xdoc = XDocument.Load(SaveFileName); var toggleKey = xdoc.Root.Attribute("toggleKey"); if (toggleKey != null && !String.IsNullOrEmpty(toggleKey.Value)) { foreach (string keyName in Enum.GetNames(typeof(KeyCode))) { if (toggleKey.Value.Equals(keyName)) { this.toggleKey = (KeyCode)Enum.Parse(typeof(KeyCode), toggleKey.Value); } } } var presetNodes = xdoc.Descendants("preset"); if (presetNodes.Count() == 0) { return; } presets = new Dictionary<string, CCPreset>(); foreach (var presetNode in presetNodes) { CCPreset preset = new CCPreset(); preset.name = presetNode.Attribute("name").Value; var clearMask = presetNode.Attribute("clearMask"); if (clearMask != null && !String.IsNullOrEmpty(clearMask.Value)) { preset.clearMask = (bool)clearMask; } preset.slots = new Dictionary<string, CCSlot>(); var slotNodes = presetNode.Element("slots").Elements("slot"); foreach (var slotNode in slotNodes) { var slot = new CCSlot(); slot.name = slotNode.Attribute("slotname").Value; slot.materials = new Dictionary<string, CCMaterial>(); var materialNodes = slotNode.Elements("material"); foreach (var materialNode in materialNodes) { var material = new CCMaterial(); material.name = materialNode.Element("name").Value; material.shader = materialNode.Element("shader").Value; var colorNode = materialNode.Element("color"); var r = (float)colorNode.Attribute("R"); var g = (float)colorNode.Attribute("G"); var b = (float)colorNode.Attribute("B"); var a = (float)colorNode.Attribute("A"); material.color = new Color(r, g, b, a); colorNode = materialNode.Element("shadowColor"); if (colorNode != null) { r = (float)colorNode.Attribute("R"); g = (float)colorNode.Attribute("G"); b = (float)colorNode.Attribute("B"); a = (float)colorNode.Attribute("A"); } material.shadowColor = new Color(r, g, b, a); colorNode = materialNode.Element("rimColor"); if (colorNode != null) { r = (float)colorNode.Attribute("R"); g = (float)colorNode.Attribute("G"); b = (float)colorNode.Attribute("B"); a = (float)colorNode.Attribute("A"); } material.rimColor = new Color(r, g, b, a); colorNode = materialNode.Element("outlineColor"); if (colorNode != null) { r = (float)colorNode.Attribute("R"); g = (float)colorNode.Attribute("G"); b = (float)colorNode.Attribute("B"); a = (float)colorNode.Attribute("A"); } material.outlineColor = new Color(r, g, b, a); var f = materialNode.Element("shininess"); if (f != null) { material.shininess = (float)f; } f = materialNode.Element("outlineWidth"); if (f != null) { material.outlineWidth = (float)f; } f = materialNode.Element("rimPower"); if (f != null) { material.rimPower = (float)f; } f = materialNode.Element("rimShift"); if (f != null) { material.rimShift = (float)f; } slot.materials.Add(material.name, material); } preset.slots.Add(slot.name, slot); } preset.mpns = new Dictionary<string, string>(); var mpnNodes = presetNode.Element("mpns").Elements("mpn"); foreach (var mpnNode in mpnNodes) { preset.mpns.Add(mpnNode.Attribute("name").Value, mpnNode.Value); } preset.delNodes = new Dictionary<string, bool>(); var nodes = presetNode.Element("nodes").Elements("node"); foreach (var node in nodes) { string key = Nodenames[node.Attribute("name").Value]; preset.delNodes.Add(key, (bool)node.Attribute("visible")); } presets.Add(preset.name, preset); } }
public void Save(string fileName, string presetName, Dictionary <string, bool> dDelNodes) { var maid = _holder.CurrentMaid; // カレントのメイドデータからプリセットデータを抽出 var preset = new PresetData { name = presetName }; foreach (var slotInfo in ACConstants.SlotNames.Values) { if (!slotInfo.enable) { continue; } var slot = maid.body0.GetSlot((int)slotInfo.Id); // マスク情報を抽出 SlotState maskState; if (slot.obj == null) { maskState = SlotState.NotLoaded; } else if (!slot.boVisible) { maskState = SlotState.Masked; } else { maskState = SlotState.Displayed; } var materialList = _holder.GetMaterials(slot); if (materialList.Length == 0) { continue; } var slotItem = new CCSlot(slotInfo.Id) { mask = maskState }; foreach (var material in materialList) { var type = ShaderType.Resolve(material.shader.name); if (type == ShaderType.UNKNOWN) { continue; } var cmat = new CCMaterial(material, type); slotItem.Add(cmat); foreach (var texProp in type.texProps) { var tex2D = material.GetTexture(texProp.propId) as Texture2D; if (tex2D == null || string.IsNullOrEmpty(tex2D.name)) { continue; } var ti = new TextureInfo(); cmat.Add(ti); ti.propName = texProp.keyName; ti.texFile = tex2D.name; var fp = _texModifier.GetFilter(maid, slotInfo.Id.ToString(), material.name, tex2D.name); if (fp != null && !fp.HasNotChanged()) { ti.filter = new TexFilter(fp); } #if UNITY_5_6_OR_NEWER var offset = material.GetTextureOffset(texProp.propId); #else var offset = material.GetTextureOffset(texProp.keyName); #endif if (Math.Abs(offset.x) > ConstantValues.EPSILON_3) { ti.offsetX = offset.x; } if (Math.Abs(offset.y) > ConstantValues.EPSILON_3) { ti.offsetY = offset.y; } #if UNITY_5_6_OR_NEWER var scale = material.GetTextureScale(texProp.propId); #else var scale = material.GetTextureScale(texProp.keyName); #endif if (Math.Abs(scale.x) > ConstantValues.EPSILON_3) { ti.scaleX = scale.x; } if (Math.Abs(scale.y) > ConstantValues.EPSILON_3) { ti.scaleY = scale.y; } } } preset.slots.Add(slotItem); } for (var i = TypeUtil.BODY_START; i <= TypeUtil.BODY_END; i++) { var mpn = (MPN)Enum.ToObject(typeof(MPN), i); var mp = maid.GetProp(mpn); if (mp == null) { continue; } // 身体パラメータ if (mp.type == 1 || mp.type == 2) { preset.mpnvals.Add(new CCMPNValue(mpn, mp.value, mp.min, mp.max)); continue; } // スロットアイテム if (mp.type == 3 && mp.nFileNameRID != 0) { preset.mpns.Add(new CCMPN(mpn, mp.strFileName)); } } // FOLDER_BODYは自動で0にリセットされるためプリセットの保持する必要はない // for (var i = MPN_TYPE_RANGE.FOLDER_BODY_START; i <= MPN_TYPE_RANGE.FOLDER_BODY_END; i++) { // var mpn = (MPN)Enum.ToObject(typeof(MPN), i); // var mp = maid.GetProp(mpn); // if (mp == null || mp.nFileNameRID == 0) continue; // preset.mpns.Add(new CCMPN(mpn, mp.strFileName)); // } for (var i = TypeUtil.WEAR_START; i <= TypeUtil.WEAR_END; i++) { var mpn = (MPN)Enum.ToObject(typeof(MPN), i); var mp = maid.GetProp(mpn); if (mp != null && mp.nFileNameRID != 0) { preset.mpns.Add(new CCMPN(mpn, mp.strFileName)); } } // 無限色 for (var pcEnum = TypeUtil.PARTS_COLOR_START; pcEnum <= TypeUtil.PARTS_COLOR_END; pcEnum++) { var part = maid.Parts.GetPartsColor(pcEnum); preset.partsColors[pcEnum.ToString()] = new CCPartsColor(part); } // 表示ノード preset.delNodes = new Dictionary <string, bool>(dDelNodes); LogUtil.Debug("create preset...", fileName); SavePreset(fileName, preset); }