当前位置:文档之家› velocity 中文版手册

velocity 中文版手册

velocity 中文版手册
velocity 中文版手册

Velocity用户手册

英文来源: https://www.doczj.com/doc/5116805652.html,/velocity/docs/user-guide.html

关于这个用户手册

Velocity用户手册是帮助页面设计者和内容提供者认识Velocity和其简单而功能强大的脚本语言――Velocity模板语言(VTL)。在手册上的许多例子,都是用Velocity插入动态的内容到网页上,但是所有的VLT例子都能应用到其他的页面和模板中。

感谢使用 Velocity!

Velocity是什么?

Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。

当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web 站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。

Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。Velocity 也可以为Turbine web开发架构提供模板服务(template service)。Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。

Velocity能为我们作什么?

Mud 商店例子

假设你是一家专门出售Mud的在线商店的页面设计人员,让我们暂且称它为“在线MUD商店”。你们的业务很旺,客户下了各种类型和数量的mud订单。他们都是通过输入用户名和密码后才登陆到你的网站,登陆后就允许他们查看订单并购买更多的mud。现在,一种非常流行的mud正在打折销售。另外有一些客户规律性的购买另外一种也在打折但是不是很流行的Bright Red Mud,由于购买的人并不多所以它被安置在页面的边缘。所有用户的信息都是被跟踪并存放于数据库中的,所以某天有一个问题可能会冒出来:为什么不使用velocity来使用户更好的浏览他们感兴趣的商品呢?

Velocity使得web页面的客户化工作非常容易。作为一个web site的设计人员,你希望每个用户登陆时都拥有自己的页面。

你会见了一些公司内的软件工程师,你发现他们每个人都同意客户应该拥有具有个性化的信息。那让我们把软件工程师应该作的事情发在一边,看一看你应该作些什么吧。

你可能在页面内嵌套如下的VTL声明:

Hello $https://www.doczj.com/doc/5116805652.html,!

#foreach( $mud in $mudsOnSpecial )

#if ( $customer.hasPurchased($mud) )

#end

#end

$flogger.getPromo( $mud )

foreach 的详细用法不久就会进行深入描述。重要的是,这短小的脚本能在你的网站上出现。当一个对Bright Red Mud 很感兴趣的顾客登陆的时候,同时Bright Red Mud在热卖中,这时顾客就能显著地看到。假如一个玩Terracotta Mud很久的顾客登陆,Terracotta Mud 的售卖信息就会出现在前面中间。Velocity的适用性是很巨大的,限制的只是你的创造性。

VTL Reference 含有许多其他Velocity元素,这些元素能够共同帮助你,使你的网站更加好。当你越来越熟悉那些原理,你开始释放Velocity的能力。

Velocity模板语言(VTL):说明

VTL意味着提供最简单、最容易并且最整洁的方式合并页面动态内容。VTL使用references来在web site内嵌套动态内容,一个变量就是一种类型的reference。变量是某种类型的refreence,它可以指向java代码中的定义,或者从当前页面内定义的VTL statement得到值。下面是一个VTL statement的例子,它可以被嵌套到HTML代码中:

#set( $a = "Velocity" )

和所有的VTL statement一样,这个statement以#字符开始并且包含一个directive:set。当一个在线用户请求你的页面时,Velocity 模板引擎将查询整个页面以便发现所有#字符,然后确定哪些是VTL statement,哪些不需要VTL作任何事情。

#字符后紧跟一个directive:set时,这个set directive使用一个表达式(使用括号封闭)――一个方程式分配一个值给变量。变量被列在左边,而它的值被列在右边,最后他们之间使用=号分割。

在上面的例子中,变量是$a,而它的值是Velocity。和其他的references一样以$字符开始,而值总是以双引号封闭。Velocity中仅有String可以被赋值给变量。

使用$字符开始的references用于得到什么;使用#字符开始的directives用于作些什么。在上面的例子中,#set是分配一个值给变量。变量$a 在模板中输出 "Velocity"。

Hello Velocity World!

一旦某个变量被分配了一个值,那么你就可以在HTML文件的任何地方引用它。在下面的例子中,一个值被分配给$foo变量,并在其后被引用。

#set( $foo = "Velocity" )

Hello $foo World!

上面的实现结果是在页面上打印“Hello Velocity World!”

为了使包含VTL directives的statement更具有可读性,我们鼓励你在新行开始每个VTL statement,尽管你不是必须这么作。Set的用法将在后面详细描述。

注释

注释是那些描述文本不出现在模板引擎输出里面。注释一个主要用处是提醒自己和解释出现在VTL中的声明,或是其他用途。下面是一个在VLT中的注释例子。

## This is a single line comment.

单行注释以##开始,结束在这行的结尾。如果你要写几行注释,这没有必要写几个单行注释。

多行注释,以#*开始*#结束,可以解决这个问题。

This is text that is outside the multi-line comment.

Online visitors can see it.

#*

Thus begins a multi-line comment. Online visitors won't

see this text because the Velocity Templating Engine will

ignore it.

*#

Here is text outside the multi-line comment; it is visible.

这里有几个例子关于单行和多行注释如何工作。

This text is visible. ## This text is not.

This text is visible.

This text is visible. #* This text, as part of a multi-line comment, is not visible. This text is not visible; it is also part of the

multi-line comment. This text still not visible. *# This text is outside the comment, so it is visible.

## This text is not visible.

这里有第三种类型的注释,VLT注释块,可能用于存放文档的作者名称和版本信息。

#**

This is a VTL comment block and

may be used to store such information

as the document author and versioning

information:

@author

@version 5

*#

References

在VTL中有三种类型的references:变量(variables)、属性(properties)、方法(methods)。作为一个使用VTL的页面设计者,你和你的工程师必须就references的名称达成共识,以便你可以在你的template 中使用它们。

所有的 reference被作为一个String对象处理。如果有一个对象$foo是一个Integer对象,那么Velocity将调用它的toString()方法将这个对象转型为String类型。

变量

非正式变量是由“$”开头,接着是VTL标识符。VLT标识符必须以字母(a..z,A..Z)开头。剩下的部分限于以下几种:

●字母(a..z,A..Z)

●数字(0..9)

●连字符(“-”)

●下划线(“_”)

这里是几个在VTL中有效的变量reference。

$foo

$mudSlinger

$mud-slinger

$mud_slinger

$mudSlinger1

当VLT定义一个变量,例如$foo,变量能或者通过模板中的set 方法,或者通过Java 代码获得值。例如,Java 变量$foo的值是bar ,在这个模板被请求时,在网页上bar会替代所有$foo。选择地,假如包括了下面的声明:

#set( $foo = "bar" )

按照这样的设置,输出就会跟之前的一样。

属性

第二种有趣的VTL reference就是属性,而且属性有一种与众不同的格式。非正式变量是由“$”开头,接着是VTL标识符,再接着就是字符(“.”)和其他的VLT标识符。这里是一些在VLT中有效属性的定义:

$customer.Address

$purchase.Total

在第一个例子中$customer.Address有两种含义。它可以表示:查找hashtable对象customer中以Address为关键字的值;也可以表示调用customer对象的getAddress()方法。当你的页面被请求时,Velocity将确定以上两种方式选用那种,然后返回适当的值。

方法

一个方法就是被定义在java中的一段代码,并且它有完成某些有用工作的能力,例如一个执行计算和判断条件是否成立、满足等。方法是一个由$开始并跟随VTL标识符组成的References,一般还包括一个VTL方法体。一个VTL方法体包括一个VLT标识接着一个左括号(“(”),接着是参数列表,再接着是右括号(“)”)。这里是一些在VTL中有效的方法定义:

$customer.getAddress()

$purchase.getTotal()

$page.setTitle( "My Home Page" )

$person.setAttributes( ["Strange", "Weird", "Excited"] ) 前两个例子$customer.getAddress()和$purchase.getTotal()看起来挺想上面的属性$customer.Address 和 $purchase.Total。如果你觉得他们之间有某种联系的话,那你是正确的。

VTL属性可以作为VTL方法的缩写。$customer.Address属性和使用$customer.getAddress()方法具有相同的效果。如果可能的话使用属性的方式是比较合理的。属性和方法的不同点在于你能够给一个方法指定一个参数列表。

非正式定义能够用下面的方法:

$sun.getPlanets()

$annelid.getDirt()

$album.getPhoto()

我们期待那些方法返回属于太阳系的行星的名称,喂养我们的蚯蚓,或者从相册里面取出一张照片。只有长符号为下面的方法服务。

$sun.getPlanet( ["Earth", "Mars", "Neptune"] )

## Can't pass a parameter list with $sun.Planets

$sisyphus.pushRock()

## Velocity assumes I mean $sisyphus.getRock()

$book.setTitle( "Homage to Catalonia" )

## Can't pass a parameter list

正式reference标记

