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).
Hello,
How to set the orientation of "DrawCircle" to face the camera like in Orientation Property of Null Object.
info = c4d.HandleInfo() # Defines the position and the size of the circle circleSettings = bh.GetMg() circleSettings.off = info.position circleSettings.v1 *= 20 circleSettings.v2 *= 20 circleSettings.v3 *= 20 # Draw the Circle bd.DrawCircle(circleSettings)
Thank you.
as always, please mark your post as a question.
Can you share a little more information about what you are actually doing? What is the context of the code you provided?
If you want to draw a circle in screen space, the easiest thing would be to just draw a 2D circle using DrawCircle2D().
# This example draws a 2D line, circle and point. bd.SetMatrix_Screen() center = c4d.Vector(100.0, 100.0, 0) tangentPoint = c4d.Vector(150.0, 100.0, 0) # draw line and circle bd.SetPen(c4d.Vector(0.8)) bd.DrawLine2D(center, tangentPoint) bd.DrawCircle2D(center.x, center.y, tangentPoint.x - center.x) # draw point bd.SetPen(c4d.Vector(1.0)) bd.DrawPoint2D(center) bd.SetMatrix_Matrix(None, c4d.Matrix())
best wishes, Sebastian
@s_bach Hello, I want use it on the ObjectData.Draw() function.
Here is the full code:
def Draw(self, op, drawpass, bd, bh): if drawpass != c4d.DRAWPASS_HANDLES: return c4d.DRAWRESULT_SKIP bd.SetMatrix_Matrix(op, bh.GetMg()) hitid = op.GetHighlightHandle(bd) for i in xrange(self.GetHandleCount(op)): color = c4d.GetViewColor(c4d.VIEWCOLOR_SELECTION_PREVIEW) if i == hitid else c4d.GetViewColor(c4d.VIEWCOLOR_ACTIVEPOINT) bd.SetPen(color) info = c4d.HandleInfo() self.GetHandle(op, i, info) bd.DrawHandle(info.position, c4d.DRAWHANDLE_BIG, 0) bd.SetMatrix_Matrix(op, bh.GetMg()) circleSettings = bh.GetMg() circleSettings.off = info.position circleSettings.v1 *= 20 circleSettings.v2 *= 20 circleSettings.v3 *= 20 bd.DrawCircle(circleSettings) return c4d.DRAWRESULT_OK
hello,
using this to draw a circle at op position. You can use your handle position instead. The main point is retrieving the view matrix with bd.GetMg() to have you Y and X vectors lined with the view.
if drawpass == c4d.DRAWPASS_OBJECT: rad = 20.0 bd.SetMatrix_Matrix(op, c4d.Matrix()); m = bd.GetMg(); m.off = bh.GetMg().off; m.v3 = c4d.Vector(0.0); m.v1 *= rad; m.v2 *= rad; bd.DrawCircle(m); return c4d.DRAWRESULT_OK
Cheers, Manuel
@m_magalhaes Thank you. I made some changes but its work!
Cheers, Mustapha