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

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

Как с помощью Lisp скопировать значение размера в буфер обмена

Ответ
Поиск в этой теме
Непрочитано 12.12.2019, 11:08 #1
Как с помощью Lisp скопировать значение размера в буфер обмена
xdrivers
 
Регистрация: 23.10.2010
Сообщений: 89

Здравствуйте!
Помогите, пожалуйста написать такой Lisp:
- при измерении в автокад, значение размера копируется в буфер обмена, чтобы можно было скопировать напр. в Excel, точность до двух знаков после запятой.
- если возможно, вторым действием - при выборе объекта в автокаде (числовой), это значение добавлялось в буфер обмена через запятую к первому значению. Так же с двумя знаками после запятой.
Хотя бы первую часть реализовать!
Очень нужно по работе! Сижу с листочком выписываю измеренные расстояния и отметки, потом эти данные переписываю в Excel. Столько времени уходит. Да еще ошибешься если несколько раз при переписывании...
Просмотров: 2429
 
Непрочитано 12.12.2019, 11:23
#2
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,825


Попробу это.
Команда - d


Код:
[Выделить все]
 
(defun c:d () (kr_distance))

;(kr_distance)
(defun kr_distance (/ p1 p2 dist *error*)
  (defun *error* (msg)
    (setq p1 nil dist nil p2 nil))
  (if (setq p1 (getpoint "\nНачало отрезка <выбрать отрезок или полилинию>"))
    
    (if (setq p2 (getpoint p1 "\nОкончание отрезка"))
      	(setq dist (distance p1 p2))
      );if
  
    (setq dist (vla-get-length (vlax-ename->vla-object (Kr_entsel "\nВыбери отрезок или полилинию" '("LINE" "LWPOLYLINE") nil))))
    );if

	(if dist (copyToclipboard (rtos dist  2 4)))
	(if dist (prompt (strcat "\nдлина: " (rtos dist 2 4))) (prompt (strcat "\nотмена")))
  (princ)
);defun

;|Функция Kr_entsel
*** Автор Морозов С.В. aka Krieger ***
Еденичный выбор объекта, замена функции entsel
Возвращает entity name выбранного примитива или nil, точку указки запоминает в переменной LASTPOINT
Параметры:
promt - предложение выбрать объект (string)
filter - фильтр объектов для выбора вида '("LINE" "LWPOLYLINE")
entlist - список примитивов которые не надо выбирать (либо список entity name, либо PICKSET)

Примеры:
(Kr_entsel "\nВыберите объекты" '("LINE" "LWPOLYLINE") nil)
(Kr_entsel "\nВыберите объекты" nil nil)
(setq aa nil) (Kr_entsel "\nВыберите объекты" '("LINE" "LWPOLYLINE") (while (setq a (car (entsel))) (setq aa (append aa (list a)))))
(Kr_entsel "\nВыберите объекты" '("LINE" "LWPOLYLINE") (ssget))

|;

(defun Kr_entsel (promt filter entlist / key n newentlist ent_point promt)
  
  (setq key T n 0 newentlist nil)
  (if (eq (type entlist) 'PICKSET)
    (progn
    	(while (setq a (ssname entlist n)) (setq newentlist (append newentlist (list a)) n (1+ n)))
    	(setq entlist newentlist)
    );progn
   );if
    (while key
    	(if (or (setq ent_point (entsel promt)) (= (getvar "ERRNO") 7))
	  	(if (or (eq (type ent_point) 'LIST) (not ent_point))
		  (if ent_point
		    (if (member (setq ent (car ent_point)) entlist)
		      (princ "\nПримитив уже выбран")
		      (if filter
			      (if (not (member (cdr (assoc 0 (entget ent))) filter))
				(progn (setq str "\nНе верный выбор, выберите: ")
				  (princ (substr (setq str (foreach n filter (setq str (strcat str n ", ")))) 1 (- (strlen str) 2)))
				);progn
				(setq key nil)
			      );if
				(setq key nil)
			);if
		    );if
		    (setq key T)
		  );if
	    	(setq key nil)
	    );if
	  (setq key nil)
      	);if
     );while
  (if (eq (type ent_point) 'LIST)
    (progn (setvar "LASTPOINT" (cadr ent_point)) ent)
    ent_point
  );if
);defun

;  ! ***************************************************************************
;; !                           copyToclipboard
;; ! ***************************************************************************
;; ! Function : Copy text to clipboard
;; ! Argument : 'str'     - String
;; ! Returns  : nil
;; see http://www.theswamp.org/index.php?topic=21764.new
;; ! ****************************************************************************

(defun copyToclipboard ( text / htmlfile result)
 (setq result
        (vlax-invoke
            (vlax-get
                (vlax-get
                    (setq htmlfile (vlax-create-object "htmlfile"))
                   'ParentWindow
                )
               'ClipBoardData
            )
           'SetData
            "Text"
            text
        )
    )

    (vlax-release-object htmlfile)
    result
)

;http://www.theswamp.org/index.php?topic=19805.0
;  ! ***************************************************************************
;; !                           Clearclipboard
;; ! ***************************************************************************
;; ! Function : Clear clipboard
;; ! Argument : nil
;; ! Returns  : nil
;; see http://www.theswamp.org/index.php?topic=21764.new
;; ! ****************************************************************************;

(defun Clearclipboard (  / htmlfile)
;;(Clearclipboard)

(vlax-invoke
            (vlax-get
                (vlax-get
                    (setq htmlfile (vlax-create-object "htmlfile"))
                   'ParentWindow
                )
               'ClipBoardData
            )
           'clearData
            "Text"
        )
(vlax-release-object htmlfile)
)

;  ! ***************************************************************************
;; !                           Getclipboard
;; ! ***************************************************************************
;; ! Function : Return text string from clipboard
;; ! Argument : nil
;; ! Returns  : string
;; see http://www.theswamp.org/index.php?topic=21764.new
;; ! ****************************************************************************

(defun Getclipboard ( / htmlfile result)
;;(Getclipboard)
(setq result
        (vlax-invoke
            (vlax-get
                (vlax-get
                    (setq htmlfile (vlax-create-object "htmlfile"))
                   'ParentWindow
                )
               'ClipBoardData
            )
           'GetData
            "Text"
        )
    )

    (vlax-release-object htmlfile)

    result
)
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 12.12.2019, 11:45
#3
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Цитата:
Сообщение от xdrivers Посмотреть сообщение
Сижу с листочком выписываю измеренные расстояния и отметки, потом эти данные переписываю в Excel
проще написать лисп, который будет скидывть измеренные значения в *.csv
koMon вне форума  
 
Автор темы   Непрочитано 12.12.2019, 11:45
#4
xdrivers


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


Спасибо, большое. Сейчас попробую..

----- добавлено через ~2 мин. -----
Цитата:
Сообщение от koMon Посмотреть сообщение
проще написать лисп, который будет скидывть измеренные значения в *.csv
Для меня это вообще космос...
xdrivers вне форума  
 
Непрочитано 12.12.2019, 19:55
#5
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Ну а кто не хотел в детстве стать космонавтом?

----- добавлено через ~13 мин. -----
А в чём суть манипуляций?
koMon вне форума  
 
Непрочитано 12.12.2019, 21:31
#6
trir


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


Цитата:
А в чём суть манипуляций?
очередное изобретение Civil'а
trir вне форума  
 
Непрочитано 13.12.2019, 08:55
#7
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Цитата:
Сообщение от trir Посмотреть сообщение
очередное изобретение Civil'а
Offtop: trir, если реально оценивать талантливость человека по краткости его постов, то я бы сказал, что ты безгранично талантлив
koMon вне форума  
 
Непрочитано 13.12.2019, 09:16
#8
engngr

сети
 
Регистрация: 03.11.2008
Московия*
Сообщений: 5,767


Может, проще обвести отрезками или 3м-полилинией и извлечь данные.
engngr на форуме  
 
Автор темы   Непрочитано 13.12.2019, 09:55
#9
xdrivers


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


Цитата:
Сообщение от engngr Посмотреть сообщение
Может, проще обвести отрезками или 3м-полилинией и извлечь данные.
Мне нужно с проектных поперечников замерить расстояния от оси до низа или верха откоса и взять отметку этих точек. И записать эти данные в два столбика для дальнейшего использования в разбивочных работах. С полилинией, наверное не получится - поперечники в разных масштабах.
xdrivers вне форума  
 
Непрочитано 15.12.2019, 21:34
#10
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от xdrivers Посмотреть сообщение
С полилинией, наверное не получится - поперечники в разных масштабах.
Отмасштабируй поперечники до масштаба 1:1. Если масштабы разные по оси Х и У - объединяешь в блок и меняешь соотвествующие масштабы Х и У
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как с помощью Lisp скопировать значение размера в буфер обмена

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ограничения размера кода на Lisp Massaraksh LISP 36 24.02.2019 13:50
Не переопределяется значение размера в блоке (VBA, AutoCad 2014) Linkor Программирование 7 19.09.2016 10:47
Почему в Автокад нет команды обновления структуры блоков при вставке блоков через буфер обмена? МишаИнженер AutoCAD 6 21.11.2012 12:07
Не могу скопировать файл один в другой через буфер обмена AnnaS AutoCAD 4 12.07.2010 22:25