2015-06-12 4 views
3

Я хочу нарисовать элементы полигона и пути в svg в cm вместо этого в пикселе (опция по умолчанию). Я был в состоянии сделать это для линии и прямоугольника добавления см после номера, но следующий код SVG не работает:Рисунок SVG path и polygon in cm

<svg width="70cm" height="70cm"> 
<polygon points="1cm,1cm 2.5cm, 1cm 3cm, 13cm 1cm, 13cm" 
    style="stroke: #000099; 
    fill: #3333cc; 
    fill-opacity: 1; 
    " 
    /> 
</svg> 

же для пути. Кто-нибудь знает, как это решить?

UPDATE: Я пробовал использовать различные экраны, считывая файл svg с помощью inkscape или с Chrome. Я измерил cm на экране, так как мне нужен реальный cm для фигур, которые я рисую. Здесь загадочные результаты с:

<svg width="20cm" height="20cm" viewBox="0 0 20 20" > 
    <polygon points='1,1 2.5,1 3,10 1,10' 
    style="stroke: #000000; fill:none;"/> 
</svg> 

MacBook экран воздуха, 118 пикселя на дюйм: многоугольник никогда в реальных мер, всегда меньше, как в Inkscape и Chrome на другой экран, 166 пикселя на дюймов, меры ok в Chrome, но не в Inkscape. То же самое, если я попытаюсь импортировать в SVG-edit.

Кто-нибудь знает, что не так в Inkscape?

Thanks

+0

возможно дубликат [Как масштабировании SVG pol ygon in ems?] (http://stackoverflow.com/questions/8515524/how-do-i-scale-an-svg-polygon-in-ems) –

+1

@ORMapper не имеет ничего общего с * em's *, OP is говорить о * cm *. OP вы не можете этого сделать, не зная устройства DPI. Этот вопрос является фактически дубликатом этого: http://stackoverflow.com/questions/27726232/scale-mm-to-pixels-in-css/27726670#27726670 - Вообще говоря, пиксель НЕ является единиц измерения реального мира **; Я предполагаю, конечно, что вы имеете в виду, что прямоугольник, который вы хотите создать, будет равным 1 см на экране, например. –

+0

@ НиколасКириакидес: «Ничего общего с ними, ОП говорит о см» - Простите меня? Этот вопрос касается выражения точек полигона SVG в конкретной единице, которая может быть указана для координат и размера прямоугольника, но не непосредственно в атрибуте 'points' многоугольника. Вопрос, который я связал, ** точно то же самое **. Единственное различие заключается в том, что в одном из вопросов используется пример * cm *, другой - * em *, но это вряд ли является концептуальной разницей **, не так ли? –

ответ

2

Вы не можете напрямую. НО (всегда есть, но в информатике) из документации (W3C):

  • Точки в многоугольнике выражаются в системе координат пользователя
  • «1см» равно «35.43307px» (и, следовательно, 35.43307 пользовательские единицы)

Поэтому я предлагаю вам добавить преобразование к вашему многоугольник, который делает преобразование и опустить «см» в списке точек:

<svg width="15cm" height="15cm"> 
    <g transform="scale(35.43307)"> 
     <polygon points="1,1 2.5,1 3,13 1,13" 
       style="stroke: #000099; fill: #3333cc; fill-opacity: 1;" /> 
    </g> 
</svg> 
+4

вам нужно знать DPI устройства - ваша формула предполагает экран 96-DPI, что очень часто бывает не так - пиксель не является измерительным прибором реального мира –

+1

Да, но в мире Интернета 1 дюйм = 96 "пикселей" CSS.Таким образом, решение Матхье является правильным, если OP хочет, чтобы ее полигоны соответствовали другим элементам, использующим cm. ОП не сказала, что хочет, чтобы ее SVG cm точно соответствовал реальному миру. –

+0

@PaulLeBeau Правда, правда - но мы его пропустили, чтобы уточнить, хе-хе, я дал предупреждение в любом случае, хотя –