Integration of OCCT 6.5.0 from SVN
[occt.git] / src / Aspect / Aspect_LineStyle.cxx
1
2 // File         Aspect_LineStyle.cxx
3 // Created      Septembre 1992
4 // Author       GG
5
6 //-Copyright    MatraDatavision 1991,1992
7
8 //-Version      
9
10 //-Design       Declaration des variables specifiques aux Type de traits
11
12 //-Warning      Un style est definie, soit par son type predefini TOL_...
13 //              soit par sa description en METRE
14
15 //-References   
16
17 //-Language     C++ 2.0
18
19 //-Declarations
20
21 // for the class
22 #include <Aspect_LineStyle.ixx>
23 #include <Aspect_Units.hxx>
24
25 //-Aliases
26
27 //-Global data definitions
28
29 //      MyLineType              : TypeOfLine from Aspect;
30 //      MyLineDescriptor        : HArray1OfReal from TColStd;
31
32 //-Constructors
33
34 //-Destructors
35
36 //-Methods, in order
37
38 Aspect_LineStyle::Aspect_LineStyle () : MyLineDescriptor(PredefinedStyle(Aspect_TOL_SOLID)) {
39 }
40
41 Aspect_LineStyle::Aspect_LineStyle (const Aspect_TypeOfLine Type) : MyLineDescriptor(PredefinedStyle(Type)) {
42 }
43
44 Aspect_LineStyle::Aspect_LineStyle (const TColQuantity_Array1OfLength& UserDefinedStyle) {
45 Standard_Integer i ;
46
47         MyLineType = Aspect_TOL_USERDEFINED ;
48         // Modif CAL 8/2/95
49         MyLineDescriptor = new TColQuantity_HArray1OfLength
50                 (UserDefinedStyle.Lower(), UserDefinedStyle.Upper()) ;
51
52         for( i=UserDefinedStyle.Lower() ; i<=UserDefinedStyle.Upper() ; i++ ) {
53             // Modif CAL 8/2/95
54             MyLineDescriptor->SetValue(i, UserDefinedStyle(i)) ;
55             if( UserDefinedStyle(i) <= 0. )
56                 Aspect_LineStyleDefinitionError::Raise ("Bad Descriptor") ;
57         }
58 }
59
60 Aspect_LineStyle& Aspect_LineStyle::Assign (const Aspect_LineStyle& Other) {
61 Standard_Integer i ;
62
63         // Modif CAL 8/2/95
64         MyLineDescriptor = new TColQuantity_HArray1OfLength
65                 ((Other.Values()).Lower(), (Other.Values()).Upper()) ;
66         MyLineType = Other.MyLineType ;
67
68         if( MyLineType != Aspect_TOL_SOLID ) {
69           for( i=MyLineDescriptor->Lower() ; 
70                                 i<=MyLineDescriptor->Upper() ; i++ ){
71             // Modif CAL 8/2/95
72             MyLineDescriptor->SetValue(i, (Other.Values())(i)) ;
73             if( (Other.Values())(i) <= 0. )
74                 Aspect_LineStyleDefinitionError::Raise ("Bad Descriptor") ;
75           }
76         }
77
78         return (*this);
79
80 }
81
82 void Aspect_LineStyle::SetValues (const Aspect_TypeOfLine Type) {
83
84         MyLineDescriptor = PredefinedStyle(Type) ;
85
86 }
87
88 void Aspect_LineStyle::SetValues (const TColQuantity_Array1OfLength& UserDefinedStyle) {
89 Standard_Integer i ;
90
91         // Modif CAL 8/2/95
92         MyLineDescriptor = new TColQuantity_HArray1OfLength
93                 (UserDefinedStyle.Lower(), UserDefinedStyle.Upper()) ;
94         MyLineType = Aspect_TOL_USERDEFINED ;
95
96         for( i=UserDefinedStyle.Lower() ; i<=UserDefinedStyle.Upper() ; i++ ) {
97             // Modif CAL 8/2/95
98             MyLineDescriptor->SetValue(i, UserDefinedStyle(i)) ;
99             if( UserDefinedStyle(i) <= 0. )
100                 Aspect_LineStyleDefinitionError::Raise ("Bad Descriptor") ;
101         }
102 }
103
104 Aspect_TypeOfLine Aspect_LineStyle::Style () const {
105
106         return (MyLineType);
107 }
108
109 Standard_Integer Aspect_LineStyle::Length () const {
110
111         if( MyLineDescriptor.IsNull() ) return (0) ;
112         else return (MyLineDescriptor->Length());
113 }
114
115 const TColQuantity_Array1OfLength& Aspect_LineStyle::Values () const {
116
117         return (MyLineDescriptor->Array1());
118 }
119
120 Handle(TColQuantity_HArray1OfLength) Aspect_LineStyle::PredefinedStyle(const Aspect_TypeOfLine Type) {
121 Handle(TColQuantity_HArray1OfLength) descriptor ; 
122
123         MyLineType      = Type ;
124         switch ( Type ) {
125             case Aspect_TOL_USERDEFINED :
126                 Aspect_LineStyleDefinitionError::Raise ("Bad Line Type Style");
127             case Aspect_TOL_SOLID :
128                 descriptor = new TColQuantity_HArray1OfLength(1,1) ;
129                 descriptor->SetValue(1,0.) ;
130                 break ;
131             case Aspect_TOL_DASH :
132                 descriptor = new TColQuantity_HArray1OfLength(1,2) ;
133                 descriptor->SetValue(1,2.0 MILLIMETER) ;
134                 descriptor->SetValue(2,1.0 MILLIMETER) ;
135                 break ;
136             case Aspect_TOL_DOT :
137                 descriptor = new TColQuantity_HArray1OfLength(1,2) ;
138                 descriptor->SetValue(1,0.2 MILLIMETER) ;
139                 descriptor->SetValue(2,0.5 MILLIMETER) ;
140                 break ;
141             case Aspect_TOL_DOTDASH :
142                 descriptor = new TColQuantity_HArray1OfLength(1,4) ;
143                 descriptor->SetValue(1,10.0 MILLIMETER) ;
144                 descriptor->SetValue(2,1.0 MILLIMETER) ;
145                 descriptor->SetValue(3,2.0 MILLIMETER) ;
146                 descriptor->SetValue(4,1.0 MILLIMETER) ;
147                 break ;
148             default :
149                 descriptor.Nullify() ;
150         }
151
152         return (descriptor) ;
153 }
154
155 Standard_Boolean Aspect_LineStyle::IsEqual(const Aspect_LineStyle& Other) const
156 {
157   return (
158           (MyLineType == Other.MyLineType) &&
159           (MyLineDescriptor == Other.MyLineDescriptor));
160 }
161
162 Standard_Boolean Aspect_LineStyle::IsNotEqual(const Aspect_LineStyle& Other) const
163 {
164   return !IsEqual(Other);
165 }