明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
123
返回列表 发新帖
楼主: wei209

画一条多义线每隔1米加一个0.5米的横短线怎么实现啊?

  [复制链接]
发表于 2007-4-28 15:33:00 | 显示全部楼层
看看这样可以了吧
  1. (defun C:test (/ scale  interval   width initlen    oldOSMODE
  2.         plObj   ent  pt1 pt2  ang  startPoint endPoint   initPoint
  3.         revp   len      interval num    cnt
  4.         rotang   firstDeriv pt  stPoint    selPoint
  5.        );画一条多义线每隔1米加一个0.5米的横短线
  6.   (setq scale (getreal "\n请输入比例1:<1000>"))
  7.   (if (not scale) (setq scale 1000))
  8.   (setq interval scale   ; 1m
  9. width (* scale 0.5)  ; 0.5m
  10. initlen 0   ;????
  11.   )
  12.   (setq oldOSMODE (getvar "OSMODE"))
  13.   (setq cnt 0)
  14.   (command "undo" "BE")
  15.   (command "ucs" "w")
  16.   (vl-load-com)
  17.   (setq pt1 (getpoint "\n输入多义线起点"))
  18.   (initget "a A")
  19.   (setq pt2 (getpoint pt1 "\n输入多义线顶点[A/(弧)](下一点)"))
  20.   (while pt2
  21.     (if (and (= (type pt2) 'str) (= (strcase pt2) "A"))
  22.       (progn
  23. (if ent
  24.    (progn
  25.       (setq firstDeriv  (vlax-curve-getFirstDeriv  ent (vlax-curve-getendparam ent)))
  26.              (setq ang (angle '(0 0 0) firstDeriv))
  27.       (setq ang (* (/ ang pi) 180.0))
  28.      )
  29.    (setq ang 0)
  30.    )
  31. (command "_.pline" pt1 "a" "d" ang pause  "")
  32. (setq pt2 (getvar 'lastpoint))
  33. )
  34.     (command "_.pline" pt1 pt2 "")
  35.       )
  36.     (if ent (progn (command "_.pedit" ent "j" (entlast) "" ""))) (setq ent (entlast))
  37.   (setq plObj (vlax-ename->vla-object ent
  38. ;;;  (car
  39. ;;;    (setq ent (entsel "\nSelect an object: "))
  40. ;;;  )
  41.        )
  42.   )
  43.   (if (member (vla-get-objectname plObj)
  44.        '("AcDbPolyline" "AcDb2dPolyline"  "AcDbLine"     "AcDbSpline"
  45.   "AcDbARC"   "AcDbCircle"     "AcDbEllipse"
  46.         )
  47.       )
  48.     (progn
  49. ;;;      (setq selPoint (cdr (assoc 10 (entget ent)))));(cadr ent))
  50.       (setq startPoint (vlax-curve-getStartPoint plObj))
  51.       (setq endPoint (vlax-curve-getEndPoint plObj))
  52. ;;;      (if (> (distance selPoint startPoint)
  53. ;;;      (distance selPoint endPoint)
  54. ;;;   )
  55. ;;; (setq stPoint endPoint
  56. ;;;       revp    T
  57. ;;; )
  58. (setq stPoint startPoint
  59.        revp    nil
  60. )
  61. ;;;      )
  62.       (setvar "OSMODE" 0)
  63.       (setq len (- (vlax-curve-getDistAtParam
  64.        plObj
  65.        (vlax-curve-getendparam plObj)
  66.      )
  67.      initlen
  68.   )
  69.       )
  70.       (setq num (1+ (fix (/ len interval))))
  71.       
  72.       (while (<= cnt (1- num))
  73. (cond ((= revp nil)
  74.         (setq pt (vlax-curve-getPointAtDist
  75.      plObj
  76.      (+ initlen (* interval cnt))
  77.    )
  78.         )
  79.         (setq firstDeriv
  80.         (vlax-curve-getFirstDeriv
  81.    plObj
  82.    (vlax-curve-getParamAtPoint plObj pt)
  83.         )
  84.         )
  85.         (setq rotang (angle '(0 0 0) firstDeriv))
  86.         (command "line"
  87.    (polar pt (+ rotang (* 0.5 pi)) (* 0.5 width))
  88.    (polar pt (- rotang (* 0.5 pi)) (* 0.5 width))
  89.    ""
  90.         )
  91.        )
  92.        ((= revp T)
  93.         (setq pt (vlax-curve-getPointAtDist
  94.      plObj
  95.      (- len (* interval cnt))
  96.    )
  97.         )
  98.         (setq firstDeriv
  99.         (vlax-curve-getFirstDeriv
  100.    plObj
  101.    (vlax-curve-getParamAtPoint plObj pt)
  102.         )
  103.         )
  104.         (setq rotang (angle '(0 0 0) firstDeriv))
  105.         (command "line"
  106.    (polar pt (+ rotang (* 0.5 pi)) (* 0.5 width))
  107.    (polar pt (- rotang (* 0.5 pi)) (* 0.5 width))
  108.    ""
  109.         )
  110.        )
  111. )    ;cond
  112. (setq cnt (1+ cnt))
  113.       )     ;while
  114.       
  115.     )     ;progn
  116.     (alert "\Invalid object Selected!")
  117.   )     ;endif
  118.     (setq pt1 pt2)
  119.     (initget "a A")
  120.     (setq pt2 (getpoint pt1 "\n输入多义线顶点[A/(弧线)](下一点)"))
  121.     )
  122.   (vlax-release-object plObj)
  123.   (command "ucs" "p")
  124.   (command "undo" "E")
  125.   (setvar "OSMODE" oldOSMODE)
  126.   (princ)
  127. )
发表于 2007-4-29 14:04:00 | 显示全部楼层
;;;画一条多义线每隔1米加一个0.5米的横短线
(defun c:test ()
  (CMDLA0)
  (setq ss (ssget '((0 . "*POLYLINE")))
 i  -1
  )
  (while (setq s1 (ssname ss (setq i (1+ i))))
    (setq ptn (xyp-get-CurveDivPtlst s1 1))
    (foreach pt ptn
      (xyp-Faxian s1 pt 0.5)
    )
  )
  (CMDLA1)
)
发表于 2007-4-30 10:51:00 | 显示全部楼层

用ACAC自带的命令就行了,R14版都有这个命令:定距等分

把短横线做一个块:qwe,后面的看动画:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2007-5-5 09:29:00 | 显示全部楼层
用measure或divide命令,可以使用lisp调用这两个命令.
发表于 2013-4-23 17:07:02 | 显示全部楼层
我也想知道,同求
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-30 10:50 , Processed in 0.162737 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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