明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: vken7az2p

[求助]:[0304]關於"屬性標籤值"內容替換問題?

  [复制链接]
 楼主| 发表于 2006-6-6 09:40:00 | 显示全部楼层


请问排序是否为此模式呢?
(defun sort_list_xY (lst)
(setq y_sort_list
(vl-sort lst '(lambda (1% 2%)
(> (cadr (nth 0 1%)) (cadr (nth 0 2%))))))
(setq lst
(vl-sort y_sort_list '(lambda (1% 2%)
(< (car (nth 0 1%)) (car (nth 0 2%))))))
) ;;_<a>(defun sort_list_xY (lst),左→右,上→下,xY

另外在这段写入排序后的属性数值,
我试著改写您的程序,
但好像也不行这样边写...
(setq N 1)
(mapcar '(lambda (x)
(vla-put-textstring
(vlax-invoke (nth 1 (car x)) "GetAttributes") N )
(setq N (1+ N) ) ) LST )

烦请帮忙解答一下~
谢谢~

 楼主| 发表于 2006-6-6 10:05:00 | 显示全部楼层
<BR>是否为如此的编写方式呢?<BR>;;写入排序后的属性数值<BR>(setq N 1)<BR>(foreach ENT LST<BR>  (setq OBJ (cadr ENT))<BR>  (vla-put-textstring OBJ N)<BR>  (setq N (1+ N))<BR>)
 楼主| 发表于 2006-6-6 11:10:00 | 显示全部楼层
另外请问版主您的程序,
是怎样在一开始程序执行时,
让所有属性名称数值归回预设值呢?
发表于 2006-6-6 12:23:00 | 显示全部楼层

慢慢试吧!写程序就是如此,试多就护得更多!

提问要说清楚,不懂你要甚么?有测试图吗?

 

 楼主| 发表于 2006-6-6 12:44:00 | 显示全部楼层
请问版主您的程序,
是怎样在一开始程序执行时,
让所有属性名称
归回像您所设定的"N"值呢?
 楼主| 发表于 2006-6-6 16:14:00 | 显示全部楼层


请问版主及各位高手们:
目前我所编写的程序,
为何在执行排序种类"A~D"都会发生,
某些编号排列错误呢?
是否可帮忙看一下问题出在哪里呢?
谢谢~

附上发生问题的图片及DWG档案~


程序如下:
;;;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;;排序种类副程式

(defun ar_sort_a ()
(setq y_sort_list (vl-sort lst '(lambda (1% 2%)
(> (cadr (nth 0 1%)) (cadr (nth 0 2%))) )) )
(setq lst (vl-sort y_sort_list '(lambda (1% 2%)
(< (car (nth 0 1%)) (car (nth 0 2%))) )) )
)

(defun ar_sort_b ()
(setq y_sort_list (vl-sort lst '(lambda (1% 2%)
(< (cadr (nth 0 1%)) (cadr (nth 0 2%))) )) )
(setq lst (vl-sort y_sort_list '(lambda (1% 2%)
(< (car (nth 0 1%)) (car (nth 0 2%))) )) )
)

(defun ar_sort_c ()
(setq y_sort_list (vl-sort lst '(lambda (1% 2%)
(> (cadr (nth 0 1%)) (cadr (nth 0 2%))) )) )
(setq lst (vl-sort y_sort_list '(lambda (1% 2%)
(> (car (nth 0 1%)) (car (nth 0 2%))) )) )
)

(defun ar_sort_d ()
(setq y_sort_list (vl-sort lst '(lambda (1% 2%)
(< (cadr (nth 0 1%)) (cadr (nth 0 2%))) )) )
(setq lst (vl-sort y_sort_list '(lambda (1% 2%)
(> (car (nth 0 1%)) (car (nth 0 2%))) )) )
)

(defun ar_sort_e ()
(setq x_sort_list (vl-sort lst '(lambda (1% 2%)
(< (car (nth 0 1%)) (car (nth 0 2%))))))
(setq lst (vl-sort x_sort_list '(lambda (1% 2%)
(> (cadr (nth 0 1%)) (cadr (nth 0 2%))))))
)

(defun ar_sort_f ()
(setq x_sort_list (vl-sort lst '(lambda (1% 2%)
(< (car (nth 0 1%)) (car (nth 0 2%))))))
(setq lst (vl-sort x_sort_list '(lambda (1% 2%)
(< (cadr (nth 0 1%)) (cadr (nth 0 2%))))))
)

