明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3073|回复: 10

有个程序请大家捉捉虫,谢谢各位

  [复制链接]
发表于 2012-11-7 00:54:11 | 显示全部楼层 |阅读模式
1明经币
本帖最后由 夏生生 于 2012-11-7 10:58 编辑

有个程序,总得不到想要的结果,请大家帮看看,谢谢了(解决后请提供源码),图片如下

测试图形如下



程序如下:
  1. (vl-load-com)
  2. ;;;by bbs.mjtd.com
  3. ;;;计算曲线交点
  4. (defun Curveinters (en1 en2 / pl pts)
  5.   (setq pl  (vlax-invoke (vlax-ename->vla-object en2) 'IntersectWith (vlax-ename->vla-object en1) acExtendNone))
  6.   (while pl
  7.     (setq pts (append pts (list (list (car pl) (cadr pl) (caddr pl))))
  8.    pl (cdr (cdr (cdr pl)))
  9.    )
  10.     )
  11. pts
  12.   )
  13. ;;;by bbs.mjtd.com
  14. ;;;曲线选择集交点
  15. (defun ssinters (ss / pts en1 en2)
  16.   (while (> (sslength ss) 1)
  17.     (setq en1 (ssname ss 0))
  18.     (ssdel en1 ss)
  19.     (setq n (sslength ss))
  20.     (repeat n
  21.       (setq en2 (ssname ss (setq n (1- n))))
  22.       (setq pts (append pts (Curveinters en1 en2)))
  23.       )
  24.     )
  25.   pts
  26.   )
  27. ;;;by bbs.mjtd.com
  28. ;;;删除表中重复图元.不支持表中表的重复图元.
  29. ;;; (gps->lst-delsame '(1 2 1 2 (1 1) (1 2 1 2 1) 1 2 (1 1) (1 2)))
  30. ;;;  -->(1 2 (1 1) (1 2 1 2 1) (1 2))
  31. (defun gps->lst-delsame (lst / lstitem lstnew)
  32.    (foreach lstitem lst
  33.      (if (not (member lstitem lstnew))
  34.        (setq lstnew (append lstnew (list lstitem)))
  35.      )
  36.    )
  37.    lstnew
  38. )
  39. (defun list1to2(olst / n i lsta lstb)
  40.   (setq i (length olst))
  41.   (setq n 0)
  42.   (while (<= n i)
  43.     (if (nth n olst) (setq lsta(cons (nth n olst) lsta)))
  44.     (setq n (+ 2 n))
  45.     )
  46.   (setq n 1)
  47.   (while (<= n i)
  48.     (if (nth n olst) (setq lstb(cons (nth n olst) lstb)))
  49.     (setq n (+ 2 n))
  50.     )   
  51.   (list (reverse lsta) (reverse lstb))
  52.   )
  53. ;;;表内元素两两组合
  54. ;;;(1 2 3) ((1 2)(2 3))
  55. (defun lst2&2 (olst / nlst)
  56.   (repeat (1- (length olst))
  57.     (setq nlst (cons (list (car olst) (cadr olst)) nlst))
  58.     (setq olst (cdr olst))
  59.   )
  60.   (reverse nlst)
  61. )
  62. ;;;==============================
  63. ;;;by bbs.mjtd.com caoyin
  64. (defun sort (PNTLST / REC)
  65.   (defun REC (A B)
  66.     (if        (equal (car A) (car B) 1E-4)
  67.       (REC (cdr A) (cdr B))
  68.       (< (car A) (car B))
  69.     )
  70.   )
  71.   (vl-sort PNTLST 'REC)
  72. )
  73. ;;;(1 2 3 4 5 6 7 8) -->(1 4 5 8)
  74. (defun sort_14 (xx / i n lst)
  75.   (setq  i 0
  76.   n (length xx)
  77.   )
  78.   (setq lst nil)
  79.   (while (< i (/ n 4))
  80.     (setq lst (cons (list (car xx) (nth 3 xx)) lst))
  81.     (setq xx (cddddr xx)
  82.     i  (+ 1 i)
  83.     )
  84.   )
  85.   (vl-remove nil (apply 'append (reverse lst)))
  86. )
  87. ;;;(1 2 3 4 5 6 7 8) -->(2 3 6 7)
  88. (defun sort_23 (xx / i n lst)
  89.   (setq  i 0
  90.   n (length xx)
  91.   )
  92.   (setq lst nil)
  93.   (while (< i (/ n 4))
  94.     (setq lst (cons (list (cadr xx) (caddr xx)) lst))
  95.     (setq xx (cddddr xx)
  96.     i  (+ 1 i)
  97.     )
  98.   )
  99.   (vl-remove nil (apply 'append (reverse lst)))
  100. )
  101. (defun c:jcx (/ ss ptlst kw)
  102.   (setq ss (ssget '((0 . "line"))))
  103.   (setq ptlst (gps->lst-delsame (ssinters ss)))
  104.   (length ptlst)
  105. ; (setq ptlst (NB_px ptlst (list 0 < <) 1e-6))
  106. ;;;  (setq ptlst (sort ptlst))
  107.   (initget "Shang Xia")
  108.   (setq kw (getkword "\n起始点在上(S)/<起始点在下>(X)>:"))
  109.   (cond  ((or (= kw nil) (= kw "Xia")) (setq ptlst (sort_14 ptlst)))
  110.   ((= kw "Shang") (setq ptlst (sort_23 ptlst)))
  111.   )
  112.   (setq ptlst (lst2&2 ptlst))
  113.   (mapcar '(lambda (x)
  114.        (entmake (list '(0 . "LINE")
  115.           '(8 . "beam")
  116.           (cons 10 (car x))
  117.           (cons 11 (cadr x))
  118.           )
  119.        )
  120.      )
  121.     ptlst
  122.   )
  123. )



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

最佳答案

查看完整内容

试试这个 ………………
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2012-11-7 00:54:12 | 显示全部楼层
试试这个 ………………

本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 金钱 +5 收起 理由
x_s_s_1 + 1 + 5 很给力!(我是马甲)

查看全部评分

回复

使用道具 举报

发表于 2012-11-7 09:26:20 | 显示全部楼层


本帖子中包含更多资源

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

x

点评

院长,您那个工具箱太大了,一直没敢加载,不过谢谢您的帮助  发表于 2012-11-7 09:30

评分

参与人数 1明经币 +1 收起 理由
夏生生 + 1 不知对那个斜的处理的如何?且起始点有上下.

查看全部评分

回复

使用道具 举报

发表于 2012-11-7 09:36:07 | 显示全部楼层
应该根据角度,区分直腹杆,在排序,在画线。
回复

使用道具 举报

 楼主| 发表于 2012-11-7 10:29:12 | 显示全部楼层
Q1241274614 发表于 2012-11-7 09:36
应该根据角度,区分直腹杆,在排序,在画线。

谢谢您的帮助,不过角度35~55之间有些特殊的地方是达不到的,且我是想找到我自己程序的错误在什么地方,并且看看有无更好思路
回复

使用道具 举报

 楼主| 发表于 2012-11-7 10:44:32 | 显示全部楼层
叮咚 发表于 2012-11-7 10:29
试试这个 ………………

谢谢您的解答,达到了需求,请指教问题所在,或提供源码谢谢
回复

使用道具 举报

发表于 2012-11-7 11:45:44 | 显示全部楼层
1、点未排序
2、缺最后点
游客,本帖隐藏的内容需要发帖数高于 5 才可浏览,你当前发帖数只有 0

评分

参与人数 1明经币 +1 金钱 +20 收起 理由
x_s_s_1 + 1 + 20 谢谢您的帮助,可惜悬赏放出去了,再次感谢

查看全部评分

回复

使用道具 举报

发表于 2012-11-7 12:10:59 | 显示全部楼层
本帖最后由 lijiao 于 2012-11-7 12:11 编辑

(vl-load-com)
;;;by bbs.mjtd.com
;;;计算曲线交点
(defun Curveinters (en1 en2 / pl pts)
  (setq pl (vlax-invoke
      (vlax-ename->vla-object en2)
      'IntersectWith
      (vlax-ename->vla-object en1)
      acExtendNone
    )
  )
  (while pl
    (setq pts (append pts (list (list (car pl) (cadr pl) (caddr pl))))
   pl  (cdr (cdr (cdr pl)))
    )
  )
  pts
)
;;;by bbs.mjtd.com
;;;曲线选择集交点
(defun ssinters (ss / pts en1 en2)
  (while (> (sslength ss) 1)
    (setq en1 (ssname ss 0))
    (ssdel en1 ss)
    (setq n (sslength ss))
    (repeat n
      (setq en2 (ssname ss (setq n (1- n))))
      (setq pts (append pts (Curveinters en1 en2)))
    )
  )
  pts
)
;;;by bbs.mjtd.com
;;;删除表中重复图元.不支持表中表的重复图元.
;;; (gps->lst-delsame '(1 2 1 2 (1 1) (1 2 1 2 1) 1 2 (1 1) (1 2)))
;;;  -->(1 2 (1 1) (1 2 1 2 1) (1 2))
(defun gps->lst-delsame (lst / ITEM OUT biaoji)
  (setq out '())
  (foreach item lst
    (setq biaoji (mapcar '(lambda (x)
       (not (equal x item 0.0001))
     )
    out
   )
    )
    (if (apply 'and biaoji)
      (setq out (cons item out))
    )
  )
  (reverse out)
)
(defun list1to2 (olst / n i lsta lstb)
  (setq i (length olst))
  (setq n 0)
  (while (<= n i)
    (if (nth n olst)
      (setq lsta (cons (nth n olst) lsta))
    )
    (setq n (+ 2 n))
  )
  (setq n 1)
  (while (<= n i)
    (if (nth n olst)
      (setq lstb (cons (nth n olst) lstb))
    )
    (setq n (+ 2 n))
  )
  (list (reverse lsta) (reverse lstb))
)
;;;表内元素两两组合
;;;(1 2 3) ((1 2)(2 3))
(defun lst2&2 (olst / nlst)
  (repeat (1- (length olst))
    (setq nlst (cons (list (car olst) (cadr olst)) nlst))
    (setq olst (cdr olst))
  )
  (reverse nlst)
)
;;;==============================
;;;by bbs.mjtd.com caoyin
(defun sort (PNTLST / REC)
  (defun REC (A B)
    (if (equal (car A) (car B) 1E-4)
      (REC (cdr A) (cdr B))
      (< (car A) (car B))
    )
  )
  (vl-sort PNTLST 'REC)
)
;;;(1 2 3 4 5 6 7 8) -->(1 4 5 8)
(defun sort_14 (xx / i n lst)
  (setq i 3
n (length xx)
  )
  (setq lst (list (car xx)))
  (while (<= (1+ i) n)
    (setq lst (cons (nth i xx) lst))
    (setq i (1+ i))
    (if (<= (1+ i) n)
      (setq lst (cons (nth i xx) lst))
    )
    (setq i (+ i 3))
  )
  (reverse lst)
)
;;;(1 2 3 4 5 6 7 8) -->(2 3 6 7)
(defun sort_23 (xx / i n lst)
  (setq i 1
n (length xx)
  )
  (setq lst '())
  (while (<= (1+ i) n)
    (setq lst (cons (nth i xx) lst))
    (setq i (1+ i))
    (if (<= (1+ i) n)
      (setq lst (cons (nth i xx) lst))
    )
    (setq i (+ i 3))
  )
  (reverse lst)
)
(defun c:jcx (/ ss ptlst kw)
  (setq ss (ssget '((0 . "line"))))
  (setq ptlst (gps->lst-delsame (ssinters ss)))
  (setq ptlst (sort ptlst))
  (initget "Shang Xia")
  (setq kw (getkword "\n起始点在上(S)/<起始点在下>(X)>:"))
  (cond ((or (= kw nil) (= kw "Xia")) (setq ptlst (sort_14 ptlst)))
((= kw "Shang") (setq ptlst (sort_23 ptlst)))
  )
  (setq ptlst (lst2&2 ptlst))
  (mapcar '(lambda (x)
      (entmake (list '(0 . "LINE")
       '(8 . "beam")
       (cons 10 (car x))
       (cons 11 (cadr x))
        )
      )
    )
   ptlst
  )
)

评分

参与人数 1金钱 +20 收起 理由
x_s_s_1 + 20 谢谢您的帮助,可惜悬赏放出去了,再次感谢

查看全部评分

回复

使用道具 举报

发表于 2012-11-7 14:17:18 | 显示全部楼层
本帖最后由 xyp1964 于 2012-11-7 14:40 编辑

容差批处理:



本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2012-11-7 16:03:14 | 显示全部楼层
非常感谢各位的帮助,
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-5 08:26 , Processed in 0.219518 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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