非正式references用于上述的例子中。但是同样有正式的references,如下面所示:${mudSlinger}

${customer.Address}

${purchase.getTotal()}

在几乎所有场合你都可以使用非正式references,但是在某些场合,只能使用正式reference 才能正确处理。

设想你创建一个句子:$vice 作为句子的名词。目标是为了使某些人选择不同的词,产生下面两种结果之一:"Jack is a pyromaniac." 或者"Jack is a kleptomaniac."。使用非正式定义不太适合用于这种情况。看一下下面的例子:

Jack is a $vicemaniac.

本来变量是$vice现在却变成了$vicemaniac,这样Veloctiy就不知道您到底要什么了。所以,应该使用正是格式书写

Jack is a ${vice}maniac.

现在Velocity就知道reference 是$vice,而不是$vicemaniac。正式定义经常用于模板中refernces 与文本连接在一起的情况。

Quiet reference notation

当Velocity遇到没有定义的reference,通常它会直接输出reference。例如:假如下面的reference 出现在一个VTL模板中:

当 form 最初加载的时候,变量$email 没有值,但你想出现一个空白的文本框设定值为“$email”。使用quiet reference notation可以使Velocity正常显示,你需要用$!email ,代替$email。所以上面的例子,会改成下面:

这样文本框的初始值就不会是email而是空值了。

正式和quiet格式的reference notation也可一同使用,像下面这样:

Getting literal

Velocity使用特殊字符$和#来帮助它工作,所以如果要在template里使用这些特殊字符要格外小心。本节将讨论$字符。

货币字符

这是没有问题的:"I bought a 4 lb. sack of potatoes at the farmer's market for only $2.50!",VTL 中使用$2.5这样的货币标识是没有问题得的,VTL不会将它错认为是一个reference,因为VTL中的reference总是以一个大写或者小写的字母开始。

Escaping valid VTL reference

某些情况使用Velocity可能会觉得很烦恼。逃避特殊符是处理出现在你的模板中VTL特殊符有效方法,就是使用反斜杠(“\”)。

#set( $email = "foo" )

$email

假如Velocity在你的模板中遇到 $email ,它会搜索上下文,得到相应的值。这里的输出是 foo ,因为 $email 被定义了。假如 $email 没有被定义,输出会是 $email 。

设想 $email 被定义了(例如,它的值是 foo ),而且你想输出 $email 。这里有几种方法能达到目的,但是最简单的是使用逃避符。

## The following line defines $email in this template:

#set( $email = "foo" )

$email

\$email

\\$email

\\\$email

将显示为:

foo

$email

\foo

\$email

注意到“\”屏蔽了左边的“$”。屏蔽左边规则,使得\\\$email显示为\\$email。那些例子与 $email没有定义相比较。

$email

\$email

\\$email

\\\$email

将显示为:

$email

\$email

\\$email

\\\$email

注意Velocity处理定义了的references 与没有定义的不一样。这里 set $foo 的值为 gibbous。#set( $foo = "gibbous" )

$moon = $foo

输出会是:$moon = gibbous ,$moon 按照字面上输出因为它没有定义,gibbous 替代 $foo 输出。

避开VTL的 directives 还有其他方法,在 Directives 那章节会更详细描述。

Case substitution

现在你已经对reference比较熟悉了,你可以将他们高效的应用于你的template了。Velocity利用了很多java规范以方便了设计人员的使用。例如:

$foo

$foo.getBar()

## is the same as

$foo.Bar

$data.getUser("jon")

## is the same as

$https://www.doczj.com/doc/5116805652.html,er("jon")

$data.getRequest().getServerName()

## is the same as

$data.Request.ServerName

## is the same as

${data.Request.ServerName}

那些例子说明了同样的references 用法。Velocity 利用Java的 instrospection 和 bean features 解决 reference 的名称对于对象和对象方法的问题。它可以出入你的模板中和求出 references 的值。

Velocity 是模仿Sun微系统中的Bean规范定义的,因而它是很灵活的。然而,它的开发者已经很努力地捕捉和纠正可能出现的错误。当方法 getFoo() 在模板中被 $bar.foo调用时,Velocity首先尝试$getfoo。如果失败,它会继续尝试 $getFoo。同样地,当模板查询 $bar.Foo,Velocity会先尝试 $getFoo(),然后再尝试 $getfoo()。

但是,注意VTL中不会将reference解释为对象的实例变量。例如:$https://www.doczj.com/doc/5116805652.html,将被解释为Foo对象的getName()方法,而不是Foo对象的Name实例变量。

Directives

Reference允许设计者使用动态的内容,而directive使得你可以应用java代码来控制你的显示逻辑,从而达到你所期望的显示效果。

#set

#set标志是用于对一个reference赋值。值会赋给一个变量或者一个属性,而且赋值会在括号里出现:#set( $primate = "monkey" )

#set( $customer.Behavior = $primate )

左边(LHS) 一定是一个变量或者一个属性。右边(RHS)可以是下面中的一个类型:

●变量

●字符串

●属性

●方法

●数字

●数组

这些例子显示上述的每一种类型:

#set( $monkey = $bill ) ## variable reference

#set( $monkey.Friend = "monica" ) ## string literal

#set( $monkey.Blame = $whitehouse.Leak ) ## property reference

#set( $monkey.Plan = $spindoctor.weave($web) ) ## method reference

#set( $monkey.Number = 123 ) ##number literal

#set( $monkey.Say = ["Not", $my, "fault"] ) ## ArrayList 注意:最后一个例子的取值方法为:$monkey.Say.get(0)。

RHS也可以是一个简单的算术表达式:

#set( $value = $foo + 1 )

#set( $value = $bar - 1 )

#set( $value = $foo * $bar )

#set( $value = $foo / $bar )

如果你的RHS是一个null,VTL的处理将比较特殊:它将指向一个已经存在的reference,这对初学者来讲可能是比较费解的。例如:

#set( $result = $query.criteria("name") )

The result of the first query is $result

#set( $result = $query.criteria("address") )

The result of the second query is $result

如果$query.criteria(“name”)返回一个“bill”,而$query.criteria(“address”)返回的是null,则显示的结果如下:

The result of the first query is bill

The result of the second query is bill

这容易使新手糊涂:创建一个#foreach循环,企图想通过一个属性或者一个方法 #set一个reference,然后马上就用 #if 测试。例如:

#set( $criteria = ["name", "address"] )

#foreach( $criterion in $criteria )

#set( $result = $query.criteria($criterion) )

#if( $result )

Query was successful

#end

#end

在上面的例子中,程序将不能智能的根据$result的值决定查询是否成功。在$result被#set后(added to the context),它不能被设置回null(removed from the context)。打印的结果将显示两次查询结果都成功了,但是实际上有一个查询是失败的。

为了解决以上问题我们可以通过预先定义的方式:

#set( $criteria = ["name", "address"] )

#foreach( $criterion in $criteria )

#set( $result = false )

#set( $result = $query.criteria($criterion) )

#if( $result )

Query was successful

#end

#end

不像其他Velocity指示符号,#set 没有一个#end 结束。

String Literals

当你使用#set directive,String literal封闭在一对双引号内。象下面:

#set( $directoryRoot = "www" )

#set( $templateName = "index.vm" )

#set( $template = "$directoryRoot/$templateName" )

$template

上面这段代码的输出结果为:

www/index.vm

但是,当string literal被封装在单引号内时,它将不被解析:

#set( $foo = "bar" )

$foo

#set( $blargh = '$foo' )

$blargh

输出为:

bar $foo

上面这个特性可以通过修改velocity.properties文件的stringliterals.interpolate = false的值来改变上面的特性是否有效。

条件语句

If / ElseIf / Else

当一个web页面被生成时使用Velocity的#if directrive,如果条件成立的话可以在页面内嵌入文字。例如:

#if( $foo )

Velocity!

#end

上例中的条件语句将在以下两种条件下成立:(i)$foo是一个boolean型的变量,且它的值为true;(ii)$foo变量的值不为null。这里需要注意一点:Velocity context仅仅能够包含对象,所以当我们说“boolean”时实际上代表的时一个Boolean对象。即便某个方法返回的是一个boolean值,Velocity也会利用内省机制将它转换为一个Boolean的相同值。

如果条件成立,那么#if和#end之间的内容将被显示。在这个例子中,如果 $foo的值为true,输出为“Velocity!”。相反地,如果 $foo 是一个 null值,或者是一个 false 值,表达式值为 false,没有输出。

#elseif和#else元素可以同#if一同使用。注意:Velocity 模板引擎遇到一个为true值的表达式就会停止。在下面的例子,假设 $foo=15,$bar=6:

#if( $foo < 10 )

Go North

#elseif( $foo == 10 )

Go East

#elseif( $bar == 6 )

Go South

#else

Go West

#end

