明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1324|回复: 10

[提问] 多线(MLINE)对正调整,未能正常显示!大佬们帮忙看看!谢谢

[复制链接]
发表于 2021-9-27 14:38:38 | 显示全部楼层 |阅读模式
本帖最后由 趣意人生 于 2021-9-28 10:38 编辑

用多线命令(mline)绘制好的双线,后面由于位置关系不对,所有自己论坛上面搜集整理了一个程序。执行后“特性面板”的“多线对正”选项卡“数值”已经改过来了,可是图形的位置却没有发生改变!帮忙看下哪里出的问题!谢谢!
http://bbs.mjtd.com/forum.php?mod=attachment&aid=MTE1ODA3fDQ0NDVjODQ1M2YyNmM2NTgwMzAzMWEyMWQ1OWNjNGU1fDE3NDczODE1MTE%3D&request=yes&_f=.lsp
http://bbs.mjtd.com/forum.php?mod=attachment&aid=MTE1ODA4fGRmOGFmZTMyMzIzMTMyZTJhNzQ4YWU3MGUxY2Y2NTVkfDE3NDczODE1MTE%3D&request=yes&_f=.dwg
http://bbs.mjtd.com/forum.php?mod=attachment&aid=MTE1ODA5fGEzOGM1N2QzMWQ4M2E4OTk2MWVhZmFmYjc5YTkwZDU2fDE3NDczODE1MTE%3D&request=yes&_f=.png
http://bbs.mjtd.com/forum.php?mod=attachment&aid=MTE1ODEwfGU5MWM5OGRkYTE3YzEwNmRmOTA5N2M1YWM2YmIzNWJifDE3NDczODE1MTE%3D&request=yes&_f=.png
http://bbs.mjtd.com/forum.php?mod=attachment&aid=MTE1ODExfGUxYTAwNmYzMTAxMDZiNzMzNTViMWM5ZjNjMWEwNzQ0fDE3NDczODE1MTE%3D&request=yes&_f=.png

下面这是lsp程序
(defun c:DXWZ ()
(setq ent (entget (car (entsel))))
(setq st (subst (cons 70 1) (assoc 70 ent) ent))        ;;;组码70为多线对正,(值0,顶部;值1,中部;值2,底部)
(entmod st)
)
http://bbs.mjtd.com/forum.php?mod=attachment&aid=MTE1ODQzfGUzNWVhYjY2Y2JiYmMxOTVkMGY3MGNhYTFkMDkzNjY1fDE3NDczODE1MTE%3D&request=yes&_f=.lsp

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-9-28 15:35:35 | 显示全部楼层
本帖最后由 ssyfeng 于 2021-9-28 15:37 编辑

