IncludeFile "memfunctions.pb"
IncludeFile "meshfunctions.pb"
;Tell CShop this
is an object plugin
ProcedureDLL PLUGINCLASS(*inbuffer,insize,*outbuffer,outsize)
PokeL(*outbuffer,1)
EndProcedure
;Object category
and name
ProcedureDLL PLUGINNAME(*inbuffer,insize,*outbuffer,outsize)
writemem(*outbuffer)
writes("Primitives\Cylinder")
EndProcedure
;Use bounding box
to draw this object
ProcedureDLL CREATIONMETHOD(*inbuffer,insize,*outbuffer,outsize)
writemem(*outbuffer)
writel(0)
EndProcedure
;Optional
parameters to appear in the side panel
ProcedureDLL PLUGINPARAMETERS(*inbuffer,insize,*outbuffer,outsize)
writemem(*outbuffer)
writeb(2);number of
parameters
writes("Sides")
writeb(2);Spinner gadget
writel(3);Minimum value
writel(32);Maximum value
writel(16);Default value
writes("End
caps")
writeb(1);Checkbox gadget
writeb(1);Default value
EndProcedure
ProcedureDLL BUFFERSIZE(*inbuffer,insize,*outbuffer,outsize)
readmem(*inbuffer)
;Position and
scale of bounding box:
x.f=readf()
y.f=readf()
z.f=readf()
w.f=readf()
h.f=readf()
d.f=readf()
prop1=readl()
prop2=readl()
prop3=readl()
prop4=readl()
prop5=readl()
writemem(*outbuffer)
writel(10000);buffer size this
plugin requires
EndProcedure
ProcedureDLL CREATEOBJECT(*inbuffer,insize,*outbuffer,outsize)
readmem(*inbuffer)
sx.f=readf()
sy.f=readf()
sz.f=readf()
w.f=readf()
h.f=readf()
d.f=readf()
sides=readl()
endcaps=readl()
smooth=readl()
prop4=readl()
prop5=readl()
w=w/2.0
h=h/2.0
d=d/2.0
writemem(*outbuffer)
writel(4);version
writel(0);number of groups
writel(0);number of
lightmaps
writel(1);number of meshes
faces=sides
If endcaps=1
faces=faces+2
EndIf
startmesh(x,y,z,faces)
;End
caps
If endcaps=1
;Face 1 - Top
startsurface(sides,sides-2)
For n=0 To sides-1
side.f=n
sidesf.f=sides
a.f=(side.f/sidesf.f)*2.0*3.14159265;PureBasic uses radians for trig
functions
x=Cos(a.f)*w
z=Sin(a.f)*d
addvertex(x+sx,h+sy,z+sz)
Next
For n=2 To sides-1
addtriangle(0,n,n-1)
Next
;Face 2 - Bottom
startsurface(sides,sides-2)
For n=0 To sides-1
side.f=n
sidesf.f=sides
a.f=(side.f/sidesf.f)*2.0*3.14159265
x=Cos(a.f)*w
z=Sin(a.f)*d
addvertex(x+sx,-h+sy,z+sz)
Next
For n=2 To sides-1
addtriangle(n,0,n-1)
Next
EndIf
For n=0 To sides-1
startsurface(4,2)
side.f=n
sidesf.f=sides
a.f=(side.f/sidesf.f)*2.0*3.14159265
x=Cos(a.f)*w
z=Sin(a.f)*d
addvertex(x+sx,-h+sy,z+sz)
addvertex(x+sx,h+sy,z+sz)
side.f=n+1
a.f=(side.f/sidesf.f)*2.0*3.14159265
x=Cos(a.f)*w
z=Sin(a.f)*d
addvertex(x+sx,-h+sy,z+sz)
addvertex(x+sx,h+sy,z+sz)
addtriangle(0,1,2)
addtriangle(3,2,1)
Next
writel(0);number of
entities
writef(0);x
writef(0);y
writef(0);z
writef(0);pitch
writef(0);yaw
EndProcedure
|