在这个例子中,$foo比10大,所以在开始的两个比较中都失败。接着 $bar跟6比较是真的所以输出为 GO South。

注意这里的Velocity的数字是作为Integer来比较的――其他类型的对象将使得条件为false,但是与java不同它使用“==”来比较两个值,而且velocity要求等号两边的值类型相同。

关系、逻辑运算符

Velocity中使用等号操作符判断两个变量的关系。这里有个简单例子关于等于号的使用:

#set ($foo = "deoxyribonucleic acid")

#set ($bar = "ribonucleic acid")

#if ($foo == $bar)

In this case it's clear they aren't equivalent. So...

#else

They are not equivalent and this will be the output.

#end

Velocity有AND、OR和NOT逻辑运算符。想得到更多信息,请看VTL Reference Guide。下面的例子是说明AND、OR和NOT逻辑运算符的用法:

## logical AND

#if( $foo && $bar )

This AND that

#end

只有当$foo 和 $bar 都为true,#if 才会得到true值。如果$foo=false ,表达式的值为 false,

$bar 就不会求值。如果 $foo的值为 true ,Velocity模板引擎会检查 $bar的值,如果$bar=true,整个表达式的值为true,输出为“This AND that”。如果$bar=false,整个表达式的值为false,没有输出。

逻辑OR 的工作方式一样,除了只要有一个值为true ,整个表达式的值就为true。考虑一下下面的例子。

## logical OR

#if( $foo || $bar )

This OR That

#end

如果$foo=true,Velocity模板引擎就没有必要查找 $bar,无论 $bar 是true 还是 false ,表达式的值为 true ,输出为“This OR That”。如果$foo=flase,$bar的值就一定要检查,在这个例子中,如果 $bar 同样是false,表达式的值为 false ,没有输出。从另外一个角度看,如果$bar 的值为true ,整个表达式的值为 true ,输出为“This OR That”。

关于逻辑NOT ,只有一个疑问:

##logical NOT

#if( !$foo )

NOT that

#end

如果 $foo=true, !$foo 的值为 false,没有输出。如果$foo=false,!$foo的值为true,输出为“NOT that”。注意不要跟 quiet reference $!foo 混为一谈,那是完全不一样的。

循环

Foreach循环

#foreach 用于循环。例子:

每次循环$allProducts中的一个值都会赋给$product变量。

$allProducts可以是一个Vector、Hashtable或者Array。分配给$product的值是一个java对象,并且可以通过变量被引用。例如:如果$product是一个java的Product类,并且这个产品的名字可以通过调用他的getName()方法得到。

现在我们假设$allProducts是一个Hashtable,如果你希望得到它的key应该像下面这样:

Velocity还特别提供了得到循环次数的方法,以便你可以像下面这样作:

#foreach( $customer in $customerList )

#end

$velocityCount$https://www.doczj.com/doc/5116805652.html,

$velocityCount变量的名字是Velocity默认的名字,你也可以通过修改velocity.properties文件来改变它。默认情况下,计数从“1”开始,但是你可以在velocity.properties设置它是从“1”还是从“0”开始。下面就是文件中的配置:

# Default name of the loop counter

# variable reference.

https://www.doczj.com/doc/5116805652.html, = velocityCount

# Default starting value of the loop

# counter variable reference.

directive.foreach.counter.initial.value = 1

include

#include script element允许模板设计者引入本地文件。被引入文件的内容将不会通过模板引擎被render。为了安全的原因,被引入的本地文件只能在TEMPLATE_ROOT目录下。

#include( "one.txt" )

#include 引用的文件用引号括起来。

如果您需要引入多个文件,可以用逗号分隔就行:

#include( "one.gif","two.txt","three.htm" )

在括号内可以是文件名,但是更多的时候是使用变量的。这用于根据页面提交的需求而输出。这里有一个例子同时有文件名和变量。

#include( "greetings.txt", $seasonalstock )

parse

#parse script element允许模板设计者一个包含VTL的本地文件。Velocity将解析其中的VTL并render模板。

#parse( "me.vm" )

就像#include,#parse接受一个变量而不是一个模板。任何由#parse指向的模板都必须包含在TEMPLATE_ROOT目录下。与#include不同的是,#parse只能指定单个对象。

你可以通过修改velocity.properties文件的parse_direcive.maxdepth的值来控制一个template 可以包含的最多#parse的个数――默认值是10。#parse是可以递归调用的,例如:如果dofoo.vm包含如下行:

Count down.

#set( $count = 8 )

#parse( "parsefoo.vm" )

All done with dofoo.vm!

那么在parsefoo.vm模板中,你可以包含如下VTL:

$count

#set( $count = $count - 1 )

#if( $count > 0 )

#parse( "parsefoo.vm" )

#else

All done with parsefoo.vm!

#end

在显示“Count down”后,Velocity通过parsefoo.vm,从8往下数。当计数到了0,它就会显示“All done with parsefoo.vm!”。在这时,Velocity 会返回到dofoo.vm ,输出信息:“All done with dofoo.vm!”。

停止

#stop script element允许模板设计者停止执行模板引擎并返回。把它应用于debug是很有帮助的。#stop

Velocimacros

#macro script element允许模板设计者定义一段可重用的VTL template。Velocimacros广泛用于简单和复杂的行列。Velocimacros的出现是为了减少编码和极小化排版错误,对Velocimacros的概念提供一个介绍。

#macro( d )

#end

在上面的例子中Velocimacro被定义为d,然后你就可以在任何VTL directive中以如下方式调用它:#d()

当你的template被调用时,Velocity将用替换为#d()。

每个Velocimacro可以拥有任意数量的参数――甚至0个参数,虽然定义时可以随意设置参数数量,但是调用这个Velocimacro时必须指定正确的参数。下面是一个拥有两个参数的Velocimacro,一个参数是color另一个参数是array:

#macro( tablerows $color $somelist )

#foreach( $something in $somelist )

$something

#end

#end

Velocimacro在这个例子的定义,tablerows,有两个元素。第一个是替换 $color ,第二个是替换$somelist。

任何东西都可以通过Velocimacro加入到VTL模板中。tablerows Velocimacro 是一个foreach 标识。这里有两个#end标识在#tablerows Velocimacro 定义里面。第一个是属于 #foreach,第二个是属于Velocimacro定义的。

#set( $greatlakes = ["Superior","Michigan","Huron","Erie","Ontario"] ) #set( $color = "blue" )

#tablerows( $color $greatlakes )

注意到$greatlakes 替代 $somelist。当#tablerows Velocimacro被调用时,就会产生下面的输出:

Superior
Michigan
Huron
Erie
Ontario

Velocimacros可以在Velocity模板内实现行内定义(inline),也就意味着同一个web site内的其他Velocity模板不可以获得Velocimacros的定义。定义一个可以被所有模板共享的Velocimacro显然是有很多好处的:它减少了在一大堆模板中重复定义的数量、节省了工作时间、减少了出错的几率、保证了单点修改。

上面定义的#tablerows( $color $list )Velocimacro被定义在一个Velocimacros模板库(在velocity.properties中定义)里,所以这个macro可以在任何规范的模板中被调用。它可以被多次应用并且可以应用于不同的目的。例如下面的调用:

#set( $parts = ["volva","stipe","annulus","gills","pileus"] )

#set( $cellbgcol = "#CC00FF" )

#tablerows( $cellbgcol $parts )

当为mushroom.vm实现一个请求时,Velocity会在模板库中找到#tablerows Velocimacro(定义在velocity.properties文件),产生以下输出:

volva
stipe
annulus
gills
pileus

Velocimacro arguments

Velocimacro可以使用以下任何元素作为参数:

●Reference:任何以$开头的reference

●String literal:

●Number literal:

●IntegerRange:[1….3]或者[$foo….$bar]

●对象数组:[“a”,”b”,”c”]

●boolean值:true、false

当将一个reference作为参数传递给Velocimacro时,请注意reference作为参数时是以名字的形式传递的。这就意味着参数的值在每次Velocimacro内执行时才会被产生。这个特性使得你可以将一个方法调用作为参数传递给Velocimacro,而每次Velocimacro执行时都是通过这个方法调用产生不同的值来执行的。例如:

#macro( callme $a )

$a $a $a

#end

#callme( $foo.bar() )

执行的结果是:reference $foo的bar()方法被执行了三次。

在第一次扫描中,出现惊人的作用。但是当你考虑到Velocimacro的最原始动机:消除剪切、粘贴、复制,简单地使用VTL使它更灵活。它允许你对传递对象到Velocimacro,例如一个产生重复序列颜色,着色表格的行的对象。

如果你不需要这样的特性可以通过以下方法:

#set( $myval = $foo.bar() )

#callme( $myval )

Velocimacro properties

Velocity.properties文件中的某几行能够使Velocimacros的实现更加灵活。注意更多的内容可以看Developer Guide。

