Проверка существования текстового стиля. - Страница 2
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Проверка существования текстового стиля.

Проверка существования текстового стиля.

Ответ
Поиск в этой теме
Непрочитано 03.03.2010, 18:26
Проверка существования текстового стиля.
acidburst
 
Проектант :-D
 
Регистрация: 03.03.2010
Сообщений: 7

Здравствуйте. Похоже форум приобрел еще одного почемучку :-)

Простое условие
Код:
[Выделить все]
(if (not (tblobjname "_.style" "XXXX"))
  (command "_.-style" "XXXX" "romans.shx" "2.5" "1" "0" "N" "N" "N"))
При выполнении акад соглашается с тем, что стиль существует, но все-же создает новый стиль с такимже именем и делает его текущим.
Мне кажется не логично...
Либо я перечитал полещука либо лыжи не едут. Подскажите пожалуйста.
Просмотров: 5763
 
Непрочитано 06.03.2010, 15:57
#21
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


> gomer: вообще-то недостающие настройки создаваемых объектов слоев берутся с текущего слоя. А если тебе надо работать с существующим слоем, но при этом он заморожен / заблокирован? Раз уж "это алгоритм", то делай его универсальным.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.03.2010, 01:30
#22
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


-> kpblc: А вот и нет:
1. текущий слой не может быть заморожен...
2. слой в результате создается не заблокированным и не выключенным, почему-то...
3. что мешает вкл/выкл... слой после создания, или сделать его текущим...

Идея в том что если аргумент функции может не понадобиться, его лучше не использовать

например что будет, если код выглядит так:
Код:
[Выделить все]
(if (not (tblobjname "STYLE" "XXXX"))
  (command "_.-style" "XXXX" "romansbad.shx" "2.5" "1" "0" "N" "N" "N"))
В брикскад 10 создает 3 новых рисунка

Последний раз редактировалось gomer, 08.03.2010 в 01:46.
gomer вне форума  
 
Непрочитано 08.03.2010, 03:27
#23
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Цитата:
Сообщение от gomer Посмотреть сообщение
В брикскад 10 создает 3 новых рисунка
Рисунка?? Ты ничего не путаешь?
А что мешает сделать функцию для слоя наподобие:
Код:
[Выделить все]
(vl-load-com)

(defun _dwgru-layer-create (doc name lst / res lt)
                           ;|
*    Создание слоя
*    Параметры вызова:
	doc		обрабатываемый документ. nil -> Текущий
	name	имя создаваемого слоя. nil недопустим. Только строка
	lst		список дополнительных параметров вида:
	 '(("color" . <Цвет>)				; цвет слоя. nil -> 7. Только число от 1 до 255.
	   ("freeze" . <Заморожен>)	; замороженность слоя. t || nil
	   ("off" . <Выкл>)					; слой выключен. t || nil
	   ("lock" . <Блок>)				; блокированность. t || nil
	   ("noplot" . <НЕПечатать)	; печатать слой или нет. t - не выводить на печать,
	   													; nil - выводить.
	   ("lw" . <ВесЛинии>)			; nil -> aclwdefault
	   ("lt" . <ТипЛинии>)			; nil -> Continuous.
	   ("ltfile" . <Файл*.lin>)	; файл, откуда грузить нестандартные типы линий.
	   													; nil -> "acadiso.lin"
	   ("active" . <Активировать>)
	   )
