Перейти к публикации

Вставка детали в сборку


andreymr

Рекомендованные сообщения

Добрый день всем. Нужна помощь гуру по API SolidWorks. :surrender:

Пишу дополнение для SW (в виде DLL), встала задача реализовать вставку в сборку детали с предпросмотром через API.

Нужно реализовать что-то типа стандартной вставки ("Вставить компоненты"), чтобы полупрозрачный эскиз детали таскался на курсоре, пока пользователь не кликнет в нужном месте. Просто вставку без предпросмотра я реализовал. Но вот с предпросмотром...

Буду рад, если кто-то подскажет хотя бы примерные команды API для этого дела.

Или хотя бы примерно как это можно реализовать.

Ссылка на сообщение
Поделиться на других сайтах


На вскидку (допускаю, что вскидка может быть не верной), отслеживать положение курсора и использоватьследующий пример из справки:

Rotate Assembly Component on Axis Example (VB)

This example shows how to rotate an assembly component about an assembly axis using DragOperator::Drag.

'------------------------------------------------------------------



' 



' Problem:



'	   This code shows how to use the MathUtility object



'	   to directly create a transformation matrix (object)



'	   that represents rotation about a point and an axis,



'	   without having to know details of the OpenGL transformations.



'



' Preconditions:



'	   (1) Assembly is open and fully resolved.



'	   (2) Assembly component is selected.



'



' Postconditions: Selected component is rotated 90° about assembly X axis.



'



'------------------------------------------------------------------



 



Option Explicit



 



Const PI				As Double = 3.14159



Const RadPerDeg		 As Double = PI / 180#



'   DragOperator::TransformType



'	   Translation	 0



'	   Transform is translation only



'



'	   Axial rotation  1



'	   Transform is rotation only



'



'	   General		 2



'	   Transform can be translation or rotation or both



'   DragOperator::DragMode



'	   Minimum Move	0



'	   Move smallest number of geometries



'



'	   Maximum Move	1



'	   Move geometries rigidly if possible



'



'	   Relaxation	  2



'	   Solve geometries using relaxation



Sub main()



 



	Dim swApp				   As SldWorks.SldWorks



	Dim swModel				 As SldWorks.ModelDoc2



	Dim swAssy				  As SldWorks.AssemblyDoc



	Dim swDragOp				As SldWorks.DragOperator



	Dim swSelMgr				As SldWorks.SelectionMgr



	Dim swComp				  As SldWorks.Component2



	Dim swXform				 As SldWorks.MathTransform



	Dim swMathUtil			  As SldWorks.MathUtility



	Dim swOriginPt			  As SldWorks.MathPoint



	Dim swX_Axis				As SldWorks.MathVector



	Dim nPts(2)				 As Double



	Dim vData				   As Variant



	Dim nNow					As Single



	Dim i					   As Long



	Dim bRet					As Boolean



	



	



	Set swApp = CreateObject("SldWorks.Application")



	Set swModel = swApp.ActiveDoc



	Set swAssy = swModel



	Set swDragOp = swAssy.GetDragOperator



	Set swSelMgr = swModel.SelectionManager



	Set swComp = swSelMgr.GetSelectedObjectsComponent2(1)



	Set swMathUtil = swApp.GetMathUtility



	



	nPts(0) = 0#



	nPts(1) = 0#



	nPts(2) = 0#



	vData = nPts



	Set swOriginPt = swMathUtil.CreatePoint(vData)



	



	nPts(0) = 1#



	nPts(1) = 0#



	nPts(2) = 0#



	vData = nPts



	Set swX_Axis = swMathUtil.CreateVector(vData)



	' This is an incremental rotation,



	' so angle is always the same



	Set swXform = swMathUtil.CreateTransformRotateAxis( _



						swOriginPt, swX_Axis, 1# * RadPerDeg)



	



	



	bRet = swDragOp.AddComponent(swComp, False)



	Debug.Assert bRet



	



	swDragOp.CollisionDetectionEnabled = False



	swDragOp.DynamicClearanceEnabled = False



	



	' Axial rotation



	swDragOp.TransformType = 1



	



	' Solve by relaxation



	swDragOp.DragMode = 2



	



	bRet = swDragOp.BeginDrag



	Debug.Assert bRet



	For i = 0 To 90



		' Returns false if drag fails, for example, because of a collision



		bRet = swDragOp.Drag(swXform)



		



		' Wait for 0.1 secs



		nNow = Timer



		While Timer < nNow + 0.1



			' Process event loop



			DoEvents



		Wend



	Next i



	bRet = swDragOp.EndDrag



	Debug.Assert bRet



End Sub



'------------------------------------------------------------------
Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...