找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1167|回复: 9

[LISP函数]:见贴图,lsp如何实现?

[复制链接]

已领礼包: 8个

财富等级: 恭喜发财

发表于 2003-4-3 19:52:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

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

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-4-3 20:08:26 | 显示全部楼层

Re: [LISP函数]:见贴图,lsp如何实现?

最初由 前生 发布
[B]见贴图,lsp如何实现? [/B]


可以用编辑LWPOLYLINE的顶点来实现,图太小了,提供一个角的放大图吧,前和后的对比。另外说下什么地方用到这个程序?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8个

财富等级: 恭喜发财

 楼主| 发表于 2003-4-4 12:52:46 | 显示全部楼层
你好,简单的说就是将一个pline 线的所有圆角的R加上一个值,比如R1---->变成1.1后,将R到角变成C1.1的到C角。
   用途是在机械设计上。
一个板上的孔是圆角,在孔里有一个一样大的镶块。如果镶块在R角处变成大一点的C角的话,装配回方便很多。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-4-8 08:16:49 | 显示全部楼层
完成:

  1. (defun c:QJ (/          z_a  z_b  pta         ptb  ptc  ptd        pte  ptf  ptg  pth
  2.              xa          xb   xc   xd         xe   xf   xg        xh   ya          yb   yc
  3.              yd          ey   fy   yg         yh   ptaa ptba        ptca ptda ptea ptfa
  4.              ptga ptha pt   m         n    na   nb        nd   pt1  pt2  pt3
  5.              pt4  pt5  pt6  pt7         pt8  x1   x2        x3   x4          x5   x6
  6.              x7          x8   y1   y2         y3   y4   y5        y6   y7          y8
  7.             )
  8.   (setq oldos (getvar "osmode"))
  9.   (setvar "osmode" 0)
  10.   (setq z_a (entsel "\n请选择需要修改的孔:"))
  11.   (setq z_b (entget (car z_a)))
  12.   (setq n (length z_b))
  13.   (setq na (- (/ (- n 15) 4) 1))
  14.   (setq m 0)
  15.   (setq nb 14)
  16.   (setq nd (getreal "\n输入切角增加的宽度:"))
  17.   (while (<= m na)
  18.     (setq pt (cdr (nth nb z_b)))
  19.     (set (read (strcat "pt" (itoa (1+ m)))) pt)
  20.     (setq nb (+ nb 4))
  21.     (setq m (1+ m))
  22.   )
  23.   (setq x1 (car pt1))
  24.   (setq y1 (cadr pt1))
  25.   (setq x2 (car pt2))
  26.   (setq y2 (cadr pt2))
  27.   (setq x3 (car pt3))
  28.   (setq y3 (cadr pt3))
  29.   (setq x4 (car pt4))
  30.   (setq y4 (cadr pt4))
  31.   (setq x5 (car pt5))
  32.   (setq y5 (cadr pt5))
  33.   (setq x6 (car pt6))
  34.   (setq y6 (cadr pt6))
  35.   (setq x7 (car pt7))
  36.   (setq y7 (cadr pt7))
  37.   (setq x8 (car pt8))
  38.   (setq y8 (cadr pt8))
  39.   (if (= x1 x2)
  40.     (progn
  41.       (if (> y1 y2)
  42.         (progn
  43.           (setq        xa x1
  44.                 xb x2
  45.                 xc (- x3 nd)
  46.                 xd (+ x4 nd)
  47.                 xe x5
  48.                 xf x6
  49.                 xg (+ x7 nd)
  50.                 xh (- x8 nd)
  51.           )
  52.           (setq        ya (- y1 nd)
  53.                 yb (+ y2 nd)
  54.                 yc y3
  55.                 yd y4
  56.                 ye (+ y5 nd)
  57.                 yf (- y6 nd)
  58.                 yg y7
  59.                 yh y8
  60.           )
  61.         )
  62.         (progn
  63.           (setq        xa x1
  64.                 xb x2
  65.                 xc (+ x3 nd)
  66.                 xd (- x4 nd)
  67.                 xe x5
  68.                 xf x6
  69.                 xg (- x7 nd)
  70.                 xh (+ x8 nd)
  71.           )
  72.           (setq        ya (+ y1 nd)
  73.                 yb (- y2 nd)
  74.                 yc y3
  75.                 yd y4
  76.                 ye (- y5 nd)
  77.                 yf (+ y6 nd)
  78.                 yg y7
  79.                 yh y8
  80.           )
  81.         )
  82.       )
  83.     )
  84.   )
  85.   (if (= x2 x3)
  86.     (progn
  87.       (if (> y2 y3)
  88.         (progn
  89.           (setq        xa (- x1 nd)
  90.                 xb x2
  91.                 xc x3
  92.                 xd (- x4 nd)
  93.                 xe (+ x5 nd)
  94.                 xf x6
  95.                 xg x7
  96.                 xh (+ x8 nd)
  97.           )
  98.           (setq        ya y1
  99.                 yb (- y2 nd)
  100.                 yc (+ y3 nd)
  101.                 yd y4
  102.                 ye y5
  103.                 yf (+ y6 nd)
  104.                 yg (- y7 nd)
  105.                 yh y8
  106.           )
  107.         )
  108.         (progn
  109.           (setq        xa (+ x1 nd)
  110.                 xb x2
  111.                 xc x3
  112.                 xd (+ x4 nd)
  113.                 xe (- x5 nd)
  114.                 xf x6
  115.                 xg x7
  116.                 xh (- x8 nd)
  117.           )
  118.           (setq        ya y1
  119.                 yb (+ y2 nd)
  120.                 yc (- y3 nd)
  121.                 yd y4
  122.                 ye y5
  123.                 yf (- y6 nd)
  124.                 yg (+ y7 nd)
  125.                 yh y8
  126.           )
  127.         )
  128.       )
  129.     )
  130.   )
  131.   (if (= x3 x4)
  132.     (progn
  133.       (if (> y3 y4)
  134.         (progn
  135.           (setq        xa (+ x1 nd)
  136.                 xb (- x2 nd)
  137.                 xc x3
  138.                 xd x4
  139.                 xe (- x5 nd)
  140.                 xf (+ x6 nd)
  141.                 xg x7
  142.                 xh x8
  143.           )
  144.           (setq        ya y1
  145.                 yb y2
  146.                 yc (- y3 nd)
  147.                 yd (+ y4 nd)
  148.                 ye y5
  149.                 yf y6
  150.                 yg (+ y7 nd)
  151.                 yh (- y8 nd)
  152.           )
  153.         )
  154.         (progn
  155.           (setq        xa (- x1 nd)
  156.                 xb (+ x2 nd)
  157.                 xc x3
  158.                 xd x4
  159.                 xe (+ x5 nd)
  160.                 xf (- x6 nd)
  161.                 xg x7
  162.                 xh x8
  163.           )
  164.           (setq        ya y1
  165.                 yb y2
  166.                 yc (+ y3 nd)
  167.                 yd (- y4 nd)
  168.                 ye y5
  169.                 yf y6
  170.                 yg (- y7 nd)
  171.                 yh (+ y8 nd)
  172.           )
  173.         )
  174.       )
  175.     )
  176.   )
  177.   (if (= x4 x5)
  178.     (progn
  179.       (if (> y4 y5)
  180.         (progn
  181.           (setq        xa x1
  182.                 xb (+ x2 nd)
  183.                 xc (- x3 nd)
  184.                 xd x4
  185.                 xe x5
  186.                 xf (- x6 nd)
  187.                 xg (+ x7 nd)
  188.                 xh x8
  189.           )
  190.           (setq        ya (- y1 nd)
  191.                 yb y2
  192.                 yc y3
  193.                 yd (- y4 nd)
  194.                 ye (+ y5 nd)
  195.                 yf y6
  196.                 yg y7
  197.                 yh (+ y8 nd)
  198.           )
  199.         )
  200.         (progn
  201.           (setq        xa x1
  202.                 xb (- x2 nd)
  203.                 xc (+ x3 nd)
  204.                 xd x4
  205.                 xe x5
  206.                 xf (+ x6 nd)
  207.                 xg (- x7 nd)
  208.                 xh x8
  209.           )
  210.           (setq        ya (+ y1 nd)
  211.                 yb y2
  212.                 yc y3
  213.                 yd (+ y4 nd)
  214.                 ye (- y5 nd)
  215.                 yf y6
  216.                 yg y7
  217.                 yh (- y8 nd)
  218.           )
  219.         )
  220.       )
  221.     )
  222.   )
  223.   (setq ptaa (list xa ya))
  224.   (setq ptba (list xb yb))
  225.   (setq ptca (list xc yc))
  226.   (setq ptda (list xd yd))
  227.   (setq ptea (list xe ye))
  228.   (setq ptfa (list xf yf))
  229.   (setq ptga (list xg yg))
  230.   (setq ptha (list xh yh))
  231.   (command "pline" ptaa        ptba ptca ptda ptea ptfa ptga ptha "c")
  232.   (setvar "osmode" oldos)
  233.   (princ)
  234. )
  235. (prompt
  236.   "\n程序加载成功,用QJ运行程序。注意:图形必须是正的,否则出错!"
  237. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8个

财富等级: 恭喜发财

 楼主| 发表于 2003-4-8 11:03:58 | 显示全部楼层

呵呵,谢谢你

其实在实际中远远不止这些比较标准的形状。
比如下列视图。
总之一个要求:
是镶块的角部与板上的角部不发生干涉以及相同。
目的就是为了镶块装进板里方便。
一直在想这个问题。不得其解。因为需要判断的地方很多,比如付图中小圈圈住的地方的R角不是变大,而是变小什么的
要是能解决这个问题就太好了.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-4-9 08:10:59 | 显示全部楼层
前生兄:

思路:
1.先求出PLINE上所有圓角R值及R兩端點座標
2.再利用R兩端點座標倒C角 <C角=R值加上一個值>
PS:我已驗証以上可行,但連續兩個R角則不行!!
      所有地方的R角變大可以,但又要變小!!有點難!!
      可能要手動框選那些地方要變大,那裡要變小
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8个

财富等级: 恭喜发财

 楼主| 发表于 2003-4-9 11:44:51 | 显示全部楼层
承教,是啊。是比较困难一些.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-4-9 12:18:21 | 显示全部楼层
自己修改pl线数据
1,xdapi有求实体最大外框的,如果要倒角的两点都在外框上(凸角),r改c,直接改数据
2。如果不在(凹角),改r。
以上改r,c,要直接改点位,和弧线凸度。
仅作为思路供参考,这段忙,没有时间写,sorry
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-4-9 12:37:59 | 显示全部楼层

  1. ;;BY LUCAS(龙龙仔)
  2. ;;先贴个程序供参考
  3. ;;所有地方的R角变大OR变小!!
  4. ;;手动框选那些地方要变大,那里要变小,还没开始写,SORRY!!
  5. ;;USAGE: (F_TO_C 0.1)
  6. ;;USAGE: (F_TO_C -0.1)
  7. (defun F_TO_C (ADD / HOLDOSMODE HOLDECHO HOLDBOX OBJ ENT LIST_RAD)
  8.   ;;-----------------------------------------------------------
  9.   ;; Function to return 2DPolyline data as a list in the format
  10.   ;; (v1 bulge1 v2 bulge2 ... vn bulgen)
  11.   ;; given one argument:
  12.   ;;   Object = either an Ename or VLA-Object that is any of the
  13.   ;;            following:
  14.   ;;            AcDb2dPolyline ("Heavy" POLYLINE)
  15.   ;;            AcDbPolyline   (LWPOLYLINE)
  16.   ;;            AcDb2dVertex   ("Heavy" POLYLINE VERTEX)
  17.   ;; Coordinates are in WCS, or OCS if object is nested.
  18.   ;; NOTE that if the polyline is closed, the last vertex
  19.   ;;      will equal the first vertex.
  20.   ;; (c)2002, John F. Uhden, Cadlantic
  21.   ;; Release 15.0 or higher
  22.   ;; usage: (VLISTAX (CAR (ENTSEL)))

  23.   (defun VLISTAX (OBJECT  /          NAME          PTYPE          ENDPARAM
  24.                   PARAM          CLOSED  P1          P2          MIDP          BULGE
  25.                   VLIST
  26.                  )
  27.     (vl-load-com)
  28.     (setq OBJ OBJECT)
  29.     (if        (not *ACAD*)
  30.       (setq *ACAD* (vlax-get-acad-object))
  31.     )
  32.     (and
  33.       (cond
  34.         ((= (type OBJECT) 'VLA-OBJECT))
  35.         ((= (type OBJECT) 'ENAME)
  36.          (setq OBJECT (vlax-ename->vla-object OBJECT))
  37.         )
  38.         (t (setq OBJECT NIL))
  39.       )
  40.       (setq NAME (vla-get-objectname OBJECT))
  41.       (cond
  42.         ((= NAME "AcDb2dPolyline")
  43.          (setq PTYPE (vla-get-type OBJECT))
  44.         )
  45.         ((= NAME "AcDbPolyline")
  46.          (setq PTYPE 0)
  47.         )
  48.         ((= NAME "AcDb2dVertex")
  49.          (setq OBJECT (vla-objectidtoobject
  50.                         (vla-get-activedocument *ACAD*)
  51.                         (vla-get-ownerid OBJECT)
  52.                       )
  53.                PTYPE  (vla-get-type OBJECT)
  54.          )
  55.         )
  56.       )
  57.       (setq CLOSED (vla-get-closed OBJECT))
  58.       (setq ENDPARAM (vlax-curve-getendparam OBJECT))
  59.       (setq PARAM ENDPARAM)
  60.       (setq P2 (vlax-curve-getendpoint OBJECT))
  61.       (setq VLIST (list P2))
  62.       (while (> PARAM 0)
  63.         (if (= PTYPE 0)                        ; acSimplePoly
  64.           (setq        PARAM (1- PARAM)
  65.                 P1    (vlax-curve-getpointatparam OBJECT PARAM)
  66.                 BULGE (vla-getbulge OBJECT (fix PARAM))
  67.           )
  68.           (setq        PARAM (- PARAM 0.5)
  69.                 MIDP  (vlax-curve-getpointatparam OBJECT PARAM)
  70.                 PARAM (- PARAM 0.5)
  71.                 P1    (vlax-curve-getpointatparam OBJECT PARAM)
  72.                 BULGE (GETBULGE P1 MIDP P2)
  73.           )
  74.         )
  75.         (setq VLIST (cons P1 (cons BULGE VLIST))
  76.               P2    P1
  77.         )
  78.       )
  79.     )
  80.     (cond
  81.       ((not VLIST) NIL)
  82.       ((= CLOSED :vlax-true)
  83.        (append VLIST (list (cadr VLIST)))
  84.       )
  85.       ((= PTYPE 0)
  86.        (append VLIST (list (vla-getbulge OBJECT ENDPARAM)))
  87.       )
  88.       (t (append VLIST '(0.0)))
  89.     )
  90.   )

  91.   ;; -- Function CalcBulge
  92.   ;; Returns the geometric informations from a polyarc.
  93.   ;; Copyright:
  94.   ;;   c2001 MENZI ENGINEERING GmbH, Switzerland
  95.   ;; Arguments [Typ]:
  96.   ;;   Vx1 = Start vertex of p'arc [LIST]
  97.   ;;   Vx2 = End vertex of p'arc [LIST]
  98.   ;;   Blg = Bulge [REAL]
  99.   ;; Return [Typ]:
  100.   ;;   > '(CenterPoint Radius IncludedAngle) [LIST]
  101.   ;; Notes:
  102.   ;;   IncludedAngle in radians
  103.   ;;
  104.   ;;(calcbulge '(221.619 127.845 0.0)'(227.619 133.845 0.0) 0.414214))

  105.   (defun CALCBULGE (VX1 VX2 BLG / ARCRAD HLFANG) ;CENDIR
  106.     (setq HLFANG (* 2 (atan BLG))
  107.           ;; CenDir ((if (< Blg 0) - +) (- (angle Vx1 Vx2) HlfAng) (/ pi 2))
  108.           ARCRAD (abs (/ (/ (distance VX1 VX2) 2.0) (sin HLFANG)))
  109.     )
  110.     (list (list
  111.             VX1
  112.             VX2
  113.             ;;(polar Vx1 CenDir ArcRad)
  114.             ARCRAD
  115.             ;;(* (abs HlfAng) 2.0)
  116.           )
  117.     )
  118.   )

  119.   (defun MAKE_LIST (PT_LIST / N LIST_INDEX)
  120.     (setq N 1
  121.           LIST_INDEX
  122.            NIL
  123.     )
  124.     (repeat (/ (length PT_LIST) 2)
  125.       (if (/= (nth N PT_LIST) 0)
  126.         (setq LIST_INDEX
  127.                (append LIST_INDEX
  128.                        (list (list (nth (1- N) PT_LIST)
  129.                                    (nth (1+ N) PT_LIST)
  130.                                    (nth N PT_LIST)
  131.                              )
  132.                        )
  133.                )
  134.         )
  135.       )
  136.       (setq N (+ 2 N))
  137.     )
  138.     LIST_INDEX
  139.   )

  140.   (setq HOLDECHO (getvar "CMDECHO"))
  141.   (setvar "CMDECHO" 0)
  142.   (command "_.UNDO" "_GROUP")
  143.   (setq HOLDOSMODE (getvar "OSMODE"))
  144.   (setvar "OSMODE" 0)
  145.   (foreach ENT (MAKE_LIST (VLISTAX (car (entsel))))
  146.     (setq LIST_RAD (append LIST_RAD
  147.                            (CALCBULGE (car ENT) (cadr ENT) (last ENT))
  148.                    )
  149.     )
  150.   )
  151.   (command "_.ZOOM" "E")
  152.   (setvar "FILLETRAD" 0)
  153.   (command "_.FILLET" "P" OBJ)
  154.   (setq HOLDBOX (getvar "PICKBOX"))
  155.   (setvar "PICKBOX" 1)
  156.   (foreach ENT LIST_RAD
  157.     (command "_.CHAMFER" "D" (+ ADD (last ENT)) "")
  158.     (command "_.CHAMFER" "NEA" (car ENT) "NEA" (cadr ENT))
  159.   )
  160.   (command "_.ZOOM" "P")
  161.   (setvar "OSMODE" HOLDOSMODE)
  162.   (setvar "PICKBOX" HOLDBOX)
  163.   (command "_.UNDO" "_END")
  164.   (setvar "CMDECHO" HOLDECHO)
  165.   (princ)
  166. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2003-4-10 08:04:12 | 显示全部楼层
最初由 前生 发布
[B]承教,是啊。是比较困难一些. [/B]


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-26 14:28 , Processed in 0.219395 second(s), 51 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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