cPy.cModel module

Contents

cPy.cModel module#

class JType(value)[source]#

Bases: Enum

Flags and types for snapping joints.
AxialMask = 255#
Vertical = 256#
Horizontal = 512#
Free = 1024#
Tile = 2048#
TypeMask = 61440#
Type1 = 4096#
Type2 = 8192#
Type3 = 16384#
Type4 = 32768#
IsConnector = 65536#
IsPlug = 131072#
KeepDirection = 262144#
ManualRotate = 524288#
AutoFlipX = 1048576#
AutoFlipY = 2097152#
AutoFlipZ = 4194304#
class VolMarker[source]#

Bases: object

mark pints in space, used for inter-volume segmental selection
Empty: bool#
Activated: bool#
T: cMat4#
Ti: cMat4#
Initial: any#
Clear()[source]#
Check(pos: cVec3) bool[source]#
Mark(pos: cVec3)[source]#
SetupMatrix(src: any)[source]#
class ABOcTree[source]#

Bases: object

Axis-Aligned Box Octree for fast spatial lookups of volume cells.
Depth: int#
Levels: any#
Update(VO: any)[source]#
AddDirtyCell(Level: int, tz: any, AB: any)[source]#
Clear()[source]#
class SpOcTree[source]#

Bases: object

Spatial Octree implementation for raycasting.
L0: any#
Center: cVec3#
Side: float#
NeedFreeze: bool#
Root: any#
Temp: any#
AddCell(vo: any, vc: any)[source]#
AddSmoothedVO(vo: any)[source]#
Create(Smoothed: bool = True, Anyway: bool = False)[source]#
Clear()[source]#
void CreateForVO(VORenderQueue& RQ);
PrepareToScan()[source]#
Scan(Start: cVec3, Dir: cVec3, Len: float, res: any) bool[source]#
static ScanAll(Start: cVec3, Dir: cVec3, Len: float, res: any, Sharp: bool = True) bool[source]#
static CreateAll(Smoothed: bool = True)[source]#
static CreateVO(VO: any)[source]#
static RestoreAll()[source]#
static ClearAll()[source]#
class VolumeColorizer[source]#

Bases: object

Helper class to handle volumetric color rendering and layer management.
cells: any#
SingleLayer: int#
AddCell(vc: any)[source]#
RenderToVolume(vo: any, MT: cMat4)[source]#
static RenderAllVolumes(Layer: int)[source]#
static GetColorDebt(vo: any, L: int) any[source]#
static FinishColorDebts()[source]#
class VolumeObject[source]#

Bases: BaseClass

One layer without hierarchy in the SculptRoom.
Represents volume object. Volume object may be in volume or surface
representations depends on bool InSurfaceRepresentation().
In volume mode voxels are modified and then mesh is generated.
In surface mode mesh is modified then voxels are generated.
The transform matrix of volume corresponds to latest selected instance in VoxTree.
There may be multiple references from VoxTree to the same VolumeObject.
VolumeObject is voxel/surface object not placed in tree. VoxTreeBranch is the object reference.
All active VoxelObject’s are kept as linear set in VTree array.
RootVTree consists of hiererchial set of references of objects from this array.
Each VolumeObject contains complete information about geometry in local space.
Correct transform matrices are kept in VoxTreeBranch that refers this VolumeObject.
Transform matrices in VolumeObject correspond to non-instanced VoxTree element.
If object is instance transform matrix in VolumeObject is
different form VoxTreeBranch transform.
linkedToRetopoObj: bool#
topologyLockedByLinkedObject: bool#
SpaceID: int#
Unique ID of the volume, same as VoxTreeBranch::SpaceID.
LoadTimeSpaceID: int#
SpaceName: cStr#
CacheName: cStr#
Cache reference.
Ghost: bool#
cache() str[source]#
boolean_root: any#
GetGlobalSummaryCut(p: cVec3, root: any = None) float[source]#
GetSummaryCutExcept(p: cVec3, except_vo: VolumeObject, root: any = None, density: float = None) cVec3[source]#
CuttingOperation: int#
0 - none, 1 - subtract, 2 - intersect, 3 - add
FlipFaces: bool#
BooleansDisabled: bool#
Subd: any#
CurrentSubdLevel: int#
DestroySubdLevels() bool[source]#
volumetricalGettter: any#
linkedObjects: any#
NGObjectIdx: int#
AverageEdgeLengthInPen: float = 0.0#
BackBufferTextureID: int = 573#
BackBufferDepthID: int = 574#
BBSizeX: int = -1#
BBSizeY: int = -1#
RenderStamp: any = 4#
static int VoxThreshold; // without implementation
LightColor: cVec4 = 1.0000 1.0000 1.0000 1.0000#
LightScatter: float = 0.0#
GloballyAllowVoxelColoring: bool = False#
Value:

#00000000

GloballyIntentVoxelColoring: bool = False#
Value:

#00000000

