「VexFlow test content」の版間の差分
(→概要) |
(→概要) |
||
(同じ利用者による、間の23版が非表示) | |||
71行目: | 71行目: | ||
} | } | ||
function updateAllFlagUniqueIds( | function updateAllFlagUniqueIds(FlagUniqueIds) { | ||
// allUniqueIdsにUniqueIdsを追加または結合 | // allUniqueIdsにUniqueIdsを追加または結合 | ||
if (allFlagUniqueIds.length === 0) { | if (allFlagUniqueIds.length === 0) { | ||
// allUniqueIdsが空の場合、UniqueIdsをそのままコピー | // allUniqueIdsが空の場合、UniqueIdsをそのままコピー | ||
allFlagUniqueIds = [... | allFlagUniqueIds = [...FlagUniqueIds];//スプレッド演算子で要素の中身を書き出す。 | ||
} else { | } else { | ||
FlagUniqueIds.forEach(id => { | |||
if (!allFlagUniqueIds.includes(id)) { | if (!allFlagUniqueIds.includes(id)) { | ||
allFlagUniqueIds.push(id); | allFlagUniqueIds.push(id); | ||
142行目: | 142行目: | ||
stave1.setClef("treble").setContext(ctx); | stave1.setClef("treble").setContext(ctx); | ||
stave1.setTimeSignature('4/4').setContext(ctx); | stave1.setTimeSignature('4/4').setContext(ctx); | ||
stave1.draw(); | stave1.draw(); | ||
const notes1 = [ | const notes1 = [ | ||
new VF.StaveNote({ keys: [" | new VF.StaveNote({ keys: ["a/5"], duration: "1" }), | ||
]; | ]; | ||
SteveNoteUniqueIds = getUniqueStaveNotesIds(notes1, [0 | //SteveNoteUniqueIds = getUniqueStaveNotesIds(notes1, [0]); | ||
allFlagUniqueIds = | //allFlagUniqueIds = updateAllFlagUniqueIds(SteveNoteUniqueIds); | ||
UniqueIds = getUniqueNoteheadIds(notes1[0]); | //UniqueIds = getUniqueNoteheadIds(notes1[0]); | ||
//allUniqueIds = updateAllUniqueIds(UniqueIds); | |||
allUniqueIds = updateAllUniqueIds(UniqueIds); | |||
var stave1Voice = new Vex.Flow.Voice({ num_beats: 4, beat_value: 4 }); | var stave1Voice = new Vex.Flow.Voice({ num_beats: 4, beat_value: 4 }); | ||
204行目: | 189行目: | ||
if (element) { | if (element) { | ||
// 該当する要素があれば、描画内容を透明にする | // 該当する要素があれば、描画内容を透明にする | ||
let | let paths = element.querySelectorAll('path'); | ||
paths.forEach(path => { | |||
var dAttribute = path.getAttribute('d'); | var dAttribute = path.getAttribute('d'); | ||
// カンマで区切られた数値の数を数えます | // カンマで区切られた数値の数を数えます | ||
var numberOfValues = (dAttribute.match(/,/g) || []).length + 1; // カンマの数 + 1 = 数値の数 | var numberOfValues = (dAttribute.match(/,/g) || []).length + 1; // カンマの数 + 1 = 数値の数 | ||
// | if (numberOfValues === 9) { | ||
if (numberOfValues === | var firstCoord = dAttribute.split(',')[0]; | ||
if (dAttribute.startsWith('M')) { | |||
var CnumberOfValues = (dAttribute.match(/C/g) || []).length; // カンマの数 + 1 = 数値の数 | |||
var LnumberOfValues = (dAttribute.match(/L/g) || []).length; // カンマの数 + 1 = 数値の数 | |||
// 座標の差を計算します | |||
if(CnumberOfValues > 0){ | |||
var coords = dAttribute.match(/[-+]?[0-9]*\.?[0-9]+/g).map(parseFloat); | |||
var xdiff = coords[0] - coords[2]; // xの差を計算 | |||
var ydiff = coords[1] - coords[3]; // yの差を計算 | |||
// xが0でyが0より大きい場合、描画内容を透明にします | |||
if (xdiff !== 0) { | |||
if(ydiff === 0){ | |||
path.setAttribute("fill", "none"); | |||
path.setAttribute("stroke", "none"); | |||
} | |||
} | |||
} | |||
} | |||
} | |||
else if (numberOfValues === 1) { | |||
var firstCoord = dAttribute; | |||
if (dAttribute.startsWith('M')) { | |||
var LnumberOfValues = (dAttribute.match(/L/g) || []).length; // カンマの数 + 1 = 数値の数 | |||
// 座標の差を計算します | |||
if(LnumberOfValues > 0){ | |||
var coords = dAttribute.match(/[-+]?[0-9]*\.?[0-9]+/g).map(parseFloat); | |||
var xdiff = coords[0] - coords[2]; // xの差を計算 | |||
var ydiff = coords[1] - coords[3]; // yの差を計算 | |||
// xが0でyが0より大きい場合、描画内容を透明にします | |||
if (xdiff < -17) { | |||
if (xdiff > -18) { | |||
if(ydiff === 0){ | |||
path.setAttribute("fill", "none"); | |||
path.setAttribute("stroke", "none"); | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
else if (numberOfValues === 35 || numberOfValues === 95 || numberOfValues === 41) { | |||
path.setAttribute("fill", "none"); | |||
path.setAttribute("stroke", "none"); | |||
} | } | ||
}); | }); |
2024年4月12日 (金) 22:28時点における最新版
概要