메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어서가장중요한부분이라고도할수있기때문입니다. 1. 새로운메크로생성 새메크로만들기버튺을클릭하여파일을생성합니다. 2. 메크로저장 - Notification.swp 파일생성 - 3. Class 모듈추가 - 삽입메뉴 Class Module 클릭 Class 모듈은 SolidWorks 의개체변수를포함하는개체를만드는데사용됩니다. 이 클래스는객체가메모리에만들어지고 SolidWorks 가종료될때까지유지됩니다. 4. 클래스모듈코드수정 - 변수선언 Option Explicit Public WithEvents swap As Sldworks.Sldworks 5. Swap 변수선택 - 콤보박스를클릭하여 swapp 를선택합니다. -
6. FileOpenNotify2 선택 - 모든알림메시지는 swapp 의선언리스트에나타납니다. - ( 선언 ) 콤보박스에서 FileOpenNotify2 를선택합니다. 7. 알림에대한코드재검토 - 알림처리기에대한코드를소스에추가합니다. Option Explicit Public WithEvents swapp As SldWorks.SldWorks Private Function swapp_fileopennotify2( _ ByVal FileName As String) As Long swapp.sendmsgtouser2 FileName + _ "was just opened in SolidWorks", swmbinformation, swmbok End Function Public Sub MonitorSolidWorks() Set swapp = Application.SldWorks 8. 프로젝트활성화면에있는 notification1 모듈더블클릭 - 코드변경 Option Explicit Public NotifyWrapper As Class1 Sub main() Set NotifyWrapper = New Class1 NotifyWrapper.MonitorSolidWorks
9. 메크로저장 10. 임의의 SolidWorks 파일열기 - 아래와같은메시지박스가나타나는것을볼수있습니다..NetFramework 을이용한 notification 사용하기 1. 새로운 add-in 만들기 - Visual Studio 2008 이상버전부터는 SolidWorks VB Add-in 을활용할수있습니다. - DotNetNotification 파일생성
2. 지역변수 - 솔루션탐색기에있는 SwAddin 파일을더블클릭합니다. - 더블클릭하면중앙에소스코드편집기가나오는것을보실수있습니다. iswapp 변수는 WithEvents 키워드를사용하여선언되었습니다. <Guid("0e27a545-1ecc-4e76-9273-146757529469")> _ <ComVisible(True)> _ <SwAddin( _ Description:="DotNetNotification description", _ Title:="DotNetNotification", _ LoadAtStartup:=True _ )> _ Public Class SwAddin Implements SolidWorks.Interop.swpublished.SwAddin #Region "Local Variables" Dim WithEvents iswapp As SldWorks Dim icmdmgr As ICommandManager Dim addinid As Integer Dim opendocs As Hashtable Dim SwEventPtr As SldWorks Dim ppage As UserPMPage Dim ibmp As BitmapHandler
3. ConnectToSW 함수 - 클래스뷰화면에서 SwAddin 을클릭하면아래와같은화면이나옵니다. - 스크롤을아래로내리다보면 AttachEventHandelers 함수가나옵니다. 더블클릭또는우클릭후정의로이동클릭 4. AttachEventHandlers() 코드보기 - 이하위프로그램코드의첫번째라인은 SolidWorks 응용프로그램개체에 SolidWorks notification 을연결하는함수를호출합니다. AttachSWEvents( ) 를마우스오른쪽클릭후팝업메뉴에서 정의로이동 을누릅니다. #Region "Event Methods" Sub AttachEventHandlers() AttachSWEvents() 'Listen for events on all currently open docs AttachEventsToAllDocuments() 5. AttachSWEvents() 코드보기 - AttachSWEvents() 함수는알림이벤트관련된소스들이첨부되어있습니다. Sub AttachSWEvents() Try AddHandler iswapp.activedocchangenotify, AddressOf Me.SldWorks_ActiveDocChangeNotify AddHandler iswapp.documentloadnotify2, AddressOf Me.SldWorks_DocumentLoadNotify2 AddHandler iswapp.filenewnotify2, AddressOf Me.SldWorks_FileNewNotify2 AddHandler iswapp.activemodeldocchangenotify, AddressOf Me.SldWorks_ActiveModelDocChangeNotify AddHandler iswapp.fileopenpostnotify, AddressOf Me.SldWorks_FileOpenPostNotify Catch e As Exception Console.WriteLine(e.Message) End Try
6. Delegate 함수로이동 - AttachSWEnvents 함수내용을보면 AddHandler 라고있습니다. 7. Delegate 함수코드추가 Function SldWorks_FileNewNotify2(ByVal newdoc As Object, _ ByVal doctype As Integer, _ ByVal templatename As String) As Integer AttachEventsToAllDocuments() ' 파일타입에따라메시지가전송되도록코드를추가합니다. ' 문서오픈할때마다 Select Case doctype Case swdocumenttypes_e.swdocpart iswapp.sendmsgtouser2( _ "A new Part Document has been opened", _ swmessageboxicon_e.swmbinformation, _ swmessageboxbtn_e.swmbok) Case swdocumenttypes_e.swdocassembly iswapp.sendmsgtouser2( _ "A new Assembly Document has been opened", _ swmessageboxicon_e.swmbinformation, _ swmessageboxbtn_e.swmbok) Case swdocumenttypes_e.swdocdrawing iswapp.sendmsgtouser2( _ "A new Drawing Document has been opened", _ swmessageboxicon_e.swmbinformation, _ swmessageboxbtn_e.swmbok) End Select End Function 상황에맞게위소스를추가하신다면.netframework 을이용하여메시지를추가할수있을 것입니다. 감사합니다.