LightColor2: cVec4 = 1.0000 1.0000 1.0000 1.0000#
111 for external light, rgb for panorama.
IsExternalLight: float = 0.0#
1 for external light, 0 for panorama.
AllowBB: bool = True#
WholeDirty: bool = True#
Incremental: bool = False#
AllowProgress: bool = False#
IgnoreDropUndo: bool = False#
NoVoxMerge: bool = False#
InvisibleMode: bool = True#
GlobalSortTriangles: bool = False#
static SetCur(tb: any, Fast: bool = False, keepsym: bool = False, flash: bool = True)[source]#
static WarnIfSurface(HasCancel: bool) bool[source]#
OldColor: any#
Color to be restored when volume will be turned back to surface mode.
ScaleChange: float#
How scale is changed when passed to proxy mode.
VolumeExtrusion: float#
bkCells: any#
VoxOcTree: ABOcTree#
Represents OcTree structure for fast finding of volume cells.
LocalAABB: any#
PickFarPlane: float#
< AABB in local space
PickNearPlane: float#
< far plane position in picked radius
PickAvgPlane: float#
< closest plane position in picked radius
PickPlane: float#
< average plane position in picked radius
PickListDirty: int#
< plane position of picked center
LastDrawn: any#
Border: int#
< last drawn bound box of cells centers in local space
MinCell: any#
< border for dencity falloff in voxel objects, usually is 4
MaxCell: any#
< min for bound box of cell indices, x,y,z
Transform: cMat4#
< max for bound box of cell indices, x,y,z
TransformInv: cMat4#
< transform from local to global space
Visible: bool#
< transform from global to local space
InCache: bool#
< better refer visibility from VoxTreeBranch
SurfaceColorChanged: bool#
< is in cache state
RawObjTris: int#
RawInSurfaceRepresentation: int#
CurCacheMethod: int#
LastPolycount: int#
ScaleFactor: float#
Environment: VolumeObject#
< scale factor, it is like simplified transform from local to global space. If you need to get some distance approx in local space, divide it on ScaleFactor
HiddenVolume: VolumeObject#
IdxAllocator: any#
Allows to allocate / free global indices for mesh represented by MeshInVCell.
TempRef: VolumeObject#
CellsChanged: bool#
HasLeakyPos: bool#
CompletelyRebuilt: bool#
HasTransparency: bool#
< this is for undo, it indicates that structure of volume changed drastically, almost no correstondence between old and new
RenderJustFacture: bool#
< for render - nood to sort triangles or not
SomethingNewSelected: bool = False#
Joints: any#
Joints of all merged objects
BackupJoints: any#
AddJoint(J: any, GlobalTransform: cMat4)[source]#
Add joint to volume, GlobalTransform is transform matrix for model in world space
AddAllJoints()[source]#
Add all joints registered in VoxelSculptTool
Color: int#
ApproxColor: int#
ApproxSpec: int#
< bot baking of approximate shader color
ApproxMet: int#
Est: any#
PbrEst: any#
< estimate hader approximately
Shader: any#
SetTransform(M: cMat4, symm: bool)[source]#
TransformPt(P: cVec3)[source]#
TransformScalar(P: float)[source]#
TransformVec(P: cVec3)[source]#
TransformNrm(P: cVec3)[source]#
TransformPtInv(P: cVec3)[source]#
TransformVecInv(P: cVec3)[source]#
TransformNrmInv(P: cVec3)[source]#
TransformScalarInv(P: float)[source]#
CheckIfUseCUDA(Radius: float) bool[source]#
GenerateCavity()[source]#
GenerateCavity2()[source]#
DiscardCavity()[source]#
UsesLayer(L: int) bool[source]#
FlipNormals()[source]#
LastWorkPoint: cVec3#
SubCellSize: int#
DefCellSize: int#
DefCellShift: int#
NumBackups: int#
SurfaceChanged: bool#
NeedOcTreeRefine: bool#
SimpleStampMode: bool#
HideMode: bool#
InSurfaceRepresentation: bool#
RenderOrder: any#
OrderDir: cVec3#
GetCell(t: any, Create: bool, CreateBackup: bool = False, Multithreaded: bool = True) any[source]#
GetBackup(x: int, y: int, z: int) any[source]#
CreateBackup(x: int, y: int, z: int) any[source]#
MoveToBackup(x: int, y: int, z: int) any[source]#
DetachModifiers()[source]#
ClearBackups()[source]#
CreateCellsNearCells()[source]#
Clear(KeepCache: bool = False)[source]#
ClearWithUndo()[source]#
static ClearLeakyPos()[source]#
RestoreColors()[source]#
TotalSmooth(Times: int = 1)[source]#
DeleteCell(x: int, y: int, z: int)[source]#
CalcCellsAABB()[source]#
CalcCellsAABBTransformed(by_tree: bool = True) any[source]#
EstimateObjectColor()[source]#
CreateEstimateStructures()[source]#
ClearEstimateStructures()[source]#
static ClearAllEstimateStructures()[source]#
GetObjectColor(pos: cVec3, Specular: int, spop: int, met: int, Normal: cVec3, srs: any = None, Cavity: float = 0, PixSize: float = 0) cVec4[source]#
static EstimateAllObjectsColor()[source]#
EnsureHiddenVolumeExists()[source]#
GetAverageVoxelNormalInSphere(Center: cVec3, Radius: float) cVec3[source]#
Create shape in volume using getter and StartPoint recursively. All points are in local space
GetAverageVoxelNormalAndPosInSphere(Center: cVec3, Radius: float, nrmSampling: float = 1.0, posSampling: float = 1.0, FromBackup: bool = True, Preferred: cVec3 = cPy.cTypes.cVec3.Zero) cVec3[source]#
UpdateVixelNormalsInLocalTrajectory(pts: any)[source]#
UpdateVixelNormalsAndAveragePositionsInLocalTrajectory(pts: any)[source]#
CreateFuncShapeCUDA(fn: any, Pos: cVec3, Where: any, Subtract: int, Additive: bool = False, ComplexCheck: bool = False, UseTemp: bool = False, Extrusion: int = 0)[source]#
Creates the arbitrary volxels shape
Parameters:
  • fn – the callback that defines the shape. Gets position of the point returns the value 0..1 to be set as voxel value

  • Subtract (int) – Subtract = 0: add, 1:subtract, 255: replace

  • UseTemp (bool) – set true if you want modify the cell afterward, all passed values will be kept in temp location and placed into the cell after the whole operation will be completed.

