Я добавил в ваш код функцию определения положения мыши в SVG.
let svg = document.querySelector('svg')
function clicked(event) {
let m = oMousePosSVG(event);
console.log(m.x,m.y);
}
svg.addEventListener("click", clicked)
function oMousePosSVG(e) {
var p = svg.createSVGPoint();
p.x = e.clientX;
p.y = e.clientY;
var ctm = svg.getScreenCTM().inverse();
var p = p.matrixTransform(ctm);
return p;
}
svg{border:1px solid}
Чтобы узнать больше об обнаружении мыши в SVG, я рекомендую эту книгу: Использование SVG с CSS3 и HTML5: векторная графика для веб-дизайна
Надеюсь, это поможет.
И Марк, и Люк указали мне правильное направление. Я не мог использовать ни один из ответов, потому что мне пришлось сделать это, чтобы он мог работать с Mono в Linux. В итоге я написал в StandardInput, как было предложено. Вот код, который работает:
public static bool ExecuteSvnCommandWithFileInput( string command, string arguments, string filePath, out string result, out string errors )
{
bool retval = false;
string output = string.Empty;
string errorLines = string.Empty;
Process svnCommand = null;
var psi = new ProcessStartInfo( command );
psi.RedirectStandardInput = true;
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.UseShellExecute = false;
psi.CreateNoWindow = true;
try
{
Process.Start( psi );
psi.Arguments = arguments;
svnCommand = Process.Start( psi );
var file = new FileInfo(filePath);
StreamReader reader = file.OpenText();
string fileContents = reader.ReadToEnd();
reader.Close();
StreamWriter myWriter = svnCommand.StandardInput;
StreamReader myOutput = svnCommand.StandardOutput;
StreamReader myErrors = svnCommand.StandardError;
myWriter.AutoFlush = true;
myWriter.Write(fileContents);
myWriter.Close();
output = myOutput.ReadToEnd();
errorLines = myErrors.ReadToEnd();
// Check for errors
if ( errorLines.Trim().Length == 0 )
{
retval = true;
}
}
catch ( Exception ex )
{
string msg = ex.Message;
errorLines += Environment.NewLine + msg;
}
finally
{
if (svnCommand != null)
{
svnCommand.Close();
}
}
result = output;
errors = errorLines;
return retval;
}
Я не уверен на 100%, но предполагаю, что вам придется вручную передать данные из test.dump
в процесс, используя его StandardInput
собственности.
В противном случае вы можете попробовать использовать cmd.exe
для выполнения команды:
var psi = new ProcessStartInfo( "cmd.exe /c \"" + command "\"" );
Причина в том, что ">", "<" и "|" операторы реализуются самой оболочкой (cmd.exe).
Я предполагаю, что вам следует перехватить StandardInput и записать в файл самостоятельно. Вы можете попробовать с ShellExecute = true, но я не уверен, что это сработает.