112 lines
4.4 KiB
C#
112 lines
4.4 KiB
C#
|
|
using Laservall.Solidworks.Model;
|
|||
|
|
using SolidWorks.Interop.sldworks;
|
|||
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Diagnostics;
|
|||
|
|
using System.Linq;
|
|||
|
|
using System.Text;
|
|||
|
|
using System.Threading.Tasks;
|
|||
|
|
using System.Windows.Shapes;
|
|||
|
|
using Xarial.XCad.Documents;
|
|||
|
|
using Xarial.XCad.SolidWorks.Documents;
|
|||
|
|
|
|||
|
|
namespace Laservall.Solidworks.Extension
|
|||
|
|
{
|
|||
|
|
public static class SWDocReader
|
|||
|
|
{
|
|||
|
|
public static void ReadDocProperties(IModelDoc2 doc,PartPropModel partPropModel)
|
|||
|
|
{
|
|||
|
|
if (doc != null)
|
|||
|
|
{
|
|||
|
|
partPropModel.GetType().GetProperties().ToList().ForEach(p =>
|
|||
|
|
{
|
|||
|
|
// Get DisplayName attribute
|
|||
|
|
p.CustomAttributes.ToList().ForEach(attr =>
|
|||
|
|
{
|
|||
|
|
if (attr.AttributeType == typeof(System.ComponentModel.DisplayNameAttribute))
|
|||
|
|
{
|
|||
|
|
var displayName = attr.ConstructorArguments[0].Value.ToString();
|
|||
|
|
// Get custom property value by display name
|
|||
|
|
var val2 = GetDocProperty(doc, displayName);
|
|||
|
|
if (val2 != null)
|
|||
|
|
{
|
|||
|
|
// 判断属性类型
|
|||
|
|
switch (p.PropertyType.Name)
|
|||
|
|
{
|
|||
|
|
case "Double":
|
|||
|
|
if (double.TryParse(val2, out double d))
|
|||
|
|
{
|
|||
|
|
p.SetValue(partPropModel, d);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case "Int32":
|
|||
|
|
if (int.TryParse(val2, out int i))
|
|||
|
|
{
|
|||
|
|
p.SetValue(partPropModel, i);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case "Boolean":
|
|||
|
|
if (bool.TryParse(val2, out bool b))
|
|||
|
|
{
|
|||
|
|
p.SetValue(partPropModel, b);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
p.SetValue(partPropModel, val2);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
//var val = partComponent.Component.CustomPropertyManager[p.Name];
|
|||
|
|
//if (val != null)
|
|||
|
|
//{
|
|||
|
|
// p.SetValue(partPropModel, val);
|
|||
|
|
//}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取当前激活配置的自定义属性
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="model"></param>
|
|||
|
|
/// <param name="propertyName"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static string GetDocProperty(IModelDoc2 model , string propertyName)
|
|||
|
|
{
|
|||
|
|
if (model == null)
|
|||
|
|
{
|
|||
|
|
return "未打开任何文档";
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
ModelDocExtension swModelDocExt = default(ModelDocExtension);
|
|||
|
|
CustomPropertyManager swCustProp = default(CustomPropertyManager);
|
|||
|
|
string val = "";
|
|||
|
|
string valout = "";
|
|||
|
|
int status;
|
|||
|
|
|
|||
|
|
//swModel = (ModelDoc2)swApp.ActiveDoc;
|
|||
|
|
swModelDocExt = model.Extension;
|
|||
|
|
|
|||
|
|
// Get the custom property data
|
|||
|
|
swCustProp = swModelDocExt.get_CustomPropertyManager("");
|
|||
|
|
//status = swCustProp.Get4(propertyName, false, out val, out valout);
|
|||
|
|
status = swCustProp.Get6(propertyName, false, out val,out valout,out bool wasResolved,out bool _);
|
|||
|
|
Debug.Print("Value: " + val);
|
|||
|
|
Debug.Print("Evaluated value: " + valout);
|
|||
|
|
//Debug.Print("Up-to-date data: " + status);
|
|||
|
|
if (wasResolved)
|
|||
|
|
{
|
|||
|
|
return valout;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return val;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|