// Created on: 2016-11-14 // Created by: Varvara POSKONINA // Copyright (c) 2016 OPEN CASCADE SAS // // This file is part of Open CASCADE Technology software library. // // This library is free software; you can redistribute it and/or modify it under // the terms of the GNU Lesser General Public License version 2.1 as published // by the Free Software Foundation, with special exception defined in the file // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT // distribution for complete text of the license and disclaimer of any warranty. // // Alternatively, this file may be used under the terms of Open CASCADE // commercial license or contractual agreement. #include #include #include #include IMPLEMENT_STANDARD_RTTIEXT (Graphic3d_HatchStyle, Standard_Transient) static const unsigned int myPredefinedPatterns[Aspect_HS_NB][32] = { // Aspect_HS_SOLID { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }, // Aspect_HS_GRID_DIAGONAL { 0xFFFFFFFF, 0xBBBBBBBB, 0xEEEEEEEE, 0xBBBBBBBB, 0xEEEEEEEE, 0xBBBBBBBB, 0xEEEEEEEE, 0xBBBBBBBB, 0xEEEEEEEE, 0xBBBBBBBB, 0xEEEEEEEE, 0xBBBBBBBB, 0xEEEEEEEE, 0xBBBBBBBB, 0xEEEEEEEE, 0xBBBBBBBB, 0xEEEEEEEE, 0xBBBBBBBB, 0xEEEEEEEE, 0xBBBBBBBB, 0xEEEEEEEE, 0xBBBBBBBB, 0xEEEEEEEE, 0xBBBBBBBB, 0xEEEEEEEE, 0xBBBBBBBB, 0xEEEEEEEE, 0xBBBBBBBB, 0xEEEEEEEE, 0xBBBBBBBB, 0xEEEEEEEE, 0xBBBBBBBB }, // Aspect_HS_GRID_DIAGONAL_WIDE { 0x81818181, 0x24242424, 0x18181818, 0x42424242, 0x81818181, 0x24242424, 0x18181818, 0x42424242, 0x81818181, 0x24242424, 0x18181818, 0x42424242, 0x81818181, 0x24242424, 0x18181818, 0x42424242, 0x81818181, 0x24242424, 0x18181818, 0x42424242, 0x81818181, 0x24242424, 0x18181818, 0x42424242, 0x81818181, 0x24242424, 0x18181818, 0x42424242, 0x81818181, 0x24242424, 0x18181818, 0x42424242 }, // Aspect_HS_GRID { 0xFFFFFFFF, 0x88888888, 0xFFFFFFFF, 0x88888888, 0xFFFFFFFF, 0x88888888, 0xFFFFFFFF, 0x88888888, 0xFFFFFFFF, 0x88888888, 0xFFFFFFFF, 0x88888888, 0xFFFFFFFF, 0x88888888, 0xFFFFFFFF, 0x88888888, 0xFFFFFFFF, 0x88888888, 0xFFFFFFFF, 0x88888888, 0xFFFFFFFF, 0x88888888, 0xFFFFFFFF, 0x88888888, 0xFFFFFFFF, 0x88888888, 0xFFFFFFFF, 0x88888888, 0xFFFFFFFF, 0x88888888, 0xFFFFFFFF, 0x88888888 }, // Aspect_HS_GRID_WIDE { 0xFFFFFFFF, 0x80808080, 0x80808080, 0x80808080, 0xFFFFFFFF, 0x80808080, 0x80808080, 0x80808080, 0xFFFFFFFF, 0x80808080, 0x80808080, 0x80808080, 0xFFFFFFFF, 0x80808080, 0x80808080, 0x80808080, 0xFFFFFFFF, 0x80808080, 0x80808080, 0x80808080, 0xFFFFFFFF, 0x80808080, 0x80808080, 0x80808080, 0xFFFFFFFF, 0x80808080, 0x80808080, 0x80808080, 0xFFFFFFFF, 0x80808080, 0x80808080, 0x80808080 }, // Aspect_HS_DIAGONAL_45 { 0x88888888, 0x22222222, 0x88888888, 0x22222222, 0x88888888, 0x22222222, 0x88888888, 0x22222222, 0x88888888, 0x22222222, 0x88888888, 0x22222222, 0x88888888, 0x22222222, 0x88888888, 0x22222222, 0x88888888, 0x22222222, 0x88888888, 0x22222222, 0x88888888, 0x22222222, 0x88888888, 0x22222222, 0x88888888, 0x22222222, 0x88888888, 0x22222222, 0x88888888, 0x22222222, 0x88888888, 0x22222222 }, // Aspect_HS_DIAGONAL_135 { 0x11111111, 0x44444444, 0x11111111, 0x44444444, 0x11111111, 0x44444444, 0x11111111, 0x44444444, 0x11111111, 0x44444444, 0x11111111, 0x44444444, 0x11111111, 0x44444444, 0x11111111, 0x44444444, 0x11111111, 0x44444444, 0x11111111, 0x44444444, 0x11111111, 0x44444444, 0x11111111, 0x44444444, 0x11111111, 0x44444444, 0x11111111, 0x44444444, 0x11111111, 0x44444444, 0x11111111, 0x44444444 }, // Aspect_HS_HORIZONTAL { 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, 0x00000000 }, // Aspect_HS_VERTICAL { 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111, 0x11111111 }, // Aspect_HS_DIAGONAL_45_WIDE { 0x80808080, 0x20202020, 0x08080808, 0x02020202, 0x80808080, 0x20202020, 0x08080808, 0x02020202, 0x80808080, 0x20202020, 0x08080808, 0x02020202, 0x80808080, 0x20202020, 0x08080808, 0x02020202, 0x80808080, 0x20202020, 0x08080808, 0x02020202, 0x80808080, 0x20202020, 0x08080808, 0x02020202, 0x80808080, 0x20202020, 0x08080808, 0x02020202, 0x80808080, 0x20202020, 0x08080808, 0x02020202 }, // Aspect_HS_DIAGONAL_135_WIDE { 0x01010101, 0x04040404, 0x10101010, 0x40404040, 0x01010101, 0x04040404, 0x10101010, 0x40404040, 0x01010101, 0x04040404, 0x10101010, 0x40404040, 0x01010101, 0x04040404, 0x10101010, 0x40404040, 0x01010101, 0x04040404, 0x10101010, 0x40404040, 0x01010101, 0x04040404, 0x10101010, 0x40404040, 0x01010101, 0x04040404, 0x10101010, 0x40404040, 0x01010101, 0x04040404, 0x10101010, 0x40404040 }, // Aspect_HS_HORIZONTAL_WIDE { 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000 }, // Aspect_HS_VERTICAL_WIDE { 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010, 0x10101010 } }; namespace { static volatile Standard_Integer THE_HATCH_STYLE_COUNTER = Aspect_HS_NB - 1; } //======================================================================= //function : Graphic3d_HatchStyle //purpose : //======================================================================= Graphic3d_HatchStyle::Graphic3d_HatchStyle (const Handle(Image_PixMap)& thePattern) { Standard_ProgramError_Raise_if (thePattern.IsNull(), "Null pointer to a hatch pattern image"); Standard_ProgramError_Raise_if ( thePattern->SizeX() != 32 || thePattern->SizeY() != 32 || thePattern->Format() != Image_Format_Gray, "Hatch pattern must be a 32*32 bitmap (Image_Format_Gray format)"); const Standard_Size aByteSize = thePattern->SizeBytes(); Handle(NCollection_AlignedAllocator) anAllocator = new NCollection_AlignedAllocator (16); myPattern = new NCollection_Buffer (anAllocator); myPattern->Allocate (aByteSize); std::memcpy (myPattern->ChangeData(), thePattern->Data(), aByteSize); myHatchType = Standard_Atomic_Increment (&THE_HATCH_STYLE_COUNTER); } //======================================================================= //function : Pattern //purpose : //======================================================================= const Standard_Byte* Graphic3d_HatchStyle::Pattern() const { return !myPattern.IsNull() ? myPattern->Data() : (myHatchType < Aspect_HS_NB ? (const Standard_Byte*)myPredefinedPatterns[myHatchType] : NULL); } //======================================================================= //function : DumpJson //purpose : //======================================================================= void Graphic3d_HatchStyle::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const { OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream) OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, myPattern.get()) OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myHatchType) }