Ellipse custom Control HELP!

User avatar
Millolab
Fusioneer
Posts: 69
Joined: Wed Oct 24, 2018 6:26 am
Been thanked: 7 times

Ellipse custom Control HELP!

#1

Post by Millolab » Mon Jul 01, 2019 8:08 am

guys, I'm trying to figure out how to set the EllipseControl up in the custom controls.
it seems I can't have it to work properly..
been searching here but, no luck...
https://www.steakunderwater.com/VFXPedi ... mage_Input

Any hint?

User avatar
Midgardsormr
Fusionator
Posts: 1215
Joined: Wed Nov 26, 2014 8:04 pm
Answers: 3
Location: Los Angeles, CA, USA
Been thanked: 95 times
Contact:

Re: Ellipse custom Control HELP!

#2

Post by Midgardsormr » Mon Jul 01, 2019 8:48 am

The Ellipse control has several pieces that have to be linked together for it to work, similar to a ColorControl. You need a Center, an Angle, and separate controls for Width and Height with the same PC_ControlGroup value. If you're using the Edit Controls dialogue, set the Center up first, followed by the Angle, because you'll need those to exist in order to connect the Ellipse controls to them. Here's an example:

Code: Select all

{
	Tools = ordered() {
		Background1 = Background {
			CtrlWZoom = false,
			Inputs = {
				Width = Input { Value = 1920, },
				Height = Input { Value = 1080, },
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
				ellipseAngle = Input { Value = -28.3011061583974, },
				ellipseWidth = Input { Value = 0.5625, },
				ellipseHeight = Input { Value = 0.4114618714454, },
				Center = Input { Value = { 0.5171875, 0.455555555555556 }, },
			},
			ViewInfo = OperatorInfo { Pos = { 251, 291 } },
			UserControls = ordered() {
				Center = {
					LINKS_Name = "Center",
					LINKID_DataType = "Point",
					INPID_InputControl = "OffsetControl",
					INPID_PreviewControl = "CrosshairControl",
					CHC_Style = "NormalCross",
					INP_Passive = true,
				},
				ellipseAngle = {
					LINKS_Name = "ellipseAngle",
					LINKID_DataType = "Number",
					INPID_InputControl = "ScrewControl",
					INPID_PreviewControl = "AngleControl",
					INP_Integer = false,
					ACID_Center = "Center",
				},
				ellipseWidth = {
					LINKS_Name = "ellipseWidth",
					LINKID_DataType = "Number",
					INPID_InputControl = "SliderControl",
					INPID_PreviewControl = "EllipseControl",
					INP_Integer = false,
					PC_ControlGroup = 1,
					PC_ControlID = 0,
					ECID_Center = "Center",
					ECID_Angle = "ellipseAngle",
				},
				ellipseHeight = {
					LINKS_Name = "ellipseHeight",
					LINKID_DataType = "Number",
					INPID_InputControl = "SliderControl",
					INPID_PreviewControl = "EllipseControl",
					INP_Integer = false,
					PC_ControlGroup = 1,
					PC_ControlID = 1,
					ECID_Center = "Center",
					ECID_Angle = "ellipseAngle",
				}
			}
		}
	},
	ActiveTool = "Background1"
}
Rectangle controls work the same way, of course.

User avatar
Millolab
Fusioneer
Posts: 69
Joined: Wed Oct 24, 2018 6:26 am
Been thanked: 7 times

Re: Ellipse custom Control HELP!

#3

Post by Millolab » Mon Jul 01, 2019 9:08 am

Midgardsormr wrote:
Mon Jul 01, 2019 8:48 am
The Ellipse control has several pieces that have to be linked together for it to work, similar to a ColorControl. You need a Center, an Angle, and separate controls for Width and Height with the same PC_ControlGroup value. If you're using the Edit Controls dialogue, set the Center up first, followed by the Angle, because you'll need those to exist in order to connect the Ellipse controls to them. Here's an example:

Rectangle controls work the same way, of course.
Thanks Bryan. I was able to figure it out meanwhile somehow.
here it works even with no angle control

E.

User avatar
Millolab
Fusioneer
Posts: 69
Joined: Wed Oct 24, 2018 6:26 am
Been thanked: 7 times

Re: Ellipse custom Control HELP!

#4

Post by Millolab » Mon Jul 01, 2019 11:25 am

now the question is... what if I want to use the ellipse control on a macro?

User avatar
Midgardsormr
Fusionator
Posts: 1215
Joined: Wed Nov 26, 2014 8:04 pm
Answers: 3
Location: Los Angeles, CA, USA
Been thanked: 95 times
Contact:

Re: Ellipse custom Control HELP!

#5

Post by Midgardsormr » Mon Jul 01, 2019 11:44 am

Well, it depends on how you're building the macro. You can add the User Controls on a node internal to the macro, then use the Create Macro dialogue to instance them onto the tool, or you can go the power-user route of grouping the nodes, adding the User Controls to the group, then expression-linking interior controls to the Group's.

