Тема: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

Есть в AutoCAD очень хорошая возможность ориентироать под углом некоторые обьекты. В частности растровый. Можно ли немного автоматизировать этот процесс?

Re: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

Опять - двадцать пять. Приходится догадываться, что именно хочет т. Forma. А хочет он, видимо, выровнять криво отсканированный и вставленный в DWG растр, IMHO. Если это так, то тут как раз и пригодится команда "_ALIGN" ("ВЫРОВНЯТЬ"). Только автоматизировать там нечего, все и так просто. Если я не угадал, то считайте меня коммунистом.

Re: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

> Владимир Громов
Всему виной гроза. Сижу на аккумуляторах и жутко дорогом dial-up.
Тороплюсь. Я поигрался с "_ALIGN" ("ВЫРОВНЯТЬ"). Очень не понравилось. Предлагаю провести на криво отсканированном чертеже (они всегда кривые) одну розовую жирную линию под углом соответствующим углу большинства линий кривого сканированного изображения. Затем кликнуть по ней и кликнуть по вставленному кривому растру. Он выправляется относительно контольной линии. Я делаю это вручную. Пересчетом и т.д.
p.s. Вы угадали. Не быть Вам коммунистом.( Забавная логика)

Re: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

> Forma
Вот какая ситуация бывает у меня. Имеется сканированный план здания, иногда склеенный из кусков, т.к. мне доступен только сканер формата А3, а чертежи бывают формата > А1. Ясно, что растр не получится ортогональным, хоть ты тресни. Тогда я провожу из одного угла этого растра вертикальную или горизонтальную линию и выравниваю растр по одной паре точек. Это получается достаточно быстро и автоматизации не требует. Если же хочется иметь сознательно повернутый растр, то лучше его заранее обработать в редакторе растровых изображений и лучшим из них я считаю Ulead PhotoImpact.

Re: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

> Владимир Громов
Да согласен с предварительной обработкой растра. Но есть два момента:
Первый.   Не знаю этой программы. Попробую найти и посмотреть;
Второй.  Вечно торопишься. Все надо быстро и сразу:)

Re: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

Вот, посмотри здесь:
http://www.upi.kiev.ua/
Сам я глянул только мельком.

Re: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

> Владимир Громов
Э-э-э... . Да он имеет 32 Mgb и 90 бледнозеленых. Так быстро не получится. Обосновать надо. И самое главное. Репер в нем есть? Что- то я сомневаюсь.>

Re: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

> Forma
Оно?

