Randolph 发表于 2022-7-6 12:44:41

Lisp命令:切片法线(re

谢谢你参加这个论坛。
 
这是我的问题:
 
我经常使用“切片”命令来切割实体。这是我的简单捷径:
 
(DEFUN C:S ()(COMMAND "_SLICE"))
 
与大多数情况下平行于UCS平面剪切一样,我几乎总是必须键入以下选项之一:
 
[...XY/YZ/ZX...] xy
 
每天有数百次割伤,这让人感到厌倦。
 
这是我的问题:
 
为了加快建模速度,使用3个快捷命令将非常有用:
 
SX。。。平行于YZ平面的切片
SY。。。平行于ZX平面的切片
SZ。。。平行于XY平面的切片
 
程序:sx右鼠标按钮选择对象RMB选择平面上的点RMB选择侧面的点以保留RMB
 
有人能发布LISP代码吗?非常感谢你的帮助。非常感谢。
 
伦道夫

Randolph 发表于 2022-7-6 12:55:07

我已经知道了:
 

(DEFUN C:SX ()
(SETQ OBJEKTE (SSGET))
(SETQ PUNKT (GETPOINT "\nPoint on YZ plane:"))
(SETQ SEITE (GETPOINT "\nSide to keep:"))
(COMMAND "_OSNAP" "")
(COMMAND "_SLICE" "_SI" OBJEKTE "_YZ" PUNKT SEITE)
(COMMAND "_OSNAP" "_END,_INT,_MID,_CEN,_INS,_PER")
(COMMAND "_REDRAW")
(SETQ OBJEKTE NIL)
)

gile 发表于 2022-7-6 13:00:47

你好
 
这是一个“三合一”
 
(mapcar
'(lambda (fun opt)
    (eval (list 'defun
                fun
                nil
                (list 'vl-cmdf "_.slice" '(ssget) "" opt pause pause)
                '(princ)
          )
    )
)
'(c:SX c:SY c:SZ)
'("XY" "YZ" "ZX")
)

Randolph 发表于 2022-7-6 13:06:12

保持两面性。也许有人需要它,尽管我想它太简单了,你们中的许多人都不感兴趣
 

(DEFUN C:SXA ()
(SETQ OBJEKTE (SSGET))
(SETQ PUNKT (GETPOINT "\nPunkt :"))
(COMMAND "_OSNAP" "")
(COMMAND "_SLICE" "_SI" OBJEKTE "_YZ" PUNKT "_B")
(COMMAND "_OSNAP" "_END,_INT,_MID,_CEN,_INS,_PER")
(COMMAND "_REDRAW")
(SETQ OBJEKTE NIL)
)

Randolph 发表于 2022-7-6 13:13:08

嗨,吉尔,
 
哇,看来我的方法有点尴尬。。。
 
伦道夫

Randolph 发表于 2022-7-6 13:18:13

但飞机不知怎么搞混了。。。但没问题。必须是:
 

'(c:SX c:SY c:SZ)
'("YZ" "ZX" "XY")

我想是吧。谢谢

Lee Mac 发表于 2022-7-6 13:24:07

不错的Gile

gile 发表于 2022-7-6 13:32:07

mapcar语句只是一种有趣而优雅的方式,以避免生成仅在某些选项上不同的类似函数。
 
你可以写3(或6)(defun…)它将执行相同的操作,但查看vl cmdf函数,而不是命令,它允许使用(ssget)作为参数。
 
(defun c:SX ()
(vl-cmdf "_.slice" (ssget) "" "XY" pause pause)
(princ)
)
 
更进一步说,“6合1”
 
(mapcar
'(lambda (fun opt1 opt2)
    (eval (list 'defun
                fun
                nil
                (list 'vl-cmdf "_.slice" '(ssget) "" opt1 pause opt2)
                '(princ)
          )
    )
)
'(c:SX c:SY c:SZ c:SXA c:SYA c:SZA)
'("XY" "YZ" "ZX" "XY" "YZ" "ZX")
'(pause pause pause "_both" "_both" "_both")
)

alanjt 发表于 2022-7-6 13:32:49

嘿,看起来很熟悉。我一定在别处见过你这样做。
(mapcar
'(lambda (f r)
    (eval (list 'defun
      f
      nil
      (list 'setvar "filletrad" r)
      (list 'princ (strcat "\nFillet radius set to: " (rtos r)))
      (list 'vl-cmdf "_.fillet")
      '(princ)
      )
    )
)
'(c:FF    c:F1    c:F15    c:F2    c:F3    c:F4    c:F5    c:F6    c:F7    c:F8    c:F9)
'(0      1    1.5    2    3    4    5    6    7    8    9)
)

gile 发表于 2022-7-6 13:44:32

嗨,艾伦,
 
这不是我的(我不使用太多圆角),但我在几天前写过一篇文章,用numpad在预定义视图之间切换。
 
(mapcar
'(lambda (f v)
    (eval (list 'defun
                f
                nil
                (list 'command "_.view" v)
                '(princ)
          )
    )
)
'(c:0 c:1 c:2 c:3 c:4 c:5 c:6 c:7 c:8 c:9)
'("_bottom" "_swiso" "_front" "_seiso" "_left" "_top" "_right" "_nwiso"
   "_back" "_neiso")
)
页: [1] 2
查看完整版本: Lisp命令:切片法线(re