from __future__ import annotations
import cPy.cTypes
import cPy.ClassArray
import cPy.cCore
import cPy.cModel
#cScene
import Coat_CPP
import typing
from typing import ClassVar
from typing import TypeAlias
from typing import Any
from enum import Enum
[docs]
class VoxMethadata():
'''
Base class for voxel metadata extensions.
Allows attaching additional data or logic to a specific VoxTreeBranch.
'''
[docs]
@staticmethod
def dynamic_cast(pObject : any)->VoxMethadata:
'''
An analogue of the dynamic_cast function from C++, it checks whether the object pObject is a VoxMethadata class or its descendant, and if so, returns the specified object, but of the VoxMethadata type.
'''
pass # cpp source
[docs]
@staticmethod
def ProcessMethadata():
pass # cpp source
[docs]
@staticmethod
def SetZeroCur():
pass # cpp source
Parent: any #: VoxTreeBranch * (T)
[docs]
def OnActivateVolume(self, T: any):
'''
Called when the associated volume becomes active.
'''
pass # cpp source
[docs]
def OnDeactivateVolume(self, T: any):
pass # cpp source
[docs]
class CutsCollector():
'''
Utility class for collecting intersection curves and processing boolean edges.
Used for operations like creating curves from volume intersections,
generating tubes along intersections, or splitting mesh boundaries.
'''
edges: list #: cListcVec3, cVec3>>(T)
preferred_name: cPy.cTypes.cStr #: cStr (T)
[docs]
def fromVolumesIntersection(self, volume1: any, volume2: any):
'''
Collects intersection edges between two voxel volumes.
'''
pass # cpp source
[docs]
def makeCurves(self):
'''
Collects intersection edges between a voxel volume and a mesh.
'''
pass # cpp source
[docs]
def relaxInTube(self, volume: any, radius: float, symm: bool = True):
'''
Relaxes the collected curves inside a tubular volume.
'''
pass # cpp source
[docs]
def createWeightsVolume(self, dest: cPy.cModel.VolumeObject, radius: float, edges_transform: cPy.cTypes.cMat4):
pass # cpp source
[docs]
def mergeTubeTo(self, dest: any, radius: float):
pass # cpp source
[docs]
class VoxTreeBranch():
'''
Hierarchical layers (voxel and surface) which you see in the SculptRoom.
Every item in this object contains transform matrix and reference to the item in `VTree`.
It refers `VolumeObject`. There may be multiple references on same `VolumeObject` from separate `VoxTreeBranch`-es.
Root of all `VoxTreeBranches` kept in `RootVTree`.
\see VolumeObject
'''
def __init__(self):
pass # CPP source
def __init__(self):
pass # CPP source
Parent: VoxTreeBranch #: VoxTreeBranch * (T)
Obj: cPy.cModel.VolumeObject #: VolumeObject * (T) Pointer to the actual volumetric or surface data.
StoreMode: bool = Coat_CPP.VoxTreeBranch.StoreMode #: static bool (T) cStr Name; ///< name in tree
Ghost: bool #: bool (T) bool Visible; ///< visibility
pVoxSurf: bool #: bool (T) < ghosting mode
VoxSurf: bool #: bool (T) < was in surface mode on previous frame?
HideInViewport: bool #: bool (T) < true if object is in Surface mode, false if in Voxel mode.
Procesed: bool #: bool (T) < Hidden in viewport, but pickable/visible in tree.
IsRef: bool #: bool (T) bool OpenState; ///< branch is open
IsActive: bool #: bool (T)
IsInTransform: bool #: bool (T)
ToDestroy: bool #: bool (T)
InCache: bool #: bool (T) < should be destroyed. Don't delete leafs manually, just set this flag!
Instance: bool #: bool (T) < is in cache
SkipPick: bool #: bool (T) < is Instance. It does not mean that it was actually instanced. Current selected object is never instance! It gives instance flag to other non-current leaf.
Inverse: bool #: bool (T)
SelectionTime: int #: int (T) bool Selected;
CacheName: cPy.cTypes.cStr #: cStr (T)
ExData: cPy.cTypes.cStr #: cStr (T) < reference to cache name
SymmetryData: cPy.cTypes.cStr #: cStr (T) < metadata string
SpaceID: int #: int (T) < symmetry data kept to be stored in undo routine
ProxyScale: float #: float (T) int Level; ///< deph in VoxTree structure
Transform: cPy.cTypes.cMat4 #: cMat4 (T)
InvTransform: cPy.cTypes.cMat4 #: cMat4 (T) < transform for local to global scale
LocalTransform: cPy.cTypes.cMat4 #: cMat4 (T) \todo ???
GizmoCenter: cPy.cTypes.cVec3 #: cVec3 (T) Last used transform gizmo parameters.
GizmoCenrtified: bool #: bool (T)
GizmoDirected: bool #: bool (T)
GizmoX: cPy.cTypes.cVec3 #: cVec3 (T)
GizmoY: cPy.cTypes.cVec3 #: cVec3 (T)
GizmoZ: cPy.cTypes.cVec3 #: cVec3 (T)
Methadata: any #: ClassPtr<VoxMethadata>(T)
LockedVolumeChanged: VoxTreeBranch = Coat_CPP.VoxTreeBranch.LockedVolumeChanged #: static VoxTreeBranch * (T)
tmpLinkedObjects: any #: ClassArray<LinkedObject>* (T)
[docs]
def GetLinkedObjects(self) -> any:
pass # cpp source
SceneNGObjects: cPy.ClassArray.ClassArray_NGObject = Coat_CPP.VoxTreeBranch.SceneNGObjects #: static ClassArray_NGObject (T)
NGObjectIdx: int #: int (T)
[docs]
def GetNodeSystem(self) -> any:
pass # cpp source
LastTransformTick: int #: int (T)
MergeDisplacement: float = Coat_CPP.VoxTreeBranch.MergeDisplacement #: static float (T)
[docs]
def ChildObjectsCount(self) -> int:
pass # cpp source
[docs]
def GetObjectsCountRecursive(self) -> int:
pass # cpp source
[docs]
def ChildObjectsClear(self):
pass # cpp source
[docs]
def ChildObjectsDel(self, idx: int, count: int):
pass # cpp source
[docs]
def ChildObjectsDelElement(self, idx: int):
pass # cpp source
PrimPresets: any #: ClassArray<OnePreset>(T) primitives usage history
[docs]
def Delete(self):
'''
\see Del()
'''
pass # cpp source
def _Add(self):
pass # cpp source
[docs]
def DropTreeStructureToUndo(self):
pass # cpp source
[docs]
def OnDuplicate(self, CopyPtr: any):
pass # cpp source
[docs]
def AdditionalElementRenderingInUI(self, BaseBox: any):
pass # cpp source
[docs]
def IgnoreAltIsolate(self) -> bool:
pass # cpp source
[docs]
def ApplyBooleans(self, Source: any, shift: bool, ctrl: bool, Keep: bool):
pass # cpp source
[docs]
def ChangeParentItem(self, NewParent: any):
pass # cpp source
[docs]
def NotifyParentChange(self, NewParent: any):
pass # cpp source
[docs]
def ProcessItem(self):
'''
end of overrides from ItemsTree
'''
pass # cpp source
def Add(self, T: cPy.cTypes.cMat4, Name: str, undo: bool = True, ToSubtree: bool = True) -> VoxTreeBranch:
'''
Adds a new child branch.
Args:
T (cMat4): Transform matrix.
Name (str): Name of the new layer.
undo (bool): If true, registers undo action.
ToSubtree (bool): If true, adds to the current object's subtree.
Returns:
VoxTreeBranch: Pointer to the new branch.
'''
pass # cpp source
[docs]
def CheckPresenceInSubTree(self, Element: VoxTreeBranch) -> bool:
'''
Restores the child structure from a helper list.
'''
pass # cpp source
[docs]
def InstanceToParentInstances(self):
pass # cpp source
[docs]
def Insert(self, idx: int):
pass # cpp source
[docs]
def EditShader(self) -> bool:
pass # cpp source
[docs]
def ApplyNodes(self) -> bool:
pass # cpp source
[docs]
@staticmethod
def CreateNewShader(BaseShader: str, NewShaderName: str = None, Activate: bool = True):
pass # cpp source
[docs]
def Rename(self):
pass # cpp source
def _Save3B(self, subtree: any) -> bool:
'''
IO & caching
'''
pass # cpp source
[docs]
def Save3B(self, subtree: bool, name: str, sel: bool = False):
'''
Saves the volume data to a 3B file.
'''
pass # cpp source
def _Merge3B(self) -> bool:
pass # cpp source
[docs]
def Merge3B(self, name: str):
'''
Merges a 3B file into the scene.
'''
pass # cpp source
[docs]
def CheckInstanceRemoving(self):
pass # cpp source
[docs]
def Add1(self) -> bool:
pass # cpp source
[docs]
def Decompose(self):
pass # cpp source
[docs]
def DecomposeFrozen(self):
pass # cpp source
def _Resample(self):
pass # cpp source
[docs]
def Resample(self, scale: float, Q: int):
'''
Resamples the volume (changes resolution).
'''
pass # cpp source
[docs]
def Del(self, onlythis: bool) -> bool:
pass # cpp source
[docs]
def DelSelected(self) -> bool:
pass # cpp source
[docs]
def DelNoUndo(self) -> bool:
pass # cpp source
[docs]
@staticmethod
def validate_cur():
pass # cpp source
[docs]
def ImportPointsCloud(self) -> bool:
'''
Import/Export
'''
pass # cpp source
[docs]
def ImportModel(self) -> bool:
pass # cpp source
[docs]
def ExportScene(self) -> bool:
pass # cpp source
[docs]
def ExportObject(self) -> bool:
pass # cpp source
[docs]
def ExportPatternAsPen(self) -> bool:
pass # cpp source
[docs]
def ExportCurveProfile(self) -> bool:
pass # cpp source
def Approve(self, p: any) -> VoxTreeBranch:
'''
Merging & Geometry
'''
pass # cpp source
[docs]
def CheckMultiselectionCancel(self) -> bool:
pass # cpp source
[docs]
def GetSelHighlight(self) -> cPy.cTypes.cVec4:
pass # cpp source
[docs]
def HighlightIt(self, IfPassive: bool):
pass # cpp source
[docs]
def Highlighted(self) -> bool:
pass # cpp source
[docs]
def Flip(self, x: any, y: any, z: any):
'''
Flips the object along specified axes.
'''
pass # cpp source
[docs]
def FlipSel(self, x: any, y: any, z: any):
pass # cpp source
[docs]
def CombineChildren(self):
pass # cpp source
[docs]
def FlipNormals(self):
pass # cpp source
[docs]
def MoveObj(self, p: VoxTreeBranch, KeepSource: bool) -> bool:
'''
Boolean Operations
'''
pass # cpp source
[docs]
def MakeHull(self) -> bool:
'''
Hull & Repair
'''
pass # cpp source
[docs]
def MakeHull2(self) -> bool:
pass # cpp source
[docs]
def CloseHoles(self) -> bool:
pass # cpp source
[docs]
def CloseTunnels(self) -> bool:
pass # cpp source
[docs]
def Extrude(self) -> bool:
pass # cpp source
[docs]
def SetDirty(self):
pass # cpp source
[docs]
def SetVoxShader(self, obj: any, id: any) -> bool:
pass # cpp source
[docs]
def ApplyAxialSymmetry(self) -> bool:
pass # cpp source
[docs]
def ShowHideButThis(self):
'''
Visibility & Ghosting
'''
pass # cpp source
[docs]
def GhostButThis(self):
pass # cpp source
[docs]
def UnghostWithSubtree(self):
pass # cpp source
[docs]
def GhostWithSubtree(self):
pass # cpp source
[docs]
def InvertGhostWithSubtree(self):
pass # cpp source
[docs]
def InvertVisibleWithSubtree(self):
pass # cpp source
[docs]
def BakeColorsThere(self):
pass # cpp source
[docs]
def ShowAll(self) -> bool:
pass # cpp source
[docs]
def ShowSubtree(self) -> bool:
pass # cpp source
[docs]
def PutOnGroundEx(self, minvt: cPy.cTypes.cVec3, cm: cPy.cTypes.cVec3):
'''
Positioning
'''
pass # cpp source
[docs]
def PutOnGround(self):
pass # cpp source
[docs]
def LayOnGround(self):
pass # cpp source
[docs]
def GlueToGround(self):
pass # cpp source
[docs]
def InvertHiddenFaces(self):
pass # cpp source
[docs]
def DeleteHiddenFaces(self, invert: bool):
pass # cpp source
[docs]
def CalcHash(self, d: int = 1) -> int:
pass # cpp source
@staticmethod
def valid(tb: VoxTreeBranch) -> bool:
pass # cpp source
[docs]
@staticmethod
def valid(ctb: any) -> bool:
pass # cpp source
[docs]
def StoreSymm(self):
pass # cpp source
[docs]
def RestoreSymm(self):
pass # cpp source
[docs]
def GetUniqueName(self, takethisname: bool, suffix: str) -> cPy.cTypes.cStr:
pass # cpp source
[docs]
def Clone(self, Recursive: bool = False, dest: VoxTreeBranch = None, Inst: bool = False, Subtree: bool = False, T: cPy.cTypes.cMat4 = cPy.cTypes.cMat4.Identity, ChangeTool: bool = True, CopyData: bool = True, SetCurr: bool = True, ForceReplaceDest: bool = False, SelectedOnly: bool = False) -> VoxTreeBranch:
'''
Clones the object/branch.
Args:
Recursive (bool): Clone children recursively.
dest (VoxTreeBranch): Destination branch (parent).
Inst (bool): Create as an instance (share volume data).
Subtree (bool): Include full subtree.
T (cMat4): Optional transform offset.
Returns:
VoxTreeBranch: Pointer to the cloned branch.
'''
pass # cpp source
[docs]
def Clone2(self):
pass # cpp source
[docs]
def CloneInst2(self):
pass # cpp source
[docs]
def CloneDegrade(self, Undo: bool) -> bool:
pass # cpp source
[docs]
def CloneAndDegradeCur(self):
pass # cpp source
[docs]
def SeparateHidden(self):
pass # cpp source
[docs]
def MergeVisible(self):
pass # cpp source
[docs]
def PlainMergeVisible(self):
pass # cpp source
[docs]
def MergeSelected(self):
pass # cpp source
[docs]
def PlainMergeSelected(self):
pass # cpp source
[docs]
def MergeSubtree(self):
'''
void MergeDown(); // implementation not found
'''
pass # cpp source
[docs]
def PlainMergeSubtree(self):
pass # cpp source
[docs]
def MergeTo(self, Dest: VoxTreeBranch, sub: int, ClearThis: bool, NoUndo: bool):
pass # cpp source
def find(self, vo: cPy.cModel.VolumeObject) -> VoxTreeBranch:
'''
Merges a mesh into the voxel/surface volume.
'''
pass # cpp source
[docs]
def CloneSpaceVT(self, changetool: bool = True, subtree: bool = False) -> VoxTreeBranch:
pass # cpp source
[docs]
def SetupNewNodeSystem(self):
pass # cpp source
[docs]
def CloneSpace(self) -> bool:
pass # cpp source
[docs]
def IncDencity2X(self) -> bool:
pass # cpp source
[docs]
def DecDencity2X(self) -> bool:
pass # cpp source
[docs]
def CloneSymm2(self):
pass # cpp source
[docs]
def CloneInstSymm2(self):
pass # cpp source
[docs]
def SelectCurrent(self):
pass # cpp source
[docs]
def SelectCurrentOnScreen(self):
pass # cpp source
[docs]
def SimpleSelect(self):
pass # cpp source
[docs]
def QuadrangulateAndMergeDP(self) -> bool:
'''
Retopology / Quadrangulation
'''
pass # cpp source
[docs]
def DecToRetopo(self):
pass # cpp source
[docs]
def DecToRetopoAll(self):
pass # cpp source
[docs]
def PushMatrix(self):
pass # cpp source
[docs]
def PopMatrix(self):
pass # cpp source
[docs]
def UnIstance(self, copy: bool = True):
pass # cpp source
def SaveTransforms(self, name: str):
pass # cpp source
def LoadTransforms(self, name: str):
pass # cpp source
[docs]
def SelectVisibleSubtree(self):
pass # cpp source
[docs]
def ChooseRefColor(self):
pass # cpp source
[docs]
def TopologyLocked(self) -> bool:
pass # cpp source
[docs]
def OnChangeMember(self, mc: cPy.cCore.BaseClass, mp: any, me: any, mn: str) -> bool:
pass # cpp source
[docs]
def OnScriptRecorder(self, mc: cPy.cCore.BaseClass, mp: any, me: any, mn: str) -> bool:
pass # cpp source
[docs]
def ApproveThis(self) -> bool:
pass # cpp source
[docs]
def OnModifyControl(self, Name: str, BW: any, Context: any):
pass # cpp source
[docs]
def RMBHotkeysActiveForThisItem(self) -> bool:
pass # cpp source
[docs]
def GetClassMask(self) -> int:
pass # cpp source
[docs]
def GetElementLevel(self, name: str) -> int:
pass # cpp source
[docs]
def ProcessNodeCleanup(self):
pass # cpp source
[docs]
def ProcessNodeVisibility(self, MakeInvisible: bool = False):
pass # cpp source
[docs]
def UpdateHash(self, H: any, data: any = None, extra: any = None):
pass # cpp source
[docs]
def IsNameUniq(self, name: str) -> bool:
pass # cpp source
[docs]
def StoreVOTree(self, B: any, bin: bool):
pass # cpp source
[docs]
def RefreshLevels(self):
pass # cpp source
[docs]
def SetupLevels(self, L: int):
pass # cpp source
[docs]
def SetupVOMat(self):
pass # cpp source
[docs]
def RestoreVOTree(self, B: any, Clear: bool = True):
pass # cpp source
[docs]
def SetDestroyState(self):
pass # cpp source
[docs]
def SetVIDS(self):
pass # cpp source
[docs]
def SetInvM(self):
pass # cpp source
[docs]
def FindVOBS(self):
pass # cpp source
[docs]
def GetMainAxis(self, X: cPy.cTypes.cVec3, Y: cPy.cTypes.cVec3, Z: cPy.cTypes.cVec3, SelectedOnly: bool) -> cPy.cTypes.cVec3:
pass # cpp source
[docs]
def CheckLockedVolume(self) -> bool:
pass # cpp source
[docs]
def removeThis(self):
pass # cpp source
[docs]
def duplicate(self) -> any:
pass # cpp source
[docs]
def duplicateAsInstance(self) -> any:
pass # cpp source
[docs]
def instancingSupported(self) -> bool:
pass # cpp source
[docs]
@staticmethod
def ApplySurfaceChangesToVoxelsVolumes():
'''
static float GetCut(cVec2& minmax, const Vector3D& p, VolumeObject* except, float* unitlen); // implementation not found
'''
pass # cpp source
[docs]
class VoxVisualTree(VoxTreeBranch):
'''
The root class representing the visual object tree structure.
Manages global tree operations like adding new volumes, deleting selected, and cloning spaces.
'''
def __init__(self):
pass # CPP source
[docs]
def AddNewVolume(self):
pass # cpp source
[docs]
def DeleteSelectedVolumes(self):
pass # cpp source
[docs]
def DuplicateSelectedVolumes(self):
pass # cpp source
[docs]
def CloneSpaceDencity(self):
pass # cpp source
[docs]
def SymmCopy(self):
pass # cpp source
[docs]
def EditShader(self):
pass # cpp source
[docs]
def IncRes(self):
pass # cpp source
[docs]
def ClearCurrLayer(self):
pass # cpp source