Создание Дополнения 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
      • Устаревшие и неиспользуемые методы

    Параметризация поверхностей

    SetSurfaceUVDomain(ID: string; SrcUmin, SrcUmax, SrcVmin, SrcVmax, PrxUmin, PrxUmax, PrxVmin, PrxVmax: STFloat; TransposeUV: boolean) — изменить параметризацию уже созданной поверхности по её идентификатору. Новый объект не создаётся: поверхность оборачивается в прокси, который задаёт линейный пересчёт между двумя диапазонами параметров U/V.

    • ID — идентификатор поверхности;
    • SrcUmin, SrcUmax / SrcVmin, SrcVmax — диапазон Src: параметрическое пространство, в котором поверхность «видна» снаружи — в нём заданы координаты контуров грани, ссылающейся на эту поверхность;
    • PrxUmin, PrxUmax / PrxVmin, PrxVmax — диапазон Prx: пространство, в которое внешний параметр пересчитывается для вычисления самой поверхности (для NURBS — диапазон узлов, knot-span);
    • TransposeUV — при true оси U и V меняются местами (например, когда порядок U/V в CAD-системе не совпадает с принятым в SGF — так бывает для тора).

    Зачем это нужно. Некоторые CAD-системы хранят контур (loop) грани в одном параметрическом пространстве, а саму несущую поверхность определяют в другом. Если их не согласовать, CAM-система спроецирует контур не туда, и грань построится неверно. SetSurfaceUVDomain задаёт линейное соответствие Src↔Prx, и контур проецируется правильно.

    Частный случай — продление поверхности: когда параметрический домен грани шире естественного домена поверхности. Так делает импорт из КОМПАС для NURBS-граней: реальный диапазон грани (MathSurface.ParamU/V) выходит за пределы узлового диапазона NURBS. Прокси «растягивает» поверхность на весь домен грани, и контур грани проецируется на NURBS корректно. Если же домен грани целиком лежит внутри узлового (обычная «обрезка внутри NURBS», типичный fillet) — перепараметризация не нужна, иначе она лишь исказит геометрию.

    Пример: выравнивание параметризации поверхности.

    // Выровнять параметризацию грани и несущей NURBS-поверхности (по образцу импорта КОМПАС).
    void AlignSurfaceUVDomain(string surfaceId, CADFace face)
    {
        CADSurface surf = face.Surface;
    
        // Src — UV-пространство, в котором заданы контуры грани
        double srcUmin = face.ParamUMin, srcUmax = face.ParamUMax;
        double srcVmin = face.ParamVMin, srcVmax = face.ParamVMax;
    
        // Prx — естественный домен поверхности (для NURBS — диапазон узлов)
        double prxUmin = surf.KnotUMin, prxUmax = surf.KnotUMax;
        double prxVmin = surf.KnotVMin, prxVmax = surf.KnotVMax;
    
        // Если домен грани целиком внутри домена поверхности — это обычная
        // «обрезка внутри NURBS», перепараметризация только исказит геометрию.
        const double eps = 1e-9;
        bool insideU = srcUmin >= prxUmin - eps && srcUmax <= prxUmax + eps;
        bool insideV = srcVmin >= prxVmin - eps && srcVmax <= prxVmax + eps;
        if (insideU && insideV)
            return;
    
        // Иначе домен грани шире — прокси продлевает поверхность на весь её диапазон
        // (TransposeUV = false: оси U/V не меняем).
        sgr.SetSurfaceUVDomain(surfaceId,
                               srcUmin, srcUmax, srcVmin, srcVmax,
                               prxUmin, prxUmax, prxVmin, prxVmax,
                               false);
    }
    
    In this article
    Back to top Generated by DocFX