Программирование на Python

Автор bot_on_war3, 08.04.19, 22:04:36

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

bot_on_war3

Помогите кто-нибудь с LDefin2D.  Мне надо создать массив для ksTanCircleCircle, а какой? Что писать тут iDynArray = KAPI.ksDynamicArray(kompas_object.GetDynamicArray(LDefin2D.????))

Vitalij Lysanov

Есть пример для прямоугольников
  if example in (6,0):        # Массив неопределенной длины габаритных прямоугольников( Интерфейс ksRectParam )
    arr = Kompas6API5.ksDynamicArray(Kompas.GetDynamicArray(LDefin2D.RECT_ARR))     # Создать динамический массив габаритных прямоугольников
    par = Kompas6API5.ksRectParam(Kompas.GetParamStruct(LDefin2D.ko_RectParam))     # Структура параметров прямоугольника по диагональным точкам
    mathPar = Kompas6API5.ksMathPointParam(Kompas.GetParamStruct(LDefin2D.ko_MathPointParam))     # Структура параметров математической точки

    mathPar.x = 10                  # Параметры правой верхней точки прямоугольника
    mathPar.y = 10
    par.SetpTop (mathPar)
    mathPar.x = 20                  # Параметры левой нижней точки прямоугольника
    mathPar.y = -10
    par.SetpBot (mathPar)

    arr.ksAddArrayItem (-1, par)    # Добавим 1-й прямоугольник, элемент добавляется в конец массива

    mathPar.x = 20                  # Параметры правой верхней точки прямоугольника
    mathPar.y = 50
    par.SetpTop(mathPar)
    mathPar.x = 50                  # Параметры левой нижней точки прямоугольника
    mathPar.y = 10
    par.SetpBot (mathPar)
    arr.ksAddArrayItem (-1, par)    # Добавим 2-й прямоугольник, элемент добавляется в конец массива

    mathPar.x = 20                  # Параметры правой верхней точки прямоугольника
    mathPar.y = 150
    par.SetpTop (mathPar)
    mathPar.x = 50                  # Параметры левой нижней точки прямоугольника
    mathPar.y = 110
    par.SetpBot (mathPar)
    arr.ksAddArrayItem (-1, par)    # Добавим 3-й прямоугольник, элемент добавляется в конец массива

    n = arr.ksGetArrayCount()       # Количество элементов в массиве габаритных прямоугольников

    out = ["n = ", str(n),'\n']
    mathPar1 = Kompas.GetParamStruct(LDefin2D.ko_MathPointParam)    #  Структура параметров математической точки
    mathPar2 = Kompas.GetParamStruct(LDefin2D.ko_MathPointParam)    #  Структура параметров математической точки
    for i in range(n):      # Просмотрим массив габаритных прямоугольников
        arr.ksGetArrayItem (i, par)         # Получить значение элемента массива
        mathPar1 = par.GetpTop()            # Параметры правой верхней точки прямоугольника
        mathPar2 = par.GetpBot()            # Параметры левой нижней точки прямоугольника
        out += ["i = " ,i," x1 = ",mathPar1.x," y1 = ",mathPar1.y," x2 = ",mathPar2.x," y2 = ",mathPar2.y,'\n']
    Kompas.ksMessage( ' '.join( map( unicode, out ) ) )      # Вывод

    # редактируем массив
    mathPar.x = -20                  # Параметры правой верхней точки прямоугольника
    mathPar.y = -50
    par.SetpTop (mathPar)

    mathPar.x = 20                  # Параметры левой нижней точки прямоугольника
    mathPar.y = -10
    par.SetpBot (mathPar)
    arr.ksSetArrayItem (0, par)     # Установить значение 1-го элемента динамического массива габаритных прямоугольников

    mathPar.x = 0                  # Параметры правой верхней точки прямоугольника
    mathPar.y = 0
    par.SetpTop (mathPar)

    mathPar.x = 10                  # Параметры левой нижней точки прямоугольника
    mathPar.y = -20
    par.SetpBot (mathPar)
    arr.ksSetArrayItem (1, par)     # Установить значение 2-го элемента динамического массива габаритных прямоугольников

    mathPar.x = 5
    mathPar.y = 5
    par.SetpTop (mathPar)

    mathPar.x = 25
    mathPar.y = 0
    par.SetpBot (mathPar)
    arr.ksAddArrayItem (-1, par)     # Добавим 4-й прямоугольник, элемент добавляется в конец массива

    n = arr.ksGetArrayCount()               # Количество элементов в массиве габаритных прямоугольников

    out = []
    for i in range(n):               # Просмотрим массив габаритных прямоугольников
        arr.ksGetArrayItem (i, par)     # Получить значение элемента массива
        mathPar1  = par.GetpTop()       # Параметры правой верхней точки прямоугольника
        mathPar2 = par.GetpBot()        # Параметры левой нижней точки прямоугольника
        out += ["i = " ,i," x1 = ",mathPar1.x," y1 = ",mathPar1.y," x2 = ",mathPar2.x," y2 = ",mathPar2.y,'\n']
    Kompas.ksMessage( ' '.join( map( unicode, out ) ) )      # Вывод

    arr.ksDeleteArray()     # Удалить динамический массив габаритных прямоугольников


 

DesignЯR

На C# вот так вот это работает (вся инфа из справки, libTool.pas, ltDefine.pas)
public static void TangentCircleCircle()
        {
            ksDocument2D Doc2D =  (ksDocument2D)Kompas.ActiveDocument2D();
            double xc1 = 100;
            double yc1 = 100;
            double R1 = 50;

            double xc2 = 0;
            double yc2 = 0;
            double R2 = 20;

            Doc2D.ksCircle(xc1, yc1, R1, 1);
            Doc2D.ksCircle(xc2, yc2, R2, 1);
            ksMathematic2D Mat2D = (ksMathematic2D)Kompas.GetMathematic2D();
            ksTAN tan4 =(ksTAN)Kompas.GetParamStruct((short)StructType2DEnum.ko_TAN);
            Mat2D.ksTanCircleCircle(xc1, yc1, R1, xc2, yc2, R2, tan4);
            for (int i = 0; i < 4; i++)
            { Doc2D.ksLineSeg(tan4.x1[i], tan4.y1[i], tan4.x2[i], tan4.y2[i], 2); }
            string outString = "";
            outString = outString + (string.Format("Отрезок 1: А({0};{1})B({2};{3})", tan4.x1[0], tan4.y1[0], tan4.x2[0], tan4.y2[0]))+Environment.NewLine;
            outString = outString + (string.Format("Отрезок 1: А({0};{1})B({2};{3})", tan4.x1[1], tan4.y1[1], tan4.x2[1], tan4.y2[1])) + Environment.NewLine;
            outString = outString + (string.Format("Отрезок 1: А({0};{1})B({2};{3})", tan4.x1[2], tan4.y1[2], tan4.x2[2], tan4.y2[2])) + Environment.NewLine;
            outString = outString + (string.Format("Отрезок 1: А({0};{1})B({2};{3})", tan4.x1[3], tan4.y1[3], tan4.x2[3], tan4.y2[3])) + Environment.NewLine;
            Kompas.ksMessage(outString);

        }