Я нашел скрипт php для записи файла DXF на основе координат многоугольника. Он работает над тестовым файлом с этим кодом (для многоугольника):
$d->append(new DxfPolyLine(array('points'=>array(array(1, 1),
array(20, 10),
array(20, 20),
array(1, 15)),
'lineType'=>'DASHED',
// 'layer' => 'DXFWRITER',
'flag' => 0
//'width' => 1,
//'color'=>1
)
));
Результат файла DXF выглядит так:
VERTEX
8
0
6
DASHED
10
20.000
20
20.000
0
VERTEX
8
0
6
DASHED
10
1.000
20
15.000
0
Много вершин внутри полилинии.
Сейчас я пытаюсь вставить свои собственные координаты. У меня есть координаты, но как я могу записать массив в этом массиве?
У меня есть это: $g=array_merge($g,array(array($coord[$z]*3.527785, $coord[$z+1]*3.527785)));
С этим кодом результат:
Array ( [0] => Array ( [0] => -133.92170714209 [1] => -41.834100838885 ) [1] => Array ( [0] => -135.19600658422 [1] => -44.558002415365 ) [2] => Array ( [0] => -173.40700872797 [1] => -25.465001344078 ) [3] => Array ( [0] => -211.44500829533 [1] => -6.4740001788315 ) [4] => Array ( [0] => -209.93490817601 [1] => -3.255100166471 ) [5] =>
Array ( [0] => -190.0770099388 [1] => -13.202000524885 ) [6] => Array ( [0] => -171.92300716209 [1] => -22.296000898041 ) [7] => Array ( [0] => -172.13500940166 [1] => -22.749000947663 ) [8] => Array ( [0] => -171.12900859213 [1] => -23.251001225378 ) [9] => Array ( [0] => -152.49300807866 [1] => -32.559001622754 ) [10] => Array ( [0] => -133.92170714209 [1] => -41.834100838885 ) )
Все идет нормально. Это уважает формат из примера. Но в файл DXF записывается только 1 (из номера массива).
Если я изменю код в
$d->append(new DxfPolyLine(array('points'=>array($g[3]),
с массивом [3] — он записывает координаты в файл DXF. Есть ли способ заставить php читать все массивы из массива? Я пробовал с foreach, но это не работает. PHP выдает ошибку за не закрытие).
Исходный код здесь:
https://github.com/digitalfotografen/DXFwriter
С $ g [3] у меня есть координаты из массива [3] в файле DXF:
VERTEX
8
0
6
CONTINUOUS
10
-211.445
20
-6.474
0
Если я положу $ g просто у меня есть:
VERTEX
8
0
6
CONTINUOUS
10
1.000
20
1.000
30
1.000
40
1.000
50
1.000
60
1.000
70
1.000
Я воссоздал $g
массив на основе вашего дампа. Выводит ли это нужный файл DXF?
$g = [[-133.92170714209, -41.834100838885],
[-135.19600658422, -44.558002415365],
[-173.40700872797, -25.465001344078],
[-211.44500829533, -6.4740001788315],
[-209.93490817601, -3.255100166471 ],
[-190.0770099388 , -13.202000524885],
[-171.92300716209, -22.296000898041],
[-172.13500940166, -22.749000947663],
[-171.12900859213, -23.251001225378],
[-152.49300807866, -32.559001622754],
[-133.92170714209, -41.834100838885]
];
$d->append(new DxfPolyLine(['points' => $g]));
Что касается построения массива, вы можете сделать что-то вроде этого:
for ($z = 0; $z < $numar; $z+=2) {
$g[] = [$coord[$z]*3.527785,$coord[$z+1]*3.527785];
}
Ваше форматирование немного странное, но, глядя на выгруженные данные массива, я вижу один массив, значения которого являются массивами, каждый из которых имеет 2 значения с плавающей точкой. Обратите внимание, что Array [0] и Array [10] имеют одинаковые значения, которые могут быть или не быть проблемой для lib.
Кроме того, что со звездочками в $d->append...
логика?
Есть ли способ заставить php читать все массивы из массива?
Да, но PHP будет накладывать некоторые ограничения в зависимости от характера ключей и значений. Увидеть http://php.net/manual/en/language.types.array.php для более конкретной информации о том, как PHP обрабатывает массивы.
Я пробовал с foreach, но это не работает. PHP выдает ошибку за не закрытие).
Можете ли вы опубликовать ошибочный код, пожалуйста? То, что вы описываете, является просто ошибкой форматирования / синтаксиса и никак не связано с самими данными.