乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 128|回复: 9

请各位高手帮帮忙解决一下这个问题

[复制链接]

15

主题

114

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2003-12-29 11:06:00 | 显示全部楼层 |阅读模式
请大家帮帮忙
小弟在这里恭祝大家新年快乐

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-12-29 11:24:00 | 显示全部楼层
两根线的方法:
找出两跟线的所有节点,判断其中一根线的每个节点是否有与另一根的节点相同,如果有就返回其点。。。
很多就循环一下就可以了
回复

使用道具 举报

15

主题

114

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2003-12-29 11:30:00 | 显示全部楼层
谢谢斑竹的解答
可是还有一个问题就是必须要取出这两根线的交点吧
然后比较这两根线或者N根线的节点是否相同吧
可是如何能给已经判断好的排除掉呢
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-12-29 11:41:00 | 显示全部楼层
既然节点相同了,就肯定相交了,而且非节点的相交你又不需要,所以不需要求交点。
另一个问题是编程方法问题,你必须得学会程序的设计思路,找到一个解决问题的办法。
比如,你可以建立一个选择集,判断一个后就从这个选择集中去掉。。。
你可以参考一些其他程序的设计方法介绍,这种方法其实都是通用的,而且也是必须掌握的东西
回复

使用道具 举报

15

主题

