THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 26/11/2012 at 12:51, xxxxxxxx wrote:
Hi Yannick!
Thanks again for your help.
This the result of my efforts so far: its a plug-in to sweep multiples splines at once with either circular or square profile..like QuickPipe with a twist :) Surely the code can be improved, but seems to work..
import c4d
import os
from c4d import documents, plugins, bitmaps, gui
#updated version
PLUGIN_ID = 1029425
splineList = None
def checkObj(obj_list) :
spline = 0
tot = len(obj_list)
for obj in obj_list:
tipo = obj.GetTypeName()
if (obj.CheckType(c4d.Ospline) or obj.CheckType(c4d.Ospline4side) or
obj.CheckType(c4d.Osplinearc) or obj.CheckType(c4d.Osplinecircle) or
obj.CheckType(c4d.Osplinecissoid) or obj.CheckType(c4d.Osplinecogwheel) or
obj.CheckType(c4d.Osplinecontour) or obj.CheckType(c4d.Osplinecycloid) or
obj.CheckType(c4d.Osplineflower) or obj.CheckType(c4d.Osplineformula) or
obj.CheckType(c4d.Osplinehelix) or obj.CheckType(c4d.Osplinenside) or
obj.CheckType(c4d.Osplineprimitive) or obj.CheckType(c4d.Osplineprofile) or
obj.CheckType(c4d.Osplinerectangle) or obj.CheckType(c4d.Osplinestar) or
tipo == "MoSpline" or
obj.CheckType(c4d.Osplinetext) or isinstance(obj, c4d.SplineObject)) :
spline = spline+1
if spline < tot :
#print "Tutti gli oggetti devono essere splines"
return False
else:
return True
def main() :
doc = documents.GetActiveDocument()
obj_list = doc.GetActiveObjects(0)
if not obj_list:
gui.MessageDialog('At least one spline must be selected')
return
elif checkObj(obj_list) :
global splineList
splineList = obj_list
dlg = QuickSweepDlg()
dlg.Open(c4d.DLG_TYPE_MODAL, defaultw=300, defaulth=50) # ASYNC = floating, MODAL = dialogo standard
else:
gui.MessageDialog('Only splines can be selected')
def sweep_circle(rad,originals) :
doc=documents.GetActiveDocument()
k=0
doc.StartUndo()
c4d.CallCommand(100004767)
for spline in splineList:
k=k+1
sweep = c4d.BaseObject(c4d.Osweep)
sez = c4d.BaseObject(c4d.Osplinecircle)
phong = c4d.BaseTag(c4d.Tphong)
phong[c4d.PHONGTAG_PHONG_ANGLELIMIT]=True
phong[c4d.PHONGTAG_PHONG_ANGLE]=c4d.utils.Rad(80)
phong[c4d.PHONGTAG_PHONG_USEEDGES]=True
sez[c4d.ID_BASELIST_NAME] = sez.GetName()+"_section"
tracciato = spline.GetClone()
sez[c4d.PRIM_CIRCLE_RADIUS] = rad
sweep[c4d.ID_BASELIST_NAME] = "Sweep_"+spline.GetName()
doc.InsertObject(sweep)
doc.AddUndo(c4d.UNDOTYPE_NEW,sweep)
if originals==True:
tracciato.InsertUnder(sweep)
tracciato[c4d.ID_BASELIST_NAME] = tracciato.GetName()+"_path"
else:
doc.AddUndo(c4d.UNDOTYPE_CHANGE,spline)
spline[c4d.ID_BASELIST_NAME] = spline.GetName()+"_path"
spline.InsertUnder(sweep)
sez.InsertUnder(sweep)
sweep.InsertTag(phong)
doc.EndUndo()
c4d.EventAdd()
return
def sweep_square(lato,originals) :
doc = documents.GetActiveDocument()
k=0
doc.StartUndo()
c4d.CallCommand(100004767)
for spline in splineList:
k=k+1
sweep = c4d.BaseObject(c4d.Osweep)
sez = c4d.BaseObject(c4d.Osplinerectangle)
phong = c4d.BaseTag(c4d.Tphong)
phong[c4d.PHONGTAG_PHONG_ANGLELIMIT]=True
phong[c4d.PHONGTAG_PHONG_ANGLE]=c4d.utils.Rad(80)
phong[c4d.PHONGTAG_PHONG_USEEDGES]=True
sez[c4d.ID_BASELIST_NAME] = sez.GetName()+"_section"
tracciato = spline.GetClone()
sez[c4d.PRIM_RECTANGLE_WIDTH] = lato
sez[c4d.PRIM_RECTANGLE_HEIGHT] = lato
sweep[c4d.ID_BASELIST_NAME] = "Sweep_"+spline.GetName()
doc.InsertObject(sweep)
doc.AddUndo(c4d.UNDOTYPE_NEW,sweep)
if originals==True:
tracciato.InsertUnder(sweep)
tracciato[c4d.ID_BASELIST_NAME] = tracciato.GetName()+"_path"
else:
doc.AddUndo(c4d.UNDOTYPE_CHANGE,spline)
spline[c4d.ID_BASELIST_NAME] = spline.GetName()+"_path"
spline.InsertUnder(sweep)
sez.InsertUnder(sweep)
sweep.InsertTag(phong)
return
class QuickSweepDlg(gui.GeDialog) :
def UpdateDlg(self, id) :
if id==10011:
self.Enable(1002,True)
self.Enable(1003,True)
self.Enable(1006,False)
self.Enable(1007,False)
elif id==10012:
self.Enable(1002,False)
self.Enable(1003,False)
self.Enable(1006,True)
self.Enable(1007,True)
self.LayoutChanged(999)
def CreateLayout(self) :
#create the layout of the dialog
self.SetTitle("QuickSweep")
self.GroupBegin(999, c4d.BFH_SCALEFIT, 2, 5, groupflags=c4d.BFV_GRIDGROUP_EQUALROWS|c4d.BFV_GRIDGROUP_EQUALCOLS)
self.GroupBorderSpace(10, 10, 10, 10)
self.GroupBorderNoTitle(c4d.BORDER_ROUND)
self.AddStaticText(1000, c4d.BFH_LEFT, name="Section")
self.AddComboBox(1001, c4d.BFH_SCALEFIT)
self.AddChild(1001,10011,"Circle")
self.AddChild(1001,10012,"Square")
self.AddStaticText(1002, c4d.BFH_LEFT, name="Radius")
self.AddEditNumberArrows(1003, c4d.BFH_LEFT)
self.AddStaticText(1006, c4d.BFH_LEFT, name="Edge Lenght")
self.AddEditNumberArrows(1007, c4d.BFH_LEFT)
self.AddCheckbox(1008, c4d.BFH_LEFT, initw=0, inith=0, name="Keep original(s)")
self.GroupEnd()
self.GroupBegin(998, c4d.BFH_SCALEFIT, 2, 1)
self.AddDlgGroup(c4d.DLG_CANCEL|c4d.DLG_OK)
#self.AddButton(1004, c4d.BFH_SCALE, name="Close")
#self.AddButton(1005, c4d.BFH_SCALE, name="OK")
self.GroupEnd()
return True
def InitValues(self) :
#initiate the gadgets with values
self.SetReal(1003, 10, min=0, step=0.1)
self.SetReal(1007, 10, min=0, step=0.1)
self.SetLong(1001, 10011)
self.SetBool(1008, False)
self.Activate(c4d.IDC_OK)
self.UpdateDlg(self.GetLong(1001))
return True
def Command(self, id, msg) :
#handle user input
self.UpdateDlg(self.GetLong(1001))
if id==c4d.IDC_OK:
if self.GetLong(1001)==10011:
rad = self.GetReal(1003)
sweep_circle(rad,self.GetBool(1008))
self.Close()
elif self.GetLong(1001)==10012:
lato = self.GetReal(1007)
sweep_square(lato,self.GetBool(1008))
self.Close()
elif id==c4d.IDC_CANCEL:
self.Close()
elif id==c4d.BFM_INPUT:
if msg[c4d.BFM_ACTION_ESC]==True:
print "Action Escaped"
self.Close()
return True
class QUICKSWEEP(plugins.CommandData) :
pass
def Execute(self, doc) :
main()
return True
if __name__ == "__main__":
# load icon.tif from res into bmp
bmp = bitmaps.BaseBitmap()
dir, file = os.path.split(__file__)
fn = os.path.join(dir, "res", "QuickSweep.tif")
bmp.InitWith(fn)
# register the plugin
okyn = plugins.RegisterCommandPlugin(id=PLUGIN_ID, str="Quick Sweep", info=c4d.PLUGINFLAG_COMMAND_HOTKEY, icon=bmp, help="Quick sweep multiple splines", dat=QUICKSWEEP())
print ""
print "-------------- QuickSweep 1.0 by Visualtricks ----------------"
if okyn:
print "QuickSweep 1.0 initialized "
else:
print "Something went wrong - QuickSweep could not initialize"
print "----------------------------------------------------------"
print ""
can be downloaded from here: http://www.visualtricks.it/site/wp-content/uploads/2012/11/QuickSweep1.zip
If anyone wants to give any advice, will be appreciated ! :)
Cheers
Massimiliano