Page 1 of 1

Get Shape Points

Posted: Sat Aug 10, 2024 8:54 pm
by MehdiZangenehBar
My main goal is to save all vector data and import it in another software (something like SVG). But, I'm little confused about the shape data. Please download following file: https://drive.google.com/file/d/1oBj75F ... drive_link
You can see there is one shape, but 3 sub shape. how I can split points on those 3 shapes?
https://drive.google.com/file/d/1Snuco_ ... drive_link
The thing that I need is 3 table of points based on what you can see in the image.

Re: Get Shape Points

Posted: Sat Aug 10, 2024 9:14 pm
by synthsin75
You'll probably need to check which curves are in the shape. If that fails, you may need to check end points and adjacent points on the curve to build your tables.

Re: Get Shape Points

Posted: Sun Aug 11, 2024 1:44 pm
by MehdiZangenehBar
synthsin75 wrote: Sat Aug 10, 2024 9:14 pm You'll probably need to check which curves are in the shape. If that fails, you may need to check end points and adjacent points on the curve to build your tables.
Thanks, I used adjacent method and it works:

Code: Select all

-- **************************************************
-- General information about this script
-- **************************************************

ScriptName = "MZ_Test_Script"
MZ_Test_Script = {}

function MZ_Test_Script:OnMouseDown(moho, mouseEvent)
end

function MZ_Test_Script:DoLayout(moho, layout)
	layout:AddChild(LM.GUI.Button('Get Points Table', MOHO.MSG_BASE))
end

function MZ_Test_Script:HandleMessage(moho, view, msg)
    MZ_Test_Script:GetPointsTable(moho)
end

-- **************************************************
-- Functions
-- **************************************************

function MZ_Test_Script:GetPointsTable(moho)
    local doc = moho.document
    local frame = moho.frame
	local layer = moho:LayerAsVector(doc:LayerByName('Foot'))
	local mesh = layer:Mesh()
	local shape = mesh:Shape(0)

    local points_table = {}
    local points_sub_table = {}
    table.insert(points_table,points_sub_table)
    for i = 0, shape:CountPoints() - 1 do
        if (i > 0) then
            if mesh:ArePointsAdjacent(shape:GetPoint(i),shape:GetPoint(i-1)) == false then
                points_sub_table = {}
                table.insert(points_table,points_sub_table)
            end
        end
        table.insert(points_sub_table,mesh:Point(shape:GetPoint(i)))
    end

    return points_table
end
It seems work correctly on the test file, but the only problem is, it will create 4 tables, which last one has only one point, do you know how we can fix that?

Re: Get Shape Points

Posted: Sun Aug 11, 2024 2:55 pm
by synthsin75
That's why I mentioned endpoints. You're tables don't seem to be getting the points in the correct table.

Code: Select all

    for i,v in ipairs(points_table) do
		for d,k in ipairs(v) do
			print(i, "    ", d, "    ", tostring(k:IsEndpoint()))
			k.fSelected = k:IsEndpoint()
		end
	end
If you add this code, you can see how the endpoints are being put in the tables.
The first curve is correct, 24 points with no endpoints. But your second curve only shows 3 points with one endpoint, and it's other endpoint is ending up in the errant 4th table.

Re: Get Shape Points

Posted: Sun Aug 11, 2024 4:37 pm
by MehdiZangenehBar
synthsin75 wrote: Sun Aug 11, 2024 2:55 pm That's why I mentioned endpoints. You're tables don't seem to be getting the points in the correct table.

Code: Select all

    for i,v in ipairs(points_table) do
		for d,k in ipairs(v) do
			print(i, "    ", d, "    ", tostring(k:IsEndpoint()))
			k.fSelected = k:IsEndpoint()
		end
	end
If you add this code, you can see how the endpoints are being put in the tables.
The first curve is correct, 24 points with no endpoints. But your second curve only shows 3 points with one endpoint, and it's other endpoint is ending up in the errant 4th table.
So, what the final code should be?

Re: Get Shape Points

Posted: Tue Aug 13, 2024 4:34 pm
by MehdiZangenehBar
This file is imported from old Moho version 9.5 to 14, it seems it has so many internal problem, please someone approve this:
two points are in the same curve, but point:Curve(0) return different curve:
https://drive.google.com/file/d/17490I3 ... drive_link