![]() |
寻一个画圆的十字中心线的lsp
寻一个画圆的十字中心线的lsp
www.dimcax.com 寻一个画圆的十字中心线的lsp 管理提醒: 本帖被 tandongchi 执行取消锁定操作(2007-09-15) 寻一个画圆的十字中心线的lsp,我自已写了一个,总是不太理想,有没有同志能写一个好一点的 cad命令 _dimcenter 谢谢楼上的,我试一下先,我用了10多年cad了,还真没有用到这个功能 dimcneter画出来的太小,不太好用,而且不随半径的变大而变大 我有一个自己编lsp程序 是根据圆的大小比例放大中心线 发上来看一下好吧,我主要是没有找到合适的函数读取圆的圆心和半径 (entget en) 10是圆心 40是半径 万事莫如杯在手, 人生几见月当头! ourscad@21cn.com 使用activex方法或者图元名、图元表也可以实现目的功能。用到的函数有vlax-ename->vla-object; entget entsel vlax-dump-object vla-put-center等等 伪指令是先判断图元对象是否为圆(或者用entsel函数获得指定圆),然后获得圆心、半径属性,确定画中心线的四个点,并转化为activex要求的三维点(vlax-3d-point),用vlax-addline 画出中心线即可。如果要使中心线随圆比例变化,就要用到反应器了。 嘿嘿是啊.看看下面的东东.删除了一些东西,是关于层的 (defun c:ccee () ;/ ss1 mmy p1 p2 x1 x2 y1 y2 pp p3) ;;;__________________________________ (defun lq (pt1 pt2 / ppp1 ppp2 lli) (setq ppp1 (trans pt1 1 0) ppp2 (trans pt2 1 0) ) ;;; (setq lli (list (cons 0 "line") (cons 10 ppp1) (cons 11 ppp2))) ;;; (entmake lli) (entmake (list (cons 0 "line") (cons 10 ppp1) (cons 11 ppp2)) ) (princ) ) ;;;__________________________________ (defun mmy (ben / count lyx lyy doc handles l1 l2 lyx lyy count llp urp) (setq count 0) (setq lyx nil) (setq lyy nil) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (while (< count (sslength ben)) (setq ent (ssname ben count)) (setq handles (cdr (assoc 5 (entget ent))) ) (vla-getboundingbox (vla-handletoobject doc handles) 'llp 'urp ) (setq l1 (vlax-safearray->list llp)) (setq lyx (cons (car l1) lyx)) (setq lyy (cons (cadr l1) lyy)) (setq l2 (vlax-safearray->list urp)) (setq lyx (cons (car l2) lyx)) (setq lyy (cons (cadr l2) lyy)) (setq count (1+ count)) ) (setq lyx (vl-sort lyx '<)) (setq lyy (vl-sort lyy '<)) (setq x1 (nth 0 lyx) x2 (last lyx) y1 (nth 0 lyy) y2 (last lyy) ) ) ;;;_________________________________ (prompt "\n 请选择需要水平标注尺寸的实体:__") (setq ss1 (ssget)) (if ss1 (progn ;;; (setlay "cen" 6 "center")这个是建层的,暂时关闭 (mmy ss1) (setq pp (trans (list (* 0.5 (+ x1 x2)) (* 0.5 (+ y1 y2))) 0 1)) (setq p1 (polar pp pi (+ (* (- x2 x1) 0.5) 2))) (setq p2 (polar p1 0 (+ (- x2 x1) 4))) (setq p3 (polar pp (* 0.5 pi) (+ (* (- y2 y1) 0.5) 2))) (setq p4 (polar p3 (* 1.5 pi) (+ (- y2 y1) 4))) (lq p1 p2) (lq p3 p4) (setq p1 nil p2 nil p3 nil p4 nil pp nil mmy nil ss1 nil x1 nil x2 nil y1 nil y2 nil ) ) (prompt "\n 未选择到实体!") ) (prompt "针对所有实体,包括选择集合... ok!") (princ) ) 万事莫如杯在手, 人生几见月当头! ourscad@21cn.com ;;; cl (drawing) 添加中心线序 (defun c:cl( / aa bb cc dd sm) (setq sm (getvar "osmode") aa (entsel"指定一个圆,圆弧:")) (setq aa (nth 0 aa))(setq bb(entget aa))(setq cc(assoc 10 bb) cc (cdr cc)dd(assoc 40 bb)dd (cdr dd)dd(* 2.0 dd)) (command "osnap" "off") (qxflay 1)中心线所在的层 (qxfclin cc dd)绘制中心线 (qxflay 0)回到0层 (command "osmode" "439") (princ)) |
所有的时间均为北京时间。 现在的时间是 07:27 PM. |