Velocity.properties文件中的velocimacro.libraary:一个以逗号分隔的模板库列表。默认情况下,velocity查找唯一的一个库:VM_global_library.vm。你可以通过配置这个属性来指定自己的模板库。

Velocity.properties文件中的velocimacro.permissions.allow.inline属性:有两个可选的值true 或者false,通过它可以确定Velocimacros是否可以被定义在regular template内。默认值是ture――允许设计者在他们自己的模板中定义Velocimacros。

Velocity.properties文件中的velocimacro.permissions.allow.inline.replace.global属性有两个可选值true和false,这个属性允许使用者确定inline的Velocimacro定义是否可以替代全局Velocimacro定义(比如在velocimacro.library属性中指定的文件内定义的Velocimacro)。默认情况下,此值为false。这样就阻止本地Velocimacro定义覆盖全局定义。

Velocity.properties文件中的velocimacro.permissions.allow.inline.local.scale属性也是有true和false两个可选值,默认是false。它的作用是用于确定你inline定义的Velocimacros是否仅仅在被定义的template内可见。换句话说,如果这个属性设置为true,一个inline定义的Velocimacros 只能在定义它的template内使用。你可以使用此设置实现一个奇妙的VM窍门:a template can define a private implementation of the second VM that will be called by the first VM when invoked by that template. All other templates are unaffected。

Velocity.properties文件中的velocimacro.context.localscope属性有true和false两个可选值,默认值为false。当设置为true时,任何在Velocimacro内通过#set()对context的修改被认为是针对此velocimacro的本地设置,而不会永久的影响内容。

Velocity.properties文件中的velocimacro.library.autoreload属性控制Velocimacro库的自动加载。默认是false。当设置为ture时,对于一个Velocimacro的调用将自动检查原始库是否发生了变化,如果变化将重新加载它。这个属性使得你可以不用重新启动servlet容器而达到重新加载的效果,就像你使用regular模板一样。这个属性可以使用的前提就是resource loader缓存是off状态(file.resource.loader.cache = false)。注意这个属性实际上是针对开发而非产品的。

Velocimacro Trivia

Velocimacro必须被定义在他们被使用之前。也就是说,你的#macro()声明应该出现在使用Velocimacros之前。

特别要注意的是,如果你试图#parse()一个包含#macro()的模板。因为#parse()发生在运行期,但是解析器在parsetiem决定一个看似VM元素的元素是否是一个VM元素,这样#parse()-ing一组VM声明将不按照预期的样子工作。为了得到预期的结果,只需要你简单的使用velocimacro.library使得Velocity 在启动时加载你的VMs。

Escaping VTL directives

VTL directives can be escaped with “\”号,使用方式跟VTL的reference使用逃逸符的格式差不多。

## #include( "a.txt" ) renders as

#include( "a.txt" )

## \#include( "a.txt" ) renders as \#include( "a.txt" )

\#include( "a.txt" )

## \\#include ( "a.txt" ) renders as \

\\#include ( "a.txt" )

在对在一个directive内包含多个script元素的VTL directives使用逃逸符时要特别小心(比如在一个if-else-end statement内)。下面是VTL的if-statement的典型应用:

#if( $jazz )

Vyacheslav Ganelin

#end

如果$jazz是ture,输出将是:

Vyacheslav Ganelin

如果$jazz是false,将没有输出。使用逃逸符将改变输出。考虑一下下面的情况:

\#if( $jazz )

Vyacheslav Ganelin

\#end

现在无论$jazz是true还是false,输出结果都是:

#if($ jazz )

Vyacheslav Ganelin

#end

事实上,由于你使用了逃逸符,$jazz根本就没有被解析为boolean型值。在逃逸符前使用逃逸符是合法的,例如:

\\#if( $jazz )

Vyacheslav Ganelin

\\#end

以上程序的显示结果为:

\ Vyacheslav Ganelin

\

为了方便理解,注意到 #if(arg)当新一行的结束(return)在输出中会省略新行。因此,#if()块是接着第一个‘\’,显示来自在#if()前面的‘\\’。最后的‘\’在跟文本不同的行,因为那里有新的一行在‘Ganelin’后面,所以最后‘\\’在#end 的前面。

但是如果$jazz为false,那么将没有输出。注意:事情也有例外,如果script elements 没有完全的逃避。

\\\#if( $jazz )

Vyacheslave Ganelin

\\#end

在这里#if 已经逃避了,但是#end没有,有太多的#end 的产生解析错误。

VTL:Formatting issues

尽管在此用户手册中VTL通常都开始一个新行,如下所示:

#set( $imperial = ["Munetaka","Koreyasu","Hisakira","Morikune"] )

#foreach( $shogun in $imperial )

$shogun

#end

但是像下面这种写法也是可以的:

Send me #set($foo = ["$10 and ","a cake"])#foreach($a in $foo)$a #end please.

上面的代码可以被改写为:

Send me

#set( $foo = ["$10 and ","a cake"] )

#foreach( $a in $foo )

$a

#end

please.

或者

Send me

#set($foo = ["$10 and ","a cake"])

#foreach ($a in $foo )$a

#end please.

每一种的输出结果将一样。

其他特性和杂项

math

在模板中可以使用Velocity内建的算术函数,如:加、减、乘、除。下面的等式分别是:加、减、乘、除:

#set( $foo = $bar + 3 )

#set( $foo = $bar - 4 )

#set( $foo = $bar * 6 )

#set( $foo = $bar / 2 )

当执行除法时将返回一个Integer类型的结果。而余数你可以使用%来得到:

#set( $foo = $bar % 5 )

在Velocity内使用数学计算公式时,只能使用像-n,-2,-1,0,1,2,n这样的整数,而不能使用其它类型数据。当一个非整型的对象被使用时它将被logged并且将以null作为输出结果。

Range Operator

Range operator可以被用于与#set和#foreach statement联合使用。对于处理一个整型数组它是很有用的,Range operator具有以下构造形式:

[n..m]

m和n都必须是整型,而m是否大于n则无关紧要。例子:

First example:

#foreach( $foo in [1..5] )

$foo

#end

Second example:

#foreach( $bar in [2..-2] )

$bar

#end

Third example:

#set( $arr = [0..1] )

#foreach( $i in $arr )

$i

#end

Fourth example:

[1..3]

产生以下输出:

First example:

1 2 3 4 5

Second example:

2 1 0 -1 -2

Third example:

0 1

Fourth example:

[1..3]

注意:range operator只在#set和#foreach中有效。

网页设计者使用标准尺寸制作表格,但是某时候会没有足够的数据填入表格,就会发现 range 非常有用。

Advanced Issue:Escaping and!

当一个reference被“!”分隔时,并且在它之前有逃逸符时,reference将以特殊的方式处理。注意这种方式与标准的逃逸方式时不同的。对照如下:

#set( $foo = "bar" )

$\!foo

$\!{foo}

$\\!foo

$\\\!foo

这将显示为:

$!foo

$!{foo}

$\!foo

$\\!foo

\ 在 $ 前面跟逃避规则相比较;

\$foo

\$!foo

\$!{foo}

\\$!{foo}

这将显示为:

\$foo

\$!foo

\$!{foo}

\bar

Velocimacro杂记

这章节是一个小型涉及Velocimacros的常见问题解答。这章节会随时间的变化而变化,所以它的作用有时是检验新的信息。

注意:在这章节'Velocimacro'简称为‘VM’。

1.我能用一个标识或者另外的VM 作为一个VM的参数吗?

例如:#center ( #bold( “hello” ) )

答:不可以。一个directive的参数使用另外一个directive是不合法的。

但是,还是有些事情你可以作的。最简单的方式就是使用双引号,所以你可以这样做:

#set($stuff = "#bold('hello')" )

#center( $stuff )

上面的格式也可以缩写为一行:

#center( "#bold( 'hello' )" )

请注意在下面的例子中参数被evaluated在Velocimacro内部,而不是在calling level。例子:

#macro( inner $foo )

inner : $foo

#end

#macro( outer $foo )

#set($bar = "outerlala")

outer : $foo

#end

#set($bar = 'calltimelala')

#outer( "#inner($bar)" )

输出结果为:

Outer : inner : outerlala

因为#inner($bar)的赋值发生在#outer(),所以$bar的值在#outer()赋给的。

记住Veloctiy的特性:参数的传递是By Name的。例如:

#macro( foo $color )

Hi

There

#end

#foo( $bar.rowColor() )

以上代码将导致rowColor()方法两次调用,而不是一次。为了避免这种现象的出现,我们可以按照下面的方式执行:

#set($color = $bar.rowColor())

#foo( $color )

2.我能通过#parse()登记velocimacros吗?

答:目前,Velocimacros必须在第一次被模板调用前被定义。这就意味着你的#macro()声明应该出现在使用Velocimacros之前。

