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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Змена блока на другой блок

Змена блока на другой блок

Ответ
Поиск в этой теме
Непрочитано 12.10.2005, 19:15
Змена блока на другой блок
ilka_t
 
Москва
Регистрация: 20.01.2004
Сообщений: 154

Может кто сможнт лиспик написать
как в одном чертеже заменить часть блоков (выбрав их) на другой блок.

Express не подходит т.к. он иеняет все блоки махом, а мне нужно не все, и заменяемые блоки могут быть с разным именем
Просмотров: 18413
 
Непрочитано 06.12.2005, 23:32
#21
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Цитата:
Сообщение от mitjaj
2fatty:
слегка обкатал, а к примеру чтоб эта штучка объекты мгла выделять рамкой или поочерёдно в набор и вставляемый блок указывать на экране возможно? брошу пиво, сяду за учебники
p.s. мутно понимаю что сей код заточен под конкретное условие
Небольшая доработка требуется
но неt времени попозже vернусь

Fatty
fixo вне форума  
 
Непрочитано 07.12.2005, 11:44
#22
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Цитата:
Сообщение от mitjaj
2fatty:
слегка обкатал, а к примеру чтоб эта штучка объекты мгла выделять рамкой или поочерёдно в набор и вставляемый блок указывать на экране возможно? брошу пиво, сяду за учебники
p.s. мутно понимаю что сей код заточен под конкретное условие
По просьбе трудящихся

