Проблемы с EquationMgr и SelectionManger Solidworks Api C # - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь понять принципы API SolidWorks, но у меня есть несколько проблем.Вот мой код:

for (var i = 0; i < selMgr.GetSelectedObjectCount(); i++)
        {
            var Face = selMgr.GetSelectedObject(i+1);
            surfaces.Add(Face.GetSurface());
            measure = swModel.Extension.CreateMeasure();

            if (surfaces[i].IsCylinder())
            {

                // Problem # 1

                Console.WriteLine("Cylinder " + i);
                measure.Calculate(surfaces[i]);
                var diameter = measure.Diameter * 1000;
                var length = 1000 * measure.Perimeter  / (measure.Diameter * Math.PI);

                var temp = swApp.OpenDoc6(@"E:\OAK\Locator9.SLDPRT", 1, 1, "", 0, 0);
                var part = component.AddComponent5(@"E:\OAK\Locator9.SLDPRT", 0, "", true, "", 0, 0, 0.3);
                swApp.CloseDoc(@"E:\OAK\Locator9.SLDPRT");

                ModelDoc2 locator = part.GetModelDoc();

                var eqMgr = locator.GetEquationMgr();

                Console.WriteLine("Evaluated diameter " + diameter);
                Console.WriteLine("Evaluated length " + length);

                Console.WriteLine(eqMgr.Equation[1] + "   " + eqMgr.Equation[2]);


                //Problem #2


                eqMgr.set_Equation(1, $@"""D""={diameter}");
                eqMgr.set_Equation(2, $@"""L""={length}");
                eqMgr.EvaluateAll();
                locator.EditRebuild3();
                locator.ForceRebuild3(false);
            }
            else
            {
                // TODO: Handle other type of surface 
            }
        }

1) Я хочу измерить периметр и диаметр выбранной поверхности.Но если возвращаемое значение метода GetSelectedObjectCount() больше 1, measure.Diameter & measure.Perimeter both returns -1.И я понимаю, почему, потому что такая операция невозможна и через пользовательский интерфейс, но могу ли я сделать что-нибудь для решения проблемы?
2) Приведенный выше код не влияет на уравнение вставленного компонента, даже еслиэто пишет это на консоли.Помогите пожалуйста!

1 Ответ

0 голосов
/ 22 мая 2018

1 Для примитивных поверхностей вы можете использовать свойство * Params объекта ISurface для получения необходимой информации.Для цилиндра это будет CylinderParams .Сейчас я не могу найти ссылку, но помню, что читал, что меру не следует использовать для каких-либо точных расчетов, поскольку она не всегда гарантирует точность.Если вы не заботитесь о точности и все еще хотите использовать меру, вы можете вручную управлять множеством выбранных объектов.

2 Я не использовал IEquationMgr, но в целом я пытался держаться подальше от параметризованных свойств в стиле VB, таких как Уравнение , я бы предложил Удалить , а затем Добавить уравнение.

...