找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: Free-Lancer

[他山之石] 一些随手写的小工具(慢慢更新)

    [复制链接]
 楼主| 发表于 2013-5-5 15:51:37 | 显示全部楼层
30 在Line一端放置一个编号[pcode=lisp,true](defun c:tt (/ ss sl i e el ms n)
  (setq        ms (vla-get-modelspace
             (vla-get-activedocument (vlax-get-acad-object))
           )
        n  1
  )
  (if (setq ss (ssget '((0 . "line"))))
    (progn
      (setq sl (sslength ss)
            i  -1
      )
      (repeat sl
        (setq e         (ssname ss (setq i (1+ i)))
              el (cons (vlax-curve-getstartpoint e) el)
        )
      )
      (setq el (vl-sort el '(lambda (e1 e2) (< (cadr e1) (cadr e2)))))
      (foreach x el
        (vla-addtext ms (itoa n) (vlax-3d-point x) 2.5)
        (setq n (1+ n))
      )
    )
  )
  (princ)
)[/pcode]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-5 15:59:33 | 显示全部楼层
31 连续绘制矩形 Region 并 Union[pcode=lisp,true](defun c:tt (/ cutz ms thisdrawing)
  (defun cutz (p)
    (list (car p) (cadr p))
  )
  (setq        thisdrawing (vla-get-activedocument (vlax-get-acad-object))
        ms            (vla-get-modelspace thisdrawing)
  )
  (vla-startundomark thisdrawing)
  (vl-catch-all-apply
    '(lambda (/ p1 p2 p3 p4 v Regions Region pl)
       (while (and (setq p1 (getpoint "\nFirst Corner: "))
                   (setq p3 (getcorner p1 "\nOther Corner: "))
              )
         (setq p1 (cutz p1)
               p3 (cutz p3)
               v  (mapcar '- p3 p1)
               p2 (mapcar '+ p1 (list (car v) 0.))
               p4 (mapcar '+ p1 (list 0. (cadr v)))
         )
         (setq
           pl (vlax-invoke
                ms
                'AddLightweightPolyline
                (append p1 p2 p3 p4)
              )
         )
         (vla-put-closed pl :vlax-true)
         (if regionS
           (progn
             (setq region (vlax-invoke ms 'addregion (list pl)))
             (vla-Boolean (car regionS) acUnion (car region))
           )
           (setq regionS (vlax-invoke ms 'addregion (list pl)))
         )
         (vla-delete pl)
       )
     )
    nil
  )
  (vla-endundomark thisdrawing)
  (princ)
)[/pcode]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-5 16:06:37 | 显示全部楼层
32 给 Pline 的每段标个长度[pcode=lisp,true](defun c:dmpl (/ _pi2 ang->hor&ver e i n pts ms)
  (setq _pi2 (* pi 0.5))
  (defun ang->hor&ver (an)
    (or        (zerop an)
        (zerop (rem an (* 0.5 pi)))
    )
  )
  (while (setq e (car (entsel)))
    (setq i (fix (vlax-curve-getendparam e))
          n 0
    )
    (repeat (1+ i)
      (setq pts        (cons (vlax-curve-getpointatparam e n) pts)
            n        (1+ n)
      )
    )
    (setq ms (vla-get-modelspace
               (vla-get-activedocument (vlax-get-acad-object))
             )
    )
    (mapcar (function
              (lambda (x y / txt p d str an)
                (setq an (angle x y)
                      d         (distance x y)
                      p         (polar        x
                                an
                                (* d 0.5)
                         )
                      p         (vlax-3d-point
                           (polar p (+ an _pi2) 100.)
                         )
                )
                (setq txt (vla-addtext
                            ms
                            (setq str (rtos d 2 0))
                            p
                            250
                          )
                )
                (vla-put-alignment txt acAlignmentBottomCenter)
                (vla-put-textalignmentpoint txt p)
                (vla-put-rotation txt an)
                (if (not (zerop (- d (distof str))))
                  (vla-put-color txt acred)
                )
                (if (not (ang->hor&ver an))
                  (vla-put-color txt acblue)
                )
                (vla-put-scalefactor txt 0.75)
              )
            )
            pts
            (cdr pts)
    )
  )
  (princ)
)[/pcode]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-5 16:19:37 | 显示全部楼层
33 逐个拾取Text连接[sell=5][pcode=lisp,true](defun fy:EntSelF (Msg Filter / EntN pbDist PtPick ssPick)
  (setvar "ErrNo" 0)                        ; clear ErrNo for loop
  (while (and (not (setq EntN (if Msg        ; if selection prompt
                                (entsel Msg) ; then (entsel) w/prompt
                                (entsel)
                              )
                   )
              )                                ; while no selection (or no exit)
              (/= 52 (getvar "ErrNo"))
         )
  )                                        ; if null response
  (cond
    ((= (type EntN) 'LIST)                ; if not exit
     (setq pbDist (abs                        ; return absolute number, get pixel ratio
                    (/ (* (/ (getvar "PickBox") (cadr (getvar "ScreenSize")))
                          (getvar "ViewSize")
                       )                ; apply to viewsize (in units)
                       (sin (* 0.25 pi))
                    )
                  )                        ; at 45°
           PtPick (cadr EntN)
     )                                        ; get point of pick
     (if (setq ssPick (ssget "_C"        ; if entities in crossing
                             (polar PtPick (* 1.25 pi) pbDist)
                                        ; lower left
                             (polar PtPick (* 0.25 pi) pbDist)
                                        ; upper right
                             Filter
                      )
         )                                ; match filter, if any
       (cons (ssname ssPick 0) (list PtPick))
     )
    )
    ((= (type EntN) 'STR) EntN)
  )
)
(defun c:JoinText (/ thisdrawing)
  (setq thisdrawing (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark thisdrawing)
  (vl-catch-all-apply
    (function
      (lambda (/ e1 e2 str1 str2 obj)
        (if (setq e1 (fy:EntSelF "\n拾取基准文字: " '((0 . "text"))))
          (progn
            (setq obj (vlax-ename->vla-object (car e1)))
            (redraw (car e1) 3)
            (while
              (setq e2 (fy:EntSelF "\n拾取连接文字: " '((0 . "text"))))
               (setq str1 (vla-get-textstring obj)
                     str2 (vla-get-textstring
                            (vlax-ename->vla-object (car e2))
                          )
               )
               (vla-put-textstring
                 (vlax-ename->vla-object (car e1))
                 (strcat str1 str2)
               )
               (vla-highlight obj :vlax-true)
               (entdel (car e2))
            )
            (redraw (car e1) 4)
          )
        )
      )
    )
  )
  (vla-endundomark thisdrawing)
  (vlax-release-object thisdrawing)
  (princ)
)[/pcode][/sell]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-6 10:34:02 | 显示全部楼层
34 对首尾宽度不同的Pline 弧段(非直线段)的一个模拟[pcode=lisp,true];;首尾宽度不等的单段Pline轮廓模拟
(defun c:tt (/ e obj sp ep vs p l d d1 sw ew ptl pl)
  (if (setq e (car (entsel)))
    (progn
      (setq obj        (vlax-ename->vla-object e)
            sp        (vlax-curve-getstartpoint e)
            ep        (vlax-curve-getendpoint e)
            vs        (vlax-curve-getsecondderiv obj 0.)
            p        (mapcar '+ sp vs) ;_圆心
            l        (vlax-curve-getdistatparam e (vlax-curve-getendparam e))
            d        (/ l 64.)
            d1        0.
      )
      (vla-getwidth obj 0 'sw 'ew)
      (repeat 65
        (setq ptl (cons (list (vlax-curve-getpointatdist e d1) d1) ptl)
              d1  (+ d1 d)
        ) ;_构造等分点
      )
      ;;y=kx+b
      ;;
      (setq
        pl (mapcar
             '(lambda (x)
                (list
                  (polar (car x)
                         (angle (car x) p)
                         (* 0.5 (+ sw (* (/ (- ew sw) l) (cadr x)))) ;_直线方程
                  )
                  (polar (car x)
                         (angle p (car x))
                         (* 0.5 (+ sw (* (/ (- ew sw) l) (cadr x))))
                  )
                )
              )
             ptl
           )
      )
      (setvar "cecolor" "1")
      (setvar "osmode" 0)
      (foreach x pl
        (vl-cmdf ".line" "_non" (car x) "_non" (cadr x) "")
      )
      ;|
      (vl-cmdf ".pline" "w" "0" "0")
      (foreach x (mapcar 'car pl);_外侧点
        (vl-cmdf x)
      )
      (foreach x (reverse (mapcar 'cadr pl));_内侧点
        (vl-cmdf x)
      )
      (vl-cmdf "c")
      |;
    )
  )
  (princ)
)[/pcode]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-6 10:36:10 | 显示全部楼层
好帖留名,慢慢学习
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-6 10:38:28 | 显示全部楼层
本帖最后由 Free-Lancer 于 2013-5-6 11:04 编辑

35 重新生成 Pline,[pcode=lisp,true](defun c:pll (/ ss sl e n i pts ptl el)
  (if (setq ss (ssget '((0 . "*polyline"))))
    (progn
      (setq sl (sslength ss))
      (while (> sl 0)
        (setq e        (ssname ss (setq sl (1- sl)))
              n        (vlax-curve-getendparam e)
              i        0
              el (entget e)
              PTs NIL
        )
        (repeat        (fix (1+ n))
          (setq        pts (cons (vlax-curve-getpointatparam e i) pts)
                i   (1+ i)
          )
        )
        
        (entmake
          (append (list        '(0 . "LWPOLYLINE")
                        '(100 . "AcDbEntity")
                        '(100 . "AcDbPolyline")
                        (assoc 8 el)
                        (assoc 38 el)
                        (cons 90 (length pts))
                        '(43 . 0)
               
                  )
                  (mapcar '(lambda (x) (list 10 (car x) (cadr x))) pts)
          )
        )
        (entdel e)
      )
    )
  )
  (princ)
)[/pcode]
还有一个[pcode=lisp,true](defun c:pll (/ ss sl e n i pts ptl)
  (if (setq ss (ssget '((0 . "*polyline"))))
    (progn
      (setq sl (sslength ss))
      (while (> sl 0)
        (setq e        (ssname ss (setq sl (1- sl)))
              n        (vlax-curve-getendparam e)
              i        0
              PTL NIL
        )
        (repeat        (fix (1+ n))
          (setq        pts (cons (vlax-curve-getpointatparam e i) pts)
                i   (1+ i)
          )
        )
        (while pts
          (setq        ptl (cons (car pts) ptl)
                pts (cdddr pts)
          )
        )
        (entmake
          (append (list        '(0 . "LWPOLYLINE")
                        '(100 . "AcDbEntity")
                        '(100 . "AcDbPolyline")
                        (assoc 38 (entget e))
                        (cons 90 (length ptl))
                        '(43 . 0)
                        '(62 . 1)
                  )
                  (mapcar '(lambda (x) (list 10 (car x) (cadr x))) ptl)
          )
        )
      )
    )
  )
  (princ)
)[/pcode]
还有一个,随手写的弊端,可能是不同情况吧[pcode=lisp,true](defun c:drpl (/ acad doc dwg pts ptl lay)
  (setq        acad (vlax-get-acad-object)
        doc  (vla-get-documents acad)
        dwg  (vla-item doc "dgx.dwg")
  )
  (vlax-for obj        (vla-get-modelspace dwg)
    (if        (wcmatch (vla-get-objectname obj) "*Polyline")
      (progn
        (setq ptl nil)
        (setq pts (safearray-value
                    (variant-value (vla-get-coordinates obj))
                  )
              lay (vla-get-layer obj)
        )
        (while pts
          (setq        ptl (cons (list (car pts) (cadr pts)) ptl)
                pts (cddr pts)
          )
        )
        (setvar "clayer" lay)
        (vl-cmdf ".pline")
        (foreach x (reverse ptl)
          (vl-cmdf x)
        )
        (vl-cmdf)
      )
    )
  )
  (princ)
)[/pcode]
又一个类似的[pcode=lisp,true](vl-load-com)
(defun c:tt (/ doc ms)
  (setq        doc (vla-get-activedocument (vlax-get-acad-object))
        ms  (vla-get-modelspace doc)
  )
  (vla-startundomark doc)
  (vl-catch-all-apply
    (function
      (lambda (/ e el p ent pt i p1 p2 pl)
        (while (and
                 (setq e (entsel "\nSelect Polyline: "))
                 (setq el (entget (car e)))
                 (= (cdr (assoc 0 el)) "LWPOLYLINE")
               )
          (setq        p   (cadr e)
                ent (vlax-ename->vla-object (car e))
          )
          (setq        pt (vlax-curve-getclosestpointto ent p)
                i  (fix (vlax-curve-getparamatpoint ent pt))
                p1 (vlax-curve-getpointatparam ent i)
                p2 (vlax-curve-getpointatparam ent (1+ i))
          )
          (vla-setbulge
            (setq pl (vlax-invoke
                       ms
                       'addlightweightpolyline
                       (list (car p1) (cadr p1) (car p2) (cadr p2))
                     )
            )
            0
            (vla-getbulge ent i)
          )
          (vla-put-color pl acGreen)
          (vla-put-ConstantWidth pl 0.1)
        )
      )
    )
    nil
  )
  (vla-endundomark doc)
  (princ)
)[/pcode]


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-6 10:41:13 | 显示全部楼层
本帖最后由 Free-Lancer 于 2013-5-6 10:44 编辑

36 导出 Pline 坐标到 TXT文件[pcode=lisp,true](defun c:ptoxls        (/ ss fl ename n i pts tpy epam v p)
  (if (setq ss (ssget '((0 . "*polyline"))))
    (progn
      (setq fl (open "f:\dddd.txt" "a"))
      (setq ssl (sslength ss))
      (while (> ssl 0)
        (setq ename (ssname ss (setq ssl (1- ssl))))
        (setq typ (cdr (assoc 0 (entget ename))))
        (setq n        (1+ (/ (fix (setq epam (vlax-curve-getendparam ename))) 2))
              i        0
        )
        (repeat        n
          (setq p (vlax-curve-getpointatparam ename i))
          (if (wcmatch typ "LWPOLYLINE")
            (progn
              (setq v (cdr (assoc 39 el)))
              (setq pts (cons (list (car p) (cadr p) v) pts))
            )
            (setq pts (cons p pts)
                  i   (+ 2 i)
            )
          )
          (if (> i epam)
            (setq i epam)
          )
        )
      )
      (foreach x pts
        (if (and (< (last x) 900)
                 (> (last x) 100)
            )
          (write-line
            (strcat (rtos (car x) 2 3)
                    ","
                    (rtos (cadr x) 2 3)
                    ","
                    (rtos (last x) 2 3)
            )
            fl
          )
        )
      )
      (close fl)
    )

  )
  (princ)
)[/pcode]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-6 10:44:55 | 显示全部楼层
本帖最后由 Free-Lancer 于 2013-5-6 10:51 编辑

37 建立用于多层沿线分析之分析线(每层窗台线)[pcode=lisp,true];;建立用于多层沿线分析之分析线(每层窗台线)
(defun c:cxz (/ e h1 h0 n h i obj sp strh h11)
  (if (and (setq e (entsel "\n选择分析线: "))
           ;(setq h1 (getdist "\n室内外高差: "))
           ;(setq h0 (getdist "\n窗台高: "))
           (setq n (getint "\n层  数: "))
           (setq h (getdist "\n层  高: "))
      )
    (progn
      (setq obj        (vlax-ename->vla-object (car e))
            sp        (vlax-curve-getstartpoint (car e))
            h11 (vla-get-elevation obj)
            h0 0.9
            h1 0.0
            strh (strcat "0,0," (rtos h 2 4))
      )
      (vla-move        obj
                (vlax-3d-point sp)
                (vlax-3d-point (list (car sp) (cadr sp) (+ h0 h11)))
      )
      (vla-put-layer obj "ZZ_RZ_LK")
      (vla-put-color obj acGreen)
      (setq i 1)
      (setvar "cmdecho" 0)
      (repeat (1- n)
        (vl-cmdf ".copy" e "" "_non" "0,0,0" "_non")
        (vl-cmdf (list 0. 0.  (* i h)))
        (setq i (1+ i))
      )
    )
  )
  (princ)
)[/pcode]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-6 10:46:10 | 显示全部楼层
37 将不同高度的沿线分析数字展开(按层), 转折多的垂直间距还有 Bug [pcode=lisp,true];;将不同高度的沿线分析数字展开(按层), 转折多的垂直间距还有 Bug
(defun c:dmf (/ ss p sl i el l bp v np v1 z nel nn)
  (if (and (setq ss (ssget '((0 . "text") (8 . "zz_rz_mfx"))))
           (setq p (getpoint "\nOutput Point: "))
      )
    (progn
      (setq sl (sslength ss)
            i  -1
      )
      (repeat sl
        (setq e         (ssname ss (setq i (1+ i)))
              z         (last (assoc 11 (entget e)))
              el (cons (list z e) el)
        )
      )
      (setq el (vl-sort el '(lambda (z1 z2) (> (car z1) (car z2)))))
      (while el
        (setq index (car el))
        (if nel
          (if (equal (car index) (caar nel) 0.00001)
            (setq nel
                   (cons
                     (append (list (car index) (cadr index)) (cdar nel))
                     (cdr nel)
                   )
            )
            (setq nel (cons index nel))
          )
          (setq nel (list (car el)))
        )
        (setq el (cdr el))
      )
      (setq el (vl-remove nil (mapcar 'cdr nel)))
      (setq
        nn (mapcar '(lambda (x) (cadr (cdr (assoc 11 (entget x))))) ;_ Y
                   (car el)
           )
        v1  (abs (- (apply 'max nn) (apply 'min nn)))
      )
      (setq l  (entget (caar el))
            bp (cdr (assoc 11 l))
            v  (mapcar '- p bp)
      )
      (foreach x el
        (foreach z x
          (setq        l  (entget z)
                p  (cdr (assoc 11 l))
                np (mapcar '+ p v)
                np (list (car np) (+ (cadr np) (last np) v1) 0.)
          )
          (entmake (subst (cons 11 np)
                          (assoc 11 l)
                          l
                   )
          )
        )
        (setq v1 (+ v1 20.))
      )
    )
  )
  (princ)
)[/pcode]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-6 10:47:49 | 显示全部楼层
本帖最后由 Free-Lancer 于 2013-5-6 10:49 编辑

38 检测最大连续日照时间[pcode=lisp,true];;检测最大连续日照时间
;;多点分析点之 Xdata (SUN 8.2 版本 不同可能数据不同!)
;;("sunlighttime" (1070 . 10701) (1070 . 117) (1070 . 10702) (1070 . 60))
(defun c:chkt (/ ss sl i e el time p xdata n kt)
  (if (and (setq ss (ssget '((-3 ("sunlighttime")))))
           (setq kt (getreal "\n日照控制分钟数: "))
           (setq time (getreal "\n控制最大连续日照分钟数: "))
      )
    (progn
      (setq sl (sslength ss)
            i  -1
            n  0
      )
      (repeat sl
        (setq e            (ssname ss (setq i (1+ i)))
              el    (entget e '("*"))
              p            (assoc 11 el)
              xdata (cadr (assoc -3 el))
        )
        (if (and (>= (cdr (nth 2 xdata )) kt)
                 (< (cdr (last xdata)) time)
            )
          (progn
            (entmake (list '(0 . "POINT")
                           '(100 . "AcDbEntity")
                           '(100 . "AcDbPoint")
                           '(8 . "ZZ_RZ_Ctimer")
                           '(62 . 1)
                           (cons 10 (cdr p))
                          )
            )
            (setq n (1+ n))
          )
        )
      )
      (if (/= n 0)
        (princ
          (strcat "\n共 " (itoa n) " 个点不满足最长连续日照要求!")
        )
      )
    )
  )
  (princ)
)[/pcode]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-6 10:48:52 | 显示全部楼层
39 对相同高度的分析线进行编组,编组名称 = Z值 x 10[pcode=lisp,true];;对相同高度的分析线进行编组,编组名称 = Z值 x 10
(defun c:flgrp (/ doc ms *Groups* gs ss)
  (setq        doc         (vla-get-activedocument (vlax-get-acad-object))
        ms         (vla-get-modelspace doc)
        *Groups* (vla-get-groups doc)
  )
  (vlax-for obj *Groups* (setq gs (cons (vla-get-name obj) gs)))
  (setq gs (vl-remove-if '(lambda (x) (wcmatch x "`**")) gs))
  (if (setq ss (ssget '((8 . "zz_rz_lk")(62 . 3))))
    (progn
      (vlax-for        obj (vla-get-activeselectionset doc)
        (setq z (vla-get-elevation obj))
        (if (not (member (rtos (* 10 z) 2 0) gs))
          (vla-add *Groups* (rtos (* 10 z) 2 0))
        )
        (vla-appenditems
          (vla-item *Groups* (rtos (* 10 z) 2 0))
          (vlax-safearray-fill
            (vlax-make-safearray vlax-vbobject '(0 . 0))
            (list obj)
          )
        )       
      )
    )
  )
  (princ)
)[/pcode]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-6 10:49:59 | 显示全部楼层
40 对多个分析线设置默认分析高度(Z值), 用于多个沿线分析[pcode=lisp,true];;对多个分析线设置默认分析高度(Z值), 用于多个沿线分析
(defun c:xxx (/ ss sl i e el h l)
  (if (setq ss (ssget '((8 . "zz_rz_lk") (62 . 3))))
    (progn
      (setq sl (sslength ss)
            i  -1
      )
      (repeat sl
        (setq e         (ssname ss (setq i (1+ i)))
              el (entget e)
              h         (cdr (assoc 38 el))
              l         (append el
                         (list (list
                                 -3
                                 '("ZZENTVER" (1070 . 10001) (1000 . "5.5"))
                                 (list "shadowh"
                                       '(1070 . 10001)
                                       (cons 1000 (rtos h 2 2))
                                 )
                               )
                         )
                 )
        )
        (entmod l)
      )
    )
  )
  (princ)
)[/pcode]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-6 10:58:55 | 显示全部楼层
41 好像是改坐标前缀[pcode=lisp,true](defun c:iid (/ p ss x y el1 el2)
  (while (and (setq p (getpoint "\nPoint: "))
              (setq ss (ssget '((0 . "text"))))
         )
    (setq p (trans p 1 0) x (rtos (* (car p) 1)  2 3)
          y (rtos (* (cadr p) 1) 2 3)
    )
    (setq el1 (entget (ssname ss 0))
          el2 (entget (ssname ss 1))
    )
    (if        (wcmatch (cdr (assoc 1 el1)) "X*")
      (progn (entmod (subst (cons 1 (strcat "X=" y)) (assoc 1 el1) el1))
             (entmod (subst (cons 1 (strcat "Y=" x)) (assoc 1 el2) el2))
      )
      (progn (entmod (subst (cons 1 (strcat "Y=" x)) (assoc 1 el1) el1))
             (entmod (subst (cons 1 (strcat "X=" y)) (assoc 1 el2) el2))
      )
    )
  )
  (princ)
)
(defun c:idd (/ p ss x y el1 el2)
  (while (and (setq p (getpoint "\nPoint: "))
              (setq ss (ssget '((0 . "text"))))
         )
    (setq x (rtos (car p) 2 3)
          y (rtos (cadr p) 2 3)
    )
    (setq el1 (entget (ssname ss 0))
          el2 (entget (ssname ss 1))
    )
    (if        (wcmatch (cdr (assoc 1 el1)) "A*")
      (progn (entmod (subst (cons 1 (strcat "A=" y)) (assoc 1 el1) el1))
             (entmod (subst (cons 1 (strcat "B=" x)) (assoc 1 el2) el2))
      )
      (progn (entmod (subst (cons 1 (strcat "B=" x)) (assoc 1 el1) el1))
             (entmod (subst (cons 1 (strcat "A=" y)) (assoc 1 el2) el2))
      )
    )
  )
  (princ)
)[/pcode]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-6 11:00:53 | 显示全部楼层
42 TBOX2 [pcode=lisp,true](defun C:TBOX2 (/ textent ang sinrot cosrot t1 t2 p0 p1 p2 p3 p4)
  (setq textent (entget (car (entsel "\nSelect text: "))))
  (setq        p0     (cdr (assoc 10 textent))
        ang    (cdr (assoc 50 textent))
        sinrot (sin ang)
        cosrot (cos ang)
        t1     (car (textbox textent))
        t2     (cadr (textbox textent))
        p1     (list (+ (car p0) (- (* (car t1) cosrot) (* (cadr t1) sinrot)))
                     (+ (cadr p0) (+ (* (car t1) sinrot) (* (cadr t1) cosrot)))
               )
        p2     (list (+ (car p0) (- (* (car t2) cosrot) (* (cadr t1) sinrot)))
                     (+ (cadr p0) (+ (* (car t2) sinrot) (* (cadr t1) cosrot)))
               )
        p3     (list (+ (car p0) (- (* (car t2) cosrot) (* (cadr t2) sinrot)))
                     (+ (cadr p0) (+ (* (car t2) sinrot) (* (cadr t2) cosrot)))
               )
        p4     (list (+ (car p0) (- (* (car t1) cosrot) (* (cadr t2) sinrot)))
                     (+ (cadr p0) (+ (* (car t1) sinrot) (* (cadr t2) cosrot)))
               )
  )
  (command "pline" p1 p2 p3 p4 "c")
  (princ)
)[/pcode]

点评

楼主超人十分了的  发表于 2013-5-7 15:07
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-23 17:40 , Processed in 0.284583 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表