Needs work, just an example
from pyrx import Ap, Db, Ed, Ge, Gi
import math
print("command = yeehaw")
class NavJig(Ed.DrawJig):
def __init__(self, basepoint):
Ed.DrawJig.__init__(self)
self.ds = Ed.DragStatus.kNormal
self.basepoint = basepoint
self.curpoint = basepoint
self.mt = Db.MText()
self.mt.setDatabaseDefaults()
self.mt.setAttachment(Db.MTextAttachmentPoint.kMiddleLeft)
def get_vector_details(self, vector: Ge.Vector3d):
v_length = vector.length()
azimuth_rad = math.atan2(vector.x, vector.y)
azimuth_deg = math.degrees(azimuth_rad) % 360
if 0 <= azimuth_deg <= 90:
bearing = f"N {azimuth_deg:.2f} E"
elif 90 < azimuth_deg <= 180:
bearing = f"S {180 - azimuth_deg:.2f} E"
elif 180 < azimuth_deg <= 270:
bearing = f"S {azimuth_deg - 180:.2f} W"
else:
bearing = f"N {360 - azimuth_deg:.2f} W"
return f"Length: {v_length:.4f}\\P" f"{azimuth_deg:.2f}%%d " f"{bearing}"
def sampler(self):
self.setUserInputControls(Ed.UserInputControls.kAccept3dCoordinates)
self.ds, self.curpoint = self.acquirePoint()
return self.ds
def update(self):
if self.ds == Ed.DragStatus.kNoChange:
return False
return True
def worldDraw(self, wd: Gi.WorldDraw):
if self.ds == Ed.DragStatus.kNoChange:
return True
try:
geo = wd.geometry()
v = self.curpoint - self.basepoint
self.mt.setContents(self.get_vector_details(v))
self.mt.setLocation(self.basepoint + (v * 0.5))
self.mt.setDirection(v)
geo.draw(self.mt)
geo.polyline([self.basepoint, self.curpoint], Ge.Vector3d.kZAxis)
return True
except Exception as err:
print(err)
@Ap.Command()
def yeehaw():
try:
jig = NavJig(Ge.Point3d(0, 0, 0))
jig.setDispPrompt("\nPick point:\n")
res = jig.drag()
print("done", res)
except Exception as err:
print(err)