autocad 二次开发 的问题。怎样获取实体或者面域的端点?
1个回答
展开全部
可以利用AutoLISP中的entget函数,例如:
一、先绘制一条直线:
命令: LINE
指定第一点: 0,0
指定下一点或 [放弃(U)]: @100,100
指定下一点或 [放弃(U)]:
二、用entget函数查实体的dxf代码值:
命令: (entget (car (entsel)))
选择对象: ;点选上面那条直线
((-1 . <图元名: 7ffff606090>) (0 . "LINE") (330 . <图元名: 7ffff603ec0>) (5 .
"81") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 .
"AcDbLine") (10 0.0 0.0 0.0) (11 100.0 100.0 0.0) (210 0.0 0.0 1.0))
其中:(10 0.0 0.0 0.0) (11 100.0 100.0 0.0)表示直线端点坐标值
例子程序:
;*本程序用于把线变成多义线或改变多义线宽度
(defun c:rewid ( / olderr I1 newwidth plss ent etype index cp rad)
;*初始化一些变量
(modes '("cmdecho"))
(setvar "cmdecho" 0)
(setq olderr *error* *error* myerr I1 (getvar "useri1"))
(prompt "\n选择需要改变线宽的实体: ")
(setq plss (ssget))
;*询问新宽度
(setq newwidth (getreal "\n新宽度<0.35>: "))
(if (null newwidth) (setq newwidth 0.35))
;*开始修改
(setq index 0)
(repeat (sslength plss)
(setq ent (ssname plss index) etype (dxf 0 (entget ent)))
(cond ((or (= etype "LINE") (= etype "ARC"))
(command "pedit" ent "Y" "W" (* newwidth I1) "X")
);cond ->1
(( or (= etype "LWPOLYLINE") (= etype "POLYLINE"))
(command "pedit" ent "W" (* newwidth I1) "X")
);cond ->2
((= etype "CIRCLE")
(setq rad (dxf 40 (entget ent))
cp (dxf 10 (entget ent))
)
(entdel ent)
(command "pline" (polar cp 0 rad) "W" (* newwidth I1) ""
"a" "ce" cp "a" 359.999 "")
);cond ->3
(T (prompt "\n选则集中有不可修改实体."))
);cond
(setq index (1+ index))
);repeat
;*恢复设置
(moder)
(setq *error* olderr)
(princ)
);*c:rewid
一、先绘制一条直线:
命令: LINE
指定第一点: 0,0
指定下一点或 [放弃(U)]: @100,100
指定下一点或 [放弃(U)]:
二、用entget函数查实体的dxf代码值:
命令: (entget (car (entsel)))
选择对象: ;点选上面那条直线
((-1 . <图元名: 7ffff606090>) (0 . "LINE") (330 . <图元名: 7ffff603ec0>) (5 .
"81") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 .
"AcDbLine") (10 0.0 0.0 0.0) (11 100.0 100.0 0.0) (210 0.0 0.0 1.0))
其中:(10 0.0 0.0 0.0) (11 100.0 100.0 0.0)表示直线端点坐标值
例子程序:
;*本程序用于把线变成多义线或改变多义线宽度
(defun c:rewid ( / olderr I1 newwidth plss ent etype index cp rad)
;*初始化一些变量
(modes '("cmdecho"))
(setvar "cmdecho" 0)
(setq olderr *error* *error* myerr I1 (getvar "useri1"))
(prompt "\n选择需要改变线宽的实体: ")
(setq plss (ssget))
;*询问新宽度
(setq newwidth (getreal "\n新宽度<0.35>: "))
(if (null newwidth) (setq newwidth 0.35))
;*开始修改
(setq index 0)
(repeat (sslength plss)
(setq ent (ssname plss index) etype (dxf 0 (entget ent)))
(cond ((or (= etype "LINE") (= etype "ARC"))
(command "pedit" ent "Y" "W" (* newwidth I1) "X")
);cond ->1
(( or (= etype "LWPOLYLINE") (= etype "POLYLINE"))
(command "pedit" ent "W" (* newwidth I1) "X")
);cond ->2
((= etype "CIRCLE")
(setq rad (dxf 40 (entget ent))
cp (dxf 10 (entget ent))
)
(entdel ent)
(command "pline" (polar cp 0 rad) "W" (* newwidth I1) ""
"a" "ce" cp "a" 359.999 "")
);cond ->3
(T (prompt "\n选则集中有不可修改实体."))
);cond
(setq index (1+ index))
);repeat
;*恢复设置
(moder)
(setq *error* olderr)
(princ)
);*c:rewid
更多追问追答
追问
谢谢啦先,我用的是objectARX,用这个有没有啥方法?
追答
肯定有,但是我没有研究过objectARX,不能瞎说。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |