c# - 在 Solidworks 零件中查找孔
问题描述
我正在尝试使用 Solidworks API 在 C# 中创建一个应用程序,它可以帮助我检测 SolidWorks 零件中的孔。我对 C# 很陌生,这就像一个新的实验。
到目前为止,我编写了一个代码来做到这一点,但它并没有完全按照我想让他做的事情去做。它实际上选择了所有圆柱形零件,而不仅仅是孔。
另外,有没有办法使用 C# 来区分孔(完整的圆形边缘)和孔(不是完整的圆形边缘或在身体边缘切割的孔)
这是我的代码,我也会尝试发布一些图片以使其清楚。
namespace ColorCylFaces
{
class Program
{
static void Main(string[] args)
{
SldWorks.SldWorks mySwApp;
ModelDoc2 swDoc;
Surface swSurface;
PartDoc swPart;
object[] faces;
Face2[] swFaces;
object[] bodies;
Body2[] swBodies;
Boolean boolResult;
double[] EvalData = new double[3];
double[] dPt = new double[3];
double[] dNormVec = new double[3];
var vCylParams = new double[3];
object[] Orgn = new object[3];
object[] reyvec = new object[3];
Object[] DirVec = new object[3];
var Bounds = new double[3];
bool[] intersc = new bool[11];
int arr;
try
{
mySwApp = new SldWorks.SldWorks();
}
catch (Exception)
{
MessageBox.Show("La connexion à Solidworks a échoué!");
return;
throw;
}
swDoc = mySwApp.ActiveDoc;
if (swDoc == null)
{
MessageBox.Show("La prochaine fois, ouvrez une pièce!");
return;
}
Debug.Print("Nom du fichier: " + swDoc.GetPathName());
if (swDoc.GetType() != (int)swDocumentTypes_e.swDocPART)
{
MessageBox.Show("Le document actif n'est pas un Part. \n La prochaine fois, ouvrez une pièce, rien d'autre!");
return;
}
swPart = (PartDoc)swDoc;
bodies = swPart.GetBodies2((int)swBodyType_e.swSolidBody, false);
List<IBody2> bodyList = new List<IBody2>();
foreach (IBody2 item in bodies)
{
bodyList.Add(item);
}
foreach (Body2 swBody in bodies)
{
faces = swBody.GetFaces();
foreach (Face2 swFace in faces)
{
swSurface = swFace.GetSurface();
boolResult = swSurface.IsCylinder();
if (boolResult == true)
{
vCylParams = swSurface.CylinderParams;
Orgn[0] = vCylParams[0];
Orgn[1] = vCylParams[1];
Orgn[2] = vCylParams[2];
reyvec[0] = Math.Abs(Math.Abs(vCylParams[3]) - 1);
reyvec[1] = Math.Abs(Math.Abs(vCylParams[4]) - 1);
reyvec[2] = Math.Abs(Math.Abs(vCylParams[5]) - 1);
arr = swDoc.RayIntersections(
bodyList.ToArray(),
(object)Orgn,
(object)reyvec,
(int)swRayPtsOpts_e.swRayPtsOptsTOPOLS,
0.1,
1);
double[] colorInfo = swFace.MaterialPropertyValues;
if (colorInfo == null)
{
colorInfo = swDoc.MaterialPropertyValues;
}
colorInfo[0] = 1.0;
colorInfo[1] = 1.0;
colorInfo[2] = 1.0;
swFace.MaterialPropertyValues = colorInfo;
}
}
}
}
}
}
解决方案
我在 Codestack 上找到了一篇与此主题相关的文章。有一个关于如何区分实际孔和凸台的示例。你可以在这里找到它:https ://www.codestack.net/solidworks-api/geometry/determine-hole-boss/
我能想到的另一个解决方案是通过遍历特征树中的特征来读取所有孔向导特征。但这只会找到用孔向导创建的孔。
推荐阅读
- r - R - 识别并删除重复行的一个实例
- microsoft-teams - MS Teams Bot - 任务/获取 URL 未在 Web/桌面应用程序中加载,但在 android 应用程序中加载
- bash - 在 Google Cloud Composer 上使用 Airflow 运行 shell 脚本文件
- laravel - 在 Laravel 中使用多个相关模型验证 API 请求
- c# - Visual Studio (Go to All) - 如何忽略 bin 和 obj 文件夹
- python - 如何覆盖动态创建的类实例的方法
- pulseaudio - 脉冲音频:介子构建失败
- ansible - 可以根据主机名值执行任务
- database-design - 随着时间的推移扩展项目和数据库的正确方法
- networking - 安装 Openstack 和 Opendaylight