明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2604|回复: 5

[编程申请]:请大家帮忙解决一下这个问题

[复制链接]
发表于 2003-12-29 16:19 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2003-12-30 13:33:59 编辑

;;BY龙龙仔(LUCAS)
;;这样会快一点
(defun C:GETPT_LAI (/ SS N P1 P2 PT_LIST PT_LIST1 LEN)
  (setq SS (ssget '((0 . "*POLYLINE"))))
  (if SS
    (progn
      (setq N 0
     LEN (sslength SS)
      )
      (repeat LEN
(setq PT_LIST (append PT_LIST (GETLISTOFPLINE (ssname SS N))))
(setq N (1+ N))
      )
      (setq
PT_LIST
  (vl-sort PT_LIST
    (function (lambda (P1 P2)
         (cond ((< (car P1) (car P2)) t)
        ((and (= (car P1) (car P2))
       (< (cadr P1) (cadr P2))
         )
         t
        )
        (t NIL)
         )
       )
    )
  )
      )
      (setq N 0
     LEN (- (length PT_LIST) 1)
      )
      (repeat LEN
(if (and (equal (nth N PT_LIST) (nth (1+ N) PT_LIST))
   (not (member (nth N PT_LIST) PT_LIST1))
     )
   (setq PT_LIST1 (append PT_LIST1 (list (nth N PT_LIST))))
)
(setq N (1+ N))
      )
      PT_LIST1
    )
  )
)


以上是龙斑竹给我写的一个程序,请大家根据这个帮我编一个程序
要求
1  线是3dpoly
2  当两条线相交的时候必须有相同的节点。
3  可以对多根线进行选择。
4  要在两条线没有交点的地方在交点处进行标注。
具体要求请看一下文件
发表于 2003-12-29 17:07 | 显示全部楼层
4  要在两条线没有交点的地方在交点处进行标注。

没有交点哪儿来的交点处?
发表于 2003-12-30 08:26 | 显示全部楼层
还有一个小问题,就是你自己的获得POLYLINE顶点的程序,是去掉Z坐标的,这样如果两条线并不相交,但从视觉上是相交的(就是高度不同),这样也算是相交吗?
 楼主| 发表于 2003-12-30 09:51 | 显示全部楼层
原来我说话这么不严密,可能是知识有限。
不能去掉Z坐标,不能视觉
应该节点高度相同
发表于 2003-12-30 11:39 | 显示全部楼层
程序如下,你可以修改Mark函数来修改你想要的标注样子,参数为:
pts_r 正确的交点
pts_w 错误的交点



  1. (defun GetInterPoint (ent1 ent2 / ax_ent_1 ax_ent_2 intpoints points i)
  2.   (setq ax_ent_1 (vlax-ename->vla-object ent1)
  3.         ax_ent_2 (vlax-ename->vla-object ent2)
  4.   )
  5.   (setq intpoints (vla-intersectwith ax_ent_1 ax_ent_2 acextendnone))
  6.   (setq intpoints (vlax-variant-value intpoints))
  7.   (setq i 0)
  8.   (if (> (vlax-safearray-get-u-bound intpoints 1) 0)
  9.     (repeat (/ (+ 1
  10.               (- (vlax-safearray-get-u-bound intpoints 1)
  11.                  (vlax-safearray-get-l-bound intpoints 1)
  12.               )
  13.            )
  14.            3
  15.         )
  16.       (setq points (append points (list (list
  17.                       (vlax-safearray-get-element intpoints i)
  18.                       (vlax-safearray-get-element intpoints (+ i 1))
  19.                       (vlax-safearray-get-element intpoints (+ i 2))
  20.                     )))
  21.       )
  22.       (setq i (+ 3 i))
  23.     )
  24.   )
  25.   points
  26. )

  27. (defun GetAllInters(ss / ss n i j ent1 ent2 points)
  28.   (setq n (sslength ss))
  29.   (setq i 0 j 0)
  30.   (while (< i n)
  31.     (setq j (1+ i))
  32.     (setq ent1 (ssname ss i))
  33.     (while (< j n)
  34.       (setq ent2 (ssname ss j))
  35.       (setq points (append points (getinterpoint ent1 ent2)))
  36.       (setq j (1+ j))
  37.     )
  38.     (setq i (1+ i))
  39.   )
  40.   points
  41. )

  42. (defun setcolor(sname color / sinf)
  43.   (setq sinf (entget sname))
  44.   (if (assoc 62 sinf)
  45.     (setq sinf (subst (cons 62 color) (assoc 62 sinf) sinf))
  46.     (setq sinf (append sinf (list (cons 62 color))))
  47.   )
  48.   (entmod sinf)
  49. )

  50. (defun GetListOfPline (EntityName / SSE_Pline N newEntityName LastList)
  51.   (setq SSE_Pline (entget EntityName))
  52.   (setq LastList nil)
  53.   (if (= (cdr (ASSOC 0 SSE_Pline)) "POLYLINE")
  54.     (PROGN
  55.       (setq newEntityName (entnext EntityName))
  56.       (while (= (cdr (assoc 0 (entget newEntityName))) "VERTEX")
  57.         (setq
  58.           LastList (append
  59.                      LastList
  60.                      (list (cdr (assoc 10 (entget newEntityName))))
  61.                    )
  62.         )
  63.         (setq newEntityName (entnext newEntityName))
  64.       )
  65.     )
  66.   )
  67.   LastList
  68. ) ;_defun


  69. (defun Mark (pts_r pts_w / i)
  70.   (setq i 0)
  71.   (repeat (length pts_r)
  72.     (command "_.circle" (nth i pts_r) 2.5)
  73.     (setcolor (entlast) 1)
  74.     (setq i (1+ i))
  75.   )
  76.   (setq i 0)
  77.   (repeat (length pts_w)
  78.     (command "_.circle" (nth i pts_w) 2.5)
  79.     (setcolor (entlast) 2)
  80.     (setq i (1+ i))
  81.   )
  82. )

  83. (defun main( / ss n len pt_list pts_r pts_w i pt)
  84.   (setq ss (ssget '((0 . "POLYLINE"))))
  85.   (if SS
  86.     (progn
  87.       (setq N        0
  88.             LEN        (sslength SS)
  89.       )
  90.       (repeat LEN
  91.         (setq PT_LIST (append PT_LIST (GETLISTOFPLINE (ssname SS N))))
  92.         (setq N (1+ N))
  93.       )      
  94.       (setq pts (getallinters ss))
  95.       (setq n 0)
  96.       (repeat (length pts)
  97.         (setq pt (nth n pts))
  98.         (if (>= (- (length pt_list) (length (vl-remove pt pt_list))) 2)
  99.           (if (not (member pt Pts_r))
  100.             (setq Pts_r (append Pts_r (list pt)))
  101.           )
  102.           (if (not (member pt pts_w))
  103.             (setq Pts_W (append Pts_w (list pt)))
  104.           )
  105.         )
  106.         (setq n (1+ n))
  107.       )
  108.       (Mark pts_r pts_w)
  109.     )
  110.   )
  111.   (princ)  
  112. )
  113. (defun err (msg)
  114.   (princ msg)
  115.   (command "_.undo" "e")
  116.   (setq *error* errtmp)
  117.   (setvar "cmdecho" cmd)
  118.   (setvar "osmode" os)
  119.   (princ)
  120. )
  121. (defun c:getpt()
  122.   (setq os (getvar "osmode"))
  123.   (setq cmd (getvar "cmdecho"))
  124.   (setvar "osmode" 0)
  125.   (setvar "cmdecho" 0)
  126.   (setq errtmp *error*)
  127.   (setq *error* err)
  128.   (command "_.undo" "be")
  129.   (main)
  130.   (command "_.undo" "e")
  131.   (setq *error* errtmp)
  132.   (setvar "cmdecho" cmd)
  133.   (setvar "osmode" os)
  134.   (princ)
  135. )
 楼主| 发表于 2003-12-30 13:33 | 显示全部楼层
感谢 meflying 斑竹的热心帮忙
谢谢您了
特献上鲜花一朵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-30 17:32 , Processed in 5.468612 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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