From 5fdb6d685b675282bfd838e59bc8d722568a1e5d Mon Sep 17 00:00:00 2001 From: dbv Date: Thu, 29 Mar 2012 19:32:30 +0400 Subject: [PATCH] 0022913: Clean up source repository from unused files Changes Removed unused files. Files in QAResources have been moved to DrawResources Removing unused files from NCollection (see #23041) --- adm/QA.tcl | 10 - src/Draw/Draw_WOKSteps.edl | 22 - src/DrawResources/DrawAppliInit | 18 + src/DrawResources/DrawPlugin | 1 + src/DrawResources/FILES | 3 + .../QARebuildCommands | 0 src/Graphic3d/Graphic3d1.cdl | 645 ------------------ src/Graphic3d/Graphic3d_Group_4.cxx | 18 - src/IntCurve/IntCurve_ToolPolygon.cdl | 18 - src/IntCurve/IntCurve_ToolPolygon.gxx | 18 - src/IntCurve/IntCurve_ToolPolygon.lxx | 18 - src/IntPatch/IntPatch_PolygoTool.cdl | 18 - src/IntPatch/IntPatch_PolygoTool.cxx | 18 - src/IntPatch/IntPatch_PolygoTool.lxx | 18 - src/Intf/Intf_InterferencePolygon2d.gxx | 18 - src/Intf/Intf_ToolPolygon.cdl | 18 - src/Intf/Intf_ToolPolygon.gxx | 18 - src/NCollection/FILES | 2 - src/NCollection/NCollection.mdl.gz | Bin 75099 -> 0 bytes src/NCollection/templates2macros.sh | 237 ------- src/OpenGl/OpenGl_GraphicDriver_5.cxx | 17 - src/OpenGl/OpenGl_GraphicDriver_6.cxx | 17 - src/QAResources/DrawPlugin | 1 - src/QAResources/DrawPluginQA | 1 - src/QAResources/QADrawAppliInit | 18 - src/Standard/StandardCSFDB.cxx | 18 - src/StdResource/FILES | 1 - src/StdResource/dftree.tcl | 1 - src/UnitsAPI/.CurrentUnits | 74 -- src/UnitsAPI/.MDTVBaseUnits | 70 -- src/UnitsAPI/.MDTVCurrentUnits | 74 -- src/V3d/V3d_Camera.cdl | 17 - src/V3d/V3d_Camera.cxx | 17 - src/gp/gp_Quaternion.hxx | 537 --------------- 34 files changed, 22 insertions(+), 1959 deletions(-) delete mode 100755 adm/QA.tcl delete mode 100755 src/Draw/Draw_WOKSteps.edl create mode 100644 src/DrawResources/DrawAppliInit rename src/{QAResources => DrawResources}/QARebuildCommands (100%) mode change 100755 => 100644 delete mode 100644 src/Graphic3d/Graphic3d1.cdl delete mode 100755 src/Graphic3d/Graphic3d_Group_4.cxx delete mode 100755 src/IntCurve/IntCurve_ToolPolygon.cdl delete mode 100755 src/IntCurve/IntCurve_ToolPolygon.gxx delete mode 100755 src/IntCurve/IntCurve_ToolPolygon.lxx delete mode 100755 src/IntPatch/IntPatch_PolygoTool.cdl delete mode 100755 src/IntPatch/IntPatch_PolygoTool.cxx delete mode 100755 src/IntPatch/IntPatch_PolygoTool.lxx delete mode 100755 src/Intf/Intf_InterferencePolygon2d.gxx delete mode 100755 src/Intf/Intf_ToolPolygon.cdl delete mode 100755 src/Intf/Intf_ToolPolygon.gxx delete mode 100755 src/NCollection/NCollection.mdl.gz delete mode 100755 src/NCollection/templates2macros.sh delete mode 100755 src/OpenGl/OpenGl_GraphicDriver_5.cxx delete mode 100755 src/OpenGl/OpenGl_GraphicDriver_6.cxx delete mode 100755 src/QAResources/DrawPlugin delete mode 100755 src/QAResources/DrawPluginQA delete mode 100755 src/QAResources/QADrawAppliInit delete mode 100755 src/Standard/StandardCSFDB.cxx delete mode 100755 src/StdResource/dftree.tcl delete mode 100755 src/UnitsAPI/.CurrentUnits delete mode 100755 src/UnitsAPI/.MDTVBaseUnits delete mode 100755 src/UnitsAPI/.MDTVCurrentUnits delete mode 100755 src/V3d/V3d_Camera.cdl delete mode 100755 src/V3d/V3d_Camera.cxx delete mode 100644 src/gp/gp_Quaternion.hxx diff --git a/adm/QA.tcl b/adm/QA.tcl deleted file mode 100755 index 9cebf2509c..0000000000 --- a/adm/QA.tcl +++ /dev/null @@ -1,10 +0,0 @@ -global tcl_platform - -if {[array get env QA_DUMP] != "" && $env(QA_DUMP) == "1"} { - puts "QA commands have been loaded" - set env(QADEFAULT) $env(CASROOT)/src/QAResources/QADrawAppliInit - set env(QA_LD_LIBRARY_PATH) $env(CASROOT)/sun/lib/. - set env(DRAWDEFAULTOLD) $env(DRAWDEFAULT) - set env(DRAWDEFAULT) "$env(QADEFAULT)" - set env(CSF_DrawPluginQADefaults) $env(CASROOT)/src/QAResources/. -} diff --git a/src/Draw/Draw_WOKSteps.edl b/src/Draw/Draw_WOKSteps.edl deleted file mode 100755 index 73c23e9dd2..0000000000 --- a/src/Draw/Draw_WOKSteps.edl +++ /dev/null @@ -1,22 +0,0 @@ --- Copyright (c) 1998-1999 Matra Datavision --- Copyright (c) 1999-2012 OPEN CASCADE SAS --- --- The content of this file is subject to the Open CASCADE Technology Public --- License Version 6.5 (the "License"). You may not use the content of this file --- except in compliance with the License. Please obtain a copy of the License --- at http://www.opencascade.org and read it completely before using this file. --- --- The Initial Developer of the Original Code is Open CASCADE S.A.S., having its --- main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. --- --- The Original Code and all software distributed under the License is --- distributed on an "AS IS" basis, without warranty of any kind, and the --- Initial Developer hereby disclaims all such warranties, including without --- limitation, any warranties of merchantability, fitness for a particular --- purpose or non-infringement. Please see the License for the specific terms --- and conditions governing the rights and limitations under the License. - - -@ifdefined ( %Draw_WOKSteps_EDL) then -@set %WOKSteps_XcppGroup = " xcpp.fill xcpp.src xcpp.header obj.cgen obj.inc"; -@endif; diff --git a/src/DrawResources/DrawAppliInit b/src/DrawResources/DrawAppliInit new file mode 100644 index 0000000000..dc77141c4b --- /dev/null +++ b/src/DrawResources/DrawAppliInit @@ -0,0 +1,18 @@ +global tcl_platform + +if {[array get env QA_DUMP] != "" && $env(QA_DUMP) == "1"} { + set env(CSF_DrawPluginQADefaults) $env(CASROOT)/src/DrawResources/. + ###catch {pload ALL} + catch {pload FULL} + #catch {pload -DrawPluginProducts ALL} + catch {pload -DrawPluginProducts OMF CANONICALRECOGNITION EMESH PARASOLID DXF SAT } + catch {pload QAcommands} + + ###foreach h [array names Draw_Groups] { + ### foreach f $Draw_Groups($h) { + ### QARebuild $f + ### } + ###} + +catch {source $env(CSF_DrawPluginQADefaults)/QARebuildCommands} +} \ No newline at end of file diff --git a/src/DrawResources/DrawPlugin b/src/DrawResources/DrawPlugin index 9af838fba3..2660d47d4a 100755 --- a/src/DrawResources/DrawPlugin +++ b/src/DrawResources/DrawPlugin @@ -47,3 +47,4 @@ XSDRAW : TKXSDRAW XDEDRAW : TKXDEDRAW TOBJ : TKTObjDRAW DFBROWSER : TKDFBrowser +QAcommands : TKQADraw diff --git a/src/DrawResources/FILES b/src/DrawResources/FILES index d817a1fb1e..eebad74a12 100755 --- a/src/DrawResources/FILES +++ b/src/DrawResources/FILES @@ -37,3 +37,6 @@ srcinc:::wing.brep srcinc:::VisualizationDemo.tcl srcinc:::OCAFDemo.tcl srcinc:::TKTopTest.tcl +srcinc:::dftree.tcl +srcinc:::QARebuildCommands +srcinc:::DrawAppliInit diff --git a/src/QAResources/QARebuildCommands b/src/DrawResources/QARebuildCommands old mode 100755 new mode 100644 similarity index 100% rename from src/QAResources/QARebuildCommands rename to src/DrawResources/QARebuildCommands diff --git a/src/Graphic3d/Graphic3d1.cdl b/src/Graphic3d/Graphic3d1.cdl deleted file mode 100644 index 65587ce63d..0000000000 --- a/src/Graphic3d/Graphic3d1.cdl +++ /dev/null @@ -1,645 +0,0 @@ --- Created on: 1993-03-31 --- Created by: NW,JPB,CAL --- Copyright (c) 1993-1999 Matra Datavision --- Copyright (c) 1999-2012 OPEN CASCADE SAS --- --- The content of this file is subject to the Open CASCADE Technology Public --- License Version 6.5 (the "License"). You may not use the content of this file --- except in compliance with the License. Please obtain a copy of the License --- at http://www.opencascade.org and read it completely before using this file. --- --- The Initial Developer of the Original Code is Open CASCADE S.A.S., having its --- main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. --- --- The Original Code and all software distributed under the License is --- distributed on an "AS IS" basis, without warranty of any kind, and the --- Initial Developer hereby disclaims all such warranties, including without --- limitation, any warranties of merchantability, fitness for a particular --- purpose or non-infringement. Please see the License for the specific terms --- and conditions governing the rights and limitations under the License. - --- Package : Graphic3d --- Updated : Vendredi 2 Octobre 1992 --- Mercredi 31 Mars 1993 --- Mercredi 19 Janvier 1994 --- 1/08/97 ; PCT : Ajout texture mapping --- 11/97 ; CAL : retrait de la dependance avec math --- 11/97 ; CAL : retrait des DataStructure --- 11/97 ; CAL : ajout pointer StructPtr --- 04/98 ; FGU : ajout champs 'TOR_EMISSION' --- 16-09-98; BGN: (S3819) Ajout TypeOfTriedronEcho, --- TypeOfTriedronPosition. --- 22-09-98; BGN: S3989 (anciennement S3819): report --- dans Aspect des TypeOfTriedron* --- 26-03-99 : FMN ; Compatibilite ascendante: --- Ajout des anciens noms de materiaux. --- 09-04-99 : GG ; Compatibilite ascendante: --- NameOfPhysicalMaterial disparait --- 23-11-99 : GG ; Add material name DEFAULT --- 16-06-2000 : ATS : Study G005: class ArrayOfPrimitives --- and derivated used for model presentation. --- Required: enumeration TypeOfPrimitive; --- imported PrimitiveArray; class PrimitiveList. --- 17-12-01 : GG ; IMP171201 : Add material name UserDefined --- Thanks to Stephane ROUTELOUS --- 20-01-2009 : ABD Integration support of system fonts (using FTGL and FreeType) --- Objective : Specifications definitives - -package Graphic3d - - ---Version: - - ---Purpose: This package permits the creation of 3d graphic objects - -- in a visualiser. - -- These objects, called structures, are composed of groups of - -- primitives and attributes. - -- The group is the smallest editable element of a structure. - -- A structure can be displayed, erased, high-lighted. - -- A transformation can be applied to it. - -- Structures can be connected to form a tree of structures, - -- composed by transformations. - -- The visualiser permits global manipulation of structures. - - ---Keywords: Structure, Group, Primitives, Line, Marker, Text, - -- FillAreas, Vertex, Vector, Material, Font, Shading - ---Warning: - ---References: - -uses - - TCollection, - TColStd, - OSD, - Quantity, - Aspect, - MMgt, - Xw, - WNT, - AlienImage, - gp -is - - ----------------------- - -- Category: Exceptions - ----------------------- - - exception AspectTextDefinitionError inherits OutOfRange; - ---Category: Exceptions - - exception CycleError inherits DomainError; - ---Category: Exceptions - - exception GroupDefinitionError inherits OutOfRange; - ---Category: Exceptions - - exception InitialisationError inherits OutOfRange; - ---Category: Exceptions - - exception MaterialDefinitionError inherits OutOfRange; - ---Category: Exceptions - - exception PickIdDefinitionError inherits OutOfRange; - ---Category: Exceptions - - exception PlotterDefinitionError inherits OutOfRange; - ---Category: The exceptions - - exception PriorityDefinitionError inherits OutOfRange; - ---Category: Exceptions - - exception StructureDefinitionError inherits OutOfRange; - ---Category: Exceptions - - exception TransformError inherits OutOfRange; - ---Category: Exceptions - - exception VectorError inherits OutOfRange; - ---Category: Exceptions - - ------------------------- - -- Category: Enumerations - ------------------------- - - enumeration NameOfMaterial is - NOM_BRASS, -- laiton (PHYSIC) - NOM_BRONZE, -- bronze (PHYSIC) - NOM_COPPER, -- cuivre (PHYSIC) - NOM_GOLD, -- or (PHYSIC) - - NOM_PEWTER, -- etain (PHYSIC) - - NOM_PLASTER, -- platre (GENERIC) - NOM_PLASTIC, -- plastic (GENERIC) - - NOM_SILVER, -- argent (PHYSIC) - - NOM_STEEL, -- acier (PHYSIC) - - NOM_STONE, -- pierre (PHYSIC) - - NOM_SHINY_PLASTIC, -- plastique brillant (GENERIC) - NOM_SATIN, -- satin (GENERIC) - NOM_METALIZED, -- metallise New (GENERIC) - NOM_NEON_GNC, -- neon New (GENERIC) - NOM_CHROME, -- chrome New (PHYSIC) - NOM_ALUMINIUM, -- aluminium New (PHYSIC) - NOM_OBSIDIAN, -- obsidian New (PHYSIC) - NOM_NEON_PHC, -- neon New (PHYSIC) - NOM_JADE, -- jade New (PHYSIC) - NOM_DEFAULT, - NOM_UserDefined -- owner material - end NameOfMaterial; - ---Purpose: Types of aspect materials. - ---Category: Enumerations - - enumeration TypeOfMaterial is MATERIAL_ASPECT, -- Materiel generique - MATERIAL_PHYSIC -- Materiel physique - end TypeOfMaterial; - ---Purpose: Types of materials specifies if a material can change color. - ---Category: Enumerations - - enumeration NameOfTexture1D is NOT_1D_ELEVATION, - NOT_1D_UNKNOWN - end NameOfTexture1D; - ---Purpose: Types of standard textures. - ---Category: Enumerations - - - enumeration NameOfTexture2D is NOT_2D_MATRA, - NOT_2D_ALIENSKIN, - NOT_2D_BLUE_ROCK, - NOT_2D_BLUEWHITE_PAPER, - NOT_2D_BRUSHED, - NOT_2D_BUBBLES, - NOT_2D_BUMP, - NOT_2D_CAST, - NOT_2D_CHIPBD, - NOT_2D_CLOUDS, - NOT_2D_FLESH, - NOT_2D_FLOOR, - NOT_2D_GALVNISD, - NOT_2D_GRASS, - NOT_2D_ALUMINUM, - NOT_2D_ROCK, - NOT_2D_KNURL, - NOT_2D_MAPLE, - NOT_2D_MARBLE, - NOT_2D_MOTTLED, - NOT_2D_RAIN, - NOT_2D_UNKNOWN - end NameOfTexture2D; - ---Purpose: Types of standard textures. - ---Category: Enumerations - - - enumeration NameOfTextureEnv is NOT_ENV_CLOUDS, - NOT_ENV_CV, - NOT_ENV_MEDIT, - NOT_ENV_PEARL, - NOT_ENV_SKY1, - NOT_ENV_SKY2, - NOT_ENV_LINES, - NOT_ENV_ROAD, - NOT_ENV_UNKNOWN - end NameOfTextureEnv; - ---Purpose: Types of standard textures. - ---Category: Enumerations - - enumeration TypeOfTexture is TOT_1D, - TOT_2D, - TOT_2D_MIPMAP; - ---Purpose: Type of the texture file format. - ---Category: Enumerations - - enumeration TypeOfTextureMode is TOTM_OBJECT, - TOTM_SPHERE, - TOTM_EYE, - TOTM_MANUAL; - ---Purpose: Type of the texture projection. - ---Category: Enumerations - - enumeration NameOfTexturePlane is NOTP_XY, - NOTP_YZ, - NOTP_ZX, - NOTP_UNKNOWN; - ---Purpose: Type of the texture projection plane for both S and T texture coordinate. - ---Category: Enumerations - - enumeration TypeOfComposition is TOC_REPLACE, - TOC_POSTCONCATENATE - end TypeOfComposition; - ---Purpose: To manage the transformation matrices of structures. - ---Category: Enumerations - - enumeration TypeOfConnection is TOC_ANCESTOR, - TOC_DESCENDANT - end TypeOfConnection; - ---Purpose: To manage the connections between the structures. - ---Category: Enumerations - - enumeration TypeOfPolygon is TOP_UNKNOWN, - TOP_COMPLEX, - TOP_CONCAVE, - TOP_CONVEX - end TypeOfPolygon; - ---Purpose: The type of polygon in a group in a structure. - ---Category: Enumerations - - enumeration TypeOfPrimitive is TOP_UNDEFINED, - TOP_POLYLINE, - TOP_POLYGON, - TOP_TRIANGLEMESH, - TOP_QUADRANGLEMESH, - TOP_TEXT, - TOP_MARKER, - TOP_PARRAY - end TypeOfPrimitive; - ---Purpose: The type of primitive in a group in a structure. - ---Category: Enumerations - - enumeration TypeOfPrimitiveArray is TOPA_UNDEFINED, - TOPA_POINTS, - TOPA_POLYLINES, - TOPA_SEGMENTS, - TOPA_POLYGONS, - TOPA_TRIANGLES, - TOPA_QUADRANGLES, - TOPA_TRIANGLESTRIPS, - TOPA_QUADRANGLESTRIPS, - TOPA_TRIANGLEFANS - end TypeOfPrimitiveArray; - ---Purpose: The type of primitive array in a group in a structure. - ---Category: Enumerations - - enumeration TypeOfReflection is TOR_AMBIENT, - TOR_DIFFUSE, - TOR_SPECULAR, - TOR_EMISSION - end TypeOfReflection; - ---Purpose: Nature of the reflection of a material. - ---Category: Enumerations - - enumeration TypeOfStructure is TOS_WIREFRAME, - TOS_SHADING, - TOS_COMPUTED, - TOS_ALL - end TypeOfStructure; - ---Purpose: Structural attribute indicating if it can be displayed - -- in wireframe, shadow mode, or both. - ---Category: Enumerations - - enumeration TextPath is TP_UP, - TP_DOWN, - TP_LEFT, - TP_RIGHT - end TextPath; - ---Purpose: Direction in which text is displayed. - ---Category: Enumerations - - enumeration HorizontalTextAlignment is HTA_LEFT, - HTA_CENTER, - HTA_RIGHT - end HorizontalTextAlignment; - ---Purpose: Defines the horizontal position of the text - -- relative to its anchor. - ---Category: Enumerations - - enumeration VerticalTextAlignment is VTA_BOTTOM, - VTA_CENTER, - VTA_TOP - end VerticalTextAlignment; - ---Purpose: Defines the vertical position of the text - -- relative to its anchor. - ---Category: Enumerations - - enumeration GroupAspect is ASPECT_LINE, - ASPECT_TEXT, - ASPECT_MARKER, - ASPECT_FILL_AREA - end GroupAspect; - ---Purpose: Identifies primitives aspects defined per group. - -- - ASPECT_LINE: aspect for line primitives; - -- - ASPECT_TEXT: aspect for text primitives; - -- - ASPECT_MARKER: aspect for marker primitives; - -- - ASPECT_FILL_AREA: aspect for face primitives. - - --------------------------- - -- Category: Imported types - --------------------------- - - imported PrimitiveArray; - - imported CBitFields20; - ---Purpose: Defines the C structure - ---Category: Imported types - - imported CBitFields16; - ---Purpose: Defines the C structure - ---Category: Imported types - - imported CBitFields8; - ---Purpose: Defines the C structure - ---Category: Imported types - - imported CBitFields4; - ---Purpose: Defines the C structure - ---Category: Imported types - - imported CGroup; - ---Purpose: Defines the C structure - ---Category: Imported types - - imported CStructure; - ---Purpose: Defines the C structure - ---Category: Imported types - - imported CLight; - ---Purpose: Defines the C structure - ---Category: Imported types - - imported CPick; - ---Purpose: Defines the C structure - ---Category: Imported types - - imported CPlane; - ---Purpose: Defines the C structure - ---Category: Imported types - - imported CBounds; - ---Purpose: Defines the C structure - ---Category: Imported types - - imported CUserDraw; - ---Purpose: Defines the C structure - ---Category: Imported types - - imported CView; - ---Purpose: Defines the C structure - ---Category: Imported types - - imported CGraduatedTrihedron; - ---Purpose: Defines the C structure of a graduated trihedron. - ---Category: Imported types - - imported CInitTexture; - imported CTexture; - --- ABD 29/10/04 Transform Persistence of Presentation( pan, zoom, rotate ) - imported CTransPersStruct; - imported TransModeFlags; --- ABD 29/10/04 Transform Persistence of Presentation( pan, zoom, rotate ) - - - -------------------- - -- Category: Classes - -------------------- - - class Strips; - ---Purpose: Contains some static functions to strips treatment - - deferred class ArrayOfPrimitives; - ---Purpose: Contains basic methods for array allocation and filling - - class ArrayOfPoints; - ---Purpose: Contains points array definition - - class ArrayOfPolylines; - ---Purpose: Contains polylines array definition - - class ArrayOfSegments; - ---Purpose: Contains segments array definition - - class ArrayOfPolygons; - ---Purpose: Contains polygons array definition - - class ArrayOfTriangles; - ---Purpose: Contains triangles array definition - - class ArrayOfTriangleStrips; - ---Purpose: Contains triangles strip array definition - - class ArrayOfTriangleFans; - ---Purpose: Contains triangles fan array definition - - class ArrayOfQuadrangles; - ---Purpose: Contains quatrangles array definition - - class ArrayOfQuadrangleStrips; - ---Purpose: Contains quadrangles strip array definition - - class AspectLine3d; - ---Purpose: Grouping line attributes - ---Category: Classes - - class AspectFillArea3d; - ---Purpose: Grouping face attributes - ---Category: Classes - - class AspectMarker3d; - ---Purpose: Grouping marker attributes - ---Category: Classes - - class AspectText3d; - ---Purpose: Grouping text attributes. - ---Category: Classes - - class Group; - ---Purpose: For grouping together primitives in a structure - ---Category: Classes - - class GraphicDevice; - ---Purpose: Defines a physical graphic device allowing to - -- shares graphical ressources. - ---Category: Classes - - class WNTGraphicDevice; - ---Purpose: Defines a physical graphic device for Windows NT - ---Category: Classes - - class MaterialAspect; - ---Purpose: Aspect attributes of a 3d face. - ---Category: Classes - - class Structure; - ---Purpose: Graphic object. - ---Category: Classes - - deferred class GraphicDriver; - ---Purpose: Defines a graphic driver for 3d interface - - deferred class StructureManager; - ---Purpose: Visualiser with which the graphic objects are associated. - ---Category: Classes - - deferred class DataStructureManager; - ---Purpose: Visualiser with which the graphic objects are associated. - ---Category: Classes - - deferred class Plotter; - ---Purpose: Defines the minimal plotter. - ---Category: The classes - - class Vector; - ---Purpose: 3d vector - ---Category: Classes - - class Vertex; - ---Purpose: 3d vertex - ---Category: Classes - - class VertexN; - ---Purpose: 3d vertex with a normal vector - ---Category: Classes - - class VertexNT; - ---Purpose: 3d vertex with a normal vector and texture coordinate - ---Category: Classes - - class VertexC; - ---Purpose: 3d vertex with a colour - ---Category: Classes - - class VertexNC; - ---Purpose: 3d vertex with a normal and a colour - ---Category: Classes - - --------------------- - -- Category: Pointers - --------------------- - - pointer StructPtr to Structure from Graphic3d; - ---Category: Pointers - - --------------------------------- - -- Category: Instantiated classes - --------------------------------- - - class ListOfPArray instantiates - List from TCollection (ArrayOfPrimitives from Graphic3d); - ---Category: Instantiated classes - - class SequenceOfAddress instantiates - Sequence from TCollection - (Address from Standard); - ---Category: Instantiated classes - - class SetOfGroup instantiates - Set from TCollection (Group from Graphic3d); - ---Category: Instantiated classes - - class HSetOfGroup instantiates - HSet from TCollection - (Group from Graphic3d, SetOfGroup); - ---Category: Instantiated classes - - class SequenceOfGroup instantiates - Sequence from TCollection (Group from Graphic3d); - - ---Category: Instantiated classes - - class HSequenceOfGroup instantiates - HSequence from TCollection - (Group from Graphic3d, SequenceOfGroup from Graphic3d); - ---Category: Instantiated classes - - class MapOfStructure instantiates - Map from TCollection (Structure from Graphic3d,MapTransientHasher from TColStd); - - - ---Category: Instantiated classes - - class SequenceOfStructure instantiates - Sequence from TCollection - (Structure from Graphic3d); - ---Category: Instantiated classes - - class HSequenceOfStructure instantiates - HSequence from TCollection - (Structure from Graphic3d, SequenceOfStructure from Graphic3d); - ---Category: Instantiated classes - - class Array1OfVector instantiates - Array1 from TCollection (Vector from Graphic3d); - ---Category: Instantiated classes - - class Array1OfVertex instantiates - Array1 from TCollection (Vertex from Graphic3d); - ---Category: Instantiated classes - - class Array2OfVertex instantiates - Array2 from TCollection (Vertex from Graphic3d); - ---Category: Instantiated classes - - class Array1OfVertexC instantiates - Array1 from TCollection (VertexC from Graphic3d); - ---Category: Instantiated classes - - class Array2OfVertexC instantiates - Array2 from TCollection (VertexC from Graphic3d); - ---Category: Instantiated classes - - class Array1OfVertexN instantiates - Array1 from TCollection (VertexN from Graphic3d); - ---Category: Instantiated classes - - class Array2OfVertexN instantiates - Array2 from TCollection (VertexN from Graphic3d); - ---Category: Instantiated classes - - class Array1OfVertexNT instantiates - Array1 from TCollection (VertexNT from Graphic3d); - ---Category: Instantiated classes - - class Array2OfVertexNT instantiates - Array2 from TCollection (VertexNT from Graphic3d); - ---Category: Instantiated classes - - class Array1OfVertexNC instantiates - Array1 from TCollection (VertexNC from Graphic3d); - ---Category: Instantiated classes - - class Array2OfVertexNC instantiates - Array2 from TCollection (VertexNC from Graphic3d); - ---Category: Instantiated classes - - class ListOfShortReal instantiates - List from TCollection (ShortReal from Standard); - ---Category: Instantiated classes - - --ABD Integration support of system fonts (using FTGL and FreeType) - imported NListOfHAsciiString; - ---Category: Instantiated classes - - - deferred class TextureRoot from Graphic3d; - deferred class TextureMap from Graphic3d; - deferred class Texture1D from Graphic3d; - deferred class Texture2D from Graphic3d; - - class TextureEnv from Graphic3d; - class Texture1Dmanual from Graphic3d; - class Texture1Dsegment from Graphic3d; - class Texture2Dmanual from Graphic3d; - class Texture2Dplane from Graphic3d; - - - enumeration ExportFormat is - - EF_PostScript, - EF_EnhPostScript, - EF_TEX, - EF_PDF, - EF_SVG, - EF_PGF - - end ExportFormat; - - - enumeration SortType is - - ST_Simple, -- sorting by depth of center point of primitive(fast) - ST_BSP_Tree -- sorting by BSPTree (slow, but fine result ) - - end SortType; - -end Graphic3d; diff --git a/src/Graphic3d/Graphic3d_Group_4.cxx b/src/Graphic3d/Graphic3d_Group_4.cxx deleted file mode 100755 index 47d78c6475..0000000000 --- a/src/Graphic3d/Graphic3d_Group_4.cxx +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) 1995-1999 Matra Datavision -// Copyright (c) 1999-2012 OPEN CASCADE SAS -// -// The content of this file is subject to the Open CASCADE Technology Public -// License Version 6.5 (the "License"). You may not use the content of this file -// except in compliance with the License. Please obtain a copy of the License -// at http://www.opencascade.org and read it completely before using this file. -// -// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its -// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. -// -// The Original Code and all software distributed under the License is -// distributed on an "AS IS" basis, without warranty of any kind, and the -// Initial Developer hereby disclaims all such warranties, including without -// limitation, any warranties of merchantability, fitness for a particular -// purpose or non-infringement. Please see the License for the specific terms -// and conditions governing the rights and limitations under the License. - diff --git a/src/IntCurve/IntCurve_ToolPolygon.cdl b/src/IntCurve/IntCurve_ToolPolygon.cdl deleted file mode 100755 index 1bc1bc552f..0000000000 --- a/src/IntCurve/IntCurve_ToolPolygon.cdl +++ /dev/null @@ -1,18 +0,0 @@ --- Copyright (c) 1995-1999 Matra Datavision --- Copyright (c) 1999-2012 OPEN CASCADE SAS --- --- The content of this file is subject to the Open CASCADE Technology Public --- License Version 6.5 (the "License"). You may not use the content of this file --- except in compliance with the License. Please obtain a copy of the License --- at http://www.opencascade.org and read it completely before using this file. --- --- The Initial Developer of the Original Code is Open CASCADE S.A.S., having its --- main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. --- --- The Original Code and all software distributed under the License is --- distributed on an "AS IS" basis, without warranty of any kind, and the --- Initial Developer hereby disclaims all such warranties, including without --- limitation, any warranties of merchantability, fitness for a particular --- purpose or non-infringement. Please see the License for the specific terms --- and conditions governing the rights and limitations under the License. - diff --git a/src/IntCurve/IntCurve_ToolPolygon.gxx b/src/IntCurve/IntCurve_ToolPolygon.gxx deleted file mode 100755 index 47d78c6475..0000000000 --- a/src/IntCurve/IntCurve_ToolPolygon.gxx +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) 1995-1999 Matra Datavision -// Copyright (c) 1999-2012 OPEN CASCADE SAS -// -// The content of this file is subject to the Open CASCADE Technology Public -// License Version 6.5 (the "License"). You may not use the content of this file -// except in compliance with the License. Please obtain a copy of the License -// at http://www.opencascade.org and read it completely before using this file. -// -// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its -// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. -// -// The Original Code and all software distributed under the License is -// distributed on an "AS IS" basis, without warranty of any kind, and the -// Initial Developer hereby disclaims all such warranties, including without -// limitation, any warranties of merchantability, fitness for a particular -// purpose or non-infringement. Please see the License for the specific terms -// and conditions governing the rights and limitations under the License. - diff --git a/src/IntCurve/IntCurve_ToolPolygon.lxx b/src/IntCurve/IntCurve_ToolPolygon.lxx deleted file mode 100755 index 47d78c6475..0000000000 --- a/src/IntCurve/IntCurve_ToolPolygon.lxx +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) 1995-1999 Matra Datavision -// Copyright (c) 1999-2012 OPEN CASCADE SAS -// -// The content of this file is subject to the Open CASCADE Technology Public -// License Version 6.5 (the "License"). You may not use the content of this file -// except in compliance with the License. Please obtain a copy of the License -// at http://www.opencascade.org and read it completely before using this file. -// -// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its -// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. -// -// The Original Code and all software distributed under the License is -// distributed on an "AS IS" basis, without warranty of any kind, and the -// Initial Developer hereby disclaims all such warranties, including without -// limitation, any warranties of merchantability, fitness for a particular -// purpose or non-infringement. Please see the License for the specific terms -// and conditions governing the rights and limitations under the License. - diff --git a/src/IntPatch/IntPatch_PolygoTool.cdl b/src/IntPatch/IntPatch_PolygoTool.cdl deleted file mode 100755 index 1bc1bc552f..0000000000 --- a/src/IntPatch/IntPatch_PolygoTool.cdl +++ /dev/null @@ -1,18 +0,0 @@ --- Copyright (c) 1995-1999 Matra Datavision --- Copyright (c) 1999-2012 OPEN CASCADE SAS --- --- The content of this file is subject to the Open CASCADE Technology Public --- License Version 6.5 (the "License"). You may not use the content of this file --- except in compliance with the License. Please obtain a copy of the License --- at http://www.opencascade.org and read it completely before using this file. --- --- The Initial Developer of the Original Code is Open CASCADE S.A.S., having its --- main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. --- --- The Original Code and all software distributed under the License is --- distributed on an "AS IS" basis, without warranty of any kind, and the --- Initial Developer hereby disclaims all such warranties, including without --- limitation, any warranties of merchantability, fitness for a particular --- purpose or non-infringement. Please see the License for the specific terms --- and conditions governing the rights and limitations under the License. - diff --git a/src/IntPatch/IntPatch_PolygoTool.cxx b/src/IntPatch/IntPatch_PolygoTool.cxx deleted file mode 100755 index 47d78c6475..0000000000 --- a/src/IntPatch/IntPatch_PolygoTool.cxx +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) 1995-1999 Matra Datavision -// Copyright (c) 1999-2012 OPEN CASCADE SAS -// -// The content of this file is subject to the Open CASCADE Technology Public -// License Version 6.5 (the "License"). You may not use the content of this file -// except in compliance with the License. Please obtain a copy of the License -// at http://www.opencascade.org and read it completely before using this file. -// -// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its -// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. -// -// The Original Code and all software distributed under the License is -// distributed on an "AS IS" basis, without warranty of any kind, and the -// Initial Developer hereby disclaims all such warranties, including without -// limitation, any warranties of merchantability, fitness for a particular -// purpose or non-infringement. Please see the License for the specific terms -// and conditions governing the rights and limitations under the License. - diff --git a/src/IntPatch/IntPatch_PolygoTool.lxx b/src/IntPatch/IntPatch_PolygoTool.lxx deleted file mode 100755 index 47d78c6475..0000000000 --- a/src/IntPatch/IntPatch_PolygoTool.lxx +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) 1995-1999 Matra Datavision -// Copyright (c) 1999-2012 OPEN CASCADE SAS -// -// The content of this file is subject to the Open CASCADE Technology Public -// License Version 6.5 (the "License"). You may not use the content of this file -// except in compliance with the License. Please obtain a copy of the License -// at http://www.opencascade.org and read it completely before using this file. -// -// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its -// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. -// -// The Original Code and all software distributed under the License is -// distributed on an "AS IS" basis, without warranty of any kind, and the -// Initial Developer hereby disclaims all such warranties, including without -// limitation, any warranties of merchantability, fitness for a particular -// purpose or non-infringement. Please see the License for the specific terms -// and conditions governing the rights and limitations under the License. - diff --git a/src/Intf/Intf_InterferencePolygon2d.gxx b/src/Intf/Intf_InterferencePolygon2d.gxx deleted file mode 100755 index 47d78c6475..0000000000 --- a/src/Intf/Intf_InterferencePolygon2d.gxx +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) 1995-1999 Matra Datavision -// Copyright (c) 1999-2012 OPEN CASCADE SAS -// -// The content of this file is subject to the Open CASCADE Technology Public -// License Version 6.5 (the "License"). You may not use the content of this file -// except in compliance with the License. Please obtain a copy of the License -// at http://www.opencascade.org and read it completely before using this file. -// -// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its -// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. -// -// The Original Code and all software distributed under the License is -// distributed on an "AS IS" basis, without warranty of any kind, and the -// Initial Developer hereby disclaims all such warranties, including without -// limitation, any warranties of merchantability, fitness for a particular -// purpose or non-infringement. Please see the License for the specific terms -// and conditions governing the rights and limitations under the License. - diff --git a/src/Intf/Intf_ToolPolygon.cdl b/src/Intf/Intf_ToolPolygon.cdl deleted file mode 100755 index 1bc1bc552f..0000000000 --- a/src/Intf/Intf_ToolPolygon.cdl +++ /dev/null @@ -1,18 +0,0 @@ --- Copyright (c) 1995-1999 Matra Datavision --- Copyright (c) 1999-2012 OPEN CASCADE SAS --- --- The content of this file is subject to the Open CASCADE Technology Public --- License Version 6.5 (the "License"). You may not use the content of this file --- except in compliance with the License. Please obtain a copy of the License --- at http://www.opencascade.org and read it completely before using this file. --- --- The Initial Developer of the Original Code is Open CASCADE S.A.S., having its --- main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. --- --- The Original Code and all software distributed under the License is --- distributed on an "AS IS" basis, without warranty of any kind, and the --- Initial Developer hereby disclaims all such warranties, including without --- limitation, any warranties of merchantability, fitness for a particular --- purpose or non-infringement. Please see the License for the specific terms --- and conditions governing the rights and limitations under the License. - diff --git a/src/Intf/Intf_ToolPolygon.gxx b/src/Intf/Intf_ToolPolygon.gxx deleted file mode 100755 index 47d78c6475..0000000000 --- a/src/Intf/Intf_ToolPolygon.gxx +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) 1995-1999 Matra Datavision -// Copyright (c) 1999-2012 OPEN CASCADE SAS -// -// The content of this file is subject to the Open CASCADE Technology Public -// License Version 6.5 (the "License"). You may not use the content of this file -// except in compliance with the License. Please obtain a copy of the License -// at http://www.opencascade.org and read it completely before using this file. -// -// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its -// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. -// -// The Original Code and all software distributed under the License is -// distributed on an "AS IS" basis, without warranty of any kind, and the -// Initial Developer hereby disclaims all such warranties, including without -// limitation, any warranties of merchantability, fitness for a particular -// purpose or non-infringement. Please see the License for the specific terms -// and conditions governing the rights and limitations under the License. - diff --git a/src/NCollection/FILES b/src/NCollection/FILES index ab4bc9b454..2a3509bcdd 100755 --- a/src/NCollection/FILES +++ b/src/NCollection/FILES @@ -61,8 +61,6 @@ NCollection_BaseVector.cxx NCollection_Vector.hxx NCollection_DefineVector.hxx NCollection_StdBase.hxx -templates2macros.sh -NCollection.mdl.gz NCollection_EBTree.hxx NCollection_UBTree.hxx diff --git a/src/NCollection/NCollection.mdl.gz b/src/NCollection/NCollection.mdl.gz deleted file mode 100755 index ed83a35a3ce627beb4d49c0de0f6d3d25a12db46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75099 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

(WeyA@~=8_A>I@LDSJ~x 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 a4P7@|M@RibrPZfvlK%j(G(9 78) $0 = str " \\" - else $0 = str substr(str0, 1, 79-len) "\\" - } -# -------------- Check and corect the file header ----------- -/\/\/ *Copyright *:/ { - print "// Automatically created from " in_file " by GAWK" - } -/\/\/ *File *:/ || -/#(ifndef|define) *NCollection_/ { - gsub ("NCollection_","NCollection_Define") - } - -# --------------- Modify the include statement for used templates ------ -/^ *\#include / { - print "\#include " - next - } -/^ *\#include / { - gsub ("NCollection_T","NCollection_DefineT") - } -/^ *\#include / { - gsub ("NCollection_Array","NCollection_DefineArray") - } -/^ *\#include / { - gsub ("NCollection_Sequence","NCollection_DefineSequence") - } -/^ *\#include / { - gsub ("NCollection_Set","NCollection_DefineSet") - } - -# -------------- Replace line #define NCOLLECTION_H... ----------------- -/^ *#define NCOLLECTION_H.*\(.*\).*$/ { - defh = $0 - do getline defcl; while (defcl ~ /^ *\\/) - coll_type = gensub ("^.*public *NCollection_\([A-Za-z0-9_]*\) *.*$", - "\\1", 1, defcl) - gsub (", *Type\\)",", _" coll_type "Type_\)", defh) - gsub (" *\\\\$","", defh) - PrintBSL(gensub ("NCOLLECTION_","DEFINE_", 1, defh)) - print - PrintBSL("") - print - gsub ("NCollection_" coll_type " *", "_" coll_type "Type_", defcl) - PrintBSL(gensub ("^\(.*\) *\\\\$","\\1", 1, defcl)) - print - flag = 10 - next - } - -# -------------- Replace the line "\#define ...." for "template ...." -- -/^ *template *< *class/,/^ *{ *$/ { - if (flag == 0) { - type = gensub ("^ *template.*NCollection_\([A-Za-z0-9]*\).*$","\\1","g") - item_t = gensub("^ *template *< *class *\([A-Za-z0-9_]*\) *\(,|>\).*$",\ - "\\1",1) - item_tt= gensub("^ *template.*, *class *\([A-Za-z0-9_]*\) *\(,|>\).*$",\ - "\\1",1) - if (item_tt == $0) item_tt = "" - if (type == "BaseCollection") - PrintBSL("#define DEFINE_" toupper(type) "(_ClassName_, "item_t")") - else if (item_tt == "") - PrintBSL("#define DEFINE_" toupper(type) \ - "(_ClassName_, _BaseCollection_, " item_t ")") - else - PrintBSL("#define DEFINE_" toupper(type) \ - "(_ClassName_, _BaseCollection_, " item_t ", " item_tt ")") - # Special addition for the Iterator - if (type == "TListIterator") - { - print - PrintBSL("DEFINE_TLISTNODE(TListNode, _BaseCollection_, " item_t ")") - } - flag = 1 - } else if (flag == 1) { - gsub ("^ *", "class _ClassName_ ") - flag = 2 - } - } - -# --------------- Detect the final line of the template class definition ---- -/^}; *$/{ flag = 0 } - -# --------------- Replace C-style comments for C++-style ones --------------- -/\/\// { if (flag == 2) $0=gensub ("// *\(.*\) *$","/\* \\1 \*/", "g") } - -# --------------- Replace "Raise_if.." for "#ifdef DEB ..::Raise.. #endif" -- -/^\# *ifdef *DEB/ { - nline = 0 - if (flag == 0) { - while (1) { - getline debl - if (debl ~ /^\# *endif/) break; - print debl - } - } else { - getline debl; - if (debl !~ /^ *if *\(/) { - print "ERROR: in " in_file " cannot find if after \#ifdef DEB" \ - > "/dev/stderr" - exit 1 - } - if (debl ~ /^ *if *\(.*\) *$/) - condl = gensub ("^ *if *\\( *(.*) *\\) *$", "\\1", 1, debl) - else - condl = gensub ("^ *if *\\( *(.*) *$", "\\1", 1, debl) - while(1) { - getline debl; - if (debl ~ /^\# *endif/) break; - if (debl !~ /Standard.*::Raise/) - condl = gensub("^ *(.*[^\\)]) *($|\\) *$)", condl "\\1", 1, debl) - else { - PrintBSL(gensub ("^ \(.*\):: *Raise *\\(.*$", - "\\1_Raise_if", 1, debl)) - print - PrintBSL(gensub ("^ ( *)Standard.*Raise *\\( *\"NCollection_" \ - type "(.*)\" *\\) *\; *$", - "\\1 (" condl ", #_ClassName_ \"\\2\")\;", - 1, debl)) - print - } - } - } - next -} - -# --------------- Remove #pragma warning (default:4291) from the output ----- -/^\# *ifdef WNT/ { - defh = $0 - has_printed = 0 - while (1) { - getline defcl - if (defcl ~ /^[ \t]*$/) continue; - if (defcl ~ /^\# *pragma +warning *\(default *: *4291 *\)/) continue; - if (defcl ~ /^\# *endif/) { - if (has_printed) print defcl - break - } - if (has_printed == 0) { - has_printed = 1 - print defh - } - print defcl - } - next -} - -# --------------- Replace "DEFINE_T.*..." for typedef ... ------------------- -# in classes List, Queue, Set, Stack -/^ *typedef NCollection_T[A-Za-z]*/ { - if (flag > 1) { - tsup = gensub("^ *typedef.*NCollection_\([A-Za-z0-9]*\).*$","\\1",1) - tdef = gensub("^ *typedef.*<[A-Za-z0-9]*> *([A-Za-z0-9]*)\;.*$","\\1",1) - gsub ("typedef.*$", "DEFINE_" toupper(tsup) "(" tdef \ - ",_BaseCollection_," item_t ")") - } - } - -# --------------- Replace public T* with DEFINE... -------------------------- -/^ *class.*: *public *NCollection_T[A-Za-z]*<.*>/ { - if (flag > 1) { - ttempl = gensub("^ *class.*: *public *(NCollection_T[A-Za-z0-9]*<.*>).*$","\\1",1) - tshort = gensub("^ *class.*: *public *NCollection_(T[A-Za-z0-9]*)<.*$","\\1",1) - spub = gensub("(^ *class.*: *public *)NCollection_(T[A-Za-z0-9]*)<.*($)", - "\\1\\2\\3",1) - tpara = gensub("^.*<(.*)>","\\1",1) - PrintBSL(" DEFINE_" toupper(tshort) "(" tshort ",_BaseCollection_," tpara ")") - print - PrintBSL(spub) - print - next - } - } - -# ------- General case: replace the macro parameter for class name and print - - { if (flag == 10) { - nsub = gsub ("NCollection_" coll_type " *", - "_" coll_type "Type_") - if (nsub) { - gsub (" *\\\\$","") - PrintBSL($0) - } - } else if (flag > 1) { - gsub ("NCollection_BaseCollection *< *\("item_t"|"item_tt"\) *>", \ - "_BaseCollection_") - gsub ("NCollection_TListNode *< *\("item_t"|"item_tt"\) *>", \ - "TListNode") - gsub ("NCollection_TListIterator *< *\("item_t"|"item_tt"\) *>", \ - "TListIterator") - gsub (ttempl, tshort) - gsub (":: *Raise *\\( *\"NCollection_" type, - "::Raise (#_ClassName_ \"") - PrintBSL(gensub ("NCollection_" type \ - "\(<"item_t">|<"item_tt">|\)\(\[^A-Za-z\]|$\)", \ - "_ClassName_\\2","g")) - } - print - } - -' in_file=$IN_FILE out_file=$OUT_FILE $IN_FILE > $OUT_FILE -echo "\t$IN_FILE converted to $OUT_FILE" -done diff --git a/src/OpenGl/OpenGl_GraphicDriver_5.cxx b/src/OpenGl/OpenGl_GraphicDriver_5.cxx deleted file mode 100755 index 374bb60314..0000000000 --- a/src/OpenGl/OpenGl_GraphicDriver_5.cxx +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) 1999-2012 OPEN CASCADE SAS -// -// The content of this file is subject to the Open CASCADE Technology Public -// License Version 6.5 (the "License"). You may not use the content of this file -// except in compliance with the License. Please obtain a copy of the License -// at http://www.opencascade.org and read it completely before using this file. -// -// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its -// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. -// -// The Original Code and all software distributed under the License is -// distributed on an "AS IS" basis, without warranty of any kind, and the -// Initial Developer hereby disclaims all such warranties, including without -// limitation, any warranties of merchantability, fitness for a particular -// purpose or non-infringement. Please see the License for the specific terms -// and conditions governing the rights and limitations under the License. - diff --git a/src/OpenGl/OpenGl_GraphicDriver_6.cxx b/src/OpenGl/OpenGl_GraphicDriver_6.cxx deleted file mode 100755 index 374bb60314..0000000000 --- a/src/OpenGl/OpenGl_GraphicDriver_6.cxx +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) 1999-2012 OPEN CASCADE SAS -// -// The content of this file is subject to the Open CASCADE Technology Public -// License Version 6.5 (the "License"). You may not use the content of this file -// except in compliance with the License. Please obtain a copy of the License -// at http://www.opencascade.org and read it completely before using this file. -// -// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its -// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. -// -// The Original Code and all software distributed under the License is -// distributed on an "AS IS" basis, without warranty of any kind, and the -// Initial Developer hereby disclaims all such warranties, including without -// limitation, any warranties of merchantability, fitness for a particular -// purpose or non-infringement. Please see the License for the specific terms -// and conditions governing the rights and limitations under the License. - diff --git a/src/QAResources/DrawPlugin b/src/QAResources/DrawPlugin deleted file mode 100755 index 0ca7a3b562..0000000000 --- a/src/QAResources/DrawPlugin +++ /dev/null @@ -1 +0,0 @@ -QAcommands : TKQADraw diff --git a/src/QAResources/DrawPluginQA b/src/QAResources/DrawPluginQA deleted file mode 100755 index 0ca7a3b562..0000000000 --- a/src/QAResources/DrawPluginQA +++ /dev/null @@ -1 +0,0 @@ -QAcommands : TKQADraw diff --git a/src/QAResources/QADrawAppliInit b/src/QAResources/QADrawAppliInit deleted file mode 100755 index 0c48f47cd7..0000000000 --- a/src/QAResources/QADrawAppliInit +++ /dev/null @@ -1,18 +0,0 @@ -global tcl_platform - -source $env(DRAWDEFAULTOLD) - -###catch {pload ALL} -catch {pload FULL} -#catch {pload -DrawPluginProducts ALL} -catch {pload -DrawPluginProducts OMF CANONICALRECOGNITION EMESH PARASOLID DXF SAT } -catch {pload -DrawPluginQA QAcommands} - -###foreach h [array names Draw_Groups] { -### foreach f $Draw_Groups($h) { -### QARebuild $f -### } -###} - -catch {source $env(CSF_DrawPluginQADefaults)/QARebuildCommands} - diff --git a/src/Standard/StandardCSFDB.cxx b/src/Standard/StandardCSFDB.cxx deleted file mode 100755 index 066b9ba7a6..0000000000 --- a/src/Standard/StandardCSFDB.cxx +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) 1998-1999 Matra Datavision -// Copyright (c) 1999-2012 OPEN CASCADE SAS -// -// The content of this file is subject to the Open CASCADE Technology Public -// License Version 6.5 (the "License"). You may not use the content of this file -// except in compliance with the License. Please obtain a copy of the License -// at http://www.opencascade.org and read it completely before using this file. -// -// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its -// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. -// -// The Original Code and all software distributed under the License is -// distributed on an "AS IS" basis, without warranty of any kind, and the -// Initial Developer hereby disclaims all such warranties, including without -// limitation, any warranties of merchantability, fitness for a particular -// purpose or non-infringement. Please see the License for the specific terms -// and conditions governing the rights and limitations under the License. - diff --git a/src/StdResource/FILES b/src/StdResource/FILES index ed508356bd..278184f5fc 100755 --- a/src/StdResource/FILES +++ b/src/StdResource/FILES @@ -4,6 +4,5 @@ icon:::MDTV-Standard.xwd loginfile:::Plugin appresource:::XCAF appresource:::TObj -srcinc:::dftree.tcl appresource:::StandardLite appresource:::MigrationSheet.txt diff --git a/src/StdResource/dftree.tcl b/src/StdResource/dftree.tcl deleted file mode 100755 index 8b13789179..0000000000 --- a/src/StdResource/dftree.tcl +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/UnitsAPI/.CurrentUnits b/src/UnitsAPI/.CurrentUnits deleted file mode 100755 index a589973f4a..0000000000 --- a/src/UnitsAPI/.CurrentUnits +++ /dev/null @@ -1,74 +0,0 @@ -MASS: kg -LENGTH: m -TIME: s -ELECTRIC CURRENT: A -THERMODYNAMIC TEMPERATURE: °K -AMOUNT OF SUBSTANCE: mol -PLANE ANGLE: rad -SOLID ANGLE: sr -AREA: m² -VOLUME: m³ -INERTIA: m**4 -ANGULAR SPEED: rad/s -SPEED: m/s -ACCELERATION: m/s² -FREQUENCY: Hz -VOLUMIC MASS: kg/m³ -MASS FLOW: kg/s -VOLUME FLOW: m³/s -CONSUMPTION: m² -QUANTITY OF MOVEMENT: kg*m/s -KINETIC MOMENT: kg*m²/s -MOMENT OF INERTIA: kg*m² -FORCE: N -MOMENT OF A FORCE: N*m -LINEIC FORCE: N/m -PRESSURE: Pa -DYNAMIC VISCOSITY: Pa/s -KINETIC VISCOSITY: m²/s -TENSION SUPERFICIELLE: m/s² -ELECTRIC POTENTIAL: V -ENERGY: J -POWER: W -LINEIC POWER: W/m -SURFACIC POWER: W/m² -VOLUMIC POWER: W/m³ -COEFFICIENT OF LINEAR INFLATION: 1./°K -THERMICAL CONDUCTIVITY: W/m/°K -THERMICAL CONVECTIVITY: W/m²/°K -THERMICAL MASSIC CAPACITY: J/kg/°K -ENTROPY: J/°K -ENTHALPY: J -LUMINOUS FLUX: Lu -LUMINANCE: cd/m² -EXITANCE: lx -LUMINOUS INTENSITY: cd -LUMINOUS EXPOSITION: lx*s -LUMINOUS EFFICACITY: Lu/W -LUMINOUS FLUX: Lu -ILLUMINANCE: lx -ELECTRIC CHARGE: C -ELECTRIC FIELD: V/m -ELECTRIC CAPACITANCE: F -MAGNETIC FIELD: A/m -MAGNETIC FLUX DENSITY: T -MAGNETIC FLUX: Wb -INDUCTANCE: H -RELUCTANCE: 1./H -ELECTRIC RESISTANCE: O -ELECTRIC CONDUCTANCE: S -RESISTIVITY: O*m -CONDUCTIVITY: S/m -MOLAR MASS: kg/mol -MOLAR VOLUME: m³/mol -CONCENTRATION: kg/m³ -MOLAR CONCENTRATION: mol/m³ -MOLARITY: mol/kg -ACCOUSTIC INTENSITY: B -DOSE EQUIVALENT: Si -ABSORBED DOSE: Gr -ACTIVITY (OF A RADIONUCLEIDE): Be -FLUX OF MAGNETIC INDUCTION: kg*m²/s²/A -ROTATION ACCELERATION: rad/s² -TRANSLATION STIFFNESS: N/m -ROTATION STIFFNESS: N*m/rad diff --git a/src/UnitsAPI/.MDTVBaseUnits b/src/UnitsAPI/.MDTVBaseUnits deleted file mode 100755 index 50f95c4da6..0000000000 --- a/src/UnitsAPI/.MDTVBaseUnits +++ /dev/null @@ -1,70 +0,0 @@ -MASS: kg -LENGTH: mm -TIME: s -ELECTRIC CURRENT: A -THERMODYNAMIC TEMPERATURE: °K -AMOUNT OF SUBSTANCE: mol -PLANE ANGLE: rad -SOLID ANGLE: sr -AREA: mm² -VOLUME: mm³ -INERTIA: mm**4 -ANGULAR SPEED: rad/s -SPEED: mm/s -ACCELERATION: mm/s² -FREQUENCY: Hz -VOLUMIC MASS: kg/mm³ -MASS FLOW: kg/s -VOLUME FLOW: mm³/s -CONSUMPTION: mm² -QUANTITY OF MOVEMENT: kg*mm/s -KINETIC MOMENT: kg*mm²/s -MOMENT OF INERTIA: kg*mm² -FORCE: kg*mm/s² -MOMENT OF A FORCE: kg*mm²/s² -PRESSURE: kg/(mm*s²) -DYNAMIC VISCOSITY: kg/(mm*s) -KINETIC VISCOSITY: mm²/s -TENSION SUPERFICIELLE: mm/s² -ELECTRIC POTENTIAL: V -ENERGY: kg*mm²/s² -POWER: kg*mm²/s³ -LINEIC POWER: kg*mm/s³ -SURFACIC POWER: kg/s³ -VOLUMIC POWER: kg/(mm*s³) -COEFFICIENT OF LINEAR INFLATION: 1./°K -THERMICAL CONDUCTIVITY: kg*mm/(s³*°K) -THERMICAL CONVECTIVITY: kg/(s³*°K) -THERMICAL MASSIC CAPACITY: mm²/(s²*°K) -ENTROPY: kg*mm²/(s²*°K) -ENTHALPY: kg*mm²/s² -LUMINOUS FLUX: Lu -LUMINANCE: cd/mm² -EXITANCE: lx -LUMINOUS INTENSITY: cd -LUMINOUS EXPOSITION: lx*s -LUMINOUS EFFICACITY: s³*Lu/(kg*mm²) -LUMINOUS FLUX: Lu -ILLUMINANCE: lx -ELECTRIC CHARGE: C -ELECTRIC FIELD: V/mm -ELECTRIC CAPACITANCE: s**4*A²/(kg*mm²) -MAGNETIC FIELD: A/mm -MAGNETIC FLUX DENSITY: T -MAGNETIC FLUX: kg*mm²/(s²*A) -INDUCTANCE: kg*mm²/(s²*A²) -RELUCTANCE: s²*A²/(kg*mm²) -ELECTRIC RESISTANCE: O -ELECTRIC CONDUCTANCE: S -RESISTIVITY: O*mm -CONDUCTIVITY: S/mm -MOLAR MASS: kg/mol -MOLAR VOLUME: mm³/mol -CONCENTRATION: kg/mm³ -MOLAR CONCENTRATION: mol/mm³ -MOLARITY: mol/kg -ACCOUSTIC INTENSITY: mm/A² -DOSE EQUIVALENT: mm²/s² -ABSORBED DOSE: mm²/s² -ACTIVITY (OF A RADIONUCLEIDE): Be -FLUX OF MAGNETIC INDUCTION: kg*mm\062/(s\062*A) diff --git a/src/UnitsAPI/.MDTVCurrentUnits b/src/UnitsAPI/.MDTVCurrentUnits deleted file mode 100755 index dab3a5f056..0000000000 --- a/src/UnitsAPI/.MDTVCurrentUnits +++ /dev/null @@ -1,74 +0,0 @@ -MASS: kg -LENGTH: mm -TIME: s -ELECTRIC CURRENT: A -THERMODYNAMIC TEMPERATURE: °K -AMOUNT OF SUBSTANCE: mol -PLANE ANGLE: rad -SOLID ANGLE: sr -AREA: mm² -VOLUME: mm³ -INERTIA: mm**4 -ANGULAR SPEED: rad/s -SPEED: mm/s -ACCELERATION: mm/s² -FREQUENCY: Hz -VOLUMIC MASS: kg/mm³ -MASS FLOW: kg/s -VOLUME FLOW: mm³/s -CONSUMPTION: mm² -QUANTITY OF MOVEMENT: kg*mm/s -KINETIC MOMENT: kg*mm²/s -MOMENT OF INERTIA: kg*mm² -FORCE: kg*mm/s² -MOMENT OF A FORCE: kg*mm²/s² -LINEIC FORCE: kg/s² -PRESSURE: kg/(mm*s²) -DYNAMIC VISCOSITY: kg/(mm*s) -KINETIC VISCOSITY: mm²/s -TENSION SUPERFICIELLE: mm/s² -ELECTRIC POTENTIAL: V -ENERGY: kg*mm²/s² -POWER: kg*mm²/s³ -LINEIC POWER: kg*mm/s³ -SURFACIC POWER: kg/s³ -VOLUMIC POWER: kg/(mm*s³) -COEFFICIENT OF LINEAR INFLATION: 1./°K -THERMICAL CONDUCTIVITY: kg*mm/(s³*°K) -THERMICAL CONVECTIVITY: kg/(s³*°K) -THERMICAL MASSIC CAPACITY: mm²/(s²*°K) -ENTROPY: kg*mm²/(s²*°K) -ENTHALPY: kg*mm²/s² -LUMINOUS FLUX: Lu -LUMINANCE: cd/mm² -EXITANCE: lx -LUMINOUS INTENSITY: cd -LUMINOUS EXPOSITION: lx*s -LUMINOUS EFFICACITY: s³*Lu/(kg*mm²) -LUMINOUS FLUX: Lu -ILLUMINANCE: lx -ELECTRIC CHARGE: C -ELECTRIC FIELD: V/mm -ELECTRIC CAPACITANCE: s**4*A²/(kg*mm²) -MAGNETIC FIELD: A/mm -MAGNETIC FLUX DENSITY: T -MAGNETIC FLUX: kg*mm²/(s²*A) -INDUCTANCE: kg*mm²/(s²*A²) -RELUCTANCE: s²*A²/(kg*mm²) -ELECTRIC RESISTANCE: O -ELECTRIC CONDUCTANCE: S -RESISTIVITY: O*mm -CONDUCTIVITY: S/mm -MOLAR MASS: kg/mol -MOLAR VOLUME: mm³/mol -CONCENTRATION: kg/mm³ -MOLAR CONCENTRATION: mol/mm³ -MOLARITY: mol/kg -ACCOUSTIC INTENSITY: mm/A² -DOSE EQUIVALENT: mm²/s² -ABSORBED DOSE: mm²/s² -ACTIVITY (OF A RADIONUCLEIDE): Be -FLUX OF MAGNETIC INDUCTION: kg*mm²/(s²*A) -ROTATION ACCELERATION: rad/s² -TRANSLATION STIFFNESS: kg/s² -ROTATION STIFFNESS: kg*mm²/(s²*rad) diff --git a/src/V3d/V3d_Camera.cdl b/src/V3d/V3d_Camera.cdl deleted file mode 100755 index 36aa32f358..0000000000 --- a/src/V3d/V3d_Camera.cdl +++ /dev/null @@ -1,17 +0,0 @@ --- Copyright (c) 1999-2012 OPEN CASCADE SAS --- --- The content of this file is subject to the Open CASCADE Technology Public --- License Version 6.5 (the "License"). You may not use the content of this file --- except in compliance with the License. Please obtain a copy of the License --- at http://www.opencascade.org and read it completely before using this file. --- --- The Initial Developer of the Original Code is Open CASCADE S.A.S., having its --- main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. --- --- The Original Code and all software distributed under the License is --- distributed on an "AS IS" basis, without warranty of any kind, and the --- Initial Developer hereby disclaims all such warranties, including without --- limitation, any warranties of merchantability, fitness for a particular --- purpose or non-infringement. Please see the License for the specific terms --- and conditions governing the rights and limitations under the License. - diff --git a/src/V3d/V3d_Camera.cxx b/src/V3d/V3d_Camera.cxx deleted file mode 100755 index 374bb60314..0000000000 --- a/src/V3d/V3d_Camera.cxx +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) 1999-2012 OPEN CASCADE SAS -// -// The content of this file is subject to the Open CASCADE Technology Public -// License Version 6.5 (the "License"). You may not use the content of this file -// except in compliance with the License. Please obtain a copy of the License -// at http://www.opencascade.org and read it completely before using this file. -// -// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its -// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. -// -// The Original Code and all software distributed under the License is -// distributed on an "AS IS" basis, without warranty of any kind, and the -// Initial Developer hereby disclaims all such warranties, including without -// limitation, any warranties of merchantability, fitness for a particular -// purpose or non-infringement. Please see the License for the specific terms -// and conditions governing the rights and limitations under the License. - diff --git a/src/gp/gp_Quaternion.hxx b/src/gp/gp_Quaternion.hxx deleted file mode 100644 index 58cbac72fc..0000000000 --- a/src/gp/gp_Quaternion.hxx +++ /dev/null @@ -1,537 +0,0 @@ -// Copyright (c) 1999-2012 OPEN CASCADE SAS -// -// The content of this file is subject to the Open CASCADE Technology Public -// License Version 6.5 (the "License"). You may not use the content of this file -// except in compliance with the License. Please obtain a copy of the License -// at http://www.opencascade.org and read it completely before using this file. -// -// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its -// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. -// -// The Original Code and all software distributed under the License is -// distributed on an "AS IS" basis, without warranty of any kind, and the -// Initial Developer hereby disclaims all such warranties, including without -// limitation, any warranties of merchantability, fitness for a particular -// purpose or non-infringement. Please see the License for the specific terms -// and conditions governing the rights and limitations under the License. - -#ifndef _gp_Quaternion_HeaderFile -#define _gp_Quaternion_HeaderFile - -/** - * Initial sources based on free samples from - * http://www.gamedev.ru/code/articles/?id=4215&page=3 - */ - -#include -#include -#include - -//! General quaternion class (unit and nonunit), -//! designed for 3d rotations and orientation representation
-class gp_Quaternion -{ - -public: - - //! Creates an identity quaternion.
- gp_Quaternion() - : x (0.0), y (0.0), z (0.0), w (1.0) {} - - gp_Quaternion (Standard_Real x, Standard_Real y, Standard_Real z, Standard_Real w) - : x (x), y (y), z (z), w (w) {} - - gp_Quaternion (const gp_Quaternion& theToCopy) - : x (theToCopy.x), y (theToCopy.y), z (theToCopy.z), w (theToCopy.w) {} - - gp_Quaternion (const gp_Vec& theVecFrom, const gp_Vec& theVecTo) - : x (0.0), y (0.0), z (0.0), w (1.0) - { - Init (theVecFrom, theVecTo); - } - - gp_Quaternion (const gp_Vec& theVecFrom, const gp_Vec& theVecTo, const gp_Vec& theHelpCrossVec) - : x (0.0), y (0.0), z (0.0), w (1.0) - { - Init (theVecFrom, theVecTo, theHelpCrossVec); - } - - //! Simple equal test without precision - Standard_Boolean IsEqual (const gp_Quaternion& theOther) const - { - if (this == &theOther) - { - return Standard_True; - } - return Abs (x - theOther.x) <= gp::Resolution() && - Abs (y - theOther.y) <= gp::Resolution() && - Abs (z - theOther.z) <= gp::Resolution() && - Abs (w - theOther.w) <= gp::Resolution(); - } - - /** - * Shortest arc quaternion rotate one vector to another by shortest path. - * Create rotation from -> to, for any length vectors. - * If vectors theVecFrom and theVecTo are opposite then rotation axis computed as - * theVecFrom * gp_Vec(1,0,0) or theVecFrom * gp_Vec(0,0,1). - */ - void Init (const gp_Vec& theVecFrom, const gp_Vec& theVecTo) - { - gp_Vec aVecCross (theVecFrom.Crossed (theVecTo)); - Set (aVecCross.X(), aVecCross.Y(), aVecCross.Z(), theVecFrom.Dot (theVecTo)); - Normalize(); // if "from" or "to" not unit, normalize quat - w += 1.0; // reducing angle to halfangle - if (w <= Precision::Confusion()) // angle close to PI - { - if ((theVecFrom.Z() * theVecFrom.Z()) > (theVecFrom.X() * theVecFrom.X())) - Set ( 0.0, theVecFrom.Z(), -theVecFrom.Y(), w); // theVecFrom * gp_Vec(1,0,0) - else - Set (theVecFrom.Y(), -theVecFrom.X(), 0.0, w); // theVecFrom * gp_Vec(0,0,1) - } - Normalize(); - } - - /** - * Shortest arc quaternion rotate one vector to another by shortest path. - * If vectors theVecFrom and theVecTo are opposite then rotation axis computed as - * theVecFrom * theHelpCrossVec. - */ - void Init (const gp_Vec& theVecFrom, const gp_Vec& theVecTo, const gp_Vec& theHelpCrossVec) - { - gp_Vec aVecCross (theVecFrom.Crossed (theVecTo)); - Set (aVecCross.X(), aVecCross.Y(), aVecCross.Z(), theVecFrom.Dot (theVecTo)); - Normalize(); // if "from" or "to" not unit, normalize quat - w += 1.0; // reducing angle to halfangle - if (w <= Precision::Confusion()) // angle close to PI - { - gp_Vec theAxis = theVecFrom.Crossed (theHelpCrossVec); - Set (theAxis.X(), theAxis.Y(), theAxis.Z(), w); - } - Normalize(); - } - - gp_Quaternion (const gp_Vec& theAxis, const Standard_Real& theAngle) - : x (0.0), y (0.0), z (0.0), w (1.0) - { - InitUnit (theAxis, theAngle); - } - - //! Create a unit quaternion from Axis+Angle representation - void InitUnit (const gp_Vec& theAxis, const Standard_Real& theAngle) - { - gp_Vec anAxis = theAxis.Normalized(); - Standard_Real anAngleHalf = 0.5 * theAngle; - Standard_Real sin_a = Sin (anAngleHalf); - Set (anAxis.X() * sin_a, anAxis.Y() * sin_a, anAxis.Z() * sin_a, Cos (anAngleHalf)); - } - - /** - * Convert a quaternion to Axis+Angle representation, - * preserve the axis direction and angle from -PI to +PI - */ - void GetAxisAngle (gp_Vec& theAxis, Standard_Real& theAngle) const - { - Standard_Real vl = Sqrt (x * x + y * y + z * z); - if (vl > Precision::Confusion()) - { - Standard_Real ivl = 1.0 / vl; - theAxis.SetCoord (x * ivl, y * ivl, z * ivl); - if (w < 0.0) - { - theAngle = 2.0 * ATan2 (-vl, -w); // [-PI, 0] - } - else - { - theAngle = 2.0 * ATan2 ( vl, w); // [ 0, PI] - } - } - else - { - theAxis.SetCoord (0.0, 0.0, 0.0); - theAngle = 0.0; - } - } - - /** - * Create a unit quaternion by rotation matrix - * matrix must contain only rotation (not scale or shear) - * - * For numerical stability we find first the greatest component of quaternion - * and than search others from this one - */ - void InitUnit (const gp_Mat& theMat) - { - Standard_Real tr = theMat (1, 1) + theMat (2, 2) + theMat(3, 3); // trace of martix - if (tr > 0.0) - { // if trace positive than "w" is biggest component - Set (theMat (3, 2) - theMat (2, 3), - theMat (1, 3) - theMat (3, 1), - theMat (2, 1) - theMat (1, 2), - tr + 1.0); - Scale (0.5 / Sqrt (w)); // "w" contain the "norm * 4" - } - else if ((theMat (1, 1) > theMat (2, 2)) && (theMat (1, 1) > theMat (3, 3))) - { // Some of vector components is bigger - Set (1.0 + theMat (1, 1) - theMat (2, 2) - theMat (3, 3), - theMat (1, 2) + theMat (2, 1), - theMat (1, 3) + theMat (3, 1), - theMat (3, 2) - theMat (2, 3)); - Scale (0.5 / Sqrt (x)); - } - else if (theMat (2, 2) > theMat (3, 3)) - { - Set (theMat (1, 2) + theMat (2, 1), - 1.0 + theMat (2, 2) - theMat (1, 1) - theMat (3, 3), - theMat (2, 3) + theMat (3, 2), - theMat (1, 3) - theMat (3, 1)); - Scale (0.5 / Sqrt (y)); - } - else - { - Set (theMat (1, 3) + theMat (3, 1), - theMat (2, 3) + theMat (3, 2), - 1.0 + theMat (3, 3) - theMat (1, 1) - theMat (2, 2), - theMat (2, 1) - theMat (1, 2)); - Scale (0.5 / Sqrt (z)); - } - } - - gp_Quaternion (const gp_Mat& theMat) - : x (0.0), y (0.0), z (0.0), w (1.0) - { - Init (theMat); - } - - /** - * Create a nonunit quaternion from rotation matrix - * martix must contain only rotation (not scale or shear) - * the result quaternion length is numerical stable - */ - void Init (const gp_Mat& theMat) - { - Standard_Real tr = theMat (1, 1) + theMat (2, 2) + theMat (3, 3); // trace of martix - if (tr > 0.0) - { // if trace positive than "w" is biggest component - Set (theMat (3, 2) - theMat (2, 3), - theMat (1, 3) - theMat (3, 1), - theMat (2, 1) - theMat (1, 2), - tr + 1.0); - } - else if ((theMat (1, 1) > theMat (2, 2)) && (theMat (1, 1) > theMat (3, 3))) - { // Some of vector components is bigger - Set (1.0 + theMat (1, 1) - theMat (2, 2) - theMat (3, 3), - theMat (1, 2) + theMat (2, 1), - theMat (1, 3) + theMat (3, 1), - theMat (3, 2) - theMat (2, 3)); - } - else if (theMat (2, 2) > theMat (3, 3)) - { - Set (theMat (1, 2) + theMat (2, 1), - 1.0 + theMat (2, 2) - theMat (1, 1) - theMat (3, 3), - theMat (2, 3) + theMat (3, 2), - theMat (1, 3) - theMat (3, 1)); - } - else - { - Set (theMat (1, 3) + theMat (3, 1), - theMat (2, 3) + theMat (3, 2), - 1.0 + theMat (3, 3) - theMat (1, 1) - theMat (2, 2), - theMat (2, 1) - theMat (1, 2)); - } - } - - //! Set the rotation to matrix - void GetRotateMatrix (gp_Mat& theMat) const - { - Standard_Real wx, wy, wz, xx, yy, yz, xy, xz, zz, x2, y2, z2; - Standard_Real s = 2.0 / Norm(); - x2 = x * s; y2 = y * s; z2 = z * s; - xx = x * x2; xy = x * y2; xz = x * z2; - yy = y * y2; yz = y * z2; zz = z * z2; - wx = w * x2; wy = w * y2; wz = w * z2; - - theMat (1, 1) = 1.0 - (yy + zz); - theMat (1, 2) = xy - wz; - theMat (1, 3) = xz + wy; - - theMat (2, 1) = xy + wz; - theMat (2, 2) = 1.0 - (xx + zz); - theMat (2, 3) = yz - wx; - - theMat (3, 1) = xz - wy; - theMat (3, 2) = yz + wx; - theMat (3, 3) = 1.0 - (xx + yy); - // 1 division 16 multiplications 15 addidtions 12 variables - } - - //! Set the rotation from unit quat to matrix - void GetRotateMatrixFromUnit (gp_Mat& theMat) const - { - Standard_Real wx, wy, wz, xx, yy, yz, xy, xz, zz, x2, y2, z2; - x2 = x + x; y2 = y + y; z2 = z + z; - xx = x * x2; xy = x * y2; xz = x * z2; - yy = y * y2; yz = y * z2; zz = z * z2; - wx = w * x2; wy = w * y2; wz = w * z2; - - theMat (1, 1) = 1.0 - (yy + zz); - theMat (1, 2) = xy - wz; - theMat (1, 3) = xz + wy; - - theMat (2, 1) = xy + wz; - theMat (2, 2) = 1.0 - (xx + zz); - theMat (2, 3) = yz - wx; - - theMat (3, 1) = xz - wy; - theMat (3, 2) = yz + wx; - theMat (3, 3) = 1.0 - (xx + yy); - } - - void Set (Standard_Real x, Standard_Real y, Standard_Real z, Standard_Real w) - { - this->x = x; this->y = y; this->z = z; this->w = w; - } - - void Set (const gp_Quaternion& theQuaternion) - { - x = theQuaternion.x; y = theQuaternion.y; z = theQuaternion.z; w = theQuaternion.w; - } - - Standard_Real X() const - { - return x; - } - - Standard_Real Y() const - { - return y; - } - - Standard_Real Z() const - { - return z; - } - - Standard_Real W() const - { - return w; - } - - //! Make identity quaternion (zero-rotation) - void Ident() - { - x = 0.0; y = 0.0; z = 0.0; w = 1.0; - } - - //! Reverse rotation - void Conjugate() - { - x = -x; y = -y; z = -z; - } - - //! Return reversed rotation - gp_Quaternion Conjugated() const - { - return gp_Quaternion (-x, -y, -z, w); - } - - //! Rotation will not be changed by this operation (except 0-scaling) - void Scale (Standard_Real theScale) - { - x *= theScale; y *= theScale; z *= theScale; w *= theScale; - } - - gp_Quaternion Scaled (const Standard_Real theScale) const - { - return gp_Quaternion (x * theScale, y * theScale, z * theScale, w * theScale); - } - - Standard_Real Norm() const - { - return x * x + y * y + z * z + w * w; - } - - Standard_Real Magnitude() const - { - return Sqrt (Norm()); - } - - //! Invert quaternion q = q^-1 - void Invert() - { - Standard_Real in = 1.0 / Norm(); - Set (-x * in, -y * in, -z * in, w * in); - } - - //! Return inversed quaternion q^-1 - gp_Quaternion Inverted() const - { - Standard_Real in = 1.0 / Norm(); - return gp_Quaternion (-x * in, -y * in, -z * in, w * in); - } - - /** - * Stabilize quaternion length within 1 - 1/4 - * This operation is a lot faster than normalization - * and preserve length goes to 0 or infinity - */ - void StabilizeLength() - { - Standard_Real cs = Abs (x) + Abs (y) + Abs (z) + Abs (w); - if (cs > 0.0) - { - x /= cs; y /= cs; z /= cs; w /= cs; - } - else - { - Ident(); - } - } - - /** - * Scale quaternion that its norm goes to 1 - * The appearing of 0 magnitude or near is a error, - * so we can be sure that can divide by magnitude - */ - void Normalize() - { - Standard_Real aMagn = Magnitude(); - if (aMagn < Precision::Confusion()) - { - StabilizeLength(); - aMagn = Magnitude(); - } - Scale (1.0 / aMagn); - } - - gp_Quaternion Normalized() const - { - gp_Quaternion aNormilizedQ (*this); - aNormilizedQ.Normalize(); - return aNormilizedQ; - } - - gp_Quaternion operator-() const - { - return gp_Quaternion (-x, -y, -z, -w); - } - - //! Result is "rotations mix" - gp_Quaternion Added (const gp_Quaternion& theQ) const - { - return gp_Quaternion (x + theQ.x, y + theQ.y, z + theQ.z, w + theQ.w); - } - - //! Result is "rotations mix" - gp_Quaternion operator+ (const gp_Quaternion& theQ) const - { - return Added(theQ); - } - - //! Result is "rotations mix" - gp_Quaternion Subtracted (const gp_Quaternion& theQ) const - { - return gp_Quaternion (x - theQ.x, y - theQ.y, z - theQ.z, w - theQ.w); - } - - //! Result is "rotations mix" - gp_Quaternion operator- (const gp_Quaternion& theQ) const - { - return Subtracted (theQ); - } - - //! Rotation will not be changed by this operation (except 0-scaling) - gp_Quaternion operator* (const Standard_Real& theScale) const - { - return gp_Quaternion (x * theScale, y * theScale, z * theScale, w * theScale); - } - - /** - * Multiply function - work the same as Matrices multiplying. - * qq' = (cross(v,v') + wv' + w'v, ww' - dot(v,v')) - * Result is rotation combination: q' than q (here q=this, q'=theQ). - * Notices than: - * qq' != q'q; - * qq^-1 = q; - */ - gp_Quaternion operator* (const gp_Quaternion& theQ) const - { - return gp_Quaternion (w * theQ.x + x * theQ.w + y * theQ.z - z * theQ.y, - w * theQ.y + y * theQ.w + z * theQ.x - x * theQ.z, - w * theQ.z + z * theQ.w + x * theQ.y - y * theQ.x, - w * theQ.w - x * theQ.x - y * theQ.y - z * theQ.z); - // 16 multiplications 12 addidtions 0 variables - } - - //! Result is "rotations mix" - const gp_Quaternion& Add (const gp_Quaternion& theQ) - { - x += theQ.x; y += theQ.y; z += theQ.z; w += theQ.w; - return *this; - } - - //! Result is "rotations mix" - const gp_Quaternion& operator+= (const gp_Quaternion& theQ) - { - return Add (theQ); - } - - //! Result is "rotations mix" - const gp_Quaternion& Subtract (const gp_Quaternion& theQ) - { - x -= theQ.x; y -= theQ.y; z -= theQ.z; w -= theQ.w; - return *this; - } - - //! Result is "rotations mix" - const gp_Quaternion& operator-= (const gp_Quaternion& theQ) - { - return Subtract(theQ); - } - - const gp_Quaternion& operator*= (const gp_Quaternion& theQ) - { - Set ((*this) * theQ); // have no optimization here - return *this; - } - - //! Inner product / scalar product / Dot - Standard_Real Dot (const gp_Quaternion& theQ) - { - return x * theQ.x + y * theQ.y + z * theQ.z + w * theQ.w; - } - - //! Return rotation angle from -PI to PI - Standard_Real GetRotationAngle() const - { - if (w < 0.0) - { - return 2.0 * ATan2 (-Sqrt (x * x + y * y + z * z), -w); - } - else - { - return 2.0 * ATan2 ( Sqrt (x * x + y * y + z * z), w); - } - } - - //! Return vector rotated by quaternion - gp_Vec Rotated (const gp_Vec& theVec) const - { - gp_Quaternion theQ (theVec.X() * w + theVec.Z() * y - theVec.Y() * z, - theVec.Y() * w + theVec.X() * z - theVec.Z() * x, - theVec.Z() * w + theVec.Y() * x - theVec.X() * y, - theVec.X() * x + theVec.Y() * y + theVec.Z() * z); - return gp_Vec (w * theQ.x + x * theQ.w + y * theQ.z - z * theQ.y, - w * theQ.y + y * theQ.w + z * theQ.x - x * theQ.z, - w * theQ.z + z * theQ.w + x * theQ.y - y * theQ.x) * (1.0 / Norm()); - } - -private: - -Standard_Real x; -Standard_Real y; -Standard_Real z; -Standard_Real w; - -}; - -#endif //_gp_Quaternion_HeaderFile