(defun ar_sort_g ()
(setq x_sort_list (vl-sort lst '(lambda (1% 2%)
(> (car (nth 0 1%)) (car (nth 0 2%))))))
(setq lst (vl-sort x_sort_list '(lambda (1% 2%)
(> (cadr (nth 0 1%)) (cadr (nth 0 2%))))))
)

(defun ar_sort_h ()
(setq x_sort_list (vl-sort lst '(lambda (1% 2%)
(> (car (nth 0 1%)) (car (nth 0 2%))))))
(setq lst (vl-sort x_sort_list '(lambda (1% 2%)
(< (cadr (nth 0 1%)) (cadr (nth 0 2%))))))
)
   
;;;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
(defun c:test ()
(vl-load-com)
(setq ss (ssget '((0 . "insert") (66 . 1))))
(setq K (getint "\n 设定起始号码:"))
(setq n -1)
(setq lst '())
(setq x_sort_list '())
(setq y_sort_list '())
(repeat (sslength ss)
(setq blkobj (vlax-ename->vla-object (ssname ss (setq n (1+ n)))))
   (foreach obj (vlax-invoke blkobj 'getattributes)
      (setq lst (append
     lst 
            (if (= (vla-get-tagstring obj) "NU")
            (list (list(vlax-get obj 'insertionpoint)obj))
     )
               ) ;_ 结束append
      ) ;_ 结束setq
   ) ;_ 结束foreach
) ;_ 结束repeat

;;;+++++++++++++++++++++++++++++++
(princ "\n 排序方式")
(princ "\n <Y方向>")
(princ "\n (A)左->右&上->下_(B)左->右&下->上_(C)右->左&上->下_(D)右->左&下->上")
(princ "\n <X方向>")
(princ "\n (E)上->下&左->右_(F)下->上&左->右_(G)上->下&右->左_(H)下->上&右->左")
(princ "<")(princ sf)(princ ">:")

(initget "a b c d e f g h ")
(setq sf1 (getkword))
(if (null sf1)
    (setq sf1 sf)
)
(cond
((= sf1 "a")(ar_sort_a))
((= sf1 "b")(ar_sort_b))
((= sf1 "c")(ar_sort_c))
((= sf1 "d")(ar_sort_d))
((= sf1 "e")(ar_sort_e))
((= sf1 "f")(ar_sort_f))
((= sf1 "g")(ar_sort_g))
((= sf1 "h")(ar_sort_h))
)

;;;+++++++++++++++++++++++++++++++
;;写入排序后的属性数值
(foreach ent lst
  (setq obj (cadr ent))
  (vla-put-textstring obj k)
  (setq k (1+ k))
)
;;;+++++++++++++++++++++++++++++++
(prin1))

本帖子中包含更多资源

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

x
发表于 2006-6-6 16:52:00 | 显示全部楼层
因为你的比较函数没有容许误差!
 楼主| 发表于 2006-6-6 17:17:00 | 显示全部楼层
那该怎样编写容许误差呢?
发表于 2006-6-7 07:50:00 | 显示全部楼层
看27楼秋枫的程序,把"=" 改用"equal" ,equal有容许误差
发表于 2006-6-7 08:16:00 | 显示全部楼层

我想应该是这样的误差判断

(defun ar_sort_a ()
(setq y_sort_list (vl-sort lst '(lambda (1% 2%)
(if (not (equal (cadr (nth 0 lst)) (cadr (nth 0 lst)) 1e8))
(> (cadr (nth 0 1%)) (cadr (nth 0 2%)) )
) ) ) )
(setq lst (vl-sort y_sort_list '(lambda (1% 2%)
(if (not (equal (car (nth 0 1%)) (car (nth 0 2%)) 1e8))
(< (car (nth 0 1%)) (car (nth 0 2%)))
) ) ) )
)

 

但是这里还有两个问题不懂
01. if 如果判断为 "假" 该怎样处里?
02. 两座标的误差值 该设多少呢 ? 要设 1e8 还是...

希望版大可以在解答一下~感谢~

 

 

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

本版积分规则

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

GMT+8, 2025-6-9 06:23 , Processed in 0.162630 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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