meflying
发表于 2003-8-5 08:59:00
你想想看,如果是一个封闭的墙,内墙的周长和外墙的周长是不同的,如果你给出一个周长(用鼠标点取也一样),那这个周长是内墙的长还是外墙的长?
lihongyu2467
发表于 2003-8-6 09:17:00
其实测绘中的围墙不是这样复杂,也没有内墙和外墙之分,在成序中只用Pline线画出即可,只是要每隔10m进行等分,可我不会作。
meflying
发表于 2003-8-6 10:07:00
怎么说你才明白?看图,如果给出整个周长为100,就有三种可能
同样给出的周长是100,却有三种可能,你让我画哪个呢?
lihongyu2467
发表于 2003-8-6 12:29:00
不好意思,有些专业上的问题实在是很难沟通。测绘中画围墙时只有前进方向的左侧或右侧之分,我看就是上图中的外墙吧。打扰了这么久,很是不好意思。
meflying
发表于 2003-8-6 14:55:00
看看行不行:
(defun c:Draw2( / pt
pt2
i
j
n
Le ;剩余长度
Long ;每段长度
Ang ;每段角度
Ang_W ;分割线角度
pt_W
pt_Ws
pt_O
pt_N
pt_WE
os
)
(setvar "cmdecho" 0)
(setq pt (getpoint "\n输入起点:"))
(setq pt_N pt)
(setq pt_O pt)
(setq Le 0)
(command "_.pline" pt_O)
(while (setq pt_N (getpoint pt_N "\n输入下一点:"))
(command pt_N)
(setq Long (+ Le (distance pt_N pt_O)))
(setq Ang (angle pt_O pt_N))
(setq Ang_W (- Ang (/ pi 2)))
(setq n (fix (/ Long 10)))
(setq pt_W (polar pt_O Ang (- 10 Le)))
(setq pt_WE (polar pt_W Ang_W 0.5))
(setq pt_Ws (append pt_Ws (list (list pt_W pt_WE))))
(setq Le (- Long (* n 10)))
(setq j 1)
(while (< j n)
(setq pt_W (polar pt_W Ang 10))
(setq pt_WE (polar pt_W Ang_W 0.5))
;(command "_.pline" pt_W pt_WE "")
(setq pt_Ws (append pt_Ws (list (list pt_W pt_WE))))
(setq j (1+ j))
)
(setq pt_O pt_N)
)
(command "")
(setq os (getvar "osmode"))
(setvar "osmode" 0)
(setq ent (entlast))
(command "_.offset" 0.5 ent pt_WE "")
(mapcar '(lambda(lst) (command "_.pline" (car lst) (cadr lst) "")) pt_Ws)
(setvar "osmode" os)
(princ)
)
lihongyu2467
发表于 2003-8-6 17:44:00
多谢,我回去试试。
lihongyu2467
发表于 2003-8-6 21:41:00
非常好,就是这样。可是目前如果将画出的围墙拟合会产生混乱,是否可以画出的围墙做成一个整体,以便拟合呢?
实在不好意思再打扰你了,如果简单,就解决一下。再次感谢。
gyxzzza
发表于 2003-8-6 22:11:00
你可以用制作线形的办法试试(先制作形,再制作线形),这样就不需要编程了,在实际使用过程中你只需调整线形比例即可
lihongyu2467
发表于 2003-8-7 11:03:00
这种办法我试过,采用制作线形的办法在转点处不好,精度不高。
lihongyu2467
发表于 2003-8-7 11:04:00
这种办法我试过,采用制作线形的办法在转点处不好,精度不高。