赞
踩
GUILayout.Space (2); EditorGUILayout.BeginHorizontal (); //EditorGUILayout.LabelField ("已选择的源文件路径",CurrentPath); GUILayout.Label ("已选择的源播放器路径:", style); GUILayout.TextField (sourcePlayerPath); EditorGUILayout.EndHorizontal (); GUILayout.Space (2); EditorGUILayout.BeginHorizontal (); //EditorGUILayout.LabelField ("已选择的源文件路径",CurrentPath); GUILayout.Label ("已选择的源微课资源路径:", style); GUILayout.TextField (GetStrByList (sourceWkPath)); EditorGUILayout.EndHorizontal (); GUILayout.Space (2); EditorGUILayout.BeginHorizontal (); //EditorGUILayout.LabelField ("已选择的源文件路径",CurrentPath); GUILayout.Label ("已选择的微课播放器路径:", style); GUILayout.TextField (fromWkPlayerPath); EditorGUILayout.EndHorizontal (); GUILayout.Space (5); EditorGUILayout.BeginHorizontal (); GUILayout.Label ("目标互动资源路径:", style); GUILayout.TextField (TargetAssetsPath); EditorGUILayout.EndHorizontal (); GUILayout.Space (2); EditorGUILayout.BeginHorizontal (); //EditorGUILayout.LabelField ("要复制的目标路径:",TargetPath); GUILayout.Label ("目标播放器路径:", style); GUILayout.TextField (TargetPlayerPath); EditorGUILayout.EndHorizontal (); GUILayout.Space (2); EditorGUILayout.BeginHorizontal (); //EditorGUILayout.LabelField ("要复制的目标路径:",TargetPath); GUILayout.Label ("目标微课资源路径:", style); GUILayout.TextField (TargetWkPath); EditorGUILayout.EndHorizontal (); EditorGUILayout.BeginHorizontal (); //EditorGUILayout.LabelField ("已选择的源文件路径",CurrentPath); GUILayout.Label ("目标微课播放器路径:", style); GUILayout.TextField (toWkPlayerPath); EditorGUILayout.EndHorizontal (); GUILayout.Space (5); IsAssetCopy = EditorGUILayout.Toggle ("互动资源", IsAssetCopy); IsPlayerCopy = EditorGUILayout.Toggle ("播放器资源", IsPlayerCopy); IsWkCopy = EditorGUILayout.Toggle ("微课资源(全部)", IsWkCopy); IsWkPlayer = EditorGUILayout.Toggle ("微课播放器", IsWkPlayer); EditorGUILayout.EndVertical (); GUILayout.Space (20); GUIStyle button_style; button_style =/\* GUI.skin.FindStyle ("flow node 1");\*/new GUIStyle (); button_style.fontSize = 17; button_style.fontStyle = FontStyle.Bold; //button\_style.margin = new RectOffset (0,0,0,0); button_style.alignment = TextAnchor.MiddleLeft; button_style.normal.textColor = Color.red; EditorGUILayout.BeginHorizontal (); GUILayout.Label ("当前已选项目是: ", GUILayout.Width (100)); button_style.normal.textColor = Color.green; GUILayout.Label (currentItemType.ToString (), button_style, GUILayout.Width (200)); EditorGUILayout.EndHorizontal (); GUIStyle st = GUI.skin.FindStyle ("flow node 2"); st.fontSize = 15; st.alignment = TextAnchor.UpperCenter; GUILayout.Space (10); if (GUILayout.Button ("制作版本号\n(慎点!)",st, GUILayout.Height (50), GUILayout.Width (150))) { CallBuildTool (); } GUILayout.EndArea (); //绘制右边 } private void CompactStringPath () { Resources.UnloadUnusedAssets (); //源资源 sourceAssetsPath = PathTool.CombinePath (Source_DirvePath, GetDirNameByType (currentItemType)); sourcePlayerPath = PathTool.CombinePath (Source_DirvePath, Target_player_module, GetDirNameByType (currentItemType)); fromWkPlayerPath = PathTool.CombinePath (Source_DirvePath, Source_player_module, "WeiKe"); toWkPlayerPath = PathTool.CombinePath (Target_DirvePath, currentItemType.ToString (), currentItemType.ToString () + "微课", Target_player_module, "WeiKe"); str = GetWkNameByType (currentItemType); if (str.Contains ("+")) { string[] sourceWkPath_Arr = str.Split ('+'); sourceWkPath.Clear (); foreach (var i in sourceWkPath_Arr) { if (!sourceWkPath.Contains (i)) sourceWkPath.Add (PathTool.CombinePath (Source_DirvePath, Target_weike, i)); } } else { sourceWkPath.Clear (); sourceWkPath.Add (PathTool.CombinePath (Source_DirvePath, Target_weike, GetWkNameByType (currentItemType))); } TargetAssetsPath = PathTool.CombinePath (Target_DirvePath, currentItemType.ToString (), currentItemType.ToString () + "互动", GetDirNameByType (currentItemType)); TargetPlayerPath = PathTool.CombinePath (Target_DirvePath, currentItemType.ToString (), currentItemType.ToString () + "互动", Target_player_module, GetDirNameByType (currentItemType)); TargetWkPath = PathTool.CombinePath (Target_DirvePath, currentItemType.ToString (), currentItemType + "微课", Target_weike, GetWkNameByType (currentItemType)); towkBg = PathTool.CombinePath (Target_DirvePath, currentItemType.ToString (), currentItemType + "微课", Target_weike, "WKLoadBG"); fromwkBg = PathTool.CombinePath (Source_DirvePath, Source_weike, "WKLoadBG"); towkXml = PathTool.CombinePath (Target_DirvePath, currentItemType.ToString (), currentItemType + "微课", Target_weike, "WK\_ID对照表.xml"); fromwkXml = PathTool.CombinePath (Source_DirvePath, Source_weike, "WK\_ID对照表.xml"); UnityEngine.Debug.Log ("源文件互动路径sourceAssetsPath" + sourceAssetsPath); UnityEngine.Debug.Log ("源文件互动播放器路径sourcePlayerPath" + sourcePlayerPath); UnityEngine.Debug.Log ("源文件微课资源路径sourceWkPath" + string.Join (" ", sourceWkPath.ToArray ())); UnityEngine.Debug.Log ("源文件WK\_ID对照表 " + fromwkXml); UnityEngine.Debug.Log ("源文件微课背景图路径 " + fromwkBg); UnityEngine.Debug.Log ("源文件微课播放路径 " + fromWkPlayerPath); UnityEngine.Debug.Log ("目标互动路径TargetAssetsPath" + TargetAssetsPath); UnityEngine.Debug.Log ("目标互动播放器路径TargetPlayerPath" + TargetPlayerPath); UnityEngine.Debug.Log ("目标微课资源路径TargetWkPath" + TargetWkPath); UnityEngine.Debug.Log ("目标微课背景图路径 towkBg" + towkBg); UnityEngine.Debug.Log ("目标WK\_ID对照表 " + towkXml); UnityEngine.Debug.Log ("目标文件微课播放器 " + toWkPlayerPath); } private string GetStrByList ( List<string> str_list ) { StringBuilder sb = new StringBuilder (); foreach (string s in str_list) { sb.Append (s); if (s != str_list[str_list.Count - 1]) sb.Append ("\n"); } return sb.ToString (); } private void CopySelectItem () { //互动资源 if (IsAssetCopy) CopySelectDirectory (sourceAssetsPath, TargetAssetsPath); //互动播放器 if (IsPlayerCopy) CopySelectDirectory (sourcePlayerPath, TargetPlayerPath); //微课资源 if (IsWkCopy) { foreach (var i in sourceWkPath) { CopySelectDirectory (i, TargetWkPath); } //背景图 CopySelectDirectory (fromwkBg, towkBg); //wk对照表 File.Copy (fromwkXml, towkXml, true); } //微课播放器 if (IsWkPlayer) CopySelectDirectory (fromWkPlayerPath, toWkPlayerPath); UnityEngine.Debug.Log (string.Format ("<color=red>复制完成{0}</color>", currentItemType)); } /// <summary> /// 复制选择的文件夹 /// </summary> /// <param name="sourcePath">源文件路径</param> /// <param name="targetPath">目标文件路径</param> private static void CopySelectDirectory ( string sourcePath, string targetPath ) { if (!Directory.Exists (targetPath)) { Directory.CreateDirectory (targetPath); } DirectoryInfo dirInfo = new DirectoryInfo (sourcePath); List<FileInfo> fileList = new List<FileInfo> (dirInfo.GetFiles ()); fileList.ForEach (c => { EditorUtility.DisplayProgressBar ("正在复制", c.FullName, (int)(fileList.IndexOf (c) + 1 / fileList.Count)); string destPath = PathTool.CombinePath (targetPath, c.Name); File.Copy (c.FullName, destPath, true); UnityEngine.Debug.Log (c.FullName + "复制到to" + destPath + "成功"); }); List<DirectoryInfo> folders = new List<DirectoryInfo> (dirInfo.GetDirectories ()); folders.ForEach (c => { string targetpath = PathTool.CombinePath (targetPath, c.Name); UnityEngine.Debug.Log (string.Format ("文件夹中 源文件{0},目标文件{1}", c.FullName, targetpath)); CopySelectDirectory (c.FullName, targetpath); }); EditorUtility.ClearProgressBar (); } /// <summary> /// 复制全部的文件夹 /// </summary> /// <param name="sourcePath"></param> /// <param name="targetPaht"></param> private static void CopyMultipleDirectory () { } /// <summary> /// 获得互动名称 /// </summary> /// <param name="type"></param> /// <returns></returns> private static string GetDirNameByType ( itemType type ) { string dirname = string.Empty; switch (type) { case itemType.安装识图: dirname = "AnZhuangShiTu"; break; case itemType.测量: dirname = "CeLiang"; break; case itemType.钢结构: dirname = "GangJieGou"; break; case itemType.工程识图: dirname = "GongChengShiTu"; break; case itemType.工艺: dirname = "GongYi"; break; case itemType.构造: dirname = "Struct"; break; case itemType.计量计价: dirname = "JiLiangJiJia"; break; case itemType.精装修: dirname = "jingzhuangxiu"; break; case itemType.工程力学: dirname = "GCLX"; break; case itemType.平法: dirname = "PingFa"; break; case itemType.造价识图: dirname = "CostKnowledge"; break; case itemType.装配式: dirname = "ZhuangPeiShi"; break; case itemType.建筑电气施工: dirname = "InstallProject"; break; case itemType.桥梁工程: dirname = "BridgeProject"; break; case itemType.道桥识图: dirname = "BridgeFigure"; break; case itemType.隧道工程: dirname = "SuiDaoProject"; break; default: break; } return dirname; } /// <summary> /// 获得wk名称 /// </summary> /// <param name="type"></param> /// <returns></returns> private static string GetWkNameByType ( itemType type ) { string wkName = string.Empty; switch (type) { case itemType.安装识图: wkName = "AZST"; break; case itemType.测量: wkName = "CL"; break; case itemType.钢结构: wkName = "GJG"; break; case itemType.工程识图: wkName = "GZst"; break; case itemType.工艺: wkName = "GRgy"; break; case itemType.构造: wkName = "GRgz"; break; case itemType.计量计价: wkName = "GRjljj"; break; case itemType.精装修: wkName = "ZSzx"; break; case itemType.工程力学: wkName = "GCLX"; break; case itemType.平法: wkName = ""; break; case itemType.造价识图: wkName = "GZst"; break; case itemType.装配式: wkName = "ZPS"; break; case itemType.建筑电气施工: wkName = "GRaz"; break; case itemType.桥梁工程: wkName = "QLGC"; break; case itemType.道桥识图: wkName = ""; break; case itemType.隧道工程: wkName = "SGGY+GZRZ+WYFJ"; break; default: break; } return wkName; } #endregion #region 调用打包工具 private static string FilePath = @"F:\workspace\PythonTest\PythonCallHardware\venv\Scripts\python.exe"; // [MenuItem("PublishTools/制作版本号",false,2)] private static void CallBuildTool () { string file = @"F:/workspace/PythonTest/PythonCallHardware/Scripts/CallBuildTools.py"; ProcessStartInfo start = new ProcessStartInfo (); start.FileName = FilePath; start.Arguments = file + " " + currentItemType; start.UseShellExecute = false; //参数用空格分隔 //start.Arguments = path + " " + type + " " + mode; start.RedirectStandardOutput = true; start.RedirectStandardInput = true; start.RedirectStandardError = true; start.CreateNoWindow = false; Process process = Process.Start (start); } #endregion
}
public class PythonCallBuild : EditorWindow
{
#region 调用python自动化打包
static PythonCallBuild window;
private static itemType CurrentType = itemType.测量;
private static bool ISWEIKE = false;
private static bool ISHUDONG = false;
[MenuItem (“PublishTools/调用Python自动化打包”, false, 3)]
private static void CallBuild ()
{
window = GetWindow ();
window.autoRepaintOnSceneChange = false;
window.maxSize = new Vector2 (430, 305);
window.Show ();
}
//互动2 微课是1 static string CurrentModeType = "1"; private void OnGUI () { EditorGUILayout.BeginHorizontal (); CurrentType = (itemType)EditorGUILayout.EnumPopup ("选择项目:", CurrentType, GUILayout.Width (300)); EditorGUILayout.EndHorizontal (); GUILayout.Label ("------------------------------------------------------------------------------------------------------------------------------"); EditorGUILayout.BeginHorizontal (); using (var posGroup = new EditorGUILayout.ToggleGroupScope ("类别(只能选一个)", true)) { ISWEIKE = EditorGUILayout.ToggleLeft ("微课", ISWEIKE); ISHUDONG = EditorGUILayout.ToggleLeft ("互动", ISHUDONG); } EditorGUILayout.EndHorizontal (); GUILayout.Space (10); GUILayout.BeginHorizontal (); GUILayout.Label ("------------------------------------------------------------------------------------------------------------------------------"); GUILayout.Label ("当前选择项目:"); GUILayout.Label (CurrentType.ToString ()); GUILayout.EndVertical (); if (GUILayout.Button ("开始调用", GUILayout.Width (100), GUILayout.Height (40))) { if (ISWEIKE) CurrentModeType = "1"; else if (ISHUDONG) CurrentModeType = "2"; else return; CallPythonExe (((int)CurrentType).ToString (), CurrentModeType); } } private static void CallPythonExe ( string type, string mode ) { ProcessStartInfo StartInfo = new ProcessStartInfo (); //python脚本的路径 string path = @"F:/workspace/PythonTest/PythonCallHardware/Scripts/CallHarware.py"; //(注意:用的话需要换成自己的)没有配环境变量的话,可以像我这样写python.exe的绝对路径 //(用的话需要换成自己的)。如果配了,直接写"python.exe"即可 StartInfo.FileName = @"F:\workspace\PythonTest\PythonCallHardware\venv\Scripts\python.exe"; //p.StartInfo.FileName = @"C:\Program Files\Python35\python.exe"; // sArguments为python脚本的路径 python值的传递路线strArr[]->teps->sigstr->sArguments //传递参数时 每个参数需要用空格 隔开 //在python中用sys.argv[ ]使用该参数 StartInfo.UseShellExecute = false; StartInfo.Arguments = path + " " + type + " " + mode; StartInfo.RedirectStandardOutput = true; StartInfo.RedirectStandardInput = true; StartInfo.RedirectStandardError = true; StartInfo.CreateNoWindow = false; Process process = Process.Start (StartInfo); //process.OutputDataReceived += new DataReceivedEventHandler (Out\_RecvData); StreamReader reader = process.StandardOutput; string result = ""; while (result != null) { result = reader.ReadLine (); if (string.IsNullOrEmpty (result)) break; UnityEngine.Debug.Log (result.ToString ()); } } //class ProjectType(enum.Enum): //''' //项目类别 //''' //CeLiang = 1 //GongYi = 2 //GCLX = 3 //AnZhuangShiTu = 4 //ZhuangPeiShi = 5 //PingFa = 6 //JingZhuangXiu = 7 //GouZhao = 8 //AnQuanWenMingGongDi = 9 //JiLiangJiJia = 10 //DaoLuGongCheng = 11 //QiangLiangGongCheng = 12 //ShouGongSuanLiang = 13 //GangJieGou=14, //# 建筑电气施工 //JianZhuDianQiShiGong=15, //DaqQiaoShiTu=16, //SuiDaoGongCheng=17, //# 不确定 //GongChengShiTu=18, #endregion static void Out_RecvData ( object sender, DataReceivedEventArgs e ) { if (!string.IsNullOrEmpty (e.Data)) { UnityEngine.Debug.Log (e.Data); } }
}
///
/// 工具类
///
public class PathTool
{
public static string CombinePath ( params string[] str )
{
string TmpPath = str[0];
for (int i = 0; i < str.Length; i++)
{
if (i != 0)
TmpPath = Path.Combine (TmpPath, str[i]);
}
TmpPath = TmpPath.Replace (“\”, “/”);
return TmpPath;
}
public static void CreatDirectory ( string path )
{
if (!string.IsNullOrEmpty (path))
{
bool isExist = Directory.Exists (path);
if (isExist == false)
Directory.CreateDirectory (path);
}
}
}
这是python脚本
import os
import sys
from pywinauto.application import Application
import time
import enum
import warnings
warnings.simplefilter(‘ignore’, category=UserWarning)
class AutoBuild(object):
def \_\_init\_\_(self): self.sufFileName = "" self.open_SufPath = "" # suf 盘符位置 self.Drive_path = "D:\工作安装包\网页版本suf" # 资源位置 self.ProjectFile = 'D:\工作安装包\网页版本打包项' # self.CurrentType=sys.argv[1] self.CurrentType = 1 self.CurrentModel = 1 def run(self): self.CurrentType = int(sys.argv[1]) self.CurrentModel = int(sys.argv[2]) self.ProjecttypeEnum = ProjectType(self.CurrentType) self.modelType = ModelType(self.CurrentModel) print(self.ProjecttypeEnum) print(self.modelType) # 获取suf路径 print('\*' \* 10) self.open_SufPath = self.GetSufByProject(self.ProjecttypeEnum) print(self.open_SufPath) # 打开sufdesign app = Application(backend='uia').start(r"F:\work\SetupFactory\SUFDesign.exe", timeout=10) # 把进程和当前获得句柄联系起来 app = Application().connect(path=r"F:\work\SetupFactory\SUFDesign.exe", timeout=10) time.sleep(1) # 获取 当前的窗 通过标题 dlg_new = app.window(title="Start a New Project") dlg_new.wait("ready", timeout=5) # dlg\_spec.menu\_select("File->Open") # 标识一下 dlg_new.draw_outline() btn_cancle = dlg_new[r'Cancle'] btn_cancle.click() dlg_Open = app.window(title=r"Untitled - Setup Factory") dlg_Open.wait("exists enabled visible ready", timeout=5) dlg_Open.draw_outline() # dlg\_Open.print\_control\_identifiers() # 使用快捷键 打开suf dlg_Open.type_keys("^O") dlg_ReOpen = app.window(title="Open") # 找到要打开路劲的文本框 edit = dlg_ReOpen["Edit"] edit.set_text(self.open_SufPath) time.sleep(1) # 快捷键 打开 # print(dlg\_ReOpen.print\_control\_identifiers()) # dlg\_ReOpen.type\_keys("%o") btn_open = dlg_ReOpen.child_window(title="打开(&O)", class_name="Button") btn_open.click() dlg_Pro = app.window(title=self.sufFileName + " - Setup Factory") dlg_Pro.wait("ready", timeout=10) time.sleep(2) # dlg\_Pro=app.window(title="Project") dlg_Pro.draw_outline() dlg_Pro.type_keys("{INS} ") dlg_addFile = app.window(title="Add Files to Project") time.sleep(2) dlg_addFile.draw_outline() dlg_addFile.child_window(title="All files in this folder and all sub folders", class_name="Button").click() # print(dlg\_addFile.print\_control\_identifiers()) # TODO 地址 获取元件 设置值 获取不到 卡在这了 dlg_addFile.child_window(title="All Files in Tree", class_name="Edit").set_text( self.GetProjectSource(self.ProjecttypeEnum) + "\All file in tree") # dlg\_addFile.child\_window(title="地址",class\_name="Edit").set\_text(self.GetProjectSource(self.ProjecttypeEnum)+"All file in tree") time.sleep(2) btn_open = dlg_addFile.child_window(title="打开(&O)", class_name="Button") btn_open.click() time.sleep(2) dlg_Pro = app.window(title=self.sufFileName + " - Setup Factory") dlg_Pro.wait("exists enabled visible ready", timeout=10) # ctrl ^ enter {ENTER}或者~ ALT % time.sleep(1) dlg_Pro.get_active() dlg_Pro.get_focus() dlg_Pro.type_keys("^a") dlg_Pro.type_keys("^{ENTER}") dlg_Mul = app.window(title="Multiple File Properties", class_name="#32770") # dlg\_Mul.wait("ready",timeout=10) # dlg\_Mul.child\_window(title="Overwrite if existing file is older", class\_name="ComboBox").click() # print(dlg\_Mul.print\_control\_identifiers()) # 选择组合框中的 dlg_Mul.ComboBoxWrapper.select("Always overwrite existing file") time.sleep(1) dlg_Mul.child_window(title="确定", class_name="Button").click() dlg_Pro = app.window(title=self.sufFileName + " - Setup Factory") dlg_Pro.draw_outline() time.sleep(1) dlg_Pro.type_keys("{F7}") dlg_pub = app.window(title="Publish Wizard - Select Distribution Media", class_name="#32770") # print(dlg\_pub.print\_control\_identifiers()) dlg_pub.child_window(title="&Next >", class_name='Button').click() dlg_pub = app.window(title="Publish Wizard - Select Output Location", class_name="#32770") dlg_pub.child_window(title="&Next >", class_name='Button').click() def GetProjectSource(self, project): '''
获取要打包的资源路径
:param project:
:return:
‘’’
ProjectSource = self.GetProject(self.ProjectFile, project)
if self.modelType == ModelType.WeiKe:
ProjectSource = os.path.join(ProjectSource, self.GetProject(“”, project) + “微课”)
if self.modelType == ModelType.HuDong:
ProjectSource = os.path.join(ProjectSource, self.GetProject(“”, project) + “互动”)
print(“准备打包的资源路径%s” % ProjectSource)
return ProjectSource
def GetSufByProject(self, project):
"""
获取项目的最终suf路径
:param project:
:return:
“”"
path = os.path.join(self.GetProject(self.Drive_path, project), self.GetProjectSufName(project))
print(“suf的最终路径%s” % path)
return path
def GetProject(self, Drive_path, project):
'''
获取盘符和项目路径
:param project:
:return:
‘’’
if project == ProjectType.CeLiang:
return os.path.join(Drive_path, “测量”)
if project == ProjectType.GongYi:
return os.path.join(Drive_path, “工艺”)
if project == ProjectType.GCLX:
return os.path.join(Drive_path, “工程力学”)
if project == ProjectType.AnZhuangShiTu:
return os.path.join(Drive_path, “安装识图”)
if project == ProjectType.ZhuangPeiShi:
return os.path.join(Drive_path, “装配式”)
if project == ProjectType.PingFa:
return os.path.join(Drive_path, “平法”)
if project == ProjectType.JingZhuangXiu:
return os.path.join(Drive_path, “精装修”)
if project == ProjectType.GouZhao:
return os.path.join(Drive_path, “构造”)
if project == ProjectType.AnQuanWenMingGongDi:
return os.path.join(Drive_path, “安全文明工地”)
if project == ProjectType.JiLiangJiJia:
return os.path.join(Drive_path, “计量计价”)
if project == ProjectType.DaoLuGongCheng:
return os.path.join(Drive_path, “道路工程”)
if project == ProjectType.QiangLiangGongCheng:
return os.path.join(Drive_path, “桥梁工程”)
if project == ProjectType.ShouGongSuanLiang:
return os.path.join(Drive_path, “手工算量”)
if project == ProjectType.GangJieGou:
return os.path.join(Drive_path, “钢结构”)
if project == ProjectType.JianZhuDianQiShiGong:
return os.path.join(Drive_path, “建筑电气施工”)
if project == ProjectType.SuiDaoGongCheng:
return os.path.join(Drive_path, “隧道工程”)
if project == ProjectType.DaqQiaoShiTu:
return os.path.join(Drive_path, “道桥识图”)
if project == ProjectType.GongChengShiTu:
return os.path.join(Drive_path, “工程识图”)
def GetProjectSufName(self, project):
'''
获取suf名称
:param project:
:return:
‘’’
filename = “”
if self.modelType == ModelType.HuDong:
if project == ProjectType.CeLiang: filename = "3.5hd资源.suf" if project == ProjectType.GongYi: filename = "工艺互动加速包.suf" if project == ProjectType.GCLX: filename = "工程力学互动加速包.suf" if project == ProjectType.AnZhuangShiTu: filename = "安装识图互动加速包.suf" if project == ProjectType.ZhuangPeiShi: filename = "装配式互动/Untitled.suf" if project == ProjectType.PingFa: filename = "平法互动.suf" if project == ProjectType.JingZhuangXiu: filename = "精装修互动/精装修互动.suf" if project == ProjectType.GouZhao: filename = "构造互动.suf" if project == ProjectType.AnQuanWenMingGongDi: filename = "安全文明工地.suf" if project == ProjectType.JiLiangJiJia: filename = "计量计价互动加速包.suf" if project == ProjectType.DaoLuGongCheng: filename = "" if project == ProjectType.QiangLiangGongCheng: filename = "" if project == ProjectType.ShouGongSuanLiang: filename = "" if project == ProjectType.GangJieGou: filename = "3.5WK资源.suf" if project == ProjectType.JianZhuDianQiShiGong: filename = "" if project == ProjectType.DaqQiaoShiTu: filename = "" if project == ProjectType.SuiDaoGongCheng: filename = "" if project == ProjectType.GongChengShiTu: filename = "" if self.modelType == ModelType.WeiKe: if project == project.CeLiang: filename = "3.5资源.suf" if project == ProjectType.GongYi: filename = "工艺微课加速包.suf" if project == ProjectType.GCLX: filename = "工程力学微课加速包.suf" if project == ProjectType.AnZhuangShiTu: filename = "安装识图微课加速包.suf" if project == ProjectType.ZhuangPeiShi: filename = "装配式微课/Untitled.suf" if project == ProjectType.PingFa: filename = "" if project == ProjectType.JingZhuangXiu: filename = "精装修微课/精装修微课.suf" if project == ProjectType.GouZhao: filename = "构造微课.suf" if project == ProjectType.AnQuanWenMingGongDi: filename = "" if project == ProjectType.JiLiangJiJia: filename = "计量计价微课加速包.suf" if project == ProjectType.DaoLuGongCheng: filename = "" if project == ProjectType.QiangLiangGongCheng: filename = "" if project == ProjectType.ShouGongSuanLiang: filename = "" if project == ProjectType.GangJieGou: filename = "3.5hd资源.suf" if project == ProjectType.JianZhuDianQiShiGong: filename = "" if project == ProjectType.DaqQiaoShiTu: filename = "" if project == ProjectType.SuiDaoGongCheng: filename = "" if project == ProjectType.GongChengShiTu: filename = "" self.sufFileName = filename return filename
class ProjectType(enum.Enum):
‘’’
项目类别
‘’’
还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!
王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。
对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!
【完整版领取方式在文末!!】
93道网络安全面试题
内容实在太多,不一一截图了
最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。