找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1234|回复: 12

[编程申请]:给每一条竖线上加上序号,程序应该怎样写?

[复制链接]
发表于 2003-11-27 15:35:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
给每一条竖线上加上序号,从左到右,编号1到n,程序应该怎样写?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-11-27 23:23:07 | 显示全部楼层
1.会求点.
2.会排序.
3.会写字.
能用lisp写这三段,你就会写.:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-11-27 23:59:44 | 显示全部楼层
最初由 cy956 发布
[B]1.会求点.
2.会排序.
3.会写字.
能用lisp写这三段,你就会写.:) [/B]


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

使用道具 举报

发表于 2003-11-28 00:32:40 | 显示全部楼层
先选择,再排序,然后求点,最后写字。
选择很简单:
(setq se (ssget '((0 . "LINE"))))
排序嘛,复杂一点:

  1. (defun zhy_sort_se (se xory)
  2.   (setq newse nil)
  3.   (setq n (sslength se))
  4.   (setq index 0)
  5.   (setq aal '())
  6.   (repeat n
  7.     (setq name (ssname se index))
  8.     (setq lp (entget name))
  9.     (if        (or (= xory "y") (= xory "Y"))
  10.       (setq coy (caddr (assoc 10 lp)))
  11.     )
  12.     (if        (or (= xory "x") (= xory "X"))
  13.       (setq coy (cadr (assoc 10 lp)))
  14.     )
  15.     (if        (or (= xory "xy") (= xory "XY"))
  16.       (setq coy (+ (cadr (assoc 10 lp)) (caddr (assoc 10 lp))))
  17.     )
  18.     (setq item (list coy (cdr (assoc 5 lp))))
  19.     (setq aal (cons item aal))
  20.     (setq index (1+ index))
  21.   )
  22.   (setq        newsort
  23.          (vl-sort aal
  24.                   (function (lambda (e1 e2)
  25.                               (> (car e1) (car e2))
  26.                             )
  27.                   )
  28.          )
  29.   )
  30.   (setq n1 (length newsort))
  31.   (setq ind 0)
  32.   (repeat n1
  33.     (setq ntt (nth ind newsort))
  34.     (setq ind (1+ ind))
  35.     (setq ty (handent (cadr ntt)))
  36.     (if        (/= ty nil)
  37.       (if (= newse nil)
  38.         (setq newse (ssadd ty))
  39.         (setq newse (ssadd ty newse))
  40.       )
  41.     )
  42.   )
  43. )

其中se为前面的选集,XorY为排序方式,X为按x坐标值的大小排序(用于竖线的排序)Y为安Y坐标值的大小排序(用于横线)
当然这也是一个通用函数,不光是用来排线的哟。
最后的newse就是排序后的新选集啦。
至于求点嘛,就简单啦,依次取出newse选集中的线,取出其端点坐标,再依次次写上1~n ,程序嘛,因为不知道你的具体要求,就不太好写啦,自己发挥吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-11-28 06:50:15 | 显示全部楼层
REFER TO:

  1. (defun c:test ()
  2.   (prompt "\nSelect Lines: ")
  3.   (setq ss (ssget '((0 . "LINE"))))
  4.   (setq ss (sortsets ss))
  5.   (setq s (getvar "dimscale"))
  6.   (setq n 0)
  7.   (while (< n (sslength ss))
  8.     (pt (ssname ss n))
  9.     (if (> (cadr pt2)(cadr pt1))(setq pt1 pt2))
  10.     (setq pe (polar pt2 (/ pi 3) 1))
  11.     (command "leader" pt2 (polar pe (angle pe pt2)(* s 0.32)) "" "" "n")
  12.     (vl-cmdf "circle"  pe (* s 0.32))
  13.     (vl-cmdf "text" "j" "m" pe (* s 1.5 0.18) 0 (1+ n) "")
  14.     (setq n (1+ n))
  15.   )
  16. )
  17. (defun pt (ent)
  18.   (setq entd (entget ent))
  19.   (setq pt1 (cdr (assoc 10 entd)))
  20.   (setq pt2 (cdr (assoc 11 entd)))
  21.   (if (< (car pt2)(car pt1))(setq pt0 pt1 pt1 pt2 pt2 pt0))
  22.   (if (and (equal (car pt1)(car pt2) 0.001)
  23.            (< (cadr pt2)(cadr pt1)))
  24.     (setq pt0 pt1 pt1 pt2 pt2 pt0)
  25.   )
  26. )
  27. (defun sortsets (ents)
  28.   (setq ee (ssadd))
  29.   (setq n 0)
  30.   (while (< n (sslength ents))
  31.     (pt (ssname ents n))
  32.     (setq slist (append slist (list (list (ssname ents n) pt1 pt2))))
  33.     (setq n (1+ n))
  34.   )
  35.   (setq slist (vl-sort slist '(lambda (x1 x2)
  36.     (if (equal (car (cadr x1))(car (cadr x2)) 0.001)
  37.       (< (car (last x1))(car (last x2)))
  38.       (< (car (cadr x1))(car (cadr x2)))
  39.     )
  40.   )))
  41.   (foreach i slist (setq ee (ssadd (car i) ee)))
  42.   ee
  43. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-11-28 22:20:36 | 显示全部楼层
其实就是排序比较难,你们的程序了都用了Vlisp的命令,
在R14下用不了,如果不用Vlisp的命令,是不是很麻烦?应该怎么做?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-11-28 22:20:55 | 显示全部楼层
5樓程序不錯,若橫向由下到上可改為A.B.C更佳
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2003-11-29 01:40:44 | 显示全部楼层
r14没办法排序:-)
网上找找很多的.
我提供一个,天正里的,花了几分钟改了一下,通用了,但速度很慢的:(

  1. (defun range (a fun / b x x1)
  2.   (while (setq x (car a))
  3.          (setq x1 x a (cdr a))
  4.     (foreach y a(if(apply fun(list x y))(setq x y)))
  5.     (setq a (subst x1 x a))
  6.     (if (or(apply fun(list x (car b)))(not b))(setq b (cons x b)))
  7.   )
  8.   b
  9. )

实例:
(range '( 6 3 8 1 0) '<)  --->(0 1 3 6 8)
(range '((13) (2) (35) (6) (9)) '(lambda($1 $2)(<(car $1)(car $2))))
   --->((2) (6) (9) (13) (35))

你要的:

  1. (setq ss(ssget '((0 . "LINE"))))
  2. (setq i -1 li '())
  3. (repeat(sslength ss)
  4.   (setq s (ssname ss(setq i(1+ i))))
  5.   (setq en(entget s))
  6.   (if(equal(setq px(cadr(assoc 10 en)))(cadr(assoc 11 en))1e-3)(setq li(cons(list px s)li)))
  7. )   ;所有垂直线'((x? ename1)(x? ename2)...)
  8. (setq li(range li '(lambda($ #)(<(car $)(car #)))))  ;现在排好了.每个为 '(x坐标 实体名)
  9.   ;下面写字应该会了!?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-11-29 08:31:45 | 显示全部楼层
最初由 aeo 发布
[B]r14没办法排序:-)
网上找找很多的.
... [/B]


在很久很久以前, 老母鸡肉就和现在的鸡肉一样好吃.

至少abd2.0时(acadr10),这样功能的函数都已经相当成熟,
至于更早,嘿嘿,我也不知道了...
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-26 22:32 , Processed in 0.207258 second(s), 56 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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