camembert={} function camembert:init() self.open_angle=0 --open_angle self.radius=4 --radius camembert --half_part2 --slice=tranche self.half_part1="" self.half_part2="" self.slice_1="" self.slice_2="" end function camembert:valueChanged(index,value) if index==self.helpID then messageBox("About CAMEMBERT ", --titre "A great part of these Plug-ins came from the net.I just rewrit .inc files in Lua format, through Fullmoon of Mr LEIRELLA, \n".. --A la ligne = \n\n".. "to use with MORAY3.x .It'a miscellany of codes, \n".. "A special thank to Mr Ph.Gibone who helps me a lot. \n".. "From les Iles Caiman. \n".. "C'est la vie.\n".. "Friendly. Sylvain.\n".. "Ps:I build this Plugins for fun. It not a professional work. Don't be cruel. Have fun. \n\n".. " \n".. " \n".. " Strongly inspired by Chris Huff's. Macro: RoundWedge \n".. " " ) return end if index==self.open_angleID then self.open_angle=value self:redraw() end if index==self.radiusID then self.radius=value self:redraw() end if index==self.half_part1ID then self.half_part1=value end if index==self.half_part2ID then self.half_part2=value end if index==self.slice_1ID then self.slice_1=value end if index==self.slice_2ID then self.slice_2=value end scene:invalidate() end function camembert:getProperties() return "CAMEMBERT", "ABEEEEE1ACF2C5EC", "3311333333333333".. "3331111333333333".. "3333111113333333".. "3333331111133333".. "3333333111113333".. "3333333111111333".. "3333333111111333".. "3333333311111333".. "3333333311111333".. "3333333311111333".. "3333333111111333".. "3333331111113333".. "3333311111133333".. "3333111113333333".. "3331113333333333".. "3311333333333333" end function camembert:getDialog(dialog) dialog:addSeparator("CAMEMBERT:") self.helpID=dialog:addButton("Help") self.open_angleID=dialog:addEditBox("Open_Angle:",self.open_angle,0,360,0) self.radiusID=dialog:addEditBox("Radius:",self.radius,-5,15,1) dialog:addSeparator("Half Part 1:") self.half_part1ID=dialog:addTexture(self.half_part1) dialog:addSeparator("Half Part 2:") self.half_part2ID=dialog:addTexture(self.half_part2) dialog:addSeparator("Slice 1:") self.slice_1ID=dialog:addTexture(self.slice_1) dialog:addSeparator("Slice 2:") self.slice_2ID=dialog:addTexture(self.slice_2) end function camembert:destroy() end function camembert:load(stream) stream:readByte() self.open_angle=stream:readDouble() self.radius=stream:readDouble() self.half_part1=stream:readString() self.half_part2=stream:readString() self.slice_1=stream:readString() self.slice_2=stream:readString() end -- Save it function camembert:save(stream) stream:writeByte(2) stream:writeDouble(self.open_angle) stream:writeDouble(self.radius) stream:writeString(self.half_part1) stream:writeString(self.half_part2) stream:writeString(self.slice_1) stream:writeString(self.slice_2) end function camembert:getInside(x,y,z) return nil end function camembert:wireframe(wire) local open_angle,radius,aaav,cccv open_angle=self.open_angle aaav=self.open_angle/2 radius=self.radius cccv=self.radius/2 wire:line(0,0,0.79,0,0,-0.8) wire:line(-0.2,0,0.79,0.2,0,0.79) wire:line(0,-0.2,0.79,0,0.2,0.79) wire:line(-0.2,0,-0.8,0.2,0,-0.8) wire:line(0,-0.2,-0.8,0,0.2,-0.8) wire:circleZ(0,0,0.79,2+cccv-2,0+aaav,360-aaav) wire:circleZ(0,0,-0.8,2+cccv-2,0+aaav,360-aaav) end function camembert:toPOV(pov) local kk,ll,open_angle,radius kk='(' ll=')' open_angle=self.open_angle radius=self.radius pov:write("union {") pov:write(" ") pov:write(" ") pov:write(" //debut ") pov:write("union { ") pov:write("#macro RoundWedge",kk,"angleOfWedge, widthOfWedge, lengthOfWedge",ll," ") pov:write("union{intersection {plane {y, 0 rotate <0, 0, 0> ") pov:texture(self.half_part1) pov:write("} ") pov:write("plane {-y, 0 rotate < ",kk,"angleOfWedge/2",ll,", 0, 0> ") pov:texture(self.slice_1) pov:write("} ") pov:write("cylinder {< -",kk,"widthOfWedge/2",ll,", 0, 0>, < widthOfWedge/2, 0, 0>, lengthOfWedge ") pov:texture(self.half_part1) pov:write("} } ") pov:write("#end ") pov:write(" //#macro RoundWedge",kk,"angleOfWedge, widthOfWedge, lengthOfWedge",ll," ") pov:write("object {RoundWedge",kk," 360-",open_angle," ,3 , ",radius," ",ll," // ") pov:write("scale 0.5} translate <0,0,0> scale <1,1,1> } ") pov:write(" #macro RoundWedge",kk,"angleOfWedge, widthOfWedge, lengthOfWedge",ll," ") pov:write(" union{intersection {plane {-y, 0 rotate <0, 0, 0> ") pov:texture(self.half_part2) pov:write("} ") pov:write("plane {y, 0 rotate < ",kk,"angleOfWedge/2",ll,", 0, 0> ") pov:texture(self.slice_2) pov:write("} ") pov:write("cylinder {< -",kk,"widthOfWedge/2",ll,", 0, 0>, < widthOfWedge/2, 0, 0>, lengthOfWedge ") pov:texture(self.half_part2) pov:write("} } ") pov:write("#end ") pov:write(" //#macro RoundWedge",kk,"angleOfWedge, widthOfWedge, lengthOfWedge",ll," ") pov:write(" object {RoundWedge",kk," -360+",open_angle," , 3 , ",radius," ",ll," // ") pov:write(" scale 0.5 } translate <0,-0.001,0> scale <1,1,1> } ") pov:write(" rotate <0,-90,0> } ") pov:write(" //fin ") pov:write(" ") pov:transforms(self.xforms) pov:write("}") end registerClass(camembert,"camembert")