C# SolidWorks 二次开发 API — 2018版 中文翻译 ModelDoc 方法

ActivateSelectedFeature Method (IModelDoc2) 激活选定的要素进行编辑。
AddConfiguration3 Method (IModelDoc2) 将新配置添加到此模型文档。
AddDiameterDimension2 Method (IModelDoc2) 在选定项的指定位置添加直径标注。
AddDimension2 Method (IModelDoc2) 在选定实体的指定位置创建显示维度。
AddFeatureMgrView3 Method (IModelDoc2) 将指定的选项卡添加到FeatureManager设计树视图中。
AddHorizontalDimension2 Method (IModelDoc2) 在指定位置为当前选定的实体创建水平尺寸标注。
AddIns Method (IModelDoc2) 显示“加载项管理器”对话框。
AddLightSource Method (IModelDoc2) 使用指定的名称将光源类型添加到场景中。
AddLightSourceExtProperty Method (IModelDoc2) 存储光源的浮点、字符串或整数值。
AddLightToScene Method (IModelDoc2) 将光源添加到场景中。
AddLoftSection Method (IModelDoc2) 将放样截面添加到混合特征。
AddPropertyExtension Method (IModelDoc2) 将属性扩展添加到此模型。
AddRadialDimension2 Method (IModelDoc2) 在选定项的指定位置添加径向尺寸。
AddSceneExtProperty Method (IModelDoc2) 存储场景的浮点、字符串或整数值。
AddVerticalDimension2 Method (IModelDoc2) 在指定位置为当前选定的实体创建垂直尺寸标注。
AlignOrdinate Method (IModelDoc2) 对齐选定的一组坐标标注。
AlignParallelDimensions Method (IModelDoc2) 以平行方式对齐选定的线性标注。
BlankRefGeom Method (IModelDoc2) 在图形窗口中隐藏选定的参考几何图形。
BlankSketch Method (IModelDoc2) 隐藏选定的草图。
BreakDimensionAlignment Method (IModelDoc2) 断开属于对齐组(平行或共线)的任何选定标注的关联。
ClearSelection2 Method (IModelDoc2) 清除选择列表。
ClearUndoList Method (IModelDoc2) 清除此模型文档的撤消列表。
Close Method (IModelDoc2) 未实施。使用isldworks::closedoc。
CloseFamilyTable Method (IModelDoc2) 关闭当前正在编辑的设计表。
ClosePrintPreview Method (IModelDoc2) 关闭此文档当前显示的打印预览页。
ClosestDistance Method (IModelDoc2) 计算两个几何对象之间的距离和最近点。
CreateArcByCenter Method (IModelDoc2) 在此模型文档中按中心创建圆弧。
CreateCenterLineVB Method (IModelDoc2) 创建从p1到p2的中心线,可用于visualbasicforapplications(vba)和其他不支持safearray的basic格式。
CreateClippedSplines Method (IModelDoc2) 创建一个或多个草图样条线线段,这些线段被剪裁到给定的(x1,y1),(x2,y2)矩形上。此矩形位于活动二维草图的空间中。
CreateGroup Method (IModelDoc2) 从当前选定的批注创建批注组。
DeActivateFeatureMgrView Method (IModelDoc2) 停用FeatureManager设计树状图中的选项卡。
DebugCheckIgesGeom Method (IModelDoc2) 转储IGES几何体检查。
DeleteAllRelations Method (IModelDoc2) 删除所有现有关系。
DeleteBendTable Method (IModelDoc2) 删除折弯表。
DeleteBkgImage Method (IModelDoc2) 删除任何背景图像。
DeleteConfiguration2 Method (IModelDoc2) 删除配置。
DeleteDesignTable Method (IModelDoc2) 删除此文档的设计表(如果存在)。
DeleteFeatureMgrView Method (IModelDoc2) 删除FeatureManager设计树中的指定选项卡。
DeleteLightSource Method (IModelDoc2) 删除光源。
DeleteNamedView Method (IModelDoc2) 删除指定的模型视图。
DeriveSketch Method (IModelDoc2) 创建衍生草图。
DeSelectByID Method (IModelDoc2) 从选择列表中删除选定对象。
DimPreferences Method (IModelDoc2) 设置维度首选项。
DissolveLibraryFeature Method (IModelDoc2) 溶解选定的库功能。
DissolveSketchText Method (IModelDoc2) 分解草图文本。
DragTo Method (IModelDoc2) 拖动指定的端点。
DrawLightIcons Method (IModelDoc2) 绘制任何可见光图标。
EditConfiguration3 Method (IModelDoc2) 编辑指定的配置。
EditCopy Method (IModelDoc2) 复制当前选定的项目并将其放置在剪贴板中。
EditCut Method (IModelDoc2) 剪切当前选定的项目并将其放在Microsoft Windows剪贴板上。
EditDatumTargetSymbol Method (IModelDoc2) 编辑基准目标符号。
EditDelete Method (IModelDoc2) 删除所选项目。
EditOrdinate Method (IModelDoc2) 将当前选定的坐标标注置于编辑模式,以便可以向该组添加更多坐标标注。
EditRebuild3 Method (IModelDoc2) 仅重建模型中活动配置中需要重建的功能。
EditRedo2 Method (IModelDoc2) 在此solidworks会话中重复指定数量的操作。
EditRoute Method (IModelDoc2) 使最后选定的路由成为活动路由。
EditSeedFeat Method (IModelDoc2) 获取基于选定面的图案种子特征,并显示该特征的“编辑定义”对话框。
EditSketch Method (IModelDoc2) 允许编辑当前选定的草图。
EditSketchOrSingleSketchFeature Method (IModelDoc2) 编辑草图或草图特征。
EditSuppress2 Method (IModelDoc2) 抑制选定面的选定特征、选定组件或所属特征。
EditUndo2 Method (IModelDoc2) 撤消活动SolidWorks会话中指定数量的操作。
EditUnsuppress2 Method (IModelDoc2) 取消抑制选定的特征或零部件。
EditUnsuppressDependent2 Method (IModelDoc2) 取消抑制选定的特征或零部件及其从属项。
EntityProperties Method (IModelDoc2) 显示选定边或面的“特性”对话框。
EnumModelViews Method (IModelDoc2) 获取此文档中的模型视图枚举。
FeatEdit Method (IModelDoc2) 将当前要素置于编辑模式。
FeatEditDef Method (IModelDoc2) 显示“要素定义”对话框并允许用户编辑值。
FeatureByPositionReverse Method (IModelDoc2) 获取文档中最后一个功能的第n个。
FeatureChamfer Method (IModelDoc2) 创建倒角特征。
FeatureCurvePattern Method (IModelDoc2) 创建曲线驱动的填充图案特征。
FeatureReferenceCurve Method (IModelDoc2) 从曲线阵列创建参考曲线特征。
FileSummaryInfo Method (IModelDoc2) 显示此文件的“文件摘要信息”对话框。
FirstFeature Method (IModelDoc2) 获取文档中的第一个功能。
FontBold Method (IModelDoc2) 在选定的便笺、维度和形位公差s中启用或禁用粗体字体样式。
FontFace Method (IModelDoc2) 更改所选便笺、维度和形位公差s中的字体。
FontItalic Method (IModelDoc2) 启用或禁用选定便笺、维度和形位公差s中的斜体字体样式。
FontPoints Method (IModelDoc2) 更改所选便笺、维度和形位公差s中的字体高度(以磅为单位指定)。
FontUnderline Method (IModelDoc2) 启用或禁用对选定笔记、维度和形位公差加下划线。
FontUnits Method (IModelDoc2) 更改所选便笺、维度和形位公差s中的字体高度(以当前系统单位指定)。
ForceRebuild3 Method (IModelDoc2) 强制重新生成模型中活动配置中的所有要素。
ForceReleaseLocks Method (IModelDoc2) 释放文件系统在文件打开时对其放置的锁,并从文件系统分离该文件。
GetAddToDB Method (IModelDoc2) 获取实体是否直接添加到SolidWorks数据库。
GetAmbientLightProperties Method (IModelDoc2) 获取此模型文档的环境光属性。
GetAngularUnits Method (IModelDoc2) 获取当前角度单位设置。
GetArcCentersDisplayed Method (IModelDoc2) 获取是否显示圆弧中心。
GetBendState Method (IModelDoc2) 获取钣金零件的当前折弯状态。
GetBlockingState Method (IModelDoc2) 获取SolidWorks阻塞状态的当前值,该值在IModelDoc2::SetBlockingState可访问的值范围内。
GetConfigurationByName Method (IModelDoc2) 获取指定的配置。
GetConfigurationCount Method (IModelDoc2) 获取配置数。
GetConfigurationNames Method (IModelDoc2) 获取此文档中配置的名称。
GetConsiderLeadersAsLines Method (IModelDoc2) 获取从该文档中的视图或批注检索行时,是否将引线的显示数据包含为行。
GetCurrentCoordinateSystemName Method (IModelDoc2) 获取当前坐标系的名称或默认坐标系的空字符串。
GetDefaultTextHeight Method (IModelDoc2) 获取此文档使用的默认文本高度。
GetDesignTable Method (IModelDoc2) 获取与此部件或程序集文档关联的设计表。
GetDirectionLightProperties Method (IModelDoc2) 获取平行光属性。
GetDisplayWhenAdded Method (IModelDoc2) 获取创建时是否显示新的草图实体。
GetEntityName Method (IModelDoc2) 获取指定面、边或顶点的名称。
GetEquationMgr Method (IModelDoc2) 获取公式管理器。
GetExternalReferenceName Method (IModelDoc2) 获取外部引用文档的名称(对于联接或镜像部分)。
GetFeatureCount Method (IModelDoc2) 获取此文档中的功能数。
GetFeatureManagerWidth Method (IModelDoc2) 获取FeatureManager设计树的宽度。
GetFirstAnnotation2 Method (IModelDoc2) 获取模型中的第一个批注。
GetFirstModelView Method (IModelDoc2) 获取模型文档中的第一个视图。
GetGridSettings Method (IModelDoc2) 获取当前网格设置。
GetLayerManager Method (IModelDoc2) 获取当前图形文档的图层管理器。
GetLightSourceCount Method (IModelDoc2) 获取光源的数目。
GetLightSourceExtProperty Method (IModelDoc2) 获取为光源存储的浮点、字符串或整数值。
GetLightSourceIdFromName Method (IModelDoc2) 获取指定光源的ID。
GetLightSourceName Method (IModelDoc2) 获取SolidWorks应用程序内部使用的光源的名称。
GetLineCount Method (IModelDoc2) 获取当前草图中的行数。
GetLines Method (IModelDoc2) 获取当前草图中的所有行。
GetModelViewNames Method (IModelDoc2) 获取包含此文档中每个模型视图的名称的列表。
GetNext Method (IModelDoc2) 获取当前solidworks会话中的下一个文档。
GetNumDependencies Method (IModelDoc2) 获取IModelDoc2::GetDependencies2返回的字符串数。
GetPathName Method (IModelDoc2) 获取此文档的完整路径名,包括文件名。
GetPointLightProperties Method (IModelDoc2) 获取点光源属性。
GetPopupMenuMode Method (IModelDoc2) 获取当前弹出菜单模式。
GetPropertyExtension Method (IModelDoc2) 获取此模型上指定的属性扩展名。
GetRayIntersectionsPoints Method (IModelDoc2) 获取由IModelDoc2::RayIntersections生成的交点信息。
GetRayIntersectionsTopology Method (IModelDoc2) 获取由IModelDoc2::RayIntersections生成的拓扑交集。
GetSaveFlag Method (IModelDoc2) 获取文档当前是否脏并且需要保存。
GetSceneBkgDIB Method (IModelDoc2) 获取作为lpdibsection的背景图像。
GetSceneExtProperty Method (IModelDoc2) 获取为场景存储的浮点、字符串或整数值。
GetSpotlightProperties Method (IModelDoc2) 获取聚光灯属性。
GetStandardViewRotation Method (IModelDoc2) 获取相对于前视图的指定视图方向矩阵。
GetTessellationQuality Method (IModelDoc2) 获取当前文档的着色显示图像质量编号。
GetTitle Method (IModelDoc2) 获取显示在活动窗口标题栏中的文档的标题。
GetToolbarVisibility Method (IModelDoc2) 获取工具栏的可见性。
GetType Method (IModelDoc2) 获取文档的类型。
GetUnits Method (IModelDoc2) 获取当前单位设置以及分数基、分数值和使用的有效数字。
GetUpdateStamp Method (IModelDoc2) 获取此文档的当前更新戳。
GetUserUnit Method (IModelDoc2) 获取此文档的单位设置。
GetVisibilityOfConstructPlanes Method (IModelDoc2) 获取构造(引用)平面当前是否可见。
GetZebraStripeData Method (IModelDoc2) 获取斑马线数据。
HideComponent2 Method (IModelDoc2) 隐藏选定的组件。
HideCosmeticThread Method (IModelDoc2) 隐藏选定的装饰线。
HideDimension Method (IModelDoc2) 隐藏此文档中选定的维度。
HideShowBodies Method (IModelDoc2) 设置是隐藏还是显示模型中的实体。
HideSolidBody Method (IModelDoc2) 隐藏当前选定的实体。
IAddConfiguration3 Method (IModelDoc2) 将新配置添加到此模型文档。
IAddDiameterDimension2 Method (IModelDoc2) 在选定项的指定位置添加直径标注。
IAddHorizontalDimension2 Method (IModelDoc2) 在指定位置为当前选定实体创建水平尺寸标注。
IAddRadialDimension2 Method (IModelDoc2) 在选定项的指定位置添加径向尺寸。
IAddVerticalDimension2 Method (IModelDoc2) 在指定位置为当前选定的实体创建垂直尺寸标注。
IClosestDistance Method (IModelDoc2) 计算两个几何对象之间的距离和最近点。
ICreateArc2 Method (IModelDoc2) 基于中心点、起点、终点和方向创建圆弧。
ICreateCenterLine Method (IModelDoc2) 创建从p1到p2的中心线。
ICreateCircle2 Method (IModelDoc2) 基于圆心和圆上的点创建圆。
ICreateCircleByRadius2 Method (IModelDoc2) 基于中心点和指定半径创建圆。
ICreateClippedSplines Method (IModelDoc2) 创建一个或多个草图样条线线段,这些线段被剪裁到给定的(x1,y1),(x2,y2)矩形上。此矩形位于活动二维草图的空间中。
ICreateEllipse2 Method (IModelDoc2) 使用指定的中心点和点创建椭圆。
ICreateEllipticalArc2 Method (IModelDoc2) 创建一个部分椭圆,给出一个中心点,指定主次轴的两点,以及定义椭圆起始点和结束点的两点。
ICreateEllipticalArcByCenter Method (IModelDoc2) 在两点之间创建修剪的椭圆弧。
ICreateLine2 Method (IModelDoc2) 在当前激活的二维或三维草图中创建绘制线。
ICreatePlaneFixed Method (IModelDoc2) 过时。被imodeldoc2替代:icreateplanefixed2。
IFeatureByPositionReverse Method (IModelDoc2) 获取文档中最后一个功能的第n个。
IFeatureReferenceCurve Method (IModelDoc2) 从曲线阵列创建参考曲线特征。
IFirstFeature Method (IModelDoc2) 获取文档中的第一个功能。
IGet3rdPartyStorage Method (IModelDoc2) 获取用于存储在SolidWorks文档中的IStream接口。
IGetActiveSketch2 Method (IModelDoc2) 获取活动草图。
IGetAngularUnits Method (IModelDoc2) 获取当前角度单位设置。
IGetConfigurationByName Method (IModelDoc2) 获取指定的配置。
IGetConfigurationNames Method (IModelDoc2) 获取此文档中配置的名称。
IGetDependencies2 Method (IModelDoc2) 获取模型的所有依赖项。
IGetDesignTable Method (IModelDoc2) 获取与此部件或程序集文档关联的设计表。
IGetEntityName Method (IModelDoc2) 获取指定面、边或顶点的名称。
IGetFirstAnnotation2 Method (IModelDoc2) 获取模型中的第一个批注。
IGetFirstModelView Method (IModelDoc2) 获取模型文档中的第一个视图。
IGetLayerManager Method (IModelDoc2) 获取当前绘图文档的图层管理器。
IGetLines Method (IModelDoc2) 获取当前草图中的所有行。
IGetModelViewNames Method (IModelDoc2) 获取包含此文档中每个模型视图的名称的列表。
IGetNext Method (IModelDoc2) 获取当前solidworks会话中的下一个文档。
IGetNumDependencies2 Method (IModelDoc2) 获取imodeldoc2::igetdependencies2返回的字符串数。
IGetRayIntersectionsPoints Method (IModelDoc2) 获取由imodeldoc2::irayintersections生成的交点信息。
IGetRayIntersectionsTopology Method (IModelDoc2) 获取由imodeldoc2::irayintersections生成的拓扑交集。
IGetStandardViewRotation Method (IModelDoc2) 获取相对于前视图的指定视图方向矩阵。
IGetUnits Method (IModelDoc2) 获取当前单位设置以及分数基、分数值和使用的有效数字。
IGetUserUnit Method (IModelDoc2) 获取此文档的单位设置。
IGetVersionHistoryCount Method (IModelDoc2) 获取保存imodledoc2::iversionhistory返回的数据所需的数组大小。
IInsertDatumTag2 Method (IModelDoc2) 在选定位置插入基准标记符号。
IInsertGtol Method (IModelDoc2) 在此文档中创建新的形位公差符号(gtol)。
IInsertNote Method (IModelDoc2) 在此文档中插入注释。
IInsertProjectedSketch2 Method (IModelDoc2) 将当前草图中选定的草图项投影到选定曲面上。
IInsertSketchForEdgeFlange Method (IModelDoc2) 在此钣金零件中插入iFeatureManager::InsertSheetMetalEdgeFlange2的草图。
IInsertSketchText Method (IModelDoc2) 插入草图文本。
IInsertWeldSymbol3 Method (IModelDoc2) 在模型中插入焊接符号。
IListAuxiliaryExternalFileReferences Method (IModelDoc2) 获取此模型的辅助外部文件引用的名称。
IMultiSelectByRay Method (IModelDoc2) 选择指定类型的多个对象,这些对象在距离半径内的方向向量(x,y,z)中的点(x,y,z,以米为单位)与光线相交。
Insert3DSplineCurve Method (IModelDoc2) 通过选定的参照点插入三维样条曲线。
InsertAxis2 Method (IModelDoc2) 根据当前选定的项目插入参考轴,并自动选择轴的大小。
InsertBendTableEdit Method (IModelDoc2) 插入折弯表并将折弯表置于其编辑状态。
InsertBendTableNew Method (IModelDoc2) 在模型文档中插入新的折弯表。
InsertBendTableOpen Method (IModelDoc2) 将现有的弯曲表从文件插入到该模型文档中。
InsertBkgImage Method (IModelDoc2) 插入场景背景图像。
InsertCompositeCurve Method (IModelDoc2) 根据选择插入合成曲线。
InsertConnectionPoint Method (IModelDoc2) 基于选定的点和选定的平面项添加连接点。
InsertCurveFile Method (IModelDoc2) 创建曲线。
InsertCurveFileBegin Method (IModelDoc2) 创建曲线。
InsertCurveFileEnd Method (IModelDoc2) 创建曲线。
InsertCurveFilePoint Method (IModelDoc2) 为曲线创建点。
InsertDatumTag2 Method (IModelDoc2) 在选定位置插入基准标记符号。
InsertDeleteHole Method (IModelDoc2) 删除曲面的选定孔。
InsertDome Method (IModelDoc2) 插入圆顶。
InsertExtendSurface Method (IModelDoc2) 沿选定的面或边延伸曲面。
InsertFamilyTableEdit Method (IModelDoc2) 从Microsoft Excel编辑打开的设计表。
InsertFamilyTableNew Method (IModelDoc2) 将现有的设计表从模型插入到选定的绘图视图中。
InsertFamilyTableOpen Method (IModelDoc2) 插入指定的Microsoft Excel设计表。
InsertFeatureReplaceFace Method (IModelDoc2) 创建替换面特征。
InsertFeatureShell Method (IModelDoc2) 创建壳特征。
InsertFeatureShellAddThickness Method (IModelDoc2) 在多厚度壳特征中向面添加厚度。
InsertGtol Method (IModelDoc2) 在此文档中创建新的形位公差符号(gtol)。
InsertHatchedFace Method (IModelDoc2) 填充图形中选定的面或闭合的草图段。
InsertHelix Method (IModelDoc2) 创建恒定螺距的螺旋线或螺旋线。
InsertLoftRefSurface2 Method (IModelDoc2) 从选定的纵断面、中心线和导向曲线创建放样曲面。
InsertNewNote3 Method (IModelDoc2) 创建新便笺。
InsertNote Method (IModelDoc2) 在此文档中插入注释。
InsertObject Method (IModelDoc2) 激活“Microsoft插入对象”对话框。
InsertOffsetSurface Method (IModelDoc2) 插入偏移曲面。
InsertPlanarRefSurface Method (IModelDoc2) 插入平面参考曲面。
InsertPoint Method (IModelDoc2) 在此模型文档中插入点。
InsertProjectedSketch2 Method (IModelDoc2) 将选定的草图投影到选定的面或曲面上。
InsertRadiateSurface Method (IModelDoc2) 基于选择创建辐射曲面。
InsertRefPoint Method (IModelDoc2) 根据当前选择插入参考点。
InsertRip Method (IModelDoc2) 创建接缝特征。
InsertRoutePoint Method (IModelDoc2) 基于选定的点添加布线点。
InsertSheetMetalBreakCorner Method (IModelDoc2) 在钣金零件中插入折断角。
InsertSheetMetalClosedCorner Method (IModelDoc2) 在此模型文档中插入钣金闭合角。
InsertSheetMetalFold Method (IModelDoc2) 在选定对象处插入折叠特征。
InsertSheetMetalJog Method (IModelDoc2) 在当前模型文档中插入钣金折弯。
InsertSheetMetalUnfold Method (IModelDoc2) 在选定对象处插入展开特征。
InsertSketchForEdgeFlange Method (IModelDoc2) 在此钣金零件中插入iFeatureManager::InsertSheetMetalEdgeFlange2的草图。
InsertSketchPicture Method (IModelDoc2) 在当前草图中插入图片。
InsertSketchPictureData Method (IModelDoc2) 在当前草图中插入图片。
InsertSketchPictureDatax64 Method (IModelDoc2) 在64位应用程序中将图片插入当前草图。
InsertSketchText Method (IModelDoc2) 插入草图文本。
InsertSplinePoint Method (IModelDoc2) 插入样条曲线点。
InsertSplitLineProject Method (IModelDoc2) 通过将草图线投影到面上来拆分面。
InsertSplitLineSil Method (IModelDoc2) 通过沿选定面的轮廓创建分割线来分割面。
InsertWeldSymbol3 Method (IModelDoc2) 在模型中插入焊接符号。
InspectCurvature Method (IModelDoc2) 将曲率梳添加到选定草图段。
IParameter Method (IModelDoc2) 获取指定的参数。
IRelease3rdPartyStorage Method (IModelDoc2) 关闭指定的存储流。
IsActive Method (IModelDoc2) 获取指定的程序集组件是否在此模型文档中显示或隐藏。
IsEditingSelf Method (IModelDoc2) 获取是否正在另一个文档的上下文中编辑此模型。
ISetAngularUnits Method (IModelDoc2) 设置当前角度单位。
ISetNextSelectionGroupId Method (IModelDoc2) 设置所有剩余选择的组ID。
ISketchSplineByEqnParams Method (IModelDoc2) 使用指定的B曲线参数在激活的二维草图上创建样条曲线。
IsLightLockedToModel Method (IModelDoc2) 获取指定的灯光是否已修复。
IsOpenedReadOnly Method (IModelDoc2) 获取SolidWorks文档是否以只读模式打开。
IsOpenedViewOnly Method (IModelDoc2) 获取SolidWorks文档是否在仅查看模式下打开。
IsTessellationValid Method (IModelDoc2) 获取当前方面集是否有效。
IVersionHistory Method (IModelDoc2) 获取一个字符串数组,该数组指示保存此模型文档的版本,包括当前打开模型文档的SolidWorks版本,以及数组中返回的最后一个值。
LBDownAt Method (IModelDoc2) 生成鼠标左键按下(向下)事件。
LBUpAt Method (IModelDoc2) 生成鼠标左键释放(向上)事件。
ListAuxiliaryExternalFileReferences Method (IModelDoc2) 获取此模型的辅助外部文件引用的名称。
ListAuxiliaryExternalFileReferencesCount Method (IModelDoc2) 获取此模型的辅助外部文件引用数。
Lock Method (IModelDoc2) 阻止用户界面中的修改命令,从而有效地锁定应用程序。
LockAllExternalReferences Method (IModelDoc2) 锁定所有外部引用。
LockLightToModel Method (IModelDoc2) 锁定或解锁指定的灯光。
MoldDraftAnalysis Method (IModelDoc2) 执行模具拔模分析。
MultiSelectByRay Method (IModelDoc2) 选择指定类型的多个对象,这些对象在距离半径内的方向向量(x,y,z)中的点(x,y,z,以米为单位)与光线相交。
NameView Method (IModelDoc2) 使用当前视图创建命名视图。
ObjectDisplayAsIcon Method (IModelDoc2) 将当前OLE对象显示为图标。
ObjectDisplayContent Method (IModelDoc2) 显示当前OLE对象的内容。
ObjectResetsize Method (IModelDoc2) 将当前OLE对象的大小设置为默认值。
Parameter Method (IModelDoc2) 获取指定的参数。
ParentChildRelationship Method (IModelDoc2) 显示选定要素的“父/子关系”对话框。
Paste Method (IModelDoc2) 在当前插入点粘贴Microsoft Windows剪贴板的内容。
PrintDirect Method (IModelDoc2) 将当前文档打印到默认打印机。
PrintPreview Method (IModelDoc2) 显示当前文档的打印预览页。
PropertySheet Method (IModelDoc2) 显示选定对象的属性表。
Quit Method (IModelDoc2) 关闭活动文档而不保存更改(请参阅备注)。
ReattachOrdinate Method (IModelDoc2) 将坐标标注重新附着到其他实体。
ReloadOrReplace Method (IModelDoc2) 重新加载或替换当前模型文档。
RemoveGroups Method (IModelDoc2) 删除当前所选内容中的任何批注组。
RemoveInspectCurvature Method (IModelDoc2) 从选定的曲线草图段中删除曲率梳。
RemoveItemsFromGroup Method (IModelDoc2) 从批注组中删除选定批注。
ResetBlockingState Method (IModelDoc2) 重置solidworks菜单的阻塞状态。
ResetLightSourceExtProperty Method (IModelDoc2) 重置光源的属性。
ResetPropertyExtension Method (IModelDoc2) 清除存储在属性扩展名中的所有值。
ResetSceneExtProperty Method (IModelDoc2) 重置场景的扩展属性。
Save3 Method (IModelDoc2) 保存当前文档。
SaveBMP Method (IModelDoc2) 将当前视图保存为位图(BMP)文件。
Scale Method (IModelDoc2) 缩放零件。
ScreenRotate Method (IModelDoc2) 在模型和屏幕中心旋转之间切换。
SelectedEdgeProperties Method (IModelDoc2) 设置选定边的特性值。
SelectedFaceProperties Method (IModelDoc2) 设置选定面的材质特性值。
SelectedFeatureProperties Method (IModelDoc2) 设置选定要素的特性值。
SelectLoop Method (IModelDoc2) 选择与选定边相对应的循环。
SelectMidpoint Method (IModelDoc2) 将该边的中点(swselmidpoints)置于选择列表中,并在选择边时从选择列表中移除该边。
SelectTangency Method (IModelDoc2) 选择与选定面相切的所有面。
SetAmbientLightProperties Method (IModelDoc2) 设置环境光属性。
SetAngularUnits Method (IModelDoc2) 设置当前角度单位。
SetArcCentersDisplayed Method (IModelDoc2) 设置当前显示的弧中心设置。
SetBendState Method (IModelDoc2) 设置钣金零件的折弯状态。
SetBlockingState Method (IModelDoc2) 设置solidworks菜单的阻塞状态。
SetConsiderLeadersAsLines Method (IModelDoc2) 在文档上设置一个标志,指示当从该文档中的视图或批注检索行时,是否应将引线的显示数据包含为行。
SetDirectionLightProperties Method (IModelDoc2) 设置方向光属性。
SetFeatureManagerWidth Method (IModelDoc2) 设置FeatureManager设计树的宽度。
SetLightSourceName Method (IModelDoc2) 设置solidworks软件内部使用的光源名称。
SetLightSourcePropertyValuesVB Method (IModelDoc2) 设置光源特性值。
SetParamValue Method (IModelDoc2) 设置选定维度(或参数)的值。
SetPickMode Method (IModelDoc2) 将用户返回到默认选择模式。
SetPointLightProperties Method (IModelDoc2) 设置点光源特性。
SetPopupMenuMode Method (IModelDoc2) 设置弹出菜单模式。
SetReadOnlyState Method (IModelDoc2) 设置此文档是只读的还是读写的。
SetSaveAsFileName Method (IModelDoc2) 从filesaveasnotify2事件处理程序中设置另存为文件名,从而绕过“另存为”对话框。
SetSaveFlag Method (IModelDoc2) 将文档标记为脏。
SetSceneBkgDIB Method (IModelDoc2) 设置由dibsection数据描述的背景图像。
SetSpotlightProperties Method (IModelDoc2) 设置聚光灯属性。
SetTessellationQuality Method (IModelDoc2) 设置当前文档的着色显示图像质量编号。
SetTitle2 Method (IModelDoc2) 设置新文档的标题。
SetToolbarVisibility Method (IModelDoc2) 设置工具栏的可见性。
SetUnits Method (IModelDoc2) 设置最终用户用于模型的单位。
SetZebraStripeData Method (IModelDoc2) 设置斑马线数据。
ShowComponent2 Method (IModelDoc2) 显示选定的组件。
ShowConfiguration2 Method (IModelDoc2) 通过切换到该配置并使其成为活动配置来显示命名配置。
ShowCosmeticThread Method (IModelDoc2) 显示选定的示意线程。
ShowNamedView2 Method (IModelDoc2) 显示指定的视图。
ShowSolidBody Method (IModelDoc2) 显示选定的实体。
Sketch3DIntersections Method (IModelDoc2) 基于选定曲面创建新的草图段。
SketchAddConstraints Method (IModelDoc2) 将指定的约束添加到选定实体。
SketchAlign Method (IModelDoc2) 对齐选定的草图实体。
SketchArc Method (IModelDoc2) 在当前模型文档中创建圆弧。
SketchCenterline Method (IModelDoc2) 将中心线添加到当前模型文档。
SketchConstrainCoincident Method (IModelDoc2) 使选定的草图实体重合。
SketchConstrainConcentric Method (IModelDoc2) 使选定的草图实体同心。
SketchConstrainParallel Method (IModelDoc2) 使选定的草图实体平行。
SketchConstrainPerp Method (IModelDoc2) 使选定的草图实体垂直。
SketchConstrainTangent Method (IModelDoc2) 使选定实体相切。
SketchConstraintsDel Method (IModelDoc2) 删除当前选定草图项上的指定关系(约束)。
SketchConstraintsDelAll Method (IModelDoc2) 删除当前选定草图段上的所有约束。
SketchConvertIsoCurves Method (IModelDoc2) 将选定曲面上的等参曲线转换为草图实体。
SketchMirror Method (IModelDoc2) 创建作为选定实体的镜像的新实体。
SketchModifyFlip Method (IModelDoc2) 翻转关于指定坐标系轴的活动或选择草图。
SketchModifyRotate Method (IModelDoc2) 旋转激活或选定草图的坐标系。
SketchModifyScale Method (IModelDoc2) 缩放激活或选定的草图。
SketchModifyTranslate Method (IModelDoc2) 转换激活或选定草图的坐标系。
SketchOffsetEdges Method (IModelDoc2) 偏移选定实体的边。
SketchOffsetEntities2 Method (IModelDoc2) 通过将选定的几何图形偏移指定的量,在活动草图中生成实体。
SketchSpline Method (IModelDoc2) 使用指定点开始样条曲线,或继续一条曲线。
SketchTangentArc Method (IModelDoc2) 在当前模型文档中创建相切圆弧。
SketchUndo Method (IModelDoc2) 撤消上一个草图命令。
SketchUseEdgeCtrline Method (IModelDoc2) 在草图中使用此中心线。
SkToolsAutoConstr Method (IModelDoc2) 自动约束活动草图。
Toolbars Method (IModelDoc2) 打开和关闭指定的solidworks工具栏。
ToolsDistance Method (IModelDoc2) 计算距离。
ToolsGrid Method (IModelDoc2) 显示并隐藏此模型文档中的网格。
ToolsMacro Method (IModelDoc2) 未实施。
ToolsMassProps Method (IModelDoc2) 计算质量特性。
ToolsSketchScale Method (IModelDoc2) 缩放草图。
ToolsSketchTranslate Method (IModelDoc2) 翻译草图。
UnBlankRefGeom Method (IModelDoc2) 在图形窗口中显示选定的隐藏参考几何图形。
UnblankSketch Method (IModelDoc2) 显示隐藏的草图。
UnderiveSketch Method (IModelDoc2) 将草图更改为未激活。
UnLock Method (IModelDoc2) 反转imodeldoc2::lock并将状态栏消息更改为process complete。
UnlockAllExternalReferences Method (IModelDoc2) 解锁所有外部引用。
UserFavors Method (IModelDoc2) 指定添加草图实体时是否自动创建几何关系。
VersionHistory Method (IModelDoc2) 获取一个字符串数组,该数组指示保存此文档的版本,包括当前打开模型文档的SolidWorks版本,以及数组中返回的最后一个值。
ViewConstraint Method (IModelDoc2) 显示当前模型文档的约束。
ViewDispCoordinateSystems Method (IModelDoc2) 打开和关闭坐标系的显示。
ViewDisplayCurvature Method (IModelDoc2) 打开和关闭曲面曲率的显示。
ViewDisplayFaceted Method (IModelDoc2) 设置当前显示模式以显示构成stl输出的着色图片的面。
ViewDisplayHiddengreyed Method (IModelDoc2) 将当前显示模式设置为可见隐藏线。
ViewDisplayHiddenremoved Method (IModelDoc2) 将当前显示模式设置为“已删除隐藏线”。
ViewDisplayShaded Method (IModelDoc2) 将当前显示模式设置为着色。
ViewDisplayWireframe Method (IModelDoc2) 将当前显示模式设置为线框。
ViewDispOrigins Method (IModelDoc2) 关闭和打开原点的显示。
ViewDispRefaxes Method (IModelDoc2) 切换参考轴的显示打开和关闭。
ViewDispRefplanes Method (IModelDoc2) 打开和关闭参照平面的显示。
ViewDispRefPoints Method (IModelDoc2) 显示并隐藏当前模型文档的参考点。
ViewDispTempRefaxes Method (IModelDoc2) 打开和关闭临时参考轴的显示。
ViewOglShading Method (IModelDoc2) 将当前显示子系统设置为使用opengl。
ViewOrientationUndo Method (IModelDoc2) 撤消以前由用户交互进行的视图方向更改。
ViewRotate Method (IModelDoc2) 旋转当前模型的视图。
ViewRotateminusx Method (IModelDoc2) 以当前增量沿负方向围绕X动态旋转视图。
ViewRotateminusy Method (IModelDoc2) 以当前增量沿负方向围绕Y动态旋转视图。
ViewRotateminusz Method (IModelDoc2) 以当前增量沿负方向围绕Z动态旋转视图。
ViewRotateplusx Method (IModelDoc2) 以当前增量沿正方向围绕X旋转视图。
ViewRotateplusy Method (IModelDoc2) 以当前增量沿正方向围绕Y旋转视图。
ViewRotateplusz Method (IModelDoc2) 以当前增量沿正方向围绕Z旋转视图。
ViewRotXMinusNinety Method (IModelDoc2) 将视图围绕x动态旋转负90。
ViewRotXPlusNinety Method (IModelDoc2) 动态地将视图绕x旋转90。
ViewRotYMinusNinety Method (IModelDoc2) 将视图围绕Y动态旋转负90。
ViewRotYPlusNinety Method (IModelDoc2) 动态地将视图绕y旋转90。
ViewRwShading Method (IModelDoc2) 将当前显示子系统设置为使用renderware。
ViewTranslate Method (IModelDoc2) 转换视图。
ViewTranslateminusx Method (IModelDoc2) 动态向左移动视图。
ViewTranslateminusy Method (IModelDoc2) 动态地向下移动视图。
ViewTranslateplusx Method (IModelDoc2) 动态右移视图。
ViewTranslateplusy Method (IModelDoc2) 动态地向上移动视图。
ViewZoomin Method (IModelDoc2) 将当前视图放大20%。
ViewZoomout Method (IModelDoc2) 将当前视图缩小20%。
ViewZoomto Method (IModelDoc2) 将视图缩放到选定的框。
ViewZoomTo2 Method (IModelDoc2) 缩放到指定区域。
ViewZoomtofit2 Method (IModelDoc2) 缩放当前活动视图以适应屏幕。
ViewZoomToSelection Method (IModelDoc2) 将显示缩放到所选内容。
WindowRedraw Method (IModelDoc2) 重新绘制当前窗口。

