ymg3 发表于 2022-7-5 18:41:10

阿尼迪亚,
 
我第一次看到道路路线是样条曲线
一路上,没有水平曲线和/或直线段。
 
以下子例程将返回所需的所有数据
以列表形式填写表格。
 
 
填充,我留给你作为练习。
 

(defun offsetlist (/ en ent offl offr intv dtot dlst clst alst llst rlst olst)
(setq en   (car (entsel))
      ent(entget en)
      offl 5.00
      offr 5.00
      intv 10.0         
      dtot (vlax-curve-getDistAtPoint en (vlax-curve-getendpoint en))
      dlst (append
                (in_range 0 dtot intv)
                (list dtot)
             )
      clst (mapcar '(lambda (a) (vlax-curve-getPointAtDist en a)) dlst)
      alst (mapcar '(lambda (a) (angleatpoint en a)) clst)
      llst (mapcar '(lambda (a b) (polar a (+ b (/ pi 2)) offl)) clst alst)
      rlst (mapcar '(lambda (a b) (polar a (- b (/ pi 2)) offr)) clst alst)
      olst (mapcar '(lambda (a b c d) (list (rtosta a 2 3) b c d)) dlst llst clst rlst)
   )
)   
   



;;                                                                            ;
;; Return angle along curve, at specified point (on curve)                  ;
;; e - valid curve (ENAME or VLA-OBJECT)                                    ;
;; p - point on curve                                                         ;
;; Alan J. Thompson, 11.04.10                                                 ;
;;                                                                            ;

(defun AngleAtPoint (e p)
(angle '(0. 0. 0.) (vlax-curve-getFirstDeriv e (vlax-curve-getParamAtPoint e p)))
)
   

;;                                                                            ;
;; in_range      by ElpanovEvgeniy       (recursive)                        ;
;;                                                                            ;
;; Similar to the Python Function                                             ;
;;                                                                            ;

(defun in_range (s e i)
(if (or (and (> i 0) (< s e)) (and (< i 0) (> s e)))
   (cons s (in_range (+ i s) e i))
)
)


;;                                                                            ;
;; rtosta                     by ymg            September 2013                ;
;;                                                                            ;
;; Arguments:   sta, Real number to format as a Station                     ;
;;             unit, 1 for Imperials,                                       ;
;;                   2 for Metrics.                                           ;
;;             prec, Integer for number of decimals                           ;
;; DIMZIN must be set to 0 or 1 outside this routine.                         ;
;;                                                                            ;
;; Examples: (rtosta 0 1 0)-> "0+00"   (rtosta 1328.325 1 2) -> "13+28.33";
;;         (rtosta 0 2 0)-> "0+000"(rtosta 1328.325 2 2) -> "1+328.33";
;;                                                                            ;
;; If sta is negative, format is as follow:                                 ;
;;                           (rtosta -1328.325 1 2) -> "13-28.33"         ;
;;                           (rtosta -1328.325 2 2) -> "1-328.33"         ;
;;                                                                            ;

(defun rtosta (sta unit prec / str a b dz)   
(setq str (rtos (abs sta) 2 prec))   
(while (< (strlen str) (if (= prec 0) (+ unit 2) (+ prec (+ unit 3))))
   (setq str (strcat "0" str))
)
(setq a (if (= prec 0) (- (strlen str) unit) (- (strlen str) prec (+ unit 1)))
      b (substr str 1 (- a 1))
      a (substr str a)
)
(strcat b (if (minusp sta) "-" "+") a)
)


 
ymg公司

anindya 发表于 2022-7-5 18:42:33

尊敬的先生,如何启动该代码????

Hippe013 发表于 2022-7-5 18:45:48

有人看过我附加的代码吗!!!???表格对齐。lsp要求用户选择路线并建立坐标表。我的帖子好像被忽视了!

ymg3 发表于 2022-7-5 18:49:34

@阿尼迪亚,
 
简单键入(偏移列表),包括括号。
 
@Hippe013,
 
我确实看了,你的也做了。
但我相信OP想要一个罐装的解决方案。
 
ymg公司

Hippe013 发表于 2022-7-5 18:51:52

 
 
这是罐装溶液。
校准表。lsp

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

我以为表格版只是第一个帖子,但到了表格,会检查第二个版本看起来对我们有用。

anindya 发表于 2022-7-5 19:00:06

hippe 013先生,当我使用你的lisp时,我没有得到表上的任何坐标,缩放后绘制的偏移也消失了。这个消息就要来了,
命令:altable
选择路线对象:
输入站间距:10
输入左偏移距离:12
输入右偏移距离:18
选择表格的插入点:;错误:自动化错误。未找到密钥
我需要中心和两侧偏移表上的坐标,

Hippe013 发表于 2022-7-5 19:01:31

阿尼迪亚,
 
使用常规acad创建新图形。并绘制一个简单的样条曲线,然后运行命令。
 
它仍然出错吗?我现在想不出这个bug是什么。您可以发布您试图在其中运行命令的dwg吗?我创建了一个新图形,创建了一条样条曲线,并运行了命令。这对我很有效。如果你能够发布一个命令不起作用的图形,也许我可以锁定错误发生的点。
 
至于偏移量,它们是以图形方式绘制的,在缩放时应该消失。
 
当做
 
hippe013

anindya 发表于 2022-7-5 19:04:40

HIPPE先生,这就是问题所在,我将随附图纸向您发送一个示例。
 
校准表。lsp加载成功。键入ALTABLE开始。
命令:
命令:altable
选择路线对象:
输入站间距:10
输入左偏移距离:22
输入右偏移距离:33
选择表格的插入点:;错误:自动化错误。未找到密钥
 
 
 
这只是一个例子。如果可能的话,我想在直线和曲线上运行。。。。
需要帮助1213。图纸

anindya 发表于 2022-7-5 19:09:33

尊敬的ymg3先生,我从你那里得到的lisp很好,但在这里,如果我必须更改偏移量,那么我必须更改例程,我必须用新的偏移距离修改它,我可以在excel或任何表格格式中获得结果,其中数据将用链测长度、左偏移坐标、中心线坐标、然后右侧坐标作为首行分隔。
页: 1 [2]
查看完整版本: 中心线坐标和