~希望 发表于 2012-4-19 11:51:10

生成法兰的原代码

(defunc:fl ()
(setvar "cmdecho" 0)
(if (< (getvar "osmode") 16384)
   (setvar "osmode" (+ (getvar "osmode") 16384)))   ; F3关
   ;;输入参数
   (setq zx( getpoint "\n 输入中心点:"))            
   (setq d1( getdist "\n 输入钢管外径:"))            
   (setq d3( getdist "\n 输入法兰外径:"))
   ;;判断螺栓分布直径
   (while(not (and (setq
   d2 (getdist zx"\n 输入螺栓分布直径:"))(< d1 d2 d3)))
       (princ "\n错误!螺栓分布直径应在内外圆之间!"))
   ;;判断螺栓孔径
   (while (not (and (setq d4 (getdist "\n 输入螺栓孔径:"))
         (< d4 (/ (- d3 d1) 2))))
    (princ "\n错误!螺栓孔径过大!"))
   (setq n ( getint "\n 输入螺栓数量:"))
   (setvar "dimcen" ( / d1 8));;;数值自定
   (command"circle"zx (/ d1 2))
   (command "_.dimcenter" (nentselp (polar zx Pi ( / d1 2))))
   (command "layer" "m" "zx" "c" "r" "zx" "");建新图层
   (command"circle"zx (/ d2 2))
   (command "layer" "s" 0 "")   ;恢复原图层
   (command"circle"zx (/ d3 2))
   (setq sa (/ pi n))
   (setq p2 (polar zx sa (/ d2 2)))
   (command"circle"p2 (/ d4 2))          ;;p2为螺栓孔中心
   (command "_.array" (entlast) "" "p" zx n 360.0 "N")
   (setq k1 (polar p2 (/ pi n) (- (/ d4 3 ))))
   (setq k2 (polar p2 (/ pi n) (+ (/ d4 3 ))))
   (command "pline" k1 k2 "" )
   (command "_.array" (entlast) "" "p" zx n 360.0 "Y")
   (setq jh (getdist"\n 请输入加强筋厚度:"));;虽然加强筋宽度可以输入,但是不想要那么多参数,加强筋可以另外去画。
   (setq sb (- pi pi))    ;;此处加强筋开始角度是0度,但是测试参数不能写0,不知道还有别的表达方法么。
   (setq s (/ jh 2))
   (setq s2 (/ d1 2))
   (setq c ( - (/ (- d3 d1) 2) 5))
   (setq p3 (polar zx sb s2))
   (setq j1 (polar p3 (* 0.5 pi) s))   
   (setq j2 (polar p3 (* -0.5 pi) s))   
   (setq j3 (polar j1 sb c))
   (setq j4 (polar j2 sb c))
   (command "pline" j1 j2 j4 j3 "c" )
   (command "_.array" (entlast) "" "p" zx n 360.0 "Y")
   (setvar "osmode" (- (getvar "osmode") 16384)) ; F3开
   (setvar "cmdecho" 1)
   (Princ)
)
感谢这几天论坛里朋友的帮助,完成了一个小程序,用来生成法兰的,因为才学,所以我感觉代码中应该有能简化的地方,欢迎高手来指点,不过这段代码已经测试过,使用是没有问题的,现在把代码贴出来,目的是相互学习,让大家指出不妥之处,另外这个程序写完了,计划另外再写一个新的,有好多地方也要请教大家,希望各位不要保留,指点一下,新程序另外开贴请教吧。

669423907 发表于 2012-4-19 14:27:40

支持一下源码!建议添加加强筋选择,程序会更通用些
页: [1]
查看完整版本: 生成法兰的原代码