几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量  


返回   几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 » 仿射空间:CAX软件开发(三)二次开发与程序设计 » CAD二次开发 » AutoCAD二次开发 » ObjectARX(AutoLISP)
用户名
密码
注册 帮助 会员 日历 银行 搜索 今日新帖 标记论坛为已读


 
 
主题工具 搜索本主题 显示模式
旧 2009-04-26, 07:59 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 寻一个画圆的十字中心线的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))
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
 


主题工具 搜索本主题
搜索本主题:

高级搜索
显示模式

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

vB 代码开启
[IMG]代码开启
HTML代码关闭



所有的时间均为北京时间。 现在的时间是 07:56 PM.


于2004年创办,几何尺寸与公差论坛"致力于产品几何量公差标准GD&T | GPS研究/CAD设计/CAM加工/CMM测量"。免责声明:论坛严禁发布色情反动言论及有关违反国家法律法规内容!情节严重者提供其IP,并配合相关部门进行严厉查处,若內容有涉及侵权,请立即联系我们QQ:44671734。注:此论坛须管理员验证方可发帖。
沪ICP备06057009号-2
更多