修改多线对齐样式:
  • (defun c:tt (/ en obj n)
  •   (setq en (car (entsel "\n选择多线:"))
  •      obj (vlax-ename->vla-object en)
  •     n (getint "\n输入对齐样式[0-上;1-无;2-下]默认1:")
  •   )
  •   (if (null n)
  •     (setq n 1)
  •   )
  •   (vlax-put-property obj 'Justification n)
  •   (princ)
  • )

评分

参与人数 1明经币 +1 收起 理由
趣意人生 + 1 赞一个!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2021-9-28 09:58:56 | 显示全部楼层
我也想搞明白怎么处理对正的问题。当时我的想法是画图的过程中通过按某键来切换对正。
 楼主| 发表于 2021-9-28 10:10:13 | 显示全部楼层
是的,我也是这个想法!我就是想如果画出来方向反了,调用上面的程序来调整位置!可是昨天折腾了一天,“属性面板”的值改过来了,可是图形却没有改变位置!但是手动去修改“属性面板”的“多线对正”,图形的位置就可以改变,不知道哪里的问题!希望有高手出来看下!
发表于 2021-9-28 14:38:20 | 显示全部楼层
趣意人生 发表于 2021-9-28 10:10
是的,我也是这个想法!我就是想如果画出来方向反了,调用上面的程序来调整位置!可是昨天折腾了一天,“属 ...

你是不是没有刷新下?我跟你的要求还不一样,我想的是画的过程中改变对正,主要是起点在对象左边,而终点在图形右边,就涉及到个捕捉对正的问题了。
 楼主| 发表于 2021-9-28 21:00:27 | 显示全部楼层
可以用了,谢谢!
 楼主| 发表于 2021-9-28 21:04:40 | 显示全部楼层
本帖最后由 趣意人生 于 2021-9-29 10:41 编辑

自己平常编程用的也不多,就是需要的使用论坛里找找整理整理!把两个程序一起发上来,感觉还有很大的调整和优化的空间。能用的朋友用下,能优化的朋友继续优化给需要的朋友们!
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;调整多线(mline)对正关系

(defun c:tt (/ en obj n)
  (setq en (car (entsel "\n选择多线:"))
     obj (vlax-ename->vla-object en)
    n (getint "\n输入对齐样式[0-上;1-无;2-下]默认0:")
  )
  (if (null n)
    (setq n 0)
  )
  (vlax-put-property obj 'Justification n)
  (princ)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;绘制多线并根据需要调用“tt”命令调整多线对正关系

(defun c:GG( )
(setq key1 (getstring  "\n设置双线宽度?[35mm(a)/40mm(s)/输入数值或量取(g)/默认30mm(空格)]:"))      
(if (= key1 "a") (setq w 35.0))(if (= key1 "A") (setq w 35.0))
(if (= key1 "s") (setq w 40.0))
(if (= key1 "S") (setq w 40.0))
(if (= key1 "g") (setq w (getdist "\n输入双线宽度<直接量取>:"))(command "_mline" "s" w "") )
(if (= key1 "G") (setq w (getdist "\n输入双线宽度<直接量取>:"))(command "_mline" "s" w "") )
(if (= key1 "")   (setq w 30.0))                                                                             

(setq key (getstring  "\n基准线位置?[上侧(a)/中心(s)/默认下侧(空格)]:"))      
(if (= key "a") (command "_mline" "J" "T" ""))
(if (= key "A") (command "_mline" "J" "T" ""))
(if (= key "s") (command "_mline" "J" "Z" ""))
(if (= key "S") (command "_mline" "J" "Z" ""))
(if (= key "")  (command "_mline" "J" "B" ""))         

(PRINC "\n-->选取起点开始绘制双线......")
(command "_mline" "s" w "")
(command "_mline")
(while (> (getvar "CMDACTIVE") 0) (command PAUSE))
(setq c (entlast))
       (setq key (getstring  "是否调整对正关系?[调整(v)/否(空格)]:"))      
       (if (= key "v") (c:tt))
       (if (= key "V") (c:tt))  
(setvar "CMDECHO" 1)
  (princ)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
先执行绘制绘制多线程序(GG),如果位置关系不对,就调用上面的程序(TT)调整"多线对正",最简单粗暴的调用方式了,期待后续朋友们继续优化了......



评分

参与人数 1明经币 +1 收起 理由
AndyWang + 1 很给力!

查看全部评分

发表于 2021-9-29 17:10:11 | 显示全部楼层
看看是不是要这样的效果:


本帖子中包含更多资源

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

x
 楼主| 发表于 2021-9-29 21:35:48 | 显示全部楼层
ssyfeng 发表于 2021-9-29 17:10
看看是不是要这样的效果:

      谢谢了!上面那两个程序基本能满足自己的要求了(自己本来的想法就是画双线,因为我们每次的画线方向都是随机的可能会导致偏移出来的那条线跑到我们想要效果的另外一侧去了,所有我就在后面就执行一下“调整多线对正”的程序,把上面绘制的那条偏移线直接转到另外一侧)。但是上面那个调用“tt”命令每次还要再选择一次刚刚绘制的双线,感觉麻烦了!
       今天我就把两个程序整合到一起了,可结果还是有点失望。用entlast得到上面创建的对象,在vla-函数中不支持(提示错误: 参数类型错误: VLA-OBJECT nil),水平实在有限,不知道如何写程序了.知道的朋友给看看。。。。。。


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;绘制双线,如果方向不对则将新建对象调整对正关系

(defun c:GG(/ en obj n )
(setq key1 (getstring  "\n设置双线宽度?[35mm(a)/40mm(s)/输入数值或量取(g)/默认30mm(空格)]:"))      
(if (= key1 "a") (setq w 35.0))
(if (= key1 "A") (setq w 35.0))
(if (= key1 "s") (setq w 40.0))
(if (= key1 "S") (setq w 40.0))
(if (= key1 "g") (setq w (getdist "\n输入双线宽度<直接量取>:"))(command "_mline" "s" w "") )
(if (= key1 "G") (setq w (getdist "\n输入双线宽度<直接量取>:"))(command "_mline" "s" w "") )
(if (= key1 "")   (setq w 30.0))                                                                             

(setq key (getstring  "\n基准线位置?[上侧(a)/中心(s)/默认下侧(空格)]:"))      
(if (= key "a") (command "_mline" "J" "T" ""))
(if (= key "A") (command "_mline" "J" "T" ""))
(if (= key "s") (command "_mline" "J" "Z" ""))
(if (= key "S") (command "_mline" "J" "Z" ""))
(if (= key "")  (command "_mline" "J" "B" ""))         

(PRINC "\n-->选取起点开始绘制双线......")
(command "_mline" "s" w "")
(command "_mline")
(while (> (getvar "CMDACTIVE") 0) (command PAUSE))
       (setq en (entlast))

       (setq key (getstring  "是否调整对正关系?[调整(v)/否(空格)]:"))      
       (if (= key "v")
             (
;;;              (setq en (entlast))
              (setq  obj (vlax-ename->vla-object en))      ;;;将entlast所得到的对象这里不能读取,类型不对         
              (setq  n (getint "\n输入对齐样式[0-上;1-无;2-下]默认0:"))
              (if  (null n)
                    (setq n 0)
                )
               (vlax-put-property obj 'Justification n)
              )
        )
;;;      (if (= key "V") (c:tt))  
(setvar "CMDECHO" 1)
  (princ)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
发表于 2021-9-30 08:46:21 | 显示全部楼层
试试行不行:
  • (defun c:GG(/ en obj n )
  •   (setq key1 (getstring  "\n设置双线宽度?[35mm(a)/40mm(s)/输入数值或量取(g)/默认30mm(空格)]:"))
  •   (if (= key1 "a") (setq w 35.0))
  •   (if (= key1 "A") (setq w 35.0))
  •   (if (= key1 "s") (setq w 40.0))
  •   (if (= key1 "S") (setq w 40.0))
  •   (if (= key1 "g") (setq w (getdist "\n输入双线宽度<直接量取>:"))(command "_mline" "s" w "") )
  •   (if (= key1 "G") (setq w (getdist "\n输入双线宽度<直接量取>:"))(command "_mline" "s" w "") )
  •   (if (= key1 "")   (setq w 30.0))
  •   (setq key (getstring  "\n基准线位置?[上侧(a)/中心(s)/默认下侧(空格)]:"))
  •   (if (= key "a") (command "_mline" "J" "T" ""))
  •   (if (= key "A") (command "_mline" "J" "T" ""))
  •   (if (= key "s") (command "_mline" "J" "Z" ""))
  •   (if (= key "S") (command "_mline" "J" "Z" ""))
  •   (if (= key "")  (command "_mline" "J" "B" ""))
  •   (PRINC "\n-->选取起点开始绘制双线......")
  •   (command "_mline" "s" w "")
  •   (command "_mline")
  •   (while (> (getvar "CMDACTIVE") 0) (command PAUSE))
  •   (setq key (getstring  "是否调整对正关系?[调整(v)/否(空格)]:"))
  •   (if (= key "v")
  •     (progn
  •       (setq  obj (vlax-ename->vla-object (entlast)))
  •       (setq  n (getint "\n输入对齐样式[0-上;1-无;2-下]默认0:"))
  •       (if (null n)
  •         (setq n 0)
  •       )
  •       (vlax-put-property obj 'Justification n)
  •     )
  •   )
  •   (setvar "CMDECHO" 1)
  •   (princ)
  • )

评分

参与人数 1明经币 +1 金钱 +20 收起 理由
趣意人生 + 1 + 20 优秀!

查看全部评分

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

本版积分规则

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

GMT+8, 2025-5-16 15:45 , Processed in 0.207001 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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