如果你试图#parse()一个包含#macro() directive的模板,这一点是需要牢记的。因为#parse()发生在运行期,但是解析器在parsetiem决定一个看似VM元素的元素是否是一个VM元素,这样#parse()-ing 一组VM声明将不按照预期的样子工作。为了得到预期的结果,只需要你简单的使用velocimacro.library 使得Velocity在启动时加载你的VMs。

3.什么是velocimacro自动加载?

答:velocimacro.library.autoreload是专门为开发而非产品使用的一个属性。此属性的默认值是false。当.resource.loader.cache = false 连同一起设为true ()(是你用的资源器,例如‘file’),当你编译它们的时候Velocity引擎会自动重载那些在你的velocimacro库文件中的修改,所以你不用servlet引擎(或者应用程序)或者其他窍门来使你的velocimacros重载。

这里有一个简单的属性配置。

file.resource.loader.path = templates

file.resource.loader.cache = false

velocimacro.library.autoreload = true

不要在你的作品中出现上述的配置

字符串串联

开发人员最常问的问题是我如何作字符拼接?在java中是使用“+”号来完成的。

在VTL里要想实现同样的功能你只需要将需要联合的reference放到一起就行了。例如:

#set( $size = "Big" )

#set( $name = "Ben" )

The clock is $size$name.

输出结果将是:The clock is BigBen.。更有趣的情况是:

VRay中文使用手册

VRay中文使用手册 9030 目录 1. license 协议 2. VRay的特征 3. VRay软件的安装 4. VRay的渲染参数 5. VRay 灯光 6. VRay 材质 7. VRay 贴图 8. VRay 阴影 9. VRay的分布式渲染 10. Terminology术语 11. Frequently Asked Questions常见问题 VRay的特征 VRay光影追踪渲染器有Basic Package 和 Advanced Package两种包装形式。Basic Package具有适当的功能和较低的价格,适合学生和业余艺术家使用。Advanced Package 包含有几种特殊功能,适用于专业人员使用。 Basic Package的软件包提供的功能特点

·真正的光影追踪反射和折射。(See: VRayMap) ·平滑的反射和折射。(See: VRayMap) ·半透明材质用于创建石蜡、大理石、磨砂玻璃。(See: VRayMap) ·面阴影(柔和阴影)。包括方体和球体发射器。(See: VRayShadow) ·间接照明系统(全局照明系统)。可采取直接光照 (brute force), 和光照贴图方式(HDRi)。(See: Indirect illumination) ·运动模糊。包括类似Monte Carlo 采样方法。(See: Motion blur) ·摄像机景深效果。(See: DOF) ·抗锯齿功能。包括 fixed, simple 2-level 和 adaptive approaches等采样方法。(See: Image sampler) ·散焦功能。(See: Caustics ) ·G-缓冲(RGBA, material/object ID, Z-buffer, velocity etc.) (See: G-Buffer ) Advanced Package软件包提供的功能特点 除包含所有基本功能外,还包括下列功能: ·基于G-缓冲的抗锯齿功能。(See: Image sampler) ·可重复使用光照贴图 (save and load support)。对于fly-through 动画可增加采样。(See: Indirect illumination) ·可重复使用光子贴图 (save and load support)。(See: Caustics) ·带有分析采样的运动模糊。(See: Motion blur ) ·真正支持 HDRI贴图。包含 *.hdr, *.rad 图片装载器,可处理立方体贴图和角贴图贴图坐标。可直接贴图而不会产生变形或切片。

LAMMPS手册-中文版讲解

L A M M P S手册-中文版 讲解 https://www.doczj.com/doc/5116805652.html,work Information Technology Company.2020YEAR

LAMMPS手册-中文解析 一、简介 本部分大至介绍了LAMMPS的一些功能和缺陷。 1.什么是LAMMPS? 2. LAMMPS是一个经典的分子动力学代码,他可以模拟液体中的粒子,固体和汽体的系综。他可以采用不同的力场和边界条件来模拟全原子,聚合物,生物,金属,粒状和粗料化体系。LAMMPS可以计算的体系小至几个粒子,大到上百万甚至是上亿个粒子。 LAMMPS可以在单个处理器的台式机和笔记本本上运行且有较高的计算效率,但是它是专门为并行计算机设计的。他可以在任何一个按装了C++编译器和MPI的平台上运算,这其中当然包括分布式和共享式并行机和Beowulf型的集群机。 LAMMPS是一可以修改和扩展的计算程序,比如,可以加上一些新的力场,原子模型,边界条件和诊断功能等。 通常意义上来讲,LAMMPS是根据不同的边界条件和初始条件对通过短程和长程力相互作用的分子,原子和宏观粒子集合对它们的牛顿运动方程进行积分。高效率计算的LAMMPS通过采用相邻清单来跟踪他们邻近的粒子。这些清单是根据粒子间的短程互拆力的大小进行优化过的,目的是防止局部粒子密度过高。在并行机上,LAMMPS采用的是空间分解技术来分配模拟的区域,把整个模拟空间分成较小的三维小空间,其中每一个小空间可以分配在一个处理器上。各个处理器之间相互通信并且存储每一个小空间边界上的”ghost”原子的信息。LAMMPS(并行情况)在模拟3维矩行盒子并且具有近均一密度的体系时效率最高。 3.L AMMPS的功能 总体功能: 可以串行和并行计算 分布式MPI策略 模拟空间的分解并行机制 开源 高移植性C++语言编写 MPI和单处理器串行FFT的可选性(自定义) 可以方便的为之扩展上新特征和功能 只需一个输入脚本就可运行 有定义和使用变量和方程完备语法规则 在运行过程中循环的控制都有严格的规则

LAMMPS手册中文讲解

LAMMPS手册-中文解析 一、简介 本部分大至介绍了LAMMPS的一些功能和缺陷。 1.什么是LAMMPS? LAMMPS是一个经典的分子动力学代码,他可以模拟液体中的粒子,固体和汽体的系综。他可以采用不同的力场和边界条件来模拟全原子,聚合物,生物,金属,粒状和粗料化体系。LAMMPS可以计算的体系小至几个粒子,大到上百万甚至是上亿个粒子。 LAMMPS可以在单个处理器的台式机和笔记本本上运行且有较高的计算效率,但是它是专门为并行计算机设计的。他可以在任何一个按装了C++编译器和MPI的平台上运算,这其中当然包括分布式和共享式并行机和Beowulf型的集群机。 LAMMPS是一可以修改和扩展的计算程序,比如,可以加上一些新的力场,原子模型,边界条件和诊断功能等。 通常意义上来讲,LAMMPS是根据不同的边界条件和初始条件对通过短程和长程力相互作用的分子,原子和宏观粒子集合对它们的牛顿运动方程进行积分。高效率计算的LAMMPS通过采用相邻清单来跟踪他们邻近的粒子。这些清单是根据粒子间的短程互拆力的大小进行优化过的,目的是防止局部粒子密度过高。在并行机上,LAMMPS采用的是空间分解技术来分配模拟的区域,把整个模拟空间分成较小的三维小空间,其中每一个小空间可以分配在一个处理器上。各个处理器之间相互通信并且存储每一个小空间边界上的”ghost”原子的信息。LAMMPS(并行情况)在模拟3维矩行盒子并且具有近均一密度的体系时效率最高。 2.LAMMPS的功能 总体功能:

可以串行和并行计算 分布式MPI策略 模拟空间的分解并行机制 开源 高移植性C++语言编写 MPI和单处理器串行FFT的可选性(自定义) 可以方便的为之扩展上新特征和功能 只需一个输入脚本就可运行 有定义和使用变量和方程完备语法规则 在运行过程中循环的控制都有严格的规则 只要一个输入脚本试就可以同时实现一个或多个模拟任务粒子和模拟的类型: (atom style命令) 原子 粗粒化粒子 全原子聚合物,有机分子,蛋白质,DNA 联合原子聚合物或有机分子 金属 粒子材料 粗粒化介观模型 延伸球形与椭圆形粒子 点偶极粒子

GOCAD中文手册

GOCAD综合地质与储层建模软件 简易操作手册 美国PST油藏技术公司 PetroSolution Tech,Inc.

目录 第一节 GOCAD综合地质与储层建模软件简介┉┉┉┉┉┉┉┉┉┉┉┉┉┉1 一、GOCAD特点┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉1 二、GOCAD主要模块┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉1 第二节 GOCAD安装、启动操作┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉2 一、GOCAD的安装┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉2 二、GOCAD的启动┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉3 第三节 GOCAD数据加载┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉5 一、井数据加载┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉5 二、层数据加载┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉11 三、断层数据加载┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉11 四、层面、断层面加载┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉12 五、地震数据加载┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉12 第四节 GOCAD构造建模┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉13 一、准备工作┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉13 二、构造建模操作流程┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉14 三、构造建模流程总结┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉40 第五节建立GOCAD三维地质模型网格┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉41 一、新建三维地质模型网格流程┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉41 二、三维地质模型网格流程┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉41 三、三维地质模型网格流程总结┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉47 第六节 GOCAD储层属性建模┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉48 一、建立属性建模新流程┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉48 二、属性建模操作流程┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉48 三、属性建模后期处理┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉66 四、网格粗化┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉74 第七节 GOCAD地质解释和分析┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉78