C# SolidWorks 二次开发 API — 打断关系

有时候我们需要把零件中特征之间的关系去掉,以便再产生新的关系。

例如把两个零件组合之后,不断开关系就不能再进行一些其它的操作。

因为打断之后无法再有关系,所以这个功能也不是经常用,就不单独做例子了

            //不显示特征树
            //swModel.Extension.HideFeatureManager(true);
            //禁用特征树
            //featureManager.EnableFeatureTree = false;

            // swModel.FeatureManager.EnableFeatureTreeWindow = false;

            swModel.BreakAllExternalReferences();

 

C# SolidWorks 二次开发 API — 实例:创建中心点位置

在实际生产需要中,有些情况 我们需要知道某个路径上整体的中心点,如水管,电阻丝这些,可能需要从路径的中点开始进行放置,这个实例我们来看如何进行中点的计算与标记。我们默认路径都是是直线和圆弧组成,均相切(辅助中心线不包含在路径长度内)。

  1. ,问题:如何找到下面路径的中心点在哪里?进行标识,方便加工。

2,思路:

  1. 先得到指定草图中的所有“线段”,把中心线排除掉之后,遍历并统计出它们的长度,从而得到总长L。并且还要得到一整串的“线段”顺序。可以考虑 链 相关的数据结构
  2. 从起点或者终点开始,对每一段进行遍历,去找到中点所在的“线段”, 直到找到中点之后,通过“线段” 的参考进行计算。
  3. 画出中点,或者能标识中点位置的辅助线。

