wmz 发表于 2014-10-23 11:29:12

【请教】用什么办法实现多段线拟合

本帖最后由 wmz 于 2014-10-23 11:38 编辑

;;;加入编码
(defun SetData (Obj Data / dxf)
   (setqdxf (entget obj))
   (setq data (list(list "SOUTH" (cons 1000 data))))
   (foreach x Data
      (regapp (car x))
      (entmod (append dxf (list(cons -3 (list x)))))
   )
)
(defun Hdgxhs (lst n bh h blc / XX xk LAY YS e)
(setq sw 34.26 BL (/ blc 1000.0))
(cond ((>= h sw)(setq LAY "DGX" XX "CONTINUOUS"))
((< h sw)(setq LAY "DSX" XX "X11"))
)
(cond ((= (rem h 5) 0)(setq XK (* 0.3 BL) YS 3))
((/= (rem h 5) 0)(setq XK (* 0.15 BL) YS 2))
)
(cond ((and(= (rem h 5) 0) (= LAY "DGX"))(setq xDATA "201102"))
      ((and(/= (rem h 5) 0)(= LAY "DGX"))(setq xDATA "201101"))
((and(= (rem h 5) 0) (= LAY "DSX"))(setq xDATA "186302"))
      ((and(/= (rem h 5) 0)(= LAY "DSX"))(setq xDATA "186301"))
)

(entmake (append
       (list '(0 . "LWPOLYLINE")
       '(100 . "AcDbEntity")
       '(100 . "AcDbPolyline")
      (cons 8 LAY)
      (cons 62 Ys)
      (cons 90 n)
      (cons 6 xx)
      (cons 43 xk)
      (cons 38 h)
      (cons 70 bh)
       )
      (mapcar '(lambda (pt)(cons 10 pt)) lst ))
)
(setq e (entlast))
(SetData e xDATA)
(command "_pedit" e "s" "L" "on" "");;;这一句太慢,代替这一句!
)

wmz 发表于 2014-10-23 16:07:11

我的意思是用(vla-put-type e acQuadSplinePoly)是不是快一些?请G版主帮忙!

llsheng_73 发表于 2014-10-23 19:10:56

本帖最后由 llsheng_73 于 2014-10-23 19:17 编辑

(defun Hdgxhs(lst bh h blc / xk LAY e)
(if(not(tblsearch"appid""SOUTH"))(regapp "SOUTH"))
(setq sw 34.26 BL (/ blc 1000.0)
        LAY(if(>= h sw)"DGX""DSX")
        XK(*(IF(=(rem h 5)0)0.3 0.15)BL)
        e(ENTMAKEx(LIST'(0 . "POLYLINE")'(100 . "AcDbEntity")'(100 . "AcDb2dPolyline")
             (cons 8 LAY)
             (cons 6 (if(>= h sw)"CONTINUOUS""X11"))
             (cons 62 (IF(=(rem h 5)0)3 1))
             (cons 70 (+ 4 bh)))))
(foreach x lst(entmakex(list'(0 . "VERTEX")(list 10 (car x)(cadr x) h)(cons 40 xk)(cons 41 xk))))
(ENTMAKE'((0 . "seqend")))
(entmod(append(entget e)(list(list -3(list"SOUTH"(cons 1000(cond((and(=(rem h 5)0)(="DGX"LAY))"201102")
        ((and(/=(rem h 5)0)(="DGX"LAY))"201101")
        ((and(=(rem h 5)0)(="DSX"LAY))"186302")
        ((and(/=(rem h 5)0)(="DSX"LAY))"186301"))))))))
)

wmz 发表于 2014-10-23 21:02:11

十分感谢!程序写的太棒了!
但,仍然没有解决拟合问题(查特性时是拟合了,但依然是折线),而且扩展属性也没有加进去。
速度用了9秒(7000个三角形的等高线)。我那个如果屏蔽掉拟合那一句,即
(command "_pedit" e "s" "L" "on" ""),只要8秒,一加上这一句就达到14秒,我嫌他用时太长,故求助!
再次谢谢你!
页: [1]
查看完整版本: 【请教】用什么办法实现多段线拟合