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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > vla-explode

vla-explode

Ответ
Поиск в этой теме
Непрочитано 15.01.2008, 00:48 #1
vla-explode
СЫН
 
Регистрация: 15.01.2008
Сообщений: 5

Здравствуйте!
Помогите разобраться с функцией, взятой с системы RuCAD:

Код:
[Выделить все]
(defun ru-geom-difscale	(s-set point x-scale y-scale z-scale / temp-ent iter block-name)
    (setq iter -1.0)
    (entmake (list (cons 0 "BLOCK")
		   (cons 100 "AcDbEntity")
		   (cons 100 "AcDbBlockBegin")
		   (cons 2 "*U0")
		   (cons 8 "0")
		   (cons 70 1)
		   (cons 62 256)
		   (cons 10 point)
	     ) ;_ end of list
    ) ;_ end of entmake
    (while (setq temp-ent (ssname s-set (setq iter (1+ iter))))
	(entmake (entget temp-ent))
	(entdel temp-ent)
    ) ;_ end of while
    (setq block-name
	     (entmake (list (cons 0 "ENDBLK")
			    (cons 100 "AcDbEntity")
			    (cons 100 "AcDbBlockEnd")
			    (cons 8 "0")
		      ) ;_ end of list
	     ) ;_ end of entmake
    ) ;_ end of setq
    (if	block-name
	(entmake (list (cons 0 "INSERT")
		       (cons 100 "AcDbBlockReference")
		       (cons 2 block-name)
		       (cons 8 "0")
		       (cons 62 256)
		       (cons 10 point)
		       (cons 41 x-scale)
		       (cons 42 y-scale)
		       (cons 43 z-scale)
		       (cons 50 0)
		 ) ;_ end of list
	) ;_ end of entmake
    ) ;_ end of if
    (vla-explode (vlax-ename->vla-object (setq temp-ent (entlast))))
    (entdel temp-ent)
    (princ)
) ;_ end of defun
Почему когда я передаю в качестве параметра разные коэффициенты по оси X,Y,Z при выполнении vla-explode AutoCAD выдает ошибку:
; error: Automation Error. Invalid input

Последний раз редактировалось Кулик Алексей aka kpblc, 15.01.2008 в 01:02.
Просмотров: 3283
 
Непрочитано 15.01.2008, 01:03
#2
Кулик Алексей aka kpblc
Moderator

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


vla-explode не обрабатывает блоки с разными масштабами по осям, насколько я помню.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 15.01.2008, 01:17
#3
СЫН


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
vla-explode не обрабатывает блоки с разными масштабами по осям, насколько я помню.
А не подскажите, как можно "разорвать" блок по другому?
СЫН вне форума  
 
Непрочитано 15.01.2008, 01:40
#4
Кулик Алексей aka kpblc
Moderator

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


Как я понял из кода, создается анонимный блок, внутрь которого переносится набор примитивов. Похоже, что без отслеживания explmode вкупе с командными методами для разных масштабов ничего и не сделаешь...
А что может входить в набор?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 15.01.2008, 01:59
#5
СЫН


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


В набор могут входить:LINE,POLYLINE и TEXT.
СЫН вне форума  
 
Автор темы   Непрочитано 16.01.2008, 02:10
#6
СЫН


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


Спасибо за помощь, я нашел решение.
СЫН вне форума  
 
Непрочитано 16.01.2008, 18:27
#7
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Ну так озвучь его здесь, чтобы пригодилось другим
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 17.01.2008, 01:41
#8
СЫН


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


Вообщем, просто использовал командный метод вместо vla-explode, правда это значительно уменьшило скорость работы функции.

Код:
[Выделить все]
(defun ru-geom-difscale	(s-set point x-scale y-scale z-scale / temp-ent iter block-name)
    (setq iter -1.0)
    (entmake (list (cons 0 "BLOCK")
		   (cons 100 "AcDbEntity")
		   (cons 100 "AcDbBlockBegin")
		   (cons 2 "*U0")
		   (cons 8 "0")
		   (cons 70 1)
		   (cons 62 256)
		   (cons 10 point)
	     ) ;_ end of list
    ) ;_ end of entmake
    (while (setq temp-ent (ssname s-set (setq iter (1+ iter))))
	(entmake (entget temp-ent))
	(entdel temp-ent)
    ) ;_ end of while
    (setq block-name
	     (entmake (list (cons 0 "ENDBLK")
			    (cons 100 "AcDbEntity")
			    (cons 100 "AcDbBlockEnd")
			    (cons 8 "0")
		      ) ;_ end of list
	     ) ;_ end of entmake
    ) ;_ end of setq
    (if	block-name
	(entmake (list (cons 0 "INSERT")
		       (cons 100 "AcDbBlockReference")
		       (cons 2 block-name)
		       (cons 8 "0")
		       (cons 62 256)
		       (cons 10 point)
		       (cons 41 x-scale)
		       (cons 42 y-scale)
		       (cons 43 z-scale)
		       (cons 50 0)
		 ) ;_ end of list
	) ;_ end of entmake
    ) ;_ end of if

  (setq temp-ent (entlast))
    (Command "_Explode" temp-ent "")
    (Command "_Erase" temp-ent "")
    (princ)
)

Последний раз редактировалось Кулик Алексей aka kpblc, 17.01.2008 в 02:32. Причина: Применяй тэги [CODE] и [/CODE]
СЫН вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > vla-explode



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Explode attributes to text Sleekka Программирование 15 15.05.2015 11:59
Тройной Explode??? VVS Программирование 36 21.08.2010 00:48
Нужен Лисп: программный EXPLODE выделенных объектов Кочетков Андрей LISP 25 06.08.2009 12:35
DwgRuLispLib: Преобразование указателя на примитив в vla Кулик Алексей aka kpblc Библиотека функций 5 27.12.2007 13:47
Жуткий тормоз при explode Alxd AutoCAD 25 02.03.2006 14:11