/// <summary>Adds this block to the parent meshes linked list. /// Call this during a reflow to reuse this same block again.</summary> public void AddToParent() { BlockAfter = null; ParentMesh.BlockCount++; // Push it into the block chain: if (ParentMesh.FirstBlock == null) { ParentMesh.FirstBlock = ParentMesh.LastBlock = this; } else { ParentMesh.LastBlock = ParentMesh.LastBlock.BlockAfter = this; } }
/// <summary>Allocates a block from this mesh. Note that the block object is actually shared. The block can then have /// its vertices/triangles edited. Changes will be outputted visually when MeshBlock.Done is called.</summary> public MeshBlock Allocate(Renderman renderer) { MeshBlock block = renderer.Block; block.Colour = Color.white; block.TextUV = null; block.ImageUV = null; if (FirstBuffer == null || CurrentBufferBlocks == MeshDataBufferPool.BlockCount) { NextBuffer(); } // Apply buffer and block index: block.Buffer = LastBuffer; block.BlockIndex = CurrentBufferBlocks; // Bump up the index: CurrentBufferBlocks++; return(block); }
public bool Overlaps(MeshBlock block){ // Check if any of blocks 4 corners are within this square. Vector3[] vertBuffer=block.ParentMesh.Vertices.Buffer; // Apply inverse transform to blocks corners: for(int i=0;i<4;i++){ // Map it: Vector3 point=Transform.ApplyInverse(vertBuffer[block.VertexIndex+i]); // Simple box test: if(point.x<VertexBottomLeft.x || point.x>VertexBottomRight.x || point.y<VertexBottomLeft.y || point.y>VertexTopLeft.y){ continue; } return true; } return false; }
public bool Overlaps(MeshBlock block) { // Check if any of blocks 4 corners are within this square. Vector3[] vertBuffer = block.ParentMesh.Vertices.Buffer; // Apply inverse transform to blocks corners: for (int i = 0; i < 4; i++) { // Map it: Vector3 point = Transform.ApplyInverse(vertBuffer[block.VertexIndex + i]); // Simple box test: if (point.x < VertexBottomLeft.x || point.x > VertexBottomRight.x || point.y < VertexBottomLeft.y || point.y > VertexTopLeft.y) { continue; } return(true); } return(false); }
/// <summary>Adds this block to the parent meshes linked list. /// Call this during a reflow to reuse this same block again.</summary> public void AddToParent(){ BlockAfter=null; ParentMesh.BlockCount++; // Push it into the block chain: if(ParentMesh.FirstBlock==null){ ParentMesh.FirstBlock=ParentMesh.LastBlock=this; }else{ ParentMesh.LastBlock=ParentMesh.LastBlock.BlockAfter=this; } }
/// <summary>Allocates a block from this mesh. The block can then have /// its vertices/triangles edited. Changes will be outputted visually when <see cref="PowerUI.DynamicMesh.Flush"/> is called.</summary> public MeshBlock Allocate(){ MeshBlock result=new MeshBlock(this); result.AddToParent(); return result; }
/// <summary>Let the mesh know it's about to undergo a layout routine. /// <see cref="PowerUI.Renderman.Layout"/>.</summary> public void PrepareForLayout(){ FirstBlock=LastBlock=null; LastBlockCount=BlockCount; BlockCount=0; }
/// <summary>Let the mesh know it's about to undergo a layout routine. /// <see cref="PowerUI.Renderman.Layout"/>.</summary> public void PrepareForLayout() { FirstBlock = LastBlock = null; LastBlockCount = BlockCount; BlockCount = 0; }