sph-常用关键字手册

sph-常用关键字手册

1.*CONSTRAINED_GLOBAL 全局约束 Purpose: Define a global boundary constraint plane.定义一个全局平面边界约束 TC Translational Constraint: 平动约束 EQ.1: constrained x translation, EQ.2: constrained y translation, EQ.3: constrained z translation, EQ.4: constrained x and y translations, EQ.5: constrained y and z translations, EQ.6: constrained x and z translations, EQ.7: constrained x, y, and z translations, RC Rotational Constraint: 转动约束 EQ.1: constrained x-rotation, EQ.2: constrained y-rotation, EQ.3: constrained z-rotation, EQ.4: constrained x and y rotations, EQ.5: constrained y and z rotations, EQ.6: constrained z and x rotations, EQ.7: constrained x, y, and z rotations. DIR Direction of normal 正常的方向 EQ.1: global x, EQ.2: global y, EQ.3: global z. X x-offset coordinate x方向偏移坐标 Y y-offset coordinate y方向偏移坐标 Z z-offset coordinate z方向偏移坐标 Remarks: Nodes within a mesh-size-dependent tolerance are constrained on a global plane. This

vr中文手册

VR中文手册 目录 1. VRay的特征 2. VRay的渲染参数 3. VRay 灯光 4. VRay 材质 5. VRay 贴图 6. VRay 阴影 一、VRay的特征 VRay光影追踪渲染器有Basic Package 和Advanced Package两种包装形式。Basic Package具有适当的功能和较低的价格,适合学生和业余艺 术家使用。Advanced Package 包含有几种特殊功能,适用于专业人员使用。 Basic Package的软件包提供的功能特点 ·真正的光影追踪反射和折射。(See: VRayMap) ·平滑的反射和折射。(See: VRayMap) ·半透明材质用于创建石蜡、大理石、磨砂玻璃。(See: VRayMap) ·面阴影(柔和阴影)。包括方体和球体发射器。(See: VRayShadow) ·间接照明系统(全局照明系统)。可采取直接光照(brute force), 和光照贴图方式(HDRi)。(See: Indirect illumination) ·运动模糊。包括类似Monte Carlo 采样方法。(See: Motion blur) ·摄像机景深效果。(See: DOF) ·抗锯齿功能。包括fixed, simple 2-level 和adaptive approaches等采样方法。(See: Image sampler) ·散焦功能。(See: Caustics ) · G-缓冲(RGBA, material/object ID, Z-buffer, velocity etc.) (See: G-Buffer ) Advanced Package软件包提供的功能特点 除包含所有基本功能外,还包括下列功能: ·基于G-缓冲的抗锯齿功能。(See: Image sampler) ·可重复使用光照贴图(save and load support)。对于fly-through 动画可增加采样。(See: Indirect illumination) ·可重复使用光子贴图(save and load support)。(See: Caustics) ·带有分析采样的运动模糊。(See: Motion blur ) ·真正支持HDRI贴图。包含*.hdr, *.rad 图片装载器,可处理立方体贴图和角贴图贴图坐标。可直接贴图而不会产生变形或切片。 ·可产生正确物理照明的自然面光源。(See: VRayLight) ·能够更准确并更快计算的自然材质。(See: VRay material) ·基于TCP/IP协议的分布式渲染。(See: Distributed rendering) ·不同的摄像机镜头:fish-eye, spherical, cylindrical and cubic cameras (See: Camera)

VRay最完整手册

VRay的特征 VRay光影追踪渲染器有Basic Package 和Advanced Package两种包装形式。Basic Package具有适当的功能和较低的价格,适合学生和业余艺术家使用。Advanced Package 包含有几种特殊功能,适用于专业人员使用。 Basic Package的软件包提供的功能特点 ·真正的光影追踪反射和折射。(See: VRayMap) ·平滑的反射和折射。(See: VRayMap) ·半透明材质用于创建石蜡、大理石、磨砂玻璃。(See: VRayMap) ·面阴影(柔和阴影)。包括方体和球体发射器。(See: VRayShadow) ·间接照明系统(全局照明系统)。可采取直接光照(brute force), 和光照贴图方式(HDRi)。(See: Indirect illu mination) ·运动模糊。包括类似Monte Carlo 采样方法。(See: Motion blur) ·摄像机景深效果。(See: DOF) ·抗锯齿功能。包括fixed, simple 2-level 和adaptive approaches等采样方法。(See: Image sampler) ·散焦功能。(See: Caustics ) ·G-缓冲(RGBA, material/object ID, Z-buffer, velocity etc.) (See: G-Buffer ) Advanced Package软件包提供的功能特点 除包含所有基本功能外,还包括下列功能: ·基于G-缓冲的抗锯齿功能。(See: Image sampler) ·可重复使用光照贴图(save and load support)。对于fly-through 动画可增加采样。(See: Indirect illuminati on) ·可重复使用光子贴图(save and load support)。(See: Caustics) ·带有分析采样的运动模糊。(See: Motion blur ) ·真正支持HDRI贴图。包含*.hdr, *.rad 图片装载器,可处理立方体贴图和角贴图贴图坐标。可直接贴图而不会产生变形或切片。 ·可产生正确物理照明的自然面光源。(See: VRayLight) ·能够更准确并更快计算的自然材质。(See: VRay material)

Velocity教程

Velocity教程 关键字: velocity教程 Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。 官方网站:https://www.doczj.com/doc/5116805652.html,/velocity/ Velocity脚本摘要 1、声明:#set ($var=XXX) 左边可以是以下的内容 Variable reference String literal Property reference Method reference Number literal #set ($i=1) ArrayList #set ($arr=["yt1","t2"]) 技持算术运算符 2、注释: 单行## XXX 多行#* xxx xxxx xxxxxxxxxxxx*# References 引用的类型 3、变量Variables 以"$" 开头,第一个字符必须为字母。character followed by a VTL Identifier. (a .. z or A .. Z). 变量可以包含的字符有以下内容: alphabetic (a .. z, A .. Z) numeric (0 .. 9) hyphen ("-") underscore ("_") 4、Properties $Identifier.Identifier $https://www.doczj.com/doc/5116805652.html,

su简单中文使用手册

CWP软件的安装与简单使用手册

CWP软件的安装 一.在LINUX下建立用户CWP,在CWP下建立目录path,将源文件cwp.su.all.37.tar.Z放二.到path目录下,并建立bin文件夹 三.在CWP用户主目录下显示隐藏文件,修改.bash_profile 文件,在已有的export之后另起一行,分别添加 export CWPROOT=/home/CWP/path,再于 PATH=$PATH:$HOME/bin后添加 :/home/CWP/path/bin:/home/CWP 退出保存 四.从终端中分别输入 cd path zcat cwp.su.all.37.tar.Z | tar –xvf- … 待终端中反映完毕,分别输入 cd src make install make xtinstall make mglinstall make utils make xminstall make sfinstall 这期间可能有系统安装所等待的时间,不用急,但凡遇到yes/no,一路y下来即可。四.为了检查是否安装完毕,在终端中输入 Suplane > data.su Suxwigb < data.su & 若出现一个简单的图像,则成功!

CWP软件的简单说明 一、文中涉及的命令全部以小写形式,均可在终端窗口下输入,以次获取自述帮助。先说几个命令:suplane和suxwigb,more。 suplane作用是产生一个简单的零偏移距su文件,suxwigb是一个典型的X—windows 绘制图形工具,如例子: suplane > data.su suxwigb < data.su more < data.su 比较全面的了解它们,请在终端中输入suplane , suxwigb ,more 。 二、关于DEMOS的应用所有DEMOS必须把文件拷到用户根目录下,而后依照readme文件中的执行顺序,在终端中输入文件名。注意目录下的文件变动。 三、在执行DEMOS文件时,如果想清楚了解程序执行过程,请输入 more programname 由于水平有限,这里的谬误很多,希望大家能在偶尔翻看时,多多留心,发现并改正,衷心希望能和大家一起学习。谢谢

AVL用户手册

