Координаты и оси
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Координаты и оси

Координаты и оси

Ответ
Поиск в этой теме
Непрочитано 07.02.2007, 12:52 #1
Координаты и оси
tanushka_ch
 
Moscow
Регистрация: 01.11.2006
Сообщений: 40

заранее извините, если глупость спрашиваю: есть много точек (блоков) с координатами и высотами, необходимо у всех поменять Х и У местами.

и еще: необходимо поменять оси Х и У местами, я спрашиваю не о повороте ПСК, не смещении, не о изменении вида, а именно как поменять
Просмотров: 3373
 
Непрочитано 07.02.2007, 12:53
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Первое еще решаемо лиспом, но вот второе - уже мимо. В среде AutoCAD (насколько я знаю) такое нереально.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.02.2007, 13:00
#3
tanushka_ch


 
Регистрация: 01.11.2006
Moscow
Сообщений: 40


каким лиспом? где найти подскажи плиз
tanushka_ch вне форума  
 
Непрочитано 07.02.2007, 13:08
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Где искать - не знаю. Мне проще самому написать К примеру, нечто типа:
Код:
[Выделить все]
(defun c:chblk (/ adoc _kpblc-ent-modify-autoregen selset tmp)

;;;;|=============================================================================
;;;*** Компонент интегрированной системы CADWare
;;;*******************************************************************************
;;;*** Автор системы: Кулик Алексей aka kpblc
;;;*** www: www.my.opera.com\kpblc\
;;;*** При разработке системы были использованы материалы:
;;;*   ruCAD (www.kurganobl.ru)
;;;*   "САПР на базе AutoCAD - как это делается", авторы Зуев С.А., Полещук Н.Н.
;;;*      при участии Лоскутова П.В.
;;;*   конференций www.dwg.ru; www.autocad.ru; www.arcada.com.ua;
;;;*      www.thswamp.com; www.cadtutor.net; www.forums.augi.com
;;;*** Автор выражает самую искреннюю благодарность всем, принимавшим участие в
;;;*** разработке системы.
;;;*******************************************************************************
;;;*** Разрешено использование компонента в любых целях при указании автора и при
;;;*** условии поставки этой части с исходными текстами
;;;*******************************************************************************
;;;
;;;*    Функция модификации указанного бита примитива
;;;*    Параметры вызова:
;;;*   entity   - примитив, полученный через (entsel), (entlast) etc
;;;*   bit   - dxf-код, значение которого надо установить
;;;*   value   - новое значение
;;;*   regen   - выполнять или нет регенерацию примитива сразу. t/ nil
;;;*    Примеры вызова:
;;;(_kpblc-ent-modify-autoregen (entlast) 8 "0" t)   ; перенести последний примитив на слой 0
;;;(_kpblc-ent-modify-autoregen (entsel) 62 10 nil)   ; установить выбранному примитиву цвет 10
;;;*    Возвращаемое значение:
;;;*   примитив с модифицированным dxf-списком. Примитив перерисовывается в
;;;* зависимости от значения ключа ext_regen
;;;=============================================================================|;
  (defun _kpblc-ent-modify-autoregen (ent        bit        value
                                      ext_regen  /          ent_list
                                      old_dxf    new_dxf    layer_dxf70
                                      )
    (setq ent ent)
    (if (not
          (and
            (or
              (= (strcase (cdr (assoc 0 (entget ent))) nil) "STYLE")
              (= (strcase (cdr (assoc 0 (entget ent))) nil) "DIMSTYLE")
              (= (strcase (cdr (assoc 0 (entget ent))) nil) "LAYER")
              ) ;_ end of or
            (= bit 100)
            ) ;_ end of and
          ) ;_ end of not
      (progn
        (setq ent_list (entget ent)
              new_dxf  (cons bit
                             (if (and (= bit 62) (= (type value) 'str))
                               (if (= (strcase value) "BYLAYER")
                                 256
                                 0
                                 ) ;_ end of if
                               value
                               ) ;_ end of if
                             ) ;_ end of cons
              ) ;_ end of setq
        (if (not (equal new_dxf (setq old_dxf (assoc bit ent_list))))
          (progn
            (entmod (if old_dxf
                      (subst new_dxf old_dxf ent_list)
                      (append ent_list (list new_dxf))
                      ) ;_ end of if
                    ) ;_ end of entmod
            (if ent_regen
              (entupd ent)
              (redraw ent)
              ) ;_ end of if
            ) ;_ end of progn
          ) ;_ end of if
        ) ;_ end of progn
      ) ;_ end of if
    ent
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-StartUndoMark
  (if (setq selset (ssget "_:L" '((0 . "INSERT"))))
    (foreach blk (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
      (if
        (not
          (cdr
            (assoc 1 (entget (tblobjname "block" (cdr (assoc 2 (entget blk))))))
            ) ;_ end of cdr
          ) ;_ end of not
         (vl-catch-all-apply
           '(lambda ()
              (_kpblc-ent-modify-autoregen
                blk
                10
                (list (cadr (setq tmp (cdr (assoc 10 (entget blk)))))
                      (car tmp)
                      (caddr tmp)
                      ) ;_ end of list
                t
                ) ;_ end of _kpblc-ent-modify-autoregen
              ) ;_ 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
Предупреждаю сразу: я код не тестировал. Не обрабатываются блоки, лежащие на заблокированных слоях. Не обрабатываются внешние ссылки. Скорее всего, activex-решение будет более быстрым (хотя не факт). Меняются только координаты х и у блока. z не меняется. Вложенные блоки не обрабатываются.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.02.2007, 13:44
#5
den001

Инженер по автоматизации (строительство)
 
Регистрация: 05.05.2006
Люберцы
Сообщений: 241


Та же фигня на VBA (мало ли, пригодится)
Код:
[Выделить все]
Sub ChangeXY(ByRef Point As ACAD_POINT)
    tmp = Point(0)
    Point(0) = Point(1): Point(1) = tmp
End Sub
Sub BlocksTransform()
    Dim Ent As AcadEntity, BlRef As AcadBlockReference, pnt As ACAD_POINT
    For Each Ent In ThisDrawing.ModelSpace
        If Ent.ObjectName = "AcDbBlockReference" Then
            Set BlRef = Ent
            pnt = BlRef.InsertionPoint
            ChangeXY pnt
            BlRef.InsertionPoint = pnt
        End If
    Next
End Sub
Оговорки те же, плюс обрабатываются только блоки в пространстве модели.
den001 вне форума  
 
Непрочитано 07.02.2007, 13:50
#6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Не-а, чуть-чуть не те. Состояние слоев не отслеживается. Внешние ссылки (по-моему) имеют то же имя, что и блоки. Так что и тут возможны варианты.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.02.2007, 13:55
#7
tanushka_ch


 
Регистрация: 01.11.2006
Moscow
Сообщений: 40


Кулик Алексей aka kpblc, сохранила то, что ты написал, как файл лисп, а как его запустить? APPLOAD сделала. как с командной строки вызвать теперь?
tanushka_ch вне форума  
 
Непрочитано 07.02.2007, 14:07
#8
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


chblk
По вопросу сохранения кода и запуска: http://www.autocad.ru/cgi-bin/f1/boa...part_faq=23#44
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.02.2007, 14:19
#9
den001

Инженер по автоматизации (строительство)
 
Регистрация: 05.05.2006
Люберцы
Сообщений: 241


Ну да, со слоями и хрефами не морочился. Да это я так, до кучи. VBA-решения вообще меньшим спросом пользуются.
den001 вне форума  
 
Непрочитано 07.02.2007, 14:23
#10
Zouss


 
Регистрация: 14.03.2006
Сообщений: 863


а можно спросить с какой целью нужно менять Х и Y местами?
(кстати мне приходится периодически ваять в премерзкой проге К3, так там система координат как раз такая - левая
Zouss вне форума  
 
Автор темы   Непрочитано 07.02.2007, 14:27
#11
tanushka_ch


 
Регистрация: 01.11.2006
Moscow
Сообщений: 40


Цитата:
Сообщение от Кулик Алексей aka kpblc
chblk
По вопросу сохранения кода и запуска: http://www.autocad.ru/cgi-bin/f1/boa...part_faq=23#44
сохранила, путь прописала, команду в строке набрала, блок выбрала... и что? опять пишет: [img][/img]
[ATTACH]1170847660.jpg[/ATTACH]
tanushka_ch вне форума  
 
Автор темы   Непрочитано 07.02.2007, 14:28
#12
tanushka_ch


 
Регистрация: 01.11.2006
Moscow
Сообщений: 40


только блок у меня динамический. это как, ничего?
на всякий случай сам файл
[ATTACH]1170847793.dwg[/ATTACH]
tanushka_ch вне форума  
 
Автор темы   Непрочитано 07.02.2007, 14:36
#13
tanushka_ch


 
Регистрация: 01.11.2006
Moscow
Сообщений: 40


Цитата:
Сообщение от Zouss
а можно спросить с какой целью нужно менять Х и Y местами?
(кстати мне приходится периодически ваять в премерзкой проге К3, так там система координат как раз такая - левая
эххх... http://geonet.nm.ru/3601.htm - вот что у тебя

а про менять - это я так, может кто знает.
tanushka_ch вне форума  
 
Непрочитано 07.02.2007, 15:01
#14
den001

Инженер по автоматизации (строительство)
 
Регистрация: 05.05.2006
Люберцы
Сообщений: 241


tanushka_ch
Загрузите прилагаемый dvb-файл, нажмите Alt+F8 -> BlockTransform -> Выполнить
[ATTACH]1170849677.rar[/ATTACH]
den001 вне форума  
 
Автор темы   Непрочитано 07.02.2007, 15:15
#15
tanushka_ch


 
Регистрация: 01.11.2006
Moscow
Сообщений: 40


Цитата:
Сообщение от den001
tanushka_ch
Загрузите прилагаемый dvb-файл, нажмите Alt+F8 -> BlockTransform -> Выполнить

Получилось
спасибо
tanushka_ch вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Координаты и оси