3,代码:这里很久前写的,没有写什么注释,并且水平也很菜,估计很多人看不太懂。

      public void CreateHeaterCenter(string heaterPathName)
        {
            ISketchPoint startPoint = null;
            ISketchPoint endPoint = null;
            List<SegmentData> list = new List<SegmentData>();
            List<SegmentData> list2 = new List<SegmentData>();
            List<SegmentData> list3 = new List<SegmentData>();
            List<SegmentData> list4 = new List<SegmentData>();
            _swApp.ActivateDoc(_swPartModel.GetTitle());
            _swPartModel.ShowNamedView2("*Front", 1);

            ISketchArc arc;
            double length;
            list2.Clear();
            list.Clear();
            _swPartModel.Extension.SelectByID2(heaterPathName, "SKETCH", 0.0, 0.0, 0.0, true, 0, null, 0);
            _swPartModel.ViewZoomToSelection();
            ISelectionMgr iSelectionManager = _swPartModel.ISelectionManager;

            IFeature feature = iSelectionManager.GetSelectedObject6(1, 0);

            ISketch sketch = feature.GetSpecificFeature2();

            Array array = sketch.GetSketchSegments();

            Array array2 = sketch.GetSketchPoints2();
            foreach (ISketchSegment segment in array)
            {
                ISketchSegment segment2 = segment;
                segment2.Select(true);
                if (!segment2.ConstructionGeometry)
                {
                    if (segment2.GetType() == 0)
                    {
                        ISketchLine line = (ISketchLine)segment2;
                        startPoint = line.IGetStartPoint2();
                        endPoint = line.IGetEndPoint2();
                    }
                    if (segment2.GetType() == 1)
                    {
                        arc = (ISketchArc)segment2;
                        startPoint = arc.IGetStartPoint2();
                        endPoint = arc.IGetEndPoint2();
                    }
                    SegmentData item = new SegmentData(segment2, startPoint, endPoint);
                    list.Add(item);
                }
                _swPartModel.ClearSelection2(true);
            }
            for (int i = 0; i < list.Count; i++)
            {
                int num9 = 0;
                list2.Add(list[0]);
                list.Remove(list[0]);
                for (int m = 0; m < list.Count; m++)
                {
                    list2[0].Segment.Select(false);
                    list[m].Segment.Select(false);
                    if ((Math.Round(list2[0].StartPoint.X, 5) == Math.Round(list[m].StartPoint.X, 5)) && (Math.Round(list2[0].StartPoint.Y, 5) == Math.Round(list[m].StartPoint.Y, 5)))
                    {
                        num9++;
                    }
                    if ((Math.Round(list2[0].EndPoint.X, 5) == Math.Round(list[m].EndPoint.X, 5)) && (Math.Round(list2[0].EndPoint.Y, 5) == Math.Round(list[m].EndPoint.Y, 5)))
                    {
                        num9++;
                    }
                    if ((Math.Round(list2[0].EndPoint.X, 5) == Math.Round(list[m].StartPoint.X, 5)) && (Math.Round(list2[0].EndPoint.Y, 5) == Math.Round(list[m].StartPoint.Y, 5)))
                    {
                        num9++;
                    }
                    if ((Math.Round(list2[0].StartPoint.X, 5) == Math.Round(list[m].EndPoint.X, 5)) && (Math.Round(list2[0].StartPoint.Y, 5) == Math.Round(list[m].EndPoint.Y, 5)))
                    {
                        num9++;
                    }
                    _swPartModel.ClearSelection2(true);
                    if (num9 == 2)
                    {
                        list.Add(list2[0]);
                        list2.Remove(list2[0]);
                        break;
                    }
                }
                if (num9 == 1)
                {
                    list2[0].Segment.Select(true);
                    break;
                }
            }
            int num = 0;
            for (int j = 0; j < list.Count; j++)
            {
                list2[num].Segment.Select(true);
                list[j].Segment.Select(false);
                if ((Math.Round(list2[num].StartPoint.X, 5) == Math.Round(list[j].StartPoint.X, 5)) && (Math.Round(list2[num].StartPoint.Y, 5) == Math.Round(list[j].StartPoint.Y, 5)))
                {
                    list2.Add(list[j]);
                    list.Remove(list[j]);
                    num++;
                    j = -1;
                }
                else if ((Math.Round(list2[num].EndPoint.X, 5) == Math.Round(list[j].EndPoint.X, 5)) && (Math.Round(list2[num].EndPoint.Y, 5) == Math.Round(list[j].EndPoint.Y, 5)))
                {
                    list2.Add(list[j]);
                    list.Remove(list[j]);
                    num++;
                    j = -1;
                }
                else if ((Math.Round(list2[num].EndPoint.X, 5) == Math.Round(list[j].StartPoint.X, 5)) && (Math.Round(list2[num].EndPoint.Y, 5) == Math.Round(list[j].StartPoint.Y, 5)))
                {
                    list2.Add(list[j]);
                    list.Remove(list[j]);
                    num++;
                    j = -1;
                }
                else if ((Math.Round(list2[num].StartPoint.X, 5) == Math.Round(list[j].EndPoint.X, 5)) && (Math.Round(list2[num].StartPoint.Y, 5) == Math.Round(list[j].EndPoint.Y, 5)))
                {
                    list2.Add(list[j]);
                    list.Remove(list[j]);
                    num++;
                    j = -1;
                }
            }
            _swPartModel.ClearSelection();
            _swPartModel.Extension.SelectByID2(heaterPathName, "SKETCH", 0.0, 0.0, 0.0, false, 0, null, 0);
            _swPartModel.EditSketch();
            foreach (ISketchPoint point3 in array2)
            {
                point3.Select(false);
                if (point3.Type == 1)
                {
                    _swPartModel.EditDelete();
                }
            }
            double num2 = 0.0;
            foreach (SegmentData data2 in list2)
            {
                data2.Segment.Select(false);
                length = data2.Segment.GetLength();
                num2 += length;
            }
            _swPartModel.ClearSelection();
            double num4 = num2 / 2.0;
            length = 0.0;
            int num5 = 0;
            double num6 = 0.0;
            for (int k = 0; k < list2.Count; k++)
            {
                list2[k].Segment.Select(false);
                length += list2[k].Segment.GetLength();
                if (num4 < length)
                {
                    num5 = k;
                    double num7 = Math.Abs((double)(length - num4));
                    num6 = (list2[num5].Segment.GetLength() - num7) / list2[num5].Segment.GetLength();
                    break;
                }
            }
            _swPartModel.ClearSelection();
            if (list2[num5].Segment.GetType() == 0)
            {
                double num13 = 0.0;
                double x = list2[num5].StartPoint.X;
                double y = list2[num5].StartPoint.Y;
                double num16 = list2[num5].EndPoint.X;
                double num17 = list2[num5].EndPoint.Y;
                if ((Math.Round(num16, 6) == Math.Round(list2[num5 - 1].StartPoint.X, 6)) && (Math.Round(num17, 6) == Math.Round(list2[num5 - 1].StartPoint.Y, 6)))
                {
                    num16 = list2[num5].StartPoint.X;
                    num17 = list2[num5].StartPoint.Y;
                    x = list2[num5].EndPoint.X;
                    y = list2[num5].EndPoint.Y;
                }
                else if ((Math.Round(num16, 6) == Math.Round(list2[num5 - 1].EndPoint.X, 6)) && (Math.Round(num17, 6) == Math.Round(list2[num5 - 1].EndPoint.Y, 6)))
                {
                    num16 = list2[num5].StartPoint.X;
                    num17 = list2[num5].StartPoint.Y;
                    x = list2[num5].EndPoint.X;
                    y = list2[num5].EndPoint.Y;
                }
                double pointX = x + ((num16 - x) * num6);
                double pointY = y + ((num17 - y) * num6);
                _swPartModel.SetAddToDB(true);
                if (_swPartModel.CreatePoint2(pointX, pointY, 0.0) != null)
                {
                    _swPartModel.SketchAddConstraints("sgFixed");
                }
                if (x == num16)
                {
                    num13 = 1.5707963267948966;
                }
                if (y == num17)
                {
                    num13 = 3.1415926535897931;
                }
                if ((x != num16) && !(y == num17))
                {
                    num13 = Math.Atan((num17 - y) / (num16 - x));
                }
                if (num13 > 3.1415926535897931)
                {
                    num13 -= 3.1415926535897931;
                }
                ISketchSegment segment3 = _swPartModel.ICreateLine2(pointX + (0.005 * Math.Cos(num13 + 1.5707963267948966)), pointY + (0.005 * Math.Sin(num13 + 1.5707963267948966)), 0.0, pointX + (0.005 * Math.Cos(num13 + 4.71238898038469)), pointY + (0.005 * Math.Sin(num13 + 4.71238898038469)), 0.0);
                _swPartModel.SketchAddConstraints("sgFIXED");
                segment3.ConstructionGeometry = true;
                _swPartModel.SetAddToDB(false);
                _swPartModel.ClearSelection2(true);
                _swPartModel.InsertSketch2(true);
            }
            if (list2[num5].Segment.GetType() == 1)
            {
                arc = (ISketchArc)list2[num5].Segment;
                startPoint = arc.IGetStartPoint2();
                endPoint = arc.IGetEndPoint2();
                ISketchPoint point4 = arc.IGetCenterPoint2();
                int rotationDir = arc.GetRotationDir();
                double num21 = 0.0;
                double num22 = 0.0;
                double num23 = list2[num5].Segment.GetLength();
                double radius = arc.GetRadius();
                double num25 = (num6 * num23) / radius;
                double num26 = startPoint.X;
                double num27 = startPoint.Y;
                double num28 = endPoint.X;
                double num29 = endPoint.Y;
                double num30 = point4.X;
                double num31 = point4.Y;
                if ((Math.Round(num28, 6) == Math.Round(list2[num5 - 1].StartPoint.X, 6)) && (Math.Round(num29, 6) == Math.Round(list2[num5 - 1].StartPoint.Y, 6)))
                {
                    num26 = endPoint.X;
                    num27 = endPoint.Y;
                    rotationDir = -1 * rotationDir;
                }
                else if ((Math.Round(num28, 6) == Math.Round(list2[num5 - 1].EndPoint.X, 6)) && (Math.Round(num29, 6) == Math.Round(list2[num5 - 1].EndPoint.Y, 6)))
                {
                    num26 = endPoint.X;
                    num27 = endPoint.Y;
                    rotationDir = -1 * rotationDir;
                }
                if ((num30 != num26) && !(num31 == num27))
                {
                    num21 = Math.Atan((num31 - num27) / (num30 - num26));
                }
                if (Math.Round(num30, 8) == Math.Round(num26, 8))
                {
                    if (Math.Round(num31, 8) > Math.Round(num27, 8))
                    {
                        num21 = 4.71238898038469;
                    }
                    else if (Math.Round(num31, 8) < Math.Round(num27, 8))
                    {
                        num21 = 1.5707963267948966;
                    }
                }
                else if (Math.Round(num31, 8) == Math.Round(num27, 8))
                {
                    if (Math.Round(num30, 8) > Math.Round(num26, 8))
                    {
                        num21 = 3.1415926535897931;
                    }
                    else if (Math.Round(num30, 8) < Math.Round(num26, 8))
                    {
                        if (rotationDir > 0)
                        {
                            num21 = 0.0;
                        }
                        else
                        {
                            num21 = 6.2831853071795862;
                        }
                    }
                }
                if ((Math.Round(num30, 8) < Math.Round(num26, 8)) && (Math.Round(num31, 8) < Math.Round(num27, 8)))
                {
                    num22 = num21 + (rotationDir * num25);
                }
                else if ((Math.Round(num30, 8) < Math.Round(num26, 8)) && (Math.Round(num31, 8) > Math.Round(num27, 8)))
                {
                    num22 = (6.2831853071795862 + num21) + (rotationDir * num25);
                }
                else if ((Math.Round(num30, 8) > Math.Round(num26, 8)) && (Math.Round(num31, 8) > Math.Round(num27, 8)))
                {
                    num22 = (3.1415926535897931 + num21) + (rotationDir * num25);
                }
                else if ((Math.Round(num30, 8) > Math.Round(num26, 8)) && (Math.Round(num31, 8) < Math.Round(num27, 8)))
                {
                    num22 = (3.1415926535897931 + num21) + (rotationDir * num25);
                }
                else if (Math.Round(num30, 8) == Math.Round(num26, 8))
                {
                    num22 = num21 + (rotationDir * num25);
                }
                else if (Math.Round(num31, 8) == Math.Round(num27, 8))
                {
                    num22 = num21 + (rotationDir * num25);
                }
                num22 = Math.Round(num22, 6);
                double num32 = num30 + (radius * Math.Cos(num22));
                double num33 = num31 + (radius * Math.Sin(num22));
                bool flag29 = true;
                if (_swPartModel.Extension.SelectByID2("", "SKETCHPOINT", num32, num33, 0.0, false, 0, null, 0))
                {
                    ISketchPoint point5 = iSelectionManager.GetSelectedObject6(0, 1);

                    if ((point5 != null) && ((Math.Round(point5.X, 6) == Math.Round(num32, 6)) && (Math.Round(point5.Y, 6) == Math.Round(num33, 6))))
                    {
                        flag29 = false;
                    }
                }
                _swPartModel.SetAddToDB(true);
                if (flag29 && (_swPartModel.CreatePoint2(num32, num33, 0.0) != null))
                {
                    _swPartModel.SketchAddConstraints("sgFIXED");
                    _swPartModel.ICreateLine2(num30, num31, 0.0, num32, num33, 0.0).ConstructionGeometry = true;
                }
                _swPartModel.SetAddToDB(false);
                _swPartModel.ClearSelection2(true);
                _swPartModel.InsertSketch2(true);
            }

            
        }
   

 运行结果如下图:

