找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: ysq101

[每日一码] 感谢版主们的鼓励,新手写了个小程序望指点

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-9-14 15:30:36 来自手机 | 显示全部楼层
本帖最后由 st788796 于 2013-9-14 15:44 编辑
ysq101 发表于 2013-9-14 15:23
请教一下,如何才能达到按面积的大小的来排列呢??

前提:不用API      不是不给力,是太给力,还没 ...

先将选择集转换为实体列表
(setq entlst (xdrx_pickset->ents ss))
(vl-sort '(lambda (e1 e1) (> (vlax-curve-getarea e1) (vlax-curve-getarea e2))) entlst)
这个排序和api无关,api中的函数和用 car cdr 一样,没必要排斥

点评

不敢说排斥哦。。。只是新手还没学会而已,,, 到时学会了一定要多加练习  详情 回复 发表于 2013-9-14 15:53
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

 楼主| 发表于 2013-9-14 15:53:45 | 显示全部楼层
st788796 发表于 2013-9-14 15:30
先将选择集转换为实体列表
(setq entlst (xdrx_pickset->ents ss))
(vl-sort '(lambda (e1 e1) (> (vla ...

不敢说排斥哦。。。只是新手还没学会而已,,,
到时学会了一定要多加练习
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

 楼主| 发表于 2013-10-18 13:35:00 | 显示全部楼层
Free-Lancer 发表于 2013-9-12 19:41
照猫画虎不一定容易,也需要积淀,不说代码(没细看),先要把猫看懂懂

大师~~~~~~关于这个LISP可以  以面积来排序吗??从小到大或相反都可以
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

 楼主| 发表于 2013-10-18 13:36:54 | 显示全部楼层
newer 发表于 2013-9-12 20:56
在那个帖子里面,我都把程序给你写完了,建议也给你了,要想快,用矩阵变换,你在仔细看看那个程序,就简 ...

NEWER版主~~~~~~请问关于这个LISP可以  以面积来排序  吗??从小到大或相反都可以

选择集都是按图元生成的顺序来排列的
有什么方法吗?

点评

(vl-sort '(lambda (e1 e1) (> (vlax-curve-getarea e1) (vlax-curve-getarea e2))) entlst) 这句就是按面积由大到小排序啊!  详情 回复 发表于 2013-10-18 13:39
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-10-18 13:39:11 | 显示全部楼层
ysq101 发表于 2013-10-18 13:36
NEWER版主~~~~~~请问关于这个LISP可以  以面积来排序  吗??从小到大或相反都可以

选择集都是按图元生 ...

(vl-sort '(lambda (e1 e1) (> (vlax-curve-getarea e1) (vlax-curve-getarea e2))) entlst)

这句就是按面积由大到小排序啊!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

 楼主| 发表于 2013-10-18 14:03:39 | 显示全部楼层
(vl-sort '(lambda (e1 e1) (> (vlax-curve-getarea e1) (vlax-curve-getarea e2))) entlst)
(vl-sort '(lambda (e1 e1)  虽然我没学会这些函数,,,,,但你这里是不是写错了??应该是e1 e2吗?
谢谢你的热心回答...我再去查查vlax-curve-getarea函数

点评

写错了, 应该是 e1 e2  详情 回复 发表于 2013-10-18 14:05
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-10-18 14:05:58 | 显示全部楼层
ysq101 发表于 2013-10-18 14:03
(vl-sort '(lambda (e1 e1) (> (vlax-curve-getarea e1) (vlax-curve-getarea e2))) entlst)
(vl-sort '(l ...

写错了, 应该是 e1 e2

点评

能帮我完善一下吗??上班比较少时间研究LISP 感谢了~~~  详情 回复 发表于 2013-10-18 14:26
entlst 这个是VLA 对角表的意思吗??  详情 回复 发表于 2013-10-18 14:24
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

 楼主| 发表于 2013-10-18 14:24:15 | 显示全部楼层
st788796 发表于 2013-10-18 14:05
写错了, 应该是 e1 e2

entlst   这个是VLA  对角表的意思吗??
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

 楼主| 发表于 2013-10-18 14:26:37 | 显示全部楼层
st788796 发表于 2013-10-18 14:05
写错了, 应该是 e1 e2
  1. (defun c:111 ()
  2. ;;;       (/ ss i sl e pl bp)
  3.   ;;获取实体的左下角点、右下角点
  4.   (setvar "cmdecho" 0)
  5.   (defun GetEntBox (e / obj p1 p2)
  6.     (setq obj (vlax-ename->vla-object e))
  7.     (vla-getboundingbox obj 'p1 'p2)
  8.     (setq p1 (safearray-value p1)
  9.           p2 (safearray-value p2)
  10.     )d
  11.     (list p1 (list (car p2) (cadr p1) 0.))
  12.   )

  13.   
  14.   (if (setq ss (ssget '((0 . "LWPOLYLINE"))))
  15.     (progn
  16.       (setq i  -1
  17.             sl (sslength ss)
  18.       )
  19.       (command ".UNDO" "be")
  20.       (repeat sl
  21.         (setq e (ssname ss (setq i (1+ i))))
  22.         (setq pl (getentbox e))
  23.         (if (not bp)
  24.           (setq bp (cadr pl));_第一次基点
  25.           (progn
  26.             (vl-cmdf
  27.               ".move"
  28.               (list e (car pl));_拾取实体表
  29.               ""
  30.               "_none"
  31.               (car pl)
  32.               "_none"
  33.               bp
  34.             )
  35.             (setq bp (mapcar '+ bp (mapcar '- (cadr pl) (car pl))));_设置下一次的目标点
  36.           )
  37.         )
  38.       );end repeat
  39.       (command ".UNDO" "e")
  40.     )
  41.   )
  42.   (princ)
  43. )
能帮我完善一下吗??上班比较少时间研究LISP
感谢了~~~

点评

你这个用 API 写过吧  详情 回复 发表于 2013-10-18 15:02
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-10-18 15:02:06 | 显示全部楼层
ysq101 发表于 2013-10-18 14:26
能帮我完善一下吗??上班比较少时间研究LISP
感谢了~~~

你这个用 API 写过吧

点评

没用到API 纯LISP的.....XD的API还没调试好...可能是我的CAD是精简版的吧...  详情 回复 发表于 2013-10-18 15:42
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

 楼主| 发表于 2013-10-18 15:42:05 | 显示全部楼层
st788796 发表于 2013-10-18 15:02
你这个用 API 写过吧

没用到API   纯LISP的.....XD的API还没调试好...可能是我的CAD是精简版的吧...

点评

纯Lisp, 按面积大小排  详情 回复 发表于 2013-10-18 16:03
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-10-18 15:45:49 | 显示全部楼层
ysq101 发表于 2013-10-18 14:26
能帮我完善一下吗??上班比较少时间研究LISP
感谢了~~~

  1. (defun c:111 (/ ss p lst mat)
  2.   (and (setq ss (ssget '((0 . "LWPOLYLINE"))))
  3.        (setq p (getpoint "\nBase Point: "))
  4.        (setq lst (mapcar '(lambda (x / box)
  5.        (setq box (xdrx_entity_box x))
  6.        (list (car box) (cadr box) x)
  7.      )
  8.     (xdrx_pickset->ents ss)
  9.    )
  10.       mat (xdrx_matrix_identity 3)
  11.        )
  12.        (foreach x lst
  13.   (xdrx_entity_transform
  14.     (last x)
  15.     (xdrx_matrix_settranslation mat (mapcar '- p (car x)))
  16.   )
  17.   (setq p (polar p 0. (distance (car x) (cadr x))))
  18.        )
  19.   )
  20.   (princ)
  21. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-10-18 16:03:41 | 显示全部楼层
ysq101 发表于 2013-10-18 15:42
没用到API   纯LISP的.....XD的API还没调试好...可能是我的CAD是精简版的吧...

纯Lisp, 按面积大小排
  1. (defun c:111 (/ ss GetEntBox i sl e pl bp el)
  2.   (setvar "cmdecho" 0)
  3.   (defun GetEntBox (e / obj p1 p2)
  4.     (setq obj (vlax-ename->vla-object e))
  5.     (vla-getboundingbox obj 'p1 'p2)
  6.     (setq p1 (safearray-value p1)
  7.    p2 (safearray-value p2)
  8.     )
  9.     (list p1 (list (car p2) (cadr p1) 0.))
  10.   )
  11.   (if (setq ss (ssget '((0 . "LWPOLYLINE"))))
  12.     (progn
  13.       (setq i  -1
  14.      sl (sslength ss)
  15.       )
  16.       (command ".UNDO" "be")
  17.       (repeat sl
  18. (setq e  (ssname ss (setq i (1+ i)))
  19.        pl (getentbox e)
  20.        el (cons (list pl e) el)
  21. )
  22.       )
  23.       (setq el (vl-sort el
  24.    '(lambda (e1 e2)
  25.       (> (vlax-curve-getarea (cadr e1))
  26.          (vlax-curve-getarea (cadr e2))
  27.       )
  28.     )
  29.         )
  30.       )
  31.       (setq bp (cadaar el))
  32.       (foreach x (cdr el)
  33. (vl-cmdf
  34.    ".move"
  35.    (list (last x) (caar x)) ;_拾取实体表
  36.    ""
  37.    "_none"
  38.    (caar x)
  39.    "_none"
  40.    bp
  41. )
  42. (setq bp (mapcar '+ bp (apply 'mapcar (cons '- (reverse (car x)))))) ;_设置下一次的目标点
  43.       )
  44.       (command ".UNDO" "e")
  45.     )
  46.   )
  47.   (princ)
  48. )

点评

谢谢你的帮助....有空我再发解你的LISP....看从中学到些什么...有看不懂的再请教你..  详情 回复 发表于 2013-10-19 11:22
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

 楼主| 发表于 2013-10-19 11:22:00 | 显示全部楼层
st788796 发表于 2013-10-18 16:03
纯Lisp, 按面积大小排

谢谢你的帮助....有空我再发解你的LISP....看从中学到些什么...有看不懂的再请教你..
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1094个

财富等级: 财源广进

发表于 2022-4-13 08:03:36 | 显示全部楼层
感谢楼主分享!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-28 13:19 , Processed in 0.377637 second(s), 54 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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