大家好,
以前有相当数量的赖斯普鲁丁,但当我换了工作(十年前…)时,它就全丢了和LT。
现在我正试图写(重新创建)一个lisp,但我的记忆已经不是以前的样子了。。。这可能很简单,我试着在论坛上查找,但找不到。。。
我想要的是:有一条线,你选择起点和终点,你点击线的一边或另一边,在这条线的选中一边它画出一些东西。。。
见附件:一条线(pt1和pt2)和一个点,可以在这条线的任一侧(即,如果它是一条垂直线,则为左侧或右侧),我画了一个圆圈来表示两个可能的象限,在这种情况下为左侧和右侧。大多数线条是垂直的,但在某些情况下,线条可以处于不同的角度。
选择这三个点后,lisp将以设定的距离(以红色绘制)绘制一组与主线垂直和平行的线。
我的问题是,我无法思考如何选择线的哪一边。我很确定这很简单,但我不记得是怎么做的。
这就是我目前所拥有的。我可以选择三个点,我可以画线,但在计算角度时出现了一些错误,它画的线基本上不是我想要的位置。。。
-
- (defun C:HH()
- (defun RTD (nbrOfRadians) ;convert to degrees
- (* 180.0 (/ nbrOfRadians pi))
- );defun RTD
- (defun DTR (a) ;convert to radians
- (* pi (/ a 180.0))
- );defun DTR
- (setq OLDECHO (getvar "CMDECHO") ;store system variables
- OLDBLIP (getvar "BLIPMODE")
- OLDSNAP (getvar "OSMODE")
- );setq
- (setvar "CMDECHO" 0)
- (setvar "BLIPMODE" 0)
- (setq P1 nil P2 nil P3 nil P4 nil );setq Zorgt dat P1 etc nil zijn
- (setq pt1(getpoint "\n Startpoint: ")) ;store base point
- (setq pt2(getpoint "\n Endpoint: "))
- (setq a-rad1 (angle pt1 pt2)) ;angle in radians
- (setq a-deg1 (RTD a-rad1)) ;angle in degrees
- (setq pt3(getpoint "\n On which side of the line would like to draw?: "))
- ;
- (setq a-rad2 (angle pt1 pt3)) ;angle in radians
- (setq a-deg2 (RTD a-rad2))
- (setq Diff-deg1-2 (- a-deg1 a-deg2))
- (COND ((< 90 Diff-deg1-2) ;Als het links van de pt1-pt2 lijn is
- (setq hoek1 (DTR 180.0))
- (setq hoek2 (DTR 0.0))
- (setq hoeka (RTD Hoek1))
- (setq hoekb (RTD hoek2)))
- ((> 90 Diff-deg1-2) ;Als het rechts van de pt1-pt2 lijn is
- (setq hoek1 (DTR 0.0))
- (setq hoek2 (DTR 180.0))
- (setq hoeka (RTD hoek1))
- (setq hoekb (RTD hoek2)))
- );end cond 1=links 2=rechts
- ;(setq hoek1 (+ a-rad1 hoek1))
- ;(setq hoek2 (+ a-rad1 hoek2))
- ;(setq hoeka (RTD Hoek1))
- ;(setq hoekb (RTD hoek2))
- (setq Lengte (distance pt1 pt2))
- (setq Lagen (/ (/ lengte 2) 60)); waarbij
- (command "_UCS" "_n" "z" a-deg1)
- (setvar "OSMODE" 0)
- (setq P1 (polar pt1 hoek1 165)
- P2 (polar P1 (DTR 90.0) 60)
- P3 (polar P2 hoek2 165)
- P4 (polar P3 (DTR 90.0) 60)
- );setq
- (command "PLINE" pt1 "W" "0.0" "0.0" P1 P2 P3 P4""
- );command
- (setq cntr 1) ;setup counter
- (while (< cntr lagen) ;loop until cntr is not less than lagen
- (command "copy" "last" "" pt1 P4
- );command
- (setq cntr(+ cntr 1)) ;increment the counter
- );while
- (setq cntr 1) ;Reset counter
- (command "_UCS" "_p" "" );reset ucs to previous
- (setvar "OSMODE" OLDSNAP)
- (setvar "BLIPMODE" OLDBLIP)
- (setvar "CMDECHO" OLDECHO)
- (princ)
- );end defun
- (princ)
所以我的问题是,有人能解决我的问题吗?它在驱使我。。。我知道我很接近,但到目前为止。。。
谢谢你看!
如果有人想知道的话,我正在制作建筑物的比例模型,这些模型在细节上非常精细。这意味着每一块砖都必须到位。我有正确的图案填充来绘制砖的图案,但有一些规则是如何做角的,这不能在图案填充中捕捉到。通过更改图案填充边界,这个lisp将极大地帮助我实现这一点。
嘴唇应该做什么的例子。dxf |