明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1602|回复: 19

[提问] 本帖最后由 孙玉坤 于 2019-7-28 09:38 编辑 有哪位大神 能帮忙给修改一下 这...

[复制链接]
发表于 2019-7-29 20:23 | 显示全部楼层 |阅读模式
50明经币
本帖最后由 孙玉坤 于 2019-7-29 20:37 编辑

本帖最后由 孙玉坤 于 2019-7-28 09:38 编辑


有哪位大神 能帮忙给修改一下  这个代码   就是现在这个代码只能把与划线相交的线段给断开  ,不能自动连接和闭合 ,能修改修剪断开后,得到的图形自动连接和闭合吗, 如下图 最好支持圆弧  好像圆弧的没有办法执行  。如果不行就算啦

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

最佳答案

查看完整内容

;;不是调用CAD内置命令,重新处理了点表,但是目前没时间考虑复杂的情形 ;;有已知的小问题,没时间改,做了限定,限定为只能将一个poly分割为两个 ;;默认闭合
发表于 2019-7-29 20:23 | 显示全部楼层
;;不是调用CAD内置命令,重新处理了点表,但是目前没时间考虑复杂的情形
;;有已知的小问题,没时间改,做了限定,限定为只能将一个poly分割为两个
;;默认闭合


本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2019-7-30 13:08 | 显示全部楼层
本帖最后由 satan421 于 2019-7-30 17:22 编辑

已经写了个雏形,下午改一下贴上来
;;————————
还不完善


本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2019-7-31 15:19 | 显示全部楼层
satan421 发表于 2019-7-30 13:08
已经写了个雏形,下午改一下贴上来
;;————————
还不完善

好的 先感谢老师的辛苦
回复

使用道具 举报

发表于 2019-7-31 15:29 | 显示全部楼层
试试看········

本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2019-7-31 19:16 | 显示全部楼层
satan421 发表于 2019-7-30 13:08
已经写了个雏形,下午改一下贴上来
;;————————
还不完善

修改好了吗
回复

使用道具 举报

发表于 2019-7-31 21:38 | 显示全部楼层
回复

使用道具 举报

发表于 2019-8-1 15:07 | 显示全部楼层

下载试试吧
回复

使用道具 举报

 楼主| 发表于 2019-8-1 16:44 | 显示全部楼层
本帖最后由 孙玉坤 于 2019-8-2 16:21 编辑

非常感谢老师的付出,有点问题 一次只能分割一个图形   非闭合的图形不支持,先用着吧,等你有时间再帮我优化一下  这是我发的图,这个应该好修改啊  源代码就不能闭合  改成闭合就行啦 这是我想的  

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2019-8-2 00:21 | 显示全部楼层

;;2016.8.13
(defun c:mx-fgql( / viewsize off_size ents_1 type_1 ents_2 fg_l obj_name pp_start pp_end cs_start cs_end end_cs pp_fg_mid pp_left pp_right )
        (vl-load-com)
        (setvar "cmdecho" 0)
        (setvar "osmode" 0)
        (setq viewsize (getvar "viewsize"))
        (setq off_size (* viewsize 0.02))
        (setq ents_1(car (entsel "\n选择要分割的墙料")))
        (setq type_1 (cdr (assoc 0 (entget ents_1))))
        (initget 128 "w")
        (setq ents_2 (entsel (strcat "\选择分割线" "[绘制分割线(W)]")))
        (cond
                ((/= ents_2 "w")
                        (setq fg_l (car ents_2))
                )
                ((= ents_2 "w")
                        (vl-cmdf "_.pline")
                        (mx-pause)
                        (setq fg_l (entlast))
                )
        )
        (setq type_2 (cdr (assoc 0 (entget fg_l))))
        (setq obj_name (vlax-ename->vla-object fg_l))
        (setq pp_start (vlax-curve-getstartpoint obj_name))
        (setq pp_end (vlax-curve-getendpoint obj_name))
        (setq cs_start (vlax-curve-getstartparam obj_name))
        (setq cs_end (vlax-curve-getendparam obj_name))
        (setq end_cs   (vlax-curve-getendParam obj_name))
        (setq pp_fg_mid (vlax-curve-getpointatparam obj_name (/ (- cs_end cs_start) 2)))
       
       
        (if(/= type_2 "LWPOLYLINE")
                (PROGN
                                (mx-to-pl fg_l 100)
              (setq fg_l (entlast))
                )               
        )
       
       
        (if (and(/= type_1 "LWPOLYLINE")(/= type_1 "CIRCLE"))
                (PROGN
                        (mx-to-pl ents_1 100)
            (setq ents_1 (entlast))
                )               
        )

        (setq pp_left (polar pp_fg_mid (+ (angle pp_start pp_end) (* 0.5 pi)) off_size))
        (setq pp_right (polar pp_fg_mid (+ (angle pp_start pp_end) (* 1.5 pi)) off_size))
        (vl-cmdf "-boundary" "a" "o" "p" "i" "y" "" pp_left "")
        (vl-cmdf "-boundary" "a" "o" "p" "i" "y" "" pp_right "")
  
        (vl-cmdf "_.erase" fg_l "")
        (vl-cmdf "_.erase" ents_1 "")
        (setvar "osmode" 7167)
        (setvar "cmdecho" 1)
        (princ)
)
;|**********执行command时。暂停等待命令操作*********|;
(defun mx-pause()
  (while (> (getvar "CMDACTIVE") 0) (command PAUSE))
)

;|**********将所有类型的线转为多段线**********|;
;|*************(mx-to-pl name num)************|;
;|********name为图元名,num为分段数目*********|;
(defun mx-to-pl( ents num / obj_name pp_start pp_end start_cs end_cs leng dist pp_all num i each_pp )
        (setq obj_name (vlax-ename->vla-object ents))
        (setq pp_start (vlax-curve-getstartpoint obj_name))
        (setq pp_end   (vlax-curve-getendpoint obj_name))
        (setq start_cs (vlax-curve-getStartParam obj_name))
        (setq end_cs   (vlax-curve-getendParam obj_name))
        (setq leng     (vlax-curve-getdistatparam obj_name end_cs))
        (setq dist (/ leng num))
        (setq pp_all (list pp_start) i 0)
        (repeat num
                (setq i (1+ i))
                (setq each_pp (vlax-curve-getpointatdist obj_name (* dist i)))
                (if (= i num)
                        (setq pp_all (append pp_all (list each_pp) (list pp_end)))
                        (setq pp_all (append pp_all (list each_pp)))
                )
        )
        (command "_.pline")
        (mapcar 'command pp_all)
        (command "")
        (vl-cmdf "_.erase" ents "")
)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 10:20 , Processed in 0.283880 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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