eyeofnewt555 发表于 2022-7-5 16:51:55

快速LISP放置#个对象

假设我选择了6个对象。我可以运行lisp将“6”复制到剪贴板吗?
 
这是我如何计数/标记块的一部分,我希望尽可能减少人为错误。
 
在有人问我为什么不使用块计数之前,请相信我的方法对我更有效。
 
谢谢

Grrr 发表于 2022-7-5 17:02:54

我认为不可能通过lisp将文本以外的内容复制到剪贴板,
由于我所看到的是议员在这里(或者/或者李-麦克)发布的消息。
但是,一些人跳出框框思考:
-可以收集对象句柄列表
-将句柄复制到剪贴板
-从剪贴板数据中检索对象
不知道之后该怎么办。。。也许其他人有其他想法。

Hippe013 发表于 2022-7-5 17:09:51

 
我相信OP只是希望通过文本将文本复制到剪贴板。
 
 
我使用DOS_LIB将文本复制到剪贴板。
 
(dos_clipboard )

Grrr 发表于 2022-7-5 17:13:19

哦,我现在明白了,他只想要他们的数量,而不是实际的实体:

(defun C:test ( / SS )
(and
   (setq SS (vl-some 'ssget (list "_I" nil)))
   (_SetClipBoardText (itoa (sslength SS)))
)
(princ)
)

此代码需要MP的_SetClipBoardText子函数。

eyeofnewt555 发表于 2022-7-5 17:20:27

工作得很有魅力!非常感谢!

eyeofnewt555 发表于 2022-7-5 17:23:38

现在让我们说,我想无论我选择了什么,也改变颜色,一旦我运行这个lisp。我该如何将这个用于更改颜色的小例程集成到您编写的lisp中?我尝试了两种不同的方法,但都没有成功。
 
颜色更改组件:
 
(Defun C:Y ( / change)
(setq ss1 (ssget))
(command "change" ss1 "" "p" "c" "2" "")
(princ)
)
 
Lisp将其添加到:
 
(defun C:test ( / SS )
(and
   (setq SS (vl-some 'ssget (list "_I" nil)))
   (_SetClipBoardText (itoa (sslength SS)))
)
(princ)
)
(defun _SetClipBoardText ( text / htmlfile result )

   ;;Caller's sole responsibility is to pass a
   ;;text string. Anything else? Pie in face.

   ;;Attribution: Reformatted version of
   ;;post by XShrimp at theswamp.org.
   ;;
   ;;See http://tinyurl.com/2ngf4r.

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

   (vlax-release-object htmlfile)

   text

)

 
谢谢你的帮助!

Grrr 发表于 2022-7-5 17:32:59

 
整个魔法来自迈克尔·普克特的密码。
编辑:
尝试

(defun C:test ( / SS )
(and
   (setq SS (vl-some 'ssget (list "_I" nil)))
   (not (command "_.CHANGE" SS "" "p" "c" "2" ""))
   (_SetClipBoardText (itoa (sslength SS)))
)
(princ)
)
而且要小心,因为它适用于隐含选择(如果您已经选择了某些内容,并运行命令调用)。

eyeofnewt555 发表于 2022-7-5 17:34:22

谢谢Grrr!不幸的是,它给了我:
“需要点或选项关键字。
; 错误:功能已取消
指定更改点或[属性]:
 
我肯定会先选择,然后运行命令。但我不确定我是否做错了什么。

Grrr 发表于 2022-7-5 17:42:00

我认为这是因为命令调用的行为不同,无论选择是隐含的还是提示您进行选择。
然而,通过我在最近创建的相关线程中建议的“PutIndexColor”子功能,它是可以实现的:
(defun C:test(/SS i)(setq SS(ssget“_:L-i”))(\u SetClipBoardText(itoa (sslength SS)(重复(setq i(sslength SS)(PutIndexColor[颜色=绿色](ssname SS(setq i(1-i2(princ)/color(defun PutIndexColor(e col/enx)(和(eq'ENAME(e)(eq'INT(type col b]栗色)(

eyeofnewt555 发表于 2022-7-5 17:49:26

哦,天哪,太令人兴奋了。美丽的事物。非常感谢您抽出时间!效果极佳。
页: [1] 2
查看完整版本: 快速LISP放置#个对象