Загрузка типа линии
Где-то когда-то публиковал код по гарантированной загрузке стандартных (и не очень) типов линий в документ. Найти в сети не смог, а у себя - запросто
Основная проблема - в локализации AutoCAD. Точнее, в том, что типы линий локализованы. Можно написать несложный лисп, который прочтет acadiso.lin для русской и для английской версии и сравнит типы линий, ну или воспользоваться уже готовым списком:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | (defun _kpblc-get-linetype-list (/) ;| * Возвращает список стандартных типов линий вида '((<Английское название> . <Русское название>) ...) * Все значения указываются только в нижнем регистре. |; '(("border" . "рант") ("border2" . "рант2") ("borderx2" . "рантx2") ("center" . "осевая") ("center2" . "осевая2") ("centerx2" . "осеваяx2") ("dashdot" . "штрихпунктирная") ("dashdot2" . "штрихпунктирная2") ("dashdotx2" . "штрихпунктирнаяx2") ("dashed" . "невидимаяx2") ("dashed2" . "невидимая") ("dashedx2" . "штриховаяx2") ("divide" . "линия_сгиба") ("divide2" . "линия_сгиба2") ("dividex2" . "линия_сгибаx2") ("dot" . "пунктирная") ("dot2" . "пунктирная2") ("dotx2" . "пунктирнаяx2") ("hidden" . "невидимая") ("hidden2" . "невидимая2") ("hiddenx2" . "невидимаяx2") ("phantom" . "фантом") ("phantom2" . "фантом2") ("phantomx2" . "фантомx2") ("acad_iso02w100" . "acad_iso02w100") ("acad_iso03w100" . "acad_iso03w100") ("acad_iso04w100" . "acad_iso04w100") ("acad_iso05w100" . "acad_iso05w100") ("acad_iso06w100" . "acad_iso06w100") ("acad_iso07w100" . "acad_iso07w100") ("acad_iso08w100" . "acad_iso08w100") ("acad_iso09w100" . "acad_iso09w100") ("acad_iso10w100" . "acad_iso10w100") ("acad_iso11w100" . "acad_iso11w100") ("acad_iso12w100" . "acad_iso12w100") ("acad_iso13w100" . "acad_iso13w100") ("acad_iso14w100" . "acad_iso14w100") ("acad_iso15w100" . "acad_iso15w100") ("fenceline1" . "ограждение1") ("fenceline2" . "ограждение2") ("tracks" . "пути") ("batting" . "изоляция") ("hot_water_supply" . "горячая_вода") ("gas_line" . "газопровод") ("zigzag" . "зигзаг") ("jis_08_11" . "jis_08_11") ("jis_08_15" . "jis_08_15") ("jis_08_25" . "jis_08_25") ("jis_08_37" . "jis_08_37") ("jis_08_50" . "jis_08_50") ("jis_02_0.7" . "jis_02_0.7") ("jis_02_1.0" . "jis_02_1.0") ("jis_02_1.2" . "jis_02_1.2") ("jis_02_2.0" . "jis_02_2.0") ("jis_02_4.0" . "jis_02_4.0") ("jis_09_08" . "jis_09_08") ("jis_09_15" . "jis_09_15") ("jis_09_29" . "jis_09_29") ("jis_09_50" . "jis_09_50") ) ) ;_ end of defun |
После этого собственно загрузка становится вообще элементарной:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | (defun _kpblc-linetype-load (doc ltype-name ltype-file / ltype_normal ltype_list result) ;| * Функция подгрузки типа линии в файл. Учитывает возможную * локализацию системы. * Параметры вызова: doc указатель на документ, для которого выполнять подгрузку. nil -> текущий ltype-name имя типа линии для английской версии ltype-file имя файла описания типа линии. nil -> "acadiso.lin"ю * Если файл с описанием типа линии не лежит по путям * поддержки када, надо указывать полный путь к нему. * Примеры вызова: (_kpblc-linetype-load *kpblc-adoc* "center" nil) ; для русской версии подгружает Осевая и возвращает ; t при успехе *** Тип линии "Continuous" обработке не подвергается — он есть во всех версиях |; (if ltype-name (progn (setq ltype_list (_kpblc-get-linetype-list) ltype-name (_kpblc-strcase ltype-name) ) ;_ end of setq (if (not doc) (setq doc (vla-get-activedocument (vlax-get-acad-object))) ) ;_ end of if (if (or (not ltype-file) (not (findfile ltype-file))) (setq ltype-file "acadiso.lin") ) ;_ end of if (setq ltype_normal (cond ((not (vl-catch-all-apply (function (lambda () (vla-item (vla-get-linetypes doc) ltype-name))))) ltype-name ) ((and (vl-string-search "419" (vlax-product-key)) (member ltype-name (mapcar (function car) ltype_list)) ) ;_ end of and (cdr (assoc ltype-name ltype_list)) ) ((and (vl-string-search "419" (vlax-product-key)) (member ltype-name (mapcar (function cdr) ltype_list)) ) ;_ end of and ltype_normal ) (t ltype-name) ) ;_ end of cond result (cond ((or (not (vl-catch-all-error-p (vl-catch-all-apply (function (lambda () (vla-item (vla-get-linetypes doc) ltype_normal)))) ) ;_ end of vl-catch-all-error-p ) ;_ end of not (not (vl-catch-all-error-p (vl-catch-all-apply (function (lambda () (vla-load (vla-get-linetypes doc) ltype_normal ltype-file))) ) ;_ end of vl-catch-all-apply ) ;_ end of vl-catch-all-error-p ) ;_ end of not ) ;_ end of or ltype_normal ) (t "Continuous") ) ;_ end of cond ) ;_ end of setq ) ;_ end of progn (setq result "Continuous") ) ;_ end of if result ) ;_ end of defun |
P.S. _kpblc-strcase описана здесь.