Создание Дополнения CAM-системы
  • Создание Дополнения CAM-системы
Search Results for

    Show / Hide Table of Contents
    • Creating a CAM-system Add-in
    • Введение
      • Глоссарий
      • Требования
    • Устройство Панели инструментов
      • Описание компонентов
        • Мастер дополнений
        • Файлы дистрибуции
        • Транслятор
        • Файл XML дополнения
        • Файл CAMInfo.ini
        • Утилита CheckLockToolbar
        • Панель инструментов
      • Сценарии взаимодействия
        • Установка Дополнения
        • Удаление Дополнения
        • Импорт из CAD-системы в CAM-систему
        • Импорт CAD-файла в CAM-систему
    • Импорт геометрии в CAM
      • Структура CAD-модели
      • Интерфейсы импорта
      • Подключение STGeomFile.dll
      • Формирование файла SGF
      • Структуры данных SGF
      • Работа со сборкой
      • Работа с деталью
      • Кривые и точки
        • Точка и аналитические кривые
          • 3D-точка
          • Система координат
          • Отрезок
          • Окружность
          • Дуга окружности
          • Эллипс
          • Дуга эллипса
          • Коническая спираль
          • NURBS-кривая
          • Составная кривая
        • Производные кривые
          • Кривая на поверхности
          • Обрезанная кривая
          • Инвертированная кривая
          • Кривая пересечения
          • Граница скругления
        • Параметризация кривых
      • Грань (обрезанная поверхность)
      • Поверхности
        • Аналитические поверхности
          • Плоскость
          • Цилиндр
          • Конус
          • Сфера
          • Тор
          • NURBS-поверхность
          • Полигональная сетка
        • Производные поверхности
          • Поверхность вращения
          • Поверхность выдавливания
          • Транспонированная UV-поверхность
          • Поверхность скругления
          • Эквидистантная поверхность
        • Параметризация поверхностей
      • PMI (Product Manufacturing Information)
        • IPMIGeomThread
      • Устаревшие и неиспользуемые методы

    NURBS-поверхность

    NURBS-поверхность формируется последовательностью вызовов: открыть (StartNurbsSurface), задать узлы по U и V, контрольные точки и веса в сетке i×j, закрыть (CloseNurbsSurface или CloseNurbsSurfaceB).

    StartNurbsSurface(ID: string; K1, K2, UDegree, VDegree: integer; UClosed, VClosed, UPeriodic, VPeriodic, Rational: boolean) — начать формирование NURBS-поверхности.

    • ID — идентификатор сущности;
    • K1 — показатель числа контрольных точек по U: K1 = UKnotCount − UDegree − 2;
    • K2 — показатель числа контрольных точек по V: K2 = VKnotCount − VDegree − 2;
    • UDegree, VDegree — степени по U и V;
    • UClosed, VClosed — признаки замкнутости по U и V;
    • UPeriodic, VPeriodic — признаки периодичности по U и V;
    • Rational — признак рациональности.

    SetNurbsSurfaceUKnot(i: integer; Value: STFloat) — задать U-узел.

    • i — номер узла;
    • Value — значение узла.

    SetNurbsSurfaceVKnot(i: integer; Value: STFloat) — задать V-узел.

    • i — номер узла;
    • Value — значение узла.

    SetNurbsSurfaceControlPoint(i, j: integer; P: TST3DPoint) — задать контрольную точку в сетке.

    • i, j — позиция контрольной точки в сетке;
    • P — координаты точки.

    SetNurbsSurfaceWeight(i, j: integer; Value: STFloat) — задать вес контрольной точки.

    • i, j — позиция контрольной точки в сетке;
    • Value — вес.

    CloseNurbsSurface() — завершить формирование поверхности.

    CloseNurbsSurfaceB(UMin, UMax, VMin, VMax: STFloat) — завершить формирование с явным заданием диапазонов параметров.

    • UMin, UMax — границы параметра по U;
    • VMin, VMax — границы параметра по V.

    NURBS-поверхность

    Пример импорта NURBS-поверхности.

    // Параметры NURBS-поверхности CAD-системы
    class CADNurbsSurfParam
    {
        public int         UDegree, VDegree;      // степени по U и V
        public bool        UClosed, VClosed;      // замкнутость по U и V
        public bool        UPeriodic, VPeriodic;  // периодичность по U и V
        public bool        Rational;              // рациональность
        public double[]    UKnots, VKnots;        // полные узловые векторы по U и V
        public CADPoint[,] ControlPoints;         // сетка контрольных точек
        public double[,]   Weights;               // веса (по одному на контрольную точку)
    }
    
    bool SaveNurbsSurface(string id, CADNurbsSurfParam param)
    {
        // показатели числа контрольных точек: K = KnotCount - Degree - 2
        int k1 = param.UKnots.Length - param.UDegree - 2;
        int k2 = param.VKnots.Length - param.VDegree - 2;
    
        sgr.StartNurbsSurface(id, k1, k2, param.UDegree, param.VDegree,
                              param.UClosed, param.VClosed, param.UPeriodic, param.VPeriodic, param.Rational);
        try
        {
            // узловые векторы по U и V
            for (int i = 0; i < param.UKnots.Length; i++)
                sgr.SetNurbsSurfaceUKnot(i, param.UKnots[i]);
            for (int i = 0; i < param.VKnots.Length; i++)
                sgr.SetNurbsSurfaceVKnot(i, param.VKnots[i]);
    
            // контрольные точки и веса в сетке (k1+1) × (k2+1)
            for (int i = 0; i <= k1; i++)
                for (int j = 0; j <= k2; j++)
                {
                    double w = param.Weights[i, j];
                    TST3DPoint p = ToPoint(param.ControlPoints[i, j]);
    
                    // для рациональной поверхности — в однородном виде (× вес)
                    if (param.Rational)
                    {
                        p.X *= w;
                        p.Y *= w;
                        p.Z *= w;
                    }
    
                    sgr.SetNurbsSurfaceWeight(i, j, w);
                    sgr.SetNurbsSurfaceControlPoint(i, j, p);
                }
        }
        finally
        {
            sgr.CloseNurbsSurface();
        }
        return true;
    }
    
    In this article
    Back to top Generated by DocFX