Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
Hi,in another post I found a way to achieve my goal of converting the coordinate position to camera space and then scaling it to a small size so that he appears first.
this is new code:
def Draw(self,op, drawpass, bd, bh): if not op[c4d.S_MOTIONTRAIL_GTWO_DRAWENABLE]: return c4d.DRAWRESULT_OK #bd.SetMatrix_Matrix(None, c4d.Matrix()) pmg = ~bd.GetMg() bd.SetMatrix_Camera() all_pos = self.parameters['all_pos'] color_lis = self.parameters['color_lis'] point_size = op[c4d.S_MOTIONTRAIL_GTWO_POINTSIZE] bd.SetPointSize(point_size) for per_pos,color in zip(all_pos,color_lis): bd.SetPen(color) cnt = len(per_pos) temp_lis = [] for i in xrange(cnt-1): c = (pmg * per_pos[i]).GetNormalized() * 20 f = (pmg * per_pos[i+1]).GetNormalized() * 20 bd.DrawLine(c,f,c4d.NOCLIP_D) temp_lis.append(c) temp_lis.append(f) bd.DrawPoints(temp_lis) return c4d.DRAWRESULT_OK
why * 20 will work, * 1or 2 not work (c = (pmg * per_pos[i]).GetNormalized() * 20)?
@r_gigante @zipit The detailed explanation is shown below “up interpolattion” Try use "spline trail"
I read some papers, but always been very slow, just only expanded know, such as Frenet–Serret formulas etc. But I did not directly find a better way to replace my current method, and I have been looking for it.
Computation of Rotation Minimizing Frames This seems to be a good paper, I will read it carefully.
@m_adam Thank you for your team's reply. I will share my exploration in this post in the future.
try use GetDirty(DIRTYFLAGS_CACHE),compare last dirty and current dirty
Hi, you can read this thread
Hi, i read python sdk BaseContainer.FindIndex() return a bool but actually return a dict
This is the sample code, I tried to dynamically create the element inside the group to achieve, the picture is not drawn completely as expected:
import c4d import os import sys from c4d import gui,bitmaps,plugins,utils,modules,storage PLUGIN_ID = 10000000 #only for test GROUP_SCROLL = 1100 USEEAREA_GROUP = 1102 USERAREA = 1101 ADD_BUTTON = 1200 class PreViewArea(gui.GeUserArea): bmp = None def DrawMsg(self,x1, y1, x2, y2, msg): self.OffScreenOn() self.SetClippingRegion(x1, y1, x2, y2) BG_colorDict = self.GetColorRGB(c4d.COLOR_BG) BG_color = c4d.Vector(BG_colorDict['r'], BG_colorDict['g'], BG_colorDict['b']) / 255.0 self.DrawSetPen(BG_color) self.DrawRectangle(x1, y1, x2, y2) if self.bmp: width = self.bmp.GetBw() height = self.bmp.GetBh() self.DrawBitmap(self.bmp, 0, 0, width, height, 0, 0, width, height, c4d.BMP_NORMAL) def dynamic_Group(dialog,ua): dialog.LayoutFlushGroup(USEEAREA_GROUP) if ua.bmp: width = ua.bmp.GetBw() height = ua.bmp.GetBh() else: width,height = 0,0 dialog.AddUserArea(USERAREA, c4d.BFH_SCALE | c4d.BFV_SCALE,width,height) dialog.AttachUserArea(ua, USERAREA) dialog.LayoutChanged(USEEAREA_GROUP) class S_Lib_Dialog(gui.GeDialog): ua = PreViewArea() def CreateLayout(self): self.SetTitle("test") self.ScrollGroupBegin(PLUGIN_ID, c4d.BFH_SCALEFIT | c4d.BFV_SCALEFIT, c4d.SCROLLGROUP_HORIZ | c4d.SCROLLGROUP_VERT) self.GroupBegin(USEEAREA_GROUP,c4d.BFH_LEFT | c4d.BFV_TOP,1,1) self.GroupBorder(c4d.BORDER_ACTIVE_1) self.AddUserArea(USERAREA, c4d.BFH_SCALEFIT | c4d.BFV_SCALEFIT) self.AttachUserArea(self.ua, USERAREA) self.GroupEnd() self.GroupEnd() self.AddButton(ADD_BUTTON,c4d.BFH_SCALEFIT,150,30,"Load image") return True def Command(self, id, msg): if id == ADD_BUTTON: path = storage.LoadDialog(type=c4d.FILESELECTTYPE_IMAGES) if path: bmp = bitmaps.BaseBitmap() result,ismovie = bmp.InitWith(path) if result == c4d.IMAGERESULT_OK: self.ua.bmp = bmp dynamic_Group(self, self.ua) self.ua.Redraw() else: print("Load image Fail") else: print("Not select image") return True return True class S_Lib(plugins.CommandData): dialog = None def Execute(self,doc): # create the dialog if self.dialog is None: self.dialog = S_Lib_Dialog() return self.dialog.Open(dlgtype=c4d.DLG_TYPE_ASYNC, pluginid=PLUGIN_ID, defaultw=800, defaulth=400) def RestoreLayout(self, sec_ref): # manage nonmodal dialog if self.dialog is None: self.dialog = S_Lib_Dialog() return self.dialog.Restore(pluginid=PLUGIN_ID, secret=sec_ref) # Execute main() if __name__=='__main__': path, fn = os.path.split(__file__) plugins.RegisterCommandPlugin(id=PLUGIN_ID, str="test", info=0, help="", dat=S_Lib(), icon=None)