mirror of https://github.com/opencv/opencv.git
Open Source Computer Vision Library
https://opencv.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
4.0 KiB
122 lines
4.0 KiB
14 years ago
|
"""gen_pattern.py
|
||
|
To run:
|
||
|
-c 10 -r 12 -o out.svg
|
||
|
-T type of pattern, circles, acircles, checkerboard
|
||
|
-s --square_size size of squares in pattern
|
||
|
-u --units mm, inches, px, m
|
||
|
-w page width in units
|
||
|
-h page height in units
|
||
|
"""
|
||
|
|
||
|
from svgfig import *
|
||
|
|
||
|
import sys
|
||
|
import getopt
|
||
|
|
||
|
class PatternMaker:
|
||
|
def __init__(self, cols,rows,output,units,square_size,page_width,page_height):
|
||
|
self.cols = cols
|
||
|
self.rows = rows
|
||
|
self.output = output
|
||
|
self.units = units
|
||
|
self.square_size = square_size
|
||
|
self.width = page_width
|
||
|
self.height = page_height
|
||
|
self.g = SVG("g") # the svg group container
|
||
|
def makeCirclesPattern(self):
|
||
|
spacing = self.square_size
|
||
|
r = spacing / 5.0 #radius is a 5th of the spacing TODO parameterize
|
||
|
for x in range(1,self.cols+1):
|
||
|
for y in range(1,self.rows+1):
|
||
|
dot = SVG("circle", cx=x * spacing, cy=y * spacing, r=r, fill="black")
|
||
|
self.g.append(dot)
|
||
|
|
||
|
def makeACirclesPattern(self):
|
||
|
spacing = self.square_size
|
||
|
r = spacing / 5.0
|
||
|
row_shift = 0
|
||
|
for y in range(1,self.rows+1):
|
||
|
for x in range(1,self.cols+1):
|
||
|
dot = SVG("circle", cx= (x + row_shift/2.0) * spacing, cy=y * spacing, r=r, fill="black")
|
||
|
self.g.append(dot)
|
||
|
#this makes the pattern asymetric
|
||
|
if row_shift is 0:
|
||
|
row_shift = 1
|
||
|
else:
|
||
|
row_shift = 0
|
||
|
def makeCheckerboardPattern(self):
|
||
|
spacing = self.square_size
|
||
|
r = spacing / 5.0
|
||
|
for x in range(1,self.cols+1):
|
||
|
for y in range(1,self.rows+1):
|
||
|
#TODO make a checkerboard pattern
|
||
|
dot = SVG("circle", cx=x * spacing, cy=y * spacing, r=r, fill="black")
|
||
|
self.g.append(dot)
|
||
|
def save(self):
|
||
|
c = canvas(self.g,width="%d%s"%(self.width,self.units),height="%d%s"%(self.height,self.units),viewBox="0 0 %d %d"%(self.width,self.height))
|
||
|
c.inkview(self.output)
|
||
|
|
||
|
def makePattern(cols,rows,output,p_type,units,square_size,page_width,page_height):
|
||
|
width = page_width
|
||
|
spacing = square_size
|
||
|
height = page_height
|
||
|
r = spacing / 5.0
|
||
|
g = SVG("g") # the svg group container
|
||
|
for x in range(1,cols+1):
|
||
|
for y in range(1,rows+1):
|
||
|
if "circle" in p_type:
|
||
|
dot = SVG("circle", cx=x * spacing, cy=y * spacing, r=r, fill="black")
|
||
|
g.append(dot)
|
||
|
c = canvas(g,width="%d%s"%(width,units),height="%d%s"%(height,units),viewBox="0 0 %d %d"%(width,height))
|
||
|
c.inkview(output)
|
||
|
|
||
|
|
||
|
def main():
|
||
|
# parse command line options, TODO use argparse for better doc
|
||
|
try:
|
||
|
opts, args = getopt.getopt(sys.argv[1:], "ho:c:r:T:u:s:w:h:", ["help","output","columns","rows",
|
||
|
"type","units","square_size","page_width",
|
||
|
"page_height"])
|
||
|
except getopt.error, msg:
|
||
|
print msg
|
||
|
print "for help use --help"
|
||
|
sys.exit(2)
|
||
|
output = "out.svg"
|
||
|
columns = 8
|
||
|
rows = 11
|
||
|
p_type = "circles"
|
||
|
units = "mm"
|
||
|
square_size = 20.0
|
||
|
page_width = 216 #8.5 inches
|
||
|
page_height = 279 #11 inches
|
||
|
# process options
|
||
|
for o, a in opts:
|
||
|
if o in ("-h", "--help"):
|
||
|
print __doc__
|
||
|
sys.exit(0)
|
||
|
elif o in ("-r", "--rows"):
|
||
|
rows = int(a)
|
||
|
elif o in ("-c", "--columns"):
|
||
|
columns = int(a)
|
||
|
elif o in ("-o", "--output"):
|
||
|
output = a
|
||
|
elif o in ("-T", "--type"):
|
||
|
p_type = a
|
||
|
elif o in ("-u", "--units"):
|
||
|
units = a
|
||
|
elif o in ("-s", "--square_size"):
|
||
|
square_size = float(a)
|
||
|
elif o in ("-w", "--page_width"):
|
||
|
page_width = float(a)
|
||
|
elif o in ("-h", "--page_height"):
|
||
|
page_height = float(a)
|
||
|
pm = PatternMaker(columns,rows,output,units,square_size,page_width,page_height)
|
||
|
#dict for easy lookup of pattern type
|
||
|
mp = {"circles":pm.makeCirclesPattern,"acircles":pm.makeACirclesPattern,"checkerboard":pm.makeCheckerboardPattern}
|
||
|
mp[p_type]()
|
||
|
#this should save pattern to output
|
||
|
pm.save()
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
main()
|