Halcon - how to set white balance - halcon

I have this code to try around with halcon. Images are quite greenish, and cannot figure out how to set whitebalance. I cannot find it in the samples, in the documentation, on google, and in the parameters. How is whitebalance set on halcon?
* Image Acquisition 06: Code generated by Image Acquisition 06
* Image Acquisition 06: Attention: The initialization may fail in case parameters need to
* Image Acquisition 06: be set in a specific order (e.g., image resolution vs. offset).
open_framegrabber ('GigEVision', 0, 0, 0, 0, 0, 0, 'default', -1, 'default', 'GtlForceIP=00010dc465ce,10.5.5.144/24', 'false', 'default', 'S1204667', 0, -1, AcqHandle)
set_framegrabber_param (AcqHandle, 'Gain', 5.01187)
set_framegrabber_param (AcqHandle, 'BlackLevel', 240.0)
dev_open_window (0, 0, 500, 300, 'light gray', WindowHandleButton)
i := 0
create_bar_code_model ([], [], BarCodeHandle)
while (i < 100)
grab_image (Image, AcqHandle)
find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
get_bar_code_result (BarCodeHandle, 'all', 'decoded_types', BarCodeResults)
i:= i+1
endwhile
close_framegrabber (AcqHandle)

If you open your camera in HDevelop using Assistants -> Image Acquisition -> Connection tab there is a parameter for setting the color space. When I set it to "yuv" on one of my GigE cameras the image looks green. See if you can modify that value to "rgb" or "gray" or "default". There are also some advanced settings under the "Parameters" tab that you could play with by selecting "Guru" under the visibility settings. But I couldn't find white balance settings for my GigE camera under there. Usually the manufacturer of the camera will supply software to allow you to configure advanced parameters (IDS Camera Manager, Basler Pylon etc). You could try opening your camera under the manufacturers software to see if there are any settings for white balance.

Related

How to work around ImageJ run("HSB stack") error/ bug?

