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

2011-05-24

OCS2WCS

Похоже, я нашел обьяснение странным выбросам координат. Тех, которые отрицательные, хотя должны бы быть положительными.
Дело в том, что в некоторых случаях (видимо, когда примитивы в AutoCAD создаются процедурно AutoLISP-ом), несмотря на заявки о выдаче координат в WCS, координаты выдаются в OCS (ECS).

OCS
Object coordinate system—point values returned by entget are expressed in this coordinate system, relative to the object itself. These points are usually converted into the WCS, current UCS, or current DCS, according to the intended use of the object. Conversely, points must be translated into an OCS before they are written to the database by means of the entmod or entmake functions. This is also known as the entity coordinate system.

exchange.autodesk.com/autocadarchitecture

И правильный вызов функции trans таки выдает правильные координаты.
Остается только научить мой автомат делать это по ходу пакетной обработки.

Пока разбирался, нарисовалось несколько полезных сниппетов на AutoLISP. Допустим, хандлер примитива = 7598. Тогда:

зумнуть на обьект и подсветить его
(setq h (handent "7598") o (command "zoom" "o" h "") o (redraw h 3))


вывести список атрибутов (кстати, видно гадские отрицательные координаты в примере)
(entget (handent "7598"))
((-1 . ) (0 . "LWPOLYLINE") (330 . ) (5 . "7598") (100 . "AcDbEntity")
(67 . 0) (410 . "Model") (8 . "A_OAENO_OCEU") (100 . "AcDbPolyline") (90 . 3) (70 . 0)
(43 . 2.16) (38 . 0.0) (39 . 0.0) (10 -3195.94 1786.64) (40 . 2.16)...


конвертнуть координаты в WCS
(trans '(-3195.939915040071400 1786.635070675984300) (handent "7598") 0)
(3195.94 1786.64 0.0)


выдать дамп обьекта используя ActiveX API (VisualLisp)
(vl-load-com)
(setq h (handent "7598") o (command "zoom" "o" h "") o (redraw h 3))
(setq o (vlax-ename->vla-object h))
(vlax-dump-object o T)


заготовка конвертора для моего автомата
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(setq u (vla-get-utility doc))
(setq h (handent "7598") o (command "zoom" "o" h "") o (redraw h 3))
(setq o (vlax-ename->vla-object h))
(setq norm (vlax-get-property o "normal")
(setq nc (vla-translatecoordinates u (vlax-3d-point '(-3195.94 1786.64)) 2 0 0 norm))
(vlax-safearray->list (vlax-variant-value nc))


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

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

Архив блога

Ярлыки

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)