Have you gone through the Macro Building Essentials thread? viewtopic.php?f=6&t=1581&p=19631

User avatar
Millolab
Fusioneer
Posts: 69
Joined: Wed Oct 24, 2018 6:26 am
Been thanked: 7 times

Re: Ellipse custom Control HELP!

#6

Post by Millolab » Mon Jul 01, 2019 12:04 pm

Midgardsormr wrote:
Mon Jul 01, 2019 11:44 am
Well, it depends on how you're building the macro. You can add the User Controls on a node internal to the macro, then use the Create Macro dialogue to instance them onto the tool, or you can go the power-user route of grouping the nodes, adding the User Controls to the group, then expression-linking interior controls to the Group's.

Have you gone through the Macro Building Essentials thread? viewtopic.php?f=6&t=1581&p=19631
yes, I did!
I did exactly what you suggest but it breaks completely.
I think sharing the comp is the only way.
basically it's juts a spot remover tool. The same we have in the paint node, but with a frequency separation twist. Nice thing to have imho.
the controls are located in the "controls" node.
I wanted to make a macro out of this but for some reason it doesn't work out.

here both the comp and the macro I made (just put together in fusion).
You do not have the required permissions to view the files attached to this post.

User avatar
Millolab
Fusioneer
Posts: 69
Joined: Wed Oct 24, 2018 6:26 am
Been thanked: 7 times

Re: Ellipse custom Control HELP!

#7

Post by Millolab » Mon Sep 23, 2019 6:39 am

I'm back here to ask for some help.
i set up a group to have this tool usable... but I can't really figure out why the macro (attached) doesn't work correctly. The ellipse controls do not do what they're supposed to.

Here a video that show how the tool is supposed to work... Some idea?

You do not have the required permissions to view the files attached to this post.

User avatar
Midgardsormr
Fusionator
Posts: 1215
Joined: Wed Nov 26, 2014 8:04 pm
Answers: 3
Location: Los Angeles, CA, USA
Been thanked: 95 times
Contact:

Re: Ellipse custom Control HELP!

#8

Post by Midgardsormr » Mon Sep 23, 2019 7:20 am

How peculiar. It seems to have something to do with trying to instance the EllipseControls onto the group. I copied the UserControls from your Controls node to the group itself, and it works as expected.

edit: ... Scratch that. It works as expected in Fusion 9, but for some reason the Destination point widget is locked in 16.
edit2: Okay, it seems the Ellipse's Center control (which is expression-linked and thus immovable) had priority over the Destination widget. It might be possible to override the Ellipse's own Center to make it invisible.

Code: Select all

