我想檢查 Path2D 物件的各個路徑段。例如,假設
path = new Path2D();
path.ellipse(70,90,2,2,0,0,2*Math.PI);
我想傳遞path給其他一些函式并提取其中的元素,Path2D以便將它們翻譯成另一種格式。總體目標是允許用戶創建路徑并將其轉換為 TikZ 以包含在 LaTeX 檔案中。
是否有類似 Java 的東西Shape.getPathIterator(),它允許檢查路徑上的每個段。這可以用Javascript完成嗎?作為一個模板,這里是一個 Java 代碼的大綱,它完成了我希望在 Javascript 中做的事情。
PathIterator p = path.getPathIterator(new AffineTransform());
while (p.isDone() == false)
{
double c = new double[6];
int t = p.currentSegment(c);
if (t == PathIterator.SEG_MOVETO)
// (c[0],c[1]) is the "move-to" point.
else if (t == PathIterator.SEG_LINETO)
// (c[0],c[1]) is the "line-to" point.
else if (t == == PathIterator.SEG_CUBICTO)
// c[0] through c[5] specify the cubic curve
else
// etc., etc.
}
在看到@Kaiido 的回答后編輯這個。
我最終做的是擴展Path2D到一個功能相同的新類,除了它在呼叫時將每個對arc(),lineTo()等的呼叫存盤到一個陣列中。這使我可以檢查過去通話的記錄。對于每個人來說,它可能不是一個足夠通用的解決方案,但它可以滿足我的需求。
uj5u.com熱心網友回復:
不,目前 API 中沒有任何內容允許我們這樣做。
有一些關于擴展 Path2D API 的討論,因此它不那么“不透明”,但還沒有什么具體的東西,我認為沒有人積極致力于它,我們不能確定它將包括什么。
目前的提案內容如下
Path2D 檢查。允許檢查當前不透明的 Path2D 物件。
值得一提的是,幾個月前我自己開始研究這個想法,希望我可以幫助這個討論以某種可能的功能設計開始。
我非常雄心勃勃的想法是引入像 SVG 這樣的 API SVGPathData,并向 Path2D 添加方法,如getPathData()、setPathData()、toSVGString()、getTotalLength()和getPointAtLength().
我在嘗試實作 SVGString 決議器時遇到了困難,new Path2D(SVGString)因為從 SVG 弧到畫布弧的轉換非常復雜,而且我希望使用的庫有一個我無法修復的錯誤。
然后我沒有時間讓它重新走上正軌,我不知道我什么時候可以開始作業,但暫時,我在這個故障中上傳了這個專案的當前狀態您可以在其中看到您的橢圓被正確提取為 SVGString,您可以將其用作dSVG<path>元素的屬性。
隨意使用那里的任何東西,但要注意只能 toSVGString()以某種方式作業,new Path2D(SVGString)可能會因一些弧命令而失敗,如果我有時間讓這個專案進一步發展,我顯然會更新這個答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/454767.html
標籤:javascript svg html5-画布 二维路径
上一篇:簡化SELECT陳述句
