明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2424|回复: 12

[讨论] 求高手帮忙 块内线型修改lisp

[复制链接]
发表于 2013-7-26 22:17:59 | 显示全部楼层 |阅读模式
本帖最后由 wchsunshine 于 2022-3-12 22:08 编辑


求lisp   实现功能:   将修改前中块内所有线变为双点画线, (主要为了在画图的时候方面使用) , 实现结果见修改后。

希望都过lisp或其它程序来快速实现。

以前基本都过以下实现(1、要不就把块炸开了,即可随意修改线型,之后想成组再成组2、要不就双击进入块编辑器,在编辑器里面改好线型之后再退出编辑器,确认保存即可
这2个方法太麻烦不方便使用)
                    

本帖子中包含更多资源

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

x
发表于 2022-6-1 11:19:19 | 显示全部楼层
5楼给的已经很好了。可以自己改改,如果能再加上实时调线形比例就好了
 楼主| 发表于 2013-7-27 13:19:35 | 显示全部楼层
期待高手帮忙看下 , 谢谢!
 楼主| 发表于 2013-7-28 21:07:23 | 显示全部楼层
坐等回复。。。。
发表于 2013-7-28 21:15:17 | 显示全部楼层
坐等回复。。。。

还不如换跑道...
http://bbs.mjtd.com/thread-100603-1-1.html
若发帖者的目的仅仅是为求编写程序,则请到论坛“编程申请”板块发帖,不得在本版发布悬赏求程序贴
发表于 2013-7-28 21:54:15 | 显示全部楼层
;;;--------------------------------------
;;;    变块中的线型         ;;;;;;;;;;;;;
;;;--------------------------------------
(defun c:cbl (/ test en bn llis el ola la lent en count)
  (DEFUN CBL1 ()
    (if        (or
          (eq (cdr (assoc 0 (entget bn))) "DIMENSION")
          (eq (cdr (assoc 0 (entget bn))) "INSERT")
        )
      (setq test nil)
      (prompt "\n 未选中块实体:,请重新选取!")
    )
    (setq en  (car en)
          el  (entget en)
          ola (assoc 8 el)
    )
    (setq la (getstring "请输入新的线型< BYLAYER >"))
    (IF        (OR (NULL LA) (= "" LA))
      (SETQ LA "BYLAYER")
    )
    (IF        (ASSOC 6 EL)
      (setq el (subst (cons 6 la) (assoc 6 el) el)
            el (entmod el)
      )
      (setq el (append (list (Cons 6 la)) el)
            el (entmod el)
      )
    )
    (ENTUPD BN)
    (SETQ LENT (SSGET "X" (LIST (ASSOC 0 LLIS) (ASSOC 2 LLIS))))
    (SETQ COUNT 0)
    (IF        LENT
      (WHILE (< COUNT (SSLENGTH LENT))
        (setq EN (ssname LENT COUNT))
;;;        (SETQ ED (ENTGET EN))
;;;        (ENTMOD eN)
        (ENTUPD eN)
        (SETQ COUNT (1+ COUNT))
      )
    )
  )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  (DEFUN CBL2 ()
    (setq la (getstring "请输入新的线型< BYLAYER >"))
    (IF        (OR (NULL LA) (= "" LA))
      (SETQ LA "BYLAYER")
    )
    (SETQ EN (CAR EN)
          EL (ENTGET EN)
    )
    (IF        (ASSOC 6 EL)
      (setq el (subst (cons 6 la) (assoc 6 el) el)
            el (entmod el)
      )
      (setq el (append (list (Cons 6 la)) el)
            el (entmod el)
      )
    )
  )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  (setq en nil)
  (setq test T)
  (setq en (nentselp "\n请选取块中实体"))
  (if en
    (if        (= 2 (length en))
      (progn
        (prompt "所指的是块的属性或单个的实体!:")
        (setq test nil)
        (CBL2)
      )
    )
  )
  (if test
    (progn
      (setq bn         (car (nth 3 en))
            LLIS (ENTGET BN)
      )
      (CBL1)
    )
  )
  (SETQ CBL1 NIL)
  (SETQ CBL2 NIL)
  (princ)
)
 楼主| 发表于 2013-7-29 20:46:22 | 显示全部楼层
测试了   不行。。。
 楼主| 发表于 2013-7-29 21:08:14 | 显示全部楼层
我希望框选之后,块内所有的线都变成双点画线。。。       这样画图操作方便
 楼主| 发表于 2013-8-1 19:49:22 | 显示全部楼层
先谢谢5楼了   ,麻烦5楼的再帮忙看看,程序测试了下,程序提示:请输入新的线型后,输入center  ,输入的新的线型只能更改块内的某一个线的线型,不能将块内所有的线的线型改为新设置的线型。

希望:如   "请输入新的线型< BYLAYER >"         改成(1、BYLAYER   2、双点化线、3、虚线) 这种可选择输入1、  2、  3输入话 的话就相当好了
发表于 2013-8-2 16:25:28 | 显示全部楼层
全部变的话,二个方法。
1:遍历块中实体,变线型
2:求得块的插入点,炸碎,变线型,重生成同名块。
 楼主| 发表于 2013-8-3 19:43:12 | 显示全部楼层
就是不想通过  
以下实现(
1、要不就把块炸开了,即可随意修改线型,之后想成组再成组
2、要不就双击进入块编辑器,在编辑器里面改好线型之后再退出编辑器,确认保存即可
这2个方法太麻烦不方便使用)
想通过高手lisp直接实现
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-29 15:25 , Processed in 0.162293 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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