Perl で gdsii
実行環境
  Active Perl
     更新するには
ppm
  ppm
  DownLoad
  実行
Help
   perldoc GDS2
Examples
  basic-lines
  simple
  simple-sref
  aref
  circle
  circle-inverted
  sample-arc
  donut
  Inverted-Donuts
  Donuts_Combination
  Hello-World
  CP-array
  text2gds.pm
  rotate.pm
  rotate-rectangle
  arc.pm
  line-and-space-180
  triangle-array-nega
  sq_sleeve.pm
  TriangleGridStep
  triangle-array-nega-CP
  CirclesArray-SQ
  LargeCircles
  MA6-Alignment-mark.pm
  Alignment-Place
  Triangle-Grid
  Triangle-Grid-Wide
  ellipsis-polygons
  inscribe_polygon
  inscribe_polygon.pm
  inscribe_polygon-ellipsis.pm
  sleeving-by-square-sample
  sleeving-by-square.pm

Perl Perl/GDSII page
Download (as "LargeCircles.txt")

LargeCircles

#!/usr/pkg/bin/perl
use strict;
use GDS2;
require './arc.pm';
require './sq_sleeve.pm';
# global variable;
my $R3	= 1.7320508;

sub unit($$) {
    my $diameter = shift;
    my $gds2File = shift;
    my $name = sprintf ("u%03.1f", $diameter);


    my $R	= $diameter / 2;		# inner size
    my $R1	= $diameter / 2	                + 0.1/2;  # inner sleeving center   + 0.05
    my $R2	= $diameter / 2 +         0.075 + 0.1/2;  # inner polygon outer     + 0.07
    my $R3	= $diameter / 2 + 0.25   +0.025	- 0.1/2;  # outer polygon outer     + 0.13
    my $R4	= $diameter / 2 + 0.25  	- 0.1/2;  # outer sleeving center   + 0.20


    my @LIST;
    foreach my $angle ( 0, 90, 180, 270) {
				# x    y    start   end             box  diameter extra count
	push(@LIST,
	    sq_sleeve::arcCP(          0,   0,  $angle, $angle + 90,  5, 0.1, $R1 * 2, 1, $gds2File));
#	print __LINE__ . ' ' . $LIST[$#LIST],"\n";
	push(@LIST,
     	    sq_sleeve::arcCP(          0,   0,  $angle, $angle + 90,  5, 0.1, $R4 * 2, 1, $gds2File));
#	print __LINE__ . ' ' . $LIST[$#LIST],"\n";
    }

    $gds2File -> printBgnstr(-name => $name);
    foreach my $angle ( 0, 90, 180, 270) {
    my @IN  = arc::arc( 0, 0,  $angle, $angle + 90, $R2, 144, 'not-used',  1, $gds2File);
    my @OUT = arc::arc( 0, 0,  $angle, $angle + 90, $R3, 144, 'not-used', -1, $gds2File);

    $gds2File -> printBoundary(
	-xy => [ @IN,
		 @OUT
	],
	-layer => 10,
	);
    }
    foreach my $ring (@LIST){
	$gds2File -> printSref ( -name => $ring,  -xy=>[0,0]);
    }

    $gds2File -> printEndstr();
#    sq_sleeve::arcCP(-0.5 * $P, -0.5 * $P * 1.732, 270, 360, 5, 0.1, 19, $gds2File);
print 
    return $name;
}
# -----------------------------------------------------
#                     M A I N 
# -----------------------------------------------------
my $filename = $0;
   $filename =~ s/\.txt$//;
   $filename .= '.gds';

my($VERSION);
$VERSION = "2018-11-01 01:20" ; # written by emacs time-stamp
## $VERSION .= ' UTC';

my $gds2File = new GDS2(-fileName => '>'. $filename);
$gds2File -> printInitLib(-name => 'array');

my $diameter  = 50;
#  ---------------------------------------------------------------------
#         prepare CP structure ( by 1 degree step, with layer 1 and 2)
#  ----------------------------------------------------------------------
foreach my $i    ( 0..17 ) {
	sq_sleeve::SqSIPHA(100, $i* 5, $gds2File);
    };

my @RING ;
my %DEBUG;
# repeat 10 times for every ring
#foreach my $i (0..9) {
foreach my $i (0..9) {
    $diameter = $i * 1 + 50;
    push(@RING, unit($diameter, $gds2File));
}
$gds2File -> printBgnstr (-name =>'top');
foreach my $unit (@RING) {
    $gds2File -> printSref(-name => $unit, -xy => [0,0]);
}

$gds2File -> printEndstr ();

$gds2File -> printEndlib();

__END__
See perldoc GDS2 for help

perl DrieCondPerl
; please note I have copy in ~/.emacs-sub/time-stamp-setup.el
(require 'time-stamp)
(add-hook 'write-file-hooks 'time-stamp)
(setq time-stamp-active t)
;; (setq time-stamp-time-zone "UTC")
(setq time-stamp-time-zone nil)
(setq time-stamp-format "%04y-%02m-%02d %02H:%02M");
(setq time-stamp-start "$VERSION = \"") ;
(setq time-stamp-end "\"") ;
(setq time-stamp-line-limit 20) ; ; default is 8
Last Update: Mon, 21 Feb 2022 10:13:01 GMT 1.66 2008/03/08