AVL 3.14 User Primer last update 28 Aug 2004 Mark Drela, MIT Aero & Astro Harold Youngren, Aerocraft, Inc. History AVL (Athena Vortex Lattice) 1.0 was originally written by Harold Youngren circa 1988 for the MIT Athena TODOR aero software collection. A number of modifications have since been added by Mark Drela and Harold Youngren,to the point where only a trace of the original code remains. General Description AVL 3.xx now has a large number of features intended for rapid aircraft configuration analysis. The major features are as follows: Aerodynamic components Lifting surfaces Slender bodies Configuration description Keyword-driven geometry input file Defined sections with linear interpolation Section properties camberline is NACA xxxx, or from airfoil file control deflections parabolic profile drag polar, Re-scaling Scaling, translation, rotation of entire surface or body Duplication of entire surface or body Singularities Horseshoe vortices (surfaces) Source+doublet lines (bodies) Finite-core option Discretization Uniform Sine Cosine Blend Control deflections Via normal-vector tilting Leading edge flaps Trailing edge flaps Hinge lines independent of discretization General freestream description alpha,beta flow angles

velocity中文手册

Velocity用户指南 什么是Velocity? Velocity是基于Java的模板引擎。它允许Web页面开发者引用Java代码中定义的方法。Web设计者可以和Java程序开发者并行开发遵循MVC模式的Web 站点。这意味着,Web设计者可以将精力放在好的Web站点设计上,而Java 程序开发者可以将精力放在编写代码上。Velocity将Java代码从Web页面中分离,使Web站点更具长期可维护性,并提供了一种替代JSP或PHP的方案。 VTL(Velocity Template Language)介绍 VTL提供一种简单、容易和干静的方法将动态内容合并到Web页面。VTL使用引用(references)将动态内容插入到Web页面中。变量是一种引用,可以指向Java代码中的定义内容,或者由Web页面中的VTL语句来获得值。下面是一个可以插入到HTML文档的VTL语句的例子: #set( $a = "Velocity" ) VTL语句以#开头,并包含指令(set)。变量以$开头,用引号引起。引号可以是单引号,也可以是双引号。前者引用具体的String值;后者可以包含Velocity 引用,例如”hello, $name”,$name会用其当前的值替换。上面的例子是将值Velocity赋值给变量a。 当变量被赋值后,就可以在HTML文档的任何地方引用,下面是Hello Velocity World!的例子: #set( $foo = "Velocity" ) Hello $foo World! 注释 VTL支持单行注释(以##开始)和多行注释(包括在#*和*#之间),下面是一个例子: This text is visible. ## This text is not visible. This text is visible. This text is visible. #* This text, as part of a multi-line comment, is not visible. This text is not visible; it is also part of the

Velocity用户手册中文版

Velocity用户手册--中文版 1 关于 Velocity用户指南旨在帮助页面设计者和内容提供者了解Velocity和其简单而又强大的脚本语言(Velocity Template Language (VTL))。本指南中有很多示例展示了用Velocity来讲动态内容嵌入到网站之中,但是所有的VTL examples都同演示用于所有的页面和模版。 感谢选择Velocity! 2 Velocity是什么? Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。 Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。Velocity也可以为Turbine web开发架构提供模板服务(template service)。Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。 3 Velocity能为我们作什么? 3.1 The Mud Store Example 假设你是一家专门出售泥浆(Mud)的在线商店的页面设计人员,让我们暂且称它为“在线MUD商店”。你们的业务很旺,客户下了各种类型和数量的mud 订单。他们都是通过输入用户名和密码后才登陆到你的网站,登陆后就允许他们查看订单并购买更多的mud。现在,一种非常流行的mud正在打折销售。另外有一些客户规律性的购买另外一种也在打折但是不是很流行的Bright Red Mud,由于购买的人并不多所以它被安置在页面的边缘。所有用户的信息都是被跟踪并存放于数据库中的,所以某天有一个问题可能会冒出来:为什么不使用velocity 来使用户更好的浏览他们感兴趣的商品呢? Velocity使得web页面的客户化工作非常容易。作为一个web site的设计人员,你希望每个用户登陆时都拥有自己的页面。 你会见了一些公司内的软件工程师,你发现他们每个人都同意客户应该拥有

LS_DYNA关键字手册范本

各种前处理软件得到的k文件往往不能满足使用要求,或者存在一些错误,这时就要自己修改、添加关键字 下面是自己总结的几条: 0. k文件格式分为标准格式和自由格式(数据之间用逗号隔开)两种,在一个k文件中,两种方式可以并存,但是在一个数据卡中,只能选择一种方式 1. 如果选择标准格式:k文件中除了节点(node)和单元(element)关键字外,通常每一行总共占80个字符长度,每个数据占10个字符长度,修改时千万不要超越这10个字符长度的位置,也不要跑到别的数据的10个字符位置 2. 如果关键字手册里的card介绍中没有提到optional,那么每一行card都不能省略,哪怕它们都是0 3. 为了方便查看10个字符长度,可以用ultraedit软件 4. 每一个关键字必须以*开头,并且必须顶格写 5. 在k文件中$后面的是注释,求解时不考虑

6. 为了查找和发现具体是那一关键字出错,可以使用lspost打开k文件,然后选择view选项查看 其实原理和定义材料曲线类似 可以分三步: 1,先将你的加速度曲线离散成一系列的点,找出这些点的横(时间)纵(加速度)坐标值 定义两个数组,一个用来存放横坐标值;另一个存放纵坐标值 如:*dim,time,,5 time(1)=0,.025,.05,.075,.1 *dim,ACL,,5 ACL(1)=0,1,5,8,9 根据你的曲线复杂程度,可适量增减节点 2,定义和这条曲线相关的ID号,利用上面确定好的数组进行定义如:edcurve,add,1,time,ACL 这里面的1是id号,可根据自己需要选择合适的号码 3,将你定义好的加速度曲线施加到需要的物体上 如:edload,add,fy,,comp,,,,1,1.0 这里的comp是你要施加作用的物体的组件名 注意:应用此命令时,不要再加入别的数组了

CubaseSX中文手册

CubaseSX中文手册:操作窗口简介 发布: 2007-4-20 14:05 | 作者: Cubase | | 来源: Cubase | 06-04-28 15:54:19 | | 查看: 49次 操作窗口简介 Project 窗口 Project 窗口是Cubase SX 的主窗口,这里提供了Project 总的图形化的面貌,在此可以进行定位操作以及大多数的编辑处理。在Project 窗口中分为几个部分,窗口顶部是时间行。每个Project 具有各自单独的Project 窗口。 Inspector 区域:这里提供了有关对Track 的参数设置。 Track 区域:这里列有不同类型的Track。 Event 区域:这是Project 窗口中的Event 显示区域,在此可以对Project 中所有Audio Event 和MI DI Event、Automation Curve 等对象进行查看和编辑操作。Project Cursor:Project 的播放光标。Project Browser 窗口由Project Browser 窗口提供了依据Project 的基本结构,在其列表中,能够使用标准数值编辑的操作方式而对Project 所有Track 中的所有Event 对象进行查看和编辑操作。 Transport 面板 由Transport 面板提供了为Project 全面的Transport 控制操作,如同标准硬件录音机那样的操纵台,此外还可以对Tempo 和Ime Signature 等参数进行设置。这里分为Tempo、Time Signature 和Po sition 显示区域,由Left Locator/Right Locator 框用于设定录音或Cycle 范围的首尾端位置。 Pool 窗口 在该Pool 窗口中列出了当前Project 所属的所有文件,包括Audio 或Video 文件等,这里显示以Audio 文件夹、Trash 文件夹、Video 文件夹等结构方式,并且提供有Audio Clip 以及波型显示等区域。每

CME 中文手册

一. 基本配置 一电动机选项 二霍尔位置传感器类型(Hall Type) 三系统选项 1.工作模式(operating mode) 1)位置模式 输入:1.类比信号(analog)2.数位信号(digital) 3.控制网络(controller area network CAN) 4.函数信号发生器(function generator) 5.Copley 虚拟机(Copley virtual machine)2)速度模式 输入:1. 类比信号2.频宽控制(PWM) 3.函数信号发生器 4.Copley 虚拟机 3)电流模式(略) 四反馈编码器选项(encoder/feedback) 1.电动机反馈(注:确定电动机的反馈类型及来源) 1)primary 信号来自主反馈器/ secondary 来自次反馈器 2)incremental 数位增量反馈 / analog 类比信号反馈 2.位置(负载)反馈 (position)(略) 五伺服电动机设置(ServoTube Setup) 注:当用户在其中选定电动机具体系列和型号时,软件会自动设定电动机及反馈参数

二.具体配置 一电动机及反馈配置(Motor/Feedback) 1. 用户可直接载入现成的配置文件 2. 转动电动机参数 转动惯量(Motor Inertial),磁极数(Number of poles),最大转矩(Peak Torque),连续转矩(Continuous Torque), 速度限制(Velocity Limit),单位制(unit),转矩常数(Torque Constant),反电动势常数 (Back EMF Constant),电阻,电感 3. 线形电动机参数: 质量,最大推力,连续推力... 4. 反馈参数 依照技术说明书填写编码器参数 编码器精度(encoder resolution) 注:如果同时存在两个反馈器,必须确保电动机匝数和位置匝数之比等于电动机编码器匝数和位置编码器匝数之比 ???????????

