明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1296|回复: 2

[源码] 如何解决线型转向后倒角处变型

[复制链接]
发表于 2011-7-26 20:07 | 显示全部楼层 |阅读模式
本帖最后由 logoin 于 2011-7-26 20:08 编辑

用下面之前明经有高手发布的程序后多段线上有些倒角的地方会改变,有些不会改变。不知有没有什么好办法解决????
我用vla-get-coordinates,转了表的顺序以后用vla-put-coordinates的方法来操作同一条线,效果是一样的,同样有些弧变了
开始以为要把凸度顺序一起转换,后来不是这个原因,倒转了凸度以后线更乱了。
对比前后的凸度,发现某些地方的凸度变了,但数值改变没有规律,,,,到底是为什么????
请高手们指点

================================================================
================================================================

把lockmyeye的程序参考进去了,不敢独享,贴上来供诸位高手拍砖

;DDL: Copyright By WWZ,2003-12-3
;颠倒直线的两端点,即交换实体对象组代码10和11,
;用于解决直线、dimension、多段线的线型换向问题
(defun C:ddl(/ tmp ed ent m n endpt1 endpt2 newline name)
(princ "\n交换直线、多段线或标注的起点和终点.请选择直线、多段线或标注:\n")   
;选择直线或标注,注意逻辑组的使用
(setq tmp (ssget (list (cons -4 " (if tmp
   (progn
     (setq n (sslength tmp) m 0)
     (repeat n
         (setq ent (ssname tmp m))
         (setq ed  (entget ent))      
         ;(ts "\nent=")
         ;(ts ent)
         (setq name (cdr (assoc 0 ed)))
         (if (= name "LWPOLYLINE")
           (lwpolyline_reverse ent ed)
           (progn               
             (setq endpt1 (cons 11 (cdr (assoc 10 ed) )))         
             (setq endpt2 (cons 10 (cdr (assoc 11  ed) )))                  
             (setq ed (subst endpt1 (assoc 11 ed) ed))   
             (setq ed (subst endpt2 (assoc 10 ed) ed))
             (setq newline ed)
             ;删除原对象并生成相同句柄的新对象,注意:
             ;enddel 对象名称ent不是对象数据表ed
             ;endmod entmake 的不是对象名称ent是对象数据表ed
             (entdel  ent)
             (entmake newline)                          
          )
         );end if   
         (setq m (1+ m))
     );end repeat
   )
);end if tmp
(princ "\n共处理了")
(if m (princ m) (princ "0"))
(princ "条直线(多段线、标注)。")
(princ)
  
);end C:ddl
;---------------------------------------------------------------------------
;多段线的换向程序,修改自明经通道
(DEFUN lwpolyline_reverse (lwpent data / num data one points tempnum tempent)
  
       (SETQ points nil)
       (FOREACH one data
            (PROGN (IF (= (CAR one) 10)
                       (SETQ points (APPEND points (LIST one)))
                   )
            )
        )
        
        (SETQ points (REVERSE points))
        (SETQ tempnum 0)
        (SETQ tempent nil)
        
        (FOREACH one data
            (PROGN (IF (= (CAR one) 10)
                       (SETQ tempent (APPEND tempent (LIST (NTH tempnum points)))
                             tempnum (1+ tempnum)
                       )
                       (SETQ tempent (APPEND tempent (LIST one)))
                   )
            )
        )      
        (entdel  lwpent)
        (entmake tempent)
        
        (PRINC)
);end lwpolyline_reverse

 楼主| 发表于 2011-7-26 22:15 | 显示全部楼层
急用。。。。所以不能沉啊,,,自已顶起来,,等高手出手
 楼主| 发表于 2011-7-27 20:44 | 显示全部楼层
本帖最后由 logoin 于 2011-7-27 20:46 编辑

又经过了一天,没人响应啊... ...
今天又搞了一下,发现如下特点,提出来给各位高手把把脉
如果只有两段直线,一个倒角,那么,程序执行后的弧是不会变型的
执行第一次弧变了,再执行一次又变回原形,但顶点的顺序也变回原来那样,如此反复
想要变化最小,顶点顺序换了以后,要把线上所有的凸度值都乘于 -1
刚开始以为是凸度精度的问题,后来把线上的凸度处理为只有4位小数,但执行程序后还是会变形
画一个很规则的倒角,比如凸度是0.2,但还是会变形
... ...
没有办法
目前只能通过在线的起点或者终点按自已想要的顺序增加一条0.001长度的线,再用pedit,先选小线,再选大线,聚合起来解决,对比弧变形,这种方法稳定很多,但没有从根本解决问题...

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

本版积分规则

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

GMT+8, 2024-6-16 09:25 , Processed in 0.136206 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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