Код:
[Выделить все]
(defun C:fbb (/ acsp adoc bname cent circ cpt
	      cset hatch_obj midp opt pt1 pt2 ss sset)
(vl-load-com)
(or adoc
    (setq adoc (vla-get-activedocument
(vlax-get-acad-object))))
(or acsp (setq acsp (if (= (getvar "CVPORT") 1)
(vla-get-paperspace
adoc)
(vla-get-modelspace
adoc)
)
)
    )
(vla-endundomark
  adoc)  
(vla-startundomark
  adoc)  
(while (or (not (setq sset (ssget  '((0 . "HATCH")))))
	   (not (setq hatch_obj (vlax-ename->vla-object (ssname sset 0))))))
(vla-highlight hatch_obj :vlax-true)  
(vla-getboundingbox hatch_obj 'pt1 'pt2)
(setq midp (vlax-3d-point (setq cent
	   (mapcar '* (mapcar '+
		(vlax-safearray->list pt1) 
                (vlax-safearray->list pt2))
		   '(0.5 0.5 0.5)))))

(vla-delete hatch_obj)
(vlax-release-object hatch_obj)
(if (setq cset (ssget "F" (list cent (getvar "vsmin"))'((0 . "CIRCLE"))))
(progn  
(setq circ (ssname cset 0))  
(vl-cmdf "erase" circ "")))  
(initget 1 "Insert Copy")
(setq opt (getkword (strcat "\n\tВыбрать метод клонирования объектов : \n"
		"\t[I]nsert - вставить блок или [C]opy - скопировать объект <C> : \n")))
(if (not opt)(setq opt "Copy"))
(if (eq opt "Copy")
(progn
(prompt "\n\t***\tВыбрать объекты на экране \t*** \n : ")  
(setq ss (ssget))  
(initget 1)
(setq cpt (getpoint "\n\t***\tЦентр выбранной группы объектов \t*** \n : "))
(vl-cmdf "copy" "P" "" cpt cent "")
(setq ss nil))
(progn
(setq bname (getstring "\n\t***\tУказать имя блока \t*** \n : "))
(if (tblsearch "block" bname)
(vla-Insertblock acsp  midp bname 1 1 1 0)
(alert "Нет такого блока!"))))    
(vla-endundomark
  adoc)
(vla-regen adoc acactiveviewport)
(princ)
)
(prompt "\n\t***\tВ командной строке ввести FBB  для выполнения\t*** \n : ")
fixo вне форума  
 
Непрочитано 07.12.2005, 12:52
#23
Dym


 
Регистрация: 27.09.2005
Двинскъ
Сообщений: 586
Отправить сообщение для Dym с помощью Skype™


2Fatty:
однако не работает
Dym вне форума  
 
Непрочитано 07.12.2005, 15:57
#24
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Цитата:
Сообщение от mitjaj
2Fatty:
однако не работает
Теперь будет (А2005)

Код:
[Выделить все]
(defun C:fbb (/ acsp adoc bname cent circ cpt
	      cset hatch_obj midp opt pt1 pt2 ss sset) 
(vl-load-com) 
(or adoc 
    (setq adoc (vla-get-activedocument 
(vlax-get-acad-object)))) 
(or acsp (setq acsp (if (= (getvar "CVPORT") 1) 
(vla-get-paperspace 
adoc) 
(vla-get-modelspace 
adoc) 
) 
) 
    ) 
(vla-endundomark 
  adoc)  
(vla-startundomark 
  adoc)
  (setvar "cmdecho" 0)
 (prompt "\n\t***\tВыбрать штриховку любым способом \t*** \n : ") 
(while (or (not (setq sset (ssget  '((0 . "HATCH"))))) 
      (not (setq hatch_obj (vlax-ename->vla-object (ssname sset 0)))))) 
(vla-highlight hatch_obj :vlax-true)  
(vla-getboundingbox hatch_obj 'pt1 'pt2) 
(setq midp (vlax-3d-point (setq cent 
      (mapcar '* (mapcar '+ 
      (vlax-safearray->list pt1) 
                (vlax-safearray->list pt2)) 
         '(0.5 0.5 0.5))))) 

(vla-delete hatch_obj) 
(vlax-release-object hatch_obj) 
(if (setq cset (ssget "F" (list cent (getvar "vsmin"))'((0 . "CIRCLE")))) 
(progn  
(setq circ (ssname cset 0))  
(vl-cmdf "erase" circ "")))  
(initget "Insert Copy") 
(setq opt (getkword (strcat "\n\tВыбрать метод клонирования объектов : \n" 
      "\t[I]nsert - вставить блок или [C]opy - скопировать объект <C> : \n"))) 
(if (not opt)(setq opt "Copy")) 
(if (eq opt "Copy") 
(progn 
(prompt "\n\t***\tВыбрать объекты на экране \t*** \n : ")
(setq ss (ssget))
(setvar "osmode" 0)
(initget 1) 
(setq cpt (getpoint "\n\t***\tЦентр выбранной группы объектов \t*** \n : "))
(command "copy" ss "" cpt cent) 
) 
(progn 
(setq bname (getstring "\n\t***\tУказать имя блока \t*** \n : ")) 
(if (tblsearch "block" bname) 
(vla-Insertblock acsp  midp bname 1 1 1 0) 
(alert "Нет такого блока!"))))
(setvar "osmode" 703)
(setvar "cmdecho" 1)
(vla-endundomark 
  adoc) 
(vla-regen adoc acactiveviewport) 
(princ) 
) 
(prompt "\n\t***\tВ командной строке ввести FBB  для выполнения\t*** \n : ")
fixo вне форума  
 
Непрочитано 08.12.2005, 00:20
#25
Dym


 
Регистрация: 27.09.2005
Двинскъ
Сообщений: 586
Отправить сообщение для Dym с помощью Skype™


ок, в целом чего хочеться:
модификацию кода FRTO ( by Smirnoff & drugi) тема-"Змена блока блоками" + кусок кода выбора группы заменяемых объектов как одно целое MROTATE CENTRER от krbIs(СПб)&drugi , тема - "Вращение множества объектов вокруг локальных центров". А как-нибудь потом найти способ выявления фрагментов документа тождественных выбранному.
А как-нибудь до этого толковый словарь LISPa и ещё на чем пишут письма ACADу
Dym вне форума  
 
Непрочитано 08.12.2005, 00:53
#26
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Цитата:
Сообщение от mitjaj
ок, в целом чего хочеться:
модификацию кода FRTO ( by Smirnoff & drugi) тема-"Змена блока блоками" + кусок кода выбора группы заменяемых объектов как одно целое MROTATE CENTRER от krbIs(СПб)&drugi , тема - "Вращение множества объектов вокруг локальных центров". А как-нибудь потом найти способ выявления фрагментов документа тождественных выбранному.
А как-нибудь до этого толковый словарь LISPa и ещё на чем пишут письма ACADу
Извини брат нет времени...
fixo вне форума  
 
Непрочитано 08.12.2005, 01:13
#27
Dym


 
Регистрация: 27.09.2005
Двинскъ
Сообщений: 586
Отправить сообщение для Dym с помощью Skype™


в этом понимаю я пока книжки поищу
Dym вне форума  
 
Непрочитано 08.12.2005, 05:10
#28
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Fatty,
Всем бы ваш прога была хороша, если бы не три "НО" - одно маленькое и, соот-но, вва больших. Маленькое состоит втом, чро мидп определено уж больно коряво. Первое большое "НО" - забор ваш уж больно велик, и нет гарантии, что вместе ц нужной окружностью он не подцепит какую-нить другую ненужную.
Второе большое "НО" - замена штриховок на наборы/блоки у вас производится по принципу "одна штриховка - один набор/блок". А ежели штриховок много, и всех их надо заменить одним и тем же набором/блоком? Неужто несчастному оператору мучиться, многожды повторяя одну и ту же замену? Негуманно это! Поетопму ниже предлагается вариант "набор штриховок - один набор/блок". Кроме того, поиск окружности производится не вылезая за границы ББ, и введена возможнось замены штриховок на блок, изначально отсутствующий в чертеже.
Выставляю творение свое на всеобщее осмеяние.
Код:
[Выделить все]
 (defun flt (typ)
  (list 
    (vlax-safearray-fill (vlax-make-safearray vlax-vbinteger '(0 . 0)) '(0)) 
    (vlax-safearray-fill (vlax-make-safearray vlax-vbvariant '(0 . 0)) (list typ)))
);ssel
;
(defun C:FBB (/ acsp adoc util bks sss css bname pts vpts ht cpt opt pt1 pt2) 
  (vl-load-com) 
  (setq om (getvar "OSMODE") cmd (getvar "CMDECHO") 
        adoc (vla-get-activedocument (vlax-get-acad-object)) 
        util (vla-get-utility adoc) 
        bks (vla-get-blocks adoc) 
        sss (vla-get-SelectionSets adoc))
  (setq css (mapcar '(lambda (x) (if (vl-catch-all-error-message (vl-catch-all-apply 'vla-add (list sss x))) 
         (vla-item sss x) (vla-add sss x))) (list "CSS1" "CSS2")))
  (mapcar '(lambda (x) (if (/= (vla-get-count x) 0) (vla-erase x))) css) 
  (vla-endundomark adoc) 
  (vla-startundomark adoc) 
  (setvar "cmdecho" 0) 
  (prompt "\n\t***\tSelect Hatches to Replace \t*** \n : ") 
  (vla-SelectOnScreen (car css) (car (flt "*Hatch")) (cadr (flt "*Hatch")))
  (setq acsp (vla-ObjectIDToObject adoc (vla-get-OwnerID (vla-item (car css) 0))))
  (vlax-for ht (car css)
    (vla-getboundingbox ht 'pt1 'pt2)
    (setq pts (mapcar 'vlax-safearray->list (list pt1 pt2))
          vpts (mapcar 'vlax-3d-point (list (car pts) (mapcar ' (lambda (x y)
            (* 0.5 (+ x y))) (car pts) (cadr pts))))
          lvpts (if (null lvpts) (list vpts) (cons vpts lvpts)))
    (vla-select (cadr css) acSelectionSetCrossing (car vpts) (cadr vpts) (car (flt "*Circle")) (cadr (flt "*Circle")))
    (vla-erase (cadr css)));vlax-for
  (vla-erase (car css))
  (vla-InitializeUserInput util 128 "Insert Copy") 
  (setq opt (vla-getKeyWord util (strcat "\nSelect Cloning Methode [Insert/Copy] <Copy> :"))) 
  (if (eq "" opt)(setq opt "Copy")) 
  (if (eq opt "Copy") 
    (progn (prompt "\n\t***\tSelect Objects \t*** \n : ") 
      (setvar "osmode" 0) 
      (vla-SelectOnScreen (car css)) 
      (vla-InitializeUserInput util 1) 
      (setq cpt (vla-getpoint util nil "\n\t***\tSelect Refernce Point \t*** \n : ")) 
      (foreach pt lvpts
        (vlax-for obj (car css) (vla-copy obj) (vla-move obj cpt (cadr pt)))));Copy
    (progn (vla-InitializeUserInput util 128 "Drawing File")
      (setq kword (vla-getKeyWord util "\nSelect Source Object from [Drawing/File]: ? <Drawing>")) 
      (if (eq "" kword) (setq kw "Drawing")) 
      (if (= kword "Drawing") (progn
          (setq bname (getstring T "\nEnter New Block's Name or <Enter> to Select: "))
          (if (= bname "") (progn (vla-getEntity util 'blk) (setq bname (vla-get-name blk))))));if
      (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list bks bname)))
        (setq bname (getfiled "Select Source File" "" "dwg" 8)));if
      (vla-delete (vla-insertBlock acsp (vlax-3d-point '(0.0 0.0 0.0)) bname 1 1 1 0 "X"))
      (foreach pt lvpts (vla-Insertblock acsp (cadr pt) bname 1 1 1 0))));if
  (setvar "OSMODE" om) (setvar "CMDECHO" cmd) 
  (vla-endundomark adoc) 
  (vla-regen adoc acactiveviewport) 
(princ) 
);end 
(prompt "\n\t***\tEnter FBB to execute\t*** \n : ")
Лентяй вне форума  
 
Непрочитано 08.12.2005, 13:24
#29
Dym


 
Регистрация: 27.09.2005
Двинскъ
Сообщений: 586
Отправить сообщение для Dym с помощью Skype™


не работает
и "набор штриховок - один набор/блок" всёж частный случай, лучше по Смирноффу "замена всего всем". чтоб для всех
а при попытке UNDO CAD2006 завис
Dym вне форума  
 
Непрочитано 09.12.2005, 03:50
#30
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Цитата:
не работает
Теперь работает. :!:
Код:
[Выделить все]
(defun *error* (msg)
  (if (= msg "Function cancelled") (princ msg)(princ));if
  (setvar "OSMODE" om) (setvar "CMDECHO" cmd) (mapcar 'vla-clear css)  
);*error*
;
(defun flt (typ) 
  (list 
    (vlax-safearray-fill (vlax-make-safearray vlax-vbinteger '(0 . 0)) '(0)) 
    (vlax-safearray-fill (vlax-make-safearray vlax-vbvariant '(0 . 0)) (list typ))) 
);flt
;
(defun C:FBB (/ acsp adoc util bks sss css bname pts vpts ht cpt opt pt1 pt2) 
  (vl-load-com) 
  (setq om (getvar "OSMODE") cmd (getvar "CMDECHO") 
             adoc (vla-get-activedocument (vlax-get-acad-object)) 
             util (vla-get-utility adoc) 
             bks (vla-get-blocks adoc) 
             sss (vla-get-SelectionSets adoc)
             css (mapcar '(lambda (x) (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list sss x)))
         (vla-add sss x) (vla-item sss x))) (list "CSS1" "CSS2")))
  (mapcar '(lambda (x) (if (/= (vla-get-count x) 0) (vla-clear x))) css) 
  (vla-endundomark adoc) 
  (vla-startundomark adoc) 
  (setvar "cmdecho" 0) 
  (prompt "\n\t***\tSelect Hatches to Replace \t*** \n : ") 
  (vla-SelectOnScreen (car css) (car (flt "*Hatch")) (cadr (flt "*Hatch"))) 
  (setq acsp (vla-ObjectIDToObject adoc (vla-get-OwnerID (vla-item (car css) 0)))) 
  (vlax-for ht (car css) 
    (vla-getboundingbox ht 'pt1 'pt2) 
    (setq pts (mapcar 'vlax-safearray->list (list pt1 pt2)) 
          vpts (mapcar 'vlax-3d-point (list (car pts) (mapcar ' (lambda (x y) 
            (* 0.5 (+ x y))) (car pts) (cadr pts)))) 
          lvpts (if (null lvpts) (list vpts) (cons vpts lvpts))) 
    (vla-select (cadr css) acSelectionSetCrossing (car vpts) (cadr vpts) (car (flt "*Circle")) (cadr (flt "*Circle"))) 
    (vla-erase (cadr css)));vlax-for 
  (vla-erase (car css)) 
  (vla-InitializeUserInput util 128 "Insert Copy") 
  (setq opt (vla-getKeyWord util (strcat "\nSelect Cloning Methode [Insert/Copy] <Copy> :"))) 
  (if (eq "" opt)(setq opt "Copy")) 
  (if (eq opt "Copy") 
    (progn (prompt "\n\t***\tSelect Objects \t*** \n : ") 
      (setvar "osmode" 0) 
      (vla-SelectOnScreen (car css)) 
      (vla-InitializeUserInput util 1) 
      (setq cpt (vla-getpoint util nil "\n\t***\tSelect Refernce Point \t*** \n : ")) 
      (foreach pt lvpts 
        (vlax-for obj (car css)  (vla-move (vla-copy obj) cpt (cadr pt)))));Copy 
    (progn (vla-InitializeUserInput util 128 "Drawing File") 
      (setq kword (vla-getKeyWord util "\nSelect Source Object from [Drawing/File]: ? <Drawing>")) 
      (if (eq "" kword) (setq kword "Drawing")) 
      (if (= kword "Drawing") (progn 
          (setq bname (getstring T "\nEnter New Block's Name or <Enter> to Select: ")) 
          (if (= bname "") (progn (vla-getEntity util 'blk nil) (setq bname (vla-get-name blk))))));if 
      (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list bks bname))) 
        (setq bname (getfiled "Select Source File" "" "dwg" 8)));if 
      (vla-delete (vla-insertBlock acsp (vlax-3d-point '(0.0 0.0 0.0)) bname 1 1 1 0 "X")) 
      (foreach pt lvpts (vla-Insertblock acsp (cadr pt) bname 1 1 1 0))));if 
  (setvar "OSMODE" om) (setvar "CMDECHO" cmd)
  (vla-endundomark adoc) 
  (vla-regen adoc acactiveviewport)
  (princ) 
);end 
(prompt "\n\t***\tEnter FBB to execute\t*** \n : ")
Цитата:
и "набор штриховок - один набор/блок" всёж частный случай, лучше по Смирноффу "замена всего всем"
Всего всем - не бывает, пoтому как неизвесто кого кем и что чем. У Fatty надо выбирать по системе "один на один". Моя программа предоставит тебе такую возможность, если тебе, конечно, не лень.
Цитата:
а при попытке UNDO CAD2006 завис
Это он по злобЕ. :evil:
Лентяй вне форума  
 
Непрочитано 09.12.2005, 09:34
#31
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Цитата:
а при попытке UNDO CAD2006 завис

Это он по злобЕ.
Ага, на тебя разозлился . А я думаю что пользователь прервал выполнение программы и (vla-StartUndoMark осталось без (vla-EndUndoMark, а на это он всегда очень злится :evil: при попытке Undo. Однако в *error* это надо предусматривать.
{Smirnoff} вне форума  
 
Непрочитано 09.12.2005, 17:37
#32
Dym


 
Регистрация: 27.09.2005
Двинскъ
Сообщений: 586
Отправить сообщение для Dym с помощью Skype™


ну команду я вообще-то не прерывал, понимаю так что она вылетала в непредусмотренной ситуации. в этой точке попытка UNDO и вешала кад до рестарта. и похоже я плохо донёс суть нужнаго
в файлике из жизни блоки стоят напротив "значков" которые надо заменить по принципу - выделяется "значок", указывается на экране блок, стирается "значок" и на его место ложится блок. Будь эти значки на отдельном слое я б не парился накопировать поверх своих блоков и "значки" разом стереть, дык они то в "0" то в "стенах" то "ещё где"
[ATTACH]1134139076.dwg[/ATTACH]
Dym вне форума  
 
Непрочитано 12.12.2005, 12:05
#33
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Цитата:
в файлике из жизни блоки стоят напротив "значков" которые надо заменить по принципу - выделяется "значок", указывается на экране блок, стирается "значок" и на его место ложится блок
Ну дык в чем проблема-то :?: Запускаешь прогу и вперед. не забудь только отчитатся о проделанной работе.
Лентяй вне форума  
 
Непрочитано 12.12.2005, 13:57
#34
Dym


 
Регистрация: 27.09.2005
Двинскъ
Сообщений: 586
Отправить сообщение для Dym с помощью Skype™


проблема в том ,что значки разные и блоки разные и не обнуляются результаты предидущего использования команды. попробуй сделать замены в файлике..
Dym вне форума  
 
Непрочитано 12.12.2005, 22:25
#35
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Цитата:
проблема в том ,что значки разные и блоки разные
ЕМНИП, все значки были определены как заштрихованнуе окружности. Прога откликается на неазависимуе штриховки, а не на штриховки в составе блоков. Сталыть, проверь значки на вшивость.
Цитата:
не обнуляются результаты предидущего использования команды
Не понял, кто не обнуляется - набор удаляемых окружностей/штриховок или копируемый набор?
Лентяй вне форума  
 
Непрочитано 13.12.2005, 03:13
#36
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Расобрался, тепeрь все "обнуляется". И ведь дело-то было всего в одной букве... Абыдна, да-а-а :?:
Код:
[Выделить все]
(defun *error* (msg) 
  (if (= msg "Function cancelled") (princ msg)(princ));if 
  (setvar "OSMODE" om) (setvar "CMDECHO" cmd) (mapcar 'vla-clear css)  
);*error* 
; 
(defun flt (typ) 
  (list 
    (vlax-safearray-fill (vlax-make-safearray vlax-vbinteger '(0 . 0)) '(0)) 
    (vlax-safearray-fill (vlax-make-safearray vlax-vbvariant '(0 . 0)) (list typ))) 
);flt 
; 
(defun C:FBB (/ acsp adoc util bks sss css bname pts vpts lvpts ht cpt opt pt1 pt2) 
  (vl-load-com) 
  (setq om (getvar "OSMODE") cmd (getvar "CMDECHO") 
        adoc (vla-get-activedocument (vlax-get-acad-object)) 
        util (vla-get-utility adoc) 
        bks (vla-get-blocks adoc) 
        sss (vla-get-SelectionSets adoc) 
        css (mapcar '(lambda (x) (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list sss x))) 
         (vla-add sss x) (vla-item sss x))) (list "CSS1" "CSS2"))) 
  (mapcar '(lambda (x) (if (/= (vla-get-count x) 0) (vla-clear x))) css) 
  (vla-endundomark adoc) 
  (vla-startundomark adoc) 
  (setvar "cmdecho" 0) 
  (prompt "\n\t***\tSelect Hatches to Replace \t*** \n : ") 
  (vla-SelectOnScreen (car css) (car (flt "*Hatch")) (cadr (flt "*Hatch"))) 
  (setq acsp (vla-ObjectIDToObject adoc (vla-get-OwnerID (vla-item (car css) 0)))) 
  (vlax-for ht (car css) 
    (vla-getboundingbox ht 'pt1 'pt2) 
    (setq pts (mapcar 'vlax-safearray->list (list pt1 pt2)) 
          vpts (mapcar 'vlax-3d-point (list (car pts) (mapcar ' (lambda (x y) 
            (* 0.5 (+ x y))) (car pts) (cadr pts)))) 
          lvpts (if (null lvpts) (list vpts) (cons vpts lvpts))) 
    (vla-select (cadr css) acSelectionSetCrossing (car vpts) (cadr vpts) (car (flt "*Circle")) (cadr (flt "*Circle"))) 
    (vla-erase (cadr css)));vlax-for 
  (vla-erase (car css)) 
  (vla-InitializeUserInput util 128 "Insert Copy") 
  (setq opt (vla-getKeyWord util (strcat "\nSelect Cloning Methode [Insert/Copy] <Copy> :"))) 
  (if (eq "" opt)(setq opt "Copy")) 
  (if (eq opt "Copy") 
    (progn (prompt "\n\t***\tSelect Objects \t*** \n : ") 
      (setvar "osmode" 0) 
      (vla-SelectOnScreen (car css)) 
      (vla-InitializeUserInput util 1) 
      (setq cpt (vla-getpoint util nil "\n\t***\tSelect Refernce Point \t*** \n : ")) 
      (foreach pt lvpts 
        (vlax-for obj (car css)  (vla-move (vla-copy obj) cpt (cadr pt)))));Copy 
    (progn (vla-InitializeUserInput util 128 "Drawing File") 
      (setq kword (vla-getKeyWord util "\nSelect Source Object from [Drawing/File]: ? <Drawing>")) 
      (if (eq "" kword) (setq kword "Drawing")) 
      (if (= kword "Drawing") (progn 
          (setq bname (getstring T "\nEnter New Block's Name or <Enter> to Select: ")) 
          (if (= bname "") (progn (vla-getEntity util 'blk nil) (setq bname (vla-get-name blk))))));if 
      (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list bks bname))) 
        (setq bname (getfiled "Select Source File" "" "dwg" 8)));if 
      (vla-delete (vla-insertBlock acsp (vlax-3d-point '(0.0 0.0 0.0)) bname 1 1 1 0 "X")) 
      (foreach pt lvpts (vla-Insertblock acsp (cadr pt) bname 1 1 1 0))));if 
  (setvar "OSMODE" om) (setvar "CMDECHO" cmd) 
  (vla-endundomark adoc) 
  (vla-regen adoc acactiveviewport) 
  (princ) 
);end 
(prompt "\n\t***\tEnter FBB to execute\t*** \n : ")
Лентяй вне форума  
 
Непрочитано 13.12.2005, 22:06
#37
Dym


 
Регистрация: 27.09.2005
Двинскъ
Сообщений: 586
Отправить сообщение для Dym с помощью Skype™


Лентяй, я так думаю эта тема была достойна отдельной ветки и суть её в следующем:
1) нередко приходят документы в целях защиты, а скорее из вредности прошедшие команду explode, после чего работать в густом чертеже весьма неудобно
2) Хорошие люди топографы делают подоснову в Микростейшн (в моём случае), после чего присылают в dwg тоже взорванное ( даже полилинии, они не в счёт)
3) Хорошие люди тётки делают свою графическую часть работы как умеют, и винить их за это не хочется, так как саму их работу временами хочется распевать.
В следствии этих примеров оч хочется кнопку быстрой замены блоком группы из любых выделенных простых элементов чертежа на экране. Я так думаю сия чтучка порадует не одного юзера вроде меня и вполне достойна находится в тулбаре. И создателя ея не слышным а дружным за него, благоделателем, выпитого
Dym вне форума  
 
Непрочитано 13.12.2005, 23:41
#38
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Цитата:
1) нередко приходят документы в целях защиты, а скорее из вредности прошедшие команду explode, после чего работать в густом чертеже весьма неудобно
2) Хорошие люди топографы делают подоснову в Микростейшн (в моём случае), после чего присылают в dwg тоже взорванное ( даже полилинии, они не в счёт)
mitjaj, Вы, случайно не в секторе Газа или, скажем, в суннитском треугольнике обретаетесь? :?: А то я смотрю - все-то у вас повзрывали.
Цитата:
В следствии этих примеров оч хочется кнопку быстрой замены блоком группы из любых выделенных простых элементов чертежа на экране.
А ежели серьезно, то не вы никогда не пробовали сварить из аквариума уху? Это очень просто - достаточно поставить аквариум на огонь. А сотворить обратный процесс? :? Тако же и с блоками. Хотя определенные возможности, безусловно есть. Я тут для личного пользования наваял такую прогу, но она трбует наличия/указания блока, вставки которого нужно восстановить.
Если идти немножко дальше, то можно автоматизировать поиск блока-прототипа. Но одно безусловно - блок прототип, безвременно погибший в ходе террористической атаки, должен быть известен.
Лентяй вне форума  
 
Непрочитано 14.12.2005, 00:55
#39
Dym


 
Регистрация: 27.09.2005
Двинскъ
Сообщений: 586
Отправить сообщение для Dym с помощью Skype™


Если идти немножко дальше, то можно автоматизировать поиск блока-прототипа. Но одно безусловно - блок прототип, безвременно погибший в ходе террористической атаки, должен быть известен. однако если документ пришел через пятые руки сей способ весьма сомнителен. в моем понимание в описанной мной ситуацие проще выделенный фрагмент чертежа всёж заменить известным блоком, скажем точкой вставки в "центр массы" фрагмента.
я так думаю..
Dym вне форума  
 
Непрочитано 14.12.2005, 04:10
#40
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Только что поставил русскую раскладку, терперь наслаждаюсь.
Цитата:
mitjaj: выделенный фрагмент чертежа всёж заменить известным блоком, скажем точкой вставки в "центр массы" фрагмента.

Я, любимый: ...блок прототип, безвременно погибший в ходе террористической атаки, должен быть известен.
Так о чем спич-то? Блок автоматом создаться не может - он должен быть определен заранее. А что касается выделенного фрагмента, то это мы тоже умеем Вот только доберусь до дома... :twisted:
Лентяй вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Змена блока на другой блок