明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3163|回复: 19

高手请教

  [复制链接]
发表于 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-sort  list 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
发表于 2023-9-30 11:11:57 | 显示全部楼层
学习是一种进步,回帖是一种美德。
发表于 2022-9-28 08:59:28 | 显示全部楼层
日常灌水,到此一看
发表于 2004-9-10 11:49:00 | 显示全部楼层
2,用了(ssget)有了一个选择集,做了copy的命令,生成新的objects,问题是如何利用lisp直接生成新的objects的选择集


用 entmake 函数,帮助文件里有介绍
 楼主| 发表于 2004-9-10 11:57:00 | 显示全部楼层
entmake可以生成新的对象,这个我知道。情况是:用了copy命令,生成新的对象,


我的问题是,如何对新生成的对象,做成一个选择集,用 (ssget "L"),只有最后一个,而不是新生成全部的对象
发表于 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.
发表于 2004-9-10 12:44:00 | 显示全部楼层
(defun c:aa (/ lastent ss ss1)
(setq lastent (entlast)) ;取得最后一个图元
(setq ss (ssget)) ;选择图元
(command "_.COPY" ss "" pause pause) ;拷贝
(setq ss1 (ssadd)) ;建立空选集
(while
(setq lastent (entnext lastent))
(setq ss1 (ssadd lastent ss1)) ;加入 ss1 选集
)
(command "_.MOVE" ss1 "" pause pause) ;移动拷贝出的图元
)
发表于 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 "" "")
 楼主| 发表于 2004-9-10 20:02:00 | 显示全部楼层
u guys.! appreciate your help! thx!
发表于 2004-9-10 21:34:00 | 显示全部楼层
lockmyeye发表于2004-9-10 19:00:00用了(ssget)有了一个选择集,做了copy的命令,生成新的objects,问题是如何利用lisp直接生成新的objects的选择集 在COPY前先用(setq ss1 (ssg...
果然是好办法,又学到一招。。
 楼主| 发表于 2004-9-12 09:26:00 | 显示全部楼层
用lisp编程,继续提问:


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


2。去掉重复数后,如何排序。
 楼主| 发表于 2004-9-12 09:48:00 | 显示全部楼层
有没有多种方案,我希望多掌握点编程技巧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-17 07:56 , Processed in 0.169789 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表