Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

How do we to get the corner points value from Quadrilateral?

Explorer ,
Nov 28, 2020 Nov 28, 2020

Hi EveryOne!,

 

Is this possible to get the corner points value from Quadrilateral?

Thanks in advance.

-yajiv

 

test.png

 

TOPICS
Actions and scripting , Windows
3.8K
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 2 Correct answers

Community Expert , Nov 28, 2020 Nov 28, 2020

Another approach would be creating a Working Path from a Selection based on the Layer’s transparency and evaluating that path. 

Translate
People's Champ , Nov 30, 2024 Nov 30, 2024
The previously proposed version can also fail if the figure is too small and shifted from the center to the right and up. The new version is free of this drawback.
 
UPD: improved and accelerated.

 

 

var doc = activeDocument;
var tmp = "tmp"+Math.random();

var ok = true;

try { doc.selection.bounds; } catch (e) { alert("No selection"); ok = false; }

if (ok)
    {
    activeDocument.suspendHistory("script", "main()");
    }

/////////////////////////////////////////////////
function main()
    {
  
...
Translate
Adobe
Community Beginner ,
Nov 29, 2024 Nov 29, 2024

Wow! Thank you so much! This is exactly what I need! Thank you very much!!!!

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Nov 29, 2024 Nov 29, 2024

No offense, but after I change other shapes, will this script report an error?

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
People's Champ ,
Nov 29, 2024 Nov 29, 2024

I didn't quite understand what you mean.

The script works with the initial selection. You can insert the code to create a selection based on the structure of your files. You know better what's usually inside.

 

I just showed the idea of ​​how to find "protruding" corners.

From the lower left corner, a selection of 1 pixel thick is created in the form of a 45-degree line.

This selection moves from the edge of the canvas until it touches some corner in the lower left part. Ideally, the contact will be only 1 pixel in size. To find corners in other parts of the figure, you can move the selection from other corners of the canvas to the center.

Since you have high-resolution files, to speed up the process, the first movement (scanning) is done with a step of 50 pixels for a rough location of the place where the figure is present in this part.

After that, this range (50 pixels) is scanned with a step of 1 pixel to accurately find the extreme pixel of the intersection of the line and the figure.

 

Of course, there may be figures that have several "corners" in a certain frame. The result of the work may be unexpected. You need to look and adapt the script to your "typical" figures, which usually stand vertically and without tilt.

 

Good luck!

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Nov 29, 2024 Nov 29, 2024

Sorry, I'm not very familiar with scripting code, most of my scripting is done using ChatGPT

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Nov 29, 2024 Nov 29, 2024

You can look at this example file. The situation I faced was so complex and varied, and it was different every time. The only thing that was the same was that I needed to find the lower left corner of these shapes.

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Nov 29, 2024 Nov 29, 2024

I corrected it for a long time and found that the reason why the script failed to run on other shapes is because if the document exceeds 7300 pixels, the script will report an error, but if it is less than 7300 pixels, there will be no problem. How should I solve this problem?

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
People's Champ ,
Nov 30, 2024 Nov 30, 2024
The large size shouldn't be a problem.
I resized your files to 8000 and there is no problem.
aaaa.jpg
 
What error message exactly are you getting?
 
 
 
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
People's Champ ,
Nov 30, 2024 Nov 30, 2024

The problem may be if the shape is much smaller than the canvas.

If I change the canvas size to 8000 instead of the size of your file, I also got an error.

 

To avoid this, replace the line in the code

 

var from = scan(0, w/2, h, 50);

 

with

 

var from = scan(0, Math.min(w,h), h, 50);

 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
People's Champ ,
Nov 30, 2024 Nov 30, 2024
The previously proposed version can also fail if the figure is too small and shifted from the center to the right and up. The new version is free of this drawback.
 
UPD: improved and accelerated.

 

 

var doc = activeDocument;
var tmp = "tmp"+Math.random();

var ok = true;

try { doc.selection.bounds; } catch (e) { alert("No selection"); ok = false; }

if (ok)
    {
    activeDocument.suspendHistory("script", "main()");
    }

/////////////////////////////////////////////////
function main()
    {
    try {
        app.preferences.rulerUnits = Units.PIXELS;

        save_selection(tmp);

        scan(scan());

        del_channel(tmp);

        doc.guides.add(Direction.VERTICAL, doc.selection.bounds[0])
        doc.guides.add(Direction.HORIZONTAL, doc.selection.bounds[1])
        }
    catch(e) { alert(e.line+"\n"+e); }
    }

/////////////////////////////////////////////////
function scan(from)
    {
    try {
        app.preferences.rulerUnits = Units.PIXELS;

        load_selection(tmp);

        var x0 = doc.selection.bounds[0].value;
        var y0 = doc.selection.bounds[1].value;

        var x1 = doc.selection.bounds[2].value;
        var y1 = doc.selection.bounds[3].value;

        var w = x1-x0;
        var h = y1-y0;

        var safe = 3;

        var beg = -w/2-h/2;
        var end =  w/2+h/2;
        var step = 20;

        if (from != undefined)
            {
            beg = from;
            end = from+step;
            step = 1;
            }

        for (var off = beg; off <= end; off+=step)
            {
            load_selection(tmp);

            doc.selection.select([[(x0+x1)/2-h/2+off, (y0+y1)/2-h/2-safe], [(x0+x1)/2-h/2+1+off, (y0+y1)/2-h/2-safe], [(x0+x1)/2+h/2+1+off, (y0+y1)/2+h/2+safe], [(x0+x1)/2+h/2+off, (y0+y1)/2+h/2+safe]], SelectionType.INTERSECT, 0, false);

            try { doc.selection.bounds; } catch (e) { continue; }

            return off-step;

            break;
            }
        }
    catch(e) { alert(e.line+"\n"+e); }
    }

/////////////////////////////////////////////////
function save_selection(name)
    {
    try {
        var d = new ActionDescriptor();
        var r = new ActionReference();
        r.putProperty(stringIDToTypeID("channel"), stringIDToTypeID("selection"));
        d.putReference(stringIDToTypeID("null"), r);
        d.putString(stringIDToTypeID("name"), name);

        executeAction(stringIDToTypeID("duplicate"), d, DialogModes.NO);
        }
    catch(e) { alert(e.line+"\n"+e); }
    }

/////////////////////////////////////////////////
function load_selection(name)
    {
    try {
        var d = new ActionDescriptor();
        var r = new ActionReference();
        r.putProperty(stringIDToTypeID("channel"), stringIDToTypeID("selection"));
        d.putReference(stringIDToTypeID("null"), r);
        var r1 = new ActionReference();
        r1.putName(stringIDToTypeID("channel"), name);
        d.putReference(stringIDToTypeID("to"), r1);
        executeAction(stringIDToTypeID("set"), d, DialogModes.NO);
        }
    catch(e) { alert(e.line+"\n"+e); }
    }

/////////////////////////////////////////////////
function del_channel(name)
    {
    try {
        var d = new ActionDescriptor();
        var r = new ActionReference();
        r.putName(stringIDToTypeID("channel"), name);
        d.putReference(stringIDToTypeID("null"), r);
        executeAction(stringIDToTypeID("delete"), d, DialogModes.NO);
        }
    catch(e) { alert(e.line+"\n"+e); }
    }

 

UPD: improved and accelerated.

 

 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Dec 02, 2024 Dec 02, 2024

wa! This is exactly what I need! Thank you very much, it works perfectly!

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Dec 02, 2024 Dec 02, 2024

If there are multiple groups in the current file, I only need one group to be active and all other groups to be locked, can this be achieved through a script? Because I checked a lot of codes and tried, but all failed.

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Dec 03, 2024 Dec 03, 2024
LATEST

I have solved my problem, thank you very very very much for your help!

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines