| Article | 70001067 |
| Type | Wish |
| Product | WebJS |
| Version | 7010 |
| Date Added | 4/24/2017 12:00:00 AM |
| Fixed | 7.7011.0.4 (4/25/2017 12:00:00 AM) |
| Submitted by | Brendan Fry |
Summary
ActionDraw event in order to display custom user shapes
Solution
A new event vdActionDraw was added in version 7011.0.4
In this example we calculate and show the distance and the rotation between reference and current point in drawing units
Example:
vdcanvas.vdActionDraw = _vdActiondraw;
function _vdActiondraw(action) {
var ptref = action.ReferencePoint;//get the reference point in world Coordinate System
if (!ptref || action.actionType != vdConst.ACTION_LINE_WORLD) return;//do nothing if the action is not waiting for a user reference point
var ptcur = action.CurrentPoint;//get the current mouse location in world Coordinate system
var dist = vdgeo.Distance3D(ptref, ptcur);//get the distance between reference and current point in drawing units
var angle = vdgeo.GetAngle(ptref, ptcur);//get the angle counter-clockwise relative to x direction in radians
if (angle > vdgeo.HALF_PI && angle < vdgeo.VD_270PI) angle += vdgeo.PI;//change the angle to be horizondally readable
var angledeg = vdgeo.RadiansToDegrees(angle); //convert the angle in degrees
//create a temporary text and draw it in the center of user raber reference line
var midpt = vdgeo.MidPoint(ptref, ptcur);
var txtSize = vdcanvas.GetPixelSize() * 20;
var textvalue = dist.toFixed(2) + '<' + angledeg.toFixed(2);
var txt = vdcanvas.AddText(textvalue, txtSize, midpt, vdConst.VdConstHorJust_VdTextHorCenter, vdConst.VdConstVerJust_VdTextVerBottom, angle, false, {});
txt.PenColor = vdConst.colorFromString("255,0,0");
vdcanvas.DrawEntity(txt);
}
Example 2: Place a rectangle on the cursor position and note that this rectangle is not be added in the document so it not be added also in the undo history.It is a temporary figure.
vdcanvas.vdActionDraw = _vdActiondraw;//define the function in the initialize of the canvas
function _vdActiondraw(action) {
if (action.actionType == vdConst.ACTION_POINT_WORLD || action.actionType == vdConst.ACTION_LINE_WORLD) {// You can check here whatever you want for when to show the rect.I show it when it waiting for a point or a reference point
var ptcur = action.CurrentPoint; //get the current mouse location in world Coordinate system
var rectSize = vdcanvas.GetPixelSize() * 30; // set the size of the rectangle exact 30 pixels so if you zomm in/out the size of the rect will always remains 30 pixels
var inspt = [ptcur[X] - rectSize / 2, ptcur[Y] - rectSize / 2, ptcur[Z]];// set the insertion point of the rectangle
var rect = vdcanvas.AddRect2(inspt, rectSize, rectSize, 0.0, false, {}); // add the recr but without draw it and by using '{}' the rect will not be added in the document so neither to undo history
vdcanvas.DrawEntity(rect);//draw the rect
}
}
