美文网首页生物信息编程
使用Perl脚本增强Alias功能

使用Perl脚本增强Alias功能

作者: 倔强的二文鱼 | 来源:发表于2017-09-21 00:23 被阅读100次
    参数化Studio

    Perl 脚本是本身是一种UNIX中的王牌工具,由于Alias本身是Linux软件的历史原因,alias
    默认支持Perl脚本,本文就通过一个简单的例子,给大家演示如何,利用Perl脚本快速实现点的规则阵列。

    Perl脚本的特点:

    • 凝练 Perl脚本的一大优势就是使用最简单的方式解决复杂问题,更夸张的是,很多时候,很长一段代码下来,竟然没有定义一个变量你敢信!
    • “只读" 下面这段代码大家感受下,perl被戏称为read only便不言自明了。
    #!/usr/bin/perl
    @lines = perldoc -u -f atan2;
    foreach (@lines){
        s/\w<()[^>]+)>?|U$1/g;
        print;
    }
    
    • 难于学习 由于perl语言设计之初的宗旨就是,尽可能的满足程序员的需要,所有对于我们这种普通用户难免显得有点难(是我见过最bug的),但是一劳永逸,大家还是忍忍吧,谁让规则是别人定义的.

    Alias中的Perl脚本:

    • Alias perl脚本可以记录我们绝大部分的操作,并以Perl脚本的显示出来.就像下面这段代码这样

    代码显示

    selectFunction( "Nothing#23" );
    clickWindowButtonXYZ( "Camera", 0, -1791.791687, -5130.841064,  1599.617615 );
    clickWindowButtonXYZ(  "Camera", 0, 78.293103, 50.000000, 0.000000  ); # from select_item
    selectFunction( "Nothing#23" );
    setIntSymbol( "Component#67", "mo_pick_lights", 0 );
    setIntSymbol( "Component#67", "mo_pick_constr_obj", 0 );
    setIntSymbol( "Component#67", "mo_pick_curves", 1 );
    setIntSymbol( "Component#67", "mo_pick_surfaces", 0 );
    setIntSymbol( "Component#67", "mo_pick_others", 0 );
    setIntSymbol( "Component#67", "mo_pick_all", 0 );
    setIntSymbol( "Component#67", "mo_pick_shells", 0 );
    setIntSymbol( "Component#67", "mo_pick_scans", 0 );
    setIntSymbol( "Component#67", "mo_pick_meshes", 0 );
    setIntSymbol( "Component#67", "mo_pick_surface_type", 2 );
    selectFunction( "Component#67" );
    initTrace( "Camera", "Component#67", 7480359,  -179.182861,  -513.081665,   159.965591 );
    appendTracePoint( 7480359,  -179.183838,  -513.082336,   159.962357 );
    endTrace(7480359);
    selectFunction( "SurfaceFillet#18" );
    clickWindowButtonXYZ( "Camera", 0, -1791.746979, -5130.839233,  1599.674377 );
    clickWindowButtonXYZ( "Camera", 0, -1791.639709, -5130.895386,  1599.610291 );
    clickWindowButtonXYZ( "Camera", 0, -1791.770477, -5130.861206,  1599.576111 );
    clickWindowButtonXYZ( "Camera", 0, -1791.620636, -5130.880127,  1599.682159 );
    

    Perl脚本的一种操作就是直接用这个记录下的代码直接运行即可,玩过拳皇吧,连招会放吧,没错原理基本上是一样的,还有一个更洋气的名字,。使用场景呢,经常我们在项目后期需要做大量的倒角工作。而且有些地方不完全倒完还看不出全部的效果,如何呢,我们需要一遍又一遍的重复?NO NO NO

    image

    我们只需要将上框中的记录历史复制到下框即可,然后点击RUN-execute
    大功告成,剩下的时间只需要倒一杯水,慢慢收割旁边朋友的羡慕眼神吧,嘻嘻。

    • 参数化设计 Perl脚本的实力当然不止于此,更厉害的来了,Abracadabra~~~
      下面我们要让各位看官认识一种奇怪的阵列。
    image

    如何?是不是头有点晕,熟悉Alias阵列工具的经过仔细观察,这个阵列是无法用alias直接生成的(请仔细观察!)。

    这个阵列其实是一个经典数学问题,而且前人已经给出相关的方程

    alpha= n*137.5
    
    r = c*sqrt n
    
    

    137.5是什么呢,可以理解为一个数学常亮吧,是这个图形能够完美紧致的前提。下图是137.3度和137.6度的结果,是不是瞬间丧失了紧致的美感。

    image

    然后就是见证奇迹的时刻了。利用学到的Perl语法,把这个公式编写进去,就得到了下面这个代码。

    
    $height=600;
    $width= 600;
    $nbr_circles = 100;
    $PI = 3.14159265359;
    
    $phi = (sqrt(5)+1)/2 - 1;
    # golden ratio
    $golden_angle = $phi * 2 *$PI;
    # golden angle
    
    $lg_rad = $width * 0.45;
    $lg_area = ($lg_rad)*($lg_rad)  * $PI;
    
    $sm_area = $lg_area / $nbr_circles;
    # Area of our little circles, if they filled the space entirely
    $sm_rad = sqrt( $sm_area / $PI );
    # This is related to the equation area = pi r squared
    
    $fudge =0.5;
    # Fudge factor, since our circles don't actually fill up space entirely.
    $adj_sm_diameter = $sm_rad * 2 * $fudge;
    
    $cx = $width/2;
    $cy = $height/2;
    $gx = 0;
    $gy = 0;
    
    for ($i = 1; $i <= $nbr_circles; $i++) {
      selectFunction( "Circle" );
      $angle = $i*$golden_angle;
      $cum_area = $i*$sm_area;
      $spiral_rad = sqrt( $cum_area /$PI );
    $x =  cos($angle) * $spiral_rad;
      $y =  sin($angle) * $spiral_rad;
    clickWindowButtonXYZ( "Camera", 0,  $x, $y,  0 );
    print "$x - $y\n";
    $distance =5-sqrt(sqrt(($x-$gx)*($x-$gx) + ($y-$gy)*($y-$gy)));
    selectFunction( "Scale" );
    sendString( "$distance" );
    
    }
    
    
    image

    将这个代码键入到INPUT 框中去,然后执行。然后再倒一杯水,再次收割旁人的崇拜目光。
    慢慢享受啪啪啪一个一个圆的生成。

    image

    经过一段时间的使用,认为Perl脚本在alias中的应用还是有很多限制,距离项目实际使用还有一段距离。但是同时Perl脚本的出现为参数化建模指出了一个新的思路,不用将所有参数化相关的问题放在GH中解决。相信经过一段时间的发展,Perl一定会进入我们的数模制作流程,进一步的提高工作效率。最后预祝大家工作顺利。

    相关文章

      网友评论

        本文标题:使用Perl脚本增强Alias功能

        本文链接:https://www.haomeiwen.com/subject/kriasxtx.html