Hide Table of Contents

Add Component and Mate Example (C++ COM)

This example shows how to add a component and mate to an assembly.




// Preconditions: The specified assembly (lens_mount.sldasm) and component

//                (camtest.sldprt) files exist.


// NOTE: The assembly and component files are installed when you

//       install SOLIDWORKS and are intended for the SOLIDWORKS Toolbox

//       tutorial, so do not save the assembly after running the program.  


// Postconditions: The component and a mate, called top_coinc_camtest-1,

//       are added to the assembly.




#include "stdafx.h"


using namespace std;


int _tmain(int argc, _TCHAR* argv[])


//Initialize COM



//Use ATL smart pointers

CComPtr<ISldWorks> swApp;

CComPtr<IModelDoc2> swModel;

CComPtr<IModelDocExtension> swDocExt;

CComPtr<IAssemblyDoc> swAssy;

CComPtr<IComponent2> swComponent;

CComPtr<IFeature> mateFeature;

CComPtr<IModelDoc2> tmpObj;

CComPtr<IMate2> swMate;


long lErrors;

long lWarnings;

long lMateError;





//Connect to currently running instance of SOLIDWORKS

hres = swApp.CoCreateInstance(__uuidof(SldWorks), NULL, CLSCTX_LOCAL_SERVER);


//Open the assembly document

CComBSTR sAssemblyName(L"c:\\Program Files\\SOLIDWORKS\\samples\\tutorial\\toolbox\\lens_mount.sldasm");

CComBSTR sDefaultConfiguration(L"Default");

swApp->OpenDoc6(sAssemblyName, swDocASSEMBLY, swOpenDocOptions_Silent, sDefaultConfiguration, &lErrors, &lWarnings, &swModel);


swModel = NULL;


//Open the component (part) document

CComBSTR sCompName(L"c:\\Program Files\\SOLIDWORKS\\samples\\tutorial\\toolbox\\camtest.sldprt");

swApp->OpenDoc6(sCompName, swDocPART, swOpenDocOptions_Silent, sDefaultConfiguration, &lErrors, &lWarnings, &tmpObj);


//Re-activate the assembly document

swApp->IActivateDoc3(sAssemblyName, true, &lErrors, &swModel);


swAssy = swModel;


//Add the component to the assembly

swAssy->AddComponent4(sCompName, sDefaultConfiguration, -1, -1, -1, &swComponent);


//Concatenate strings for name of mate

CComBSTR sMateName(L"top_coinc_");

CComBSTR sCompMateName (L"");



CComBSTR sFullCompMateName = sMateName;


//Concatenate strings for name of first selection: Top plane of component

CComBSTR sFirstSelection(L"Top@");


CComBSTR sAtSign(L"@");


CComBSTR sAssemblyFilename(L"lens_mount");



//Second selection: Front plane of assembly

CComBSTR sSecondSelection(L"Front@");


//Adjust the view so that you can see the assembly and the added component

CComBSTR sNamedView(L"*Trimetric");

swModel->ShowNamedView2(sNamedView, -1);







//Select the planes to mate

CComBSTR sPlane(L"PLANE");

swDocExt->SelectByID2(sFirstSelection, sPlane, 0, 0, 0, true, 1, NULL, swSelectOptionDefault, &retVal);

swDocExt->SelectByID2(sSecondSelection, sPlane, 0, 0, 0, true, 1, NULL, swSelectOptionDefault, &retVal);


//Mate the selected entitities

swAssy->AddMate3(swMateCOINCIDENT, swMateAlignALIGNED, false, 0, 0, 0, 0, 0, 0, 0, 0, false, &lMateError, &swMate);


//Set the name of the mate feature

mateFeature = swMate;



return 0;



Back to top


/// stdafx.h : include file for standard system include files,

// or project-specific include files that are used frequently, but

// are changed infrequently



#pragma once


#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers

#include <stdio.h>

#include <tchar.h>

#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit


#include <windows.h>

#include <atlbase.h>

#include <iostream>


using namespace std;  //Use the standard C++ libraries for text output.

#import "sldworks.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids  //the SOLIDWORKS type library

#import "swconst.tlb"  raw_interfaces_only, raw_native_types, no_namespace, named_guids  //the SOLIDWORKS constant type library


// TODO: reference additional headers your program requires here


Back to top


// stdafx.cpp : source file that includes just the standard includes

// AddMates.pch will be the pre-compiled header

// stdafx.obj will contain the pre-compiled type information


#include "stdafx.h"


// TODO: reference any additional headers you need in STDAFX.H

// and not in this file


Back to top

Provide feedback on this topic

SOLIDWORKS welcomes your feedback concerning the presentation, accuracy, and thoroughness of the documentation. Use the form below to send your comments and suggestions about this topic directly to our documentation team. The documentation team cannot answer technical support questions. Click here for information about technical support.

* Required

Subject:   Feedback on Help Topics
Page:   Add Component and Mate Example (C++ COM)
*   I acknowledge I have read and I hereby accept the privacy policy under which my Personal Data will be used by Dassault Systèmes

Print Topic

Select the scope of content to print:


We have detected you are using a browser version older than Internet Explorer 7. For optimized display, we suggest upgrading your browser to Internet Explorer 7 or newer.

 Never show this message again

Web Help Content Version: API Help (English only) 2016 SP05

To disable Web help from within SOLIDWORKS and use local help instead, click Help > Use SOLIDWORKS Web Help.

To report problems encountered with the Web help interface and search, contact your local support representative. To provide feedback on individual help topics, use the “Feedback on this topic” link on the individual topic page.