Тема: Редактирование отметок

Плиз хелп! Необходимо редактировать отметки в готовом файле на заданную величину, то есть изменить величину Z, сохранив их расположение в пространстве модели(угол поворота, XY). Спасибо всем.

Re: Редактирование отметок

отметки чего?  В каком виде имеющийся файл:3D или 2D? Какая программа, наконец?

Re: Редактирование отметок

> Ирина
cформулируй по четче мысль, тогда может кто и поможет

Re: Редактирование отметок

:)Нельзя паниковать, вы правы))
Ситуация такая: есть dwg-файл с топографической съемкой, 2D. Все уже оформлено по всем правилам топографии, то есть часть отметок развернута. Но съемка не сидит по высоте... И теперь нужно каждую отметку изменить на полтора метра, а их там несколько тысяч.... Реально, конечно, подсадить в акад пересчитанные отметки, но редактура большого объекта займет много времени...Может можно это сделать "автоматом", или все оч. критично?

Re: Редактирование отметок

если рисунок в 2D, то почему именно надо поднять на полтора метра? На каком уровне сейчас находится рисунок? Если на 0 и если весь рисунок просто нужно поднять на 1.5 метра (?), то почему бы не воспользоваться значением УРОВЕНЬ в СВОЙСТВАХ. (если речь вообще идёт про Автокад)

Re: Редактирование отметок

> Ирина
Да изложите же нормально. Кто же знает, что такое "отметка" в Вашем понимании да еще в вашем чертеже.
Отметка точки может быть проставлена разными способами - блоком с атрибутом, просто текстом. Отметка может быть у горизонтали и тоже разными способами.
Вы пишете про величину Z, тогда см. совет Igor' Kulikov (2006-11-21 05:51:23)
А я подозреваю, что надо текст надписей отметок изменить, т.к. в 2D Z не имеет значения. А кто-то еще что-то гнусное подумает.

Re: Редактирование отметок

Отметка "в моем понимании" - это линейный текст. Изменить нужно именно ТЕКСТ.

Re: Редактирование отметок

1.Отметки-тексты соберите на одном слое. Других текстов на этом слое быть не должно. В следующем ответе назовите имя этого слоя.
2.Линейный текст - это _text  ?
3.Приведите образец. Важен разделитель.
4.Они все написаны в одинаковом стиле, с одинаковым выравниванием, или есть украшения (влево-вправо)? Если Вам нечего ответить на этот вопрос, то это плюс в нашем деле.
5.Думаю, что сегодня вечером мы перепишем Ваши тексты :о)
Чуть-чуть поумничаю. А что значит в Автокаде -2D? По-моему, только то, что Z равен 0, то есть его не ввели..

Re: Редактирование отметок

Отметки в файле и так в одном слое,называется OTMETKA.
Да,линейный текст-это_text.
Образец:182.35
Весь текст отметок имеет одинаковые свойства(о них надо подробнее?)
,кроме rotation,т.е. часть отеток развернута относительно некоторых линейных объектов.
А насчет 2D,вы правы.Нам пришлось присвоить 0 значению Z,т.к. у проектировщиков возникают какие-то проблемы.

Re: Редактирование отметок

Кстати,ко всем отметкам надо прибавить 1.5 метра

Re: Редактирование отметок

Наверное, поможет такая программка, как раз придуманная для такого случая:

(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е не очень; пишу что-то для себя, а интересно знать мнение специалистов.

Re: Редактирование отметок

Без циклической обработки:

(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

Работу кода не проверял, писалось практически на коленке, оставляю как есть.

Re: Редактирование отметок

> Ирина
Лови демку программки:

(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.

Re: Редактирование отметок

В догонку: imja_sloja[rus] zamenit' na svojo.
...Poka pisal, von skol'ko natvorili .... zato u menja bez [/rus] VLisp'a.  Да и короче получилось wink

Re: Редактирование отметок

> Vitalij
А что будет, если на слое imja_sloja нет ни одного текста? А что будет, если такого слоя вообще нет? А что будет, если в тексте написано нечто типа "1,680,656 в отметках той самой системы"? А что будет, если надо отменить выполнявшиеся действия? А что будет делать пользователь, если надо прибавлять не 1,5 метра, а 1,510? Новую прогу катать?

Re: Редактирование отметок

Ну и ещё один вариант smile
(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_$ " нет текстов sad"))
  );if nabor_L
(setvar "CMDECHO" 1)
(prin1)
);c:text-vo
Добро это скопируй в файл "text-vo.lsp", помести в тот каталог, где живёт рисунок.dwg
Очень советую с риcунка сделать копию ::о(
Загрузишь рисунок, набери (load "text-vo")
Появится сообщение, что есть новая команда text-vo
Набери text-vo и введи изменение по Z и имя слоя с отметками.
Буден создан новый слой и на нём написаны новые отметки.

Re: Редактирование отметок

[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. По четвертому вопросу, ехтого совсем не учитывал. По пятому вопросу, такое исключил, так как отметки на топографичесских планах ставятся с точностю до сантиметра, т.е. два знака. По шестому вопросу, нет, ехту подправить, по седмому вопросу... вопросы кончились, да ладно отвечу на лишний, ехто демка, писаная на очень скорую руку (и вообшхе я геодезист, а не программист). Обычно перед такого рода действиями, я чертежь сокхраняю, и если, после покхожикх действий, результатом я не доволен, просто закрываю чертежь без его сокхранения.

Re: Редактирование отметок

Всем огромное спасибо.Запустила программку,предложенную kpblом.Супер!Спасли от бессонных ночей:))Спасибо от всех девчонок нашего отдела(такая проблема уже не раз возникала,но на маленьких объектах и мы особо не заморачивались).

Re: Редактирование отметок

> Vitalij
Пожалуйста, не обижайся. Просто я хотел добиться наиболее универсального варианта. Кстати, мой код тоже не безгрешен. Если ему подсунуть текст типа "А собачка, зараза этакая, таки свалилась с 5,5 метровой вышки в бассейн, сожрав 2 кеге мяса", он выдаст (при сложении с теми же 1,5) не 7, как ожидается, а 1.5. Так что тоже не до конца гуд :)

Re: Редактирование отметок

P.S. Со слоями, кстати, тоже не обрабатывал. Их надо предварительно приводить в изменяемый вид либо руками, либо программно. Но программное решение приведет к такому увеличению кода, что мама не горюй.

Re: Редактирование отметок

Попробовала все предложенные программки.Слов нет выразить свое восхищение и благодарность.Даже расстерялась-такой выбор!!!