Загрузка типа линии

Где-то когда-то публиковал код по гарантированной загрузке стандартных (и не очень) типов линий в документ. Найти в сети не смог, а у себя - запросто :)

Основная проблема - в локализации 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 описана здесь.



Поделитесь своим мнением


Я не робот.