Krita Source Code Documentation
Loading...
Searching...
No Matches
perchannel_crosschannel_filter_test.py
Go to the documentation of this file.
2# SPDX-FileCopyrightText: 2024 Grum 999 <grum999@grum.fr>
3#
4# SPDX-License-Identifier: GPL-3.0-or-later
5#
6# This script:
7# - Create documents with a filter node ('perchannel', 'crosschannel')
8# - Check created document
9# - Modify document filter
10# - Check modified document
11
12import tempfile
13
14from krita import *
15
16
17def checkResult(name, value, ref):
18 if value == ref:
19 returned = True
20 isOk = "OK"
21 else:
22 returned = False
23 isOk = "INVALID"
24
25 print(f"Check {name}: '{value}' == '{ref}' --> {isOk}")
26 return returned
27
28
29def createDocument(fileName, filterName, curves):
30 doc = Krita.instance().createDocument(500, 500, "TestFilter", "RGBA", "U8", "", 72.0)
31 #Krita.instance().activeWindow().addView(doc)
32
33 filter = Krita.instance().filter(filterName)
34 selection = Selection()
35 selection.selectAll(doc.rootNode(), 255)
36 node = doc.createFilterLayer("TestFilter", filter, selection)
37 doc.rootNode().addChildNode(node, None)
38 # here need to retrieve filter from layer, using the one (filter 'filter' here) that has been created does nothing
39 filter2 = node.filter()
40 cfg = filter2.configuration()
41 for curveId, curveValue in curves.items():
42 cfg.setProperty(curveId, curveValue)
43 doc.refreshProjection()
44 doc.saveAs(fileName)
45 doc.close()
46
47
48def modifyDocument(fileName, curves):
49 doc = Krita.instance().openDocument(fileName)
50 #Krita.instance().activeWindow().addView(doc)
51
52 nodes = doc.rootNode().childNodes()
53
54 if nodes[1].name() == "TestFilter":
55 returned = True
56
57 filter = nodes[1].filter()
58 # get filter configuration
59 cfg = filter.configuration()
60 for curveId, curveValue in curves.items():
61 cfg.setProperty(curveId, curveValue)
62
63 doc.refreshProjection()
64 doc.save()
65 doc.close()
66
67
68def checkDocument(fileName, curves):
69 # open testing document and check if filter properties are OK
70 returned = False
71
72 doc = Krita.instance().openDocument(fileName)
73 #Krita.instance().activeWindow().addView(doc)
74
75 nodes = doc.rootNode().childNodes()
76
77 if nodes[1].name() == "TestFilter":
78 returned = True
79
80 filter = nodes[1].filter()
81 # get filter configuration
82 cfg = filter.configuration()
83 for curveId, curveValue in curves.items():
84 if not checkResult(curveId, cfg.property(curveId), curveValue):
85 returned = False
86
87 doc.close()
88
89 return returned
90
91
93 curvesPCC = {'nTransfers': 8,
94 'curve0': '0,0;0.5,1;1,0;',
95 'curve1': '0,0.01;1,0.91;',
96 'curve2': '0,0.02;1,0.92;',
97 'curve3': '0,0.03;1,0.93;',
98 'curve4': '0,0.04;1,0.94;',
99 'curve5': '0,0.05;1,0.95;',
100 'curve6': '0,0.06;1,0.96;',
101 'curve7': '0,0.07;1,0.97;'
102 }
103 curvesPCM = {'nTransfers': 8,
104 'curve0': '0,1;0.5,1;0,9;',
105 'curve1': '0,0.11;1,0.91;',
106 'curve2': '0,0.22;1,0.92;',
107 'curve3': '0,0.33;1,0.93;',
108 'curve4': '0,0.44;1,0.94;',
109 'curve5': '0,0.55;1,0.95;',
110 'curve6': '0,0.66;1,0.96;',
111 'curve7': '0,0.77;1,0.97;'
112 }
113
114 curvesCCC = {'nTransfers': 8,
115 'curve0': '0,0;0.5,1;1,0;',
116 'curve1': '0,0.01;1,0.91;',
117 'curve2': '0,0.02;1,0.92;',
118 'curve3': '0,0.03;1,0.93;',
119 'curve4': '0,0.04;1,0.94;',
120 'curve5': '0,0.05;1,0.95;',
121 'curve6': '0,0.06;1,0.96;',
122 'curve7': '0,0.07;1,0.97;',
123 'driver0': 0,
124 'driver1': 1,
125 'driver2': 2,
126 'driver3': 3,
127 'driver4': 4,
128 'driver5': 5,
129 'driver6': 6,
130 'driver7': 7
131 }
132 curvesCCM = {'nTransfers': 8,
133 'curve0': '0,1;0.5,1;0,9;',
134 'curve1': '0,0.11;1,0.91;',
135 'curve2': '0,0.22;1,0.92;',
136 'curve3': '0,0.33;1,0.93;',
137 'curve4': '0,0.44;1,0.94;',
138 'curve5': '0,0.55;1,0.95;',
139 'curve6': '0,0.66;1,0.96;',
140 'curve7': '0,0.77;1,0.97;',
141 'driver0': 7,
142 'driver1': 6,
143 'driver2': 5,
144 'driver3': 4,
145 'driver4': 3,
146 'driver5': 2,
147 'driver6': 1,
148 'driver7': 0
149 }
150
151
152 with tempfile.TemporaryDirectory() as tmpDirname:
153 returned = True
154
155 print("-- Testing 'perchannel' filter")
156 tmpFileNamePC = os.path.join(tmpDirname, 'testing_filter_pc.kra')
157 createDocument(tmpFileNamePC, "perchannel", curvesPCC)
158 returned &= checkDocument(tmpFileNamePC, curvesPCC)
159 modifyDocument(tmpFileNamePC, curvesPCM)
160 returned &= checkDocument(tmpFileNamePC, curvesPCM)
161
162 print("-- Testing 'crosschannel' filter")
163 tmpFileNameCC = os.path.join(tmpDirname, 'testing_filter_cc.kra')
164 createDocument(tmpFileNameCC, "crosschannel", curvesCCC)
165 returned &= checkDocument(tmpFileNameCC, curvesCCC)
166 modifyDocument(tmpFileNameCC, curvesCCM)
167 returned &= checkDocument(tmpFileNameCC, curvesCCM)
168
169 if returned:
170 print('Global check: OK')
171 else:
172 print('Global check: INVALID')
static Krita * instance()
instance retrieve the singleton instance of the Application object.
Definition Krita.cpp:390