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

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

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

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

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

Express не подходит т.к. он иеняет все блоки махом, а мне нужно не все, и заменяемые блоки могут быть с разным именем
Просмотров: 18415
 
Непрочитано 14.12.2005, 11:31
#41
Лентяй

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


mitjaj, лови обещанное и не забывай денно и нощщно сугубо и трегубо возносить благодврствия свои Господу - Подателю Мудрости и мне, любимому, - просто за то, что я есть.
Код:
[Выделить все]
(defun C:FBB (/ acsp adoc util bks ass bname pts ptn ptx lpts 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) 
        ass (vla-get-ActiveSelectionSet adoc)
        cnt T)
  (if (/= (vla-get-count ass) 0) (vla-clear ass)) 
  (vla-endundomark adoc)
  (vla-startundomark adoc)
  (setvar "cmdecho" 0)
  (prompt "\nSelect Entity Group(s) to Replace: ")
  (while cnt
    (vla-SelectOnScreen ass)
    (setq csp (vla-ObjectIDToObject adoc (vla-get-OwnerID (vla-item ass 0))))
    (vlax-for it ass
      (vla-getboundingbox it 'pt1 'pt2)
      (setq pts (mapcar '(lambda (x) (reverse (cdr (reverse (vlax-safearray->list x))))) (list pt1 pt2))
            ptn (if (apply 'and (mapcar '(lambda (x y) (<= x y)) (car pts) ptm)) (car pts) ptn)
            ptx (if (apply 'and (mapcar '(lambda (x y) (>= x y)) (cadr pts) ptx)) (cadr pts) ptx)
            lpts (cons (vlax-3d-point (mapcar ' (lambda (x y) (* 0.5 (+ x y))) ptn ptx)) lpts));setq
      (vla-erase ass) (vla-clear ass));vlax-for
    (setq stp (getstring T "\nStop  or <Enter> to Continue: ")
          cnt (if (eq stp "") T nil)));while
  (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
Лентяй вне форума  
 
Непрочитано 22.12.2005, 23:55
#42
Dym


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


Лентяй, я в печали, чтойто не получается. может разбавь немного творение ремарками для ясности, если времени на непросветлённого не жалко
Dym вне форума  
 
Непрочитано 23.12.2005, 00:46
#43
Лентяй

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


mitjaj,
В чем конкректно затык имеет место случаться? Какое сообщение появляется при этом? Короче, гони подробности, и коллектив тебе поможет :!:
Лентяй вне форума  
 
Непрочитано 20.04.2006, 14:29
#44
Dym


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


я так думаю затык был в подходе к вопросу. может как вариант проще создать временный блок из выбранных элементов и заменить его нужным :?:
Dym вне форума  
 
Непрочитано 27.04.2006, 15:55
#45
Dym


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


народ , очень надо BLOCKREPLACE который сперва просит указать на экране блок заменяемый затем на экране заменяющий. привязка при этом по точкам вставки. вспомогите!
Dym вне форума  
 
Непрочитано 27.04.2006, 20:16
#46
Лентяй

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


ExpressTools ->Blocks -> Replace Block with Another Block
Лентяй вне форума  
 
Непрочитано 28.04.2006, 14:44
#47
Dym


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


Цитата:
указать на экране
и анонимные должен понимать
Dym вне форума  
 
Непрочитано 28.04.2006, 20:12
#48
Лентяй

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


Код:
[Выделить все]
и анонимные должен понимать
А кофе в койку не желаете?
Лентяй вне форума  
 
Непрочитано 29.04.2006, 11:51
#49
Dym


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


лентяй, ну не грешно так над бедным юзером
Dym вне форума  
 
Непрочитано 29.04.2006, 23:38
#50
Лентяй

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


Цитата:
Сообщение от mitjaj
лентяй, ну не грешно так над бедным юзером
А вот ни грамма! :twisted: Потому как ИМХО бедный (зарплата чо-ли невелика?) юзер российской, или в вашем случае - латышской, потому как все равно - постсоветской, школы выгодно отличается от такового американско-китайской выучки тем, что понимает что он делает. Потому, что простительно какой-нить Сунь Хунь, опять же - ИМХО, непростительно mitjaj-ю. По сути же - анонимные блоки потому так и прозываются, что не имеют имени, или иначе - у них отсутствует уникальное свойство "Nаме", хотя наличиствует общее свойство "ObjectName", равное "AcDbBlockReference". Поэтому поисковому механизму просто не за что зацепиться. Можно, конечно выделить ВСЕ анонимные блоки на каком-то слое в пределах пространства, но вы не сможете различать в этом наборе различные анонимные блоки между собой.
Да, попробовал было создать анонимный блок в 2005-м. Ни фига! Требует, собака, указывать имя, а инче грит - никак :twisted:
Лентяй вне форума  
 
Непрочитано 02.05.2006, 08:56
#51
Кулик Алексей aka kpblc
Moderator

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


> Лентяй : Позволю себе не согласиться. Анонимные блоки обладают всеми свойствами обычного блока, в том числе и именем - вида *Uxxx. Просто по быстрому выбору этот блок фиг найдешь, да и по filter он кажись не вызывается...
Насчет создания анонимного блока попробовать можно нечто такое:
Код:
[Выделить все]
(setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point '(0.0 0.0 0.0)) "*U")
И будет счастие и благолепие
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.05.2006, 14:50
#52
Dym


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


анонимные блоки отлично делает утиль от Лоскутова, причём с минимумом движенийю, http://www.uniip.ru/lib/download/download.html. поисковый механизм работает в коде FRTO by Smirnoff в этой же ветке. а бедный я потому как учусь ещё только и целины этой у меня столько непаханной..
Dym вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Змена блока на другой блок