1. 程式人生 > >xps之path

xps之path

研究 操作 得到 osi 分開 例如 就是 曲線 取出

xps之<Path>元素

  • xps文檔的<Path>代表xps文檔裏邊的線條,包括直線,曲線,弧線等等,那麽如何從xps中提取出橫線和豎線,從而發現表格呢?這就要仔細解讀Data屬性.

==
這裏研究縮略語法格式的Data屬性組成:

Data屬性解讀

  • Figure definitions are specified with a Move command, a set of drawing commands to create segments, and an optional Close command to create a closing segment. Drawing commands include:
  • 即圖定義是用一個移動命令(M)指定的,一組用來創建分段的繪圖命令,以及一個可選的關閉命令來創建一個閉合段。繪制命令包括:
  1. Line
  2. Horizontal Line
  3. Vertical Line
  4. Cubic Bézier Curve
  5. Quadratic Bézier Curve
  6. Smooth Cubic Bézier Curve
  7. Elliptical Arc
  • 每個命令由一個字母代表,後邊跟0或1個空字符,然後是跟命令參數,參數之間由空格分開,點由逗號分隔的一對數字坐標組成
  • 大小寫字母代表不同的含義:大寫字母代表絕對值而小寫字母代表相對值,相對當前端點(也就是上個命令的終點坐標)的偏移量,後邊的值是相對偏移量
  • 若第一個命令用相對值了,則當前端點定義為0,0
  • 若Close命令用了相對值,則當前端點為前邊圖的第一個點(即起點和終點重合)
  • 如果相同類型的畫圖命令連續使用多次,重復的命令可能會被省略:

例如:
L 100,200 300,400等價於L 100,200 L 300,400

命令解讀及使用

  1. F fFillRule 代表填充,後邊的fFillRule為0或1,缺省為0
  2. M x,y or m x,y 新建當前端點,F命令後可以畫多個如,但第一個圖必須以M開始,隨後的圖可以省略M,即F命令後的第一個命令一定為M
  3. **L x,y or l x,y 直線(終點坐標)
  4. H x or h x 水平直線(終點x坐標)
  5. V y or v y 豎直直線(終點y坐標)**
  6. C x 1 ,y 1 x 2 ,y 2 x 3 ,y 3 or c x 1 ,y 1 x 2 ,y 2 x 3 ,y 3 曲線
  7. Q x 1 ,y 1 x 2 ,y 2 or q x 1 ,y 1 x 2 ,y 2 二次曲線
  8. S x 1 ,y 1 x 2 ,y 2 or s x 1 ,y 1 x 2 ,y 2 光滑曲線
  9. A x r ,y r r x fArc fSweep x,y or a x r ,y r r x fArc fSweep x,y 弧線
  10. Z or z 閉合線

提取直線

知道了這些,我們就可以提取直線了,其中主要用到的就是F M L H V Z這些字符

提取流程:

  1. 先遍歷節點,找到所有的<Path>節點列表
  2. 對每個節點的Data屬性操作:
  • 對沒有空格的cmd加空格後成這樣子‘F1 M 32.96,75.04 L 762.08,75.04‘
  • 排除曲線
  • 剩下的Data列表處理為如下格式:
tmpdataList= [‘F1‘, ‘M‘, ‘32.96,75.04‘, ‘L‘, ‘762.08,75.04‘]
  • 然後剔除M前邊的元素,得到
dataList=[‘M‘, ‘32.96,75.04‘, ‘L‘, ‘762.08,75.04‘]

然後對其提取各個端點

  • 分別判斷橫線和豎線提取出來

xps之path