CreateFuncShapeWeighted(fn: any, Pos: cVec3, Where: any, Subtract: bool, Additive: bool = False)[source]#
ApplySurfChange(fn: any, Pos: cVec3, Where: any, Reader: any = None, SmDeg: float = 0)[source]#
CreateSphere(Pos: cVec3, Radius: float, Subtract: bool, Additive: bool = False)[source]#
CreateSphereSegment(Start: cVec3, End: cVec3, RadiusS: float, RadiusE: float, Subtract: int, Additive: bool = False)[source]#
CopySphereSegment(Start: cVec3, End: cVec3, RadiusS: float, RadiusE: float)[source]#
TransferCells(x: int, y: int, z: int) any[source]#
TransferSphereSegment(Dest: VolumeObject, Start: cVec3, End: cVec3, RadiusS: float, RadiusE: float)[source]#
TransferSphereSegmentSymm(Hide: bool, Start: cVec3, End: cVec3, RadiusS: float, RadiusE: float)[source]#
CreateSphereSegmentSymm(Start: cVec3, End: cVec3, RadiusS: float, RadiusE: float, Subtract: int, Additive: bool = False)[source]#
CopySphereSegmentSymm(Start: cVec3, End: cVec3, RadiusS: float, RadiusE: float, Subtract: bool)[source]#
CreateSegment(Start: cVec3, NS: cVec3, AspectS: float, End: cVec3, NE: cVec3, AspectE: float, R1: float, R2: float, ExtraLayerWidth: float, Subtract: bool)[source]#
CreateSegmentSymm(Start: cVec3, NS: cVec3, AspectS: float, End: cVec3, NE: cVec3, AspectE: float, R1: float, R2: float, ExtraLayerWidth: float, Subtract: bool, DoubleSided: bool = False, PlaneLimit: bool = False)[source]#
void CreateLimSegment(Vector3D Start,Vector3D NS,float AspectS,Vector3D End,Vector3D NE,float AspectE,float R1,float R2,cPlane PL,float ExtraLayerWidth,bool Subtract); // implementation not found
PerformSmoothing(Pos: cVec3, Radius: float, AddValue: float = 0, AddMode: int = 0)[source]#
void CreateLimSegmentSymm(Vector3D Start,Vector3D NS,float AspectS,Vector3D End,Vector3D NE,float AspectE,float R1,float R2,cPlane PL,float ExtraLayerWidth,bool Subtract,bool DoubleSided=false); // implementation not found
PerformSmoothingCUDA(Pos: cVec3, Radius: float, AddValue: float = 0, AddMode: int = 0)[source]#
PerformSmoothingSymm(Pos: cVec3, Radius: float, AddValue: float = 0, AddMode: int = 0)[source]#
PerformPinchVox(Pos1: cVec3, Radius1: float, N1: cVec3, Pos2: cVec3, Radius2: float, N2: cVec3, Degree: float, Shift: cVec3)[source]#
PerformPinchVoxSymm(Pos1: cVec3, Radius1: float, N1: cVec3, Pos2: cVec3, Radius2: float, N2: cVec3, Degree: float, Shift: cVec3)[source]#
GrowSurface(Start: cVec3, NStart: cVec3, StartD: float, End: cVec3, NEnd: cVec3, EndD: float, R1: float, R2: float, Subtract: bool, UsePen: bool, UseTemp: bool)[source]#
GrowSurfaceSymm(Start: cVec3, NStart: cVec3, StartD: float, End: cVec3, NEnd: cVec3, EndD: float, R1: float, R2: float, Subtract: bool, UsePen: bool, UseTemp: bool)[source]#
ApplyPlane(Start: cVec3, N: cVec3, Radius: float, disp: float)[source]#
ApplyPlaneSymm(Start: cVec3, N: cVec3, Radius: float, disp: float)[source]#
AddCellTriangulation(cx: int, cy: int, cz: int) any[source]#
void DrawPressStroke(Vector3D Start,Vector3D End,Vector3D NStart,Vector3D NEnd,float R1,float R2,float Pressure,bool Subtract); // implementation not found
AddCellTriangulation2(cx: int, cy: int, cz: int) any[source]#
AddGlobalCellQuads(cx: int, cy: int, cz: int, vc: any, TC: any)[source]#
AddGlobalCellTriangulation(cx: int, cy: int, cz: int, vc: any, TC: any, M: cMat4)[source]#
AddGlobalCellTriangulation3(cx: int, cy: int, cz: int, vc: any, TC: any, M: cMat4)[source]#
AddIndexedCellTriangulation(cx: int, cy: int, cz: int) any[source]#
void AddGlobalCellTriangulationG(int cx, int cy, int cz, VolumeCell* vc, TriangulationContext* TC, const Matrix4D& M, cList_int * CellPos = NULL); // implementation not found
AddIndexedCellTriangulation2(cx: int, cy: int, cz: int) any[source]#
CreateFuncShapeInCell(cx: int, cy: int, cz: int) any[source]#
CreateFuncShapeInCellW(cx: int, cy: int, cz: int) any[source]#
CreateFuncShapeInCellUsingTemp(x: int, y: int, z: int) any[source]#
MakeSmoothingInCell(cx: int, cy: int, cz: int) any[source]#
MakeSmoothingInCell3(cx: int, cy: int, cz: int) any[source]#
MakeSmoothingInCell2(cx: int, cy: int, cz: int) any[source]#
MakePinchInCell(cx: int, cy: int, cz: int) any[source]#
GrowDensityInCell2(cx: int, cy: int, cz: int) any[source]#
VolumeCell* GrowSurfaceInCell(int cx,int cy,int cz); // implementation not found
GrowDensityInCell(cx: int, cy: int, cz: int) any[source]#
CutHullInCell(cx: int, cy: int, cz: int) any[source]#
ClearAllTemp()[source]#
static ClearAllTempForAll()[source]#
MarkDirtyCell(cx: int, cy: int, cz: int, onlymesh: bool = False, MultiThread: bool = False)[source]#
GetInterpValueThrough(Pos: cVec3, Backup: bool = False) float[source]#
GetVolumetricValue(Pos: cVec3) float[source]#
GetCutByParents(Pos: cVec3, max_density: float = None, except_vo: VolumeObject = None) float[source]#
GetSummaryCut(Pos: cVec3, max_density: float = None, except_vo: VolumeObject = None) float[source]#
GetInterpLSumm(dst: any, pos: cVec3, con: any, TempStorage: any)[source]#
static float GetCut(Vector3D Pos, float* max_density, VolumeObject* except); // implementation not found
GetFastNormal(p: cVec3, normalize: bool = True) cVec3[source]#
GetInterpNormalThrough(Pos: cVec3, dst: float) cVec3[source]#
GetInterpColorThrough(Pos: cVec3, Specular: int = None, me: int = None, Normal: cVec3 = None, srs: any = None) int[source]#
GetInterpColorThroughLayered(Pos: cVec3, Info: any, N1: cVec3, srs: any = None, PixSize: float = 0)[source]#
GetOcclusionThrough(Pos: cVec3, dst: float) float[source]#
GetCavity(Pos: cVec3, dst: float) float[source]#
GetInterpNormalSmThrough(Pos: cVec3, dst: float) cVec3[source]#
GetInterpEdgeValue(Pos: cVec3, Cash: any) float[source]#
GetInterpValueSm(Pos: cVec3) float[source]#
GetInterpValueSmNThrough(Pos: cVec3, N: cVec3) float[source]#
GetInterpValueSmThrough(Pos: cVec3) float[source]#
GetCInterpValue(Pos: cVec3, Backup: bool, Cash: any) float[source]#
GetPreciseValue(x: int, y: int, z: int, Cash: any, Backup: bool = False) any[source]#
GetPreciseValueRef(x: int, y: int, z: int, Cash: any) any[source]#
SetPreciseValue(x: int, y: int, z: int, V: any, Cash: any)[source]#
GetInterpNormal(Pos: cVec3, Backup: bool = False) cVec3[source]#
GetInterpPreciseNormal(Pos: cVec3, Dist: float) cVec3[source]#
GetInterpEdgeNormal(Pos: cVec3, Backup: bool = False) cVec3[source]#
GetInterpNormal2(Pos: cVec3, Backup: bool = False) cVec3[source]#
UpdateMeshRect(cx: int, cy: int, cz: int, mc: any)[source]#
UpdateFilling()[source]#
CreateWholeMesh()[source]#
UpdateMesh(NoCuda: bool = False)[source]#
static Render(IncludingPMS: bool = False, IncludingRtp: bool = False, ShadowOnly: bool = False)[source]#
DrawPickPlane(invonly: bool = False)[source]#
ScanRay(Orig: cVec3, Dir: cVec3, Length: float) bool[source]#
OcScanRay(Orig: cVec3, Dir: cVec3, Length: float, Quick: bool = False) bool[source]#
ScanCells(Orig: cVec3, Dir: cVec3, Length: float) bool[source]#
ScanCellsGrad(Orig: cVec3, Dir: cVec3, Length: float) bool[source]#
ScanCellsGradSmart(Orig: cVec3, Dir: cVec3, Length: float, sm: bool) bool[source]#
ScanCellsGradSm(Orig: cVec3, Dir: cVec3, Length: float) bool[source]#
Pick(Res: cVec3, pic: any, OnlyPosition: bool = False) bool[source]#
SnapToVolume(pos: cVec3, dir: cVec3) cVec3[source]#
StoreLayerToFile(y: float, Name: str)[source]#
void ApplyToPickPool(Vector3D Pos,float Radius,fnGetSurfDisp4* fn,fnGetSurfDisp2* Reader,float SmDeg); // implementation not found
Restore(BS: any, TryToFind: bool = False, CacheName: str = None)[source]#
StoreGlobalIds(VO: VolumeObject, BS: any)[source]#
RestoreGlobalIds(VO: VolumeObject, BS: any)[source]#
MergePMS(PMS: any, Scale: float)[source]#
ApplyHoleRect(Dest: VolumeObject = None, SplitBorder: float = 0, EraseOld: bool = True, Additive: bool = False)[source]#
ApplyFilledRect(Start: cVec3, N: cVec3, Symm: cMat4, neg: bool = False)[source]#
ApplyFilledRectSymm(Start: cVec3, N: cVec3, neg: bool = False)[source]#
EnsureNativeIfInVoxels()[source]#
ApplyMeshChange(Forced: bool = False)[source]#
ApplyMeshChangeAB(Forced: bool = False)[source]#
DetectPureGeometry() int[source]#
VoxelizePureGeometry(Manually: bool, AsShell: bool, tovox: bool = True, suggestedpoly: int = 0)[source]#
GetPolycount() int[source]#
DetectRealVoxels() bool[source]#
GetAverageEdgeLength(inGlobalSpace: bool) float[source]#
GetDimensionsInBasis(x: cVec3 = cPy.cTypes.cVec3.AxisX, y: cVec3 = cPy.cTypes.cVec3.AxisY, z: cVec3 = cPy.cTypes.cVec3.AxisZ) any[source]#
MergeWithGivenPolycount(PolyCount: int, dest: VolumeObject, undo: bool, shelldepth: float = 0) float[source]#
MergeAdaptively(PolyCount: int, dest: VolumeObject) float[source]#
UpdateLayersFromVolumetricColor(vc: any, tm: cMat4)[source]#
ApplySimplifiedMeshChange(Subtract: int)[source]#
ApplyMeshChangeOnTheFly()[source]#
ProcessMeshChange()[source]#
ApplyMeshChangeSimple()[source]#
ApplyMeshChangeRough()[source]#
ApplySurfaceDistortion(P: cVec3, R: float, Dist: float, Method: int)[source]#
ShrinkSurface(Pos1: cVec3, Radius1: float, Pos2: cVec3, Radius2: float, Dist: float)[source]#
ApplySurfaceDistortionSymm(P: cVec3, R: float, Dist: float, Method: int = 0)[source]#
ShrinkSurfaceSymm(Pos1: cVec3, Radius1: float, Pos2: cVec3, Radius2: float, Dist: float)[source]#
SetSurfClay(Pos: cVec3, Radius: float, D: float)[source]#
SetSurfPlane2(Pos: cVec3, Radius: float, Dir: cVec3, Softness: float)[source]#
SetSurfPlaneSymm(Pos: cVec3, Radius: float, D: float = 0, Dir: cVec3 = cPy.cTypes.cVec3.Zero, SmDegree: float = 0)[source]#
StrongSmooth(Pos: cVec3, Radius: float, SmDegree: float, SmType: int)[source]#
MoveSurfaceSymm(Start: cVec3, Radius: float, Dist: cVec3, Additive: bool)[source]#
WrapCell(cx: int, cy: int, cz: int)[source]#
WrapCell2(cx: int, cy: int, cz: int, AdditionalSource: VolumeObject)[source]#
GrowDencity()[source]#
SetEmplty()[source]#
Symmetry()[source]#
CleanSurface()[source]#
LegacyFix()[source]#
Decompose(MinCluster: int, DelSize: int)[source]#
DeleteHidden()[source]#
< Separate loose parts
Decimate()[source]#
DecimateEx(Degree: float, Undo: bool, rk: float) bool[source]#
Shell()[source]#
Bevel()[source]#
< Global operators
RemoveSelfIntersections()[source]#
CloseHolesFastAndGood(weld: bool, maxcontour: int = 100000) any[source]#
if maxcontour == 0 it just returns (HolesCount,MaxHole)
CloseSurfHoles(interp: bool = True, type: int = 0, Accuracy: float = 0.22, MaxContourLength: int = 10000000)[source]#
EstimateHoles(MaxHole: int, MinHole: int, NHoles: int)[source]#
RenderAO(RenderPMS: bool = False)[source]#
DelUnused()[source]#
HideInRadius(Pos: cVec3, Radius: float, Hide: bool)[source]#
HideInRadiusSymm(Pos: cVec3, Radius: float, Hide: bool)[source]#
MarkFreezeInSurfMode(Pos: cVec3, Radius: float, Pos1: cVec3, Radius1: float, Inv: bool, Degree: float, Degree1: float, Additive: bool)[source]#
MarkFreezeInSurfModeSymm(Pos: cVec3, Radius: float, Pos1: cVec3, Radius1: float, Inv: bool, Degree: float, Degree1: float, Additive: bool)[source]#
SmoothFreezeInSurfMode(Pos: cVec3, Radius: float, Degree: float)[source]#
SmoothPoseInSurfMode(Pos: cVec3, Radius: float, Degree: float)[source]#
ExpandFreezeInSurfMode(Pos: cVec3, Radius: float, inv: bool)[source]#
SmoothColorInSurfMode(Pos: cVec3, Radius: float, Degree: float, count: int = 1)[source]#
SmoothColorInVoxelMode(Pos: cVec3, Radius: float, Degree: float, count: int = 1)[source]#
SmoothCavityInSurfMode(count: int, SharpDegree: float, SmoothDegree: float)[source]#
SmoothFreezeInSurfModeSymm(Pos: cVec3, Radius: float, Degree: float)[source]#
static SmoothFreezeInPaintRoom(Pos: cVec3, Radius: float, Degree: float)[source]#
InvertSurfFreeze()[source]#
static InvertPoseSelection()[source]#
static ApplyPoseSelection() bool[source]#
UpdateDirtyPoseSelection()[source]#
ConvertPoseSelectionToFreeze()[source]#
UnfreezeSurf()[source]#
AllocVox(Filler: any) any[source]#
FreeVox(vc: any)[source]#
AllocCell() any[source]#
FreeCell(vc: any)[source]#
CreateSegSelection(P1: cVec3, P2: cVec3, EyeDir: cVec3, PP: any, LSP: cMat4, Mode: int, SubMode: int) cVec3[source]#
CreateRectSelection(EyeDir: cVec3, PP: any, LSP: cMat4, Mode: int, SubMode: int, FreezeOnly: bool, WeightMod: float = 1.0) cVec3[source]#
CreateSegSelectionSymm(P1: cVec3, P2: cVec3, EyeDir: cVec3, PP: any, LSP: cMat4, Mode: int, SubMode: int) cVec3[source]#
CreateRectSelectionSymm(EyeDir: cVec3, PP: any, LSP: cMat4, Mode: int, SubMode: int, FreezeOnly: bool, WeightMod: float = 1.0) cVec3[source]#
GetMainAxis(UseFreeze: bool, InvFreeze: bool, UseSymm: bool, RefPoint: cVec3) cMat4[source]#
GetSelBasis(UseFreeze: bool, InvFreeze: bool, UseSymm: bool, RefPoint: cVec3) cMat4[source]#
ExtrudeSurfInRect(EyeDir: cVec3, Dist: float, AvgNormal: int)[source]#
ExtrudeSurfInRectSymm(EyeDir: cVec3, Dist: float)[source]#
ClearSegSelection(PP: any, Remesh: bool = False, Undo: bool = False)[source]#
ApplyPenSelection(P: cVec3, R: float, Mode: bool, Transparency: float)[source]#
ApplyPenSelectionSymm(P: cVec3, R: float, Mode: bool, Transparency: float)[source]#
PrintMemUsageReport()[source]#
CopyTo(Dest: VolumeObject, Undo: bool = True)[source]#
MergeToOtherVO(VO: VolumeObject, Sub: int = False)[source]#
MergeToThisVO(ExtraTransform: cMat4, ClearThis: bool, NoUndo: bool = False)[source]#
ExtrudeVO(Value: float, Sub: int = 0, Clr: bool = False, forcevox: bool = False)[source]#
CreateShell(Value: float)[source]#
MakeHull(L: int)[source]#
MergeHullToOtherVO(VO: VolumeObject, In: float, Out: float, ReScale: bool)[source]#
RemoveConnectedParts(pt: cVec3, remBB: any, MaxRadius: float)[source]#
Remove parts, connected to nearest point
ToSTL(OnlyThis: bool, BS: any, SingleM: cMat4 = cPy.cTypes.cMat4.Identity, OnlySel: bool = False) bool[source]#
Throw to cMeshContainer.
For example
|         cMeshContainer  mc;
|         this->ToRawMesh( true, true, &mc, Matrix4D::Identity, false );
odo Note unobvious params.
GetVoTNB(T: cVec3, N: cVec3, B: cVec3, R: bool)[source]#
RestoreFromBackup()[source]#
Flip(x: bool, y: bool, z: bool)[source]#
MakeUniform(global_space: bool)[source]#
ExportRawVoxels(File: str, bits: int, CreateHeader: bool, color: bool, gloss: bool, layers: bool)[source]#
ImportRawVoxels(File: str, offset: int, bits: int, Lx: int, Ly: int, Lz: int, Scale: float)[source]#
EstimateInitialParameters(File: str, offset: int, bits: int, Lx: int, Ly: int, Lz: int) bool[source]#
static ExportRawVoxelsWithDialog()[source]#
static ImportRawVoxelsWithDialog()[source]#
SplitInTwo(InsertInTree: bool, EraseOld: bool, subtree: bool = False, changetool: bool = True) VolumeObject[source]#
HideVoxRect(Hide: bool)[source]#
UnhideAllVoxels()[source]#
SeparateHidden()[source]#
ToCache()[source]#
FromCache()[source]#
FromCacheEx()[source]#
ApplySketchToCell(x: int, y: int, z: int) any[source]#
CreateSketch(num_steps: int = 2, Softness: float = 0)[source]#
Barelief(Org: cVec3, Dir: cVec3, Coef: float, FreeEdges: bool = False, Tapering: float = 0, KeepScale: bool = False, Undo: bool = True, ExDensity: float = 1.0, KeepBottom: bool = False)[source]#
LegacyBarelief(Org: cVec3, Dir: cVec3, Coef: float, FreeEdges: bool = False, Tapering: float = 0, KeepScale: bool = False, Undo: bool = True, ExDensity: float = 1.0, KeepBottom: bool = False)[source]#
RemoveUndercuts(Start: cVec3, Dir: cVec3, Tapering: float, KeepBottom: bool = False)[source]#
DirectionalNormalsSmoothing(LocalDir: cVec3, divirvence: float)[source]#
CutUnderPlane(Start: cVec3, Dir: cVec3)[source]#
RemoveInvisibles()[source]#
ToSurfMode(ask: bool = False)[source]#
ToVoxMode()[source]#
SurfSmoothAll()[source]#
SmoothOpenEdgesDialog()[source]#
SmoothOpenEdges(times: int)[source]#
SurfIdeal()[source]#
CloseInnerHoles()[source]#
RemoveIndexedStructure()[source]#
CreateIndexedStructure()[source]#
CreateIndexedStructure2()[source]#
< fills GlobalVertIndices for every cell, assigns global index for each vertex
CreateAdjacent()[source]#
< fills GlobalVertIndices for every cell, assigns global index for each vertex, the difference is that this function makes job basing on coordinates of vertices
MergeRegularMesh(mc: any, Inv: bool)[source]#
CreateGlobalVoxAABB(AB: any, Subtrct: bool)[source]#
SubdivBkCellsIfNeed()[source]#
SubdivAllCells()[source]#
FixVCLayersErrors(vc: any)[source]#
PerformVolumeCSG(Fiels: any, gen: any)[source]#
SurfaceRectCut(T: cMat4, symidx: int = 1)[source]#
SurfaceRectCloseHole(T: cMat4)[source]#
SurfaceRectMakeHole(T: cMat4)[source]#
BooleanMerge(bm: any, sub: int)[source]#
SurfaceRectCut2(Field: any, ProjField: any)[source]#
SurfaceRectCloseHole2(Field: any)[source]#
SurfaceRectMakeHole2(Field: any)[source]#
CheckLinearFit()[source]#
RemoveUnusedVerts()[source]#
static RemoveUnusedVertsForAllVolumes()[source]#
ReorderCells(Undo: bool = True, Subcells: bool = True)[source]#
CheckGlobals()[source]#
ChecAttr()[source]#
OptimizeTables()[source]#
CheckDupIds()[source]#
OptimizeIndicesUsage()[source]#
Reproject(InDistance: float, OutDistance: float, method: int, reprojectcolor: bool)[source]#
CalculateAllNormals()[source]#
CalcSquare() float[source]#
static EnsurePaintLayer()[source]#
static AutoPaintInVolume(operation: str) bool[source]#
static AutoRectInVolume(operation: str) bool[source]#
SplitByCurve(cu: any, Thickness: float = 0, method: int = 0, make_shape: bool = False)[source]#
SplitRich(cu: any)[source]#
MakeBevelOverCurve(cu: any)[source]#
GetClosestCell(pt: cVec3, Global: bool) cVec3[source]#
SurfSubdiv(calcGraph: any, layers: bool = True, scale: bool = True, linear: bool = False)[source]#
StepDown(skipChanges: bool = False)[source]#
ClearSubdLevels()[source]#
TestMultiresolution(message: str = None) bool[source]#
CheckIfMultiresolutionUsed() bool[source]#
TopologyLocked() bool[source]#
CollapseBooleans()[source]#
class SmoothParams[source]#