CAD中验证正确 :

源代码下载:

https://gitee.com/painezeng/CSharpAndSolidWorks

C# SolidWorks 二次开发 API — 2018版 中文翻译 ModelDoc2 属性和IModelDocExtension属性

属性名称 描述
ActiveView Property (IModelDoc2) 获取只读模式下的当前活动模型视图。注意:此属性是一个get-only属性。集合未实现。
ConfigurationManager Property (IModelDoc2) 获取IConfigurationManager对象,该对象允许访问模型中的配置。
Extension Property (IModelDoc2) 获取imodeldocextension对象,该对象还允许访问模型文档。
FeatureManager Property (IModelDoc2) 获取iFeatureManager对象,该对象允许访问FeatureManager设计树。
FeatureManagerSplitterPosition Property (IModelDoc2) 拆分FeatureManager设计树,并获取或设置FeatureManager设计树面板中拆分栏的位置。
IActiveView Property (IModelDoc2) 获取只读模式下的当前活动模型视图。注意:此属性是一个get-only属性。集合未实现。
ILightSourcePropertyValues Property (IModelDoc2) 获取并设置光源属性值。
IMaterialPropertyValues Property (IModelDoc2) 获取或设置活动配置中材质的属性。
IPageSetup Property (IModelDoc2) 获取此文档的页面设置。
ISelectionManager Property (IModelDoc2) 获取此文档的IsElectionMgr对象,从而使当前选定的对象可用。
LargeAssemblyMode Property (IModelDoc2) 获取或设置此文档的大型程序集模式。
LengthUnit Property (IModelDoc2) 获取并设置imodeldoc2::getUnits、imodeldoc2::igetUnits和imodeldoc2::setUnits使用的相同长度单位值。
LightSourcePropertyValues Property (IModelDoc2) 获取并设置光源属性值。
LightSourceUserName Property (IModelDoc2) 获取或设置solidworks用户界面中显示的光源名称。
MaterialIdName Property (IModelDoc2) 获取或设置材质名称。
MaterialPropertyValues Property (IModelDoc2) 获取或设置活动配置中材质的属性。
MaterialUserName Property (IModelDoc2) 获取或设置材质名称。
ModelViewManager Property (IModelDoc2) 获取IModelViewManager对象,该对象允许访问模型视图。
PageSetup Property (IModelDoc2) 获取此文档的页面设置。
Printer Property (IModelDoc2) 获取或设置此文档的默认打印机。
SceneBkgImageFileName Property (IModelDoc2) 控制用作当前背景图片的图像文件名。
SceneName Property (IModelDoc2) 获取并设置场景的名称。
SceneUserName Property (IModelDoc2) 获取并设置场景的用户名。
SelectionManager Property (IModelDoc2) 获取此文档的IsElectionMgr对象,从而使当前选定的对象可用。注意:此属性是一个get-only属性。集合未实现。
ShowFeatureErrorDialog Property (IModelDoc2) 获取或设置是否显示功能错误对话框。
SketchManager Property (IModelDoc2) 获取允许访问草图创建例程的草图管理器。
SummaryInfo Property (IModelDoc2) 获取或设置solidworks文档的文件摘要信息。
Visible Property (IModelDoc2) 获取或设置活动文档的可见性。
ActiveCommandTab Property (IModelDocExtension) 获取并设置活动的solidworks commandmanager选项卡。
ActiveCommandTabIndex Property (IModelDocExtension) 获取并设置活动solidworks commandmanager选项卡的索引。
AnnotationViewCount Property (IModelDocExtension) 获取此零件或部件文档中的批注视图数。
AnnotationViews Property (IModelDocExtension) 获取此零件或部件文档中的批注视图。
AppPageSetup Property (IModelDocExtension) 获取此文档的SolidWorks应用程序页设置界面。
CommandTabVisible Property (IModelDocExtension) 获取并设置指定的solidworks commandmanager选项卡的可见性。
CustomPropertyBuilderTemplate Property (IModelDocExtension) 获取或设置此部件的自定义属性生成器模板。
CustomPropertyManager Property (IModelDocExtension) 获取此文档或配置的自定义属性。
DimXpertManager Property (IModelDocExtension) 获取此配置的dimxpert架构。
DisplayMode Property (IModelDocExtension) 获取并设置指定显示状态设置的显示模式。
DisplayStateSpecMaterialPropertyValues Property (IModelDocExtension) 获取并设置指定显示状态设置的外观设置。
Document Property (IModelDocExtension) 获取模型文档。
FeatureManagerFilterString Property (IModelDocExtension) 获取或设置FeatureManager设计树筛选器中的字符串。
FlyoutFeatureTreeVisibility Property (IModelDocExtension) 获取或设置弹出型功能管理器设计树的状态。
IncludeMassPropertiesOfHiddenBodies Property (IModelDocExtension) 获取或设置是否在程序集中包含隐藏组件的质量属性。
LinkedDisplayState Property (IModelDocExtension) 获取或设置是否在此部分中链接显示状态。
NeedsRebuild2 Property (IModelDocExtension) 获取是否需要重新生成模型文档。
ShowPartRebuildIndicators Property (IModelDocExtension) 获取或设置是否在具有过期冻结功能的部件上显示重建指示器。
SunLightInformation Property (IModelDocExtension) 获取指定的阳光信息。
ToolboxPartType Property (IModelDocExtension) 获取并设置此部分是否为SolidWorks工具箱部分。
Transparency Property (IModelDocExtension) 获取并设置指定显示状态设置的透明度状态。
UsePageSetup Property (IModelDocExtension) 获取或设置此文档是使用其自己的页面设置值、SolidWorks应用程序页面设置值,还是在单个图纸上使用设置值。
ViewDisplayRealView Property (IModelDocExtension) 获取或设置RealView图形设置。
Visibility Property (IModelDocExtension) 获取并设置指定显示状态设置的可见性状态。

