本文整理汇总了C#中pb_Object.CenterPivot方法的典型用法代码示例。如果您正苦于以下问题:C# pb_Object.CenterPivot方法的具体用法?C# pb_Object.CenterPivot怎么用?C# pb_Object.CenterPivot使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pb_Object
的用法示例。
在下文中一共展示了pb_Object.CenterPivot方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CombineObjects
/**
* \brief Given an array of "donors", this method returns a merged #pb_Object.
*/
public static bool CombineObjects(pb_Object[] pbs, out pb_Object combined)
{
combined = null;
if(pbs.Length < 1) return false;
List<Vector3> v = new List<Vector3>();
List<pb_Face> f = new List<pb_Face>();
List<pb_IntArray> s = new List<pb_IntArray>();
foreach(pb_Object pb in pbs)
{
int vertexCount = v.Count;
// Vertices
{
v.AddRange(pb.VerticesInWorldSpace());
}
// Faces
{
pb_Face[] faces = new pb_Face[pb.faces.Length];
for(int i = 0; i < faces.Length; i++)
{
faces[i] = new pb_Face(pb.faces[i]);
faces[i].ShiftIndices(vertexCount);
faces[i].RebuildCaches();
}
f.AddRange(faces);
}
// Shared Indices
{
pb_IntArray[] si = pb.GetSharedIndices();
for(int i = 0; i < si.Length; i++)
{
for(int n = 0; n < si[i].Length; n++)
si[i][n] += vertexCount;
}
s.AddRange(si);
}
}
combined = pb_Object.CreateInstanceWithVerticesFacesSharedIndices(v.ToArray(), f.ToArray(), s.ToArray());
combined.CenterPivot(new int[1]{0});
return true;
}
示例2: SetPreviewObject
private void SetPreviewObject(pb_Object pb, int[] indicesToCenterPivotOn)
{
pb.isSelectable = false;
initPreview = false;
bool prevTransform = false;
if(previewObject != null)
{
prevTransform = true;
RegisterPreviewObjectTransform();
}
DestroyPreviewObject();
previewObject = pb;
previewObject.SetName("Preview");
previewObject.SetFaceMaterial(previewObject.faces, previewMat);
if(pb_Preferences_Internal.GetBool(pb_Constant.pbForceGridPivot))
previewObject.CenterPivot(indicesToCenterPivotOn == null ? new int[1]{0} : indicesToCenterPivotOn);
if(prevTransform)
{
previewObject.transform.position = m_pos;
previewObject.transform.rotation = m_rot;
previewObject.transform.localScale = m_scale;
}
else
{
pb_Editor_Utility.ScreenCenter(previewObject.gameObject);
}
if(pbUtil.SharedSnapEnabled)
pb.transform.position = pbUtil.SnapValue(pb.transform.position, pbUtil.SharedSnapValue);
else
if(pb_Preferences_Internal.GetBool(pb_Constant.pbForceVertexPivot))
pb.transform.position = pbUtil.SnapValue(pb.transform.position, 1f);
Selection.activeTransform = pb.transform;
}
示例3: SetPreviewObject
private void SetPreviewObject(pb_Object pb, int[] indicesToCenterPivotOn)
{
pb.isSelectable = false;
initPreview = false;
bool prevTransform = false;
if(previewObject != null)
{
prevTransform = true;
RegisterPreviewObjectTransform();
}
DestroyPreviewObject();
previewObject = pb.gameObject;
if(pb_Preferences_Internal.GetBool(pb_Constant.pbForceGridPivot))
pb.CenterPivot(indicesToCenterPivotOn == null ? new int[1]{0} : indicesToCenterPivotOn);
if(prevTransform)
{
previewObject.transform.position = m_pos;
previewObject.transform.rotation = m_rot;
previewObject.transform.localScale = m_scale;
}
else
{
pb_Editor_Utility.ScreenCenter(previewObject.gameObject);
}
if(pb_ProGrids_Interface.SnapEnabled())
pb.transform.position = pbUtil.SnapValue(pb.transform.position, pb_ProGrids_Interface.SnapValue());
else
if(pb_Preferences_Internal.GetBool(pb_Constant.pbForceVertexPivot))
pb.transform.position = pbUtil.SnapValue(pb.transform.position, 1f);
// Remove pb_Object
Mesh m = pbUtil.DeepCopyMesh( pb.msh );
GameObject.DestroyImmediate(pb.msh);
GameObject.DestroyImmediate(pb);
if(previewObject.GetComponent<pb_Entity>())
GameObject.DestroyImmediate(previewObject.GetComponent<pb_Entity>());
HideFlags flags = HideFlags.DontSave;
m.hideFlags = flags;
previewMat.hideFlags = flags;
previewObject.hideFlags = flags;
previewObject.GetComponent<MeshFilter>().sharedMesh = m;
previewObject.GetComponent<MeshRenderer>().sharedMaterial = previewMat;
Selection.activeTransform = previewObject.transform;
}
示例4: SetPivotAndSnapWithPref
/**
* If EditorPrefs say to set pivot to corner and ProGrids or PB pref says snap to grid, do it.
* @param indicesToCenterPivot If any values are passed here, the pivot is set to an average of all vertices at indices. If null, the first vertex is used as the pivot.
*/
public static void SetPivotAndSnapWithPref(pb_Object pb, int[] indicesToCenterPivot)
{
if(pb_Preferences_Internal.GetBool(pb_Constant.pbForceGridPivot))
pb.CenterPivot( indicesToCenterPivot == null ? new int[1]{0} : indicesToCenterPivot );
else
pb.CenterPivot(indicesToCenterPivot == null ? pb.uniqueIndices : indicesToCenterPivot );
if(pbUtil.SharedSnapEnabled)
pb.transform.position = pbUtil.SnapValue(pb.transform.position, pbUtil.SharedSnapValue);
else
if(pb_Preferences_Internal.GetBool(pb_Constant.pbForceVertexPivot))
pb.transform.position = pbUtil.SnapValue(pb.transform.position, 1f);
}
示例5: CombineObjects
/**
* \brief Given an array of "donors", this method returns a merged #pb_Object.
*/
public static bool CombineObjects(pb_Object[] pbs, out pb_Object combined)
{
combined = null;
if(pbs.Length < 1) return false;
List<Vector3> v = new List<Vector3>();
List<Vector2> u = new List<Vector2>();
List<Color> c = new List<Color>();
List<pb_Face> f = new List<pb_Face>();
List<pb_IntArray> s = new List<pb_IntArray>();
List<pb_IntArray> suv = new List<pb_IntArray>();
foreach(pb_Object pb in pbs)
{
int vertexCount = v.Count;
// Vertices
v.AddRange(pb.VerticesInWorldSpace());
// UVs
u.AddRange(pb.uv);
// Colors
c.AddRange(pb.colors);
// Faces
pb_Face[] faces = new pb_Face[pb.faces.Length];
for(int i = 0; i < faces.Length; i++)
{
faces[i] = new pb_Face(pb.faces[i]);
faces[i].manualUV = true;
faces[i].ShiftIndices(vertexCount);
faces[i].RebuildCaches();
}
f.AddRange(faces);
// Shared Indices
pb_IntArray[] si = pb.GetSharedIndices();
for(int i = 0; i < si.Length; i++)
{
for(int n = 0; n < si[i].Length; n++)
si[i][n] += vertexCount;
}
s.AddRange(si);
// Shared Indices UV
{
pb_IntArray[] si_uv = pb.GetSharedIndicesUV();
for(int i = 0; i < si_uv.Length; i++)
{
for(int n = 0; n < si_uv[i].Length; n++)
si_uv[i][n] += vertexCount;
}
suv.AddRange(si_uv);
}
}
GameObject go = (GameObject)GameObject.Instantiate(pbs[0].gameObject);
go.transform.position = Vector3.zero;
go.transform.localRotation = Quaternion.identity;
go.transform.localScale = Vector3.one;
// Destroy the children
foreach(Transform t in go.transform)
GameObject.DestroyImmediate(t.gameObject);
if(go.GetComponent<pb_Object>()) GameObject.DestroyImmediate(go.GetComponent<pb_Object>());
if(go.GetComponent<pb_Entity>()) GameObject.DestroyImmediate(go.GetComponent<pb_Entity>());
combined = go.AddComponent<pb_Object>();
combined.SetVertices(v.ToArray());
combined.SetUV(u.ToArray());
combined.SetColors(c.ToArray());
combined.SetFaces(f.ToArray());
combined.SetSharedIndices( s.ToArray() ?? pb_IntArrayUtility.ExtractSharedIndices(v.ToArray()) );
combined.SetSharedIndicesUV( suv.ToArray() ?? new pb_IntArray[0] {});
combined.ToMesh();
combined.GetComponent<pb_Entity>().SetEntity( pbs[0].GetComponent<pb_Entity>().entityType );
combined.CenterPivot( pbs[0].transform.position );
combined.Refresh();
// refresh donors since deleting the children of the instantiated object could cause them to lose references
foreach(pb_Object pb in pbs)
pb.Verify();
return true;
}