*    Последовательность задания параметров роли не играет
*    Возвращает vla-указатель на созданный слой или nil в случае неудачи. Если
* слой уже существует, он настраивается в соответствии с lst
*    Примеры вызова:
(_dwgru-layer-create nil "la001" nil)
(_dwgru-layer-create nil "la001" '(("color" . 1)))
(_dwgru-layer-create nil "la001" '(("color" . 1) ("freeze" . t)))
|;
  (if (= (type name) 'str)
    (progn
      (if (not doc)
        (setq doc (vla-get-activedocument (vlax-get-acad-object)))
        ) ;_ end of if
      (setq lst (mapcar
                  (function
                    (lambda (x)
                      (cons (strcase (car x) t) (cdr x))
                      ) ;_ end of lambda
                    ) ;_ end of function
                  (vl-remove-if-not
                    (function
                      (lambda (x)
                        (= (type (car x)) 'str)
                        ) ;_ end of lambda
                      ) ;_ end of function
                    lst
                    ) ;_ end of vl-remove-if-not
                  ) ;_ end of mapcar
            ) ;_ end of setq
      (if (vl-catch-all-error-p
            (setq res (vl-catch-all-apply
                        (function
                          (lambda ()
                            (vla-item (vla-get-layers doc) name)
                            ) ;_ end of lambda
                          ) ;_ end of function
                        ) ;_ end of vl-catch-all-apply
                  ) ;_ end of setq
            ) ;_ end of vl-catch-all-error-p
        (setq res (vla-add (vla-get-layers doc) name))
        ) ;_ end of if
      (if (vl-catch-all-error-p
            (vl-catch-all-apply
              (function
                (lambda ()
                  (vla-put-color
                    res
                    (cond ((cdr (assoc "color" lst)))
                          (t 7)
                          ) ;_ end of cond
                    ) ;_ end of vla-put-color
                  ) ;_ end of lambda
                ) ;_ end of function
              ) ;_ end of vl-catch-all-apply
            ) ;_ end of vl-catch-all-error-p
        (vla-put-color res 7)
        ) ;_ end of if
      (vl-catch-all-apply
        (function
          (lambda ()
            (vla-put-freeze
              res
              (if (cdr (assoc "freeze" lst))
                :vlax-true
                :vlax-false
                ) ;_ end of if
              ) ;_ end of vla-put-freeze
            ) ;_ end of lambda
          ) ;_ end of function
        ) ;_ end of vl-catch-all-apply
      (vla-put-layeron
        res
        (if (cdr (assoc "off" lst))
          :vlax-false
          :vlax-true
          ) ;_ end of if
        ) ;_ end of vla-put-layeron
      (vla-put-lock
        res
        (if (cdr (assoc "lock" lst))
          :vlax-true
          :vlax-false
          ) ;_ end of if
        ) ;_ end of vla-put-lock
      (vla-put-plottable
        res
        (if (cdr (assoc "noplot" lst))
          :vlax-false
          :vlax-true
          ) ;_ end of if
        ) ;_ end of vla-put-Plottable
      (if (vl-catch-all-error-p
            (vl-catch-all-apply
              (function
                (lambda ()
                  (vla-put-lineweight
                    res
                    (cond
                      ((cdr (assoc "lw" lst)))
                      (t aclnwt025)
                      ) ;_ end of cond
                    ) ;_ end of vla-put-lineweight
                  ) ;_ end of lambda
                ) ;_ end of function
              ) ;_ end of vl-catch-all-apply
            ) ;_ end of vl-catch-all-error-p
        (vla-put-lineweight res aclnwt025)
        ) ;_ end of if
      (vla-put-linetype
        res
        (if (cdr (assoc "lt" lst))
          (if (vl-catch-all-error-p
                (vl-catch-all-apply
                  (function
                    (lambda ()
                      (vla-item (vla-get-linetypes doc)
                                (cdr (assoc "lt" lst))
                                ) ;_ end of vla-item
                      ) ;_ end of lambda
                    ) ;_ end of function
                  ) ;_ end of vl-catch-all-apply
                ) ;_ end of vl-catch-all-error-p
            (progn
              (if (vl-catch-all-error-p
                    (vl-catch-all-apply
                      (function
                        (lambda ()
                          (vla-load
                            (vla-get-linetypes doc)
                            (cdr (assoc "lt" lst))
                            (cond
                              ((findfile (cdr (assoc "ltfile" lst))))
                              (t (findfile "acadiso.lin"))
                              ) ;_ end of cond
                            ) ;_ end of vla-load
                          ) ;_ end of lambda
                        ) ;_ end of function
                      ) ;_ end of vl-catch-all-apply
                    ) ;_ end of vl-catch-all-error-p
                "Continuous"
                (cdr (assoc "lt" lst))
                ) ;_ end of if
              ) ;_ end of progn
            (cdr (assoc "lt" lst))
            ) ;_ end of if
          "Continuous"
          ) ;_ end of if
        ) ;_ end of vla-put-linetype
      (if (cdr (assoc "active" lst))
        (vla-put-activelayer doc res)
        ) ;_ end of if
      res
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of defun
Предупреждаю: особо не гонял.
Цитата:
Сообщение от gomer Посмотреть сообщение
слой в результате создается не заблокированным и не выключенным, почему-то...
У кого как. И, как видишь, зависит от реализации алгоритма.
Цитата:
Сообщение от gomer Посмотреть сообщение
что мешает вкл/выкл... слой после создания, или сделать его текущим...
А что мешает это делать сразу?
Цитата:
Сообщение от gomer Посмотреть сообщение
Идея в том что если аргумент функции может не понадобиться, его лучше не использовать
А списки придуманы просто так?
---
Скажу честно - в полчетвертого ночи как-то не хочется прописывать полностью код создания текстового стиля. А вот прочитать, например, "О перегрузке lisp" можно...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.03.2010, 23:44
#24
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Сейчас перепроверил. брикскад создает один новый рисунок, но создает ведь...
По поводу кода выше:
Ничего не мешает, но слишком много перепроверок и...
Если нет нижного файла с линиями, то все грузится из acadiso.lin вроде правильно, но если в acadiso.lin нет необходимого типа линий???
или нет файла acadiso.lin (ну потерялся, и абсурдно искать нестандартный тип линии в стандартном файле) то тип линии назначается 'continuous',(опять все правильно)!

но слой создается с таким типом линии автоматически!!!
далее (кстати не достающий код, но должно быть понятно и без него):
Код:
[Выделить все]
(defun cdx-ItemNameList( sNam / res)
;;; (cdx-ItemNameList 'Layers)
  (setq res '())
  (vlax-for & (vlax-get-property *cdl_actvdoc* sNam)
	(setq res (cons(vla-get-Name &)res)))
  (cond(res(acad_strlsort res))))

(defun cdx-LayerNameList()
;;; Возвращает список имен слоев текущего документа
;;; (cdx-LayerNameList)
(cdx-ItemNameList 'Layers))
(defun cdx-LineTypeNameList()
;;; Возвращает список типов линий текущего документа
;;; (cdx-LineTypeNameList)
(cdx-ItemNameList 'LineTypes))
конструкция с
Код:
[Выделить все]
(if (member ...
выглядит лучше чем
Код:
[Выделить все]
(if (not (vl-catch...
так как букаф меньше...
Поповоду аргумента doc ну это если сразу комплект чертежей рисовать, тогда надо, а так все операции выполняются обычно в текущем документе
По поводу опции active согласен Просто пока руки не дошли
Так по чуть-чуть оказывается что фукции дают одинаковый результат, а по размеру разные
Все устал писать... Иду спать...
gomer вне форума  
 
Непрочитано 09.03.2010, 00:03
#25
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Спорить и говорить можно очень долго, но, думаю, топикстартеру это малоинтересно...
---
Добавлено: что-то у тебя "не то" с бриксом. Только что проверил на версии 10.1.11 - мой код работает корректно и второго рисунка не создает. В качестве доказательства (пока я на работе) могу попробовать сделать видео.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 09.03.2010 в 09:02.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Проверка существования текстового стиля.



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Замена текстового стиля VVA Готовые программы 323 03.09.2025 12:20
Замена текстого стиля Shoorup Программирование 43 19.05.2015 09:22
Смена текстового стиля в СПДС и Project Studio @$K&t[163RUS] ПО от CSoft 2 08.02.2010 09:57
Как Извлечь из строки числа Kostinok Программирование 7 12.08.2008 08:00
Настройка "Стандартного" текстового стиля. Кулик Алексей aka kpblc AutoCAD 6 23.10.2003 22:49