gbhsu 发表于 2011-7-22 19:19:44

装饰设计中的[九厘板]绘图命令

本帖最后由 gbhsu 于 2012-10-20 21:38 编辑

绘制九厘板
(defun c:jlb (/ p1 p2 dist ec1 ec2 ec3 ec4 key pt-tmp eh1 eh2 l1-l2 rlt
       vrl p-list pt-end)
(command "undo" "group")
(setvar "osmode" 255)
(setvar "cmdecho" 0)
(setq p1 (getpoint "\n输入九厘板第一点:"))
(setq p2 (getpoint p1 "\n输入九厘板下一点:"))
(setvar "osmode" 0)
(command "line" p1 p2 "")
(setq ang (angle p1 p2))
(setq ang1 (+ ang (* pi 0.5)))
(setq ec (entlast))
(command "change" ec "" "p" "c" 2 "")
(command "line" (polar p1 ang1 9) (polar p2 ang1 9) "")
(setq ec1 (entlast))
(command "change" ec1 "" "p" "c" 2 "")
(setq eh1 (cdr (assoc 5 (entget ec1)))) ;第三条直线的句柄
(setq dist (distance p1 p2)key T )
(setq pt-end (polar p2 ang1 3))
(if (<= dist 39)
    (setq key nil)
    (progn
      (setq pt1 (polar p1 ang1 3)
   pt2 (polar pt1 ang 33)
   pt3 (polar (polar pt1 ang 30) ang1 -3)
            pt4 pt2
   pt5 (polar pt4 ang 3)
   pt6 (polar pt3 ang 3)
   pt7 pt5
   pt8 (polar pt7 ang 3)
   pt9 (polar pt6 ang 3)
   pt10 pt8
   pt11 (polar pt7 ang1 3)
   pt12 (polar pt11 ang -3)
   pt13 pt7
   pt14 pt4
   pt15 (polar pt12 ang -3)
   pt16 (polar pt1 ang1 3)
   pt17 pt15
   pt18 (polar pt12 ang1 3)
   pt19 pt17
   pt20 pt12
   pt21 (polar pt18 ang 3)
   pt22 pt20
   pt23 pt11
   pt24 (polar pt21 ang 3)
   pt25 pt11
   pt26 pt10
)
      
      (command ".pline" pt1 pt2 pt3 pt4 pt5 pt6 pt7 pt8 pt9 pt10
               pt11 pt12 pt13 pt14 pt15 pt16 pt17 pt18
               pt19 pt20 pt21 pt22 pt23 pt24 pt25 pt26)
    )
)   ;end of if
(while key
    (setq pt1 pt26
          dist (distance pt1 pt-end)
    )
   
    (if (> dist 39)
      (progn
(setq
   pt2 (polar pt1 ang 33)
   pt3 (polar (polar pt1 ang 30) ang1 -3)
            pt4 pt2
   pt5 (polar pt4 ang 3)
   pt6 (polar pt3 ang 3)
   pt7 pt5
   pt8 (polar pt7 ang 3)
   pt9 (polar pt6 ang 3)
   pt10 pt8
   pt11 (polar pt7 ang1 3)
   pt12 (polar pt11 ang -3)
   pt13 pt7
   pt14 pt4
   pt15 (polar pt12 ang -3)
   pt16 (polar pt15 ang -33)
   pt17 pt15
   pt18 (polar pt12 ang1 3)
   pt19 pt17
   pt20 pt12
   pt21 (polar pt18 ang 3)
   pt22 pt20
   pt23 pt11
   pt24 (polar pt21 ang 3)
   pt25 pt11
   pt26 pt10
)
      (commandpt2 pt3 pt4 pt5 pt6 pt7 pt8 pt9 pt10
               pt11 pt12 pt13 pt14 pt15 pt16 pt17 pt18
               pt19 pt20 pt21 pt22 pt23 pt24 pt25 pt26)
      );end of progn
      (progn
      (setq pt2 pt-end
   pt3 pt1
   pt4 pt11
   pt5 pt24
   pt6 pt25
   pt7 (polar pt2 ang1 3)
   )
      (setq key nil)
      (command pt2 pt3 pt4 pt5 pt6 pt7 "")
    ))
)   ;end of while
(setq ec2 (entlast))
(command "change" ec2 "" "p" "c" 1 "")
(setvar "osmode" 255)
(command "undo" "end")
(princ "\n感谢你使用立面绘制程序,有问题及时与燕川布衣联系.\nQQ:112100528")
(princ)    ;静默退出
)


ljpnb 发表于 2011-7-22 22:38:53

PL线有许多重合线,trim时肯定会出错的.有个简单办法就是程序最后加上explode,把PL线炸开.

gbhsu 发表于 2011-7-22 22:53:08

回复 ljpnb 的帖子

炸开后删除困难呀!

yzr2002626 发表于 2011-7-23 10:08:09

GBHSU建议那中间的那直线是整的,只画那斜的那9根线

zhynt 发表于 2011-7-23 11:05:20

本帖最后由 zhynt 于 2011-7-23 11:06 编辑