114

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2003-12-29 12:15:00 | 显示全部楼层
(defun GetListOfPline (EntityName / SSE_Pline N newEntityName)
  (setq SSE_Pline (entget EntityName))
  (setq LastList nil)
  (if (= (cdr (ASSOC 0 SSE_Pline)) &quotOLYLINE")
      (PROGN
        (setq LastList (list (list 0 0)))
        (setq newEntityName (entnext EntityName))
        (while (= (cdr (assoc 0 (entget newEntityName))) "VERTEX")
               (setq LastList (append LastList (list (list (cadr (assoc 10 (entget newEntityName))) (caddr (assoc 10 (entget newEntityName))) ))))
               (setq newEntityName (entnext newEntityName))
        )
        (setq LastList (cdr LastList))
      )
  )
  (setq LastList LastList)
);_defun
;;
;; main function
;;
(defun c:getpt ( / n entlen entnn ent_name1 pt_list1 ent_name2 pt_list2 i j pta0 pta1 ins_pt pt_ins_list)
  (setq entnn (ssget ))
  (setq entlen (sslength entnn))
  (setq entlen1 (- entlen 1))
  (setq n 0 )
  (while (< n entlen1)
  (setq ent_name1 (ssname entnn n))
  (setq pt_list1 (GetListOfPline ent_name1))
   (setq ent_name2 (ssname entnn (+ 1 n)))
  (setq pt_list2 (GetListOfPline ent_name2))
  (setq i 1 j 1)
  (setq pta0 (nth 0 pt_list1))
  (while (setq pta1 (nth i pt_list1))
    (setq ptb0 (nth 0 pt_list2))
    (while (setq ptb1 (nth j pt_list2))
      (if (and (setq ins_pt (inters pta0 pta1 ptb0 ptb1 t))
        (not (member ins_pt pt_ins_list))
   )
(progn
   (setq pt_ins_list (append pt_ins_list (list ins_pt)))
)
      );_if
      (setq ptb0 ptb1)
      (setq j (+ j 1))
    );_while
    (setq j 1)
    (setq pta0 pta1)
    (setq i (+ i 1))
  );_while
    )
  pt_ins_list
(chuli)
);_defun
(defun chuli(/ m len1 ents2 )
  (setq m 0)
  (setq len1 (length pt_list1))
  (while (< m len1)
   
;;;;;;;;;;;;;;以上是一个取交点的程序如何能利用这个程序完成我的要求呢请大家帮帮忙急用!!!!!!!!!!!!
谢谢了
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-12-29 12:35:00 | 显示全部楼层
跟你说过了,不需要求交点。。。。。没看见?
给你的主函数改了一下:
主要看看思路。。。
  1. (defun c:getpt (/ n entnn ent_name1 pt_list1 ent_name2 pt_list2 i j k pts)
  2.   (setq entnn (ssget))
  3.   (setq n (sslength entnn))
  4.   (setq i 0)
  5.   (while (< i n)
  6.     (setq ent_name1 (ssname entnn i))
  7.     (setq pt_list1 (GetListOfPline ent_name1))
  8.     (setq j (1+ i))
  9.     (while (< j n)
  10.       (setq ent_name2 (ssname entnn j))
  11.       (setq pt_list2 (GetListOfPline ent_name2))
  12.       (setq k 0)
  13.       (repeat (length pt_list2)
  14.         (setq pt (nth k pt_list2))
  15.         (if (member pt pt_list1)
  16.           (setq pts (append pts (list pt)))
  17.         )
  18.         (setq k (1+ k))
  19.       )
  20.       (setq j (1+ j))
  21.     )
  22.     (setq i (1+ i))
  23.   )
  24.   pts
  25. )
回复

使用道具 举报

15

主题

114

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2003-12-29 13:30:00 | 显示全部楼层
我必须要取出一个交点因为我要在没有点的地方做一个标记所以这个点是必须取的,如果有交点的话就无所谓了
但是斑竹这个程序有一个毛病
就是当有一根线的终点或者起始点与线相交的时候就算是有节点也返回空
回复

使用道具 举报

29

主题

1152

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1268
发表于 2003-12-29 14:05:00 | 显示全部楼层

;;meflying
;;pline數量及點數多時執行速度太慢了
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-12-29 14:12:00 | 显示全部楼层
to wb0815:关于起点和终点,你自己处理一下不就可以了吗?
我开头就说了,主要提供一种思路,你是要根据你的需要来确定程序的最终结果。
to 龙:这个我也想到了,没细想过程序速度问题。只是想给他提供一个方法,来打开他的思路,一样的功能,方法肯定多种,在实践中找出更好的。。。
回复

使用道具 举报

29

主题

1152

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1268
发表于 2003-12-29 14:26:00 | 显示全部楼层
  1. ;;BY龙龙仔(LUCAS)
  2. ;;这样会快一点
  3. (defun C:GETPT_LAI (/ SS N P1 P2 PT_LIST PT_LIST1 LEN)
  4.   (setq SS (ssget '((0 . "*POLYLINE"))))
  5.   (if SS
  6.     (progn
  7.       (setq N        0
  8.             LEN        (sslength SS)
  9.       )
  10.       (repeat LEN
  11.         (setq PT_LIST (append PT_LIST (GETLISTOFPLINE (ssname SS N))))
  12.         (setq N (1+ N))
  13.       )
  14.       (setq
  15.         PT_LIST
  16.          (vl-sort PT_LIST
  17.                   (function (lambda (P1 P2)
  18.                               (cond ((< (car P1) (car P2)) t)
  19.                                     ((and (= (car P1) (car P2))
  20.                                           (< (cadr P1) (cadr P2))
  21.                                      )
  22.                                      t
  23.                                     )
  24.                                     (t NIL)
  25.                               )
  26.                             )
  27.                   )
  28.          )
  29.       )
  30.       (setq N        0
  31.             LEN        (- (length PT_LIST) 1)
  32.       )
  33.       (repeat LEN
  34.         (if (and (equal (nth N PT_LIST) (nth (1+ N) PT_LIST))
  35.                  (not (member (nth N PT_LIST) PT_LIST1))
  36.             )
  37.           (setq PT_LIST1 (append PT_LIST1 (list (nth N PT_LIST))))
  38.         )
  39.         (setq N (1+ N))
  40.       )
  41.       PT_LIST1
  42.     )
  43.   )
  44. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-8 00:51 , Processed in 0.700952 second(s), 77 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表