📄 patchobj.h
字号:
CoreExport BOOL GetExtendedProperties(TimeValue t, TSTR &prop1Label, TSTR &prop1Data, TSTR &prop2Label, TSTR &prop2Data);
CoreExport BOOL PolygonCount(TimeValue t, int& numFaces, int& numVerts);
// get and set the validity interval for the nth channel
CoreExport Interval ChannelValidity(TimeValue t, int nchan);
CoreExport void SetChannelValidity(int i, Interval v);
CoreExport void InvalidateChannels(ChannelMask channels);
CoreExport void TopologyChanged(); // mjm - 5.6.99
// Convert-to-type validity
CoreExport Interval ConvertValidity(TimeValue t);
// Deformable object procs
virtual int IsDeformable() { return 1; }
CoreExport int NumPoints();
CoreExport Point3 GetPoint(int i);
CoreExport void SetPoint(int i, const Point3& p);
CoreExport BOOL IsPointSelected (int i);
CoreExport void PointsWereChanged();
CoreExport void GetDeformBBox(TimeValue t, Box3& box, Matrix3 *tm=NULL,BOOL useSel=FALSE );
CoreExport void Deform(Deformer *defProc, int useSel);
virtual BOOL IsParamSurface() {return TRUE;}
CoreExport Point3 GetSurfacePoint(TimeValue t, float u, float v,Interval &iv);
// Mappable object procs
virtual int IsMappable() { return 1; }
virtual int NumMapChannels () { return patch.NumMapChannels (); }
virtual int NumMapsUsed () { return patch.getNumMaps(); }
virtual void ApplyUVWMap(int type, float utile, float vtile, float wtile,
int uflip, int vflip, int wflip, int cap,const Matrix3 &tm,int channel=1) {
patch.ApplyUVWMap(type,utile,vtile,wtile,uflip,vflip,wflip,cap,tm,channel); }
CoreExport int CanConvertToType(Class_ID obtype);
CoreExport Object* ConvertToType(TimeValue t, Class_ID obtype);
CoreExport void GetCollapseTypes(Tab<Class_ID> &clist,Tab<TSTR*> &nlist);
CoreExport void FreeChannels(ChannelMask chan);
CoreExport Object *MakeShallowCopy(ChannelMask channels);
CoreExport void ShallowCopy(Object* fromOb, ChannelMask channels);
CoreExport void NewAndCopyChannels(ChannelMask channels);
CoreExport DWORD GetSubselState();
// From GeomObject
CoreExport int IntersectRay(TimeValue t, Ray& ray, float& at, Point3& norm);
CoreExport void GetWorldBoundBox(TimeValue t, INode *inode, ViewExp* vpt, Box3& box );
CoreExport void GetLocalBoundBox(TimeValue t, INode *inode, ViewExp* vpt, Box3& box );
CoreExport int IsInstanceDependent(); // Not view-dependent (yet)
CoreExport Mesh* GetRenderMesh(TimeValue t, INode *inode, View& view, BOOL& needDelete);
CoreExport PatchMesh& GetPatchMesh(TimeValue t);
CoreExport Mesh& GetMesh(TimeValue t);
// Animatable methods
virtual void DeleteThis() { delete this; }
virtual void FreeCaches() {patch.InvalidateGeomCache(); }
virtual Class_ID ClassID() { return Class_ID(PATCHOBJ_CLASS_ID,0); }
CoreExport BOOL IsSubClassOf(Class_ID classID);
CoreExport virtual void GetClassName(TSTR& s);
CoreExport void* GetInterface(ULONG id);
// This is the name that will appear in the history browser.
CoreExport virtual TCHAR *GetObjectName();
// Controller stuff for animatable points
int NumSubs() { return 1; } // Just tell it about the master point controller
CoreExport Animatable* SubAnim(int i);
CoreExport TSTR SubAnimName(int i);
CoreExport BOOL AssignController(Animatable *control,int subAnim);
int SubNumToRefNum(int subNum) {return subNum;}
CoreExport BOOL SelectSubAnim(int subNum);
CoreExport BOOL HasControllers(BOOL assertCheck=TRUE);
// Reference methods
CoreExport void RescaleWorldUnits(float f);
int NumRefs() {return vertCont.Count() + vecCont.Count() + 1;} // vert conts + vec conts + master
CoreExport RefTargetHandle GetReference(int i);
CoreExport void SetReference(int i, RefTargetHandle rtarg);
CoreExport int RemapRefOnLoad(int iref);
CoreExport void PlugControllersSel(TimeValue t);
CoreExport void AllocVertContArray(int count);
CoreExport void AllocVecContArray(int count);
CoreExport void AllocContArrays(int vertCount, int vecCount);
CoreExport void ReplaceVertContArray(Tab<Control *> &nc);
CoreExport void ReplaceVecContArray(Tab<Control *> &nc);
CoreExport void ReplaceContArrays(Tab<Control *> &vertnc, Tab<Control *> &vecnc);
CoreExport BOOL PlugVertControl(TimeValue t,int i);
CoreExport BOOL PlugVecControl(TimeValue t,int i);
CoreExport void SetVertAnim(TimeValue t, int point, Point3 pt);
CoreExport void SetVecAnim(TimeValue t, int point, Point3 pt);
CoreExport void SetVertCont(int i, Control *c);
CoreExport void SetVecCont(int i, Control *c);
// IO
CoreExport IOResult Save(ISave *isave);
CoreExport IOResult Load(ILoad *iload);
// PatchObject-specific methods
CoreExport virtual void UpdatePatchMesh(TimeValue t);
CoreExport void PrepareMesh(TimeValue t);
CoreExport BOOL ShowLattice() { return patch.GetDispFlag(DISP_LATTICE) ? TRUE : FALSE; }
CoreExport BOOL ShowVerts() { return patch.GetDispFlag(DISP_VERTS) ? TRUE : FALSE; }
CoreExport void SetShowLattice(BOOL sw) { if(sw) patch.SetDispFlag(DISP_LATTICE); else patch.ClearDispFlag(DISP_LATTICE); }
CoreExport void SetShowVerts(BOOL sw) { if(sw) patch.SetDispFlag(DISP_VERTS); else patch.ClearDispFlag(DISP_VERTS); }
CoreExport void SetMeshSteps(int steps);
CoreExport int GetMeshSteps();
//3-18-99 watje to support render steps
CoreExport void SetMeshStepsRender(int steps);
CoreExport int GetMeshStepsRender();
CoreExport void SetShowInterior(BOOL si);
CoreExport BOOL GetShowInterior();
CoreExport void SetAdaptive(BOOL sw);
CoreExport BOOL GetAdaptive();
CoreExport void SetViewTess(TessApprox tess);
CoreExport TessApprox GetViewTess();
CoreExport void SetProdTess(TessApprox tess);
CoreExport TessApprox GetProdTess();
CoreExport void SetDispTess(TessApprox tess);
CoreExport TessApprox GetDispTess();
CoreExport BOOL GetViewTessNormals();
CoreExport void SetViewTessNormals(BOOL use);
CoreExport BOOL GetProdTessNormals();
CoreExport void SetProdTessNormals(BOOL use);
CoreExport BOOL GetViewTessWeld();
CoreExport void SetViewTessWeld(BOOL weld);
CoreExport BOOL GetProdTessWeld();
CoreExport void SetProdTessWeld(BOOL weld);
CoreExport void InvalidateMesh();
// Editable patch stuff follows...
CoreExport virtual void BeginEditParams( IObjParam *ip, ULONG flags,Animatable *prev);
CoreExport virtual void EndEditParams( IObjParam *ip, ULONG flags,Animatable *next);
CoreExport int GetSubobjectLevel();
CoreExport void SetSubobjectLevel(int level);
CoreExport void ActivateSubobjSel(int level, XFormModes& modes );
CoreExport int SubObjectIndex(HitRecord *hitRec);
CoreExport void GetSubObjectTMs(SubObjAxisCallback *cb,TimeValue t,INode *node,ModContext *mc);
CoreExport void GetSubObjectCenters(SubObjAxisCallback *cb,TimeValue t,INode *node,ModContext *mc);
int NeedUseSubselButton() { return 0; }
CoreExport void SelectSubComponent( HitRecord *hitRec, BOOL selected, BOOL all, BOOL invert );
CoreExport void ClearSelection(int selLevel);
CoreExport void SelectAll(int selLevel);
CoreExport void InvertSelection(int selLevel);
CoreExport void PatchSelChanged();
CoreExport void InvalidateSurfaceUI();
CoreExport void InvalidateOpsUI();
CoreExport void ChangeRememberedPatch(int type);
CoreExport void ChangeSelPatches(int type);
CoreExport int RememberPatchThere(HWND hWnd, IPoint2 m);
CoreExport void SetRememberedPatchType(int type);
CoreExport void ChangeRememberedVert(int type);
CoreExport void ChangeSelVerts(int type);
CoreExport int RememberVertThere(HWND hWnd, IPoint2 m);
CoreExport void SetRememberedVertType(int type);
// Generic xform procedure.
CoreExport void XFormVerts( POXFormProc *xproc, TimeValue t, Matrix3& partm, Matrix3& tmAxis );
// Specialized xform for bezier handles
CoreExport void XFormHandles( POXFormProc *xproc, TimeValue t, Matrix3& partm, Matrix3& tmAxis, int handleIndex );
// Affine transform methods
CoreExport void Move( TimeValue t, Matrix3& partm, Matrix3& tmAxis, Point3& val, BOOL localOrigin=FALSE );
CoreExport void Rotate( TimeValue t, Matrix3& partm, Matrix3& tmAxis, Quat& val, BOOL localOrigin=FALSE );
CoreExport void Scale( TimeValue t, Matrix3& partm, Matrix3& tmAxis, Point3& val, BOOL localOrigin=FALSE );
// The following is called before the first Move(), Rotate() or Scale() call
CoreExport void TransformStart(TimeValue t);
// The following is called after the user has completed the Move, Rotate or Scale operation and
// the undo object has been accepted.
CoreExport void TransformFinish(TimeValue t);
// The following is called when the transform operation is cancelled by a right-click and the undo
// has been cancelled.
CoreExport void TransformCancel(TimeValue t);
CoreExport ObjectState Eval(TimeValue t);
BOOL SupportsNamedSubSels() {return TRUE;}
CoreExport void ActivateSubSelSet(TSTR &setName);
CoreExport void NewSetFromCurSel(TSTR &setName);
CoreExport void RemoveSubSelSet(TSTR &setName);
CoreExport void SetupNamedSelDropDown();
CoreExport int NumNamedSelSets();
CoreExport TSTR GetNamedSelSetName(int i);
CoreExport void SetNamedSelSetName(int i,TSTR &newName);
CoreExport void NewSetByOperator(TSTR &newName,Tab<int> &sets,int op);
CoreExport BOOL GetUniqueSetName(TSTR &name);
CoreExport int SelectNamedSet();
CoreExport void NSCopy();
CoreExport void NSPaste();
CoreExport GenericNamedSelSetList &GetSelSet();
CoreExport void RefreshSelType();
CoreExport void SetNumSelLabel();
CoreExport void SetSelDlgEnables();
CoreExport void SetOpsDlgEnables();
CoreExport void SetSurfDlgEnables();
// from AttachMatDlgUser
int GetAttachMat() { return attachMat; }
void SetAttachMat(int value) { attachMat = value; }
BOOL GetCondenseMat() { return condenseMat; }
void SetCondenseMat(BOOL sw) { condenseMat = sw; }
CoreExport void DoAttach(INode *node, PatchMesh *attPatch, bool & canUndo);
CoreExport void SetTessUI(HWND hDlg, TessApprox *tess);
CoreExport void DoDeleteSelected();
CoreExport void ResolveTopoChanges();
CoreExport void DeletePatchParts(BitArray &delVerts, BitArray &delPatches);
// Animated point stuff:
CoreExport void CreateContArrays();
CoreExport void SynchContArrays();
// Materials
CoreExport int GetSelMatIndex();
CoreExport void SetSelMatIndex(int index);
CoreExport void SelectByMat(int index,BOOL clear);
// Smoothing
CoreExport DWORD GetSelSmoothBits(DWORD &invalid);
CoreExport DWORD GetUsedSmoothBits();
CoreExport void SelectBySmoothGroup(DWORD bits,BOOL clear);
CoreExport void SetSelSmoothBits(DWORD bits,DWORD which);
// Subdivision / addition
CoreExport void SetPropagate(BOOL sw);
CoreExport BOOL GetPropagate();
CoreExport void DoPatchAdd(int type);
CoreExport void DoSubdivide(int level);
CoreExport void DoPatchDetach(int copy, int reorient);
// Welding
CoreExport void DoVertWeld();
//watje
//hide and unhide stuff
CoreExport void DoHide(int type) ;
CoreExport void DoUnHide();
CoreExport void DoPatchHide();
CoreExport void DoVertHide();
CoreExport void DoEdgeHide();
//watje hook stuff
CoreExport void DoAddHook(int vert1, int seg1) ;
CoreExport void DoRemoveHook() ;
//watje bevel and extrusion stuff
CoreExport void DoExtrude() ;
CoreExport void BeginExtrude(TimeValue t);
CoreExport void EndExtrude (TimeValue t, BOOL accept=TRUE);
CoreExport void Extrude( TimeValue t, float amount, BOOL useLocalNorm );
CoreExport void DoBevel() ;
CoreExport void BeginBevel(TimeValue t);
CoreExport void EndBevel (TimeValue t, BOOL accept=TRUE);
CoreExport void Bevel( TimeValue t, float amount, BOOL smoothStart, BOOL smoothEnd );
// patch select and operations interfaces, JBW 2/2/99
CoreExport void StartCommandMode(patchCommandMode mode);
CoreExport void ButtonOp(patchButtonOp opcode);
CoreExport DWORD GetSelLevel();
CoreExport void SetSelLevel(DWORD level);
CoreExport void LocalDataChanged();
CoreExport BitArray GetVertSel();
CoreExport BitArray GetEdgeSel();
CoreExport BitArray GetPatchSel();
CoreExport void SetVertSel(BitArray &set, IPatchSelect *imod, TimeValue t);
CoreExport void SetEdgeSel(BitArray &set, IPatchSelect *imod, TimeValue t);
CoreExport void SetPatchSel(BitArray &set, IPatchSelect *imod, TimeValue t);
CoreExport GenericNamedSelSetList& GetNamedVertSelList();
CoreExport GenericNamedSelSetList& GetNamedEdgeSelList();
CoreExport GenericNamedSelSetList& GetNamedPatchSelList();
// ISubMtlAPI methods:
CoreExport MtlID GetNextAvailMtlID(ModContext* mc);
CoreExport BOOL HasFaceSelection(ModContext* mc);
CoreExport void SetSelFaceMtlID(ModContext* mc, MtlID id, BOOL bResetUnsel = FALSE);
CoreExport int GetSelFaceUniqueMtlID(ModContext* mc);
CoreExport int GetSelFaceAnyMtlID(ModContext* mc);
CoreExport int GetMaxMtlID(ModContext* mc);
};
CoreExport ClassDesc* GetPatchObjDescriptor();
// Helper classes used internally for undo operations
class POModRecord {
public:
virtual BOOL Restore(PatchObject *po, BOOL isUndo)=0;
virtual BOOL Redo(PatchObject *po)=0;
virtual DWORD Parts()=0; // Flags of parts modified by this
};
class PatchObjectRestore : public RestoreObj {
public:
POModRecord *rec; // Modification record
PatchObject *po;
PatchObjectRestore(PatchObject *po, POModRecord *rec);
~PatchObjectRestore();
void Restore(int isUndo);
void Redo();
int Size() { return 1; }
void EndHold() {po->ClearAFlag(A_HELD);}
TSTR Description() { return TSTR(_T("PatchObject restore")); }
};
#endif // __PATCHOBJ__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -