#include <BaryPatch.h>
Inheritance diagram for BaryPatch:
1 PATCH ATTRIBUTES AND FUNCTIONS | |
This composes the essential data of the patches used in the program | |
bool | IsAPoint () |
bool | IsAPatch () |
Point * | GetPoint () |
BaryPatch * | GetPatch () |
BaryPatch (int ThingName, int DimU, int DimV, int DimW, int UCnx1, int UCnx2, int VCnx1, int VCnx2, int WCnx1, int WCnx2, SSMatrix TransfoMat, int Level, int *LvlZeroPointsIndices, Point **LvlZeroPointsTable, BaryPatch *Parent, BaryPatch *Root, SubdivScheme *NextSubdiv) | |
BaryPatch (int ThingName, SSMatrix TransfoMat, BaryPatch *Parent) | |
~BaryPatch () | |
void | ClearChild (BaryPatch *Child) |
void | UpdateProjectedTransfoMatrix () |
void | ApplySchemeToLevelSelected (int Level, SubdivScheme *Scheme) |
void | SubDivideLevel (int Level) |
void | SubDivideLevelSelected (int Level) |
void | RSubDivideLevel (int Level, int &NextName, bool IfSelected) |
void | SubDivide (int &NextName) |
SSMatrix | BuildCumulatedMatrix () |
void | BuildPerturbations (int Level) |
void | RBuildPerturbations (int Level, stack< BaryCoord * > &CreatedPoints) |
void | DeletePerturbations (int Level) |
Point * | FindPerturbation (int Level, int Name) |
int | CountPerturbationOccurences (Point *Perturbation) |
void | BuildLevelPerturbationTable (int Level, bool OnlyOnSelectedPatches, bool OnlySelectedPerturbations, int &NbPerturbFound, Point **&Table) |
void | RBuildLevelPerturbationTable (int Level, bool OnlyOnSelectedPatches, bool OnlySelectedPerturbations, stack< Point * > &FoundStack) |
void | BuildLevelPatchesTable (int Level, bool OnlyOnSelectedPatches, int &NbPatchesFound, BaryPatch **&Table) |
void | RBuildLevelPatchesTable (int Level, bool OnlyOnSelectedPatches, stack< BaryPatch * > &FoundStack) |
void | BuildLevelQuadTable (int Level, bool OnlyOnSelectedPatches, int &NbQuadsFound, Point ***&Table) |
void | RBuildLevelQuadTable (int Level, bool OnlyOnSelectedPatches, stack< Point ** > &FoundStack) |
bool | DeletePerturbation (Point *Perturbation, bool &AlreadyDeleted) |
int | GetSubTreeDepth () |
int | GetLowestPatchName () |
int | RGetLowestPatchName (int CurrentLowest) |
void | FindNeighbour (stack< BaryPatch * > &Neighbours) |
void | FindNeighbourFromPoints (Point **TabPnts, int NbPnts, int Level, int Name, stack< BaryPatch * > &Neighbours) |
void | BuildEdges (stack< Point * > &EdgeTable) |
void | BuildPerturbQuads (stack< Point ** > &QuadTable) |
void | SavePoints (int Level, stack< Point * > &SaveTable) |
void | SavePatches (int Level, stack< BaryPatch * > &SaveTable) |
int | WritePatch (FILE *file, int NbPntsLvlZero) |
int | ReadPatch (FILE *file, int NbPntsLvlZero) |
BaryPatch * | FindPatch (int Level, int Name) |
BaryPatch * | FindPatchFromParameter (float CoordToFind_U, float CoordToFind_V, float CoordToFind_W) |
Vec * | FindElementFromParameter (int &Dim, float CoordToFind_U, float CoordToFind_V, float CoordToFind_W, float &Limit_U1, float &Limit_U2, float &Limit_V1, float &Limit_V2, float &Limit_W1, float &Limit_W2) |
void | SelectAll (int Level) |
void | SelectAllSelected (int Level) |
void | LevelUnSelectAllPerturbations (int Level) |
void | LevelSelectAllPatches (int Level) |
void | LevelUnSelectAllPatches (int Level) |
void | LevelDeleteSelected (int Level) |
void | LevelCutSubtreeSelected (int Level) |
Vec | LevelSelectedCenterOfGravity (int Level) |
Vec | RLevelSelectedCenterOfGravity (int Level, Vec &CurrentCenter, int &CurrentNbPoints, stack< Point * > &AlreadyCounted) |
void | ChangedPerturbationSelection (int Level, ManipulatedFrame *MF) |
void | RChangedPerturbationSelection (int Level, ManipulatedFrame *MF, stack< Point * > &AlreadyCounted) |
void | ResetPerturbations () |
void | ResetLevelPerturbations (int Level) |
void | ResetSelectedPerturbations (int Level) |
void | InversePatchSelection (int Level) |
void | draw (int Level, ManipulatedFrame *MF) |
void | draw (ManipulatedFrame *MF, bool Selectable=true) |
void | draw (ManipulatedFrame *MF) |
int | drawToFile (int Level, FILE *file, int counting, int TypePrint) |
int | drawFacesToFile (int Level, int counting) |
int | _DimU |
int | _DimV |
int | _DimW |
int | _UCnx1 |
int | _UCnx2 |
int | _VCnx1 |
int | _VCnx2 |
int | _WCnx1 |
int | _WCnx2 |
SSMatrix | _TransfoMatrix |
int * | _LvlZeroPointsIndices |
Point ** | _LvlZeroPointsTable |
int | _Level |
BaryPatch * | _Parent |
BaryPatch * | _Root |
int | _NbChildren |
BaryPatch ** | _Children |
float | _CoordPatch_U1 |
float | _CoordPatch_U2 |
float | _CoordPatch_V1 |
float | _CoordPatch_V2 |
float | _CoordPatch_W1 |
float | _CoordPatch_W2 |
SSMatrix | _ProjectedTransfoMatrix |
Point ** | _Perturbations |
SubdivScheme * | _NextSubdiv |
2 PLANARITY | |
Attributes and functions used for planarity | |
double | QuadPlanarity (Vec P1, Vec P2, Vec P3, Vec P4, bool DegMode) |
void | SurfacePlanarityFactor (double &Worst, double &Average, bool DegMode) |
void | UpdatePlanarities (int Level, bool DegMode) |
void | UpdatePlanaritiesIfContains (int Level, int PerturbName, bool DegMode) |
void | LevelWorstAndAveragePlanarity (int Level, bool OnlySelectedPatches, double &worst, double &average, double averageOffset, int &NbPatches, bool DegMode) |
void | RLevelWorstAndAveragePlanarity (int Level, bool OnlySelectedPatches, double &worst, double &average, double averageOffset, int &NbPatches, bool DegMode) |
void | SelectPatchesWorstPlanarityAbove (float bound, int Level, bool DegMode) |
float | AveragePlanarityOfPatchesContainingPerturb (int Level, int PerturbName, int &NbPatchesFound, bool DegMode) |
void | RAveragePlanarityOfPatchesContainingPerturb (int Level, int PerturbName, int &NbPatchesFound, float &AveragePlanarity, bool DegMode) |
void | ViewAverageOrWorstPatchPlanarity (int Level, float Min, bool Average, bool DegMode) |
void | ResetColor (int Level) |
double | _SavedMinPlanarity |
double | _SavedAvgPlanarity |
Public Member Functions | |
3 TOOLS | |
Little tools frequently used in the program | |
int | UUnSilentDim () |
int | VUnSilentDim () |
int | WUnSilentDim () |
int | PointIndice (int u, int v, int w) |
void | UpdateNameTag () |
void | drawQuad (Vec P1, Vec P2, Vec P3, Vec P4) |
void | fastDrawQuad (Vec P1, Vec P2, Vec P3, Vec P4) |
BaryPatch::BaryPatch | ( | int | ThingName, | |
int | DimU, | |||
int | DimV, | |||
int | DimW, | |||
int | UCnx1, | |||
int | UCnx2, | |||
int | VCnx1, | |||
int | VCnx2, | |||
int | WCnx1, | |||
int | WCnx2, | |||
SSMatrix | TransfoMat, | |||
int | Level, | |||
int * | LvlZeroPointsIndices, | |||
Point ** | LvlZeroPointsTable, | |||
BaryPatch * | Parent, | |||
BaryPatch * | Root, | |||
SubdivScheme * | NextSubdiv | |||
) |
Basic constructor
Subdivision constructor that builds the children
BaryPatch::~BaryPatch | ( | ) |
Destructor
void BaryPatch::ApplySchemeToLevelSelected | ( | int | Level, | |
SubdivScheme * | Scheme | |||
) |
The selected patches will use the given SubdivScheme on next subdivision
float BaryPatch::AveragePlanarityOfPatchesContainingPerturb | ( | int | Level, | |
int | PerturbName, | |||
int & | NbPatchesFound, | |||
bool | DegMode | |||
) |
Returns the average planarity of all the patches containing this perturbation it supposes the _SavedMinPlanarity and _SavedAvgPlanarity are up to date
SSMatrix BaryPatch::BuildCumulatedMatrix | ( | ) |
Goes up to the root building a matrix which is the composition of all transformations leading to this patch
void BaryPatch::BuildEdges | ( | stack< Point * > & | EdgeTable | ) |
Builds the edge of a patch and puts them in the table called as parameter.Each edge is represented by 1,2 or 4 points
void BaryPatch::BuildLevelPatchesTable | ( | int | Level, | |
bool | OnlyOnSelectedPatches, | |||
int & | NbPatchesFound, | |||
BaryPatch **& | Table | |||
) |
Build the table that contains all the patches of a given level
void BaryPatch::BuildLevelPerturbationTable | ( | int | Level, | |
bool | OnlyOnSelectedPatches, | |||
bool | OnlySelectedPerturbations, | |||
int & | NbPerturbFound, | |||
Point **& | Table | |||
) |
Builds the table that contains every pertubations of a given level
void BaryPatch::BuildLevelQuadTable | ( | int | Level, | |
bool | OnlyOnSelectedPatches, | |||
int & | NbQuadsFound, | |||
Point ***& | Table | |||
) |
Builds the table that contains every quad of the patches of a same level
void BaryPatch::BuildPerturbations | ( | int | Level | ) |
Creates a perturbation point for every different point of a given level of patches connected patches share perturbation points the easy callable version
void BaryPatch::BuildPerturbQuads | ( | stack< Point ** > & | QuadTable | ) |
Returns a stack of quads represented by 4 perturbations. Perturbations should be built remember to delete quads after use
void BaryPatch::ChangedPerturbationSelection | ( | int | Level, | |
ManipulatedFrame * | MF | |||
) |
When selection changed, point positions relatively to manipulated frame must be updated
void BaryPatch::ClearChild | ( | BaryPatch * | Child | ) |
Deletes a child patch
int BaryPatch::CountPerturbationOccurences | ( | Point * | Perturbation | ) |
By how many patches is a pertubation point shared ?
bool BaryPatch::DeletePerturbation | ( | Point * | Perturbation, | |
bool & | AlreadyDeleted | |||
) |
Deletes all perturbation occurrences
void BaryPatch::DeletePerturbations | ( | int | Level | ) |
Deletes all the perturbation points of a given level
void BaryPatch::draw | ( | ManipulatedFrame * | MF | ) | [inline, virtual] |
Draws not selectable patch
Implements SelectableThing.
void BaryPatch::draw | ( | ManipulatedFrame * | MF, | |
bool | Selectable = true | |||
) |
Draws patch and perturbations
void BaryPatch::draw | ( | int | Level, | |
ManipulatedFrame * | MF | |||
) |
Draws perturbations and patches of a given level, going down the patch tree
int BaryPatch::drawFacesToFile | ( | int | Level, | |
int | counting | |||
) |
Saves each patch of the previous level and its neighbours face after face ; only for UV surfaces
void BaryPatch::drawQuad | ( | Vec | P1, | |
Vec | P2, | |||
Vec | P3, | |||
Vec | P4 | |||
) |
Draws quadrilateral faces with nice normals
int BaryPatch::drawToFile | ( | int | Level, | |
FILE * | file, | |||
int | counting, | |||
int | TypePrint | |||
) |
Saves drawn objects to an obj file
void BaryPatch::fastDrawQuad | ( | Vec | P1, | |
Vec | P2, | |||
Vec | P3, | |||
Vec | P4 | |||
) |
Draws quadrilateral faces faster
Vec * BaryPatch::FindElementFromParameter | ( | int & | Dim, | |
float | CoordToFind_U, | |||
float | CoordToFind_V, | |||
float | CoordToFind_W, | |||
float & | Limit_U1, | |||
float & | Limit_U2, | |||
float & | Limit_V1, | |||
float & | Limit_V2, | |||
float & | Limit_W1, | |||
float & | Limit_W2 | |||
) |
Returns the patch element (segment, quad, cube) that contains the parametric point CoordToFind_U, CoordToFind_V, CoordToFind_W also returns the dimension and the parametric bounds on U,V and W of the element
void BaryPatch::FindNeighbour | ( | stack< BaryPatch * > & | Neighbours | ) |
Building the neighbourhoood for every patch by selecting the points to compare.Neighbours is the list of the neighbours
void BaryPatch::FindNeighbourFromPoints | ( | Point ** | TabPnts, | |
int | NbPnts, | |||
int | Level, | |||
int | Name, | |||
stack< BaryPatch * > & | Neighbours | |||
) |
Is called by FindNeighbour,compares the points and fills Neighbours if possible
BaryPatch * BaryPatch::FindPatch | ( | int | Level, | |
int | Name | |||
) |
Looks for patch with given name down the tree and returns a pointer to it
BaryPatch * BaryPatch::FindPatchFromParameter | ( | float | CoordToFind_U, | |
float | CoordToFind_V, | |||
float | CoordToFind_W | |||
) |
Returns the patch that contains the parametric point CoordToFind_U, CoordToFind_V, CoordToFind_W
Point * BaryPatch::FindPerturbation | ( | int | Level, | |
int | Name | |||
) |
Returns a pointer to a perturbation with the given name on a given tree level this perturbation should be unique if none are found returns NULL
int BaryPatch::GetLowestPatchName | ( | ) |
Returns the lowest patch name, searching from root down the tree
BaryPatch* BaryPatch::GetPatch | ( | ) | [inline, virtual] |
Point* BaryPatch::GetPoint | ( | ) | [inline, virtual] |
int BaryPatch::GetSubTreeDepth | ( | ) |
Returns the depth of the subtree below this patch
void BaryPatch::InversePatchSelection | ( | int | Level | ) |
Unselects the selected patches and selects the others
bool BaryPatch::IsAPatch | ( | ) | [inline, virtual] |
bool BaryPatch::IsAPoint | ( | ) | [inline, virtual] |
void BaryPatch::LevelCutSubtreeSelected | ( | int | Level | ) |
Makes all selected patches of a given level leaves. Deletes their children
void BaryPatch::LevelDeleteSelected | ( | int | Level | ) |
Deletes all selected patches of a given level
void BaryPatch::LevelSelectAllPatches | ( | int | Level | ) |
Selects every patch of the selected level
Vec BaryPatch::LevelSelectedCenterOfGravity | ( | int | Level | ) |
Calculates the center of gravity of the selected perturbated points of a given level
void BaryPatch::LevelUnSelectAllPatches | ( | int | Level | ) |
Unselects every patch of the selected level
void BaryPatch::LevelUnSelectAllPerturbations | ( | int | Level | ) |
Unselects all perturbation or patches of a given level in the tree
void BaryPatch::LevelWorstAndAveragePlanarity | ( | int | Level, | |
bool | OnlySelectedPatches, | |||
double & | worst, | |||
double & | average, | |||
double | averageOffset, | |||
int & | NbPatches, | |||
bool | DegMode | |||
) |
Returns the min of the SurfacePlanarityFactors on selected patches of a given level it supposes the _SavedMinPlanarity and _SavedAvgPlanarity are up to date
int BaryPatch::PointIndice | ( | int | u, | |
int | v, | |||
int | w | |||
) | [inline] |
Changes the 3 dimensional (u,v,w) indices to real indices (from 1 to NbPoints)
double BaryPatch::QuadPlanarity | ( | Vec | P1, | |
Vec | P2, | |||
Vec | P3, | |||
Vec | P4, | |||
bool | DegMode | |||
) |
Returns the maximum of the cosines of the angles between a pair of triangles "equivalent" to the quad
void BaryPatch::RAveragePlanarityOfPatchesContainingPerturb | ( | int | Level, | |
int | PerturbName, | |||
int & | NbPatchesFound, | |||
float & | AveragePlanarity, | |||
bool | DegMode | |||
) |
Recursive version, not to be called outside AveragePlanarityOfPatchesContainingPerturb it supposes the _SavedMinPlanarity and _SavedAvgPlanarity are up to date
void BaryPatch::RBuildLevelPatchesTable | ( | int | Level, | |
bool | OnlyOnSelectedPatches, | |||
stack< BaryPatch * > & | FoundStack | |||
) |
The recursive version
void BaryPatch::RBuildLevelPerturbationTable | ( | int | Level, | |
bool | OnlyOnSelectedPatches, | |||
bool | OnlySelectedPerturbations, | |||
stack< Point * > & | FoundStack | |||
) |
The recursive version, not to be called outside BuildLevelPerturbationTable
void BaryPatch::RBuildLevelQuadTable | ( | int | Level, | |
bool | OnlyOnSelectedPatches, | |||
stack< Point ** > & | FoundStack | |||
) |
The recursive version
void BaryPatch::RBuildPerturbations | ( | int | Level, | |
stack< BaryCoord * > & | CreatedPoints | |||
) |
The recursive version, not to be called outside BuildPerturbations
void BaryPatch::RChangedPerturbationSelection | ( | int | Level, | |
ManipulatedFrame * | MF, | |||
stack< Point * > & | AlreadyCounted | |||
) |
The recursive version, not to be called outside ChangedPerturbationSelection
int BaryPatch::ReadPatch | ( | FILE * | file, | |
int | NbPntsLvlZero | |||
) |
Reads the BaryPatch's data from the text file
void BaryPatch::ResetColor | ( | int | Level | ) |
Resets colors to the classic ones
void BaryPatch::ResetLevelPerturbations | ( | int | Level | ) |
Resets all perturbations of a given level to 0 going down the tree
void BaryPatch::ResetPerturbations | ( | ) |
Resets all perturbation of this patch to 0
void BaryPatch::ResetSelectedPerturbations | ( | int | Level | ) |
Resets perturbations of the selected points at the selected level
int BaryPatch::RGetLowestPatchName | ( | int | CurrentLowest | ) |
The recursive version, must not be called outside GetLowestPatchName()
Vec BaryPatch::RLevelSelectedCenterOfGravity | ( | int | Level, | |
Vec & | CurrentCenter, | |||
int & | CurrentNbPoints, | |||
stack< Point * > & | AlreadyCounted | |||
) |
The recursive version, not to be called outside LevelSelectedCenterOfGravity
void BaryPatch::RLevelWorstAndAveragePlanarity | ( | int | Level, | |
bool | OnlySelectedPatches, | |||
double & | worst, | |||
double & | average, | |||
double | averageOffset, | |||
int & | NbPatches, | |||
bool | DegMode | |||
) |
Recursive version, not to be called outside AveragePlanarityOfPatchesContainingPerturb it supposes the _SavedMinPlanarity and _SavedAvgPlanarity are up to date
void BaryPatch::RSubDivideLevel | ( | int | Level, | |
int & | NextName, | |||
bool | IfSelected | |||
) |
The recursive version, not to be called outside Subdivide
void BaryPatch::SavePatches | ( | int | Level, | |
stack< BaryPatch * > & | SaveTable | |||
) |
Saves the selected patches into a stack
void BaryPatch::SavePoints | ( | int | Level, | |
stack< Point * > & | SaveTable | |||
) |
Saves the selected points into a stack
void BaryPatch::SelectAll | ( | int | Level | ) |
Selects all perturbation points of the level
void BaryPatch::SelectAllSelected | ( | int | Level | ) |
Selects all the points of selected patches of a given level
void BaryPatch::SelectPatchesWorstPlanarityAbove | ( | float | bound, | |
int | Level, | |||
bool | DegMode | |||
) |
Selects patches with planarity better than bound it supposes the _SavedMinPlanarity and _SavedAvgPlanarity are up to date
void BaryPatch::SubDivide | ( | int & | NextName | ) |
The easy callable version, not to be called outside Subdivide
void BaryPatch::SubDivideLevel | ( | int | Level | ) |
Calls subdivision on a given level
void BaryPatch::SubDivideLevelSelected | ( | int | Level | ) |
SubdivideSelected subdivides only selected patches of the given level
void BaryPatch::SurfacePlanarityFactor | ( | double & | Worst, | |
double & | Average, | |||
bool | DegMode | |||
) |
Returns the maximum on all drawn quads of the minima on a quad's 2 triangles of the angle between triangle planes
void BaryPatch::UpdateNameTag | ( | ) | [inline, virtual] |
Updates the name of each patch
Implements SelectableThing.
void BaryPatch::UpdatePlanarities | ( | int | Level, | |
bool | DegMode | |||
) |
Updates planarities of this level's patches
void BaryPatch::UpdatePlanaritiesIfContains | ( | int | Level, | |
int | PerturbName, | |||
bool | DegMode | |||
) |
Updates planarities of this level's patches that contain this perturbation
void BaryPatch::UpdateProjectedTransfoMatrix | ( | ) |
Rebuilds _ProjectedTransfoMatrix projecting the barycentric coordinates of my points (columns of cumulated TransfoMatrices) according to level 0 reference point position and previous level perturbations we suppose this patch's parent _ProjectedTransfoMatrix is already updated we propagate the _ProjectedTransfoMatrix updating to children patches
int BaryPatch::UUnSilentDim | ( | ) | [inline] |
Returns 1 when dimension on axis U is > 1, 0 else
void BaryPatch::ViewAverageOrWorstPatchPlanarity | ( | int | Level, | |
float | Min, | |||
bool | Average, | |||
bool | DegMode | |||
) |
Sets the colours whether you want to compare the acerage or the worst planarities of the patches it supposes the _SavedMinPlanarity and _SavedAvgPlanarity are up to date
int BaryPatch::VUnSilentDim | ( | ) | [inline] |
Returns 1 when dimension on axis V is > 1, 0 else
int BaryPatch::WritePatch | ( | FILE * | file, | |
int | NbPntsLvlZero | |||
) |
Writes the BaryPatch's data in the text file
int BaryPatch::WUnSilentDim | ( | ) | [inline] |
Returns 1 when dimension on axis W is > 1, 0 else
The table of all the children of the patch,created when a subdivision is made
Parametric domain of the patch on U(between 0.0 and 1.0) the lower bound is number 1, the upper bound is number 2
Parametric domain of the patch on U(between 0.0 and 1.0) the lower bound is number 1, the upper bound is number 2
Parametric domain of the patch on V(between 0.0 and 1.0) the lower bound is number 1, the upper bound is number 2
Parametric domain of the patch on V(between 0.0 and 1.0) the lower bound is number 1, the upper bound is number 2
Parametric domain of the patch on W(between 0.0 and 1.0) the lower bound is number 1, the upper bound is number 2
Parametric domain of the patch on W(between 0.0 and 1.0) the lower bound is number 1, the upper bound is number 2
int BaryPatch::_DimU |
Dimension of the patch (how many points on the axis U)
int BaryPatch::_DimV |
Dimension of the patch (how many points on the axis V)
int BaryPatch::_DimW |
Dimension of the patch (how many points on the axis W)
a patch belongs to a tree hierarchy the roots of this tree are the level zero patches if the user defines more than one patch at the beginning, a level -1 patch is created, and its children are the level 0 patches the points of which are level 0 points (_TransfoMatrix=identity)
The level zero points are identified by indices in a table containing all level 0 points
The level zero points are identified by indices in a table containing all level 0 points
The number of children of the patch
A pointer to the subdivision scheme which will be used to build my children in a call to Subdivide
The parent of the patch
Each point of the patch has a position which results from a transformation (_TransfoMatrix) applied to the points of the parent patches + a perturbation in R3 some perturbations are potentially shared by multiple connected patches _Perturbations is a 1D table of pointers to points
The projection of the barycentric points in R3 space / size : (3,NbPoints) each column of _ProjectedTransfoMatrix is the position in R3 of a patch point
The rootpatch (level -1 patch)._Root==NULL signifies I am a root patch
The average planarity of the patch
The worst planarity of the patch
Each point of the patch has a position which is determined by the coordinates of a cumulated TransfoMatrix column in the barycentric space related to some of the level zero points with previous level perturbations coming into account too _TransfoMatrix is the last transformation applied in the tree branch of transformation leading to this patch. This patch's points' positions in 3d space are the result of applying _TransfoMatrix to my parent's points and adding my perturbation.
The connection patterns of the patch on this axis : what point does the connexion begin at?
The connection patterns of the patch on this axis : what point does the connexion end at?
The connection patterns of the patch on this axis : what point does the connexion begin at?
The connection patterns of the patch on this axis : what point does the connexion end at?
The connection patterns of the patch on this axis : what point does the connexion begin at?
The connection patterns of the patch on this axis : what point does the connexion end at?