(defun C:ALIGN_IMAGE ( / ss en el p1 p2 u v ang tmp i n ul vl)
  (defun vector_len (v / x y z)
    (setq x (nth 0 v) y (nth 1 v) z (nth 2 v))
    (sqrt (+ (* x x) (* y y) (* z z)))
  )
  (princ "\nВыберите отрезок, по которому будет выполняться выравнивание: ")
  (if (setq ss (ssget "_:S:E" '((0 . "LINE")))) (progn
    (setq el (entget (ssname ss 0)))
    (setq p1 (cdr (assoc 10 el)) p2 (cdr (assoc 11 el)))
    ;; Упорядочим отрезок по оси X
    (if (> (car p1) (car p2)) (progn
      (setq tmp (list p1 p2) p1 (last tmp) p2 (car tmp))
    )) ;; (if (progn
    (setq ang (angle p1 p2))
    (princ "\nВыберите растры для выравнивания: ")
    (if (setq ss (ssget '((0 . "IMAGE")))) (progn
      (setq n (sslength ss) i 0)
      (while (< i n)
        (setq el (entget (ssname ss i)))
        (setq u (cdr (assoc 11 el)) v (cdr (assoc 12 el)))
        (setq el (subst (cons 11 (polar '(0.0 0.0 0.0)
                 ang (vector_len u))) (assoc 11 el) el))
        (setq el (subst (cons 12 (polar '(0.0 0.0 0.0)
                 (+ ang (* PI 0.5)) (vector_len v))) (assoc 12 el) el))
        (entmod el)
        (setq i (1+ i))
      )
    )) ;; (if (progn
  )) ;; (if (progn
  (princ)
)

Re: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

> Александр Ривилис
Сейчас проверю.

Re: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

> Forma
Надеюсь, что все нормально. Программа обрабатывает только растры (для других типов объектов нужны свои алгоритмы - единообразия достичь вряд ли получится).

Re: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

> Александр Ривилис
Да. Оно. Спасибо. Все правильно. Но несколько ремарок.
1. Я обычно выравниваю по линии близкой к горизонтальной.
    Мне достаточно. Но эта программа не только для меня.
    Пользователь может определить контрольной линией- линию
    близкой к вертикальной. Программа в этом случае отработает
   некорректно.
2. Если можно, Когда кликаешь контрольную линию, что бы она как то подсветилась.
3. Для справки. Поворот нескольких растров относительно одной линии теоретически верен. Но в реальности так не бывает.
                       Все три ремарки не принципиальны. :)
Спасибо. Так меня достали эти тупые повороты.
Не по теме. Личное впечатление:
"Autodesk" с углами не дружит.
Например: Как провести линию под углом?
Меня спрашивали об этом раз двадцать. Домой звонят.:)
p.s. Вам лично благодарность от моей жены за пр-му "Выравнивание линий" :)

Re: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

> Александр Ривилис
Вспомнил. Днем вертелся вопрос в голове. Точность поворота какая заложена? Нужно не менее 15 минут. Может там по умолчанию округление до целых градусов.

Re: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

> Александр Ривилис
В код еще не вникал, но попробовал программу в действии. Выяснилось, что для выравнивания нужен горизонтальный отрезок, если задать вертикальный (часто надо выровнять по вертикали), то растр поворачивается на 90 градусов от вертикального положения. А если дать команду отмены, то отменяется и поворот растра и отрезок, нарисованный до выполнения "ALIGN_IMAGE", и режим ОРТО, установленный для отрисовки отрезка...

Re: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

> Forma
Что имеется в виду под словом "репер"?

Re: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

> Forma
Поворот - какой угодно. Самое главное то, что в качестве поворота надо указывать десятичные значения углов. Например, для того, чтобы повернуть какой-то объект на 15 градусов 10 минут, надо указать в качестве значения угла поворта 15,1(6), т.е. [15 + 10/60]. Поэтому зачастую проще нарисовать линию через нужные точки и дальше - либо _align, либо программы, представленные здесь - по необходимости
---
ИМХО

Re: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

> Forma

> Владимир Громов
Вы оба меня озадачили. Ну по поводу отмены команды - тут и так все ясно, а вот по поводу выравнивания по вертикальному отрезку... И как же интересно я буду догадываться нужно ли мне выравнивать низ растра или бок? А если отрезок наклонный? Нет уж увольте... Выравнивается всегда низ растра. Угол измеряется с той точностью, с которой позволяет AutoCAD и нигде не округляется, если не учитывать потери при вычислениях.

Re: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

> Александр Ривилис
Хорошо. Не критично. Спасибо.
Не по теме:
Вот, что меня начинает удивлять, так то что пользователи AutoCAD
не "врубаются" в задачу. У меня такое чувство, что мало практики.

Re: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

> Александр Ривилис
Хоть я лицо и не вполне заинтересованное, но хочу уточнить. Сразу оговорюсь, что мое замечание ни к чему не обязывает. А дело вот в чем. У меня бывают старые чертежи, выполненные на доске и в них не всегда выдержан угол 90 градусов между горизонтальными и вертикальными линиями. Поэтому при обводке растра в AutoCAD'е приходится решать: если превалируют вертикальные линии, то и выравнивать надо по вертикали, а уж горизонтальные как получатся в режиме ОРТО. Задача ведь состоит не просто в выравнивании рамки растра, а того, что в нем нарисовано. Вот и все с моей стороны.

Re: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

> Владимир Громов
Да. Правильно, отчасти. Но . Выравнивается рамка растра. Не запутывайте Александра Ривилиса.

Re: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

Меня программа вполне устраивает. Но, как- бы незавершенная.
В LISP есть операторы подобные  "if";"else";"goto" т.п.? Это я к тому, что- бы
отсортировать два "признака" контрольной линии: близкой к горизонтали (0-45;315-360) и близкой к вертикали (45-135;225-315).
С учетом, есс-но, >=.
По первому признаку повернуть горизонтальную составляющую растра, по второму- по вертикальной.
А, то я вроде как неформально ответственный за эту ветку на форуме.:)))

Re: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

> Forma
С углами ошибочка вышла:)

Re: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

> Forma
Где-то так:

(defun C:ALIGN_IMAGE ( / ss en el p1 p2 u v ang tmp i n ul vl)
  (defun vector_len (v / x y z)
    (setq x (nth 0 v) y (nth 1 v) z (nth 2 v))
    (sqrt (+ (* x x) (* y y) (* z z)))
  )
  (princ "\nВыберите отрезок, по которому будет выполняться выравнивание: ")
  (if (setq ss (ssget "_:S:E" '((0 . "LINE")))) (progn
    (setq el (entget (ssname ss 0)))
    (setq p1 (cdr (assoc 10 el)) p2 (cdr (assoc 11 el)))
    ;; Упорядочим отрезок по оси X
    (if (> (car p1) (car p2)) (progn
      (setq tmp (list p1 p2) p1 (last tmp) p2 (car tmp))
    )) ;; (if (progn
    (setq ang (angle p1 p2))
    ;; Разберемся с углом:
    (cond
     ((and (> ang (* PI 0.25)) (< ang (* PI 0.75)))
      (setq ang (- ang (* PI 0.5)))
     )
     ((and (> ang (* PI 1.25)) (< ang (* PI 1.75)))
      (setq ang (+ ang (* PI 0.5)))
     )
    ) ;; (cond
    (princ "\nВыберите растр для выравнивания: ")
    (if (setq ss (ssget "_:S:E" '((0 . "IMAGE")))) (progn
      (setq n (sslength ss) i 0)
      (while (< i n)
        (setq el (entget (ssname ss i)))
        (setq u (cdr (assoc 11 el)) v (cdr (assoc 12 el)))
        (setq el (subst (cons 11 (polar '(0.0 0.0 0.0)
                 ang (vector_len u))) (assoc 11 el) el))
        (setq el (subst (cons 12 (polar '(0.0 0.0 0.0)
                 (+ ang (* PI 0.5)) (vector_len v))) (assoc 12 el) el))
        (entmod el)
        (setq i (1+ i))
      )
    )) ;; (if (progn
  )) ;; (if (progn
  (princ)
)

Re: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

> Александр Ривилис
Опять я первую скобку потерял:(
Вот теперь нормально. Все логично завершено. Большое спасибо.

Re: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

> Forma
Посыпаю голову пеплом. Неправильно поставил задачу. Уважаемый Александр Ривилис выполнил в точности, что я просил.:(
А, не менее уважаемый Владимир Громов деликатно подсказывал мне, что я пру как баран не в ту сторону.
Вот к чему приводят методы пригодные только для ловли блох.
Короче, надо привести кривой растр к ORTO по построеной контрольной линии. Есть у меня предчувствие, что все дело в знаках + и -.  Не смею просить. Только надеюсь и уповаю.

Re: Программа+макрос на кнопку "Ориентирование обьектов в AutoCAD по контрольной линии"

Дополнение: Программа поворачивает растр на "правильный" угол, но с противоположным знаком.