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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Базовая точка существующего блока

Базовая точка существующего блока

Ответ
Поиск в этой теме
Непрочитано 04.06.2009, 09:34 #1
Базовая точка существующего блока
Рин
 
Проектируем
 
Sever Kavkaza
Регистрация: 03.04.2008
Сообщений: 122

Привет всем!!! Как можно поменять базовую точку существующего блока... и чтобы после редактирования эти блоки остались на прежних местах на чертеже.
Просмотров: 45255
 
Непрочитано 04.06.2009, 09:39
#2
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,692


Цитата:
Сообщение от Рин Посмотреть сообщение
Привет всем!!! Как можно поменять базовую точку существующего блока... и чтобы после редактирования эти блоки остались на прежних местах на чертеже.
По моему, это вещи взаимоисключающие... Поменял точку вставки, блоки переместились автоматически..
А поменять можно - или разбить блок и переопределить с новой точкой вставки, или в редакторе блоков переместить все объекты (там точка 0,0,0 - точка вставки), или вставить в блок параметр "базовая точка".
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Автор темы   Непрочитано 04.06.2009, 09:48
#3
Рин

Проектируем
 
Регистрация: 03.04.2008
Sever Kavkaza
Сообщений: 122


AlexV спасибр за ответ... так у меня всё и получилось, т.е. после переопределения баз точки через редактор блоков блоки улетают по всему чертежу...

Я это затеял: так как если баз. точка не лежит на объекте то блок нельзя переносить командой _stretch. Может есть какое-то другое решение моей проблемы
Рин вне форума  
 
Непрочитано 04.06.2009, 10:04
#4
AlphaGeo


 
Сообщений: n/a


Рин, можно определить разницу координат базовой точки до и после перемещения.После редактирования блока просто выбрать с помощью _QSELECT (БВЫБОР) все вхождения этого блока и переместить их на смещение базовой точки относительно объектов блока только с обратным знаком.
 
 
Непрочитано 04.06.2009, 10:15
#5
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,917
<phrase 1=


Чертишь линию от старой базовой точки к предполагаемой новой. Меняешь блок, выбираешь и переносишь.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Автор темы   Непрочитано 04.06.2009, 10:45
#6
Рин

Проектируем
 
Регистрация: 03.04.2008
Sever Kavkaza
Сообщений: 122


to zenon и AlphaGeo у меня блоков на чертеже более 100 и каждый блок разноудалён от начала координат, поэтому предложенные вами варианты не подходят
Рин вне форума  
 
Непрочитано 04.06.2009, 11:12
#7
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,692


Открываешь блок в редакторе, чертишь линию от 0,0,0 до той точки, которая должна стать новой точкой вставки, затем перемещаешь все объекты блока, кроме линии, закрываешь редактор. Выбираешь через qselect все блоки и перемещаешь их по той линии. Открываешь блок снова в редакторе, линию удаляешь..
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Автор темы   Непрочитано 04.06.2009, 12:16
#8
Рин

Проектируем
 
Регистрация: 03.04.2008
Sever Kavkaza
Сообщений: 122


Спасибо всем большое - разобрался.... Много дельно но всетаки...
Рин вне форума  
 
Непрочитано 04.06.2009, 12:20
#9
AlphaGeo


 
Сообщений: n/a


Цитата:
Сообщение от Рин Посмотреть сообщение
у меня блоков на чертеже более 100 и каждый блок разноудалён от начала координат, поэтому предложенные вами варианты не подходят
А чтобы такого не было, лучше сначала немножко подумать, а потом приниматься за работу.
Сам через такие ляпы проходил. Все эти методы исправления на "как надо" всегда многодельны.
 
 
Автор темы   Непрочитано 04.06.2009, 12:25
#10
Рин

Проектируем
 
Регистрация: 03.04.2008
Sever Kavkaza
Сообщений: 122


Цитата:
Сообщение от AlphaGeo Посмотреть сообщение
А чтобы такого не было, лучше сначала немножко подумать, а потом приниматься за работу.
Сам через такие ляпы проходил. Все эти методы исправления на "как надо" всегда многодельны.
Спасибо за совет, сам-то я через это давно прошел (я про базовую точку), в данное время сижу по чужим чертежам делаю перепланировку "поплевался", что делать... благо есть добрые люди на этом форуме.
Рин вне форума  
 
Непрочитано 04.06.2009, 23:31
#11
ssn

