乐筑天下

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

[编程交流] 自动lisp例程对分

[复制链接]

1

主题

1

帖子

0

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:04:38 | 显示全部楼层 |阅读模式
大家好,
 
我需要平分一条线,并绘制一条线垂直于中点和用户定义的长度使用自动LISP例程?非常感谢你的帮助。
 
谢谢
拉杰什
回复

使用道具 举报

BKT

1

主题

124

帖子

123

银币

初来乍到

Rank: 1

铜币
7
发表于 2022-7-5 17:14:55 | 显示全部楼层
Rajesh,看看这一页底部的第一条“相似的线索”。有一个Lisp程序的单词叫per。lsp效果很好。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 17:26:49 | 显示全部楼层

 
  1. (defun c:Test (/ l s e 1p 2p 3p ang c g)
  2. ;; Tharwat 23.Dec.2015 ;;
  3. (if (and (setq l (getdist "\nSpecify length of line :"))
  4.           (setq s (car (entsel "\nSelect Line :")))
  5.           (eq (cdr (assoc 0 (setq e (entget s)))) "LINE")
  6.           (setq 1p  (cdr (assoc 10 e))
  7.                 2p  (cdr (assoc 11 e))
  8.                 ang (angle 1p 2p)
  9.                 c   (mapcar '(lambda (q p) (/ (+ q p) 2.)) 1p 2p)
  10.           )
  11.           (princ "\nSpecify distination :")
  12.      )
  13.    (progn
  14.      (while (eq 5 (car (setq g (grread t 13 0))))
  15.        (redraw)
  16.        (grdraw c
  17.                (setq 3p
  18.                       (polar c
  19.                              (apply (if (> 0 (sin (- ang (angle 1p (cadr g)))))
  20.                                       '+
  21.                                       '-
  22.                                     )
  23.                                     (list ang (* pi 0.5))
  24.                              )
  25.                              l
  26.                       )
  27.                )
  28.                -1
  29.                0
  30.        )
  31.      )
  32.      (if (member (car g) '(2 3 25))
  33.        (entmake
  34.          (list '(0 . "LINE") (cons 10 c) (cons 11 3p))
  35.        )
  36.      )
  37.    )
  38. )
  39. (redraw)
  40. (princ)
  41. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:32:59 | 显示全部楼层
正如BKT所建议的,请参阅此线程中的响应。
回复

使用道具 举报

2

主题

9

帖子

7

银币

初来乍到

Rank: 1

铜币
11
发表于 2022-7-5 17:40:25 | 显示全部楼层
请问这对多段线有用吗?我主要使用多段线。。。
回复

使用道具 举报

BKT

1

主题

124

帖子

123

银币

初来乍到

Rank: 1

铜币
7
发表于 2022-7-5 17:49:42 | 显示全部楼层
阅读李的帖子就在你的帖子上方,然后转到他指出的帖子并尝试他的第一个代码。我认为只要你的多段线只有两个顶点,它就会工作得很好。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:04:16 | 显示全部楼层
BKT有几种方法可以拾取pline的一部分,因此在这种情况下,这将给出2分之间的答案。李?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:11:03 | 显示全部楼层
 
 
以下是与直线和二维多段线兼容的修改版本:
[code](定义c:per(/ent enx par pt1 pt2 sel)(while(progn(setvar’errno)(setq sel(entsel“\n选择直线或多段线段:”))(cond((=7(getvar’errno))(princ“\n已丢失,请重试。”)((null sel)nil)((progn(setq ent(car sel)enx(entget ent))(not(wcmatch(cdr(assoc 0 enx))“LINE,LWPOLYLINE”))(princ“\n所选对象不是直线或多段线。”)((if(=“LINE”(cdr(assoc 0 enx)))(setq pt1(trans(cdr(assoc 10 enx))0 1)pt2(trans(cdr(assoc 11 enx))0 1))(setq par(fix(+1e-8(vlax curve getparamatpoint ent(vlax curve getclosestpoint to ent(trans(cadr sel)1 0 905;)Ή)pt1(vlax curve getpointatparam ent par)pt2(vlax curve getpointatparam ent(1+par))(vl cmdf“.line”“\u non”(mapcar)(lambda(a b)(/(+a b)2.0))pt1 pt2)(strcat“
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 09:14 , Processed in 0.415168 second(s), 68 queries .

© 2020-2025 乐筑天下

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