找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1043|回复: 7

[编程申请]:求助!如何对封闭的PL线顶点自动逆时针编号?

[复制链接]
发表于 2005-12-8 10:37:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
求助!如何对封闭的PL线顶点自动逆时针编号?要求程序能自动判断起点,起点1号点必须为西北角方向?最好能提供VBA程序,或者提供算法思路!!!1
谢谢!!!!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 2个

财富等级: 恭喜发财

发表于 2005-12-8 14:46:45 | 显示全部楼层
我有一个,试试
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-8 18:57:10 | 显示全部楼层
2楼楼主,下载不了,可以讲下思路吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-12-9 19:50:26 | 显示全部楼层
“西北角方向”无法确定!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 12个

财富等级: 恭喜发财

发表于 2005-12-9 23:14:21 | 显示全部楼层
[PHP]

;;;判断多段线是否逆时针
(defun GetCen (pl / pt1 pt2)
  (vla-getboundingbox (vlax-ename->vla-object pl) 'pt1 'pt2)
  (setq pt1 (vlax-safearray->list pt1))
  (setq pt2 (vlax-safearray->list pt2))
  (list        (/ (+ (car pt1) (car pt2)) 2.0)
        (/ (+ (cadr pt1) (cadr pt2)) 2.0)
  )
)
(defun GEO_CCW (p0 p1 p2 p3 / ang1 ang2 ang3)
  (setq ang1 (angle p0 p1))
  (setq ang2 (angle p0 p2))
  (setq ang1 (- ang2 ang1))
  (if (> (abs ang1) pi)
    (setq ang1 (+ (* -2 pi (/ ang1 (abs ang1))) ang1))
  )
  (setq ang3 (angle p0 p3))
  (setq ang2 (- ang3 ang2))
  (if (> (abs ang2) pi)
    (setq ang2 (+ (* -2 pi (/ ang2 (abs ang2))) ang2))
  )
  (if (> (* ang1 ang2) 0)
    (/ ang1 (abs ang1))
    (cond
      ((> (abs ang1) (abs ang2))
       (if (= ang2 0)
         0
         (/ ang2 (abs ang2))
       )
      )
      ((<= (abs ang1) (abs ang2))
       (if (= ang1 0)
         0
         (/ ang1 (abs ang1))
       )
      )
    )
  )
)
(defun PlineCCW        (dpline        / pline        step param nParam pt pt1 pt2 ptc i mp
                 CCWLST)
  (setq pline (car dpline))
  (setq step 100)
  (setq        mp (vla-get-modelspace
             (vla-get-activedocument (vlax-get-acad-object))
           )
  )
  (setq ptc (getcen pline))
  (setq        param (/ (vlax-curve-getDistAtParam
                   pline
                   (vlax-curve-getEndParam pline)
                 )
                 step
              )
  )
  (setq i 0)
  (repeat (1- step)
    (setq nParam (* i param))
    (setq pt (vlax-curve-getPointAtdist pline nParam))
    (setq pt1 (vlax-curve-getPointAtdist
                pline
                (+ (* (/ 0.5 step) param) nParam)
              )
    )
    (setq pt2 (vlax-curve-getPointAtdist
                pline
                (+ (* (/ 1.0 step) param) nParam)
              )
    )
    (setq CCWLST (append CCWLST (list (GEO_CCW ptc pt pt1 pt2))))
    (setq i (1+ i))
  )
  (if (> (length (vl-remove 1.0 CCWLST))
         (length (vl-remove -1.0 CCWLST))
      )
    "F"
    "T"
  )
)                                        ;end defun


;;;返回多段线的各顶点
(defun vertexs (ename / obj plist pp n)
  (setq obj (vlax-ename->vla-object (car ename)))
  (setq        plist (vlax-safearray->list
                (vlax-variant-value
                  (vla-get-coordinates obj)
                )
              )
  )
  (setq n 0)
  (setq pp (list))
  (repeat (/ (length plist) 2)
    (setq pp (append pp (list (list (nth n plist) (nth (1+ n) plist)))))
    (setq n (+ n 2))
  )
  pp
)

;;;;未加容错语句,请自己加
(defun c:test (/ pline plist j k len point sty ht)
  (princ "\n请选择多义线:")
  (setq pline (entsel))
  (PRINC "\n 设置字高:")
  (SETQ ht (getdist))
  (setq sty (getvar "textstyle"))
  (setq plist (vertexs pline))
  (if (= (PlineCCW pline) "F")
    (setq plist (reverse plist))
  )
  (progn
    (setq plist (vertexs pline))
    (if        (= (PlineCCW pline) "F")
      (setq plist (reverse plist))
    )
    (setq j (length plist) len 0 k 0)
    (while (< k j)
      (setq point (car plist))
      (setq plist (cdr plist))
      (setq len (1+ len))
      (entmake
        (list (cons 0 "text")
              (cons 10 point)
              (cons 11 point)
              (cons 7 sty)
              (cons 40 ht)
              (cons 1 (itoa len))
              (cons 72 1)
              (cons 41 0.8)
              (cons 62 2)
        )
      )  
      (setq k (1+ k))
    )
  )
)
[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-10 00:02:56 | 显示全部楼层
我不会lisp啊,我只会vba,可以讲讲算法吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-12-10 11:36:38 | 显示全部楼层
参考:http://p4.xdcad.net/forum/showthread.php?s=&threadid=499692
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 111个

财富等级: 日进斗金

发表于 2005-12-12 14:28:20 | 显示全部楼层
;;;封闭多边形顶点排序 by yshf
;;;测试程序
;;;将下载的文件“dbxddpx.fas”
;;;存到“L”盘中,如存入其它地方,
;;;请更改程序中第二行中的相应路径名。
;;;用于地藉测量中对宗地界址点编号和排序。

(defun c:cc()
   (if (null dbxddpx)(load "L:dbxddpx.fas"));请注意文件“dbxddpx.fas”存盘路径名
   (setq xtblm '("cmdecho" "osmode")
         xtblz (mapcar 'getvar xtblm)
   )
   (mapcar 'setvar xtblm '(0 0))
   (command "_undo" "be")
   (while (setq en (sel "请选择封闭多段线(LWPOLYLINE/POLYLINE)(按Esc键退出程序)"
                        "LWPOLYLINE,POLYLINE"
                )
          )
      (initget 1 "1 2 3 4")
      (setq pjd (getkword "西北角(1)/西南角(2)/东南角/(3)东北角(4):"))
      (initget 1 "1 2")
      (setq snj (getkword "顺时针(1)/逆时针(2):"))
      ;返回按要求排好序的顶点列表,并赋值给fhb
      (setq fhb (dbxddpx (car en) (read pjd) (read snj))
     i 1
      )
      (foreach pt0 fhb
        (command "_circle" pt0 1 "_chprop" (entlast) "" "c" 1 ""
        "_text" (mapcar '+ pt0 '(0.7 0.7)) 2.5 0 (itoa i)
        "_chprop" (entlast) "" "c" 3 ""
        )
        (setq i (1+ i))
     )
   )
   (command "_undo" "e")
   (mapcar 'setvar xtblm xtblz)(princ)        
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-21 21:49 , Processed in 0.237345 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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