《Velocity Web应用开发指南中文版》

《V elocity1.4使用指南中文版》中文版 来源https://www.doczj.com/doc/5116805652.html, 声明:转载请保留此页声明 ************************************************************************** 此文档为蓝杰实训学员拓展实训之用. 蓝杰实训不对译文中某些说法可能会对您的系统或开发造成损害负责. 如对您有所帮助,我们不胜荣幸! ************************************************************************* 本文属https://www.doczj.com/doc/5116805652.html,中的Velocity中文系列,本系包含如下文章: 《Velocity Java开发指南中文版》(Developer`s Guide) 《Velocity模板使用指南中文版》(User`s Guide) 《Velocity Web应用开发指南中文版》(Web Application Guide) 《VTL语法参考指南中文版》(VTL Reference) 《DB4O中文系列之起步篇》 ... 更多资料请访问https://www.doczj.com/doc/5116805652.html,/下载. ************************************************************************** 译者:javaFound Mail:javafound@https://www.doczj.com/doc/5116805652.html, https://www.doczj.com/doc/5116805652.html,@https://www.doczj.com/doc/5116805652.html, *************************************************************************

Landmark中文手册(完整版)

第一章建立oracle数据库 思路:oracle数据库的建立是为了在硬盘中开辟空间,为加suvery、断层、井 数据提供基础。 1、Openworks2003 Command Menu(以下简称OW)——project create(图1-1) 图1-1 图1-2 project create——Project name(数据库名):shengcai(图1-2) project create——Cartographic Reference——List——Beijing Causs 21 Measurement system——SPE Preferred Metric 数据空间大小——Medium 参数选取完毕,然后Apply,等几分钟就可产生一个数据库(图1-3、4、5)。

图1-3 图1-4 图1-5

第二章数据加载 一、加载井数据 思路:井数据的加载主要分三个部分:井位的加载、测井曲线的加载,分层数据的加载,其重点在于格式文件的编辑。 1、井位的加载 (1)编辑井位文件:well.dat well name x y depth (1)输入井位: Command Menu—Data—Import—ASCII Well Loader ①输入文件名:file:home/ow2003/well.dat(图1)

图1 (2)编辑格式文件 ASCII Loader ——edit—format(图1) ASCII format edit——format—new(图2) 在数据文件处输入井文件的目录及文件名home/ow2003/well.dat,在格式文件中输入格式文件的要存的目录及文件名/aa.wdl,然后OK(图3),会出现数据well.dat的窗口(图5)。

LAMMPS手册-中文版讲解

LAMMPS手册-中文解析一、简介 本部分大至介绍了LAMMPS的一些功能和缺陷。 1.什么是LAMMPS? LAMMPS是一个经典的分子动力学代码,他可以模拟液体中的粒子,固体和汽体的系综。他可以采用不同的力场和边界条件来模拟全原子,聚合物,生物,金属,粒状和粗料化体系。LAMMPS可以计算的体系小至几个粒子,大到上百万甚至是上亿个粒子。 LAMMPS可以在单个处理器的台式机和笔记本本上运行且有较高的计算效率,但是它是专门为并行计算机设计的。他可以在任何一个按装了C++编译器和MPI 的平台上运算,这其中当然包括分布式和共享式并行机和Beowulf型的集群机。LAMMPS是一可以修改和扩展的计算程序,比如,可以加上一些新的力场,原子模型,边界条件和诊断功能等。 通常意义上来讲,LAMMPS是根据不同的边界条件和初始条件对通过短程和长程力相互作用的分子,原子和宏观粒子集合对它们的牛顿运动方程进行积分。高效率计算的LAMMPS通过采用相邻清单来跟踪他们邻近的粒子。这些清单是根据粒子间的短程互拆力的大小进行优化过的,目的是防止局部粒子密度过高。在并行机上,LAMMPS采用的是空间分解技术来分配模拟的区域,把整个模拟空间分成较小的三维小空间,其中每一个小空间可以分配在一个处理器上。各个处理器之间相互通信并且存储每一个小空间边界上的”ghost”原子的信息。LAMMPS(并行情况)在模拟3维矩行盒子并且具有近均一密度的体系时效率最高。 2.LAMMPS的功能 总体功能: 可以串行和并行计算 分布式MPI策略 模拟空间的分解并行机制 开源 高移植性C++语言编写 MPI和单处理器串行FFT的可选性(自定义) 可以方便的为之扩展上新特征和功能 只需一个输入脚本就可运行 有定义和使用变量和方程完备语法规则 在运行过程中循环的控制都有严格的规则 只要一个输入脚本试就可以同时实现一个或多个模拟任务 粒子和模拟的类型: (atom style命令)原子粗粒化粒子DNA 全原子聚合物,有机分子,蛋白质,联合原子聚合物或有机分子金属粒子材料粗粒化介观模型延伸球形与椭圆形粒子点偶极粒子刚性粒子所有上面的杂化类型力场:)(命令:pair style, bond style, angle style, dihedral style, improper style, kspace style, tabulated.

LAMMPS手册-中文版讲解44941

LAMMPS 手册-中文解析 一、简介 本部分大至介绍了LAMMPS 的一些功能和缺陷。 1.什么是LAMMPS? LAMMPS 是一个经典的分子动力学代码,他可以模拟液体中的粒子,固体和汽体的 系综。他可以采用不同的力场和边界条件来模拟全原子,聚合物,生物,金属,粒状和粗料化体系。LAMMPS 可以计算的体系小至几个粒子,大到上百万甚至是上亿个粒子。 LAMMPS 可以在单个处理器的台式机和笔记本本上运行且有较高的计算效率,但是它是专门为并行计算机设计的。他可以在任何一个按装了C++编译器和MPI的平台上运算,这其中当然包括分布式和共享式并行机和Beowulf 型的集群机。 LAMMPS 是一可以修改和扩展的计算程序,比如,可以加上一些新的力场,原子模型,边界条件和诊断功能等。 通常意义上来讲,LAM M PS 是根据不同的边界条件和初始条件对通过短程和长程力 相互作用的分子,原子和宏观粒子集合对它们的牛顿运动方程进行积分。高效率计算的LAMMPS 通过采用相邻清单来跟踪他们邻近的粒子。这些清单是根据粒子间的短程互拆力的大小进行优化过的,目的是防止局部粒子密度过高。在并行机上,LAMMPS 采用的是空间分解技术来分配模拟的区域,把整个模拟空间分成较小的三维小空间,其中每一个小空间可以分配在一个处理器上。各个处理器之间相互通信并且存储每一个小空间边界上 的”ghost”原子的信息。LAMMPS(并行情况)在模拟3维矩行盒子并且具有近均一密度的体系时效率最高。 2.LAMMPS 的功能 总体功能: 可以串行和并行计算 分布式MPI 策略 模拟空间的分解并行机制 开源 高移植性C++ 语言编写 MPI 和单处理器串行FFT 的可选性(自定义)可以方便的为之扩展上新特征和功能只需一个输入脚本就可运行 有定义和使用变量和方程完备语法规则在运行过程中循环的控制都有严格的规则只要一个输入脚本试就可以同时实现一个或多个模拟任务粒子和模拟的类型: (atom style 命令) 原子 粗粒化粒子

velocity中文手册

$Velocity 用户指南
什么是 Velocity? Velocity 是基于 Java 的模板引擎。 它允许 Web 页面开发者引用 Java 代码中定 义的方法。 Web 设计者可以和 Java 程序开发者并行开发遵循 MVC 模式的 Web 站点。这意味着,Web 设计者可以将精力放在好的 Web 站点设计上,而 Java 程序开发者可以将精力放在编写代码上。Velocity 将 Java 代码从 Web 页面中 分离,使 Web 站点更具长期可维护性,并提供了一种替代 JSP 或 PHP 的方案。
VTL(Velocity Template Language)介绍 VTL 提供一种简单、容易和干静的方法将动态内容合并到 Web 页面。VTL 使用 引用(references)将动态内容插入到 Web 页面中。变量是一种引用,可以指向 Java 代码中的定义内容,或者由 Web 页面中的 VTL 语句来获得值。下面是一 个可以插入到 HTML 文档的 VTL 语句的例子:
#set( $a = "Velocity" )
VTL 语句以#开头,并包含指令(set)。变量以$开头,用引号引起。引号可以是 单引号,也可以是双引号。前者引用具体的 String 值;后者可以包含 Velocity 引用,例如”hello, $name”, $name 会用其当前的值替换。上面的例子是 将值 Velocity 赋值给变量 a。 当变量被赋值后, 就可以在 HTML 文档的任何地方引用, 下面是 Hello Velocity World!的例子:
1

相关主题
文本预览
相关文档 最新文档