Recently I found a python package called "pySW" to be useful for those who are interested in both Solidworks API programming and python language. If you are familiar with Visual Studio Code and shell command in the terminal, you can easily install and play with it. You may want to visit its author's github repository and try his sample test program. I modified a little to read the lens template and generate the variants. It is almost identical to his box generation sample program. It looks like pySW project has never been updated for last 3 years though. Once the package is installed, you need modify a few lines to make it work. Let me explain one by one.
The web page link
- PySW 1.4 project in PyPI: https://pypi.org/project/pySW/
- Github repository: https://github.com/kalyanpi4/pySW
Package installation and test program workaround
- Install pySW
Run the following command. You should install other dependent python packages.
pip install pySW
- Update method names in commSW.py and main.py
You can browse your local python site-package folder of pySW and your local copy of test/box folder respectively. Change getGlobalVariables with getGlobalVars, updatePrt with update, and saveAssy with save.
- Customize test program main.py for my own lens generation
This is the complete main.py python code of lens model generated from template model. You can double-check the pre-requisite update to run this program successfully from the initial comment lines shown below.
""" As of June 2, 2023 1 Python package modification Install pySW 1.4 and modify commSW.py at C:\\Users\\your-computer-username\\AppData\\Local\\Programs\\Python\ \\Python311\\Lib\\site-packages\\pySW Line 122 getGlobalVariables to getGlobalVars Line 140, 190 updatePrt to update 2 Sample file modification Copy and modify https://github.com/kalyanpi4/pySW/blob/master/tests/box/main.py Line 17 getGlobalVariables to getGlobalVars Line 48 updatePrt to update Line 49 saveAssy to save """ from pySW import SW from pyDOE import lhs from scipy.stats.distributions import norm import psutil import time import shutil import pandas as pd partName = r'Lens-DCX.SLDPRT' if "SLDWORKS.exe" in (p.name() for p in psutil.process_iter()) is False: print('starting SLDWORKS') SW.startSW() time.sleep(10) SW.connectToSW() cwd = psutil.os.getcwd() SW.openPrt(cwd+'\\template\\'+partName) var = SW.getGlobalVars() variables = [] for key in var: variables.append(key) design = lhs(len(var.keys()), samples=3) means = [100, 100, 40, 8] stdvs = [10, 10, 5, 1] for i in range(len(var.keys())): design[:, i] = norm(loc=means[i], scale=stdvs[i]).ppf(design[:, i]) analysisDir = psutil.os.getcwd()+'\\analysis' if psutil.os.listdir(psutil.os.getcwd())[0] == 'analysis': shutil.rmtree(analysisDir) psutil.os.mkdir(analysisDir) else: psutil.os.mkdir(analysisDir) for i in range(len(design)): for j in range(len(variables)): SW.modifyGlobalVar(variables[j], round(design[i][j]), 'mm') SW.update() SW.save(analysisDir+'\\', str(i), 'SLDPRT') df = pd.DataFrame(design, columns=variables) df.to_csv(psutil.os.getcwd()+'\\params.csv')
Comments