Тема: Редактирование отметок
Плиз хелп! Необходимо редактировать отметки в готовом файле на заданную величину, то есть изменить величину Z, сохранив их расположение в пространстве модели(угол поворота, XY). Спасибо всем.
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Отрасль → Геодезия и картография → Редактирование отметок
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Плиз хелп! Необходимо редактировать отметки в готовом файле на заданную величину, то есть изменить величину Z, сохранив их расположение в пространстве модели(угол поворота, XY). Спасибо всем.
отметки чего? В каком виде имеющийся файл:3D или 2D? Какая программа, наконец?
> Ирина
cформулируй по четче мысль, тогда может кто и поможет
:)Нельзя паниковать, вы правы))
Ситуация такая: есть dwg-файл с топографической съемкой, 2D. Все уже оформлено по всем правилам топографии, то есть часть отметок развернута. Но съемка не сидит по высоте... И теперь нужно каждую отметку изменить на полтора метра, а их там несколько тысяч.... Реально, конечно, подсадить в акад пересчитанные отметки, но редактура большого объекта займет много времени...Может можно это сделать "автоматом", или все оч. критично?
если рисунок в 2D, то почему именно надо поднять на полтора метра? На каком уровне сейчас находится рисунок? Если на 0 и если весь рисунок просто нужно поднять на 1.5 метра (?), то почему бы не воспользоваться значением УРОВЕНЬ в СВОЙСТВАХ. (если речь вообще идёт про Автокад)
> Ирина
Да изложите же нормально. Кто же знает, что такое "отметка" в Вашем понимании да еще в вашем чертеже.
Отметка точки может быть проставлена разными способами - блоком с атрибутом, просто текстом. Отметка может быть у горизонтали и тоже разными способами.
Вы пишете про величину Z, тогда см. совет Igor' Kulikov (2006-11-21 05:51:23)
А я подозреваю, что надо текст надписей отметок изменить, т.к. в 2D Z не имеет значения. А кто-то еще что-то гнусное подумает.
Отметка "в моем понимании" - это линейный текст. Изменить нужно именно ТЕКСТ.
1.Отметки-тексты соберите на одном слое. Других текстов на этом слое быть не должно. В следующем ответе назовите имя этого слоя.
2.Линейный текст - это _text ?
3.Приведите образец. Важен разделитель.
4.Они все написаны в одинаковом стиле, с одинаковым выравниванием, или есть украшения (влево-вправо)? Если Вам нечего ответить на этот вопрос, то это плюс в нашем деле.
5.Думаю, что сегодня вечером мы перепишем Ваши тексты :о)
Чуть-чуть поумничаю. А что значит в Автокаде -2D? По-моему, только то, что Z равен 0, то есть его не ввели..
Отметки в файле и так в одном слое,называется OTMETKA.
Да,линейный текст-это_text.
Образец:182.35
Весь текст отметок имеет одинаковые свойства(о них надо подробнее?)
,кроме rotation,т.е. часть отеток развернута относительно некоторых линейных объектов.
А насчет 2D,вы правы.Нам пришлось присвоить 0 значению Z,т.к. у проектировщиков возникают какие-то проблемы.
Кстати,ко всем отметкам надо прибавить 1.5 метра
Наверное, поможет такая программка, как раз придуманная для такого случая:
(defun C:ch_fig (/ delta) (vl-load-com) (initget 1) (setq delta (getreal "Введите разность значений: ") app (vlax-get-acad-object) doc (vla-get-ActiveDocument app) ) (defun work (/ sels) (setq sels (ssget '((0 . "TEXT"))) len (sslength sels) sels (vla-get-ActiveSelectionSet doc) i 0 ) (while (< i len) (setq tobj (vla-Item sels i) str (vla-get-TextString tobj) zpt nil ) (if (vl-string-search "," str) (setq str (vl-string-translate "," "." str) zpt T ) ) (setq prec (cond ((vl-string-search "." str) (- (strlen str) (+ (vl-string-search "." str) 1)) ) ((vl-string-search "," str) (progn (- (strlen str) (+ (vl-string-search "," str) 1)) ) ) (t 0) ) fig (atof str) newfig (+ fig delta) nstr (rtos newfig 2 prec) ) (if zpt (setq nstr (vl-string-translate "." "," nstr) ) ) (vla-put-TextString tobj nstr) (setq i (1+ i) ) ) ) (work) (setq do_next T) (while do_next (initget 1 "Дальше Выход") (setq res (getkword "[Дальше/Выход]")) (cond ((= res "Выход") (setq do_next nil)) ((= res "Дальше") (work)) (T (setq do_next nil)) ) ) (princ) )
Работа с ней: загрузить - Tools->Load application, и вызывать из командной строки: ch_fig
И большая просьба прокомментировать, ежели кто возьмется, саму программу, а то я в LISPе не очень; пишу что-то для себя, а интересно знать мнение специалистов.
Без циклической обработки:
(defun c:chtxt (/ adoc delta selset) (vl-load-com) (setq adoc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark adoc) (if (and (setq delta (getreal "\nВведите разность значений <ВЫход> : ")) (setq selset (ssget '((0 . "*TEXT")))) ) ;_ end of and (foreach ent (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset))) ) ;_ end of mapcar (if ((lambda (/ res) (mapcar '(lambda (x) (if (vl-string-search x (vla-get-textstring ent)) (setq res t) ) ;_ end of if ) ;_ end of lambda '("1" "2" "3" "4" "5" "6" "7" "8" "9" "0" "," ".") ) ;_ end of mapcar res ) ;_ end of lambda ) (vl-catch-all-apply '(lambda () (vla-put-textstring ent (rtos (+ (atof (vl-string-translate "," "." (vla-get-textstring ent))) delta ) ;_ end of + ) ;_ end of rtos ) ;_ end of vla-put-TextString ) ;_ end of lambda ) ;_ end of vl-catch-all-apply ) ;_ end of if ) ;_ end of foreach ) ;_ end of if (vla-endundomark adoc) (princ) ) ;_ end of defun
Работу кода не проверял, писалось практически на коленке, оставляю как есть.
> Ирина
Лови демку программки:
(defun c:Pik_up(/) (setvar "cmdecho" 0) (setq plius 1.50); Skol'ko pribavit' (otnjat' so znakom minus primer(setq plius -1.50) (setq e (ssget "x" '((-4 . "<OR")(0 . "text")(8 . "imja_sloja")(-4 . "OR>") ))) (if (/= e nil)(progn (while (/= (sslength e) 0) (setq enn (ssname e 0)) (if (/= enn nil)(progn (setq edata(entget enn)) (setq cto(cdr(assoc 1 edata))) (setq sd(rtos (+ plius (atof cto)) 2 2)) (setq cto(cdr(assoc 1 edata))) (setq avod (cons 1 cto)) (setq avid (cons 1 sd)) (setq edata (subst avid avod edata)) (entmod edata) (setq e(ssdel enn e)) ))))) (princ) )
[rus] Sloi dolzhny byt' razmorozheny, razblokirovany i t.d. Proveril odin raz, na vsjakij sluchaj probuj na kopii.
Skopiruj v bloknot. zapishi kak [/rus]pik_up.lsp в папку, которая прописана в путякх поиска Автокада. Подгрузи как лисп приложение . В ком строке набери pik_up.
В догонку: imja_sloja[rus] zamenit' na svojo.
...Poka pisal, von skol'ko natvorili .... zato u menja bez [/rus] VLisp'a. Да и короче получилось
> Vitalij
А что будет, если на слое imja_sloja нет ни одного текста? А что будет, если такого слоя вообще нет? А что будет, если в тексте написано нечто типа "1,680,656 в отметках той самой системы"? А что будет, если надо отменить выполнявшиеся действия? А что будет делать пользователь, если надо прибавлять не 1,5 метра, а 1,510? Новую прогу катать?
Ну и ещё один вариант
(defun c:text-vo ( / )
(setq z_!(getreal "\nЗадайте приращение по Z в виде zzz.zz : "))
(setq iln_$(getstring "\nВведите имя слоя с текстами высотных отметок:"))
(setq nabor_L (ssget "X" (list(cons 0 "TEXT")(cons 8 iln_$))))
(if nabor_L
(progn
(setq nabor_%(sslength nabor_L) ne_% 0)
(setvar "CMDECHO" 0)
(command "_-layer" "_m" (strcat iln_$ "_new") "")
(command "_-style" "" "" "0" "" "" "" "" "")
(repeat nabor_%
(setq name(ssname nabor_L ne_%) ent_L(entget name)
v1(cdr(assoc '10 ent_L)) h1_!(cdr(assoc '40 ent_L))
r_!(* 180(/(cdr(assoc '50 ent_L))pi))
txt_$(rtos(+(atof(cdr(assoc '1 ent_L)))z_!) 2 2)
);setq
(command "_text" v1 h1_! r_! txt_$ "")
(setq ne_%(1+ ne_%))
);repeat
);progn
(print (strcat "На слое " iln_$ " нет текстов "))
);if nabor_L
(setvar "CMDECHO" 1)
(prin1)
);c:text-vo
Добро это скопируй в файл "text-vo.lsp", помести в тот каталог, где живёт рисунок.dwg
Очень советую с риcунка сделать копию ::о(
Загрузишь рисунок, набери (load "text-vo")
Появится сообщение, что есть новая команда text-vo
Набери text-vo и введи изменение по Z и имя слоя с отметками.
Буден создан новый слой и на нём написаны новые отметки.
[rus]Pisannaja na ochen' skoruju ruku i s oshibkoj
Zameni [/rus]
(setq e (ssget "x" '((-4 . "<OR")(0 . "text")(8 . "imja_sloja")(-4 . "OR>") )))
на
(setq e (ssget "x" '((-4 . "<AND")(0 . "text")(8 . "imja_sloja")(-4 . "AND>") )))
> kpblc
По первому вопросу, ничего не будет, программа завершит свою работу. По второму вопросу, ничего не будет, программа завершит свою работу. По третьему вопросу, ехтот текст заменится на 1.50. По четвертому вопросу, ехтого совсем не учитывал. По пятому вопросу, такое исключил, так как отметки на топографичесских планах ставятся с точностю до сантиметра, т.е. два знака. По шестому вопросу, нет, ехту подправить, по седмому вопросу... вопросы кончились, да ладно отвечу на лишний, ехто демка, писаная на очень скорую руку (и вообшхе я геодезист, а не программист). Обычно перед такого рода действиями, я чертежь сокхраняю, и если, после покхожикх действий, результатом я не доволен, просто закрываю чертежь без его сокхранения.
Всем огромное спасибо.Запустила программку,предложенную kpblом.Супер!Спасли от бессонных ночей:))Спасибо от всех девчонок нашего отдела(такая проблема уже не раз возникала,но на маленьких объектах и мы особо не заморачивались).
> Vitalij
Пожалуйста, не обижайся. Просто я хотел добиться наиболее универсального варианта. Кстати, мой код тоже не безгрешен. Если ему подсунуть текст типа "А собачка, зараза этакая, таки свалилась с 5,5 метровой вышки в бассейн, сожрав 2 кеге мяса", он выдаст (при сложении с теми же 1,5) не 7, как ожидается, а 1.5. Так что тоже не до конца гуд :)
P.S. Со слоями, кстати, тоже не обрабатывал. Их надо предварительно приводить в изменяемый вид либо руками, либо программно. Но программное решение приведет к такому увеличению кода, что мама не горюй.
Попробовала все предложенные программки.Слов нет выразить свое восхищение и благодарность.Даже расстерялась-такой выбор!!!
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Отрасль → Геодезия и картография → Редактирование отметок
Форум работает на PunBB, при поддержке Informer Technologies, Inc