多线(MLINE)对正调整,未能正常显示!大佬们帮忙看看!谢谢
本帖最后由 趣意人生 于 2021-9-28 10:38 编辑用多线命令(mline)绘制好的双线,后面由于位置关系不对,所有自己论坛上面搜集整理了一个程序。执行后“特性面板”的“多线对正”选项卡“数值”已经改过来了,可是图形的位置却没有发生改变!帮忙看下哪里出的问题!谢谢!
attach://115807.lsp
attach://115808.dwg
attach://115809.png
attach://115810.png
attach://115811.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)
)
attach://115843.lsp 本帖最后由 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输入对齐样式默认1:")
[*])
[*](if (null n)
[*] (setq n 1)
[*])
[*](vlax-put-property obj 'Justification n)
[*](princ)
[*])
我也想搞明白怎么处理对正的问题。当时我的想法是画图的过程中通过按某键来切换对正。 是的,我也是这个想法!我就是想如果画出来方向反了,调用上面的程序来调整位置!可是昨天折腾了一天,“属性面板”的值改过来了,可是图形却没有改变位置!但是手动去修改“属性面板”的“多线对正”,图形的位置就可以改变,不知道哪里的问题!希望有高手出来看下! 趣意人生 发表于 2021-9-28 10:10
是的,我也是这个想法!我就是想如果画出来方向反了,调用上面的程序来调整位置!可是昨天折腾了一天,“属 ...
你是不是没有刷新下?我跟你的要求还不一样,我想的是画的过程中改变对正,主要是起点在对象左边,而终点在图形右边,就涉及到个捕捉对正的问题了。 可以用了,谢谢! 本帖最后由 趣意人生 于 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:")
)
(if (null n)
(setq n 0)
)
(vlax-put-property obj 'Justification n)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;绘制多线并根据需要调用“tt”命令调整多线对正关系
(defun c:GG( )
(setq key1 (getstring"\n设置双线宽度?:"))
(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)调整"多线对正",最简单粗暴的调用方式了,期待后续朋友们继续优化了......
看看是不是要这样的效果:
ssyfeng 发表于 2021-9-29 17:10
看看是不是要这样的效果:
谢谢了!上面那两个程序基本能满足自己的要求了(自己本来的想法就是画双线,因为我们每次的画线方向都是随机的可能会导致偏移出来的那条线跑到我们想要效果的另外一侧去了,所有我就在后面就执行一下“调整多线对正”的程序,把上面绘制的那条偏移线直接转到另外一侧)。但是上面那个调用“tt”命令每次还要再选择一次刚刚绘制的双线,感觉麻烦了!
今天我就把两个程序整合到一起了,可结果还是有点失望。用entlast得到上面创建的对象,在vla-函数中不支持(提示错误: 参数类型错误: VLA-OBJECT nil),水平实在有限,不知道如何写程序了.知道的朋友给看看。。。。。。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;绘制双线,如果方向不对则将新建对象调整对正关系
(defun c:GG(/ en obj n )
(setq key1 (getstring"\n设置双线宽度?:"))
(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))
(setqobj (vlax-ename->vla-object en)) ;;;将entlast所得到的对象这里不能读取,类型不对
(setqn (getint "\n输入对齐样式默认0:"))
(if(null n)
(setq n 0)
)
(vlax-put-property obj 'Justification n)
)
)
;;; (if (= key "V") (c:tt))
(setvar "CMDECHO" 1)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
试试行不行:
[*](defun c:GG(/ en obj n )
[*](setq key1 (getstring"\n设置双线宽度?:"))
[*](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
[*] (setqobj (vlax-ename->vla-object (entlast)))
[*] (setqn (getint "\n输入对齐样式默认0:"))
[*] (if (null n)
[*] (setq n 0)
[*] )
[*] (vlax-put-property obj 'Justification n)
[*] )
[*])
[*](setvar "CMDECHO" 1)
[*](princ)
[*])
页:
[1]
2