Solidworks二次开发:样条曲线、平移、旋转和扫描切除

devtools/2024/9/24 0:58:25/

绘制样条曲线:生成若干数据点,然后根据这些点绘制样条曲线,点数过多会卡顿甚至失败。绘制样条曲线的API是CreateSpline2,其含有两个参数,第一个参数是数据点数组,按XYZ的顺序依次存储,第二个参数是布尔值,True 表示模拟自然结束,False 表示不模拟自然结束。

import win32com.client as win32
import math as mh
import numpy as np
import pythoncom
def vtFloat(list):return win32.VARIANT(pythoncom.VT_ARRAY|pythoncom.VT_R8,list)
swApp = win32.Dispatch('sldworks.application')
swApp.Visible = True
Nothing = win32.VARIANT(pythoncom.VT_DISPATCH, None)
Part = swApp.NewDocument(r"C:\ProgramData\SolidWorks\SOLIDWORKS 2018\templates\\gb_part.prtdot", 0, 0, 0)
swPart = Part
Z=np.linspace(0,10,num=100)
points=[]
for z in Z:points.append(mh.cos(z)/1000)points.append(mh.sin(z)/1000)points.append(z/1000)
pointArray=vtFloat(points)
​
Part.SketchManager.Insert3DSketch(True)
skSegment = Part.SketchManager.CreateSpline2(pointArray,1)
Part.ClearSelection2(True)
​
boolstatus = Part.Extension.SelectByID2("3D草图1", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Spline2", "SKETCHSEGMENT", 1.85887074501475E-03, -3.36033643974305E-03, 5.78262344421818E-03, False, 0, Nothing, 0)
​
boolstatus = Part.Extension.SelectByID2("Line2", "SKETCHSEGMENT", -1.73623208333802E-03, -2.31258153645074E-03, 7.81040559785985E-03, False, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Line2@3D草图3", "EXTSKETCHSEGMENT", -3.75807692597618E-03, 3.45141777074787E-03, 0, False, 0, Nothing, 0)

平移和旋转:对实体进行平移和旋转,所用的API是InsertMoveCopyBody2,其一共有12个参数,依次如下

TransX:X轴平移的增量值;应用于平移

TransY:Y轴平移的增量值;应用于平移

TransZ:Z轴平移的增量值;应用于平移

TransDist:平移距离;应用于平移

RotPointX:旋转原点的X值;应用于旋转

RotPointY:旋转原点的Y值;应用于旋转

RotPointZ:旋转原点的Z值;应用于旋转

RotAngleX:X轴旋转角度的值;应用于旋转

RotAngleY:Y轴旋转角度的值;应用于旋转

RotAngleZ:Z轴旋转角度的值;应用于旋转

BCopy:如果是复制操作为True,如果是移动操作为False

NumCopies:要创建的副本数量

Dim swApp As Object
​
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
​
Sub main()
​
Set swApp = Application.SldWorks
​
Set Part = swApp.ActiveDoc
​
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("实体-移动/复制1", "SOLIDBODY", 2.43934486115904E-03, 6.95337162198939E-04, 2.03449449003301E-05, False, 1, Nothing, 0)
Dim myFeature As Object
Set myFeature = Part.FeatureManager.InsertMoveCopyBody2(0, 0, 0, 0, 2.23119165229542E-03, -1.12361570448815E-04, -7.97491319686074E-05, 0, 0, 0.872664625997167, False, 1)
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("实体-移动/复制2", "SOLIDBODY", 2.8606295433562E-03, 3.44573247673452E-04, 5.34573056256704E-05, False, 1, Nothing, 0)
Set myFeature = Part.FeatureManager.InsertMoveCopyBody2(0, 0, 0.01, 0, 0.00223119165, -2.210592905042E-04, -8.52224055764143E-05, 0, 0, 0, False, 1)
End Sub

变换前

变换后

扫描切除-实体轮廓:用一个工具实体按特定轮廓切除另一个实体,所用的API是InsertCutSwept4,

Propagate:True 表示将扫掠切割传播到下一个边缘,False 表示仅在选定的边缘上进行扫掠切割;要传播到下一个边缘,下一个边缘必须与当前边缘相切

Alignment:如果用于扫掠的曲线从一个面到另一个面或从一个边缘到另一个边缘,True 会导致扫掠完全穿过切割的端面,而 False 会导致切割从扫掠曲线开始和结束时垂直;因此,它可能不会穿透被切割体的两个端面T

wistCtrlOption:如 swTwistControlType_e 中定义的扭转控制选项

KeepTangency:如果扫掠截面有切线段,True 会导致生成的扫掠中的相应表面保持切线,False 则不会

BAdvancedSmoothing:如果扫掠截面有圆形或椭圆形弧线,True 近似截面并平滑表面,False 则不会

StartMatchingType:如 swTangencyType_e 中定义的切线类型

EndMatchingType:如 swTangencyType_e 中定义的切线类型

IsThinBody:如果这个特征是薄体,则为 True,如果不是则为 False

Thickness1:第一个方向的厚度值

Thickness2:第二个方向的厚度值T

hinType:如 swThinWallType_e 中定义的薄壁类型

PathAlign:路径对齐类型

UseFeatScope:如果该特征仅影响选定的实体,则为 True,如果该特征影响所有实体,则为 False

UseAutoSelect:True 表示自动选择所有实体并使特征影响这些实体,False 表示选择特征影响的实体

TwistAngle:如果 TwistCtrlOption 设置为 swTwistControlType_e.swTwistControlConstantTwistAlongPath,则指定末端扭转角度BMergeSmoothFaces:True 表示合并平滑面,False 表示不合并

AssemblyFeatureScope:如果扫掠切割仅影响装配中的选定组件,则为 True,如果扫掠切割影响装配中的所有组件,则为 False

AutoSelectComponents:True 表示自动选择装配中所有受影响的组件,False 表示使用手动选定的组件

PropagateFeatureToParts:True 表示将扫掠切割特征扩展到装配中所有受影响的零件,False 表示仅将扫掠切割插入到装配中

Dim swApp As Object
​
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
​
Sub main()
​
Set swApp = Application.SldWorks
​
Set Part = swApp.ActiveDoc
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("实体-移动/复制1", "SOLIDBODY", 2.27325767582442E-03, 6.46697756508274E-04, -4.8367987403708E-05, False, 1, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("螺旋线/涡状线1", "REFERENCECURVES", 0, 0, 0, True, 4, Nothing, 0)
Dim myFeature As Object
Set myFeature = Part.FeatureManager.InsertCutSwept4(False, True, 0, False, False, 0, 0, False, 0, 0, 0, 10, True, True, 0, True, True, True, False)
End Sub


http://www.ppmy.cn/devtools/99729.html

相关文章

滑动窗口解决子串问题

问题解析: 以这道题为例子:. - 力扣(LeetCode)找长度最小的子数组,子数组和必须大于条件中的target 暴力解法:左右指针列举出每一种子数组的可能,每种可能去求子数组的和,找到最小的…

Datawhale AI夏令营

一、分析CV识别任务 任务分析 自己研究生期间做过的大多是无监督任务,监督任务做的很少。比如,之前用过yolov5做过滑动验证码的识别,给滑动验证码的缺口打标签是项耗时费力的工作。本次任务相同,是给非机动车、机动车打标签。 fr…

【非常简单】 猿人学web第一届 第13题 入门级 cookie

查看数据接口 https://match.yuanrenxue.cn/api/match/13 请求参数只携带了 page 页码 请求时需要携带 cookie yuanrenxue_cookie字段 在请求的时将 cookie 中对应的 yuanrenxue_cookie 字段删除 勾选事件监听断点中的脚本断点后刷新页面即可看到 cookie 生成的位置 这段…

BLE mesh model 汇总

Ble Mesh Model Summary mesh model简介 Bluetooth Mesh 模型(Mesh Model)是 Bluetooth Mesh 网络中的一种抽象概念,用于定义设备的行为、功能和交互方式。在 Bluetooth Mesh 网络中,模型是节点(Node)上的…

密码学之哈希算法

文章目录 1. 哈希函数概述1.1 哈希函数的定义1.2 哈希函数的重要性 2. SHA系列算法简介2.1 SHA系列的发展历史2.2 SHA系列的应用场景 3. 主要SHA算法详解3.1 MD5算法3.2 SHA-1算法3.3 SHA-2算法家族3.4 SHA-3算法 4. SHA算法的安全性分析4.1 安全性的重要性4.2 已知的攻击方法4…

对equals()和hashCode()的理解?

equals() 和 hashCode() 是 Java 中用于对象比较和存储的两个重要方法。在使用集合(如 HashMap, HashSet, Hashtable 等)时,这两个方法尤其重要。让我们逐一了解这两个方法的概念和它们之间的关系。 1. equals() 方法 定义:equal…

贪心算法-分数背包问题

贪心算法与分数背包问题详解 目录 贪心算法与分数背包问题详解贪心算法简介分数背包问题问题分析算法步骤流程图代码实现(C)总结 C学习资源 贪心算法简介 贪心算法是一种在每一步选择中都采取在当前状态下最好或最优的选择,从而希望导致结果…

web 3D可视化技术

一.介绍 web 3D可视化技术的发展与应用展开,学习web 3D技术,包括利用js库进行项目搭建,学习图形学知识,掌握web 3D基础概念如点、线、面等,以及深入探讨渲染技术如PBR,材质贴图和环境光等。内容还涉及了与…