明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8147|回复: 27

[已解答] 将lts图形改为lts 1000,且保持所有线型显示情况不变

[复制链接]
发表于 2014-4-25 01:53 | 显示全部楼层 |阅读模式
10明经币
本帖最后由 tranney 于 2014-4-25 16:52 编辑

我拼凑起来的程序,呵呵不管用啊麻烦各位大哥帮我看看谢谢了
我需要的不是改全局变量LTS,而是把所选择的所有虚线的单个线型比例一下子缩放N倍的工具,经常遇到这样的问题,拿到别人的图纸,他的全局线型比例和我的不同,但是里面的单个线型的线型比例有很多种,
我习惯LTS设置为1000,但有的图纸是10,或100,如果我强制把别人的图纸改为1000,则里面所有的虚线都变了,所以我需要一个工具,可以把lts改变为我需要的值,并且里面的线型显示不变
比如,他的lts是100,1线的线型比例是20,2线的线型比例是50,则执行下面命令后需要1线的线型比例修改成是2,2线的线型比例是5,这样的画显示效果是完全与原图相同的。我拼凑起来不成功,请大伙帮忙写一个,谢谢了,

(defun c:tt (/ ltsold ss en dxf celtsold celtsnew)
  (setvar "CMDECHO" 0)
  (setq ltsold (getvar "ltscale"))      ;获取当前全局比例因子
  (while (setq ss (ssget ":s"))
    (repeat (setq n (sslength ss))
      (setq en (ssname ss (setq n (1- n))))
      (setq dxf (entget en))
      (if (= (cdr (assoc 6 dxf)))
        (progn
          (setq celtsold (getvar "celtscale"))
;获取当前线段的比例因子,因为现在要将图纸的全局比例因子改成1000,
;所以现在线型的celtscale变成(1000/lsold )*celtsold
          (setq celtsnew (* (/ ltsold 1000.0) celtsold))
          (command "chprop" en "" "s" celtsnew "")
        )
      )
    )
  )
  (setvar "ltscale" 1000)
  (setvar "CMDECHO" 1)
  (princ (strcat "\n---已经将所选对象全部比例因子即lts从"(rtos ltsold)"改为1000")
  )
  (princ)
)

最佳答案

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-4-25 01:53 | 显示全部楼层
本帖最后由 ZZXXQQ 于 2014-4-27 07:33 编辑
  1. ;改线型比例 明经 2014.4.27
  2. (defun c:tt ();/ ltsold ss en dxf celtsold celtsnew)
  3. (setvar "CMDECHO" 0)
  4. (setq ltsold (getvar "ltscale"));获取当前全局比例因子
  5. ; (setq ss (ssget "X" '((0 . "ARC,CIRCLE,ELLIPSE,LINE,*POLYLINE"))));选择所有的线
  6. (while (setq ss (ssget ":s"))
  7.   (repeat (setq n (sslength ss))
  8.    (setq en (ssname ss (setq n (1- n))))
  9.    (setq dxf (entget en))
  10.    (if (assoc 48 dxf)
  11.     (setq celtsold (cdr(assoc 48 dxf)));获取当前线段的比例因子,因为现在要将图纸的全局比例因子改成1000,所以现在线型的celtscale要变成(1000/lsold )*celtsold
  12.     (setq celtsold 1)
  13.    )
  14.    (setq celtsnew (/ (* ltsold celtsold) 1000.0))
  15.    (if (assoc 6 dxf)
  16.     (if (/= (cdr(assoc 6 dxf)) "Continuous")
  17.      (command "chprop" en "" "s" celtsnew "")
  18.     )
  19.     (if (/= (cdr(assoc 6 (tblsearch "LAYER" (cdr(assoc 8 dxf))))) "Continuous")
  20.      (command "chprop" en "" "s" celtsnew "")
  21.     )
  22.    )
  23.   )
  24. )
  25. (setvar  "ltscale" 1000)  
  26. (setvar "CMDECHO" 1)
  27. (princ (strcat "\n---已经将所选对象全部比例因子即lts从" (rtos (* ltsold celtsold) 2) "改为1000"))
  28. (princ)
  29. )

评分

参与人数 1明经币 +1 收起 理由
tranney + 1

查看全部评分

回复

使用道具 举报

发表于 2014-4-25 07:44 | 显示全部楼层
那一句过不去啊
您没加注,怎知叙述句不合所求
回复

使用道具 举报

 楼主| 发表于 2014-4-25 11:19 | 显示全部楼层
ZZXXQQ 发表于 2014-4-25 08:12

超级版主好,运行代码选择物体后出现错误提示代码
; 错误: 参数类型错误: numberp: nil
回复

使用道具 举报

发表于 2014-4-25 22:48 | 显示全部楼层
板凳改了。再试试看
回复

使用道具 举报

 楼主| 发表于 2014-4-26 03:08 | 显示全部楼层
zzxxqq超版你好,刚试了一下出现错误
参数类型错误: numberp: "Continuous"
回复

使用道具 举报

发表于 2014-4-26 08:16 | 显示全部楼层
tranney 发表于 2014-4-26 03:08
zzxxqq超版你好,刚试了一下出现错误
参数类型错误: numberp: "Continuous"

程序经过调试,未发现问题。
回复

使用道具 举报

 楼主| 发表于 2014-4-26 10:39 | 显示全部楼层
经过测试,真的发现问题了,
首先对于任何设置了线性的都会弹出错误,线型不是bylayer而是指定线性的都会弹出
错误:参数类型错误: numberp: "DASH"等等
第2,并没有每个图元获取他的线型比例计算后重新赋值给图元,每个都一样了
详细见运行后要求和测试图



本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2014-4-26 20:50 | 显示全部楼层
程序又改了,再试试。
回复

使用道具 举报

 楼主| 发表于 2014-4-26 21:53 | 显示全部楼层
本帖最后由 tranney 于 2014-4-26 22:06 编辑

z超版你好,本代码基本上完成了要求,
测试后效果如下

但是版主他这里 对已 图层管理器内设置为非continuous的线型 未能做出修改,图见第3根线,
请求z超版劳神费心修改再修改完美一下

本帖子中包含更多资源

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

x

点评

程序改了,再试试。  发表于 2014-4-27 07:34
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-16 21:16 , Processed in 0.542086 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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