C# SolidWorks 二次开发 API —在自己的网页中嵌入eDrawings Web Viewer

这是Solidworks PDM系统中的Web2客户端,能够实现对很多3D图在web端的预览,我们先不考虑PDM这么 高深的问题,今天我来给大家介绍一下如何把这个功能集成到自己的网页中,实现预览3D格式。
在这里插入图片描述
通过网页端的请求分析,以及后端服务器的对比,发现web版的edrawing是利用了新的scs格式来进行中转的,没有直接在web上对solidworks的原档进行解析,这样保证了数据的安全。
在这里插入图片描述
它利用了一个在线的服务来进行文件的转换,下图是3dcontentcentral这个网站上的请求截图:

在这里插入图片描述
在发布好web2客户端后,发现里面会有一个eDrawingsWebViewer的文件夹:里面就有转换的文件夹,再次进行研究
在这里插入图片描述
找到了一个转换的Exe文件,在cmd命令下直接有提示,传入输入的格式,以及输出的地址,就可以转换成scs文件了。
经过测试,这个转换工具可以直接转换x_t step等中间格式为scs文件,还是很厉害的。
在这里插入图片描述
在这里插入图片描述

最后在本地部署iis下直接 在Site文件夹下 打开main.html,并传入URL即可显示:

在这里插入图片描述
当前它本来有一个中转的服务,这个需要大家自己去处理。目前还没在把服务研究透。

