Как измерить длину разъема в Visio с Python? - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь измерить длину каждого разъема в файле Visio, который я использую для планирования длины линии электропередачи в плане этажа дома.

Не удается найти начальные координаты геометрии соединителя в файле Microsoft Visio.

Я использую python, чтобы распаковать * .vsdx (Visio 2019) и проанализировать page1.xml

Но я не могу найти начало геометрии. Я пытаюсь выяснить помощь Microsoft, но она никуда меня не приводит.

Простой разъем:

<Shape ID='1' NameU='Dynamic connector' Name='Dynamischer Verbinder' Type='Shape' Master='2'>
<Cell N='PinX' V='4.03543297686481' F='Inh'/>
<Cell N='PinY' V='6.397637646249088' F='Inh'/>
<Cell N='Width' V='0.1968503937007874' F='GUARD(0.19685039370079DL)'/>
<Cell N='Height' V='-3.740157393191775' F='GUARD(EndY-BeginY)'/>
<Cell N='LocPinX' V='0.09842519685039369' F='Inh'/>
<Cell N='LocPinY' V='-1.870078696595888' F='Inh'/>
<Cell N='BeginX' V='3.937007782307131'/>
<Cell N='BeginY' V='8.267716342844976'/>
<Cell N='EndX' V='4.133858171422488'/>
<Cell N='EndY' V='4.527558949653201'/>
<Cell N='LayerMember' V='0'/>
<Cell N='BegTrigger' V='1' F='_XFTRIGGER(Sheet.1!EventXFMod)'/>
<Cell N='EndTrigger' V='1' F='_XFTRIGGER(Sheet.1!EventXFMod)'/>
<Cell N='TxtPinX' V='2.292715350904473E-9' F='Inh'/>
<Cell N='TxtPinY' V='-1.968503891153566' F='Inh'/>
<Section N='Control'>
<Row N='TextPosition'>
<Cell N='X' V='2.292715350904473E-9'/>
<Cell N='Y' V='-1.968503891153566'/>
<Cell N='XDyn' V='2.292715350904473E-9' F='Inh'/>
<Cell N='YDyn' V='-1.968503891153566' F='Inh'/>
</Row>
</Section>
<Section N='Geometry' IX='0'>
<Row T='MoveTo' IX='1'>
<Cell N='X' V='2.292715350904473E-9'/>
</Row>
<Row T='LineTo' IX='2'>
<Cell N='X' V='2.292715350904473E-9'/>
<Cell N='Y' V='-3.740157393191775'/>
</Row>
<Row T='LineTo' IX='3'>
<Cell N='X' V='0.1968503914080722'/>
<Cell N='Y' V='-3.740157393191775'/>
</Row>
</Section>
</Shape>

Я ожидаю найти начало Геометрии, но его там нет?

Я не понимаю часть "moveto"?

1 Ответ

2 голосов
/ 04 апреля 2019

Вы, кажется, выбрали действительно сложный способ ведения дел (в частности, вычисление длины).Обычно для подобных задач используется Visio, который предоставляет гуманный API для расчета длины соединителя.Что бы вы сделали, например, если бы разъем был кривой Безье?Ну, теоретически это может быть:)

enter image description here

С помощью python в Windows вы можете попробовать использовать модуль Python COM (например, win32com),Затем Visio рассчитывает длину соединителя и использует его тривиально:

connector.LengthIU

Что касается части "MoveTo" - я считаю тривиальной (ноль)части могут быть опущены в vsdx, поэтому нет данных для ячейки Y, т.е. я говорю о пропущенном <Cell N='Y' V='0'/>.Но я не уверен на 100%.Также обратите внимание, что значения в разделе геометрии являются относительными (по отношению к штифту формы).

...