aaryan 发表于 2022-7-6 07:48:55

帮我开始。

大家好,
再次需要帮助。
实际上,我正在尝试编写代码,但没有开始。
我想:
a、 跟踪多段线。i、 e选择多段线并在多段线上的任意位置拾取点,并获得距指定顶点的距离。
b、 如果我在多段线的(右侧或左侧)之外拾取一个点,它也应该给我一个偏移距离。
 
我写了几行,但还是卡住了。
任何有助于我开始的帮助都是值得赞赏的。。。
 
当做
Aaryan公司

pBe 发表于 2022-7-6 07:53:02

对于项目“a”
(defun c:test ()
       (setvar 'osmode 0)
      (setq a (entsel "\nSelect polyline:"))
       (vlax-curve-getDistAtPoint (car a)
             (vlax-curve-getClosestPointTo (car a) (cadr a))))
 
对于“b”项:
我不知道你的意思。这是否仍然是项目“A”的一部分,如果拾取点不在多段线上,则它将为您提供距最接近多段线的拾取点的距离?

aaryan 发表于 2022-7-6 07:55:55

感谢pBe的回复,
 
对于项目“B”,如果拾取点不在多段线上,则应提供从拾取点到多段线上的点的垂直距离。此外,项目“A”将应用于“多段线上的垂直点”。
我希望“B”项清楚。
 
对于项目“A”,我需要这样的东西,但它给我一个距离结束顶点的折线。。
(Defun c:KpInquiry()
(setq Kproute (car (entsel "\nSelect Polyline Route:"))
Kpprop (entget Kproute)
Ppoint (getpoint "\nSpecify Point on polyline:"))
(command "break" Kproute Ppoint ppoint "")
(command "_list" "l" "")
(setq Ppointlen (getvar "perimeter"))
(command "_undo" 2 "")
(princ (strcat "\nKP on this point is:" (rtos Ppointlen 2 3)))
(princ))
 
谢谢和问候
Aaryan公司

MSasu 发表于 2022-7-6 07:59:31

请通过第二个问题检查这是否是您想要的:
(vl-load-com)
(defun c:test2( / thePoly thePoint )
(if (setq thePoly (ssget "_:S" '((0 . "LWPOLYLINE"))))
(while (setq thePoint (getpoint "\nPick a point: "))
(prompt (strcat "\nDistance is "
                  (rtos (distance thePoint (vlax-curve-getClosestPointTo (ssname thePoly 0) thePoint T))
                        2 5)))
)
)
(princ)
)

pBe 发表于 2022-7-6 08:03:33

(defun c:test ()
       (setvar 'osmode 0)
      (setq a (entsel "\nSelect polyline:"))
       (setq dist (vlax-curve-getDistAtPoint (car a)
            (vlax-curve-getClosestPointTo (car a) (cadr a))))
       (princ (strcat "\nKP on this point is: " (rtos dist 2 3)))
   (princ)
   )
 
不知道休息是为了什么。我想撤销的呼吁将“打破”普林线。现在取决于pline的创建方式,结果是主观的

pBe 发表于 2022-7-6 08:07:45

也许是这个。。
(defun c:test()
   (setvar 'osmode 0)
   (setq a (entsel "\nSelect polyline:"))
   (setq dist (vlax-curve-getDistAtParam
                      (car a)
                      (vlax-curve-getParamAtPoint
                            (Car a)
                            (vlax-curve-getClosestPointTo
                                  (car a)
                                  (cadr a)))
                      ))
   (princ (strcat "\nKP on this point is: " (rtos dist 2 3)))
   (princ)
   )
 
给定的距离始终是从起点开始的

aaryan 发表于 2022-7-6 08:11:06

@msasu错误:参数类型错误:2D/3D点:无。
 
@pBe我想用光标拾取一个点(就像我们使用getpoint时),从你的代码中,它是一个小正方形框,因此我无法交叉检查距离。。
 
当做

pBe 发表于 2022-7-6 08:12:26

 
你没看到吗?(cadr a)是选择多段线时的“点”,而(car a)是ename。把它想象成一对二
 
安尼胡奥
 
(defun c:test()
   (setq a (car (entsel "\nSelect polyline:")))
   (setq pt (getpoint "\nPick point:"))
   (setq dist (vlax-curve-getDistAtParam
                      a
                      (vlax-curve-getParamAtPoint
                            a
                            (vlax-curve-getClosestPointTo
                                  a
                                  pt))
                      ))
   (princ (strcat "\nKP on this point is: " (rtos dist 2 3)))
   (princ)
   )

MSasu 发表于 2022-7-6 08:16:48

你说得对,我已经编辑了代码来更改变量的名称,但错过了一次-请测试调整后的版本。很抱歉给您带来不便。

aaryan 发表于 2022-7-6 08:19:56

谢谢
@pBe我其实想让你们修改你们的代码,而不是我,因为你们都是大师。。
 
@Mircea谢谢你的帮助
页: [1] 2
查看完整版本: 帮我开始。