OpenCASCADE Color Scale

OpenCASCADE Color Scale

[email protected]

Abstract. The color scale is a specialized label object that displays a color map and an accompanying numerical scale for color mapped or contour data plots. As the geometry modeling kernel of SALOME, OpenCASCADE provides the color scale function. The paper focus on the usage of color scale in OpenCASCADE.

Key Words. OpenCASCADE, Color Scale, 应力云图, 颜色映射表

1. Introduction

应力云图是一种应用广泛的标量场可视化方法,也经常用于表达矢量场或张量场的一个分量。云图在颜色与标量数据之间建立某种确定的映射关系,在计算机屏幕上绘制一个颜色离散变化的图像来显示科学计算结果。云图将标量场定义域内的数据值映射成不同的颜色,从而通过颜色变化来反映数据场中数据的变化规律。

很多数值分析软件后处理的结果都有绘制云图的功能。如下图所示为Abaqus软件产生的云图:

Figure 1.1 A Colored Stress Patterns by Abaqus

OpenCASCADE作为SALOME开源数值分析软件的几何造型内核,也提供了云图可视化的功能。本文主要介绍如何使用OpenCASCADE来显示模型的应力云图中的颜色映射表(Color Scale)。

2. Color Scale

云图绘制依赖于颜色集合与标量场数值集合之间的一一映射,即颜色映射表(Color Scale)。颜色映射表为区域填充时建立数值与颜色的映射关系。如下图所示:

Figure 2.1 Color Scale

作为分析对比参照标准,用户可以根据颜色线性表对应的数值范围,来判断某区域内数值分布规律。颜色线性表不仅应用于云图绘制,也应用于其他计算可视化算法中。

颜色线性表可以定义成不同的形式,多以对比鲜明的色彩作为线性表段颜色,在两个对比色之间采用过渡颜色。

在OpenCASCADE中颜色映射表的绘制是由Viewer来实现的。其Tcl命令为vcolorscale,如下所示:

Figure 2.2 Color Scale Tcl Command: vcolorscale

默认的颜色映射表的显示效果如下图所示:

Figure 2.3 Color Scale in Draw Test Harness

3. Tcl Test

OpenCASCADE基于Tcl/Tk的Draw Test Harness环境很方便测试一些想法。现在在Draw Test Harness中来显示一个完整的云图,如下图所示:

Figure 3.1 Color Scale in Draw Test Harness

实现上图的Tcl脚本代码如下所示:

#
#    Copyright (c) 2014 eryar All Rights Reserved.
#
#        File    : colorscale.tcl
#        Author  : [email protected]
#        Date    : 2014-09-20 18:10
#        Version : 1.0v
#
#    Description : Demonstrate the usage of OpenCASCADE color scale.
#
pload ALL

meshfromstl m data/stl/head.stl

meshcolors m nodaltex 0

# show the color sacle.
vcolorscale

vfit

首先加载所需要的所有模块,再从head.stl中加载网格模型;设置网格顶点颜色后就用vcolorscale命令打开发颜色映射表。

4.Code Analysis

根据Tcl命令找到对应的C++实现代码如下所示:

//=============================================================================
//function : VColorScale
//purpose  : representation color scale
//=============================================================================
#include <V3d_ColorScale.hxx>

