乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 21|回复: 12

[编程交流] Autolisp坡度

[复制链接]

24

主题

135

帖子

111

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-6 06:30:52 | 显示全部楼层 |阅读模式
你好
我试图找到一个lisp,它获取2个块的属性“COTA”标记的值。以及这些区块之间的距离。
然后计算斜率。
 
我有一个类似的代码。但不要获取属性值。
  1. (defun c:lp (/ ptoy dist altu perc)
  2. (setq ptox (getpoint "\nClick first point: "))
  3. (setq ptoy (getpoint "\nClick second point: "))
  4. (setq dist (rtos (distance ptox ptoy) 2 2))
  5. (setq altu (- (cadr ptoy) (cadr ptox)))
  6. (setq perc (rtos (* (/ altu (atof dist)) 100) 2 2))
  7. (princ (strcat "Distance = " dist " ; Perc = " perc "%"))
  8. (princ)
  9. );defun

 
请参阅附件。
它更好地解释了我的任务。
 
当做
e、 g.dwg
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 06:37:57 | 显示全部楼层
  1. (defun c:lp2 (/ _sel val b1 b2 f pt e_ diff distB)
  2. (defun _addComma (str sp / a b m i lst)
  3.    (if (numberp (read str))
  4.      (progn
  5.        (setq a   (vl-filename-base str)
  6.              b   (substr str (1+ (strlen a)))
  7.              m   (vl-string->list a)
  8.              i   (length m)
  9.              lst nil
  10.        )
  11.        (while (>= i 3)
  12.          (setq lst (append (list sp
  13.                                  (nth (- i 3) m)
  14.                                  (nth (- i 2) m)
  15.                                  (nth (1- i) m)
  16.                            )
  17.                            lst
  18.                    )
  19.                i   (- i 3)
  20.          )
  21.          lst
  22.        )
  23.        (strcat (substr str 1 i)
  24.                (vl-list->string
  25.                  (if (zerop i)
  26.                    (cdr lst)
  27.                    lst
  28.                  )
  29.                )
  30. ;;;    mod   
  31.                (if b (vl-string-subst "," "." b) "")
  32. ;;    mod   
  33.        )
  34.      )
  35.    )
  36. )      
  37. (Defun _sel (msg / sel)
  38. (princ (Strcat "\n<<Select " msg " Data>>"))
  39. (While (null sel)
  40. (setq sel (ssget "_:S" '((0 . "INSERT")(2 . "SIMB_BOLINHA")))))
  41. (ssname sel 0))
  42. (if
  43. (And (setq val nil
  44.             b1  (_sel "First")
  45.             b2  (_sel "Second")
  46.       )
  47.       (foreach e (list b1 b2)
  48.         (setq f  nil
  49.               pt (cdr (Assoc 10 (entget e)))
  50.         )
  51.         (if (and
  52.               (while
  53.                 (and
  54.                   (null f)
  55.                   (eq (cdr (assoc 0 (setq e_ (entget (setq e (entnext e))))))
  56.                       "ATTRIB"
  57.                   )
  58.                 )
  59.                  (if (eq "COTA" (strcase (cdr (assoc 2 e_))))
  60.                    (Setq f (cdr (Assoc 1 e_)))
  61.                  )
  62.               )
  63.               [b](progn
  64.               (While (vl-string-position 46 f)
  65.                             (setq f (vl-string-subst  "" "." f)))
  66.               (setq f (distof (vl-string-subst "." "," f)))
  67.               (numberp f))
  68.             )[/b]
  69.           (setq val (cons (list f pt) val)
  70.           )
  71.         )
  72.       )
  73.       (vl-every '(lambda ( x ) x )(apply 'append val))
  74.       (= (length val) 2)
  75. )
  76.   (alert (Strcat "\nSlope: " (rtos (* (/ (setq diff (abs (- (Caar val) (caadr val))))
  77.                              (setq distB (distance (cadar val) (cadadr val)))
  78.                           )
  79.                           100.00
  80.                        )
  81.                        2
  82.                        2
  83.                  )
  84.                  "%" " \nDifference of Elevation: "[b] (_addComma (rtos diff 2 2) 46)[/b]
  85.                      " \nDistance between BLocks: "[b] (_addComma (rtos distB 2 2) 46)[/b]
  86.          )
  87.   )(princ "\n<<<Missing Information, Check Attribute Value>>>:")
  88. )
  89.   (princ)
  90. )

 
不使用[根据您的公式]结果的准确性
回复

使用道具 举报

24

主题

135

帖子

111

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-6 06:43:31 | 显示全部楼层
我对结果印象深刻。
这正是我想要的。
 
非常感谢您的快速回复和精彩代码。
 
:值得注意:
 
顺致敬意,
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 06:47:12 | 显示全部楼层
 
不客气,很高兴它对你有用。
 
干杯
回复

使用道具 举报

24

主题

135

帖子

111

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-6 06:53:24 | 显示全部楼层
你好
我试图在代码中添加另外两个信息,除了斜率(%)。
-不均匀度(890,00-891,30)=1.30
-距离(两个块之间的距离)
 
在我的绘图中,大约有三种块,但属性是相同的“COTA”,lisp仅适用于SIMB_BOLINHA块。
是否可以在代码中添加其他名称,SIMB_PONTO,SIMB_CRUZETA?
 
任何帮助都会很好的来吧,伙计们。
提前感谢。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 06:57:24 | 显示全部楼层
 
那是什么?海拔的差异?什么格式?
 
 
  1. (setq sel (ssget "_:S" '((0 . "INSERT")(2 . [b][color="blue"]"SIMB_BOLINHA,SIMB_PONTO,SIMB_CRUZETA"[/color][/b]))))
回复

使用道具 举报

24

主题

135

帖子

111

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-6 07:05:04 | 显示全部楼层
  1. (setq sel (ssget "_:S" '((0 . "INSERT")(2 . "SIMB_BOLINHA[color="red"],[/color]SIMB_PONTO[color="red"],[/color]SIMB_CRUZETA"))))

 
哦我这样做了,但我忘记了逗号。非常感谢。
 
是的,pBe。这是海拔的差异。
格式为十进制(在巴西,十进制标记为逗号。)
 
当做
回复

使用道具 举报

24

主题

135

帖子

111

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-6 07:07:25 | 显示全部楼层
你好,pBe
我不想给你带来不便,我想再问你一件事。
我需要在代码中加入另外两个信息,除了斜率(%)。
 
-高程差
-块之间的距离。
 
如果你能帮助我,我将非常感激,我真的需要代码中的这些信息。
 
提前感谢
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 07:15:31 | 显示全部楼层
 
我已经在一周前Madruga_SP.->[上一次由pBe编辑;2013年5月27日上午09:57]的#6号帖子上做了修改
回复

使用道具 举报

24

主题

135

帖子

111

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-6 07:16:40 | 显示全部楼层
你好,pBe
我注意到你更新了代码。
 
现在,我知道了,因为没用。
当为千单位时,属性值由句点“”分隔
e、 g 1.200,00
 
对不起打扰你了,最后一次你能帮我吗?
 
我向你保证。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-10 15:23 , Processed in 0.452948 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表