# Entity/PhysicsInitMultiConvex

Entity:PhysicsInitMultiConvex( )

# Description

An advanced version of Entity:PhysicsInitConvex which initializes a physics object from multiple convex meshes.

This should be used for physics objects with a custom shape which cannot be represented by a single convex mesh.

# Arguments

table vertices

A table consisting of tables of Vectors. Each sub-table defines a set of points to be used in the computation of one convex mesh.

# Returns

Returns true on success, nil otherwise

# Examples

## Example

Creates a physics mesh for the entity which consists of two boxes.

```local min1 = Vector( -30, -10, 0 ) -- Box1 minimum corner
local max1 = Vector( -10, 10, 20 ) -- Box1 maximum corner

local min2 = Vector( 10, -5, 10 ) -- Box2 minimum corner
local max2 = Vector( 30, 5, 40 ) -- Box2 maximum corner

if SERVER then
function ENT:Initialize()
self:SetModel( "models/props_c17/oildrum001.mdl" )

-- Initializing the multi-convex physics mesh
self:PhysicsInitMultiConvex( {
{ -- Each sub-table is a set of vertices of a convex piece, order doesn't matter
Vector( min1.x, min1.y, min1.z ), -- The first box vertices
Vector( min1.x, min1.y, max1.z ),
Vector( min1.x, max1.y, min1.z ),
Vector( min1.x, max1.y, max1.z ),
Vector( max1.x, min1.y, min1.z ),
Vector( max1.x, min1.y, max1.z ),
Vector( max1.x, max1.y, min1.z ),
Vector( max1.x, max1.y, max1.z ),
},
{ -- All these tables together form a concave collision mesh
Vector( min2.x, min2.y, min2.z ), -- The second box vertices
Vector( min2.x, min2.y, max2.z ),
Vector( min2.x, max2.y, min2.z ),
Vector( min2.x, max2.y, max2.z ),
Vector( max2.x, min2.y, min2.z ),
Vector( max2.x, min2.y, max2.z ),
Vector( max2.x, max2.y, min2.z ),
Vector( max2.x, max2.y, max2.z ),
},
} )

self:SetSolid( SOLID_VPHYSICS ) -- Setting the solidity
self:SetMoveType( MOVETYPE_VPHYSICS ) -- Setting the movement type

self:EnableCustomCollisions( true ) -- Enabling the custom collision mesh

self:PhysWake() -- Enabling the physics motion
end
else
local col = Color( 0, 0, 255, 255 )

-- Drawing collision boxes on the client
function ENT:Draw()
self:DrawModel()

local pos, ang = self:GetPos(), self:GetAngles()

render.DrawWireframeBox( pos, ang, min1, max1, col ) -- Drawing the first collision box
render.DrawWireframeBox( pos, ang, min2, max2, col ) -- Drawing the second collision box
end
end```

Output: