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

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

Увеличение всех отметок на определенную величину

Ответ
Поиск в этой теме
Непрочитано 22.11.2007, 11:47 #1
Увеличение всех отметок на определенную величину
Drweb
 
Регистрация: 22.11.2007
Сообщений: 10

Парни, довольно срочно нужно изменить все отметки съемки на одну и ту же величину (отметки просто в виде текста), есть ли уже готовое решение?
Просмотров: 45716
 
Непрочитано 22.11.2007, 11:49
#2
Кулик Алексей aka kpblc
Moderator

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


Пока не будет образца, решения будут "не те". Отметка - это что? Блок с атрибутом? Просто атрибут? Однострочный текст? Многострочный текст? Поле? Еще-какая-то-фигня?
---
Добавлено: в этом "неизвестно что" отметка с префиксами / суффиксами? Без? С какой точностью после запятой надо добавлять?
Блин, когда научатся вопросы задавать...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.11.2007, 11:50
#3
Drweb


 
Регистрация: 22.11.2007
Сообщений: 10


Отметки - это однострочный текст
Drweb вне форума  
 
Непрочитано 22.11.2007, 11:52
#4
Кулик Алексей aka kpblc
Moderator

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


Прочти что "добавлено" у меня в посте.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.11.2007, 11:53
#5
Drweb


 
Регистрация: 22.11.2007
Сообщений: 10


То есть я себе представляю это так - я выделяю весь текст, который нужно изменить, программуля меня спрашивает величину прироста - и я не теряю 1.5 дня на тупое механическое перебивание 1.5 тысяч отметок =)

Отметка выглядит, к примеру как "15.32". Точность до второго знака.
ЗЫ: Что за преффиксы и суффиксы? =)
Drweb вне форума  
 
Непрочитано 22.11.2007, 12:15
#6
Кулик Алексей aka kpblc
Moderator

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


