乐筑天下

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

[编程交流] 在垂直分布图中创建点

[复制链接]

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-5 16:20:17 | 显示全部楼层 |阅读模式
您好,我正在尝试将一个旧帖子中的hanhphuc lisp转换为从像照片一样的直线垂直距离创建一个点。有人能帮我吗?
 
  1. (defun c:test (/ os asin _line p1 p2 d2 l1 ad d ok p ang d3 dir ip )
  2. ; hanhphuc 25.02.2015
  3. (COMMAND "_layer" "_m" "new_point" "_c" "10" "" "")
  4. (setvar 'pdmode 35)
  5. (setq os    (getvar 'osmode)
  6. asin  '((x) (atan (/ x (sqrt (+ 1.0 (* x (- x)))))))
  7. _line '((a lst) (foreach x lst (entmake (list '(0 . "LINE") (cons 10 a) (cons 11 x)))))
  8. ) ;_ end of setq
  9. (setvar 'osmode 1)
  10. (if (and (setq p1 (getpoint "\nPick point A: "))
  11.    (setq p2 (getpoint p1 "\nPick point B: "))
  12.    (setq d2 (getdist p2 "\nInput perpendicular length: "))   
  13.    (setq l1  (list p1 p2)
  14.          ad  (mapcar ''((x) (apply x l1)) '(angle distance))
  15.          d   (cadr ad)
  16.          ok (< d2 d))
  17.    (setq p (getpoint "\nPick side to draw.. "))
  18.    ) ;_ end of and
  19.    (progn (setq ang (asin (/ d2 d))
  20.          d3  (* d (cos ang))
  21.          dir (car ad)
  22.          ip  (apply 'if
  23.                     (vl-list*
  24.                               (minusp (- (* (- (cadr p) (cadr p1)) (cos dir)) (* (- (car p) (car p1)) (sin dir))))
  25.                               (mapcar ''((f) (polar p1 ((eval f) dir ang) d3)) '(- +))
  26.                               ) ;_ end of vl-list*
  27.                     ) ;_ end of apply
  28.          ) ;_ end of setq
  29.    (_line ip l1)
  30.    ) ;_ end of progn
  31. (if (not ok)  (alert "Perpendicular line exceeds length of A to B!") )
  32.    ) ;_ end of if
  33. (setvar 'osmode os)
  34. (command "setvar" "clayer" "0")
  35. (princ)
  36. ) ;_ end of defun

 
谢谢
172021zr03td71mtr7or1m.jpg
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:50:12 | 显示全部楼层
对于一个简单的任务,有很多代码可以考虑这样做:设置角度单位和角度方向查看单位,设置变量angdir和aunits,选择p1,选择p2,获取角度,不需要选择边,因为你总是在角度上加90,但对边方向使用正值或负值。然后,新点只是来自pt2的极坐标。“极轴”命令允许负距离,因此将以与角度相反的方向绘制。
 
  1. (SETVAR "ANGBASE" 0.0)
  2. (SETVAR "ANGDIR" 0)
  3. (SETVAR "AUNITS" 3)
  4. (SETVAR "AUPREC" 6)
  5. (setvar 'osmode 512)
  6. (setq pt1 (getpoint "Pick point A"))
  7. (setq pt2 (getpoint "pick point B"))
  8. (setq ang (angle pt1 pt2))
  9. (setq dist (getreal "Enter dist + for left - for right"))
  10. (setq pt3 (polar pt2 (+ (/ pi 2.0) ang) dist))
  11. (command "line" pt2 pt3 "")
回复

使用道具 举报

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-5 16:52:54 | 显示全部楼层
嗨,比格尔。谢谢你的重播。我对你的代码做了同样的修改。是否可以只创建点而不创建线?
 
  1. (defun c:test (/ pt1 pt2 pt3 ang dist )
  2. (COMMAND "_layer" "_m" "new_point" "_c" "10" "" "")
  3. (setvar 'pdmode 35)
  4. (setvar "unitmode" 0)
  5. (setvar "aunits" 2)
  6. (setvar "angbase" (/ pi 2))
  7. (setvar "angdir" 1)
  8. (setvar "auprec" 4)
  9. (setvar "lunits" 2)
  10. (setvar "luprec" 3)
  11. (setvar "dimzin" 0)
  12. (setq pt1 (getpoint "Pick point A"))
  13. (setq pt2 (getpoint "pick point B"))
  14. (setq ang (angle pt1 pt2))
  15. (setq dist (getreal "Enter dist + for left - for right"))
  16. (setq pt3 (polar pt2 (+ (/ pi 2.0) ang) dist))
  17. (command "line" pt2 pt3 "")
  18. (command "setvar" "clayer" "0")
  19. (princ)
  20. )

 
谢谢
回复

使用道具 举报

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-5 17:19:59 | 显示全部楼层
我修好了。谢谢
 
  1. (defun c:test (/ pt1 pt2 pt3 ang dist )
  2. (COMMAND "_layer" "_m" "new_point" "_c" "10" "" "")
  3. (setvar 'pdmode 35)
  4. (setvar "unitmode" 0)
  5. (setvar "aunits" 2)
  6. (setvar "angbase" (/ pi 2))
  7. (setvar "angdir" 1)
  8. (setvar "auprec" 4)
  9. (setvar "lunits" 2)
  10. (setvar "luprec" 3)
  11. (setvar "dimzin" 0)
  12. (setq pt1 (getpoint "Pick point A"))
  13. (setq pt2 (getpoint "pick point B"))
  14. (setq ang (angle pt1 pt2))
  15. (setq dist (getreal "Enter dist + for left - for right"))
  16. (setq pt3 (polar pt2 (+ (/ pi 2.0) ang) dist))
  17. ;(command "line" pt2 pt3 "")
  18. (command "point" pt3 "")
  19. (command "setvar" "clayer" "0")
  20. (princ)
  21. )
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:21:53 | 显示全部楼层
您应该在开始时添加保存现有单位设置,然后在结束时恢复,如果它们与您通常使用的不同。
 
  1. (setq oldsnap (getvar "osmode"))
  2. .....
  3. (setvar "osmode" oldsnap)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 18:30 , Processed in 1.036368 second(s), 65 queries .

© 2020-2025 乐筑天下

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