
# 实施步骤
#### 准备工作
1. 开发技能
   - 熟悉C++语言，能够编写C++语言代码。
   
   - 熟悉CAX软件功能。
   
   - 了解渲染、可视化领域知识。
   
   - 了解C++构建相关工具（cmake等）。
    
2. 开发环境
   - Windows 10+
     - Visual Studio 2017+或适用于Visual Studio 2017+的Microsoft Visual生成工具
     
     - CMake 3.7+
      
   
   - Linux：
     - gcc g++ gdb
     
     - CMake 3.7+
      
    
 
#### 操作步骤
可视化SDK无法独立工作，需要嵌入到所需应用中，提供渲染可视化能力，详细可见SDK Doxygen文档。
1. 生成视口。 
   ```
   Handle(Aspect_DisplayConnection) myDisplayConnection = new Aspect_DisplayConnection();
   myGraphicDiver = new OpenGL_GraphicDriver(myDisplayConnection);
   myViewer = new V3d_Viewer(myGraphicDiver);
   myView = myViewer->CreateView();
   ```
   
   
2. 创建上下文。 
   ```
   WId window_handle = (WId)winId();
   Handle(WNT_Window) wind = new WNT_Window((Aspect_Handle)window_handle)
   myView->SetWindow(wind);
   m_context = new AIS_InteractiveContext(m_viewer);
   ```
   
   
3. 设置默认视图属性。 
   ```
   myViewer->SetDefaultLights();
   myViewer->SetLightOn();
   myView->SetBackgroundColor(Quantity_NOC_GRAY60);
   myVieww->MustBeResized();
   myView->TriedronDisplay(Aspect_TOTP_LEFT_LOWER, Quantity_NOC_GOLD,0.08,V3d_ZBUFFER);
   myContext->SetDisplayMode(AIS_Shaded,Standard_True);
   ```
   
   
 
#### 常见问题
**Q：Windows和Linux环境的编译兼容性问题**？
**A：**
- Windows环境
  - 不同的C++编译器（如Visual C++、MinGW等）可能会与SDK的构建系统产生兼容性问题。例如，SDK可能在构建过程中依赖特定的编译器特性或标准库实现，而Visual C++和MinGW在某些C++标准支持程度上有所差异。
  
  - 对于依赖的其他库（如FreeType），其头文件和库文件路径也需要正确地添加到项目的包含路径和库路径环境变量中。如果这些路径设置不正确，在编译过程中会出现头文件无法找到或链接库错误的情况。
  
  
  
  - 一些库可能以动态链接库（DLL）的形式提供，在Windows上运行时，可能会出现DLL缺失或版本不匹配的问题。例如，本SDK依赖于某些系统级的DLL（如OpenGL相关的DLL），如果这些DLL版本过旧或者不存在，可能会导致应用程序在运行时崩溃或出现图形渲染错误。
   
 
- Linux环境
  - 包管理器依赖问题：
    - SDK需要特定版本的运行时g++库支持C++语言特性，但系统默认的版本可能较旧，导致在构建过程中出现语法错误。
    
    - 在Linux不同发行版存在不同，这可能会导致在安装和配置过程中出现混淆。
     
  
  - 权限问题： 对于使用多用户环境的情况，不同用户可能对SDK相关的文件和目录有不同的权限。这可能会导致一些用户能够成功构建和运行应用，而其他用户则因为权限问题无法进行相同的操作。
    
  
  - 库路径和链接问题：
    - Linux系统在链接库文件时，依赖于特定的库路径设置（如LD_LIBRARY_PATH环境变量）。如果这些路径没有正确设置，应用可能无法找到所需的共享库。例如，在运行时应用可能无法加载OCCT库，因为系统无法在指定的库路径中找到该库。
    
    - 与Windows不同，Linux上的库文件命名和版本管理遵循一定的规则（如.so文件的命名和版本号约定）。如果库文件的名称或版本不符合这些规则，或者在链接过程中指定了错误的库名称或版本，会导致链接错误。
     
   
**Q：Windows和Linux环境的性能和优化问题**
**A：**
- Windows环境
  - 图形驱动和硬件加速问题：
    - Windows上的图形驱动程序对于3D图形渲染的性能有很大影响。如果图形驱动没有正确安装或者版本过旧，可能会导致3D查看器的性能下降，如出现画面卡顿、渲染错误等问题。
    
    - 不同的硬件设备（如NVIDIA、AMD或Intel的显卡）在Windows上支持的OpenGL版本可能存在不同。
     
  
  - 系统资源管理问题：
    - 与Linux相比，Windows在某些情况下可能会对文件I/O操作进行更多的缓存和预读处理。这可能会对SDK的数据交换过程产生影响，例如在频繁读取和写入模型文件时，Windows的缓存策略可能会导致数据不一致或者性能下降。
     
   

- Linux环境
  - 图形栈和兼容性问题：
    - Linux系统有多种图形栈（如X11、Wayland等）可供选择。不同的图形栈可能对3D查看器的性能和兼容性产生不同的影响。例如，某些图形库（如OpenGL）在Wayland下的性能可能不如在X11下，或者可能会出现一些兼容性问题，如无法正确显示某些图形元素。
    
    - 不同Linux发行版对于图形驱动的安装和配置方式也有所不同。
     
  
  - 内存和缓存优化问题：
    - Linux系统提供了多种工具和机制来优化内存和缓存的使用。然而，对于SDK来说，可能需要根据具体的应用场景进行适当的调整。例如，在处理大型3D模型时，可能需要调整系统的内存缓存参数（如/proc/sys/vm相关的参数）来提高数据访问速度，但如果调整不当，可能会导致系统性能下降或者内存泄漏。
    
    - 与Windows不同，Linux在文件I/O缓存方面可能有更灵活的配置选项。例如，可以使用不同的缓存策略（如direct I/O、O_DIRECT标志等）来优化模型文件的读取和写入，但这些策略需要根据具体的硬件和应用需求进行选择，否则可能会影响数据交换的性能。
     
   
 
