明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1159|回复: 3

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

[复制链接]
发表于 2014-10-23 11:29 | 显示全部楼层 |阅读模式
本帖最后由 wmz 于 2014-10-23 11:38 编辑
  1. ;;;加入编码
  2. (defun SetData (Obj Data / dxf)
  3.    (setq  dxf (entget obj))
  4.    (setq data (list(list "SOUTH" (cons 1000 data))))
  5.    (foreach x Data
  6.         (regapp (car x))
  7.         (entmod (append dxf (list(cons -3 (list x)))))
  8.    )
  9. )
  10. (defun Hdgxhs (lst n bh h blc / XX xk LAY YS e)
  11.   (setq sw 34.26 BL (/ blc 1000.0))
  12.   (cond ((>= h sw)(setq LAY "DGX" XX "CONTINUOUS"))
  13.   ((< h sw)(setq LAY "DSX" XX "X11"))
  14.   )
  15.   (cond ((= (rem h 5) 0)(setq XK (* 0.3 BL) YS 3))
  16.   ((/= (rem h 5) 0)(setq XK (* 0.15 BL) YS 2))
  17.   )
  18.   (cond ((and(= (rem h 5) 0) (= LAY "DGX"))(setq xDATA "201102"))
  19.         ((and(/= (rem h 5) 0)(= LAY "DGX"))(setq xDATA "201101"))
  20.   ((and(= (rem h 5) 0) (= LAY "DSX"))(setq xDATA "186302"))
  21.         ((and(/= (rem h 5) 0)(= LAY "DSX"))(setq xDATA "186301"))
  22.   )
  23.   
  24.   (entmake (append
  25.        (list '(0 . "LWPOLYLINE")
  26.        '(100 . "AcDbEntity")
  27.        '(100 . "AcDbPolyline")
  28.         (cons 8 LAY)
  29.         (cons 62 Ys)
  30.         (cons 90 n)
  31.         (cons 6 xx)
  32.         (cons 43 xk)
  33.         (cons 38 h)
  34.         (cons 70 bh)
  35.        )
  36.       (mapcar '(lambda (pt)(cons 10 pt)) lst ))
  37.   )
  38.   (setq e (entlast))
  39.   (SetData e xDATA)
  40.   (command "_pedit" e "s" "L" "on" "");;;这一句太慢,代替这一句!
  41. )  
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2014-10-23 16:07 | 显示全部楼层
我的意思是用(vla-put-type e acQuadSplinePoly)是不是快一些?请G版主帮忙!
发表于 2014-10-23 19:10 | 显示全部楼层
本帖最后由 llsheng_73 于 2014-10-23 19:17 编辑

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

 楼主| 发表于 2014-10-23 21:02 | 显示全部楼层
十分感谢!程序写的太棒了!
但,仍然没有解决拟合问题(查特性时是拟合了,但依然是折线),而且扩展属性也没有加进去。
速度用了9秒(7000个三角形的等高线)。我那个如果屏蔽掉拟合那一句,即
(command "_pedit" e "s" "L" "on" ""),只要8秒,一加上这一句就达到14秒,我嫌他用时太长,故求助!
再次谢谢你!

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

本版积分规则

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

GMT+8, 2024-4-24 07:03 , Processed in 0.378389 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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