Тема: Поменять значения X Y местами Z * (-1) у выбранных примитивов

Добрый день! Может сможет кто помочь? В принципе проблема описана в названии темы "Поменять значения X Y местами Z * (-1) у выбранных примитивов", только уточню, что речь идет не о системе координат, а именно о рокировке значений Х и У... И умножение на (-1) значения Z выбранных примитивов...

Re: Поменять значения X Y местами Z * (-1) у выбранных примитивов

Пробуй

(defun C:Movez (/ adoc axss fixp fx fy ll locked locked lpts ss); move to minus Z
  ;;fixo () 2008
(vl-load-com)
(setq adoc (vla-get-activedocument (vlax-get-acad-object)))
(vlax-for lay (vla-get-layers adoc)
    (if (eq (vla-get-lock lay) :vlax-true)
      (progn
 (setq locked (cons (vla-get-name lay) locked))
 (vla-put-lock lay :vlax-false)
 )
      )
    )  
(setq ss (ssget))
(setq axss (vla-get-activeselectionset adoc))
 
(vlax-for a axss
  (vla-getboundingbox a 'll 'ur)
  (setq ll (vlax-safearray->list ll)
    )
  (vlax-invoke a 'Move (trans ll 1 0)(trans (list (car ll)(cadr ll) (* -1 (caddr ll))) 1 0))
  )
 
(setq fx (apply 'min (mapcar 'car lpts))
      fy (apply 'min (mapcar 'cadr lpts))
      fixp (list fx fy 0.0)
      )

  (if locked
    (foreach x locked
        (vla-put-lock (vla-item (vla-get-layers adoc) x) :vlax-true)
        )
    )
(princ)
)

[FONT=Arial]~'J'~[/FONT]

Re: Поменять значения X Y местами Z * (-1) у выбранных примитивов

значение Z меняет, XY нет

Re: Поменять значения X Y местами Z * (-1) у выбранных примитивов

теперь меняет
(vlax-invoke a 'Move (trans ll 1 0)(trans (list (cadr ll)(car ll)(* -1 (caddr ll))) 1 0))
СПАСИБО!

Re: Поменять значения X Y местами Z * (-1) у выбранных примитивов

Александр Рогов пишет:

теперь меняет
(vlax-invoke a 'Move (trans ll 1 0)(trans (list  (cadr ll)(car ll) (* -1 (caddr ll))) 1 0))
СПАСИБО!

Я невнимательно прочитал вопрос - сделал только для -Z
Ну, да ты и сам догадался как переделать,
Успехов

[FONT=Arial]~'J'~[/FONT]

Re: Поменять значения X Y местами Z * (-1) у выбранных примитивов

Проблема! На линейных и площадных объектах не работает - их каким то образом нужно зеркалить?!

Re: Поменять значения X Y местами Z * (-1) у выбранных примитивов

Александр Рогов пишет:

Проблема! На линейных и площадных объектах не работает - их каким то образом нужно зеркалить?!

Чертеж в студию

Re: Поменять значения X Y местами Z * (-1) у выбранных примитивов

Александр Рогов пишет:

Проблема! На линейных и площадных объектах не работает - их каким то образом нужно зеркалить?!

Ну это же очевидно. Если это линия/полилиния, то нужно для каждой из вершин поменять местами X и Y. А для областей, штриховок и т.д. всё намного хуже, т.к. нужно сначала получить их контуры, выполнить X<->Y и по новой сделать область/штриховку.

(изменено: Disney, 21 марта 2011г. 17:08:57)

Re: Поменять значения X Y местами Z * (-1) у выбранных примитивов

Александр Рогов пишет:

их каким то образом нужно зеркалить?!

Вот оно, ключевое слово зеркалить
Нужно просто набор отразить относительна (x1,y1) (x2,y2), при этом x1=y1 x2=y2, и всё!

Re: Поменять значения X Y местами Z * (-1) у выбранных примитивов

fixo пишет:

Чертеж в студию

да полилинию нарисовать с тримя вершинами, в вершины поместить точечные примитивы (круг, точка) - при выполнении точечные встанут X<->Y, а вот полилиния нет...

Александр Ривилис пишет:

Ну это же очевидно. Если это линия/полилиния, то нужно для каждой из вершин поменять местами X и Y. А для областей, штриховок и т.д. всё намного хуже, т.к. нужно сначала получить их контуры, выполнить X<->Y и по новой сделать область/штриховку.

Короче все не так то просто.

Re: Поменять значения X Y местами Z * (-1) у выбранных примитивов

Disney пишет:

 
Нужно просто набор отразить относительна (x1,y1) (x2,y2), при этом x1=y1 x2=y2, и всё!

Если речь идет о 2D, полностью согласен... А если 3D? и начение Z нужно умножить на -1?

(изменено: Александр Ривилис, 21 марта 2011г. 18:40:04)

Re: Поменять значения X Y местами Z * (-1) у выбранных примитивов

А ведь Disney похоже прав. Попробуй команду: _MIRROR3D. Точнее последовательность _MIRROR и _MIRROR3D. Первую команду относительно точек 0,0,0 100,100,0 Вторую команду относительно полилинии с координатами 0,0,0 100,100,0

(изменено: Disney, 22 марта 2011г. 07:07:51)

Re: Поменять значения X Y местами Z * (-1) у выбранных примитивов

Александр Ривилис пишет:

Первую команду относительно точек 0,0,0 100,100,0

Ага, я по началу тоже так написал, а AutoCAD мне:
Неверная 2D точка.

Re: Поменять значения X Y местами Z * (-1) у выбранных примитивов

Александр Ривилис пишет:

последовательность _MIRROR и _MIRROR3D

Точно, я когда пробовал, сразу исходному задал отрицательную Z, а пока отражал забыл, вот и показалось, что и одного _MIRROR хватит, хотя это даже не логично.
Если взять за основу код, уважаемого Fixo, то получиться вот так:

(defun C:rep_x_y_inv_Z (/       adoc      axss     fixp
            fx       fy      ll     locked
            locked lpts      ss temp
           )
  ;;fixo () 2008 © 
  (vl-load-com)
  (setq    adoc (vla-get-activedocument
           (vlax-get-acad-object)
         )
  )
  (vlax-for lay    (vla-get-layers adoc)
    (if    (eq (vla-get-lock lay) :vlax-true)
      (progn
    (setq locked
           (cons (vla-get-name lay) locked)
    )
    (vla-put-lock lay :vlax-false)
      )
    )
  )
  (setq ss (ssget))
  (setq axss (vla-get-activeselectionset adoc))

  (vlax-for a axss
    (setq temp (vla-Mirror
         a
         (vlax-3d-point '(0 0))
         (vlax-3d-point '(1 1))
           )
    )
    (vla-Mirror3D
      temp
      (vlax-3d-point '(0 0))
      (vlax-3d-point '(0 1))
      (vlax-3d-point '(1 0))
    )
    (vla-delete a)
    (vla-delete temp)
  )

  (if locked
    (foreach x locked
      (vla-put-lock
    (vla-item (vla-get-layers adoc) x)
    :vlax-true
      )
    )
  )
  (princ)
)

Re: Поменять значения X Y местами Z * (-1) у выбранных примитивов

Ну вооооот! Работает! Спасибо Disney, fixo, Александр Ривилис!