这个怎么样?
(defun zx (pt ang / pt1 pt2 pt3 pt4 sen)
(setq      pt1 pt
      pt2 (polar pt1 (+ ang (* 0.25 pi)) (* (sqrt 2) 3))
      pt3 (polar pt2 (+ ang (* 0.75 pi)) (* (sqrt 2) 3))
      pt4 (polar pt3 (+ ang (* 0.25 pi)) (* (sqrt 2) 3))
)
(command "PLINE" pt1 pt2 pt3 pt4 "")
(setq sen (entlast))
(command "change" sen "" "p" "c" 1 "")
(command "copy" sen "" pt1 (polar pt1 ang 3))
(command "copy" sen "" pt1 (polar pt1 ang 6))
)
(defun c:jlb ( )
(command "undo" "group")
(setvar "osmode" 255)
(setvar "cmdecho" 0)
(setq p1 (getpoint "\n输入九厘板第一点:"))
(setq p2 (getpoint p1 "\n输入九厘板下一点:"))
(setvar "osmode" 0)
(command "line" p1 p2 "")
(setq ang (angle p1 p2))
(setq ang1 (+ ang (* pi 0.5)))
(setq ec (entlast))
(command "change" ec "" "p" "c" 2 "")
(command "line" (polar p1 ang1 9) (polar p2 ang1 9) "")
(setq ec1 (entlast))
(command "change" ec1 "" "p" "c" 2 "")
(command "line" (polar p1 ang1 3) (polar p2 ang1 3) "")
(setq ec3 (entlast))
(command "change" ec3 "" "p" "c" 1 "")
(command "line" (polar p1 ang1 6) (polar p2 ang1 6) "")
(setq ec3 (entlast))
(command "change" ec3 "" "p" "c" 1 "")
(setq dist (distance p1 p2)
      ang (angle p1 p2)
      )
(if (and (<= dist 39) (> dist 9))
    (zx (polar p1 ang (/ (- dist 9) 2)) ang)
    (progn (setq n (fix (/ dist 39)))
         (repeat n (zx (polar p1 ang (+ (* (1- n) 9)(* n 30))) ang) (setq n (1- n)))
    )
)
(setvar "osmode" 255)
(command "undo" "end")
(princ
    "\n本程序改编于燕川布衣,有问题及时与他或她联系.\nQQ:112100528"
)
(princ)                                                    ;静默退出
)

gbhsu 发表于 2011-7-23 11:10:37

回复 zhynt 的帖子

很好。。。。
版权公开,大家随便改,随便use!

xyp1964 发表于 2011-7-23 11:17:19

效果:

qcw911 发表于 2011-7-23 16:30:30

本帖最后由 qcw911 于 2011-7-23 16:31 编辑

回复 zhynt 的帖子

能变更成输入命令后画好多个吗?
像院长那样

zhynt 发表于 2011-7-23 16:59:52


(defun zx (pt ang / pt1 pt2 pt3 pt4 sen)
(setq        pt1 pt
        pt2 (polar pt1 (+ ang (* 0.25 pi)) (* (sqrt 2) 3))
        pt3 (polar pt2 (+ ang (* 0.75 pi)) (* (sqrt 2) 3))
        pt4 (polar pt3 (+ ang (* 0.25 pi)) (* (sqrt 2) 3))
)
(command "PLINE" pt1 pt2 pt3 pt4 "")
(setq sen (entlast))
(command "change" sen "" "p" "c" 1 "")
(command "copy" sen "" pt1 (polar pt1 ang 3))
(command "copy" sen "" pt1 (polar pt1 ang 6))
)
(defun c:jlb ()
(command "undo" "group")
(setvar "osmode" 255)
(setvar "cmdecho" 0)
(while (setq p1 (getpoint "\n输入九厘板第一点:"))
    (setq p2 (getpoint p1 "\n输入九厘板下一点:"))
    (setvar "osmode" 0)
    (command "line" p1 p2 "")
    (setq ang (angle p1 p2))
    (setq ang1 (+ ang (* pi 0.5)))
    (setq ec (entlast))
    (command "change" ec "" "p" "c" 2 "")
    (command "line" (polar p1 ang1 9) (polar p2 ang1 9) "")
    (setq ec1 (entlast))
    (command "change" ec1 "" "p" "c" 2 "")
    (command "line" (polar p1 ang1 3) (polar p2 ang1 3) "")
    (setq ec3 (entlast))
    (command "change" ec3 "" "p" "c" 1 "")
    (command "line" (polar p1 ang1 6) (polar p2 ang1 6) "")
    (setq ec3 (entlast))
    (command "change" ec3 "" "p" "c" 1 "")
    (setq dist (distance p1 p2)
          ang(angle p1 p2)
    )
    (if        (and (<= dist 39) (> dist 9))
      (zx (polar p1 ang (/ (- dist 9) 2)) ang)
      (progn (setq n (fix (/ dist 39)))
             (repeat n
             (zx (polar p1 ang (+ (* (1- n) 9) (* n 30))) ang)
             (setq n (1- n))
             )
      )
    )
    (setvar "osmode" 255)
    (command "undo" "end")
)
(princ
    "\n本程序改编于燕川布衣,有问题及时与他或她联系.\nQQ:112100528"
)
(princ)                                ;静默退出
)
页: [1]
查看完整版本: 装饰设计中的[九厘板]绘图命令