1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
-- File: IFSelect_SignCounter.cdl
-- Created: Mon Nov 7 09:34:18 1994
-- Author: Christian CAILLET
-- <cky@stylox>
---Copyright: Matra Datavision 1994
class SignCounter from IFSelect inherits SignatureList
---Purpose : SignCounter gives the frame to count signatures associated
-- with entities, deducted from them. Ex.: their Dynamic Type.
--
-- It can sort a set of Entities according a signature, i.e. :
-- - list of different values found for this Signature
-- - for each one, count and list of entities
-- Results are returned as a SignatureList, which can be queried
-- on the count (list of strings, count per signature, or list of
-- entities per signature)
--
-- A SignCounter can be filled, either directly from lists, or
-- from the result of a Selection : hence, its content can be
-- automatically recomputed as desired
--
-- SignCounter works by using a Signature in its method AddSign
--
-- Methods can be redefined to, either
-- - directly compute the value without a Signature
-- - compute the value in the context of a Graph
uses CString, Transient, MapOfTransient, HAsciiString from TCollection,
HSequenceOfTransient,
InterfaceModel, Graph, Selection, Signature
is
Create (withmap : Boolean = Standard_True;
withlist : Boolean = Standard_False) returns mutable SignCounter;
---Purpose : Creates a SignCounter, without proper Signature
-- If <withmap> is True (default), added entities are counted
-- only if they are not yet recorded in the map
-- Map control can be set off if the input garantees uniqueness
-- of data
-- <withlist> is transmitted to SignatureList (option to list
-- entities, not only to count them).
Create (matcher : mutable Signature;
withmap : Boolean = Standard_True;
withlist : Boolean = Standard_False) returns mutable SignCounter;
---Purpose : Creates a SignCounter, with a predefined Signature
-- Other arguments as for Create without Signature.
Signature (me) returns mutable Signature;
---Purpose : Returns the Signature used to count entities. It can be null.
SetMap (me : mutable; withmap : Boolean);
---Purpose : Changes the control status. The map is not cleared, simply
-- its use changes
AddEntity (me : mutable; ent : Transient; model : InterfaceModel)
returns Boolean is virtual;
---Purpose : Adds an entity by considering its signature, which is given by
-- call to method AddSign
-- Returns True if added, False if already in the map (and
-- map control status set)
AddSign (me : mutable; ent : Transient; model : InterfaceModel)
is virtual;
---Purpose : Adds an entity (already filtered by Map) with its signature.
-- This signature can be computed with the containing model.
-- Its value is provided by the object Signature given at start,
-- if no Signature is defined, it does nothing.
--
-- Can be redefined (in this case, see also Sign)
AddList (me : mutable; list : HSequenceOfTransient; model : InterfaceModel);
---Purpose : Adds a list of entities by adding each of the items
AddWithGraph (me : mutable; list : HSequenceOfTransient; graph : Graph)
is virtual;
---Purpose : Adds a list of entities in the context given by the graph
-- Default just call basic AddList
-- Can be redefined to get a signature computed with the graph
AddModel (me : mutable; model : InterfaceModel);
---Purpose : Adds all the entities contained in a Model
AddFromSelection (me : mutable; sel : Selection; G : Graph);
---Purpose : Adds the result determined by a Selection from a Graph
-- Remark : does not impact at all data from SetSelection & Co
-- Counting on selection result --
SetSelection (me : mutable; sel : Selection);
---Purpose : Sets a Selection as input : this causes content to be cleared
-- then the Selection to be ready to compute (but not immediatly)
Selection (me) returns Selection;
---Purpose : Returns the selection, or a null Handle
SetSelMode (me : mutable; selmode : Integer);
---Purpose : Changes the mode of working with the selection :
-- -1 just clears optimisation data and nothing else
-- 0 clears it 1 inhibits it for computing (but no clearing)
-- 2 sets it active for computing
-- Default at creation is 0, after SetSelection (not null) is 2
SelMode (me) returns Integer;
---Purpose : Returns the mode of working with the selection
ComputeSelected (me : mutable; G : Graph; forced : Boolean=Standard_False)
returns Boolean;
---Purpose : Computes from the selection result, if selection is active
-- (mode 2). If selection is not defined (mode 0) or is inhibited
-- (mode 1) does nothing.
-- Returns True if computation is done (or optimised), False else
-- This method is called by ComputeCounter from WorkSession
--
-- If <forced> is True, recomputes systematically
-- Else (D), if the counter was not cleared and if the former
-- computed result started from the same total size of Graph and
-- same count of selected entities : computation is not redone
-- unless <forced> is given as True
Sign (me; ent : Transient; model : InterfaceModel)
returns HAsciiString is virtual;
---Purpose : Determines and returns the value of the signature for an
-- entity as an HAsciiString. This method works exactly as
-- AddSign, which is optimized
--
-- Can be redefined, accorded with AddSign
ComputedSign (me : mutable; ent : Transient; G : Graph) returns CString;
---Purpose : Applies AddWithGraph on one entity, and returns the Signature
-- Value which has been recorded
-- To do this, Add is called with SignOnly Mode True during the
-- call, the returned value is LastValue
fields
themapstat : Boolean;
themap : MapOfTransient;
thematcher : Signature;
theselect : Selection;
theselmode : Integer;
thenbcomp1 : Integer;
thenbcomp2 : Integer;
end SignCounter;
|