Bases: BaseClass

SmoothingDegree: float#
Tangent: bool#
Relaxation: bool#
KeepSharpEdges: bool#
KeepOpenEdges: bool#
InvertFreeze: bool#
class VolumeCell[source]#

Bases: object

Contains voxel values.
Each volume / surface object consists of cells. In case of voxels all cells has same width
in space - 8 voxels, array of voxels is 9x9x9 - last, 9’s is from right neighbour cell.
In voxel mode you are operating with voxels, surface will be generated by voxels using marshing cubes.
In case of surface there is no voxel data (polygons / layers / colors) are kept in VolumeCellAttrib.
Destroy()[source]#
Destroy2()[source]#
Attr: any#
Represents cell’s polygonal surface. If it is nullptr, there are no faces in the cell.
Owner: VolumeObject#
BackupDropTick: int#
Cells before this change. Undo will get to this state when applied.
Backup: VolumeCell#
Temp: any#
Values: any#
Pointer to voxels array 9x9x9. Voxel values itself, <=32767 - empty space, >=32768 - filled space.n For details, it may be zero if all voxels are the same. In this case SameValue contains this same value. Surface is determined by the value 32767 using marching cubes.
Layers: any#
SameValue: any#
If cell is completely filled or empty and Values == nullptr the value is used as cell filler.
boolean_hash: float#
RenderStamp: any#
Nx: any#
< cell is locked for changes, rather used for temporary purposes
AllocAttributes()[source]#
< usually = 9, Cell is (Nx * Nx * Nx)
FreeAttributes()[source]#
TryToFreeAttributes()[source]#
Compact(FreeCell: bool = True, Multithread: bool = False)[source]#
Compact8()[source]#
Explicit(WhatTodo: int = 3, Multithreaded: bool = False)[source]#
< param WhatTodo 1 - allocate, 2 - fill, 3 - all
CalcABC()[source]#
UpdateRect(RStamp: int)[source]#
FreeVolLayers()[source]#
GetVolumetricLayer(LayerID: int, type: int, create: bool) any[source]#
class VolumeCellAttrib[source]#

