明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1099|回复: 0

[提问] 点表排序按G版思路重编程序后继续提问,附码求助

[复制链接]
发表于 2015-8-8 01:06:53 | 显示全部楼层 |阅读模式
本帖最后由 Gu_xl 于 2015-8-20 13:40 编辑

因为G版的函数库有点大,而且对cad版本的版本有要求,我自编的一个小程序功能比较简单,根据G版提供程序的思路,我做了一个转换用户坐标系再排序的程序,但是测试中困难重重,请再帮我看看问题出在什么地方,不胜感激
  1. ;输入原始点,原始点排序,第一第二个点决定用户坐标系的原点及x轴方向
  2. (defun c:tt ()
  3.   (setq lst (append (list (getpoint)) (list (getpoint)) (list (getpoint)) (list (getpoint)) (list (getpoint)) (list (getpoint)) (list (getpoint)) (list (getpoint)) (list (getpoint)) (list (getpoint)) (list (getpoint)) (list (getpoint)) (list (getpoint)) (list (getpoint)) (list (getpoint)) (list (getpoint))))
  4.   (setq p1 (car lst))
  5.   (setq p2 (car (cdr lst)))
  6.   ;;点自上而下,自左而右排序
  7.   (setq lst1 (vl-sort lst '(lambda (a b) (if (equal (cadr a)(cadr b) 1e-3)(< (car a) (car b)) (> (cadr a)(cadr b))))))
  8.   ;;点自左而右 自上而下排序
  9.   (setq lst2 (vl-sort lst '(lambda (a b) (if (equal (car a)(car b) 1e-3)(> (cadr a) (cadr b)) (< (car a)(car b))))))
  10.   
  11. )
  12. ;做连线
  13. (defun c:bb1 ()
  14.   (setq lsttemp lst1)
  15.   (repeat (- (length lsttemp) 1)
  16.     (progn
  17.       (setq p3 (car lsttemp))
  18.       (setq p4 (car (cdr lsttemp)))
  19.       (command "line" p3 p4 "")
  20.       (setq lsttemp (cdr lsttemp))
  21.     )
  22.   )  
  23. )
  24. (defun c:bb2 ()
  25.   (setq lsttemp2 lst2)
  26.   (repeat (- (length lsttemp2) 1)
  27.     (progn
  28.       (setq p3 (car lsttemp2))
  29.       (setq p4 (car (cdr lsttemp2)))
  30.       (command "line" p3 p4 "")
  31.       (setq lsttemp (cdr lsttemp2))
  32.     )
  33.   )
  34. )
  35. ;转坐标系排序
  36. (defun c:zz ()
  37.   (command "ucs" "w")
  38.   (command "ucs" p1 p2 "")
  39.   (setq lstzz '())
  40.   (setq lsttemp3 lst)
  41.   ;lstzz为转系后的坐标
  42.   (repeat (length lsttemp3)
  43.     (setq pt3 (trans (car lsttemp3) 0  1))
  44.     (setq lsttemp3 (cdr lsttemp3))
  45.     (setq lstzz (cons pt3 lstzz))   
  46.   )
  47.   ;;点自上而下,自左而右排序
  48.   (setq lst1 (vl-sort lstzz '(lambda (a b) (if (equal (cadr a)(cadr b) 1e-3)(< (car a) (car b)) (> (cadr a)(cadr b))))))
  49.   ;;点自左而右 自上而下排序
  50.   (setq lst2 (vl-sort lstzz '(lambda (a b) (if (equal (car a)(car b) 1e-3)(> (cadr a) (cadr b)) (< (car a)(car b))))))
  51.   (command "ucs" "w")
  52.   (setq lsttemp3 lstzz)
  53.   (setq lstzz '())
  54.   ;lstzz为排好序后转会坐标系的表
  55.   (repeat (length lsttemp3)
  56.     (setq pt3 (trans (car lsttemp3) 1  0))      
  57.     (setq lsttemp3 (cdr lsttemp3))      
  58.     (setq lstzz (cons pt3 lstzz))
  59.   )
  60. )
;bb1是上下排序的连线,bb2是左右排序的连线,生成的线条那叫一个乱啊,排序不成功,单页找不到原因出在哪里
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-23 13:48 , Processed in 0.174886 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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