C# SolidWorks 二次开发 API—导入dxf/dwg到图纸或者零件草图

C# SolidWorks 二次开发 API—导入dxf/dwg到图纸或者零件草图

有些情况下我们需要把以前的2D图纸借用到3D中,以前先画2D的时候就是把2D图画好之后 ,选中一些元素,直接Ctrl+C 然后在Solidworks中Ctrl+V就可以了。好像尺寸是没有的。 今天我们来看下如何找api,以及实现这个功能。路子其实都是相通的,会找一个,后面的都会了。
关键字? 这里很明显就是Dxf 或者dwg
来吧,开始搜索。

api帮助跳出来的第一个就是dxf/dwg files
下面有几个小主题,我们我们看下,和我们的目标比较近的就是import或者load .


而且两个方法中都有实例给我们参考:
如果看不懂,就可以复制百度翻译一把: 这样就可以继续研究了:


接下来的步骤就差不多了,挑一个自己喜欢的语言版本的实例,去测试效果。
如下面这个,就是其中一个例子:

下面是api中的源版

SOLIDWORKS API Help
Insert and Position DXF/DWG File in Drawing Example (C#)     
This example shows how to insert and position a DXF/DWG file in a drawing. 

//---------------------------------------------------------------------------
// Preconditions:
// 1. Open a drawing.
// 2. Replace DXF_file_path with the pathname of an existing DXF/DWG file.
// 3. Open the Immediate window.
//
// Postconditions:
// 1. Inserts the DXF/DWG file as per the specified import data.
// 2. Inspect the Immediate window.
//---------------------------------------------------------------------------
using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;
namespace InsertDXFDrawing_CSharp.csproj
{
    partial class SolidWorksMacro
    {

        public void Main()
        {
            const string sDwgFileName = "DXF_file_path";

            ModelDoc2 swModel = default(ModelDoc2);
            ModelView swModelView = default(ModelView);
            DrawingDoc swDraw = default(DrawingDoc);
            FeatureManager swFeatMgr = default(FeatureManager);
            Feature swFeat = default(Feature);
            Sketch swSketch = default(Sketch);
            View swView = default(View);
            double[] vPos = null;
            bool bRet = false;
            ImportDxfDwgData importData = default(ImportDxfDwgData);

            swModel = (ModelDoc2)swApp.ActiveDoc;
            swModelView = (ModelView)swModel.ActiveView;

            bRet = swModel.Extension.SelectByID2("Sheet1", "SHEET", 0.0, 0.0, 0, false, 0, null, 0);

            swDraw = (DrawingDoc)swModel;
            swFeatMgr = swModel.FeatureManager;
            importData = (ImportDxfDwgData)swApp.GetImportFileData(sDwgFileName);

            // Unit
            importData.set_LengthUnit("", (int)swLengthUnit_e.swINCHES);

            // Position
            bRet = importData.SetPosition("", (int)swDwgImportEntitiesPositioning_e.swDwgEntitiesCentered, 0, 0);

            // Sheet scale
            bRet = importData.SetSheetScale("", 1.0, 2.0);

            // Paper size
            bRet = importData.SetPaperSize("", (int)swDwgPaperSizes_e.swDwgPaperAsize, 0.0, 0.0);

            //Import method
            importData.set_ImportMethod("", (int)swImportDxfDwg_ImportMethod_e.swImportDxfDwg_ImportToExistingDrawing);

            // Import file with importData
            swFeat = swFeatMgr.InsertDwgOrDxfFile2(sDwgFileName, importData);
            swSketch = (Sketch)swFeat.GetSpecificFeature2();

            swView = (View)swDraw.GetFirstView();

            while ((swView != null))
            {
                if (object.ReferenceEquals(swSketch, swView.GetSketch()))
                {
                    break; 
                }
                swView = (View)swView.GetNextView();
            }

            vPos = (double[])swView.Position;

            Debug.Print("File = " + swModel.GetPathName());
            Debug.Print(" Sketch = " + swFeat.Name);
            Debug.Print(" View = " + swView.Name);
            Debug.Print(" Old Pos = (" + vPos[0] * 1000.0 + ", " + vPos[1] * 1000.0 + ") mm");

            // Move to right
            vPos[0] = vPos[0] + 0.01;
            swView.Position = vPos;

            vPos = (double[])swView.Position;
            Debug.Print(" New Pos = (" + vPos[0] * 1000.0 + ", " + vPos[1] * 1000.0 + ") mm");

            // Redraw
            double[] rect = null;
            rect = null;
            swModelView.GraphicsRedraw(rect);

        }

        public SldWorks swApp;

    }
} 

这个我们用到我们的实例中,需要做一些修改。

首选把 swApp 引用改为实体,如我们最近系列中一直使用的
SldWorks swApp = PStandAlone.GetSolidWorks();
然后就是基本照抄模式。

下面我的代码是另一个例子的C#版本。

 /// <summary>
        /// 导入dxf到 sketch
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnImpotDxfToSketch_Click(object sender, EventArgs e)
        {
            SldWorks swApp = PStandAlone.GetSolidWorks();

            //确保文件存在
            string filename = @"C:\Users\Public\Documents\SOLIDWORKS\SOLIDWORKS 2018\samples\tutorial\importexport\rainbow.DXF";

            ImportDxfDwgData importData = (ImportDxfDwgData)swApp.GetImportFileData(filename);

            importData.ImportMethod[""] = (int)swImportDxfDwg_ImportMethod_e.swImportDxfDwg_ImportToPartSketch;

            int longerrors = 0;

            var newDoc = swApp.LoadFile4(filename, "", importData, ref longerrors);

            //Gets
            Debug.Print("Part Sketch Gets:");
            Debug.Print(" Add constraints: " + importData.AddSketchConstraints[""]);
            Debug.Print(" Merge points: " + importData.GetMergePoints(""));
            Debug.Print(" Merge distance: " + (importData.GetMergeDistance("") * 1000));
            Debug.Print(" Import dimensions: " + importData.ImportDimensions[""]);
            Debug.Print(" Import hatch: " + importData.ImportHatch[""]);
            //Sets
            Debug.Print("Part Sketch Sets:");
            importData.AddSketchConstraints[""] = true;
            Debug.Print(" Add constraints: " + importData.AddSketchConstraints[""]);
            var retVal = importData.SetMergePoints("", true, 0.000002);
            Debug.Print(" Merge points: " + retVal);
            Debug.Print(" Merge distance: " + (importData.GetMergeDistance("") * 1000));
            importData.ImportDimensions[""] = true;
            Debug.Print(" Import dimensions: " + importData.ImportDimensions[""]);
            importData.ImportHatch[""] = false;
            Debug.Print(" Import hatch: " + importData.ImportHatch[""]);
        }

执行完之后 。solidworks中出现了传说中的彩虹!哈哈。。。


立即窗口中显示 了一些信息,后面有空继续研究!
代码已经上传.可在此下载源码:https://gitee.com/painezeng/CSharpAndSolidWorks

posted @
2023-03-21 23:08 
painezeng  阅读(
0)  评论(
0
编辑 
收藏 
举报  
来源

C# SolidWorks 二次开发 API —创建异型孔特征

C# SolidWorks 二次开发 API —创建异型孔特征

之前有网友咨询过如何创建异型孔特征,今天我们来看下如何实现:


异孔特征中参数比较多,想要用的好还是要看API的帮助文档:

下面是简单的一个代码:

        /// <summary>
        /// 插入异形孔特征
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnInsertHole_Click(object sender, EventArgs e)
        {
            SldWorks swApp = PStandAlone.GetSolidWorks();

            AddHoleForThisPoint("holePoints", 10, "异型孔测试");
        }

        /// <summary>
        /// 插入简单孔特征
        /// </summary>
        /// <param name="sketchName">草图名称</param>
        /// <param name="DiaSize">孔径</param>
        /// <param name="holeName">名称</param>
        public void AddHoleForThisPoint(string sketchName, double DiaSize, string holeName)
        {
            SldWorks SwApp;

            Feature swFeature;

            string fileName;
            long errors;
            long warnings;
            bool status;
            int SlotType;
            int HoleType;
            int StandardIndex;
            int FastenerTypeIndex;
            string SSize;
            short EndType;
            double ConvFactorLength;
            double ConvFactorAngle;
            double Diameter;
            double Depth;
            double Length;
            double ScrewFit;
            double DrillAngle;
            double NearCsinkDiameter;
            double NearCsinkAngle;
            double FarCsinkDiameter;
            double FarCsinkAngle;
            double Offset;
            string ThreadClass;
            double CounterBoreDiameter;
            double CounterBoreDepth;
            double HeadClearance;
            double BotCsinkDiameter;
            double BotCsinkAngle;
            WizardHoleFeatureData2 swWizardHoleFeatData;

            SldWorks swApp = PStandAlone.GetSolidWorks();

            ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc;

            var swFeatureMgr = swModel.FeatureManager;

            var swModelDocExt = swModel.Extension;

            status = swModel.Extension.SelectByID2("Front Plane", "PLANE", 0, 0, 0, false, 0, null, 0);

            HoleType = (int)swWzdGeneralHoleTypes_e.swWzdLegacy;
            StandardIndex = -1;
            FastenerTypeIndex = -1;
            SSize = "";
            EndType = (int)swEndConditions_e.swEndCondThroughAll;
            ConvFactorAngle = -1;

            Diameter = DiaSize / 1000;

            Depth = -1;
            Length = -1;

            CounterBoreDiameter = 0;    // Value1
            CounterBoreDepth = 0;   // Value2
            HeadClearance = -1;                              // Value3
            ScrewFit = -1;                                   // Value4
            DrillAngle = -1;                                 // Value5
            NearCsinkDiameter = -1;                          // Value6
            NearCsinkAngle = -1;                             // Value7
            BotCsinkDiameter = -1;                           // Value8
            BotCsinkAngle = -1;                              // Value9
            FarCsinkDiameter = -1;                           // Value10
            FarCsinkAngle = -1;                              // Value11
            Offset = -1;                                     // Value12
            ThreadClass = "";

            swFeature = swFeatureMgr.HoleWizard5(HoleType, StandardIndex, FastenerTypeIndex, SSize, EndType, Diameter, Depth, Length, CounterBoreDiameter, CounterBoreDepth, HeadClearance, ScrewFit, DrillAngle, NearCsinkDiameter, NearCsinkAngle, BotCsinkDiameter, BotCsinkAngle, FarCsinkDiameter, FarCsinkAngle, Offset, ThreadClass, false, false, false, false, false, false);

            Feature holeFeature = (Feature)swFeature.GetFirstSubFeature();

            Feature sizeFeature = (Feature)holeFeature.GetNextSubFeature();

            holeFeature.Select2(false, 0);
            swModel.EditSketch();

            swModel.ClearSelection2(true);
            status = swModel.Extension.SelectByID2("Point1", "SKETCHPOINT", 0, 0, 0, false, 0, null, 0);

            status = swModel.Extension.SelectByID2("Point1@" + sketchName, "EXTSKETCHPOINT", 0, 0, 0, true, 0, null, 0);

            swModel.SketchAddConstraints("sgCOINCIDENT");
            swModel.ClearSelection2(true);

            swModel.ClearSelection2(true);
            swModel.SketchManager.InsertSketch(true);

            holeFeature.Name = holeName + "-点位";
            sizeFeature.Name = holeName + "-尺寸";

            swFeature.Name = holeName;

            status = swModel.Extension.SelectByID2(holeName, "BODYFEATURE", 0, 0, 0, false, 4, null, 0);
            status = swModel.Extension.SelectByID2(sketchName, "SKETCH", 0, 0, 0, true, 64, null, 0);

            swFeature = swModel.FeatureManager.FeatureSketchDrivenPattern(true, false)
            ;

            swFeature.Name = "阵列-" + holeName;
        }
   

运行完之后 效果如下图,我打的是简单直孔,如果要打螺纹孔这些需要细看api参数。

可在此下载源码:https://gitee.com/painezeng/CSharpAndSolidWorks

posted @
2023-03-15 12:20 
painezeng  阅读(
0)  评论(
0
编辑 
收藏 
举报  
来源

C# SolidWorks 二次开发 API — 2018版 中文翻译-完整版共享

C# SolidWorks 二次开发 API — 2018版 中文翻译-完整版共享

这是2018的api帮助文档看了一下翻译版,我把之前翻译的文件免费共享下,希望能对大家有所帮助。

如果大家想查找快速了解某个功能,可以直接在Excel表中查找全部。

之前有两篇共享了官方示例与Modeldoc2的一些内容,大家可以去看。

标题 中文描述
IAdvancedHoleFeatureData Interface Methods 有关此类型的所有成员的列表,请参阅iadvancedholefeaturedata members。
AccessSelections Method (IAdvancedHoleFeatureData) 获取对用于定义高级孔特征的选择的访问权限。
GetFarSideElements Method (IAdvancedHoleFeatureData) 获取此高级孔中的远端孔元素。
GetNearSideElements Method (IAdvancedHoleFeatureData) 获取此高级孔中的近边孔元素。
ReleaseSelectionAccess Method (IAdvancedHoleFeatureData) 释放对用于定义孔向导特征的选择的访问权限。
SetFarSideElements Method (IAdvancedHoleFeatureData) 设置此高级孔中的远侧孔元素。
SetNearSideElements Method (IAdvancedHoleFeatureData) 设置此高级孔中的近边孔元素。
IAdvancedSelectionCriteria Interface Methods 有关此类型的所有成员的列表,请参阅IAdvancedSelectionCriteria成员。
AddItem Method (IAdvancedSelectionCriteria) 将条件添加到高级组件选择列表中。
DeleteItem Method (IAdvancedSelectionCriteria) 从高级组件选择列表中删除条件。
GetItem Method (IAdvancedSelectionCriteria) 获取高级组件选择列表中的指定条件。
GetItemCount Method (IAdvancedSelectionCriteria) 获取高级组件选择列表中的条件数。
LoadCriteria Method (IAdvancedSelectionCriteria) 加载指定的查询文件(.sqy)并使其成为当前的高级组件选择列表。
SaveCriteria Method (IAdvancedSelectionCriteria) 将当前高级组件选择列表保存到指定文件。
Select Method (IAdvancedSelectionCriteria) 在“高级组件选择”列表中选择组件。
IAnimation Interface Methods 有关此类型的所有成员的列表,请参见iAnimation Members。
IAnnotationView Interface Methods 有关此类型的所有成员的列表,请参见IAnnotationView成员。
Activate Method (IAnnotationView) 激活此批注视图。
ActivateAndReorient Method (IAnnotationView) 激活并重新定向此批注视图。
GetAnnotations2 Method (IAnnotationView) 获取此批注视图中的批注。
GetViewRotation Method (IAnnotationView) 获取批注视图相对于模型的X-Y平面的旋转矩阵。
Hide Method (IAnnotationView) 隐藏未激活的批注视图中的批注。
IGetViewRotation Method (IAnnotationView) 获取批注视图相对于模型的X-Y平面的旋转矩阵。
IsShown Method (IAnnotationView) 获取是否显示此批注视图中的批注。
MoveAnnotations Method (IAnnotationView) 将指定的批注移动到此批注视图。
Orient Method (IAnnotationView) 确定此批注视图的方向。
Show Method (IAnnotationView) 显示未激活的批注视图中的批注。
IAnnotation Interface Methods 有关此类型的所有成员的列表,请参见iAnnotation Members。
AddOrUpdateStyle Method (IAnnotation) 添加或更新链接到指定样式的注释。
ApplyDefaultStyleAttributes Method (IAnnotation) 将默认样式属性应用于此批注。
CanShowInAnnotationView Method (IAnnotation) 获取此批注是否可以显示在指定的批注视图中。
CanShowInMultipleAnnotationViews Method (IAnnotation) 获取此批注是否可以在多个批注视图中显示。
CheckSpelling Method (IAnnotation) 拼写检查此批注中的文本。
ConvertToMultiJog Method (IAnnotation) 将具有引线的注释转换为具有多折弯引线的注释。
DeleteStyle Method (IAnnotation) 删除指定的样式。
DeSelect Method (IAnnotation) 取消选择此批注。
GetArrowHeadCount Method (IAnnotation) 获取此符号上的箭头数。
GetArrowHeadSizeAtIndex Method (IAnnotation) 获取此批注上指定引线的箭头大小。
GetArrowHeadStyleAtIndex Method (IAnnotation) 获取此批注上特定引线的箭头样式。
GetAttachedEntities3 Method (IAnnotation) 获取此批注附加到的实体。
GetAttachedEntityCount3 Method (IAnnotation) 获取此批注附加到的实体数。
GetAttachedEntityTypes Method (IAnnotation) 获取附加到此批注的实体类型。
GetDashedLeader Method (IAnnotation) 获取此引线是虚线还是实线。
GetDimXpertFeature Method (IAnnotation) 获取与此批注关联的dimxpert功能。
GetDimXpertName Method (IAnnotation) 获取此批注的dimxpert名称。
GetDisplayData Method (IAnnotation) 获取此批注的显示数据。
GetFlipPlaneTransform Method (IAnnotation) 获取批注平面在相反方向上的转换矩阵。
GetLeaderAllAround Method (IAnnotation) 获取此批注的全方位符号显示的设置。
GetLeaderCount Method (IAnnotation) 获取此批注上的引线数。
GetLeaderPerpendicular Method (IAnnotation) 获取此批注的垂直弯曲引线显示设置。
GetLeaderPointsAtIndex Method (IAnnotation) 获取有关此批注上指定引线的坐标信息。
GetLeaderSide Method (IAnnotation) 获取此批注的引线附件侧设置。
GetLeaderStyle Method (IAnnotation) 获取此领导的样式。
GetMultiJogLeaderCount Method (IAnnotation) 获取此批注上多个折弯指引线的数目。
GetMultiJogLeaders Method (IAnnotation) 获取此批注上的多重折弯指引线。
GetName Method (IAnnotation) 获取此批注的名称。
GetNext3 Method (IAnnotation) 获取下一个批注。
GetParagraphs Method (IAnnotation) 获取此注释批注中的段落。
GetPlane Method (IAnnotation) 获取批注相对于模型的X-Y平面的旋转矩阵。
GetPosition Method (IAnnotation) 获取此批注的位置。
GetSmartArrowHeadStyle Method (IAnnotation) 获取此批注的智能箭头样式的设置。
GetSpecificAnnotation Method (IAnnotation) 获取与此批注关联的特定基础对象。
GetStyleName Method (IAnnotation) 获取应用于此批注的样式的名称。
GetTextFormat Method (IAnnotation) 获取此批注中指定文本的文本格式。
GetTextFormatCount Method (IAnnotation) 获取此批注的文本格式数。
GetType Method (IAnnotation) 获取批注的类型。
GetUseDocTextFormat Method (IAnnotation) 获取SolidWorks当前是否正在为此批注使用文档默认文本格式设置。
GetVisualProperties Method (IAnnotation) 获取此批注的视觉属性。
IGetAttachedEntityTypes Method (IAnnotation) 获取附加到此批注的所有实体的类型。
IGetDisplayData Method (IAnnotation) 获取批注的显示数据。
IGetLeaderPointsAtIndex Method (IAnnotation) 获取有关此批注上指定引线的坐标信息。
IGetMultiJogLeaders Method (IAnnotation) 获取此批注上的多重折弯指引线。
IGetPosition Method (IAnnotation) 获取此批注的位置。
IGetSpecificAnnotation Method (IAnnotation) 获取与此批注关联的特定基础对象。
IGetTextFormat Method (IAnnotation) 获取此批注中指定文本的文本格式。
IGetVisualProperties Method (IAnnotation) 获取此批注的视觉属性。
IsDangling Method (IAnnotation) 获取此批注是否悬空。
IsDimXpert Method (IAnnotation) 获取批注是否为dimxpert批注。
ISetAttachedEntities Method (IAnnotation) 将此批注附加到指定的实体。
ISetTextFormat Method (IAnnotation) 设置此批注中指定文本的文本格式信息。
LoadStyle Method (IAnnotation) 加载指定的样式。
SaveStyle Method (IAnnotation) 保存指定的样式。
Select3 Method (IAnnotation) 选择此批注并将其标记。
SetArrowHeadSizeAtIndex Method (IAnnotation) 设置此批注上指定引线的箭头大小。
SetArrowHeadStyleAtIndex Method (IAnnotation) 设置此批注上特定引线的箭头样式。
SetAttachedEntities Method (IAnnotation) 将此批注附加到指定的实体。
SetLeader3 Method (IAnnotation) 设置此批注的引线特征。
SetLeaderAttachmentPointAtIndex Method (IAnnotation) 为具有指定索引的批注设置引线的指定附着点。
SetName Method (IAnnotation) 设置此批注的名称。
SetPosition2 Method (IAnnotation) 设置此批注的位置。
SetStyleName Method (IAnnotation) 设置此批注的样式。
SetTextFormat Method (IAnnotation) 设置此批注中指定文本的文本格式。
IAssemblyDoc Interface Methods 有关此类型的所有成员的列表,请参见iAssemblyDoc成员。
ActivateGroundPlane Method (IAssemblyDoc) 激活指定配置的地平面。
AddComponent5 Method (IAssemblyDoc) 将指定配置选项的指定组件添加到此程序集。
AddComponentConfiguration Method (IAssemblyDoc) 为最后选定的部件添加新配置。
AddComponents3 Method (IAssemblyDoc) 将多个零部件添加到部件中。
AddConcentricMateWithTolerance Method (IAssemblyDoc) 将未对齐的同心配合添加到此部件。
AddDistanceMate Method (IAssemblyDoc) 将距离配合添加到此部件。
AddMate5 Method (IAssemblyDoc) 将配合添加到此部件。
AddPipePenetration Method (IAssemblyDoc) 使用在选定草图点处结束的管道穿透相邻管件或管道。
AddPipingFitting Method (IAssemblyDoc) 将管件添加到当前管道部件。
AddSmartComponent Method (IAssemblyDoc) 将指定坐标处的指定组件作为智能组件添加到此程序集。
AddToFeatureScope Method (IAssemblyDoc) 将零部件添加到当前选定部件特征的范围中。
AutoAngleAxis Method (IAssemblyDoc) 自动检测轴的角度伴侣。
AutoExplode Method (IAssemblyDoc) 自动生成当前部件配置的分解图。
CompConfigProperties5 Method (IAssemblyDoc) 设置指定配置中选定组件的属性。
CopyWithMates2 Method (IAssemblyDoc) 复制此部件中的一个或多个具有配合的零部件。
CreateExplodedView Method (IAssemblyDoc) 创建活动程序集配置的分解视图。
CreateMate Method (IAssemblyDoc) 使用指定的数据创建高级配合。
CreateMateData Method (IAssemblyDoc) 为指定的配合类型创建高级配合特征数据。
CreateSmartComponent Method (IAssemblyDoc) 创建智能组件。
CreateSpeedPak Method (IAssemblyDoc) 为此程序集中选定部件的活动配置创建指定类型的SpeedPak。
DeleteSelections Method (IAssemblyDoc) 删除子部件的选定零部件或选定零部件的子部件。
DissolveComponentPattern Method (IAssemblyDoc) 溶解选定的组件模式。
DissolveSubAssembly Method (IAssemblyDoc) 在此部件中分解选定的部件。
EditAssembly Method (IAssemblyDoc) 切换回程序集文档进行编辑。
EditConcentricMate Method (IAssemblyDoc) 编辑未对齐的同心配合。
EditDistanceMate Method (IAssemblyDoc) 编辑距离配合。
EditMate4 Method (IAssemblyDoc) 编辑选定的装配零部件配合关系。
EditPart2 Method (IAssemblyDoc) 在部件上下文中编辑选定的零件。
ExitIsolate Method (IAssemblyDoc) 退出隔离所选组件并将程序集返回其初始显示状态。
FeatureByName Method (IAssemblyDoc) 返回部件中命名特征的iFeature对象。
FileDeriveComponentPart Method (IAssemblyDoc) 从当前选定的部件创建新的零件文档。
FixComponent Method (IAssemblyDoc) 修复选定的组件;即,使其不可移动。
ForceUpdateElectricalData2 Method (IAssemblyDoc) 强制更新电气数据。
GetActiveGroundPlane Method (IAssemblyDoc) 获取指定配置的活动地平面。
GetAdvancedSelection Method (IAssemblyDoc) 获取高级组件选择。
GetBox Method (IAssemblyDoc) 获取边界框。
GetComponentByID Method (IAssemblyDoc) 使用组件ID获取顶级程序集组件。
GetComponentByName Method (IAssemblyDoc) 获取指定的顶级程序集组件。
GetComponentCount Method (IAssemblyDoc) 获取此程序集的活动配置中的组件数。
GetComponents Method (IAssemblyDoc) 获取此程序集的活动配置中的所有组件。
GetDragOperator Method (IAssemblyDoc) 获取此程序集中动态拖动操作的拖动运算符。
GetDroppedAtEntity Method (IAssemblyDoc) 获取指向将文件放入此程序集中的实体的指针。
GetEditTarget Method (IAssemblyDoc) 获取当前正在编辑的模型文档。
GetEditTargetComponent Method (IAssemblyDoc) 获取当前正在编辑的组件。
GetExplodedViewConfigurationName Method (IAssemblyDoc) 获取指定分解视图的配置名称。
GetExplodedViewCount2 Method (IAssemblyDoc) 获取指定配置中的分解视图数。
GetExplodedViewNames2 Method (IAssemblyDoc) 获取指定配置中分解视图的名称。
GetFeatureScope Method (IAssemblyDoc) 获取受此功能影响的组件。
GetFeatureScopeCount Method (IAssemblyDoc) 获取受此功能影响的组件数。
GetLightWeightComponentCount Method (IAssemblyDoc) 获取程序集中轻型组件的数目。
GetRouteManager Method (IAssemblyDoc) 获取SolidWorks路由API。
GetUnloadedComponentNames Method (IAssemblyDoc) 获取已卸载组件的路径、引用的配置名称、卸载原因、文档类型和名称。
GetVisibleComponentsInView Method (IAssemblyDoc) 获取此程序集中要另存为实体的可见组件的列表。
GetVisibleComponentsInViewCount Method (IAssemblyDoc) 获取此程序集中可见组件的数目。
HasUnloadedComponents Method (IAssemblyDoc) 获取此程序集是否具有隐藏或抑制的已卸载组件。
IAddComponents3 Method (IAssemblyDoc) 将多个零部件添加到部件中。
IFeatureByName Method (IAssemblyDoc) 返回部件中命名特征的iFeature对象。
IGetBox Method (IAssemblyDoc) 获取边界框。
IGetComponents Method (IAssemblyDoc) 获取此程序集的活动配置中的所有组件。
IGetDragOperator Method (IAssemblyDoc) 获取此程序集中动态拖动操作的拖动运算符。
IGetEditTarget2 Method (IAssemblyDoc) 获取当前正在编辑的模型文档。
IGetFeatureScope Method (IAssemblyDoc) 获取受此功能影响的组件。
IGetVisibleComponentsInView Method (IAssemblyDoc) 获取此程序集中要另存为实体的可见组件的列表。
InsertCavity4 Method (IAssemblyDoc) 使用选定的零部件将型腔插入激活零件。
InsertDerivedPattern Method (IAssemblyDoc) 从选定的阵列和种子组件创建派生组件。
InsertEnvelope Method (IAssemblyDoc) 在此程序集中以指定的配置名称添加信封。
InsertJoin2 Method (IAssemblyDoc) 从合并的选定组件构造特征。
InsertLoadReference Method (IAssemblyDoc) 创建对指定或选定配合的配合加载引用。
InsertNewAssembly Method (IAssemblyDoc) 创建新的虚拟子部件,并可选地将其保存到指定的文件中。
InsertNewPart2 Method (IAssemblyDoc) 在指定的面或平面上插入新零件。
InsertNewVirtualAssembly Method (IAssemblyDoc) 从该程序集创建新程序集,并将其内部保存为虚拟组件。

 

 

下载路径 https://download.csdn.net/download/zengqh0314/12170828

 

posted @
2023-03-02 19:00 
painezeng  阅读(
0)  评论(
0
编辑 
收藏 
举报  
来源

C# SolidWorks二次开发 API-撤销与重做

C# SolidWorks二次开发 API-撤销与重做

	人非圣人,孰能无错。 不管是做设计还是做什么事,都有可能操作错误或者误操作的情况,熟悉windows的系统的人都知道Ctrl+Z是撤销,Ctrl+Y是重做,所以solidworks中也是有同样的操作的,如下图,在新建一个草图之后,画两条线,在撤销里面就可以看到对应的操作,可以方便的进行撤销与重做操作。如下图:		

查API

既然我们已经知道这个动作,那我们可以在API帮助中搜索对应的关键字,目前虽然没有官方的中文版的API帮助,但我之前共享的翻译文档也是可以参考的哈。

api帮助里面有不少可以查看的信息,这里我就不深入介绍了。

用法


直接上代码,下面就是让程序修改了长和宽,但是在用户界面上可以直接撤销修改。

		private void btnUndoOrRedo_Click(object sender, EventArgs e)
        {

            var swApp = PStandAlone.GetSolidWorks();
            var swModelDoc = (ModelDoc2)swApp.ActiveDoc;
            var swModelDocExt = swModelDoc.Extension;


            //开始记录可以退回的步骤
            swModelDocExt.StartRecordingUndoObject();      

			//这里可以修改多个尺寸,零件,理论上多少步都可以。相当于一个状态备份
			
            Dimension dimension = (Dimension)swModelDoc.Parameter("D1@Extrude2");
            dimension.SetValue3(0.21, 1,null) ;           
            dimension = (Dimension)swModelDoc.Parameter("D4@Sketch1");
            dimension.SetValue3(0.56, 1, null);   
            
            swModelDoc.EditRebuild3();

            //记录结束 ,是否显示在退回列表中。
            swModelDocExt.FinishRecordingUndoObject2("修改长和宽", false);
			
            //撤销
            //swModelDoc.EditUndo2(1);

            //重新执行
            //swModelDoc.EditRedo2(1);


        }
执行完上面程序撤销之前的代码, 现在solidworks上面的撤销功能就亮了,同时我们可以看到有哪几步可以撤销,程序可以显示对应的描述,方便用户执行。
当然也有些操作可能无法撤销,我没有进行太多测试。


好了,今天的撤销的重做就讲这么多了,大家有需要的话可以继续研究。

源代码继续上传在gitee上面。有需要的可以去取。

posted @
2023-02-22 18:15 
painezeng  阅读(
0)  评论(
0
编辑 
收藏 
举报  
来源

C# SolidWorks 二次开发 API—获取配合信息

C# SolidWorks 二次开发 API—获取配合信息

好像快有一个月没有更新,最近有个小需求,设计时不时就会把安装螺丝的孔弄错。
想利用工具来检查一下孔径是否正确。这就需要获取到装配体中那些配合特征。
并读取配合的两个直径,来判断设计打孔特征是否做错了。
比如下图,这里需要锁螺丝,或者螺丝过孔。 (模型中是不安装螺丝零件的)

所以我们要读取配合特征,然后通过配合的一些信息来做判断。
通过查找api可以找到这个实例:

        private void btnGetMateInfor_Click(object sender, EventArgs e)
        {
            //请先打开TemplateModel文件夹下的装配TempAssembly.sldasm D:\09_Study\CSharpAndSolidWorks\CSharpAndSolidWorks\TemplateModel

            var swApp = PStandAlone.GetSolidWorks();

            var swModel = (ModelDoc2)swApp.ActiveDoc;

            var swFeat = (Feature)swModel.FirstFeature();

            Feature swMateFeat = null;
            Feature swSubFeat = default(Feature);
            Mate2 swMate = default;
            Component2 swComp = default(Component2);
            MateEntity2[] swMateEnt = new MateEntity2[3];
            //string fileName = null;
            //int errors = 0;
            //int warnings = 0;
            int i = 0;
            double[] entityParameters = new double[8];

            //从特征树中查找配合文件夹 Iterate over features in FeatureManager design tree

            while ((swFeat != null))
            {
                if ("MateGroup" == swFeat.GetTypeName())
                {
                    swMateFeat = (Feature)swFeat;
                    break;
                }
                swFeat = (Feature)swFeat.GetNextFeature();
            }
            Debug.Print(" " + swMateFeat.Name);
            Debug.Print("");

            //获取第一个子配合特征 Get first mate, which is a subfeature
            swSubFeat = (Feature)swMateFeat.GetFirstSubFeature();
            while ((swSubFeat != null))
            {
                swMate = (Mate2)swSubFeat.GetSpecificFeature2();
                if ((swMate != null))
                {
                    for (i = 0; i <= 1; i++)
                    {
                        swMateEnt[i] = swMate.MateEntity(i);
                        Debug.Print(" " + swSubFeat.Name);
                        Debug.Print(" Type = " + swMate.Type);
                        Debug.Print(" Alignment = " + swMate.Alignment);
                        Debug.Print(" Can be flipped = " + swMate.CanBeFlipped);
                        Debug.Print("");
                        swComp = (Component2)swMateEnt[i].ReferenceComponent;
                        Debug.Print(" Component = " + swComp.Name2);
                        Debug.Print(" Mate enity type = " + swMateEnt[i].ReferenceType);
                        entityParameters = (double[])swMateEnt[i].EntityParams;
                        Debug.Print(" (x,y,z) = (" + (double)entityParameters[0] + ", " + (double)entityParameters[1] + ", " + (double)entityParameters[2] + ")");
                        Debug.Print(" (i,j,k) = (" + (double)entityParameters[3] + ", " + (double)entityParameters[4] + ", " + (double)entityParameters[5] + ")");
                        Debug.Print(" Radius 1 = " + (double)entityParameters[6]);
                        Debug.Print(" Radius 2 = " + (double)entityParameters[7]);
                        Debug.Print("");
                    }
                    Debug.Print(" ");
                }
                // 从配合组中遍历 下一个配合 Get the next mate in MateGroup
                swSubFeat = (Feature)swSubFeat.GetNextSubFeature();
            }
        }

输出显示如下图:
可以看出来这个配合的两个孔一个是1.8mm 一个是1.4mm.
后续就可以通过这个来判断是否正确了。

posted @
2023-02-18 08:49 
painezeng  阅读(
0)  评论(
0
编辑 
收藏 
举报  
来源

C# SolidWorks 二次开发 API—遍历零件所有可编辑尺寸

C# SolidWorks 二次开发 API—遍历零件所有可编辑尺寸

最近有高校学生问到一个问题,如何得到零件中所有可以编辑的尺寸信息。包括所有的特征以及草图尺寸。
之前的博客中只是写了如何遍历特征以及图纸中的尺寸。
通过查api发现,其实这个和图纸中标注的尺寸一样,直接使用:
先看结果:
零件:

        /// <summary>
        /// 遍历特征
        /// </summary>
        /// <param name="thisFeat"></param>
        /// <param name="isTopLevel"></param>
        public static void TraverseFeatures(Feature thisFeat, bool isTopLevel, bool isShowDimension = false)
        {
            Feature curFeat = default(Feature);
            curFeat = thisFeat;

            while ((curFeat != null))
            {
                //输出特征名称
                Debug.Print(curFeat.Name);
                if (isShowDimension == true) ShowDimensionForFeature(curFeat);

                Feature subfeat = default(Feature);
                subfeat = (Feature)curFeat.GetFirstSubFeature();

                while ((subfeat != null))
                {
                    //if (isShowDimension == true) ShowDimensionForFeature(subfeat);
                    TraverseFeatures(subfeat, false);
                    Feature nextSubFeat = default(Feature);
                    nextSubFeat = (Feature)subfeat.GetNextSubFeature();
                    subfeat = nextSubFeat;
                    nextSubFeat = null;
                }

                subfeat = null;

                Feature nextFeat = default(Feature);

                if (isTopLevel)
                {
                    nextFeat = (Feature)curFeat.GetNextFeature();
                }
                else
                {
                    nextFeat = null;
                }

                curFeat = nextFeat;
                nextFeat = null;
            }
        }

        /// <summary>
        /// 遍历零件中的所有特征
        /// </summary>
        /// <param name="feature"></param>
        public static void ShowDimensionForFeature(Feature feature)
        {
            var thisDisplayDim = (DisplayDimension)feature.GetFirstDisplayDimension();

            while (thisDisplayDim != null)
            {
                var dimen = (Dimension)thisDisplayDim.GetDimension();

                Debug.Print($"---特征 {feature.Name} 尺寸-->" + dimen.GetNameForSelection() + "-->" + dimen.Value);

                thisDisplayDim = (DisplayDimension)feature.GetNextDisplayDimension(thisDisplayDim);
            }
        }

代码已经上传,请自取。

posted @
2023-02-18 08:49 
painezeng  阅读(
0)  评论(
0
编辑 
收藏 
举报  
来源