using PdmSwPlugin.Common.Constants; using PdmSwPlugin.Common.Interface; using PdmSwPlugin.Common.Setting; using PdmSwPlugin.Common.Util; using PdmSwPlugin.Common.Util.Http; using SolidWorks.Interop.sldworks; using SolidWorks.Interop.swconst; using System; using System.IO; using System.Linq; using System.Reflection; using System.Threading.Tasks; using System.Windows; namespace PdmSwPlugin.MaterialSelect { /// /// 分部类,主要是与Sw插件交互的方法 /// public partial class MaterialSelectControl : IActiveDocChangeHandler { static MaterialSelectControl() { // AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; } private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { string dir = new DirectoryInfo(Assembly.GetExecutingAssembly().Location).Parent.Parent.FullName; if (args.Name.Contains(".resources")) { return default; } if (AppDomain.CurrentDomain.GetAssemblies() .Where(x => !x.IsDynamic) .First(x => x.FullName == args.Name) is Assembly alreadyLoaded) { return alreadyLoaded; } if (Directory.EnumerateFiles(dir).First(x => Path.GetFileNameWithoutExtension(x) == new AssemblyName(args.Name).Name) is string toBeLoaded ) { return Assembly.LoadFile(toBeLoaded); } throw new DllNotFoundException(); } public SldWorks SwApp { get; set; } public ModelDoc2 LastActiveDoc { get; set; } public ModelDoc2 ActiveDoc { get; set; } public int ActiveDocType { get; set; } private HttpClientCreator clientCreator { get; set; } /// /// 图纸文件存放的公共文件夹 /// private readonly PluginSetting GlobalConfig; public MaterialSelectControl() : base() { InitializeComponent(); self.DataContext = this; GlobalConfig = PluginSetting.Instance; clientCreator = new HttpClientCreator(new HttpConfig(PluginSetting.Instance.BaseAddress)); } public MaterialSelectControl(SldWorks swAddin) : this() { SwApp = swAddin; } public void SetSwApp(SldWorks SwApp) { this.SwApp = SwApp; } public void OnSwActiveDocChange(ModelDoc2 lastDoc, ModelDoc2 doc, Component2 comp) { ActiveDoc = doc; ActiveDocType = doc.GetType(); ActiveDocPath = doc.GetPathName(); } private async void AddComponent(string componentPath) { ActiveDoc = ActiveDoc == null ? SwApp.IActiveDoc2 : ActiveDoc; if (ActiveDoc == null || ActiveDoc.GetType() != (int)swDocumentTypes_e.swDocASSEMBLY) { StatusBarText = "请打开装配体文件"; return; } if (!File.Exists(componentPath)) { MessageBox.Show("未找到图纸!路径:\r\n" + componentPath, "错误", MessageBoxButton.OK, MessageBoxImage.Error); return; } try { // 这要用异步,不然App调试的时候OpenDoc6卡死,MD await Task.Run(() => { ModelDoc2 current = ActiveDoc; int errors = 0, warings = 0; ModelDoc2 model = SwApp.OpenDoc6(componentPath, (int)swDocumentTypes_e.swDocPART, (int)swOpenDocOptions_e.swOpenDocOptions_Silent, "", errors, warings); model.Visible = false; current = SwApp.ActivateDoc3(current.GetTitle(), true, 0, errors); AssemblyDoc doc = (AssemblyDoc)current; var comp = doc.AddComponent5(model.GetTitle(), (int)swAddComponentConfigOptions_e.swAddComponentConfigOptions_CurrentSelectedConfig, "", false, "", -0.1, 0, 0); }).ContinueWith(t => { if (t.IsFaulted) { throw t.Exception; } }); //SelectionMgr selMgr = current.SelectionManager; //SelectData selData = selMgr.CreateSelectData(); //comp.Select4(false, selData, false); } catch (Exception e) { Logger.Error("加载图纸失败!错误:{0}", e); MessageBox.Show("加载图纸失败!", "错误", MessageBoxButton.OK, MessageBoxImage.Error); } } public void OnSwActiveDocSaved(ModelDoc2 doc, Component2 comp) { Logger.Info("123"); } public void OnCustomPropertyChange(string propName, string Configuration, string oldValue, string NewValue, int valueType) { //throw new NotImplementedException(); } public void OnDocDestroy(ModelDoc2 doc) { } public void AfterDocDestroy() { } } }