diff --git a/Assets/Scripts/Actions/ActionHelper.cs b/Assets/Scripts/Actions/ActionHelper.cs index 67a6beb7..b2d84b44 100644 --- a/Assets/Scripts/Actions/ActionHelper.cs +++ b/Assets/Scripts/Actions/ActionHelper.cs @@ -164,6 +164,14 @@ public class ActionHelper var strAction = (XMLTool.StringListAction)act; return HighLightAction.Allocate(act.Value, strAction.args[0], strAction.args[1]); } + case "LoadRes": + { + var strAction = (XMLTool.StringListAction)act; + return LoadResAction.Allocate(act.Value, strAction.args[0]); + } + default: + Debug.LogError($"没有找到此Action的类型{act.Type}"); + break; } break; case XMLTool.Condition condition: diff --git a/Assets/Scripts/Actions/LoadResAction.cs b/Assets/Scripts/Actions/LoadResAction.cs new file mode 100644 index 00000000..6abbe2e9 --- /dev/null +++ b/Assets/Scripts/Actions/LoadResAction.cs @@ -0,0 +1,103 @@ +using System; +using System.Data.SqlTypes; +using System.Xml.Linq; +using UnityEngine; +using XMLTool; + +namespace QFramework +{ + internal class LoadResAction : IAction + { + + + public System.Action OnFinished { get; set; } + + + private LoadResAction() + { + } + + private static readonly SimpleObjectPool mPool = + new SimpleObjectPool(() => new LoadResAction(), null, 10); + + string fileName; + string type; + public static LoadResAction Allocate(string fileName, string type, System.Action OnFinished = null) + { + var retNode = mPool.Allocate(); + retNode.ActionID = ActionKit.ID_GENERATOR++; + retNode.Deinited = false; + retNode.Reset(); + retNode.fileName = fileName; + retNode.type = type; + retNode.OnFinished = OnFinished; + return retNode; + } + + + public ulong ActionID { get; set; } + public ActionStatus Status { get; set; } + + public void OnStart() + { + ResLoader resLoader = ResLoader.Allocate(); + string path = Global.xmlPath + fileName; + switch (type) + { + case "xml": + resLoader.Add2Load(path.ToLocalTextResName(), (success, res) => + { + if (success) + { + string xmlStr = res.Asset.As().text; + if (string.IsNullOrEmpty(xmlStr) == false) + { + // 加载XML + XDocument doc = XDocument.Parse(xmlStr); + // 获取根元素 + XElement moduleXml = doc.Root; + XmlParser.LoadModule(moduleXml, Global.Instance.appData); + } + } + }); + break; + } + + resLoader.LoadAsync(() => + { + resLoader.Recycle2Cache(); + this.Finish(); + }); + } + + public void OnExecute(float dt) + { + } + + public void OnFinish() + { + } + + public void Reset() + { + Status = ActionStatus.NotStart; + Paused = false; + } + + public bool Paused { get; set; } + + public void Deinit() + { + if (!Deinited) + { + OnFinished = null; + Deinited = true; + mPool.Recycle(this); + } + } + + public bool Deinited { get; set; } + } + + +} \ No newline at end of file diff --git a/Assets/Scripts/Actions/LoadResAction.cs.meta b/Assets/Scripts/Actions/LoadResAction.cs.meta new file mode 100644 index 00000000..cf9602fa --- /dev/null +++ b/Assets/Scripts/Actions/LoadResAction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c2b87ed3cbc0554d8644f0ae736cc6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Controller/PreLoadController.cs b/Assets/Scripts/Controller/PreLoadController.cs new file mode 100644 index 00000000..e511c9f5 --- /dev/null +++ b/Assets/Scripts/Controller/PreLoadController.cs @@ -0,0 +1,16 @@ +using QFramework; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class PreLoadController : MonoSingleton +{ + + public ResLoader resLoader => ResLoader.Allocate(); + + + + + + +} diff --git a/Assets/Scripts/Controller/PreLoadController.cs.meta b/Assets/Scripts/Controller/PreLoadController.cs.meta new file mode 100644 index 00000000..69cd817a --- /dev/null +++ b/Assets/Scripts/Controller/PreLoadController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b7e736c25d5d0de44967b40031251f32 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Global/Global.cs b/Assets/Scripts/Global/Global.cs index 65d4d99a..dee5fd55 100644 --- a/Assets/Scripts/Global/Global.cs +++ b/Assets/Scripts/Global/Global.cs @@ -18,6 +18,7 @@ public class Global : Singleton public static string appXmlPath = dataPath + "/App.xml"; public static string imagePath = dataPath + "/Image/"; public static string videoPath = dataPath + "/Video/"; + public static string xmlPath = dataPath + "/Xml/"; public static APPSetting appSetting { get; } = new APPSetting(); public enum AppType diff --git a/Assets/Scripts/Launch.cs b/Assets/Scripts/Launch.cs index d9752ff7..7521b905 100644 --- a/Assets/Scripts/Launch.cs +++ b/Assets/Scripts/Launch.cs @@ -18,7 +18,7 @@ public class Launch : MonoBehaviour IEnumerator StartApp() { yield return ResKit.InitAsync(); - + bool isLoadFinished = false; loader.Add2Load(Global.appXmlPath.ToLocalTextResName(), (success, res) => { if (success) @@ -29,13 +29,20 @@ public class Launch : MonoBehaviour loader.LoadAsync(() => { + isLoadFinished = true; ActionKit.Delay(2f, () => { loader.Recycle2Cache(); loader = null; }); }); + + yield return UIKit.OpenPanelAsync(); + yield return new WaitUntil(() => isLoadFinished == true); + yield return ActionHelper.GetActionAndSub(Global.Instance.appData.preLoad.action).Start(this); yield return UIKit.OpenPanelAsync(); + UIKit.HidePanel(); + // 暂时不用 //foreach (var item in Global.Instance.appData.ActionDict) @@ -45,5 +52,10 @@ public class Launch : MonoBehaviour //} } + + IEnumerator PreLoad() + { + yield return null; + } } diff --git a/Assets/Scripts/Xml/XmlParser.cs b/Assets/Scripts/Xml/XmlParser.cs index 0dda1e7f..138ab976 100644 --- a/Assets/Scripts/Xml/XmlParser.cs +++ b/Assets/Scripts/Xml/XmlParser.cs @@ -1,7 +1,9 @@ +using MoonSharp.Interpreter.CoreLib; using QFramework; using System; using System.Collections.Generic; using System.Linq; +using System.Net.Configuration; using System.Xml; using System.Xml.Linq; using UnityEngine; @@ -10,9 +12,15 @@ namespace XMLTool { public class AppData { + public PreLoad preLoad; public List Modules { get; set; } } + public class PreLoad + { + public Action action; + } + public class Module { @@ -133,139 +141,164 @@ namespace XMLTool // 初始化AppData对象 AppData appData = new AppData { + preLoad = new PreLoad(), Modules = new List(), }; - // 获取模块元素 + + // 解析预加载动作 + var preLoadElement = appDataElement.Element("PreLoad"); + foreach (XElement actionElement in preLoadElement.Elements("Action")) + { + var action = ParseAction(actionElement); + appData.preLoad.action = action; + } + + // 加载模块数据 + LoadModules(appDataElement, appData); + + return appData; + } + + + + + public static void LoadModules(XElement appDataElement, AppData appData) + { + foreach (XElement moduleElement in appDataElement.Elements("Module")) { - if (moduleElement != null) + LoadModule(moduleElement, appData); + } + } + + public static void LoadModule(XElement moduleElement, AppData appData) + { + if (moduleElement != null) + { + Module module = new Module() { - Module module = new Module() + Devices = new List(), + ActionDict = new Dictionary(), + Operations = new List(), + }; + appData.Modules.Add(module); + // 解析模块名称 + module.type = moduleElement.Element("Type")?.Value; + module.ModuleName = moduleElement.Element("Name")?.Value; + module.Scene = moduleElement.Element("Scene")?.Value; + + // 解析设备 + foreach (XElement deviceElement in moduleElement.Elements("Device")) + { + Device device = new Device { - Devices = new List(), - ActionDict = new Dictionary(), - Operations = new List(), + Name = deviceElement.Element("Name")?.Value, + Icon = deviceElement.Element("Icon")?.Value, + HighColor = deviceElement.Element("HighLight")?.Attribute("color")?.Value, + Path = deviceElement.Element("Path")?.Value, + Tip = deviceElement.Element("Tip")?.Value, + MeshCollider = deviceElement.Element("MeshCollider") != null, + BoxColliderCenter = deviceElement.Element("BoxCollider")?.Attribute("center")?.Value, + BoxColliderSize = deviceElement.Element("BoxCollider")?.Attribute("size")?.Value, + }; - appData.Modules.Add(module); - // 解析模块名称 - module.type = moduleElement.Element("Type")?.Value; - module.ModuleName = moduleElement.Element("Name")?.Value; - module.Scene = moduleElement.Element("Scene")?.Value; - - // 解析设备 - foreach (XElement deviceElement in moduleElement.Elements("Device")) - { - Device device = new Device - { - Name = deviceElement.Element("Name")?.Value, - Icon = deviceElement.Element("Icon")?.Value, - HighColor = deviceElement.Element("HighLight")?.Attribute("color")?.Value, - Path = deviceElement.Element("Path")?.Value, - Tip = deviceElement.Element("Tip")?.Value, - MeshCollider = deviceElement.Element("MeshCollider") != null, - BoxColliderCenter = deviceElement.Element("BoxCollider")?.Attribute("center")?.Value, - BoxColliderSize = deviceElement.Element("BoxCollider")?.Attribute("size")?.Value, - - }; - module.Devices.Add(device); - } + module.Devices.Add(device); + } + // 解析动作 + foreach (XElement actionElement in moduleElement.Elements("Action")) + { + var action = ParseAction(actionElement); // 解析动作 - foreach (XElement actionElement in moduleElement.Elements("Action")) + module.ActionDict.Add(action.Name, action); + } + // 解析状态机 + foreach (XElement fsmElement in moduleElement.Elements("FSM")) + { + FSM fsm = new FSM() { - var action = ParseAction(actionElement); - // 解析动作 - module.ActionDict.Add(action.Name, action); - } - // 解析状态机 - foreach (XElement fsmElement in moduleElement.Elements("FSM")) - { - FSM fsm = new FSM() - { - Name = fsmElement.Attribute("name")?.Value, - StateDict = new Dictionary(), - Transisions = new List(), + Name = fsmElement.Attribute("name")?.Value, + StateDict = new Dictionary(), + Transisions = new List(), + }; + + // 解析状态 + foreach (var stateNode in fsmElement.Elements("State")) + { + State state = new State() + { + Name = stateNode.Attribute("name")?.Value, }; + fsm.StateDict.Add(state.Name, state); - // 解析状态 - foreach (var stateNode in fsmElement.Elements("State")) + XElement enterElement = stateNode.Element("Enter"); + XElement exitElement = stateNode.Element("Exit"); + if (enterElement != null) { - State state = new State() - { - Name = stateNode.Attribute("name")?.Value, - }; - fsm.StateDict.Add(state.Name, state); - - XElement enterElement = stateNode.Element("Enter"); - XElement exitElement = stateNode.Element("Exit"); - if (enterElement != null) - { - state.Enter = new StatePart(); - state.Enter.Action = ParseAction(enterElement.Element("Action")); - } - if (exitElement != null) - { - state.Exit = new StatePart(); - state.Exit.Action = ParseAction(exitElement.Element("Action")); - } - + state.Enter = new StatePart(); + state.Enter.Action = ParseAction(enterElement.Element("Action")); } - // 解析状态转换 - foreach (var transNode in fsmElement.Elements("Transision")) + if (exitElement != null) { - Transision trans = new Transision() - { - Name = transNode.Attribute("name")?.Value, - From = transNode.Attribute("from")?.Value, - To = transNode.Attribute("to")?.Value, - }; - trans.Action = ParseCondition(transNode.Element("Condition")); - fsm.Transisions.Add(trans); + state.Exit = new StatePart(); + state.Exit.Action = ParseAction(exitElement.Element("Action")); } - module.FSM.Add(fsm.Name, fsm); + } - - foreach (var operationNode in moduleElement.Elements("Operation")) + // 解析状态转换 + foreach (var transNode in fsmElement.Elements("Transision")) { - //module.Operations - // 解析操作步骤 - - var op = new Operation() + Transision trans = new Transision() { - Steps = new List(), + Name = transNode.Attribute("name")?.Value, + From = transNode.Attribute("from")?.Value, + To = transNode.Attribute("to")?.Value, }; - op.moduleType = operationNode.Attribute("moduleType")?.Value; - foreach (XElement stepNode in operationNode.Elements("Step")) - { - op.Steps.Add(ParserStep(stepNode, null)); - } - module.Operations.Add(op); + trans.Action = ParseCondition(transNode.Element("Condition")); + fsm.Transisions.Add(trans); } + module.FSM.Add(fsm.Name, fsm); + } + foreach (var operationNode in moduleElement.Elements("Operation")) + { + //module.Operations + // 解析操作步骤 - XElement scoreNode = moduleElement.Element("Score"); - if (scoreNode != null) + var op = new Operation() { - module.score = new Score() - { - scores = new List() - }; - foreach (var item in scoreNode.Elements("Item")) - { - module.score.scores.Add( - new ScoreStep() - { - step = item.Attribute("step")?.Value, - name = item.Attribute("name")?.Value, - sum = item.Attribute("sum")?.Value, - bind = item.Attribute("bind")?.Value, - }); - } + Steps = new List(), + }; + op.moduleType = operationNode.Attribute("moduleType")?.Value; + foreach (XElement stepNode in operationNode.Elements("Step")) + { + op.Steps.Add(ParserStep(stepNode, null)); + } + module.Operations.Add(op); + } + + + XElement scoreNode = moduleElement.Element("Score"); + if (scoreNode != null) + { + module.score = new Score() + { + scores = new List() + }; + foreach (var item in scoreNode.Elements("Item")) + { + module.score.scores.Add( + new ScoreStep() + { + step = item.Attribute("step")?.Value, + name = item.Attribute("name")?.Value, + sum = item.Attribute("sum")?.Value, + bind = item.Attribute("bind")?.Value, + }); } } } - return appData; } public static Step ParserStep(XElement stepNode, Step parent) @@ -658,6 +691,21 @@ namespace XMLTool newAction = act; } break; + case "LoadRes": + { + var act = new StringListAction(); + XAttribute resType = action.Attribute("resType"); + if (resType != null) + { + act.args.Add(resType.Value); + } + else + { + act.args.Add(""); + } + newAction = act; + } + break; default: newAction = new Action(); break; diff --git a/Data/App.xml b/Data/App.xml index bc2ca7ab..42dca9d6 100644 --- a/Data/App.xml +++ b/Data/App.xml @@ -1,6 +1,13 @@ + + + + + + + Scene All @@ -631,16 +638,22 @@ - + - - + + + + + + + + - + @@ -923,4 +936,5 @@ + \ No newline at end of file diff --git a/Data/Xml/Pig.xml b/Data/Xml/Pig.xml new file mode 100644 index 00000000..5e7e5f6a --- /dev/null +++ b/Data/Xml/Pig.xml @@ -0,0 +1,929 @@ + + + + Scene + All + 妯″潡2 + + + 楠ㄥ垁 + 宸ュ叿/楠ㄥ垁.png + + + 鎾鏉 + 宸ュ叿/鎾鏉.png + + + 鎵嬫湳鍒鏌4鍙 + 宸ュ叿/鎵嬫湳鍒鏌4鍙.png + + + 鎵嬫湳鍒鐗16鍙 + 宸ュ叿/鎵嬫湳鍒鐗16鍙.png + + + 閾侀敜 + 宸ュ叿/閾侀敜.png + + + 鍜閽 + 宸ュ叿/鍜閽.png + + + + T绠 + 鑰楁潗/T绠.png + + + + 鍐叉礂绠 + 鑰楁潗/鍐叉礂绠.png + + + + 閽笣 + 鑰楁潗/閽笣.png + + + + 楠ㄩ拤 + 鑰楁潗/楠ㄩ拤.png + + + + 楠ㄨ湣 + 鑰楁潗/楠ㄨ湣.png + + + + + Vetwish杞绱 + 鑽搧/Vetwish杞绱.png + + + + 缇庢礇鏄斿悍 + 鑽搧/缇庢礇鏄斿悍.png + + + + + + 缁勭粐閽 + + SM_QvanChangJing/SM_JianZiLei/zuzhiqian + 缁勭粐閽 + + 宸ュ叿/楠ㄥ垁.png + + + + 鑲犻挸 + + SM_QvanChangJing/SM_JianZiLei/changqian + 鑲犻挸 + + 宸ュ叿/楠ㄥ垁.png + + + 鏃犻娇娴风坏閽 + + SM_QvanChangJing/SM_JianZiLei/wuchihaimianqian + 鏃犻娇娴风坏閽 + + 宸ュ叿/楠ㄥ垁.png + + + + + S鎷夐挬 + + SM_QvanChangJing/SM_JianZiLei/pasted__SM_LaGou + S鎷夐挬 + + 宸ュ叿/楠ㄥ垁.png + + + + + 鑲惧舰鐩 + + SM_QvanChangJing/SM_JianZiLei/pasted__SM_ShenXingPan + 鑲惧舰鐩 + + 宸ュ叿/楠ㄥ垁.png + + + + + 鍣ㄦ鐩 + + SM_QvanChangJing/SM_JianZiLei/pasted__polySurface114 + 鍣ㄦ鐩 + + 宸ュ叿/楠ㄥ垁.png + + + + + 鍒涘肪閽 + + SM_QvanChangJing/SM_JianZiLei/chuangjinqian + 鍒涘肪閽 + + 宸ュ叿/楠ㄥ垁.png + + + + 鐩存琛閽 + + SM_QvanChangJing/SM_JianZiLei/zhizhixueqian + 鐩存琛閽 + + 宸ュ叿/楠ㄥ垁.png + + + 寮琛閽 + + SM_QvanChangJing/SM_JianZiLei/wanzhixueqian + 寮琛閽 + + 宸ュ叿/楠ㄥ垁.png + + + + + 鎸侀拡閽 + + SM_QvanChangJing/SM_JianZiLei/chizhenqian + 鎸侀拡閽 + + 宸ュ叿/楠ㄥ垁.png + + + + 閽濆壀 + + SM_QvanChangJing/SM_JianZiLei/dunjian + 閽濆壀 + + 宸ュ叿/楠ㄥ垁.png + + + + 灏栧壀 + + SM_QvanChangJing/SM_JianZiLei/jianjian + 灏栧壀 + + 宸ュ叿/楠ㄥ垁.png + + + + + + 鏃犻娇闀 + + SM_QvanChangJing/SM_JianZiLei/pasted__pPlane4 + 鏃犻娇闀 + + 宸ュ叿/楠ㄥ垁.png + + + + 鎵嬫湳鍒鏌3鍙 + + SM_QvanChangJing/SM_JianZiLei/pasted__SM_ShouShuDaoBing + 鎵嬫湳鍒鏌3鍙 + + 宸ュ叿/楠ㄥ垁.png + + + + 鍒鐗23鍙 + + SM_QvanChangJing/SM_JianZiLei/pasted__SM_DaoPian23 + 鍒鐗23鍙 + + 宸ュ叿/楠ㄥ垁.png + + + + 閫熺湢鏂 + + SM_QvanChangJing/SM_YaoPinLei/SM_sumianxin + 閫熺湢鏂 + + 鑽搧/缇庢礇鏄斿悍.png + + + + + 澶村鍣诲憢 + + SM_QvanChangJing/SM_YaoPinLei/pasted__SM_TouBao + 澶村鍣诲憢 + + 鑽搧/缇庢礇鏄斿悍.png + + + + + VC + + SM_QvanChangJing/SM_YaoPinLei/pasted__SM_VC + VC + + 鑽搧/缇庢礇鏄斿悍.png + + + + 纭吀闃挎墭鍝 + + SM_QvanChangJing/SM_YaoPinLei/pasted__SM_ATuoPin + 纭吀闃挎墭鍝 + + 鑽搧/缇庢礇鏄斿悍.png + + + ATP + + SM_QvanChangJing/SM_YaoPinLei/pasted__SM_SanLinsuanxiangan + ATP + + 鑽搧/缇庢礇鏄斿悍.png + + + + 鑲句笂鑵虹礌 + + SM_QvanChangJing/SM_YaoPinLei/pasted__SM_ShenShangXian + 鑲句笂鑵虹礌 + + 鑽搧/缇庢礇鏄斿悍.png + + + 绾㈤湁绱犵溂鑶 + + SM_QvanChangJing/SM_YaoPinLei/SM_hongmeisuyangao + 绾㈤湁绱犵溂鑶 + + 鑽搧/缇庢礇鏄斿悍.png + + + 纰樹紡鍠峰6 + + SM_QvanChangJing/SM_YaoPinLei/pasted__polySurface119 + 纰樹紡鍠峰6 + + 鑽搧/缇庢礇鏄斿悍.png + + + + 75%閰掔簿 + + SM_QvanChangJing/SM_YaoPinLei/pasted__polySurface117 + 75%閰掔簿 + + 鑽搧/缇庢礇鏄斿悍.png + + + + 5%钁¤悇绯栨敞灏勬恫50ml + + SM_QvanChangJing/SM_YaoPinLei/pasted__pCylinder3 + 5%钁¤悇绯栨敞灏勬恫50ml + + 鑽搧/缇庢礇鏄斿悍.png + + + + 0.9%姘寲閽犳敞灏勬恫100ml + + SM_QvanChangJing/SM_YaoPinLei/pasted__lhn1 + 0.9%姘寲閽犳敞灏勬恫100ml + + 鑽搧/缇庢礇鏄斿悍.png + + + + + + 鐢靛姩鍓冩瘺鍒 + + SM_QvanChangJing/SM_BuLiaoLei/pasted__dtz1 + 鐢靛姩鍓冩瘺鍒 + + 鑰楁潗/楠ㄨ湣.png + + + + + 鍖荤敤澶栫缃 + + SM_QvanChangJing/SM_BuLiaoLei/yiyongkouzhao + 鍖荤敤澶栫缃 + + 鑰楁潗/楠ㄨ湣.png + + + + 鏃犺弻鏁锋枡 + + SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_WuJingFuLiao + 鏃犺弻鏁锋枡 + + 鑰楁潗/楠ㄨ湣.png + + + + 绾卞竷缁峰甫 + + SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_BengDai_pPlane6 + 绾卞竷缁峰甫 + + 鑰楁潗/楠ㄨ湣.png + + + + 24G闈欒剦鐣欑疆閽 + + SM_QvanChangJing/SM_BuLiaoLei/liuzhizhen/pasted__pasted__polySurface560 + 24G闈欒剦鐣欑疆閽 + + 鑰楁潗/楠ㄨ湣.png + + + 涓娆℃ф敞灏勫櫒 + + SM_QvanChangJing/SM_BuLiaoLei/SM_ShuYeQi + 涓娆℃ф敞灏勫櫒 + + 鑰楁潗/楠ㄨ湣.png + + + 绾歌兌甯 + + SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_ZhiJiaoDai_polySurface125 + 绾歌兌甯 + + 鑰楁潗/楠ㄨ湣.png + + + 寮规х矘鎬х环甯 + + SM_QvanChangJing/SM_BuLiaoLei/pasted__pPlane6 + 寮规х矘鎬х环甯 + + 鑰楁潗/楠ㄨ湣.png + + + + 澶ц兌甯 + + SM_QvanChangJing/SM_BuLiaoLei/pasted__polySurface125 + 澶ц兌甯 + + 鑰楁潗/楠ㄨ湣.png + + + 鍒锋墜姣涘埛 + + SM_QvanChangJing/SM_BuLiaoLei/pasted__pCube35 + 鍒锋墜姣涘埛 + + 鑰楁潗/楠ㄨ湣.png + + + + 瀹犵墿鐢靛瓙浣撴俯璁 + + SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_DianZiTiWenJiShape + 瀹犵墿鐢靛瓙浣撴俯璁 + + 鑰楁潗/楠ㄨ湣.png + + + 涓娆℃ф敞灏勫櫒1 + + SM_QvanChangJing/SM_BuLiaoLei/zhusheqi + 涓娆℃ф敞灏勫櫒 + + 鑰楁潗/楠ㄨ湣.png + + + 鑲濈礌甯 + + SM_QvanChangJing/SM_BuLiaoLei/pasted__pCylinder7 + 鑲濈礌甯 + + 鑰楁潗/楠ㄨ湣.png + + + 鍒涘肪 + + SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_ChuangJin + 鍒涘肪 + + 鑰楁潗/楠ㄨ湣.png + + + 淇濆畾淇濇俯姣涘肪 + + SM_QvanChangJing/SM_BuLiaoLei/Object003__0 + 淇濆畾淇濇俯姣涘肪 + + 鑰楁潗/楠ㄨ湣.png + + + 甯﹂拡PGA缂濈嚎 + + SM_QvanChangJing/SM_BuLiaoLei/zhenxian/骞抽潰 + 甯﹂拡PGA缂濈嚎 + + 鑰楁潗/楠ㄨ湣.png + + + 鍚瘖鍣 + + SM_QvanChangJing/SM_BuLiaoLei/SM_TingZhenQi/Archmodels70_054_01 + 鍚瘖鍣 + + 鑰楁潗/楠ㄨ湣.png + + + 涓娆℃ф墜鏈附 + + SM_QvanChangJing/SM_BuLiaoLei/SM_YiYongMao + 涓娆℃ф墜鏈附 + + 鑰楁潗/楠ㄨ湣.png + + + 涓娆℃ф墜鏈。 + + SM_QvanChangJing/SM_BuLiaoLei/shoufuyi + 涓娆℃ф墜鏈。 + + 鑰楁潗/楠ㄨ湣.png + + + 涓娆℃у绉戠伃鑿屾墜濂 + + SM_QvanChangJing/SM_BuLiaoLei/SM_YiYongMao.001 + 涓娆℃у绉戠伃鑿屾墜濂 + + 鑰楁潗/楠ㄨ湣.png + + + 鏃犺弻鎿︽墜绾 + + SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_YiYongCaShouZhi + 鏃犺弻鎿︽墜绾 + + 鑰楁潗/楠ㄨ湣.png + + + 鏃犺弻绾卞竷 + + SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_ShouShuGongJu_SM_WuJunShaBu_SM_WuJunShaBu + 鏃犺弻绾卞竷 + + 鑰楁潗/楠ㄨ湣.png + + + 閰掔簿妫夌悆 + + SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_JiuJingMianQiu_polySurface123 + 閰掔簿妫夌悆 + + 鑰楁潗/楠ㄨ湣.png + + + 纰樹紡妫夌悆 + + SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_DianFuMianQiu_polySurface123 + 纰樹紡妫夌悆 + + 鑰楁潗/楠ㄨ湣.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Doc/Xml閰嶇疆鏂囨。.xml b/Doc/Xml閰嶇疆鏂囨。.xml index 0e9e783d..897e0bb0 100644 --- a/Doc/Xml閰嶇疆鏂囨。.xml +++ b/Doc/Xml閰嶇疆鏂囨。.xml @@ -32,7 +32,7 @@ - +