图层管理图层就是一个能保存模具、总装配体中各部件的工作层。就像一本书,图层是书中的每一页。
图层使用恰当是很重要的,比如你的文件里有多个部件时,你需要进行修改或查看时,仅仅使用隐藏的命令是比较繁琐的,这时你把不想看见的东西放进特定的图层里,随时可以打开或关闭,这样就很方便了。
这里整理了图层相关的操作方法,包括以下内容:
1、获取工作图层
2、获取图层状态
3、设置图层状态
4、指定除工作图层之外的所有图层状态
5、修改层状态
6、将指定的图层设置为相应的指定状态
7、把对象移动到指定层
8、修改对象的图层ID
/// <summary>
/// 获取工作图层
/// </summary>
/// <returns></returns>
public static int GetWorkLayer()
{
int workLayer;
theUFSession = UFSession.GetUFSession();
theUFSession.Layer.AskWorkLayer(out workLayer);
return workLayer;
}
/// <summary>
/// 获取图层状态
/// </summary>
/// <param name="layerId">图层id</param>
/// <returns></returns>
public static int GetLayerStatus(int layerId)
{
int status;
theUFSession = UFSession.GetUFSession();
theUFSession.Layer.AskStatus(layerId , out status);
return status;
}
/// <summary>
/// 设置图层状态
/// </summary>
/// <param name="layerId">图层id</param>
/// <param name="status">UF_LAYER_WORK_LAYER工作图层,UFConstants.UF_LAYER_ACTIVE_LAYER活动图层,UF_LAYER_REFERENCE_LAYER参考图层 或UF_LAYER_INACTIVE_LAYER非活动图层</param>
public static void SetLayerStatus(int layerId, int status)
{
theUFSession = UFSession.GetUFSession();
theUFSession.Layer.SetStatus(layerId, status);
}
/// <summary>
/// 指定除工作图层之外的所有图层状态
/// </summary>
/// <param name="status"></param>
public static void SetLayerAllButWork(int status)
{
theUFSession = UFSession.GetUFSession();
theUFSession.Layer.SetAllButWork(status);
}
/// <summary>
/// 修改层状态
/// </summary>
/// <param name="layerId">层id</param>
/// <param name="state">false=不显示,true=显示</param>
public static void ChangeLayerState(int layerId, bool state)
{
Session theSession = Session.GetSession();
workPart = theSession.Parts.Work;
NXOpen.Layer.StateInfo[] stateArray1 = new NXOpen.Layer.StateInfo[1];
stateArray1[0] = new NXOpen.Layer.StateInfo(layerId, NXOpen.Layer.State.Selectable);
workPart.Layers.ChangeStates(stateArray1, state);
}
/// <summary>
/// 将指定的图层设置为相应的指定状态
/// </summary>
/// <param name="layerCount">指定图层数量</param>
public static void SetManyLayerStatus(int layerCount, UFLayer.StatusInfo changes)
{
theUFSession = UFSession.GetUFSession();
theUFSession.Layer.SetManyLayersStatus(layerCount, ref changes);
}
/// <summary>
/// 把对象移动到指定层
/// </summary>
/// <param name="partObj"></param>
/// <param name="layerId"></param>
public static void MoveToTargetLayer(Part partObj, int layerId)
{
NXOpen.DisplayableObject[] objectArray1 = new NXOpen.DisplayableObject[0];
foreach (var dp in partObj.Bodies)
{
Array.Resize(ref objectArray1, objectArray1.Length + 1);
objectArray1[objectArray1.Length - 1] = (DisplayableObject)dp;
}
workPart.Layers.MoveDisplayableObjects(layerId, objectArray1);
}
/// <summary>
/// 修改对象的图层ID
/// </summary>
/// <param name="objTag"></param>
/// <param name="LayerId"></param>
public static void SetLayer(Tag objTag, int LayerId)
{
theUFSession = UFSession.GetUFSession();
theUFSession.Obj.SetLayer(objTag, LayerId);
}