明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 13797|回复: 101

[源码] 虚线分解为线段 V1.2(2018.12.6)目前支持图元:直线、多段线、圆弧、圆!

  [复制链接]
发表于 2018-12-4 10:25:18 | 显示全部楼层 |阅读模式
本帖最后由 fangmin723 于 2020-12-1 09:23 编辑

;;;将虚线分解成段线

至于这个功能干什么用,用在什么地方,这个问题已经被问了四五遍了,我在本帖中已经回复过了,想知道的话,你可以翻阅查看
http://bbs.mjtd.com/forum.php?mo ... amp;fromuid=7316343
虚线分解为线段 V1.2(2018.12.6)目前支持图元有:直线、多段线、圆弧、圆!
注:测试平台- AutoCAD2017 和 中望CAD2014;V1.2上传文件为vlx,欢迎下载测试!!!




  1. ;;;将虚线分解成段线 V 1.0 by 忘霄 702099480@qq.com
  2. (defun c:zxfj(/ ang ept llen lsac ltp ltpdis ltplen ltplst mept mspt n obj recd slen spt)
  3.   (setq
  4.     obj (vlax-ename->vla-object (car (entsel "\n请选择分解的虚线:")))
  5.     ang (vla-get-Angle obj)
  6.     spt (vlax-safearray->list (vlax-variant-value (vla-get-StartPoint obj)))
  7.     ept (vlax-safearray->list (vlax-variant-value (vla-get-EndPoint obj)))
  8.     llen (vla-get-Length obj)
  9.     ltp (vla-get-Linetype obj)
  10.     lsac (vla-get-LinetypeScale obj)
  11.     ltplst (entget (tblobjname "LTYPE" ltp))
  12.   )
  13.   (foreach X ltplst
  14.     (if (= (car x) 49)
  15.       (if (> (cdr x) 0)
  16.         (setq ltplen (cdr x))
  17.         (setq ltpdis (abs (cdr x)))
  18.       )
  19.     )
  20.   )
  21.   (setq ltplen (* ltplen lsac) ltpdis (* ltpdis lsac) n 0 recd 0)
  22.   (if (> llen (+ ltplen ltpdis))
  23.     (progn
  24.       (setq n (fix (/ (- llen ltpdis) (+ ltplen ltpdis))))
  25.       (cond
  26.         ((< (setq slen (rem (- llen ltpdis) (+ ltplen ltpdis))) ltplen)
  27.           (setq slen (- llen ltpdis (* (+ ltplen ltpdis) (- n 1))))
  28.           (entmake (list '(0 . "LINE") (cons 10 spt) (cons 11 (setq mept (polar spt ang (/ slen 2.0))))))
  29.           (repeat (- n 1)
  30.             (entmake (list '(0 . "LINE") (cons 10 (setq mspt (polar mept ang ltpdis))) (cons 11 (setq mept (polar mspt ang ltplen)))))
  31.           )
  32.           (entmake (list '(0 . "LINE") (cons 10 (polar mept ang ltpdis)) (cons 11 ept)))
  33.           (vla-Delete obj)
  34.         )
  35.         (T
  36.           (if (= n 0)
  37.             (progn
  38.               (entmake (list '(0 . "LINE") (cons 10 spt) (cons 11 (setq mept (polar spt ang (/ (- llen ltpdis) 2.0))))))
  39.               (entmake (list '(0 . "LINE") (cons 10 (polar mept ang ltpdis)) (cons 11 ept)))
  40.               (vla-Delete obj)
  41.             )
  42.             (progn
  43.               (entmake (list '(0 . "LINE") (cons 10 spt) (cons 11 (setq mept (polar spt ang (/ slen 2.0))))))
  44.               (repeat n
  45.                 (entmake (list '(0 . "LINE") (cons 10 (setq mspt (polar mept ang ltpdis))) (cons 11 (setq mept (polar mspt ang ltplen)))))
  46.               )
  47.               (entmake (list '(0 . "LINE") (cons 10 (polar mept ang ltpdis)) (cons 11 ept)))
  48.               (vla-Delete obj)
  49.             )
  50.           )
  51.         )
  52.       )
  53.     )
  54.     (progn
  55.       (entmake (list '(0 . "LINE") (cons 10 spt) (cons 11 ept)))
  56.       (vla-Delete obj)
  57.     )
  58.   )
  59.   (princ)
  60. )


虚线分解为线段 V1.2.vlx





本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2023-10-12 23:05:54 | 显示全部楼层
;; 宽多段线外边界 wmf方式


本帖子中包含更多资源

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

x
回复 支持 1 反对 0

使用道具 举报

发表于 2018-12-8 23:30:41 | 显示全部楼层
meja 发表于 2018-12-8 17:06
关键是如何恢复成线

恢复成线应该比较困难,当然也不是完全不可逆转

如果在分解线的基础上增加一些信息,比如这一系列图元编组或者记录相关的所有图元句柄,以及分解前的线型及线型比例线宽等,那么就可能根据任意一条线找出相关信息重新绘制出分解前的线条,并且删除相关的这一堆线
发表于 2018-12-23 16:16:29 | 显示全部楼层
llsheng_73 发表于 2018-12-8 23:30
恢复成线应该比较困难,当然也不是完全不可逆转

如果在分解线的基础上增加一些信息,比如这一系列图元 ...

可以考虑延长分解的线段,使用glue程序合并,当然,圆弧的问题无法完美解决,我试过直线段可以的
发表于 2018-12-4 10:39:31 | 显示全部楼层
感谢楼主分享
发表于 2018-12-4 10:39:57 | 显示全部楼层

感谢楼主分享
发表于 2018-12-4 10:42:12 | 显示全部楼层
感谢楼主分享谢谢你
发表于 2018-12-4 11:08:03 | 显示全部楼层
Thanks for sharing ^^
发表于 2018-12-4 11:19:40 | 显示全部楼层
感谢楼主分享程序!!!!
发表于 2018-12-4 11:37:14 | 显示全部楼层

感谢楼主分享
发表于 2018-12-4 11:45:48 | 显示全部楼层
非常谢谢分享
发表于 2018-12-4 12:50:05 | 显示全部楼层

感谢楼主分享
发表于 2018-12-4 13:35:27 | 显示全部楼层
这是干吗用的啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 15:35 , Processed in 0.198851 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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