找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1381|回复: 10

[每日一码] Wipeout Ssget

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-7-13 20:20:19 | 显示全部楼层 |阅读模式

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

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

×
今天翻出来一个程序,Curve Wipeout 忘了什么时候写的了,xdapi 中已经有更方便的用法
[sell=5]
  1. (defun c:wipess    (/      ss       ssl        i         pl
  2.          ybl-curve-points  *MODELSPACE*         DOC      EL
  3.          OLDLA      PL       X        s         ee          s1
  4.          s2
  5.         )
  6.   (defun ybl-massoc (code lst / pp)
  7.     (if    (= (type code) 'LIST)
  8.       (while lst
  9.     (if (member (caar lst) code)
  10.       (setq pp (cons (cdar lst) pp))
  11.     )
  12.     (setq lst (cdr lst))
  13.       )
  14.       (while lst
  15.     (if (= (caar lst) code)
  16.       (setq pp (cons (cdar lst) pp))
  17.     )
  18.     (setq lst (cdr lst))
  19.       )
  20.     )
  21.     (reverse pp)
  22.   )
  23.   (defun ybl-curve-points (e         /           ln->pts     arc->pts
  24.                circle->pts           ell->pts     spl->pts
  25.                e         el           p     ppl
  26.                ps         typ       x     pts-divn
  27.                massoc    pl->pts   solid->pts
  28.               )
  29.     ;;Get Line pts
  30.     (defun ln->pts (e)
  31.       (list (vlax-curve-getstartpoint e)
  32.         (vlax-curve-getendpoint e)
  33.       )
  34.     )
  35.     ;; Get arc/circle/ellipse pts
  36.     (defun arc->pts (e / spa epa an n an0 pt)
  37.       (setq spa    (vlax-curve-getstartparam e)
  38.         epa    (vlax-curve-getendparam e)
  39.         an    (- epa spa)
  40.         n    (fix (* 16 (/ an pi)))
  41.       )
  42.       (if (< n 2)
  43.     (setq n 2)
  44.       )
  45.       (setq an0 (/ an n))
  46.       (repeat n
  47.     (setq
  48.       pt
  49.        (cons (vlax-curve-getpointatparam e (setq spa (+ spa an0)))
  50.          pt
  51.        )
  52.     )
  53.       )
  54.       (cons (vlax-curve-getstartpoint e) (reverse pt))
  55.     )
  56.     ;;Solid and Trace
  57.     (defun solid->pts (sl)
  58.       (list (cdr (assoc 10 el))
  59.         (cdr (assoc 11 el))
  60.         (cdr (assoc 12 el))
  61.         (cdr (assoc 13 el))
  62.       )
  63.     )
  64.     (defun pl->pts (el / e eel pl a b c v r l a spm n aa an m)
  65.       (setq e    (cdr (assoc -1 el))
  66.         eel    (ybl-massoc '(10 42) el)
  67.         m    0.
  68.       )
  69.       (if (vlax-curve-isclosed e)
  70.     (setq eel (append eel (list (car eel) 0.)))
  71.       )
  72.       (while eel
  73.     (mapcar 'set '(a b c) eel)
  74.     (if (and (zerop b) c)
  75.       (setq pl (cons a pl))
  76.       (progn
  77.         (setq v   (vlax-curve-getsecondderiv
  78.             e
  79.             (vlax-curve-getparamatpoint e a)
  80.               )
  81.           r   (distance '(0. 0. 0.) v)
  82.           l   (- (vlax-curve-getdistatparam e m)
  83.              (vlax-curve-getdistatparam e (1+ m))
  84.               )
  85.           an  (/ l r)
  86.           spm (vlax-curve-getparamatpoint e a)
  87.         )
  88.         (setq n  (1+ (abs (fix (/ an 0.0981748))))
  89.           aa (/ 1. n)
  90.           pl (cons a pl)
  91.         )
  92.         (repeat (1- n)
  93.           (setq pl
  94.              (cons (vlax-curve-getpointatparam e (setq spm (+ spm aa)))
  95.                pl
  96.              )
  97.           )
  98.         )
  99.       )
  100.     )
  101.     (setq eel (cddr eel)
  102.           m      (1+ m)
  103.     )
  104.       )
  105.       (reverse pl)
  106.     )
  107.     ;;3DFace Polygen ...
  108.     (defun poly->pts (el / getplvertex e typ tf)
  109.       (defun getplvertex (e diff / n m pl)
  110.     (setq n    (fix (vlax-curve-getendparam e))
  111.           m    0
  112.     )
  113.     (repeat    (if (= diff 1)
  114.           n
  115.           (* 2 n)
  116.         )
  117.       (setq    pl (cons (vlax-curve-getpointatparam e m) pl)
  118.         m  (+ m diff)
  119.       )
  120.     )
  121.     (cons (vlax-curve-getendpoint e) pl)
  122.       )
  123.       (setq e    (cdr (assoc -1 el))
  124.         typ    (cdr (assoc 70 el))
  125.         tf    (vlax-curve-isclosed e)
  126.       )
  127.       (if (= (logand typ 2) 2) ;_ Fit
  128.     (setq pl (getplvertex e 0.5))
  129.     (setq pl (getplvertex e 1)) ;_Spline
  130.       )
  131.       pl
  132.     )

  133.     ;;Get Spline points
  134.     (defun spl->pts (spl / pp pl)
  135.       (vl-catch-all-apply
  136.     '(lambda (/ e pts epm p d n m pls ls epm l)
  137.        (setq e   (cdr (assoc -1 spl))
  138.          pts (ybl-massoc 10 spl)
  139.          epm (vlax-curve-getendparam e)
  140.        )
  141.        (if (assoc 11 spl)
  142.          (setq p (nth 2 pts))
  143.          (setq p (cadr pts))
  144.        )
  145.        (setq d (distance (vlax-curve-getclosestpointto e p)
  146.                  p
  147.            )
  148.        )
  149.        (if (< d 1.)
  150.          (setq pp pts)
  151.          (progn
  152.            (setq pl
  153.               (vlax-invoke
  154.             *modelspace*
  155.             'addpolyline
  156.             (apply 'append pts)
  157.               )
  158.            )
  159.            (vla-put-type pl acCubicSplinePoly)
  160.            (setq n (vlax-curve-getendparam pl)
  161.              m -1
  162.              l (vlax-curve-getdistatparam pl n)
  163.            )
  164.            (repeat (fix (1+ n))
  165.          (setq
  166.            pls
  167.             (cons (vlax-curve-getdistatparam pl (setq m (1+ m)))
  168.               pls
  169.             )
  170.          )
  171.            )
  172.            (setq ls (mapcar '(lambda (x) (/ x l)) (reverse pls)))
  173.            (setq
  174.          pp (mapcar
  175.               '(lambda (x)
  176.              (vlax-curve-getpointatparam e (* x epm))
  177.                )
  178.               ls
  179.             )
  180.            )
  181.          )
  182.        )
  183.      )
  184.       )
  185.       (if pl
  186.     (vla-delete pl)
  187.       )
  188.       pp
  189.     )
  190.     (setq el  (entget e)
  191.       typ (cdr (assoc 0 el))
  192.     )
  193.     (cond
  194.       ((= typ "LINE")
  195.        (setq ppl (ln->pts e))
  196.       )
  197.       ((member typ '("ARC" "CIRCLE" "ELLIPSE"))
  198.        (setq ppl (arc->pts e))
  199.       )
  200.       ((= typ "SPLINE")
  201.        (setq ppl (spl->pts el))
  202.       )
  203.       ((= typ "POLYLINE")
  204.        (setq ppl (poly->pts el))
  205.       )
  206.       ((= typ "LWPOLYLINE")
  207.        (setq ppl (pl->pts el))
  208.       )
  209.       ((= typ "SOLID")
  210.        (setq ppl (solid->pts el))
  211.       )
  212.       (t)
  213.     )
  214.     ppl
  215.   )
  216.   (defun ybl-pts-box (ptl /)
  217.     (list (apply 'mapcar (cons 'min ptl))
  218.       (apply 'mapcar (cons 'max ptl))
  219.     )
  220.   )
  221.   (defun ybl-mkwipeout (pts / box vv vy vx pc ps)
  222.     (setq box (ybl-pts-box pts)
  223.       vv  (apply 'mapcar (cons '- box))
  224.       pc  (mapcar '+ (car box) (mapcar '* vv '(-0.5 -0.5 -0.5)))
  225.       ps  (mapcar
  226.         '(lambda (x)
  227.            (mapcar '-
  228.                (mapcar '/
  229.                    (mapcar '- x pc)
  230.                    (list (abs (car vv)) (abs (car vv)) 1.)
  231.                )
  232.                '(-0.5 -0.5 0.)
  233.            )
  234.          )
  235.         pts
  236.           )
  237.     )
  238.     (entmake (append
  239.            '((0 . "WIPEOUT")
  240.          (100 . "AcDbEntity")
  241.          (67 . 0)
  242.          (410 . "Model")
  243.          (100 . "AcDbWipeout")
  244.          (90 . 0)
  245.          (71 . 2)
  246.         )
  247.            (list (cons 10 (car box))
  248.              (cons 11 (list (abs (car vv)) 0. 0.))
  249.              (cons 12 (list 0. (abs (car vv)) 0.))
  250.              '(13 1. 1. 0.)
  251.            )
  252.            (list (cons 91 (length pts)))
  253.            (mapcar '(lambda (x) (cons 14 x)) ps)
  254.          )
  255.     )
  256.   )
  257.   (defun ybl-mkpline (pts tf)
  258.     (entmakex
  259.       (append
  260.     '((0 . "lwpolyline")
  261.       (100 . "AcDbEntity")
  262.       (100 . "AcDbPolyline")
  263.      )
  264.     (list (cons 90 (length pts)))
  265.     (list (cons 70
  266.             (if    tf
  267.               1
  268.               0
  269.             )
  270.           )
  271.     )
  272.     (mapcar '(lambda (x) (cons 10 (list (car x) (cadr x)))) pts)
  273.       )
  274.     )
  275.   )
  276.   (defun ybl-adlayer (layname color / lyr lst oldlst col)
  277.     (setq lyr (vla-add (vla-get-layers doc) layname))
  278.     (if    (= (type color) 'INT)
  279.       (vla-put-color lyr color)
  280.     )
  281.     (setvar "clayer" layname)
  282.   )
  283.   (princ "\nSelect pline,arc,circle,spline,ellipse....")
  284.   (if (setq
  285.     ss (ssget
  286.          '((0 . "LWpolyline,arc,circle,ellipse,spline,polyline"))
  287.        )
  288.       )
  289.     (progn
  290.       (setq ssl      (sslength ss)
  291.         i      -1
  292.         doc      (vla-get-activedocument (vlax-get-acad-object))
  293.         oldla (getvar "clayer")
  294.       )
  295.       (vla-startundomark doc)
  296.       (setq s1 (ssget "x" '((0 . "wipeout"))))
  297.       (ybl-adlayer "wipess" 5)
  298.       (vl-catch-all-apply
  299.     '(lambda (/ e pl ee s2)
  300.        (repeat ssl
  301.          (setq e (ssname ss (setq i (1+ i))))
  302.          (setq pl (ybl-curve-points e))
  303.          (setq ee (cons (ybl-mkpline pl t) ee))
  304.        )
  305.        (if ee
  306.          (progn
  307.            (foreach    x ee
  308.          (command ".wipeout" "p" x "y")
  309.            )
  310.            (if (and    (setq s2 (ssget "x" '((0 . "wipeout"))))
  311.             (/= (sslength s2) (sslength s1))
  312.            )
  313.          (if s1
  314.            (progn (command ".select" s2 "r" s1 "")
  315.               (command ".draworder" "p" "" "U" ss "")
  316.            )
  317.            (command ".draworder" s2 "" "U" ss "")
  318.          )
  319.            )
  320.          )
  321.        )
  322.      )
  323.       )
  324.       (setvar "clayer" oldla)
  325.       (vla-endundomark doc)
  326.     )
  327.   )
  328.   (princ)
  329. )
  330. (princ "\nStart Command With Wipess. eachy[eachy@21cn.com]!"
  331. )
  332. (princ)
[/sell]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 604个

财富等级: 财运亨通

发表于 2013-7-13 21:49:35 | 显示全部楼层
05版以前,这是有相当大的用处的。今天仍然具有。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2013-7-13 23:13:06 | 显示全部楼层
eachy大师,XDRX API里面替代的是什么函数?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2013-7-14 09:18:23 | 显示全部楼层
有什么作用不清楚,试用后发现它是将封闭线变为光栅图像,但这样的光栅图像又有什么作用呢?我不知道,有知道的能解释一下吗?
它可不是真正的图片啊!

点评

这个图像可以盖住其他内容,你在其它想要的放在光栅图上面,相当于把下面的内容裁剪了。不是真正的裁剪,你移动走光栅,又显示出来了。  详情 回复 发表于 2013-7-14 12:02
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-7-14 12:02:33 | 显示全部楼层
清风明月10 发表于 2013-7-14 09:18
有什么作用不清楚,试用后发现它是将封闭线变为光栅图像,但这样的光栅图像又有什么作用呢?我不知道,有知 ...

这个图像可以盖住其他内容,你在其它想要的放在光栅图上面,相当于把下面的内容裁剪了。不是真正的裁剪,你移动走光栅,又显示出来了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2013-7-14 14:28:51 来自手机 | 显示全部楼层
LZ的模拟中精度值得商榷,lisp中对弧线模拟一般都是等距模拟,按显示出现矢高比的至少我没有见到,所以这个遮罩还是有瑕疵来自: Android客户端
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1489个

财富等级: 财源广进

发表于 2013-7-15 14:41:20 | 显示全部楼层
是怎样用的呢?是说ssget的方法吗?

点评

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2013-7-15 14:43:55 来自手机 | 显示全部楼层
flowerson 发表于 2013-7-15 14:41
是怎样用的呢?是说ssget的方法吗?

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 10:35 , Processed in 0.399609 second(s), 53 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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