{
	Tools = ordered() {
		SpotRemover = GroupOperator {
			CtrlWZoom = false,
			NameSet = true,
			Inputs = ordered() {
				Source = Input { Value = { 0.118673442613895, 0.864902506963788 }, },
				Destination = Input { Value = { 0.248334783349214, 0.756267409470752 }, },
				Input1 = InstanceInput {
					SourceOp = "PipeRouter1_1_2_1",
					Source = "Input",
				}
			},
			Outputs = {
				Output1 = InstanceOutput {
					SourceOp = "CustomTool1",
					Source = "Output",
				}
			},
			ViewInfo = GroupInfo {
				Pos = { 2359, -283 },
				Flags = {
					Expanded = true,
					AllowPan = false,
					AutoSnap = true,
					RemoveRouters = true
				},
				Size = { 671.245, 232.086, 335.622, 22 },
				Direction = "Horizontal",
				PipeStyle = "Direct",
				Scale = 1,
				Offset = { -1336.4, 349.29 }
			},
			Tools = ordered() {
				CustomTool1 = Custom {
					NameSet = true,
					Inputs = {
						LUTIn1 = Input {
							SourceOp = "CustomTool1_1_2_1LUTIn1",
							Source = "Value",
						},
						LUTIn2 = Input {
							SourceOp = "CustomTool1_1_2_1LUTIn2",
							Source = "Value",
						},
						LUTIn3 = Input {
							SourceOp = "CustomTool1_1_2_1LUTIn3",
							Source = "Value",
						},
						LUTIn4 = Input {
							SourceOp = "CustomTool1_1_2_1LUTIn4",
							Source = "Value",
						},
						RedExpression = Input { Value = "c1+2*c2-1", },
						GreenExpression = Input { Value = "c1+2*c2-1", },
						BlueExpression = Input { Value = "c1+2*c2-1", },
						Image1 = Input {
							SourceOp = "Blur2",
							Source = "Output",
						},
						Image2 = Input {
							SourceOp = "BrightnessContrast1_1_2_1",
							Source = "Output",
						},
					},
					ViewInfo = OperatorInfo { Pos = { 1609.02, -205.165 } },
				},
				BrightnessContrast1_1_2_1 = BrightnessContrast {
					Inputs = {
						Lift = Input { Value = 0.5, },
						ClipBlack = Input { Value = 1, },
						ClipWhite = Input { Value = 1, },
						PreDividePostMultiply = Input { Value = 1, },
						Input = Input {
							SourceOp = "Paint1",
							Source = "Output",
						},
					},
					ViewInfo = OperatorInfo { Pos = { 1609.02, -270.167 } },
				},
				Blur2 = Blur {
					NameSet = true,
					Inputs = {
						Filter = Input { Value = FuID { "Box" }, },
						XBlurSize = Input {
							Value = 10,
							Expression = "Blur1.XBlurSize",
						},
						Input = Input {
							SourceOp = "Instance_Blur1",
							Source = "Output",
						},
						EffectMask = Input {
							SourceOp = "Ellipse",
							Source = "Mask",
						}
					},
					ViewInfo = OperatorInfo { Pos = { 1451.67, -205.165 } },
				},
				Ellipse = EllipseMask {
					NameSet = true,
					Inputs = {
						SoftEdge = Input { Expression = "SpotRemover.Softness*2", },
						MaskWidth = Input { Value = 1920, },
						MaskHeight = Input { Value = 1080, },
						PixelAspect = Input { Value = { 1, 1 }, },
						ClippingMode = Input { Value = FuID { "None" }, },
						Center = Input {
							Value = { 0.248334783349214, 0.756267409470752 },
							Expression = "SpotRemover.Destination",
						},
						Width = Input {
							Value = 0.0700000002980232,
							Expression = "SpotRemover.Width",
						},
						Height = Input {
							Value = 0.0700000002980232,
							Expression = "SpotRemover.Height",
						},
					},
					ViewInfo = OperatorInfo { Pos = { 1306.12, -169.567 } },
				},
				Paint1 = Paint {
					NameSet = true,
					Inputs = {
						Input = Input {
							SourceOp = "ChannelBooleans1",
							Source = "Output",
						},
						Paint = Input {
							SourceOp = "CopyEllipse1_2_1",
							Source = "Out",
						},
					},
					ViewInfo = OperatorInfo { Pos = { 1447.02, -270.167 } },
				},
				PipeRouter1_1_2_1 = PipeRouter {
					CtrlWShown = false,
					ViewInfo = PipeRouterInfo { Pos = { 1167.5, -205.165 } },
				},
				Instance_Blur1 = Blur {
					NameSet = true,
					SourceOp = "Blur1",
					Inputs = {
						XBlurSize = Input {
							Value = 10,
							Expression = "SpotRemover.PreBlur*2"
						},
						Input = Input {
							SourceOp = "PipeRouter1_1_2_1",
							Source = "Output",
						},
						StartEndRenderScripts = Input { },
						EffectMask = Input { }
					},
					ViewInfo = OperatorInfo { Pos = { 1308, -205.165 } },
				},
				ChannelBooleans1 = ChannelBoolean {
					NameSet = true,
					Inputs = {
						Operation = Input { Value = 2, },
						ToAlpha = Input { Value = 4, },
						Background = Input {
							SourceOp = "PipeRouter1_1_2_1",
							Source = "Output",
						},
						Foreground = Input {
							SourceOp = "Blur1",
							Source = "Output",
						},
					},
					ViewInfo = OperatorInfo { Pos = { 1308.02, -270.167 } },
				},
				Blur1 = Blur {
					NameSet = true,
					Inputs = {
						XBlurSize = Input {
							Value = 10,
							Expression = "SpotRemover.PreBlur*2",
						},
						Input = Input {
							SourceOp = "PipeRouter1_1_2_1",
							Source = "Output",
						},
					},
					ViewInfo = OperatorInfo { Pos = { 1308.02, -339.337 } },
				}
			},
			UserControls = ordered() {
				SourceControls = {
					INP_MaxAllowed = 1000000,
					INP_Integer = false,
					LBLC_DropDownButton = true,
					INPID_InputControl = "LabelControl",
					LBLC_NumInputs = 3,
					INP_MaxScale = 1,
					INP_MinScale = 0,
					INP_MinAllowed = -1000000,
					LINKID_DataType = "Number",
					LBLC_NestLevel = 1,
					ICS_ControlPage = "Controls",
					LINKS_Name = "Source Controls"
				},
				Source = {
					INPID_PreviewControl = "CrosshairControl",
					LINKID_DataType = "Point",
					ICS_ControlPage = "Controls",
					INPID_InputControl = "OffsetControl",
					CHC_Style = "DiagonalCross",
					LINKS_Name = "Source"
				},
				W = {
					INP_MaxAllowed = 1000000,
					INP_Integer = false,
					INPID_InputControl = "SliderControl",
					ICS_ControlPage = "Controls",
					INP_MaxScale = 1,
					INP_Default = 0.0700000002980232,
					INP_MinScale = 0,
					INPID_PreviewControl = "EllipseControl",
					ECID_Center = "Source",
					LINKID_DataType = "Number",
					PC_ControlGroup = 1,
					PC_ControlID = 0,
					INP_MinAllowed = -1000000,
					LINKS_Name = "W"
				},
				H = {
					INP_Integer = false,
					INPID_InputControl = "SliderControl",
					INP_MaxScale = 1,
					INP_Default = 0.0700000002980232,
					ICS_ControlPage = "Controls",
					INPID_PreviewControl = "EllipseControl",
					ECID_Center = "Source",
					LINKID_DataType = "Number",
					PC_ControlGroup = 1,
					INP_MinScale = 0,
					PC_ControlID = 1,
					LINKS_Name = "H"
				},
				DestinationControls = {
					LINKID_DataType = "Number",
					INP_Integer = false,
					LBLC_DropDownButton = true,
					ICS_ControlPage = "Controls",
					LBLC_NumInputs = 3,
					LBLC_NestLevel = 2,
					INPID_InputControl = "LabelControl",
					LINKS_Name = "Destination Controls"
				},
				Destination = {
					INPID_PreviewControl = "CrosshairControl",
					LINKID_DataType = "Point",
					ICS_ControlPage = "Controls",
					INPID_InputControl = "OffsetControl",
					CHC_Style = "NormalCross",
					LINKS_Name = "Destination"
				},
				Angle = {
					INP_MaxAllowed = 1000000,
					INP_Integer = false,
					INPID_InputControl = "ScrewControl",
					INP_MaxScale = 90,
					INP_Default = 0,
					INPID_PreviewControl = "AngleControl",
					INP_MinAllowed = -1000000,
					LINKID_DataType = "Number",
					ICS_ControlPage = "Controls",
					INP_MinScale = 0,
					ACID_Center = "Destination",
					LINKS_Name = "Angle"
				},
				Width = {
					INP_MaxAllowed = 1000000,
					INP_Integer = false,
					INPID_InputControl = "SliderControl",
					ICS_ControlPage = "Controls",
					INP_MinScale = 0,
					INP_MaxScale = 1,
					INP_Default = 0.0700000002980232,
					PC_ControlID = 0,
					ECID_Angle = "Angle",
					ECID_Center = "Destination",
					LINKID_DataType = "Number",
					PC_ControlGroup = 2,
					INP_MinAllowed = -1000000,
					INPID_PreviewControl = "EllipseControl",
					LINKS_Name = "Width"
				},
				Height = {
					INP_Integer = false,
					INPID_InputControl = "SliderControl",
					ICS_ControlPage = "Controls",
					INP_MaxScale = 1,
					INP_Default = 0.0700000002980232,
					INP_MinScale = 0,
					ECID_Angle = "Angle",
					ECID_Center = "Destination",
					LINKID_DataType = "Number",
					PC_ControlGroup = 2,
					PC_ControlID = 1,
					INPID_PreviewControl = "EllipseControl",
					LINKS_Name = "Height"
				},
				Size = {
					INP_MaxAllowed = 1000000,
					INP_Integer = false,
					INPID_InputControl = "SliderControl",
					INP_MaxScale = 5,
					INP_Default = 1,
					INP_MinScale = 0.00100000004749745,
					INP_MinAllowed = -1000000,
					LINKID_DataType = "Number",
					ICS_ControlPage = "Controls",
					ICD_Center = 1,
					LINKS_Name = "Size"
				},
				Softness = {
					INP_MaxAllowed = 1000000,
					INP_Integer = false,
					INPID_InputControl = "SliderControl",
					INP_MaxScale = 0.0199999995529652,
					INP_Default = 0,
					INP_MinScale = 0,
					INP_MinAllowed = -1000000,
					LINKID_DataType = "Number",
					ICS_ControlPage = "Controls",
					LINKS_Name = "Softness"
				},
				Opacity = {
					LINKS_Name = "Opacity",
					INP_Integer = false,
					LINKID_DataType = "Number",
					ICS_ControlPage = "Controls",
					INPID_InputControl = "SliderControl",
					INP_MinScale = 0,
					INP_MaxScale = 1,
					INP_Default = 1
				},
				PreBlur = {
					LINKS_Name = "Pre Blur",
					INP_Integer = false,
					LINKID_DataType = "Number",
					ICS_ControlPage = "Controls",
					INPID_InputControl = "SliderControl",
					INP_MinScale = 1,
					INP_MaxScale = 100,
					INP_Default = 5
				}
			}
		},
		CustomTool1_1_2_1LUTIn1 = LUTBezier {
			KeyColorSplines = {
				[0] = {
					[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
					[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
				}
			},
			SplineColor = { Red = 204, Green = 0, Blue = 0 },
			CtrlWShown = false,
			NameSet = true,
		},
		CustomTool1_1_2_1LUTIn2 = LUTBezier {
			KeyColorSplines = {
				[0] = {
					[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
					[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
				}
			},
			SplineColor = { Red = 0, Green = 204, Blue = 0 },
			CtrlWShown = false,
			NameSet = true,
		},
		CustomTool1_1_2_1LUTIn3 = LUTBezier {
			KeyColorSplines = {
				[0] = {
					[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
					[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
				}
			},
			SplineColor = { Red = 0, Green = 0, Blue = 204 },
			CtrlWShown = false,
			NameSet = true,
		},
		CustomTool1_1_2_1LUTIn4 = LUTBezier {
			KeyColorSplines = {
				[0] = {
					[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
					[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
				}
			},
			SplineColor = { Red = 204, Green = 204, Blue = 204 },
			CtrlWShown = false,
			NameSet = true,
		},
		CopyEllipse1_2_1 = CopyEllipse {
			IsThreaded = false,
			Brushes = {
			},
			ApplyModes = { "PaintApplyStamp" },
			CtrlWZoom = false,
			Inputs = {
				Center = Input {
					Value = { 0.248334783349214, 0.756267409470752 },
					Expression = "SpotRemover.Destination",
				},
				Source = Input {
					Value = { 0.118673442613895, 0.864902506963788 },
					Expression = "SpotRemover.Source",
				},
				Width = Input {
					Value = 0.0350000001490116,
					Expression = "SpotRemover.Width/2",
				},
				Height = Input {
					Value = 0.0350000001490116,
					Expression = "SpotRemover.Height/2",
				},
				Angle = Input { Expression = "SpotRemover.Angle", },
				Size = Input { Expression = "SpotRemover.Size", },
				Softness = Input { Expression = "SpotRemover.Softness", },
				Opacity = Input { Expression = "SpotRemover.Opacity", },
				ShowSource = Input { Value = 1, },
				ApplyMode = Input { Value = FuID { "PaintApplyStamp" }, },
			},
		}
	},
	ActiveTool = "SpotRemover"
}
Also, you can get the nests to work with Instanced Inputs, but you have to also instance the LabelControl that holds the nest. It's not necessary with the revised macro above since the labels are now on the Group, but you might find that useful in the future.

The disadvantage to doing things this way is that UserControls on a group don't show up in the Spline and Timeline Views.

User avatar
Millolab
Fusioneer
Posts: 69
Joined: Wed Oct 24, 2018 6:26 am
Been thanked: 7 times

Re: Ellipse custom Control HELP!

#9

Post by Millolab » Mon Sep 23, 2019 7:49 am

Midgardsormr wrote:
Mon Sep 23, 2019 7:20 am
How peculiar. It seems to have something to do with trying to instance the EllipseControls onto the group. I copied the UserControls from your Controls node to the group itself, and it works as expected.

edit: ... Scratch that. It works as expected in Fusion 9, but for some reason the Destination point widget is locked in 16.
edit2: Okay, it seems the Ellipse's Center control (which is expression-linked and thus immovable) had priority over the Destination widget. It might be possible to override the Ellipse's own Center to make it invisible.

Code: Select all

{
	Tools = ordered() {
		SpotRemover = GroupOperator {
			CtrlWZoom = false,
			NameSet = true,
			Inputs = ordered() {
				Source = Input { Value = { 0.118673442613895, 0.864902506963788 }, },
				Destination = Input { Value = { 0.248334783349214, 0.756267409470752 }, },
				Input1 = InstanceInput {
					SourceOp = "PipeRouter1_1_2_1",
					Source = "Input",
				}
			},
			Outputs = {
				Output1 = InstanceOutput {
					SourceOp = "CustomTool1",
					Source = "Output",
				}
			},
			ViewInfo = GroupInfo {
				Pos = { 2359, -283 },
				Flags = {
					Expanded = true,
					AllowPan = false,
					AutoSnap = true,
					RemoveRouters = true
				},
				Size = { 671.245, 232.086, 335.622, 22 },
				Direction = "Horizontal",
				PipeStyle = "Direct",
				Scale = 1,
				Offset = { -1336.4, 349.29 }
			},
			Tools = ordered() {
				CustomTool1 = Custom {
					NameSet = true,
					Inputs = {
						LUTIn1 = Input {
							SourceOp = "CustomTool1_1_2_1LUTIn1",
							Source = "Value",
						},
						LUTIn2 = Input {
							SourceOp = "CustomTool1_1_2_1LUTIn2",
							Source = "Value",
						},
						LUTIn3 = Input {
							SourceOp = "CustomTool1_1_2_1LUTIn3",
							Source = "Value",
						},
						LUTIn4 = Input {
							SourceOp = "CustomTool1_1_2_1LUTIn4",
							Source = "Value",
						},
						RedExpression = Input { Value = "c1+2*c2-1", },
						GreenExpression = Input { Value = "c1+2*c2-1", },
						BlueExpression = Input { Value = "c1+2*c2-1", },
						Image1 = Input {
							SourceOp = "Blur2",
							Source = "Output",
						},
						Image2 = Input {
							SourceOp = "BrightnessContrast1_1_2_1",
							Source = "Output",
						},
					},
					ViewInfo = OperatorInfo { Pos = { 1609.02, -205.165 } },
				},
				BrightnessContrast1_1_2_1 = BrightnessContrast {
					Inputs = {
						Lift = Input { Value = 0.5, },
						ClipBlack = Input { Value = 1, },
						ClipWhite = Input { Value = 1, },
						PreDividePostMultiply = Input { Value = 1, },
						Input = Input {
							SourceOp = "Paint1",
							Source = "Output",
						},
					},
					ViewInfo = OperatorInfo { Pos = { 1609.02, -270.167 } },
				},
				Blur2 = Blur {
					NameSet = true,
					Inputs = {
						Filter = Input { Value = FuID { "Box" }, },
						XBlurSize = Input {
							Value = 10,
							Expression = "Blur1.XBlurSize",
						},
						Input = Input {
							SourceOp = "Instance_Blur1",
							Source = "Output",
						},
						EffectMask = Input {
							SourceOp = "Ellipse",
							Source = "Mask",
						}
					},
					ViewInfo = OperatorInfo { Pos = { 1451.67, -205.165 } },
				},
				Ellipse = EllipseMask {
					NameSet = true,
					Inputs = {
						SoftEdge = Input { Expression = "SpotRemover.Softness*2", },
						MaskWidth = Input { Value = 1920, },
						MaskHeight = Input { Value = 1080, },
						PixelAspect = Input { Value = { 1, 1 }, },
						ClippingMode = Input { Value = FuID { "None" }, },
						Center = Input {
							Value = { 0.248334783349214, 0.756267409470752 },
							Expression = "SpotRemover.Destination",
						},
						Width = Input {
							Value = 0.0700000002980232,
							Expression = "SpotRemover.Width",
						},
						Height = Input {
							Value = 0.0700000002980232,
							Expression = "SpotRemover.Height",
						},
					},
					ViewInfo = OperatorInfo { Pos = { 1306.12, -169.567 } },
				},
				Paint1 = Paint {
					NameSet = true,
					Inputs = {
						Input = Input {
							SourceOp = "ChannelBooleans1",
							Source = "Output",
						},
						Paint = Input {
							SourceOp = "CopyEllipse1_2_1",
							Source = "Out",
						},
					},
					ViewInfo = OperatorInfo { Pos = { 1447.02, -270.167 } },
				},
				PipeRouter1_1_2_1 = PipeRouter {
					CtrlWShown = false,
					ViewInfo = PipeRouterInfo { Pos = { 1167.5, -205.165 } },
				},
				Instance_Blur1 = Blur {
					NameSet = true,
					SourceOp = "Blur1",
					Inputs = {
						XBlurSize = Input {
							Value = 10,
							Expression = "SpotRemover.PreBlur*2"
						},
						Input = Input {
							SourceOp = "PipeRouter1_1_2_1",
							Source = "Output",
						},
						StartEndRenderScripts = Input { },
						EffectMask = Input { }
					},
					ViewInfo = OperatorInfo { Pos = { 1308, -205.165 } },
				},
				ChannelBooleans1 = ChannelBoolean {
					NameSet = true,
					Inputs = {
						Operation = Input { Value = 2, },
						ToAlpha = Input { Value = 4, },
						Background = Input {
							SourceOp = "PipeRouter1_1_2_1",
							Source = "Output",
						},
						Foreground = Input {
							SourceOp = "Blur1",
							Source = "Output",
						},
					},
					ViewInfo = OperatorInfo { Pos = { 1308.02, -270.167 } },
				},
				Blur1 = Blur {
					NameSet = true,
					Inputs = {
						XBlurSize = Input {
							Value = 10,
							Expression = "SpotRemover.PreBlur*2",
						},
						Input = Input {
							SourceOp = "PipeRouter1_1_2_1",
							Source = "Output",
						},
					},
					ViewInfo = OperatorInfo { Pos = { 1308.02, -339.337 } },
				}
			},
			UserControls = ordered() {
				SourceControls = {
					INP_MaxAllowed = 1000000,
					INP_Integer = false,
					LBLC_DropDownButton = true,
					INPID_InputControl = "LabelControl",
					LBLC_NumInputs = 3,
					INP_MaxScale = 1,
					INP_MinScale = 0,
					INP_MinAllowed = -1000000,
					LINKID_DataType = "Number",
					LBLC_NestLevel = 1,
					ICS_ControlPage = "Controls",
					LINKS_Name = "Source Controls"
				},
				Source = {
					INPID_PreviewControl = "CrosshairControl",
					LINKID_DataType = "Point",
					ICS_ControlPage = "Controls",
					INPID_InputControl = "OffsetControl",
					CHC_Style = "DiagonalCross",
					LINKS_Name = "Source"
				},
				W = {
					INP_MaxAllowed = 1000000,
					INP_Integer = false,
					INPID_InputControl = "SliderControl",
					ICS_ControlPage = "Controls",
					INP_MaxScale = 1,
					INP_Default = 0.0700000002980232,
					INP_MinScale = 0,
					INPID_PreviewControl = "EllipseControl",
					ECID_Center = "Source",
					LINKID_DataType = "Number",
					PC_ControlGroup = 1,
					PC_ControlID = 0,
					INP_MinAllowed = -1000000,
					LINKS_Name = "W"
				},
				H = {
					INP_Integer = false,
					INPID_InputControl = "SliderControl",
					INP_MaxScale = 1,
					INP_Default = 0.0700000002980232,
					ICS_ControlPage = "Controls",
					INPID_PreviewControl = "EllipseControl",
					ECID_Center = "Source",
					LINKID_DataType = "Number",
					PC_ControlGroup = 1,
					INP_MinScale = 0,
					PC_ControlID = 1,
					LINKS_Name = "H"
				},
				DestinationControls = {
					LINKID_DataType = "Number",
					INP_Integer = false,
					LBLC_DropDownButton = true,
					ICS_ControlPage = "Controls",
					LBLC_NumInputs = 3,
					LBLC_NestLevel = 2,
					INPID_InputControl = "LabelControl",
					LINKS_Name = "Destination Controls"
				},
				Destination = {
					INPID_PreviewControl = "CrosshairControl",
					LINKID_DataType = "Point",
					ICS_ControlPage = "Controls",
					INPID_InputControl = "OffsetControl",
					CHC_Style = "NormalCross",
					LINKS_Name = "Destination"
				},
				Angle = {
					INP_MaxAllowed = 1000000,
					INP_Integer = false,
					INPID_InputControl = "ScrewControl",
					INP_MaxScale = 90,
					INP_Default = 0,
					INPID_PreviewControl = "AngleControl",
					INP_MinAllowed = -1000000,
					LINKID_DataType = "Number",
					ICS_ControlPage = "Controls",
					INP_MinScale = 0,
					ACID_Center = "Destination",
					LINKS_Name = "Angle"
				},
				Width = {
					INP_MaxAllowed = 1000000,
					INP_Integer = false,
					INPID_InputControl = "SliderControl",
					ICS_ControlPage = "Controls",
					INP_MinScale = 0,
					INP_MaxScale = 1,
					INP_Default = 0.0700000002980232,
					PC_ControlID = 0,
					ECID_Angle = "Angle",
					ECID_Center = "Destination",
					LINKID_DataType = "Number",
					PC_ControlGroup = 2,
					INP_MinAllowed = -1000000,
					INPID_PreviewControl = "EllipseControl",
					LINKS_Name = "Width"
				},
				Height = {
					INP_Integer = false,
					INPID_InputControl = "SliderControl",
					ICS_ControlPage = "Controls",
					INP_MaxScale = 1,
					INP_Default = 0.0700000002980232,
					INP_MinScale = 0,
					ECID_Angle = "Angle",
					ECID_Center = "Destination",
					LINKID_DataType = "Number",
					PC_ControlGroup = 2,
					PC_ControlID = 1,
					INPID_PreviewControl = "EllipseControl",
					LINKS_Name = "Height"
				},
				Size = {
					INP_MaxAllowed = 1000000,
					INP_Integer = false,
					INPID_InputControl = "SliderControl",
					INP_MaxScale = 5,
					INP_Default = 1,
					INP_MinScale = 0.00100000004749745,
					INP_MinAllowed = -1000000,
					LINKID_DataType = "Number",
					ICS_ControlPage = "Controls",
					ICD_Center = 1,
					LINKS_Name = "Size"
				},
				Softness = {
					INP_MaxAllowed = 1000000,
					INP_Integer = false,
					INPID_InputControl = "SliderControl",
					INP_MaxScale = 0.0199999995529652,
					INP_Default = 0,
					INP_MinScale = 0,
					INP_MinAllowed = -1000000,
					LINKID_DataType = "Number",
					ICS_ControlPage = "Controls",
					LINKS_Name = "Softness"
				},
				Opacity = {
					LINKS_Name = "Opacity",
					INP_Integer = false,
					LINKID_DataType = "Number",
					ICS_ControlPage = "Controls",
					INPID_InputControl = "SliderControl",
					INP_MinScale = 0,
					INP_MaxScale = 1,
					INP_Default = 1
				},
				PreBlur = {
					LINKS_Name = "Pre Blur",
					INP_Integer = false,
					LINKID_DataType = "Number",
					ICS_ControlPage = "Controls",
					INPID_InputControl = "SliderControl",
					INP_MinScale = 1,
					INP_MaxScale = 100,
					INP_Default = 5
				}
			}
		},
		CustomTool1_1_2_1LUTIn1 = LUTBezier {
			KeyColorSplines = {
				[0] = {
					[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
					[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
				}
			},
			SplineColor = { Red = 204, Green = 0, Blue = 0 },
			CtrlWShown = false,
			NameSet = true,
		},
		CustomTool1_1_2_1LUTIn2 = LUTBezier {
			KeyColorSplines = {
				[0] = {
					[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
					[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
				}
			},
			SplineColor = { Red = 0, Green = 204, Blue = 0 },
			CtrlWShown = false,
			NameSet = true,
		},
		CustomTool1_1_2_1LUTIn3 = LUTBezier {
			KeyColorSplines = {
				[0] = {
					[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
					[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
				}
			},
			SplineColor = { Red = 0, Green = 0, Blue = 204 },
			CtrlWShown = false,
			NameSet = true,
		},
		CustomTool1_1_2_1LUTIn4 = LUTBezier {
			KeyColorSplines = {
				[0] = {
					[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
					[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
				}
			},
			SplineColor = { Red = 204, Green = 204, Blue = 204 },
			CtrlWShown = false,
			NameSet = true,
		},
		CopyEllipse1_2_1 = CopyEllipse {
			IsThreaded = false,
			Brushes = {
			},
			ApplyModes = { "PaintApplyStamp" },
			CtrlWZoom = false,
			Inputs = {
				Center = Input {
					Value = { 0.248334783349214, 0.756267409470752 },
					Expression = "SpotRemover.Destination",
				},
				Source = Input {
					Value = { 0.118673442613895, 0.864902506963788 },
					Expression = "SpotRemover.Source",
				},
				Width = Input {
					Value = 0.0350000001490116,
					Expression = "SpotRemover.Width/2",
				},
				Height = Input {
					Value = 0.0350000001490116,
					Expression = "SpotRemover.Height/2",
				},
				Angle = Input { Expression = "SpotRemover.Angle", },
				Size = Input { Expression = "SpotRemover.Size", },
				Softness = Input { Expression = "SpotRemover.Softness", },
				Opacity = Input { Expression = "SpotRemover.Opacity", },
				ShowSource = Input { Value = 1, },
				ApplyMode = Input { Value = FuID { "PaintApplyStamp" }, },
			},
		}
	},
	ActiveTool = "SpotRemover"
}
Also, you can get the nests to work with Instanced Inputs, but you have to also instance the LabelControl that holds the nest. It's not necessary with the revised macro above since the labels are now on the Group, but you might find that useful in the future.

The disadvantage to doing things this way is that UserControls on a group don't show up in the Spline and Timeline Views.
Thanks Bryan!
I still get the same error I got when I did the macro myself.
I'm on F9, tho. On Mac.
I really can't understand what's going on.

The ellipse controls just are stuck in the center of the image.
You do not have the required permissions to view the files attached to this post.

User avatar
Midgardsormr
Fusionator
Posts: 1215
Joined: Wed Nov 26, 2014 8:04 pm
Answers: 3
Location: Los Angeles, CA, USA
Been thanked: 95 times
Contact:

Re: Ellipse custom Control HELP!

#10

Post by Midgardsormr » Mon Sep 23, 2019 8:32 am

Did you try the Group I pasted above? Does it do the same thing?

User avatar
Millolab
Fusioneer
Posts: 69
Joined: Wed Oct 24, 2018 6:26 am
Been thanked: 7 times

Re: Ellipse custom Control HELP!

#11

Post by Millolab » Mon Sep 23, 2019 9:31 am

Midgardsormr wrote:
Mon Sep 23, 2019 8:32 am
Did you try the Group I pasted above? Does it do the same thing?
:D DOH!
it seems I opened my last version. It works! :)
What did you do? Can you help me understand what I did wrong?

EDIT: only thing it seems I can't get to have both the Heght and Width of the controls linked as before. if I use an expression it freezes the whole thing.

THANS!!!

User avatar
Midgardsormr
Fusionator
Posts: 1215
Joined: Wed Nov 26, 2014 8:04 pm
Answers: 3
Location: Los Angeles, CA, USA
Been thanked: 95 times
Contact:

Re: Ellipse custom Control HELP!

#12

Post by Midgardsormr » Mon Sep 23, 2019 9:50 am

It's not something you did wrong; I think there's a legitimate bug there, although not one that most people would ever run across.

The very first thing I did was to set up an EllipseControl that worked as I expected and compared it to what was in your macro. Since it looked identical, I figured maybe it was a problem with the structure of the macro. I've had trouble with InstanceInput in the past, so that seemed (rightly) like a good place to start.

I opened the macro in Notepad++ and turned it into a group. I deleted all of the InstanceInput entries except for the Image entry. I copied all of that and pasted it back into Fusion. Then I used Edit Controls to put a random single control on the group, just to get the UserControls section set up. I copied the group and pasted it back into Notepad++.

Then I found the Controls node's UserControls section, copied that and pasted it into the Group's UserControls. I copied the whole thing again and pasted into Fusion to verify that the EllipseControls worked. They did, so I replaced all of the references to Controls with the name of the Group, deleted the Controls node and all of the other macros and groups in the comp, and renamed everything so it didn't have _1_2_1 at the end of every node.

As a final step, which I didn't perform, I'd have pasted it back into Notepad++ and set up the rest of the controls that got lost—the depth handling and blend control, and anything else I might have missed. Then I'd have renamed all the inputs, changed it back to a MacroOperator and saved it.