Тема: Порядковая нумерация
Объясните мне, простому ламеру, как быстро пронумеровать 25строк с 1й!!???
Искал Lisp, но то, что надо не нашел. Есть какие-то мудреные, которые не нужны.
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → Разное → Порядковая нумерация
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Объясните мне, простому ламеру, как быстро пронумеровать 25строк с 1й!!???
Искал Lisp, но то, что надо не нашел. Есть какие-то мудреные, которые не нужны.
> Lamer
Вы ламер или студент, которому это задали?
Если студент, то так надо и писать. Если ламер, то должны это знать.
Ё-моё!!!
Вы не знаете, или прикалываетесь!!?
Был у меня такой Lisp но не могу найти.
Я - не студент!
> Lamer
Тут всего два оператора надо. Мог и сам написать.
PS. Далее только для Lamer
(setq number 1 shag 8. point (getpoint "\nУкажите начальную точку --->") ) ;_ конец setq (repeat 25 (progn (command "_.TEXT" point "3.0" "0" (itoa number) ) (setq number (1+ number) point (polar point (/ pi -2.0) shag) ) ;_ конец setq ) ;_ конец progn ) ;_ конец repeat
Ни то ни другое.
1. http://my.opera.com/kpblc/blog/show.dml/245772
2. Е-мое!!! Слово поиск блокируется фаерваллом?
3. Задачу поконкретнее. Блин, кто и как должен догадываться, что это за строки? Это отдельные однострочные тексты? отдельные многострочные тексты? один многострочный текст? отдельные блоки с атрибутами? Вперемешку? Как определяется порядок нумерации? По расположению элементов? Указывается руками (пнул на элемент - там номер появился)? Имеющиеся данные сохранять или нет? Если сохранять, как разделять номер и старые данные строки?
Ну как, задачка становится чуть менее элементарной, а?
Блин, скоро на подобные вопросы буду указывать только одно: http://my.opera.com/kpblc/blog/show.dml/371575 и все.
> Alan
Сейчас окажется что это не то и не туда, я тебе практически гарантирую.
Да, товарищи!
В програмировании я - ZERO!
Так, что сварганить сам ничего не могу.
А нумерация мне нужна такого плана:
типа,
1. задай начальное число
2. задай прирощение
3. задай растояние между цифрами
4. задай направление
5. задай начальную точку
и все это обычным текстом
Простая задача, но непосильная
> Lamer
Например, такая программа:
(defun C:NUM_STR ( / n0 deltan dst ns napr pt) (initget 6) (setq n0 (getint "\ Начальный номер: ")) (initget 7) (setq deltan (getint "\ Приращение номера: ")) (initget 3) (setq dst (getreal "\n Расстояние между строками: ")) (initget 7) (setq ns (getint "\n Количество строк: ")) (initget "вНиз Вверх") (setq napr (getstring "\n Направление нумерации [вНиз/Вверх] <вНиз>: ")) (setq pt (getpoint "\n Укажите начальную точку: ")) (repeat ns (cond ((or (= napr "Н") (= napr "")) (command "_TEXT" pt "" "" n0) (setq pt (list (car pt) (- (cadr pt) dst))) (setq n0 (+ n0 deltan)) ) ((= napr "В") (command "_TEXT" pt "" "" n0) (setq pt (list (car pt) (+ (cadr pt) dst))) (setq n0 (+ n0 deltan)) )) ) (princ) )
Текст отрисовывается текущим стилем, в котором высота текста не фиксирована (равна 0).
Спасибо, но чуть не то.
во первых: нумерация в этом лиспе идет в три слоя, числа накладываються друг на друга.
во вторых: хотелось бы иметь возможность расстояние между цифрами указывать мышкой с привязкой к строкам
> Lamer
Какие еще три слоя? О никаких слоях здесь не упоминается. Числа могут накладываться друг на друга в том случае, если неправильно задано расстояние между строками (меньше высоты текста). Про мышку ничего сказано не было, тем более с привязкой к существующим строкам, которые в принципе могут располагаться не регулярно по высоте. Формально я задачу выполнил. Развивать программу в соответствии с дополнительными условиями мне страшно лень - ну я и не буду этого делать:(
> Lamer
Слушай, а не проще будет делать ручное указание точек вставки?
> kpblc
Еще проще решение.
Команда: _DTEXT
Текущий текстовый стиль: "russ" Высота текста: 2.5
Начальная точка текста или [Выравнивание/Стиль]:
Высота <2.5>:""
Угол поворота текста <0>:""
Введите текст: 1
Введите текст: 2
Введите текст: 3
Введите текст: 4
.......
Введите текст:
И перенести тему из "Программирование: Готовые программы" в ...
> Владимир Громов
В том лиспе, что Вы мне дали цифры 1,2,3 имеют одинаковые координаты. 5,6,7 тоже
8,9,10 тоже и так до ...
Но.. между тройками цифр, дейтвительно нужное растояние
?????????
я уже сам заебался.
Звыняйтэ
> Lamer
Что за чертовщина? Если привязки отключены, задано реальное расстояние между строками, то ничего накладываться не должно. Проверьте в новом рисунке. У меня AutoCAD 2005.
> Lamer
(defun c:autonum (/ adoc pt_start pt_angle dist num_start num_dif num_rep pt_cur text_height counter ) (vl-load-com) (setq adoc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark adoc) (if (and (setq pt_start (getpoint "\nУкажи точку начала <Нафиг!> : ")) (setq pt_angle (getpoint pt_start "\nА теперь куды направляемся <Нафиг!> : ") ) ;_ end of setq (setq dist (getdist pt_start "\nИ скоко делать между? <Надоело> : ")) ) ;_ end of and (progn (setq num_start (cond ((getreal "\nНачальное значение <1> : ")) (t 1) ) ;_ end of cond num_dif (cond ((getreal "\nНаращивание (не ногтей) <1> : ")) (t 1) ) ;_ end of cond num_rep (cond ((getreal "\nСкоко раз повторять <25> : ")) (t 25) ) ;_ end of cond ) ;_ end of setq (setq text_height (cdr (assoc 40 (entget (tblobjname "style" (getvar "textstyle"))) ) ;_ end of assoc ) ;_ end of cdr ) ;_ end of setq (if (equal text_height 0.000 0.001) (progn (initget 1) (setq text_height (getreal "\nУкажите высоту создаваемого текста : ") ) ;_ end of setq ) ;_ end of progn ) ;_ end of if (repeat num_rep (setq pt_cur (if (not pt_cur) pt_start (polar pt_cur (angle pt_start pt_angle) dist) ) ;_ end of if ) ;_ end of setq (setq ent (list (cons 0 "TEXT") (cons 100 "AcDbEntity") (cons 100 "AcDbText") (cons 10 pt_cur) (cons 40 text_height) (cons 1 (itoa (if (not counter) (setq counter num_start) (setq counter (+ counter num_dif)) ) ;_ end of if ) ;_ end of atoi ) ;_ end of cons ) ;_ end of list ) ;_ end of setq (entmake ent) ) ;_ end of repeat ) ;_ end of progn ) ;_ end of if (vla-endundomark adoc) (princ) ) ;_ end of defun
И дальше сам.
А так?
(defun c:autonum (/ adoc pt_start pt_angle dist num_start num_dif num_rep pt_cur text_height counter ) (vl-load-com) (setq adoc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark adoc) (if (and (setq pt_start (getpoint "\nУкажи точку начала <Нафиг!> : ")) (setq pt_angle (getpoint pt_start "\nА теперь куды направляемся <Нафиг!> : ") ) ;_ end of setq (setq dist (getdist pt_start "\nИ скоко делать между? <Надоело> : ")) ) ;_ end of and (progn (setq num_start (cond ((getreal "\nНачальное значение <1> : ")) (t 1) ) ;_ end of cond num_dif (cond ((getreal "\nНаращивание (не ногтей) <1> : ")) (t 1) ) ;_ end of cond num_rep (cond ((getint "\nСкоко раз повторять <25> : ")) (t 25) ) ;_ end of cond ) ;_ end of setq (setq text_height (cdr (assoc 40 (entget (tblobjname "style" (getvar "textstyle"))) ) ;_ end of assoc ) ;_ end of cdr ) ;_ end of setq (if (equal text_height 0.000 0.001) (progn (initget 1) (setq text_height (getreal "\nУкажите высоту создаваемого текста : ") ) ;_ end of setq ) ;_ end of progn ) ;_ end of if (repeat num_rep (setq pt_cur (if (not pt_cur) pt_start (polar pt_cur (angle pt_start pt_angle) dist) ) ;_ end of if ) ;_ end of setq (setq ent (list (cons 0 "TEXT") (cons 100 "AcDbEntity") (cons 100 "AcDbText") (cons 10 pt_cur) (cons 40 text_height) (cons 1 (rtos (if (not counter) (setq counter num_start) (setq counter (+ counter num_dif)) ) ;_ end of if ) ;_ end of atoi ) ;_ end of cons ) ;_ end of list ) ;_ end of setq (entmake ent) ) ;_ end of repeat ) ;_ end of progn ) ;_ end of if (vla-endundomark adoc) (princ) ) ;_ end of defun
> Кулик Алексей aka kpblc
С юмором у вас все в порядке. И программа тоже работает довольно сносно. Но у меня, например, часто возникает проблема со спецификациями: В спецификации есть раздел: 1. Оборудование до 1000В. там подпункты 1.1 ВРУ 1.2 Щиты и т.п. И тут вдруг появляется раздел "оборудование свыше 1000В", который становится №1. И тогда в бывшем 1м разделе приходится вручную все цифры 1 переделывать на 2. Это надоедает. (не знаю, доступно ли объяснил).
И хочется программу, которая делает так:
1) Задаешь 1ю цифру. (например, "2")
2) Задаешь начальную 2ю цифру (например, "1").
3) Просто мышкой щелкаешь по очереди по цифрам, которые надо изменить. (т.е. щелкаю по цифрам "1.1", "1.2" и т.д. а они заменяются на "2.1", "2.2" и т.д.
Надеюсь, меня поймут и не отправят куда-нибудь по ссылкам...
> [Re:] Владимир Ключников
(defun test (/ x txt_1 txt_2) (setq txt_1 (getstring "\nПервая цифра: ") txt_2 (getint "\nВторая цифра: ") ) ;_ end of setq (while (setq x (car (entsel "\nВыберите текст: "))) (entmod (subst (cons 1 (strcat txt_1 "." (vl-princ-to-string txt_2))) (assoc 1 (entget x)) (entget x) ) ;_ end of subst ) ;_ end of entmod (setq txt_2 (1+ txt_2)) ) ;_ end of while (princ) ) ;_ end of defun
> Владимир Ключников
А команда _find, чем не устраивает?
> CB
Спасибо! Это именно то что мне нужно!
> Евгений Елпанов
Что-то я о _find не подумал... Вы правы, в описанном мною случае она прекрасно подходит, но чаще бывает еще такая ситуация: Я из разных спецификаций в текущую копирую все что мне нужно и естественно позиции, которые идут подряд могут быть под совершенно разными номерами: (например: 2.5; 4.2; 1.1 и т.д.) Тут-то мне очень пригодится утилитка, написанная СВ! Всем рекомендую!
SmartPurger 2.7 by JTB WORLD_подскажите как работать сней эфективно???????
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → Разное → Порядковая нумерация
Форум работает на PunBB, при поддержке Informer Technologies, Inc