ktbjx 发表于 2022-7-5 17:22:30

获取a的X Y Z坐标

是否可以将一行的起点X Y Z和终点X Y Z放入剪贴板??
 
我需要手动复制坐标,然后说将其粘贴到文本文件?。。
你知道的?CTRL+V它在别的地方吗?
因为我有这个宏代码,我不太了解lisp,我该如何将XYZ坐标放入剪贴板。这样我就可以使用宏搜索提取的excel文件上的坐标
 
有人能帮我做一个lisp例程,只剪切线的x y z坐标吗?
因此,我可以按CTRL+V组合键将其放置在任何位置,将其放置在excel单元格、文本、文字中,我可以使用CTRL+V快捷键的任何位置。。

BIGAL 发表于 2022-7-5 17:37:24

1尝试数据提取应该做你想做的事。
 
 
2列表选择行复制信息,但您将获得额外信息。
 
 
3使用lisphttp://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/pasteclip-and-copyclip-commands/td-p/3790508

Lee Mac 发表于 2022-7-5 17:51:46

请尝试以下操作:
(defun c:l2c ( / ent )
   (if (setq ent (LM:selectifobject "\nSelect line: " "LINE"))
       (if (LM:copytoclipboard
               (LM:lst->str
                   (mapcar 'rtos
                     (append
                           (cdr (assoc 10 (entget ent)))
                           (cdr (assoc 11 (entget ent)))
                     )
                   )
                   "\t"
               )
         )
         (princ "\nLine endpoints copied to clipboard.")
       )
   )
   (princ)
)
      
;; Same method as MP demonstrates here: http://bit.ly/170kacW
(defun LM:copytoclipboard ( str / clp htm par rtn )
   (if (setq htm (vlax-create-object "htmlfile"))
       (progn
         (setq rtn
               (vl-catch-all-apply
                  '(lambda ( )
                     (setq par (vlax-get htm 'parentwindow)
                           clp (vlax-get par 'clipboarddata)
                     )
                     (vlax-invoke clp 'setdata "Text" str)
                   )
               )
         )
         (foreach obj (list clp par htm)
               (if (= 'vla-object (type obj))
                   (vlax-release-object obj)
               )
         )
         (if (not (vl-catch-all-error-p rtn)) str)
       )
   )
)

;; Select if Object-Lee Mac
;; Continuously prompts the user for a selection of a specific object type

(defun LM:selectifobject ( msg typ / ent )
   (while
       (progn (setvar 'errno 0) (setq ent (car (entsel msg)))
         (cond
               (   (= 7 (getvar 'errno))
                   (princ "\nMissed, try again.")
               )
               (   (null ent) nil)
               (   (not (wcmatch (cdr (assoc 0 (entget ent))) typ))
                   (princ "\nInvalid object selected.")
               )
         )
       )
   )
   ent
)

;; List to String-Lee Mac
;; Concatenates each string in a supplied list, separated by a given delimiter
;; lst - List of strings to concatenate
;; del - Delimiter string to separate each item

(defun LM:lst->str ( lst del )
   (if (cdr lst)
       (strcat (car lst) del (LM:lst->str (cdr lst) del))
       (car lst)
   )
)

(vl-load-com) (princ)

ktbjx 发表于 2022-7-5 17:56:49

 
 
这正是我需要的!!!!非常感谢!我现在可以用这个了!天哪,你的天才!

Lee Mac 发表于 2022-7-5 18:08:54

不客气!

ktbjx 发表于 2022-7-5 18:18:44

先生,有一个问题。。。
我无法使用命令:
“选择P”在选择线之后,我如何改变选择线的方式?

Lee Mac 发表于 2022-7-5 18:24:48

 
请尝试以下修改的代码:
(defun c:l2c ( / ent )
   (if (or (and (setq ent (ssget "_I" '((0 . "LINE"))))
                (setq ent (ssname ent 0))
         )
         (setq ent (LM:selectifobject "\nSelect line: " "LINE"))
       )
       (if (LM:copytoclipboard
               (LM:lst->str
                   (mapcar 'rtos
                     (append
                           (cdr (assoc 10 (entget ent)))
                           (cdr (assoc 11 (entget ent)))
                     )
                   )
                   "\t"
               )
         )
         (princ "\nLine endpoints copied to clipboard.")
       )
   )
   (princ)
)
      
;; Same method as MP demonstrates here: http://bit.ly/170kacW
(defun LM:copytoclipboard ( str / clp htm par rtn )
   (if (setq htm (vlax-create-object "htmlfile"))
       (progn
         (setq rtn
               (vl-catch-all-apply
                  '(lambda ( )
                     (setq par (vlax-get htm 'parentwindow)
                           clp (vlax-get par 'clipboarddata)
                     )
                     (vlax-invoke clp 'setdata "Text" str)
                   )
               )
         )
         (foreach obj (list clp par htm)
               (if (= 'vla-object (type obj))
                   (vlax-release-object obj)
               )
         )
         (if (not (vl-catch-all-error-p rtn)) str)
       )
   )
)

;; Select if Object-Lee Mac
;; Continuously prompts the user for a selection of a specific object type

(defun LM:selectifobject ( msg typ / ent )
   (while
       (progn (setvar 'errno 0) (setq ent (car (entsel msg)))
         (cond
               (   (= 7 (getvar 'errno))
                   (princ "\nMissed, try again.")
               )
               (   (null ent) nil)
               (   (not (wcmatch (cdr (assoc 0 (entget ent))) typ))
                   (princ "\nInvalid object selected.")
               )
         )
       )
   )
   ent
)

;; List to String-Lee Mac
;; Concatenates each string in a supplied list, separated by a given delimiter
;; lst - List of strings to concatenate
;; del - Delimiter string to separate each item

(defun LM:lst->str ( lst del )
   (if (cdr lst)
       (strcat (car lst) del (LM:lst->str (cdr lst) del))
       (car lst)
   )
)

(vl-load-com) (princ)
页: [1]
查看完整版本: 获取a的X Y Z坐标