dandee 发表于 2004-9-10 11:46:00

高手请教

有两个问题:


1,我用vports开了两个视窗,如果不用鼠标点击,如何用键盘操作,分别激活其中一个窗口。或者如何用lisp去激活窗口。


2,用了(ssget)有了一个选择集,做了copy的命令,生成新的objects,问题是如何利用lisp直接生成新的objects的选择集

咏郡 发表于 2023-10-2 09:25:23

dandee 发表于 2004-9-12 09:26
用lisp编程,继续提问:




vl-sort



根据给定的比较函数来对表中的元素排序

(vl-sortlist comparison-function)
参数

list

任意表。

comparison-function

比较函数。它可以是任何一个这样的函数:接受如下两个参数,如果第一个参数按排序顺序在第二个元素之前,则返回 T 或非 nil 值。comparison-function 的值可以采用如下格式:

符号 (函数名)
'(LAMBDA (A1 A2) ...)
(FUNCTION (LAMBDA (A1 A2) ...))
返回值

表,其中包含 list 中的元素,这些元素按照 comparison-function 中指定的顺序排列。表中可能删除了重复的元素。

示例

对数值表排序:

_$ (vl-sort '(3 2 1 3) '<)
(1 2 3)   ;
请注意结果表中仅包含一个 3。

按 Y 坐标对二维点表排序:

_$ (vl-sort '((1 3) (2 2) (3 1))
             (function (lambda (e1 e2)
                         (< (cadr e1) (cadr e2)) ) ) )
((3 1) (2 2) (1 3))
对符号表排序:

_$ (vl-sort
   '(a d c b a)
   '(lambda (s1 s2)
    (< (vl-symbol-name s1) (vl-symbol-name s2)) ) )
(A B C D)       ;请注意在结果表中仅有一个 A

osikou 发表于 2023-9-30 11:11:57

学习是一种进步,回帖是一种美德。

行天下 发表于 2022-9-28 08:59:28

日常灌水,到此一看

spring 发表于 2004-9-10 11:49:00

2,用了(ssget)有了一个选择集,做了copy的命令,生成新的objects,问题是如何利用lisp直接生成新的objects的选择集


用 entmake 函数,帮助文件里有介绍

dandee 发表于 2004-9-10 11:57:00

entmake可以生成新的对象,这个我知道。情况是:用了copy命令,生成新的对象,


我的问题是,如何对新生成的对象,做成一个选择集,用 (ssget "L"),只有最后一个,而不是新生成全部的对象

alin 发表于 2004-9-10 12:02:00

1. Change the system variable "CVPORT"


2. Use (entlast) to get the last entity before "copy", then use ENTNEXT loop through the drawing database to nil.

spring 发表于 2004-9-10 12:44:00

(defun c:aa (/ lastent ss ss1)<BR>       (setq lastent (entlast))                ;取得最后一个图元<BR>       (setq ss (ssget))                        ;选择图元<BR>       (command "_.COPY" ss "" pause pause)        ;拷贝<BR>       (setq ss1 (ssadd))                        ;建立空选集<BR>       (while<BR>                       (setq lastent (entnext lastent))<BR>                               (setq ss1 (ssadd lastent ss1))        ;加入 ss1 选集<BR>       )<BR>       (command "_.MOVE" ss1 "" pause pause)        ;移动拷贝出的图元<BR>)

lockmyeye 发表于 2004-9-10 19:00:00

用了(ssget)有了一个选择集,做了copy的命令,生成新的objects,问题是如何利用lisp直接生成新的objects的选择集


在COPY前先用(setq ss1 (ssget "x"))创建一个选择集。


COPY后再用(setq ss2 (ssget "x"))创建一个选择集,两个选择集相减就可以了。


(command "select" ss1 "r" ss2 "" "")

dandee 发表于 2004-9-10 20:02:00

u guys.! appreciate your help! thx!

alin 发表于 2004-9-10 21:34:00

lockmyeye发表于2004-9-10 19:00:00static/image/common/back.gif用了(ssget)有了一个选择集,做了copy的命令,生成新的objects,问题是如何利用lisp直接生成新的objects的选择集



在COPY前先用(setq ss1 (ssg...

果然是好办法,又学到一招。。<BR>

dandee 发表于 2004-9-12 09:26:00

用lisp编程,继续提问:


1。有一个表,其中很多数是重复的,如何去掉重复的数字。


2。去掉重复数后,如何排序。

dandee 发表于 2004-9-12 09:48:00

有没有多种方案,我希望多掌握点编程技巧
页: [1] 2
查看完整版本: 高手请教