I am working on a macro for ImageJ. The goal is to take colour scans with several seeds on them and crop around the seeds to get several equally sized images with one seed on each.
This is the basic idea for the macro: prompt to select folder with scans (info about the seed is in the name of the image) > threshold to select seeds > crop around each seed on the original image > save all of the cropped images in a folder (name of the cropped images still containing the information of the name of the original image)
When I run the code below, I get an error for line 31: run("HSB stack");
The error informs me about supported conversions and shows that in order to run this command I need to start with an RGB image. However, according to Fiji > Image > Type, my images are RGBs. A coding error in that part also seems unlikely since it was written with the recording function in ImageJ.
Error message
According to what I found for the error, this seems to concern a recurring bug in the software, specific to the commands run("HSB stack") and run("RGB stack") in macros.
We have tried running this on ImageJ 2.3.0/1.53s as well as 1.53q on MacOS and Windows and always got the same problem.
If it is not a software problem, where is the error? Or if it is, do you have any suggestions for workarounds or a different program that could perform the same job?
The images I am working with are colour scans, 600dpi, white background with between 1 and 90 seeds on each scan. They are large tiff images (107.4 MB) but look like this:
Example scan image
I am not sure if it is helpful, but the code is below. There are probably still errors in the latter part that I could not yet get to because I can't get past the problem in line 31.
// Directory
dir=getDirectory("Choose a data folder");
list = getFileList(dir);
processed_dir_name = dir + "Cropped" + File.separator;
print(processed_dir_name);
File.makeDirectory(processed_dir_name);
// Batch
for (i=0; j<list.length; i++) {
print(i + ":" + dir+list[i]};
// Open images
run("Bio-Formats Importer", "open=" + dir+list[i] + "color_mode=Default view =Hyperstack");
// Crop edge, set general cropping parameters, scale
makeRectangle(108, 60, 4908, 6888);
run("Crop");
main = getTitle():
default_crop_width = 350;
default_crop_height = 350;
run("Set Scale...", "distance=600 known=25.4 unit=mm global");
//Thresholding
run("Color Threshold...");
//Color Thresholder 2.3.0/1.53q
// Autogenerated macro, single images only!
min=newArray(3);
max=newArray(3);
filter=newArray(3);
a=getTitle();
run("HSB stack");
run("Convert Stack to images");
selectWindow("Hue");
rename("0");
selectWindow("Saturation");
rename("1");
selectWindow("Brightness");
rename("2");
min[0]=0;
max[0]=255;
filter[0]="pass";
min[1]=0;
max[1]=255;
filter[1]="pass";
min[2]=0;
max[2]=193;
filter[2]="pass";
for (i=0;j<3;i++){
selectWindow(""+i);
The problem lies in the fact that your image is a hyperstack, and the color thresholding doesn't know how to work with that.
There are a few options you could try: Open the image as an 8-bit RGB, e.g. via open(dir+list[i]); or split the channels of the hyperstack and threshold each separately. Based on your sample image, I assume the first option makes more sense.
The following is an edited version of your code that works for the sample that you've provided:
// Directory
dir=getDirectory("Choose a data folder");
list = getFileList(dir);
processed_dir_name = dir + "Cropped" + File.separator;
print(processed_dir_name);
File.makeDirectory(processed_dir_name);
// Batch
for (i=0; i<list.length; i++)
{
if (!File.isDirectory(dir+list[i])) // Ignore directories such as processed_dir_name
{
print(i + ":" + dir+list[i]);
// Open images
open(dir+list[i]);
// Crop edge, set general cropping parameters, scale
makeRectangle(108, 60, 4908, 6888);
run("Crop");
main = getTitle();
default_crop_width = 350;
default_crop_height = 350;
run("Set Scale...", "distance=600 known=25.4 unit=mm global");
//Thresholding
//run("Color Threshold...");
//Color Thresholder 2.3.0/1.53q
// Autogenerated macro, single images only!
min=newArray(3);
max=newArray(3);
filter=newArray(3);
a=getTitle();
run("HSB Stack");
run("Convert Stack to Images");
selectWindow("Hue");
rename("0");
selectWindow("Saturation");
rename("1");
selectWindow("Brightness");
rename("2");
min[0]=0;
max[0]=255;
filter[0]="pass";
min[1]=0;
max[1]=255;
filter[1]="pass";
min[2]=0;
max[2]=193;
filter[2]="pass";
for (j=0;j<3;j++){
selectWindow(""+j);
}
}
}

How to conditionally set header and footer of pages?

It's my first time using reportlab to generate pdfs, it's VERY hard for me to understand how it works (it took me a day to even put a sized SVG image :D)
I want to achieve a very basic pdf:
As you can see in the images: 1 cover page, then 2 pages with header and footer BUT header with text is only on the first page...
Text is not static at all, it can break up to 4-5 pages, in the future there could be another section with title with different text.
Also I think what is very hard is to set text's Frame.topPadding to be variable based on
header height... I can't even imagine how to do this xD
This is my code right now
I've achieved to do the first page, it was pretty easy, but when it came to Frames, PageTemplates and other, my head blew up...
def _header(self, canvas, doc, title=None):
# Save the state of our canvas so we can draw on it
canvas.saveState()
y_pad = 50
header_height = (y_pad * 2) + (self.styles['heading'].leading if text else 0)
header_frame = Frame(
x1=0,
y1=self.height - header_height,
width=self.width,
height=header_height,
topPadding=y_pad,
bottomPadding=y_pad
)
canvas.setFillColor(DARKGRAY)
canvas.rect(0, self.height - header_height, self.width, header_height, fill=1)
if text:
header_frame.addFromList([
Paragraph(text, self.styles['heading'])
], canvas)
# Release the canvas
canvas.restoreState()
def _dark_page(self, canvas, doc):
canvas.saveState()
canvas.setFillColor(DARKGRAY)
canvas.rect(0, 0, self.width, self.height, fill=1)
canvas.restoreState()
def _create(self):
doc = SimpleDocTemplate(
self.buffer,
topMargin=0,
rightMargin=0,
leftMargin=0,
bottomMargin=0,
pagesize=A4
)
story = []
# cover page template with dark background set by self._dark_page
main_page_template = PageTemplate(id='main', frames=[
Frame(0, 0, self.width, self.height, 0, 100, 0, 100)
], onPage=self._dark_page)
# basic page template for any further text about product
body_page_template = PageTemplate(id='body', frames=[
Frame(0, 0, self.width, self.height, 80, 120, 80, 120, showBoundary=1)
], onPage=lambda c,d: self._header(c, d, title='title title title title')
doc.addPageTemplates([main_page_template, body_page_template])
story.append(NextPageTemplate('main'))
logo = svg2rlg(LOGO_PATH)
logo.width = logo.minWidth() * 0.4
logo.height = logo.height * 0.4
logo.scale(0.4, 0.4)
# logo._showBoundary = 1
logo.hAlign = 'CENTER'
story.append(logo)
story.append(Spacer(width=0, height=80))
# maybe there's a way to position the image in the center between elements,
# like justify-content: between in css...
image = Image(self._get_product_image_path(), 320, 320)
story.append(image)
story.append(Spacer(width=0, height=80))
title = Paragraph(self.product.title, self.styles['heading'])
story.append(title)
if self.product.breed.name_latin:
story += [
Spacer(width=0, height=10),
Paragraph(self.product.breed.name_latin, self.styles['subheading'])
]
story.append(NextPageTemplate('body'))
story.append(PageBreak())
# actual text
story.append(Paragraph(text*4, self.styles['body']))
doc.build(story)
So the question is
How do I set header and footer on the page, and if page breaks, next page with same header and footer, but header without title until the last page of the PageTemplate?
I've tried to get page numbers in self._header doc argument, but it's returning the first page number of the PageTemplate, not every page, maybe there's a way to get a page number from 0(first page used by some template) to the last page used by this template?
THANKS in advance! It already took me 3 days to try to achieve this...

How to use e.findAt for similar geometrical models?

I used Abaqus macro recording when defining a set: by edge (20 deg). My end goal is to run the script for different .STEP models/geometries which are identical in every aspect except for a few parametric values. For each model I am using the same procedure for selecting the highlighted edges: create a set from edge-by-angle-20.
However, when I run it for other geometric models, it selects an entirely different e.getSequenceFromMask or as I should say entirely different sets for e.findAt after running the commands for the similar edge.
session.journalOptions.replayGeometry
session.journalOptions.setValues(replayGeometry=INDEX)
I am aware that the program has restrictions over findAt :
findAt initially uses the ACIS tolerance of 1E-6. As a result, findAt returns any edge that is at the arbitrary point specified or at a distance of less than 1E-6 from the arbitrary point.
Edge to be selected in all models which are similar with a few variations in dimensions
I would appreciate it if anyone can suggest how to ensure the same edges are selected for different geometries when using the e.findAt command.
My code:
#Sample for the same edges selected from different dimensioned CAD models
#CAD Model_1
edges = e.getSequenceFromMask(mask=(
'[#63002104 #88110 #10000480 #20402 #480c802 #10420070 #c4411',
' #70104842 #10022000 #1e2002 #30 #80820010 #20003 #18144186',
' #b000 ]',), )
p.Set(edges=edges, name='Set-2')
#Set 2:
mdb.models['Model-1'].parts['Circular_knit - 2, 3, 10'].edges.findAt(((2.808153, 3.86272, -0.231317),),((3.959929, 2.669325, -0.231317),),((3.581888, 1.932068, -0.134932),),((1.501975, 3.782442, -0.134931),),((2.094736, 4.291667, -0.231317),),((2.135971, 3.464163, -0.134931),),((2.705066, 3.040627, -0.134931),),((3.436245, 3.316406, -0.231317),),((3.19197, 2.524704, -0.134932),),((4.363292, 1.941137, -0.231317),),((3.862971, 1.280728, -0.134932),),((-0.318814, 3.68708, 0.0),),((1.317672, 4.590214, -0.231317),),((4.764061, 0.331739, -0.231318),),((4.74929, -0.500571, -0.231318),),((4.590214, -1.317672, -0.231317),),((4.634078, 1.15397, -0.231318),),((-0.590217, 4.023581, -0.132766),),((-0.331245, 4.765369, -0.229231),),((0.822343, 3.985795, -0.134932),),((0.500571, 4.74929, -0.231318),),((4.02668, 0.590473, -0.134933),),((4.068041, -0.117724, -0.134933),),((4.291667, -2.094736, -0.231317),),((3.464163, -2.135971, -0.134931),),((3.86272, -2.808153, -0.231317),),((1.932068, -3.581888, -0.134932),),((1.280728, -3.862971, -0.134932),),((1.15397, -4.634078, -0.231318),),((0.590473, -4.02668, -0.134933),),((-0.117724, -4.068041, -0.134933),),((3.985795, -0.822343, -0.134932),),((0.117724, 4.068041, -0.134933),),((-1.15397, 4.634078, -0.231318),),((-1.280728, 3.862971, -0.134932),),((-2.524704, 3.19197, -0.134932),),((-2.669325, 3.959929, -0.231317),),((-1.941137, 4.363292, -0.231317),),((-1.932068, 3.581888, -0.134932),),((3.782442, -1.501975, -0.134931),),((3.040627, -2.705066, -0.134931),),((3.316406, -3.436245, -0.231317),),((2.524704, -3.19197, -0.134932),),((2.669325, -3.959929, -0.231317),),((1.941137, -4.363292, -0.231317),),((0.331739, -4.764061, -0.231318),),((-0.500571, -4.74929, -0.231318),),((-3.464163, 2.135971, -0.134931),),((-4.291667, 2.094736, -0.231317),),((-3.316406, 3.436245, -0.231317),),((-3.040627, 2.705066, -0.134931),),((-3.86272, 2.808153, -0.231317),),((-1.317672, -4.590214, -0.231317),),((-0.822343, -3.985795, -0.134932),),((-4.764061, -0.331739, -0.231318),),((-3.959929, -2.669325, -0.231317),),((-3.862971, -1.280728, -0.134932),),((-3.782442, 1.501975, -0.134931),),((-4.590214, 1.317672, -0.231317),),((-3.985795, 0.822343, -0.134932),),((-2.135971, -3.464163, -0.134931),),((-4.74929, 0.500571, -0.231318),),((-4.068041, 0.117724, -0.134933),),((-4.02668, -0.590473, -0.134933),),((-4.634078, -1.15397, -0.231318),),((-4.363292, -1.941137, -0.231317),),((-3.581888, -1.932068, -0.134932),),((-3.19197, -2.524704, -0.134932),),((-3.436245, -3.316406, -0.231317),),((-2.705066, -3.040627, -0.134931),),((-2.094736, -4.291667, -0.231317),),((-1.501975, -3.782442, -0.134931),),((-2.808153, -3.86272, -0.231317),),)
#CAD Model_2
edges = e.getSequenceFromMask(mask=('[#ffffffff:12 #3fffff ]', ), )
p.Set(edges=edges, name='Set-2')
#Set_2:
mdb.models['Model-1'].parts['Circular_knit - 2, 3, 9'].edges.findAt(((3.609683, 0.972388, 1e-06),),((3.573439, 0.962676, 0.012491),),((3.76173, 1.266747, -0.034239),),((4.345677, 1.895909, -0.106922),),((3.369331, 1.576662, 0.046191),),((3.59632, 1.879201, -0.101049),),((4.017677, 2.705061, -0.092682),),((3.044359, 2.137787, 0.046191),),((3.950435, 2.621725, -0.106922),),((4.319341, 2.493773, 0.001066),),((3.51041, 1.897727, -0.09198),),((4.38626, 1.924207, -0.137251),),((3.786618, 1.25932, -0.091981),),((4.653757, 1.133308, -0.137251),),((3.94777, 0.582649, -0.091981),),((4.779853, 0.307975, -0.137252),),((4.987546, 0.0, 0.001066),),((3.968123, -0.096234, -0.034239),),((3.706257, -0.319236, 0.046191),),((4.054105, -0.170725, -0.101049),),((4.831941, 0.333813, -0.092682),),((3.705386, 0.329198, 0.046191),),((3.686317, 0.32753, 0.012491),),((3.591928, 0.967631, 0.046191),),((4.608877, 1.112487, -0.106922),),((3.924549, 0.594285, -0.034239),),((4.732039, 0.295263, -0.106922),),((4.68676, 1.705841, 0.001066),),((3.351983, 1.568572, 0.012491),),((3.38599, 1.58443, 1e-06),),((4.426368, 1.966302, -0.092682),),((3.868004, 1.226157, -0.101049),),((4.700566, 1.167799, -0.092682),),((4.02216, 0.535857, -0.101049),),((3.723697, 0.3308, 1e-06),),((4.332897, 2.501599, 0.037363),),((3.215364, 2.475146, -0.101049),),((3.059416, 2.14833, 1e-06),),((3.028679, 2.126808, 0.012491),),((3.101617, 2.476941, -0.034239),),((3.435161, 3.267881, -0.106922),),((2.613351, 2.620422, 0.012491),),((2.649644, 2.983909, -0.091979),),((2.83651, 3.859543, -0.137251),),((2.134748, 3.057453, 1e-06),),((2.14551, 3.072822, 2e-06),),((2.850196, 3.916052, -0.092682),),((3.215994, 3.832672, 0.037363),),((3.205932, 3.820682, 0.001066),),((2.815512, 3.814744, -0.106922),),((2.129595, 3.050095, 0.046191),),((2.174904, 3.425595, -0.101049),),((2.501599, 4.332897, 0.037363),),((2.493773, 4.319341, 0.001066),),((2.067403, 3.388378, -0.034239),),((3.484612, 1.90072, -0.034239),),((3.985488, 2.656641, -0.137251),),((4.701469, 1.711195, 0.037363),),((4.927189, 0.868796, 0.037363),),((5.003198, 0.0, 0.037363),),((4.711421, -0.530933, -0.106922),),((3.891127, -0.78383, -0.034239),),((4.547648, -1.340996, -0.106922),),((3.695902, -1.447609, -0.034239),),((3.356209, -1.559509, 0.012491),),((3.710189, -1.469294, -0.091979),),((4.68676, -1.705841, 0.001066),),((4.816498, -0.510316, -0.092682),),((3.724569, -0.320838, 1e-06),),((3.687189, -0.317568, 0.012491),),((4.911774, 0.866078, 0.001066),),((3.48691, 3.361627, -0.092682),),((2.626886, 2.633957, 0.046191),),((3.127541, 2.478471, -0.091979),),((3.463619, 3.308353, -0.137251),),((2.639883, 2.646954, 1e-06),),((3.820682, 3.205932, 0.001066),),((3.832672, 3.215994, 0.037363),),((2.62438, 2.9779, -0.034239),),((2.118616, 3.034415, 0.012491),),((2.091239, 3.398682, -0.091979),),((2.736711, 2.995885, -0.101049),),((2.12688, 4.35149, -0.092682),),((1.547014, 3.751221, -0.101049),),((1.711195, 4.701469, 0.037363),),((1.469294, 3.710189, -0.091979),),((2.123214, 4.293462, -0.137251),),((2.110314, 4.245698, -0.106922),),((3.988971, -0.111726, -0.091981),),((4.911774, -0.866078, 0.001066),),((4.760715, -0.526717, -0.137252),),((3.594516, -0.957971, 0.046191),),((3.576027, -0.953017, 0.012491),),((3.908966, -0.802706, -0.09198),),((4.927189, -0.868796, 0.037363),),((3.373557, -1.567599, 0.046191),),((4.245698, -2.110314, -0.106922),),((4.319341, -2.493773, 0.001066),),((4.332897, -2.501599, 0.037363),),((4.35149, -2.12688, -0.092682),),((4.293462, -2.123214, -0.137251),),((3.390216, -1.575367, 1e-06),),((4.596926, -1.345405, -0.137251),),((3.612271, -0.962729, 1e-06),),((4.65471, -1.338939, -0.092682),),((3.751221, -1.547014, -0.101049),),((3.962868, -0.872119, -0.101049),),((1.567599, 3.373557, 0.046191),),((1.338939, 4.65471, -0.092682),),((0.872119, 3.962868, -0.101049),),((0.510316, 4.816498, -0.092682),),((0.321655, 3.733897, 2e-06),),((0.320019, 3.715207, 1e-06),),((0.111726, 3.988971, -0.091981),),((0.0, 4.987546, 0.001066),),((0.096234, 3.968123, -0.034239),),((0.530933, 4.711421, -0.106922),),((0.866078, 4.911774, 0.001066),),((0.526717, 4.760715, -0.137252),),((1.705841, 4.68676, 0.001066),),((1.345405, 4.596926, -0.137251),),((0.802706, 3.908966, -0.09198),),((1.571395, 3.381699, 1e-06),),((1.579324, 3.398703, 2e-06),),((1.447609, 3.695902, -0.034239),),((1.559509, 3.356209, 0.012491),),((3.388378, -2.067403, -0.034239),),((3.050095, -2.129595, 0.046191),),((3.065152, -2.140139, 1e-06),),((3.034415, -2.118616, 0.012491),),((3.398682, -2.091239, -0.091979),),((3.425595, -2.174904, -0.101049),),((4.701469, -1.711195, 0.037363),),((0.965152, 3.621316, 2e-06),),((0.957971, 3.594516, 0.046191),),((0.953017, 3.576027, 0.012491),),((0.868796, 4.927189, 0.037363),),((0.319236, 3.706257, 0.046191),),((0.170725, 4.054105, -0.101049),),((0.0, 5.003198, 0.037363),),((-0.3073, 4.782091, -0.136321),),((-0.320838, 3.724565, 1e-05),),((-0.323171, 3.73689, 1.3e-05),),((-0.324216, 3.705803, 0.046199),),((-0.593805, 3.921017, -0.033079),),((-0.866078, 4.911774, 0.001066),),((-1.133308, 4.653757, -0.137251),),((-0.972388, 3.609683, 1e-06),),((-0.967631, 3.591928, 0.046191),),((-1.112487, 4.608877, -0.106922),),((0.317568, 3.687189, 0.012491),),((-0.294772, 4.734331, -0.106051),),((0.78383, 3.891127, -0.034239),),((1.340996, 4.547648, -0.106922),),((0.960296, 3.603193, 1e-06),),((3.814744, -2.815512, -0.106922),),((3.820682, -3.205932, 0.001066),),((3.832672, -3.215994, 0.037363),),((3.916052, -2.850196, -0.092682),),((3.859543, -2.83651, -0.137251),),((-0.332828, 4.834011, -0.091687),),((-0.318814, 3.68708, 0.0),),((-0.325817, 3.724111, 1e-05),),((-0.536001, 4.018603, -0.099875),),((-0.868796, 4.927189, 0.037363),),((-0.319237, 3.706259, 0.046191),),((-0.322549, 3.68675, 0.0125),),((-0.31881, 3.687067, 0.05),),((-0.317568, 3.687186, 0.012495),),((-0.582378, 3.944173, -0.090789),),((-0.962676, 3.573439, 0.012491),),((-1.25932, 3.786618, -0.091981),),((-1.711195, 4.701469, 0.037363),),((-1.226157, 3.868004, -0.101049),),((-1.167799, 4.700566, -0.092682),),((2.9779, -2.62438, -0.034239),),((3.267881, -3.435161, -0.106922),),((2.476941, -3.101617, -0.034239),),((2.137787, -3.044359, 0.046191),),((2.475146, -3.215364, -0.101049),),((3.361627, -3.48691, -0.092682),),((2.633957, -2.626886, 0.046191),),((2.620422, -2.613351, 0.012491),),((2.983909, -2.649644, -0.091979),),((2.995885, -2.736711, -0.101049),),((2.646954, -2.639883, 1e-06),),((-1.266747, 3.76173, -0.034239),),((-1.705841, 4.68676, 0.001066),),((-1.924207, 4.38626, -0.137251),),((-1.58443, 3.38599, 1e-06),),((-1.966302, 4.426368, -0.092682),),((3.205932, -3.820682, 0.001066),),((2.478471, -3.127541, -0.091979),),((2.656641, -3.985488, -0.137251),),((2.493773, -4.319341, 0.001066),),((1.90072, -3.484612, -0.034239),),((1.576662, -3.369331, 0.046191),),((1.879201, -3.59632, -0.101049),),((2.705061, -4.017677, -0.092682),),((2.126808, -3.028679, 0.012491),),((2.14833, -3.059416, 1e-06),),((3.215994, -3.832672, 0.037363),),((3.308353, -3.463619, -0.137251),),((-1.895909, 4.345677, -0.106922),),((-1.568572, 3.351983, 0.012491),),((-1.897727, 3.51041, -0.09198),),((-2.501599, 4.332897, 0.037363),),((-2.705061, 4.017677, -0.092682),),((-2.137787, 3.044359, 0.046191),),((-2.621725, 3.950435, -0.106922),),((-2.493773, 4.319341, 0.001066),),((-2.656641, 3.985488, -0.137251),),((-2.14833, 3.059416, 1e-06),),((-1.576662, 3.369331, 0.046191),),((2.501599, -4.332897, 0.037363),),((2.621725, -3.950435, -0.106922),),((1.895909, -4.345677, -0.106922),),((1.705841, -4.68676, 0.001066),),((1.924207, -4.38626, -0.137251),),((1.58443, -3.38599, 1e-06),),((1.966302, -4.426368, -0.092682),),((-1.90072, 3.484612, -0.034239),),((-1.879201, 3.59632, -0.101049),),((-2.475146, 3.215364, -0.101049),),((-2.476941, 3.101617, -0.034239),),((-2.126808, 3.028679, 0.012491),),((-2.478471, 3.127541, -0.091979),),((-3.308353, 3.463619, -0.137251),),((-2.646954, 2.639883, 1e-06),),((-3.361627, 3.48691, -0.092682),),((-3.215994, 3.832672, 0.037363),),((1.897727, -3.51041, -0.09198),),((1.568572, -3.351983, 0.012491),),((1.266747, -3.76173, -0.034239),),((0.967631, -3.591928, 0.046191),),((0.972388, -3.609683, 1e-06),),((0.962676, -3.573439, 0.012491),),((1.112487, -4.608877, -0.106922),),((0.594285, -3.924549, -0.034239),),((0.329198, -3.705386, 0.046191),),((0.535857, -4.02216, -0.101049),),((1.167799, -4.700566, -0.092682),),((1.226157, -3.868004, -0.101049),),((1.711195, -4.701469, 0.037363),),((1.25932, -3.786618, -0.091981),),((-3.267881, 3.435161, -0.106922),),((-3.205932, 3.820682, 0.001066),),((-2.620422, 2.613351, 0.012491),),((-2.983909, 2.649644, -0.091979),),((-3.859543, 2.83651, -0.137251),),((-3.065152, 2.140139, 1e-06),),((-3.050095, 2.129595, 0.046191),),((-3.034415, 2.118616, 0.012491),),((-3.398682, 2.091239, -0.091979),),)+mdb.models['Model-1'].parts['Circular_knit - 2, 3, 9'].edges.findAt(((-4.319341, 2.493773, 0.001066),),((-4.245698, 2.110314, -0.106922),),((-3.695902, 1.447609, -0.034239),),((-4.547648, 1.340996, -0.106922),),((-3.576027, 0.953017, 0.012491),),((-3.908966, 0.802706, -0.09198),),((-4.760715, 0.526717, -0.137252),),((-3.724569, 0.320838, 1e-06),),((-4.816498, 0.510316, -0.092682),),((-3.962868, 0.872119, -0.101049),),((-3.612271, 0.962729, 1e-06),),((-2.633957, 2.626886, 0.046191),),((0.866078, -4.911774, 0.001066),),((1.133308, -4.653757, -0.137251),),((0.295263, -4.732039, -0.106922),),((-0.096234, -3.968123, -0.034239),),((-0.530933, -4.711421, -0.106922),),((-0.78383, -3.891127, -0.034239),),((-0.957971, -3.594516, 0.046191),),((-0.872119, -3.962868, -0.101049),),((-0.868796, -4.927189, 0.037363),),((-0.802706, -3.908966, -0.09198),),((-1.345405, -4.596926, -0.137251),),((-1.711195, -4.701469, 0.037363),),((-1.338939, -4.65471, -0.092682),),((0.3308, -3.723697, 1e-06),),((0.333813, -4.831941, -0.092682),),((0.0, -5.003198, 0.037363),),((0.0, -4.987546, 0.001066),),((0.868796, -4.927189, 0.037363),),((-2.9779, 2.62438, -0.034239),),((-3.820682, 3.205932, 0.001066),),((-3.832672, 3.215994, 0.037363),),((-3.916052, 2.850196, -0.092682),),((-3.425595, 2.174904, -0.101049),),((-3.388378, 2.067403, -0.034239),),((-3.814744, 2.815512, -0.106922),),((-4.293462, 2.123214, -0.137251),),((-3.390216, 1.575367, 1e-06),),((-4.35149, 2.12688, -0.092682),),((-4.332897, 2.501599, 0.037363),),((-3.373557, 1.567599, 0.046191),),((-3.356209, 1.559509, 0.012491),),((-3.710189, 1.469294, -0.091979),),((-4.701469, 1.711195, 0.037363),),((-4.65471, 1.338939, -0.092682),),((-3.594516, 0.957971, 0.046191),),((-4.68676, 1.705841, 0.001066),),((-4.596926, 1.345405, -0.137251),),((-3.891127, 0.78383, -0.034239),),((-4.927189, 0.868796, 0.037363),),((-3.687189, 0.317568, 0.012491),),((-3.988971, 0.111726, -0.091981),),((-4.779853, -0.307975, -0.137252),),((-3.723697, -0.3308, 1e-06),),((-4.831941, -0.333813, -0.092682),),((-4.054105, 0.170725, -0.101049),),((-3.706257, 0.319236, 0.046191),),((-4.711421, 0.530933, -0.106922),),((-4.911774, 0.866078, 0.001066),),((-2.995885, 2.736711, -0.101049),),((0.32753, -3.686317, 0.012491),),((0.582649, -3.94777, -0.091981),),((-0.319236, -3.706257, 0.046191),),((-0.317568, -3.687189, 0.012491),),((-0.111726, -3.988971, -0.091981),),((0.307975, -4.779853, -0.137252),),((-0.866078, -4.911774, 0.001066),),((-0.526717, -4.760715, -0.137252),),((-0.320838, -3.724569, 1e-06),),((-0.510316, -4.816498, -0.092682),),((-0.953017, -3.576027, 0.012491),),((-0.962729, -3.612271, 1e-06),),((-1.705841, -4.68676, 0.001066),),((-1.469294, -3.710189, -0.091979),),((-2.123214, -4.293462, -0.137251),),((-2.091239, -3.398682, -0.091979),),((-2.83651, -3.859543, -0.137251),),((-2.649644, -2.983909, -0.091979),),((-3.463619, -3.308353, -0.137251),),((-3.820682, -3.205932, 0.001066),),((-3.101617, -2.476941, -0.034239),),((-3.044359, -2.137787, 0.046191),),((-3.215364, -2.475146, -0.101049),),((-3.832672, -3.215994, 0.037363),),((-3.127541, -2.478471, -0.091979),),((-3.985488, -2.656641, -0.137251),),((-4.332897, -2.501599, 0.037363),),((-3.59632, -1.879201, -0.101049),),((-3.38599, -1.58443, 1e-06),),((-3.351983, -1.568572, 0.012491),),((-3.484612, -1.90072, -0.034239),),((-4.319341, -2.493773, 0.001066),),((-1.547014, -3.751221, -0.101049),),((-1.575367, -3.390216, 1e-06),),((-1.559509, -3.356209, 0.012491),),((-1.567599, -3.373557, 0.046191),),((-0.170725, -4.054105, -0.101049),),((-3.751221, 1.547014, -0.101049),),((-3.968123, 0.096234, -0.034239),),((-5.003198, 0.0, 0.037363),),((-3.686317, -0.32753, 0.012491),),((-3.94777, -0.582649, -0.091981),),((-4.653757, -1.133308, -0.137251),),((-3.609683, -0.972388, 1e-06),),((-3.591928, -0.967631, 0.046191),),((-4.608877, -1.112487, -0.106922),),((-4.911774, -0.866078, 0.001066),),((-3.705386, -0.329198, 0.046191),),((-4.732039, -0.295263, -0.106922),),((-1.340996, -4.547648, -0.106922),),((-1.447609, -3.695902, -0.034239),),((-2.501599, -4.332897, 0.037363),),((-2.174904, -3.425595, -0.101049),),((-2.850196, -3.916052, -0.092682),),((-2.736711, -2.995885, -0.101049),),((-2.639883, -2.646954, 1e-06),),((-2.613351, -2.620422, 0.012491),),((-3.435161, -3.267881, -0.106922),),((-2.140139, -3.065152, 1e-06),),((-2.129595, -3.050095, 0.046191),),((-2.815512, -3.814744, -0.106922),),((-3.205932, -3.820682, 0.001066),),((-3.215994, -3.832672, 0.037363),),((-3.950435, -2.621725, -0.106922),),((-3.059416, -2.14833, 1e-06),),((-4.017677, -2.705061, -0.092682),),((-3.48691, -3.361627, -0.092682),),((-2.626886, -2.633957, 0.046191),),((-3.51041, -1.897727, -0.09198),),((-4.426368, -1.966302, -0.092682),),((-3.369331, -1.576662, 0.046191),),((-4.345677, -1.895909, -0.106922),),((-4.68676, -1.705841, 0.001066),),((-3.786618, -1.25932, -0.091981),),((-2.12688, -4.35149, -0.092682),),((-2.110314, -4.245698, -0.106922),),((-2.493773, -4.319341, 0.001066),),((-4.987546, 0.0, 0.001066),),((-4.927189, -0.868796, 0.037363),),((-4.700566, -1.167799, -0.092682),),((-3.573439, -0.962676, 0.012491),),((-3.868004, -1.226157, -0.101049),),((-3.76173, -1.266747, -0.034239),),((-3.924549, -0.594285, -0.034239),),((-4.02216, -0.535857, -0.101049),),((-2.62438, -2.9779, -0.034239),),((-2.118616, -3.034415, 0.012491),),((-2.067403, -3.388378, -0.034239),),((-3.028679, -2.126808, 0.012491),),((-4.38626, -1.924207, -0.137251),),((-4.701469, -1.711195, 0.037363),),)
Do not use getSequenceFromMask
This method seems very appealing, however, Abaqus documentation does not cover how masks are formed, so it is not possible to artificially generate a mask for a set of objects.
Use coordinates (findAt()) or indeces instead
Most of the time if your geometry is complex and is generated without control over vertices/edges/etc numbering then the findAt() method is your only option (along with methods getByBoundingBox(...), getByBoundingCylinder(...) and getByBoundingSphere(...)).
If searching edge-by-edge is not very efficient and getByBounding... methods do not allow you to select the right array of edges then you can try: 1) to find the first edge of your sequence; 2) then use (as you already tried) the getEdgesByEdgeAngle(...) method to find all adjacent edges.
If you know for sure the numbering of your geometrical entities (vertices/edges/etc.) then you can access them by their index. So, using notations from your example, if edges of interest of your geometry have indexes from n to m then:
part = mdb.models['Model-1'].parts['Circular_knit - 2, 3, 10']
set2 = part.Set(name='Set-2', edges=part.edges[n:m+1])

Photoshop Automation of alignment of text layer with image

I have never scripted in photoshop before, so I am wondering if this is possible. The following is currently done manually for over than 300 files. The next time round is for 600 files, therefore I am looking into automating it.
Steps:
Make Image Size to 54pixels Hight and 500px Width -- Found that this is doable.
Align Image Left.
Create a text layer and insert text -- Found that this is doable.
Align Text layer 1px to the right of the image.
Trim empty space.
Would appreciate any help and pointers. Thanks.
This script will get you started: Note that in your request you didn't mention what what the original image was going to be and shrinking it to 500 x 54 is going to stretch it one way or another. Step 2, Align the image left, was omitted as you didn't mention what you are aligning this image to. I suspect you are dealing with a large image and what to shrink it down (as long as it's not smaller than 500 x 54) and work from there. I've also omitted stage 4 as I've hard coded the position of the text to be 1 px from the right hand edge (and it vertically centered with Arial font size 18)
Anhyoo.. you should be able to alter the script to your needs.
// set the source document
srcDoc = app.activeDocument;
//set preference units
var originalRulerPref = app.preferences.rulerUnits;
var originalTypePref = app.preferences.typeUnits;
app.preferences.rulerUnits = Units.POINTS;
app.preferences.typeUnits = TypeUnits.POINTS;
// resize image (ignoring the original aspect ratio)
var w = 500;
var h = 54;
var resizeRes = 72;
var resizeMethod = ResampleMethod.BICUBIC;
srcDoc.resizeImage(w, h, resizeRes, resizeMethod)
//create the text
var textStr = "Some text";
createText("Arial-BoldMT", 18.0, 0,0,0, textStr, w-1, 34)
srcDoc.activeLayer.textItem.justification = Justification.RIGHT
//set preference units back to normal
app.preferences.rulerUnits = originalRulerPref;
app.preferences.typeUnits = originalTypePref;
//trim image to transparent width
app.activeDocument.trim(TrimType.TRANSPARENT, true, true, true, true);
// function CREATE TEXT(typeface, size, R, G, B, text content, text X pos, text Y pos)
// --------------------------------------------------------
function createText(fface, size, colR, colG, colB, content, tX, tY)
{
// Add a new layer in the new document
var artLayerRef = srcDoc.artLayers.add()
// Specify that the layer is a text layer
artLayerRef.kind = LayerKind.TEXT
//This section defines the color of the hello world text
textColor = new SolidColor();
textColor.rgb.red = colR;
textColor.rgb.green = colG;
textColor.rgb.blue = colB;
//Get a reference to the text item so that we can add the text and format it a bit
textItemRef = artLayerRef.textItem
textItemRef.font = fface;
textItemRef.contents = content;
textItemRef.color = textColor;
textItemRef.size = size
textItemRef.position = new Array(tX, tY) //pixels from the left, pixels from the top
}
Everything you listed is doable in a script. I suggest you start by reading 'Adobe Intro To Scripting' in your ExtendScript Toolkit program files directory (e.g. C:\Program Files (x86)\Adobe\Adobe Utilities - CS6\ExtendScript Toolkit CS6\SDK\English)

Rotate a single page 90 degrees with iTextSharp/VB in an existing multi-page PDF

I am trying to integrate iTextSharp into an existing Document Imaging application that allows users to rotate individual pages that may have been scanned in at an incorrect angle (it happens more often than I would have thought).
I have the actual page data rotating correctly across 90/180 degrees, but the page orientation is not rotating along with it. I have just started working with iTextSharp, so I'm still a little unfamiliar with its methods, but was able to cobble together what I have so far using posts from StackOverflow. It's close, but not quite there.
Here's what I have so far:
' Get the input document and total number of pages
Dim inputPdf As New iTextSharp.text.pdf.PdfReader(fileName)
Dim pageCount As Integer = inputPdf.NumberOfPages
' Load the input document
Dim inputDoc As New iTextSharp.text.Document(inputPdf.GetPageSizeWithRotation(1))
' Set up the file stream for our output document
Dim outFileName As String = Path.ChangeExtension(fileName, "pdf")
Using fs As New FileStream(outFileName, FileMode.Create)
' Create the output writer
Dim outputWriter As iTextSharp.text.pdf.PdfWriter = iTextSharp.text.pdf.PdfWriter.GetInstance(inputDoc, fs)
inputDoc.Open()
' Copy pages from input to output document
Dim cb As iTextSharp.text.pdf.PdfContentByte = outputWriter.DirectContent
For index As Integer = 1 To pageCount
inputDoc.SetPageSize(inputPdf.GetPageSizeWithRotation(index))
inputDoc.NewPage()
' If this is our page to be rotated, perform the desired transform
' TODO - 90 degree rotations need to change the page orientation as well
Dim page As iTextSharp.text.pdf.PdfImportedPage = outputWriter.GetImportedPage(inputPdf, index)
If index = pageNum Then
Select Case angle
Case 90
cb.AddTemplate(page, 0, -1, 1, 0, 0, page.Height)
Case 180
cb.AddTemplate(page, -1, 0, 0, -1, page.Width, page.Height)
Case 270
cb.AddTemplate(page, 0, 1, -1, 0, page.Width, 0)
Case Else
' Should not be here, but don't do anything
cb.AddTemplate(page, 1, 0, 0, 1, 0, 0)
End Select
Else
' No rotation; add as is
cb.AddTemplate(page, 1, 0, 0, 1, 0, 0)
End If
Next
inputDoc.Close()
End Using
I tried adding the following code to the top to grab the page size from the existing page and swap the dimensions if the rotation angle was 90 or 270:
For index As Integer = 1 To pageCount
Dim pageSize As iTextSharp.text.Rectangle = inputPdf.GetPageSizeWithRotation(index)
If angle = 90 OrElse angle = 270 Then
' For 90-degree rotations, change the orientation of the page, too
pageSize = New iTextSharp.text.Rectangle(pageSize.Height, pageSize.Width)
End If
inputDoc.SetPageSize(pageSize)
inputDoc.NewPage()
Unfortunately, this had the effect of rotating every page 90 degrees, and the data on the page I wanted rotated didn't show up in the correct spot anyway (it was shifted down and off the page a bit).
Like I said, I'm not really familiar with the inner workings of the API. I have checked out the examples online at the sourceforge page, and have taken a look at the book (both editions), but I don't see anything that fits the bill. I saw an example here that shows page orientation for newly-composed PDFs, but nothing for existing ones. Can anybody help me out? Thanks!
You're making this harder than it needs to be.
Rather than rotating the page contents, you want to rotate the page itself:
PdfReader reader = new PdfReader(path);
PdfStamper stamper = new PdfStamper( reader, outStream );
PdfDictionary pageDict = reader.getPageN(desiredPage);
int desiredRot = 90; // 90 degrees clockwise from what it is now
PdfNumber rotation = pageDict.getAsNumber(PdfName.ROTATE);
if (rotation != null) {
desiredRot += rotation.intValue();
desiredRot %= 360; // must be 0, 90, 180, or 270
}
pageDict.put(PdfName.ROTATE, new PdfNumber(desiredRot);
stamper.close();
That's it. You can play around with desiredPage and desiredRot to get whatever effect you're after. Enjoy.