static int VColorScale (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
{
  if ( argc != 1 && argc != 4 && argc != 5 && argc != 6 && argc != 8 )
  {
    di << "Usage : " << argv[0] << " [RangeMin = 0 RangeMax = 100 Intervals = 10 HeightFont = 16 Position = Right X = 0 Y = 0]  " << "\n";
    return 1;
  }

  Handle(AIS_InteractiveContext) aContext = ViewerTest::GetAISContext();
  if(aContext.IsNull()) {
    di << argv[0] << " ERROR : use ‘vinit‘ command before " << "\n";
    return -1;
  }

  Standard_Real minRange = 0. , maxRange = 100. ;

  Standard_Integer numIntervals = 10 ;
  Standard_Integer textHeight = 16;
  Aspect_TypeOfColorScalePosition position = Aspect_TOCSP_RIGHT;
  Standard_Real X = 0., Y = 0. ;

  if ( argc < 9 )
  {
     if( argc > 3 )
     {
       minRange = Draw::Atof( argv[1] );
       maxRange = Draw::Atof( argv[2] );
       numIntervals = Draw::Atoi( argv[3] );
     }
     if ( argc > 4 )
       textHeight = Draw::Atoi( argv[4] );
     if ( argc > 5 )
       position = (Aspect_TypeOfColorScalePosition)Draw::Atoi( argv[5] );
     if ( argc > 7 )
     {
       X = Draw::Atof( argv[6] );
       Y = Draw::Atof( argv[7] );
     }
  }
  Handle(V3d_View) curView = ViewerTest::CurrentView( );
  if ( curView.IsNull( ) )
    return 1;
  Handle(Aspect_ColorScale) aCSV = curView->ColorScale( );
  Handle(V3d_ColorScale) aCS = ( Handle( V3d_ColorScale )::DownCast( aCSV ) );
  if( ! aCS.IsNull( ) )
  {
    aCS->SetPosition( X , Y );
    aCS->SetHeight( 0.95) ;
    aCS->SetTextHeight( textHeight );
    aCS->SetRange( minRange , maxRange );
    aCS->SetNumberOfIntervals( numIntervals );
    aCS->SetLabelPosition( position );
    if( !curView->ColorScaleIsDisplayed() )
      curView->ColorScaleDisplay( );
  }
  return 0;
}

由上述代码可知,颜色映射表主要是设置当前View中的Aspect_ColorScale。显示颜色映射表主要是由类V3d_ColorScale实现。取得当前视图的颜色表对象后,设置相关参数,即可调用视图的ColorScaleDisplay()来显示了。

根据上述Draw Test Harness中的实现代码,可以很容易地在自己的程序中实现相关的功能了。

5.Conclusion

OpenCASCADE的视图也提供了显示颜色映射表的功能,通过设置视图的V3d_ColorScale的相关参数,即可显示出颜色映射表了。

6. References

1. 王成恩. 面向科学计算的网格划分与可视化技术. 科学出版社. 2011

PDF Version and Tcl Script: OpenCASCADE Color Scale

时间: 2024-10-14 05:17:13

OpenCASCADE Color Scale的相关文章

[D3] 6. Color Scale

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <script src="../bower_components/underscore/underscore-min.js"></script> <script src="../v

【浅墨Unity3D Shader编程】之七 静谧之秋篇: 表面着色器的写法(二)——自定义光照模式

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://hpw123.net/plus/view.php?aid=183 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 邮箱: [email protected] QQ交流群:330595914 更多文章尽在:http://www.hpw123.net 本文主要讲解了Unity中SurfaceShader的自定义光照模式的写法. 上篇文章中我们已经说到,表面着色器将分为两次讲解,上

R的基本绘图包-plot函数

R的plot 既可以绘制点,也可以绘制直方图,还可以绘制箱线图,感觉的确很智能. > b <- c("P", "P", "P" ,"Q", "Q", "Q") > c <- c("TQ","AQ","CQ","BQ","XQ", "XQ") &g

创建动画和移动相机

1.如何通过鼠标获取网格对象 首先需要把鼠标的起始位置在左上角的屏幕坐标转换为笛卡尔坐标.然后将坐标转为为以Camera为中心点的三维空间坐标.接下来根据摄像头位置和鼠标位置的法向量创建射线对象.最终根据射线对象的intersectObjects函数确认哪个网格被选中. 下面是比较经典的使用方法: function onDocumentMouseMove(event) { if (controls.showRay) { var vector = new THREE.Vector3(( event

Unity---------Particle Effect详情

Effects:效果/特效. Particle System:粒子系统.可用于创建烟雾.气流.火焰.涟漪等效果. 在Unity3D 3.5版本之后退出了新的shuriken粒子系统:   添加组件之后的效果:   其中的Open Editor按钮可以打开粒子编辑器,用于编辑复杂的粒子效果. 由于shuriken粒子系统是模块化的管理方式,所以可以动态的添加模块: 1.初始化模块:此模块是效果组件固有的模块. Duration:粒子发射器,发射粒子的时间.单位为S(秒). Looping:是否开启

CSS3与页面布局学习总结(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)

CSS不像其它高级语言一样支持算术运算.变量.流程控制与面向对象特性,所以CSS样式较多时会引起一些问题,如修改复杂,冗余,某些别的语言很简单的功能实现不了等.而javascript则是一种半面向对象的动态语言,有java的影子,有C的味道,中间有比其它语言多的糟粕,使用预处理办法可以解决这些问题.其中Less[les]与Sass是CSS的预处理技术,而CoffeeScript.TypeScript则是javascript的预处理技术. 一.Less 1.1.概要 Less是一种动态样式语言,L

关于如何通过定义自己的CameraManager来控制视角

最近看了几天PlayerCameraManager的代码,大致看明白了,本着分享的原则,在此分享一些经验. PlayerCameraManager,顾名思义就是管理角色摄像仪与视角的,你可以通过继承的方式,编写自己的PlayerCameraManager,之后在你角色的控制类中指定即可. 下面说一下主要的运行过程: 这里可以参考一下ShooterGame(ShooterPlayerCameraManager),从函数UpdateCamera开始看 void AShooterPlayerCamer

matlab colormap

This table lists the built-in colormaps functions. Colormap Name Color Scale parula jet hsv hot cool spring summer autumn winter gray bone copper pink lines colorcube prism flag white Custom Colormap To create a custom colormap, specify map as a thre

【翻译】A (very) short introduction to R R的简短介绍

[前言] 本文翻译自Paul Torfs & Claudia Brauer的文章A (very) short introduction to R.其中比较简单的地方没有翻译,不好用中文描述的地方也没有翻译. 1. 简介和安装 R语言是一种用于数据计算和图标制作的强大的语言.建议初学者使用集成开发环境RStudio.安装R和RStudio的部分就不写了,网上搜一下就可以了. 2. RStudio界面 左下方是控制台窗口,也叫命令行窗口,可以在>后输入简单的命令,R就会执行你的命令.这个窗口非常