Создание Дополнения 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-кривая формируется последовательностью вызовов: открыть (StartNurbsCurve), задать контрольные точки, веса и узлы, закрыть (CloseNurbsCurve).

    StartNurbsCurve(ID: string; Degree: integer; IsPeriodic, IsRational, IsClosed: boolean; KnotCount, CPCount: integer) — начать формирование NURBS-кривой.

    • ID — идентификатор сущности;
    • Degree — степень кривой;
    • IsPeriodic — признак периодичности;
    • IsRational — признак рациональности;
    • IsClosed — признак замкнутости;
    • KnotCount — число узлов;
    • CPCount — число контрольных точек.

    SetNurbsCurveControlPoint(Index: integer; P: TST3DPoint) — задать контрольную точку по индексу.

    • Index — индекс контрольной точки;
    • P — координаты точки.

    SetNurbsCurveWeight(Index: integer; w: STFloat) — задать вес контрольной точки.

    • Index — индекс контрольной точки;
    • w — вес.

    SetNurbsCurveKnot(Index: integer; knot: STFloat) — задать узел.

    • Index — индекс узла;
    • knot — значение узла.

    CloseNurbsCurve() — завершить формирование NURBS-кривой.

    NURBS-кривая

    Пример импорта NURBS-кривой.

    // Параметры NURBS-кривой CAD-системы
    class CADNurbsParam
    {
        public int         Degree;        // степень кривой
        public bool        Periodic;      // периодичность
        public bool        Rational;      // рациональность
        public bool        Closed;        // замкнутость
        public double[]    Knots;         // полный узловой вектор
        public CADPoint[]  ControlPoints; // контрольные точки (вершины CAD)
        public double[]    Weights;       // веса (по одному на контрольную точку)
    }
    
    bool SaveNurbsCurve(string id, CADNurbsParam param)
    {
        sgr.StartNurbsCurve(id, param.Degree, param.Periodic, param.Rational, param.Closed,
                            param.Knots.Length, param.ControlPoints.Length);
        try
        {
            // узловой вектор
            for (int i = 0; i < param.Knots.Length; i++)
                sgr.SetNurbsCurveKnot(i, param.Knots[i]);
    
            // контрольные точки: вес + координаты (приводим к TST3DPoint)
            for (int i = 0; i < param.ControlPoints.Length; i++)
            {
                double w = param.Weights[i];
                TST3DPoint p = ToPoint(param.ControlPoints[i]);
    
                // для рациональной кривой контрольные точки задаются в однородном виде (× вес)
                if (param.Rational)
                {
                    p.X *= w;
                    p.Y *= w;
                    p.Z *= w;
                }
    
                sgr.SetNurbsCurveWeight(i, w);
                sgr.SetNurbsCurveControlPoint(i, p);
            }
        }
        finally
        {
            sgr.CloseNurbsCurve();
        }
        return true;
    }
    
    In this article
    Back to top Generated by DocFX