Расчет расстояния между точками в разных эскизах SolidWorks API


Я работаю над скриптом для приложения SolidWorks примерно полтора месяца и хотел бы его улучшить, так как он довольно медленный.

Что делает мой скрипт:
1. Он предлагает пользователю выбрать определенный компонент (используя расширенный выбор).
2. Я создаю коллекцию из этих компонентов.
3. Я создаю коллекцию из эти коллекции, потому что мне нужно, чтобы они перегруппировались в зависимости от их конфигурации.
4. В каждом компоненте есть скетч с одним sketchPoint. Мне нужно рассчитать расстояние между этой точкой и началом заданной точки в 3D-эскизе. Поэтому я переношу прикрепленный к моему компоненту SketchPoint в свой 3Dsketch, вычисляю, а затем удаляю его.
5. Я делаю это для каждого компонента (60++)

Трудоемкая часть — это та, где я должен отредактировать свой 3DSketch, внести в него одну точку, закрыть издание, рассчитать расстояние, отредактировать, удалить, снова закрыть.

В настоящее время я использую более ориентированный объектный подход, поэтому больше не собираю коллекции, но моя проблема остается. Мне было интересно, может ли IMath быть полезным, так как я видел это: http://help.solidworks.com/2014/english/api/sldworksapi/Transform_Sketch_to_Model_Example_VB.htm
но, похоже, работает правильно.

А, и я знаю об инструменте измерения, но он не будет работать, так как мне нужно отрицательное значение, если мой sketchPoint находится «позади» моего источника.

Спасибо :)


person Vincent Audet    schedule 13.07.2015    source источник


Ответы (1)


Ну, я задал тот же вопрос на форуме SolidWorks, и кто-то дал мне ответ, вот он:

Dim myComp As Component2
Dim fSketch As Feature
Dim swSketch As Sketch
Dim vSketchPts As Variant
Dim swSketchPt As SketchPoint
Dim p(2) as Double
Dim mPt as MathPoint
Dim vPt as Variant
Dim myUtil as Mathutility

Set myUtil = swApp.GetMathUtility
Set fSketch = myComp.FeatureByName("mySketchName")
Set swSketch = fSketch.GetSpecificFeature2
vSketchPts = swSketch.GetSketchPoints2
Set swSketchPt = vSketchPts(0)

p(0)=swSketchPt.X
p(1)=swSketchPt.Y
p(2)=0.0
vPt = p
Set mPt = myUtil.CreatePoint(vPt)


Dim mthTrans As MathTransform

Set mthTrans = swSketch.ModelToSketchTransform
Set mPt= mPt.MultiplyTransform(mthTrans.Inverse)
Set mthTrans = swIRBoxComp.Transform2
Set mPt= mPt.MultiplyTransform(mthTrans)
vPt = mPt.ArrayData ' This will contain the XYZ coordinates of the point in the coordinate system of the 3D sketch

Все кредиты принадлежат Саймону Тернеру https://forum.solidworks.com/people/1-KQHM1

person Vincent Audet    schedule 13.07.2015
comment
Если этот код работает для вас, пожалуйста, проверьте этот ответ :) - person Amen Jlili; 14.07.2015