找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: 漏网の鱼

[编程申请]:怎么画这个圆柱

[复制链接]

已领礼包: 488个

财富等级: 日进斗金

发表于 2003-5-31 18:05:09 | 显示全部楼层
(setq        X (vlax-curve-getparamatpoint
            VL-OBJ
            (vlax-curve-getpointatparam
              VL-OBJ
              (vlax-curve-getparamatdist
                VL-OBJ
                0
              )
            )
          )
  )
是不是就是(vlax-curve-getStartParam  VL-OBJ)  ?


试一下,要xd-api,只写了圆.

  1. (defun c:rr( / a b c ent pt r ss)
  2. (prompt "\n请选取曲线(line,*polyline,spline,arc,circle)")
  3. (if(and
  4.   (setq ss(ssget '((0 . "line,*polyline,spline,arc,circle"))))
  5.   (setq r(getdist "\n半径"))
  6.    )
  7. (progn
  8. (xdrx_begin '("blipmode" 0 "cmdecho" 0 "osmode" 0 ))
  9. (xdrx_setsstodb ss 0)
  10. (while (setq ent (xdrx_getentdata 0))
  11.   (command"ucs""")
  12.   (setq pt(xdrx_curve_getpointatdist ent 0))
  13.   (setq a(xdrx_getperpline ent pt t) b(car a)c(cadr a))
  14.   (command"ucs""n""3" pt (mapcar '+ pt b) (mapcar '+ pt c))
  15.   (command"ucs""n""y""90")
  16.   (command"circle" (trans pt 0 1) (* 2.0 r))
  17.   (command"_extrude"(entlast)"""p"ent)
  18.   (command"ucs""")
  19. )(xdrx_end)
  20. ))
  21. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-31 22:12:08 | 显示全部楼层
好使!!!
克服了“只能点选,不能框选”以及“受UCS的限制”这两个缺陷。
期待您早日编出“条块”和“球节点”程序。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2003-5-31 22:30:18 | 显示全部楼层
加入矩形管

  1. (defun c:rr( / a b c ent pt r ss l  make-f)
  2. (defun make-f(pt a b / p1 p2)
  3.   (setq p1(polar pt pi(/ a 2.))p1(polar p1(* pi 1.5)(/ b 2.))
  4.         p2(polar pt 0(/ a 2.))p2(polar p2(* pi 0.5)(/ b 2.)) )
  5.   (command"_rectang" p1 p2)
  6. )
  7. (prompt "\n请选取曲线(line,*polyline,spline,arc,circle)")
  8.   (setq ss(ssget '((0 . "line,*polyline,spline,arc,circle"))))
  9.   (initget "L")
  10.   (setq r(getdist "\n半径(L方管)"))
  11.   (if(= r "L")(setq l(getdist"\n方管宽:")
  12.                     h(getdist"\n方管高(回车等于宽):")))
  13.   (if(and l(not h))(setq h l))
  14. (if(and ss(or r l))
  15. (progn
  16. (xdrx_begin '("blipmode" 0 "cmdecho" 0 "osmode" 0 ))
  17. (xdrx_setsstodb ss 0)
  18. (while (setq ent (xdrx_getentdata 0))
  19.   (command"ucs""")
  20.   (setq pt(xdrx_curve_getpointatdist ent 0))
  21.   (setq a(xdrx_getperpline ent pt t) b(car a)c(cadr a))
  22.   (command"ucs""n""3" pt (mapcar '+ pt b) (mapcar '+ pt c))
  23.   (command"ucs""n""y""90")
  24. (if l(make-f (trans pt 0 1)h l)
  25.       (command"circle" (trans pt 0 1) (* 2.0 r))
  26. )
  27.   (command"_extrude"(entlast)"""p"ent)
  28.   (command"ucs""")
  29. )(xdrx_end)
  30. ))
  31. )

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

使用道具 举报

发表于 2003-5-31 22:56:54 | 显示全部楼层
大侠,我没看错吧--怎么您编的画方管的程序,画出来的是圆管呢?而且,您编出来的最好是画矩形方管(要是能在矩形方管和正方形房管之间选择就更好了)。
球节点,就选在端点或两条线的交点上即可。(或者是点选的某一点上)
=============================
对不起,刚才我看错了。您编的是方管。但是不是矩形方管,麻烦您再改一下吧。
顺便说一句,您编程的速度真快!!
谢谢您!!
=============================
沿着样条曲线画方管,结果成了这个样子。不知为什么!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2003-5-31 23:46:18 | 显示全部楼层
上面改好了...矩形了

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2003-6-2 12:32:51 | 显示全部楼层

  1. ;|
  2. (setq X        (vlax-curve-getparamatpoint
  3.           VL-OBJ
  4.           (vlax-curve-getpointatparam
  5.             VL-OBJ
  6.             (vlax-curve-getparamatdist
  7.               VL-OBJ
  8.               0
  9.             )
  10.           )
  11.         )
  12. )
  13. ;;是不是就是(vlax-curve-getStartParam VL-OBJ) ?
  14. ;;在这个程序上可以这样说,因我用的是0     (vlax-curve-getparamatdist VL-OBJ 0)
  15. ;;但在某些情况 查看
  16. ;;[url]http://www.xdcad.net/forum/showthre...88180#post88180[/url]
  17. ;;可能会有问题

  18. ;;有时我想晓东分了很多版面,也有专门的xdrx-api技术支持,
  19. ;;那么在vlisp版面上尽可能不使用xdrx-api会更有意思。
  20. |;
  21. (vl-load-com)
  22. (arxload "geom3d.arx" NIL)
  23. (defun C:VV (/             HOLDECHO             HOLDOSMODE             ENAME   VL-OBJ
  24.              X             RAD     SPT     EPT     ENT     ANG     KEY
  25.              RRR     SPTT    ENTT    SS
  26.             )

  27.   (while (null SS)
  28.     (prompt "\n选取挤出路径: ")
  29.     (setq
  30.       SS (ssget '((0 . "*POLYLINE,CIRCLE,ELLIPSE,ARC,LINE,SPLINE")))
  31.     )
  32.   )

  33.   (setq HOLDECHO (getvar "CMDECHO"))
  34.   (setq HOLDOSMODE (getvar "OSMODE"))
  35.   (setvar "CMDECHO" 0)
  36.   (setvar "OSMODE" 0)
  37.   (command "ucs" "")
  38.   (setq RAD (getstring "\n矩形管(S)/<圆管>: "))
  39.   (if (= RAD "")
  40.     (setq RAD (getdist "\n半径: "))
  41.     (progn
  42.       (setq AA (getdist "\n方管宽:")
  43.             BB (getdist "\n方管高(回车等于宽):")
  44.       )
  45.       (if (and AA (not BB))
  46.         (setq BB AA)
  47.       )
  48.       (setq RRR (getreal "\n倒角<0>: "))
  49.       (if (= RRR NIL)
  50.         (setq RRR 0)
  51.       )
  52.       (setvar "FILLETRAD" RRR)
  53.     )
  54.   )

  55.   (setq N 0)
  56.   (repeat (sslength SS)
  57.     (setq ENAME (ssname SS N))
  58.     (setq VL-OBJ (vlax-ename->vla-object ENAME))
  59.     (setq SPT (vlax-curve-getstartpoint VL-OBJ))
  60.     (setq B (vlax-curve-getfirstderiv
  61.               VL-OBJ
  62.               (vlax-curve-getstartparam VL-OBJ)
  63.             )
  64.     )
  65.     (setq C (cdr (assoc 210 (entget ENAME))))
  66.     (command "ucs"
  67.              "n"
  68.              "3"
  69.              SPT
  70.              (mapcar '+ SPT B)
  71.              (mapcar '+ SPT C)
  72.     )
  73.     (command "_.ucs" "n" "y" "90")
  74.     (if        (= 'real (type rad))
  75.       (command "_.circle" (trans SPT 0 1) (* 2.0 RAD))
  76.       (progn
  77.         (setq P1 (polar (trans SPT 0 1) pi (/ AA 2.))
  78.               P1 (polar P1 (* pi 1.5) (/ BB 2.))
  79.               P2 (polar (trans SPT 0 1) 0 (/ AA 2.))
  80.               P2 (polar P2 (* pi 0.5) (/ BB 2.))
  81.         )
  82.         (command "_.rectang" P1 P2)
  83.         (command "_.FILLET" "PO" (entlast))
  84.       )
  85.     )
  86.     (command "_.extrude" (entlast) "" "p" ENAME)
  87.     (command "_.ucs" "")
  88.     (setq N (1+ N))
  89.   )
  90.   (setvar "OSMODE" HOLDOSMODE)
  91.   (setvar "CMDECHO" HOLDECHO)
  92.   (princ)
  93. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-6-2 16:43:34 | 显示全部楼层
大侠,坐不出来呀!
请看命令行提示:
=================
命令: vv
选取挤出路径:
选择对象: 找到 1 个
选择对象:
矩形管(S)/<圆管>: s
方管宽:20
方管高(回车等于宽):60
倒角<0>:
; 错误: 参数类型错误: numberp: "s"
指定圆的半径或 [直径(D)] <40.0000>:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-7-16 23:06:37 | 显示全部楼层
我只有一个选择截面(可以输入,选择和对应块)和路径(任意线除样条曲线外的空间线,可多选),然后生成实体。至于用代码那要等我再多学几天。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-1-24 13:53:17 | 显示全部楼层
LUCAS  斑竹的程序正是所要的东东,巨好使!
未经允许稍加修改,致歉。
[php]
;;;方管、圆管
;;;By LUCAS
(load "xyp_lib")
(defun C:test (/ ENAME OBJ X RAD SPT EPT ENT ANG KEY SPTT ENTT SS)
  (cmdla0)
  (prompt "\n选取挤出路径: ")
  (setq SS (ssget '((0 . "*POLYLINE,CIRCLE,ELLIPSE,ARC,LINE,SPLINE"))))
  (setvar "OSMODE" 0)
  (command "ucs" "")
  (setq txt (ukword 1 "1 2" "\n1-矩形管/2-圆管" txt))
  (if (= txt "2")
    (setq RAD (ureal 1 "" "\n半径" rad))
    (progn
      (setq AA (ureal 1 "" "\n方管宽" AA)
            BB (ureal 1 "" "\n方管高" BB)
      )
      (setq RRR (ureal 1 "" "\n倒角" RRR))
      (setvar "FILLETRAD" RRR)
    )
  )
  (setq N 0)
  (command ".undo" "BE")
  (mkla"管"1)
  (repeat (sslength SS)
    (setq ENAME (ssname SS N))
    (setq OBJ (vlax-ename->vla-object ENAME))
    (setq SPT (vlax-curve-getstartpoint OBJ))
    (setq B (vlax-curve-getfirstderiv
              OBJ
              (vlax-curve-getstartparam OBJ)
            )
    )
    (setq C (cdr (assoc 210 (entget ENAME))))
    (command "ucs"
             "n"
             "3"
             SPT
             (mapcar '+ SPT B)
             (mapcar '+ SPT C)
    )
    (command "_.ucs" "n" "y" "90")
    (if        (= 'real (type rad))
      (command "_.circle" (trans SPT 0 1) (* 2.0 RAD))
      (progn
        (setq P1 (polar (trans SPT 0 1) pi (/ AA 2.))
              P1 (polar P1 (* pi 1.5) (/ BB 2.))
              P2 (polar (trans SPT 0 1) 0 (/ AA 2.))
              P2 (polar P2 (* pi 0.5) (/ BB 2.))
        )
        (command "_.rectang" P1 P2)
        (command "_.FILLET" "PO" (entlast))
      )
    )
    (command "_.extrude" (entlast) "" "p" ENAME)
    (command "_.ucs" "")
    (setq N (1+ N))
  )
  (command ".undo" "E")
  (cmdla1)
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 22:44 , Processed in 0.384698 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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