谢谢大家,你们的回复给了我一些想法。我越来越接近我的非工作相关工作计划:wink:。。
是的,卡尔。。使用Bowditch或“指南针规则”有趣地执行测量调整程序。
在新手受挫后,我最终通过使用两个循环结构使程序工作。。由于从第二条线开始,这些点就很容易混淆,因为它们改变了起点和终点坐标,因此只需绘制一条代表调整的新线,然后替换现有线的起点和终点坐标就更容易了。现在将尝试包括辐射和块,以适应它。。。英雄联盟
cab没有让你参与到项目中,但那可能是因为我不知道我在做什么:?
以下是我所做的。。感谢反馈。。e、 g.如果用户按顺序操作,我没有错误检查,或者程序可以正常工作(我认为)。
- (defun c:adjust (/ mis sset tot num itm totdis
- hnd ent dis indx lobj disa dist)
- (setq oldcmd (getvar "cmdecho"))
- (setvar "cmdecho" 0)
- (setvar "osnapcoord" 1)
- (command "._layer" "_M" "Misclose" "")
- (command "._layer" "_C" "2" "Misclose" "")
- (setvar "clayer" "Misclose")
- (setq p1 (getpoint "n\Pick unadjusted end of Traverse")
- p2 (getpoint "n\Pick closing point"))
- (command "line" p1 p2 "")
- (setq mis (entlast))
- (setq sset (ssget '((0 . "LINE"))))
- (if sset
- (progn
- (setq tot 0.0)
- (setq num (sslength sset) itm 0)
- (repeat num
- (while (< itm num)
- (setq hnd (ssname sset itm))
- (setq ent (entget hnd))
- (setq pt1 (cdr (assoc 10 ent)))
- (setq pt2 (cdr (assoc 11 ent)))
- (setq dis (distance pt1 pt2))
- (setq tot (+ tot dis))
- (setq itm (1+ itm))
- )
- )))
- (if (= itm num) (setq totdis tot))
- (if totdis
- (progn
- (setq tot 0.0)
- (setq len (sslength sset) indx 0)
- (while (< indx len)
- (setq lobj (ssname sset indx))
- (setq objd (entget lobj))
- (setq pt1 (cdr (assoc 10 objd)))
- (setq pt2 (cdr (assoc 11 objd)))
- (if (> indx 0) (setq pl1 pl2))
- (setq dis (distance pt1 pt2))
- (setq tot (+ tot dis))
- (command "._copy" mis "" p1 pt2)
- (setq obj (entlast))
- (setq disa (distance p1 p2))
- (setq dist (* (/ tot totdis) disa))
- (command "._scale" obj "" pt2 "r" p1 p2 "p" dist)
- (command "._layer" "_M" "Traverse Adjusted" "")
- (command "._layer" "_C" "1" "Traverse Adjusted" "")
- (setvar "clayer" "Traverse Adjusted")
- (setq pl2 (cdr (assoc 11 (entget obj))))
- (if (= indx 0) (command "._line" pt1 pl2 ""))
- (if (> indx 0) (command "._line" pl1 pl2 ""))
- (setq indx (1+ indx))
- )
- )
- )
- )
|