ejingsong 发表于 2012-6-2 18:05:55

新手 第一次写

本帖最后由 ejingsong 于 2012-6-3 19:42 编辑

作为一个新手   第一次写    终于发了一个对于我自己来说的“技术贴”
以前都是回复大侠们的帖子发的最多好像就是 “支持xxxxx”      呵呵   鼓捣一晚上弄个大杂烩   很多都是坛子的源码给自己留点念想“处女作”啊
自己瞎写着玩的    主要想法就是    画几个图形    然后把这几个图形顺便做成块    还很菜   高手们有空看的话指教指教
(defun C:tt()
; 获取在图元 en 之后产生的图元的选择集;
    (defun last_ent (en / ss)
    (if en
   (progn
       (setq ss (ssadd))
       (while (setq en (entnext en))
         (if (not (member (cdr (assoc 0 (entget en)))
                        '("ATTRIB" "VERTEX" "SEQEND")
                  )
             )
         (ssadd en ss)
         );if
       );while
       (if (zerop (sslength ss)) (setq ss nil))
       ss
   );progn
   (ssget "_x")
   );if
)
(setq zz (getpoint "\n 请输入第一桩芯点:"))
(setq rr (getreal "\n 请输入桩径<200>:"))
(if (null rr) (setq rr 200))
    (setq pt1 (polar zz pi (+ (* rr 0.5) rr)))
    (setq pt2 (polar zz 0 (+ (* rr 0.5) rr)))
    (setq pt3 (polar zz (* 0.5 pi) (+ (* rr 0.5) rr)))
    (setq pt4 (polar zz (* 1.5 pi) (+ (* rr 0.5) rr)))
   (if (not (tblsearch "LAYER" "Cen"))
   (command "layer" "m" "Cen" "c" 2 "" "l" "center2" "" "lw"
      0.18 "" "")
    )
    (command "layer" "s" "cen" "")
    (entmake (list '(0 . "POINT") (cons 10 zz)))
    (setq ss-end (entlast))
    (entmake (list '(0 . "CIRCLE") (cons 10 zz) (cons 40 rr)))
    (entmake (list '(0 . "LINE") (cons 10 pt1) (cons 11 pt2)))
    (entmake (list '(0 . "LINE") (cons 10 pt3) (cons 11 pt4)))
    (setq ss-end (last_ent ss-end))
;;造快表开始标志实体.
(and
(entmake (list'(0 . "BLOCK")'(2 . "*U")'(70 . 1)(cons 10 zz)))
(setq i 0)
(repeat (sslength ss-end)
    (setq ent (ssname ss-end i))
   (setq ENDBLK (entmake (entget ent)))
    (entdel ent)
    (setq i (1+ i))
)
) ;;造块表结束标志实体.
(setq blk (entmake '((0 . "ENDBLK"))));;返回以上块定义.
(if blk;如果造块成功.插入一个实例.
    (entmake (list (cons 0 "INSERT");生成块实体(和块定义是不同的).
   (cons 2 blk)       ;组码2引用块定义.
   (cons 10 zz)       ;块插入点,按定义点.
      )
    )
)
(princ)
)
   
   
   




http://bbs.mjtd.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 ejingsong的微博

ejingsong 发表于 2012-6-2 18:13:16

command   和entmake混乱用了   图层用entmake怎么建立没整明白    呵呵   

vlisp2012 发表于 2012-6-3 11:06:38

鼓励一下。

xyp1964 发表于 2012-6-3 15:26:40

来个伪源码的(defun c:tt ()
(if (= (tblsearch "block" "ZZ00") nil)
    (progn
      (setq s0 (entlast))
      (xyp-MkLaCo "TEST2" 2)
      (xyp-circle '(0 0) 0.5)
      (xyp-MkLaColt "Cen" 1 "center2")
      (xyp-line '(-0.6 0) '(0.6 0))
      (xyp-line '(0 -0.6) '(0 0.6))
      (command "block" "ZZ00" '(0 0) (xyp-SSelEntnext s0) "")
    )
)
(setq rr (Udist 7 "" "桩径<输入或鼠标直接量取>" rr nil))
(while (setq p0 (getpoint "\n第一桩芯点: "))
    (command "insert" "ZZ00" p0 rr rr 0)
)
(princ)
)

gao051525 发表于 2012-6-3 18:49:08

我也是菜鸟,支持楼主,希望我有一天也能真正自己也一个程序

gao051525 发表于 2012-6-3 19:00:15

没看懂,我再研究研究

skg123 发表于 2013-6-6 09:12:56

xyp1964 发表于 2012-6-3 15:26 static/image/common/back.gif
来个伪源码的

运行出现错误

skg123 发表于 2013-6-6 09:18:00

参考一下学习制作块,一般桩基绘制的数量较多,建议楼主 增加连续绘制桩基。

skg123 发表于 2013-10-17 17:48:20

经过修改,可以连续绘制(defun C:zhuangji()
; 获取在图元 en 之后产生的图元的选择集;
    (defun last_ent (en / ss)
    (if en
   (progn
       (setq ss (ssadd))
       (while (setq en (entnext en))
         (if (not (member (cdr (assoc 0 (entget en)))
                        '("ATTRIB" "VERTEX" "SEQEND")
                  )
             )
         (ssadd en ss)
         );if
       );while
       (if (zerop (sslength ss)) (setq ss nil))
       ss
   );progn
   (ssget "_x")
   );if
)
(setq rr (getreal "\n 请输入桩基半径<0.5m>:"))

(setq zz (getpoint "\n 请指定桩中心:"))
(while zz

(if (null rr) (setq rr 0.5))
    (setq pt1 (polar zz pi (+ (* rr 0.5) rr)))
    (setq pt2 (polar zz 0 (+ (* rr 0.5) rr)))
    (setq pt3 (polar zz (* 0.5 pi) (+ (* rr 0.5) rr)))
    (setq pt4 (polar zz (* 1.5 pi) (+ (* rr 0.5) rr)))
   (if (not (tblsearch "LAYER" "Cen"))
   (command "layer" "m" "Cen" "c" 2 "" "l" "center2" "" "lw"
      0.18 "" "")
    )
    (command "layer" "s" "cen" "")
   ; (entmake (list '(0 . "POINT") (cons 10 zz)));去分号制作中心点,
    (setq ss-end (entlast))
    (entmake (list '(0 . "CIRCLE") (cons 10 zz) (cons 40 rr)))
    (entmake (list '(0 . "LINE") (cons 10 pt1) (cons 11 pt2)))
    (entmake (list '(0 . "LINE") (cons 10 pt3) (cons 11 pt4)))
    (setq ss-end (last_ent ss-end))
;;造快表开始标志实体.
(and
(entmake (list'(0 . "BLOCK")'(2 . "*U")'(70 . 1)(cons 10 zz)))
(setq i 0)
(repeat (sslength ss-end)
    (setq ent (ssname ss-end i))
   (setq ENDBLK (entmake (entget ent)))
    (entdel ent)
    (setq i (1+ i))
)
) ;;造块表结束标志实体.
(setq blk (entmake '((0 . "ENDBLK"))));;返回以上块定义.
(if blk;如果造块成功.插入一个实例.
    (entmake (list (cons 0 "INSERT");生成块实体(和块定义是不同的).
   (cons 2 blk)       ;组码2引用块定义.
   (cons 10 zz)       ;块插入点,按定义点.
      )
    )
)
(setq zz (getpoint "\n 请指定桩中心:"))
)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:tt()
(if (= (tblsearch "block" "ZZ00") nil)
    (progn
      (setq s0 (entlast))
      (xyp-MkLaCo "TEST2" 2)
      (xyp-circle '(0 0) 0.5)
      (xyp-MkLaColt "Cen" 1 "center2")
      (xyp-line '(-0.6 0) '(0.6 0))
      (xyp-line '(0 -0.6) '(0 0.6))
      (command "block" "ZZ00" '(0 0) (xyp-SSelEntnext s0) "")
    )
)
(setq rr (Udist 7 "" "桩径<输入或鼠标直接量取>" rr nil))
(while (setq p0 (getpoint "\n第一桩芯点: "))
    (command "insert" "ZZ00" p0 rr rr 0)
)
(princ)
)

峰峰兒 发表于 2013-10-17 18:44:33

页: [1]
查看完整版本: 新手 第一次写