下面是测量的截图

在这里插入图片描述

C# SolidWorks 二次开发 API—连接solidworks

从事二次开发十几年了,一直没有时间好好整理笔记,最近开始持续更新。

Solidworks二次开发需要一些C# Vb.net C++ 等编程语言的基础知识,大多使用Visual Studio进行开发。

再一个就是Solidworks要熟悉或者精通,因为任何手工都无法实现的东西,基本上做二次开发也不能实现。

那我们从最基础的连接到solidworks开始:

1.新建一个窗体程序或者控制台应用,我们以窗体程序为例:

加上一个按钮:

2.用NuGet查找solidworks进行dll的引用。自己选择对应版本或者其它包装好的库

(至少包括SolidWorks.Interop.sldworks ,SolidWorks.Interop.swconst,其它的可以删除掉)

3.新建一个公共类 

using SolidWorks.Interop.sldworks;
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace CSharpAndSolidWorks
{
    public class Utility
    {
        public static ISldWorks SwApp { get; private set; }

        public static ISldWorks ConnectToSolidWorks()
        {
            if (SwApp != null)
            {
                return SwApp;
            }
            else
            {
                Debug.Print("connect to solidworks on " + DateTime.Now);
                try
                {
                    SwApp = (SldWorks)Marshal.GetActiveObject("SldWorks.Application");
                }
                catch (COMException)
                {
                    try
                    {
                        SwApp = (SldWorks)Marshal.GetActiveObject("SldWorks.Application.23");//2015
                    }
                    catch (COMException)
                    {
                        try
                        {
                            SwApp = (SldWorks)Marshal.GetActiveObject("SldWorks.Application.26");//2018
                        }
                        catch (COMException)
                        {
                            MessageBox.Show("Could not connect to SolidWorks.", "SolidWorks", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                            SwApp = null;
                        }
                    }
                }

                return SwApp;
            }
        }
    }
}

上面这个代码块是C# 连接Solidworks的代码(EXE程序), 默认是solidworks已经被用户打开了。

这种连接不打开solidworks会提示连接失败。

这样我们可以获取到当前第一个运行的solidworks对象。(exe方式永远只能获取到第一个运行的solidworks对象。dll方式是集成在对应的运行进程中的,所以可以多个同时操作)

4.给按钮增加代码:

 private void BtnConnect_Click(object sender, EventArgs e)
        {
            ISldWorks swApp = Utility.ConnectToSolidWorks();

            if (swApp != null)
            {
                string msg = "This message from C#. solidworks version is " + swApp.RevisionNumber();

                swApp.SendMsgToUser(msg);
            }
        }

运行之后,点击按钮,会提示如下消息,表示我们用Visual Studio连接到已经打开的Solidworks成功了 。

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

—————————————–

关于连接可以参考下面这一文章:

Solidworks的多开操作与连接指定版本Solidworks

https://blog.csdn.net/zengqh0314/article/details/105565915

C# SolidWorks 二次开发 API —《入门教程》完结

目前计划就按这个思路进行博客的发布,如果大家看到此有什么想法或者开发遇到什么问题,可以留言给我,大家一起探讨.

也可以加QQ群90216591 共同研究。

源代码下载:

https://gitee.com/painezeng/CSharpAndSolidWorks
https://github.com/painezeng/CSharpAndSolidWorks

当前入门系列已经全部完成,希望对新朋友有些帮助。

SolidWorks API
	API
		连接Solidworks
		打开和创建新零件
		读取零件属性
		修改零件
		遍历零件特征
		遍历装配体
		遍历工程图视图与球标
		装配新零件
		导出x_t/dwg
		插入库特征
		选择过滤
		清空草图的几何关系
		选择命名的实体/面
		遍历草图中的对象
		给文件增加第三方属性
		显示提示信息
		高级选择
		包围框生成(包括装配体方案)
		测量与获取结果
		获取质量属性
		Add-in的建立
		自动注册插件与更新方案
		Pane创建页面(预览BOM)
		给零件加上材质
		给选定面增加颜色
		打断连接关系
		替换零件 
		PMP新特征
		显示拖拽
		MacroFeature的生成
		等待用户选择后继续操作
		打包文件Pack and Go
		插入块 和 属性块
		工程图中获取模型
		给已有特征增加几何关系
	实例
		创建草图中心点
		自增Note插入
		球标位置自动优化
		批量导出实体,生成新装配体。
		随机上色
		屏幕1:1显示实物

C# SolidWorks 二次开发 API—钣金零件信息提取

有一段时间没有发博文了,最近有人问到钣金件的相关操作,今天我们来看看钣金零件信息的读取。

Solidworks中钣金件是有一个单独的模块,里面有一些固定的文件夹结构。

最后这个文件夹中包含了展开状态时零件的信息。如长度与折弯线相关的信息都在这里面。

一般我们要找到长 宽 厚 折弯角 与距离  折弯方向 这些信息。

输出结果如下,有些小数的处理就忽略了。大家看看就行。 

粗略的写了下,输入信息在这里。很多就是API帮助里面的例子,大家可以在中文翻译中查找到。

        private void btnSheetmetal_Click(object sender, EventArgs e)
        {
            //连接到Solidworks
            ISldWorks swApp = Utility.ConnectToSolidWorks();
            swApp.CommandInProgress = true;
            ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc;

            //钣金 变成平板模式的特征
            List<Feature> flatPatternFeatures = new List<Feature>();

            //Bounding Box草图
            List<string> boundingSketchesName = new List<string>();

            //获取当前钣金状态--这个已经过时

            //swSMBendStateFlattened  2 = 弯曲变平;该模型回滚到FlattenBends功能之后,但恰好在相应的ProcessBends功能之前
            //swSMBendStateFolded 3 = 折弯处已折叠;模型回滚到FlattenBends ProcessBends功能对之后
            //swSMBendStateNone   0 = 不是钣金零件;没有SheetMetal功能
            //swSMBendStateSharps 1 = 弯曲处处于锐利状态;零件回滚到第一个FlattenBends功能之前

            var bendState = swModel.GetBendState();

            if (bendState == 0)
            {
                swApp.SendMsgToUser("不是钣金零件!");
                return;
            }
            //  swApp.SendMsgToUser("当前状态" + bendState);
            if (bendState != 2)
            {
                //swApp.Command((int)swCommands_e.swCommands_Flatten, "");
                //设定当前钣金状态 平板 ,下面这行代码不适用现在的零件 ,只适用于很早之前的零件
                //var setStatus = swModel.SetBendState((int)swSMBendState_e.swSMBendStateFlattened);

                //新钣金均是通过获取零件
                var swFeatureManager = swModel.FeatureManager;
                var flatPatternFolder = (FlatPatternFolder)swFeatureManager.GetFlatPatternFolder();

                var featArray = (object[])flatPatternFolder.GetFlatPatterns();

                for (int i = featArray.GetLowerBound(0); i <= featArray.GetUpperBound(0); i++)
                {
                    var feat = (Feature)featArray[i];
                    Debug.Print("    " + feat.Name);

                    flatPatternFeatures.Add(feat);
                    feat.SetSuppression2((int)swFeatureSuppressionAction_e.swUnSuppressFeature, (int)swInConfigurationOpts_e.swThisConfiguration, null);

                    //解压子特征
                    var swSubFeat = (Feature)feat.GetFirstSubFeature();

                    while ((swSubFeat != null))
                    {
                        Debug.Print(swSubFeat.Name.ToString());
                        switch (swSubFeat.GetTypeName())
                        {
                            //如果是草图
                            case "ProfileFeature":

                                var sketchSpc = (Sketch)swSubFeat.GetSpecificFeature2();
                                object[] vSketchSeg = sketchSpc.GetSketchSegments();

                                for (int j = 0; j < vSketchSeg.Length; j++)
                                {
                                    SketchSegment swSketchSeg = (SketchSegment)vSketchSeg[j];

                                    //如果直线不是折弯线,说明是边界框
                                    if (swSketchSeg.IsBendLine() == false)
                                    {
                                        boundingSketchesName.Add(swSubFeat.Name);
                                    }
                                    else if (swSketchSeg.IsBendLine() == true)
                                    {
                                        Debug.Print("钣金宽度为:" + swSketchSeg.GetLength() * 1000);
                                    }
                                }

                                break;

                            default:
                                break;
                        }

                        swSubFeat = (Feature)swSubFeat.GetNextSubFeature();
                    }
                }

                swModel.EditRebuild3();
            }

            //遍历所有特征

            var swSelMgr = (SelectionMgr)swModel.SelectionManager;
            var swFeat = (Feature)swModel.FirstFeature();

            while ((swFeat != null))
            {
                //Debug.Print(swFeat.Name.ToString());
                // Process top-level sheet metal features
                switch (swFeat.GetTypeName())
                {
                    case "SMBaseFlange":
                        //var swBaseFlange = (BaseFlangeFeatureData)swFeat.GetDefinition();

                        //Debug.Print("钣金宽度为:" + swBaseFlange.D1OffsetDistance * 1000);

                        break;

                    case "SheetMetal":
                        //这里可以获取默认的厚度                        Debug.Print(swFeat.Name.ToString());
                        SheetMetalFeatureData sheetMetalFeatureData = (SheetMetalFeatureData)swFeat.GetDefinition();
                        Debug.Print("钣金默认厚度为:" + sheetMetalFeatureData.Thickness * 1000);

                        break;

                    case "SM3dBend":

                        break;

                    case "SMMiteredFlange":

                        break;
                }
                // process sheet metal sub-features
                var swSubFeat = (Feature)swFeat.GetFirstSubFeature();

                while ((swSubFeat != null))
                {
                    // Debug.Print(swSubFeat.Name.ToString());
                    switch (swSubFeat.GetTypeName())
                    {
                        case "SketchBend":

                            GetHisBendInformation(swApp, swModel, swSubFeat);
                            break;

                        case "OneBend":

                            GetHisBendInformation(swApp, swModel, swSubFeat);

                            break;

                        default:
                            break;
                            // Probably not a sheet metal feature
                    }

                    swSubFeat = (Feature)swSubFeat.GetNextSubFeature();
                }

                swFeat = (Feature)swFeat.GetNextFeature();
            }

            return;
        }

        private void GetHisBendInformation(ISldWorks swApp, ModelDoc2 swModel, Feature swFeat)
        {
            MathUtility swMathUtil = default(MathUtility);
            SelectionMgr swSelMgr = default(SelectionMgr);
            OneBendFeatureData swOneBend = default(OneBendFeatureData);
            Object[] vSketchSegs = null;
            SketchSegment swSketchSeg = default(SketchSegment);
            Sketch swSketch = default(Sketch);
            Feature swSketchFeat = default(Feature);
            SketchLine swSketchLine = default(SketchLine);
            SketchPoint swSkStartPt = default(SketchPoint);
            SketchPoint swSkEndPt = default(SketchPoint);
            SelectData swSelData = default(SelectData);
            double[] nPt = new double[3];
            MathPoint swStartPt = default(MathPoint);
            MathPoint swEndPt = default(MathPoint);
            MathTransform swSkXform = default(MathTransform);
            int[] vID = null;
            int i = 0;

            swMathUtil = (MathUtility)swApp.GetMathUtility();

            swSelMgr = (SelectionMgr)swModel.SelectionManager;
            //swFeat = (Feature)swSelMgr.GetSelectedObject6(1, -1);
            //swSelData = swSelMgr.CreateSelectData();
            swOneBend = (OneBendFeatureData)swFeat.GetDefinition();

            /*swBaseBend 4
            swEdgeFlangeBend 8
            swFlat3dBend 6
            swFlatBend 2
            swFreeFormBend 10 = Obsolete
            swHemBend 9
            swLoftedBend 12
            swMirrorBend 7
            swMiterBend 5
            swNoneBend 3
            swRoundBend 1
            swRuledBend 11 = Obsolete
            swSharpBend 0
            */

            Debug.Print("Type of bend (swBendType_e): " + swOneBend.GetType());
            Debug.Print("折弯次数: " + swOneBend.GetFlatPatternSketchSegmentCount2());
            Debug.Print("折弯序号: " + swOneBend.BendOrder);
            Debug.Print("折弯角度: " + swOneBend.BendAngle * 57.3 + " deg");
            Debug.Print("折弯圆角: " + swOneBend.BendRadius);

            if (swOneBend.BendDown == true)
            {
                Debug.Print("向下折弯: " + "Yes");
            }
            else
            {
                Debug.Print("向下折弯: " + " No");
            }

            vSketchSegs = (Object[])swOneBend.FlatPatternSketchSegments2;

            for (i = 0; i <= vSketchSegs.GetUpperBound(0); i++)
            {
                swSketchSeg = (SketchSegment)vSketchSegs[i];
                swSketch = swSketchSeg.GetSketch();
                swSketchLine = (SketchLine)swSketchSeg;
                swSkStartPt = (SketchPoint)swSketchLine.GetStartPoint2();
                swSkEndPt = (SketchPoint)swSketchLine.GetEndPoint2();
                vID = (int[])swSketchSeg.GetID();

                // Get sketch feature
                swSketchFeat = (Feature)swSketch;
                swSkXform = swSketch.ModelToSketchTransform;
                swSkXform = (MathTransform)swSkXform.Inverse();

                nPt[0] = swSkStartPt.X;
                nPt[1] = swSkStartPt.Y;
                nPt[2] = swSkStartPt.Z;
                swStartPt = (MathPoint)swMathUtil.CreatePoint(nPt);
                swStartPt = (MathPoint)swStartPt.MultiplyTransform(swSkXform);
                double[] swStartPtArrayData;
                swStartPtArrayData = (double[])swStartPt.ArrayData;

                nPt[0] = swSkEndPt.X;
                nPt[1] = swSkEndPt.Y;
                nPt[2] = swSkEndPt.Z;
                swEndPt = (MathPoint)swMathUtil.CreatePoint(nPt);
                swEndPt = (MathPoint)swEndPt.MultiplyTransform(swSkXform);
                double[] swEndPtArrayData;
                swEndPtArrayData = (double[])swEndPt.ArrayData;

                // Debug.Print("File = " + swModel.GetPathName());
                Debug.Print("  Feature = " + swFeat.Name + " [" + swFeat.GetTypeName2() + "]");
                Debug.Print("    Sketch             = " + swSketchFeat.Name);
                Debug.Print("    SegID              = [" + vID[0] + ", " + vID[1] + "]");
                Debug.Print("    Start with respect to sketch   = (" + swSkStartPt.X * 1000.0 + ", " + swSkStartPt.Y * 1000.0 + ", " + swSkStartPt.Z * 1000.0 + ") mm");
                Debug.Print("    End with respect to sketch   = (" + swSkEndPt.X * 1000.0 + ", " + swSkEndPt.Y * 1000.0 + ", " + swSkEndPt.Z * 1000.0 + ") mm");
                Debug.Print("    Start with respect to model    = (" + swStartPtArrayData[0] * 1000.0 + ", " + swStartPtArrayData[1] * 1000.0 + ", " + swStartPtArrayData[2] * 1000.0 + ") mm");
                Debug.Print("    End with respect to model    = (" + swEndPtArrayData[0] * 1000.0 + ", " + swEndPtArrayData[1] * 1000.0 + ", " + swEndPtArrayData[2] * 1000.0 + ") mm");
            }
        }
  

 

C# SolidWorks 二次开发 API —Solidworks的多开操作与连接指定版本Solidworks

        今天有网友问我关于如何用Exe操作多个Solidworks的问题,其实之前我看到过解决方案,是通过进程和id获取,而不是我们平时常用的 (SldWorks)Marshal.GetActiveObject(“SldWorks.Application.27”);

        所以晚上回来查了些资料,发现了有了解决方案,我精简了一下,做了个dll.大家可以试试。    

 ''' <summary>
    ''' 创建一个新的Solidworks并返回实例
    ''' </summary>
    ''' <param name="version">指定版本号,-1表示默认.</param>
    ''' <param name="suppressDialogs">True 则禁用solidworks弹出消息.</param>
    ''' <param name="requireMainWindow">True 表示运行完显示到主窗口</param>
    ''' <param name="startProcessTimeout">返回Null 如果SolidWorks在指定时间内没有打开。</param>
    ''' <param name="createWindowTimeout">返回Null 如果SolidWorks主窗口在指定时间内没有显示.</param>
    ''' <returns></returns>
    Public Shared Function RunSolidWorks(version As Integer,
                                         visible As Boolean,
                                         Optional suppressDialogs As Boolean = False,
                                         Optional requireMainWindow As Boolean = True,
                                         Optional startProcessTimeout As Integer = 30,
                                         Optional createWindowTimeout As Integer = 15) As SldWorks

        Dim executablePath As String = CTFileSystem.GetSolidWorksExecutablePath(version)

        If File.Exists(executablePath) = False Then Return Nothing

        Dim info As ProcessStartInfo = New ProcessStartInfo(executablePath)

        If suppressDialogs Then info.Arguments = "/r"

        Dim process As Process = Process.Start(info)
        Dim app As SldWorks = Nothing
        Dim t As DateTime = DateTime.Now

        While app Is Nothing
            Threading.Thread.Sleep(1000)
            If Math.Abs(DateTime.Now.Subtract(t).Seconds) > startProcessTimeout Then Return Nothing

            'If it were possible to get a GUID from a process ID then we could use GetActiveObject instead of this
            app = GetComObjectFromProcessId(process.Id)
        End While

        t = DateTime.Now
        While IsRunning(isMainWindowCreated:=True) = False
            Threading.Thread.Sleep(1000)
            If Math.Abs(DateTime.Now.Subtract(t).Seconds) > createWindowTimeout Then Return Nothing
        End While

        If visible = False Then
            Dim frame As Frame = app.Frame()
            If frame Is Nothing Then Return app
            Dim handle As IntPtr = frame.GetHWndx64()
            If ShowWindow(handle, 0) Then Return app
        End If

        Return app
    End Function

我刚刚进行了测试,用起来比较简单。我用代码新建了两个solidworks 2018窗口:


        private SldWorks sldWorks2018_1 = null;
        private SldWorks sldWorks2018_2 = null;

        private void button1_Click(object sender, EventArgs e)
        {
            sldWorks2018_1 = PStandAlone.RunSolidWorks(26, true, false, false, 30, 15);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            sldWorks2018_2 = PStandAlone.RunSolidWorks(26, true, false, false, 30, 15);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            sldWorks2018_1.SendMsgToUser("From 2018 -1");
            sldWorks2018_2.SendMsgToUser("From 2018 -2");
        }

      

源码https://gitee.com/painezeng/PSWStandalone(vb.net)

C# SolidWorks 二次开发 API — 文件导出(x_t/dxf)

小例子,导出文件。

下面是代码:

        private void btnExport_Click(object sender, EventArgs e)
        {
            ISldWorks swApp = Utility.ConnectToSolidWorks();

            if (swApp != null)
            {
                ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc;

                if (swModel.GetType() == (int)swDocumentTypes_e.swDocPART || swModel.GetType() == (int)swDocumentTypes_e.swDocASSEMBLY)
                {
                    ModelDocExtension swModExt = (ModelDocExtension)swModel.Extension;

                    int error = 0;

                    int warnings = 0;

                    //设置导出版本
                    swApp.SetUserPreferenceIntegerValue((int)swUserPreferenceIntegerValue_e.swParasolidOutputVersion, (int)swParasolidOutputVersion_e.swParasolidOutputVersion_161);

                    swModExt.SaveAs(@"C:\export.x_t", (int)swSaveAsVersion_e.swSaveAsCurrentVersion, (int)swSaveAsOptions_e.swSaveAsOptions_Silent, null, ref error, ref warnings);
                }
                else if (swModel.GetType() == (int)swDocumentTypes_e.swDocDRAWING)
                {
                    ModelDocExtension swModExt = (ModelDocExtension)swModel.Extension;

                    int error = 0;

                    int warnings = 0;

                    //设置dxf 导出版本 R14
                    swApp.SetUserPreferenceIntegerValue((int)swUserPreferenceIntegerValue_e.swDxfVersion, 2);

                    //是否显示 草图
                    swModel.SetUserPreferenceToggle(196, false);

                    swModExt.SaveAs(@"C:\export.dxf", (int)swSaveAsVersion_e.swSaveAsCurrentVersion, (int)swSaveAsOptions_e.swSaveAsOptions_Silent, null, ref error, ref warnings);
                }
            }
        }