明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1773|回复: 6

返回二次三次拟合线控制点坐标

[复制链接]
发表于 2023-6-12 22:14:59 | 显示全部楼层 |阅读模式
返回二次三次拟合线控制点坐标

  1. (defun vxs ( ent / PLTYPE obj vtx vtxlst n ptlst)  ;提取多段线顶点坐标
  2.     (vl-load-com)
  3.    ; (setq ent (entsel "\n选取多线:\n"))
  4.     (if ent
  5.         (progn
  6.           (setq PLTYPE (cdr (assoc 0 (entget (car ent)))))
  7.           (if (or (= "POLYLINE" PLTYPE) (= "LWPOLYLINE" PLTYPE))
  8.               (progn
  9.                  (setq obj (vlax-ename->vla-object (car ent)))
  10.                  (setq vtx (vla-get-Coordinates obj))
  11.                  (setq vtxlst (vlax-safearray->list (vlax-variant-value vtx)))
  12.                  (setq n 0)
  13.                  (setq ptlst nil)
  14.                  (repeat (/ (length vtxlst) 3)
  15.                          (setq ptlst (append ptlst (list (list (nth n vtxlst) (nth (1+ n) vtxlst)(nth (+ n 2) vtxlst)   ))))
  16.                          (setq n (+ n 3))
  17.                  )
  18.                  (if ptlst ptlst nil)
  19.              )
  20.              (prompt "\n选取实体不是多义线!")
  21.           );if
  22.        )      
  23.      )
  24.    ;if
  25.    ptlst
  26.   );;;;;;;-------------------
  27. (setq e (entsel "\n选择多段线:"))


  28. (entmake (append    (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (length (vxs e  ))))
  29.       (mapcar '(lambda (pt)(cons 10 pt)) (vxs e  ) ))
  30.   )

  31. ;;;(vlax-safearray->list (vlax-variant-value (vla-get-Coordinates (vlax-ename->vla-object (car (entsel))))))


本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 收起 理由
USER2128 + 1 赞一个!

查看全部评分

 楼主| 发表于 2023-6-22 19:34:05 | 显示全部楼层
  1. 命令: (VL-LOAD-COM)

  2. 命令: (vlax-safearray->list (vlax-variant-value (vlax-get-property
  3. (vlax-ename->vla-object  (car(entsel)) ) 'Coordinates) ))
  4. 选择对象: (1258.43 660.372 0.0 1719.35 558.429 0.0 2087.03 1041.78 0.0)

 楼主| 发表于 2023-6-22 19:35:44 | 显示全部楼层

  1. (setq en1 (car(entsel "\n please select lwpoliline")) )
  2. (setq en (entget en1 '("*") ))

  3. (setq  en (vl-remove-if '(LAMBDA (x) (= (car x) 10))  en ))

  4. (setq en (subst '(0 . "POLYLINE") '(0 . "LWPOLYLINE") en))
  5. (setq en (subst '(100 . "AcDb2dPolyline") '(100 . "AcDbPolyline") en))
  6. (setq en (append en (list '(66 . 1))))  (setq en (append en (list '(10 0.0 0.0 0.0))))

  7. (setq en (append en (list '(71 . 0))))
  8. (setq en (append en (list '(72 . 0))))
  9. (setq en (append en (list '(73 . 0))))
  10. (setq en (append en (list '(74 . 0))))
  11. (setq en (append en (list '(75 . 0))))

  12. (entmod en )
  13. (vlax-ename->vla-object  (car(entsel)) )

  14. (entget(car(entsel))'("*"))

发表于 2023-12-10 12:29:41 | 显示全部楼层
不错的帖子 顶一下
发表于 2024-2-2 17:30:51 | 显示全部楼层
标记 备用 会用到
 楼主| 发表于 2024-2-22 22:58:23 | 显示全部楼层

  1. (vl-load-com)
  2. ;(vlax-safearray->list (vlax-variant-value (vlax-get-property (vlax-ename->vla-object  (car(entsel)) ) 'Coordinates) ))
  3. (defun vxs (e /   )
  4. (vlax-safearray->list (vlax-variant-value (vlax-get-property (vlax-ename->vla-object  e ) 'Coordinates) ))
  5. ;;;;;;;;;;;;;;;
  6. )
  7.   (defun c:tt11 ( / lst ent pts pt demj zmj ffn ff i) ;生成CASS三角网文件SJW

  8.   (setq lst (ssget '( (0 . "*polyline,3dface") (8 . "SW-自然地表模型")) ) )
  9. (setq i 0)

  10. (setq ffn (getfiled "选取/建立数据导出文件" "" "sjw" 1))
  11.   (setq ff (open ffn "w"))

  12.   
  13. (while  (< i (sslength lst))

  14. (setq ent (ssname lst i))
  15. (setq pts (vxs ent)); 3DFACE本来应该去除第四点,但本程序未去除

  16.   (foreach x pts
  17. (princ  (strcat (rtos x 2 3) "\n" ) ff)
  18.     )

  19.   

  20. (setq i (+ i 1))
  21.   )
  22. (close ff)
  23.   (princ)


  24.     )

发表于 2024-9-22 11:06:19 | 显示全部楼层
朴大侠的“二次三次拟合线控制点坐标”经过优化→辛苦把优化后的文件文件发上来好吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-22 14:10 , Processed in 0.190373 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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