Отметка как "Отм.+16.656". "Отм." - префикс.
Код:
[Выделить все]
(defun c:plus (/ *error* adoc value str)
  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (if
    (and
      (setq selset (ssget "_:L" '((0 . "TEXT"))))
      (member
        (type (setq
                value (vl-catch-all-apply
                        '(lambda () (getdist "\nСколько добавлять <Отмена> : "))
                        ) ;_ end of vl-catch-all-apply
                ) ;_ end of setq
              ) ;_ end of type
        (list 'int 'real)
        ) ;_ end of member
      ) ;_ end of and
     (foreach ent (mapcar
                    'vlax-ename->vla-object
                    (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
                    ) ;_ end of mapcar
       (if (equal (rtos (setq str (atof (vla-get-textstring ent))))
                  (vla-get-textstring ent)
                  ) ;_ end of equal
         (vla-put-textstring ent (rtos (+ str value) 2 2))
         ) ;_ end of if
       ) ;_ end of foreach
     ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Код не будет обрабатывать строки вида "16,65" (с запятой в качестве разделителя); "а123" (нечисловые). Ну, короче, "коленочный код".
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.11.2007, 13:01
#7
Drweb


 
Регистрация: 22.11.2007
Сообщений: 10


Спасибо за помощь. Но ничего не происходит! Просит выбрать объекты - выбираю несколько текстовых строк. Допустим, нужно увеличить отметку на 0.08 (8 сантиметров) - ввожу 0.08, Enter - ничего. Текст не меняется. В чем баг?

Блин, то есть мне нужно получить из текста ЧИСЛО, прибавить к нему другое число и засунуть назад в текст. =)
Drweb вне форума  
 
Непрочитано 22.11.2007, 13:13
#8
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


> Drweb
Что-б не гадать, просто выложи файл-образец небольшого размера. Код рабочий.
Alaspher вне форума  
 
Автор темы   Непрочитано 22.11.2007, 13:15
#9
Drweb


 
Регистрация: 22.11.2007
Сообщений: 10


Хм. А что в образце мне показать? 2 числа? И какие они будут после прибавления к ним определенной величины? =)
Drweb вне форума  
 
Непрочитано 22.11.2007, 13:23
#10
Кулик Алексей aka kpblc
Moderator

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


Образец "до" и "после" выполнения команды plus с заданием величины смещения = 6.65
Код немного модифицировал для корректной обработки отрицательных значений:
Код:
[Выделить все]
(defun c:plus (/ *error* adoc value str)
  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (if
    (and
      (setq selset (ssget "_:L" '((0 . "TEXT"))))
      (member
        (type (setq
                value (vl-catch-all-apply
                        '(lambda () (getreal "\nСколько добавлять <Отмена> : "))
                        ) ;_ end of vl-catch-all-apply
                ) ;_ end of setq
              ) ;_ end of type
        (list 'int 'real)
        ) ;_ end of member
      ) ;_ end of and
     (foreach ent (mapcar
                    'vlax-ename->vla-object
                    (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
                    ) ;_ end of mapcar
       (if (equal (rtos (setq str (atof (vla-get-textstring ent))))
                  (vla-get-textstring ent)
                  ) ;_ end of equal
         (vla-put-textstring ent (rtos (+ str value) 2 2))
         ) ;_ end of if
       ) ;_ end of foreach
     ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Вложения
Тип файла: dwg
DWG 2004
before.dwg (27.3 Кб, 2999 просмотров)
Тип файла: dwg
DWG 2004
after.dwg (29.6 Кб, 2975 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.11.2007, 15:21
#11
Drweb


 
Регистрация: 22.11.2007
Сообщений: 10


Спасибо, друг! Все работает =)
Drweb вне форума  
 
Автор темы   Непрочитано 24.11.2007, 18:49
#12
Drweb


 
Регистрация: 22.11.2007
Сообщений: 10


Нашел такие баги - при получении в итоге ровной суммы (к примеру 16.00) получаем в результате просто "16". А результат необходим именно как "16.00". Отбрасывание нулей не нужно! Приходится забивать ручками ".00". И еще - не производятся никакие операции с числами, у которых на конце 0. То есть имеем отметку 13.10 - она видимо не переводится в число, не знаю почему. Поможете, господа хорошие?
Drweb вне форума  
 
Непрочитано 24.11.2007, 23:49
#13
Кулик Алексей aka kpblc
Moderator

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


Тогда так.
Код:
[Выделить все]
(defun c:plus (/ *error* adoc value str)
  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (if
    (and
      (setq selset (ssget "_:L" '((0 . "TEXT"))))
      (member
        (type (setq
                value (vl-catch-all-apply
                        '(lambda () (getreal "\nСколько добавлять <Отмена> : "))
                        ) ;_ end of vl-catch-all-apply
                ) ;_ end of setq
              ) ;_ end of type
        (list 'int 'real)
        ) ;_ end of member
      ) ;_ end of and
     (foreach ent (mapcar
                    'vlax-ename->vla-object
                    (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
                    ) ;_ end of mapcar
       (if (equal (rtos (setq str (atof (vla-get-textstring ent))))
                  (vl-string-right-trim ".0" (vla-get-textstring ent))
                  ) ;_ end of equal
         (vla-put-textstring
           ent
           ((lambda (/ a)
              (setq a (+ str value))
              (cond
                ((not (vl-string-search "." (rtos a)))
                 (strcat (rtos a 2 2) ".00")
                 )
                ((= (strlen
                      (substr (rtos a 2 2) (+ 2 (vl-string-search "." (rtos a))))
                      ) ;_ end of strlen
                    1
                    ) ;_ end of =
                 (strcat (rtos a 2 2) "0")
                 )
                (t (rtos a 2 2))
                ) ;_ end of cond
              ) ;_ end of lambda
            )
           ) ;_ end of vla-put-textstring
         ) ;_ end of if
       ) ;_ end of foreach
     ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Особо не тестировал.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 29.04.2008, 17:17
#14
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Кулик Алексей aka kpblc, протестировал твой последний код. Вот что я обнаружил:
1) Число вида ХХХ.ХХ (Х- любая цифра, кроме нуля) считается только если точность выставлена на "0.00" (формат->единицы), при этом числа вида ХХХ.Х0 и ХХХ.00 игнорируются лиспом;
2) При установке точности на "0.0" считаются только числа ХХХ.Х0;
3) А если поставить точность на "0" считаются числа ХХХ.00, (что вполне закономерно), но ответ выдается в виде ХХХ.00.00
Очень полезный лисп, жаль, что так ошибается....Можешь подправить?
skkkk вне форума  
 
Непрочитано 30.04.2008, 09:02
#15
Кулик Алексей aka kpblc
Moderator

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


Какая точность имеется в виду? luprec? Если есть возможность - пример с указанием версии AutoCAD'a (чтоб мне тут не гадать)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.04.2008, 10:39
#16
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Точность, которая выставляется через меню Формат>Единицы(Units). АКАД 2008 русский. Конкретный пример: надо числа 177.26; 177.10; 177.00 увеличить на 10. Ввожу "_PLUS", на приглашение ком. строки выбираю эти три текста, ENTER, "сколько добавлять" пишу 10, и изменяется только один из них, тот, в котором целых цифр(не нулей) после запятой столько, на сколько установлена точность. Т.е. если установлена "0.00", то посчитается только 177.26, если "0.0", то только 177.10
skkkk вне форума  
 
Непрочитано 01.05.2008, 16:49
#17
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Решил проверить предыдущий код с поста #10 - все работает как ни странно... Обрабатывает все числа (ХХХ.ХХ; ХХХ.Х0; ХХХ.00) И в результате в случае нулей пишет "ХХХ.00" или "ХХХ.Х0"
Drweb, может, тебе поможет выставление точности на "0.00" в меню Формат->Единицы (Format->Units). Так что пользуемся и выпускаем во Вселенную позитив, адресованный kpblc'у, пусть поикает
skkkk вне форума  
 
Непрочитано 21.05.2008, 05:35
#18
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Подскажите пожалуйста, что надо добавить в лисп, чтоб увеличенные лиспом тексты меняли цвет при изменении значения.... Ну чтоб определять, какие из текстов уже обработаны, а какие - нет. По совету VVA с пробовал вставить в лисп
Код:
[Выделить все]
(vla-put-Color vlaObj 3)  ;3-номер цвета
...Добился только одного из двух результатов: либо считает прирост отметок, либо меняет цвет, к обоим прийти не вышло
skkkk вне форума  
 
Непрочитано 21.05.2008, 09:38
#19
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Покажи используемый код или дай ссылку
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 21.05.2008, 12:35
#20
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


VVA, код c #10
skkkk вне форума  
 
Непрочитано 21.05.2008, 12:50
#21
Малявка


 
Регистрация: 28.02.2007
Егорьевск Моск.обл.
Сообщений: 206


skkkk, посмотри здесь:
http://www.caduser.ru/cgi-bin/f1/board.cgi?t=42402mx
и здесь:
http://dwg.ru/f/showthread.php?t=20686
Буквально вчера ребята мне помогли решить ту же задачу и даже с фенечкой, которую я попросила. До сих пор прыгаю от счастья.
Может этот код тебе поможет. Удачи.
Малявка вне форума  
 
Непрочитано 21.05.2008, 12:52
#22
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Нужное выделил красным
Код:
[Выделить все]
(defun c:plus (/ *error* adoc value str)
  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (if
    (and
      (setq selset (ssget "_:L" '((0 . "TEXT"))))
      (member
        (type (setq
                value (vl-catch-all-apply
                        '(lambda () (getreal "\nСколько добавлять <Отмена> : "))
                        ) ;_ end of vl-catch-all-apply
                ) ;_ end of setq
              ) ;_ end of type
        (list 'int 'real)
        ) ;_ end of member
      ) ;_ end of and
     (foreach ent (mapcar
                    'vlax-ename->vla-object
                    (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
                    ) ;_ end of mapcar
       (if (equal (rtos (setq str (atof (vl-string-translate "," "."(vla-get-textstring ent)))))
                  (vl-string-translate "," "."(vla-get-textstring ent))
                  ) ;_ end of equal
	 (progn                ;_Нужно было progn добавить
         (vla-put-textstring ent (rtos (+ str value) 2 2))
	 (vla-put-color ent 3) ;_Цвет 3 - зеленый
	 )                     ;_Нужно было progn закрыть
         ) ;_ end of if
       ) ;_ end of foreach
     ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 05.08.2008 в 20:52.
VVA вне форума  
 
Непрочитано 26.05.2008, 10:49
#23
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,149


VVA, спасибо,
буду рад модификации

1. Не работает с дробными числами пример 1.213
2. Хочется чтобы был выбор сколько добавлять, сколько отнять, на что умножить, и на что разделить
3. Про изменние цвета это хорошо
4. Самое главно если текст записан так L=400мм, а мы добавили 50, то все оставалось тоже а число было таким L=450мм,

п. 4. ну очень нужная вещь при редактировании спецификации
к примеру поменялась длинна плиты на 50мм стало меньше, пощелкал по спеке откорректировал за минуту вот и хорошо
dextron3 вне форума  
 
Непрочитано 30.05.2008, 20:00
#24
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


>dextron3
1.С дробными числами он может работать, есть маленькая хитрость. Нужно точность luprec выставить на столько, сколько у тебя знаков после запятой, в твоем случае - 3. Это можно сделать:
а) из командной строки (_luprec>3);
б) в меню Формат->Единицы (Format->Units) установить точность на 0.000;
в) вставить строку
(command "luprec" 3);;; 3 знака после запятой
в начало лиспа ПОСЛЕ строчки
(defun clus (/ *error* adoc value str). Точность будет меняться автоматически. Если надо вернуть старое значение luprec, то поставь ту же строку ПЕРЕД
) ;_ end of defun только измени цифру 3 на нужную. Предполагаю, это не вполне грамотно, ведь я не особый знаток, использовал метод тыка, но у меня работает
2. За функцию (+-/*) отвечает знак в строке
(vla-put-textstring ent (rtos (+ str value) 2 2)), правда придется делать четыре лиспа, и это будет четыре разные команды (например: plus, minus, umn, razd,- не забудь поменять вместе с арифметическим знаком команду в лиспе, ну и для приличия надпись "Сколько добавлять" смени как надо), и можно сделать четыре кнопки с макросами
^C^C(if(null Clus)(Load "plus.lsp"));plus;, "plus" меняешь, разумеется. Лиспы должны быть в путях доступа (Сервис->Настройка->Файлы). Можно сделать выпадающие кнопки.
3. Согласен.
4. Есть лисп, который добавляет префикс и суффикс. Он тут: http://forum.dwg.ru/showthread.php?t=10596
Для удобства можешь сделать кнопку с макросом
^C^C(if(null C:AddPS)(Load "Add Prefix Suffix.lsp"));AddPS;L=;мм;, она автоматом вставит "L=" и "мм", останется только выбрать тексты, опять же, не забудь про пути доступа.

Попробуй пошарить в поиске по слову "field", есть возможность делать так, чтобы при изменении длины линии автоматом менялось значение текста в "спеке"
P.S.: Смайлики с языками читай как двоеточие и латинская P

Последний раз редактировалось skkkk, 17.09.2015 в 10:30.
skkkk вне форума  
 
Непрочитано 30.05.2008, 21:09
#25
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Убрал за отсутствием актуальности

Последний раз редактировалось skkkk, 12.06.2008 в 18:55.
skkkk вне форума  
 
Непрочитано 31.05.2008, 16:17
#26
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


Если по пунктам 1-3 можно так:
Код:
[Выделить все]
(defun c:test (/ selset action value precision_value str precision_str)
  (if
    (and
      (setq selset (ssget "_:L" '((0 . "TEXT"))))
      (not
 (vl-catch-all-error-p
   (vl-catch-all-apply
     '(lambda ()
        (setq action
        (progn
   (initget "+ - * /")
   (cadr
     (assoc (getkword
       "Действие [+ - * /] :<+> "
     ) ;_ end of getkword
     '(("+" +) ("-" -) ("*" *) ("/" /) (nil +))
     ) ;_ end of assoc
   ) ;_ end of cadr
        ) ;_ end of progn
        ) ;_ end of setq
        (setq value (getreal "\nЧисло <Esc> : "))
        (setq
   precision_value
    ((lambda (x)
       (if (equal x 0.0)
         0
         (- (length
       (vl-string->list
         (vl-princ-to-string
    x
         ) ;_ end of vl-princ-to-string
       ) ;_ end of vl-string->list
     ) ;_ end of length
     2
         ) ;_ end of -
       ) ;_ end of if
     ) ;_ end of lambda
      (rem value 1.)
    )
        ) ;_ end of setq
      ) ;_ end of lambda
   ) ;_ end of vl-catch-all-apply
 ) ;_ end of vl-catch-all-error-p
      ) ;_ end of not
    ) ;_ end of and
     (foreach ent
       (mapcar
  'vlax-ename->vla-object
  (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
       ) ;_ end of mapcar
       (setq str (vla-get-textstring ent))
       (setq precision_str
       (length
  (cdr (member 46 (vl-string->list str)))
       ) ;_ end of length
       ) ;_ end of setq
       (if (equal (rtos (atof str) 2 precision_str) str)
  (progn ;_Нужно было progn добавить
    (vla-put-textstring
      ent
      (rtos
        ((eval action) (atof str) value)
        2
        (apply 'max (list precision_value precision_str))
      ) ;_ end of rtos
    ) ;_ end of vla-put-textstring
    (vla-put-color ent 3) ;_Цвет 3 - зеленый
  ) ;_Нужно было progn закрыть
       ) ;_ end of if
     ) ;_ end of foreach
  ) ;_ end of if
  (princ)
) ;_ end of defun
CB вне форума  
 
Непрочитано 31.05.2008, 16:29
#27
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,149


CB,(т.е. по моим пунктам)
dextron3 вне форума  
 
Непрочитано 02.06.2008, 12:02
#28
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


>dextron3

Да по твоим пунктам...
Правда чтобы все правильно работало и по требованиям поста 14 нужно чуть изменить программу:
Код:
[Выделить все]
(defun c:test (/ sys-var selset action value precision_value str precision_str)
(setq sys-var (getvar 'dimzin))
(setvar 'dimzin 0)
  (if
    (and
      (setq selset (ssget "_:L" '((0 . "TEXT"))))
...............................................................
  ) ;_ end of if
  (setvar 'dimzin sys-var)
  (princ)
) ;_ end of defun
Сделать прогу по условиям п.4 тоже можно, вот пример (правда достаточно коряво написано...) :
Код:
[Выделить все]
(defun rec-pat (str / rec-pat)
  (defun rec-pat (temp str pat n /)
    (cond ((= str "") (list temp))
   ((if (minusp n)
      (not (member (substr str 1 1) pat))
      (member (substr str 1 1) pat)
    ) ;_ end of if
    (if (/= temp "")
      (cons temp (rec-pat "" str pat (- n)))
      (rec-pat "" str pat (- n))
    ) ;_ end of if
   )
   (t
    (rec-pat (strcat temp (substr str 1 1))
      (substr str 2)
      pat
      n
    ) ;_ end of trim_gap
   )
    ) ;_ end of cond
  ) ;_ end of defun
  (rec-pat ""
    str
    '("0" "1" "2" "3" "4" "5" "6" "7" "8" "9" ".")
    1
  ) ;_ end of rec-pat
) ;_ end of defun
 
;;;Вызов (rec-pat "L=150.57мм") -> ("L=" "150.57" "мм")
Остается за малым - проанализировать получившийся список на предмет нахождения в нем числа, выполнить с числом действие и снова соединить список с помощью (apply 'strcat '("L=" "150.57" "мм"))
CB вне форума  
 
Непрочитано 02.06.2008, 12:49
#29
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,149


Код:
[Выделить все]
(defun c:test (/ sys-var selset action value precision_value str precision_str)
(setq sys-var (getvar 'dimzin))
(setvar 'dimzin 0)
  (if
    (and
      (setq selset (ssget "_:L" '((0 . "TEXT"))))
      (not
 (vl-catch-all-error-p
   (vl-catch-all-apply
     '(lambda ()
        (setq action
        (progn
   (initget "+ - * /")
   (cadr
     (assoc (getkword
       "Действие [+ - * /] :<+> "
     ) ;_ end of getkword
     '(("+" +) ("-" -) ("*" *) ("/" /) (nil +))
     ) ;_ end of assoc
   ) ;_ end of cadr
        ) ;_ end of progn
        ) ;_ end of setq
        (setq value (getreal "\nЧисло <Esc> : "))
        (setq
   precision_value
    ((lambda (x)
       (if (equal x 0.0)
         0
         (- (length
       (vl-string->list
         (vl-princ-to-string
    x
         ) ;_ end of vl-princ-to-string
       ) ;_ end of vl-string->list
     ) ;_ end of length
     2
         ) ;_ end of -
       ) ;_ end of if
     ) ;_ end of lambda
      (rem value 1.)
    )
        ) ;_ end of setq
      ) ;_ end of lambda
   ) ;_ end of vl-catch-all-apply
 ) ;_ end of vl-catch-all-error-p
      ) ;_ end of not
    ) ;_ end of and
     (foreach ent
       (mapcar
  'vlax-ename->vla-object
  (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
       ) ;_ end of mapcar
       (setq str (vla-get-textstring ent))
       (setq precision_str
       (length
  (cdr (member 46 (vl-string->list str)))
       ) ;_ end of length
       ) ;_ end of setq
       (if (equal (rtos (atof str) 2 precision_str) str)
  (progn ;_Нужно было progn добавить
    (vla-put-textstring
      ent
      (rtos
        ((eval action) (atof str) value)
        2
        (apply 'max (list precision_value precision_str))
      ) ;_ end of rtos
    ) ;_ end of vla-put-textstring
    (vla-put-color ent 3) ;_Цвет 3 - зеленый
  ) ;_Нужно было progn закрыть
       ) ;_ end of if
  (setvar 'dimzin sys-var)
  (princ)
) ;_ end of defun
error: malformed list on input
dextron3 вне форума  
 
Непрочитано 02.06.2008, 13:32
#30
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


Код:
[Выделить все]
...............................................
  ) ;_Нужно было progn закрыть
      ) ;_ end of if
    ) ;_ end of foreach
 ) ;_ end of if
 (setvar 'dimzin sys-var)
 (princ)
) ;_ end of defun
CB вне форума  
 
Непрочитано 02.06.2008, 13:39
#31
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,149


CB, Отличный лиспец получился!, но только для обыкновенных цыфр

всетаки куда (rec-pat "L=150.57мм") именно для этого лиспа вставить чтобы только числа выискивал?
dextron3 вне форума  
 
Непрочитано 02.06.2008, 17:18
#32
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


>dextron3
Например так:
Код:
[Выделить все]
(defun c:test (/     sys-var  selset       action
        value     precision_value       str
        precision_str   rec-pat
       )
  (defun rec-pat (str / rec-pat)
    (defun rec-pat (temp str pat n /)
      (cond ((= str "") (list temp))
     ((if (minusp n)
        (not (member (substr str 1 1) pat))
        (member (substr str 1 1) pat)
      ) ;_ end of if
      (if (/= temp "")
        (cons temp (rec-pat "" str pat (- n)))
        (rec-pat "" str pat (- n))
      ) ;_ end of if
     )
     (t
      (rec-pat (strcat temp (substr str 1 1))
        (substr str 2)
        pat
        n
      ) ;_ end of trim_gap
     )
      ) ;_ end of cond
    ) ;_ end of defun
    (rec-pat ""
      str
      '("0" "1" "2" "3" "4" "5" "6" "7" "8" "9" ".")
      1
    ) ;_ end of rec-pat
  ) ;_ end of defun
  (setq sys-var (getvar 'dimzin))
  (setvar 'dimzin 0)
  (if
    (and
      (setq selset (ssget "_:L" '((0 . "TEXT"))))
      (not
 (vl-catch-all-error-p
   (vl-catch-all-apply
     '(lambda ()
        (setq action
        (progn
   (initget "+ - * /")
   (cadr
     (assoc (getkword
       "Действие [+ - * /] :<+> "
     ) ;_ end of getkword
     '(("+" +) ("-" -) ("*" *) ("/" /) (nil +))
     ) ;_ end of assoc
   ) ;_ end of cadr
        ) ;_ end of progn
        ) ;_ end of setq
        (setq value (getreal "\nЧисло <Esc> : "))
        (setq
   precision_value
    ((lambda (x)
       (if (equal x 0.0)
         0
         (- (length
       (vl-string->list
         (vl-princ-to-string
    x
         ) ;_ end of vl-princ-to-string
       ) ;_ end of vl-string->list
     ) ;_ end of length
     2
         ) ;_ end of -
       ) ;_ end of if
     ) ;_ end of lambda
      (rem value 1.)
    )
        ) ;_ end of setq
      ) ;_ end of lambda
   ) ;_ end of vl-catch-all-apply
 ) ;_ end of vl-catch-all-error-p
      ) ;_ end of not
    ) ;_ end of and
     (foreach ent
       (mapcar
  'vlax-ename->vla-object
  (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
       ) ;_ end of mapcar
       (setq str (vla-get-textstring ent))
       (vla-put-textstring
  ent
  (apply 'strcat
  (mapcar
    '(lambda (str)
       (setq precision_str
       (length
         (cdr (member 46 (vl-string->list str)))
       ) ;_ end of length
       ) ;_ end of setq
       (if (equal (rtos (atof str) 2 precision_str) str)
         (rtos
    ((eval action) (atof str) value)
    2
    (apply 'max (list precision_value precision_str))
         ) ;_ end of rtos
         str
       ) ;_ end of if
     ) ;_ end of lambda
    (rec-pat str)
  ) ;_ end of mapcar
  ) ;_ end of apply
       ) ;_ end of vla-put-textstring
       (vla-put-color ent 3)
     ) ;_ end of foreach
  ) ;_ end of if
  (setvar 'dimzin sys-var)
  (princ)
) ;_ end of defun
CB вне форума  
 
Непрочитано 02.06.2008, 18:20
#33
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,149


CB, отлчино! спасибо, его теперь использую в правке спецификаций...
dextron3 вне форума  
 
Непрочитано 05.08.2008, 18:51
#34
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Лисп с #22 не увеличивает числа, в которых десятичный разделитель - запятая. Можно исправить?? Спасибо
skkkk вне форума  
 
Непрочитано 05.08.2008, 20:53
#35
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


skkkk, Выделил фиолетовым в #22
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 05.08.2008, 21:28
#36
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Спасибо, VVA, только вот после обработки запятая меняется на точку....Можно, чтоб запятая оставалась? И еще не знаете, как исправить ситуацию в этом лиспе, описанную мной в #14, чтобы не зависело от переменной luprec? Т.е., чтобы после обработки лиспом текст был с тем же разделителем и с тем же количеством знаков после него, как и исходный. Так мне для каждой задачи приходится делать отдельный лисп и прописывать в нем значение luprec в зависимости оттого, сколько там знаков после запятой (или точки)
skkkk вне форума  
 
Непрочитано 05.08.2008, 23:15
#37
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


skkkk, Пробуй
Текст должен оставаться с тем же разделителем как исходный.
Количество знаков определяется как максимальное количество знаков после запятой у обрабатываемого в данный момент текста и введенного числа. Например:
текст 2 , число 0.1 - будет округляться до 1 знака после запятой
текст 2.12 , число 0.1 - будет округляться до 2 знаков после запятой
текст 2 , число 1 - будет округляться до 0 знаков после запятой
Код:
[Выделить все]
(defun c:plus (/ *error* adoc value str zpt prec newstr prec1)
  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun
(defun getcount (str / count pat i maxlen ch)
    (setq count 0)
    (setq pat '("0" "1" "2" "3" "4" "5" "6" "7" "8" "9"))
    (setq i 0 maxlen 0)
         (while (/= (setq ch (substr str (setq i (1+ i)) 1)) "")
           (if (vl-position ch pat) ; number
             (setq maxlen (1+ maxlen))
             (setq count  (max count maxlen) maxlen 0)
           )
         )
  (max count maxlen)
  )
  (defun IsAllCharNumeric  ( str / translit)(vl-load-com)  
;;;  http://www.autocad.ru/cgi-bin/f1/board.cgi?t=28488Sx
;;;  Соответствие символов взято с translit.ru
;;;  по мотивам 
;;;  name - исходная строка 
;;;  возвращается преобразованная
  (apply 'and
  (mapcar '(lambda(x)
             (vl-position x '("1" "2" "3" "4" "5" "6" "7" "8" "9" "0" "."))
             )
          (mapcar 'chr (vl-string->list (vl-string-trim  "%UuoO \t" str)))
          )
         )
)
  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (if
    (and
      (setq selset (ssget "_:L" '((0 . "TEXT"))))
      (member
        (type (setq
                value (vl-catch-all-apply
                        '(lambda () (getreal "\nСколько добавлять <Отмена> : "))
                        ) ;_ end of vl-catch-all-apply
                ) ;_ end of setq
              ) ;_ end of type
        (list 'int 'real)
        ) ;_ end of member
      ) ;_ end of and
    (progn
     (setq prec1 0)
     (setq newstr (abs value)
	   newstr (- newstr (fix newstr)))
     (while (not (equal newstr (fix newstr) 1e-9))
       (setq prec1 (1+ prec1)
            newstr (* newstr 10))
	     )
     (foreach ent (mapcar
                    'vlax-ename->vla-object
                    (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
                    ) ;_ end of mapcar
       
       (setq zpt (vl-string-search "," (setq str (vla-get-textstring ent))))
       (setq str (vl-string-translate "," "."(vla-get-textstring ent)))
       (if (setq prec (vl-string-search "." str))
	  (setq prec (getcount (substr str (1+ prec))))
	  (setq prec nil)
	 )
       (cond ((and
	      (null prec)
	      (> prec1 0)
	      )
	      (setq prec prec1)
	      )
	     ((and (numberp prec)
		   (numberp prec1)
		   )
	      (setq prec (max prec prec1))
	      )
	     (t (setq prec nil))
	     )
       (if (IsAllCharNumeric  str)
	 (progn                ;_Нужно было progn добавить
	 (setq newstr  (+ (atof str) value))
	 (setq newstr
		(cond
		    ((numberp prec)(rtos newstr 2 prec))
		    (t (itoa (fix newstr)))
		  )
	       )
         (vla-put-textstring ent
	   (if zpt (vl-string-translate "." "," newstr) newstr))
	 (vla-put-color ent 3) ;_Цвет 3 - зеленый
	 )                     ;_Нужно было progn закрыть
         ) ;_ end of if
       ) ;_ end of foreach
      )	 
     ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 05.08.2008, 23:31
#38
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Спасибо, VVA, работает... Только вот в прилагаемом файле желтый текст не обрабатывается. Видимо, из-за того, что он имеет некое форматирование??
Вложения
Тип файла: dwg
DWG 2007
Чертеж.dwg (60.3 Кб, 1518 просмотров)
skkkk вне форума  
 
Непрочитано 06.08.2008, 00:04
#39
stroygeodezia


 
Регистрация: 03.06.2008
Сообщений: 43


Мои "творения" на чистом LISP'е без всяких "vlax'ов"
Код:
[Выделить все]
;--------------------------------------------------------------------------
; Изменение отметок топосъемки на слое "Отметки"
;--------------------------------------------------------------------------
(DEFUN C:EDIT_Z ( / delta_z )
 (SETVAR "CMDECHO" 0)
 (SETQ delta_z  (GETSTRING "На какое значение изменить отметки: "))
 (SETQ n (GETSTRING "Количество знаков точности: "))

 (SETQ list_z (SSGET "X" '((0 . "TEXT")(8 . "Отметки"))))
 (SETQ len (SSLENGTH list_z))
 (SETQ c 0)
 (IF (> len 0)
   (PROGN
     (WHILE (< c len)
       (SETQ ename (SSNAME list_z c))
       (SETQ name_z (ENTGET ename))
       (IF (= (cdr (ASSOC 0 name_z)) "TEXT")
          (SETQ old_z  (ASSOC 1 name_z)
                old (CDR old_z)
                new (+ (ATOF old) (ATOF delta_z))
                new_z  (CONS 1 (RTOS new 2 (ATOI n )) )
                name_z (SUBST new_z old_z name_z)
          )
       )
       (ENTMOD name_z)
       (SETQ c (1+ c))
     )
   )
 )
 (SETVAR "CMDECHO" 1)
 (PRIN1)
)

;--------------------------------------------------------------------------
; Выборочное изменение отметок топосъемки
;--------------------------------------------------------------------------
(DEFUN C:EDIT_Z_SEL ( / delta_z )
 (SETVAR "CMDECHO" 0)
 (PROMPT "\nВыбери изменяемые отметки:")
 (COMMAND "_SELECT" pause)
 (SETQ list_z (SSGET "_p"))

 (SETQ delta_z  (GETSTRING "На какое значение изменить отметки: "))
 (SETQ n (GETSTRING "Количество знаков точности: "))

 (SETQ len (SSLENGTH list_z))
 (SETQ c 0)
 (IF (> len 0)
   (PROGN
     (WHILE (< c len)
       (SETQ ename (SSNAME list_z c))
       (SETQ name_z (ENTGET ename))
       (IF (= (cdr (ASSOC 0 name_z)) "TEXT")
          (SETQ old_z  (ASSOC 1 name_z)
                old (CDR old_z)
                new (+ (ATOF old) (ATOF delta_z))
                new_z  (CONS 1 (RTOS new 2 (ATOI n )) )
                name_z (SUBST new_z old_z name_z)
          )
       )
       (ENTMOD name_z)
       (SETQ c (1+ c))
     )
   )
 )
 (SETVAR "CMDECHO" 1)
 (PRIN1)
)

Последний раз редактировалось Кулик Алексей aka kpblc, 06.08.2008 в 00:27.
stroygeodezia вне форума  
 
Непрочитано 06.08.2008, 00:29
#40
Кулик Алексей aka kpblc
Moderator

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


Я в любой момент нажимаю Esc и AutoCAD будет в каком состоянии? Я в ответ на запрос "На какое значение изменить отметки?" нажимаю Enter и программа вылетает. Или ввожу "А_Не_Надо_ничего_менять" - результат будет там же.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.08.2008, 12:15
#41
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


skkkk, Так точно. Вариант с обработкой Мтекста и сносом форматирования
Код:
[Выделить все]
(defun c:plus (/ *error* adoc value str zpt prec newstr prec1)
  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun
(defun mip_MTEXT_Unformat ( Mtext / text Str )
  (setq MM Mtext)
  (setq Text "")
   (while (/= Mtext "")
        (cond
          ((wcmatch (strcase (setq Str (substr Mtext 1 2))) "\\[\\{}]")
            (setq Mtext (substr Mtext 3) Text   (strcat Text Str)))
          ((wcmatch (substr Mtext 1 1) "[{}]")(setq Mtext (substr Mtext 2)))
          ((wcmatch (strcase (setq Str (substr Mtext 1 2))) "\\[LO`~]")
	   (setq Mtext (substr Mtext 3)))
          ((wcmatch (strcase (substr Mtext 1 2)) "\\[ACFHQTW]")
            (setq Mtext (substr Mtext (+ 2 (vl-string-search ";" Mtext)))))
          ((wcmatch (strcase (substr Mtext 1 2)) "\\P")
            (if (or
		   (zerop (strlen Text))
		   (= " " (substr Text (strlen Text)))
		   (= " " (substr Mtext 3 1)))
               (setq Mtext (substr Mtext 3))
               (setq Mtext (substr Mtext 3) Text (strcat Text " "))))
	  ((wcmatch (strcase (substr Mtext 1 2)) "\\S")
            (setq Str   (substr Mtext 3 (- (vl-string-search ";" Mtext) 2))
                  Text  (strcat Text (vl-string-translate "#^\\" "/^\\" Str))
                  Mtext (substr Mtext (+ 4 (strlen Str)))))
	  (t (setq Text (strcat Text (substr Mtext 1 1)) Mtext (substr Mtext 2)))))
  Text)  
(defun getcount (str / count pat i maxlen ch)
    (setq count 0)
    (setq pat '("0" "1" "2" "3" "4" "5" "6" "7" "8" "9"))
    (setq i 0 maxlen 0)
         (while (/= (setq ch (substr str (setq i (1+ i)) 1)) "")
           (if (vl-position ch pat) ; number
             (setq maxlen (1+ maxlen))
             (setq count  (max count maxlen) maxlen 0)
           )
         )
  (max count maxlen)
  )
  (defun IsAllCharNumeric  ( str / translit)(vl-load-com)  
;;;  http://www.autocad.ru/cgi-bin/f1/board.cgi?t=28488Sx
;;;  Соответствие символов взято с translit.ru
;;;  по мотивам 
;;;  name - исходная строка 
;;;  возвращается преобразованная
  (apply 'and
  (mapcar '(lambda(x)
             (vl-position x '("1" "2" "3" "4" "5" "6" "7" "8" "9" "0" "."))
             )
          (mapcar 'chr (vl-string->list (vl-string-trim  "%UuoO \t" str)))
          )
         )
)
  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (if
    (and
      (setq selset (ssget "_:L" '((0 . "*TEXT"))))
      (member
        (type (setq
                value (vl-catch-all-apply
                        '(lambda () (getreal "\nСколько добавлять <Отмена> : "))
                        ) ;_ end of vl-catch-all-apply
                ) ;_ end of setq
              ) ;_ end of type
        (list 'int 'real)
        ) ;_ end of member
      ) ;_ end of and
    (progn
     (setq prec1 0)
     (setq newstr (abs value)
	   newstr (- newstr (fix newstr)))
     (while (not (equal newstr (fix newstr) 1e-9))
       (setq prec1 (1+ prec1)
            newstr (* newstr 10))
	     )
     (foreach ent (mapcar
                    'vlax-ename->vla-object
                    (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
                    ) ;_ end of mapcar
       
       (setq zpt (vl-string-search "," (setq str (mip_MTEXT_Unformat(vla-get-textstring ent)))))
       (setq str (vl-string-translate "," "." str))
       (if (setq prec (vl-string-search "." str))
	  (setq prec (getcount (substr str (1+ prec))))
	  (setq prec nil)
	 )
       (cond ((and
	      (null prec)
	      (> prec1 0)
	      )
	      (setq prec prec1)
	      )
	     ((and (numberp prec)
		   (numberp prec1)
		   )
	      (setq prec (max prec prec1))
	      )
	     (t (setq prec nil))
	     )
       (if (IsAllCharNumeric  str)
	 (progn                ;_Нужно было progn добавить
	 (setq newstr  (+ (atof str) value))
	 (setq newstr
		(cond
		    ((numberp prec)(rtos newstr 2 prec))
		    (t (itoa (fix newstr)))
		  )
	       )
         (vla-put-textstring ent
	   (if zpt (vl-string-translate "." "," newstr) newstr))
	 (vla-put-color ent 3) ;_Цвет 3 - зеленый
	 )                     ;_Нужно было progn закрыть
         ) ;_ end of if
       ) ;_ end of foreach
      )	 
     ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 06.08.2008, 12:35
#42
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Спасибо, VVA, работает 100%
skkkk вне форума  
 
Непрочитано 07.10.2008, 15:09 изменить цифры
#43
Avodo


 
Регистрация: 07.10.2008
Сообщений: 94


Ребят а можно наоборот упростить ? Очень прошу, напишите код. мне нужно сразу к нескольким текстам числовым прибавить или отнять натуральное число 1 или 2 и т.д. для работы со схемами в связке выноска+поле. В лиспе не силен и горю совсем по сроку. Заранее бьюсь лбом в пол. Числа используются натуральные: 1, 7, 26, и т.д. Без дробей и нулей
Avodo вне форума  
 
Непрочитано 07.10.2008, 15:39
#44
SetQ

конструктор
 
Регистрация: 21.07.2007
Петрозаводск
Сообщений: 2,120


Код:
[Выделить все]
;;;
;;; Shift.lsp
;;; 7 октября 2008 г.
;;; автор http://dwg.ru/f/member.php?u=10868
;;; прибавляет целое число к текстам
;;;
(DeFun C:Shift (/ ss z N i lst txt)
  (Prompt "Выберите тексты : ")
  (If (SetQ ss (ssget '(
			(-4 . "<OR")
			(0 . "TEXT")
			(0 . "MTEXT")
			(-4 . "OR>")
		       )
	       )
      )
    (ProgN
      (InitGet 1)
      (SetQ z (GetInt "\nДельта:")
	    N (ssLength ss)
	    i 0
      )
      (While (< i N)
	(If
	  (NumberP
	    (SetQ i   (1+ i)
		  lst (EntGet (ssName ss i))
		  txt (Read (Cdr (Assoc 1 lst)))
	    )
	  )
	   (EntMod
	     (SubSt
	       (Cons 1 (rtos (+ txt z)))
	       (Assoc 1 lst)
	       lst
	     )
	   )
	)
      )
    )
  )
  (prin1) ;_ BB
)

Последний раз редактировалось SetQ, 07.10.2008 в 17:07. Причина: добавлены нечисловые
SetQ вне форума  
 
Непрочитано 07.10.2008, 16:43
#45
Avodo


 
Регистрация: 07.10.2008
Сообщений: 94


Спасибо. про не числовые жаль, но хоть так
Avodo вне форума  
 
Непрочитано 07.10.2008, 17:09
#46
SetQ

конструктор
 
Регистрация: 21.07.2007
Петрозаводск
Сообщений: 2,120


подправил, фильтрует нечисловые..
SetQ вне форума  
 
Непрочитано 22.10.2009, 15:23
#47
kshatriy


 
Регистрация: 06.08.2008
Сообщений: 30


Цитата:
Сообщение от CB Посмотреть сообщение
>dextron3
Например так:
Код:
[Выделить все]
(defun c:test (/     sys-var  selset       action
        value     precision_value       str
        precision_str   rec-pat
       )
  (defun rec-pat (str / rec-pat)
    (defun rec-pat (temp str pat n /)
      (cond ((= str "") (list temp))
     ((if (minusp n)
        (not (member (substr str 1 1) pat))
        (member (substr str 1 1) pat)
      ) ;_ end of if
      (if (/= temp "")
        (cons temp (rec-pat "" str pat (- n)))
        (rec-pat "" str pat (- n))
      ) ;_ end of if
     )
     (t
      (rec-pat (strcat temp (substr str 1 1))
        (substr str 2)
        pat
        n
      ) ;_ end of trim_gap
     )
      ) ;_ end of cond
    ) ;_ end of defun
    (rec-pat ""
      str
      '("0" "1" "2" "3" "4" "5" "6" "7" "8" "9" ".")
      1
    ) ;_ end of rec-pat
  ) ;_ end of defun
  (setq sys-var (getvar 'dimzin))
  (setvar 'dimzin 0)
  (if
    (and
      (setq selset (ssget "_:L" '((0 . "TEXT"))))
      (not
 (vl-catch-all-error-p
   (vl-catch-all-apply
     '(lambda ()
        (setq action
        (progn
   (initget "+ - * /")
   (cadr
     (assoc (getkword
       "Действие [+ - * /] :<+> "
     ) ;_ end of getkword
     '(("+" +) ("-" -) ("*" *) ("/" /) (nil +))
     ) ;_ end of assoc
   ) ;_ end of cadr
        ) ;_ end of progn
        ) ;_ end of setq
        (setq value (getreal "\nЧисло <Esc> : "))
        (setq
   precision_value
    ((lambda (x)
       (if (equal x 0.0)
         0
         (- (length
       (vl-string->list
         (vl-princ-to-string
    x
         ) ;_ end of vl-princ-to-string
       ) ;_ end of vl-string->list
     ) ;_ end of length
     2
         ) ;_ end of -
       ) ;_ end of if
     ) ;_ end of lambda
      (rem value 1.)
    )
        ) ;_ end of setq
      ) ;_ end of lambda
   ) ;_ end of vl-catch-all-apply
 ) ;_ end of vl-catch-all-error-p
      ) ;_ end of not
    ) ;_ end of and
     (foreach ent
       (mapcar
  'vlax-ename->vla-object
  (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
       ) ;_ end of mapcar
       (setq str (vla-get-textstring ent))
       (vla-put-textstring
  ent
  (apply 'strcat
  (mapcar
    '(lambda (str)
       (setq precision_str
       (length
         (cdr (member 46 (vl-string->list str)))
       ) ;_ end of length
       ) ;_ end of setq
       (if (equal (rtos (atof str) 2 precision_str) str)
         (rtos
    ((eval action) (atof str) value)
    2
    (apply 'max (list precision_value precision_str))
         ) ;_ end of rtos
         str
       ) ;_ end of if
     ) ;_ end of lambda
    (rec-pat str)
  ) ;_ end of mapcar
  ) ;_ end of apply
       ) ;_ end of vla-put-textstring
       (vla-put-color ent 3)
     ) ;_ end of foreach
  ) ;_ end of if
  (setvar 'dimzin sys-var)
  (princ)
) ;_ end of defun
Помогите пожалуйста! делю числа 2200 и 400 на 1000 получаю 2 и 0 соответственно, требуется 2.200 и 0.400. как настроить точность? (чтоб ответ автоматически вставлялся с требуемой точностью)

Последний раз редактировалось kshatriy, 22.10.2009 в 15:49.
kshatriy вне форума  
 
Непрочитано 22.10.2009, 15:37
#48
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
_$ (/ 2200 1000)
2
_$ (/ 2200. 1000)
2.2
_$ (/ 2200. 1000.)
2.2
_$ (/ 2200 1000.)
2.2
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.10.2009, 15:47
#49
kshatriy


 
Регистрация: 06.08.2008
Сообщений: 30


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Код:
[Выделить все]
_$ (/ 2200 1000)
2
_$ (/ 2200. 1000)
2.2
_$ (/ 2200. 1000.)
2.2
_$ (/ 2200 1000.)
2.2
как применить?
kshatriy вне форума  
 
Непрочитано 23.10.2009, 11:40
#50
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от kshatriy Посмотреть сообщение
как применить?
Могу предположить, что делишь не лиспом, раз такой вопрос. Тогда зайди в команду _UNITS и выставь нужную точность
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 23.10.2009, 12:32
#51
kshatriy


 
Регистрация: 06.08.2008
Сообщений: 30


VVA:делю лиспом из поста 32
лисп и видео прикрепил...
поправьте если что-то делаю не так
AutoCAD 2009rus
Вложения
Тип файла: rar видео и лисп.rar (90.4 Кб, 100 просмотров)
kshatriy вне форума  
 
Непрочитано 23.10.2009, 13:57
#52
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Вот тут вот причина:
Код:
[Выделить все]
        (setq
   precision_value
    ((lambda (x)
       (if (equal x 0.0)
         0
         (- (length
       (vl-string->list
         (vl-princ-to-string
    x
         ) ;_ end of vl-princ-to-string
       ) ;_ end of vl-string->list
     ) ;_ end of length
     2
         ) ;_ end of -
       ) ;_ end of if
     ) ;_ end of lambda
      (rem value 1.)
    )
Надо как-то поправить, пока не придумал как.
Попробуй подели не на 1000, а на 1000.001
Do$ вне форума  
 
Непрочитано 23.10.2009, 14:19
#53
kshatriy


 
Регистрация: 06.08.2008
Сообщений: 30


Цитата:
Сообщение от Do$ Посмотреть сообщение
Попробуй подели не на 1000, а на 1000.001
получилось как надо! 2.200 и 0.400
за это спасибо!
kshatriy вне форума  
 
Непрочитано 23.10.2009, 14:30
#54
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Решил задачку "в лоб"
участок кода из поста #52 замени на:
Код:
[Выделить все]
(setq  precision_value (getint "\nКоличество знаков после запятой:"))
А до кучи еще строчку:
Код:
[Выделить все]
"Действие [+ - * /] :<+> "
На строчку:
Код:
[Выделить все]
"Действие:[+/-/*//]<+>"
Добавил еще метку конца-начала и функцию *error*. В общем файл прикрепил.
Есть, правда, одно "но": если количество знаков после запятой у какого-нибудь из выбранных чисел на чертеже больше, чем введенное значение, то у результата будет столько же знаков после запятой.
Пример: выбраны числа "15" "23.5" "123.234", на запрос "Количество знаков после запятой:" введено "4", тогда у всех результатов будет 4 знака после запятой.
если же выбраны числа "15.3456" "23.84597" "8974" и введено "4", у всех результатов будет 4 знаков после запятой, кроме второго. Не знаю, хорошо это или плохо
Вложения
Тип файла: lsp test.lsp (3.7 Кб, 142 просмотров)

Последний раз редактировалось Do$, 23.10.2009 в 14:46.
Do$ вне форума  
 
Непрочитано 23.10.2009, 15:42
#55
kshatriy


 
Регистрация: 06.08.2008
Сообщений: 30


Do$: Спасибо огромное РАБОТАЕТ!а с дополнением намного лудше!
небольшой вопрос:
когда точность уменьшается (если задаем количество знаком меньше чем было у данного числа до изменения) то почему-то изначальное количество знаков остается:

было 2.200(3 знака) делим на 10 ставим 2 знака после запятой,(остается всеравно 3 знака) в чем проблема?
kshatriy вне форума  
 
Непрочитано 23.10.2009, 16:03
#56
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Я ж выше как раз об этом написал
Там в программе сравнивается точность исходного числа и введенная и которая больше, та и берется. Можно эту проверку легко исключить. Надо?
Do$ вне форума  
 
Непрочитано 24.10.2009, 08:11
#57
kshatriy


 
Регистрация: 06.08.2008
Сообщений: 30


Глаза дырявые...проглядел)
проверка Нужна! а сложно в код добавить команду для удаления незначимых нулей ?
kshatriy вне форума  
 
Непрочитано 27.10.2009, 09:34
#58
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Вроде бы получилось, попробуй.
P.S. Добавил удаление точки.
Вложения
Тип файла: lsp test.lsp (3.3 Кб, 156 просмотров)

Последний раз редактировалось Do$, 27.10.2009 в 15:46.
Do$ вне форума  
 
Непрочитано 27.10.2009, 15:02
#59
kshatriy


 
Регистрация: 06.08.2008
Сообщений: 30


Do$: Спасибо! нули удаляются а разделитель остается (его бы тоже удалять):
было 0.19 умножил на 1000 ,число знаков любое, результат 190.
kshatriy вне форума  
 
Непрочитано 27.10.2009, 15:47
#60
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


#58 перезалил
Do$ вне форума  
 
Непрочитано 28.10.2009, 08:39
#61
kshatriy


 
Регистрация: 06.08.2008
Сообщений: 30


Красота! Спасибо еще раз!!!
kshatriy вне форума  
 
Непрочитано 29.10.2009, 14:52
#62
kshatriy


 
Регистрация: 06.08.2008
Сообщений: 30


еще просьба (если возможно): есть текст "Уголок L50x5 L=200" или др.

требуется : математические операции проводились только с числом стоящим после "L="
было: "Уголок L50x5 L=200"
+100
получили:"Уголок L50x5 L=300"
возможно? (лисп #58)
kshatriy вне форума  
 
Непрочитано 30.10.2009, 13:05
#63
Кулик Алексей aka kpblc
Moderator

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


kshatriy, поищи тему наподобие "суммирование текстов". Точно помню, что подобный вопрос решался.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.10.2009, 13:06
#64
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,149


kshatriy, пиши длинну отдельным тектсовым приметивом
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 31.10.2009, 07:09
#65
kshatriy


 
Регистрация: 06.08.2008
Сообщений: 30


Кулик Алексей aka kpblc: ты про это: "Как сосчитать сумму цифр из отдельных мтекстов (и лисп для подсчета спецификаций)" #522 ?
тот лисп заменяет цифры второго текста на цифры первого удалив все буквы:
было:"Уголок L50x5 L=200" и "Уголок L50x5 L=300" выбрал первый текст, выбрал второй.
результат: второй текст стал "Уголок L505200x505200 L=505200"

dextron3: Использую PS Studio
там спецификации заполняются текстами вида:
Труба 159x6 L=3400
Швеллер [20 L=370
Уголок L75x6 L=200

возможно програмно отделить длину?
kshatriy вне форума  
 
Непрочитано 31.10.2009, 16:34
#66
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от kshatriy Посмотреть сообщение
возможно програмно отделить длину?
Можно. И в той самой теме есть коды, выполняющие это действие.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.11.2009, 10:28
#67
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Там еще один косяк был - если в запрос точности вводить ноль и результат вычисления получается целым числом с нулями на конце, то они обрезаются. Например: 3500-100 получалось 34. В общем, исправил и дополнил с учетом этого:
Цитата:
Сообщение от kshatriy Посмотреть сообщение
там спецификации заполняются текстами вида:
Труба 159x6 L=3400
Швеллер [20 L=370
Уголок L75x6 L=200

возможно програмно отделить длину?
Вложения
Тип файла: lsp test.lsp (5.2 Кб, 122 просмотров)
Do$ вне форума  
 
Непрочитано 03.11.2009, 12:08
#68
kshatriy


 
Регистрация: 06.08.2008
Сообщений: 30


Работает как требовалось спасибо Do$! появилась другая проблемка в текстах с символами юникода
эти символы заменяются вопросительными знаками
Было:
ДТруба 10x1 L=1140
Двутавр \U+E72910 L=3500
Швеллер \U+E7255П L=1090
Тавр \U+E72B10БТ1 L=770
-100
получаем:
Труба 10x1 L=1040
Двутавр ?10 L=3400
Швеллер ?5П L=990
Тавр ?10БТ1 L=670

возможно сохранить эти символы?
Вложения
Тип файла: rar шрифт и файл 2004.rar (47.2 Кб, 71 просмотров)

Последний раз редактировалось kshatriy, 04.11.2009 в 06:17.
kshatriy вне форума  
 
Непрочитано 03.11.2009, 14:58
#69
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Символы не должны никуда теряться, если посмотреть свойства текста - то там все как надо написано. Наверное используемый текстовый стиль такие символы не поддерживает.
Файл не могу посмотреть, т.к. у меня акад 2006.
Do$ вне форума  
 
Непрочитано 04.11.2009, 06:20
#70
kshatriy


 
Регистрация: 06.08.2008
Сообщений: 30


перезалил #68 (сохранил в 2004)
kshatriy вне форума  
 
Непрочитано 04.11.2009, 09:23
#71
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Вот казалось бы, одно и то же:
Код:
[Выделить все]
(vla-get-textstring (vlax-ename->vla-object (car (entsel))))
(cdr (assoc 1 (entget (car (entsel)))))
А результат разный:
Код:
[Выделить все]
"Двутавр ?10 L=3500"
"Двутавр \U+E72910 L=3500"
В коде заменил одно на другое, теперь вроде все
Вложения
Тип файла: lsp test.lsp (5.6 Кб, 368 просмотров)
Do$ вне форума  
 
Непрочитано 05.11.2009, 11:53
#72
kshatriy


 
Регистрация: 06.08.2008
Сообщений: 30


Do$:работает символы в норме..
огромное спасибо !!!
kshatriy вне форума  
 
Непрочитано 25.10.2010, 12:05
#73
Alex II


 
Регистрация: 27.11.2007
Сообщений: 126


Помогите пожалуйста.
У мена на чертеже идёт нумерация объектов, от 1 и до 500. В середине появляется дополнительный объект, и нумерацию нужно сдвинуть. Ест ли простой лиспик, который мог бы увеличивать выделенные числа (text) на заданую величину? Почемуто лисп из первых постов не работает. ACAD2010.
Alex II вне форума  
 
Непрочитано 25.10.2010, 12:12
#74
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


С этим как раз тут разбираемся:
http://forum.dwg.ru/showthread.php?t=58884
Do$ вне форума  
 
Непрочитано 25.10.2010, 20:07
#75
gomer

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


Цитата:
Сообщение от Alex II Посмотреть сообщение
на чертеже идёт нумерация объектов, от 1 и до 500. В середине появляется дополнительный объект, и нумерацию нужно сдвинуть
Возможно вам поможет INCDEC
gomer вне форума  
 
Непрочитано 26.10.2010, 11:19
#76
Alex II


 
Регистрация: 27.11.2007
Сообщений: 126


Большое спасибо, очень кстати
Alex II вне форума  
 
Непрочитано 12.09.2012, 09:32
#77
timoshetc


 
Регистрация: 04.07.2012
Сообщений: 36


добрый день! у меня мультитекст след содержания "165.33 - в. тр."
требуется прибавить к отметке 1.02..(долго объяснять зачем, просто так надо))
пробовал лиспы plus, num, test - не работают( помогите плиз....очень нужно
timoshetc вне форума  
 
Непрочитано 12.09.2012, 12:41
#78
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,616


Все уже придумано и написано.
https://sites.google.com/site/bushma...-zametki/regex
Тут можно скачать библиотеку которая меняет что угодно на как угодно.

Спасибо говорить Андрею aka hwd
Boxa вне форума  
 
Непрочитано 12.09.2012, 14:12
#79
timoshetc


 
Регистрация: 04.07.2012
Сообщений: 36


как им воспользоваться? не загружается код
timoshetc вне форума  
 
Непрочитано 12.09.2012, 14:22
#80
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,616


Как то так : http://forum.dwg.ru/showthread.php?t=88453
Boxa вне форума  
 
Непрочитано 12.09.2012, 14:32
#81
timoshetc


 
Регистрация: 04.07.2012
Сообщений: 36


как то не совсем понятно..как открыть проект, например? чем какой именно файл из папки
да и зачем мне вообще это?

у меня ссылки не работают

Цитата:
Исходный код здесь (проект MS VS 2010).
Откомпилированная библиотека здесь (загружается в AutoCAD командой NETLOAD из командной строки AutoCAD).
timoshetc вне форума  
 
Непрочитано 12.09.2012, 15:26
#82
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от timoshetc Посмотреть сообщение
добрый день! у меня мультитекст след содержания "165.33 - в. тр."
требуется прибавить к отметке 1.02..(долго объяснять зачем, просто так надо))
пробовал лиспы plus, num, test - не работают( помогите плиз....очень нужно
Берите лисп из сообщения №71, открывайте блокнотом и ищите "TEXT", заменяйте на "*TEXT". Сохраняйте, запускайте - должно получиться.
Do$ вне форума  
 
Непрочитано 12.09.2012, 17:43
#83
timoshetc


 
Регистрация: 04.07.2012
Сообщений: 36


к сожалению не работает...выдает ошибку
Цитата:
no function definition: VLA-PUT-*TEXTSTRING
что бы это значило??
timoshetc вне форума  
 
Непрочитано 12.09.2012, 17:54
#84
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


VLA-PUT-*TEXTSTRING замените на VLA-PUT-TEXTSTRING
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 12.09.2012, 19:29
#85
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


timoshetc, Искать и заменять текст следовало так как написано, с кавычками
Цитата:
ищите "TEXT", заменяйте на "*TEXT"
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 13.09.2012, 14:20
#86
timoshetc


 
Регистрация: 04.07.2012
Сообщений: 36


VVA, спасибо. попробовал сделать так, результат следущий -
[IMG][/IMG]
если прибавлять - то увеличивает, если вычитать - то уменьшается...и еще какие то цифры спереди добавляет
вот как то так
timoshetc вне форума  
 
Непрочитано 13.09.2012, 14:48
#87
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Ставить диагноз по картинке - это гадание на кофейной гуще. Приложите к сообщению DWG-файл хотя бы с одним таким текстом для опытов.
Do$ вне форума  
 
Непрочитано 13.09.2012, 15:06
#88
timoshetc


 
Регистрация: 04.07.2012
Сообщений: 36


вот часть файла
Вложения
Тип файла: dwg
DWG 2007
для примера.dwg (85.4 Кб, 2596 просмотров)
timoshetc вне форума  
 
Непрочитано 13.09.2012, 16:50
#89
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Вот за что я не люблю мультитексты...
Не обработает эта программка такие тексты, на них форматирования навешано выше крыши.
Do$ вне форума  
 
Непрочитано 13.09.2012, 17:01
#90
timoshetc


 
Регистрация: 04.07.2012
Сообщений: 36


пичалька....подскажите на будущее как удобнее делать такие подписи, с учетом дальнейшего изменения отметок
timoshetc вне форума  
 
Непрочитано 14.09.2012, 08:56
#91
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Настройте текстовый стиль, чтобы не делать переопределений в самом мультитексте, не используйте курсив и т.п.
В принципе, такие небольшие надписи можно делать текстом а не мультитекстом, тогда эта программа их спокойно переварит.
Вложения
Тип файла: dwg
DWG 2004
для примера1.dwg (43.5 Кб, 2577 просмотров)
Do$ вне форума  
 
Непрочитано 14.09.2012, 11:16
#92
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Чтобы проверять без форматирования - можно подправить "искалку" hwd (см. #78) ну или чиркануть свою в которой mtext.Contents будет устанавливаться из Regex.Replace(mtext.Text,patern,replace).
p.s. Если автор не понял про что написанно - то тогда вресию автокада давай (хотя если у тебя не 2010-ый - компилировать сам будешь - или опять просить кого - т.к. у меня другого просто нет).
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 14.09.2012 в 11:28.
Дима_ вне форума  
 
Непрочитано 02.04.2013, 15:28
#93
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Вариант с принудительным заданием точности.
Добавлена обработка мтекста (если переопределялось форматирование - результат может оказаться неожиданным).
Без "раскраски".
Запускать командой otmetka.
Вложения
Тип файла: lsp otmetka.LSP (5.7 Кб, 460 просмотров)
Do$ вне форума  
 
Непрочитано 29.01.2014, 09:56
#94
RNB

Проектирование мостов
 
Регистрация: 29.01.2014
Новосибирск
Сообщений: 431


Цитата:
Сообщение от Do$ Посмотреть сообщение
Вариант с принудительным заданием точности.
Добавлена обработка мтекста (если переопределялось форматирование - результат может оказаться неожиданным).
Без "раскраски".
Запускать командой otmetka.
Отличная вещь, но одно НО.
Не работает с запятыми. К 15,005 прибавим 0.001, получим 15.001,005.

PS. В программировании не силен, но, судя по постам выше, возможность это исправить есть.
RNB вне форума  
 
Непрочитано 29.01.2014, 10:12
#95
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Это возможно, но в ряде случаев это может оказаться некстати. Как вариант - используйте стандартный инструмент FIND для замены запятых на точки в тексте, а потом используйте программу.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 29.01.2014, 10:30
#96
RNB

Проектирование мостов
 
Регистрация: 29.01.2014
Новосибирск
Сообщений: 431


Цитата:
Сообщение от Do$ Посмотреть сообщение
Это возможно, но в ряде случаев это может оказаться некстати. Как вариант - используйте стандартный инструмент FIND для замены запятых на точки в тексте, а потом используйте программу.
Замена тоже не всегда будет полезна, ну да ладно, пережить можно, т.к. в остальном программа отличная. Спасибо

----- добавлено через ~8 мин. -----
Do$, и еще просьба. Если не сложно, сделайте то же самое, но с "раскраской".
RNB вне форума  
 
Непрочитано 29.01.2014, 13:57
1 | #97
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Одни просят убрать, другие добавить...
Найдите в лиспе строчку:
Код:
[Выделить все]
 ;;;       (vla-put-color ent 3)
Точки с запятой спереди удалите - будет раскрашивать. Вместо 3 - любой нужный индексированный цвет можно поставить.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 29.01.2014, 14:33
#98
gomer

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


Цитата:
Сообщение от Do$ Посмотреть сообщение
Одни просят убрать, другие добавить...
сделай настройку
gomer вне форума  
 
Непрочитано 29.01.2014, 14:56
#99
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Сделай, если есть время и желание Это же опенсорс Мне пока некогда.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 19.05.2014, 12:53
#100
Borat


 
Регистрация: 19.05.2014
Сообщений: 3


Столкнулся с проблемой, что у меня все числовые значения в многострочном тексте, ввожу команду лиспа, а он просто не видет мой текс. Но с однострочным все норм. Можно это исправить?
Borat вне форума  
 
Непрочитано 19.05.2014, 13:24
#101
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Borat, во-первых, какой именно лисп, а во- вторых, где файл dwg, в котором не работает?
skkkk вне форума  
 
Непрочитано 19.05.2014, 15:09
#102
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


+ skkkk, Скорее всего мтекст - форматированный
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 21.01.2016, 17:10
#103
Мих


 
Регистрация: 01.09.2006
Сообщений: 48


А как бы лисп из поста 58 подправить чтобы он и с атрибутами работал?
Мих вне форума  
 
Непрочитано 22.01.2016, 13:52
#104
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Еще примерно столько же кода написать, сколько уже есть в том лиспе. А может даже и побольше...
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Увеличение всех отметок на определенную величину