autocad 二次开发 的问题。怎样获取实体或者面域的端点?

 我来答
weiyinzhong329
推荐于2016-05-06 · TA获得超过2218个赞
知道小有建树答主
回答量:1579
采纳率:0%
帮助的人:801万
展开全部
可以利用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
更多追问追答
追问
谢谢啦先,我用的是objectARX,用这个有没有啥方法?
追答
肯定有,但是我没有研究过objectARX,不能瞎说。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式