确定特定Z值i
必要性和挑战:他需要一个例程,您可以选择一条具有不同Z值的线,并沿其长度确定示例中Z的特定值,即值10。应使用点及其注释值Z进行标记。
以一条线为例,但理想的情况是,该检查可以在一组线中同时发生。
在伪代码中:
[列表]
[*]获取行实体
[*]获取起点/终点
[*]计算点之间的Z差
[*]计算点之间的2D距离(现在有了渐变)
[*]使用Z=gd(g=梯度,d=2D距离)计算具有指定Z值的点的距离。
[/列表] 命令:ID
??? 李,这是一个很好的指导方针。
我的知识是基础的。不知道我是否可以。
用另一种方式描述它,我想要的是在调查工作中得到等高线的效果。指定特定的Z坐标,例程必须能够查看每条线。同时,您必须通过引入点实体及其符号Z坐标文本在每条线上标记该点。 这是一个非常详细的例子,我指出的路线-我使用了长变量名和逐步变量分配,以便您可以看到我使用的方法。
以下是一个测试函数示例:
(defun c:test ( / e p z )
(if
(and
(setq e (car (entsel "\nSelect Line: ")))
(eq "LINE" (cdr (assoc 0 (entget e))))
(setq z (getreal "\nSpecify Z-Value: "))
(setq p (PointonLine e z))
)
(entmakex (list (cons 0 "POINT") (cons 10 p)))
)
(princ)
) 李的代码要简洁得多,但我想到的是(另一个ActiveX示例-LoL):
(defun c:FOO ( / *error* oldNomutt ss elev acDoc startElev endElev lp hp flag len space)
(vl-load-com)
(defun *error*(msg)
(and oldNomutt (setvar 'nomutt oldNomutt))
(vla-endundomark acDoc)
(cond ((not msg)) ; Normal exit
((member msg '("Function cancelled" "quit / exit abort"))) ; <esc> or (quit)
((princ (strcat "\n** Error: " msg " ** ")))) ; Fatal error, display it
(princ))
(prompt "\nSelect 3D polylines to mark elevation: ")
(and (setq oldNomutt (getvar 'nomutt)) (setvar 'nomutt 1))
(if (and (setq ss (ssget "_:L" '((0 . "POLYLINE"))))
(setvar 'nomutt oldNomutt)
(setq elev (getreal "\nEnter elevation: ")))
(progn
(vla-startundomark
(setq acDoc (vla-get-activedocument (vlax-get-acad-object))))
(vlax-for x(setq ss (vla-get-activeselectionset acDoc))
(setq startElev (last (vlax-curve-getstartpoint x)))
(setq endElev (last (vlax-curve-getendpoint x)))
(cond ((< startElev endElev)
(setq lp startElev)
(setq hp endElev)
(setq flag T))
((> startElev endElev)
(setq lp endElev)
(setq hp startElev))
((= startElev endElev)
(prompt "\n** Flat polylines not accepted ** ")
(redraw (vlax-vla-object->ename x) 3)
(quit)))
(setq len (vla-get-length x))
(vla-put-color
(vla-addpoint
(cond (space)
((setq space (vla-get-modelspace acDoc))))
(vlax-3d-point
(cond (flag
(vlax-curve-getpointatdist
x
(/ (- elev lp)
(/ (abs (- hp lp)) len))))
((vlax-curve-getpointatdist
x
(- len
(/ (- elev lp)
(/ (abs (- hp lp)) len))))))))
acred))
(vla-endundomark acDoc)
(vla-delete ss))
(cond (ss (prompt "\n** Invalid input: No elevation ** "))
((prompt "\n** No 3D polylines selected ** "))))
(princ))
李麦克:
杰出的这是正确的。只剩下集成配额值Z的注释文本。
此外,对于多段线和三维多段线,也可以接受相同的过程。
RenderMan:
您的版本无效。当然,因为失败是目前不理解的事情。
当我选择三维多段线时,它在我的一端工作得很好。英雄联盟
(PDMODE=3时显示的结构)
可能是因为RenderMan将直线视为多段线!!
这是正确的。。。这两条线和LWpolyline都没有坡度。
如果没有三维多段线,起点和终点之间的高程差如何?
... 除非立面图纯粹是注释?在这种情况下,我完全误解了OP.LoL
页:
[1]
2