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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Команда BACTION. Как передать имя параметра?

LISP. Команда BACTION. Как передать имя параметра?

Ответ
Поиск в этой теме
Непрочитано 08.07.2025, 16:42 #1
LISP. Команда BACTION. Как передать имя параметра?
Gretech89
 
Регистрация: 13.02.2016
Сообщений: 59

Доброе время суток!

Пытаюсь добавить точечный параметр и операцию переместить для объектов в блоке. Во время выполнения команды "BACTION" не удается передать имя параметра. В чём может быть проблема? Вручную выбирать параметр не вариант.

Фрагмент кода:

Код:
[Выделить все]
 (setq blkname (cdr (assoc 2 (entget (car (entsel "\nВыберите блок: "))))))
(command "_.BEDIT" blkname)
(command "._BPARAMETER" "_POINT" (list 0 0 0) (list 0 0 0) "")
(setq param (entlast))
(command "._BACTION" param "_MOVE" "")
Просмотров: 269
 
Непрочитано 09.07.2025, 08:03
#2
name02


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


Вручную пробовал запускать команду _BPARAMETER и смотреть, что с ней можно делать?
Код:
[Выделить все]
   (setq
    blkname     (cdr (assoc 2 (entget (car (entsel "\nВыберите блок: ")))))
    param_name "МОЕ ИМЯ"
  )
  (command "_.BEDIT" blkname)
  (command "._BPARAMETER"
	   "_POINT"
	   "_LABEL"
	   param_name
	   (list 0 0 0)
	   (list 0 0 0)
	   ""
  )
  (setq param (entlast))
  
  (command "._BACTION" param "_MOVE" "")

Последний раз редактировалось name02, 09.07.2025 в 08:34.
name02 вне форума  
 
Автор темы   Непрочитано 09.07.2025, 08:39
#3
Gretech89


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


name02, ага, по команде _BPARAMETER вопросов нет, всё стопорится на _BACTION -> "Выберете параметр"..
Gretech89 вне форума  
 
Непрочитано 09.07.2025, 10:11
#4
name02


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


Код:
[Выделить все]
   (setq
    blkname	    (cdr (assoc 2 (entget (car (entsel "\nSelect block: ")))))
    param_name	    "my_param_name"
    param_basepoint '(0 0 0)
  )
  (command-s "_.BEDIT" blkname)
  (command-s "._BPARAMETER"
	     "_POINT"
	     "_LABEL"
	     param_name
	     param_basepoint
	     (list 0 0 0)
	     0
	     ""
  )

  (setq param (entlast))

  (setq sel (ssget "_X" '((67 . 0)) ) )

  (command-s "._BACTION"
	     (list param param_basepoint)
	     "_MOVE"
	     sel
	     ""
  )
name02 вне форума  
 
Автор темы   Непрочитано 09.07.2025, 11:29
#5
Gretech89


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


name02, благодарю за помощь! Я понял... команда _BACTION запрашивала не имя параметра, а его координаты.. Немного изменил код (убрал param и сделал число ручек "1"):
Код:
[Выделить все]
  (setq
  blkname	    (cdr (assoc 2 (entget (car (entsel "\nSelect block: ")))))
  param_name	    "my_param_name"
  param_basepoint '(0 0 0)
)
(command-s "_.BEDIT" blkname)
(command-s "._BPARAMETER"
    "_POINT"
    "_LABEL"
    param_name
    param_basepoint
    (list 0 0 0)
    1
    ""
)

(setq sel (ssget "_X" '((67 . 0))))

(command-s "._BACTION"
    param_basepoint
    "_MOVE"
    sel
    ""
)
Gretech89 вне форума  
 
Непрочитано 09.07.2025, 12:55
#6
name02


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


Цитата:
Сообщение от Gretech89 Посмотреть сообщение
Я понял... команда _BACTION запрашивала не имя параметра, а его координаты.. Немного изменил код (убрал param и сделал число ручек "1"):
Нельзя так делать - у тебя может быть два параметра находиться в одной точке пространства. И если передавать в _BACTION только координаты, то команда примениться к последнему созданному (измененному) параметру.
Передавая список ты определяешь конкретный параметр!


Учти также, что набор создаваемый через (setq sel (ssget "_X" '((67 . 0)))) вмещает в себя все объекты пространства блока, в т.ч. и все (включая рассматриваемый) параметры. В блоке могут быть не только графические примитивы, а еще параметры, размеры всякие, атрибуты. В общем нужна фильтрация объектов.
name02 вне форума  
 
Автор темы   Непрочитано 09.07.2025, 14:22
#7
Gretech89


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


name02, понял, учту это. Спасибо за уточнения
Gretech89 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Команда BACTION. Как передать имя параметра?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Замена текстового стиля VVA Готовые программы 322 28.05.2025 09:59
Выполнение команды "ПОВЕРНУТЬ"/"ROTATE" в LISP AlexZh LISP 12 09.10.2024 15:54
В файле acad.pgp не назначается команда на букву "О" и не срабатывает команда "Разорвать в точке" Вася завод Программирование 2 15.12.2014 23:46
Как можно из LISP создать КОМ объект и передать его методу BSTR строку? lexluther LISP 2 01.08.2009 00:27
Запуск Lisp команды в новом документе BlackHarp LISP 1 26.03.2009 23:06