|
|
|||
File indexing completed on 2026-05-16 08:21:08
0001 // Created on: 2018-03-16 0002 // Created by: Eugeny MALTCHIKOV 0003 // Copyright (c) 2018 OPEN CASCADE SAS 0004 // 0005 // This file is part of Open CASCADE Technology software library. 0006 // 0007 // This library is free software; you can redistribute it and/or modify it under 0008 // the terms of the GNU Lesser General Public License version 2.1 as published 0009 // by the Free Software Foundation, with special exception defined in the file 0010 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT 0011 // distribution for complete text of the license and disclaimer of any warranty. 0012 // 0013 // Alternatively, this file may be used under the terms of Open CASCADE 0014 // commercial license or contractual agreement. 0015 0016 #ifndef _BOPAlgo_MakePeriodic_HeaderFile 0017 #define _BOPAlgo_MakePeriodic_HeaderFile 0018 0019 #include <Standard.hxx> 0020 #include <Standard_DefineAlloc.hxx> 0021 #include <Standard_Handle.hxx> 0022 0023 #include <BOPAlgo_Options.hxx> 0024 #include <BRepTools_History.hxx> 0025 #include <Standard_Boolean.hxx> 0026 #include <TopoDS_Shape.hxx> 0027 #include <TopTools_DataMapOfShapeShape.hxx> 0028 0029 //! BOPAlgo_MakePeriodic is the tool for making an arbitrary shape periodic 0030 //! in 3D space in specified directions. 0031 //! 0032 //! Periodicity of the shape means that the shape can be repeated in any 0033 //! periodic direction any number of times without creation of the new 0034 //! geometry or splits. 0035 //! 0036 //! The idea is to make the shape look identical on the opposite sides of the 0037 //! periodic directions, so when translating the copy of a shape on the period 0038 //! there will be no coinciding parts of different dimensions. 0039 //! 0040 //! If necessary the algorithm will trim the shape to fit it into the 0041 //! requested period by splitting it by the planes limiting the shape's 0042 //! requested period. 0043 //! 0044 //! For making the shape periodic in certain direction the algorithm performs 0045 //! the following steps: 0046 //! * Creates the copy of the shape and moves it on the period into negative 0047 //! side of the requested direction; 0048 //! * Splits the negative side of the shape by the moved copy, ensuring copying 0049 //! of the geometry from positive side to negative; 0050 //! * Creates the copy of the shape (with already split negative side) and moves 0051 //! it on the period into the positive side of the requested direction; 0052 //! * Splits the positive side of the shape by the moved copy, ensuring copying 0053 //! of the geometry from negative side to positive. 0054 //! 0055 //! The algorithm also associates the identical (or twin) shapes located 0056 //! on the opposite sides of the result shape. 0057 //! Using the *GetTwins()* method it is possible to get the twin shapes from 0058 //! the opposite sides. 0059 //! 0060 //! Algorithm also provides the methods to repeat the periodic shape in 0061 //! periodic directions. The subsequent repetitions are performed on the 0062 //! repeated shape, thus repeating the shape two times in X direction will 0063 //! create result in three shapes (original plus two copies). 0064 //! Single subsequent repetition will result already in 6 shapes. 0065 //! The repetitions can be cleared and started over. 0066 //! 0067 //! The algorithm supports History of shapes modifications, thus 0068 //! it is possible to track how the shape has been changed to make it periodic 0069 //! and what new shapes have been created during repetitions. 0070 //! 0071 //! The algorithm supports the parallel processing mode, which allows faster 0072 //! completion of the operations. 0073 //! 0074 //! The algorithm supports the Error/Warning system and returns the following alerts: 0075 //! - *BOPAlgo_AlertNoPeriodicityRequired* - Error alert is given if no periodicity 0076 //! has been requested in any direction; 0077 //! - *BOPAlgo_AlertUnableToTrim* - Error alert is given if the trimming of the shape 0078 //! for fitting it into requested period has failed; 0079 //! - *BOPAlgo_AlertUnableToMakeIdentical* - Error alert is given if splitting of the 0080 //! shape by its moved copies has failed; 0081 //! - *BOPAlgo_AlertUnableToRepeat* - Warning alert is given if the gluing of the repeated 0082 //! shapes has failed. 0083 //! 0084 //! Example of usage of the algorithm: 0085 //! ~~~~ 0086 //! TopoDS_Shape aShape = ...; // The shape to make periodic 0087 //! Standard_Boolean bMakeXPeriodic = ...; // Flag for making or not the shape periodic in X 0088 //! direction Standard_Real aXPeriod = ...; // X period for the shape Standard_Boolean 0089 //! isXTrimmed = ...; // Flag defining whether it is necessary to trimming 0090 //! // the shape to fit to X period 0091 //! Standard_Real aXFirst = ...; // Start of the X period 0092 //! // (really necessary only if the trimming is 0093 //! requested) 0094 //! Standard_Boolean bRunParallel = ...; // Parallel processing mode or single 0095 //! 0096 //! BOPAlgo_MakePeriodic aPeriodicityMaker; // Periodicity maker 0097 //! aPeriodicityMaker.SetShape(aShape); // Set the shape 0098 //! aPeriodicityMaker.MakeXPeriodic(bMakePeriodic, aXPeriod); // Making the shape periodic in X 0099 //! direction aPeriodicityMaker.SetTrimmed(isXTrimmed, aXFirst); // Trim the shape to fit X 0100 //! period aPeriodicityMaker.SetRunParallel(bRunParallel); // Set the parallel processing 0101 //! mode aPeriodicityMaker.Perform(); // Performing the operation 0102 //! 0103 //! if (aPeriodicityMaker.HasErrors()) // Check for the errors 0104 //! { 0105 //! // errors treatment 0106 //! Standard_SStream aSStream; 0107 //! aPeriodicityMaker.DumpErrors(aSStream); 0108 //! return; 0109 //! } 0110 //! if (aPeriodicityMaker.HasWarnings()) // Check for the warnings 0111 //! { 0112 //! // warnings treatment 0113 //! Standard_SStream aSStream; 0114 //! aPeriodicityMaker.DumpWarnings(aSStream); 0115 //! } 0116 //! const TopoDS_Shape& aPeriodicShape = aPeriodicityMaker.Shape(); // Result periodic shape 0117 //! 0118 //! 0119 //! aPeriodicityMaker.XRepeat(2); // Making repetitions 0120 //! const TopoDS_Shape& aRepeat = aPeriodicityMaker.RepeatedShape(); // Getting the repeated shape 0121 //! aPeriodicityMaker.ClearRepetitions(); // Clearing the repetitions 0122 //! ~~~~ 0123 //! 0124 class BOPAlgo_MakePeriodic : public BOPAlgo_Options 0125 { 0126 public: 0127 DEFINE_STANDARD_ALLOC 0128 0129 public: //! @name Constructor 0130 //! Empty constructor 0131 BOPAlgo_MakePeriodic() 0132 : BOPAlgo_Options() 0133 { 0134 myRepeatPeriod[0] = myRepeatPeriod[1] = myRepeatPeriod[2] = 0.0; 0135 } 0136 0137 public: //! @name Setting the shape to make it periodic 0138 //! Sets the shape to make it periodic. 0139 //! @param[in] theShape The shape to make periodic. 0140 void SetShape(const TopoDS_Shape& theShape) { myInputShape = theShape; } 0141 0142 public: //! @name Definition of the structure to keep all periodicity parameters 0143 //! Structure to keep all periodicity parameters: 0144 struct PeriodicityParams 0145 { 0146 PeriodicityParams() { Clear(); } 0147 0148 //! Returns all previously set parameters to default values 0149 void Clear() 0150 { 0151 myPeriodic[0] = myPeriodic[1] = myPeriodic[2] = Standard_False; 0152 myPeriod[0] = myPeriod[1] = myPeriod[2] = 0.0; 0153 myIsTrimmed[0] = myIsTrimmed[1] = myIsTrimmed[2] = Standard_True; 0154 myPeriodFirst[0] = myPeriodFirst[1] = myPeriodFirst[2] = 0.0; 0155 } 0156 0157 Standard_Boolean myPeriodic[3]; //!< Array of flags defining whether the shape should be 0158 //! periodic in XYZ directions 0159 Standard_Real myPeriod[3]; //!< Array of XYZ period values. Defining the period for any 0160 //! direction the corresponding flag for that direction in 0161 //! myPeriodic should be set to true 0162 // clang-format off 0163 Standard_Boolean myIsTrimmed[3]; //!< Array of flags defining whether the input shape has to be 0164 //! trimmed to fit the required period in the required direction 0165 Standard_Real myPeriodFirst[3]; //!< Array of start parameters of the XYZ periods: required for trimming 0166 // clang-format on 0167 }; 0168 0169 public: //! @name Setters/Getters for periodicity parameters structure 0170 //! Sets the periodicity parameters. 0171 //! @param[in] theParams Periodicity parameters 0172 void SetPeriodicityParameters(const PeriodicityParams& theParams) 0173 { 0174 myPeriodicityParams = theParams; 0175 } 0176 0177 const PeriodicityParams& PeriodicityParameters() const { return myPeriodicityParams; } 0178 0179 public: //! @name Methods for setting/getting periodicity info using ID as a direction 0180 //! Sets the flag to make the shape periodic in specified direction: 0181 //! - 0 - X direction; 0182 //! - 1 - Y direction; 0183 //! - 2 - Z direction. 0184 //! 0185 //! @param[in] theDirectionID The direction's ID; 0186 //! @param[in] theIsPeriodic Flag defining periodicity in given direction; 0187 //! @param[in] thePeriod Required period in given direction. 0188 void MakePeriodic(const Standard_Integer theDirectionID, 0189 const Standard_Boolean theIsPeriodic, 0190 const Standard_Real thePeriod = 0.0) 0191 { 0192 Standard_Integer id = ToDirectionID(theDirectionID); 0193 myPeriodicityParams.myPeriodic[id] = theIsPeriodic; 0194 myPeriodicityParams.myPeriod[id] = theIsPeriodic ? thePeriod : 0.0; 0195 } 0196 0197 //! Returns the info about Periodicity of the shape in specified direction. 0198 //! @param[in] theDirectionID The direction's ID. 0199 Standard_Boolean IsPeriodic(const Standard_Integer theDirectionID) const 0200 { 0201 return myPeriodicityParams.myPeriodic[ToDirectionID(theDirectionID)]; 0202 } 0203 0204 //! Returns the Period of the shape in specified direction. 0205 //! @param[in] theDirectionID The direction's ID. 0206 Standard_Real Period(const Standard_Integer theDirectionID) const 0207 { 0208 Standard_Integer id = ToDirectionID(theDirectionID); 0209 return myPeriodicityParams.myPeriodic[id] ? myPeriodicityParams.myPeriod[id] : 0.0; 0210 } 0211 0212 public: //! @name Named methods for setting/getting info about shape's periodicity 0213 //! Sets the flag to make the shape periodic in X direction. 0214 //! @param[in] theIsPeriodic Flag defining periodicity in X direction; 0215 //! @param[in] thePeriod Required period in X direction. 0216 void MakeXPeriodic(const Standard_Boolean theIsPeriodic, const Standard_Real thePeriod = 0.0) 0217 { 0218 MakePeriodic(0, theIsPeriodic, thePeriod); 0219 } 0220 0221 //! Returns the info about periodicity of the shape in X direction. 0222 Standard_Boolean IsXPeriodic() const { return IsPeriodic(0); } 0223 0224 //! Returns the XPeriod of the shape 0225 Standard_Real XPeriod() const { return Period(0); } 0226 0227 //! Sets the flag to make the shape periodic in Y direction. 0228 //! @param[in] theIsPeriodic Flag defining periodicity in Y direction; 0229 //! @param[in] thePeriod Required period in Y direction. 0230 void MakeYPeriodic(const Standard_Boolean theIsPeriodic, const Standard_Real thePeriod = 0.0) 0231 { 0232 MakePeriodic(1, theIsPeriodic, thePeriod); 0233 } 0234 0235 //! Returns the info about periodicity of the shape in Y direction. 0236 Standard_Boolean IsYPeriodic() const { return IsPeriodic(1); } 0237 0238 //! Returns the YPeriod of the shape. 0239 Standard_Real YPeriod() const { return Period(1); } 0240 0241 //! Sets the flag to make the shape periodic in Z direction. 0242 //! @param[in] theIsPeriodic Flag defining periodicity in Z direction; 0243 //! @param[in] thePeriod Required period in Z direction. 0244 void MakeZPeriodic(const Standard_Boolean theIsPeriodic, const Standard_Real thePeriod = 0.0) 0245 { 0246 MakePeriodic(2, theIsPeriodic, thePeriod); 0247 } 0248 0249 //! Returns the info about periodicity of the shape in Z direction. 0250 Standard_Boolean IsZPeriodic() const { return IsPeriodic(2); } 0251 0252 //! Returns the ZPeriod of the shape. 0253 Standard_Real ZPeriod() const { return Period(2); } 0254 0255 public: //! @name Methods for setting/getting trimming info taking Direction ID as a parameter 0256 //! Defines whether the input shape is already trimmed in specified direction 0257 //! to fit the period in this direction. 0258 //! Direction is defined by an ID: 0259 //! - 0 - X direction; 0260 //! - 1 - Y direction; 0261 //! - 2 - Z direction. 0262 //! 0263 //! If the shape is not trimmed it is required to set the first parameter 0264 //! of the period in that direction. 0265 //! The algorithm will make the shape fit into the period. 0266 //! 0267 //! Before calling this method, the shape has to be set to be periodic in this direction. 0268 //! 0269 //! @param[in] theDirectionID The direction's ID; 0270 //! @param[in] theIsTrimmed The flag defining trimming of the shape in given direction; 0271 //! @param[in] theFirst The first periodic parameter in the given direction. 0272 void SetTrimmed(const Standard_Integer theDirectionID, 0273 const Standard_Boolean theIsTrimmed, 0274 const Standard_Real theFirst = 0.0) 0275 { 0276 Standard_Integer id = ToDirectionID(theDirectionID); 0277 if (IsPeriodic(id)) 0278 { 0279 myPeriodicityParams.myIsTrimmed[id] = theIsTrimmed; 0280 myPeriodicityParams.myPeriodFirst[id] = !theIsTrimmed ? theFirst : 0.0; 0281 } 0282 } 0283 0284 //! Returns whether the input shape was trimmed in the specified direction. 0285 //! @param[in] theDirectionID The direction's ID. 0286 Standard_Boolean IsInputTrimmed(const Standard_Integer theDirectionID) const 0287 { 0288 return myPeriodicityParams.myIsTrimmed[ToDirectionID(theDirectionID)]; 0289 } 0290 0291 //! Returns the first periodic parameter in the specified direction. 0292 //! @param[in] theDirectionID The direction's ID. 0293 Standard_Real PeriodFirst(const Standard_Integer theDirectionID) const 0294 { 0295 Standard_Integer id = ToDirectionID(theDirectionID); 0296 return !myPeriodicityParams.myIsTrimmed[id] ? myPeriodicityParams.myPeriodFirst[id] : 0.0; 0297 } 0298 0299 public: //! @name Named methods for setting/getting trimming info 0300 //! Defines whether the input shape is already trimmed in X direction 0301 //! to fit the X period. If the shape is not trimmed it is required 0302 //! to set the first parameter for the X period. 0303 //! The algorithm will make the shape fit into the period. 0304 //! 0305 //! Before calling this method, the shape has to be set to be periodic in this direction. 0306 //! 0307 //! @param[in] theIsTrimmed Flag defining whether the shape is already trimmed 0308 //! in X direction to fit the X period; 0309 //! @param[in] theFirst The first X periodic parameter. 0310 void SetXTrimmed(const Standard_Boolean theIsTrimmed, const Standard_Boolean theFirst = 0.0) 0311 { 0312 SetTrimmed(0, theIsTrimmed, theFirst); 0313 } 0314 0315 //! Returns whether the input shape was already trimmed for X period. 0316 Standard_Boolean IsInputXTrimmed() const { return IsInputTrimmed(0); } 0317 0318 //! Returns the first parameter for the X period. 0319 Standard_Real XPeriodFirst() const { return PeriodFirst(0); } 0320 0321 //! Defines whether the input shape is already trimmed in Y direction 0322 //! to fit the Y period. If the shape is not trimmed it is required 0323 //! to set the first parameter for the Y period. 0324 //! The algorithm will make the shape fit into the period. 0325 //! 0326 //! Before calling this method, the shape has to be set to be periodic in this direction. 0327 //! 0328 //! @param[in] theIsTrimmed Flag defining whether the shape is already trimmed 0329 //! in Y direction to fit the Y period; 0330 //! @param[in] theFirst The first Y periodic parameter. 0331 void SetYTrimmed(const Standard_Boolean theIsTrimmed, const Standard_Boolean theFirst = 0.0) 0332 { 0333 SetTrimmed(1, theIsTrimmed, theFirst); 0334 } 0335 0336 //! Returns whether the input shape was already trimmed for Y period. 0337 Standard_Boolean IsInputYTrimmed() const { return IsInputTrimmed(1); } 0338 0339 //! Returns the first parameter for the Y period. 0340 Standard_Real YPeriodFirst() const { return PeriodFirst(1); } 0341 0342 //! Defines whether the input shape is already trimmed in Z direction 0343 //! to fit the Z period. If the shape is not trimmed it is required 0344 //! to set the first parameter for the Z period. 0345 //! The algorithm will make the shape fit into the period. 0346 //! 0347 //! Before calling this method, the shape has to be set to be periodic in this direction. 0348 //! 0349 //! @param[in] theIsTrimmed Flag defining whether the shape is already trimmed 0350 //! in Z direction to fit the Z period; 0351 //! @param[in] theFirst The first Z periodic parameter. 0352 void SetZTrimmed(const Standard_Boolean theIsTrimmed, const Standard_Boolean theFirst = 0.0) 0353 { 0354 SetTrimmed(2, theIsTrimmed, theFirst); 0355 } 0356 0357 //! Returns whether the input shape was already trimmed for Z period. 0358 Standard_Boolean IsInputZTrimmed() const { return IsInputTrimmed(2); } 0359 0360 //! Returns the first parameter for the Z period. 0361 Standard_Real ZPeriodFirst() const { return PeriodFirst(2); } 0362 0363 public: //! @name Performing the operation 0364 //! Makes the shape periodic in necessary directions 0365 Standard_EXPORT void Perform(); 0366 0367 public: //! @name Using the algorithm to repeat the shape 0368 //! Performs repetition of the shape in specified direction 0369 //! required number of times. 0370 //! Negative value of times means that the repetition should 0371 //! be perform in negative direction. 0372 //! Makes the repeated shape a base for following repetitions. 0373 //! 0374 //! @param[in] theDirectionID The direction's ID; 0375 //! @param[in] theTimes Requested number of repetitions. 0376 Standard_EXPORT const TopoDS_Shape& RepeatShape(const Standard_Integer theDirectionID, 0377 const Standard_Integer theTimes); 0378 0379 //! Repeats the shape in X direction specified number of times. 0380 //! Negative value of times means that the repetition should be 0381 //! perform in negative X direction. 0382 //! Makes the repeated shape a base for following repetitions. 0383 //! 0384 //! @param[in] theTimes Requested number of repetitions. 0385 const TopoDS_Shape& XRepeat(const Standard_Integer theTimes) { return RepeatShape(0, theTimes); } 0386 0387 //! Repeats the shape in Y direction specified number of times. 0388 //! Negative value of times means that the repetition should be 0389 //! perform in negative Y direction. 0390 //! Makes the repeated shape a base for following repetitions. 0391 //! 0392 //! @param[in] theTimes Requested number of repetitions. 0393 const TopoDS_Shape& YRepeat(const Standard_Integer theTimes) { return RepeatShape(1, theTimes); } 0394 0395 //! Repeats the shape in Z direction specified number of times. 0396 //! Negative value of times means that the repetition should be 0397 //! perform in negative Z direction. 0398 //! Makes the repeated shape a base for following repetitions. 0399 //! 0400 //! @param[in] theTimes Requested number of repetitions. 0401 const TopoDS_Shape& ZRepeat(const Standard_Integer theTimes) { return RepeatShape(2, theTimes); } 0402 0403 public: //! @name Starting the repetitions over 0404 //! Returns the repeated shape 0405 const TopoDS_Shape& RepeatedShape() const { return myRepeatedShape; } 0406 0407 //! Clears all performed repetitions. 0408 //! The next repetition will be performed on the base shape. 0409 void ClearRepetitions() 0410 { 0411 myRepeatPeriod[0] = myRepeatPeriod[1] = myRepeatPeriod[2] = 0.0; 0412 myRepeatedShape.Nullify(); 0413 myRepeatedTwins.Clear(); 0414 if (!myHistory.IsNull()) 0415 { 0416 myHistory->Clear(); 0417 if (!mySplitHistory.IsNull()) 0418 myHistory->Merge(mySplitHistory); 0419 } 0420 } 0421 0422 public: //! @name Obtaining the result shape 0423 //! Returns the resulting periodic shape 0424 const TopoDS_Shape& Shape() const { return myShape; } 0425 0426 public: //! @name Getting the identical shapes 0427 //! Returns the identical shapes for the given shape located 0428 //! on the opposite periodic side. 0429 //! Returns empty list in case the shape has no twin. 0430 //! 0431 //! @param[in] theS Shape to get the twins for. 0432 const TopTools_ListOfShape& GetTwins(const TopoDS_Shape& theS) const 0433 { 0434 static TopTools_ListOfShape empty; 0435 const TopTools_ListOfShape* aTwins = 0436 myRepeatedTwins.IsEmpty() ? myTwins.Seek(theS) : myRepeatedTwins.Seek(theS); 0437 return (aTwins ? *aTwins : empty); 0438 } 0439 0440 public: //! @name Getting the History of the algorithm 0441 //! Returns the History of the algorithm 0442 const Handle(BRepTools_History)& History() const { return myHistory; } 0443 0444 public: //! @name Clearing the algorithm from previous runs 0445 //! Clears the algorithm from previous runs 0446 void Clear() 0447 { 0448 BOPAlgo_Options::Clear(); 0449 myPeriodicityParams.Clear(); 0450 myShape.Nullify(); 0451 if (!mySplitHistory.IsNull()) 0452 mySplitHistory->Clear(); 0453 if (!myHistory.IsNull()) 0454 myHistory->Clear(); 0455 0456 ClearRepetitions(); 0457 } 0458 0459 public: //! @name Conversion of the integer to ID of periodic direction 0460 //! Converts the integer to ID of periodic direction 0461 static Standard_Integer ToDirectionID(const Standard_Integer theDirectionID) 0462 { 0463 return Abs(theDirectionID % 3); 0464 } 0465 0466 protected: //! @name Protected methods performing the operation 0467 //! Checks the validity of input data 0468 Standard_EXPORT void CheckData(); 0469 0470 //! Trims the shape to fit to the periodic bounds 0471 Standard_EXPORT void Trim(); 0472 0473 //! Makes the shape identical on opposite sides 0474 Standard_EXPORT void MakeIdentical(); 0475 0476 //! Splits the negative side of the shape with the geometry 0477 //! located on the positive side copying the geometry from 0478 //! positive side to the negative. 0479 Standard_EXPORT void SplitNegative(); 0480 0481 //! Splits the positive side of the shape with the geometry 0482 //! located on the negative side of the shape. 0483 //! Ensures that the geometries on the opposite sides will 0484 //! be identical. 0485 //! Associates the identical opposite sub-shapes. 0486 Standard_EXPORT void SplitPositive(); 0487 0488 //! Splits the shape by the given tools, copying the geometry of coinciding 0489 //! parts from the given tools to the split shape. 0490 //! @param[in] theTools The tools to split the shape and take the geometry 0491 //! for coinciding parts. 0492 //! @param[out] theSplitShapeHistory The history of shape split 0493 //! @param[out] theSplitToolsHistory The history of tools modifications during the split 0494 Standard_EXPORT void SplitShape(const TopTools_ListOfShape& theTools, 0495 Handle(BRepTools_History) theSplitShapeHistory = NULL, 0496 Handle(BRepTools_History) theSplitToolsHistory = NULL); 0497 0498 //! Updates the map of twins after periodic shape repetition. 0499 //! @param[in] theTranslationHistory The history of translation of the periodic shape. 0500 //! @param[in] theGluingHistory The history of gluing of the repeated shapes. 0501 Standard_EXPORT void UpdateTwins(const BRepTools_History& theTranslationHistory, 0502 const BRepTools_History& theGluingHistory); 0503 0504 protected: //! @name Fields 0505 // Inputs 0506 TopoDS_Shape myInputShape; //!< Input shape to make periodic 0507 0508 PeriodicityParams myPeriodicityParams; //!< Periodicity parameters 0509 0510 // Results 0511 TopoDS_Shape myShape; //!< Resulting periodic shape (base for repetitions) 0512 TopoDS_Shape myRepeatedShape; //!< Resulting shape after making repetitions of the base 0513 Standard_Real myRepeatPeriod[3]; //!< XYZ repeat period 0514 // clang-format off 0515 TopTools_DataMapOfShapeListOfShape myRepeatedTwins; //!< Map of associations of the identical sub-shapes 0516 //! after repetition of the periodic shape 0517 // clang-format on 0518 0519 // Twins 0520 TopTools_DataMapOfShapeListOfShape myTwins; //!< Map of associations of the identical sub-shapes 0521 //! located on the opposite sides of the shape 0522 0523 // History 0524 Handle(BRepTools_History) mySplitHistory; //!< Split history - history of shapes modification 0525 //! after the split for making the shape periodic 0526 Handle(BRepTools_History) myHistory; //!< Final history of shapes modifications 0527 //! (to include the history of shape repetition) 0528 }; 0529 0530 #endif // _BOPAlgo_MakePeriodic_HeaderFile
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|