C# SolidWorks二次开发——遍历单个零件的一些信息,如遍历face、loop等(SolidWorks 2020 + VS 2019)

C# SolidWorks二次开发——遍历单个零件的一些信息,如遍历face、loop等(SolidWorks 2020 + VS 2019)

这里介绍如何去遍历当前零件的一些基本信息,如遍历零件上的face、Loop、edge等,获取面的一些基本信息等,这些信息一般是我们进行下一步操作的基础。

这里给出了最基本最常用的一些信息的遍历方法,没有提到的可以参考SolidWorks官方帮助文档。

SolidWorks大致调用结构如下,具体参考SolidWorks官方帮助文档或网站:https://www.codestack.net/solidworks-api/getting-started/api-object-model/class-diagram/

在这里插入图片描述

1、获取当前的零件文档

在前两节课提到的Addin插件按钮会调用的函数中,获取当前的零件文档

public void CreateCube()
        {
            //获取当前文档
            IModelDoc2 activeDoc = iSwApp.IActiveDoc2;
            //当前文档转换为零件文档
            IPartDoc currentPartDoc = (IPartDoc)activeDoc;
            //如果非空,则调用遍历的函数
            if (currentPartDoc != null)
            {
            	//调用遍历面的函数
				TraverseFace(currentPartDoc);
            }
        }

2、遍历零件的Face

函数的传入参数为当前的零件文档(IPartDoc currentPartDoc)

 public void TraverseFace(IPartDoc currentPartDoc)
{
	//用于存放遍历到的IFace2的List
	List<IFace2> bodyFaces = new List<IFace2>();
	//获取所有Body
    Array bodies = (Array)(currentPartDoc.GetBodies2((int)swBodyType_e.swSolidBody, true));
    //遍历每个Body
    foreach (IBody2 body in bodies)
    {
        //获取所有Face
        Array faces = (Array)body.GetFaces();
        //遍历每个Face
        for (int i = 0; i < faces.Length; i++)
        {
        	//获取当前正在遍历的面
        	IFace2 face = (IFace2)faces.GetValue(i);
        	//加入到List中
            bodyFaces.Add(face);
        }
    }
}

3、获取Face的一些基本信息,如面类型、对应面类型的一些参数等

函数的传入参数为面(IFace2 tempFace)
仅例举常用的一些信息,其余信息可以查看帮助文档

public int GetFaceInformation(IFace2 tempFace)
{
	//获得该面的面积,结果保留8位小数
	double tempFaceArea = Math.Round(tempFace.GetArea(), 8);
	//获得该面的边数
	int tempFaceEdgeCount = tempFace.GetEdgeCount();
    //得到surface
    ISurface tempsurface = tempFace.GetSurface();
    //判断tempsurface的类型
    //如果该面为平面
    if(tempsurface.IsPlane())
    {
    	//得到平面的法向,其余信息可以查看帮助文档
    	double[] normalOfPlane = new double[3];
    	normalOfPlane[0] = tempSurface.PlaneParams[0];
        normalOfPlane[1] = tempSurface.PlaneParams[1];
        normalOfPlane[2] = tempSurface.PlaneParams[2];
    }
    //如果该面为柱面
    if(tempsurface.IsCylinder())
    {
    	//得到柱面半径,其余信息可以查看帮助文档
    	double radiusOfCylinder = tempsurface.CylinderParams[6];
    }
    //如果该面是球面
    if(tempsurface.IsSphere())
    {
    	//得到球面半径,其余信息可以查看帮助文档
    	double radiusOfSphere = tempsurface.SphereParams[3];
    }
}

4、遍历Loop、Edge等

函数的传入参数为面(IFace2 tempFace)
仅例举常用的一些信息,其余信息可以查看帮助文档

public int TraverseEdge(IFace2 tempFace)
{
	//获取面的环
    object[] tempLoops = (object[])tempFace.GetLoops();
    //遍历环上的边
    for (int a = 0; a < tempLoops.Length; a++)
    {
    	//获取当前在遍历的Loop
        ILoop2 tempLoop = (ILoop2)tempLoops[a];
        //如果是外环
        if (tempLoop.IsOuter() == true)
        {                        
            //取边
            object[] edges = (object[])tempLoop.GetEdges();
            //遍历边
            for(int b = 0; b < edges.Length; b++)
            {
            	//获取当前在遍历的Edge
            	IEdge tempEdge = (IEdge)edges[b];
            	//取该edge的起点
                if(edge.IGetStartVertex()!= null)
                {
                	double[] pointArray = new double[3];
                    pointArray = edge.IGetStartVertex().GetPoint();
                }
            }
        }
    }
}
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值