999999 发表于 2024-1-13 16:13:21

(求助)各位大神,看能不能帮小弟解决一下,双边偏移的问题

各位大神,小弟在此打扰大家了,
如果有知道怎么解决的大神,抽空帮小弟解决一下,谢谢啦
代码附件已经发了

目前的情况就是:第一次输入命令时——输入间距为20——批量或只选一根线——结果往两边偏移的总间距是20(意思是左右两边一边偏移了10)(第一次输入命令是没有问题的)

第二次输入命令时(因为这个是带记忆功能的)——间距却变成了10(我想让这个间距还是20)——结果变成了两边偏移的总间距是10(意思是左右两边一边偏移了5)
第三次输入命令时(因为这个是带记忆功能的)——间距却变成了5(我想让这个间距还是20)——结果变成了两边偏移的总间距是5(意思是左右两边一边偏移了2.5)

求求大神,看能不能帮小弟解决这个问题,就是第一次输入的值是20,左右之间的间距是20,后面的不输入值,
默认的还是第一次输入的20,而不是越变越小的值
,感谢大神位的耐心停留

以下是代码

[*];双偏去中线
[*](defun c:EE( / en m n pon ename et ppp ouse )
[*](setvar "cmdecho" 1)
[*](COMMAND "OFFSET" PAUSE "")
[*];(prompt "\n Select Objects to Offset: ")
[*](setq en (ssget))
[*](setq m (sslength en ))
[*](setq n 0)
[*](setvar "cmdecho" 0)
[*](setq x (*(getvar "offsetdist")0.5))
[*](repeat m
[*]    (setq ename (ssname en n))
[*]    (setq et(entget ename))
[*]    (setq ppp (trans (cdr (assoc 10 et)) 0 1))
[*]    (setq ouse (list ename ppp))
[*]    (setq pon(trans (list (+ (car ppp) 1001) (- (cadr ppp) 1000) ) 0 1 ))
[*];    (command "offset" "" ouse pon "")
[*](command "offset" x ouse pon "")
[*]    (setq ouse (list (entlast) (trans (cdr (assoc 10 (entget (entlast)))) 0 1)))
[*]    (command "offset" (* (getvar "offsetdist") 2 )ouse ppp "")
[*]    (command "offset" (/ (getvar "offsetdist") 2 ) "")
[*]    (setq n (+ n 1))
[*]    (if (entget ename) (entdel ename))
[*])
[*])






xyp1964 发表于 2024-1-13 16:13:22


(defun c:tt ()
"双偏去中线"
(defun udist (bit kwd msg def bpt / inp)
   (if def
   (setq msg (strcat "\n" msg "<" (rtos def) ">: ")
           bit (* 2 (fix (/ bit 2)))
   )
   (setq msg (strcat "\n" msg ": "))
   )
(initget bit kwd)
(setq inp(if bpt(getdist msg bpt)(getdist msg)))
(if inp inp def)
)
(or dd (setq dd 20.))
(setq dd (Udist 7 "" "距离<输入或鼠标直接量取>" dd nil)
        d1 (* dd 0.5)
)
(setq i -1)
(if (setq ss (ssget))
    (while (setq s1 (ssname ss (setq i (1+ i))))
      (setq ob (vlax-ename->vla-object s1))
      (vla-offset ob d1)
      (vla-offset ob (- d1))
      (entdel s1)
    )
)
(princ)
)

xj6019 发表于 2024-1-13 16:45:40

随便搞搞不就行了





;双偏去中线
(defun c:EE( / en m n pon ename et ppp ouse )
(setvar "cmdecho" 1)
(COMMAND "OFFSET" PAUSE "")
;(prompt "\n Select Objects to Offset: ")
        (IF (AND
                                (setq en (ssget))
                                (setq m (sslength en ))
                                (setq n 0)
                        )
                (PROGN
                        (setvar "cmdecho" 0)
                        (setq x (*(getvar "offsetdist")0.5))
                        (repeat m
                                (setq ename (ssname en n))
                                (setq et(entget ename))
                                (setq ppp (trans (cdr (assoc 10 et)) 0 1))
                                (setq ouse (list ename ppp))
                                (setq pon(trans (list (+ (car ppp) 1001) (- (cadr ppp) 1000) ) 0 1 ))
                                ;    (command "offset" "" ouse pon "")
                                (command "offset" x ouse pon "")
                                (setq ouse (list (entlast) (trans (cdr (assoc 10 (entget (entlast)))) 0 1)))
                                (command "offset" (* (getvar "offsetdist") 2 )ouse ppp "")
                                (command "offset" (/ (getvar "offsetdist") 2 ) "")
                                (setq n (+ n 1))
                                (if (entget ename) (entdel ename))
                        )
                        (setvar "offsetdist" (*(getvar "offsetdist")2))
                )
        )
        (princ)
)

999999 发表于 2024-1-13 18:08:53

xyp1964 发表于 2024-1-13 17:16


谢谢院长大人,这个插件非常的好用,感谢感谢

999999 发表于 2024-1-13 18:11:43

xj6019 发表于 2024-1-13 16:45
随便搞搞不就行了




大神改的正是我想要的,谢谢大神出手

zmzk 发表于 2024-2-9 06:53:41

非常不错, 收下备用
页: [1]
查看完整版本: (求助)各位大神,看能不能帮小弟解决一下,双边偏移的问题