Hi, Need to do some simple line drawing in a Javascript plugin and first did this based on docs
createPoint: function(x, y) {
var unit_x = new UnitValue(x, "px")
var unit_y = new UnitValue(y, "px")
var coords = [unit_x.as("pt"), unit_y.as("pt")]
var point = new PathPointInfo();
point.anchor = coords
point.leftDirection = coords
point.rightDirection = coords
point.kind = PointKind.CORNERPOINT
return point
},
drawLine: function(x1, y1, x2, y2) {
var startPoint = Photoshop.createPoint(x1, y1)
var stopPoint = Photoshop.createPoint(x2, y2)
var spi = new SubPathInfo()
spi.closed = false
spi.operation = ShapeOperation.SHAPEXOR
spi.entireSubPath = [startPoint, stopPoint]
var line = app.activeDocument.pathItems.add("Line", [spi])
line.strokePath(ToolType.PENCIL)
line.remove()
},
Now this misaligns the lines, i.e. coordinates are not where they should. The px->pt conversion should be OK at least from settings. I.e. I have PS set to 72dpi and result is pt=px. If I manually scale by 72/96, it almost aligns but not quite. So sounds like there is some transform/scale in place that might be doc specific that should be applied. Any thoughts? More searching found me this that is working, but I'd prefer to use just SDK where I can..
drawLine: function (x1, y1, x2, y2, width) {
var desc = new ActionDescriptor()
var lineDesc = new ActionDescriptor()
var startDesc = new ActionDescriptor()
startDesc.putUnitDouble( charIDToTypeID('Hrzn'), charIDToTypeID('#Pxl'), x1 )
startDesc.putUnitDouble( charIDToTypeID('Vrtc'), charIDToTypeID('#Pxl'), y1 )
lineDesc.putObject( charIDToTypeID('Strt'), charIDToTypeID('Pnt '), startDesc )
var endDesc = new ActionDescriptor()
endDesc.putUnitDouble( charIDToTypeID('Hrzn'), charIDToTypeID('#Pxl'), x2 )
endDesc.putUnitDouble( charIDToTypeID('Vrtc'), charIDToTypeID('#Pxl'), y2 )
lineDesc.putObject( charIDToTypeID('End '), charIDToTypeID('Pnt '), endDesc )
lineDesc.putUnitDouble( charIDToTypeID('Wdth'), charIDToTypeID('#Pxl'), width || 1 )
desc.putObject( charIDToTypeID('Shp '), charIDToTypeID('Ln '), lineDesc )
desc.putBoolean( charIDToTypeID('AntA'), true )
executeAction( charIDToTypeID('Draw'), desc, DialogModes.NO )
}
... View more