nxchenjk 发表于 2011-9-2 19:21:08

请高手们指点下。怎样取得多义线的各各端点坐标、若有弧的话求其弧的中心坐标。谢谢

请高手们指点下。怎样取得多义线的各各端点坐标、若有弧的话求其弧的中心坐标。谢谢

highflybird 发表于 2011-9-2 23:24:30

本帖最后由 highflybird 于 2011-9-2 23:51 编辑

lisp文件., 顶点坐标 的组码为10

zzl9105 发表于 2018-5-23 16:41:25

highflybird 发表于 2011-9-2 23:23
很久以前写的了。

简单点的,有没有求得一根直线,或者多段折线的两个端点的坐标,注意只是两端点坐标,如何取得,谢谢

GSD 发表于 2018-12-10 17:51:02

这个好,感谢分享源码。

highflybird 发表于 2011-9-2 23:23:07

本帖最后由 highflybird 于 2011-9-2 23:24 编辑

很久以前写的了。

;;;******************************************************

;;;一个求多义线各段参数(如果是弧段则有半径弧长)的lisp程序
;;;编号1:凸度,2:弦长或直段长,3:半径,4:弧长,5:圆心--
;;;加载程序,运行bulge,则显示上述参数-------------------
(defun C:Bulge (/      sel      ent      lst      obj      vex      ifclose
                i      par      1stPt      EndPt      judge      tu      pt1
                pt2      dis      radius      h      h1      half-angle
                arc-length      pa      cen
               )

(if (setq sel (ssget '((0 . "LWPOLYLINE"))))
    (progn
      (setq ent (ssname sel 0))
      (setq lst (entget ent))
      (setq obj (vlax-ename->vla-object ent))
      (setq vex (cdr (assoc 90 lst)))
      (setq ifclose (cdr (assoc 70 lst)))
      (setq i      0
            par      nil
      )
      (setq 1stPt (vlax-Curve-GetPointAtParam ent 0))
      (setq EndPt (vlax-Curve-GetPointAtParam ent (1- vex)))
      (if (or (equal 1stPt EndPt 1e-8) (= ifclose 0))
      (setq vex (1- vex))
      )
      (repeat vex
      (setq tu (vla-GetBulge obj i))
      (setq pt1 (vlax-Curve-GetPointAtParam ent i))
      (if (and (= i (1- vex)) judge)
          (setq pt2 (vlax-Curve-GetPointAtParam ent 0))
          (setq pt2 (vlax-Curve-GetPointAtParam ent (1+ i)))
      )
      (setq dis (distance pt1 pt2))
      (if (/= tu 0)
          (progn
            (setq radius (/ (* (1+ (* tu tu)) dis 0.25) (abs tu)))
            (setq h(* dis (abs tu) 0.5)
                  h1 (- radius h)
            )
            (setq half-angle (atan (/ dis 2) h1))
            (setq arc-length (* 2 half-angle radius))
            (setq cen (midp pt1 pt2))
            (setq cen (polar cen
                           (+      (angle pt1 pt2)
                              (if (or      nil
                                        (and (> h1 0) (> tu 0))
                                        (and (< h1 0) (< tu 0))
                                    )
                                  (* pi 0.5)
                                  (* pi -0.5)
                              )
                           )
                           (abs h1)
                      )
            )
            (setq pa (list tu dis radius arc-length cen))
            (setq par (cons pa par))
          )
          (progn
            (setq pa (list tu dis))
            (setq par (cons pa par))
          )
      )
      (setq i (1+ i))
      )
      (setq par (reverse par))
      (princ "\n下面为此曲线的各段列表,3,4,5编号为弧段才有:")
      (princ "\n1:凸度 2:弦长(或直线长) 3:半径 4:弧长 5:圆心")
      (foreach n par
      (princ "\n")
      (princ n)
      )
      (princ)
    )
    (alert "你没有选中物体或者选择的不是多义线!")
)
(princ)
)
;;;******************************************************

nxchenjk 发表于 2011-9-3 08:25:29

谢谢你的出手。呵呵

awd37 发表于 2012-12-19 19:44:27

谢谢。。。。

yixinexin 发表于 2015-3-10 18:00:53

支持一下!学习了,谢谢版主大大

SLC-Wing 发表于 2015-3-11 10:39:00

学习了!哈哈!!!

qyming 发表于 2015-3-13 17:40:55

学习了,啥。。。。

insufficient 发表于 2015-9-2 12:27:59

很有用 非常感谢

beigoong 发表于 2018-5-14 15:14:14

学习了学习了
页: [1] 2
查看完整版本: 请高手们指点下。怎样取得多义线的各各端点坐标、若有弧的话求其弧的中心坐标。谢谢