热度 12||
1、能用整数不用浮点; |
如何去掉表的闭括号"()" _$ (setq lst '(1 2 3 4 5)) (1 2 3 4 5) _$ (vl-string-trim "()" (vl-princ-to-string lst)) "1 2 3 4 5" _$ |
;;;-----------------------------------------------------------;; ;;;Highflybird 2008.03.22 海南 2013.04.28 修订于深圳 ;; ;;;-----------------------------------------------------------;; ;;;程序功能:画出选择集的包围盒,可适用于UCS下 ;; ;;;免责申明:本着开源的精神,此代码可以免费拷贝复制,但使用此 ;; ;;; 程序带来的一切责任由使用者这承担。 ;; ;;;程序用法:命令为Test,选择一个或多个,自动创建物体包围盒 ;; ;;;-----------------------------------------------------------;; (defun C:Test (/ B DOC ENT I ISUCS LL LR UL UR MATRIX REVMAT OBJ SEL pl) ;;先判断UCS是否与WCS相同。 ;;如是UCS,得到UCS变换矩阵和到WCS的逆变换矩阵 (if (zerop (getvar "WORLDUCS")) ;UCS是否与WCS相同 (setq IsUCS T ;设置标志位为true matrix (vlax-tmatrix (MAT:Trans 1 0)) ;UCS的变换矩阵 revMat (vlax-tmatrix (MAT:Trans 0 1)) ;UCS的逆变换矩阵 ) (setq IsUCS nil) ;否则不予变换 ) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) ;;在UCS下先变换物体到WCS下,取得每个物体的包围框, ;;求出包围框集合的最小XY,最大XY,并用矩形框画出来 ;;然后把物体变换回到UCS,并把矩形也变换回去 (if (setq sel (ssget)) ;选择物体 (progn (setq i 0) (vla-StartUndoMark doc) (repeat (sslength sel) (setq ent (ssname sel i)) ;图元 (setq obj (vlax-ename->vla-object ent)) ;obj对象 (and IsUCS (vla-TransformBy obj revMat)) ;反变换到WCS (vla-GetBoundingBox obj 'll 'ur) ;得到包围框 (setq ll (vlax-safearray->list ll)) (setq ur (vlax-safearray->list ur)) (setq pl (cons ll pl)) ;得到左下角点表 (setq pl (cons ur pl)) ;得到右上角点表 (and IsUCS (vla-TransformBy obj matrix)) ;变换回到UCS (setq i (1+ i)) ) (setq ll (apply 'mapcar (cons 'min pl))) ;左下角 (setq ur (apply 'mapcar (cons 'max pl))) ;右上角 (setq lr (list (car ll) (cadr ur) (caddr ll))) ;右下角 (setq ul (list (car ur) (cadr ll) (caddr ur))) ;左上角 (setq b (Make3dPoly (list ll lr ur ul))) ;构造边框 (if IsUCS ;如果UCS (vla-TransformBy (vlax-ename->vla-object b) matrix) ;变换边框到UCS ) (vla-EndUndoMark doc) ) ) (princ) ) ;;;-----------------------------------------------------------;; ;;; 从一个坐标系统到另一个坐标系统的变换矩阵 ;; ;;; 输入:from - 源坐标系;to - 目的坐标系 ;; ;;; 输出:一个4X4的变换CAD的标准变换矩阵 ;; ;;;-----------------------------------------------------------;; (defun MAT:Trans (from to) (append (MAT:trp (mapcar (function (lambda (v d) (trans v from to d))) '((1. 0. 0.) (0. 1. 0.) (0. 0. 1.) (0. 0. 0.)) (list t t t nil) ) ) '((0. 0. 0. 1.)) ) ) ;;;-----------------------------------------------------------;; ;;; 矩阵转置 MAT:trp Transpose a matrix -Doug Wilson- ;; ;;; 输入:矩阵 ;; ;;; 输出:转置后的矩阵 ;; ;;;-----------------------------------------------------------;; (defun MAT:trp (m) (apply 'mapcar (cons 'list m)) ) ;;;-----------------------------------------------------------;; ;;; 画3d多段线 ;; ;;; draw a closed 3d Polyline ;; ;;;-----------------------------------------------------------;; (defun Make3dPoly (pts / e) (setq e (Entmake (list '(0 . "POLYLINE")'(70 . 9)))) (foreach p Pts (entmake (list '(0 . "VERTEX") '(70 . 32) (cons 10 p))) ) (entmake '((0 . "SEQEND"))) (entlast) ) (vl-load-com) (prompt "\n请输入命令test") (princ)
;有些字型写的字textbox 的第一个值不一定是原点,所以求包围盒和求距离都要相应的减一下.
;;参数 str -- 字串 h --- 字高 wid --- 宽度因子 by eachy
(defun xd-text_length (str h wid / bx)
(setq bx (textbox
(list (cons 40 h)
(cons 1 str)
(cons 41 wid)
(cons 7 (getvar "textstyle"))
)
)
)
(- (caadr bx)(caar bx))
)
下面摘自 G版