Bases: object

Main brick in voxel / surface structure.
It contains polygonal geometry, color layers if given cell of the surface
pointer to this structure kept in VolumeCell.
RctX: int#
RctY: int#
RctW: int#
RctH: int#
VertsAB: any#
Verts: any#
Vertices of the mesh in the cell. Of course, same vertex may be present in neighbour cells and sometimes you need to identify that 2 vertices from different cells represent single global index. There are two ways. Using Status field in MCVertex that represents edge status. It has global index for every vertex in cell.
BackupVerts: any#
LeakyPos: any#
BackupIds: any#
Verticies and indicies before this change. Undo will get to this state when applied.
OldVerts: any#
Positions / normals of vertices before entering surface mode.
Indices: any#
Indices of mesh in the cell. They refer vertices in this cell. Each three indices represent triangle.
TempVerts: any#
GlobalVertIndices: cList_DWORD#
GlobalVertIndices are references of global vertices indices. GlobalVertIndices corresponds to vertex list Verts. Each vertex in Verts corresponds to item in GlobalVertIndices. If GlobalVertIndices is empty - there are no global indexation in the mesh. Each value is DWORD. Highest bit (0x80000000) is set up if the vertex is on the edge of the cell. The global index itself is GlobalVertIndices[i]&0x7FFFFFFFFF
Layers: any#
CurLayerInvisible: bool = False#
CurLayerDepthMod: float = 1.0#
UseLayerScale: bool = False#
InvisLayerWarning: bool = False#
SetVertexPos(index: int, newpos: cVec3, inlayers: bool = False)[source]#
IncVertexPos(index: int, add: cVec3, inlayers: bool = False)[source]#
EnsureLayerExists()[source]#
RemoveLayer(LayerID: int)[source]#
CompactArray<TexturedVertex> TVerts;//textured vertices
Insertlayer(LayerID: int, MandatoryDepth: bool = False) any[source]#
GetLayer(LayerID: int) any[source]#
AddVertexToLayers(pv1: int, pv2: int, pv3: int, u: float, v: float)[source]#
AddDefaultVertexToLayers()[source]#
UpdateLayersSumm(vo: VolumeObject)[source]#
UpdateLayersSumm2()[source]#
FreeLayers()[source]#
ValidateColor(vl: any)[source]#
DrewDbgTri(idx: int, m: cMat4, Color: int = 0, coef: float = 0.9)[source]#
DrawDbg(m: cMat4 = cPy.cTypes.cMat4.Identity, Color: int = 0, coef: float = 0.9)[source]#
GetVertexColor(p: int) int[source]#
Temp4D: cVec4#
Dirty: any#
For tracking persistent data.