乐筑天下

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

[编程交流] AutoLISP代码不适用

[复制链接]

1

主题

1

帖子

0

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-10 21:12:34 | 显示全部楼层 |阅读模式
您好,我编写了这段代码,它在多段线(具有多个顶点)的内部或外部绘制三角形,但根据缩放级别,它会给出越来越好/越差的结果(缩放越大,效果越好)。我所说的缩放级别是这样的,当多段线占据整个屏幕时,它确实会工作,但会出现一些错误,如果减少缩放,则它不会工作,而当增加缩放时,它会工作得很好。这可能取决于三角形(用户输入)与缩放级别的相对大小。有没有办法纠正这种行为?
  1. (defun c:vert (/ obj1 oft wid spa ip obj2 len l1 l2 sp pt1 pt2 ptm slopeP slopeM ptt1 ptt2 pttR pttL ptt pss it)
  2. (vl-load-com)
  3. (setq
  4. obj1 (ssget C)
  5. oft (float (getreal "Triangle height: "))
  6. wid (float (getreal "Triangle width: "))
  7. spa (float (getreal "Distance between triangles: "))
  8. )
  9. (setq ip (strcase (getstring "R(ight) or L(eft): ")))
  10. (setq
  11. obj2 (vlax-ename->vla-object (ssname obj1 0))
  12. len (vlax-get-property obj2 "length")
  13. l1 (float 0)
  14. l2 (float wid)
  15. )
  16. (while (< l1 len)
  17. (setq
  18. sp (vlax-curve-getPointAtDist obj2 0)
  19. pt1 (vlax-curve-getPointAtDist obj2 l1)
  20. pt2 (vlax-curve-getPointAtDist obj2 l2)
  21. ptm (vlax-curve-getPointAtDist obj2 (/ (+ l1 l2) 2))
  22. slopeP (+ (if (= (car pt2) (car pt1)) (/ pi 2) (atan (/ (- (nth 1 pt2) (nth 1 pt1)) (- (nth 0 pt2) (nth 0 pt1))))) (/ pi 2))
  23. slopeM (- (if (= (car pt2) (car pt1)) (/ pi 2) (atan (/ (- (nth 1 pt2) (nth 1 pt1)) (- (nth 0 pt2) (nth 0 pt1))))) (/ pi 2))
  24. ptt1 (list (+ (nth 0 ptm) (* oft (cos slopeP))) (+ (nth 1 ptm) (* oft (sin slopeP))))
  25. ptt2 (list (+ (nth 0 ptm) (* oft (cos slopeM))) (+ (nth 1 ptm) (* oft (sin slopeM))))
  26. pttR (if (< (- (* (- (nth 0 pt2) (nth 0 pt1)) (- (nth 1 ptt1) (nth 1 pt1))) (* (- (nth 0 ptt1) (nth 0 pt1)) (- (nth 1 pt2) (nth 1 pt1)))) 0) ptt1 ptt2)
  27. pttL (if (> (- (* (- (nth 0 pt2) (nth 0 pt1)) (- (nth 1 ptt1) (nth 1 pt1))) (* (- (nth 0 ptt1) (nth 0 pt1)) (- (nth 1 pt2) (nth 1 pt1)))) 0) ptt1 ptt2)
  28. ptt (if (= ip "R") pttR pttL)
  29. )
  30. (command "_.pline" pt1 ptt pt2 "")
  31. (setq
  32. l1 (float (+ l1 wid spa))
  33. l2 (float (+ l2 spa wid))
  34. )
  35. )
  36. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-1-31 16:05 , Processed in 0.140407 second(s), 54 queries .

© 2020-2025 乐筑天下

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