MCPcopy Create free account
hub / github.com/csaez/mscreen / VectorPrim

Class VectorPrim

mscreen.py:340–395  ·  view source on GitHub ↗

`CurvePrim` draw an arrow representing a vector in 3D space.

Source from the content-addressed store, hash-verified

338
339# === Vector Primitive ===
340class VectorPrim(Primitive):
341 """
342 `CurvePrim` draw an arrow representing a vector in 3D space.
343 """
344 def __init__(self, vector, size=1.0, color=None):
345 super(VectorPrim, self).__init__()
346 self._size = size
347 self.color = color or COLOR_BLACK
348
349 # body line
350 _points = ((0, 0, 0), vector)
351 self.body = CurvePrim(_points, color=self.color)
352 self.body.scale(self.size, self.size, self.size)
353
354 # head line
355 m_vector = om2.MVector(*vector)
356 length = m_vector.length()
357 headSize = 0.1 * length
358 points = ((length - headSize, headSize, 0.0),
359 (length, 0.0, 0.0),
360 (length-headSize, -headSize, 0.0))
361 self.head = CurvePrim(points, color=self.color)
362 self.isDirty = True # force to re-orient header
363
364 # `size` represents the scale in which the vector is drawed on the screen
365 @property
366 def size(self):
367 return self._size
368
369 @size.setter
370 def size(self, value):
371 self._size = value
372 self.isDirty = True
373
374 def update(self):
375 super(VectorPrim, self).update()
376 # update the line along the length of the vector
377 self.body.color = self.color
378 self.body.transform = self.transform
379 self.body.transform.setScale((self.size, self.size, self.size),
380 om2.MSpace.kWorld)
381 self.body.update()
382
383 # update the header of the vector (arrow)
384 self.head.color = self.color
385 self.head.transform = self.body.transform
386 m_vector = om2.MVector(self.body._drawPoints[1])
387 m_vector -= self.transform.translation(om2.MSpace.kWorld)
388 m_vectorX = om2.MVector(1, 0, 0)
389 m_rot = m_vectorX.rotateTo(m_vector)
390 self.head.transform.setRotation(m_rot)
391
392 def draw(self, view, renderer):
393 super(VectorPrim, self).draw(view, renderer)
394 self.body.draw(view, renderer)
395 self.head.draw(view, renderer)
396
397

Callers 1

__init__Method · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected