沿po分布顶点
你好我在网上搜索lisp,以沿多段线添加或分布垂直线,但找不到足够接近我需要的东西。
我只需要通过定义顶点之间的长度沿多段线添加顶点。正如measure命令对多边形所做的那样,但我需要它是顶点,而不是点
谢谢
谢伊 将AddVertex方法作为起点。 我希望有些人可以删除一些行,因为我不知道如何编程visal basic
(Defun c:demo ()
(if (and (setq pline (car (entsel "\nSelect Polyline:")))
(eq (cdr (assoc 0 (entget pline))) "LWPOLYLINE")
(setq int (getdist "\nEnter Interval:"))
(setq in int)
)
(while (Setq pt (vlax-curve-getPointAtDist pline int))
(setq ppt (vlax-curve-getparamatpoint pline pt))
(vlax-invoke
(vlax-ename->vla-object pline)
'AddVertex
(1+ (fix ppt))
(list (car pt) (Cadr pt))
)
(setq int (+ int in))
)
)
)
剧本写得很棒!
谢谢你的朋友
samifox干杯,很高兴我能帮上忙。
你好
我正在分析你的代码,我需要在“while循环”之后的第二段得到帮助。
这里如何使用vlax curve getPointAtDist和vlax curve getparamatpoint?
谢谢
谢伊
你好
这段代码要求用户输入间隔,然后沿多边形分布顶点,但间隔不是很精确,因为每次迭代都会被fix()四舍五入。
我试图在我的项目中实现这段代码,但这个问题无法用这种方式解决。
是否有人可以发布一个代码,该代码与所有十进制数字相同,但不舍入?
谢谢
谢伊 此特定代码上的函数fix与段号samifox有关。事后一点。
向我展示并发布一个结果不精确的示例图,让我们看看我们可以做些什么来“修复”代码(双关语)
代码询问点a和b以及多段线,然后发送点a和b进行分割,并返回段长度和段数。然后添加顶点作为分段数,并(假设)将其分布在分段长度间隔中
您可以看到连接线分布正确,但顶点分布不正确。我希望顶点与xline完全一样分布
谢谢
谢伊
(vl-load-com)
(defun c:m ()
(setq userData (wl:getUserData))
(setq proData (extractSegment userData 6.0 8.0))
(drawVers userData proData)
)
(defun wl:getUserData (/ ptst pten)
(if (setq ptst (getpoint "\nStart point of path: "))
(if (setq pten (getpoint ptst "\nEndpoint of path: "))
(progn
;(setq ptst (trans ptst 1 0) pten (trans pten 1 0))
(setq wall (getPoly wall "\nSelect Wall eleveation line"))
(setq front (getPoly front "\nSelect Front eleveation line"))
(setq back (getPoly back "\nSelect Back eleveation line"))
(setq exist (getPoly exist "\nSelect Exist eleveation line"))
(list
(cons 10 ptst)
(cons 11 pten)
(cons 41 (distance ptst pten))
(cons 51 wall)
(cons 52 front)
(cons 53 back)
(cons 54 exist)
) ;_list
) ;_progn
) ;_if endpt
) ;_if strp
) ;_defun
(defun getPoly (ent msg)
(if (setq ent (car (entsel msg)))
(if (eq (cdr (assoc 0 (entget ent))) "LWPOLYLINE")
ent
) ;_if
(alert "\nThe selected object is not a polyline")
) ;_if
) ;_defun
;_______________________________________________________________________________________________________
(defun extractSegment (userData minv maxv / ptst pten d n6 n8 n1 n2 n k stpt enpt)
(setq ptst (cdr (assoc 10 userData)))
(setq pten (cdr (assoc 11 userData)))
(setq d (cdr (assoc 41 userData)))
;getiing unrestricted devition
(setq n6 (/ d 6.0))
(setq n8 (/ d 8.0))
(cond
( (equal n6 1.0 1e-15);what is 1e-15???
(setq n 1.0)
)
( (and (null n) (> n6 1.0))
(setq n1 (fix n8) n2 (+ (fix n6) 1))
(repeat (+ (- n2 n1) 1)
(if (<= 6.0 (if (/= n1 0) (/ d (float n1)) 0.0) 8.0)
(setq n n1)
(if (null n) (setq n nil))
)
(setq n1 (1+ n1))
)
)
( (< n6 1.0)
(setq n nil)
)
)
(if n
(progn
(setq k -1.0)
(repeat (fix n)
(setq stpt (mapcar '+ ptst (mapcar '* (mapcar '/ (mapcar '- pten ptst) (list n n n)) (list (setq k (1+ k)) k k))))
(setq enpt (mapcar '+ stpt (mapcar '/ (mapcar '- pten ptst) (list n n n))))
(entmake (list '(0 . "LINE") '(62 . 1) (cons 10 stpt) (cons 11 enpt) (list 210 0.0 0.0 1.0)))
(command "xline" "V" stpt "")
)
)
(prompt "\nOriginal line couldn't be divided into lines with 6-8 units lengths criteria")
)
(list
(cons 81 n)
(cons 82 (distance stpt enpt) )
)
)
;_______________________________________________________________________________________________________
(Defun drawVers (userData proData)
(setq wall (cdr (assoc 51 userData)))
(setq front (cdr (assoc 52 userData)))
(setq back (cdr (assoc 53 userData)))
(setq exist (cdr (assoc 54 userData)))
(setq seglen (cdr (assoc 82 proData)) )
(setq segcnt (cdr (assoc 81 proData)) )
(setq in segcnt)
(while (Setq pt (vlax-curve-getPointAtDist wall seglen))
(setq ppt (vlax-curve-getparamatpoint wall pt))
(vlax-invoke
(vlax-ename->vla-object wall)
'AddVertex
(1+ (fix ppt))
(list (car pt) (Cadr pt))
)
(setq seglen (+ seglen in))
)
)
谢谢你的timr伙计
这是我不懂的台词(红色)
[列表=1]
[*]在获得多边形id和间隔信息后,您分配给int为什么?
[*](比while循环直到nill)
[*]pt根据间隔获取第一个点
[*]ppt,然后获取到该点的距离
[*]然后调用转换和调用AddVertex
[*]比你的ppt提高1,为什么?
[*]然后列出实体,为什么?
[/列表]
(对所有人开放:)
谢谢
谢伊
页:
[1]
2