Hi, I am currently working on developing a SolidWorks connector. I have successfully sent a stream to the Speckle server. However, I have some issues and ideas for my next steps.
Depolyment
In general, I can create an MSI package that users can install on their computer. But this is not a good choice because Speckle Manager is awesome. So, I want to integrate with it. I found it at AvaloniaUI Showcase, but I cannot find its source repository. Maybe it is not an open-source project? Can anyone help me with this? Registering a SolidWorks add-in requires admin privileges. Can I move my repos to Speckle Systems org so that more users can see it?
Schema
I have looked at the repository Speckle-Sharp and the developer docs. I found that Speckle depends on a JSON-based schema for different 3D software. In mechanical engineering 3D software, there are part documents, assembly documents, and drawing documents. There may be some differences in Autodesk Inventor or Siemens UG NX. Some other 3D software contains sheet metal documents, etc. I designed a simple schema tree based on SolidWorks, and there is some code about these objects.
I am constructing a Brep object and I want to know if there is some detailed information about Brep objects in Speckle-Sharp. Is it possible to convert a Brep object to *.step or *.iges format?
CSG
There is a post about this. SolidWorks and other mechanical engineering 3D software. It is important that a solid model can guide the manufacturing process. But it’s not easy to support this feature. Maybe a solid kernel such as OCC is needed.
Other connectors
Speckle is an awesome platform for users to share 3D data. Mechanical engineering also needs this. There are some 3D design or simulation software waiting for integration. There is a workflow such as designing in SolidWorks and then exporting to COMSOL for simulation. Maybe i can contribute an inventor connector or comsol connector if i have free time.
Deployment: we can provide you with instructions on how to make the Solidworks connector available in Manager. This consists in creating an exe installer using InnoSetup and writing a manifest file. Currently, Manager is not open source to protect our distribution channels.
We want to avoid hosting community contributions inside our speckle-sharp repository because this complicates maintenance, so it’s better to keep it in your own repository for now.
Schema: the Speckle approach is to define a high-level schema that contains all the basic required properties to describe each element (eg, a SpeckleWall has a baseLine, height etc) and then create host application specific classes such as a SpeckleRevitWall that contains additional properties only needed by Revit. This is to allow a good level of interoperability across software that uses very different concepts.
In regards to the part documents, assembly documents, and drawing documents, we would need to see if there are analogies with any of the existing classes before we add new ones. Maybe it’s better to start with a few basic ones (eg Components) and then expand to the rest. @clrkng can assist you in navigating the existing Speckle schema.
Brep This is our current definition, currently we don’t have methods to convert to/from *.step or *.iges format. @AlanRynne is our Brep expert in case you have any questions (although he’s on holiday atm ).
CSG
This is super interesting but as you say would be a major effort - we’d need to chat internally a bit and see what’s the best strategy to support it.
In addition to @teocomi’s excellent points, I suggest you look at how @ahmedwael94 and his team are handling alternative topologies with the TopSolid connector. TopSolid shares the Solidworks kernel, I believe. There may be at least strategies to learn from.
Binary properties
To follow the binary properties, our future support for textures may follow a similar use case. It is already possible to upload/store binary blobs on a Speckle Server, and nominally a pointer could be made as another Base object / typed property.
I have looked into this, as document binaries are also a feature (not very well used) by Navisworks. I have chosen to declare them unsupported while I work through the use cases the Community has put forward. So far, it hasn’t come up, but if it is a mainstay of the manufacturing sector, it may come into view sooner.
Developing a Connector
From personal experience, I also wanted to know all of these things at once, and you’ll find many posts from me when I was debating in the open about what a Navisworks object model would look like. The mentorship and guidance provided by the team during that time were tremendous, so I encourage you to continue doing as you have done here and post part question/part position statements and seek reactions as much as answers.
I wouldn’t rush to seek distribution details out of the gate. Most of our connectors are first engineered to the needs (sometimes complicated) of the host application, and then we work out the details with the manager later.
I’m lucky to be now able to offer my experience with you, so my (virtual) door is always open if you want to sync and discuss anything.
@jonathon Thanks! I think the TopSolid connector is what I need.
Thank you for your advice on developing a connector. It’s better to solve issues one by one and focus on each part, but since I’m not working on this full-time, I don’t have enough time to follow this approach. I will try to ask questions about specific parts instead of all at once. Regarding distribution details, I want to know where Speckle Manager is located because I can’t find it. And it matters to me to know how to deploy it because it is not easy to deploy a SolidWorks add-in due to the required registry manipulation.
This is what an installer for SolidWorks with InnoSetup could look like, let me know if you have any questions and I’d be happy to help
#define MyAppName "Speckle for Solidworks"
#define MyAppVersion "2.0"
#define MyAppPublisher "dududu"
#define MyAppURL "https://speckle.community/"
[Setup]
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{8D607BF3-ED6E-46F6-8AF8-1E1EF6A4BCDB}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
; Uncomment the following line to run in non administrative install mode (install for current user only.)
;PrivilegesRequired=lowest
OutputBaseFilename=mysetup
Compression=lzma
SolidCompression=yes
WizardStyle=modern
[Files]
; Define here the files that need to be copied for the connector and converter to work
[Registry]
; Define here the registry changes needed
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
Thanks @teocomi, it gives me a lot help. I will try to create a InnoSteup installer. I am currently studying TopSolid Connector. If I encounter any other difficulties, I will come back to the community.
Yes, an MSI should also work, as long as it can be run by command line.
But it’s better if you can make it with Inno setup to keep consistency with our other installers…