Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2011-06-25

Export from DWG to CSV

Всё когда-нибудь кончается. Вот и у меня кончились заморочки с экспортом чертежей DWG. Все тесты отработали, всё, что экспортируется, без ошибок импортируется обратно (воспроизводится в Автокаде) — потерь нет. Тема закрыта. По крайней мере, на ближайшее время.

В надежде, что кому-нибудь из хороших людей получится обойти те грабли, по которым я прошел, выкладываю код программулины:
dwg_dump - Скрипты на Python для экспорта из файла DWG (AutoCAD) в CSV. Используются COM (ActiveX) интерфейсы AutoCAD для перебора примитивов чертежа и сохранения атрибутов примитивов в виде текста (CSV). Доделан 2011-06-25.
sites.google.com/site/vasnake

Я его уже выкладывал, только то была ранняя альфа. Нынче это вполне рабочий код, в котором есть все необходимые решения по защите от граблей Автокада. Не ждите от кода много, это был первый (и скорее всего последний) цикл разработки. Проект разовый и, вероятно, такая работа больше не подвернется. А подвернется, тогда и доделаю.

В качестве резюме могу сказать — в Autocad есть ActiveX API. Дерьмовый. Мой вам совет, не затевайте ничего сложного на этом API, если нет абсолютной уверенности, что вам надо именно это. Если пользоваться AutoLISP, результат будет заметно более предсказуем.
В качестве примера дерьмовости могу привести проблему углов поворота, в частности — блоков. Суть проблемы в том, что в указанном API координаты доступны в системе координат WCS, а углы поворота только в OCS. При этом нет ни одной функции, помогающей вычислить необходимый угол для WCS. Вся эта тригонометрия должна выполнятся вами. Добавим, что рисовать примитивы можно только в UCS, что третья координата замаскирована, что углы измеряются в радианах от 0 до 2Пи а задаются в градусах. Кому действительно интересно — посмотрите в коде работу с булжами полилиний, с дугами и блоками. И в блоге поищите по тегам Autodesk, грабли.

Дальше сами как-нибудь.

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) Java (22) humor (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Manager (15) web-browser (15) Никонов (15) Klaipeda (14) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) serialization (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)