kkdolphin
发表于 2020-8-15 08:49:25
本帖最后由 kkdolphin 于 2020-8-15 09:05 编辑
要CAD2014以上才能用吧。有一个问题,我指定点,不一定要开对象捕捉,因为有时候非DWG的图片没有点的,在图片上也能用。第三个点要在第二个点所作的垂线上。如果有原码lISP就更好,没有也可以。
kkdolphin
发表于 2020-8-15 08:55:14
本帖最后由 kkdolphin 于 2020-8-15 09:03 编辑
可以参考下面这个程序,有取整,只是这个程序有几个问题,它缺少了自动判断相连两条边是否垂直,要输入旋转角度,第二个没有回退,第三精度是个位,第四个连成的是一条条直线。(defun c:xhfw(/ ang1 dis1 mode pt1 pt2 while_if1)
(vl-load-com)
(initget 1)
(setq pt2 (getpoint "\n指定第一点:"))
(setq mode 1)
(setvar "CMDECHO" 0)
(vl-cmdf "UNDO" "be")
(while t
(setq pt1 pt2)
(if (not (setq ang1 (getangle pt1 "\n指定旋转角度<0>:")))
(setq ang1 0)
)
(setq while_if1 t)
(while while_if1
(initget "Z")
(setq dis1 (getdist pt1 (strcat "\n指定直线长度:")))
(cond
((not dis1)
(setq dis1 2000)
(setq while_if1 nil)
)
((equal dis1 "Z")
(setq mode (- 11 mode))
)
(t
(setq while_if1 nil)
)
)
)
(setq dis1 (* mode (fix (+ 0.5 (/ dis1 mode 1.0))))
pt2 (polar pt1 ang1 dis1)
)
(entmakex (list '(0 . "LINE") (cons 10 (trans pt1 1 0)) (cons 11 (trans pt2 1 0))))
)
(vl-cmdf "UNDO" "e")
(setvar "CMDECHO" 1)
(setq *error* $orr)
(princ)
)
(princ "\n:xhfw。")
(princ)。
补充说明:1,它的开始选择直线是符合要求的。2,它可以选点也可以不选点画图。3,过程中开动态捕捉,能显示作图的点与上一点的距离。
xvjiex
发表于 2020-8-15 09:07:24
本帖最后由 xvjiex 于 2020-8-15 09:23 编辑
软件没有开捕捉,你再试试。捕捉你可以自己设定(按f3键)。第三个点在第二个点所作的垂线上,如果不在垂直线上,它会自动移到垂直线位置(不是我开捕捉,是软件自动帮你定位到垂直点上),我们都再试试。你可以在图片上测试。
xvjiex
发表于 2020-8-15 09:48:22
完善后给你源码
kkdolphin
发表于 2020-8-15 13:39:04
本帖最后由 kkdolphin 于 2020-8-15 14:01 编辑
还有3个问题:1.在低版本(低于CAD2014)输入命令,显示:no function definition: COMMAND-S.能否解决.
2,回车结束后,不要自动闭合,形成一段连续的多段线就可以。很多时候房屋相互垂直部分最后并不闭合
3,精度能否一个选择,不常用的,精度位数为1。
完善后再给你设置最佳答案。辛苦了:handshake。
xvjiex
发表于 2020-8-15 15:15:54
本帖最后由 xvjiex 于 2020-8-15 15:42 编辑
已经更新。1.不知道你的版本?请再测试。2.已经取消自动闭合的功能。3.精度已经开出对话框,用户自己输入。请到19楼免费下载测试。
kkdolphin
发表于 2020-8-15 17:25:16
谢谢,已经解决了。很好。辛苦了。方便的时候给我源码吧。
xvjiex
发表于 2020-8-15 18:25:59
已经更新为源码,请免费下载。感谢采纳!
kkdolphin
发表于 2020-8-15 23:28:51
xvjiex 发表于 2020-8-15 18:25
已经更新为源码,请免费下载。感谢采纳!
能否方便增加一个功能:除了选点选确定长度,还可以自己输入长度,因为今晚试过,有些房屋要加建1000mm的护栏,但是原图没有,需要自行输入。
xvjiex
发表于 2020-8-16 08:19:51
这个有点麻烦,不仅是输入距离,还要方向。围墙可能不全是直角弯吧?不知道围墙的工作量大不大,你再考虑一下是否需要再花费开发新功能。