Инженер проектировщик (раздел ТМ - фриланс)
 
Регистрация: 06.12.2003
Геленджик
Сообщений: 1,783
Отправить сообщение для ssn с помощью Skype™


а разве не было в эксперсах такой команды? или приснилось чего мне...
по моему была такая штука...
ssn вне форума  
 
Непрочитано 05.01.2010, 22:46
#12
Денис Флюстиков


 
Регистрация: 20.07.2005
СПб
Сообщений: 89


Поиск готовых решений не дал, накатал LISP-программку:

Код:
[Выделить все]
;|=============================================

Изменение базовой точки блока

Программа Дениса Флюстикова "bBlock_Den"

Макрос для кнопки:
^C^C^P(load "bBlock_Den");bBlock_Den

Замечания и предложения по адресу fd-@mail.ru
===============================================|;

(defun C:bBlock_Den (/ aa0 aa1 aa2 aa3 aa4 aa5 aa6)

(setq aa4 nil)

(while (null aa4)

(if (setq aa1 (entsel "\nВыберите блок:"))(progn
(setq aa1 (car aa1)
      aa2 (entget aa1))

(if (= (cdr (assoc 0 aa2)) "INSERT")
(if (wcmatch (setq aa3 (cdr (assoc 2 aa2))) "`**")
(princ "\nПрограмма не работает с неименованными блоками")
(setq aa6 (list (cdr (assoc 41 aa2))
		(cdr (assoc 42 aa2))
		(cdr (assoc 43 aa2)))
      aa4 (cdr (assoc 50 aa2))
      aa2 (cdr (assoc 10 aa2)))
)
(princ "\nБлок не выбран")
)
))
)

(if aa3 (progn
(setq aa0 (getpoint "\nНовая базовая точка:")
      aa4 (- (angle aa0 aa2) aa4)
      aa2 (polar '(0 0 0) aa4 (distance aa2 aa0))
      aa2 (mapcar '/ aa2 aa6))

(setvar "CMDECHO" 0)
(command "_.undo" "_g"
	 "_.-bedit" aa3
	 "_.move" (ssget "_A") "" '(0 0 0) aa2
	 "_.bclose" "_s")

(setq aa1 (ssget "_A" (list (cons 0 "INSERT")(cons 2 aa3))))

(repeat (setq aa3 (sslength aa1))

(setq aa3 (1- aa3)
      aa4 (ssname aa1 aa3)
      aa6 (entget aa4)
      aa0 (list (cdr (assoc 41 aa6))
		(cdr (assoc 42 aa6))
		(cdr (assoc 43 aa6)))
      aa5 (cdr (assoc 50 aa6))
      aa6 (cdr (assoc 8 aa6))
      aa0 (mapcar '* aa0 aa2)
      aa5 (+ (angle aa0 '(0 0 0)) aa5)
      aa5 (polar '(0 0 0) aa5 (distance aa0 '(0 0 0))))

(if (= (cdr (assoc 70 (tblsearch "Layer" aa6))) 4)
(command "_.'layer" "_u" aa6 "")
(setq aa6 nil)
)

(command "_.move" aa4 "" '(0 0 0) aa5)

(if aa6
(command "_.'layer" "_lo" aa6 "")
)

)

(command "_.undo" "_e")
(setvar "CMDECHO" 1)

))

(princ)
)
Денис Флюстиков вне форума  
 
Непрочитано 09.01.2010, 19:50
#13
Денис Флюстиков


 
Регистрация: 20.07.2005
СПб
Сообщений: 89


Чуть подправил код
Код:
[Выделить все]
;|====================================================

Изменение базовой точки блока

Программа Дениса Флюстикова "bBlock_Den" от 09.01.10:
обновление атрибутов после преобразования блока

Макрос для кнопки:
^C^C^P(load "bBlock_Den");bBlock_Den

Замечания и предложения по адресу fd-@mail.ru
====================================================|;

(defun C:bBlock_Den (/ aa0 aa1 aa2 aa3 aa4 aa5 aa6)

(if (setq aa1 (ssget "_I" '((0 . "INSERT"))))
(if (= (sslength aa1) 1)
(setq aa1 (ssname aa1 0)
      aa2 (entget aa1))
(setq aa1 nil)
))
(sssetfirst nil)

(while (null aa1)

(if (setq aa1 (entsel "\nВыберите блок:"))(progn
(setq aa1 (car aa1)
      aa2 (entget aa1))

(if (/= (cdr (assoc 0 aa2)) "INSERT")(progn
(princ "\nБлок не выбран")
(setq aa1 nil)
))
))
)

(if (wcmatch (setq aa3 (cdr (assoc 2 aa2))) "`**")
(princ "\nПрограмма не работает с неименованными блоками")(progn

(setq aa6 (list (cdr (assoc 41 aa2))
		(cdr (assoc 42 aa2))
		(cdr (assoc 43 aa2)))
      aa4 (cdr (assoc 50 aa2))
      aa2 (cdr (assoc 10 aa2))
      aa2 (trans aa2 0 1)
      aa0 (getpoint "\nНовая базовая точка:")
      aa4 (- (angle aa0 aa2) aa4)
      aa2 (polar '(0 0 0) aa4 (distance aa2 aa0))
      aa2 (mapcar '/ aa2 aa6))

(setvar "CMDECHO" 0)
(command "_.undo" "_g"
	 "_.-bedit" aa3
	 "_.move" (ssget "_A") "" "_none" '(0 0 0) "_none" aa2
	 "_.bclose" "_s")

(setq aa1 (ssget "_A" (list (cons 0 "INSERT")(cons 2 aa3))))

(repeat (setq aa3 (sslength aa1))

(setq aa3 (1- aa3)
      aa6 (entget (ssname aa1 aa3))
      aa0 (list (cdr (assoc 41 aa6))
		(cdr (assoc 42 aa6))
		(cdr (assoc 43 aa6)))
      aa5 (cdr (assoc 50 aa6))
      aa4 (assoc 10 aa6)
      aa0 (mapcar '* aa0 aa2)
      aa5 (+ (angle aa0 '(0 0 0)) aa5)
      aa5 (polar (cdr aa4) aa5 (distance aa0 '(0 0 0)))
      aa6 (subst (cons 10 aa5) aa4 aa6)
      aa4 (cdr (assoc 8 aa6)))

(if (= (cdr (assoc 70 (tblsearch "Layer" aa4))) 4)
(command "_.'layer" "_u" aa4 "")
(setq aa4 nil)
)

(entmod aa6)

(if aa4 (command "_.'layer" "_lo" aa4 ""))

)

(if (= (cdr (assoc 66 aa6)) 1)
(command "_.attsync" "_n" (cdr (assoc 2 aa6))))

(command "_.undo" "_e")
(setvar "CMDECHO" 1)

))
(princ)
)
Денис Флюстиков вне форума  
 
Непрочитано 11.01.2010, 14:27
#14
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Другой вариант:
  • Атрибуты остаются на местах
  • Без командных методов
  • С динамическими блоками "подружиться" не удалось
  • С обработкой нажатия "Esc"
  • "Дружит" с немировой системой координат
  • ...
Код:
[Выделить все]
(defun c:InsChange (/
      ent
      adoc
      blk_name
      new_pt
      move_vect
      tmp_move_vect
      attr_lst
      _dwgru-conv-pickset-to-list
      _dwgru-block-get-attr-by-mask
      _dwgru-conv-ent-to-vla
      _dwgru-conv-value-vla-to-list
      _dwgru-is-ent-block-reference
      _dwgru-property-get
      _dwgru-conv-value-to-list
      _dwgru-conv-vla-object-to-list
      _dwgru-conv-variant-to-list
      _dwgru-conv-safearray-to-list
     )
;;; ===========  _dwgru-conv-safearray-to-list =========================
;;; Преобразовывает vlax-safearray в обычный список
;;; value - безопасный массив (safearray)
;;; Возврат:
;;;;      - список значений
;;;;      - nil если не safearray
;;;; Пример
;;;;    (setq lst '(1 2 3))
;;;;    (setq lst1 (vlax-safearray-fill (vlax-make-safearray vlax-vbVariant (cons 0 (1- (length Lst))))Lst))
;;;  (_DWGRU-CONV-SAFEARRAY-TO-LIST Lst1) ;_ (1 2 3)
;;;  (_DWGRU-CONV-SAFEARRAY-TO-LIST "123") ;_ nil
  (defun _dwgru-conv-safearray-to-list (value)
    (if (= (type value) (quote safearray))
      (if (>= (vlax-safearray-get-u-bound value 1) 0)
 (mapcar (function (lambda (x)
       (if (= (type x) (quote variant))
         (vlax-variant-value x)
         x
       ) ;_ end of if
     ) ;_ end of lambda
  ) ;_ end of function
  (vlax-safearray->list value)
 ) ;_ end of mapcar
      ) ;_ end of if
    ) ;_ end of if
  ) ;_ end of defun
;;; ===========  _dwgru-conv-variant-to-list =========================
;;; Преобразовывает vlax-variant в обычный список
;;; value - variant массив
;;; Возврат:
;;;;      - список значений
;;;;      - nil если не variant
;;;; Пример
;;;;    (setq lst '(1 2 3))
;;;; (setq lst1 (vlax-make-variant (vlax-safearray-fill
;;;   (vlax-make-safearray vlax-vbVariant (cons 0 (1- (length Lst))))
;;;   '(1 2 3))))
;;;  (_DWGRU-CONV-VARIANT-TO-LIST Lst1) ;_ (1 2 3)
;;;  (_DWGRU-CONV-VARIANT-TO-LIST "123") ;_ nil
;;; (_dwgru-conv-variant-to-list (vlax-make-variant 1 vlax-vbInteger)) ;_ (1)
  (defun _dwgru-conv-variant-to-list (value / res)
    (if (= (type value) (quote variant))
      (if (= (type (setq res (vlax-variant-value value)))
      (quote safearray)
   ) ;_ end of =
 (_dwgru-conv-safearray-to-list res)
 (list res)
      ) ;_ end of if
    ) ;_ end of if
  ) ;_ end of defun

;;; ===========  _dwgru-conv-vla-object-to-list =========================
;;; Преобразовывает ... не могу сформулировать :(
;;; value - объект со свойством count
;;; Возврат:
;;;      - список vla-объектов 
;;;      - nil если не объект или нет сво-вы count
  (defun _dwgru-conv-vla-object-to-list (value / res)
    (if (and
   (= (type value) (quote vla-object))
   (vlax-property-available-p value (quote count))
   (> (vla-get-count value) 0)
 ) ;_ end of and
      (reverse (vlax-for item value (setq res (cons item res))))
    ) ;_ end of if
  ) ;_ end of defun
;;; ===========  _dwgru-conv-value-to-list =========================
;;; Функция - скелектор
;;; Преобразовывает значение value в список
;;; value - переменная autolisp
;;; Возврат:
;;;      - список (nil это тоже вписок)
;;;*    Примеры вызова:
  ;|
;; #1:
(setq point (vla-addpoint (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point '(10 20 30))))
(_dwgru-conv-value-to-list (vla-get-Coordinates point)) ; '(10 20 30)
;; #2:
(setq ent1 (vlax-ename->vla-object (entmakex '((0 . "LINE") (10 574.761 426.116 0.0) (11 1054.08 878.378 0.0))))
 ent2 (vlax-ename->vla-object (entmakex '((0 . "LINE") (10 967.833 561.795 0.0) (11 779.78 335.664 0.0)))))
(_dwgru-conv-value-to-list (vla-IntersectWith ent1 ent2 acExtendNone)) ; nil
(_dwgru-conv-value-to-list (vla-IntersectWith ent1 ent2 acExtendBoth)) ; '(1876.15 1654.04 0.0)
;; #3:
(_dwgru-conv-value-to-list "A") ;_ ("A")
|;
  (defun _dwgru-conv-value-to-list (value / itype)
    (setq itype (type value))
    (cond ((not itype) nil)
   ((= itype (quote list)) value)
   ((= itype (quote variant))
    (_dwgru-conv-variant-to-list value)
   )
   ((= itype (quote safearray))
    (_dwgru-conv-safearray-to-list value)
   )
   ((= itype (quote vla-object))
    (_dwgru-conv-vla-object-to-list value)
   )
   (t (list value))
    ) ;_ end of cond
  ) ;_ end of defun
  (defun _dwgru-property-get (obj prop)
        ;|
*    Получение значения свойства объекта.
*    Параметры вызова:
 obj указатель на объект. Допускается применение ename, vla, строки
  (в последнем случае воспринимается как хендл объекта)
 prop имя свойства. Может быть строкой или атомом
*    Возвращает значение указанного свойства. Если свойства у объекта нет,
* возвращает nil.
*    Примеры вызова:
(_dwgru-property-get (vla-get-ActiveDocument (vlax-get-acad-object)) 'activelayer)
 ; #<VLA-OBJECT IAcadLayer2 064b04e4>
(_DWGRU-PROPERTY-GET (vla-get-ActiveDocument (vlax-get-acad-object)) 'layer)
 ; nil
|;
    (if (and (setq obj (_dwgru-conv-ent-to-vla obj))
      (vlax-property-available-p obj prop)
 ) ;_ end of and
      (vlax-get-property obj prop)
    ) ;_ end of if
  ) ;_ end of defun
  (defun _dwgru-is-ent-block-reference (ent)
           ;|
*    Проверяет, является ли переданный примитив указателем на вхождение
* блока (BlockReference).
*    Параметры вызова:
 ent проверяемый примитив. Допустимые значения:
   ename
   vla-object
   string ; обрабатывается как хендл примитива
*    Возвращает t (объект - вхождение блока) или nil (любой иной объект)
*    Примеры вызова:
(_dwgru-is-ent-block-reference (car (entsel "\nУкажите любой объект : ")))
|;
    (and (= (_dwgru-property-get ent (quote objectname))
     "AcDbBlockReference"
  ) ;_ end of =
  (not (_dwgru-property-get ent (quote path)))
    ) ;_ end of and
  ) ;_ end of defun
  (defun _dwgru-conv-value-vla-to-list (value)
           ;|
*    Преобразование vlax-variant и vlax-safearray в обычный список.
*    Примеры вызова:
;; #1:
(setq point (vla-addpoint (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point (getpoint))))
(_dwgru-conv-value-vla-to-list (vla-get-Coordinates point)) ; '(1232.24 544.835 0.0)
;; #2:
(setq ent1 (vlax-ename->vla-object (entmakex '(list (0 . "LINE") (10 574.761 426.116 0.0) (11 1054.08 878.378 0.0))))
 ent2 (vlax-ename->vla-object (entmakex '((0 . "LINE") (10 967.833 561.795 0.0) (11 779.78 335.664 0.0)))))
(_dwgru-conv-value-vla-to-list (vla-IntersectWith ent1 ent2 acExtendNone)) ; nil
(_dwgru-conv-value-vla-to-list (vla-IntersectWith ent1 ent2 acExtendBoth)) ; '(1876.15 1654.04 0.0)
|;
    (cond
      ((= (type value) (quote variant))
       (_dwgru-conv-value-vla-to-list (vlax-variant-value value))
      )
      ((= (type value) (quote safearray))
       (if (>= (vlax-safearray-get-u-bound value 1) 0)
  (vlax-safearray->list value)
       ) ;_ end of if
      )
      (t value)
    ) ;_ end of cond
  ) ;_ end of defun
  (defun _dwgru-conv-ent-to-vla (ent)
    ;|
*    Выполняет преобразование переданного указателя в vlax-вариант
*    Параметры вызова:
 ent обрабатываемый указатель. Может быть:
   ename
   vla-object
   строка (воспринимается как хендл примитива).
*    Примеры вызова:
(setq entity (entmakex (list (cons 0 "POINT") (cons 10 (getpoint)))))
(_dwgru-conv-ent-to-vla entity) ; #<VLA-OBJECT IAcadPoint 064ad294>
|;
    (cond
      ((= (type ent) (quote vla-object)) ent)
      ((= (type ent) (quote ename)) (vlax-ename->vla-object ent))
      ;|
;; Оригинальный вариант:
((= (type ent) 'str) (vlax-ename->vla-object (handent ent)))
|;
      ;; Исправления Alaspher от 28.11.2007. Начало.
      ((= (type ent) (quote str))
       (if (setq ent (handent ent))
  (vlax-ename->vla-object ent)
       ) ;_ end of if
      )
      ;; Исправления Alaspher от 28.11.2007. Конец
      (t nil)
    ) ;_ end of cond
  ) ;_ end of defun
  (defun _dwgru-block-get-attr-by-mask (block-ref mask / res)
           ;|
*    Получение указателей на атрибуты вхождения блока
*    Параметры вызова:
 block-ref указатель на вхождение блока
 mask  маска тэга атрибута
 (_dwgru-block-get-attr-by-mask (car (entsel)) nil)
|;
    (if (not mask)
      (setq mask "*")
    ) ;_ end of if
    (if (_dwgru-is-ent-block-reference block-ref)
      (vl-remove-if-not
 (function
   (lambda (x)
     (or x
  (wcmatch (strcase (vla-get-tagstring x)) (strcase mask))
     ) ;_ end of or
   ) ;_ end of lambda
 ) ;_ end of function
 (apply
   (function append)
   (mapcar (function _dwgru-conv-value-to-list)
    (list
      (vla-getattributes
        (setq block-ref (_dwgru-conv-ent-to-vla block-ref))
      ) ;_ end of vla-GetAttributes
      (vla-getconstantattributes block-ref)
    ) ;_ end of append
   ) ;_ end of mapcar
 ) ;_ end of apply
      ) ;_ end of vl-remove
    ) ;_ end of if
  ) ;_ end of defun
  (defun _dwgru-conv-pickset-to-list (value / tab item)
    (repeat (setq tab  nil
    item (sslength value)
     ) ;_ end setq
      (setq tab (cons (ssname value (setq item (1- item))) tab))
    ) ;_ end repeat
  ) ;_ end defun
  (vl-load-com)
  (vla-StartUndoMark
    (setq adoc (vla-get-ActiveDocument (vlax-get-acad-object)))
  ) ;_ end of vla-StartUndoMark
  (cond
    ((vl-catch-all-error-p
       (while (not ent)
  (prompt "\nВыберите блок:")
  (setq ent
  (vl-catch-all-apply
    (function (lambda () (ssget "_:S" (quote ((0 . "INSERT")))))
    ) ;_ end of function
  ) ;_ end of vl-catch-all-apply
  ) ;_ end of setq
       ) ;_ end of while
     ) ;_ end of vl-catch-all-error-p
     (prompt "\nПрервано пользователем!")
    )
    ((wcmatch (vl-princ-to-string
  (setq ent (_dwgru-conv-ent-to-vla (ssname ent 0)))
       ) ;_ end of vl-princ-to-string
       "*IAcadExternalReference*"
     ) ;_ end of wcmatch
     (prompt "\nВнешние ссылки не обрабатываются!")
    )
    ((wcmatch (setq blk_name (_dwgru-property-get ent (quote Name)))
       "`*U#*"
     ) ;_ end of wcmatch
     (prompt
       "\nАнонимные и динамические блоки не обрабатываются!"
     ) ;_ end of prompt
    )
    ((vl-catch-all-error-p
       (setq new_pt
       (vl-catch-all-apply
  (function (lambda ()
       (initget 1)
       (getpoint "\nУкажите новую базовую точку:")
     ) ;_ end of lambda
  ) ;_ end of function
       ) ;_ end of vl-catch-all-apply
       ) ;_ end of setq
     ) ;_ end of vl-catch-all-error-p
     (prompt "\nПрервано пользователем!")
    )
    (T
     (progn
       (setq
  blk_name  (_dwgru-property-get ent (quote EffectiveName))
  move_vect (mapcar
       (function -)
       (trans new_pt 1 0)
       (_dwgru-conv-value-vla-to-list
         (_dwgru-property-get ent (quote InsertionPoint))
       ) ;_ end of _dwgru-conv-value-vla-to-list
     ) ;_ end of mapcar
  move_vect (mapcar
       (function /)
       (polar (quote (0. 0. 0.))
       (- (angle (quote (0. 0. 0.)) move_vect)
          (_dwgru-property-get ent 'Rotation)
       ) ;_ end of -
       (distance move_vect (quote (0. 0. 0.)))
       ) ;_ end of polar
       (list
         (_dwgru-property-get ent (quote XScaleFactor))
         (_dwgru-property-get ent (quote YScaleFactor))
         (_dwgru-property-get ent (quote ZScaleFactor))
       ) ;_ end of list
     ) ;_ end of mapcar
       ) ;_ end of setq
       (vlax-for item
        (vla-item
   (_dwgru-property-get adoc (quote Blocks))
   (_dwgru-property-get ent (quote Name))
        ) ;_ end of vla-item
  (vla-move item
     (vlax-3d-point move_vect)
     (vlax-3d-point (quote (0. 0. 0.)))
  ) ;_ end of vla-move
       ) ;_ end of vlax-for
       (foreach
   blk
   (vl-remove-if-not
     (function
       (lambda (a)
         (= (_dwgru-property-get a (quote EffectiveName))
     blk_name
         ) ;_ end of =
       ) ;_ end of lambda
     ) ;_ end of function
     (_dwgru-conv-pickset-to-list
       (ssget "_X" (quote ((0 . "INSERT"))))
     ) ;_ end of _dwgru-conv-pickset-to-list
   ) ;_ end of vl-remove-if-not
  (setq tmp_move_vect
  (mapcar (function *)
   move_vect
   (list (_dwgru-property-get
    blk
    (quote XScaleFactor)
         ) ;_ end of _dwgru-property-get
         (_dwgru-property-get
    blk
    (quote YScaleFactor)
         ) ;_ end of _dwgru-property-get
         (_dwgru-property-get
    blk
    (quote ZScaleFactor)
         ) ;_ end of _dwgru-property-get
   ) ;_ end of list
  ) ;_ end of mapcar
  ) ;_ end of setq
  (vla-move
    (_dwgru-conv-ent-to-vla blk)
    (vlax-3d-point (quote (0. 0. 0.)))
    (vlax-3d-point
      (setq tmp_move_vect
      (polar
        (quote (0. 0. 0.))
        (+ (angle (quote (0. 0. 0.)) tmp_move_vect)
    (_dwgru-property-get blk (quote Rotation))
        ) ;_ end of +
        (distance (quote (0. 0. 0.)) tmp_move_vect)
      ) ;_ end of polar
      ) ;_ end of setq
    ) ;_ end of vlax-3d-point
  ) ;_ end of vla-move
  (if (setq attr_lst (_dwgru-block-get-attr-by-mask blk nil))
    (foreach
       attr
    attr_lst
      (vla-put-InsertionPoint
        attr
        (vlax-3d-point
   (mapcar
     (function -)
     (_dwgru-conv-value-vla-to-list
       (_dwgru-property-get attr (quote InsertionPoint))
     ) ;_ end of _dwgru-conv-value-vla-to-list
     tmp_move_vect
   ) ;_ end of mapcar
        ) ;_ end of vlax-3d-point
      ) ;_ end of vla-put-InsertionPoint
    ) ;_ end of foreach
  ) ;_ end of if
  (entupd blk)
       ) ;_ end of foreach
     ) ;_ end of progn
    )
  ) ;_ end of cond
  (vla-EndUndoMark adoc)
  (princ)
) ;_ end of defun

Последний раз редактировалось Do$, 11.01.2010 в 16:15. Причина: Довел до ума.
Do$ вне форума  
 
Непрочитано 30.03.2010, 14:52
#15
--Илья--


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


жаль, точка переносится только в плоскости (
--Илья-- вне форума  
 
Непрочитано 30.03.2010, 18:14
#16
vadim_evg1


 
Регистрация: 08.01.2007
Рус
Сообщений: 398


в Help-Paper есть вот такая функция:


Миниатюры
Нажмите на изображение для увеличения
Название: База.gif
Просмотров: 23615
Размер:	410.6 Кб
ID:	36373  
vadim_evg1 вне форума  
 
Непрочитано 30.03.2010, 21:22
#17
--Илья--


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


vadim_evg1, к сожалению, программа, которая показана на изображении отличается от той, что представлена в Help-Paper и там нет функции изменения базовой точки... может быть выложишь в обменник?
--Илья-- вне форума  
 
Непрочитано 30.03.2010, 21:51
1 | #18
vadim_evg1


 
Регистрация: 08.01.2007
Рус
Сообщений: 398


Дополнительное меню вызывается командой AD
почитай тут. п.67
vadim_evg1 вне форума  
 
Непрочитано 30.03.2010, 22:49
#19
--Илья--


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


Большое СПАСИБО!
--Илья-- вне форума  
 
Непрочитано 31.03.2010, 00:57
#20
Chapter

Инженер-проектировщик автомобильных дорог
 
Регистрация: 21.10.2009
Южно-Сахалинск
Сообщений: 245
<phrase 1=


Цитата:
Сообщение от vadim_evg1 Посмотреть сообщение
в Help-Paper есть вот такая функция:
Прикольная програмка
Chapter вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Базовая точка существующего блока



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Точка вставки блока Visla AutoCAD 14 03.05.2012 22:59
Изменение параметров дин блока ch-viktor Программирование 5 23.05.2008 21:38
добавление скрипта к вставке блока с палитры. TheBuTeK Программирование 13 17.10.2007 21:29
Базовая точка sheinik AutoCAD 6 20.06.2007 22:32
Точка вставки блока и маленький глюк Serzhio AutoCAD 2 21.04.2005 11:16