xirja
![]() |
As already mentioned here, the order of controls gets reset to the default order every time there is an unlinking of the result:
GMM says:
So now we can use Undo/Ctl+Z to get the order back with the same Result connection, but... If I have a custom ordered "Simple filter" and want to make a "Surface" version, I have to manually re-order the controls again?! ![]() _____________________________________________________
http://web.archive.org/web/2021062908...rjadesign/ _____________________________________________________ |
|||||
Posted: April 30, 2014 8:40 am | ||||||
GMM
Moderator
Posts: 3491 |
Yes you have. Any changes in the target component's set of inputs will reset all incoming connections. You can observe the same behavior with Bomber (check-uncheck HDR) or Smudge (check-uncheck Orthogonal). |
|||||
Posted: April 30, 2014 9:10 am | ||||||
xirja
![]() |
So, the feature request:
An option to preserve the custom order of controls when changing the filter from "Simple filter" to "Surface" and vice versa. ![]() _____________________________________________________
http://web.archive.org/web/2021062908...rjadesign/ _____________________________________________________ |
|||||
Posted: April 30, 2014 4:51 pm | ||||||
Rachel Duim
![]() |
Feature request: My 2 cents, a "lock" to keep the custom order of controls so that when you edit anything in FF they don't move around. If you add controls if it's locked, that control is added to the bottom of the list of controls.
Rickster the Forgster Math meets art meets psychedelia. |
|||||
Posted: May 4, 2014 9:00 am | ||||||
xirja
![]() |
At the very least, yes! By default they should be locked in custom mode, as the automatic mode allows for the fallback to the default state. ![]()
Yes, but why is this anything but a mistake? _____________________________________________________
http://web.archive.org/web/2021062908...rjadesign/ _____________________________________________________ |
|||||
Posted: July 14, 2014 3:26 pm | ||||||
Ramlyn
![]() |
I guess that the point is : FF is set to detect only controls that are connected ( directly or not ) to the Result.
That's why, if we build a branch of components but we don't connect it with the Result, no controls of that branch will appear. This also means that, every time that we detach something ( a single control or more ), the program deletes it from the list and "forgets" it. When we connect it again, the program probably detects it as a new control and adds it at the end of the list. The alternative would be to set the program to detect all controls that we add, no matter if they are connected to the Result or not. This would create errors in some old filters. Some filters have controls that are not connected to the Result. The reasons are three : - The maker of the filter forgot to delete them. - The maker of the filter, knowing that they wouldn't appear, simply let them there as a chance to change the filter. - They aren't used as controls, but only as information about a particular area of the filter ( the name of the control is probably something like "Area for circular shape", "Branch to add color", etc. ) Making all controls appearing in the list would bring up these controls too, that can't be used to control the filter. So... I guess it would be necessary to have two ways for FF to handle the controls. "By connection to the Result" as basic ( this way the old filters wouldn't be messed up ) and "not by connection" as alternative. It may be nice. But I'm not a programmer. I have no idea how complex and costly it can be. |
|||||
Posted: July 15, 2014 1:22 am | ||||||
GMM
Moderator
Posts: 3491 |
The key point is "detach". Try re-routing the connection instead of detaching the component completely: if you can manage to keep an active connection while setting up the component tree, the filter controls will not be reset. Finally, when Order of controls was introduced it was meant as a finishing touch to the filter rather than a starting point ![]() |
|||||
Posted: July 15, 2014 8:29 am | ||||||
adz
Posts: 4 |
This will fix the order alphabetical ... its a vbs script for windows. Its ugly but it works
' Call RunFunctions Sub RunFunctions Dim va_array2() if 1=1 then vs_file = "C:\Users\Adam Law\AppData\Roaming\Filter Forge 3\My Filters\AJLDilateColourToAlpha.ffxml" vs_filetext = ReadTextFile(vs_file) 'WScript.Echo("File: " & vs_1) else vs_file = Wscript.Arguments(0) vs_filetext = ReadTextFile(vs_file) 'WScript.Echo("File: " & vs_1) end If va_array1 =GFMatchArray(vs_filetext, "<[^<]*<[^<]*value\-en[^>]*>", true ,true ,true) ReDim va_array2(2, UBound(va_array1)) For count=1 To ubound (va_array1) va_array2(0,count)=count vs_1="id\='[^']*'" vs_1=Replace(vs_1,"'", Chr(34)) va_array2(1,count)= GFMatch(va_array1(count), vs_1, true, true, true) va_array2(2,count)= GFMatch(va_array1(count), "value\-en[^>]*", true, true, true) Next vs_1 = GFMatch(vs_filetext, "<ControlsOrder>[\S\s]*<\/ControlsOrder>", true, true, true) va_array3 = TransposeDim(va_array2) Call sortarray(va_array3, 2) va_array3 = TransposeDim(va_array3) vs_replace= "<ControlsOrder>"+ vbnewline vs_replace= vs_replace+ "<Automatic value='false'/>" + vbnewline vs_replace = Replace(vs_replace,"'", Chr(34)) vs_replace= vs_replace+ ""+ vbnewline For count=1 To ubound (va_array1) vs_replace= vs_replace+ "<Item " + va_array3(1,count) + " order=" + Chr(34) +CStr(count)+Chr(34) +"/>" + vbnewline Next vs_replace= vs_replace+ "" + vbNewLine vs_replace= vs_replace+ "</ControlsOrder>" vs_filetext = Replace(vs_filetext, vs_1, vs_replace) Call WriteTextFile(vs_file +"",vs_filetext) If 1=0 Then I also have XSLT Code ... but you need Altova Community Edition Set objAltovaXML = CreateObject("AltovaXML.Application") Set AltovaXMLXSLT2 = objAltovaXML.XSLT2 AltovaXMLXSLT2.InputXMLFileName=vs_1 AltovaXMLXSLT2.XSLFileName ="C:\Data_Server\Onehub\AAA_Data_OneHub\SV2\Data_VDrive\Data_QDrive\Febooti\FilterForge.xsl" output = AltovaXMLXSLT2.Execute(outputfile) 'outputfile irrelevant Set AltovaXMLXSLT2 =Nothing Set objAltovaXML = Nothing End if End Sub Function ReadTextFile(vs_1) 'Make sure that Febooti does not save unicode which is default if 1=0 then set adb = CreateObject("ADODB.Stream") adb.Open '.Type = adTypeBinary adb.LoadFromFile vs_1 adb.Type = 2 'adTypeText adb.Charset = "ascii" '"utf-8" strText = adb.ReadText(-1) ' adb.Close adb.Close end if Const ForReading = 1 Set objFSO = CreateObject("Scripting.FileSystemObject") 'WScript.Echo( vs_1 & len(vs_1)) Set objFile = objFSO.OpenTextFile(vs_1, ForReading) 'WScript.Echo( "End") ReadTextFile = objFile.ReadAll() 'ReadTextFile = objFile.ReadLine objFile.Close set objFSO =Nothing End Function Sub WriteTextFile(vs_1,vs_2) Set fso = CreateObject("Scripting.FileSystemObject") 'OpenTextFile Parameters:3.'-Filename4.'-The 2 is for writing... 1 is reading and 8 is appending5.'-The "True" is to create if not already there Set fl = fso.OpenTextFile(vs_1, 2, True) fl.Write(vs_2) fl.Close Set fl = Nothing Set fso = Nothing End SUb Sub SDeleteFile(vs_2) 'Turn off error handling On Error Resume Next 'file might not exist 'Create an instance of the FileSystemObject Dim objFSO Set objFSO = CreateObject("Scripting.FileSystemObject") if objfso.fileexists(vs_2) then objFSO.DeleteFile(vs_2) set objFSO = Nothing End Sub Function GFMatch(strString, strPattern, wglobal, wignorecase, wmultiline) Dim RegEx, arrMatches Dim colmatches Dim wmatch Dim Count Set RegEx = New RegExp RegEx.IgnoreCase = wignorecase RegEx.MultiLine = wmultiline RegEx.Global = wglobal RegEx.Pattern = strPattern Set colmatches = RegEx.Execute(strString) Count = 0 For Each wmatch In colmatches Count = Count + 1 If Count = 1 Then GFMatch = wmatch Next End Function Function GFMatchArray(strString, strPattern, wglobal ,wignorecase ,wmultiline) Dim RegEx, arrMatches Dim tmatcharray() Set RegEx = New RegExp RegEx.IgnoreCase = wignorecase RegEx.Global = wglobal RegEx.MultiLine = wmultiline RegEx.Pattern = strPattern Set colmatches = RegEx.Execute(strString) xdim = colmatches.Count ReDim Preserve tmatcharray(xdim) Count = 0 For Each wmatch In colmatches Count = Count + 1 tmatcharray(Count) = wmatch.Value Next GFMatchArray = tmatcharray End Function Sub sortarray(arrayname, sortcolumn1) ' sortcolumn1 = 0 'Optional wnumeric As String = "numericstrings" For i = LBound(arrayname, 1) To UBound(arrayname, 1) - 1 For j = LBound(arrayname, 1) To UBound(arrayname, 1) - 1 If wnumeric = "numericstrings" Then Condition1 = CDbl(arrayname(j, sortcolumn1)) > CDbl(arrayname(j + 1, sortcolumn1)) Else Condition1 = (arrayname(j, sortcolumn1)) > (arrayname(j + 1, sortcolumn1)) End If If Condition1 Then For Y = LBound(arrayname, 2) To UBound(arrayname, 2) t = arrayname(j, Y) arrayname(j, Y) = arrayname(j + 1, Y) arrayname(j + 1, Y) = t Next End If Next Next End Sub Function TransposeDim(v) ' Custom Function to Transpose a 0-based array (v) Xupper = UBound(v, 2) Yupper = UBound(v, 1) ReDim tempArray(Xupper, Yupper) For X = 0 To Xupper For Y = 0 To Yupper tempArray(X, Y) = v(Y, X) Next Next TransposeDim = tempArray End Function |
|||||
Posted: September 24, 2014 2:21 am | ||||||
adz
Posts: 4 |
Or you can use this xslt transform
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output indent="yes"/> <xsl:strip-space elements="*"/> <!--Identity Transform.--> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <xsl:template match="ControlsOrder/Items"> <xsl:for-each select="//Name/@value-en"> <xsl:sort select="." order="ascending"/> <Item> <xsl:attribute name="id"> <xsl:value-of select="../. ./@id"/> </xsl:attribute> <xsl:attribute name="order"> <xsl:value-of select="position()"/> </xsl:attribute> </xsl:for-each> </Items> </xsl:template> </xsl:stylesheet> |
|||||
Posted: September 27, 2014 12:34 am | ||||||
adz
Posts: 4 |
Or you can use this
(nb there is no space between the ". ." above. The post is mangling it |
|||||
Posted: September 27, 2014 12:35 am | ||||||
SpaceRay
![]() |
I have seen that now is available FF 4.011, and from the answer above is not clear if it is already available or not. Please, is this already working and included in 4.011 or it is going to be included in another future update? I think this is would be very useful and helpful to have
YES!! This is one of the main reasons why this would be really helpful as because changing the simple to surface will rese t ALL the controls and it is really a pain and very time consuming to re-order again if you have many controls |
|||||
Posted: September 27, 2014 5:35 am | ||||||
Ramlyn
![]() |
We started the war of Controls. Ha! Ha!
Let's say the point. We have two different lines among filters creators : - Somebody believes in "click and go" filters. Filters with no more than 10 controls, generally simple and fast. They clearly have no interest about the Controls order trouble, because their filters probably don't even need the "Custom" option. - Other filter makers prefer to have more Controls in their filters. This doesn't necessarily make the filter slow or huge. It simply gives in the hands of the user a filter with a wide range of interactions and customization. It is clear that the makers of this kind of filters are interested that the order of controls is not messed up every time that they pass from Simple Filter to Surface. It takes a lot of time to reorder 50-60 controls ( and the Automatic way is completely useless with many controls. It doesn't even put them in alphabetical order. ), and it is not something that we can avoid to do. There is more. It would be very useful if there was a bit more space for the Controls name. In my case I have filters using the same Component several times. Because it is the same component, also the Controls will have the same functions, but in completely different areas of the filter. Sometimes I'm obliged to write cryptic names like "Rotation P1" or "Mode S4", because there is no enough space for writing a more explicative name. Doing this doesn't mean to "forget the aim of FF", like it was said in other topics. Nobody wants to change Filter Forge to a new Photoshop. We only want to do good filters. Filters that may be good for who simply wants to finish all with one click, but also for who needs to customize and adapt the result to different kinds of pictures, effects, textures. |
|||||
Posted: September 27, 2014 2:45 pm | ||||||
Skybase
![]() |
A bit more naming space would actually be a nice addition.
![]() Oh filterforge... drowning in suggestions ![]() Adz, nice work! ---My views below here--- I think there are only a handful of people making epic filters with 50+ controls anyway. A good 95% or so of the filters that get uploaded typically have <20 controls. But yeah, having some ability to preserve it is nice. So I'll wait for the update. In the workflow of things, I typically don't bother organizing a filter until the very very end before the submission, so it never bothered me as much. Also, just a side note since the thread's got the topic rolling, if you look at other 3rd-party filters for Photoshop, they typically don't have tons of controls. While a lot of it is compensated through a GUI, the point here is that in terms of usability, my bet is that users typically don't even go tweaking more than 15 controls per interface. I think FilterForge users are more interested in results than control. Personally, I don't think its a bad idea having some filters with a ton of controls, it's just that I just wish people would take more time rigging it properly so it works under any circumstance, and also consider their users if it's intended to be public. I'm fairly certain doing that makes a good filter even if it does exceed certain bounds. Back on topic, so yes! Please do give this a fix! |
|||||
Posted: September 28, 2014 3:54 am |
Filter Forge has a thriving, vibrant, knowledgeable user community. Feel free to join us and have fun!
33,712 Registered Users
+18 new in 30 days!
153,537 Posts
+6 new in 7 days!
15,348 Topics
+72 new in year!
27 unregistered users.