anindya 发表于 2022-7-5 18:07:04

中心线坐标和

我附上了一个样本图纸,其中我有一个20米的路线和段。我需要一个中心线和偏移的结果,如前所述。是否可以通过任何方式,通过lisp或vba实现。这对像我这样的许多人来说太有用了。我太需要它了。这样我可以节省我太多的时间,避免错误。请帮帮我
PRAC。图纸

Hippe013 发表于 2022-7-5 18:11:09

试试这个。它没有太多的错误捕捉功能,但可以完成任务。
 
(defun c:test ()
(setq sel (entsel "\nSelect Centerline Alignment: "))
(if sel
   (progn
   (setq obj (vlax-ename->vla-object (car sel)))
   (setq sta (getreal "\nEnter Station Distance: "))
   (if sta
(progn
(setq cl-pol (vlax-curve-getPointAtDist obj sta))
(setq los (getreal "\nEnter Left Offset Distance: "))
(setq ros (getreal "\nEnter Right Offset Distance: "))
(if (and los ros)
    (progn
      (setq fd (vlax-curve-getFirstDeriv obj (vlax-curve-getparamAtPoint obj cl-pol)))
      (setq angR (- (angle '(0 0 0) fd) (* pi 0.5)))
      (setq angL (+ (angle '(0 0 0) fd) (* pi 0.5)))
      (setq pR (polar cl-pol angR ros))
      (setq pL (polar cl-pol angL los))
      (BTH:dro cl-pol 5)
      (BTH:drx pR 1)
      (BTH:drx pL 3)
      (grdraw cl-pol pL 3)
      (grdraw cl-pol pR 1)
      (princ "\n**********************************")
      (princ (strcat "\nCenterline Station: " (rtos sta 2 2)))
      (Princ (strcat "\nNorthing: " (rtos (cadr cl-pol) 2 2)
                     "Easting: " (rtos (car cl-pol) 2 2)))
      (princ "\n**********************************")
      (princ (strcat "\nLeft Offset Distance: " (rtos los 2 2)))
      (princ (strcat "\nNorthing: " (rtos (cadr pL) 2 2)
                     "Easting: " (rtos (car pL) 2 2)))
      (princ "\n**********************************")
      (princ (strcat "\nRight Offset Distance: " (rtos ros 2 2)))
      (princ (strcat "\nNorthing: " (rtos (cadr pR) 2 2)
                     "Easting: " (rtos (car pR) 2 2)))
      (princ "\n**********************************")
      )
    )
)
)
   )
   )
(princ)
)


(defun BTH:drx (ctr clr / COR1 COR2 COR3 COR4 VS XS XS2)
(setq vs (getvar "viewsize"))
(setq xs (/ vs 20))
(setq xs2 (/ xs 2))
(setq cor1 (polar ctr (* pi 0.25) xs2))
(setq cor2 (polar ctr (* pi 0.75) xs2))
(setq cor3 (polar ctr (* pi 1.25) xs2))
(setq cor4 (polar ctr (* pi 1.75) xs2))
(grdraw ctr cor1 clr 0)
(grdraw ctr cor2 clr 0)
(grdraw ctr cor3 clr 0)
(grdraw ctr cor4 clr 0)
)





(defun BTH:dro (ctr clr / COR0 COR1 COR10 COR11 COR12 COR13 COR14 COR15 COR16 COR17 COR18 COR19 COR2 COR3 COR4 COR5 COR6 COR7 COR8 COR9 VS XS XS4)
(setq vs (getvar "viewsize"))
(setq xs (/ vs 20))
(setq xs4 (/ xs 4))
(setq cor0 (polar ctr 0 xs4))
(setq cor1 (polar ctr (* pi 0.1) xs4))
(setq cor2 (polar ctr (* pi 0.2) xs4))
(setq cor3 (polar ctr (* pi 0.3) xs4))
(setq cor4 (polar ctr (* pi 0.4) xs4))
(setq cor5 (polar ctr (* pi 0.5) xs4))
(setq cor6 (polar ctr (* pi 0.6) xs4))
(setq cor7 (polar ctr (* pi 0.7) xs4))
(setq cor8 (polar ctr (* pi 0. xs4))
(setq cor9 (polar ctr (* pi 0.9) xs4))
(setq cor10 (polar ctr pi xs4))
(setq cor11 (polar ctr (* pi 1.1) xs4))
(setq cor12 (polar ctr (* pi 1.2) xs4))
(setq cor13 (polar ctr (* pi 1.3) xs4))
(setq cor14 (polar ctr (* pi 1.4) xs4))
(setq cor15 (polar ctr (* pi 1.5) xs4))
(setq cor16 (polar ctr (* pi 1.6) xs4))
(setq cor17 (polar ctr (* pi 1.7) xs4))
(setq cor18 (polar ctr (* pi 1. xs4))
(setq cor19 (polar ctr (* pi 1.9) xs4))
(grdraw cor0 cor1 clr 0)
(grdraw cor1 cor2 clr 0)
(grdraw cor2 cor3 clr 0)
(grdraw cor3 cor4 clr 0)
(grdraw cor4 cor5 clr 0)
(grdraw cor5 cor6 clr 0)
(grdraw cor6 cor7 clr 0)
(grdraw cor7 cor8 clr 0)
(grdraw cor8 cor9 clr 0)
(grdraw cor9 cor10 clr 0)
(grdraw cor10 cor11 clr 0)
(grdraw cor11 cor12 clr 0)
(grdraw cor12 cor13 clr 0)
(grdraw cor13 cor14 clr 0)
(grdraw cor14 cor15 clr 0)
(grdraw cor15 cor16 clr 0)
(grdraw cor16 cor17 clr 0)
(grdraw cor17 cor18 clr 0)
(grdraw cor18 cor19 clr 0)
(grdraw cor19 cor0 clr 0)
)

anindya 发表于 2022-7-5 18:16:10

尊敬的先生,我已经试过了,但没有达到预期效果。我需要表格格式中的中心线和两侧偏移的坐标。为了理解目的,我修改了这个问题。请帮帮我。从另一个角度来说,这是一项非常耗时的工作,对我们许多人来说,像我一样,这是一项不可避免的工作。
PRAC1.dwg

Hippe013 发表于 2022-7-5 18:17:00

你所要求的当然是可能的。虽然合并和格式化单元格需要做很多工作。我可以编写一个lisp来实现这一点,尽管这需要一些时间。
 
当做
 
hippe013

BIGAL 发表于 2022-7-5 18:21:31

Hippe013看了一下你做了什么,对简单的偏移例程很感兴趣,跳出了几个明显的东西,简单的一个就是暗示多个距离的间隔和循环。现在比较难的一个是放样序列总是有切线点或以正确的顺序在方向上变化,也就是pline顶点,可能首先计算出一个链长列表,这具有将个体也添加到固定间距的优势。需要表格或csv之类的选项。我在生成表格方面做了一些工作,这并不难。我下周可能有一些时间,所以将尝试重复并添加链测长度。最后一个要考虑的是改变方向,比如说45度,在S&E之前,1/2或结束,或两者都是。
 
通道0.0 LXYZ R XYZ
CH 12.35是切线pt LXYZ RXYZ
通道20 LXYZ RXYZ
CH 22.35是切线pt LXYZ RXYZ
通道30 LXYZ RXYZ

anindya 发表于 2022-7-5 18:25:58

尊敬的先生,我知道我可以从bigal先生和hippe013先生这样的朋友那里得到,所以我可以等,没问题。但是,如果已经这样做了,那将非常有帮助。

Hippe013 发表于 2022-7-5 18:29:13

这就是我想到的。如果这是你想要的,请告诉我。
 
当做
 
hippe013
 
校准表。lsp

Hippe013 发表于 2022-7-5 18:31:54

比加尔,
 
我使用
(vlax-curve-getFirstDeriv curve-objparam)以找到给定参数处的相切。

BIGAL 发表于 2022-7-5 18:34:57

Hippe013下周将有时间玩几件事,Vl返回pline的长度,以便间距可以列出距离,(10 20 30 40 50)
然后将pline的坐标作为距离(0.0 12.35 37.86 42.35 52.3)
然后,您的STA是新列表中的每个值(0.0 10 12.35 20 30 37.86 40 42.35 50 52.3),而不是要求每个值。
然后可能会询问额外ch的STA列表(0.0 10 12.35 20 30 33.5 37.86 40 42.35 44.0 50 52.3)

anindya 发表于 2022-7-5 18:36:16

尊敬的先生,它没有给出坐标,只有我有这张桌子。我需要例子中显示的坐标。怎么做?????
页: [1] 2
查看完整版本: 中心线坐标和