增加对wipeout的过滤选择 - ("WIPEOUT" ((-4 "区域覆盖")
- (71 "剪裁边界" ((1 "矩形") (2 "多边形")))
- ;;(91 "顶点数值") ;后面的裁剪边界顶点数(不明白什么意思,总是比“附加过滤”中的“顶点数值”的值大1)
- (280 "剪裁状态" ( (0 "关闭") (1 "打开")));总是不出现下拉框,不知道为什么
- (281 "图形亮度")
- (282 "对比度值")
- (283 "淡入度值")
- (70 "显示特性" ;调试中组码70的值总是7,cad说明中无此项
- ((1 "显示图像")
- (2 "当与屏幕不对齐时显示图像")
- (4 "使用剪裁边界")
- (7 "★未知情况")
- (8 "透明度打开")
- )
- )
-
- )
- ("FJ"
- ("FJ5" "顶点数值" (length (wipeout2plst slent)))
- ("FJ6" "覆盖面积" (abs (XD::PNTS:Area (wipeout2plst slent))) )
- )
- )
- ;|
- 函数名称: XD::PNTS:Area
- 调用格式: (XD::PNTS:Area pts)
- 参数说明: pts ---- 点表
- 返回值: 实数
- 函数简介: 点围成的多边形面积
- 函数来源: 原创
- 函数作者: Lispboy
- 适用版本: 不限
- 最后更新时间: 2013-06-07
- 备注:
- 函数本身并不是重要的,重要的是利用它判断点表的顺、逆时针。
- 采用的是数学的行列式的方法算得面积,面积有正负,逆时针正,顺时针负。
- 点表构成的多边形要保证不自交,自交可能结果不对。
- 点围成的多边形面积
- 参数: pts ----点表
- 返回值: 实数
- 副作用: 如果点表是逆时针,面积正, 顺时针 面积负
- |;
- (defun XD::PNTS:Area (pts / pts1 iSum p0 p1 p2 x0 x1 x2 y0 y1 y2)
- (setq pts1 pts)
- (setq iSum 0)
- (setq p0 (car pts)
- x0 (car p0)
- y0 (cadr p0)
- )
- (while (cdr pts1)
- (setq p1 (car pts1)
- x1 (car p1)
- y1 (cadr p1)
- p2 (cadr pts1)
- y2 (cadr p2)
- x2 (car p2)
- iSum (+ iSum (- (* x1 y2) (* x2 y1)))
- pts1 (cdr pts1)
- )
- )
- (/ (+ iSum (- (* (caar pts1) y0) (* x0 (cadar pts1)))) 2.0)
- )
- ;; WO2PL (gile)
- ;; Re-creates a wipeout boundary (lwpolyline)
- ;; http://www.theswamp.org/index.php?topic=28059.msg336431#msg336431
- ;; returns the wipeout point list (WCS)
- (defun wipeout2plst (wo / elst u v mat)
- (setq elst (entget wo)
- u (cdr (assoc 11 elst))
- v (cdr (assoc 12 elst))
- mat (list u (mapcar '- v) '(0. 0. 1.))
- )
- (mapcar
- '(lambda (p)
- (mapcar '+
- (mxv (trp mat) p)
- (mapcar '(lambda (x y) (/ (+ x y) 2.)) u v)
- (cdr (assoc 10 elst))
- )
- )
- (cdr
- (mapcar 'cdr
- (vl-remove-if-not '(lambda (x) (= (car x) 14)) elst)
- )
- )
- )
- )
|