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

**绘制样条曲线:**生成若干数据点,然后根据这些点绘制样条曲线,点数过多会卡顿甚至失败。绘制样条曲线的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
相关推荐
郭庆汝2 小时前
pytorch、torchvision与python版本对应关系
人工智能·pytorch·python
思则变5 小时前
[Pytest] [Part 2]增加 log功能
开发语言·python·pytest
漫谈网络5 小时前
WebSocket 在前后端的完整使用流程
javascript·python·websocket
try2find7 小时前
安装llama-cpp-python踩坑记
开发语言·python·llama
博观而约取8 小时前
Django ORM 1. 创建模型(Model)
数据库·python·django
精灵vector9 小时前
构建专家级SQL Agent交互
python·aigc·ai编程
Zonda要好好学习10 小时前
Python入门Day2
开发语言·python
Vertira10 小时前
pdf 合并 python实现(已解决)
前端·python·pdf
太凉10 小时前
Python之 sorted() 函数的基本语法
python
项目題供诗10 小时前
黑马python(二十四)
开发语言·python